@almadar/agent 1.2.2 → 1.3.0
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/agent/index.d.ts +2 -2
- package/dist/agent/index.js +83 -278
- package/dist/agent/index.js.map +1 -1
- package/dist/{index-D-Ahuo6F.d.ts → index-DNe7JzkE.d.ts} +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +84 -281
- package/dist/index.js.map +1 -1
- package/dist/{orbital-subagent-cNfTLdXQ.d.ts → orbital-subagent-CiOIu9Ax.d.ts} +25 -25
- package/dist/tools/index.d.ts +28 -257
- package/dist/tools/index.js +84 -282
- package/dist/tools/index.js.map +1 -1
- package/package.json +4 -4
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/orbitals/cache/orbital-fingerprint.ts","../../src/orbitals/cache/structural-templates.ts","../../src/orbitals/cache/prompt-assembler.ts","../../src/orbitals/cache/index.ts","../../src/tools/execute.ts","../../src/tools/validate-schema.ts","../../src/tools/generate-schema.ts","../../src/orbitals/combiner/index.ts","../../src/orbitals/domain-language/index.ts","../../src/orbitals/domain-language/prompts/odl-syntax.ts","../../src/orbitals/domain-language/prompts/odl-examples.ts","../../src/orbitals/domain-language/prompts/odl-patterns.ts","../../src/orbitals/domain-language/prompts/odl-to-schema.ts","../../src/tools/finish-task.ts","../../src/tools/domain-orbital.ts","../../src/orbitals/generation/orbital-generator.ts","../../src/tools/orbital-subagent.ts","../../src/tools/trait-subagent.ts","../../src/tools/combine-schemas.ts","../../src/tools/schema-chunking.ts","../../src/tools/design-transition.ts","../../src/tools/github.ts","../../src/tools/index.ts"],"names":["isEntityReference","getInlineEntity","getTraitName","resolve","path2","tool","fs","z","execAsync","promisify","exec","path3","fs2","path4","getEntityName","AgentDomainCategorySchema","LLMClient","path","files","path5","fss","isOrbitalDefinition","CACHE_TTL_MS","CACHE_VERSION","generateFingerprint","crypto","getCached"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Orbital Fingerprinting for Caching\n *\n * Computes structural fingerprints for Orbital Units to enable\n * prompt caching based on similar structures.\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalUnit, OrbitalEntity, EntityField, OrbitalDefinition, EntityRef } from '@almadar/core/types';\nimport { isOrbitalDefinition, getTraitName, isEntityReference } from '@almadar/core/types';\n\n/**\n * Get entity from EntityRef for signature computation.\n * Returns null if entity is a reference string.\n */\nfunction getInlineEntity(entity: EntityRef): OrbitalEntity | null {\n if (isEntityReference(entity)) {\n return null;\n }\n return entity;\n}\n\n// ============================================================================\n// Fingerprint Computation\n// ============================================================================\n\n/**\n * Compute a structural fingerprint for an Orbital Unit.\n * Units with the same fingerprint can share cached prompts.\n * Only works with full orbital definitions (not references).\n */\nexport function computeOrbitalFingerprint(orbital: OrbitalUnit): string {\n // Note: Orbital is now always OrbitalDefinition (no more OrbitalReference type)\n // The isOrbitalDefinition check is kept for backwards compatibility but always true\n\n // Get inline entity or use fallback for references\n const inlineEntity = getInlineEntity(orbital.entity);\n\n // 1. Entity structure signature\n const entitySig = inlineEntity ? computeEntitySignature(inlineEntity) : 'ref';\n\n // 2. Trait categories (sorted)\n const traitSig = orbital.traits\n .map(getTraitName)\n .sort()\n .join(',');\n\n // 3. Persistence type\n const persistSig = inlineEntity?.persistence || 'persistent';\n\n return `${persistSig}:e[${entitySig}]_t[${traitSig}]`;\n}\n\n/**\n * Compute entity structure signature based on field types.\n */\nexport function computeEntitySignature(entity: OrbitalEntity): string {\n const typeCounts: Record<string, number> = {};\n\n for (const field of entity.fields) {\n const baseType = getFieldTypeKey(field);\n typeCounts[baseType] = (typeCounts[baseType] || 0) + 1;\n }\n\n return Object.entries(typeCounts)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([type, count]) => `${type}:${count}`)\n .join('-');\n}\n\n/**\n * Get field type key for fingerprinting.\n */\nfunction getFieldTypeKey(field: EntityField): string {\n if (field.type === 'relation') {\n const cardinality = field.relation?.cardinality || 'one';\n return `rel:${cardinality}`;\n }\n if (field.type === 'enum') {\n return 'enum';\n }\n return field.type;\n}\n\n// ============================================================================\n// Fingerprint Matching\n// ============================================================================\n\n/**\n * Check if two fingerprints are structurally similar.\n * Similar fingerprints can share template guidance.\n */\nexport function fingerprintsMatch(fp1: string, fp2: string): boolean {\n return fp1 === fp2;\n}\n\n/**\n * Extract fingerprint components.\n */\nexport function parseFingerprint(fingerprint: string): {\n persistence: string;\n entity: string;\n traits: string[];\n patterns: string[];\n} {\n const match = fingerprint.match(/^(\\w+):e\\[([^\\]]*)\\]_t\\[([^\\]]*)\\]_p\\[([^\\]]*)\\]$/);\n if (!match) {\n return { persistence: 'unknown', entity: '', traits: [], patterns: [] };\n }\n\n return {\n persistence: match[1],\n entity: match[2],\n traits: match[3] ? match[3].split(',') : [],\n patterns: match[4] ? match[4].split(',') : [],\n };\n}\n\n/**\n * Compute similarity score between two fingerprints (0-1).\n */\nexport function fingerprintSimilarity(fp1: string, fp2: string): number {\n if (fp1 === fp2) return 1.0;\n\n const p1 = parseFingerprint(fp1);\n const p2 = parseFingerprint(fp2);\n\n let score = 0;\n let total = 4;\n\n // Persistence match\n if (p1.persistence === p2.persistence) score += 1;\n\n // Entity structure match\n if (p1.entity === p2.entity) score += 1;\n\n // Trait overlap\n const traitOverlap = p1.traits.filter((t) => p2.traits.includes(t)).length;\n const traitUnion = new Set([...p1.traits, ...p2.traits]).size;\n if (traitUnion > 0) {\n score += traitOverlap / traitUnion;\n } else {\n score += 1;\n }\n\n // Pattern overlap\n const patternOverlap = p1.patterns.filter((p) => p2.patterns.includes(p)).length;\n const patternUnion = new Set([...p1.patterns, ...p2.patterns]).size;\n if (patternUnion > 0) {\n score += patternOverlap / patternUnion;\n } else {\n score += 1;\n }\n\n return score / total;\n}\n","/**\n * Structural Templates for Cached Generation\n *\n * Pre-defined templates for common structural patterns.\n *\n * @packageDocumentation\n */\n\n// ============================================================================\n// Template Types\n// ============================================================================\n\nexport interface StructuralTemplate {\n /** Fingerprint pattern this template matches */\n fingerprintPattern: string;\n /** Human-readable name */\n name: string;\n /** Template guidance for generation */\n guidance: string;\n /** Example sections */\n exampleSections: string[];\n}\n\n// ============================================================================\n// Common Templates\n// ============================================================================\n\n/**\n * Templates for common structural patterns.\n */\nexport const STRUCTURAL_TEMPLATES: StructuralTemplate[] = [\n {\n fingerprintPattern: 'persistent:e[*]_t[FormSubmission*]_p[*form*]',\n name: 'CRUD Form Entity',\n guidance: `\nThis is a standard CRUD entity with form submission.\nGenerate pages for:\n- List view with search/filter\n- Create form with validation\n- Edit form with existing data\n- Detail view with actions\n`,\n exampleSections: ['page-header', 'search-filters', 'entity-list', 'form-section', 'form-actions'],\n },\n {\n fingerprintPattern: 'persistent:e[*]_t[*Workflow*]_p[*]',\n name: 'Workflow Entity',\n guidance: `\nThis entity has workflow/state machine behavior.\nInclude:\n- Status indicators in list view\n- Transition actions in detail view\n- Workflow history display\n`,\n exampleSections: ['page-header', 'entity-table', 'entity-detail', 'form-actions'],\n },\n {\n fingerprintPattern: 'runtime:e[*]_t[*]_p[dashboard*]',\n name: 'Dashboard View',\n guidance: `\nThis is a runtime dashboard entity.\nFocus on:\n- Statistics and metrics display\n- Charts and visualizations\n- Recent activity lists\n`,\n exampleSections: ['page-header', 'dashboard-stats', 'chart', 'entity-cards'],\n },\n {\n fingerprintPattern: '*:e[*]_t[Platformer*]_p[game*]',\n name: 'Game Entity',\n guidance: `\nThis is a game entity with platformer mechanics.\nInclude:\n- Game canvas for rendering\n- HUD for score/health display\n- Controls panel for input\n`,\n exampleSections: ['game-canvas', 'game-hud', 'game-controls'],\n },\n];\n\n// ============================================================================\n// Template Matching\n// ============================================================================\n\n/**\n * Find matching templates for a fingerprint.\n */\nexport function findMatchingTemplates(fingerprint: string): StructuralTemplate[] {\n return STRUCTURAL_TEMPLATES.filter((template) =>\n matchesPattern(fingerprint, template.fingerprintPattern)\n );\n}\n\n/**\n * Get the best matching template for a fingerprint.\n */\nexport function getBestTemplate(fingerprint: string): StructuralTemplate | null {\n const matches = findMatchingTemplates(fingerprint);\n return matches.length > 0 ? matches[0] : null;\n}\n\n/**\n * Check if fingerprint matches a pattern.\n * Patterns support * as wildcard.\n */\nfunction matchesPattern(fingerprint: string, pattern: string): boolean {\n // Convert pattern to regex\n const regexStr = pattern\n .replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&') // Escape special chars\n .replace(/\\*/g, '.*'); // Replace * with .*\n\n const regex = new RegExp(`^${regexStr}$`);\n return regex.test(fingerprint);\n}\n\n/**\n * Get guidance for a fingerprint.\n */\nexport function getTemplateGuidance(fingerprint: string): string {\n const template = getBestTemplate(fingerprint);\n if (template) {\n return template.guidance;\n }\n\n return `\nNo specific template matched. Use standard patterns:\n- page-header for page titles\n- entity-list or entity-table for list views\n- form-section for input forms\n- entity-detail for detail views\n`;\n}\n","/**\n * Prompt Assembler for Cache-Aware Prompt Construction\n *\n * Assembles prompts with cache markers for efficient LLM caching.\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalUnit, OrbitalDefinition, EntityRef, Entity } from '@almadar/core/types';\nimport { isOrbitalDefinition, getTraitName, isEntityReference } from '@almadar/core/types';\n\n/**\n * Get entity name safely from EntityRef\n */\nfunction getEntityName(entity: EntityRef): string {\n if (isEntityReference(entity)) {\n return entity.replace('.entity', '');\n }\n return entity.name;\n}\n\n/**\n * Get inline entity for detailed access, or null for references\n */\nfunction getInlineEntity(entity: EntityRef): Entity | null {\n if (isEntityReference(entity)) {\n return null;\n }\n return entity;\n}\nimport { computeOrbitalFingerprint } from './orbital-fingerprint.js';\nimport { getTemplateGuidance, getBestTemplate } from './structural-templates.js';\nimport type { CacheableBlock } from '@almadar/llm';\n\n// ============================================================================\n// Cache Markers\n// ============================================================================\n\n/** Anthropic cache control marker (deprecated - use CacheableBlock instead) */\nconst CACHE_BREAK = '<!-- cache_break -->';\n\n// ============================================================================\n// Context Helpers\n// ============================================================================\n\n/**\n * Build context section from orbital's domainContext and design fields.\n * Passes through existing context to the subagent.\n */\nfunction buildContextSection(orbital: OrbitalDefinition): string {\n const parts: string[] = [];\n\n if (orbital.domainContext) {\n const ctx = orbital.domainContext;\n parts.push(`DomainContext: category=${ctx.category || 'business'}`);\n if (ctx.vocabulary) {\n parts.push(`Vocabulary: ${JSON.stringify(ctx.vocabulary)}`);\n }\n if (ctx.requestFragment) {\n parts.push(`RequestFragment: \"${ctx.requestFragment}\"`);\n }\n }\n\n if (orbital.design) {\n const d = orbital.design;\n if (d.style) parts.push(`Style: ${d.style}`);\n if (d.uxHints) {\n const hints = d.uxHints;\n if (hints.flowPattern) parts.push(`FlowPattern: ${hints.flowPattern}`);\n if (hints.listPattern) parts.push(`ListPattern: ${hints.listPattern}`);\n if (hints.formPattern) parts.push(`FormPattern: ${hints.formPattern}`);\n }\n }\n\n return parts.length > 0 ? `Context: ${parts.join(', ')}\\n` : '';\n}\n\n// ============================================================================\n// Prompt Assembly\n// ============================================================================\n\nexport interface AssembledPrompt {\n /** The full prompt text */\n prompt: string;\n /** Fingerprint for this orbital */\n fingerprint: string;\n /** Whether a cached template was used */\n usedCachedTemplate: boolean;\n /** Template name if used */\n templateName?: string;\n}\n\n/**\n * Cache-aware assembled prompt with separate blocks.\n */\nexport interface CacheableAssembledPrompt {\n /** System blocks (cacheable) */\n systemBlocks: CacheableBlock[];\n /** User blocks (usually not cacheable) */\n userBlocks: CacheableBlock[];\n /** Fingerprint for this orbital */\n fingerprint: string;\n /** Whether a cached template was used */\n usedCachedTemplate: boolean;\n /** Template name if used */\n templateName?: string;\n}\n\n/**\n * Assemble a prompt for orbital unit generation.\n * Organizes content to maximize cache hits.\n * Only works with full orbital definitions (not references).\n */\nexport function assembleOrbitalPrompt(\n orbital: OrbitalUnit,\n baseSystemPrompt: string\n): AssembledPrompt {\n const fingerprint = computeOrbitalFingerprint(orbital);\n const template = getBestTemplate(fingerprint);\n const guidance = getTemplateGuidance(fingerprint);\n\n // Note: Orbital is now always OrbitalDefinition (no more OrbitalReference type)\n // This check is kept for backwards compatibility but always passes\n\n // Structure prompt for optimal caching:\n // 1. Static system prompt (cacheable across all calls)\n // 2. Template guidance (cacheable for similar structures)\n // 3. Specific orbital details (unique per call)\n\n const contextSection = buildContextSection(orbital);\n\n // Get entity details safely\n const entityName = getEntityName(orbital.entity);\n const inlineEntity = getInlineEntity(orbital.entity);\n const persistence = inlineEntity?.persistence || 'persistent';\n const fieldNames = inlineEntity?.fields.map((f: { name: string }) => f.name).join(', ') || 'N/A';\n\n const prompt = `${baseSystemPrompt}\n\n${CACHE_BREAK}\n\n## Structural Template\n${guidance}\n\n${CACHE_BREAK}\n\n## Current Orbital Unit\nName: ${orbital.name}\nEntity: ${entityName}\nPersistence: ${persistence}\nFields: ${fieldNames}\nTraits: ${orbital.traits.map(getTraitName).join(', ')}\n${contextSection}\nGenerate a complete FullOrbitalUnit with:\n- Full field definitions with types and validation\n- Trait state machines with transitions and effects\n- Business rule validation using \"guard\" (singular, NOT \"guards\") S-expression on SAVE transitions\n- Pages with trait references\n- domainContext with category, vocabulary, and requestFragment\n- design with style and uxHints (flowPattern, listPattern, formPattern)\n`;\n\n return {\n prompt,\n fingerprint,\n usedCachedTemplate: template !== null,\n templateName: template?.name,\n };\n}\n\n/**\n * Assemble cacheable blocks for Anthropic prompt caching.\n *\n * Structure:\n * - System block 1: Base system prompt (highly cacheable, rarely changes)\n * - System block 2: Template guidance (cacheable per fingerprint)\n * - User block: Specific orbital details (not cached)\n *\n * Only works with full orbital definitions (not references).\n */\nexport function assembleCacheableOrbitalPrompt(\n orbital: OrbitalUnit,\n baseSystemPrompt: string\n): CacheableAssembledPrompt {\n const fingerprint = computeOrbitalFingerprint(orbital);\n const template = getBestTemplate(fingerprint);\n const guidance = getTemplateGuidance(fingerprint);\n\n // Note: Orbital is now always OrbitalDefinition (no more OrbitalReference type)\n // This check is kept for backwards compatibility but always passes\n\n // System blocks - mark as cacheable\n const systemBlocks: CacheableBlock[] = [\n // Block 1: Base system prompt (very stable, max cache benefit)\n {\n type: 'text',\n text: baseSystemPrompt,\n cache_control: { type: 'ephemeral' },\n },\n // Block 2: Template guidance (stable per fingerprint)\n {\n type: 'text',\n text: `\\n## Structural Template\\n${guidance}`,\n cache_control: { type: 'ephemeral' },\n },\n ];\n\n // Build context section if available\n const contextSection = buildContextSection(orbital);\n\n // Build cross-orbital connectivity section\n const emitsSection = orbital.emits?.length ? `Emits: ${orbital.emits.join(', ')}` : '';\n const listensSection = orbital.listens?.length\n ? `Listens: ${orbital.listens.map((l) => `${l.event}→${l.triggers}`).join(', ')}`\n : '';\n const connectivitySection = [emitsSection, listensSection].filter(Boolean).join('\\n');\n\n // Get entity details safely\n const entityName = getEntityName(orbital.entity);\n const inlineEntity = getInlineEntity(orbital.entity);\n const persistence = inlineEntity?.persistence || 'persistent';\n const fieldNames = inlineEntity?.fields.map((f: { name: string }) => f.name).join(', ') || 'N/A';\n\n // User block - unique per request (not cached)\n const userBlocks: CacheableBlock[] = [\n {\n type: 'text',\n text: `## Current Orbital Unit\nName: ${orbital.name}\nEntity: ${entityName}\nPersistence: ${persistence}\nFields: ${fieldNames}\nTraits: ${orbital.traits.map(getTraitName).join(', ')}\n${contextSection}${connectivitySection ? `\\n${connectivitySection}` : ''}\nGenerate a complete FullOrbitalUnit with:\n- Full field definitions with types and validation\n- Trait state machines with transitions and effects\n- Business rule validation using \"guard\" (singular, NOT \"guards\") S-expression on SAVE transitions\n- Pages with trait references\n- domainContext with category, vocabulary, and requestFragment\n- design with style and uxHints (flowPattern, listPattern, formPattern)\n- PRESERVE emits and listens from input if provided`,\n },\n ];\n\n return {\n systemBlocks,\n userBlocks,\n fingerprint,\n usedCachedTemplate: template !== null,\n templateName: template?.name,\n };\n}\n\n/**\n * Assemble prompts for multiple orbitals.\n * Groups by fingerprint for batch efficiency.\n */\nexport function assembleMultiOrbitalPrompts(\n orbitals: OrbitalUnit[],\n baseSystemPrompt: string\n): Map<string, AssembledPrompt[]> {\n const grouped = new Map<string, AssembledPrompt[]>();\n\n for (const orbital of orbitals) {\n const assembled = assembleOrbitalPrompt(orbital, baseSystemPrompt);\n const existing = grouped.get(assembled.fingerprint) || [];\n existing.push(assembled);\n grouped.set(assembled.fingerprint, existing);\n }\n\n return grouped;\n}\n\n/**\n * Get cache statistics for a set of orbitals.\n */\nexport function getCacheStats(orbitals: OrbitalUnit[]): {\n totalOrbitals: number;\n uniqueFingerprints: number;\n potentialCacheHits: number;\n templateMatches: number;\n} {\n const fingerprints = orbitals.map(computeOrbitalFingerprint);\n const unique = new Set(fingerprints);\n\n let templateMatches = 0;\n for (const orbital of orbitals) {\n const fp = computeOrbitalFingerprint(orbital);\n if (getBestTemplate(fp)) {\n templateMatches++;\n }\n }\n\n return {\n totalOrbitals: orbitals.length,\n uniqueFingerprints: unique.size,\n potentialCacheHits: orbitals.length - unique.size,\n templateMatches,\n };\n}\n\n","/**\n * Orbital Cache Module\n *\n * Exports fingerprinting, templates, and prompt assembly utilities\n * for efficient LLM prompt caching.\n *\n * @packageDocumentation\n */\n\n// ============================================================================\n// Fingerprinting\n// ============================================================================\n\nexport {\n computeOrbitalFingerprint,\n computeEntitySignature,\n fingerprintsMatch,\n parseFingerprint,\n fingerprintSimilarity,\n} from './orbital-fingerprint.js';\n\n// ============================================================================\n// Structural Templates\n// ============================================================================\n\nexport {\n type StructuralTemplate,\n STRUCTURAL_TEMPLATES,\n findMatchingTemplates,\n getBestTemplate,\n getTemplateGuidance,\n} from './structural-templates.js';\n\n// ============================================================================\n// Prompt Assembly\n// ============================================================================\n\nexport {\n type AssembledPrompt,\n type CacheableAssembledPrompt,\n assembleOrbitalPrompt,\n assembleCacheableOrbitalPrompt,\n assembleMultiOrbitalPrompts,\n getCacheStats,\n} from './prompt-assembler.js';\n","/**\n * Execute Tool\n *\n * Sandboxed shell command execution within a workspace directory.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport { spawn } from 'child_process';\nimport * as path from 'path';\n\n/**\n * Dangerous commands that should be blocked when targeting outside workspace.\n */\nconst DANGEROUS_COMMANDS = [\n 'rm', 'rmdir', 'mv', 'cp', 'ln', 'chmod', 'chown', 'touch', 'mkdir',\n];\n\n/**\n * Commands that should be blocked entirely for security.\n */\nconst BLOCKED_COMMANDS = [\n 'curl', 'wget', 'nc', 'netcat', 'ssh', 'scp', 'rsync', 'ftp', 'sftp',\n 'sudo', 'su', 'doas', 'pkexec', 'eval', 'exec', 'source',\n 'crontab', 'at', 'systemctl', 'service',\n 'dd', 'mkfs', 'fdisk', 'mount', 'umount',\n 'iptables', 'firewall-cmd',\n 'useradd', 'userdel', 'usermod', 'groupadd', 'passwd',\n];\n\n/**\n * Check if a command contains paths outside the workspace.\n * Returns an error message if unsafe, null if safe.\n */\nexport function validateCommandPaths(command: string, workDir: string): string | null {\n const normalizedWorkDir = path.resolve(workDir);\n\n const firstWord = command.trim().split(/[\\s;|&]/)[0];\n if (BLOCKED_COMMANDS.includes(firstWord)) {\n return `Command blocked: \"${firstWord}\" is not allowed for security reasons.`;\n }\n\n // Block shell output/append redirections to absolute paths outside workspace\n const redirectPattern = /(?:>>?|[12&]>>?)\\s*(\\/([\\w.-]+\\/)*[\\w.-]+)/g;\n let redirectMatch;\n while ((redirectMatch = redirectPattern.exec(command)) !== null) {\n const targetPath = redirectMatch[1];\n if (targetPath !== '/dev/null') {\n const resolvedPath = path.resolve(targetPath);\n if (!resolvedPath.startsWith(normalizedWorkDir)) {\n return `Command blocked: output redirection to \"${targetPath}\" is outside workspace.`;\n }\n }\n }\n\n // Block tee command writing outside workspace\n const teePattern = /\\btee\\s+(?:-a\\s+)?(\\/([\\w.-]+\\/)*[\\w.-]+)/g;\n let teeMatch;\n while ((teeMatch = teePattern.exec(command)) !== null) {\n const targetPath = teeMatch[1];\n const resolvedPath = path.resolve(targetPath);\n if (!resolvedPath.startsWith(normalizedWorkDir)) {\n return `Command blocked: tee to \"${targetPath}\" is outside workspace.`;\n }\n }\n\n // Check dangerous commands for path arguments\n for (const cmd of DANGEROUS_COMMANDS) {\n const cmdPattern = new RegExp(`\\\\b${cmd}\\\\s+[^|;&]*`, 'g');\n let cmdMatch;\n while ((cmdMatch = cmdPattern.exec(command)) !== null) {\n const cmdWithArgs = cmdMatch[0];\n const pathsInCmd = cmdWithArgs.match(/\\/([\\w.-]+\\/)*[\\w.-]+/g) || [];\n for (const foundPath of pathsInCmd) {\n if (foundPath === '/dev/null' || foundPath.startsWith('/tmp/')) continue;\n const resolvedPath = path.resolve(foundPath);\n if (!resolvedPath.startsWith(normalizedWorkDir)) {\n return `Command blocked: \"${cmd}\" with path \"${foundPath}\" is outside workspace.`;\n }\n }\n }\n }\n\n // Check absolute paths\n const absolutePathPattern = /(?:^|[\\s'\"=])(\\/([\\w.-]+\\/)+[\\w.-]*)/g;\n let match;\n while ((match = absolutePathPattern.exec(command)) !== null) {\n const foundPath = match[1];\n if (foundPath.startsWith('/dev/') || foundPath.startsWith('/tmp/') || foundPath === '/dev/null') {\n continue;\n }\n const resolvedPath = path.resolve(foundPath);\n if (!resolvedPath.startsWith(normalizedWorkDir)) {\n return `Command blocked: path \"${foundPath}\" is outside workspace.`;\n }\n }\n\n // Block cd to outside workspace\n if (command.includes('cd /') && !command.includes(`cd ${normalizedWorkDir}`)) {\n const cdMatch = command.match(/cd\\s+(\\/[^\\s;|&]+)/);\n if (cdMatch) {\n const cdTarget = path.resolve(cdMatch[1]);\n if (!cdTarget.startsWith(normalizedWorkDir)) {\n return `Command blocked: \"cd ${cdMatch[1]}\" would navigate outside workspace.`;\n }\n }\n }\n\n // Block complex command substitution\n if (command.includes('`') || /\\$\\([^)]+\\)/.test(command)) {\n const simpleSubstitutions = /\\$\\((pwd|echo|date|whoami)\\)/g;\n const strippedCommand = command.replace(simpleSubstitutions, '');\n if (strippedCommand.includes('`') || /\\$\\([^)]+\\)/.test(strippedCommand)) {\n return `Command blocked: complex command substitution detected.`;\n }\n }\n\n return null;\n}\n\n/**\n * Create an execute tool that runs shell commands in the workspace directory.\n */\nexport function createExecuteTool(workDir: string) {\n const normalizedWorkDir = path.resolve(workDir);\n\n return tool(\n async ({ command, timeout = 60000 }) => {\n const validationError = validateCommandPaths(command, workDir);\n if (validationError) {\n return validationError;\n }\n\n return new Promise<string>((resolve) => {\n const parts = command.split(' ');\n const cmd = parts[0];\n const args = parts.slice(1);\n\n const proc = spawn(cmd, args, {\n cwd: workDir,\n shell: true,\n timeout,\n env: {\n PATH: process.env.PATH,\n NODE_PATH: process.env.NODE_PATH,\n NVM_DIR: process.env.NVM_DIR,\n NVM_BIN: process.env.NVM_BIN,\n SHELL: '/bin/sh',\n TERM: 'dumb',\n LANG: process.env.LANG || 'en_US.UTF-8',\n CI: 'true',\n HOME: normalizedWorkDir,\n TMPDIR: path.join(normalizedWorkDir, '.tmp'),\n TEMP: path.join(normalizedWorkDir, '.tmp'),\n TMP: path.join(normalizedWorkDir, '.tmp'),\n HISTFILE: '/dev/null',\n npm_config_cache: path.join(normalizedWorkDir, '.npm-cache'),\n npm_config_prefix: normalizedWorkDir,\n },\n });\n\n let stdout = '';\n let stderr = '';\n\n proc.stdout?.on('data', (data) => {\n stdout += data.toString();\n });\n\n proc.stderr?.on('data', (data) => {\n stderr += data.toString();\n });\n\n proc.on('error', (error) => {\n resolve(`Error executing command: ${error.message}`);\n });\n\n proc.on('close', (code) => {\n const output = stdout + (stderr ? `\\n\\nStderr:\\n${stderr}` : '');\n if (code === 0) {\n resolve(output || 'Command completed successfully (no output)');\n } else {\n resolve(`Command exited with code ${code}\\n\\n${output}`);\n }\n });\n\n setTimeout(() => {\n proc.kill('SIGTERM');\n resolve(`Command timed out after ${timeout}ms`);\n }, timeout);\n });\n },\n {\n name: 'execute',\n description: `Execute a shell command in the workspace directory.\n\nIMPORTANT: You are restricted to your workspace directory. Use RELATIVE paths only:\n- ./schema.json (NOT /schema.json or absolute paths)\n- ./app (NOT /app or absolute paths)\n\nExamples:\n- orbital validate ./schema.json --json\n- npx kflow compile ./schema.json -o ./app --verify\n- cd ./app && npm install\n\nCommands using absolute paths outside your workspace will be blocked.`,\n schema: z.object({\n command: z.string().describe('The shell command to execute'),\n timeout: z.number().optional().describe('Timeout in milliseconds (default: 60000)'),\n }),\n },\n );\n}\n","/**\n * Schema Validation Tool\n *\n * Validates orbital schemas using the @almadar/cli npm package.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\nimport * as path from 'path';\nimport * as fs from 'fs/promises';\n\nconst execAsync = promisify(exec);\n\n/**\n * Maximum number of validation attempts before forcing stop.\n */\nconst MAX_VALIDATION_ATTEMPTS = 5;\n\n/**\n * Create a validate_schema tool that validates schema.json in the workspace.\n *\n * Uses `npx @almadar/cli validate --json` for comprehensive Rust-based validation.\n *\n * Has a built-in cap of MAX_VALIDATION_ATTEMPTS to prevent\n * infinite validation-fix loops.\n */\nexport function createValidateSchemaTool(workDir: string) {\n const schemaPath = path.join(workDir, 'schema.json');\n let validationAttempts = 0;\n\n return tool(\n async () => {\n validationAttempts++;\n\n if (validationAttempts > MAX_VALIDATION_ATTEMPTS) {\n return JSON.stringify({\n success: true,\n valid: false,\n cappedValidation: true,\n message:\n `⚠️ VALIDATION CAP REACHED (${MAX_VALIDATION_ATTEMPTS} attempts). ` +\n `You've tried to fix this schema ${validationAttempts} times. ` +\n `STOP fixing validation errors and proceed with what you have.`,\n recommendation: 'STOP_FIXING',\n });\n }\n\n try {\n try {\n await fs.access(schemaPath);\n } catch {\n return JSON.stringify({\n success: false,\n valid: false,\n validationAttempt: validationAttempts,\n errors: [{\n code: 'FILE_NOT_FOUND',\n path: '',\n message: 'File not found: schema.json. Create it first with write_file.',\n }],\n });\n }\n\n const { stdout, stderr } = await execAsync(\n `npx @almadar/cli validate \"${schemaPath}\" --json`,\n { timeout: 30000 },\n );\n\n let cliResult: {\n success: boolean;\n valid: boolean;\n errors?: Array<{\n code: string;\n path: string;\n message: string;\n suggestion?: string;\n fixGuidance?: string;\n expectedShape?: string;\n validValues?: string[];\n }>;\n warnings?: Array<{\n code: string;\n path: string;\n message: string;\n suggestion?: string;\n }>;\n stats?: {\n orbitals: number;\n entities: number;\n traits: number;\n pages: number;\n };\n };\n\n try {\n cliResult = JSON.parse(stdout);\n } catch {\n return JSON.stringify({\n success: false,\n valid: false,\n validationAttempt: validationAttempts,\n errors: [{\n code: 'CLI_OUTPUT_ERROR',\n path: '',\n message: `Failed to parse orbital CLI output: ${stdout || stderr}`,\n }],\n });\n }\n\n const response = {\n ...cliResult,\n validationAttempt: validationAttempts,\n remainingAttempts: MAX_VALIDATION_ATTEMPTS - validationAttempts,\n ...(validationAttempts >= MAX_VALIDATION_ATTEMPTS - 1 && !cliResult.valid\n ? {\n warning:\n `⚠️ Only ${MAX_VALIDATION_ATTEMPTS - validationAttempts} validation attempt(s) remaining.`,\n }\n : {}),\n };\n\n return JSON.stringify(response);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n if (errorMessage.includes('ENOENT') || errorMessage.includes('not found')) {\n return JSON.stringify({\n success: false,\n valid: false,\n validationAttempt: validationAttempts,\n errors: [{\n code: 'CLI_NOT_FOUND',\n path: '',\n message: '@almadar/cli not found. Ensure it is installed or accessible via npx.',\n suggestion: 'Install with: npm install -g @almadar/cli or ensure npx can access it.',\n }],\n });\n }\n\n return JSON.stringify({\n success: false,\n valid: false,\n validationAttempt: validationAttempts,\n errors: [{\n code: 'VALIDATION_ERROR',\n path: '',\n message: `Validation error: ${errorMessage}`,\n }],\n });\n }\n },\n {\n name: 'validate_schema',\n description: `Validate the schema.json file in the workspace.\n\nRuns validation using \\`npx @almadar/cli validate --json\\`.\n\nReturns detailed errors with code, path, message, suggestion, and expectedShape.\n\n⚠️ VALIDATION CAP: You have a maximum of 5 validation attempts.`,\n schema: z.object({}),\n },\n );\n}\n","/**\n * Schema Generation Tool (via Structured Output LLM)\n *\n * Generates KFlow schemas using OpenAI's structured output mode.\n * Uses @almadar/llm StructuredOutputClient directly.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport type { OrbitalSchema } from '@almadar/core/types';\nimport {\n getStructuredOutputClient,\n isStructuredOutputAvailable,\n} from '@almadar/llm';\n\nconst GenerateSchemaInputSchema = z.object({\n userRequest: z.string().describe('The user\\'s natural language description'),\n suggestedTraits: z.array(z.string()).optional().describe('Suggested traits'),\n suggestedEntities: z.array(z.string()).optional().describe('Suggested entity names'),\n suggestedPages: z.array(z.string()).optional().describe('Suggested page types/names'),\n suggestedPatterns: z.array(z.string()).optional().describe('Suggested section patterns'),\n additionalInstructions: z.string().optional().describe('Additional instructions'),\n existingSchema: z.string().optional().describe('Existing schema JSON to update'),\n});\n\n/**\n * Create a tool that generates KFlow schemas using structured output.\n */\nexport function createGenerateSchemaTool() {\n return tool(\n async (input) => {\n if (!isStructuredOutputAvailable()) {\n return JSON.stringify({\n success: false,\n error: 'Structured output generation is not available. Set OPENAI_API_KEY.',\n });\n }\n\n try {\n let enhancedRequest = input.userRequest;\n\n if (input.suggestedEntities?.length) {\n enhancedRequest += `\\n\\nSuggested entities: ${input.suggestedEntities.join(', ')}`;\n }\n if (input.suggestedTraits?.length) {\n enhancedRequest += `\\n\\nSuggested traits: ${input.suggestedTraits.join(', ')}`;\n }\n if (input.suggestedPages?.length) {\n enhancedRequest += `\\n\\nSuggested pages: ${input.suggestedPages.join(', ')}`;\n }\n if (input.suggestedPatterns?.length) {\n enhancedRequest += `\\n\\nSuggested section patterns: ${input.suggestedPatterns.join(', ')}`;\n }\n\n const client = getStructuredOutputClient();\n\n const result = await client.generate<OrbitalSchema>({\n userRequest: enhancedRequest,\n schemaName: 'kflow_schema',\n additionalInstructions: input.additionalInstructions,\n existingContext: input.existingSchema,\n });\n\n return JSON.stringify({\n success: true,\n schema: result.data,\n usage: result.usage,\n latencyMs: result.latencyMs,\n model: result.model,\n zodValidation: result.zodValidation,\n }, null, 2);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return JSON.stringify({\n success: false,\n error: errorMessage,\n suggestion: 'Check the error message and try again with adjusted guidance.',\n });\n }\n },\n {\n name: 'generate_schema',\n description: `Generate a KFlow schema using structured output LLM.\n\nUse this to generate the BULK of the schema quickly, then surgically edit as needed.\n\nGUIDANCE YOU CAN PROVIDE:\n- suggestedTraits, suggestedEntities, suggestedPages, suggestedPatterns\n- additionalInstructions\n- existingSchema (for updates)`,\n schema: GenerateSchemaInputSchema,\n },\n );\n}\n","/**\n * Orbital Combiner\n *\n * Deterministically combines multiple Orbitals into a single OrbitalSchema.\n * This removes the need for LLM involvement in the combining step.\n *\n * All UI is rendered via render_ui effects from traits (no static sections).\n *\n * NOTE: Validation is handled externally via `orbital validate` CLI.\n * The combiner only assembles schemas - it does not validate them.\n *\n * @packageDocumentation\n */\n\nimport type {\n Orbital,\n OrbitalSchema,\n DomainContext,\n OrbitalDefinition,\n PageRef,\n Page,\n} from \"@almadar/core/types\";\nimport { isOrbitalDefinition, isPageReferenceString, isPageReferenceObject } from \"@almadar/core/types\";\n\n/**\n * Check if page is an inline definition (not a reference)\n */\nfunction isInlinePage(page: PageRef): page is Page {\n return !isPageReferenceString(page) && !isPageReferenceObject(page);\n}\n\n// Validation result type for API compatibility (actual validation done via Rust CLI)\nexport interface OrbitalSchemaValidationResult {\n valid: boolean;\n errors: Array<{ code: string; message: string; path?: string }>;\n warnings: Array<{ code: string; message: string; path?: string }>;\n}\n\n// Backward compatibility alias\ntype FullOrbitalUnit = Orbital;\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface CombinerOptions {\n /** Application name */\n name: string;\n /** Optional description */\n description?: string;\n /** Schema version */\n version?: string;\n /** Domain context */\n domain?: DomainContext;\n /** Whether to run validation (default: true) */\n validate?: boolean;\n /** Global theme */\n theme?: string;\n /** Default route (first page if not specified) */\n defaultRoute?: string;\n}\n\nexport interface CombinerResult {\n /** Whether combining succeeded */\n success: boolean;\n /** The combined OrbitalSchema (if successful) */\n schema?: OrbitalSchema;\n /** Validation result (if validation was run) */\n validation?: OrbitalSchemaValidationResult;\n /** Error message (if failed) */\n error?: string;\n /** Statistics about the combining */\n stats: {\n totalOrbitals: number;\n totalEntities: number;\n totalPages: number;\n totalTraits: number;\n };\n}\n\n// ============================================================================\n// Combiner Implementation\n// ============================================================================\n\n/**\n * Combine multiple Orbitals into a single OrbitalSchema.\n *\n * This function performs deterministic merging:\n * 1. Builds an OrbitalSchema from the Orbitals\n * 2. Optionally runs validation\n *\n * Note: All UI is rendered via render_ui effects from traits.\n *\n * @example\n * ```typescript\n * const result = combineOrbitals([taskOrbital, userOrbital], {\n * name: 'My App',\n * validate: true,\n * });\n *\n * if (result.success) {\n * // Write schema to file\n * await fs.writeFile('schema.json', JSON.stringify(result.schema, null, 2));\n * } else {\n * console.error(result.error);\n * console.error(result.validation?.errors);\n * }\n * ```\n */\nexport function combineOrbitals(\n orbitals: FullOrbitalUnit[],\n options: CombinerOptions,\n): CombinerResult {\n const {\n name,\n description,\n version = \"1.0.0\",\n domain,\n validate = true,\n theme,\n } = options;\n\n // Filter to only full orbital definitions for stats\n const orbitalDefs = orbitals.filter(isOrbitalDefinition);\n\n // Stats\n const stats = {\n totalOrbitals: orbitals.length,\n totalEntities: orbitalDefs.length, // 1 entity per orbital definition\n totalPages: orbitalDefs.reduce((sum, o) => sum + o.pages.length, 0),\n totalTraits: orbitalDefs.reduce((sum, o) => sum + o.traits.length, 0),\n };\n\n // Handle empty input\n if (orbitals.length === 0) {\n return {\n success: false,\n error: \"No orbitals provided. At least one Orbital is required.\",\n stats,\n };\n }\n\n try {\n // Build OrbitalSchema from Orbitals\n const orbitalSchema: OrbitalSchema = {\n name,\n description,\n version,\n domainContext: domain,\n orbitals,\n config: theme\n ? {\n theme: { primary: theme },\n }\n : undefined,\n };\n\n // NOTE: Validation is deprecated in combiner - use `orbital validate` CLI instead\n // The validate option is kept for API compatibility but does not run validation\n const validation: OrbitalSchemaValidationResult | undefined = validate\n ? { valid: true, errors: [], warnings: [] }\n : undefined;\n\n return {\n success: true,\n schema: orbitalSchema,\n validation,\n stats,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n stats,\n };\n }\n}\n\n// Legacy alias removed - use combineOrbitals() directly\n\n/**\n * Combine orbitals and return only the schema (throws on error).\n * Use this when you want a simple API and will handle errors upstream.\n */\nexport function combineOrbitalsToSchema(\n orbitals: FullOrbitalUnit[],\n options: CombinerOptions,\n): OrbitalSchema {\n const result = combineOrbitals(orbitals, options);\n if (!result.success || !result.schema) {\n throw new Error(result.error || \"Failed to combine orbitals\");\n }\n return result.schema;\n}\n\n/**\n * Estimate the combination complexity (for progress indication).\n */\nexport function estimateCombineComplexity(orbitals: FullOrbitalUnit[]): {\n entities: number;\n pages: number;\n traits: number;\n totalSections: number;\n} {\n // Filter to only full orbital definitions\n const orbitalDefs = orbitals.filter(isOrbitalDefinition);\n return {\n entities: orbitalDefs.length,\n pages: orbitalDefs.reduce((sum, o) => sum + o.pages.length, 0),\n traits: orbitalDefs.reduce((sum, o) => sum + o.traits.length, 0),\n // Note: sections are no longer supported in trait-driven pages\n // Only count traits from inline page definitions (not references)\n totalSections: orbitalDefs.reduce(\n (sum, o) =>\n sum +\n o.pages.filter(isInlinePage).reduce((pSum: number, p) => pSum + (p.traits?.length ?? 0), 0),\n 0,\n ),\n };\n}\n","/**\n * Domain Language Module\n *\n * MIGRATED: The core domain language engine has been moved to @almadar/core.\n * This file re-exports everything from the core package for backward compatibility.\n * Only agent-specific modules (prompts) remain here.\n */\n\n// Core domain language engine (types, lexer, parsers, formatters, sync, registry)\nexport * from '@almadar/core/domain-language';\n\n// Agent-specific: LLM prompt templates for domain language generation\nexport * from './prompts/index.js';\n","/**\n * Domain Language Syntax Reference\n *\n * Complete syntax reference for the Orbital Domain Language.\n *\n * @packageDocumentation\n */\n\nexport const ODL_SYNTAX_REFERENCE = `\n## Domain Language Syntax\n\n### Entity Definition\n\n\\`\\`\\`\nA [EntityName] is a [persistence] entity that:\n - has [fieldName] as [type] (required|optional)\n - has [fieldName] as [type] with default [value]\n - belongs to [RelatedEntity]\n - belongs to [RelatedEntity] as [alias]\n - has many [RelatedEntity]s\n\\`\\`\\`\n\n**Persistence types:**\n- \\`persistent\\` - Stored in database (default)\n- \\`runtime\\` - Memory only, for games/UI state\n- \\`singleton\\` - Single instance, for config\n\n**Field types:**\n- \\`text\\` / \\`long text\\` - String fields\n- \\`number\\` / \\`currency\\` - Numeric fields\n- \\`yes/no\\` - Boolean fields\n- \\`date\\` / \\`timestamp\\` / \\`datetime\\` - Date fields\n- \\`enum [val1, val2]\\` - Enumeration\n- \\`list\\` / \\`object\\` - Complex types\n\n### Page Definition\n\n\\`\\`\\`\n[PageName] at /[path]:\n - shows [Entity] using [TraitName]\n - view type: [list|detail|create|edit|dashboard]\n - is initial page\n\\`\\`\\`\n\n### Behavior Definition\n\n\\`\\`\\`\n[BehaviorName] behavior:\n States: [State1], [State2], [State3]\n Initial: [State1]\n\n Transitions:\n - From [State1] to [State2] on [EVENT_NAME]\n if [guard condition]\n then [effect1]\n then [effect2]\n\\`\\`\\`\n\n### Section Headers\n\nDomain Language text is organized into sections:\n\n\\`\\`\\`\n# Entities\n[entity definitions]\n\n# Pages\n[page definitions]\n\n# Behaviors\n[behavior/trait definitions]\n\\`\\`\\`\n`;\n","/**\n * Domain Language Examples\n *\n * Complete examples of Domain Language for common patterns.\n *\n * @packageDocumentation\n */\n\nexport const ODL_EXAMPLES = `\n## Complete Example\n\n### Entity\n\n\\`\\`\\`\nA Task is a persistent entity that:\n - has title as text (required)\n - has description as long text\n - has status as enum [todo, in_progress, done] with default \"todo\"\n - has dueDate as date\n - belongs to User as assignee\n - belongs to Project\n\\`\\`\\`\n\n### Page\n\n\\`\\`\\`\nTasksPage at /tasks:\n - shows Task using TaskManagement\n - view type: list\n - is initial page\n\\`\\`\\`\n\n### Behavior\n\n\\`\\`\\`\nTaskManagement behavior:\n States: Viewing, Editing, Creating\n Initial: Viewing\n\n Transitions:\n - From Viewing to Viewing on INIT\n then render page-header to main with title 'Tasks'\n then render entity-table to center for Task\n\n - From Viewing to Editing on EDIT_TASK\n then render form-section to modal for Task\n\n - From Editing to Viewing on SAVE_TASK\n then persist update Task\n then render null to modal\n then emit TASK_UPDATED\n\\`\\`\\`\n\n## Multi-Entity Example\n\n\\`\\`\\`\n# Entities\n\nA User is a persistent entity that:\n - has name as text (required)\n - has email as text (required)\n - has role as enum [admin, user, guest] with default \"user\"\n\nA Project is a persistent entity that:\n - has name as text (required)\n - has description as long text\n - has status as enum [active, archived] with default \"active\"\n - belongs to User as owner\n\nA Task is a persistent entity that:\n - has title as text (required)\n - has status as enum [todo, in_progress, done] with default \"todo\"\n - has priority as number with default 0\n - belongs to Project\n - belongs to User as assignee\n\n# Pages\n\nProjectsPage at /projects:\n - shows Project using ProjectManagement\n - view type: list\n - is initial page\n\nTasksPage at /projects/:projectId/tasks:\n - shows Task using TaskManagement\n - view type: list\n\n# Behaviors\n\nProjectManagement behavior:\n States: List, Detail\n Initial: List\n\n Transitions:\n - From List to List on INIT\n then render entity-table to main for Project\n\n - From List to Detail on VIEW_PROJECT\n then render entity-detail to drawer for Project\n\nTaskManagement behavior:\n States: Viewing, Editing\n Initial: Viewing\n\n Transitions:\n - From Viewing to Viewing on INIT\n then [\"render-ui\", \"main\", {\"type\": \"entity-table\", \"entity\": \"Task\", \"itemActions\": [{\"label\": \"Edit\", \"event\": \"EDIT_TASK\"}, {\"label\": \"Delete\", \"event\": \"DELETE_TASK\", \"variant\": \"danger\"}]}]\n\n - From Viewing to Editing on EDIT_TASK\n then render form-section to modal for Task\n\n - From Editing to Viewing on SAVE_TASK\n then persist update Task\n then render null to modal\n\\`\\`\\`\n\n## Dashboard Example (Complex Patterns)\n\n\\`\\`\\`\nDashboard behavior:\n States: Viewing\n Initial: Viewing\n\n Transitions:\n - From Viewing to Viewing on INIT\n then render page-header to main with title 'Dashboard'\n then [\"render-ui\", \"center\", {\"type\": \"stats\", \"metrics\": [{\"field\": \"totalTasks\", \"label\": \"Total Tasks\"}, {\"field\": \"completedTasks\", \"label\": \"Completed\"}, {\"field\": \"overdueTasks\", \"label\": \"Overdue\"}]}]\n then [\"render-ui\", \"bottom\", {\"type\": \"tabs\", \"tabs\": [{\"id\": \"overview\", \"label\": \"Overview\", \"event\": \"VIEW_OVERVIEW\"}, {\"id\": \"recent\", \"label\": \"Recent Activity\", \"event\": \"VIEW_RECENT\"}]}]\n\\`\\`\\`\n\n**Note**: Use inline JSON for \\`render-ui\\` effects with complex props (metrics, tabs, itemActions, cells).\n`;\n","/**\n * Domain Language Common Patterns\n *\n * Reusable patterns for common application types.\n *\n * @packageDocumentation\n */\n\nexport const ODL_PATTERNS = `\n## Common Patterns\n\n### CRUD Pattern\n\n\\`\\`\\`\n[Entity]Management behavior:\n States: List, Detail, Create, Edit\n Initial: List\n\n Transitions:\n - From List to List on INIT\n then render entity-table to main for [Entity]\n\n - From List to Create on CREATE_[ENTITY]\n then render form-section to modal for [Entity]\n\n - From Create to List on SUBMIT_CREATE\n then persist create [Entity]\n then render null to modal\n\n - From List to Detail on VIEW_[ENTITY]\n then render entity-detail to drawer for [Entity]\n\n - From Detail to Edit on EDIT_[ENTITY]\n then render form-section to modal for [Entity]\n\n - From Edit to Detail on SUBMIT_EDIT\n then persist update [Entity]\n then render null to modal\n\n - From Detail to List on DELETE_[ENTITY]\n then persist delete [Entity]\n then render null to drawer\n\\`\\`\\`\n\n### Game Health Pattern\n\n\\`\\`\\`\nHealth behavior:\n States: Healthy, Wounded, Critical, Dead\n Initial: Healthy\n\n Transitions:\n - From Healthy to Wounded on TAKE_DAMAGE\n if health >= 30 and health < 70\n then update status to 'wounded'\n\n - From Wounded to Critical on TAKE_DAMAGE\n if health < 30\n then update status to 'critical'\n\n - From Critical to Dead on TAKE_DAMAGE\n if health <= 0\n then update isAlive to false\n then emit ENTITY_DIED\n\\`\\`\\`\n\n### Approval Workflow Pattern\n\n\\`\\`\\`\nApprovalWorkflow behavior:\n States: Draft, Pending, Approved, Rejected\n Initial: Draft\n\n Transitions:\n - From Draft to Pending on SUBMIT\n then update status to 'pending'\n then emit APPROVAL_REQUESTED\n\n - From Pending to Approved on APPROVE\n then update status to 'approved'\n then update approvedAt to now\n then emit APPROVAL_GRANTED\n\n - From Pending to Rejected on REJECT\n then update status to 'rejected'\n then emit APPROVAL_DENIED\n\n - From Rejected to Draft on REVISE\n then update status to 'draft'\n\\`\\`\\`\n\n### Form Validation Pattern\n\n\\`\\`\\`\nFormValidation behavior:\n States: Idle, Validating, Valid, Invalid\n Initial: Idle\n\n Transitions:\n - From Idle to Validating on VALIDATE\n then update isValidating to true\n\n - From Validating to Valid on VALIDATION_SUCCESS\n then update isValidating to false\n then update errors to null\n\n - From Validating to Invalid on VALIDATION_FAILED\n then update isValidating to false\n\n - From Invalid to Validating on VALIDATE\n then update isValidating to true\n\n - From Valid to Idle on RESET\n then update errors to null\n\\`\\`\\`\n\n### Dashboard Pattern\n\n\\`\\`\\`\nDashboardView behavior:\n States: Loading, Ready\n Initial: Loading\n\n Transitions:\n - From Loading to Ready on DATA_LOADED\n then render stats to main\n then render entity-cards to center\n\n - From Ready to Loading on REFRESH\n then emit FETCH_DASHBOARD_DATA\n\\`\\`\\`\n`;\n","/**\n * Domain Language to OrbitalSchema Mapping\n *\n * Reference for how Domain Language maps to OrbitalSchema JSON.\n *\n * @packageDocumentation\n */\n\nexport const ODL_TO_SCHEMA_MAPPING = `\n## Domain Language -> OrbitalSchema Mapping\n\n| Domain Language | OrbitalSchema |\n|-----------------|---------------|\n| \"A Task is...\" | \\`{ \"entity\": { \"name\": \"Task\", ... } }\\` |\n| \"persistent entity\" | \\`\"persistence\": \"persistent\"\\` |\n| \"runtime entity\" | \\`\"persistence\": \"runtime\"\\` |\n| \"singleton entity\" | \\`\"persistence\": \"singleton\"\\` |\n| \"has X as text\" | \\`{ \"name\": \"X\", \"type\": \"string\" }\\` |\n| \"has X as number\" | \\`{ \"name\": \"X\", \"type\": \"number\" }\\` |\n| \"has X as yes/no\" | \\`{ \"name\": \"X\", \"type\": \"boolean\" }\\` |\n| \"has X as enum [a, b]\" | \\`{ \"name\": \"X\", \"type\": \"enum\", \"values\": [\"a\", \"b\"] }\\` |\n| \"belongs to Y\" | \\`{ \"type\": \"relation\", \"relation\": { \"entity\": \"Y\" } }\\` |\n| \"belongs to Y as alias\" | \\`{ \"name\": \"alias\", \"type\": \"relation\", \"relation\": { \"entity\": \"Y\" } }\\` |\n| \"States: A, B\" | \\`\"states\": [{ \"name\": \"A\" }, { \"name\": \"B\" }]\\` |\n| \"Initial: A\" | \\`{ \"name\": \"A\", \"isInitial\": true }\\` |\n| \"From X to Y on Z\" | \\`{ \"from\": \"X\", \"to\": \"Y\", \"event\": \"Z\" }\\` |\n| \"if health >= 0\" | \\`\"guard\": [\">=\", \"@entity.health\", 0]\\` |\n| \"then update status to 'done'\" | \\`\"effects\": [[\"set\", \"@entity.status\", \"done\"]]\\` |\n| \"then emit EVENT\" | \\`\"effects\": [[\"emit\", \"EVENT\"]]\\` |\n| \"then render X to slot\" | \\`\"effects\": [[\"render-ui\", \"slot\", { \"type\": \"X\" }]]\\` |\n| \"then persist create Task\" | \\`\"effects\": [[\"persist\", \"create\", \"Task\"]]\\` |\n| \"then navigate to /path\" | \\`\"effects\": [[\"navigate\", \"/path\"]]\\` |\n\n## Conversion Process\n\n1. **Parse Domain Language** - Split into sections (Entities, Pages, Behaviors)\n2. **Extract entities** - Parse \"A X is...\" definitions\n3. **Extract pages** - Parse \"[Name] at /path\" definitions\n4. **Extract behaviors** - Parse \"[Name] behavior:\" definitions\n5. **Parse guards** - Convert human-readable conditions to S-expressions\n6. **Parse effects** - Convert human-readable effects to S-expressions\n7. **Assemble schema** - Build OrbitalSchema JSON structure\n\n## CLI Commands\n\n\\`\\`\\`bash\n# Convert Domain Language to OrbitalSchema\nnpx kflow domain:to-schema input.txt -o output.orb\n\n# Convert OrbitalSchema to Domain Language\nnpx kflow domain:to-text input.orb -o output.txt\n\n# Validate round-trip conversion\nnpx kflow domain:validate input.orb --verbose\n\\`\\`\\`\n`;\n","/**\n * Finish Task Tool\n *\n * Signals the agent has completed the workflow. Automatically combines\n * orbitals and validates the result.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport * as path from 'path';\nimport * as fs from 'fs/promises';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\nimport type { FullOrbitalUnit } from '@almadar/core/types';\nimport { combineOrbitals } from '../orbitals/combiner/index.js';\nimport { convertDomainToSchema } from '../orbitals/domain-language/index.js';\n\nconst execAsync = promisify(exec);\n\n/**\n * Auto-collect orbitals from the .orbitals/ directory in the workspace.\n */\nasync function collectOrbitalsFromDir(workDir: string): Promise<FullOrbitalUnit[]> {\n const orbitalsDir = path.join(workDir, '.orbitals');\n\n try {\n const dirStat = await fs.stat(orbitalsDir);\n if (!dirStat.isDirectory()) {\n return [];\n }\n } catch {\n return [];\n }\n\n const files = await fs.readdir(orbitalsDir);\n const jsonFiles = files.filter((f) => f.endsWith('.json'));\n\n if (jsonFiles.length === 0) {\n return [];\n }\n\n const orbitals: FullOrbitalUnit[] = [];\n for (const file of jsonFiles) {\n try {\n const content = await fs.readFile(path.join(orbitalsDir, file), 'utf-8');\n orbitals.push(JSON.parse(content));\n } catch {\n // Skip invalid files\n }\n }\n\n return orbitals;\n}\n\n/**\n * Validate schema using orbital CLI.\n */\nasync function validateSchemaWithCLI(schemaPath: string): Promise<{\n valid: boolean;\n errors: Array<{ code: string; path: string; message: string; suggestion?: string }>;\n warnings: Array<{ code: string; path: string; message: string }>;\n stats?: { orbitals: number; entities: number; traits: number; pages: number };\n}> {\n try {\n const { stdout } = await execAsync(\n `orbital validate \"${schemaPath}\" --json`,\n { timeout: 30000 },\n );\n const result = JSON.parse(stdout);\n return {\n valid: result.valid,\n errors: result.errors || [],\n warnings: result.warnings || [],\n stats: result.stats,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return {\n valid: false,\n errors: [{ code: 'CLI_ERROR', path: '', message: `Validation CLI error: ${errorMessage}` }],\n warnings: [],\n };\n }\n}\n\n/**\n * Create a finish_task tool that signals the agent has completed the workflow.\n *\n * Automatically combines orbitals from:\n * 1. .orbitals/ directory (for kflow-orbitals skill)\n * 2. domain.txt (for lean skills) - converted to schema via convertDomainToSchema\n */\nexport function createFinishTaskTool(workDir: string | undefined) {\n return tool(\n async (input) => {\n let combinedSchema = null;\n let stats = null;\n let validationResult: {\n valid: boolean;\n errors: Array<{ code: string; path: string; message: string }>;\n warnings: Array<{ code: string; path: string; message: string }>;\n } | null = null;\n let source: 'orbitals' | 'domain' | null = null;\n\n if (workDir) {\n // Strategy 1: Try .orbitals/ directory\n const orbitals = await collectOrbitalsFromDir(workDir);\n\n if (orbitals.length > 0) {\n source = 'orbitals';\n const appName =\n input.summary?.match(/Generated \\d+ orbitals?:?\\s*(.+)/)?.[1] ||\n orbitals[0]?.name ||\n 'Application';\n\n const result = combineOrbitals(orbitals, {\n name: appName,\n validate: false,\n });\n\n if (result.success && result.schema) {\n combinedSchema = result.schema;\n stats = result.stats;\n }\n } else {\n // Strategy 2: Try domain.txt\n const domainPath = path.join(workDir, 'domain.txt');\n try {\n const domainText = await fs.readFile(domainPath, 'utf-8');\n if (domainText.trim()) {\n source = 'domain';\n const appName =\n input.summary?.match(/Generated \\d+ orbitals?:?\\s*(.+)/)?.[1] ||\n 'Application';\n\n const domainResult = convertDomainToSchema(domainText, {\n name: appName,\n orbitals: [],\n });\n\n if (domainResult.success && domainResult.schema) {\n combinedSchema = domainResult.schema;\n const traitCount = (domainResult.schema.orbitals || []).reduce(\n (count, o) => count + ('traits' in o ? (o as { traits?: unknown[] }).traits?.length || 0 : 0),\n 0,\n );\n stats = {\n totalOrbitals: domainResult.schema.orbitals?.length || 0,\n totalEntities: domainResult.schema.orbitals?.length || 0,\n totalTraits: traitCount,\n totalPages:\n domainResult.schema.orbitals?.reduce(\n (sum, o) => sum + ('pages' in o ? (o as { pages?: unknown[] }).pages?.length || 0 : 0),\n 0,\n ) || 0,\n };\n }\n }\n } catch {\n // No domain.txt found\n }\n }\n\n // Write combined schema if we got one\n if (combinedSchema) {\n const schemaPath = path.join(workDir, 'schema.json');\n await fs.writeFile(schemaPath, JSON.stringify(combinedSchema, null, 2));\n validationResult = await validateSchemaWithCLI(schemaPath);\n }\n }\n\n return {\n success: true,\n status: 'TASK_COMPLETE',\n message: '✅ Task completed successfully. STOP HERE - do not make any more tool calls.',\n summary: input.summary,\n autoCombined: combinedSchema ? true : false,\n source: source || undefined,\n stats: stats || undefined,\n validation: validationResult\n ? {\n valid: validationResult.valid,\n errorCount: validationResult.errors?.length || 0,\n warningCount: validationResult.warnings?.length || 0,\n }\n : undefined,\n schemaPath: combinedSchema\n ? path.join(workDir!, 'schema.json')\n : input.schemaPath,\n nextAction: 'NONE - Task is complete. Output a brief success message to the user.',\n };\n },\n {\n name: 'finish_task',\n description: `Signal that the orbital generation workflow is COMPLETE.\n\n⚠️ IMPORTANT: After calling this tool, STOP. Do not make any more tool calls.\n\nWHAT IT DOES:\n1. Automatically collects orbitals from .orbitals/ directory\n2. Combines them into a single OrbitalSchema\n3. Validates the combined schema\n4. Writes schema.json to workspace\n5. Returns success with stats`,\n schema: z.object({\n summary: z.string().describe('Brief summary of what was accomplished'),\n schemaPath: z.string().optional().describe('Path to the combined schema file if already written'),\n }),\n },\n );\n}\n","/**\n * Domain Orbital Tool\n *\n * Generates domain language orbitals incrementally using LLM.\n * Uses @almadar/llm for LLM access and @almadar/skills for prompt sections.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport crypto from 'crypto';\nimport { LLMClient } from '@almadar/llm';\nimport {\n getSExprQuickRef,\n getKeyBehaviorsReference,\n getCommonErrorsSection,\n getArchitectureSection,\n} from '@almadar/skills';\nimport type { SSEEventType } from '../api-types.js';\nimport { AgentDomainCategorySchema } from '@almadar/core/types';\nimport type { AgentDomainCategory } from '@almadar/core/types';\nimport { convertDomainToSchema } from '../orbitals/domain-language/index.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type DomainOrbitalEventCallback = (\n orbitalName: string,\n orbitalIndex: number,\n totalOrbitals: number,\n event: {\n type: Exclude<SSEEventType, 'subagent_event'>;\n data: Record<string, unknown>;\n timestamp: number;\n }\n) => void;\n\nexport type DomainOrbitalCompleteCallback = (\n domainText: string,\n orbitalName: string,\n orbitalIndex: number,\n totalOrbitals: number\n) => void | Promise<void>;\n\nexport interface DomainOrbitalToolOptions {\n onEvent?: DomainOrbitalEventCallback;\n onOrbitalComplete?: DomainOrbitalCompleteCallback;\n workDir?: string;\n}\n\nexport interface DomainOrbitalSpec {\n name: string;\n entity: {\n name: string;\n persistence: 'persistent' | 'runtime' | 'singleton';\n fields: Array<{\n name: string;\n type: string;\n required?: boolean;\n default?: unknown;\n }>;\n relations?: Array<{\n entity: string;\n alias?: string;\n type: 'belongs_to' | 'has_many';\n }>;\n };\n pages: Array<{\n name: string;\n path: string;\n viewType: string;\n isInitial?: boolean;\n }>;\n traits: string[];\n patterns: string[];\n domainContext?: {\n request: string;\n requestFragment?: string;\n category: AgentDomainCategory;\n vocabulary?: Record<string, string>;\n };\n design?: {\n style?: 'minimal' | 'modern' | 'playful' | 'data-driven' | 'immersive';\n uxHints?: {\n flowPattern?: 'hub-spoke' | 'master-detail' | 'crud-cycle' | 'linear' | 'role-based';\n listPattern?: 'entity-table' | 'entity-cards' | 'entity-list';\n formPattern?: 'modal' | 'drawer' | 'page';\n detailPattern?: 'drawer' | 'page' | 'split';\n };\n };\n emits?: string[];\n listens?: Array<{\n event: string;\n triggers: string;\n }>;\n}\n\n// ============================================================================\n// Cache\n// ============================================================================\n\ninterface CacheEntry {\n domainText: string;\n timestamp: number;\n usage: { inputTokens: number; outputTokens: number; totalTokens: number };\n}\n\nconst domainOrbitalCache = new Map<string, CacheEntry>();\nconst CACHE_TTL_MS = 24 * 60 * 60 * 1000;\nconst CACHE_VERSION = 5;\n\nfunction generateFingerprint(spec: DomainOrbitalSpec): string {\n const normalized = JSON.stringify({\n version: CACHE_VERSION,\n entity: spec.entity,\n pages: spec.pages,\n traits: spec.traits.sort(),\n patterns: spec.patterns.sort(),\n emits: spec.emits?.sort() || [],\n listens: spec.listens?.map(l => `${l.event}:${l.triggers}`).sort() || [],\n });\n return crypto.createHash('sha256').update(normalized).digest('hex').slice(0, 16);\n}\n\nfunction getCached(fingerprint: string): CacheEntry | null {\n const entry = domainOrbitalCache.get(fingerprint);\n if (!entry) return null;\n if (Date.now() - entry.timestamp > CACHE_TTL_MS) {\n domainOrbitalCache.delete(fingerprint);\n return null;\n }\n return entry;\n}\n\nfunction setCache(fingerprint: string, entry: CacheEntry): void {\n domainOrbitalCache.set(fingerprint, entry);\n}\n\n// ============================================================================\n// File-based domain accumulation\n// ============================================================================\n\nfunction appendToDomainFile(workDir: string, domainText: string, _orbitalName: string): void {\n const domainPath = path.join(workDir, 'domain.txt');\n const separator = `\\n\\n---\\n`;\n let existingContent = '';\n if (fs.existsSync(domainPath)) {\n existingContent = fs.readFileSync(domainPath, 'utf-8');\n }\n const newContent = existingContent + separator + domainText;\n fs.writeFileSync(domainPath, newContent, 'utf-8');\n}\n\nfunction readDomainFile(workDir: string): string | null {\n const domainPath = path.join(workDir, 'domain.txt');\n if (!fs.existsSync(domainPath)) {\n return null;\n }\n return fs.readFileSync(domainPath, 'utf-8');\n}\n\n// ============================================================================\n// LLM Generation Prompt (uses @almadar/skills)\n// ============================================================================\n\nfunction buildStaticSystemPrompt(): string {\n const behaviorsRef = getKeyBehaviorsReference();\n const sExprRef = getSExprQuickRef();\n const errorsRef = getCommonErrorsSection();\n const architectureRef = getArchitectureSection();\n\n return `You are a domain language expert. Generate clean, complete domain language for OrbitalSchema applications.\n\n${behaviorsRef}\n\n---\n\n${sExprRef}\n\n---\n\n${architectureRef}\n\n---\n\n${errorsRef}\n\n---\n\n## Output Requirements\n\nGenerate ONLY the domain language text with these EXACT formats:\n\n### Entity Format (CRITICAL)\n\\`\\`\\`\n# Entities\n\nA [EntityName] is a [persistent|runtime|singleton] entity that:\n - has [fieldName] as [type] (required)\n - has [fieldName] as [type] with default [value]\n - belongs to [RelatedEntity]\n - has many [RelatedEntity]s\n\\`\\`\\`\n\n### Page Format (CRITICAL)\n\\`\\`\\`\n# Pages\n\n[PageName] at /[path]:\n - shows [Entity] using [TraitName]\n - view type: list\n - is initial page\n\\`\\`\\`\n\n### Behavior Format (CRITICAL)\n\\`\\`\\`\n# Behaviors\n\n[TraitName] behavior:\n Entity: [EntityName]\n States: [State1], [State2], ...\n Initial: [State1]\n\n Transitions:\n - From [State1] to [State2] on [EVENT]\n then [S-Expression effect]\n\\`\\`\\`\n\n**CRITICAL RULES:**\n1. Entities MUST start with \"A\" or \"An\"\n2. Behaviors MUST have \"Entity: [EntityName]\" line after the behavior name\n3. Pages MUST use \"shows [Entity] using [TraitName]\" format\n\nGenerate ONLY the domain language text, no explanations or markdown code blocks.`;\n}\n\nfunction buildDynamicUserPrompt(spec: DomainOrbitalSpec): string {\n const entityFields = spec.entity.fields\n .map(f => {\n let fieldDef = ` - ${f.name}: ${f.type}`;\n if (f.required) fieldDef += ', required';\n if (f.default !== undefined) fieldDef += `, default ${JSON.stringify(f.default)}`;\n return fieldDef;\n })\n .join('\\n');\n\n const relations = spec.entity.relations\n ?.map(r => {\n if (r.type === 'belongs_to') {\n return r.alias\n ? ` - belongs to ${r.entity} as ${r.alias}`\n : ` - belongs to ${r.entity}`;\n }\n return ` - has many ${r.entity}s`;\n })\n .join('\\n') || '';\n\n const pagesInfo = spec.pages\n .map(p => `- ${p.name} at ${p.path} (${p.viewType}${p.isInitial ? ', initial' : ''})`)\n .join('\\n');\n\n const emitsInfo = spec.emits?.length\n ? `**Emits Events**: ${spec.emits.join(', ')}`\n : '';\n const listensInfo = spec.listens?.length\n ? `**Listens**: ${spec.listens.map(l => `${l.event} → ${l.triggers}`).join(', ')}`\n : '';\n\n return `Generate domain language for the following orbital.\n\n## Orbital Specification\n\n**Entity**: ${spec.entity.name} (${spec.entity.persistence})\n**Fields**:\n${entityFields}\n${relations ? `**Relations**:\\n${relations}` : ''}\n\n**Pages**:\n${pagesInfo}\n\n**Behaviors**: ${spec.traits.join(', ')}\n**UI Patterns**: ${spec.patterns.join(', ')}\n${emitsInfo}\n${listensInfo}\n\nReplace [Entity] placeholders with \"${spec.entity.name}\" in all patterns.`;\n}\n\n// ============================================================================\n// Zod Schema\n// ============================================================================\n\nconst GenerateOrbitalDomainSchema = z.object({\n sessionId: z.string().describe('Unique session ID for this generation batch'),\n orbital: z.object({\n name: z.string(),\n entity: z.object({\n name: z.string(),\n persistence: z.enum(['persistent', 'runtime', 'singleton']),\n fields: z.array(z.object({\n name: z.string(),\n type: z.string(),\n required: z.boolean().optional(),\n default: z.any().optional(),\n })),\n relations: z.array(z.object({\n entity: z.string(),\n alias: z.string().optional(),\n type: z.enum(['belongs_to', 'has_many']),\n })).optional(),\n }),\n pages: z.array(z.object({\n name: z.string(),\n path: z.string(),\n viewType: z.string(),\n isInitial: z.boolean().optional(),\n })),\n traits: z.array(z.string()),\n patterns: z.array(z.string()),\n domainContext: z.object({\n request: z.string(),\n requestFragment: z.string().optional(),\n category: AgentDomainCategorySchema,\n vocabulary: z.record(z.string(), z.string()).optional(),\n }).optional(),\n design: z.object({\n style: z.enum(['minimal', 'modern', 'playful', 'data-driven', 'immersive']).optional(),\n uxHints: z.object({\n flowPattern: z.enum(['hub-spoke', 'master-detail', 'crud-cycle', 'linear', 'role-based']).optional(),\n listPattern: z.enum(['entity-table', 'entity-cards', 'entity-list']).optional(),\n formPattern: z.enum(['modal', 'drawer', 'page']).optional(),\n detailPattern: z.enum(['drawer', 'page', 'split']).optional(),\n }).optional(),\n }).optional(),\n emits: z.array(z.string()).optional(),\n listens: z.array(z.object({\n event: z.string(),\n triggers: z.string(),\n })).optional(),\n }).describe('The orbital specification'),\n orbitalIndex: z.number().describe('Index in the batch (0-based)'),\n totalOrbitals: z.number().describe('Total orbitals in the batch'),\n});\n\nconst ConstructCombinedDomainSchema = z.object({\n appName: z.string().describe('Name of the application'),\n});\n\n// ============================================================================\n// Tool Factories\n// ============================================================================\n\n/**\n * Create the generate_orbital_domain tool.\n * Uses @almadar/llm LLMClient directly for Anthropic calls.\n */\nexport function createGenerateOrbitalDomainTool(\n \n options: DomainOrbitalToolOptions = {},\n) {\n let eventCallback: DomainOrbitalEventCallback | undefined = options.onEvent;\n let completeCallback: DomainOrbitalCompleteCallback | undefined = options.onOrbitalComplete;\n const workDir = options.workDir || process.cwd();\n\n const STATIC_SYSTEM_PROMPT = buildStaticSystemPrompt();\n\n const setEventCallback = (callback: DomainOrbitalEventCallback) => {\n eventCallback = callback;\n };\n\n const setCompleteCallback = (callback: DomainOrbitalCompleteCallback) => {\n completeCallback = callback;\n };\n\n const emitEvent = (\n orbitalName: string,\n orbitalIndex: number,\n totalOrbitals: number,\n type: Exclude<SSEEventType, 'subagent_event'>,\n data: Record<string, unknown>\n ) => {\n if (eventCallback) {\n eventCallback(orbitalName, orbitalIndex, totalOrbitals, {\n type,\n data,\n timestamp: Date.now(),\n });\n }\n };\n\n const generateOrbitalDomainTool = tool(\n async ({ sessionId, orbital, orbitalIndex, totalOrbitals }) => {\n const spec = orbital as DomainOrbitalSpec;\n const fingerprint = generateFingerprint(spec);\n\n try {\n emitEvent(spec.name, orbitalIndex, totalOrbitals, 'message', {\n content: `Generating domain orbital: ${spec.name} (${orbitalIndex + 1}/${totalOrbitals})`,\n role: 'assistant',\n isComplete: false,\n });\n\n // Check cache\n const cached = getCached(fingerprint);\n if (cached) {\n emitEvent(spec.name, orbitalIndex, totalOrbitals, 'generation_log', {\n level: 'info',\n message: `Cache HIT for ${spec.name}`,\n data: { fingerprint, cachedAt: new Date(cached.timestamp).toISOString() },\n orbitalName: spec.name,\n });\n\n appendToDomainFile(workDir, cached.domainText, spec.name);\n\n if (completeCallback) {\n await completeCallback(cached.domainText, spec.name, orbitalIndex, totalOrbitals);\n }\n\n return JSON.stringify({\n success: true,\n orbitalName: spec.name,\n fingerprint,\n cached: true,\n domainWritten: true,\n usage: cached.usage,\n });\n }\n\n emitEvent(spec.name, orbitalIndex, totalOrbitals, 'generation_log', {\n level: 'info',\n message: `Cache MISS for ${spec.name}, generating with LLM`,\n data: { fingerprint },\n orbitalName: spec.name,\n });\n\n // Use @almadar/llm directly\n const client = new LLMClient({\n provider: 'anthropic',\n model: 'claude-sonnet-4-20250514',\n temperature: 0,\n });\n\n const userPrompt = buildDynamicUserPrompt(spec);\n\n emitEvent(spec.name, orbitalIndex, totalOrbitals, 'tool_call', {\n tool: 'llm_generate_domain',\n args: {\n orbital: spec.name,\n entity: spec.entity.name,\n traits: spec.traits,\n },\n });\n\n const response = await client.callWithCache<string>({\n systemPrompt: '',\n systemBlocks: [{\n type: 'text',\n text: STATIC_SYSTEM_PROMPT,\n cache_control: { type: 'ephemeral' },\n }],\n userPrompt,\n maxTokens: 8192,\n rawText: true,\n });\n\n const domainText = (response.raw || String(response.data) || '').trim();\n\n const usage = {\n inputTokens: response.usage?.promptTokens || 0,\n outputTokens: response.usage?.completionTokens || 0,\n totalTokens: response.usage?.totalTokens || 0,\n };\n\n setCache(fingerprint, {\n domainText,\n timestamp: Date.now(),\n usage,\n });\n\n emitEvent(spec.name, orbitalIndex, totalOrbitals, 'tool_result', {\n tool: 'llm_generate_domain',\n result: { fingerprint, textLength: domainText.length, usage },\n success: true,\n });\n\n appendToDomainFile(workDir, domainText, spec.name);\n\n emitEvent(spec.name, orbitalIndex, totalOrbitals, 'message', {\n content: `Generated domain for ${spec.name} (${usage.totalTokens} tokens) - written to domain.txt`,\n role: 'assistant',\n isComplete: true,\n });\n\n if (completeCallback) {\n try {\n await completeCallback(domainText, spec.name, orbitalIndex, totalOrbitals);\n } catch (error) {\n console.error(`[DomainOrbitalTool] Callback error for ${spec.name}:`, error);\n }\n }\n\n return JSON.stringify({\n success: true,\n orbitalName: spec.name,\n fingerprint,\n cached: false,\n domainWritten: true,\n usage,\n domainText,\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n emitEvent(spec.name, orbitalIndex, totalOrbitals, 'error', {\n error: errorMessage,\n code: 'DOMAIN_ORBITAL_ERROR',\n });\n\n return JSON.stringify({\n success: false,\n error: errorMessage,\n orbitalName: spec.name,\n });\n }\n },\n {\n name: 'generate_orbital_domain',\n description: `Generate domain language for a single orbital using LLM.\n\nTakes a lightweight orbital specification and generates complete domain language text.\nResults are cached by fingerprint to avoid regenerating identical orbitals.\n\nUSAGE:\n1. Decompose app into orbital specs\n2. For each orbital, call generate_orbital_domain\n3. After all orbitals, call construct_combined_domain`,\n schema: GenerateOrbitalDomainSchema,\n }\n );\n\n return {\n tool: generateOrbitalDomainTool,\n setEventCallback,\n setCompleteCallback,\n };\n}\n\n/**\n * Create the construct_combined_domain tool.\n */\nexport function createConstructCombinedDomainTool(\n \n options: { onEvent?: DomainOrbitalEventCallback; workDir?: string } = {},\n) {\n let eventCallback = options.onEvent;\n const workDir = options.workDir || process.cwd();\n\n const setEventCallback = (callback: DomainOrbitalEventCallback) => {\n eventCallback = callback;\n };\n\n const emitEvent = (\n type: Exclude<SSEEventType, 'subagent_event'>,\n data: Record<string, unknown>\n ) => {\n if (eventCallback) {\n eventCallback('combined', 0, 1, {\n type,\n data,\n timestamp: Date.now(),\n });\n }\n };\n\n const constructCombinedDomainTool = tool(\n async ({ appName }) => {\n try {\n const domainText = readDomainFile(workDir);\n if (!domainText) {\n return JSON.stringify({\n success: false,\n error: 'No domain.txt found. Call generate_orbital_domain first.',\n });\n }\n\n emitEvent('message', {\n content: `Converting domain.txt to OrbitalSchema for ${appName}`,\n role: 'assistant',\n isComplete: false,\n });\n\n const schemaResult = convertDomainToSchema(domainText, {\n name: appName,\n orbitals: [],\n });\n\n if (!schemaResult.success) {\n const errorMessages = schemaResult.errors?.map(e => e.message).join('; ') || 'Unknown conversion error';\n\n emitEvent('error', {\n error: errorMessages,\n code: 'DOMAIN_CONVERSION_ERROR',\n });\n\n return JSON.stringify({\n success: false,\n error: errorMessages,\n domainText,\n });\n }\n\n emitEvent('message', {\n content: `Successfully converted domain.txt to OrbitalSchema for ${appName}`,\n role: 'assistant',\n isComplete: true,\n });\n\n const traitCount = (schemaResult.schema?.orbitals || []).reduce((count, o) => {\n if (typeof o === 'object' && o !== null && 'traits' in o) {\n return count + ((o as { traits?: unknown[] }).traits?.length || 0);\n }\n return count;\n }, 0);\n\n return JSON.stringify({\n success: true,\n appName,\n domainText,\n schema: schemaResult.schema,\n stats: {\n orbitalCount: schemaResult.schema?.orbitals?.length || 0,\n traitCount,\n },\n domainPath: path.join(workDir, 'domain.txt'),\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n emitEvent('error', {\n error: errorMessage,\n code: 'CONSTRUCT_COMBINED_ERROR',\n });\n\n return JSON.stringify({\n success: false,\n error: errorMessage,\n });\n }\n },\n {\n name: 'construct_combined_domain',\n description: `Convert accumulated domain.txt to OrbitalSchema.\n\nCall this after all orbitals have been generated via generate_orbital_domain.`,\n schema: ConstructCombinedDomainSchema,\n }\n );\n\n return {\n tool: constructCombinedDomainTool,\n setEventCallback,\n };\n}\n\n/**\n * Create both domain orbital tools together.\n */\nexport function createDomainOrbitalTools(\n options: DomainOrbitalToolOptions = {},\n) {\n const generateTool = createGenerateOrbitalDomainTool(options);\n const constructTool = createConstructCombinedDomainTool({\n onEvent: options.onEvent,\n workDir: options.workDir,\n });\n\n return {\n generateOrbitalDomain: generateTool.tool,\n constructCombinedDomain: constructTool.tool,\n setEventCallback: (callback: DomainOrbitalEventCallback) => {\n generateTool.setEventCallback(callback);\n constructTool.setEventCallback(callback);\n },\n setCompleteCallback: generateTool.setCompleteCallback,\n };\n}\n","/**\n * Orbital Generator\n *\n * Provides utilities for generating FullOrbitalUnit definitions from\n * lightweight OrbitalUnit inputs. Designed for SUBAGENT use where each\n * orbital is generated separately for better caching.\n *\n * ## Subagent Caching Pattern\n *\n * When generating multiple orbitals in a subagent pattern:\n * 1. Main agent decomposes request → OrbitalUnit[]\n * 2. For each orbital, subagent calls generateFullOrbital()\n * 3. Each subagent call uses the SAME cached system prompt blocks\n * 4. Anthropic caches at request level → subsequent calls get 90% discount\n *\n * This is MORE efficient than batch generation because:\n * - System prompt is cached and reused across subagent calls\n * - Template guidance is cached per fingerprint\n * - Only the orbital-specific content varies\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient, LLMProvider } from '@almadar/llm';\nimport { assembleCacheableOrbitalPrompt, assembleOrbitalPrompt } from '../cache/index.js';\nimport { getOrbitalDecompositionPrompt, getFullOrbitalPrompt, getRequirementsDecomposePrompt, getRequirementsTraitPrompt } from '@almadar/skills';\nimport type { OrbitalDefinition, FullOrbitalUnit, EntityRef } from '@almadar/core/types';\nimport { isEntityReference } from '@almadar/core/types';\n// DEPRECATED: Validation removed - use orbital-rust validator instead\n// import { validateFullOrbitalUnit } from '../../validation/index.js';\n\n/**\n * Get entity name safely from EntityRef\n */\nfunction getEntityName(entity: EntityRef): string {\n if (isEntityReference(entity)) {\n return entity.replace('.entity', '');\n }\n return entity.name;\n}\n\n// ============================================================================\n// Requirements Types (imported structure from analysis)\n// ============================================================================\n\n/**\n * Extracted requirements from the analysis phase.\n * Matches ExtractedRequirements from agents/orchestrator/shared/requirements.ts\n */\nexport interface ExtractedRequirements {\n /** Entity names to create */\n entities: string[];\n /** State names that should exist */\n states: string[];\n /** Event/action names */\n events: string[];\n /** Business rules (become guards) */\n guards: string[];\n /** Page types needed */\n pages: string[];\n /** Notifications/side-effects */\n effects: string[];\n /** Raw requirement statements */\n rawRequirements: string[];\n}\n\n// Type alias - OrbitalUnit in generator context is always a full definition\ntype OrbitalUnit = OrbitalDefinition;\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * A structured log entry from the generation process.\n * Used for debugging and observability of subagent reasoning.\n */\nexport interface GenerationLog {\n /** Timestamp of the log entry */\n timestamp: number;\n /** Log level */\n level: 'info' | 'warn' | 'error' | 'debug';\n /** Log message */\n message: string;\n /** Optional structured data */\n data?: Record<string, unknown>;\n}\n\nexport interface OrbitalGenerationOptions {\n /** Maximum tokens for generation */\n maxTokens?: number;\n /** Enable validation after generation */\n validate?: boolean;\n /** Callback for real-time log streaming (SSE integration) */\n onLog?: (log: GenerationLog, orbitalName?: string) => void;\n /** Optional requirements relevant to this orbital (from analysis) */\n requirements?: Partial<ExtractedRequirements>;\n}\n\nexport interface OrbitalGenerationResult {\n /** Generated full orbital unit */\n orbital: FullOrbitalUnit;\n /** Fingerprint used for caching */\n fingerprint: string;\n /** Whether template guidance was used */\n usedTemplate: boolean;\n /** Token usage */\n usage?: {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n };\n /** Validation result */\n validation?: {\n valid: boolean;\n errorCount: number;\n warningCount: number;\n };\n /** Structured logs from the generation process */\n logs: GenerationLog[];\n}\n\n// ============================================================================\n// Provider Concurrency Limits\n// ============================================================================\n\n/**\n * Default concurrency limits per LLM provider.\n * These are conservative defaults to avoid rate limiting.\n */\nexport const PROVIDER_CONCURRENCY_LIMITS: Record<LLMProvider, number> = {\n anthropic: 3,\n openai: 5,\n deepseek: 3,\n kimi: 3,\n};\n\nexport interface ParallelGenerationOptions extends OrbitalGenerationOptions {\n /** Maximum concurrent generations (default: provider-specific) */\n concurrency?: number;\n}\n\nexport interface ParallelGenerationResult {\n /** Results for each orbital (same order as input) */\n results: OrbitalGenerationResult[];\n /** Total duration in milliseconds */\n totalDurationMs: number;\n /** Aggregate logs from all generations */\n aggregateLogs: GenerationLog[];\n /** Summary statistics */\n summary: {\n total: number;\n successful: number;\n failed: number;\n totalTokens: number;\n };\n}\n\n// ============================================================================\n// Logging Utility\n// ============================================================================\n\nfunction createLog(level: GenerationLog['level'], message: string, data?: Record<string, unknown>): GenerationLog {\n return {\n timestamp: Date.now(),\n level,\n message,\n data,\n };\n}\n\n// ============================================================================\n// Single Orbital Generation (For Subagent Use)\n// ============================================================================\n\n/**\n * Generate a full orbital unit from a lightweight orbital input.\n *\n * DESIGNED FOR SUBAGENT USE: Call this once per orbital in separate\n * subagent invocations. Caching works across calls because:\n * - System prompt blocks are marked as cacheable\n * - Anthropic caches at the request level\n * - Subsequent calls with same system prompt get cache hits\n *\n * @example\n * ```typescript\n * // In subagent for each orbital:\n * const result = await generateFullOrbital(client, orbitalUnit, { validate: true });\n * // First call: Cache WRITE: 3500 tokens\n * // Second call: Cache HIT: 3500 tokens (90% discount!)\n * ```\n */\nexport async function generateFullOrbital(\n client: LLMClient,\n orbital: OrbitalUnit,\n options: OrbitalGenerationOptions = {}\n): Promise<OrbitalGenerationResult> {\n const {\n maxTokens = 8192,\n validate = true,\n requirements,\n } = options;\n\n const logs: GenerationLog[] = [];\n const startTime = Date.now();\n\n logs.push(createLog('info', `Starting generation for orbital: ${orbital.name}`, {\n entityName: getEntityName(orbital.entity),\n traitCount: orbital.traits.length,\n hasRequirements: !!requirements,\n }));\n\n // Use requirements-aware prompt if requirements provided\n const systemPrompt = requirements\n ? getRequirementsAwareFullOrbitalPrompt(requirements)\n : getFullOrbitalPrompt();\n\n // Check if using Anthropic for cache support\n const useCache = client.getProvider() === 'anthropic';\n\n let result;\n let fingerprint: string;\n let usedTemplate = false;\n\n if (useCache) {\n // Use cache-aware call - this is where the magic happens\n const cacheablePrompt = assembleCacheableOrbitalPrompt(orbital, systemPrompt);\n fingerprint = cacheablePrompt.fingerprint;\n usedTemplate = cacheablePrompt.usedCachedTemplate;\n\n logs.push(createLog('info', `Using Anthropic caching`, { fingerprint, usedTemplate }));\n console.log(`[OrbitalGenerator] Using Anthropic caching (fingerprint: ${fingerprint})`);\n\n result = await client.callWithCache({\n systemBlocks: cacheablePrompt.systemBlocks,\n userBlocks: cacheablePrompt.userBlocks,\n systemPrompt: '', // Overridden by blocks\n userPrompt: '', // Overridden by blocks\n maxTokens,\n skipSchemaValidation: true, // Parse JSON only\n });\n\n logs.push(createLog('info', `LLM call completed`, {\n promptTokens: result.usage?.promptTokens,\n completionTokens: result.usage?.completionTokens,\n }));\n } else {\n // Standard call for non-Anthropic providers\n const assembledPrompt = assembleOrbitalPrompt(orbital, systemPrompt);\n fingerprint = assembledPrompt.fingerprint;\n usedTemplate = assembledPrompt.usedCachedTemplate;\n\n logs.push(createLog('info', `Using standard generation (${client.getProvider()})`, { fingerprint, usedTemplate }));\n\n const userPrompt = `Generate a complete FullOrbitalUnit for this orbital:\n\n${JSON.stringify(orbital, null, 2)}\n\nReturn valid JSON matching the FullOrbitalUnit schema.`;\n\n result = await client.callWithMetadata({\n systemPrompt: assembledPrompt.prompt,\n userPrompt,\n maxTokens,\n skipSchemaValidation: true,\n });\n\n logs.push(createLog('info', `LLM call completed`, {\n promptTokens: result.usage?.promptTokens,\n completionTokens: result.usage?.completionTokens,\n }));\n }\n\n const generatedOrbital = result.data as OrbitalDefinition;\n\n // Validate if requested\n let validation;\n if (validate) {\n // Use direct per-unit validation\n // DEPRECATED: Validation removed - use orbital-rust validator instead\n // const validationResult = validateFullOrbitalUnit(generatedOrbital);\n const validationResult: any = { valid: true, errors: [], warnings: [] };\n validation = {\n valid: validationResult.valid,\n errorCount: validationResult.errors.length,\n warningCount: (validationResult.warnings || []).length,\n };\n\n if (validationResult.valid) {\n logs.push(createLog('info', `Validation passed`));\n } else {\n logs.push(createLog('warn', `Validation failed`, {\n errorCount: validationResult.errors.length,\n warningCount: (validationResult.warnings || []).length,\n errors: validationResult.errors.slice(0, 3).map((e: any) => e.message || e),\n }));\n }\n }\n\n const durationMs = Date.now() - startTime;\n logs.push(createLog('info', `Generation completed`, { durationMs }));\n\n return {\n orbital: generatedOrbital,\n fingerprint,\n usedTemplate,\n usage: result.usage ?? undefined,\n validation,\n logs,\n };\n}\n\n// ============================================================================\n// Parallel Orbital Generation\n// ============================================================================\n\n/**\n * Generate multiple orbitals in parallel with concurrency control.\n *\n * Uses provider-specific concurrency limits to avoid rate limiting.\n * All orbital units are independent, so parallel execution is safe.\n *\n * @example\n * ```typescript\n * // Generate all orbitals in parallel (max 3 concurrent for Anthropic)\n * const result = await generateFullOrbitalsParallel(client, orbitals, { validate: true });\n * console.log(`Generated ${result.summary.successful}/${result.summary.total} orbitals`);\n * ```\n */\nexport async function generateFullOrbitalsParallel(\n client: LLMClient,\n orbitals: OrbitalUnit[],\n options: ParallelGenerationOptions = {}\n): Promise<ParallelGenerationResult> {\n const provider = client.getProvider();\n const defaultConcurrency = PROVIDER_CONCURRENCY_LIMITS[provider] ?? 3;\n const concurrency = options.concurrency ?? defaultConcurrency;\n\n const aggregateLogs: GenerationLog[] = [];\n const startTime = Date.now();\n\n aggregateLogs.push(createLog('info', `Starting parallel generation`, {\n totalOrbitals: orbitals.length,\n concurrency,\n provider,\n }));\n\n console.log(`[OrbitalGenerator] Parallel generation: ${orbitals.length} orbitals, concurrency=${concurrency}`);\n\n // Simple concurrency limiter using a semaphore pattern\n let activeCount = 0;\n const queue: Array<() => void> = [];\n\n const acquire = (): Promise<void> => {\n return new Promise((resolve) => {\n if (activeCount < concurrency) {\n activeCount++;\n resolve();\n } else {\n queue.push(resolve);\n }\n });\n };\n\n const release = () => {\n activeCount--;\n const next = queue.shift();\n if (next) {\n activeCount++;\n next();\n }\n };\n\n // Generate all orbitals in parallel with concurrency control\n const results = await Promise.all(\n orbitals.map(async (orbital, index) => {\n await acquire();\n try {\n aggregateLogs.push(createLog('debug', `Starting orbital ${index + 1}/${orbitals.length}: ${orbital.name}`));\n const result = await generateFullOrbital(client, orbital, options);\n aggregateLogs.push(createLog('info', `Completed orbital ${index + 1}/${orbitals.length}: ${orbital.name}`, {\n valid: result.validation?.valid,\n tokens: result.usage?.totalTokens,\n }));\n return result;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n aggregateLogs.push(createLog('error', `Failed orbital ${index + 1}/${orbitals.length}: ${orbital.name}`, {\n error: errorMessage,\n }));\n // Return a failed result instead of throwing\n return {\n orbital: null as unknown as FullOrbitalUnit,\n fingerprint: '',\n usedTemplate: false,\n logs: [createLog('error', errorMessage)],\n validation: { valid: false, errorCount: 1, warningCount: 0 },\n } as OrbitalGenerationResult;\n } finally {\n release();\n }\n })\n );\n\n const totalDurationMs = Date.now() - startTime;\n const successful = results.filter(r => r.validation?.valid !== false && r.orbital !== null).length;\n const failed = results.length - successful;\n const totalTokens = results.reduce((sum, r) => sum + (r.usage?.totalTokens ?? 0), 0);\n\n aggregateLogs.push(createLog('info', `Parallel generation completed`, {\n totalDurationMs,\n successful,\n failed,\n totalTokens,\n }));\n\n console.log(`[OrbitalGenerator] Parallel generation complete: ${successful}/${results.length} successful in ${totalDurationMs}ms`);\n\n return {\n results,\n totalDurationMs,\n aggregateLogs,\n summary: {\n total: results.length,\n successful,\n failed,\n totalTokens,\n },\n };\n}\n\n// ============================================================================\n// Decomposition (For Main Agent Use)\n// ============================================================================\n\n/**\n * Options for decomposing requests into orbitals.\n */\nexport interface DecomposeOptions {\n /** Maximum tokens for generation */\n maxTokens?: number;\n /** Optional extracted requirements from analysis phase */\n requirements?: ExtractedRequirements;\n}\n\n/**\n * Decompose a user request into OrbitalUnits using LLM.\n *\n * This is typically called by the MAIN AGENT before delegating\n * to subagents for full orbital generation.\n *\n * @example\n * ```typescript\n * // Without requirements (existing behavior):\n * const orbitals = await decomposeToOrbitals(client, \"Build a task manager\");\n *\n * // With requirements (from analysis phase):\n * const orbitals = await decomposeToOrbitals(client, \"Build a task manager\", {\n * requirements: { entities: [\"Task\"], guards: [\"only admins can delete\"], ... }\n * });\n *\n * // Then generate all orbitals in parallel:\n * const result = await generateFullOrbitalsParallel(client, orbitals);\n * ```\n */\nexport async function decomposeToOrbitals(\n client: LLMClient,\n userRequest: string,\n options: DecomposeOptions = {}\n): Promise<OrbitalUnit[]> {\n const { maxTokens = 4096, requirements } = options;\n\n // Use requirements-aware prompt if requirements provided\n const systemPrompt = requirements\n ? getRequirementsAwareDecompositionPrompt(requirements)\n : getOrbitalDecompositionPrompt();\n\n const userPrompt = `Decompose this application request into Orbital Units:\n\n${userRequest}\n\nReturn a JSON array of OrbitalUnit objects.`;\n\n const result = await client.call({\n systemPrompt,\n userPrompt,\n maxTokens,\n skipSchemaValidation: true,\n });\n\n return result as OrbitalUnit[];\n}\n\n/**\n * Build a requirements-aware decomposition prompt.\n */\nfunction getRequirementsAwareDecompositionPrompt(requirements: ExtractedRequirements): string {\n const basePrompt = getOrbitalDecompositionPrompt();\n const requirementsGuidance = getRequirementsDecomposePrompt();\n\n const requirementsList = `\n## Extracted Requirements (Use These!)\n\n### Entities to Create\n${requirements.entities.length > 0 ? requirements.entities.map(e => `- ${e}`).join('\\n') : '- (none specified)'}\n\n### States (Map to State Machines)\n${requirements.states.length > 0 ? requirements.states.map(s => `- ${s}`).join('\\n') : '- (none specified)'}\n\n### Events (Map to Transitions)\n${requirements.events.length > 0 ? requirements.events.map(e => `- ${e}`).join('\\n') : '- (none specified)'}\n\n### Guards (Map to Transition Guards)\n${requirements.guards.length > 0 ? requirements.guards.map(g => `- ${g}`).join('\\n') : '- (none specified)'}\n\n### Effects (Map to Transition Effects)\n${requirements.effects.length > 0 ? requirements.effects.map(e => `- ${e}`).join('\\n') : '- (none specified)'}\n\n### Pages (Map to Page Definitions)\n${requirements.pages.length > 0 ? requirements.pages.map(p => `- ${p}`).join('\\n') : '- (none specified)'}\n\nUse these requirements to:\n1. Create one OrbitalUnit per primary entity in the list\n2. Distribute guards to relevant orbitals\n3. Distribute effects to relevant orbitals\n4. Ensure state machines cover the required states\n`;\n\n return `${basePrompt}\n\n---\n\n${requirementsGuidance}\n\n---\n\n${requirementsList}`;\n}\n\n/**\n * Build a requirements-aware full orbital generation prompt.\n */\nfunction getRequirementsAwareFullOrbitalPrompt(requirements: Partial<ExtractedRequirements>): string {\n const basePrompt = getFullOrbitalPrompt();\n const requirementsGuidance = getRequirementsTraitPrompt();\n\n const sections: string[] = [];\n\n if (requirements.guards && requirements.guards.length > 0) {\n sections.push(`### Guards to Implement\n${requirements.guards.map(g => `- ${g}`).join('\\n')}\n\nConvert these to \\`guard\\` expressions on transitions with \\`guardError\\` messages.`);\n }\n\n if (requirements.effects && requirements.effects.length > 0) {\n sections.push(`### Effects to Implement\n${requirements.effects.map(e => `- ${e}`).join('\\n')}\n\nConvert these to \\`effects\\` arrays on transitions (emit_event or call_service).`);\n }\n\n if (requirements.states && requirements.states.length > 0) {\n sections.push(`### States to Include\n${requirements.states.map(s => `- ${s}`).join('\\n')}\n\nUse these exact states in the state machine. First is initial, identify final states.`);\n }\n\n if (requirements.events && requirements.events.length > 0) {\n sections.push(`### Events to Include\n${requirements.events.map(e => `- ${e}`).join('\\n')}\n\nUse these event names in transitions.`);\n }\n\n if (sections.length === 0) {\n return basePrompt;\n }\n\n return `${basePrompt}\n\n---\n\n${requirementsGuidance}\n\n---\n\n## Requirements for This Orbital\n\n${sections.join('\\n\\n')}\n`;\n}\n\n// ============================================================================\n// Cache Statistics\n// ============================================================================\n\n/**\n * Estimate cache savings for a set of orbitals.\n *\n * Use this to predict how much caching will help for a decomposition.\n */\nexport function estimateCacheSavings(orbitals: OrbitalUnit[]): {\n totalOrbitals: number;\n uniqueFingerprints: number;\n estimatedCacheHits: number;\n estimatedSavingsPercent: number;\n} {\n const { getCacheStats } = require('../cache/index.js');\n const stats = getCacheStats(orbitals);\n\n // Each call after the first with same fingerprint is a cache hit\n const cacheHits = stats.potentialCacheHits;\n const savingsPercent = orbitals.length > 0\n ? Math.round((cacheHits / orbitals.length) * 90) // 90% discount on cache hits\n : 0;\n\n return {\n totalOrbitals: stats.totalOrbitals,\n uniqueFingerprints: stats.uniqueFingerprints,\n estimatedCacheHits: cacheHits,\n estimatedSavingsPercent: savingsPercent,\n };\n}\n","/**\n * Orbital Subagent Tool\n *\n * Spawns nested DeepAgents for orbital generation and forwards\n * their events to the parent stream.\n * Uses @almadar/llm LLMClient directly.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport type { OrbitalDefinition, EntityRef } from '@almadar/core/types';\nimport { isEntityReference, AgentDomainCategorySchema } from '@almadar/core/types';\nimport { LLMClient } from '@almadar/llm';\nimport type { SSEEvent, SSEEventType } from '../api-types.js';\nimport { generateFullOrbital } from '../orbitals/generation/index.js';\n\n/**\n * Get entity name safely from EntityRef.\n */\nfunction getEntityName(entity: EntityRef): string {\n if (isEntityReference(entity)) {\n return entity.replace('.entity', '');\n }\n return entity.name;\n}\n\n// Type alias for backward compatibility\ntype OrbitalUnit = OrbitalDefinition;\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type SubagentEventCallback = (\n orbitalName: string,\n orbitalIndex: number,\n totalOrbitals: number,\n event: {\n type: Exclude<SSEEventType, 'subagent_event'>;\n data: Record<string, unknown>;\n timestamp: number;\n },\n) => void;\n\nexport type OrbitalCompleteCallback = (\n orbital: unknown,\n orbitalName: string,\n orbitalIndex: number,\n totalOrbitals: number,\n) => void | Promise<void>;\n\nexport interface OrbitalRequirements {\n entities?: string[];\n states?: string[];\n events?: string[];\n guards?: string[];\n pages?: string[];\n effects?: string[];\n rawRequirements?: string[];\n}\n\nexport interface OrbitalSubagentToolOptions {\n onSubagentEvent?: SubagentEventCallback;\n onOrbitalComplete?: OrbitalCompleteCallback;\n requirements?: OrbitalRequirements;\n}\n\n// ============================================================================\n// Zod Schema\n// ============================================================================\n\nconst OrbitalInputSchema = z.object({\n orbital: z\n .object({\n name: z.string(),\n entity: z.object({\n name: z.string(),\n persistence: z.enum(['persistent', 'runtime', 'singleton', 'instance']),\n fields: z.array(\n z.object({\n name: z.string(),\n type: z.string(),\n required: z.boolean().optional(),\n }),\n ),\n }),\n traits: z.array(z.string()),\n patterns: z.array(z.string()),\n pages: z.array(\n z.object({\n name: z.string(),\n path: z.string(),\n viewType: z.string(),\n }),\n ).optional(),\n domainContext: z.object({\n request: z.string(),\n requestFragment: z.string().optional(),\n category: AgentDomainCategorySchema,\n vocabulary: z.record(z.string(), z.string()).optional(),\n }).optional(),\n design: z.object({\n style: z.enum(['minimal', 'modern', 'playful', 'data-driven', 'immersive']).optional(),\n uxHints: z.object({\n flowPattern: z.string().optional(),\n listPattern: z.string().optional(),\n formPattern: z.string().optional(),\n detailPattern: z.string().optional(),\n }).optional(),\n }).optional(),\n emits: z.array(z.string()).optional(),\n listens: z.array(\n z.object({\n event: z.string(),\n triggers: z.string(),\n }),\n ).optional(),\n relations: z.array(\n z.object({\n entity: z.string(),\n alias: z.string().optional(),\n cardinality: z.enum(['one', 'many']),\n }),\n ).optional(),\n })\n .describe('The OrbitalUnit to generate'),\n orbitalIndex: z.number().optional().describe('Index in the batch (0-based)'),\n totalOrbitals: z.number().optional().describe('Total orbitals in the batch'),\n});\n\n// ============================================================================\n// Tool Factory\n// ============================================================================\n\n/**\n * Create a tool for generating orbitals with subagent event streaming.\n * Uses @almadar/llm LLMClient directly.\n */\nexport function createOrbitalSubagentTool(\n options: OrbitalSubagentToolOptions = {},\n) {\n let eventCallback: SubagentEventCallback | undefined = options.onSubagentEvent;\n let completeCallback: OrbitalCompleteCallback | undefined = options.onOrbitalComplete;\n const requirements = options.requirements;\n\n const setEventCallback = (callback: SubagentEventCallback) => {\n eventCallback = callback;\n };\n\n const setOrbitalCompleteCallback = (callback: OrbitalCompleteCallback) => {\n completeCallback = callback;\n };\n\n const emitEvent = (\n orbitalName: string,\n orbitalIndex: number,\n totalOrbitals: number,\n type: Exclude<SSEEventType, 'subagent_event'>,\n data: Record<string, unknown>,\n ) => {\n if (eventCallback) {\n eventCallback(orbitalName, orbitalIndex, totalOrbitals, {\n type,\n data,\n timestamp: Date.now(),\n });\n }\n };\n\n const orbitalTool = tool(\n async ({ orbital, orbitalIndex = 0, totalOrbitals = 1 }) => {\n if (!orbital) {\n const errorMsg = 'Missing required parameter: orbital.';\n return JSON.stringify({ success: false, error: errorMsg, orbital: null });\n }\n\n const orbitalUnit = orbital as OrbitalUnit;\n\n if (!orbitalUnit.entity || !orbitalUnit.name) {\n const errorMsg = `Invalid orbital: missing required fields (name: ${orbitalUnit.name}, entity: ${orbitalUnit.entity}).`;\n return JSON.stringify({ success: false, error: errorMsg, orbital: orbitalUnit.name || 'unknown' });\n }\n\n try {\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'message', {\n content: `Starting generation for orbital: ${orbitalUnit.name}${requirements ? ' (with requirements from analysis)' : ''}`,\n role: 'assistant',\n isComplete: false,\n });\n\n if (requirements) {\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'generation_log', {\n level: 'info',\n message: 'Using requirements from analysis phase',\n data: {\n guards: requirements.guards?.length ?? 0,\n effects: requirements.effects?.length ?? 0,\n states: requirements.states?.length ?? 0,\n },\n orbitalName: orbitalUnit.name,\n });\n }\n\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'todo_update', {\n todos: [\n { id: 'analyze', task: 'Analyze orbital structure', status: 'in_progress' },\n { id: 'generate', task: 'Generate full schema', status: 'pending' },\n { id: 'validate', task: 'Validate output', status: 'pending' },\n ],\n });\n\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'message', {\n content: `Analyzing entity: ${getEntityName(orbitalUnit.entity)} with ${orbitalUnit.traits.length} traits`,\n role: 'assistant',\n isComplete: false,\n });\n\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'todo_update', {\n todos: [\n { id: 'analyze', task: 'Analyze orbital structure', status: 'completed' },\n { id: 'generate', task: 'Generate full schema', status: 'in_progress' },\n { id: 'validate', task: 'Validate output', status: 'pending' },\n ],\n });\n\n // Use @almadar/llm directly\n const client = new LLMClient({\n provider: 'anthropic',\n model: 'claude-sonnet-4-20250514',\n });\n\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'tool_call', {\n tool: 'llm_generate',\n args: {\n orbital: orbitalUnit.name,\n entity: getEntityName(orbitalUnit.entity),\n traits: orbitalUnit.traits,\n },\n });\n\n const result = await generateFullOrbital(client, orbitalUnit, {\n validate: true,\n requirements,\n onLog: (log) => {\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'generation_log', {\n level: log.level,\n message: log.message,\n data: log.data,\n orbitalName: orbitalUnit.name,\n });\n },\n });\n\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'tool_result', {\n tool: 'llm_generate',\n result: {\n fingerprint: result.fingerprint,\n usedTemplate: result.usedTemplate,\n usage: result.usage,\n },\n success: true,\n });\n\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'todo_update', {\n todos: [\n { id: 'analyze', task: 'Analyze orbital structure', status: 'completed' },\n { id: 'generate', task: 'Generate full schema', status: 'completed' },\n { id: 'validate', task: 'Validate output', status: 'in_progress' },\n ],\n });\n\n const finalOrbital = result.orbital;\n const finalValidation = result.validation;\n\n if (finalValidation) {\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'tool_result', {\n tool: 'validate_orbital',\n result: finalValidation,\n success: finalValidation.valid,\n });\n }\n\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'todo_update', {\n todos: [\n { id: 'analyze', task: 'Analyze orbital structure', status: 'completed' },\n { id: 'generate', task: 'Generate full schema', status: 'completed' },\n { id: 'validate', task: 'Validate output', status: 'completed' },\n ],\n });\n\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'message', {\n content: `Generated orbital: ${orbitalUnit.name} (${result.usage?.totalTokens ?? 0} tokens)`,\n role: 'assistant',\n isComplete: true,\n });\n\n if (completeCallback && finalOrbital) {\n try {\n await completeCallback(finalOrbital, orbitalUnit.name, orbitalIndex, totalOrbitals);\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'generation_log', {\n level: 'info',\n message: `Persisted orbital: ${orbitalUnit.name}`,\n orbitalName: orbitalUnit.name,\n });\n } catch (persistError) {\n console.error(`[OrbitalSubagent] Failed to persist ${orbitalUnit.name}:`, persistError);\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'generation_log', {\n level: 'warn',\n message: `Failed to persist orbital: ${orbitalUnit.name}`,\n data: { error: String(persistError) },\n orbitalName: orbitalUnit.name,\n });\n }\n }\n\n return JSON.stringify({\n success: true,\n orbital: finalOrbital,\n fingerprint: result.fingerprint,\n usage: result.usage,\n validation: result.validation,\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'error', {\n error: errorMessage,\n code: 'ORBITAL_GENERATION_ERROR',\n });\n\n return JSON.stringify({\n success: false,\n error: errorMessage,\n orbital: orbitalUnit.name,\n });\n }\n },\n {\n name: 'generate_orbital',\n description: `Generate a full orbital schema from an OrbitalUnit.\n\nSpawns a subagent to expand a lightweight OrbitalUnit into a complete\nFullOrbitalUnit with all sections, layouts, and configurations.\n\nUSAGE:\n1. Decompose user request into OrbitalUnits\n2. For each orbital, call generate_orbital with embedded context\n3. Collect results and merge into final schema`,\n schema: OrbitalInputSchema,\n },\n );\n\n return {\n tool: orbitalTool,\n setEventCallback,\n setOrbitalCompleteCallback,\n };\n}\n\n/**\n * Create a helper to wrap subagent events into SSE format.\n */\nexport function createSubagentEventWrapper(\n writeEvent: (event: SSEEvent) => void,\n): SubagentEventCallback {\n return (orbitalName, orbitalIndex, totalOrbitals, event) => {\n const sseEvent: SSEEvent = {\n type: 'subagent_event',\n timestamp: Date.now(),\n data: {\n orbitalName,\n orbitalIndex,\n totalOrbitals,\n event,\n },\n };\n writeEvent(sseEvent);\n };\n}\n","/**\n * Trait Subagent Tool\n *\n * Generates custom trait definitions for orbital schemas.\n * Uses @almadar/llm LLMClient directly.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport type { Trait } from '@almadar/core/types';\nimport { LLMClient } from '@almadar/llm';\nimport type { SSEEventType } from '../api-types.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type TraitEventCallback = (\n traitName: string,\n traitIndex: number,\n totalTraits: number,\n event: {\n type: Exclude<SSEEventType, 'subagent_event'>;\n data: Record<string, unknown>;\n timestamp: number;\n }\n) => void;\n\nexport type TraitCompleteCallback = (\n trait: Trait,\n traitName: string,\n traitIndex: number,\n totalTraits: number\n) => void | Promise<void>;\n\nexport interface TraitSubagentToolOptions {\n onTraitEvent?: TraitEventCallback;\n onTraitComplete?: TraitCompleteCallback;\n}\n\nexport interface TraitSpec {\n name: string;\n description: string;\n category?: string;\n states?: string[];\n events?: string[];\n requiredFields?: Array<{\n name: string;\n type: string;\n description?: string;\n }>;\n needsTicks?: boolean;\n needsEmit?: boolean;\n needsListens?: boolean;\n}\n\n// ============================================================================\n// Trait Generation Prompt\n// ============================================================================\n\nfunction getTraitGenerationPrompt(): string {\n return `You are a Trait Generator for KFlow orbital schemas.\n\n## Your Task\n\nGenerate a complete, valid Trait definition that implements the requested behavior.\n\n## Trait Structure\n\n\\`\\`\\`typescript\ninterface Trait {\n name: string;\n description?: string;\n category?: TraitCategory;\n requiredFields?: RequiredField[];\n dataEntities?: TraitDataEntity[];\n stateMachine?: StateMachine;\n initialEffects?: Effect[];\n ticks?: TraitTick[];\n listens?: TraitEventListener[];\n}\n\\`\\`\\`\n\n## State Machine Structure\n\n\\`\\`\\`typescript\ninterface StateMachine {\n states: State[];\n events: Event[];\n transitions: Transition[];\n guards?: Guard[];\n}\n\\`\\`\\`\n\n## Best Practices\n\n1. **State Names**: Use PascalCase (e.g., \"Idle\", \"Loading\", \"Playing\")\n2. **Event Keys**: Use UPPER_SNAKE_CASE (e.g., \"START_GAME\", \"PLAYER_HIT\")\n3. **Initial State**: Always mark exactly one state as \\`isInitial: true\\`\n4. **Terminal States**: Mark end states as \\`isFinal: true\\`\n\n## Output Format\n\nReturn ONLY valid JSON matching the Trait interface. No markdown, no explanation.`;\n}\n\n// ============================================================================\n// Zod Schemas\n// ============================================================================\n\nconst TraitSpecSchema = z.object({\n name: z.string().describe('Name of the trait'),\n description: z.string().describe('Description of what this trait does'),\n category: z.string().optional().describe('Category'),\n states: z.array(z.string()).optional().describe('States the trait should have'),\n events: z.array(z.string()).optional().describe('Events the trait should handle'),\n requiredFields: z.array(z.object({\n name: z.string(),\n type: z.string(),\n description: z.string().optional(),\n })).optional().describe('Fields required from the linked entity'),\n needsTicks: z.boolean().optional().describe('Whether this trait needs temporal behavior'),\n needsEmit: z.boolean().optional().describe('Whether this trait emits events'),\n needsListens: z.boolean().optional().describe('Whether this trait listens for events'),\n});\n\nconst TraitInputSchema = z.object({\n traitSpec: TraitSpecSchema.describe('Specification for the trait to generate'),\n traitIndex: z.number().optional().describe('Index in the batch (0-based)'),\n totalTraits: z.number().optional().describe('Total traits in the batch'),\n});\n\n// ============================================================================\n// Tool Factory\n// ============================================================================\n\n/**\n * Create a tool for generating custom traits.\n * Uses @almadar/llm LLMClient directly.\n */\nexport function createTraitSubagentTool(\n options: TraitSubagentToolOptions = {},\n) {\n let eventCallback: TraitEventCallback | undefined = options.onTraitEvent;\n let completeCallback: TraitCompleteCallback | undefined = options.onTraitComplete;\n\n const setEventCallback = (callback: TraitEventCallback) => {\n eventCallback = callback;\n };\n\n const setTraitCompleteCallback = (callback: TraitCompleteCallback) => {\n completeCallback = callback;\n };\n\n const emitEvent = (\n traitName: string,\n traitIndex: number,\n totalTraits: number,\n type: Exclude<SSEEventType, 'subagent_event'>,\n data: Record<string, unknown>\n ) => {\n if (eventCallback) {\n eventCallback(traitName, traitIndex, totalTraits, {\n type,\n data,\n timestamp: Date.now(),\n });\n }\n };\n\n const traitTool = tool(\n async ({ traitSpec, traitIndex = 0, totalTraits = 1 }) => {\n const spec = traitSpec as TraitSpec;\n\n try {\n emitEvent(spec.name, traitIndex, totalTraits, 'message', {\n content: `Starting generation for custom trait: ${spec.name}`,\n role: 'assistant',\n isComplete: false,\n });\n\n emitEvent(spec.name, traitIndex, totalTraits, 'todo_update', {\n todos: [\n { id: 'analyze', task: 'Analyze trait requirements', status: 'in_progress' },\n { id: 'generate', task: 'Generate state machine', status: 'pending' },\n { id: 'validate', task: 'Validate trait', status: 'pending' },\n ],\n });\n\n const userPrompt = buildTraitUserPrompt(spec);\n\n emitEvent(spec.name, traitIndex, totalTraits, 'message', {\n content: `Analyzing: ${spec.description}`,\n role: 'assistant',\n isComplete: false,\n });\n\n emitEvent(spec.name, traitIndex, totalTraits, 'todo_update', {\n todos: [\n { id: 'analyze', task: 'Analyze trait requirements', status: 'completed' },\n { id: 'generate', task: 'Generate state machine', status: 'in_progress' },\n { id: 'validate', task: 'Validate trait', status: 'pending' },\n ],\n });\n\n // Use @almadar/llm directly\n const client = new LLMClient({\n provider: 'anthropic',\n model: 'claude-sonnet-4-20250514',\n });\n\n emitEvent(spec.name, traitIndex, totalTraits, 'tool_call', {\n tool: 'llm_generate_trait',\n args: {\n traitName: spec.name,\n states: spec.states,\n events: spec.events,\n },\n });\n\n const result = await client.call({\n systemPrompt: getTraitGenerationPrompt(),\n userPrompt,\n maxTokens: 4096,\n skipSchemaValidation: true,\n });\n\n const generatedTrait = result as Trait;\n\n emitEvent(spec.name, traitIndex, totalTraits, 'tool_result', {\n tool: 'llm_generate_trait',\n result: {\n traitName: generatedTrait.name,\n stateCount: generatedTrait.stateMachine?.states?.length ?? 0,\n transitionCount: generatedTrait.stateMachine?.transitions?.length ?? 0,\n },\n success: true,\n });\n\n emitEvent(spec.name, traitIndex, totalTraits, 'todo_update', {\n todos: [\n { id: 'analyze', task: 'Analyze trait requirements', status: 'completed' },\n { id: 'generate', task: 'Generate state machine', status: 'completed' },\n { id: 'validate', task: 'Validate trait', status: 'in_progress' },\n ],\n });\n\n const validation = validateGeneratedTrait(generatedTrait, spec);\n\n emitEvent(spec.name, traitIndex, totalTraits, 'tool_result', {\n tool: 'validate_trait',\n result: validation,\n success: validation.valid,\n });\n\n emitEvent(spec.name, traitIndex, totalTraits, 'todo_update', {\n todos: [\n { id: 'analyze', task: 'Analyze trait requirements', status: 'completed' },\n { id: 'generate', task: 'Generate state machine', status: 'completed' },\n { id: 'validate', task: 'Validate trait', status: 'completed' },\n ],\n });\n\n emitEvent(spec.name, traitIndex, totalTraits, 'message', {\n content: `Generated trait: ${generatedTrait.name} with ${generatedTrait.stateMachine?.states?.length ?? 0} states`,\n role: 'assistant',\n isComplete: true,\n });\n\n if (completeCallback) {\n try {\n await completeCallback(generatedTrait, spec.name, traitIndex, totalTraits);\n } catch (persistError) {\n console.error(`[TraitSubagent] Failed to persist ${spec.name}:`, persistError);\n }\n }\n\n return JSON.stringify({\n success: true,\n trait: generatedTrait,\n validation,\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n emitEvent(spec.name, traitIndex, totalTraits, 'error', {\n error: errorMessage,\n code: 'TRAIT_GENERATION_ERROR',\n });\n\n return JSON.stringify({\n success: false,\n error: errorMessage,\n traitName: spec.name,\n });\n }\n },\n {\n name: 'generate_custom_trait',\n description: `Generate a custom trait definition for the orbital schema.\n\nUse this when the decomposition identifies custom traits that don't exist in the\ntrait library.`,\n schema: TraitInputSchema,\n }\n );\n\n return {\n tool: traitTool,\n setEventCallback,\n setTraitCompleteCallback,\n };\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nfunction buildTraitUserPrompt(spec: TraitSpec): string {\n const parts: string[] = [\n `Generate a Trait definition for: **${spec.name}**`,\n '',\n `## Description`,\n spec.description,\n ];\n\n if (spec.category) {\n parts.push('', `## Category`, spec.category);\n }\n if (spec.states && spec.states.length > 0) {\n parts.push('', `## Required States`, spec.states.map(s => `- ${s}`).join('\\n'));\n }\n if (spec.events && spec.events.length > 0) {\n parts.push('', `## Events to Handle`, spec.events.map(e => `- ${e}`).join('\\n'));\n }\n if (spec.requiredFields && spec.requiredFields.length > 0) {\n parts.push(\n '', `## Required Fields from Linked Entity`,\n spec.requiredFields.map(f => `- ${f.name}: ${f.type}${f.description ? ` (${f.description})` : ''}`).join('\\n')\n );\n }\n if (spec.needsTicks) {\n parts.push('', '## Temporal Behavior', 'This trait needs tick-based updates.');\n }\n if (spec.needsEmit) {\n parts.push('', '## Event Emission', 'This trait should emit events for other traits.');\n }\n if (spec.needsListens) {\n parts.push('', '## Event Listening', 'This trait should listen for events from other traits.');\n }\n\n parts.push('', '## Output', 'Return the complete Trait definition as valid JSON.');\n\n return parts.join('\\n');\n}\n\nfunction validateGeneratedTrait(trait: Trait, spec: TraitSpec): {\n valid: boolean;\n errors: string[];\n warnings: string[];\n} {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n if (trait.name !== spec.name) {\n errors.push(`Trait name mismatch: expected \"${spec.name}\", got \"${trait.name}\"`);\n }\n\n if (spec.states && spec.states.length > 0) {\n if (!trait.stateMachine) {\n errors.push('State machine is required but not generated');\n } else {\n const hasInitial = trait.stateMachine.states?.some(s => s.isInitial);\n if (!hasInitial) {\n warnings.push('No initial state marked');\n }\n const stateNames = new Set(trait.stateMachine.states?.map(s => s.name) ?? []);\n for (const requiredState of spec.states) {\n if (!stateNames.has(requiredState)) {\n warnings.push(`Specified state \"${requiredState}\" not found in generated trait`);\n }\n }\n }\n }\n\n if (spec.needsTicks && (!trait.ticks || trait.ticks.length === 0)) {\n warnings.push('Temporal behavior requested but no ticks defined');\n }\n if (spec.needsListens && (!trait.listens || trait.listens.length === 0)) {\n warnings.push('Event listening requested but no listeners defined');\n }\n\n return { valid: errors.length === 0, errors, warnings };\n}\n\n/**\n * Create a helper to wrap trait events into SSE format.\n */\nexport function createTraitEventWrapper(\n writeEvent: (event: { type: string; timestamp: number; data: unknown }) => void\n): TraitEventCallback {\n return (traitName, traitIndex, totalTraits, event) => {\n writeEvent({\n type: 'subagent_event',\n timestamp: Date.now(),\n data: { traitName, traitIndex, totalTraits, event },\n });\n };\n}\n","/**\n * Construct Combined Schema Tool\n *\n * Deterministically combines generated orbitals into a single OrbitalSchema\n * without LLM involvement.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport type { FullOrbitalUnit } from '@almadar/core/types';\nimport { combineOrbitals } from '../orbitals/combiner/index.js';\n\n// ============================================================================\n// Tool Schema\n// ============================================================================\n\nconst FullOrbitalUnitInputSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n entity: z.object({\n name: z.string(),\n collection: z.string().optional(),\n fields: z.array(z.any()),\n timestamps: z.boolean().optional(),\n }),\n traits: z.array(z.any()),\n pages: z.array(z.any()),\n emits: z.array(z.string()).optional(),\n listens: z.array(z.any()).optional(),\n});\n\nconst CombineSchemaInputSchema = z.object({\n orbitals: z.array(FullOrbitalUnitInputSchema).optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n version: z.string().optional(),\n theme: z.string().optional(),\n defaultRoute: z.string().optional(),\n validate: z.boolean().optional().default(true),\n});\n\n// ============================================================================\n// Auto-Collection Helper\n// ============================================================================\n\nasync function autoCollectOrbitals(workDir: string): Promise<FullOrbitalUnit[]> {\n const fs = await import('fs');\n const path = await import('path');\n\n const orbitalsDir = path.join(workDir, '.orbitals');\n\n if (!fs.existsSync(orbitalsDir)) {\n const files = fs.readdirSync(workDir).filter((f: string) =>\n f.endsWith('.json') && (f.startsWith('orbital-') || f.includes('orbital'))\n );\n\n if (files.length === 0) {\n throw new Error('No orbitals found. Generate orbitals first using generate_orbital, or provide them directly.');\n }\n\n return files.map((f: string) => {\n const content = fs.readFileSync(path.join(workDir, f), 'utf-8');\n return JSON.parse(content);\n });\n }\n\n const files = fs.readdirSync(orbitalsDir).filter((f: string) => f.endsWith('.json'));\n\n if (files.length === 0) {\n throw new Error('No orbitals found in .orbitals/ directory.');\n }\n\n return files.map((f: string) => {\n const content = fs.readFileSync(path.join(orbitalsDir, f), 'utf-8');\n return JSON.parse(content);\n });\n}\n\n// ============================================================================\n// Validation Cap\n// ============================================================================\n\nconst MAX_COMBINE_VALIDATION_ATTEMPTS = 3;\nlet combineValidationAttempts = 0;\n\n// ============================================================================\n// Tool Implementation\n// ============================================================================\n\n/**\n * Create the construct_combined_schema tool.\n */\nexport function createCombineSchemasTool(workDir?: string) {\n combineValidationAttempts = 0;\n\n return tool(\n async (input) => {\n let orbitals: FullOrbitalUnit[];\n\n if (input.orbitals && input.orbitals.length > 0) {\n orbitals = input.orbitals as FullOrbitalUnit[];\n } else if (workDir) {\n orbitals = await autoCollectOrbitals(workDir);\n } else {\n orbitals = await autoCollectOrbitals(process.cwd());\n }\n\n const appName = input.name ||\n (orbitals.length > 0 ? `${orbitals[0].name} Application` : 'Application');\n\n const result = combineOrbitals(orbitals, {\n name: appName,\n description: input.description,\n version: input.version,\n theme: input.theme,\n defaultRoute: input.defaultRoute,\n validate: input.validate ?? true,\n });\n\n if (result.success) {\n combineValidationAttempts = 0;\n\n return JSON.stringify({\n success: true,\n schema: result.schema,\n stats: result.stats,\n validation: result.validation ? {\n valid: result.validation.valid,\n errorCount: result.validation.errors.length,\n warningCount: result.validation.warnings.length,\n } : undefined,\n __TASK_COMPLETE__: true,\n __STOP_SIGNAL__: 'WORKFLOW_FINISHED',\n message: `✅ SCHEMA GENERATION COMPLETE. Generated ${result.stats?.totalOrbitals || orbitals.length} orbitals. ` +\n `DO NOT call any more tools.`,\n }, null, 2);\n } else {\n combineValidationAttempts++;\n\n if (combineValidationAttempts >= MAX_COMBINE_VALIDATION_ATTEMPTS) {\n return JSON.stringify({\n success: false,\n cappedValidation: true,\n validationAttempt: combineValidationAttempts,\n error: result.error,\n stats: result.stats,\n validation: result.validation ? {\n valid: result.validation.valid,\n errors: result.validation.errors.slice(0, 3),\n errorCount: result.validation.errors.length,\n } : undefined,\n __STOP_FIXING__: true,\n message: `⚠️ VALIDATION CAP REACHED (${MAX_COMBINE_VALIDATION_ATTEMPTS} attempts). STOP editing orbitals.`,\n recommendation: 'STOP_FIXING',\n }, null, 2);\n }\n\n return JSON.stringify({\n success: false,\n validationAttempt: combineValidationAttempts,\n remainingAttempts: MAX_COMBINE_VALIDATION_ATTEMPTS - combineValidationAttempts,\n error: result.error,\n stats: result.stats,\n validation: result.validation ? {\n valid: result.validation.valid,\n errors: result.validation.errors.slice(0, 5),\n errorCount: result.validation.errors.length,\n } : undefined,\n partialSchema: result.schema,\n }, null, 2);\n }\n },\n {\n name: 'construct_combined_schema',\n description: `Deterministically combine generated orbitals into a single OrbitalSchema.\n\n⚠️ IMPORTANT: This is the FINAL STEP. When this tool returns success,\nyour task is COMPLETE. Do NOT call any other tools after this succeeds.\n\nSIMPLE USAGE (RECOMMENDED):\n construct_combined_schema({})\n\nOrbitals are auto-collected from .orbitals/ directory.`,\n schema: CombineSchemaInputSchema,\n }\n );\n}\n","/**\n * Schema Chunking Tools\n *\n * Tools for extracting and merging chunks of large orbital schemas.\n * Enables LLM-driven schema updates without hitting token limits.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport { randomUUID } from 'crypto';\nimport * as fs from 'fs/promises';\nimport * as fss from 'fs';\nimport * as path from 'path';\nimport type { OrbitalSchema, Trait, TraitRef, Orbital, OrbitalDefinition, EntityRef } from '@almadar/core/types';\nimport { isOrbitalDefinition, isEntityReference } from '@almadar/core/types';\n\n/**\n * Get entity name safely from EntityRef.\n */\nfunction getEntityName(entity: EntityRef | undefined): string {\n if (!entity) return 'Unknown';\n if (isEntityReference(entity)) {\n return entity.replace('.entity', '');\n }\n return entity.name;\n}\n\nconst CHUNKS_DIR = '.chunks';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface OrbitalSummary {\n name: string;\n entity: string;\n traits: string[];\n inlineTraits: string[];\n}\n\ninterface SchemaStructure {\n name: string;\n orbitals: OrbitalSummary[];\n traits: string[];\n totalSize: string;\n}\n\ninterface ChunkMeta {\n sourceFile: string;\n type: 'orbital' | 'trait' | 'inline-trait';\n orbitalIndex?: number;\n traitIndex?: number;\n inlineTraitIndex?: number;\n parentOrbitalName?: string;\n extractedAt: string;\n}\n\ninterface ChunkFile {\n meta: ChunkMeta;\n orbital?: unknown;\n referencedTraits?: unknown[];\n trait?: unknown;\n inlineTrait?: unknown;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nasync function ensureChunksDir(workspaceDir: string): Promise<string> {\n const chunksPath = path.join(workspaceDir, CHUNKS_DIR);\n try {\n await fs.mkdir(chunksPath, { recursive: true });\n } catch {\n // Directory may already exist\n }\n return chunksPath;\n}\n\nfunction getTraitInfo(traits: unknown[]): { refs: string[]; inlines: string[] } {\n const refs: string[] = [];\n const inlines: string[] = [];\n\n for (const t of traits || []) {\n if (typeof t === 'object' && t !== null) {\n if ('ref' in t && typeof (t as { ref: unknown }).ref === 'string') {\n refs.push((t as { ref: string }).ref);\n } else if ('name' in t && typeof (t as { name: unknown }).name === 'string') {\n inlines.push((t as { name: string }).name);\n }\n }\n }\n\n return { refs, inlines };\n}\n\n// ============================================================================\n// Tool: query_schema_structure\n// ============================================================================\n\nexport function createQuerySchemaStructureTool(workDir: string) {\n return tool(\n async ({ file }) => {\n const filePath = path.isAbsolute(file) ? file : path.join(workDir, file);\n\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n const schema = JSON.parse(content) as OrbitalSchema;\n const stats = fss.statSync(filePath);\n\n const structure: SchemaStructure = {\n name: schema.name,\n orbitals: (schema.orbitals || [])\n .filter((o): o is OrbitalDefinition => isOrbitalDefinition(o))\n .map(o => {\n const { refs, inlines } = getTraitInfo(o.traits || []);\n return {\n name: o.name,\n entity: getEntityName(o.entity),\n traits: refs,\n inlineTraits: inlines,\n };\n }),\n traits: [],\n totalSize: `${Math.round(stats.size / 1024)}KB`,\n };\n\n return JSON.stringify(structure, null, 2);\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n return JSON.stringify({ error: `Failed to query schema structure: ${msg}` });\n }\n },\n {\n name: 'query_schema_structure',\n description: `Get a lightweight map of schema structure (names only, not content).\n\nUSE THIS FIRST before extracting chunks to understand what orbitals and traits exist.`,\n schema: z.object({\n file: z.string().describe('Path to schema file (e.g., \"schema.json\")'),\n }),\n }\n );\n}\n\n// ============================================================================\n// Tool: extract_chunk\n// ============================================================================\n\nexport function createExtractChunkTool(workDir: string) {\n return tool(\n async ({ file, type, name, parentOrbital, includeTraits = true }) => {\n const filePath = path.isAbsolute(file) ? file : path.join(workDir, file);\n\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n const schema = JSON.parse(content) as OrbitalSchema;\n const chunkId = randomUUID().slice(0, 8);\n const chunksDir = await ensureChunksDir(workDir);\n const chunkFile = path.join(chunksDir, `chunk-${chunkId}.json`);\n\n const chunkData: ChunkFile = {\n meta: {\n sourceFile: filePath,\n type,\n extractedAt: new Date().toISOString(),\n },\n };\n\n if (type === 'orbital') {\n const orbitalIndex = schema.orbitals.findIndex(o => o.name === name);\n if (orbitalIndex === -1) {\n return JSON.stringify({ error: `Orbital \"${name}\" not found in schema` });\n }\n\n const orbital = schema.orbitals[orbitalIndex];\n chunkData.meta.orbitalIndex = orbitalIndex;\n chunkData.orbital = orbital;\n\n if (includeTraits) {\n const { refs } = getTraitInfo(orbital.traits || []);\n chunkData.referencedTraits = (orbital.traits || []).filter(t =>\n typeof t === 'object' && t !== null && 'name' in t &&\n refs.includes((t as { name: string }).name)\n );\n }\n } else if (type === 'trait') {\n return JSON.stringify({\n error: `Schema-level traits no longer exist. Use type \"inline-trait\" with parentOrbital.`,\n });\n } else if (type === 'inline-trait') {\n if (!parentOrbital) {\n return JSON.stringify({ error: 'parentOrbital is required for inline-trait extraction' });\n }\n\n const orbitalIndex = schema.orbitals.findIndex(o => o.name === parentOrbital);\n if (orbitalIndex === -1) {\n return JSON.stringify({ error: `Parent orbital \"${parentOrbital}\" not found` });\n }\n\n const orbital = schema.orbitals[orbitalIndex];\n const inlineTraitIndex = (orbital.traits || []).findIndex(t =>\n typeof t === 'object' && t !== null && 'name' in t &&\n (t as { name: string }).name === name\n );\n\n if (inlineTraitIndex === -1) {\n return JSON.stringify({ error: `Inline trait \"${name}\" not found in orbital \"${parentOrbital}\"` });\n }\n\n chunkData.meta.parentOrbitalName = parentOrbital;\n chunkData.meta.orbitalIndex = orbitalIndex;\n chunkData.meta.inlineTraitIndex = inlineTraitIndex;\n chunkData.inlineTrait = orbital.traits![inlineTraitIndex];\n }\n\n const chunkContent = JSON.stringify(chunkData, null, 2);\n await fs.writeFile(chunkFile, chunkContent);\n\n const relativeChunkFile = path.relative(workDir, chunkFile);\n\n return JSON.stringify({\n success: true,\n chunkId,\n chunkFile: relativeChunkFile,\n size: `${Math.round(chunkContent.length / 1024)}KB`,\n message: `Chunk extracted to ${relativeChunkFile}. Use edit_file then apply_chunk with chunkId \"${chunkId}\".`,\n });\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n return JSON.stringify({ error: `Failed to extract chunk: ${msg}` });\n }\n },\n {\n name: 'extract_chunk',\n description: `Extract a specific orbital or trait to a chunk file for editing.\n\nAfter extracting, use edit_file on the returned chunkFile path, then call apply_chunk.\n\nTypes: \"orbital\", \"inline-trait\" (requires parentOrbital).`,\n schema: z.object({\n file: z.string().describe('Path to schema file'),\n type: z.enum(['orbital', 'trait', 'inline-trait']).describe('Type of chunk to extract'),\n name: z.string().describe('Name of orbital or trait to extract'),\n parentOrbital: z.string().optional().describe('Required for inline-trait'),\n includeTraits: z.boolean().default(true).describe('For orbital: also extract referenced traits'),\n }),\n }\n );\n}\n\n// ============================================================================\n// Tool: apply_chunk\n// ============================================================================\n\nexport function createApplyChunkTool(workDir: string) {\n return tool(\n async ({ chunkId }) => {\n const chunkFileName = `chunk-${chunkId}.json`;\n const chunkFilePath = path.join(workDir, CHUNKS_DIR, chunkFileName);\n\n try {\n try {\n await fs.access(chunkFilePath);\n } catch {\n return JSON.stringify({ error: `Chunk file not found: ${chunkFileName}.` });\n }\n\n const chunkContent = await fs.readFile(chunkFilePath, 'utf-8');\n const chunkData = JSON.parse(chunkContent) as ChunkFile;\n const { meta } = chunkData;\n\n const schemaContent = await fs.readFile(meta.sourceFile, 'utf-8');\n const schema = JSON.parse(schemaContent) as OrbitalSchema;\n\n if (meta.type === 'orbital' && chunkData.orbital) {\n schema.orbitals[meta.orbitalIndex!] = chunkData.orbital as Orbital;\n\n if (chunkData.referencedTraits && Array.isArray(chunkData.referencedTraits)) {\n const orbital = schema.orbitals[meta.orbitalIndex!];\n if (orbital && isOrbitalDefinition(orbital) && orbital.traits) {\n for (const editedTrait of chunkData.referencedTraits) {\n if (typeof editedTrait === 'object' && editedTrait !== null && 'name' in editedTrait) {\n const traitName = (editedTrait as { name: string }).name;\n const idx = orbital.traits.findIndex(t =>\n typeof t === 'object' && t !== null && 'name' in t &&\n (t as { name: string }).name === traitName\n );\n if (idx !== -1) {\n orbital.traits[idx] = editedTrait as TraitRef;\n }\n }\n }\n }\n }\n }\n\n if (meta.type === 'trait' && chunkData.trait) {\n console.warn('Schema-level traits are deprecated. Trait was not applied.');\n }\n\n if (meta.type === 'inline-trait' && chunkData.inlineTrait) {\n const orbital = schema.orbitals[meta.orbitalIndex!];\n if (orbital && isOrbitalDefinition(orbital) && orbital.traits && meta.inlineTraitIndex !== undefined) {\n orbital.traits[meta.inlineTraitIndex] = chunkData.inlineTrait as TraitRef;\n }\n }\n\n const output = JSON.stringify(schema, null, 2);\n await fs.writeFile(meta.sourceFile, output);\n await fs.unlink(chunkFilePath);\n\n return JSON.stringify({\n success: true,\n message: `Changes merged into ${path.basename(meta.sourceFile)}`,\n updatedSize: `${Math.round(output.length / 1024)}KB`,\n });\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n return JSON.stringify({ error: `Failed to apply chunk: ${msg}` });\n }\n },\n {\n name: 'apply_chunk',\n description: `Merge an edited chunk file back into the schema.\n\nCall this AFTER editing the chunk file with edit_file.`,\n schema: z.object({\n chunkId: z.string().describe('Chunk ID from extract_chunk'),\n }),\n }\n );\n}\n\n// ============================================================================\n// Factory function\n// ============================================================================\n\nexport function createSchemaChunkingTools(workDir: string) {\n return {\n querySchemaStructure: createQuerySchemaStructureTool(workDir),\n extractChunk: createExtractChunkTool(workDir),\n applyChunk: createApplyChunkTool(workDir),\n };\n}\n","/**\n * Design Transition Tool\n *\n * Takes a single transition context (state, event, entity, design hints)\n * and produces rich render-ui effects using a focused design skill.\n *\n * Uses @almadar/llm for LLM access and @almadar/skills for the design skill.\n * Results are cached by fingerprint to avoid regenerating identical transitions.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport crypto from 'crypto';\nimport { LLMClient } from '@almadar/llm';\nimport { generateKflowDesignSkill } from '@almadar/skills';\nimport {\n buildRecommendationContext,\n recommendPatterns,\n formatRecommendationsForPrompt,\n} from '@almadar/patterns';\nimport { AgentDomainCategorySchema } from '@almadar/core/types';\nimport type { SSEEventType } from '../api-types.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type DesignEventCallback = (\n transitionId: string,\n event: {\n type: Exclude<SSEEventType, 'subagent_event'>;\n data: Record<string, unknown>;\n timestamp: number;\n }\n) => void;\n\nexport interface DesignTransitionToolOptions {\n onEvent?: DesignEventCallback;\n}\n\n// ============================================================================\n// Cache\n// ============================================================================\n\ninterface DesignCacheEntry {\n effects: unknown[];\n timestamp: number;\n usage: { inputTokens: number; outputTokens: number; totalTokens: number };\n}\n\nconst designCache = new Map<string, DesignCacheEntry>();\nconst CACHE_TTL_MS = 24 * 60 * 60 * 1000;\nconst CACHE_VERSION = 1;\n\nfunction generateFingerprint(input: Record<string, unknown>): string {\n const normalized = JSON.stringify({\n version: CACHE_VERSION,\n ...input,\n });\n return crypto.createHash('sha256').update(normalized).digest('hex').slice(0, 16);\n}\n\nfunction getCached(fingerprint: string): DesignCacheEntry | null {\n const entry = designCache.get(fingerprint);\n if (!entry) return null;\n if (Date.now() - entry.timestamp > CACHE_TTL_MS) {\n designCache.delete(fingerprint);\n return null;\n }\n return entry;\n}\n\n// ============================================================================\n// Static Prompt (built once, cached by Anthropic)\n// ============================================================================\n\nlet STATIC_DESIGN_PROMPT: string | null = null;\n\nfunction getDesignSystemPrompt(): string {\n if (!STATIC_DESIGN_PROMPT) {\n const skill = generateKflowDesignSkill();\n STATIC_DESIGN_PROMPT = skill.content;\n }\n return STATIC_DESIGN_PROMPT;\n}\n\n// ============================================================================\n// User Prompt Builder\n// ============================================================================\n\n/**\n * Get pattern recommendations for a transition context.\n */\nfunction getPatternRecommendations(input: {\n from: string;\n event: string;\n slot: string;\n domainCategory?: string;\n entityFields: Array<{ name: string; type: string; values?: string[] }>;\n}) {\n const recContext = buildRecommendationContext({\n state: input.from,\n event: input.event,\n slot: input.slot as 'main' | 'modal' | 'drawer' | 'sidebar' | 'overlay',\n domainCategory: input.domainCategory,\n entityFields: input.entityFields,\n });\n return recommendPatterns(recContext, 8);\n}\n\nfunction buildDesignUserPrompt(input: {\n from: string;\n to: string;\n event: string;\n slot: string;\n entityName: string;\n entityFields: Array<{ name: string; type: string; values?: string[] }>;\n domainCategory?: string;\n vocabulary?: Record<string, string>;\n designStyle?: string;\n flowPattern?: string;\n listPattern?: string;\n formPattern?: string;\n detailPattern?: string;\n existingEffects?: unknown[];\n recommendationsSection?: string;\n}): string {\n const fieldList = input.entityFields\n .map(f => {\n let desc = ` - ${f.name}: ${f.type}`;\n if (f.values) desc += ` (values: ${f.values.join(', ')})`;\n return desc;\n })\n .join('\\n');\n\n const hints: string[] = [];\n if (input.designStyle) hints.push(`Style: ${input.designStyle}`);\n if (input.flowPattern) hints.push(`Flow: ${input.flowPattern}`);\n if (input.listPattern) hints.push(`List: ${input.listPattern}`);\n if (input.formPattern) hints.push(`Form: ${input.formPattern}`);\n if (input.detailPattern) hints.push(`Detail: ${input.detailPattern}`);\n\n const vocab = input.vocabulary\n ? Object.entries(input.vocabulary).map(([k, v]) => ` ${k} → \"${v}\"`).join('\\n')\n : '';\n\n return `Design render-ui effects for this transition:\n\n## Transition\n- **From**: ${input.from}\n- **To**: ${input.to}\n- **Event**: ${input.event}\n- **Slot**: ${input.slot}\n\n## Entity: ${input.entityName}\n${fieldList}\n\n## Domain\n- **Category**: ${input.domainCategory || 'business'}\n${vocab ? `- **Vocabulary**:\\n${vocab}` : ''}\n${hints.length > 0 ? `- **Design Hints**: ${hints.join(', ')}` : ''}\n\n${input.recommendationsSection || ''}\n\n${input.existingEffects ? `## Existing Effects (enhance these)\\n\\`\\`\\`json\\n${JSON.stringify(input.existingEffects, null, 2)}\\n\\`\\`\\`` : ''}\n\nReturn ONLY the JSON array of render-ui effect tuples.`;\n}\n\n// ============================================================================\n// Zod Schema\n// ============================================================================\n\nconst DesignTransitionSchema = z.object({\n from: z.string().describe('Source state name (e.g., \"Browsing\")'),\n to: z.string().describe('Target state name (e.g., \"Browsing\" for self-loop, \"Creating\" for transition)'),\n event: z.string().describe('Event name (e.g., \"INIT\", \"CREATE\", \"VIEW\", \"EDIT\", \"DELETE\", \"SAVE\", \"CANCEL\")'),\n slot: z.string().describe('UI slot to render into: \"main\", \"modal\", \"drawer\", \"sidebar\", \"overlay\"'),\n entityName: z.string().describe('Entity name (e.g., \"Task\", \"Order\")'),\n entityFields: z.array(z.object({\n name: z.string(),\n type: z.string(),\n values: z.array(z.string()).optional(),\n })).describe('Entity fields with types and optional enum values'),\n domainCategory: AgentDomainCategorySchema.optional()\n .describe('Domain category for pattern selection'),\n vocabulary: z.record(z.string(), z.string()).optional()\n .describe('Domain vocabulary mapping (e.g., { \"create\": \"Place Order\", \"item\": \"Order\" })'),\n designStyle: z.enum(['minimal', 'modern', 'playful', 'data-driven', 'immersive']).optional()\n .describe('Visual style hint'),\n flowPattern: z.enum(['hub-spoke', 'master-detail', 'crud-cycle', 'linear', 'role-based']).optional()\n .describe('Application flow pattern'),\n listPattern: z.enum(['entity-table', 'entity-cards', 'entity-list']).optional()\n .describe('Preferred list pattern'),\n formPattern: z.enum(['modal', 'drawer', 'page']).optional()\n .describe('Preferred form pattern'),\n detailPattern: z.enum(['drawer', 'page', 'split']).optional()\n .describe('Preferred detail view pattern'),\n existingEffects: z.array(z.any()).optional()\n .describe('Existing render-ui effects to enhance (for refinement passes)'),\n});\n\n// ============================================================================\n// Tool Factory\n// ============================================================================\n\n/**\n * Create the design_transition tool.\n *\n * Takes a transition context and returns polished render-ui effects.\n * Uses the kflow-design skill as system prompt with Anthropic cache control.\n */\nexport function createDesignTransitionTool(\n options: DesignTransitionToolOptions = {},\n) {\n let eventCallback: DesignEventCallback | undefined = options.onEvent;\n\n const setEventCallback = (callback: DesignEventCallback) => {\n eventCallback = callback;\n };\n\n const emitEvent = (\n transitionId: string,\n type: Exclude<SSEEventType, 'subagent_event'>,\n data: Record<string, unknown>\n ) => {\n if (eventCallback) {\n eventCallback(transitionId, {\n type,\n data,\n timestamp: Date.now(),\n });\n }\n };\n\n const designTransitionTool = tool(\n async (input) => {\n const transitionId = `${input.entityName}:${input.from}->${input.to}:${input.event}`;\n const fingerprint = generateFingerprint({\n from: input.from,\n to: input.to,\n event: input.event,\n slot: input.slot,\n entityName: input.entityName,\n entityFields: input.entityFields,\n domainCategory: input.domainCategory,\n designStyle: input.designStyle,\n flowPattern: input.flowPattern,\n listPattern: input.listPattern,\n });\n\n try {\n emitEvent(transitionId, 'message', {\n content: `Designing UI for ${transitionId}`,\n role: 'assistant',\n isComplete: false,\n });\n\n // Check cache\n const cached = getCached(fingerprint);\n if (cached) {\n emitEvent(transitionId, 'generation_log', {\n level: 'info',\n message: `Design cache HIT for ${transitionId}`,\n data: { fingerprint },\n });\n\n return JSON.stringify({\n success: true,\n transitionId,\n effects: cached.effects,\n cached: true,\n usage: cached.usage,\n });\n }\n\n // Get pattern recommendations and build prompts\n const recommendations = getPatternRecommendations(input);\n const recommendationsSection = formatRecommendationsForPrompt(recommendations);\n const systemPrompt = getDesignSystemPrompt();\n const userPrompt = buildDesignUserPrompt({\n ...input,\n recommendationsSection,\n });\n\n emitEvent(transitionId, 'tool_call', {\n tool: 'llm_design_transition',\n args: {\n transition: transitionId,\n slot: input.slot,\n domain: input.domainCategory,\n },\n });\n\n // Call LLM with cache control\n const client = new LLMClient({\n provider: 'anthropic',\n model: 'claude-sonnet-4-20250514',\n temperature: 0.1, // Slight creativity for design\n });\n\n const response = await client.callWithCache<string>({\n systemPrompt: '',\n systemBlocks: [{\n type: 'text',\n text: systemPrompt,\n cache_control: { type: 'ephemeral' },\n }],\n userPrompt,\n maxTokens: 4096,\n rawText: true,\n });\n\n const rawText = (response.raw || String(response.data) || '').trim();\n\n // Parse the JSON array from the response\n let effects: unknown[];\n try {\n // Strip markdown code fences if present\n const jsonText = rawText.replace(/^```(?:json)?\\n?/m, '').replace(/\\n?```$/m, '').trim();\n effects = JSON.parse(jsonText);\n if (!Array.isArray(effects)) {\n effects = [effects];\n }\n } catch {\n // If parsing fails, return the raw text for the agent to handle\n return JSON.stringify({\n success: false,\n transitionId,\n error: 'Failed to parse design output as JSON',\n rawOutput: rawText,\n });\n }\n\n const usage = {\n inputTokens: response.usage?.promptTokens || 0,\n outputTokens: response.usage?.completionTokens || 0,\n totalTokens: response.usage?.totalTokens || 0,\n };\n\n // Cache the result\n designCache.set(fingerprint, {\n effects,\n timestamp: Date.now(),\n usage,\n });\n\n emitEvent(transitionId, 'tool_result', {\n tool: 'llm_design_transition',\n result: { fingerprint, effectCount: effects.length, usage },\n success: true,\n });\n\n emitEvent(transitionId, 'message', {\n content: `Designed ${effects.length} effect(s) for ${transitionId} (${usage.totalTokens} tokens)`,\n role: 'assistant',\n isComplete: true,\n });\n\n return JSON.stringify({\n success: true,\n transitionId,\n effects,\n cached: false,\n usage,\n recommendedPatterns: recommendations.map(r => r.pattern),\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n emitEvent(transitionId, 'error', {\n error: errorMessage,\n code: 'DESIGN_TRANSITION_ERROR',\n });\n\n return JSON.stringify({\n success: false,\n transitionId,\n error: errorMessage,\n });\n }\n },\n {\n name: 'design_transition',\n description: `Design rich render-ui effects for a single orbital transition.\n\nTakes the transition context (from/to state, event, entity, domain) and produces\npolished render-ui effects using the full pattern catalog.\n\nUSE THIS TOOL WHEN:\n- Generating INIT transitions (always compose header + stats + content)\n- Generating CREATE/EDIT transitions (form with proper fields)\n- Generating VIEW transitions (detail with tabs for related entities)\n- Enhancing existing render-ui effects that are too basic\n\nThe tool uses a specialized design skill with pattern catalog, layout composition,\nand domain-aware pattern selection to produce rich UI.\n\nRETURNS: { success, effects: [[\"render-ui\", slot, config], ...], transitionId, usage }\n\nThe effects array contains ONLY render-ui tuples. Non-UI effects (persist, emit, set)\nare NOT included — you must preserve those from the original transition.\n\nINTEGRATION: After calling this tool, use extract_chunk to get the orbital,\nreplace the render-ui effects in the target transition (keep persist/emit/set effects),\nthen apply_chunk to merge back into schema.json.`,\n schema: DesignTransitionSchema,\n }\n );\n\n return {\n tool: designTransitionTool,\n setEventCallback,\n };\n}\n\n/**\n * Create a helper to wrap design events into SSE format.\n */\nexport function createDesignEventWrapper(\n writeEvent: (event: { type: string; timestamp: number; data: unknown }) => void\n): DesignEventCallback {\n return (transitionId, event) => {\n writeEvent({\n type: 'subagent_event',\n timestamp: Date.now(),\n data: { transitionId, event },\n });\n };\n}\n","/**\n * GitHub Tools for DeepAgent\n *\n * LangChain tools that wrap GitHubIntegration operations.\n * These tools enable the agent to clone repos, create branches, commit, push, and create PRs.\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport { GitHubIntegration } from '@almadar/integrations';\nimport type { IntegrationConfig } from '@almadar/integrations';\n\n/**\n * GitHub tools configuration\n */\nexport interface GitHubToolsConfig {\n /** GitHub personal access token */\n token: string;\n /** Repository owner (e.g., 'octocat') */\n owner?: string;\n /** Repository name (e.g., 'hello-world') */\n repo?: string;\n /** Working directory for git operations */\n workDir: string;\n}\n\n/**\n * Create GitHub tools for the agent\n */\nexport function createGitHubTools(config: GitHubToolsConfig) {\n const { token, owner = '', repo = '', workDir } = config;\n\n // Create GitHub integration instance\n const integrationConfig: IntegrationConfig = {\n name: 'github',\n env: {\n GITHUB_TOKEN: token,\n GITHUB_OWNER: owner,\n GITHUB_REPO: repo,\n GITHUB_WORK_DIR: workDir,\n },\n };\n\n const github = new GitHubIntegration(integrationConfig);\n\n // =========================================================================\n // Git Operations\n // =========================================================================\n\n /**\n * Clone a GitHub repository\n */\n const github_clone = tool(\n async ({ repoUrl, branch, depth }) => {\n try {\n const result = await github.execute('cloneRepo', {\n repoUrl,\n targetDir: workDir,\n branch,\n depth: depth || 1,\n });\n\n if (!result.success) {\n return `Failed to clone repository: ${result.error?.message}`;\n }\n\n return `Successfully cloned ${repoUrl} to ${workDir}${branch ? ` (branch: ${branch})` : ''}`;\n } catch (error) {\n return `Error cloning repository: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n {\n name: 'github_clone',\n description: `Clone a GitHub repository into the workspace.\n\nUsage:\n- Clones the repository into the current workspace directory\n- Defaults to shallow clone (depth: 1) for faster cloning\n- Can optionally specify a branch to checkout\n\nExample:\ngithub_clone({ repoUrl: \"https://github.com/owner/repo\", branch: \"main\" })`,\n schema: z.object({\n repoUrl: z.string().describe('GitHub repository URL (e.g., https://github.com/owner/repo)'),\n branch: z.string().optional().describe('Branch to checkout (defaults to repo default branch)'),\n depth: z.number().optional().describe('Clone depth (default: 1 for shallow clone)'),\n }),\n }\n );\n\n /**\n * Create a new git branch\n */\n const github_create_branch = tool(\n async ({ branchName, baseBranch }) => {\n try {\n const result = await github.execute('createBranch', {\n branchName,\n baseBranch,\n workDir,\n });\n\n if (!result.success) {\n return `Failed to create branch: ${result.error?.message}`;\n }\n\n return `Successfully created and checked out branch: ${branchName}`;\n } catch (error) {\n return `Error creating branch: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n {\n name: 'github_create_branch',\n description: `Create and checkout a new git branch.\n\nUsage:\n- Creates a new branch from the current branch or specified base branch\n- Automatically checks out the new branch\n- Branch name should follow format: feature/name, fix/name, etc.\n\nExample:\ngithub_create_branch({ branchName: \"fix/issue-42-null-pointer\" })`,\n schema: z.object({\n branchName: z.string().describe('Name of the branch to create (e.g., fix/issue-42)'),\n baseBranch: z.string().optional().describe('Base branch to create from (defaults to current branch)'),\n }),\n }\n );\n\n /**\n * Commit changes\n */\n const github_commit = tool(\n async ({ message, files }) => {\n try {\n const result = await github.execute('commit', {\n message,\n files,\n workDir,\n });\n\n if (!result.success) {\n return `Failed to commit: ${result.error?.message}`;\n }\n\n return `Successfully committed: ${message}`;\n } catch (error) {\n return `Error committing changes: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n {\n name: 'github_commit',\n description: `Stage and commit changes to git.\n\nUsage:\n- Stages files (or all changes if files not specified)\n- Creates a commit with the provided message\n- Commit message should be clear and descriptive\n\nExample:\ngithub_commit({ message: \"Fix null pointer in UserService\\\\n\\\\nCloses #42\" })`,\n schema: z.object({\n message: z.string().describe('Commit message (can include multiple lines)'),\n files: z.array(z.string()).optional().describe('Specific files to commit (defaults to all changes)'),\n }),\n }\n );\n\n /**\n * Push branch to remote\n */\n const github_push = tool(\n async ({ branchName }) => {\n try {\n const result = await github.execute('push', {\n branchName,\n force: false, // Never allow force push\n workDir,\n });\n\n if (!result.success) {\n return `Failed to push: ${result.error?.message}`;\n }\n\n return `Successfully pushed branch: ${branchName}`;\n } catch (error) {\n return `Error pushing branch: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n {\n name: 'github_push',\n description: `Push a branch to GitHub.\n\nUsage:\n- Pushes the specified branch to origin\n- Sets upstream tracking (-u flag)\n- Force push is NEVER allowed for safety\n\nExample:\ngithub_push({ branchName: \"fix/issue-42\" })`,\n schema: z.object({\n branchName: z.string().describe('Name of the branch to push'),\n }),\n }\n );\n\n // =========================================================================\n // GitHub API Operations\n // =========================================================================\n\n /**\n * Create a pull request\n */\n const github_create_pr = tool(\n async ({ title, body, baseBranch, headBranch, draft }) => {\n try {\n const result = await github.execute('createPR', {\n title,\n body,\n baseBranch,\n headBranch,\n draft: draft || false,\n });\n\n if (!result.success) {\n return `Failed to create pull request: ${result.error?.message}`;\n }\n\n const pr = result.data as { number: number; url: string };\n return `Successfully created PR #${pr.number}: ${pr.url}`;\n } catch (error) {\n return `Error creating pull request: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n {\n name: 'github_create_pr',\n description: `Create a pull request on GitHub.\n\nUsage:\n- Creates a PR from headBranch to baseBranch\n- Title should be concise (under 70 chars)\n- Body should include:\n - Summary of changes\n - Test plan or verification steps\n - References to issues (e.g., \"Closes #42\")\n\nExample:\ngithub_create_pr({\n title: \"Fix null pointer in UserService\",\n body: \"## Summary\\\\n- Fixed null check...\\\\n\\\\nCloses #42\",\n baseBranch: \"main\",\n headBranch: \"fix/issue-42\"\n})`,\n schema: z.object({\n title: z.string().describe('PR title (concise, under 70 chars)'),\n body: z.string().describe('PR description/body (markdown supported)'),\n baseBranch: z.string().describe('Base branch (usually \"main\" or \"master\")'),\n headBranch: z.string().describe('Head branch (your feature/fix branch)'),\n draft: z.boolean().optional().describe('Create as draft PR (default: false)'),\n }),\n }\n );\n\n /**\n * List repository issues\n */\n const github_list_issues = tool(\n async ({ state, labels, limit }) => {\n try {\n const result = await github.execute('listIssues', {\n state: state || 'open',\n labels: labels || [],\n limit: limit || 30,\n });\n\n if (!result.success) {\n return `Failed to list issues: ${result.error?.message}`;\n }\n\n const data = result.data as { issues: Array<{ number: number; title: string; state: string; labels: Array<{ name: string }> }> };\n const issues = data.issues;\n\n if (issues.length === 0) {\n return 'No issues found matching the criteria.';\n }\n\n const issueList = issues\n .map((issue) => {\n const labelsStr = issue.labels.map((l) => l.name).join(', ');\n return `#${issue.number}: ${issue.title} [${issue.state}]${labelsStr ? ` (${labelsStr})` : ''}`;\n })\n .join('\\n');\n\n return `Found ${issues.length} issue(s):\\n${issueList}`;\n } catch (error) {\n return `Error listing issues: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n {\n name: 'github_list_issues',\n description: `List repository issues from GitHub.\n\nUsage:\n- Lists issues with optional filters\n- Returns issue number, title, state, and labels\n- Useful for finding issues to work on\n\nExample:\ngithub_list_issues({ state: \"open\", labels: [\"bug\"], limit: 10 })`,\n schema: z.object({\n state: z.enum(['open', 'closed', 'all']).optional().describe('Issue state filter (default: \"open\")'),\n labels: z.array(z.string()).optional().describe('Filter by labels'),\n limit: z.number().optional().describe('Maximum number of issues to return (default: 30)'),\n }),\n }\n );\n\n /**\n * Get issue details\n */\n const github_get_issue = tool(\n async ({ issueNumber }) => {\n try {\n const result = await github.execute('getIssue', {\n issueNumber,\n });\n\n if (!result.success) {\n return `Failed to get issue: ${result.error?.message}`;\n }\n\n const data = result.data as {\n issue: {\n number: number;\n title: string;\n body: string | null;\n state: string;\n labels: Array<{ name: string }>;\n };\n comments: Array<{\n body: string;\n user: { login: string };\n created_at: string;\n }>;\n };\n\n const { issue, comments } = data;\n const labelsStr = issue.labels.map((l) => l.name).join(', ');\n\n let output = `Issue #${issue.number}: ${issue.title}\\n`;\n output += `State: ${issue.state}\\n`;\n if (labelsStr) {\n output += `Labels: ${labelsStr}\\n`;\n }\n output += `\\nDescription:\\n${issue.body || '(No description)'}\\n`;\n\n if (comments.length > 0) {\n output += `\\n${comments.length} Comment(s):\\n`;\n comments.forEach((comment) => {\n output += `\\n@${comment.user.login} (${comment.created_at}):\\n${comment.body}\\n`;\n });\n }\n\n return output;\n } catch (error) {\n return `Error getting issue: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n {\n name: 'github_get_issue',\n description: `Get detailed information about a specific issue.\n\nUsage:\n- Retrieves issue details including description and comments\n- Useful for understanding what needs to be fixed\n- Use this before working on an issue\n\nExample:\ngithub_get_issue({ issueNumber: 42 })`,\n schema: z.object({\n issueNumber: z.number().describe('Issue number to retrieve'),\n }),\n }\n );\n\n /**\n * Get PR review comments\n */\n const github_get_pr_comments = tool(\n async ({ prNumber }) => {\n try {\n const result = await github.execute('getPRComments', {\n prNumber,\n });\n\n if (!result.success) {\n return `Failed to get PR comments: ${result.error?.message}`;\n }\n\n const data = result.data as {\n comments: Array<{\n body: string;\n user: { login: string };\n created_at: string;\n }>;\n };\n\n const comments = data.comments;\n\n if (comments.length === 0) {\n return `No comments on PR #${prNumber}`;\n }\n\n let output = `${comments.length} Comment(s) on PR #${prNumber}:\\n`;\n comments.forEach((comment) => {\n output += `\\n@${comment.user.login} (${comment.created_at}):\\n${comment.body}\\n`;\n });\n\n return output;\n } catch (error) {\n return `Error getting PR comments: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n {\n name: 'github_get_pr_comments',\n description: `Get review comments on a pull request.\n\nUsage:\n- Retrieves all comments on a PR\n- Useful for addressing review feedback\n- Shows commenter and timestamp\n\nExample:\ngithub_get_pr_comments({ prNumber: 87 })`,\n schema: z.object({\n prNumber: z.number().describe('Pull request number'),\n }),\n }\n );\n\n return {\n github_clone,\n github_create_branch,\n github_commit,\n github_push,\n github_create_pr,\n github_list_issues,\n github_get_issue,\n github_get_pr_comments,\n };\n}\n\n/**\n * Create GitHub tools as array (for easy spreading into agent tools)\n */\nexport function createGitHubToolsArray(config: GitHubToolsConfig) {\n const tools = createGitHubTools(config);\n return Object.values(tools);\n}\n","/**\n * @almadar/agent Tools\n *\n * All agent tools for schema generation, validation, and management.\n *\n * @packageDocumentation\n */\n\n// Execute tool (no deps needed)\nexport { createExecuteTool, validateCommandPaths } from './execute.js';\n\n// Validate tool (no deps needed - shells to CLI)\nexport { createValidateSchemaTool } from './validate-schema.js';\n\n// Generate schema tool (uses @almadar/llm structured output directly)\nexport { createGenerateSchemaTool } from './generate-schema.js';\n\n// Finish task tool (uses internal combiner and domain converter)\nexport { createFinishTaskTool } from './finish-task.js';\n\n// Domain orbital tools (uses internal domain language converter)\nexport {\n createGenerateOrbitalDomainTool,\n createConstructCombinedDomainTool,\n createDomainOrbitalTools,\n type DomainOrbitalEventCallback,\n type DomainOrbitalCompleteCallback,\n type DomainOrbitalToolOptions,\n type DomainOrbitalSpec,\n} from './domain-orbital.js';\n\n// Orbital subagent tool (uses internal orbital generator)\nexport {\n createOrbitalSubagentTool,\n createSubagentEventWrapper,\n type SubagentEventCallback,\n type OrbitalCompleteCallback,\n type OrbitalRequirements,\n type OrbitalSubagentToolOptions,\n} from './orbital-subagent.js';\n\n// Trait subagent tool (uses @almadar/llm directly)\nexport {\n createTraitSubagentTool,\n createTraitEventWrapper,\n type TraitEventCallback,\n type TraitCompleteCallback,\n type TraitSubagentToolOptions,\n type TraitSpec,\n} from './trait-subagent.js';\n\n// Combine schemas tool (uses internal combiner)\nexport { createCombineSchemasTool } from './combine-schemas.js';\n\n// Schema chunking tools (no deps needed - uses @almadar/core)\nexport {\n createQuerySchemaStructureTool,\n createExtractChunkTool,\n createApplyChunkTool,\n createSchemaChunkingTools,\n} from './schema-chunking.js';\n\n// Design transition tool (uses @almadar/llm + @almadar/skills)\nexport {\n createDesignTransitionTool,\n createDesignEventWrapper,\n type DesignEventCallback,\n type DesignTransitionToolOptions,\n} from './design-transition.js';\n\n// GitHub tools (uses @almadar/integrations)\nexport {\n createGitHubTools,\n createGitHubToolsArray,\n type GitHubToolsConfig,\n} from './github.js';\n\n// ============================================================================\n// Convenience Factory\n// ============================================================================\n\n// Import functions for use in createAgentTools\nimport { createExecuteTool } from './execute.js';\nimport { createValidateSchemaTool } from './validate-schema.js';\nimport { createGenerateSchemaTool } from './generate-schema.js';\nimport { createFinishTaskTool } from './finish-task.js';\nimport { createCombineSchemasTool } from './combine-schemas.js';\nimport { createOrbitalSubagentTool } from './orbital-subagent.js';\nimport { createTraitSubagentTool } from './trait-subagent.js';\nimport { createDomainOrbitalTools } from './domain-orbital.js';\nimport { createSchemaChunkingTools } from './schema-chunking.js';\nimport { createDesignTransitionTool } from './design-transition.js';\n\n/**\n * Create all agent tools for a workspace.\n *\n * All dependencies are now internal to @almadar/agent - no dependency injection needed.\n *\n * @param workDir - Workspace directory\n * @returns All tools ready for use\n */\nexport function createAgentTools(workDir: string) {\n return {\n // Core tools\n execute: createExecuteTool(workDir),\n validateSchema: createValidateSchemaTool(workDir),\n\n // Schema generation (uses @almadar/llm structured output directly)\n generateSchema: createGenerateSchemaTool(),\n\n // Orbital tools (now use internal functions)\n finishTask: createFinishTaskTool(workDir),\n combineSchemas: createCombineSchemasTool(workDir),\n\n // Subagent tools (now use internal functions)\n orbitalSubagent: createOrbitalSubagentTool(),\n traitSubagent: createTraitSubagentTool(),\n\n // Domain tools (now use internal functions)\n domainOrbitalTools: createDomainOrbitalTools({ workDir }),\n\n // Chunking tools\n schemaChunking: createSchemaChunkingTools(workDir),\n\n // Design tool\n designTransition: createDesignTransitionTool(),\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/orbitals/cache/orbital-fingerprint.ts","../../src/orbitals/cache/structural-templates.ts","../../src/orbitals/cache/prompt-assembler.ts","../../src/orbitals/cache/index.ts","../../src/tools/execute.ts","../../src/tools/validate-schema.ts","../../src/tools/generate-schema.ts","../../src/orbitals/combiner/index.ts","../../src/orbitals/domain-language/index.ts","../../src/orbitals/domain-language/prompts/odl-syntax.ts","../../src/orbitals/domain-language/prompts/odl-examples.ts","../../src/orbitals/domain-language/prompts/odl-patterns.ts","../../src/orbitals/domain-language/prompts/odl-to-schema.ts","../../src/tools/finish-task.ts","../../src/tools/domain-orbital.ts","../../src/orbitals/generation/orbital-generator.ts","../../src/tools/orbital-subagent.ts","../../src/tools/trait-subagent.ts","../../src/tools/combine-schemas.ts","../../src/tools/schema-chunking.ts","../../src/tools/github.ts","../../src/tools/index.ts"],"names":["isEntityReference","getInlineEntity","getTraitName","resolve","path2","tool","fs","z","execAsync","promisify","exec","path3","fs2","path4","getEntityName","AgentDomainCategorySchema","LLMClient","path","files","path5","fss","isOrbitalDefinition"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Orbital Fingerprinting for Caching\n *\n * Computes structural fingerprints for Orbital Units to enable\n * prompt caching based on similar structures.\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalUnit, OrbitalEntity, EntityField, OrbitalDefinition, EntityRef } from '@almadar/core/types';\nimport { isOrbitalDefinition, getTraitName, isEntityReference } from '@almadar/core/types';\n\n/**\n * Get entity from EntityRef for signature computation.\n * Returns null if entity is a reference string.\n */\nfunction getInlineEntity(entity: EntityRef): OrbitalEntity | null {\n if (isEntityReference(entity)) {\n return null;\n }\n return entity;\n}\n\n// ============================================================================\n// Fingerprint Computation\n// ============================================================================\n\n/**\n * Compute a structural fingerprint for an Orbital Unit.\n * Units with the same fingerprint can share cached prompts.\n * Only works with full orbital definitions (not references).\n */\nexport function computeOrbitalFingerprint(orbital: OrbitalUnit): string {\n // Note: Orbital is now always OrbitalDefinition (no more OrbitalReference type)\n // The isOrbitalDefinition check is kept for backwards compatibility but always true\n\n // Get inline entity or use fallback for references\n const inlineEntity = getInlineEntity(orbital.entity);\n\n // 1. Entity structure signature\n const entitySig = inlineEntity ? computeEntitySignature(inlineEntity) : 'ref';\n\n // 2. Trait categories (sorted)\n const traitSig = orbital.traits\n .map(getTraitName)\n .sort()\n .join(',');\n\n // 3. Persistence type\n const persistSig = inlineEntity?.persistence || 'persistent';\n\n return `${persistSig}:e[${entitySig}]_t[${traitSig}]`;\n}\n\n/**\n * Compute entity structure signature based on field types.\n */\nexport function computeEntitySignature(entity: OrbitalEntity): string {\n const typeCounts: Record<string, number> = {};\n\n for (const field of entity.fields) {\n const baseType = getFieldTypeKey(field);\n typeCounts[baseType] = (typeCounts[baseType] || 0) + 1;\n }\n\n return Object.entries(typeCounts)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([type, count]) => `${type}:${count}`)\n .join('-');\n}\n\n/**\n * Get field type key for fingerprinting.\n */\nfunction getFieldTypeKey(field: EntityField): string {\n if (field.type === 'relation') {\n const cardinality = field.relation?.cardinality || 'one';\n return `rel:${cardinality}`;\n }\n if (field.type === 'enum') {\n return 'enum';\n }\n return field.type;\n}\n\n// ============================================================================\n// Fingerprint Matching\n// ============================================================================\n\n/**\n * Check if two fingerprints are structurally similar.\n * Similar fingerprints can share template guidance.\n */\nexport function fingerprintsMatch(fp1: string, fp2: string): boolean {\n return fp1 === fp2;\n}\n\n/**\n * Extract fingerprint components.\n */\nexport function parseFingerprint(fingerprint: string): {\n persistence: string;\n entity: string;\n traits: string[];\n patterns: string[];\n} {\n const match = fingerprint.match(/^(\\w+):e\\[([^\\]]*)\\]_t\\[([^\\]]*)\\]_p\\[([^\\]]*)\\]$/);\n if (!match) {\n return { persistence: 'unknown', entity: '', traits: [], patterns: [] };\n }\n\n return {\n persistence: match[1],\n entity: match[2],\n traits: match[3] ? match[3].split(',') : [],\n patterns: match[4] ? match[4].split(',') : [],\n };\n}\n\n/**\n * Compute similarity score between two fingerprints (0-1).\n */\nexport function fingerprintSimilarity(fp1: string, fp2: string): number {\n if (fp1 === fp2) return 1.0;\n\n const p1 = parseFingerprint(fp1);\n const p2 = parseFingerprint(fp2);\n\n let score = 0;\n let total = 4;\n\n // Persistence match\n if (p1.persistence === p2.persistence) score += 1;\n\n // Entity structure match\n if (p1.entity === p2.entity) score += 1;\n\n // Trait overlap\n const traitOverlap = p1.traits.filter((t) => p2.traits.includes(t)).length;\n const traitUnion = new Set([...p1.traits, ...p2.traits]).size;\n if (traitUnion > 0) {\n score += traitOverlap / traitUnion;\n } else {\n score += 1;\n }\n\n // Pattern overlap\n const patternOverlap = p1.patterns.filter((p) => p2.patterns.includes(p)).length;\n const patternUnion = new Set([...p1.patterns, ...p2.patterns]).size;\n if (patternUnion > 0) {\n score += patternOverlap / patternUnion;\n } else {\n score += 1;\n }\n\n return score / total;\n}\n","/**\n * Structural Templates for Cached Generation\n *\n * Pre-defined templates for common structural patterns.\n *\n * @packageDocumentation\n */\n\n// ============================================================================\n// Template Types\n// ============================================================================\n\nexport interface StructuralTemplate {\n /** Fingerprint pattern this template matches */\n fingerprintPattern: string;\n /** Human-readable name */\n name: string;\n /** Template guidance for generation */\n guidance: string;\n /** Example sections */\n exampleSections: string[];\n}\n\n// ============================================================================\n// Common Templates\n// ============================================================================\n\n/**\n * Templates for common structural patterns.\n */\nexport const STRUCTURAL_TEMPLATES: StructuralTemplate[] = [\n {\n fingerprintPattern: 'persistent:e[*]_t[FormSubmission*]_p[*form*]',\n name: 'CRUD Form Entity',\n guidance: `\nThis is a standard CRUD entity with form submission.\nGenerate pages for:\n- List view with search/filter\n- Create form with validation\n- Edit form with existing data\n- Detail view with actions\n`,\n exampleSections: ['page-header', 'search-filters', 'entity-list', 'form-section', 'form-actions'],\n },\n {\n fingerprintPattern: 'persistent:e[*]_t[*Workflow*]_p[*]',\n name: 'Workflow Entity',\n guidance: `\nThis entity has workflow/state machine behavior.\nInclude:\n- Status indicators in list view\n- Transition actions in detail view\n- Workflow history display\n`,\n exampleSections: ['page-header', 'entity-table', 'entity-detail', 'form-actions'],\n },\n {\n fingerprintPattern: 'runtime:e[*]_t[*]_p[dashboard*]',\n name: 'Dashboard View',\n guidance: `\nThis is a runtime dashboard entity.\nFocus on:\n- Statistics and metrics display\n- Charts and visualizations\n- Recent activity lists\n`,\n exampleSections: ['page-header', 'dashboard-stats', 'chart', 'entity-cards'],\n },\n {\n fingerprintPattern: '*:e[*]_t[Platformer*]_p[game*]',\n name: 'Game Entity',\n guidance: `\nThis is a game entity with platformer mechanics.\nInclude:\n- Game canvas for rendering\n- HUD for score/health display\n- Controls panel for input\n`,\n exampleSections: ['game-canvas', 'game-hud', 'game-controls'],\n },\n];\n\n// ============================================================================\n// Template Matching\n// ============================================================================\n\n/**\n * Find matching templates for a fingerprint.\n */\nexport function findMatchingTemplates(fingerprint: string): StructuralTemplate[] {\n return STRUCTURAL_TEMPLATES.filter((template) =>\n matchesPattern(fingerprint, template.fingerprintPattern)\n );\n}\n\n/**\n * Get the best matching template for a fingerprint.\n */\nexport function getBestTemplate(fingerprint: string): StructuralTemplate | null {\n const matches = findMatchingTemplates(fingerprint);\n return matches.length > 0 ? matches[0] : null;\n}\n\n/**\n * Check if fingerprint matches a pattern.\n * Patterns support * as wildcard.\n */\nfunction matchesPattern(fingerprint: string, pattern: string): boolean {\n // Convert pattern to regex\n const regexStr = pattern\n .replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&') // Escape special chars\n .replace(/\\*/g, '.*'); // Replace * with .*\n\n const regex = new RegExp(`^${regexStr}$`);\n return regex.test(fingerprint);\n}\n\n/**\n * Get guidance for a fingerprint.\n */\nexport function getTemplateGuidance(fingerprint: string): string {\n const template = getBestTemplate(fingerprint);\n if (template) {\n return template.guidance;\n }\n\n return `\nNo specific template matched. Use standard patterns:\n- page-header for page titles\n- entity-list or entity-table for list views\n- form-section for input forms\n- entity-detail for detail views\n`;\n}\n","/**\n * Prompt Assembler for Cache-Aware Prompt Construction\n *\n * Assembles prompts with cache markers for efficient LLM caching.\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalUnit, OrbitalDefinition, EntityRef, Entity } from '@almadar/core/types';\nimport { isOrbitalDefinition, getTraitName, isEntityReference } from '@almadar/core/types';\n\n/**\n * Get entity name safely from EntityRef\n */\nfunction getEntityName(entity: EntityRef): string {\n if (isEntityReference(entity)) {\n return entity.replace('.entity', '');\n }\n return entity.name;\n}\n\n/**\n * Get inline entity for detailed access, or null for references\n */\nfunction getInlineEntity(entity: EntityRef): Entity | null {\n if (isEntityReference(entity)) {\n return null;\n }\n return entity;\n}\nimport { computeOrbitalFingerprint } from './orbital-fingerprint.js';\nimport { getTemplateGuidance, getBestTemplate } from './structural-templates.js';\nimport type { CacheableBlock } from '@almadar/llm';\n\n// ============================================================================\n// Cache Markers\n// ============================================================================\n\n/** Anthropic cache control marker (deprecated - use CacheableBlock instead) */\nconst CACHE_BREAK = '<!-- cache_break -->';\n\n// ============================================================================\n// Context Helpers\n// ============================================================================\n\n/**\n * Build context section from orbital's domainContext and design fields.\n * Passes through existing context to the subagent.\n */\nfunction buildContextSection(orbital: OrbitalDefinition): string {\n const parts: string[] = [];\n\n if (orbital.domainContext) {\n const ctx = orbital.domainContext;\n parts.push(`DomainContext: category=${ctx.category || 'business'}`);\n if (ctx.vocabulary) {\n parts.push(`Vocabulary: ${JSON.stringify(ctx.vocabulary)}`);\n }\n if (ctx.requestFragment) {\n parts.push(`RequestFragment: \"${ctx.requestFragment}\"`);\n }\n }\n\n if (orbital.design) {\n const d = orbital.design;\n if (d.style) parts.push(`Style: ${d.style}`);\n if (d.uxHints) {\n const hints = d.uxHints;\n if (hints.flowPattern) parts.push(`FlowPattern: ${hints.flowPattern}`);\n if (hints.listPattern) parts.push(`ListPattern: ${hints.listPattern}`);\n if (hints.formPattern) parts.push(`FormPattern: ${hints.formPattern}`);\n }\n }\n\n return parts.length > 0 ? `Context: ${parts.join(', ')}\\n` : '';\n}\n\n// ============================================================================\n// Prompt Assembly\n// ============================================================================\n\nexport interface AssembledPrompt {\n /** The full prompt text */\n prompt: string;\n /** Fingerprint for this orbital */\n fingerprint: string;\n /** Whether a cached template was used */\n usedCachedTemplate: boolean;\n /** Template name if used */\n templateName?: string;\n}\n\n/**\n * Cache-aware assembled prompt with separate blocks.\n */\nexport interface CacheableAssembledPrompt {\n /** System blocks (cacheable) */\n systemBlocks: CacheableBlock[];\n /** User blocks (usually not cacheable) */\n userBlocks: CacheableBlock[];\n /** Fingerprint for this orbital */\n fingerprint: string;\n /** Whether a cached template was used */\n usedCachedTemplate: boolean;\n /** Template name if used */\n templateName?: string;\n}\n\n/**\n * Assemble a prompt for orbital unit generation.\n * Organizes content to maximize cache hits.\n * Only works with full orbital definitions (not references).\n */\nexport function assembleOrbitalPrompt(\n orbital: OrbitalUnit,\n baseSystemPrompt: string\n): AssembledPrompt {\n const fingerprint = computeOrbitalFingerprint(orbital);\n const template = getBestTemplate(fingerprint);\n const guidance = getTemplateGuidance(fingerprint);\n\n // Note: Orbital is now always OrbitalDefinition (no more OrbitalReference type)\n // This check is kept for backwards compatibility but always passes\n\n // Structure prompt for optimal caching:\n // 1. Static system prompt (cacheable across all calls)\n // 2. Template guidance (cacheable for similar structures)\n // 3. Specific orbital details (unique per call)\n\n const contextSection = buildContextSection(orbital);\n\n // Get entity details safely\n const entityName = getEntityName(orbital.entity);\n const inlineEntity = getInlineEntity(orbital.entity);\n const persistence = inlineEntity?.persistence || 'persistent';\n const fieldNames = inlineEntity?.fields.map((f: { name: string }) => f.name).join(', ') || 'N/A';\n\n const prompt = `${baseSystemPrompt}\n\n${CACHE_BREAK}\n\n## Structural Template\n${guidance}\n\n${CACHE_BREAK}\n\n## Current Orbital Unit\nName: ${orbital.name}\nEntity: ${entityName}\nPersistence: ${persistence}\nFields: ${fieldNames}\nTraits: ${orbital.traits.map(getTraitName).join(', ')}\n${contextSection}\nGenerate a complete FullOrbitalUnit with:\n- Full field definitions with types and validation\n- Trait state machines with transitions and effects\n- Business rule validation using \"guard\" (singular, NOT \"guards\") S-expression on SAVE transitions\n- Pages with trait references\n- domainContext with category, vocabulary, and requestFragment\n- design with style and uxHints (flowPattern, listPattern, formPattern)\n`;\n\n return {\n prompt,\n fingerprint,\n usedCachedTemplate: template !== null,\n templateName: template?.name,\n };\n}\n\n/**\n * Assemble cacheable blocks for Anthropic prompt caching.\n *\n * Structure:\n * - System block 1: Base system prompt (highly cacheable, rarely changes)\n * - System block 2: Template guidance (cacheable per fingerprint)\n * - User block: Specific orbital details (not cached)\n *\n * Only works with full orbital definitions (not references).\n */\nexport function assembleCacheableOrbitalPrompt(\n orbital: OrbitalUnit,\n baseSystemPrompt: string\n): CacheableAssembledPrompt {\n const fingerprint = computeOrbitalFingerprint(orbital);\n const template = getBestTemplate(fingerprint);\n const guidance = getTemplateGuidance(fingerprint);\n\n // Note: Orbital is now always OrbitalDefinition (no more OrbitalReference type)\n // This check is kept for backwards compatibility but always passes\n\n // System blocks - mark as cacheable\n const systemBlocks: CacheableBlock[] = [\n // Block 1: Base system prompt (very stable, max cache benefit)\n {\n type: 'text',\n text: baseSystemPrompt,\n cache_control: { type: 'ephemeral' },\n },\n // Block 2: Template guidance (stable per fingerprint)\n {\n type: 'text',\n text: `\\n## Structural Template\\n${guidance}`,\n cache_control: { type: 'ephemeral' },\n },\n ];\n\n // Build context section if available\n const contextSection = buildContextSection(orbital);\n\n // Build cross-orbital connectivity section\n const emitsSection = orbital.emits?.length ? `Emits: ${orbital.emits.join(', ')}` : '';\n const listensSection = orbital.listens?.length\n ? `Listens: ${orbital.listens.map((l) => `${l.event}→${l.triggers}`).join(', ')}`\n : '';\n const connectivitySection = [emitsSection, listensSection].filter(Boolean).join('\\n');\n\n // Get entity details safely\n const entityName = getEntityName(orbital.entity);\n const inlineEntity = getInlineEntity(orbital.entity);\n const persistence = inlineEntity?.persistence || 'persistent';\n const fieldNames = inlineEntity?.fields.map((f: { name: string }) => f.name).join(', ') || 'N/A';\n\n // User block - unique per request (not cached)\n const userBlocks: CacheableBlock[] = [\n {\n type: 'text',\n text: `## Current Orbital Unit\nName: ${orbital.name}\nEntity: ${entityName}\nPersistence: ${persistence}\nFields: ${fieldNames}\nTraits: ${orbital.traits.map(getTraitName).join(', ')}\n${contextSection}${connectivitySection ? `\\n${connectivitySection}` : ''}\nGenerate a complete FullOrbitalUnit with:\n- Full field definitions with types and validation\n- Trait state machines with transitions and effects\n- Business rule validation using \"guard\" (singular, NOT \"guards\") S-expression on SAVE transitions\n- Pages with trait references\n- domainContext with category, vocabulary, and requestFragment\n- design with style and uxHints (flowPattern, listPattern, formPattern)\n- PRESERVE emits and listens from input if provided`,\n },\n ];\n\n return {\n systemBlocks,\n userBlocks,\n fingerprint,\n usedCachedTemplate: template !== null,\n templateName: template?.name,\n };\n}\n\n/**\n * Assemble prompts for multiple orbitals.\n * Groups by fingerprint for batch efficiency.\n */\nexport function assembleMultiOrbitalPrompts(\n orbitals: OrbitalUnit[],\n baseSystemPrompt: string\n): Map<string, AssembledPrompt[]> {\n const grouped = new Map<string, AssembledPrompt[]>();\n\n for (const orbital of orbitals) {\n const assembled = assembleOrbitalPrompt(orbital, baseSystemPrompt);\n const existing = grouped.get(assembled.fingerprint) || [];\n existing.push(assembled);\n grouped.set(assembled.fingerprint, existing);\n }\n\n return grouped;\n}\n\n/**\n * Get cache statistics for a set of orbitals.\n */\nexport function getCacheStats(orbitals: OrbitalUnit[]): {\n totalOrbitals: number;\n uniqueFingerprints: number;\n potentialCacheHits: number;\n templateMatches: number;\n} {\n const fingerprints = orbitals.map(computeOrbitalFingerprint);\n const unique = new Set(fingerprints);\n\n let templateMatches = 0;\n for (const orbital of orbitals) {\n const fp = computeOrbitalFingerprint(orbital);\n if (getBestTemplate(fp)) {\n templateMatches++;\n }\n }\n\n return {\n totalOrbitals: orbitals.length,\n uniqueFingerprints: unique.size,\n potentialCacheHits: orbitals.length - unique.size,\n templateMatches,\n };\n}\n\n","/**\n * Orbital Cache Module\n *\n * Exports fingerprinting, templates, and prompt assembly utilities\n * for efficient LLM prompt caching.\n *\n * @packageDocumentation\n */\n\n// ============================================================================\n// Fingerprinting\n// ============================================================================\n\nexport {\n computeOrbitalFingerprint,\n computeEntitySignature,\n fingerprintsMatch,\n parseFingerprint,\n fingerprintSimilarity,\n} from './orbital-fingerprint.js';\n\n// ============================================================================\n// Structural Templates\n// ============================================================================\n\nexport {\n type StructuralTemplate,\n STRUCTURAL_TEMPLATES,\n findMatchingTemplates,\n getBestTemplate,\n getTemplateGuidance,\n} from './structural-templates.js';\n\n// ============================================================================\n// Prompt Assembly\n// ============================================================================\n\nexport {\n type AssembledPrompt,\n type CacheableAssembledPrompt,\n assembleOrbitalPrompt,\n assembleCacheableOrbitalPrompt,\n assembleMultiOrbitalPrompts,\n getCacheStats,\n} from './prompt-assembler.js';\n","/**\n * Execute Tool\n *\n * Sandboxed shell command execution within a workspace directory.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport { spawn } from 'child_process';\nimport * as path from 'path';\n\n/**\n * Dangerous commands that should be blocked when targeting outside workspace.\n */\nconst DANGEROUS_COMMANDS = [\n 'rm', 'rmdir', 'mv', 'cp', 'ln', 'chmod', 'chown', 'touch', 'mkdir',\n];\n\n/**\n * Commands that should be blocked entirely for security.\n */\nconst BLOCKED_COMMANDS = [\n 'curl', 'wget', 'nc', 'netcat', 'ssh', 'scp', 'rsync', 'ftp', 'sftp',\n 'sudo', 'su', 'doas', 'pkexec', 'eval', 'exec', 'source',\n 'crontab', 'at', 'systemctl', 'service',\n 'dd', 'mkfs', 'fdisk', 'mount', 'umount',\n 'iptables', 'firewall-cmd',\n 'useradd', 'userdel', 'usermod', 'groupadd', 'passwd',\n];\n\n/**\n * Check if a command contains paths outside the workspace.\n * Returns an error message if unsafe, null if safe.\n */\nexport function validateCommandPaths(command: string, workDir: string): string | null {\n const normalizedWorkDir = path.resolve(workDir);\n\n const firstWord = command.trim().split(/[\\s;|&]/)[0];\n if (BLOCKED_COMMANDS.includes(firstWord)) {\n return `Command blocked: \"${firstWord}\" is not allowed for security reasons.`;\n }\n\n // Block shell output/append redirections to absolute paths outside workspace\n const redirectPattern = /(?:>>?|[12&]>>?)\\s*(\\/([\\w.-]+\\/)*[\\w.-]+)/g;\n let redirectMatch;\n while ((redirectMatch = redirectPattern.exec(command)) !== null) {\n const targetPath = redirectMatch[1];\n if (targetPath !== '/dev/null') {\n const resolvedPath = path.resolve(targetPath);\n if (!resolvedPath.startsWith(normalizedWorkDir)) {\n return `Command blocked: output redirection to \"${targetPath}\" is outside workspace.`;\n }\n }\n }\n\n // Block tee command writing outside workspace\n const teePattern = /\\btee\\s+(?:-a\\s+)?(\\/([\\w.-]+\\/)*[\\w.-]+)/g;\n let teeMatch;\n while ((teeMatch = teePattern.exec(command)) !== null) {\n const targetPath = teeMatch[1];\n const resolvedPath = path.resolve(targetPath);\n if (!resolvedPath.startsWith(normalizedWorkDir)) {\n return `Command blocked: tee to \"${targetPath}\" is outside workspace.`;\n }\n }\n\n // Check dangerous commands for path arguments\n for (const cmd of DANGEROUS_COMMANDS) {\n const cmdPattern = new RegExp(`\\\\b${cmd}\\\\s+[^|;&]*`, 'g');\n let cmdMatch;\n while ((cmdMatch = cmdPattern.exec(command)) !== null) {\n const cmdWithArgs = cmdMatch[0];\n const pathsInCmd = cmdWithArgs.match(/\\/([\\w.-]+\\/)*[\\w.-]+/g) || [];\n for (const foundPath of pathsInCmd) {\n if (foundPath === '/dev/null' || foundPath.startsWith('/tmp/')) continue;\n const resolvedPath = path.resolve(foundPath);\n if (!resolvedPath.startsWith(normalizedWorkDir)) {\n return `Command blocked: \"${cmd}\" with path \"${foundPath}\" is outside workspace.`;\n }\n }\n }\n }\n\n // Check absolute paths\n const absolutePathPattern = /(?:^|[\\s'\"=])(\\/([\\w.-]+\\/)+[\\w.-]*)/g;\n let match;\n while ((match = absolutePathPattern.exec(command)) !== null) {\n const foundPath = match[1];\n if (foundPath.startsWith('/dev/') || foundPath.startsWith('/tmp/') || foundPath === '/dev/null') {\n continue;\n }\n const resolvedPath = path.resolve(foundPath);\n if (!resolvedPath.startsWith(normalizedWorkDir)) {\n return `Command blocked: path \"${foundPath}\" is outside workspace.`;\n }\n }\n\n // Block cd to outside workspace\n if (command.includes('cd /') && !command.includes(`cd ${normalizedWorkDir}`)) {\n const cdMatch = command.match(/cd\\s+(\\/[^\\s;|&]+)/);\n if (cdMatch) {\n const cdTarget = path.resolve(cdMatch[1]);\n if (!cdTarget.startsWith(normalizedWorkDir)) {\n return `Command blocked: \"cd ${cdMatch[1]}\" would navigate outside workspace.`;\n }\n }\n }\n\n // Block complex command substitution\n if (command.includes('`') || /\\$\\([^)]+\\)/.test(command)) {\n const simpleSubstitutions = /\\$\\((pwd|echo|date|whoami)\\)/g;\n const strippedCommand = command.replace(simpleSubstitutions, '');\n if (strippedCommand.includes('`') || /\\$\\([^)]+\\)/.test(strippedCommand)) {\n return `Command blocked: complex command substitution detected.`;\n }\n }\n\n return null;\n}\n\n/**\n * Create an execute tool that runs shell commands in the workspace directory.\n */\nexport function createExecuteTool(workDir: string) {\n const normalizedWorkDir = path.resolve(workDir);\n\n return tool(\n async ({ command, timeout = 60000 }) => {\n const validationError = validateCommandPaths(command, workDir);\n if (validationError) {\n return validationError;\n }\n\n return new Promise<string>((resolve) => {\n const parts = command.split(' ');\n const cmd = parts[0];\n const args = parts.slice(1);\n\n const proc = spawn(cmd, args, {\n cwd: workDir,\n shell: true,\n timeout,\n env: {\n PATH: process.env.PATH,\n NODE_PATH: process.env.NODE_PATH,\n NVM_DIR: process.env.NVM_DIR,\n NVM_BIN: process.env.NVM_BIN,\n SHELL: '/bin/sh',\n TERM: 'dumb',\n LANG: process.env.LANG || 'en_US.UTF-8',\n CI: 'true',\n HOME: normalizedWorkDir,\n TMPDIR: path.join(normalizedWorkDir, '.tmp'),\n TEMP: path.join(normalizedWorkDir, '.tmp'),\n TMP: path.join(normalizedWorkDir, '.tmp'),\n HISTFILE: '/dev/null',\n npm_config_cache: path.join(normalizedWorkDir, '.npm-cache'),\n npm_config_prefix: normalizedWorkDir,\n },\n });\n\n let stdout = '';\n let stderr = '';\n\n proc.stdout?.on('data', (data) => {\n stdout += data.toString();\n });\n\n proc.stderr?.on('data', (data) => {\n stderr += data.toString();\n });\n\n proc.on('error', (error) => {\n resolve(`Error executing command: ${error.message}`);\n });\n\n proc.on('close', (code) => {\n const output = stdout + (stderr ? `\\n\\nStderr:\\n${stderr}` : '');\n if (code === 0) {\n resolve(output || 'Command completed successfully (no output)');\n } else {\n resolve(`Command exited with code ${code}\\n\\n${output}`);\n }\n });\n\n setTimeout(() => {\n proc.kill('SIGTERM');\n resolve(`Command timed out after ${timeout}ms`);\n }, timeout);\n });\n },\n {\n name: 'execute',\n description: `Execute a shell command in the workspace directory.\n\nIMPORTANT: You are restricted to your workspace directory. Use RELATIVE paths only:\n- ./schema.json (NOT /schema.json or absolute paths)\n- ./app (NOT /app or absolute paths)\n\nExamples:\n- orbital validate ./schema.json --json\n- npx kflow compile ./schema.json -o ./app --verify\n- cd ./app && npm install\n\nCommands using absolute paths outside your workspace will be blocked.`,\n schema: z.object({\n command: z.string().describe('The shell command to execute'),\n timeout: z.number().optional().describe('Timeout in milliseconds (default: 60000)'),\n }),\n },\n );\n}\n","/**\n * Schema Validation Tool\n *\n * Validates orbital schemas using the @almadar/cli npm package.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\nimport * as path from 'path';\nimport * as fs from 'fs/promises';\n\nconst execAsync = promisify(exec);\n\n/**\n * Maximum number of validation attempts before forcing stop.\n */\nconst MAX_VALIDATION_ATTEMPTS = 5;\n\n/**\n * Create a validate_schema tool that validates schema.json in the workspace.\n *\n * Uses `npx @almadar/cli validate --json` for comprehensive Rust-based validation.\n *\n * Has a built-in cap of MAX_VALIDATION_ATTEMPTS to prevent\n * infinite validation-fix loops.\n */\nexport function createValidateSchemaTool(workDir: string) {\n const schemaPath = path.join(workDir, 'schema.json');\n let validationAttempts = 0;\n\n return tool(\n async () => {\n validationAttempts++;\n\n if (validationAttempts > MAX_VALIDATION_ATTEMPTS) {\n return JSON.stringify({\n success: true,\n valid: false,\n cappedValidation: true,\n message:\n `⚠️ VALIDATION CAP REACHED (${MAX_VALIDATION_ATTEMPTS} attempts). ` +\n `You've tried to fix this schema ${validationAttempts} times. ` +\n `STOP fixing validation errors and proceed with what you have.`,\n recommendation: 'STOP_FIXING',\n });\n }\n\n try {\n try {\n await fs.access(schemaPath);\n } catch {\n return JSON.stringify({\n success: false,\n valid: false,\n validationAttempt: validationAttempts,\n errors: [{\n code: 'FILE_NOT_FOUND',\n path: '',\n message: 'File not found: schema.json. Create it first with write_file.',\n }],\n });\n }\n\n const { stdout, stderr } = await execAsync(\n `npx @almadar/cli validate \"${schemaPath}\" --json`,\n { timeout: 30000 },\n );\n\n let cliResult: {\n success: boolean;\n valid: boolean;\n errors?: Array<{\n code: string;\n path: string;\n message: string;\n suggestion?: string;\n fixGuidance?: string;\n expectedShape?: string;\n validValues?: string[];\n }>;\n warnings?: Array<{\n code: string;\n path: string;\n message: string;\n suggestion?: string;\n }>;\n stats?: {\n orbitals: number;\n entities: number;\n traits: number;\n pages: number;\n };\n };\n\n try {\n cliResult = JSON.parse(stdout);\n } catch {\n return JSON.stringify({\n success: false,\n valid: false,\n validationAttempt: validationAttempts,\n errors: [{\n code: 'CLI_OUTPUT_ERROR',\n path: '',\n message: `Failed to parse orbital CLI output: ${stdout || stderr}`,\n }],\n });\n }\n\n const response = {\n ...cliResult,\n validationAttempt: validationAttempts,\n remainingAttempts: MAX_VALIDATION_ATTEMPTS - validationAttempts,\n ...(validationAttempts >= MAX_VALIDATION_ATTEMPTS - 1 && !cliResult.valid\n ? {\n warning:\n `⚠️ Only ${MAX_VALIDATION_ATTEMPTS - validationAttempts} validation attempt(s) remaining.`,\n }\n : {}),\n };\n\n return JSON.stringify(response);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n if (errorMessage.includes('ENOENT') || errorMessage.includes('not found')) {\n return JSON.stringify({\n success: false,\n valid: false,\n validationAttempt: validationAttempts,\n errors: [{\n code: 'CLI_NOT_FOUND',\n path: '',\n message: '@almadar/cli not found. Ensure it is installed or accessible via npx.',\n suggestion: 'Install with: npm install -g @almadar/cli or ensure npx can access it.',\n }],\n });\n }\n\n return JSON.stringify({\n success: false,\n valid: false,\n validationAttempt: validationAttempts,\n errors: [{\n code: 'VALIDATION_ERROR',\n path: '',\n message: `Validation error: ${errorMessage}`,\n }],\n });\n }\n },\n {\n name: 'validate_schema',\n description: `Validate the schema.json file in the workspace.\n\nRuns validation using \\`npx @almadar/cli validate --json\\`.\n\nReturns detailed errors with code, path, message, suggestion, and expectedShape.\n\n⚠️ VALIDATION CAP: You have a maximum of 5 validation attempts.`,\n schema: z.object({}),\n },\n );\n}\n","/**\n * Schema Generation Tool (via Structured Output LLM)\n *\n * Generates KFlow schemas using OpenAI's structured output mode.\n * Uses @almadar/llm StructuredOutputClient directly.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport type { OrbitalSchema } from '@almadar/core/types';\nimport {\n getStructuredOutputClient,\n isStructuredOutputAvailable,\n} from '@almadar/llm';\n\nconst GenerateSchemaInputSchema = z.object({\n userRequest: z.string().describe('The user\\'s natural language description'),\n suggestedTraits: z.array(z.string()).optional().describe('Suggested traits'),\n suggestedEntities: z.array(z.string()).optional().describe('Suggested entity names'),\n suggestedPages: z.array(z.string()).optional().describe('Suggested page types/names'),\n suggestedPatterns: z.array(z.string()).optional().describe('Suggested section patterns'),\n additionalInstructions: z.string().optional().describe('Additional instructions'),\n existingSchema: z.string().optional().describe('Existing schema JSON to update'),\n});\n\n/**\n * Create a tool that generates KFlow schemas using structured output.\n */\nexport function createGenerateSchemaTool() {\n return tool(\n async (input) => {\n if (!isStructuredOutputAvailable()) {\n return JSON.stringify({\n success: false,\n error: 'Structured output generation is not available. Set OPENAI_API_KEY.',\n });\n }\n\n try {\n let enhancedRequest = input.userRequest;\n\n if (input.suggestedEntities?.length) {\n enhancedRequest += `\\n\\nSuggested entities: ${input.suggestedEntities.join(', ')}`;\n }\n if (input.suggestedTraits?.length) {\n enhancedRequest += `\\n\\nSuggested traits: ${input.suggestedTraits.join(', ')}`;\n }\n if (input.suggestedPages?.length) {\n enhancedRequest += `\\n\\nSuggested pages: ${input.suggestedPages.join(', ')}`;\n }\n if (input.suggestedPatterns?.length) {\n enhancedRequest += `\\n\\nSuggested section patterns: ${input.suggestedPatterns.join(', ')}`;\n }\n\n const client = getStructuredOutputClient();\n\n const result = await client.generate<OrbitalSchema>({\n userRequest: enhancedRequest,\n schemaName: 'kflow_schema',\n additionalInstructions: input.additionalInstructions,\n existingContext: input.existingSchema,\n });\n\n return JSON.stringify({\n success: true,\n schema: result.data,\n usage: result.usage,\n latencyMs: result.latencyMs,\n model: result.model,\n zodValidation: result.zodValidation,\n }, null, 2);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return JSON.stringify({\n success: false,\n error: errorMessage,\n suggestion: 'Check the error message and try again with adjusted guidance.',\n });\n }\n },\n {\n name: 'generate_schema',\n description: `Generate a KFlow schema using structured output LLM.\n\nUse this to generate the BULK of the schema quickly, then surgically edit as needed.\n\nGUIDANCE YOU CAN PROVIDE:\n- suggestedTraits, suggestedEntities, suggestedPages, suggestedPatterns\n- additionalInstructions\n- existingSchema (for updates)`,\n schema: GenerateSchemaInputSchema,\n },\n );\n}\n","/**\n * Orbital Combiner\n *\n * Deterministically combines multiple Orbitals into a single OrbitalSchema.\n * This removes the need for LLM involvement in the combining step.\n *\n * All UI is rendered via render_ui effects from traits (no static sections).\n *\n * NOTE: Validation is handled externally via `orbital validate` CLI.\n * The combiner only assembles schemas - it does not validate them.\n *\n * @packageDocumentation\n */\n\nimport type {\n Orbital,\n OrbitalSchema,\n DomainContext,\n OrbitalDefinition,\n PageRef,\n Page,\n} from \"@almadar/core/types\";\nimport { isOrbitalDefinition, isPageReferenceString, isPageReferenceObject } from \"@almadar/core/types\";\n\n/**\n * Check if page is an inline definition (not a reference)\n */\nfunction isInlinePage(page: PageRef): page is Page {\n return !isPageReferenceString(page) && !isPageReferenceObject(page);\n}\n\n// Validation result type for API compatibility (actual validation done via Rust CLI)\nexport interface OrbitalSchemaValidationResult {\n valid: boolean;\n errors: Array<{ code: string; message: string; path?: string }>;\n warnings: Array<{ code: string; message: string; path?: string }>;\n}\n\n// Backward compatibility alias\ntype FullOrbitalUnit = Orbital;\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface CombinerOptions {\n /** Application name */\n name: string;\n /** Optional description */\n description?: string;\n /** Schema version */\n version?: string;\n /** Domain context */\n domain?: DomainContext;\n /** Whether to run validation (default: true) */\n validate?: boolean;\n /** Global theme */\n theme?: string;\n /** Default route (first page if not specified) */\n defaultRoute?: string;\n}\n\nexport interface CombinerResult {\n /** Whether combining succeeded */\n success: boolean;\n /** The combined OrbitalSchema (if successful) */\n schema?: OrbitalSchema;\n /** Validation result (if validation was run) */\n validation?: OrbitalSchemaValidationResult;\n /** Error message (if failed) */\n error?: string;\n /** Statistics about the combining */\n stats: {\n totalOrbitals: number;\n totalEntities: number;\n totalPages: number;\n totalTraits: number;\n };\n}\n\n// ============================================================================\n// Combiner Implementation\n// ============================================================================\n\n/**\n * Combine multiple Orbitals into a single OrbitalSchema.\n *\n * This function performs deterministic merging:\n * 1. Builds an OrbitalSchema from the Orbitals\n * 2. Optionally runs validation\n *\n * Note: All UI is rendered via render_ui effects from traits.\n *\n * @example\n * ```typescript\n * const result = combineOrbitals([taskOrbital, userOrbital], {\n * name: 'My App',\n * validate: true,\n * });\n *\n * if (result.success) {\n * // Write schema to file\n * await fs.writeFile('schema.json', JSON.stringify(result.schema, null, 2));\n * } else {\n * console.error(result.error);\n * console.error(result.validation?.errors);\n * }\n * ```\n */\nexport function combineOrbitals(\n orbitals: FullOrbitalUnit[],\n options: CombinerOptions,\n): CombinerResult {\n const {\n name,\n description,\n version = \"1.0.0\",\n domain,\n validate = true,\n theme,\n } = options;\n\n // Filter to only full orbital definitions for stats\n const orbitalDefs = orbitals.filter(isOrbitalDefinition);\n\n // Stats\n const stats = {\n totalOrbitals: orbitals.length,\n totalEntities: orbitalDefs.length, // 1 entity per orbital definition\n totalPages: orbitalDefs.reduce((sum, o) => sum + o.pages.length, 0),\n totalTraits: orbitalDefs.reduce((sum, o) => sum + o.traits.length, 0),\n };\n\n // Handle empty input\n if (orbitals.length === 0) {\n return {\n success: false,\n error: \"No orbitals provided. At least one Orbital is required.\",\n stats,\n };\n }\n\n try {\n // Build OrbitalSchema from Orbitals\n const orbitalSchema: OrbitalSchema = {\n name,\n description,\n version,\n domainContext: domain,\n orbitals,\n config: theme\n ? {\n theme: { primary: theme },\n }\n : undefined,\n };\n\n // NOTE: Validation is deprecated in combiner - use `orbital validate` CLI instead\n // The validate option is kept for API compatibility but does not run validation\n const validation: OrbitalSchemaValidationResult | undefined = validate\n ? { valid: true, errors: [], warnings: [] }\n : undefined;\n\n return {\n success: true,\n schema: orbitalSchema,\n validation,\n stats,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n stats,\n };\n }\n}\n\n// Legacy alias removed - use combineOrbitals() directly\n\n/**\n * Combine orbitals and return only the schema (throws on error).\n * Use this when you want a simple API and will handle errors upstream.\n */\nexport function combineOrbitalsToSchema(\n orbitals: FullOrbitalUnit[],\n options: CombinerOptions,\n): OrbitalSchema {\n const result = combineOrbitals(orbitals, options);\n if (!result.success || !result.schema) {\n throw new Error(result.error || \"Failed to combine orbitals\");\n }\n return result.schema;\n}\n\n/**\n * Estimate the combination complexity (for progress indication).\n */\nexport function estimateCombineComplexity(orbitals: FullOrbitalUnit[]): {\n entities: number;\n pages: number;\n traits: number;\n totalSections: number;\n} {\n // Filter to only full orbital definitions\n const orbitalDefs = orbitals.filter(isOrbitalDefinition);\n return {\n entities: orbitalDefs.length,\n pages: orbitalDefs.reduce((sum, o) => sum + o.pages.length, 0),\n traits: orbitalDefs.reduce((sum, o) => sum + o.traits.length, 0),\n // Note: sections are no longer supported in trait-driven pages\n // Only count traits from inline page definitions (not references)\n totalSections: orbitalDefs.reduce(\n (sum, o) =>\n sum +\n o.pages.filter(isInlinePage).reduce((pSum: number, p) => pSum + (p.traits?.length ?? 0), 0),\n 0,\n ),\n };\n}\n","/**\n * Domain Language Module\n *\n * MIGRATED: The core domain language engine has been moved to @almadar/core.\n * This file re-exports everything from the core package for backward compatibility.\n * Only agent-specific modules (prompts) remain here.\n */\n\n// Core domain language engine (types, lexer, parsers, formatters, sync, registry)\nexport * from '@almadar/core/domain-language';\n\n// Agent-specific: LLM prompt templates for domain language generation\nexport * from './prompts/index.js';\n","/**\n * Domain Language Syntax Reference\n *\n * Complete syntax reference for the Orbital Domain Language.\n *\n * @packageDocumentation\n */\n\nexport const ODL_SYNTAX_REFERENCE = `\n## Domain Language Syntax\n\n### Entity Definition\n\n\\`\\`\\`\nA [EntityName] is a [persistence] entity that:\n - has [fieldName] as [type] (required|optional)\n - has [fieldName] as [type] with default [value]\n - belongs to [RelatedEntity]\n - belongs to [RelatedEntity] as [alias]\n - has many [RelatedEntity]s\n\\`\\`\\`\n\n**Persistence types:**\n- \\`persistent\\` - Stored in database (default)\n- \\`runtime\\` - Memory only, for games/UI state\n- \\`singleton\\` - Single instance, for config\n\n**Field types:**\n- \\`text\\` / \\`long text\\` - String fields\n- \\`number\\` / \\`currency\\` - Numeric fields\n- \\`yes/no\\` - Boolean fields\n- \\`date\\` / \\`timestamp\\` / \\`datetime\\` - Date fields\n- \\`enum [val1, val2]\\` - Enumeration\n- \\`list\\` / \\`object\\` - Complex types\n\n### Page Definition\n\n\\`\\`\\`\n[PageName] at /[path]:\n - shows [Entity] using [TraitName]\n - view type: [list|detail|create|edit|dashboard]\n - is initial page\n\\`\\`\\`\n\n### Behavior Definition\n\n\\`\\`\\`\n[BehaviorName] behavior:\n States: [State1], [State2], [State3]\n Initial: [State1]\n\n Transitions:\n - From [State1] to [State2] on [EVENT_NAME]\n if [guard condition]\n then [effect1]\n then [effect2]\n\\`\\`\\`\n\n### Section Headers\n\nDomain Language text is organized into sections:\n\n\\`\\`\\`\n# Entities\n[entity definitions]\n\n# Pages\n[page definitions]\n\n# Behaviors\n[behavior/trait definitions]\n\\`\\`\\`\n`;\n","/**\n * Domain Language Examples\n *\n * Complete examples of Domain Language for common patterns.\n *\n * @packageDocumentation\n */\n\nexport const ODL_EXAMPLES = `\n## Complete Example\n\n### Entity\n\n\\`\\`\\`\nA Task is a persistent entity that:\n - has title as text (required)\n - has description as long text\n - has status as enum [todo, in_progress, done] with default \"todo\"\n - has dueDate as date\n - belongs to User as assignee\n - belongs to Project\n\\`\\`\\`\n\n### Page\n\n\\`\\`\\`\nTasksPage at /tasks:\n - shows Task using TaskManagement\n - view type: list\n - is initial page\n\\`\\`\\`\n\n### Behavior\n\n\\`\\`\\`\nTaskManagement behavior:\n States: Viewing, Editing, Creating\n Initial: Viewing\n\n Transitions:\n - From Viewing to Viewing on INIT\n then render page-header to main with title 'Tasks'\n then render entity-table to center for Task\n\n - From Viewing to Editing on EDIT_TASK\n then render form-section to modal for Task\n\n - From Editing to Viewing on SAVE_TASK\n then persist update Task\n then render null to modal\n then emit TASK_UPDATED\n\\`\\`\\`\n\n## Multi-Entity Example\n\n\\`\\`\\`\n# Entities\n\nA User is a persistent entity that:\n - has name as text (required)\n - has email as text (required)\n - has role as enum [admin, user, guest] with default \"user\"\n\nA Project is a persistent entity that:\n - has name as text (required)\n - has description as long text\n - has status as enum [active, archived] with default \"active\"\n - belongs to User as owner\n\nA Task is a persistent entity that:\n - has title as text (required)\n - has status as enum [todo, in_progress, done] with default \"todo\"\n - has priority as number with default 0\n - belongs to Project\n - belongs to User as assignee\n\n# Pages\n\nProjectsPage at /projects:\n - shows Project using ProjectManagement\n - view type: list\n - is initial page\n\nTasksPage at /projects/:projectId/tasks:\n - shows Task using TaskManagement\n - view type: list\n\n# Behaviors\n\nProjectManagement behavior:\n States: List, Detail\n Initial: List\n\n Transitions:\n - From List to List on INIT\n then render entity-table to main for Project\n\n - From List to Detail on VIEW_PROJECT\n then render entity-detail to drawer for Project\n\nTaskManagement behavior:\n States: Viewing, Editing\n Initial: Viewing\n\n Transitions:\n - From Viewing to Viewing on INIT\n then [\"render-ui\", \"main\", {\"type\": \"entity-table\", \"entity\": \"Task\", \"itemActions\": [{\"label\": \"Edit\", \"event\": \"EDIT_TASK\"}, {\"label\": \"Delete\", \"event\": \"DELETE_TASK\", \"variant\": \"danger\"}]}]\n\n - From Viewing to Editing on EDIT_TASK\n then render form-section to modal for Task\n\n - From Editing to Viewing on SAVE_TASK\n then persist update Task\n then render null to modal\n\\`\\`\\`\n\n## Dashboard Example (Complex Patterns)\n\n\\`\\`\\`\nDashboard behavior:\n States: Viewing\n Initial: Viewing\n\n Transitions:\n - From Viewing to Viewing on INIT\n then render page-header to main with title 'Dashboard'\n then [\"render-ui\", \"center\", {\"type\": \"stats\", \"metrics\": [{\"field\": \"totalTasks\", \"label\": \"Total Tasks\"}, {\"field\": \"completedTasks\", \"label\": \"Completed\"}, {\"field\": \"overdueTasks\", \"label\": \"Overdue\"}]}]\n then [\"render-ui\", \"bottom\", {\"type\": \"tabs\", \"tabs\": [{\"id\": \"overview\", \"label\": \"Overview\", \"event\": \"VIEW_OVERVIEW\"}, {\"id\": \"recent\", \"label\": \"Recent Activity\", \"event\": \"VIEW_RECENT\"}]}]\n\\`\\`\\`\n\n**Note**: Use inline JSON for \\`render-ui\\` effects with complex props (metrics, tabs, itemActions, cells).\n`;\n","/**\n * Domain Language Common Patterns\n *\n * Reusable patterns for common application types.\n *\n * @packageDocumentation\n */\n\nexport const ODL_PATTERNS = `\n## Common Patterns\n\n### CRUD Pattern\n\n\\`\\`\\`\n[Entity]Management behavior:\n States: List, Detail, Create, Edit\n Initial: List\n\n Transitions:\n - From List to List on INIT\n then render entity-table to main for [Entity]\n\n - From List to Create on CREATE_[ENTITY]\n then render form-section to modal for [Entity]\n\n - From Create to List on SUBMIT_CREATE\n then persist create [Entity]\n then render null to modal\n\n - From List to Detail on VIEW_[ENTITY]\n then render entity-detail to drawer for [Entity]\n\n - From Detail to Edit on EDIT_[ENTITY]\n then render form-section to modal for [Entity]\n\n - From Edit to Detail on SUBMIT_EDIT\n then persist update [Entity]\n then render null to modal\n\n - From Detail to List on DELETE_[ENTITY]\n then persist delete [Entity]\n then render null to drawer\n\\`\\`\\`\n\n### Game Health Pattern\n\n\\`\\`\\`\nHealth behavior:\n States: Healthy, Wounded, Critical, Dead\n Initial: Healthy\n\n Transitions:\n - From Healthy to Wounded on TAKE_DAMAGE\n if health >= 30 and health < 70\n then update status to 'wounded'\n\n - From Wounded to Critical on TAKE_DAMAGE\n if health < 30\n then update status to 'critical'\n\n - From Critical to Dead on TAKE_DAMAGE\n if health <= 0\n then update isAlive to false\n then emit ENTITY_DIED\n\\`\\`\\`\n\n### Approval Workflow Pattern\n\n\\`\\`\\`\nApprovalWorkflow behavior:\n States: Draft, Pending, Approved, Rejected\n Initial: Draft\n\n Transitions:\n - From Draft to Pending on SUBMIT\n then update status to 'pending'\n then emit APPROVAL_REQUESTED\n\n - From Pending to Approved on APPROVE\n then update status to 'approved'\n then update approvedAt to now\n then emit APPROVAL_GRANTED\n\n - From Pending to Rejected on REJECT\n then update status to 'rejected'\n then emit APPROVAL_DENIED\n\n - From Rejected to Draft on REVISE\n then update status to 'draft'\n\\`\\`\\`\n\n### Form Validation Pattern\n\n\\`\\`\\`\nFormValidation behavior:\n States: Idle, Validating, Valid, Invalid\n Initial: Idle\n\n Transitions:\n - From Idle to Validating on VALIDATE\n then update isValidating to true\n\n - From Validating to Valid on VALIDATION_SUCCESS\n then update isValidating to false\n then update errors to null\n\n - From Validating to Invalid on VALIDATION_FAILED\n then update isValidating to false\n\n - From Invalid to Validating on VALIDATE\n then update isValidating to true\n\n - From Valid to Idle on RESET\n then update errors to null\n\\`\\`\\`\n\n### Dashboard Pattern\n\n\\`\\`\\`\nDashboardView behavior:\n States: Loading, Ready\n Initial: Loading\n\n Transitions:\n - From Loading to Ready on DATA_LOADED\n then render stats to main\n then render entity-cards to center\n\n - From Ready to Loading on REFRESH\n then emit FETCH_DASHBOARD_DATA\n\\`\\`\\`\n`;\n","/**\n * Domain Language to OrbitalSchema Mapping\n *\n * Reference for how Domain Language maps to OrbitalSchema JSON.\n *\n * @packageDocumentation\n */\n\nexport const ODL_TO_SCHEMA_MAPPING = `\n## Domain Language -> OrbitalSchema Mapping\n\n| Domain Language | OrbitalSchema |\n|-----------------|---------------|\n| \"A Task is...\" | \\`{ \"entity\": { \"name\": \"Task\", ... } }\\` |\n| \"persistent entity\" | \\`\"persistence\": \"persistent\"\\` |\n| \"runtime entity\" | \\`\"persistence\": \"runtime\"\\` |\n| \"singleton entity\" | \\`\"persistence\": \"singleton\"\\` |\n| \"has X as text\" | \\`{ \"name\": \"X\", \"type\": \"string\" }\\` |\n| \"has X as number\" | \\`{ \"name\": \"X\", \"type\": \"number\" }\\` |\n| \"has X as yes/no\" | \\`{ \"name\": \"X\", \"type\": \"boolean\" }\\` |\n| \"has X as enum [a, b]\" | \\`{ \"name\": \"X\", \"type\": \"enum\", \"values\": [\"a\", \"b\"] }\\` |\n| \"belongs to Y\" | \\`{ \"type\": \"relation\", \"relation\": { \"entity\": \"Y\" } }\\` |\n| \"belongs to Y as alias\" | \\`{ \"name\": \"alias\", \"type\": \"relation\", \"relation\": { \"entity\": \"Y\" } }\\` |\n| \"States: A, B\" | \\`\"states\": [{ \"name\": \"A\" }, { \"name\": \"B\" }]\\` |\n| \"Initial: A\" | \\`{ \"name\": \"A\", \"isInitial\": true }\\` |\n| \"From X to Y on Z\" | \\`{ \"from\": \"X\", \"to\": \"Y\", \"event\": \"Z\" }\\` |\n| \"if health >= 0\" | \\`\"guard\": [\">=\", \"@entity.health\", 0]\\` |\n| \"then update status to 'done'\" | \\`\"effects\": [[\"set\", \"@entity.status\", \"done\"]]\\` |\n| \"then emit EVENT\" | \\`\"effects\": [[\"emit\", \"EVENT\"]]\\` |\n| \"then render X to slot\" | \\`\"effects\": [[\"render-ui\", \"slot\", { \"type\": \"X\" }]]\\` |\n| \"then persist create Task\" | \\`\"effects\": [[\"persist\", \"create\", \"Task\"]]\\` |\n| \"then navigate to /path\" | \\`\"effects\": [[\"navigate\", \"/path\"]]\\` |\n\n## Conversion Process\n\n1. **Parse Domain Language** - Split into sections (Entities, Pages, Behaviors)\n2. **Extract entities** - Parse \"A X is...\" definitions\n3. **Extract pages** - Parse \"[Name] at /path\" definitions\n4. **Extract behaviors** - Parse \"[Name] behavior:\" definitions\n5. **Parse guards** - Convert human-readable conditions to S-expressions\n6. **Parse effects** - Convert human-readable effects to S-expressions\n7. **Assemble schema** - Build OrbitalSchema JSON structure\n\n## CLI Commands\n\n\\`\\`\\`bash\n# Convert Domain Language to OrbitalSchema\nnpx kflow domain:to-schema input.txt -o output.orb\n\n# Convert OrbitalSchema to Domain Language\nnpx kflow domain:to-text input.orb -o output.txt\n\n# Validate round-trip conversion\nnpx kflow domain:validate input.orb --verbose\n\\`\\`\\`\n`;\n","/**\n * Finish Task Tool\n *\n * Signals the agent has completed the workflow. Automatically combines\n * orbitals and validates the result.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport * as path from 'path';\nimport * as fs from 'fs/promises';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\nimport type { FullOrbitalUnit } from '@almadar/core/types';\nimport { combineOrbitals } from '../orbitals/combiner/index.js';\nimport { convertDomainToSchema } from '../orbitals/domain-language/index.js';\n\nconst execAsync = promisify(exec);\n\n// ============================================================================\n// Design Quality Checks\n// ============================================================================\n\n/** Prop corrections: wrong name → correct name */\nconst PROP_CORRECTIONS: Record<string, string> = {\n onSubmit: 'submitEvent',\n onCancel: 'cancelEvent',\n headerActions: 'actions',\n loading: 'isLoading',\n fieldNames: 'fields',\n};\n\n/**\n * Auto-correct known prop misnaming in render-ui effects.\n * Returns the number of corrections made.\n */\nfunction autoCorrectProps(schema: Record<string, unknown>): number {\n let corrections = 0;\n const schemaStr = JSON.stringify(schema);\n\n // Walk through all render-ui effects and fix prop names\n function walkAndFix(obj: unknown): unknown {\n if (Array.isArray(obj)) {\n return obj.map(walkAndFix);\n }\n if (obj && typeof obj === 'object') {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {\n if (key in PROP_CORRECTIONS) {\n result[PROP_CORRECTIONS[key]] = walkAndFix(value);\n corrections++;\n } else {\n result[key] = walkAndFix(value);\n }\n }\n return result;\n }\n return obj;\n }\n\n const fixed = walkAndFix(schema);\n Object.assign(schema, fixed);\n return corrections;\n}\n\n/**\n * Check INIT transitions for atomic composition quality.\n * Returns warnings for flat/low-quality INIT transitions.\n */\nfunction checkCompositionQuality(schema: Record<string, unknown>): string[] {\n const warnings: string[] = [];\n const orbitals = (schema as { orbitals?: unknown[] }).orbitals;\n if (!Array.isArray(orbitals)) return warnings;\n\n for (const orbital of orbitals) {\n const orbObj = orbital as { name?: string; traits?: unknown[] };\n const traits = orbObj.traits;\n if (!Array.isArray(traits)) continue;\n\n for (const trait of traits) {\n const traitObj = trait as { name?: string; stateMachine?: { transitions?: unknown[] } };\n const transitions = traitObj.stateMachine?.transitions;\n if (!Array.isArray(transitions)) continue;\n\n for (const transition of transitions) {\n const trans = transition as { event?: string; effects?: unknown[] };\n if (trans.event !== 'INIT') continue;\n\n const effects = trans.effects;\n if (!Array.isArray(effects)) continue;\n\n // Count render-ui effects targeting 'main'\n const mainRenderUIs = effects.filter(\n (e) => Array.isArray(e) && e[0] === 'render-ui' && e[1] === 'main',\n );\n\n if (mainRenderUIs.length > 1) {\n warnings.push(\n `⚠️ ${orbObj.name}/${traitObj.name} INIT has ${mainRenderUIs.length} flat render-ui calls to main. Should be a single composed stack with children.`,\n );\n }\n\n if (mainRenderUIs.length === 1) {\n const renderPayload = mainRenderUIs[0] as unknown[];\n const payload = renderPayload[2] as Record<string, unknown> | undefined;\n if (payload && payload.type !== 'stack' && !payload.children) {\n warnings.push(\n `⚠️ ${orbObj.name}/${traitObj.name} INIT renders a single flat ${payload.type} to main. Should be a composed stack with header, metrics, and data sections.`,\n );\n }\n }\n }\n }\n }\n\n return warnings;\n}\n\n/**\n * Auto-collect orbitals from the .orbitals/ directory in the workspace.\n */\nasync function collectOrbitalsFromDir(workDir: string): Promise<FullOrbitalUnit[]> {\n const orbitalsDir = path.join(workDir, '.orbitals');\n\n try {\n const dirStat = await fs.stat(orbitalsDir);\n if (!dirStat.isDirectory()) {\n return [];\n }\n } catch {\n return [];\n }\n\n const files = await fs.readdir(orbitalsDir);\n const jsonFiles = files.filter((f) => f.endsWith('.json'));\n\n if (jsonFiles.length === 0) {\n return [];\n }\n\n const orbitals: FullOrbitalUnit[] = [];\n for (const file of jsonFiles) {\n try {\n const content = await fs.readFile(path.join(orbitalsDir, file), 'utf-8');\n orbitals.push(JSON.parse(content));\n } catch {\n // Skip invalid files\n }\n }\n\n return orbitals;\n}\n\n/**\n * Validate schema using orbital CLI.\n */\nasync function validateSchemaWithCLI(schemaPath: string): Promise<{\n valid: boolean;\n errors: Array<{ code: string; path: string; message: string; suggestion?: string }>;\n warnings: Array<{ code: string; path: string; message: string }>;\n stats?: { orbitals: number; entities: number; traits: number; pages: number };\n}> {\n try {\n const { stdout } = await execAsync(\n `orbital validate \"${schemaPath}\" --json`,\n { timeout: 30000 },\n );\n const result = JSON.parse(stdout);\n return {\n valid: result.valid,\n errors: result.errors || [],\n warnings: result.warnings || [],\n stats: result.stats,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return {\n valid: false,\n errors: [{ code: 'CLI_ERROR', path: '', message: `Validation CLI error: ${errorMessage}` }],\n warnings: [],\n };\n }\n}\n\n/**\n * Create a finish_task tool that signals the agent has completed the workflow.\n *\n * Automatically combines orbitals from:\n * 1. .orbitals/ directory (for kflow-orbitals skill)\n * 2. domain.txt (for lean skills) - converted to schema via convertDomainToSchema\n */\nexport function createFinishTaskTool(workDir: string | undefined) {\n return tool(\n async (input) => {\n let combinedSchema = null;\n let stats = null;\n let validationResult: {\n valid: boolean;\n errors: Array<{ code: string; path: string; message: string }>;\n warnings: Array<{ code: string; path: string; message: string }>;\n } | null = null;\n let source: 'orbitals' | 'domain' | null = null;\n let propCorrections = 0;\n let compositionWarnings: string[] = [];\n\n if (workDir) {\n // Strategy 1: Try .orbitals/ directory\n const orbitals = await collectOrbitalsFromDir(workDir);\n\n if (orbitals.length > 0) {\n source = 'orbitals';\n const appName =\n input.summary?.match(/Generated \\d+ orbitals?:?\\s*(.+)/)?.[1] ||\n orbitals[0]?.name ||\n 'Application';\n\n const result = combineOrbitals(orbitals, {\n name: appName,\n validate: false,\n });\n\n if (result.success && result.schema) {\n combinedSchema = result.schema;\n stats = result.stats;\n }\n } else {\n // Strategy 2: Try domain.txt\n const domainPath = path.join(workDir, 'domain.txt');\n try {\n const domainText = await fs.readFile(domainPath, 'utf-8');\n if (domainText.trim()) {\n source = 'domain';\n const appName =\n input.summary?.match(/Generated \\d+ orbitals?:?\\s*(.+)/)?.[1] ||\n 'Application';\n\n const domainResult = convertDomainToSchema(domainText, {\n name: appName,\n orbitals: [],\n });\n\n if (domainResult.success && domainResult.schema) {\n combinedSchema = domainResult.schema;\n const traitCount = (domainResult.schema.orbitals || []).reduce(\n (count, o) => count + ('traits' in o ? (o as { traits?: unknown[] }).traits?.length || 0 : 0),\n 0,\n );\n stats = {\n totalOrbitals: domainResult.schema.orbitals?.length || 0,\n totalEntities: domainResult.schema.orbitals?.length || 0,\n totalTraits: traitCount,\n totalPages:\n domainResult.schema.orbitals?.reduce(\n (sum, o) => sum + ('pages' in o ? (o as { pages?: unknown[] }).pages?.length || 0 : 0),\n 0,\n ) || 0,\n };\n }\n }\n } catch {\n // No domain.txt found\n }\n }\n\n // Auto-correct props and check composition quality\n if (combinedSchema) {\n propCorrections = autoCorrectProps(combinedSchema as unknown as Record<string, unknown>);\n compositionWarnings = checkCompositionQuality(combinedSchema as unknown as Record<string, unknown>);\n }\n\n // Write combined schema if we got one\n if (combinedSchema) {\n const schemaPath = path.join(workDir, 'schema.json');\n await fs.writeFile(schemaPath, JSON.stringify(combinedSchema, null, 2));\n validationResult = await validateSchemaWithCLI(schemaPath);\n }\n }\n\n return {\n success: true,\n status: 'TASK_COMPLETE',\n message: '✅ Task completed successfully. STOP HERE - do not make any more tool calls.',\n summary: input.summary,\n autoCombined: combinedSchema ? true : false,\n source: source || undefined,\n stats: stats || undefined,\n validation: validationResult\n ? {\n valid: validationResult.valid,\n errorCount: validationResult.errors?.length || 0,\n warningCount: validationResult.warnings?.length || 0,\n }\n : undefined,\n designQuality: {\n propCorrections: propCorrections || 0,\n compositionWarnings: compositionWarnings || [],\n },\n schemaPath: combinedSchema\n ? path.join(workDir!, 'schema.json')\n : input.schemaPath,\n nextAction: 'NONE - Task is complete. Output a brief success message to the user.',\n };\n },\n {\n name: 'finish_task',\n description: `Signal that the orbital generation workflow is COMPLETE.\n\n⚠️ IMPORTANT: After calling this tool, STOP. Do not make any more tool calls.\n\nWHAT IT DOES:\n1. Automatically collects orbitals from .orbitals/ directory\n2. Combines them into a single OrbitalSchema\n3. Validates the combined schema\n4. Writes schema.json to workspace\n5. Returns success with stats`,\n schema: z.object({\n summary: z.string().describe('Brief summary of what was accomplished'),\n schemaPath: z.string().optional().describe('Path to the combined schema file if already written'),\n }),\n },\n );\n}\n","/**\n * Domain Orbital Tool\n *\n * Generates domain language orbitals incrementally using LLM.\n * Uses @almadar/llm for LLM access and @almadar/skills for prompt sections.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport crypto from 'crypto';\nimport { LLMClient } from '@almadar/llm';\nimport {\n getSExprQuickRef,\n getKeyBehaviorsReference,\n getCommonErrorsSection,\n getArchitectureSection,\n} from '@almadar/skills';\nimport type { SSEEventType } from '../api-types.js';\nimport { AgentDomainCategorySchema } from '@almadar/core/types';\nimport type { AgentDomainCategory } from '@almadar/core/types';\nimport { convertDomainToSchema } from '../orbitals/domain-language/index.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type DomainOrbitalEventCallback = (\n orbitalName: string,\n orbitalIndex: number,\n totalOrbitals: number,\n event: {\n type: Exclude<SSEEventType, 'subagent_event'>;\n data: Record<string, unknown>;\n timestamp: number;\n }\n) => void;\n\nexport type DomainOrbitalCompleteCallback = (\n domainText: string,\n orbitalName: string,\n orbitalIndex: number,\n totalOrbitals: number\n) => void | Promise<void>;\n\nexport interface DomainOrbitalToolOptions {\n onEvent?: DomainOrbitalEventCallback;\n onOrbitalComplete?: DomainOrbitalCompleteCallback;\n workDir?: string;\n}\n\nexport interface DomainOrbitalSpec {\n name: string;\n entity: {\n name: string;\n persistence: 'persistent' | 'runtime' | 'singleton';\n fields: Array<{\n name: string;\n type: string;\n required?: boolean;\n default?: unknown;\n }>;\n relations?: Array<{\n entity: string;\n alias?: string;\n type: 'belongs_to' | 'has_many';\n }>;\n };\n pages: Array<{\n name: string;\n path: string;\n viewType: string;\n isInitial?: boolean;\n }>;\n traits: string[];\n patterns: string[];\n domainContext?: {\n request: string;\n requestFragment?: string;\n category: AgentDomainCategory;\n vocabulary?: Record<string, string>;\n };\n design?: {\n style?: 'minimal' | 'modern' | 'playful' | 'data-driven' | 'immersive';\n uxHints?: {\n flowPattern?: 'hub-spoke' | 'master-detail' | 'crud-cycle' | 'linear' | 'role-based';\n listPattern?: 'entity-table' | 'entity-cards' | 'entity-list';\n formPattern?: 'modal' | 'drawer' | 'page';\n detailPattern?: 'drawer' | 'page' | 'split';\n };\n };\n emits?: string[];\n listens?: Array<{\n event: string;\n triggers: string;\n }>;\n}\n\n// ============================================================================\n// Cache\n// ============================================================================\n\ninterface CacheEntry {\n domainText: string;\n timestamp: number;\n usage: { inputTokens: number; outputTokens: number; totalTokens: number };\n}\n\nconst domainOrbitalCache = new Map<string, CacheEntry>();\nconst CACHE_TTL_MS = 24 * 60 * 60 * 1000;\nconst CACHE_VERSION = 5;\n\nfunction generateFingerprint(spec: DomainOrbitalSpec): string {\n const normalized = JSON.stringify({\n version: CACHE_VERSION,\n entity: spec.entity,\n pages: spec.pages,\n traits: spec.traits.sort(),\n patterns: spec.patterns.sort(),\n emits: spec.emits?.sort() || [],\n listens: spec.listens?.map(l => `${l.event}:${l.triggers}`).sort() || [],\n });\n return crypto.createHash('sha256').update(normalized).digest('hex').slice(0, 16);\n}\n\nfunction getCached(fingerprint: string): CacheEntry | null {\n const entry = domainOrbitalCache.get(fingerprint);\n if (!entry) return null;\n if (Date.now() - entry.timestamp > CACHE_TTL_MS) {\n domainOrbitalCache.delete(fingerprint);\n return null;\n }\n return entry;\n}\n\nfunction setCache(fingerprint: string, entry: CacheEntry): void {\n domainOrbitalCache.set(fingerprint, entry);\n}\n\n// ============================================================================\n// File-based domain accumulation\n// ============================================================================\n\nfunction appendToDomainFile(workDir: string, domainText: string, _orbitalName: string): void {\n const domainPath = path.join(workDir, 'domain.txt');\n const separator = `\\n\\n---\\n`;\n let existingContent = '';\n if (fs.existsSync(domainPath)) {\n existingContent = fs.readFileSync(domainPath, 'utf-8');\n }\n const newContent = existingContent + separator + domainText;\n fs.writeFileSync(domainPath, newContent, 'utf-8');\n}\n\nfunction readDomainFile(workDir: string): string | null {\n const domainPath = path.join(workDir, 'domain.txt');\n if (!fs.existsSync(domainPath)) {\n return null;\n }\n return fs.readFileSync(domainPath, 'utf-8');\n}\n\n// ============================================================================\n// LLM Generation Prompt (uses @almadar/skills)\n// ============================================================================\n\nfunction buildStaticSystemPrompt(): string {\n const behaviorsRef = getKeyBehaviorsReference();\n const sExprRef = getSExprQuickRef();\n const errorsRef = getCommonErrorsSection();\n const architectureRef = getArchitectureSection();\n\n return `You are a domain language expert. Generate clean, complete domain language for OrbitalSchema applications.\n\n${behaviorsRef}\n\n---\n\n${sExprRef}\n\n---\n\n${architectureRef}\n\n---\n\n${errorsRef}\n\n---\n\n## Output Requirements\n\nGenerate ONLY the domain language text with these EXACT formats:\n\n### Entity Format (CRITICAL)\n\\`\\`\\`\n# Entities\n\nA [EntityName] is a [persistent|runtime|singleton] entity that:\n - has [fieldName] as [type] (required)\n - has [fieldName] as [type] with default [value]\n - belongs to [RelatedEntity]\n - has many [RelatedEntity]s\n\\`\\`\\`\n\n### Page Format (CRITICAL)\n\\`\\`\\`\n# Pages\n\n[PageName] at /[path]:\n - shows [Entity] using [TraitName]\n - view type: list\n - is initial page\n\\`\\`\\`\n\n### Behavior Format (CRITICAL)\n\\`\\`\\`\n# Behaviors\n\n[TraitName] behavior:\n Entity: [EntityName]\n States: [State1], [State2], ...\n Initial: [State1]\n\n Transitions:\n - From [State1] to [State2] on [EVENT]\n then [S-Expression effect]\n\\`\\`\\`\n\n**CRITICAL RULES:**\n1. Entities MUST start with \"A\" or \"An\"\n2. Behaviors MUST have \"Entity: [EntityName]\" line after the behavior name\n3. Pages MUST use \"shows [Entity] using [TraitName]\" format\n\nGenerate ONLY the domain language text, no explanations or markdown code blocks.`;\n}\n\nfunction buildDynamicUserPrompt(spec: DomainOrbitalSpec): string {\n const entityFields = spec.entity.fields\n .map(f => {\n let fieldDef = ` - ${f.name}: ${f.type}`;\n if (f.required) fieldDef += ', required';\n if (f.default !== undefined) fieldDef += `, default ${JSON.stringify(f.default)}`;\n return fieldDef;\n })\n .join('\\n');\n\n const relations = spec.entity.relations\n ?.map(r => {\n if (r.type === 'belongs_to') {\n return r.alias\n ? ` - belongs to ${r.entity} as ${r.alias}`\n : ` - belongs to ${r.entity}`;\n }\n return ` - has many ${r.entity}s`;\n })\n .join('\\n') || '';\n\n const pagesInfo = spec.pages\n .map(p => `- ${p.name} at ${p.path} (${p.viewType}${p.isInitial ? ', initial' : ''})`)\n .join('\\n');\n\n const emitsInfo = spec.emits?.length\n ? `**Emits Events**: ${spec.emits.join(', ')}`\n : '';\n const listensInfo = spec.listens?.length\n ? `**Listens**: ${spec.listens.map(l => `${l.event} → ${l.triggers}`).join(', ')}`\n : '';\n\n return `Generate domain language for the following orbital.\n\n## Orbital Specification\n\n**Entity**: ${spec.entity.name} (${spec.entity.persistence})\n**Fields**:\n${entityFields}\n${relations ? `**Relations**:\\n${relations}` : ''}\n\n**Pages**:\n${pagesInfo}\n\n**Behaviors**: ${spec.traits.join(', ')}\n**UI Patterns**: ${spec.patterns.join(', ')}\n${emitsInfo}\n${listensInfo}\n\nReplace [Entity] placeholders with \"${spec.entity.name}\" in all patterns.`;\n}\n\n// ============================================================================\n// Zod Schema\n// ============================================================================\n\nconst GenerateOrbitalDomainSchema = z.object({\n sessionId: z.string().describe('Unique session ID for this generation batch'),\n orbital: z.object({\n name: z.string(),\n entity: z.object({\n name: z.string(),\n persistence: z.enum(['persistent', 'runtime', 'singleton']),\n fields: z.array(z.object({\n name: z.string(),\n type: z.string(),\n required: z.boolean().optional(),\n default: z.any().optional(),\n })),\n relations: z.array(z.object({\n entity: z.string(),\n alias: z.string().optional(),\n type: z.enum(['belongs_to', 'has_many']),\n })).optional(),\n }),\n pages: z.array(z.object({\n name: z.string(),\n path: z.string(),\n viewType: z.string(),\n isInitial: z.boolean().optional(),\n })),\n traits: z.array(z.string()),\n patterns: z.array(z.string()),\n domainContext: z.object({\n request: z.string(),\n requestFragment: z.string().optional(),\n category: AgentDomainCategorySchema,\n vocabulary: z.record(z.string(), z.string()).optional(),\n }).optional(),\n design: z.object({\n style: z.enum(['minimal', 'modern', 'playful', 'data-driven', 'immersive']).optional(),\n uxHints: z.object({\n flowPattern: z.enum(['hub-spoke', 'master-detail', 'crud-cycle', 'linear', 'role-based']).optional(),\n listPattern: z.enum(['entity-table', 'entity-cards', 'entity-list']).optional(),\n formPattern: z.enum(['modal', 'drawer', 'page']).optional(),\n detailPattern: z.enum(['drawer', 'page', 'split']).optional(),\n }).optional(),\n }).optional(),\n emits: z.array(z.string()).optional(),\n listens: z.array(z.object({\n event: z.string(),\n triggers: z.string(),\n })).optional(),\n }).describe('The orbital specification'),\n orbitalIndex: z.number().describe('Index in the batch (0-based)'),\n totalOrbitals: z.number().describe('Total orbitals in the batch'),\n});\n\nconst ConstructCombinedDomainSchema = z.object({\n appName: z.string().describe('Name of the application'),\n});\n\n// ============================================================================\n// Tool Factories\n// ============================================================================\n\n/**\n * Create the generate_orbital_domain tool.\n * Uses @almadar/llm LLMClient directly for Anthropic calls.\n */\nexport function createGenerateOrbitalDomainTool(\n \n options: DomainOrbitalToolOptions = {},\n) {\n let eventCallback: DomainOrbitalEventCallback | undefined = options.onEvent;\n let completeCallback: DomainOrbitalCompleteCallback | undefined = options.onOrbitalComplete;\n const workDir = options.workDir || process.cwd();\n\n const STATIC_SYSTEM_PROMPT = buildStaticSystemPrompt();\n\n const setEventCallback = (callback: DomainOrbitalEventCallback) => {\n eventCallback = callback;\n };\n\n const setCompleteCallback = (callback: DomainOrbitalCompleteCallback) => {\n completeCallback = callback;\n };\n\n const emitEvent = (\n orbitalName: string,\n orbitalIndex: number,\n totalOrbitals: number,\n type: Exclude<SSEEventType, 'subagent_event'>,\n data: Record<string, unknown>\n ) => {\n if (eventCallback) {\n eventCallback(orbitalName, orbitalIndex, totalOrbitals, {\n type,\n data,\n timestamp: Date.now(),\n });\n }\n };\n\n const generateOrbitalDomainTool = tool(\n async ({ sessionId, orbital, orbitalIndex, totalOrbitals }) => {\n const spec = orbital as DomainOrbitalSpec;\n const fingerprint = generateFingerprint(spec);\n\n try {\n emitEvent(spec.name, orbitalIndex, totalOrbitals, 'message', {\n content: `Generating domain orbital: ${spec.name} (${orbitalIndex + 1}/${totalOrbitals})`,\n role: 'assistant',\n isComplete: false,\n });\n\n // Check cache\n const cached = getCached(fingerprint);\n if (cached) {\n emitEvent(spec.name, orbitalIndex, totalOrbitals, 'generation_log', {\n level: 'info',\n message: `Cache HIT for ${spec.name}`,\n data: { fingerprint, cachedAt: new Date(cached.timestamp).toISOString() },\n orbitalName: spec.name,\n });\n\n appendToDomainFile(workDir, cached.domainText, spec.name);\n\n if (completeCallback) {\n await completeCallback(cached.domainText, spec.name, orbitalIndex, totalOrbitals);\n }\n\n return JSON.stringify({\n success: true,\n orbitalName: spec.name,\n fingerprint,\n cached: true,\n domainWritten: true,\n usage: cached.usage,\n });\n }\n\n emitEvent(spec.name, orbitalIndex, totalOrbitals, 'generation_log', {\n level: 'info',\n message: `Cache MISS for ${spec.name}, generating with LLM`,\n data: { fingerprint },\n orbitalName: spec.name,\n });\n\n // Use @almadar/llm directly\n const client = new LLMClient({\n provider: 'anthropic',\n model: 'claude-sonnet-4-20250514',\n temperature: 0,\n });\n\n const userPrompt = buildDynamicUserPrompt(spec);\n\n emitEvent(spec.name, orbitalIndex, totalOrbitals, 'tool_call', {\n tool: 'llm_generate_domain',\n args: {\n orbital: spec.name,\n entity: spec.entity.name,\n traits: spec.traits,\n },\n });\n\n const response = await client.callWithCache<string>({\n systemPrompt: '',\n systemBlocks: [{\n type: 'text',\n text: STATIC_SYSTEM_PROMPT,\n cache_control: { type: 'ephemeral' },\n }],\n userPrompt,\n maxTokens: 8192,\n rawText: true,\n });\n\n const domainText = (response.raw || String(response.data) || '').trim();\n\n const usage = {\n inputTokens: response.usage?.promptTokens || 0,\n outputTokens: response.usage?.completionTokens || 0,\n totalTokens: response.usage?.totalTokens || 0,\n };\n\n setCache(fingerprint, {\n domainText,\n timestamp: Date.now(),\n usage,\n });\n\n emitEvent(spec.name, orbitalIndex, totalOrbitals, 'tool_result', {\n tool: 'llm_generate_domain',\n result: { fingerprint, textLength: domainText.length, usage },\n success: true,\n });\n\n appendToDomainFile(workDir, domainText, spec.name);\n\n emitEvent(spec.name, orbitalIndex, totalOrbitals, 'message', {\n content: `Generated domain for ${spec.name} (${usage.totalTokens} tokens) - written to domain.txt`,\n role: 'assistant',\n isComplete: true,\n });\n\n if (completeCallback) {\n try {\n await completeCallback(domainText, spec.name, orbitalIndex, totalOrbitals);\n } catch (error) {\n console.error(`[DomainOrbitalTool] Callback error for ${spec.name}:`, error);\n }\n }\n\n return JSON.stringify({\n success: true,\n orbitalName: spec.name,\n fingerprint,\n cached: false,\n domainWritten: true,\n usage,\n domainText,\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n emitEvent(spec.name, orbitalIndex, totalOrbitals, 'error', {\n error: errorMessage,\n code: 'DOMAIN_ORBITAL_ERROR',\n });\n\n return JSON.stringify({\n success: false,\n error: errorMessage,\n orbitalName: spec.name,\n });\n }\n },\n {\n name: 'generate_orbital_domain',\n description: `Generate domain language for a single orbital using LLM.\n\nTakes a lightweight orbital specification and generates complete domain language text.\nResults are cached by fingerprint to avoid regenerating identical orbitals.\n\nUSAGE:\n1. Decompose app into orbital specs\n2. For each orbital, call generate_orbital_domain\n3. After all orbitals, call construct_combined_domain`,\n schema: GenerateOrbitalDomainSchema,\n }\n );\n\n return {\n tool: generateOrbitalDomainTool,\n setEventCallback,\n setCompleteCallback,\n };\n}\n\n/**\n * Create the construct_combined_domain tool.\n */\nexport function createConstructCombinedDomainTool(\n \n options: { onEvent?: DomainOrbitalEventCallback; workDir?: string } = {},\n) {\n let eventCallback = options.onEvent;\n const workDir = options.workDir || process.cwd();\n\n const setEventCallback = (callback: DomainOrbitalEventCallback) => {\n eventCallback = callback;\n };\n\n const emitEvent = (\n type: Exclude<SSEEventType, 'subagent_event'>,\n data: Record<string, unknown>\n ) => {\n if (eventCallback) {\n eventCallback('combined', 0, 1, {\n type,\n data,\n timestamp: Date.now(),\n });\n }\n };\n\n const constructCombinedDomainTool = tool(\n async ({ appName }) => {\n try {\n const domainText = readDomainFile(workDir);\n if (!domainText) {\n return JSON.stringify({\n success: false,\n error: 'No domain.txt found. Call generate_orbital_domain first.',\n });\n }\n\n emitEvent('message', {\n content: `Converting domain.txt to OrbitalSchema for ${appName}`,\n role: 'assistant',\n isComplete: false,\n });\n\n const schemaResult = convertDomainToSchema(domainText, {\n name: appName,\n orbitals: [],\n });\n\n if (!schemaResult.success) {\n const errorMessages = schemaResult.errors?.map(e => e.message).join('; ') || 'Unknown conversion error';\n\n emitEvent('error', {\n error: errorMessages,\n code: 'DOMAIN_CONVERSION_ERROR',\n });\n\n return JSON.stringify({\n success: false,\n error: errorMessages,\n domainText,\n });\n }\n\n emitEvent('message', {\n content: `Successfully converted domain.txt to OrbitalSchema for ${appName}`,\n role: 'assistant',\n isComplete: true,\n });\n\n const traitCount = (schemaResult.schema?.orbitals || []).reduce((count, o) => {\n if (typeof o === 'object' && o !== null && 'traits' in o) {\n return count + ((o as { traits?: unknown[] }).traits?.length || 0);\n }\n return count;\n }, 0);\n\n return JSON.stringify({\n success: true,\n appName,\n domainText,\n schema: schemaResult.schema,\n stats: {\n orbitalCount: schemaResult.schema?.orbitals?.length || 0,\n traitCount,\n },\n domainPath: path.join(workDir, 'domain.txt'),\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n emitEvent('error', {\n error: errorMessage,\n code: 'CONSTRUCT_COMBINED_ERROR',\n });\n\n return JSON.stringify({\n success: false,\n error: errorMessage,\n });\n }\n },\n {\n name: 'construct_combined_domain',\n description: `Convert accumulated domain.txt to OrbitalSchema.\n\nCall this after all orbitals have been generated via generate_orbital_domain.`,\n schema: ConstructCombinedDomainSchema,\n }\n );\n\n return {\n tool: constructCombinedDomainTool,\n setEventCallback,\n };\n}\n\n/**\n * Create both domain orbital tools together.\n */\nexport function createDomainOrbitalTools(\n options: DomainOrbitalToolOptions = {},\n) {\n const generateTool = createGenerateOrbitalDomainTool(options);\n const constructTool = createConstructCombinedDomainTool({\n onEvent: options.onEvent,\n workDir: options.workDir,\n });\n\n return {\n generateOrbitalDomain: generateTool.tool,\n constructCombinedDomain: constructTool.tool,\n setEventCallback: (callback: DomainOrbitalEventCallback) => {\n generateTool.setEventCallback(callback);\n constructTool.setEventCallback(callback);\n },\n setCompleteCallback: generateTool.setCompleteCallback,\n };\n}\n","/**\n * Orbital Generator\n *\n * Provides utilities for generating FullOrbitalUnit definitions from\n * lightweight OrbitalUnit inputs. Designed for SUBAGENT use where each\n * orbital is generated separately for better caching.\n *\n * ## Subagent Caching Pattern\n *\n * When generating multiple orbitals in a subagent pattern:\n * 1. Main agent decomposes request → OrbitalUnit[]\n * 2. For each orbital, subagent calls generateFullOrbital()\n * 3. Each subagent call uses the SAME cached system prompt blocks\n * 4. Anthropic caches at request level → subsequent calls get 90% discount\n *\n * This is MORE efficient than batch generation because:\n * - System prompt is cached and reused across subagent calls\n * - Template guidance is cached per fingerprint\n * - Only the orbital-specific content varies\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient, LLMProvider } from '@almadar/llm';\nimport { assembleCacheableOrbitalPrompt, assembleOrbitalPrompt } from '../cache/index.js';\nimport { getOrbitalDecompositionPrompt, getFullOrbitalPrompt, getRequirementsDecomposePrompt, getRequirementsTraitPrompt } from '@almadar/skills';\nimport type { OrbitalDefinition, FullOrbitalUnit, EntityRef } from '@almadar/core/types';\nimport { isEntityReference } from '@almadar/core/types';\n// DEPRECATED: Validation removed - use orbital-rust validator instead\n// import { validateFullOrbitalUnit } from '../../validation/index.js';\n\n/**\n * Get entity name safely from EntityRef\n */\nfunction getEntityName(entity: EntityRef): string {\n if (isEntityReference(entity)) {\n return entity.replace('.entity', '');\n }\n return entity.name;\n}\n\n// ============================================================================\n// Requirements Types (imported structure from analysis)\n// ============================================================================\n\n/**\n * Extracted requirements from the analysis phase.\n * Matches ExtractedRequirements from agents/orchestrator/shared/requirements.ts\n */\nexport interface ExtractedRequirements {\n /** Entity names to create */\n entities: string[];\n /** State names that should exist */\n states: string[];\n /** Event/action names */\n events: string[];\n /** Business rules (become guards) */\n guards: string[];\n /** Page types needed */\n pages: string[];\n /** Notifications/side-effects */\n effects: string[];\n /** Raw requirement statements */\n rawRequirements: string[];\n}\n\n// Type alias - OrbitalUnit in generator context is always a full definition\ntype OrbitalUnit = OrbitalDefinition;\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * A structured log entry from the generation process.\n * Used for debugging and observability of subagent reasoning.\n */\nexport interface GenerationLog {\n /** Timestamp of the log entry */\n timestamp: number;\n /** Log level */\n level: 'info' | 'warn' | 'error' | 'debug';\n /** Log message */\n message: string;\n /** Optional structured data */\n data?: Record<string, unknown>;\n}\n\nexport interface OrbitalGenerationOptions {\n /** Maximum tokens for generation */\n maxTokens?: number;\n /** Enable validation after generation */\n validate?: boolean;\n /** Callback for real-time log streaming (SSE integration) */\n onLog?: (log: GenerationLog, orbitalName?: string) => void;\n /** Optional requirements relevant to this orbital (from analysis) */\n requirements?: Partial<ExtractedRequirements>;\n}\n\nexport interface OrbitalGenerationResult {\n /** Generated full orbital unit */\n orbital: FullOrbitalUnit;\n /** Fingerprint used for caching */\n fingerprint: string;\n /** Whether template guidance was used */\n usedTemplate: boolean;\n /** Token usage */\n usage?: {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n };\n /** Validation result */\n validation?: {\n valid: boolean;\n errorCount: number;\n warningCount: number;\n };\n /** Structured logs from the generation process */\n logs: GenerationLog[];\n}\n\n// ============================================================================\n// Provider Concurrency Limits\n// ============================================================================\n\n/**\n * Default concurrency limits per LLM provider.\n * These are conservative defaults to avoid rate limiting.\n */\nexport const PROVIDER_CONCURRENCY_LIMITS: Record<LLMProvider, number> = {\n anthropic: 3,\n openai: 5,\n deepseek: 3,\n kimi: 3,\n};\n\nexport interface ParallelGenerationOptions extends OrbitalGenerationOptions {\n /** Maximum concurrent generations (default: provider-specific) */\n concurrency?: number;\n}\n\nexport interface ParallelGenerationResult {\n /** Results for each orbital (same order as input) */\n results: OrbitalGenerationResult[];\n /** Total duration in milliseconds */\n totalDurationMs: number;\n /** Aggregate logs from all generations */\n aggregateLogs: GenerationLog[];\n /** Summary statistics */\n summary: {\n total: number;\n successful: number;\n failed: number;\n totalTokens: number;\n };\n}\n\n// ============================================================================\n// Logging Utility\n// ============================================================================\n\nfunction createLog(level: GenerationLog['level'], message: string, data?: Record<string, unknown>): GenerationLog {\n return {\n timestamp: Date.now(),\n level,\n message,\n data,\n };\n}\n\n// ============================================================================\n// Single Orbital Generation (For Subagent Use)\n// ============================================================================\n\n/**\n * Generate a full orbital unit from a lightweight orbital input.\n *\n * DESIGNED FOR SUBAGENT USE: Call this once per orbital in separate\n * subagent invocations. Caching works across calls because:\n * - System prompt blocks are marked as cacheable\n * - Anthropic caches at the request level\n * - Subsequent calls with same system prompt get cache hits\n *\n * @example\n * ```typescript\n * // In subagent for each orbital:\n * const result = await generateFullOrbital(client, orbitalUnit, { validate: true });\n * // First call: Cache WRITE: 3500 tokens\n * // Second call: Cache HIT: 3500 tokens (90% discount!)\n * ```\n */\nexport async function generateFullOrbital(\n client: LLMClient,\n orbital: OrbitalUnit,\n options: OrbitalGenerationOptions = {}\n): Promise<OrbitalGenerationResult> {\n const {\n maxTokens = 8192,\n validate = true,\n requirements,\n } = options;\n\n const logs: GenerationLog[] = [];\n const startTime = Date.now();\n\n logs.push(createLog('info', `Starting generation for orbital: ${orbital.name}`, {\n entityName: getEntityName(orbital.entity),\n traitCount: orbital.traits.length,\n hasRequirements: !!requirements,\n }));\n\n // Use requirements-aware prompt if requirements provided\n const systemPrompt = requirements\n ? getRequirementsAwareFullOrbitalPrompt(requirements)\n : getFullOrbitalPrompt();\n\n // Check if using Anthropic for cache support\n const useCache = client.getProvider() === 'anthropic';\n\n let result;\n let fingerprint: string;\n let usedTemplate = false;\n\n if (useCache) {\n // Use cache-aware call - this is where the magic happens\n const cacheablePrompt = assembleCacheableOrbitalPrompt(orbital, systemPrompt);\n fingerprint = cacheablePrompt.fingerprint;\n usedTemplate = cacheablePrompt.usedCachedTemplate;\n\n logs.push(createLog('info', `Using Anthropic caching`, { fingerprint, usedTemplate }));\n console.log(`[OrbitalGenerator] Using Anthropic caching (fingerprint: ${fingerprint})`);\n\n result = await client.callWithCache({\n systemBlocks: cacheablePrompt.systemBlocks,\n userBlocks: cacheablePrompt.userBlocks,\n systemPrompt: '', // Overridden by blocks\n userPrompt: '', // Overridden by blocks\n maxTokens,\n skipSchemaValidation: true, // Parse JSON only\n });\n\n logs.push(createLog('info', `LLM call completed`, {\n promptTokens: result.usage?.promptTokens,\n completionTokens: result.usage?.completionTokens,\n }));\n } else {\n // Standard call for non-Anthropic providers\n const assembledPrompt = assembleOrbitalPrompt(orbital, systemPrompt);\n fingerprint = assembledPrompt.fingerprint;\n usedTemplate = assembledPrompt.usedCachedTemplate;\n\n logs.push(createLog('info', `Using standard generation (${client.getProvider()})`, { fingerprint, usedTemplate }));\n\n const userPrompt = `Generate a complete FullOrbitalUnit for this orbital:\n\n${JSON.stringify(orbital, null, 2)}\n\nReturn valid JSON matching the FullOrbitalUnit schema.`;\n\n result = await client.callWithMetadata({\n systemPrompt: assembledPrompt.prompt,\n userPrompt,\n maxTokens,\n skipSchemaValidation: true,\n });\n\n logs.push(createLog('info', `LLM call completed`, {\n promptTokens: result.usage?.promptTokens,\n completionTokens: result.usage?.completionTokens,\n }));\n }\n\n const generatedOrbital = result.data as OrbitalDefinition;\n\n // Validate if requested\n let validation;\n if (validate) {\n // Use direct per-unit validation\n // DEPRECATED: Validation removed - use orbital-rust validator instead\n // const validationResult = validateFullOrbitalUnit(generatedOrbital);\n const validationResult: any = { valid: true, errors: [], warnings: [] };\n validation = {\n valid: validationResult.valid,\n errorCount: validationResult.errors.length,\n warningCount: (validationResult.warnings || []).length,\n };\n\n if (validationResult.valid) {\n logs.push(createLog('info', `Validation passed`));\n } else {\n logs.push(createLog('warn', `Validation failed`, {\n errorCount: validationResult.errors.length,\n warningCount: (validationResult.warnings || []).length,\n errors: validationResult.errors.slice(0, 3).map((e: any) => e.message || e),\n }));\n }\n }\n\n const durationMs = Date.now() - startTime;\n logs.push(createLog('info', `Generation completed`, { durationMs }));\n\n return {\n orbital: generatedOrbital,\n fingerprint,\n usedTemplate,\n usage: result.usage ?? undefined,\n validation,\n logs,\n };\n}\n\n// ============================================================================\n// Parallel Orbital Generation\n// ============================================================================\n\n/**\n * Generate multiple orbitals in parallel with concurrency control.\n *\n * Uses provider-specific concurrency limits to avoid rate limiting.\n * All orbital units are independent, so parallel execution is safe.\n *\n * @example\n * ```typescript\n * // Generate all orbitals in parallel (max 3 concurrent for Anthropic)\n * const result = await generateFullOrbitalsParallel(client, orbitals, { validate: true });\n * console.log(`Generated ${result.summary.successful}/${result.summary.total} orbitals`);\n * ```\n */\nexport async function generateFullOrbitalsParallel(\n client: LLMClient,\n orbitals: OrbitalUnit[],\n options: ParallelGenerationOptions = {}\n): Promise<ParallelGenerationResult> {\n const provider = client.getProvider();\n const defaultConcurrency = PROVIDER_CONCURRENCY_LIMITS[provider] ?? 3;\n const concurrency = options.concurrency ?? defaultConcurrency;\n\n const aggregateLogs: GenerationLog[] = [];\n const startTime = Date.now();\n\n aggregateLogs.push(createLog('info', `Starting parallel generation`, {\n totalOrbitals: orbitals.length,\n concurrency,\n provider,\n }));\n\n console.log(`[OrbitalGenerator] Parallel generation: ${orbitals.length} orbitals, concurrency=${concurrency}`);\n\n // Simple concurrency limiter using a semaphore pattern\n let activeCount = 0;\n const queue: Array<() => void> = [];\n\n const acquire = (): Promise<void> => {\n return new Promise((resolve) => {\n if (activeCount < concurrency) {\n activeCount++;\n resolve();\n } else {\n queue.push(resolve);\n }\n });\n };\n\n const release = () => {\n activeCount--;\n const next = queue.shift();\n if (next) {\n activeCount++;\n next();\n }\n };\n\n // Generate all orbitals in parallel with concurrency control\n const results = await Promise.all(\n orbitals.map(async (orbital, index) => {\n await acquire();\n try {\n aggregateLogs.push(createLog('debug', `Starting orbital ${index + 1}/${orbitals.length}: ${orbital.name}`));\n const result = await generateFullOrbital(client, orbital, options);\n aggregateLogs.push(createLog('info', `Completed orbital ${index + 1}/${orbitals.length}: ${orbital.name}`, {\n valid: result.validation?.valid,\n tokens: result.usage?.totalTokens,\n }));\n return result;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n aggregateLogs.push(createLog('error', `Failed orbital ${index + 1}/${orbitals.length}: ${orbital.name}`, {\n error: errorMessage,\n }));\n // Return a failed result instead of throwing\n return {\n orbital: null as unknown as FullOrbitalUnit,\n fingerprint: '',\n usedTemplate: false,\n logs: [createLog('error', errorMessage)],\n validation: { valid: false, errorCount: 1, warningCount: 0 },\n } as OrbitalGenerationResult;\n } finally {\n release();\n }\n })\n );\n\n const totalDurationMs = Date.now() - startTime;\n const successful = results.filter(r => r.validation?.valid !== false && r.orbital !== null).length;\n const failed = results.length - successful;\n const totalTokens = results.reduce((sum, r) => sum + (r.usage?.totalTokens ?? 0), 0);\n\n aggregateLogs.push(createLog('info', `Parallel generation completed`, {\n totalDurationMs,\n successful,\n failed,\n totalTokens,\n }));\n\n console.log(`[OrbitalGenerator] Parallel generation complete: ${successful}/${results.length} successful in ${totalDurationMs}ms`);\n\n return {\n results,\n totalDurationMs,\n aggregateLogs,\n summary: {\n total: results.length,\n successful,\n failed,\n totalTokens,\n },\n };\n}\n\n// ============================================================================\n// Decomposition (For Main Agent Use)\n// ============================================================================\n\n/**\n * Options for decomposing requests into orbitals.\n */\nexport interface DecomposeOptions {\n /** Maximum tokens for generation */\n maxTokens?: number;\n /** Optional extracted requirements from analysis phase */\n requirements?: ExtractedRequirements;\n}\n\n/**\n * Decompose a user request into OrbitalUnits using LLM.\n *\n * This is typically called by the MAIN AGENT before delegating\n * to subagents for full orbital generation.\n *\n * @example\n * ```typescript\n * // Without requirements (existing behavior):\n * const orbitals = await decomposeToOrbitals(client, \"Build a task manager\");\n *\n * // With requirements (from analysis phase):\n * const orbitals = await decomposeToOrbitals(client, \"Build a task manager\", {\n * requirements: { entities: [\"Task\"], guards: [\"only admins can delete\"], ... }\n * });\n *\n * // Then generate all orbitals in parallel:\n * const result = await generateFullOrbitalsParallel(client, orbitals);\n * ```\n */\nexport async function decomposeToOrbitals(\n client: LLMClient,\n userRequest: string,\n options: DecomposeOptions = {}\n): Promise<OrbitalUnit[]> {\n const { maxTokens = 4096, requirements } = options;\n\n // Use requirements-aware prompt if requirements provided\n const systemPrompt = requirements\n ? getRequirementsAwareDecompositionPrompt(requirements)\n : getOrbitalDecompositionPrompt();\n\n const userPrompt = `Decompose this application request into Orbital Units:\n\n${userRequest}\n\nReturn a JSON array of OrbitalUnit objects.`;\n\n const result = await client.call({\n systemPrompt,\n userPrompt,\n maxTokens,\n skipSchemaValidation: true,\n });\n\n return result as OrbitalUnit[];\n}\n\n/**\n * Build a requirements-aware decomposition prompt.\n */\nfunction getRequirementsAwareDecompositionPrompt(requirements: ExtractedRequirements): string {\n const basePrompt = getOrbitalDecompositionPrompt();\n const requirementsGuidance = getRequirementsDecomposePrompt();\n\n const requirementsList = `\n## Extracted Requirements (Use These!)\n\n### Entities to Create\n${requirements.entities.length > 0 ? requirements.entities.map(e => `- ${e}`).join('\\n') : '- (none specified)'}\n\n### States (Map to State Machines)\n${requirements.states.length > 0 ? requirements.states.map(s => `- ${s}`).join('\\n') : '- (none specified)'}\n\n### Events (Map to Transitions)\n${requirements.events.length > 0 ? requirements.events.map(e => `- ${e}`).join('\\n') : '- (none specified)'}\n\n### Guards (Map to Transition Guards)\n${requirements.guards.length > 0 ? requirements.guards.map(g => `- ${g}`).join('\\n') : '- (none specified)'}\n\n### Effects (Map to Transition Effects)\n${requirements.effects.length > 0 ? requirements.effects.map(e => `- ${e}`).join('\\n') : '- (none specified)'}\n\n### Pages (Map to Page Definitions)\n${requirements.pages.length > 0 ? requirements.pages.map(p => `- ${p}`).join('\\n') : '- (none specified)'}\n\nUse these requirements to:\n1. Create one OrbitalUnit per primary entity in the list\n2. Distribute guards to relevant orbitals\n3. Distribute effects to relevant orbitals\n4. Ensure state machines cover the required states\n`;\n\n return `${basePrompt}\n\n---\n\n${requirementsGuidance}\n\n---\n\n${requirementsList}`;\n}\n\n/**\n * Build a requirements-aware full orbital generation prompt.\n */\nfunction getRequirementsAwareFullOrbitalPrompt(requirements: Partial<ExtractedRequirements>): string {\n const basePrompt = getFullOrbitalPrompt();\n const requirementsGuidance = getRequirementsTraitPrompt();\n\n const sections: string[] = [];\n\n if (requirements.guards && requirements.guards.length > 0) {\n sections.push(`### Guards to Implement\n${requirements.guards.map(g => `- ${g}`).join('\\n')}\n\nConvert these to \\`guard\\` expressions on transitions with \\`guardError\\` messages.`);\n }\n\n if (requirements.effects && requirements.effects.length > 0) {\n sections.push(`### Effects to Implement\n${requirements.effects.map(e => `- ${e}`).join('\\n')}\n\nConvert these to \\`effects\\` arrays on transitions (emit_event or call_service).`);\n }\n\n if (requirements.states && requirements.states.length > 0) {\n sections.push(`### States to Include\n${requirements.states.map(s => `- ${s}`).join('\\n')}\n\nUse these exact states in the state machine. First is initial, identify final states.`);\n }\n\n if (requirements.events && requirements.events.length > 0) {\n sections.push(`### Events to Include\n${requirements.events.map(e => `- ${e}`).join('\\n')}\n\nUse these event names in transitions.`);\n }\n\n if (sections.length === 0) {\n return basePrompt;\n }\n\n return `${basePrompt}\n\n---\n\n${requirementsGuidance}\n\n---\n\n## Requirements for This Orbital\n\n${sections.join('\\n\\n')}\n`;\n}\n\n// ============================================================================\n// Cache Statistics\n// ============================================================================\n\n/**\n * Estimate cache savings for a set of orbitals.\n *\n * Use this to predict how much caching will help for a decomposition.\n */\nexport function estimateCacheSavings(orbitals: OrbitalUnit[]): {\n totalOrbitals: number;\n uniqueFingerprints: number;\n estimatedCacheHits: number;\n estimatedSavingsPercent: number;\n} {\n const { getCacheStats } = require('../cache/index.js');\n const stats = getCacheStats(orbitals);\n\n // Each call after the first with same fingerprint is a cache hit\n const cacheHits = stats.potentialCacheHits;\n const savingsPercent = orbitals.length > 0\n ? Math.round((cacheHits / orbitals.length) * 90) // 90% discount on cache hits\n : 0;\n\n return {\n totalOrbitals: stats.totalOrbitals,\n uniqueFingerprints: stats.uniqueFingerprints,\n estimatedCacheHits: cacheHits,\n estimatedSavingsPercent: savingsPercent,\n };\n}\n","/**\n * Orbital Subagent Tool\n *\n * Spawns nested DeepAgents for orbital generation and forwards\n * their events to the parent stream.\n * Uses @almadar/llm LLMClient directly.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport type { OrbitalDefinition, EntityRef } from '@almadar/core/types';\nimport { isEntityReference, AgentDomainCategorySchema } from '@almadar/core/types';\nimport { LLMClient } from '@almadar/llm';\nimport type { SSEEvent, SSEEventType } from '../api-types.js';\nimport { generateFullOrbital } from '../orbitals/generation/index.js';\n\n/**\n * Get entity name safely from EntityRef.\n */\nfunction getEntityName(entity: EntityRef): string {\n if (isEntityReference(entity)) {\n return entity.replace('.entity', '');\n }\n return entity.name;\n}\n\n// Type alias for backward compatibility\ntype OrbitalUnit = OrbitalDefinition;\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type SubagentEventCallback = (\n orbitalName: string,\n orbitalIndex: number,\n totalOrbitals: number,\n event: {\n type: Exclude<SSEEventType, 'subagent_event'>;\n data: Record<string, unknown>;\n timestamp: number;\n },\n) => void;\n\nexport type OrbitalCompleteCallback = (\n orbital: unknown,\n orbitalName: string,\n orbitalIndex: number,\n totalOrbitals: number,\n) => void | Promise<void>;\n\nexport interface OrbitalRequirements {\n entities?: string[];\n states?: string[];\n events?: string[];\n guards?: string[];\n pages?: string[];\n effects?: string[];\n rawRequirements?: string[];\n}\n\nexport interface OrbitalSubagentToolOptions {\n onSubagentEvent?: SubagentEventCallback;\n onOrbitalComplete?: OrbitalCompleteCallback;\n requirements?: OrbitalRequirements;\n}\n\n// ============================================================================\n// Zod Schema\n// ============================================================================\n\nconst OrbitalInputSchema = z.object({\n orbital: z\n .object({\n name: z.string(),\n entity: z.object({\n name: z.string(),\n persistence: z.enum(['persistent', 'runtime', 'singleton', 'instance']),\n fields: z.array(\n z.object({\n name: z.string(),\n type: z.string(),\n required: z.boolean().optional(),\n }),\n ),\n }),\n traits: z.array(z.string()),\n patterns: z.array(z.string()),\n pages: z.array(\n z.object({\n name: z.string(),\n path: z.string(),\n viewType: z.string(),\n }),\n ).optional(),\n domainContext: z.object({\n request: z.string(),\n requestFragment: z.string().optional(),\n category: AgentDomainCategorySchema,\n vocabulary: z.record(z.string(), z.string()).optional(),\n }).optional(),\n design: z.object({\n style: z.enum(['minimal', 'modern', 'playful', 'data-driven', 'immersive']).optional(),\n uxHints: z.object({\n flowPattern: z.string().optional(),\n listPattern: z.string().optional(),\n formPattern: z.string().optional(),\n detailPattern: z.string().optional(),\n }).optional(),\n }).optional(),\n emits: z.array(z.string()).optional(),\n listens: z.array(\n z.object({\n event: z.string(),\n triggers: z.string(),\n }),\n ).optional(),\n relations: z.array(\n z.object({\n entity: z.string(),\n alias: z.string().optional(),\n cardinality: z.enum(['one', 'many']),\n }),\n ).optional(),\n })\n .describe('The OrbitalUnit to generate'),\n orbitalIndex: z.number().optional().describe('Index in the batch (0-based)'),\n totalOrbitals: z.number().optional().describe('Total orbitals in the batch'),\n});\n\n// ============================================================================\n// Tool Factory\n// ============================================================================\n\n/**\n * Create a tool for generating orbitals with subagent event streaming.\n * Uses @almadar/llm LLMClient directly.\n */\nexport function createOrbitalSubagentTool(\n options: OrbitalSubagentToolOptions = {},\n) {\n let eventCallback: SubagentEventCallback | undefined = options.onSubagentEvent;\n let completeCallback: OrbitalCompleteCallback | undefined = options.onOrbitalComplete;\n const requirements = options.requirements;\n\n const setEventCallback = (callback: SubagentEventCallback) => {\n eventCallback = callback;\n };\n\n const setOrbitalCompleteCallback = (callback: OrbitalCompleteCallback) => {\n completeCallback = callback;\n };\n\n const emitEvent = (\n orbitalName: string,\n orbitalIndex: number,\n totalOrbitals: number,\n type: Exclude<SSEEventType, 'subagent_event'>,\n data: Record<string, unknown>,\n ) => {\n if (eventCallback) {\n eventCallback(orbitalName, orbitalIndex, totalOrbitals, {\n type,\n data,\n timestamp: Date.now(),\n });\n }\n };\n\n const orbitalTool = tool(\n async ({ orbital, orbitalIndex = 0, totalOrbitals = 1 }) => {\n if (!orbital) {\n const errorMsg = 'Missing required parameter: orbital.';\n return JSON.stringify({ success: false, error: errorMsg, orbital: null });\n }\n\n const orbitalUnit = orbital as OrbitalUnit;\n\n if (!orbitalUnit.entity || !orbitalUnit.name) {\n const errorMsg = `Invalid orbital: missing required fields (name: ${orbitalUnit.name}, entity: ${orbitalUnit.entity}).`;\n return JSON.stringify({ success: false, error: errorMsg, orbital: orbitalUnit.name || 'unknown' });\n }\n\n try {\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'message', {\n content: `Starting generation for orbital: ${orbitalUnit.name}${requirements ? ' (with requirements from analysis)' : ''}`,\n role: 'assistant',\n isComplete: false,\n });\n\n if (requirements) {\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'generation_log', {\n level: 'info',\n message: 'Using requirements from analysis phase',\n data: {\n guards: requirements.guards?.length ?? 0,\n effects: requirements.effects?.length ?? 0,\n states: requirements.states?.length ?? 0,\n },\n orbitalName: orbitalUnit.name,\n });\n }\n\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'todo_update', {\n todos: [\n { id: 'analyze', task: 'Analyze orbital structure', status: 'in_progress' },\n { id: 'generate', task: 'Generate full schema', status: 'pending' },\n { id: 'validate', task: 'Validate output', status: 'pending' },\n ],\n });\n\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'message', {\n content: `Analyzing entity: ${getEntityName(orbitalUnit.entity)} with ${orbitalUnit.traits.length} traits`,\n role: 'assistant',\n isComplete: false,\n });\n\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'todo_update', {\n todos: [\n { id: 'analyze', task: 'Analyze orbital structure', status: 'completed' },\n { id: 'generate', task: 'Generate full schema', status: 'in_progress' },\n { id: 'validate', task: 'Validate output', status: 'pending' },\n ],\n });\n\n // Use @almadar/llm directly\n const client = new LLMClient({\n provider: 'anthropic',\n model: 'claude-sonnet-4-20250514',\n });\n\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'tool_call', {\n tool: 'llm_generate',\n args: {\n orbital: orbitalUnit.name,\n entity: getEntityName(orbitalUnit.entity),\n traits: orbitalUnit.traits,\n },\n });\n\n const result = await generateFullOrbital(client, orbitalUnit, {\n validate: true,\n requirements,\n onLog: (log) => {\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'generation_log', {\n level: log.level,\n message: log.message,\n data: log.data,\n orbitalName: orbitalUnit.name,\n });\n },\n });\n\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'tool_result', {\n tool: 'llm_generate',\n result: {\n fingerprint: result.fingerprint,\n usedTemplate: result.usedTemplate,\n usage: result.usage,\n },\n success: true,\n });\n\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'todo_update', {\n todos: [\n { id: 'analyze', task: 'Analyze orbital structure', status: 'completed' },\n { id: 'generate', task: 'Generate full schema', status: 'completed' },\n { id: 'validate', task: 'Validate output', status: 'in_progress' },\n ],\n });\n\n const finalOrbital = result.orbital;\n const finalValidation = result.validation;\n\n if (finalValidation) {\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'tool_result', {\n tool: 'validate_orbital',\n result: finalValidation,\n success: finalValidation.valid,\n });\n }\n\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'todo_update', {\n todos: [\n { id: 'analyze', task: 'Analyze orbital structure', status: 'completed' },\n { id: 'generate', task: 'Generate full schema', status: 'completed' },\n { id: 'validate', task: 'Validate output', status: 'completed' },\n ],\n });\n\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'message', {\n content: `Generated orbital: ${orbitalUnit.name} (${result.usage?.totalTokens ?? 0} tokens)`,\n role: 'assistant',\n isComplete: true,\n });\n\n if (completeCallback && finalOrbital) {\n try {\n await completeCallback(finalOrbital, orbitalUnit.name, orbitalIndex, totalOrbitals);\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'generation_log', {\n level: 'info',\n message: `Persisted orbital: ${orbitalUnit.name}`,\n orbitalName: orbitalUnit.name,\n });\n } catch (persistError) {\n console.error(`[OrbitalSubagent] Failed to persist ${orbitalUnit.name}:`, persistError);\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'generation_log', {\n level: 'warn',\n message: `Failed to persist orbital: ${orbitalUnit.name}`,\n data: { error: String(persistError) },\n orbitalName: orbitalUnit.name,\n });\n }\n }\n\n return JSON.stringify({\n success: true,\n orbital: finalOrbital,\n fingerprint: result.fingerprint,\n usage: result.usage,\n validation: result.validation,\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n emitEvent(orbitalUnit.name, orbitalIndex, totalOrbitals, 'error', {\n error: errorMessage,\n code: 'ORBITAL_GENERATION_ERROR',\n });\n\n return JSON.stringify({\n success: false,\n error: errorMessage,\n orbital: orbitalUnit.name,\n });\n }\n },\n {\n name: 'generate_orbital',\n description: `Generate a full orbital schema from an OrbitalUnit.\n\nSpawns a subagent to expand a lightweight OrbitalUnit into a complete\nFullOrbitalUnit with all sections, layouts, and configurations.\n\nUSAGE:\n1. Decompose user request into OrbitalUnits\n2. For each orbital, call generate_orbital with embedded context\n3. Collect results and merge into final schema`,\n schema: OrbitalInputSchema,\n },\n );\n\n return {\n tool: orbitalTool,\n setEventCallback,\n setOrbitalCompleteCallback,\n };\n}\n\n/**\n * Create a helper to wrap subagent events into SSE format.\n */\nexport function createSubagentEventWrapper(\n writeEvent: (event: SSEEvent) => void,\n): SubagentEventCallback {\n return (orbitalName, orbitalIndex, totalOrbitals, event) => {\n const sseEvent: SSEEvent = {\n type: 'subagent_event',\n timestamp: Date.now(),\n data: {\n orbitalName,\n orbitalIndex,\n totalOrbitals,\n event,\n },\n };\n writeEvent(sseEvent);\n };\n}\n","/**\n * Trait Subagent Tool\n *\n * Generates custom trait definitions for orbital schemas.\n * Uses @almadar/llm LLMClient directly.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport type { Trait } from '@almadar/core/types';\nimport { LLMClient } from '@almadar/llm';\nimport type { SSEEventType } from '../api-types.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type TraitEventCallback = (\n traitName: string,\n traitIndex: number,\n totalTraits: number,\n event: {\n type: Exclude<SSEEventType, 'subagent_event'>;\n data: Record<string, unknown>;\n timestamp: number;\n }\n) => void;\n\nexport type TraitCompleteCallback = (\n trait: Trait,\n traitName: string,\n traitIndex: number,\n totalTraits: number\n) => void | Promise<void>;\n\nexport interface TraitSubagentToolOptions {\n onTraitEvent?: TraitEventCallback;\n onTraitComplete?: TraitCompleteCallback;\n}\n\nexport interface TraitSpec {\n name: string;\n description: string;\n category?: string;\n states?: string[];\n events?: string[];\n requiredFields?: Array<{\n name: string;\n type: string;\n description?: string;\n }>;\n needsTicks?: boolean;\n needsEmit?: boolean;\n needsListens?: boolean;\n}\n\n// ============================================================================\n// Trait Generation Prompt\n// ============================================================================\n\nfunction getTraitGenerationPrompt(): string {\n return `You are a Trait Generator for KFlow orbital schemas.\n\n## Your Task\n\nGenerate a complete, valid Trait definition that implements the requested behavior.\n\n## Trait Structure\n\n\\`\\`\\`typescript\ninterface Trait {\n name: string;\n description?: string;\n category?: TraitCategory;\n requiredFields?: RequiredField[];\n dataEntities?: TraitDataEntity[];\n stateMachine?: StateMachine;\n initialEffects?: Effect[];\n ticks?: TraitTick[];\n listens?: TraitEventListener[];\n}\n\\`\\`\\`\n\n## State Machine Structure\n\n\\`\\`\\`typescript\ninterface StateMachine {\n states: State[];\n events: Event[];\n transitions: Transition[];\n guards?: Guard[];\n}\n\\`\\`\\`\n\n## Best Practices\n\n1. **State Names**: Use PascalCase (e.g., \"Idle\", \"Loading\", \"Playing\")\n2. **Event Keys**: Use UPPER_SNAKE_CASE (e.g., \"START_GAME\", \"PLAYER_HIT\")\n3. **Initial State**: Always mark exactly one state as \\`isInitial: true\\`\n4. **Terminal States**: Mark end states as \\`isFinal: true\\`\n\n## Output Format\n\nReturn ONLY valid JSON matching the Trait interface. No markdown, no explanation.`;\n}\n\n// ============================================================================\n// Zod Schemas\n// ============================================================================\n\nconst TraitSpecSchema = z.object({\n name: z.string().describe('Name of the trait'),\n description: z.string().describe('Description of what this trait does'),\n category: z.string().optional().describe('Category'),\n states: z.array(z.string()).optional().describe('States the trait should have'),\n events: z.array(z.string()).optional().describe('Events the trait should handle'),\n requiredFields: z.array(z.object({\n name: z.string(),\n type: z.string(),\n description: z.string().optional(),\n })).optional().describe('Fields required from the linked entity'),\n needsTicks: z.boolean().optional().describe('Whether this trait needs temporal behavior'),\n needsEmit: z.boolean().optional().describe('Whether this trait emits events'),\n needsListens: z.boolean().optional().describe('Whether this trait listens for events'),\n});\n\nconst TraitInputSchema = z.object({\n traitSpec: TraitSpecSchema.describe('Specification for the trait to generate'),\n traitIndex: z.number().optional().describe('Index in the batch (0-based)'),\n totalTraits: z.number().optional().describe('Total traits in the batch'),\n});\n\n// ============================================================================\n// Tool Factory\n// ============================================================================\n\n/**\n * Create a tool for generating custom traits.\n * Uses @almadar/llm LLMClient directly.\n */\nexport function createTraitSubagentTool(\n options: TraitSubagentToolOptions = {},\n) {\n let eventCallback: TraitEventCallback | undefined = options.onTraitEvent;\n let completeCallback: TraitCompleteCallback | undefined = options.onTraitComplete;\n\n const setEventCallback = (callback: TraitEventCallback) => {\n eventCallback = callback;\n };\n\n const setTraitCompleteCallback = (callback: TraitCompleteCallback) => {\n completeCallback = callback;\n };\n\n const emitEvent = (\n traitName: string,\n traitIndex: number,\n totalTraits: number,\n type: Exclude<SSEEventType, 'subagent_event'>,\n data: Record<string, unknown>\n ) => {\n if (eventCallback) {\n eventCallback(traitName, traitIndex, totalTraits, {\n type,\n data,\n timestamp: Date.now(),\n });\n }\n };\n\n const traitTool = tool(\n async ({ traitSpec, traitIndex = 0, totalTraits = 1 }) => {\n const spec = traitSpec as TraitSpec;\n\n try {\n emitEvent(spec.name, traitIndex, totalTraits, 'message', {\n content: `Starting generation for custom trait: ${spec.name}`,\n role: 'assistant',\n isComplete: false,\n });\n\n emitEvent(spec.name, traitIndex, totalTraits, 'todo_update', {\n todos: [\n { id: 'analyze', task: 'Analyze trait requirements', status: 'in_progress' },\n { id: 'generate', task: 'Generate state machine', status: 'pending' },\n { id: 'validate', task: 'Validate trait', status: 'pending' },\n ],\n });\n\n const userPrompt = buildTraitUserPrompt(spec);\n\n emitEvent(spec.name, traitIndex, totalTraits, 'message', {\n content: `Analyzing: ${spec.description}`,\n role: 'assistant',\n isComplete: false,\n });\n\n emitEvent(spec.name, traitIndex, totalTraits, 'todo_update', {\n todos: [\n { id: 'analyze', task: 'Analyze trait requirements', status: 'completed' },\n { id: 'generate', task: 'Generate state machine', status: 'in_progress' },\n { id: 'validate', task: 'Validate trait', status: 'pending' },\n ],\n });\n\n // Use @almadar/llm directly\n const client = new LLMClient({\n provider: 'anthropic',\n model: 'claude-sonnet-4-20250514',\n });\n\n emitEvent(spec.name, traitIndex, totalTraits, 'tool_call', {\n tool: 'llm_generate_trait',\n args: {\n traitName: spec.name,\n states: spec.states,\n events: spec.events,\n },\n });\n\n const result = await client.call({\n systemPrompt: getTraitGenerationPrompt(),\n userPrompt,\n maxTokens: 4096,\n skipSchemaValidation: true,\n });\n\n const generatedTrait = result as Trait;\n\n emitEvent(spec.name, traitIndex, totalTraits, 'tool_result', {\n tool: 'llm_generate_trait',\n result: {\n traitName: generatedTrait.name,\n stateCount: generatedTrait.stateMachine?.states?.length ?? 0,\n transitionCount: generatedTrait.stateMachine?.transitions?.length ?? 0,\n },\n success: true,\n });\n\n emitEvent(spec.name, traitIndex, totalTraits, 'todo_update', {\n todos: [\n { id: 'analyze', task: 'Analyze trait requirements', status: 'completed' },\n { id: 'generate', task: 'Generate state machine', status: 'completed' },\n { id: 'validate', task: 'Validate trait', status: 'in_progress' },\n ],\n });\n\n const validation = validateGeneratedTrait(generatedTrait, spec);\n\n emitEvent(spec.name, traitIndex, totalTraits, 'tool_result', {\n tool: 'validate_trait',\n result: validation,\n success: validation.valid,\n });\n\n emitEvent(spec.name, traitIndex, totalTraits, 'todo_update', {\n todos: [\n { id: 'analyze', task: 'Analyze trait requirements', status: 'completed' },\n { id: 'generate', task: 'Generate state machine', status: 'completed' },\n { id: 'validate', task: 'Validate trait', status: 'completed' },\n ],\n });\n\n emitEvent(spec.name, traitIndex, totalTraits, 'message', {\n content: `Generated trait: ${generatedTrait.name} with ${generatedTrait.stateMachine?.states?.length ?? 0} states`,\n role: 'assistant',\n isComplete: true,\n });\n\n if (completeCallback) {\n try {\n await completeCallback(generatedTrait, spec.name, traitIndex, totalTraits);\n } catch (persistError) {\n console.error(`[TraitSubagent] Failed to persist ${spec.name}:`, persistError);\n }\n }\n\n return JSON.stringify({\n success: true,\n trait: generatedTrait,\n validation,\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n emitEvent(spec.name, traitIndex, totalTraits, 'error', {\n error: errorMessage,\n code: 'TRAIT_GENERATION_ERROR',\n });\n\n return JSON.stringify({\n success: false,\n error: errorMessage,\n traitName: spec.name,\n });\n }\n },\n {\n name: 'generate_custom_trait',\n description: `Generate a custom trait definition for the orbital schema.\n\nUse this when the decomposition identifies custom traits that don't exist in the\ntrait library.`,\n schema: TraitInputSchema,\n }\n );\n\n return {\n tool: traitTool,\n setEventCallback,\n setTraitCompleteCallback,\n };\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nfunction buildTraitUserPrompt(spec: TraitSpec): string {\n const parts: string[] = [\n `Generate a Trait definition for: **${spec.name}**`,\n '',\n `## Description`,\n spec.description,\n ];\n\n if (spec.category) {\n parts.push('', `## Category`, spec.category);\n }\n if (spec.states && spec.states.length > 0) {\n parts.push('', `## Required States`, spec.states.map(s => `- ${s}`).join('\\n'));\n }\n if (spec.events && spec.events.length > 0) {\n parts.push('', `## Events to Handle`, spec.events.map(e => `- ${e}`).join('\\n'));\n }\n if (spec.requiredFields && spec.requiredFields.length > 0) {\n parts.push(\n '', `## Required Fields from Linked Entity`,\n spec.requiredFields.map(f => `- ${f.name}: ${f.type}${f.description ? ` (${f.description})` : ''}`).join('\\n')\n );\n }\n if (spec.needsTicks) {\n parts.push('', '## Temporal Behavior', 'This trait needs tick-based updates.');\n }\n if (spec.needsEmit) {\n parts.push('', '## Event Emission', 'This trait should emit events for other traits.');\n }\n if (spec.needsListens) {\n parts.push('', '## Event Listening', 'This trait should listen for events from other traits.');\n }\n\n parts.push('', '## Output', 'Return the complete Trait definition as valid JSON.');\n\n return parts.join('\\n');\n}\n\nfunction validateGeneratedTrait(trait: Trait, spec: TraitSpec): {\n valid: boolean;\n errors: string[];\n warnings: string[];\n} {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n if (trait.name !== spec.name) {\n errors.push(`Trait name mismatch: expected \"${spec.name}\", got \"${trait.name}\"`);\n }\n\n if (spec.states && spec.states.length > 0) {\n if (!trait.stateMachine) {\n errors.push('State machine is required but not generated');\n } else {\n const hasInitial = trait.stateMachine.states?.some(s => s.isInitial);\n if (!hasInitial) {\n warnings.push('No initial state marked');\n }\n const stateNames = new Set(trait.stateMachine.states?.map(s => s.name) ?? []);\n for (const requiredState of spec.states) {\n if (!stateNames.has(requiredState)) {\n warnings.push(`Specified state \"${requiredState}\" not found in generated trait`);\n }\n }\n }\n }\n\n if (spec.needsTicks && (!trait.ticks || trait.ticks.length === 0)) {\n warnings.push('Temporal behavior requested but no ticks defined');\n }\n if (spec.needsListens && (!trait.listens || trait.listens.length === 0)) {\n warnings.push('Event listening requested but no listeners defined');\n }\n\n return { valid: errors.length === 0, errors, warnings };\n}\n\n/**\n * Create a helper to wrap trait events into SSE format.\n */\nexport function createTraitEventWrapper(\n writeEvent: (event: { type: string; timestamp: number; data: unknown }) => void\n): TraitEventCallback {\n return (traitName, traitIndex, totalTraits, event) => {\n writeEvent({\n type: 'subagent_event',\n timestamp: Date.now(),\n data: { traitName, traitIndex, totalTraits, event },\n });\n };\n}\n","/**\n * Construct Combined Schema Tool\n *\n * Deterministically combines generated orbitals into a single OrbitalSchema\n * without LLM involvement.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport type { FullOrbitalUnit } from '@almadar/core/types';\nimport { combineOrbitals } from '../orbitals/combiner/index.js';\n\n// ============================================================================\n// Tool Schema\n// ============================================================================\n\nconst FullOrbitalUnitInputSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n entity: z.object({\n name: z.string(),\n collection: z.string().optional(),\n fields: z.array(z.any()),\n timestamps: z.boolean().optional(),\n }),\n traits: z.array(z.any()),\n pages: z.array(z.any()),\n emits: z.array(z.string()).optional(),\n listens: z.array(z.any()).optional(),\n});\n\nconst CombineSchemaInputSchema = z.object({\n orbitals: z.array(FullOrbitalUnitInputSchema).optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n version: z.string().optional(),\n theme: z.string().optional(),\n defaultRoute: z.string().optional(),\n validate: z.boolean().optional().default(true),\n});\n\n// ============================================================================\n// Auto-Collection Helper\n// ============================================================================\n\nasync function autoCollectOrbitals(workDir: string): Promise<FullOrbitalUnit[]> {\n const fs = await import('fs');\n const path = await import('path');\n\n const orbitalsDir = path.join(workDir, '.orbitals');\n\n if (!fs.existsSync(orbitalsDir)) {\n const files = fs.readdirSync(workDir).filter((f: string) =>\n f.endsWith('.json') && (f.startsWith('orbital-') || f.includes('orbital'))\n );\n\n if (files.length === 0) {\n throw new Error('No orbitals found. Generate orbitals first using generate_orbital, or provide them directly.');\n }\n\n return files.map((f: string) => {\n const content = fs.readFileSync(path.join(workDir, f), 'utf-8');\n return JSON.parse(content);\n });\n }\n\n const files = fs.readdirSync(orbitalsDir).filter((f: string) => f.endsWith('.json'));\n\n if (files.length === 0) {\n throw new Error('No orbitals found in .orbitals/ directory.');\n }\n\n return files.map((f: string) => {\n const content = fs.readFileSync(path.join(orbitalsDir, f), 'utf-8');\n return JSON.parse(content);\n });\n}\n\n// ============================================================================\n// Validation Cap\n// ============================================================================\n\nconst MAX_COMBINE_VALIDATION_ATTEMPTS = 3;\nlet combineValidationAttempts = 0;\n\n// ============================================================================\n// Tool Implementation\n// ============================================================================\n\n/**\n * Create the construct_combined_schema tool.\n */\nexport function createCombineSchemasTool(workDir?: string) {\n combineValidationAttempts = 0;\n\n return tool(\n async (input) => {\n let orbitals: FullOrbitalUnit[];\n\n if (input.orbitals && input.orbitals.length > 0) {\n orbitals = input.orbitals as FullOrbitalUnit[];\n } else if (workDir) {\n orbitals = await autoCollectOrbitals(workDir);\n } else {\n orbitals = await autoCollectOrbitals(process.cwd());\n }\n\n const appName = input.name ||\n (orbitals.length > 0 ? `${orbitals[0].name} Application` : 'Application');\n\n const result = combineOrbitals(orbitals, {\n name: appName,\n description: input.description,\n version: input.version,\n theme: input.theme,\n defaultRoute: input.defaultRoute,\n validate: input.validate ?? true,\n });\n\n if (result.success) {\n combineValidationAttempts = 0;\n\n return JSON.stringify({\n success: true,\n schema: result.schema,\n stats: result.stats,\n validation: result.validation ? {\n valid: result.validation.valid,\n errorCount: result.validation.errors.length,\n warningCount: result.validation.warnings.length,\n } : undefined,\n __TASK_COMPLETE__: true,\n __STOP_SIGNAL__: 'WORKFLOW_FINISHED',\n message: `✅ SCHEMA GENERATION COMPLETE. Generated ${result.stats?.totalOrbitals || orbitals.length} orbitals. ` +\n `DO NOT call any more tools.`,\n }, null, 2);\n } else {\n combineValidationAttempts++;\n\n if (combineValidationAttempts >= MAX_COMBINE_VALIDATION_ATTEMPTS) {\n return JSON.stringify({\n success: false,\n cappedValidation: true,\n validationAttempt: combineValidationAttempts,\n error: result.error,\n stats: result.stats,\n validation: result.validation ? {\n valid: result.validation.valid,\n errors: result.validation.errors.slice(0, 3),\n errorCount: result.validation.errors.length,\n } : undefined,\n __STOP_FIXING__: true,\n message: `⚠️ VALIDATION CAP REACHED (${MAX_COMBINE_VALIDATION_ATTEMPTS} attempts). STOP editing orbitals.`,\n recommendation: 'STOP_FIXING',\n }, null, 2);\n }\n\n return JSON.stringify({\n success: false,\n validationAttempt: combineValidationAttempts,\n remainingAttempts: MAX_COMBINE_VALIDATION_ATTEMPTS - combineValidationAttempts,\n error: result.error,\n stats: result.stats,\n validation: result.validation ? {\n valid: result.validation.valid,\n errors: result.validation.errors.slice(0, 5),\n errorCount: result.validation.errors.length,\n } : undefined,\n partialSchema: result.schema,\n }, null, 2);\n }\n },\n {\n name: 'construct_combined_schema',\n description: `Deterministically combine generated orbitals into a single OrbitalSchema.\n\n⚠️ IMPORTANT: This is the FINAL STEP. When this tool returns success,\nyour task is COMPLETE. Do NOT call any other tools after this succeeds.\n\nSIMPLE USAGE (RECOMMENDED):\n construct_combined_schema({})\n\nOrbitals are auto-collected from .orbitals/ directory.`,\n schema: CombineSchemaInputSchema,\n }\n );\n}\n","/**\n * Schema Chunking Tools\n *\n * Tools for extracting and merging chunks of large orbital schemas.\n * Enables LLM-driven schema updates without hitting token limits.\n *\n * @packageDocumentation\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport { randomUUID } from 'crypto';\nimport * as fs from 'fs/promises';\nimport * as fss from 'fs';\nimport * as path from 'path';\nimport type { OrbitalSchema, Trait, TraitRef, Orbital, OrbitalDefinition, EntityRef } from '@almadar/core/types';\nimport { isOrbitalDefinition, isEntityReference } from '@almadar/core/types';\n\n/**\n * Get entity name safely from EntityRef.\n */\nfunction getEntityName(entity: EntityRef | undefined): string {\n if (!entity) return 'Unknown';\n if (isEntityReference(entity)) {\n return entity.replace('.entity', '');\n }\n return entity.name;\n}\n\nconst CHUNKS_DIR = '.chunks';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface OrbitalSummary {\n name: string;\n entity: string;\n traits: string[];\n inlineTraits: string[];\n}\n\ninterface SchemaStructure {\n name: string;\n orbitals: OrbitalSummary[];\n traits: string[];\n totalSize: string;\n}\n\ninterface ChunkMeta {\n sourceFile: string;\n type: 'orbital' | 'trait' | 'inline-trait';\n orbitalIndex?: number;\n traitIndex?: number;\n inlineTraitIndex?: number;\n parentOrbitalName?: string;\n extractedAt: string;\n}\n\ninterface ChunkFile {\n meta: ChunkMeta;\n orbital?: unknown;\n referencedTraits?: unknown[];\n trait?: unknown;\n inlineTrait?: unknown;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nasync function ensureChunksDir(workspaceDir: string): Promise<string> {\n const chunksPath = path.join(workspaceDir, CHUNKS_DIR);\n try {\n await fs.mkdir(chunksPath, { recursive: true });\n } catch {\n // Directory may already exist\n }\n return chunksPath;\n}\n\nfunction getTraitInfo(traits: unknown[]): { refs: string[]; inlines: string[] } {\n const refs: string[] = [];\n const inlines: string[] = [];\n\n for (const t of traits || []) {\n if (typeof t === 'object' && t !== null) {\n if ('ref' in t && typeof (t as { ref: unknown }).ref === 'string') {\n refs.push((t as { ref: string }).ref);\n } else if ('name' in t && typeof (t as { name: unknown }).name === 'string') {\n inlines.push((t as { name: string }).name);\n }\n }\n }\n\n return { refs, inlines };\n}\n\n// ============================================================================\n// Tool: query_schema_structure\n// ============================================================================\n\nexport function createQuerySchemaStructureTool(workDir: string) {\n return tool(\n async ({ file }) => {\n const filePath = path.isAbsolute(file) ? file : path.join(workDir, file);\n\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n const schema = JSON.parse(content) as OrbitalSchema;\n const stats = fss.statSync(filePath);\n\n const structure: SchemaStructure = {\n name: schema.name,\n orbitals: (schema.orbitals || [])\n .filter((o): o is OrbitalDefinition => isOrbitalDefinition(o))\n .map(o => {\n const { refs, inlines } = getTraitInfo(o.traits || []);\n return {\n name: o.name,\n entity: getEntityName(o.entity),\n traits: refs,\n inlineTraits: inlines,\n };\n }),\n traits: [],\n totalSize: `${Math.round(stats.size / 1024)}KB`,\n };\n\n return JSON.stringify(structure, null, 2);\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n return JSON.stringify({ error: `Failed to query schema structure: ${msg}` });\n }\n },\n {\n name: 'query_schema_structure',\n description: `Get a lightweight map of schema structure (names only, not content).\n\nUSE THIS FIRST before extracting chunks to understand what orbitals and traits exist.`,\n schema: z.object({\n file: z.string().describe('Path to schema file (e.g., \"schema.json\")'),\n }),\n }\n );\n}\n\n// ============================================================================\n// Tool: extract_chunk\n// ============================================================================\n\nexport function createExtractChunkTool(workDir: string) {\n return tool(\n async ({ file, type, name, parentOrbital, includeTraits = true }) => {\n const filePath = path.isAbsolute(file) ? file : path.join(workDir, file);\n\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n const schema = JSON.parse(content) as OrbitalSchema;\n const chunkId = randomUUID().slice(0, 8);\n const chunksDir = await ensureChunksDir(workDir);\n const chunkFile = path.join(chunksDir, `chunk-${chunkId}.json`);\n\n const chunkData: ChunkFile = {\n meta: {\n sourceFile: filePath,\n type,\n extractedAt: new Date().toISOString(),\n },\n };\n\n if (type === 'orbital') {\n const orbitalIndex = schema.orbitals.findIndex(o => o.name === name);\n if (orbitalIndex === -1) {\n return JSON.stringify({ error: `Orbital \"${name}\" not found in schema` });\n }\n\n const orbital = schema.orbitals[orbitalIndex];\n chunkData.meta.orbitalIndex = orbitalIndex;\n chunkData.orbital = orbital;\n\n if (includeTraits) {\n const { refs } = getTraitInfo(orbital.traits || []);\n chunkData.referencedTraits = (orbital.traits || []).filter(t =>\n typeof t === 'object' && t !== null && 'name' in t &&\n refs.includes((t as { name: string }).name)\n );\n }\n } else if (type === 'trait') {\n return JSON.stringify({\n error: `Schema-level traits no longer exist. Use type \"inline-trait\" with parentOrbital.`,\n });\n } else if (type === 'inline-trait') {\n if (!parentOrbital) {\n return JSON.stringify({ error: 'parentOrbital is required for inline-trait extraction' });\n }\n\n const orbitalIndex = schema.orbitals.findIndex(o => o.name === parentOrbital);\n if (orbitalIndex === -1) {\n return JSON.stringify({ error: `Parent orbital \"${parentOrbital}\" not found` });\n }\n\n const orbital = schema.orbitals[orbitalIndex];\n const inlineTraitIndex = (orbital.traits || []).findIndex(t =>\n typeof t === 'object' && t !== null && 'name' in t &&\n (t as { name: string }).name === name\n );\n\n if (inlineTraitIndex === -1) {\n return JSON.stringify({ error: `Inline trait \"${name}\" not found in orbital \"${parentOrbital}\"` });\n }\n\n chunkData.meta.parentOrbitalName = parentOrbital;\n chunkData.meta.orbitalIndex = orbitalIndex;\n chunkData.meta.inlineTraitIndex = inlineTraitIndex;\n chunkData.inlineTrait = orbital.traits![inlineTraitIndex];\n }\n\n const chunkContent = JSON.stringify(chunkData, null, 2);\n await fs.writeFile(chunkFile, chunkContent);\n\n const relativeChunkFile = path.relative(workDir, chunkFile);\n\n return JSON.stringify({\n success: true,\n chunkId,\n chunkFile: relativeChunkFile,\n size: `${Math.round(chunkContent.length / 1024)}KB`,\n message: `Chunk extracted to ${relativeChunkFile}. Use edit_file then apply_chunk with chunkId \"${chunkId}\".`,\n });\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n return JSON.stringify({ error: `Failed to extract chunk: ${msg}` });\n }\n },\n {\n name: 'extract_chunk',\n description: `Extract a specific orbital or trait to a chunk file for editing.\n\nAfter extracting, use edit_file on the returned chunkFile path, then call apply_chunk.\n\nTypes: \"orbital\", \"inline-trait\" (requires parentOrbital).`,\n schema: z.object({\n file: z.string().describe('Path to schema file'),\n type: z.enum(['orbital', 'trait', 'inline-trait']).describe('Type of chunk to extract'),\n name: z.string().describe('Name of orbital or trait to extract'),\n parentOrbital: z.string().optional().describe('Required for inline-trait'),\n includeTraits: z.boolean().default(true).describe('For orbital: also extract referenced traits'),\n }),\n }\n );\n}\n\n// ============================================================================\n// Tool: apply_chunk\n// ============================================================================\n\nexport function createApplyChunkTool(workDir: string) {\n return tool(\n async ({ chunkId }) => {\n const chunkFileName = `chunk-${chunkId}.json`;\n const chunkFilePath = path.join(workDir, CHUNKS_DIR, chunkFileName);\n\n try {\n try {\n await fs.access(chunkFilePath);\n } catch {\n return JSON.stringify({ error: `Chunk file not found: ${chunkFileName}.` });\n }\n\n const chunkContent = await fs.readFile(chunkFilePath, 'utf-8');\n const chunkData = JSON.parse(chunkContent) as ChunkFile;\n const { meta } = chunkData;\n\n const schemaContent = await fs.readFile(meta.sourceFile, 'utf-8');\n const schema = JSON.parse(schemaContent) as OrbitalSchema;\n\n if (meta.type === 'orbital' && chunkData.orbital) {\n schema.orbitals[meta.orbitalIndex!] = chunkData.orbital as Orbital;\n\n if (chunkData.referencedTraits && Array.isArray(chunkData.referencedTraits)) {\n const orbital = schema.orbitals[meta.orbitalIndex!];\n if (orbital && isOrbitalDefinition(orbital) && orbital.traits) {\n for (const editedTrait of chunkData.referencedTraits) {\n if (typeof editedTrait === 'object' && editedTrait !== null && 'name' in editedTrait) {\n const traitName = (editedTrait as { name: string }).name;\n const idx = orbital.traits.findIndex(t =>\n typeof t === 'object' && t !== null && 'name' in t &&\n (t as { name: string }).name === traitName\n );\n if (idx !== -1) {\n orbital.traits[idx] = editedTrait as TraitRef;\n }\n }\n }\n }\n }\n }\n\n if (meta.type === 'trait' && chunkData.trait) {\n console.warn('Schema-level traits are deprecated. Trait was not applied.');\n }\n\n if (meta.type === 'inline-trait' && chunkData.inlineTrait) {\n const orbital = schema.orbitals[meta.orbitalIndex!];\n if (orbital && isOrbitalDefinition(orbital) && orbital.traits && meta.inlineTraitIndex !== undefined) {\n orbital.traits[meta.inlineTraitIndex] = chunkData.inlineTrait as TraitRef;\n }\n }\n\n const output = JSON.stringify(schema, null, 2);\n await fs.writeFile(meta.sourceFile, output);\n await fs.unlink(chunkFilePath);\n\n return JSON.stringify({\n success: true,\n message: `Changes merged into ${path.basename(meta.sourceFile)}`,\n updatedSize: `${Math.round(output.length / 1024)}KB`,\n });\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n return JSON.stringify({ error: `Failed to apply chunk: ${msg}` });\n }\n },\n {\n name: 'apply_chunk',\n description: `Merge an edited chunk file back into the schema.\n\nCall this AFTER editing the chunk file with edit_file.`,\n schema: z.object({\n chunkId: z.string().describe('Chunk ID from extract_chunk'),\n }),\n }\n );\n}\n\n// ============================================================================\n// Factory function\n// ============================================================================\n\nexport function createSchemaChunkingTools(workDir: string) {\n return {\n querySchemaStructure: createQuerySchemaStructureTool(workDir),\n extractChunk: createExtractChunkTool(workDir),\n applyChunk: createApplyChunkTool(workDir),\n };\n}\n","/**\n * GitHub Tools for DeepAgent\n *\n * LangChain tools that wrap GitHubIntegration operations.\n * These tools enable the agent to clone repos, create branches, commit, push, and create PRs.\n */\n\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport { GitHubIntegration } from '@almadar/integrations';\nimport type { IntegrationConfig } from '@almadar/integrations';\n\n/**\n * GitHub tools configuration\n */\nexport interface GitHubToolsConfig {\n /** GitHub personal access token */\n token: string;\n /** Repository owner (e.g., 'octocat') */\n owner?: string;\n /** Repository name (e.g., 'hello-world') */\n repo?: string;\n /** Working directory for git operations */\n workDir: string;\n}\n\n/**\n * Create GitHub tools for the agent\n */\nexport function createGitHubTools(config: GitHubToolsConfig) {\n const { token, owner = '', repo = '', workDir } = config;\n\n // Create GitHub integration instance\n const integrationConfig: IntegrationConfig = {\n name: 'github',\n env: {\n GITHUB_TOKEN: token,\n GITHUB_OWNER: owner,\n GITHUB_REPO: repo,\n GITHUB_WORK_DIR: workDir,\n },\n };\n\n const github = new GitHubIntegration(integrationConfig);\n\n // =========================================================================\n // Git Operations\n // =========================================================================\n\n /**\n * Clone a GitHub repository\n */\n const github_clone = tool(\n async ({ repoUrl, branch, depth }) => {\n try {\n const result = await github.execute('cloneRepo', {\n repoUrl,\n targetDir: workDir,\n branch,\n depth: depth || 1,\n });\n\n if (!result.success) {\n return `Failed to clone repository: ${result.error?.message}`;\n }\n\n return `Successfully cloned ${repoUrl} to ${workDir}${branch ? ` (branch: ${branch})` : ''}`;\n } catch (error) {\n return `Error cloning repository: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n {\n name: 'github_clone',\n description: `Clone a GitHub repository into the workspace.\n\nUsage:\n- Clones the repository into the current workspace directory\n- Defaults to shallow clone (depth: 1) for faster cloning\n- Can optionally specify a branch to checkout\n\nExample:\ngithub_clone({ repoUrl: \"https://github.com/owner/repo\", branch: \"main\" })`,\n schema: z.object({\n repoUrl: z.string().describe('GitHub repository URL (e.g., https://github.com/owner/repo)'),\n branch: z.string().optional().describe('Branch to checkout (defaults to repo default branch)'),\n depth: z.number().optional().describe('Clone depth (default: 1 for shallow clone)'),\n }),\n }\n );\n\n /**\n * Create a new git branch\n */\n const github_create_branch = tool(\n async ({ branchName, baseBranch }) => {\n try {\n const result = await github.execute('createBranch', {\n branchName,\n baseBranch,\n workDir,\n });\n\n if (!result.success) {\n return `Failed to create branch: ${result.error?.message}`;\n }\n\n return `Successfully created and checked out branch: ${branchName}`;\n } catch (error) {\n return `Error creating branch: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n {\n name: 'github_create_branch',\n description: `Create and checkout a new git branch.\n\nUsage:\n- Creates a new branch from the current branch or specified base branch\n- Automatically checks out the new branch\n- Branch name should follow format: feature/name, fix/name, etc.\n\nExample:\ngithub_create_branch({ branchName: \"fix/issue-42-null-pointer\" })`,\n schema: z.object({\n branchName: z.string().describe('Name of the branch to create (e.g., fix/issue-42)'),\n baseBranch: z.string().optional().describe('Base branch to create from (defaults to current branch)'),\n }),\n }\n );\n\n /**\n * Commit changes\n */\n const github_commit = tool(\n async ({ message, files }) => {\n try {\n const result = await github.execute('commit', {\n message,\n files,\n workDir,\n });\n\n if (!result.success) {\n return `Failed to commit: ${result.error?.message}`;\n }\n\n return `Successfully committed: ${message}`;\n } catch (error) {\n return `Error committing changes: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n {\n name: 'github_commit',\n description: `Stage and commit changes to git.\n\nUsage:\n- Stages files (or all changes if files not specified)\n- Creates a commit with the provided message\n- Commit message should be clear and descriptive\n\nExample:\ngithub_commit({ message: \"Fix null pointer in UserService\\\\n\\\\nCloses #42\" })`,\n schema: z.object({\n message: z.string().describe('Commit message (can include multiple lines)'),\n files: z.array(z.string()).optional().describe('Specific files to commit (defaults to all changes)'),\n }),\n }\n );\n\n /**\n * Push branch to remote\n */\n const github_push = tool(\n async ({ branchName }) => {\n try {\n const result = await github.execute('push', {\n branchName,\n force: false, // Never allow force push\n workDir,\n });\n\n if (!result.success) {\n return `Failed to push: ${result.error?.message}`;\n }\n\n return `Successfully pushed branch: ${branchName}`;\n } catch (error) {\n return `Error pushing branch: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n {\n name: 'github_push',\n description: `Push a branch to GitHub.\n\nUsage:\n- Pushes the specified branch to origin\n- Sets upstream tracking (-u flag)\n- Force push is NEVER allowed for safety\n\nExample:\ngithub_push({ branchName: \"fix/issue-42\" })`,\n schema: z.object({\n branchName: z.string().describe('Name of the branch to push'),\n }),\n }\n );\n\n // =========================================================================\n // GitHub API Operations\n // =========================================================================\n\n /**\n * Create a pull request\n */\n const github_create_pr = tool(\n async ({ title, body, baseBranch, headBranch, draft }) => {\n try {\n const result = await github.execute('createPR', {\n title,\n body,\n baseBranch,\n headBranch,\n draft: draft || false,\n });\n\n if (!result.success) {\n return `Failed to create pull request: ${result.error?.message}`;\n }\n\n const pr = result.data as { number: number; url: string };\n return `Successfully created PR #${pr.number}: ${pr.url}`;\n } catch (error) {\n return `Error creating pull request: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n {\n name: 'github_create_pr',\n description: `Create a pull request on GitHub.\n\nUsage:\n- Creates a PR from headBranch to baseBranch\n- Title should be concise (under 70 chars)\n- Body should include:\n - Summary of changes\n - Test plan or verification steps\n - References to issues (e.g., \"Closes #42\")\n\nExample:\ngithub_create_pr({\n title: \"Fix null pointer in UserService\",\n body: \"## Summary\\\\n- Fixed null check...\\\\n\\\\nCloses #42\",\n baseBranch: \"main\",\n headBranch: \"fix/issue-42\"\n})`,\n schema: z.object({\n title: z.string().describe('PR title (concise, under 70 chars)'),\n body: z.string().describe('PR description/body (markdown supported)'),\n baseBranch: z.string().describe('Base branch (usually \"main\" or \"master\")'),\n headBranch: z.string().describe('Head branch (your feature/fix branch)'),\n draft: z.boolean().optional().describe('Create as draft PR (default: false)'),\n }),\n }\n );\n\n /**\n * List repository issues\n */\n const github_list_issues = tool(\n async ({ state, labels, limit }) => {\n try {\n const result = await github.execute('listIssues', {\n state: state || 'open',\n labels: labels || [],\n limit: limit || 30,\n });\n\n if (!result.success) {\n return `Failed to list issues: ${result.error?.message}`;\n }\n\n const data = result.data as { issues: Array<{ number: number; title: string; state: string; labels: Array<{ name: string }> }> };\n const issues = data.issues;\n\n if (issues.length === 0) {\n return 'No issues found matching the criteria.';\n }\n\n const issueList = issues\n .map((issue) => {\n const labelsStr = issue.labels.map((l) => l.name).join(', ');\n return `#${issue.number}: ${issue.title} [${issue.state}]${labelsStr ? ` (${labelsStr})` : ''}`;\n })\n .join('\\n');\n\n return `Found ${issues.length} issue(s):\\n${issueList}`;\n } catch (error) {\n return `Error listing issues: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n {\n name: 'github_list_issues',\n description: `List repository issues from GitHub.\n\nUsage:\n- Lists issues with optional filters\n- Returns issue number, title, state, and labels\n- Useful for finding issues to work on\n\nExample:\ngithub_list_issues({ state: \"open\", labels: [\"bug\"], limit: 10 })`,\n schema: z.object({\n state: z.enum(['open', 'closed', 'all']).optional().describe('Issue state filter (default: \"open\")'),\n labels: z.array(z.string()).optional().describe('Filter by labels'),\n limit: z.number().optional().describe('Maximum number of issues to return (default: 30)'),\n }),\n }\n );\n\n /**\n * Get issue details\n */\n const github_get_issue = tool(\n async ({ issueNumber }) => {\n try {\n const result = await github.execute('getIssue', {\n issueNumber,\n });\n\n if (!result.success) {\n return `Failed to get issue: ${result.error?.message}`;\n }\n\n const data = result.data as {\n issue: {\n number: number;\n title: string;\n body: string | null;\n state: string;\n labels: Array<{ name: string }>;\n };\n comments: Array<{\n body: string;\n user: { login: string };\n created_at: string;\n }>;\n };\n\n const { issue, comments } = data;\n const labelsStr = issue.labels.map((l) => l.name).join(', ');\n\n let output = `Issue #${issue.number}: ${issue.title}\\n`;\n output += `State: ${issue.state}\\n`;\n if (labelsStr) {\n output += `Labels: ${labelsStr}\\n`;\n }\n output += `\\nDescription:\\n${issue.body || '(No description)'}\\n`;\n\n if (comments.length > 0) {\n output += `\\n${comments.length} Comment(s):\\n`;\n comments.forEach((comment) => {\n output += `\\n@${comment.user.login} (${comment.created_at}):\\n${comment.body}\\n`;\n });\n }\n\n return output;\n } catch (error) {\n return `Error getting issue: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n {\n name: 'github_get_issue',\n description: `Get detailed information about a specific issue.\n\nUsage:\n- Retrieves issue details including description and comments\n- Useful for understanding what needs to be fixed\n- Use this before working on an issue\n\nExample:\ngithub_get_issue({ issueNumber: 42 })`,\n schema: z.object({\n issueNumber: z.number().describe('Issue number to retrieve'),\n }),\n }\n );\n\n /**\n * Get PR review comments\n */\n const github_get_pr_comments = tool(\n async ({ prNumber }) => {\n try {\n const result = await github.execute('getPRComments', {\n prNumber,\n });\n\n if (!result.success) {\n return `Failed to get PR comments: ${result.error?.message}`;\n }\n\n const data = result.data as {\n comments: Array<{\n body: string;\n user: { login: string };\n created_at: string;\n }>;\n };\n\n const comments = data.comments;\n\n if (comments.length === 0) {\n return `No comments on PR #${prNumber}`;\n }\n\n let output = `${comments.length} Comment(s) on PR #${prNumber}:\\n`;\n comments.forEach((comment) => {\n output += `\\n@${comment.user.login} (${comment.created_at}):\\n${comment.body}\\n`;\n });\n\n return output;\n } catch (error) {\n return `Error getting PR comments: ${error instanceof Error ? error.message : String(error)}`;\n }\n },\n {\n name: 'github_get_pr_comments',\n description: `Get review comments on a pull request.\n\nUsage:\n- Retrieves all comments on a PR\n- Useful for addressing review feedback\n- Shows commenter and timestamp\n\nExample:\ngithub_get_pr_comments({ prNumber: 87 })`,\n schema: z.object({\n prNumber: z.number().describe('Pull request number'),\n }),\n }\n );\n\n return {\n github_clone,\n github_create_branch,\n github_commit,\n github_push,\n github_create_pr,\n github_list_issues,\n github_get_issue,\n github_get_pr_comments,\n };\n}\n\n/**\n * Create GitHub tools as array (for easy spreading into agent tools)\n */\nexport function createGitHubToolsArray(config: GitHubToolsConfig) {\n const tools = createGitHubTools(config);\n return Object.values(tools);\n}\n","/**\n * @almadar/agent Tools\n *\n * All agent tools for schema generation, validation, and management.\n *\n * @packageDocumentation\n */\n\n// Execute tool (no deps needed)\nexport { createExecuteTool, validateCommandPaths } from './execute.js';\n\n// Validate tool (no deps needed - shells to CLI)\nexport { createValidateSchemaTool } from './validate-schema.js';\n\n// Generate schema tool (uses @almadar/llm structured output directly)\nexport { createGenerateSchemaTool } from './generate-schema.js';\n\n// Finish task tool (uses internal combiner and domain converter)\nexport { createFinishTaskTool } from './finish-task.js';\n\n// Domain orbital tools (uses internal domain language converter)\nexport {\n createGenerateOrbitalDomainTool,\n createConstructCombinedDomainTool,\n createDomainOrbitalTools,\n type DomainOrbitalEventCallback,\n type DomainOrbitalCompleteCallback,\n type DomainOrbitalToolOptions,\n type DomainOrbitalSpec,\n} from './domain-orbital.js';\n\n// Orbital subagent tool (uses internal orbital generator)\nexport {\n createOrbitalSubagentTool,\n createSubagentEventWrapper,\n type SubagentEventCallback,\n type OrbitalCompleteCallback,\n type OrbitalRequirements,\n type OrbitalSubagentToolOptions,\n} from './orbital-subagent.js';\n\n// Trait subagent tool (uses @almadar/llm directly)\nexport {\n createTraitSubagentTool,\n createTraitEventWrapper,\n type TraitEventCallback,\n type TraitCompleteCallback,\n type TraitSubagentToolOptions,\n type TraitSpec,\n} from './trait-subagent.js';\n\n// Combine schemas tool (uses internal combiner)\nexport { createCombineSchemasTool } from './combine-schemas.js';\n\n// Schema chunking tools (no deps needed - uses @almadar/core)\nexport {\n createQuerySchemaStructureTool,\n createExtractChunkTool,\n createApplyChunkTool,\n createSchemaChunkingTools,\n} from './schema-chunking.js';\n\n// GitHub tools (uses @almadar/integrations)\nexport {\n createGitHubTools,\n createGitHubToolsArray,\n type GitHubToolsConfig,\n} from './github.js';\n\n// ============================================================================\n// Convenience Factory\n// ============================================================================\n\n// Import functions for use in createAgentTools\nimport { createExecuteTool } from './execute.js';\nimport { createValidateSchemaTool } from './validate-schema.js';\nimport { createGenerateSchemaTool } from './generate-schema.js';\nimport { createFinishTaskTool } from './finish-task.js';\nimport { createCombineSchemasTool } from './combine-schemas.js';\nimport { createOrbitalSubagentTool } from './orbital-subagent.js';\nimport { createTraitSubagentTool } from './trait-subagent.js';\nimport { createDomainOrbitalTools } from './domain-orbital.js';\nimport { createSchemaChunkingTools } from './schema-chunking.js';\n/**\n * Create all agent tools for a workspace.\n *\n * All dependencies are now internal to @almadar/agent - no dependency injection needed.\n *\n * @param workDir - Workspace directory\n * @returns All tools ready for use\n */\nexport function createAgentTools(workDir: string) {\n return {\n // Core tools\n execute: createExecuteTool(workDir),\n validateSchema: createValidateSchemaTool(workDir),\n\n // Schema generation (uses @almadar/llm structured output directly)\n generateSchema: createGenerateSchemaTool(),\n\n // Orbital tools (now use internal functions)\n finishTask: createFinishTaskTool(workDir),\n combineSchemas: createCombineSchemasTool(workDir),\n\n // Subagent tools (now use internal functions)\n orbitalSubagent: createOrbitalSubagentTool(),\n traitSubagent: createTraitSubagentTool(),\n\n // Domain tools (now use internal functions)\n domainOrbitalTools: createDomainOrbitalTools({ workDir }),\n\n // Chunking tools\n schemaChunking: createSchemaChunkingTools(workDir),\n\n };\n}\n"]}
|