@almadar/agent 3.5.3 → 3.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/gates/agentic/tools.d.ts +4 -3
- package/dist/gates/index.js +58 -10
- package/dist/gates/index.js.map +1 -1
- package/dist/gates/types.d.ts +12 -2
- package/package.json +2 -2
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { z } from 'zod';
|
|
18
18
|
import type { OrbitalSchema } from '@almadar/core/types';
|
|
19
|
-
export
|
|
19
|
+
export type GateClientProvider = 'deepseek' | 'qwen3.5' | 'gemma3-4b' | 'mistral-small';
|
|
20
|
+
export declare function createDecomposeAppTool(gateProvider?: GateClientProvider): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
20
21
|
prompt: z.ZodString;
|
|
21
22
|
}, "strip", z.ZodTypeAny, {
|
|
22
23
|
prompt: string;
|
|
@@ -36,7 +37,7 @@ export declare function createDecomposeAppTool(): import("@langchain/core/tools"
|
|
|
36
37
|
}[];
|
|
37
38
|
shellOrb: OrbitalSchema;
|
|
38
39
|
}, unknown, "decompose_app">;
|
|
39
|
-
export declare function createMatchBehaviorTool(): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
40
|
+
export declare function createMatchBehaviorTool(gateProvider?: GateClientProvider): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
40
41
|
description: z.ZodString;
|
|
41
42
|
orbitalName: z.ZodString;
|
|
42
43
|
entityName: z.ZodString;
|
|
@@ -61,7 +62,7 @@ export declare function createMatchBehaviorTool(): import("@langchain/core/tools
|
|
|
61
62
|
behaviorName: string | null;
|
|
62
63
|
hasGoldenOrb: boolean;
|
|
63
64
|
}, unknown, "match_behavior">;
|
|
64
|
-
export declare function createBuildOrbitalTool(workDir: string): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
65
|
+
export declare function createBuildOrbitalTool(workDir: string, gateProvider?: GateClientProvider): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
65
66
|
orbitalName: z.ZodString;
|
|
66
67
|
shellOrb: z.ZodString;
|
|
67
68
|
goldenBehavior: z.ZodOptional<z.ZodString>;
|
package/dist/gates/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import fs4 from 'fs';
|
|
2
2
|
import path4 from 'path';
|
|
3
|
-
import { extractJsonFromText,
|
|
3
|
+
import { extractJsonFromText, createOpenRouterClient, createDeepSeekClient } from '@almadar/llm';
|
|
4
4
|
import { getAllBehaviors } from '@almadar/std';
|
|
5
5
|
import { execSync } from 'child_process';
|
|
6
6
|
import { getDecompositionCompact, getBindingsCompact, getBindingContextRules, getOrbRenderUIGuide } from '@almadar/skills';
|
|
@@ -979,16 +979,37 @@ function createClientForProvider(config) {
|
|
|
979
979
|
...config.model ? { model: config.model } : {},
|
|
980
980
|
...config.temperature !== void 0 ? { temperature: config.temperature } : {}
|
|
981
981
|
};
|
|
982
|
+
let client;
|
|
982
983
|
switch (config.provider) {
|
|
983
984
|
case "deepseek":
|
|
984
|
-
|
|
985
|
+
client = createDeepSeekClient(opts);
|
|
986
|
+
break;
|
|
985
987
|
case "zhipu":
|
|
986
|
-
|
|
988
|
+
client = createOpenRouterClient({ model: "z-ai/glm-4.7", ...opts });
|
|
989
|
+
break;
|
|
990
|
+
case "qwen3.5":
|
|
991
|
+
client = createOpenRouterClient({ model: "qwen/qwen3.5-9b", ...opts });
|
|
992
|
+
break;
|
|
993
|
+
case "gemma3-4b":
|
|
994
|
+
client = createOpenRouterClient({ model: "google/gemma-3-4b-it", ...opts });
|
|
995
|
+
break;
|
|
996
|
+
case "mistral-small":
|
|
997
|
+
client = createOpenRouterClient({ model: "mistralai/mistral-small-3.1-24b-instruct", ...opts });
|
|
998
|
+
break;
|
|
987
999
|
default: {
|
|
988
1000
|
const _exhaustive = config.provider;
|
|
989
1001
|
throw new Error(`Unknown provider: ${_exhaustive}`);
|
|
990
1002
|
}
|
|
991
1003
|
}
|
|
1004
|
+
if (config.provider === "qwen3.5") {
|
|
1005
|
+
const originalCallRaw = client.callRaw.bind(client);
|
|
1006
|
+
const originalCallRawWithMetadata = client.callRawWithMetadata.bind(client);
|
|
1007
|
+
client.callRaw = (opts2) => originalCallRaw({ ...opts2, userPrompt: `/no_think
|
|
1008
|
+
${opts2.userPrompt}` });
|
|
1009
|
+
client.callRawWithMetadata = (opts2) => originalCallRawWithMetadata({ ...opts2, userPrompt: `/no_think
|
|
1010
|
+
${opts2.userPrompt}` });
|
|
1011
|
+
}
|
|
1012
|
+
return client;
|
|
992
1013
|
}
|
|
993
1014
|
function timeMs() {
|
|
994
1015
|
return performance.now();
|
|
@@ -1494,10 +1515,37 @@ function countNodes(tree) {
|
|
|
1494
1515
|
return count;
|
|
1495
1516
|
}
|
|
1496
1517
|
init_gate05_behavior_match();
|
|
1497
|
-
function
|
|
1518
|
+
function createGateClient(provider = "mistral-small") {
|
|
1519
|
+
let client;
|
|
1520
|
+
switch (provider) {
|
|
1521
|
+
case "qwen3.5":
|
|
1522
|
+
client = createOpenRouterClient({ model: "qwen/qwen3.5-9b" });
|
|
1523
|
+
break;
|
|
1524
|
+
case "gemma3-4b":
|
|
1525
|
+
client = createOpenRouterClient({ model: "google/gemma-3-4b-it" });
|
|
1526
|
+
break;
|
|
1527
|
+
case "mistral-small":
|
|
1528
|
+
client = createOpenRouterClient({ model: "mistralai/mistral-small-3.1-24b-instruct" });
|
|
1529
|
+
break;
|
|
1530
|
+
case "deepseek":
|
|
1531
|
+
default:
|
|
1532
|
+
client = createDeepSeekClient();
|
|
1533
|
+
break;
|
|
1534
|
+
}
|
|
1535
|
+
if (provider === "qwen3.5") {
|
|
1536
|
+
const originalCallRaw = client.callRaw.bind(client);
|
|
1537
|
+
const originalCallRawWithMetadata = client.callRawWithMetadata.bind(client);
|
|
1538
|
+
client.callRaw = (opts) => originalCallRaw({ ...opts, userPrompt: `/no_think
|
|
1539
|
+
${opts.userPrompt}` });
|
|
1540
|
+
client.callRawWithMetadata = (opts) => originalCallRawWithMetadata({ ...opts, userPrompt: `/no_think
|
|
1541
|
+
${opts.userPrompt}` });
|
|
1542
|
+
}
|
|
1543
|
+
return client;
|
|
1544
|
+
}
|
|
1545
|
+
function createDecomposeAppTool(gateProvider) {
|
|
1498
1546
|
return tool(
|
|
1499
1547
|
async (input) => {
|
|
1500
|
-
const client =
|
|
1548
|
+
const client = createGateClient(gateProvider);
|
|
1501
1549
|
const orb = await runGate0(client, input.prompt);
|
|
1502
1550
|
return {
|
|
1503
1551
|
appName: orb.name,
|
|
@@ -1519,10 +1567,10 @@ function createDecomposeAppTool() {
|
|
|
1519
1567
|
}
|
|
1520
1568
|
);
|
|
1521
1569
|
}
|
|
1522
|
-
function createMatchBehaviorTool() {
|
|
1570
|
+
function createMatchBehaviorTool(gateProvider) {
|
|
1523
1571
|
return tool(
|
|
1524
1572
|
async (input) => {
|
|
1525
|
-
const client =
|
|
1573
|
+
const client = createGateClient(gateProvider);
|
|
1526
1574
|
const shellOrb = {
|
|
1527
1575
|
orbitals: [{
|
|
1528
1576
|
name: input.orbitalName,
|
|
@@ -1549,10 +1597,10 @@ function createMatchBehaviorTool() {
|
|
|
1549
1597
|
}
|
|
1550
1598
|
);
|
|
1551
1599
|
}
|
|
1552
|
-
function createBuildOrbitalTool(workDir) {
|
|
1600
|
+
function createBuildOrbitalTool(workDir, gateProvider) {
|
|
1553
1601
|
return tool(
|
|
1554
1602
|
async (input) => {
|
|
1555
|
-
const client =
|
|
1603
|
+
const client = createGateClient(gateProvider);
|
|
1556
1604
|
const orbitalsDir = path4.join(workDir, ".orbitals");
|
|
1557
1605
|
fs4.mkdirSync(orbitalsDir, { recursive: true });
|
|
1558
1606
|
let shellOrb;
|
|
@@ -1676,7 +1724,7 @@ var BEHAVIOR_FUNCTIONS = {};
|
|
|
1676
1724
|
async function loadBehaviorFunctions() {
|
|
1677
1725
|
if (Object.keys(BEHAVIOR_FUNCTIONS).length > 0) return;
|
|
1678
1726
|
try {
|
|
1679
|
-
const fns = await import('@almadar/std/behaviors/functions
|
|
1727
|
+
const fns = await import('@almadar/std/behaviors/functions');
|
|
1680
1728
|
const mapping = {
|
|
1681
1729
|
// Molecules: CRUD/Data
|
|
1682
1730
|
"std-list": "stdList",
|
package/dist/gates/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/gates/gate05-behavior-match.ts","../../src/evals/utils/orbital-validate.ts","../../src/gates/prompts.ts","../../src/gates/gate0-application.ts","../../src/gates/orchestrator.ts","../../src/gates/merge.ts","../../src/gates/gate1-orbital.ts","../../src/gates/gate2-trait.ts","../../src/gates/gate3-transition.ts","../../src/gates/gate4-render-ui.ts","../../src/gates/index.ts","../../src/gates/behavior-extract.ts","../../src/gates/scoring.ts","../../src/gates/agentic/tools.ts"],"names":["path","fs","extractJsonFromText","tr","createDeepSeekClient"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Gate 0.5: Behavior Matching\n *\n * Given the shell .orb from Gate 0, asks the LLM to select the best-matching\n * golden behavior from @almadar/std. Loads the matched behavior's exported\n * .orb file (full OrbitalSchema with entities, state machines, render-ui)\n * as the goldenOrb for Gates 1-4.\n *\n * Only runs in guided mode. Skipped entirely in pure mode.\n *\n * @packageDocumentation\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport { getAllBehaviors } from '@almadar/std';\nimport type { OrbitalSchema } from '@almadar/core/types';\nimport type { GateOpts } from './types.js';\n\n// ============================================================================\n// Behavior Catalog (built once, cached)\n// ============================================================================\n\nlet cachedCatalog: string | null = null;\n\nfunction getBehaviorCatalog(): string {\n if (cachedCatalog) return cachedCatalog;\n\n const all = getAllBehaviors() as Array<Record<string, unknown>>;\n const lines = all.map((b) => {\n const name = String(b.name || '');\n const desc = String(b.description || '');\n const states = Array.isArray(b.states) ? b.states.length : 0;\n const events = Array.isArray(b.events) ? b.events.length : 0;\n return `- ${name}: ${desc} (${states} states, ${events} events)`;\n });\n cachedCatalog = lines.join('\\n');\n return cachedCatalog;\n}\n\n// ============================================================================\n// .orb File Loader\n// ============================================================================\n\n/**\n * Find the behaviors/exports/ directory relative to @almadar/std.\n * Works whether std is in node_modules or linked locally.\n */\nfunction findExportsDir(): string | null {\n // Try monorepo path first\n const monorepoPath = path.resolve(\n path.dirname(new URL(import.meta.url).pathname),\n '../../../almadar-std/behaviors/exports',\n );\n if (fs.existsSync(monorepoPath)) return monorepoPath;\n\n // Try node_modules\n try {\n const stdPkg = path.dirname(require.resolve('@almadar/std/package.json'));\n const nmPath = path.join(stdPkg, 'behaviors', 'exports');\n if (fs.existsSync(nmPath)) return nmPath;\n } catch {\n // require.resolve failed\n }\n\n return null;\n}\n\nexport { loadGoldenOrb as loadGoldenOrbByName };\n\nfunction loadGoldenOrb(behaviorName: string): OrbitalSchema | null {\n const exportsDir = findExportsDir();\n if (!exportsDir) {\n console.warn('[Gate 0.5] Cannot find behaviors/exports/ directory');\n return null;\n }\n\n const orbPath = path.join(exportsDir, `${behaviorName}.orb`);\n if (!fs.existsSync(orbPath)) {\n console.warn(`[Gate 0.5] .orb file not found: ${orbPath}`);\n return null;\n }\n\n const content = fs.readFileSync(orbPath, 'utf-8');\n return JSON.parse(content) as OrbitalSchema;\n}\n\n// ============================================================================\n// Prompts\n// ============================================================================\n\nfunction buildMatchSystemPrompt(): string {\n return `You are a behavior matching assistant. Given an application description and its orbital structure, select the most relevant golden behavior from the catalog below.\n\nThe catalog contains 107 standard behaviors. Each behavior is a proven, production-quality .orb program that handles a specific interaction pattern (CRUD lists, forms, search, cart, booking, etc.).\n\nYour task: pick the ONE behavior that best matches the application's primary interaction pattern. If no behavior is a close match, respond with \"none\".\n\nRespond with ONLY valid JSON: { \"match\": \"std-behavior-name\" } or { \"match\": \"none\" }\nNo markdown, no explanation.`;\n}\n\nfunction buildMatchUserPrompt(\n prompt: string,\n orb: OrbitalSchema,\n): string {\n const orbitalNames = orb.orbitals.map((o) => {\n const name = (o as { name: string }).name;\n return name;\n });\n\n return `Application: ${prompt}\n\nOrbitals produced by Gate 0: ${orbitalNames.join(', ')}\n\nBehavior catalog:\n${getBehaviorCatalog()}`;\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\nexport interface BehaviorMatchResult {\n matchedName: string | null;\n goldenOrb: OrbitalSchema | null;\n}\n\n/**\n * Match the prompt against golden behaviors via LLM.\n * Loads the matched behavior's exported .orb file as goldenOrb.\n */\nexport async function runGate05(\n client: LLMClient,\n prompt: string,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n): Promise<BehaviorMatchResult> {\n const systemPrompt = buildMatchSystemPrompt();\n const userPrompt = buildMatchUserPrompt(prompt, orb);\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 256,\n });\n\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n console.warn('[Gate 0.5] Failed to parse match response, falling back to pure mode');\n return { matchedName: null, goldenOrb: null };\n }\n\n const obj = JSON.parse(parsed) as Record<string, unknown>;\n const matchName = String(obj.match || 'none');\n\n if (matchName === 'none') {\n console.log('[Gate 0.5] No behavior match found, using pure mode');\n return { matchedName: null, goldenOrb: null };\n }\n\n // Load the full .orb file from behaviors/exports/\n const goldenOrb = loadGoldenOrb(matchName);\n if (!goldenOrb) {\n console.warn(`[Gate 0.5] Matched \"${matchName}\" but could not load .orb file`);\n return { matchedName: matchName, goldenOrb: null };\n }\n\n console.log(`[Gate 0.5] Matched behavior: ${matchName}`);\n return { matchedName: matchName, goldenOrb };\n}\n","/**\n * Orbital CLI Validation Utility\n *\n * Shells out to `orbital validate --json <file>` for real schema validation.\n * The CLI always exits 0 and outputs JSON with validation results.\n *\n * @packageDocumentation\n */\n\nimport { execSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst ORBITAL_BINARY = '/home/osamah/bin/orbital';\n\nexport interface OrbitalValidationError {\n code: string;\n path: string;\n message: string;\n suggestion?: string;\n}\n\nexport interface OrbitalValidationStats {\n orbitals: number;\n entities: number;\n traits: number;\n pages: number;\n}\n\nexport interface OrbitalValidationResult {\n valid: boolean;\n errors: OrbitalValidationError[];\n stats?: OrbitalValidationStats;\n}\n\n/**\n * Validate an orbital schema using the `orbital validate` CLI.\n *\n * @param schema - JSON schema object or JSON string\n * @param workDir - Directory to write the temp .orb file\n * @returns Validation result with errors and stats\n */\nexport function validateWithOrbitalCLI(\n schema: unknown,\n workDir: string\n): OrbitalValidationResult {\n // Check if binary exists\n if (!fs.existsSync(ORBITAL_BINARY)) {\n return {\n valid: false,\n errors: [{ code: 'CLI_NOT_FOUND', path: '', message: `orbital binary not found at ${ORBITAL_BINARY}` }],\n };\n }\n\n // Write schema to temp file\n const schemaStr = typeof schema === 'string' ? schema : JSON.stringify(schema, null, 2);\n const tempPath = path.join(workDir, `_eval_validate_${Date.now()}.orb`);\n\n try {\n fs.writeFileSync(tempPath, schemaStr);\n\n const output = execSync(`${ORBITAL_BINARY} validate --json \"${tempPath}\"`, {\n encoding: 'utf-8',\n timeout: 30_000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n const result = JSON.parse(extractJson(output)) as OrbitalValidationResult;\n return result;\n } catch (error: unknown) {\n // CLI may write JSON to stdout even on failure\n const err = error as { stdout?: string; stderr?: string; message?: string };\n if (err.stdout) {\n try {\n return JSON.parse(extractJson(err.stdout)) as OrbitalValidationResult;\n } catch {\n // stdout wasn't JSON\n }\n }\n\n return {\n valid: false,\n errors: [{\n code: 'CLI_ERROR',\n path: '',\n message: err.stderr?.trim() || err.message || 'Unknown CLI error',\n }],\n };\n } finally {\n // Clean up temp file\n try {\n fs.unlinkSync(tempPath);\n } catch {\n // ignore cleanup errors\n }\n }\n}\n\n/**\n * Extract the validation JSON from CLI output.\n * The CLI prints: DEBUG lines, echoed schema, then the validation JSON object.\n * We find the JSON object containing `\"valid\"` by extracting all top-level\n * balanced JSON objects and returning the one with a `valid` field.\n */\nfunction extractJson(raw: string): string {\n const objects: string[] = [];\n let i = 0;\n\n while (i < raw.length) {\n if (raw[i] === '{') {\n let depth = 0;\n let inString = false;\n let escape = false;\n const start = i;\n\n for (; i < raw.length; i++) {\n const ch = raw[i];\n if (escape) { escape = false; continue; }\n if (ch === '\\\\' && inString) { escape = true; continue; }\n if (ch === '\"') { inString = !inString; continue; }\n if (inString) continue;\n if (ch === '{') depth++;\n if (ch === '}') {\n depth--;\n if (depth === 0) {\n objects.push(raw.slice(start, i + 1));\n i++;\n break;\n }\n }\n }\n } else {\n i++;\n }\n }\n\n // Return the object containing \"valid\" (the validation result)\n for (const obj of objects) {\n if (obj.includes('\"valid\"')) return obj;\n }\n\n // Fallback: return last object (most likely the result)\n if (objects.length > 0) return objects[objects.length - 1];\n return raw.trim();\n}\n","/**\n * Gate Prompt Builders\n *\n * Each gate gets a minimal, focused system prompt containing ONLY the knowledge\n * that gate needs. No shared architecture dumps across gates.\n *\n * Generator functions from @almadar/skills derive content from source packages\n * so prompts update automatically when patterns/bindings/rules change.\n *\n * @packageDocumentation\n */\n\nimport type {\n OrbitalDefinition,\n Trait,\n Transition,\n Entity,\n StateMachine,\n} from '@almadar/core/types';\nimport {\n getDecompositionCompact,\n getBindingsCompact,\n getBindingContextRules,\n getOrbRenderUIGuide,\n} from '@almadar/skills';\n\n// ============================================================================\n// Gate 0: Application Decomposition\n// ============================================================================\n\nexport function buildGate0SystemPrompt(): string {\n const decomposition = getDecompositionCompact();\n\n return `You are an application architect. Given a natural language description, produce a shell .orb JSON schema.\n\n${decomposition}\n\nYour output must be a JSON object with:\n- name: PascalCase application name\n- version: \"1.0.0\"\n- orbitals: array of orbital shells\n\nEach orbital shell:\n- name: PascalCase ending in \"Orbital\" (e.g., \"TaskOrbital\")\n- entity: { name: PascalCase singular noun, fields: [{ name: \"id\", type: \"string\", required: true }] }\n- traits: [{ name: PascalCase, linkedEntity: entityName, category: \"interaction\", stateMachine: { states: [{ name: \"idle\", isInitial: true }], events: [], transitions: [] } }]\n- pages: [{ name: PascalCase, path: \"/lowercase\", traits: [{ ref: \"TraitName\" }] }]\n\nRules:\n- ONE orbital per entity type\n- Every orbital must have at least one trait\n- Keep it minimal: only the orbitals truly needed\n- Do NOT fill in entity fields (Gate 1 does that)\n- Do NOT fill in state machines (Gate 2 does that)\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport function buildGate0UserPrompt(\n prompt: string,\n guidedData?: { orbitalCount: number; entityNames: string[]; traitNames: string[] },\n): string {\n let userPrompt = `Decompose this application into an .orb schema:\\n\\n${prompt}`;\n\n if (guidedData) {\n userPrompt += `\\n\\nReference structure (use as guide):\n- ${guidedData.orbitalCount} orbital(s)\n- Entities: ${guidedData.entityNames.join(', ')}\n- Traits: ${guidedData.traitNames.join(', ')}`;\n }\n\n return userPrompt;\n}\n\n// ============================================================================\n// Gate 1: Orbital Structure (Entity Fields + Persistence)\n// ============================================================================\n\nexport function buildGate1SystemPrompt(): string {\n return `You are an entity designer. Given an orbital shell, enrich it with full entity fields, persistence, and page details. Do NOT modify the state machine (Gate 2 fills that).\n\nYour output must be a JSON object with:\n- name: keep unchanged\n- entity:\n - name: keep unchanged\n - persistence: \"persistent\" (survives sessions, needs collection), \"runtime\" (transient), or \"singleton\" (app-wide config)\n - collection: snake_case plural (only for persistent entities, e.g., \"cart_items\")\n - fields: array of { name, type, required?, default? }\n - First field MUST be { name: \"id\", type: \"string\", required: true }\n - Valid types: \"string\", \"number\", \"boolean\", \"object\", \"array\"\n - Include ALL fields the entity needs (status, timestamps, amounts, references, etc.)\n- traits: keep unchanged (shell state machine, Gate 2 fills it)\n- pages: [{ name: PascalCase, path: \"/lowercase\", isInitial?, traits: [{ ref: \"TraitName\" }] }]\n - EVERY page MUST have a traits array binding it to the orbital's trait(s)\n - Without traits, the page renders blank (runtime doesn't know which trait to activate)\n\nRules:\n- Think about what fields this entity genuinely needs for its domain\n- Include status fields (e.g., \"status\": \"string\") for entities with lifecycle states\n- Include amount/count fields (e.g., \"total\": \"number\") for entities with calculations\n- Include timestamp fields (e.g., \"createdAt\": \"string\") for auditable entities\n- Do NOT touch the stateMachine. Return it exactly as received.\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport function buildGate1UserPrompt(\n orbital: OrbitalDefinition,\n allOrbitals: OrbitalDefinition[],\n guidedOrbital?: OrbitalDefinition,\n): string {\n let userPrompt = `Enrich this orbital with full entity fields and pages:\n${JSON.stringify(orbital, null, 2)}\n\nOther orbitals in this application (for cross-orbital context):\n${JSON.stringify(allOrbitals.filter((o) => o.name !== orbital.name), null, 2)}`;\n\n if (guidedOrbital) {\n userPrompt += `\\n\\nReference (use as guide):\n${JSON.stringify(guidedOrbital, null, 2)}`;\n }\n\n return userPrompt;\n}\n\n// ============================================================================\n// Gate 2: State Machine + Slot Assignments\n// ============================================================================\n\nexport function buildGate2SystemPrompt(): string {\n return `You are a state machine designer. Given a trait and its entity, design the state machine topology and assign UI slot presentations per state.\n\nYour output must be a JSON object with:\n- name: keep unchanged\n- linkedEntity: keep unchanged\n- category: \"interaction\"\n- stateMachine:\n - states: [{ name: camelCase, isInitial?: true }]\n - events: [{ key: \"UPPER_SNAKE_CASE\", name: \"Human Label\", payloadSchema?: [{ name, type }] }]\n - transitions: [{ from, event, to, effects: [] }]\n- ui: { \"stateName\": { \"presentation\": \"inline\" | \"modal\" }, ... }\n\nState Machine Rules:\n- Exactly ONE state must have isInitial: true (typically \"idle\" or \"browsing\")\n- Every state must be reachable from the initial state\n- Every event must be used in at least one transition\n- The initial state MUST have an INIT self-loop transition (idle->INIT->idle or browsing->INIT->browsing)\n- Leave effects as empty arrays (Gate 3 fills these)\n\nUI Slot Assignment Rules:\n- Assign \"inline\" to primary view states (idle, browsing, listing, viewing)\n- Assign \"modal\" to overlay action states (creating, editing, deleting, confirming)\n- Every state MUST have an assignment in the ui object\n- Every \"modal\" state MUST have BOTH a CLOSE and CANCEL transition back to an \"inline\" state\n\nTypical CRUD state machine pattern:\n- idle/browsing (inline): main list view, INIT self-loop\n- creating (modal): opened by CREATE event, closed by SAVE/CANCEL/CLOSE\n- editing (modal): opened by EDIT event, closed by SAVE/CANCEL/CLOSE\n- deleting (modal): opened by DELETE event, closed by CONFIRM_DELETE/CANCEL/CLOSE\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport function buildGate2UserPrompt(\n trait: Trait,\n entity: Entity,\n orbitalDescription: string,\n guidedTrait?: Trait,\n): string {\n let userPrompt = `Design the state machine for trait:\n${JSON.stringify(trait, null, 2)}\n\nEntity it manages:\n${JSON.stringify(entity, null, 2)}\n\nOrbital context: ${orbitalDescription}`;\n\n if (guidedTrait) {\n userPrompt += `\\n\\nReference (use as guide):\n${JSON.stringify(guidedTrait, null, 2)}`;\n }\n\n return userPrompt;\n}\n\n// ============================================================================\n// Gate 3: Transition Effects (Guards + Data Effects)\n// ============================================================================\n\nexport function buildGate3SystemPrompt(): string {\n const bindingsCompact = getBindingsCompact();\n const bindingContextRules = getBindingContextRules();\n\n return `You are a transition effect designer. Given a transition, add guards and data effects.\n\n${bindingsCompact}\n\n${bindingContextRules}\n\nYour output must be a JSON object with:\n- from: keep unchanged\n- event: keep unchanged\n- to: keep unchanged\n- guard: s-expression array or null\n Example: [\"and\", [\"not\", [\"eq\", \"@entity.status\", \"locked\"]], [\"gt\", \"@entity.count\", 0]]\n- effects: array of effect tuples\n\nEffect types (use ONLY these four):\n- [\"set\", \"@entity.fieldName\", value] - Set entity field. Value: \"@payload.field\", \"@now\", or literal.\n- [\"fetch\", \"EntityName\"] - Load entity data. Use in INIT transitions.\n- [\"persist\", \"create\"|\"update\"|\"delete\", \"EntityName\", \"@payload.data\"] - CRUD entity records.\n- [\"notify\", \"message\", \"success\"|\"error\"|\"info\"] - Show a notification.\n\nBANNED effects: call-service, emit, log, navigate.\n\nRules:\n- Guards are optional. Only add when the transition genuinely needs a precondition.\n- INIT transitions: include [\"fetch\", \"EntityName\"]\n- SAVE transitions (from creating): include [\"persist\", \"create\", \"EntityName\", \"@payload.data\"]\n- SAVE transitions (from editing): include [\"persist\", \"update\", \"EntityName\", \"@payload.data\"]\n- CONFIRM_DELETE transitions: include [\"persist\", \"delete\", \"EntityName\", \"@payload.data\"]\n- set target MUST start with @entity (never @payload)\n- Do NOT include render-ui effects (Gate 4 handles those)\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport function buildGate3UserPrompt(\n transition: Transition,\n entity: Entity,\n sm: StateMachine,\n guidedTransition?: Transition,\n): string {\n let userPrompt = `Design effects for transition:\n${transition.from} --[${transition.event}]--> ${transition.to}\n\nEntity: ${JSON.stringify(entity, null, 2)}\nAll states: ${sm.states.map((s) => s.name).join(', ')}\nAll events: ${JSON.stringify(sm.events, null, 2)}`;\n\n if (guidedTransition) {\n userPrompt += `\\n\\nReference (use as guide):\n${JSON.stringify(guidedTransition, null, 2)}`;\n }\n\n return userPrompt;\n}\n\n// ============================================================================\n// Gate 4: Render UI\n// ============================================================================\n\nexport function buildGate4SystemPrompt(): string {\n const orbGuide = getOrbRenderUIGuide();\n\n return `You are a UI designer. Given a transition with its effects, produce the render-ui pattern tree.\n\n${orbGuide}\n\nYour output must be a JSON object with:\n- renderEffects: [{ slot, tree }]\n - slot: \"main\" or \"modal\" (determined by the state's slot assignment shown in the user prompt)\n - tree: pattern composition object, or null (to clear a slot)\n\nSlot Rules:\n- Use the slot shown in the user prompt for the target state (main or modal)\n- When exiting a modal state (the user prompt will say so), you MUST include:\n 1. { \"slot\": \"modal\", \"tree\": null } to clear the modal\n 2. { \"slot\": \"main\", \"tree\": { ... } } to render the main view\n\nBinding Rules:\n- Bindings are ONLY paths: @entity.name, @entity.price (NO expressions like @entity.x <= 0)\n- Each prop value must contain at most ONE binding. NEVER concatenate: \"@entity.price @entity.currency\" is INVALID\n- For combined display, use separate typography elements or static labels\n- button event props must match state machine event keys\n\nPattern Rules:\n- Use ONLY props that exist on the pattern. Do NOT invent props.\n- data-list: entity, itemActions, emptyState (NOT emptyIcon, emptyTitle)\n- button: label, variant, event, icon, size (NOT disabled)\n- card: children (NOT padding, bg, border, use box for those)\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport interface SlotContext {\n stateSlots: Record<string, 'main' | 'modal'>;\n exitsModal: boolean;\n}\n\nexport function buildGate4UserPrompt(\n transition: Transition,\n entity: Entity,\n targetStateName: string,\n sm: StateMachine,\n slotContext: SlotContext,\n guidedRenderEffects?: Array<{ slot: string; tree: Record<string, unknown> }>,\n): string {\n const targetSlot = slotContext.stateSlots[targetStateName] || 'main';\n const fromSlot = slotContext.stateSlots[transition.from] || 'main';\n\n let userPrompt = `Design the UI for state \"${targetStateName}\" (renders to \"${targetSlot}\" slot):\n\nTransition: ${transition.from} (${fromSlot}) --[${transition.event}]--> ${transition.to} (${targetSlot})\nCurrent effects: ${JSON.stringify(transition.effects || [], null, 2)}\nEntity: ${JSON.stringify(entity, null, 2)}\nAll states with slots: ${Object.entries(slotContext.stateSlots).map(([s, slot]) => `${s}(${slot})`).join(', ')}`;\n\n if (slotContext.exitsModal) {\n userPrompt += `\\n\\nIMPORTANT: This transition exits a modal state. You MUST include:\n1. { \"slot\": \"modal\", \"tree\": null } to clear the modal overlay\n2. { \"slot\": \"main\", \"tree\": { ... } } to render the main view`;\n }\n\n if (guidedRenderEffects) {\n userPrompt += `\\n\\nReference render-ui (use as guide):\n${JSON.stringify(guidedRenderEffects, null, 2)}`;\n }\n\n return userPrompt;\n}\n","/**\n * Gate 0: Application Decomposition\n *\n * NL prompt -> shell OrbitalSchema (orbital names, entity name + id field,\n * trait names with empty state machines, pages).\n * Single LLM call with fresh context.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate0SystemPrompt, buildGate0UserPrompt } from './prompts.js';\n\n// ============================================================================\n// Default Theme\n// ============================================================================\n\nconst DEFAULT_THEME = {\n name: 'default',\n tokens: {\n colors: {\n primary: '#6366f1',\n 'primary-hover': '#4f46e5',\n 'primary-foreground': '#ffffff',\n accent: '#ec4899',\n 'accent-foreground': '#ffffff',\n success: '#22c55e',\n warning: '#f59e0b',\n error: '#ef4444',\n },\n },\n};\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\nfunction normalizeOrbital(raw: Record<string, unknown>): OrbitalDefinition {\n const name = String(raw.name || 'Orbital');\n\n // Normalize entity\n const entityRaw = (raw.entity as Record<string, unknown>) || {};\n const entityName = String(entityRaw.name || name.replace(/Orbital$/i, ''));\n const fields = Array.isArray(entityRaw.fields) ? entityRaw.fields : [];\n const hasId = fields.some((f: Record<string, unknown>) => f.name === 'id');\n\n const entity = {\n name: entityName,\n fields: hasId\n ? fields.map((f: Record<string, unknown>) => ({\n name: String(f.name),\n type: String(f.type || 'string'),\n ...(f.required ? { required: true } : {}),\n }))\n : [\n { name: 'id', type: 'string', required: true },\n ...fields.map((f: Record<string, unknown>) => ({\n name: String(f.name),\n type: String(f.type || 'string'),\n ...(f.required ? { required: true } : {}),\n })),\n ],\n };\n\n // Normalize traits\n const traitsRaw = Array.isArray(raw.traits) ? raw.traits : [];\n const traits = traitsRaw.length > 0\n ? traitsRaw.map((t: Record<string, unknown>) => ({\n name: String(t.name || `${entityName}Control`),\n linkedEntity: String(t.linkedEntity || entityName),\n category: 'interaction' as const,\n stateMachine: {\n states: [{ name: 'idle', isInitial: true }],\n events: [] as Array<{ key: string; name: string }>,\n transitions: [] as Array<{ from: string; event: string; to: string }>,\n },\n }))\n : [{\n name: `${entityName}Control`,\n linkedEntity: entityName,\n category: 'interaction' as const,\n stateMachine: {\n states: [{ name: 'idle', isInitial: true }],\n events: [] as Array<{ key: string; name: string }>,\n transitions: [] as Array<{ from: string; event: string; to: string }>,\n },\n }];\n\n // Normalize pages - ensure every page has traits refs\n const traitNames = traits.map((t) => t.name);\n const pagesRaw = Array.isArray(raw.pages) ? raw.pages : [];\n const defaultTraits = traitNames.map((n) => ({ ref: n }));\n const pages = pagesRaw.length > 0\n ? pagesRaw.map((p: Record<string, unknown>) => ({\n name: String(p.name || name.replace(/Orbital$/i, '')),\n path: String(p.path || p.route || `/${name.toLowerCase().replace(/orbital$/i, '')}`),\n ...(p.isInitial ? { isInitial: true } : {}),\n traits: Array.isArray(p.traits) ? p.traits : defaultTraits,\n }))\n : [{\n name: name.replace(/Orbital$/i, ''),\n path: `/${name.toLowerCase().replace(/orbital$/i, '')}`,\n traits: defaultTraits,\n }];\n\n return { name, entity, traits, pages } as OrbitalDefinition;\n}\n\nfunction parseGate0Response(raw: string): OrbitalSchema {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n throw new Error(`Gate 0: failed to parse JSON from response: ${raw.slice(0, 200)}`);\n }\n\n const obj = JSON.parse(parsed) as Record<string, unknown>;\n\n const appName = String(obj.name || obj.appName || 'App');\n const version = String(obj.version || '1.0.0');\n const orbitalsRaw = Array.isArray(obj.orbitals) ? obj.orbitals : [];\n\n return {\n name: appName,\n version,\n design: { theme: DEFAULT_THEME } as OrbitalSchema['design'],\n orbitals: orbitalsRaw.map((o: Record<string, unknown>) => normalizeOrbital(o)),\n };\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\nexport async function runGate0(\n client: LLMClient,\n prompt: string,\n opts: GateOpts = {},\n behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate0SystemPrompt();\n const userPrompt = buildGate0UserPrompt(\n prompt,\n behaviorData?.appLevel,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 4096,\n });\n\n return parseGate0Response(raw);\n}\n","/**\n * Orchestrator\n *\n * Simple chain: gate0 → gate1 → gate2 → gate3 → gate4 → validate.\n * Each gate accepts an OrbitalSchema and returns an enriched OrbitalSchema.\n *\n * @packageDocumentation\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport {\n createDeepSeekClient,\n createOpenRouterClient,\n type LLMClient,\n} from '@almadar/llm';\nimport { validateWithOrbitalCLI } from '../evals/utils/orbital-validate.js';\nimport type {\n GatePipelineConfig,\n GatePipelineResult,\n GateOpts,\n GateTimings,\n BehaviorGateData,\n VerifyResult,\n} from './types.js';\nimport type { OrbitalSchema } from '@almadar/core/types';\nimport { runGate0 } from './gate0-application.js';\nimport { runGate05 } from './gate05-behavior-match.js';\nimport { runGate1 } from './gate1-orbital.js';\nimport { runGate2 } from './gate2-trait.js';\nimport { runGate3 } from './gate3-transition.js';\nimport { runGate4 } from './gate4-render-ui.js';\n\n// ============================================================================\n// Client Factory\n// ============================================================================\n\nfunction createClientForProvider(config: GatePipelineConfig): LLMClient {\n const opts = {\n ...(config.model ? { model: config.model } : {}),\n ...(config.temperature !== undefined ? { temperature: config.temperature } : {}),\n };\n\n switch (config.provider) {\n case 'deepseek':\n return createDeepSeekClient(opts);\n case 'zhipu':\n return createOpenRouterClient({ model: 'z-ai/glm-4.7', ...opts });\n default: {\n const _exhaustive: never = config.provider;\n throw new Error(`Unknown provider: ${_exhaustive}`);\n }\n }\n}\n\n// ============================================================================\n// Timing Helper\n// ============================================================================\n\nfunction timeMs(): number {\n return performance.now();\n}\n\n// ============================================================================\n// Pipeline\n// ============================================================================\n\n/**\n * Run the full gated construction pipeline.\n *\n * Flow:\n * orb0 = gate0(prompt) → orb1 = gate1(orb0) → orb2 = gate2(orb1)\n * → orb3 = gate3(orb2) → orbFinal = gate4(orb3) → validate(orbFinal)\n */\nexport async function runGatePipeline(\n prompt: string,\n config: GatePipelineConfig,\n behaviorData?: BehaviorGateData,\n goldenOrb?: OrbitalSchema,\n): Promise<GatePipelineResult> {\n const client = createClientForProvider(config);\n const maxTokens = config.maxTokens || 4096;\n const pipelineStart = timeMs();\n\n const opts: GateOpts = {\n maxTokens,\n goldenOrb,\n workDir: config.workDir,\n };\n\n // ── Gate 0: prompt → shell .orb ──\n const g0Start = timeMs();\n const orbAfterGate0 = await runGate0(client, prompt, opts, behaviorData);\n const g0Ms = timeMs() - g0Start;\n console.log(`[Gate 0] ${orbAfterGate0.name}: ${orbAfterGate0.orbitals.length} orbital(s) (${g0Ms.toFixed(0)}ms)`);\n maybeValidate(config, orbAfterGate0, 0);\n\n // ── Gate 0.5: behavior matching (guided mode only) ──\n if (config.mode === 'guided' && !goldenOrb) {\n const g05Start = timeMs();\n const matchResult = await runGate05(client, prompt, orbAfterGate0, opts);\n const g05Ms = timeMs() - g05Start;\n if (matchResult.goldenOrb) {\n opts.goldenOrb = matchResult.goldenOrb;\n console.log(`[Gate 0.5] Matched: ${matchResult.matchedName} (${g05Ms.toFixed(0)}ms)`);\n } else {\n console.log(`[Gate 0.5] No match, continuing in pure mode (${g05Ms.toFixed(0)}ms)`);\n }\n }\n\n // ── Gate 1: enrich orbitals ──\n const g1Start = timeMs();\n const orbAfterGate1 = await runGate1(client, orbAfterGate0, opts, behaviorData);\n const g1Ms = timeMs() - g1Start;\n console.log(`[Gate 1] Enriched ${orbAfterGate1.orbitals.length} orbital(s) (${g1Ms.toFixed(0)}ms)`);\n maybeValidate(config, orbAfterGate1, 1);\n\n // ── Gate 2: fill state machines ──\n const g2Start = timeMs();\n const orbAfterGate2 = await runGate2(client, orbAfterGate1, opts, behaviorData);\n const g2Ms = timeMs() - g2Start;\n console.log(`[Gate 2] State machines filled (${g2Ms.toFixed(0)}ms)`);\n maybeValidate(config, orbAfterGate2, 2);\n\n // ── Gate 3: guards + effects ──\n const g3Start = timeMs();\n const orbAfterGate3 = await runGate3(client, orbAfterGate2, opts, behaviorData);\n const g3Ms = timeMs() - g3Start;\n console.log(`[Gate 3] Guards + effects filled (${g3Ms.toFixed(0)}ms)`);\n maybeValidate(config, orbAfterGate3, 3);\n\n // ── Gate 4: render-ui ──\n const g4Start = timeMs();\n const orbFinal = await runGate4(client, orbAfterGate3, opts, behaviorData);\n const g4Ms = timeMs() - g4Start;\n console.log(`[Gate 4] Render-ui appended (${g4Ms.toFixed(0)}ms)`);\n\n // ── Validate final .orb ──\n fs.mkdirSync(config.workDir, { recursive: true });\n const validation = validateWithOrbitalCLI(orbFinal, config.workDir);\n console.log(`[Validate] valid=${validation.valid}, errors=${(validation.errors || []).length}`);\n\n // ── Verify (compile + server + browser) ──\n let verify: VerifyResult | undefined;\n if (config.verify) {\n verify = await runVerify(orbFinal, config);\n }\n\n const totalMs = timeMs() - pipelineStart;\n console.log(`[Pipeline] Total: ${(totalMs / 1000).toFixed(1)}s`);\n\n const timings: GateTimings = {\n gate0Ms: g0Ms,\n gate1Ms: [g1Ms],\n gate2Ms: [g2Ms],\n gate3Ms: [g3Ms],\n gate4Ms: [g4Ms],\n totalMs,\n };\n\n return {\n config,\n orbAfterGate0,\n orbAfterGate1,\n orbAfterGate2,\n orbAfterGate3,\n orbFinal,\n validation: {\n valid: validation.valid ?? false,\n errors: validation.errors ?? [],\n },\n verify,\n timings,\n };\n}\n\n// ============================================================================\n// Optional Per-Gate Validation\n// ============================================================================\n\n// ============================================================================\n// Orbital Verify (Compile + Server + Browser)\n// ============================================================================\n\nasync function runVerify(\n orb: OrbitalSchema,\n config: GatePipelineConfig,\n): Promise<VerifyResult> {\n const tmpDir = path.join(config.workDir, 'gate-verify');\n fs.mkdirSync(tmpDir, { recursive: true });\n const orbPath = path.join(tmpDir, `${orb.name || 'generated'}.orb`);\n fs.writeFileSync(orbPath, JSON.stringify(orb, null, 2));\n\n // Dynamic import to avoid rootDir constraint (tool lives outside this package)\n const verifyApiPath = path.resolve(\n path.dirname(new URL(import.meta.url).pathname),\n '../../../../tools/orbital-verify-unified/src/api.js',\n );\n const { verifyApp } = await import(verifyApiPath) as { verifyApp: (opts: Record<string, unknown>) => Promise<{\n totalPassed: number;\n totalFailed: number;\n totalChecks: number;\n coverage?: { ratio: number; coveredItems: number; totalItems: number };\n phases: Array<{ phase: number; name: string; passed: number; failed: number; checks: Array<{ label: string; passed: boolean; detail?: string }> }>;\n }> };\n\n console.log(`[Verify] Starting orbital-verify on ${orbPath}`);\n const result = await verifyApp({\n orbPath,\n headed: config.verifyHeaded ?? false,\n screenshots: config.verifyScreenshots ?? false,\n });\n\n console.log(\n `[Verify] ${result.totalPassed}/${result.totalChecks} passed, ` +\n `${result.totalFailed} failed` +\n (result.coverage ? `, coverage=${(result.coverage.ratio * 100).toFixed(0)}%` : ''),\n );\n\n return {\n totalPassed: result.totalPassed,\n totalFailed: result.totalFailed,\n totalChecks: result.totalChecks,\n coverage: result.coverage ? {\n ratio: result.coverage.ratio,\n coveredItems: result.coverage.coveredItems,\n totalItems: result.coverage.totalItems,\n } : undefined,\n phases: result.phases.map((p) => ({\n phase: p.phase,\n name: p.name,\n passed: p.passed,\n failed: p.failed,\n checks: p.checks,\n })),\n };\n}\n\n// ============================================================================\n// Optional Per-Gate Validation\n// ============================================================================\n\nfunction maybeValidate(\n config: GatePipelineConfig,\n orb: OrbitalSchema,\n gate: number,\n): void {\n if (!config.validateAfterEachGate) return;\n\n const result = validateWithOrbitalCLI(orb, config.workDir);\n if (!result.valid) {\n console.warn(\n `[Gate ${gate} validate] ${result.errors.length} error(s): ` +\n result.errors.slice(0, 3).map((e) => e.message).join('; '),\n );\n }\n}\n","/**\n * Merge Utilities\n *\n * Immutable helpers for replacing orbitals, traits, and transitions\n * within an OrbitalSchema. All return a new OrbitalSchema (deep clone).\n *\n * @packageDocumentation\n */\n\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Trait,\n Transition,\n} from '@almadar/core/types';\n\n// ============================================================================\n// Deep Clone\n// ============================================================================\n\n/** Deep clone an OrbitalSchema via structured clone. */\nexport function deepCloneOrb(orb: OrbitalSchema): OrbitalSchema {\n return structuredClone(orb);\n}\n\n// ============================================================================\n// Replace Orbital\n// ============================================================================\n\n/**\n * Replace an orbital by name within the schema.\n * Returns a new OrbitalSchema with the orbital swapped.\n */\nexport function replaceOrbital(\n orb: OrbitalSchema,\n name: string,\n enriched: OrbitalDefinition,\n): OrbitalSchema {\n const clone = deepCloneOrb(orb);\n const idx = clone.orbitals.findIndex(\n (o) => (o as OrbitalDefinition).name === name,\n );\n if (idx >= 0) {\n clone.orbitals[idx] = enriched;\n }\n return clone;\n}\n\n// ============================================================================\n// Replace Trait\n// ============================================================================\n\n/**\n * Replace a trait by name within a specific orbital.\n * Returns a new OrbitalSchema with the trait swapped.\n */\nexport function replaceTrait(\n orb: OrbitalSchema,\n orbName: string,\n traitName: string,\n enriched: Trait,\n): OrbitalSchema {\n const clone = deepCloneOrb(orb);\n const orbital = clone.orbitals.find(\n (o) => (o as OrbitalDefinition).name === orbName,\n ) as OrbitalDefinition | undefined;\n if (!orbital) return clone;\n\n const traits = orbital.traits;\n const idx = traits.findIndex((t) => {\n if (typeof t === 'string') return t === traitName;\n if ('ref' in t) return t.ref === traitName;\n return t.name === traitName;\n });\n\n if (idx >= 0) {\n traits[idx] = enriched;\n }\n return clone;\n}\n\n// ============================================================================\n// Replace Transition\n// ============================================================================\n\n/**\n * Replace a transition (by from+event) within a trait's state machine.\n * Returns a new OrbitalSchema with the transition swapped.\n */\nexport function replaceTransition(\n orb: OrbitalSchema,\n orbName: string,\n traitName: string,\n from: string,\n event: string,\n enriched: Transition,\n): OrbitalSchema {\n const clone = deepCloneOrb(orb);\n const orbital = clone.orbitals.find(\n (o) => (o as OrbitalDefinition).name === orbName,\n ) as OrbitalDefinition | undefined;\n if (!orbital) return clone;\n\n const trait = orbital.traits.find((t) => {\n if (typeof t === 'string') return false;\n if ('ref' in t) return false;\n return t.name === traitName;\n }) as Trait | undefined;\n if (!trait?.stateMachine) return clone;\n\n const idx = trait.stateMachine.transitions.findIndex(\n (t) => t.from === from && t.event === event,\n );\n if (idx >= 0) {\n trait.stateMachine.transitions[idx] = enriched;\n }\n return clone;\n}\n","/**\n * Gate 1: Orbital Structure\n *\n * Enriches each orbital shell with full entity fields, persistence,\n * collection, trait emits/listens, and pages.\n * One LLM call per orbital.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n FieldType,\n TraitEventContract,\n TraitEventListener,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate1SystemPrompt, buildGate1UserPrompt } from './prompts.js';\nimport { replaceOrbital } from './merge.js';\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\nfunction parseGate1Response(raw: string, original: OrbitalDefinition): OrbitalDefinition {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n throw new Error(`Gate 1: failed to parse JSON from response: ${raw.slice(0, 200)}`);\n }\n\n const obj = JSON.parse(parsed) as Record<string, unknown>;\n\n // Normalize entity\n const entityRaw = (obj.entity as Record<string, unknown>) || {};\n const entityName = String(\n entityRaw.name || (original.entity as Entity).name,\n );\n const fieldsRaw = Array.isArray(entityRaw.fields) ? entityRaw.fields : [];\n const entity: Entity = {\n name: entityName,\n persistence: (entityRaw.persistence as Entity['persistence']) || 'runtime',\n ...(entityRaw.collection ? { collection: String(entityRaw.collection) } : {}),\n fields: fieldsRaw.length > 0\n ? fieldsRaw.map((f: Record<string, unknown>) => ({\n name: String(f.name || ''),\n type: (f.type as FieldType) || 'string',\n ...(f.required ? { required: true } : {}),\n ...(f.default !== undefined ? { default: f.default } : {}),\n }))\n : [{ name: 'id', type: 'string' as FieldType, required: true }],\n };\n\n // Normalize traits (keep shell state machines)\n const traitsRaw = Array.isArray(obj.traits) ? obj.traits : [];\n const traits: Trait[] = traitsRaw.map((t: Record<string, unknown>) => ({\n name: String(t.name || ''),\n linkedEntity: String(t.linkedEntity || entityName),\n category: 'interaction' as const,\n ...(Array.isArray(t.emits) && t.emits.length > 0\n ? { emits: t.emits.map((e: unknown): TraitEventContract => typeof e === 'string' ? { event: e } : e as TraitEventContract) }\n : {}),\n ...(Array.isArray(t.listens) && t.listens.length > 0\n ? { listens: t.listens.map((l: unknown): TraitEventListener => typeof l === 'string' ? { event: l, triggers: l } : l as TraitEventListener) }\n : {}),\n stateMachine: {\n states: [{ name: 'idle', isInitial: true }],\n events: [] as Array<{ key: string; name: string }>,\n transitions: [] as Array<{ from: string; event: string; to: string }>,\n },\n }));\n\n // Normalize pages - ensure every page has traits refs\n const traitNames = traits.map((t) => t.name);\n const defaultTraitRefs = traitNames.map((n) => ({ ref: n }));\n const pagesRaw = Array.isArray(obj.pages) ? obj.pages : [];\n const pages = pagesRaw.map((p: Record<string, unknown>) => ({\n name: String(p.name || p.label || ''),\n path: String(p.path || p.route || '/'),\n ...(p.isInitial ? { isInitial: true } : {}),\n traits: Array.isArray(p.traits) ? p.traits : defaultTraitRefs,\n }));\n\n return {\n name: String(obj.name || original.name),\n entity,\n traits,\n pages,\n } as OrbitalDefinition;\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\n/**\n * Enrich all orbital shells with full entity fields and trait details.\n * Iterates orbitals with one LLM call each, merges back via replaceOrbital.\n */\nexport async function runGate1(\n client: LLMClient,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate1SystemPrompt();\n const allOrbitals = orb.orbitals as OrbitalDefinition[];\n let result = orb;\n\n for (const orbital of allOrbitals) {\n // Find guided orbital from golden .orb\n const guidedOrbital = opts.goldenOrb?.orbitals.find(\n (o) => (o as OrbitalDefinition).name === orbital.name,\n ) as OrbitalDefinition | undefined;\n\n const userPrompt = buildGate1UserPrompt(\n orbital,\n allOrbitals,\n guidedOrbital,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 4096,\n });\n\n const enriched = parseGate1Response(raw, orbital);\n result = replaceOrbital(result, orbital.name, enriched);\n }\n\n return result;\n}\n","/**\n * Gate 2: Trait State Machine\n *\n * Fills in stateMachine (states, events, transitions with empty effects)\n * for each trait across all orbitals.\n * One LLM call per trait.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n StateMachine,\n Effect,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate2SystemPrompt, buildGate2UserPrompt } from './prompts.js';\nimport { replaceTrait } from './merge.js';\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\nfunction parseGate2Response(raw: string, original: Trait): Trait {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n console.warn(`Gate 2: no JSON found, returning trait as-is`);\n return original;\n }\n\n let obj: Record<string, unknown>;\n try {\n obj = JSON.parse(parsed) as Record<string, unknown>;\n } catch {\n console.warn(`Gate 2: malformed JSON, returning trait as-is`);\n return original;\n }\n\n const statesRaw = Array.isArray(obj.states) ? obj.states : [];\n const eventsRaw = Array.isArray(obj.events) ? obj.events : [];\n const transitionsRaw = Array.isArray(obj.transitions) ? obj.transitions : [];\n\n // Use stateMachine from the response if present, otherwise build from flat arrays\n const smRaw = obj.stateMachine as Record<string, unknown> | undefined;\n const states = (smRaw && Array.isArray(smRaw.states) ? smRaw.states : statesRaw)\n .map((s: Record<string, unknown>) => ({\n name: String(s.name || ''),\n ...(s.isInitial ? { isInitial: true } : {}),\n }));\n\n const events = (smRaw && Array.isArray(smRaw.events) ? smRaw.events : eventsRaw)\n .map((e: Record<string, unknown>) => ({\n key: String(e.key || ''),\n name: String(e.name || e.key || ''),\n ...(Array.isArray(e.payloadSchema) ? { payloadSchema: e.payloadSchema } : {}),\n }));\n\n const transitions = (smRaw && Array.isArray(smRaw.transitions) ? smRaw.transitions : transitionsRaw)\n .map((t: Record<string, unknown>) => ({\n from: String(t.from || ''),\n event: String(t.event || ''),\n to: String(t.to || ''),\n effects: [] as Effect[],\n }));\n\n const stateMachine: StateMachine = { states, events, transitions };\n\n // Parse ui slot assignments (Gate 2 outputs these for Gate 4 to consume)\n type PresentationType = 'modal' | 'drawer' | 'popover' | 'inline' | 'confirm-dialog';\n const validPresentations = new Set<string>(['modal', 'drawer', 'popover', 'inline', 'confirm-dialog']);\n const uiRaw = (obj.ui || smRaw?.ui) as Record<string, Record<string, unknown>> | undefined;\n const ui = uiRaw ? Object.fromEntries(\n Object.entries(uiRaw).map(([stateName, binding]) => {\n const pres = String(binding.presentation || 'inline');\n return [\n stateName,\n {\n presentation: (validPresentations.has(pres) ? pres : 'inline') as PresentationType,\n content: (binding.content || {}) as Record<string, unknown>,\n },\n ];\n }),\n ) : undefined;\n\n return {\n ...original,\n name: String(obj.name || original.name),\n stateMachine,\n ...(ui ? { ui } : {}),\n };\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\n/**\n * Fill in state machines for all traits across all orbitals.\n * Iterates traits with one LLM call each, merges back via replaceTrait.\n */\nexport async function runGate2(\n client: LLMClient,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate2SystemPrompt();\n let result = orb;\n\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n const entity = orbital.entity as Entity;\n\n for (const traitRef of orbital.traits) {\n if (typeof traitRef === 'string' || 'ref' in traitRef) continue;\n const trait = traitRef as Trait;\n\n // Find guided trait from golden .orb\n const guidedTrait = findGuidedTrait(opts.goldenOrb, trait.name);\n\n const userPrompt = buildGate2UserPrompt(\n trait,\n entity,\n orbital.description || '',\n guidedTrait,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 4096,\n });\n\n const enriched = parseGate2Response(raw, trait);\n result = replaceTrait(result, orbital.name, trait.name, enriched);\n }\n }\n\n return result;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction findGuidedTrait(\n goldenOrb: OrbitalSchema | undefined,\n traitName: string,\n): Trait | undefined {\n if (!goldenOrb) return undefined;\n for (const orbital of goldenOrb.orbitals as OrbitalDefinition[]) {\n for (const t of orbital.traits) {\n if (typeof t === 'string' || 'ref' in t) continue;\n if (t.name === traitName) return t as Trait;\n }\n }\n return undefined;\n}\n","/**\n * Gate 3: Transition Effects\n *\n * Fills in guard + non-render effects for each transition across all traits.\n * One LLM call per transition.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n Transition,\n Expression,\n Effect,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate3SystemPrompt, buildGate3UserPrompt } from './prompts.js';\nimport { replaceTransition } from './merge.js';\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\nfunction parseGate3Response(raw: string, original: Transition): Transition {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n console.warn(`Gate 3: no JSON found, returning transition as-is`);\n return original;\n }\n\n let obj: Record<string, unknown>;\n try {\n obj = JSON.parse(parsed) as Record<string, unknown>;\n } catch {\n console.warn(`Gate 3: malformed JSON, returning transition as-is`);\n return original;\n }\n\n const guard = Array.isArray(obj.guard) ? (obj.guard as Expression) : undefined;\n const effectsRaw = Array.isArray(obj.effects) ? obj.effects : [];\n const effects: Effect[] = effectsRaw.filter(\n (e: unknown) => Array.isArray(e) && e.length >= 2,\n ) as Effect[];\n\n return {\n from: String(obj.from || original.from),\n event: String(obj.event || original.event),\n to: String(obj.to || original.to),\n ...(guard ? { guard } : {}),\n effects,\n };\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\n/**\n * Fill in guards and non-render effects for all transitions.\n * Iterates all transitions across all traits with one LLM call each.\n */\nexport async function runGate3(\n client: LLMClient,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n _behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate3SystemPrompt();\n let result = orb;\n\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n const entity = orbital.entity as Entity;\n\n for (const traitRef of orbital.traits) {\n if (typeof traitRef === 'string' || 'ref' in traitRef) continue;\n const trait = traitRef as Trait;\n if (!trait.stateMachine) continue;\n\n for (const transition of trait.stateMachine.transitions) {\n // Find guided transition from golden .orb\n const guidedTransition = findGuidedTransition(\n opts.goldenOrb, trait.name, transition.from, transition.event,\n );\n\n const userPrompt = buildGate3UserPrompt(\n transition,\n entity,\n trait.stateMachine,\n guidedTransition,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 4096,\n });\n\n const enriched = parseGate3Response(raw, transition);\n result = replaceTransition(\n result, orbital.name, trait.name,\n transition.from, transition.event, enriched,\n );\n }\n }\n }\n\n return result;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction findGuidedTransition(\n goldenOrb: OrbitalSchema | undefined,\n traitName: string,\n from: string,\n event: string,\n): Transition | undefined {\n if (!goldenOrb) return undefined;\n for (const orbital of goldenOrb.orbitals as OrbitalDefinition[]) {\n for (const t of orbital.traits) {\n if (typeof t === 'string' || 'ref' in t) continue;\n if (t.name !== traitName) continue;\n const sm = (t as Trait).stateMachine;\n if (!sm) continue;\n const found = sm.transitions.find(\n (tr) => tr.from === from && tr.event === event,\n );\n if (found) return found;\n }\n }\n return undefined;\n}\n","/**\n * Gate 4: Render UI\n *\n * Appends render-ui effects to each transition.\n * One LLM call per transition.\n * Passes slot context (which states are modal vs main) to every call.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n Transition,\n Effect,\n StateMachine,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate4SystemPrompt, buildGate4UserPrompt, type SlotContext } from './prompts.js';\nimport { replaceTransition } from './merge.js';\n\n// ============================================================================\n// Slot Context Builder\n// ============================================================================\n\n/**\n * Build slot assignments from trait.ui (set by Gate 2).\n * Falls back to \"main\" for any state not in the ui map.\n */\nfunction buildSlotContext(\n sm: StateMachine,\n traitUi: Record<string, { presentation: string }> | undefined,\n): Record<string, 'main' | 'modal'> {\n const slots: Record<string, 'main' | 'modal'> = {};\n\n for (const state of sm.states) {\n const binding = traitUi?.[state.name];\n slots[state.name] = binding?.presentation === 'modal' ? 'modal' : 'main';\n }\n\n return slots;\n}\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\ninterface RenderEffect {\n slot: string;\n tree: Record<string, unknown> | null;\n}\n\nfunction parseGate4Response(raw: string): RenderEffect[] {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n console.warn('Gate 4: no JSON found in response, using fallback render-ui');\n return [{ slot: 'main', tree: { type: 'typography', variant: 'body', content: 'Loading...' } }];\n }\n\n let obj: Record<string, unknown>;\n try {\n obj = JSON.parse(parsed) as Record<string, unknown>;\n } catch {\n console.warn(`Gate 4: malformed JSON, using fallback render-ui: ${parsed.slice(0, 100)}`);\n return [{ slot: 'main', tree: { type: 'typography', variant: 'body', content: 'Loading...' } }];\n }\n\n const renderEffectsRaw = Array.isArray(obj.renderEffects) ? obj.renderEffects : [];\n return renderEffectsRaw.map((r: Record<string, unknown>) => ({\n slot: String(r.slot || 'main'),\n tree: r.tree === null ? null : ((r.tree as Record<string, unknown>) || { type: 'typography', variant: 'body', content: 'Empty' }),\n }));\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\n/**\n * Append render-ui effects to all transitions.\n * Builds slot context from state machine and passes it to every LLM call.\n */\nexport async function runGate4(\n client: LLMClient,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n _behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate4SystemPrompt();\n let result = orb;\n\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n const entity = orbital.entity as Entity;\n\n for (const traitRef of orbital.traits) {\n if (typeof traitRef === 'string' || 'ref' in traitRef) continue;\n const trait = traitRef as Trait;\n if (!trait.stateMachine) continue;\n\n // Build slot assignments from trait.ui (populated by Gate 2)\n const traitUi = trait.ui as Record<string, { presentation: string }> | undefined;\n const stateSlots = buildSlotContext(trait.stateMachine, traitUi);\n\n for (const transition of trait.stateMachine.transitions) {\n const fromSlot = stateSlots[transition.from] || 'main';\n const toSlot = stateSlots[transition.to] || 'main';\n\n // Detect if this transition exits a modal (from=modal, to=main)\n const exitsModal = fromSlot === 'modal' && toSlot === 'main';\n\n const slotContext: SlotContext = { stateSlots, exitsModal };\n\n // Find guided render effects from golden .orb\n const guidedRenderEffects = findGuidedRenderEffects(\n opts.goldenOrb, trait.name, transition.from, transition.event,\n );\n\n const userPrompt = buildGate4UserPrompt(\n transition,\n entity,\n transition.to,\n trait.stateMachine,\n slotContext,\n guidedRenderEffects,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: (opts.maxTokens ?? 4096) * 2,\n });\n\n const renderEffects = parseGate4Response(raw);\n\n // Append render-ui effects to existing effects\n const existingEffects = [...(transition.effects || [])] as Effect[];\n for (const re of renderEffects) {\n existingEffects.push(['render-ui', re.slot, re.tree] as Effect);\n }\n\n // If exiting modal and LLM didn't include modal null, add it\n if (exitsModal) {\n const hasModalNull = existingEffects.some(\n (e) => Array.isArray(e) && e[0] === 'render-ui' && e[1] === 'modal' && e[2] === null,\n );\n if (!hasModalNull) {\n // Prepend modal null before the main render\n existingEffects.unshift(['render-ui', 'modal', null] as Effect);\n }\n }\n\n const enriched: Transition = {\n ...transition,\n effects: existingEffects,\n };\n\n result = replaceTransition(\n result, orbital.name, trait.name,\n transition.from, transition.event, enriched,\n );\n }\n }\n }\n\n return result;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction findGuidedRenderEffects(\n goldenOrb: OrbitalSchema | undefined,\n traitName: string,\n from: string,\n event: string,\n): Array<{ slot: string; tree: Record<string, unknown> }> | undefined {\n if (!goldenOrb) return undefined;\n for (const orbital of goldenOrb.orbitals as OrbitalDefinition[]) {\n for (const t of orbital.traits) {\n if (typeof t === 'string' || 'ref' in t) continue;\n if (t.name !== traitName) continue;\n const sm = (t as Trait).stateMachine;\n if (!sm) continue;\n const tr = sm.transitions.find(\n (tr) => tr.from === from && tr.event === event,\n );\n if (!tr?.effects) continue;\n const renderEffects: Array<{ slot: string; tree: Record<string, unknown> }> = [];\n for (const eff of tr.effects) {\n if (Array.isArray(eff) && eff[0] === 'render-ui') {\n renderEffects.push({\n slot: String(eff[1] || 'main'),\n tree: (eff[2] as Record<string, unknown>) || {},\n });\n }\n }\n if (renderEffects.length > 0) return renderEffects;\n }\n }\n return undefined;\n}\n","/**\n * Gated Construction Pipeline\n *\n * Decomposes .orb program construction into five scoped gates,\n * each handled by a standalone LLM call with fresh context.\n * Every gate accepts an OrbitalSchema and returns an enriched OrbitalSchema.\n *\n * @packageDocumentation\n */\n\n// Pipeline\nexport { runGatePipeline } from './orchestrator.js';\n\n// Individual gates\nexport { runGate0 } from './gate0-application.js';\nexport { runGate05 } from './gate05-behavior-match.js';\nexport type { BehaviorMatchResult } from './gate05-behavior-match.js';\nexport { runGate1 } from './gate1-orbital.js';\nexport { runGate2 } from './gate2-trait.js';\nexport { runGate3 } from './gate3-transition.js';\nexport { runGate4 } from './gate4-render-ui.js';\n\n// Merge utilities\nexport { deepCloneOrb, replaceOrbital, replaceTrait, replaceTransition } from './merge.js';\n\n// Behavior extraction\nexport { extractBehaviorGateData, getTraitGateData, getTransitionGateData } from './behavior-extract.js';\n\n// Scoring\nexport {\n scoreGate0,\n scoreGate1,\n scoreGate2,\n scoreGate3,\n scoreGate4,\n scoreOverall,\n} from './scoring.js';\n\n// Types\nexport type {\n GateProvider,\n GateMode,\n GateOpts,\n GatePipelineConfig,\n GateTimings,\n GatePipelineResult,\n GateScore,\n PipelineScore,\n BehaviorGateData,\n} from './types.js';\n\n// Re-export core types used by gates\nexport type {\n OrbitalSchema,\n OrbitalDefinition,\n Orbital,\n Entity,\n Trait,\n StateMachine,\n State,\n Event,\n Transition,\n Effect,\n Page,\n Expression,\n} from '@almadar/core/types';\n\n// Agentic tool factories (used by converter and agentic runner)\nexport {\n createDecomposeAppTool,\n createMatchBehaviorTool,\n createBuildOrbitalTool,\n createVerifyAppTool,\n createUseBehaviorTool,\n createConnectTool,\n createComposeTool,\n} from './agentic/tools.js';\n","/**\n * Behavior Extract\n *\n * Extract per-gate slices from BehaviorSchema for guided mode.\n * Each function extracts the data a specific gate needs from the golden behavior.\n *\n * @packageDocumentation\n */\n\nimport type { BehaviorSchema } from '@almadar/std/behaviors/types';\nimport type { BehaviorGateData } from './types.js';\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction asArray<T>(val: T | T[] | undefined): T[] {\n if (!val) return [];\n return Array.isArray(val) ? val : [val];\n}\n\nfunction getOrbitals(behavior: BehaviorSchema): Record<string, unknown>[] {\n return asArray(behavior.orbitals);\n}\n\nfunction getTraitsFromOrbital(orbital: Record<string, unknown>): Record<string, unknown>[] {\n return asArray(orbital.traits as Record<string, unknown>[] | undefined);\n}\n\nfunction getStateMachine(trait: Record<string, unknown>): Record<string, unknown> | null {\n return (trait.stateMachine as Record<string, unknown>) || null;\n}\n\nfunction getStates(sm: Record<string, unknown>): Array<{ name: string }> {\n const states = asArray(sm.states as Record<string, unknown>[] | undefined);\n return states.map((s) => ({ name: String(s.name || '') }));\n}\n\nfunction getEvents(sm: Record<string, unknown>): Array<{ key: string }> {\n const events = asArray(sm.events as Record<string, unknown>[] | undefined);\n return events.map((e) => ({ key: String(e.key || '') }));\n}\n\ninterface RawTransition {\n from: string;\n event: string;\n to: string;\n guard?: unknown[];\n effects?: unknown[];\n}\n\nfunction getTransitions(sm: Record<string, unknown>): RawTransition[] {\n const transitions = asArray(sm.transitions as Record<string, unknown>[] | undefined);\n return transitions.map((t) => ({\n from: String(t.from || ''),\n event: String(t.event || ''),\n to: String(t.to || ''),\n guard: t.guard as unknown[] | undefined,\n effects: asArray(t.effects as unknown[] | undefined),\n }));\n}\n\nfunction getPagesFromOrbital(orbital: Record<string, unknown>): Record<string, unknown>[] {\n return asArray(orbital.pages as Record<string, unknown>[] | undefined);\n}\n\n// ============================================================================\n// Effect Classification\n// ============================================================================\n\nfunction isRenderUiEffect(effect: unknown): boolean {\n return Array.isArray(effect) && effect[0] === 'render-ui';\n}\n\nfunction extractRenderEffects(effects: unknown[]): Array<{ slot: string; tree: Record<string, unknown> }> {\n const results: Array<{ slot: string; tree: Record<string, unknown> }> = [];\n for (const eff of effects) {\n if (isRenderUiEffect(eff)) {\n const arr = eff as unknown[];\n const slot = String(arr[1] || 'main');\n const tree = (arr[2] as Record<string, unknown>) || {};\n results.push({ slot, tree });\n }\n }\n return results;\n}\n\nfunction extractNonRenderEffects(effects: unknown[]): unknown[] {\n return effects.filter((eff) => !isRenderUiEffect(eff));\n}\n\n// ============================================================================\n// Full Extraction\n// ============================================================================\n\n/**\n * Extract all gate-level slices from a BehaviorSchema.\n * Returns structured data that each gate can consume in guided mode.\n */\nexport function extractBehaviorGateData(behavior: BehaviorSchema): BehaviorGateData {\n const orbitals = getOrbitals(behavior);\n\n // App level\n const entityNames: string[] = [];\n const traitNames: string[] = [];\n\n for (const orbital of orbitals) {\n const entity = orbital.entity as Record<string, unknown> | undefined;\n if (entity?.name) entityNames.push(String(entity.name));\n\n for (const trait of getTraitsFromOrbital(orbital)) {\n if (trait.name) traitNames.push(String(trait.name));\n }\n }\n\n const appLevel = {\n orbitalCount: orbitals.length,\n entityNames,\n traitNames,\n };\n\n // Orbital levels\n const orbitalLevels = orbitals.map((orbital) => {\n const entity = (orbital.entity as Record<string, unknown>) || {};\n const traits = getTraitsFromOrbital(orbital);\n const pages = getPagesFromOrbital(orbital);\n\n return {\n orbitalName: String(orbital.name || ''),\n entity,\n traitNames: traits.map((t) => String(t.name || '')),\n pages,\n };\n });\n\n // Trait levels\n const traitLevels: BehaviorGateData['traitLevels'] = [];\n for (const orbital of orbitals) {\n for (const trait of getTraitsFromOrbital(orbital)) {\n const sm = getStateMachine(trait);\n if (!sm) continue;\n\n const states = getStates(sm);\n const events = getEvents(sm);\n const transitions = getTransitions(sm);\n\n traitLevels.push({\n traitName: String(trait.name || ''),\n states: states.map((s) => s.name),\n events: events.map((e) => e.key),\n transitionEdges: transitions.map((t) => ({\n from: t.from,\n event: t.event,\n to: t.to,\n })),\n });\n }\n }\n\n // Transition levels (non-render-ui effects)\n const transitionLevels: BehaviorGateData['transitionLevels'] = [];\n for (const orbital of orbitals) {\n for (const trait of getTraitsFromOrbital(orbital)) {\n const sm = getStateMachine(trait);\n if (!sm) continue;\n\n for (const transition of getTransitions(sm)) {\n const effects = transition.effects || [];\n transitionLevels.push({\n from: transition.from,\n event: transition.event,\n to: transition.to,\n guard: transition.guard || null,\n nonRenderEffects: extractNonRenderEffects(effects),\n });\n }\n }\n }\n\n // Render UI levels\n const renderUiLevels: BehaviorGateData['renderUiLevels'] = [];\n for (const orbital of orbitals) {\n for (const trait of getTraitsFromOrbital(orbital)) {\n const sm = getStateMachine(trait);\n if (!sm) continue;\n\n for (const transition of getTransitions(sm)) {\n const effects = transition.effects || [];\n const renderEffects = extractRenderEffects(effects);\n if (renderEffects.length > 0) {\n renderUiLevels.push({\n from: transition.from,\n event: transition.event,\n to: transition.to,\n renderEffects,\n });\n }\n }\n }\n }\n\n return {\n appLevel,\n orbitalLevels,\n traitLevels,\n transitionLevels,\n renderUiLevels,\n };\n}\n\n/**\n * Get gate-specific slice for a particular trait from extracted data.\n */\nexport function getTraitGateData(\n data: BehaviorGateData,\n traitName: string,\n): BehaviorGateData['traitLevels'][0] | undefined {\n return data.traitLevels.find((t) => t.traitName === traitName);\n}\n\n/**\n * Get gate-specific slice for a particular transition from extracted data.\n */\nexport function getTransitionGateData(\n data: BehaviorGateData,\n from: string,\n event: string,\n): {\n transition: BehaviorGateData['transitionLevels'][0] | undefined;\n renderUi: BehaviorGateData['renderUiLevels'][0] | undefined;\n} {\n return {\n transition: data.transitionLevels.find((t) => t.from === from && t.event === event),\n renderUi: data.renderUiLevels.find((t) => t.from === from && t.event === event),\n };\n}\n","/**\n * Scoring\n *\n * Set-based metrics for evaluating gate outputs against golden behaviors.\n * Jaccard similarity, symmetric difference, coverage ratios.\n * All O(n) and directionally correct.\n *\n * Now accepts OrbitalSchema and extracts gate-relevant sections.\n *\n * @packageDocumentation\n */\n\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n Transition,\n} from '@almadar/core/types';\nimport type {\n GateScore,\n PipelineScore,\n GateProvider,\n GateMode,\n BehaviorGateData,\n} from './types.js';\n\n// ============================================================================\n// Set Utilities\n// ============================================================================\n\nfunction jaccard(a: Set<string>, b: Set<string>): number {\n if (a.size === 0 && b.size === 0) return 1;\n const intersection = new Set([...a].filter((x) => b.has(x)));\n const union = new Set([...a, ...b]);\n return intersection.size / union.size;\n}\n\nfunction symmetricDifferenceNormalized(a: Set<string>, b: Set<string>): number {\n if (a.size === 0 && b.size === 0) return 1;\n const symDiff = new Set([\n ...[...a].filter((x) => !b.has(x)),\n ...[...b].filter((x) => !a.has(x)),\n ]);\n const union = new Set([...a, ...b]);\n return 1 - symDiff.size / union.size;\n}\n\nfunction coverageRatio(produced: Set<string>, golden: Set<string>): number {\n if (golden.size === 0) return 1;\n const covered = [...golden].filter((x) => produced.has(x));\n return covered.length / golden.size;\n}\n\n// ============================================================================\n// Gate 0 Scoring\n// ============================================================================\n\n/**\n * Score Gate 0 output (shell .orb) against golden behavior data.\n * - Orbital count match (exact = 1.0, off by 1 = 0.5, more = 0.0)\n * - Entity name Jaccard similarity\n */\nexport function scoreGate0(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const orbitals = orb.orbitals as OrbitalDefinition[];\n const countDiff = Math.abs(orbitals.length - golden.appLevel.orbitalCount);\n const countScore = countDiff === 0 ? 1.0 : countDiff === 1 ? 0.5 : 0.0;\n\n const producedEntities = new Set(\n orbitals.map((o) => String((o.entity as Entity).name).toLowerCase()),\n );\n const goldenEntities = new Set(golden.appLevel.entityNames.map((n) => n.toLowerCase()));\n const entityJaccard = jaccard(producedEntities, goldenEntities);\n\n const score = countScore * 0.4 + entityJaccard * 0.6;\n\n return {\n gate: 0,\n score,\n details: { countScore, entityJaccard },\n };\n}\n\n// ============================================================================\n// Gate 1 Scoring\n// ============================================================================\n\n/**\n * Score Gate 1 output (enriched orbitals) against golden behavior data.\n * Scores the first orbital's entity fields and persistence.\n */\nexport function scoreGate1(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const orbitals = orb.orbitals as OrbitalDefinition[];\n if (orbitals.length === 0) {\n return { gate: 1, score: 0, details: { fieldJaccard: 0, persistenceMatch: 0 } };\n }\n\n // Score first orbital (or find matching)\n const goldenOrbital = golden.orbitalLevels[0];\n if (!goldenOrbital) {\n return { gate: 1, score: 0, details: { fieldJaccard: 0, persistenceMatch: 0 } };\n }\n\n const entity = orbitals[0].entity as Entity;\n\n // Field name Jaccard\n const producedFields = new Set(entity.fields.map((f) => f.name.toLowerCase()));\n const goldenEntity = goldenOrbital.entity;\n const goldenFields = new Set(\n Array.isArray(goldenEntity.fields)\n ? (goldenEntity.fields as Array<{ name: string }>).map((f) => f.name.toLowerCase())\n : [],\n );\n const fieldJaccard = jaccard(producedFields, goldenFields);\n\n // Persistence match\n const goldenPersistence = String(goldenEntity.persistence || 'runtime');\n const persistenceMatch = entity.persistence === goldenPersistence ? 1.0 : 0.0;\n\n const score = fieldJaccard * 0.7 + persistenceMatch * 0.3;\n\n return {\n gate: 1,\n score,\n details: { fieldJaccard, persistenceMatch },\n };\n}\n\n// ============================================================================\n// Gate 2 Scoring\n// ============================================================================\n\n/**\n * Score Gate 2 output (state machines) against golden behavior data.\n * Scores state set similarity and event key Jaccard across all traits.\n */\nexport function scoreGate2(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const traits = extractAllTraits(orb);\n if (traits.length === 0 || golden.traitLevels.length === 0) {\n return { gate: 2, score: 0, details: { stateSymDiff: 0, eventJaccard: 0 } };\n }\n\n // Score first trait with state machine\n const trait = traits.find((t) => t.stateMachine) || traits[0];\n const goldenTrait = golden.traitLevels.find(\n (t) => t.traitName.toLowerCase() === trait.name.toLowerCase(),\n ) || golden.traitLevels[0];\n\n if (!goldenTrait || !trait.stateMachine) {\n return { gate: 2, score: 0, details: { stateSymDiff: 0, eventJaccard: 0 } };\n }\n\n const producedStates = new Set(trait.stateMachine.states.map((s) => s.name.toLowerCase()));\n const goldenStates = new Set(goldenTrait.states.map((s) => s.toLowerCase()));\n const stateSymDiff = symmetricDifferenceNormalized(producedStates, goldenStates);\n\n const producedEvents = new Set(trait.stateMachine.events.map((e) => e.key));\n const goldenEvents = new Set(goldenTrait.events);\n const eventJaccard = jaccard(producedEvents, goldenEvents);\n\n const score = stateSymDiff * 0.5 + eventJaccard * 0.5;\n\n return {\n gate: 2,\n score,\n details: { stateSymDiff, eventJaccard },\n };\n}\n\n// ============================================================================\n// Gate 3 Scoring\n// ============================================================================\n\n/**\n * Score Gate 3 output (guards + effects) against golden behavior data.\n * Averages across all transitions.\n */\nexport function scoreGate3(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const transitions = extractAllTransitions(orb);\n if (transitions.length === 0) {\n return { gate: 3, score: 0.5, details: { effectCoverage: 0.5, guardMatch: 0.5 } };\n }\n\n let totalEffectCoverage = 0;\n let totalGuardMatch = 0;\n let count = 0;\n\n for (const transition of transitions) {\n const goldenTransition = golden.transitionLevels.find(\n (t) => t.from === transition.from && t.event === transition.event,\n );\n\n if (!goldenTransition) {\n totalEffectCoverage += 0.5;\n totalGuardMatch += 0.5;\n count++;\n continue;\n }\n\n // Effect type coverage\n const producedTypes = new Set(\n (transition.effects || [])\n .filter((e) => Array.isArray(e))\n .map((e) => String((e as unknown[])[0]))\n .filter((t) => t !== 'render-ui'),\n );\n const goldenTypes = new Set(\n goldenTransition.nonRenderEffects\n .filter((e): e is unknown[] => Array.isArray(e))\n .map((e) => String(e[0])),\n );\n totalEffectCoverage += coverageRatio(producedTypes, goldenTypes);\n\n // Guard presence match\n const hasGuard = !!transition.guard;\n const goldenHasGuard = !!goldenTransition.guard;\n totalGuardMatch += hasGuard === goldenHasGuard ? 1.0 : 0.0;\n count++;\n }\n\n const effectCoverage = count > 0 ? totalEffectCoverage / count : 0.5;\n const guardMatch = count > 0 ? totalGuardMatch / count : 0.5;\n const score = effectCoverage * 0.7 + guardMatch * 0.3;\n\n return {\n gate: 3,\n score,\n details: { effectCoverage, guardMatch },\n };\n}\n\n// ============================================================================\n// Gate 4 Scoring\n// ============================================================================\n\n/**\n * Score Gate 4 output (render-ui effects) against golden behavior data.\n * Pattern type recall and tree node count ratio.\n */\nexport function scoreGate4(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const transitions = extractAllTransitions(orb);\n if (transitions.length === 0 || golden.renderUiLevels.length === 0) {\n return { gate: 4, score: 0.5, details: { typeRecall: 0.5, nodeRatio: 0.5 } };\n }\n\n let totalTypeRecall = 0;\n let totalNodeRatio = 0;\n let count = 0;\n\n for (const transition of transitions) {\n const goldenRender = golden.renderUiLevels.find(\n (r) => r.from === transition.from && r.event === transition.event,\n );\n\n if (!goldenRender) continue;\n\n // Collect render-ui effects from this transition\n const renderEffects = (transition.effects || [])\n .filter((e) => Array.isArray(e) && (e as unknown[])[0] === 'render-ui')\n .map((e) => {\n const arr = e as unknown[];\n return { slot: String(arr[1]), tree: (arr[2] as Record<string, unknown>) || {} };\n });\n\n // Collect pattern types\n const producedTypes = new Set<string>();\n let producedNodes = 0;\n for (const re of renderEffects) {\n for (const t of collectTypes(re.tree)) producedTypes.add(t);\n producedNodes += countNodes(re.tree);\n }\n\n const goldenTypes = new Set<string>();\n let goldenNodes = 0;\n for (const re of goldenRender.renderEffects) {\n for (const t of collectTypes(re.tree)) goldenTypes.add(t);\n goldenNodes += countNodes(re.tree);\n }\n\n totalTypeRecall += coverageRatio(producedTypes, goldenTypes);\n totalNodeRatio += goldenNodes > 0\n ? Math.min(producedNodes / goldenNodes, goldenNodes / Math.max(producedNodes, 1))\n : (producedNodes === 0 ? 1 : 0);\n count++;\n }\n\n const typeRecall = count > 0 ? totalTypeRecall / count : 0.5;\n const nodeRatio = count > 0 ? totalNodeRatio / count : 0.5;\n const score = typeRecall * 0.6 + nodeRatio * 0.4;\n\n return {\n gate: 4,\n score,\n details: { typeRecall, nodeRatio },\n };\n}\n\n// ============================================================================\n// Overall Pipeline Score\n// ============================================================================\n\nconst GATE_WEIGHTS = [0.10, 0.15, 0.25, 0.20, 0.30] as const;\n\n/**\n * Compute weighted overall score from individual gate scores.\n */\nexport function scoreOverall(\n gateScores: GateScore[],\n provider: GateProvider,\n mode: GateMode,\n behaviorName: string,\n): PipelineScore {\n let overall = 0;\n for (const gs of gateScores) {\n const weight = GATE_WEIGHTS[gs.gate] ?? 0;\n overall += gs.score * weight;\n }\n\n return {\n overall,\n gates: gateScores,\n provider,\n mode,\n behaviorName,\n };\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction extractAllTraits(orb: OrbitalSchema): Trait[] {\n const traits: Trait[] = [];\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n for (const t of orbital.traits) {\n if (typeof t === 'string' || 'ref' in t) continue;\n traits.push(t as Trait);\n }\n }\n return traits;\n}\n\nfunction extractAllTransitions(orb: OrbitalSchema): Transition[] {\n const transitions: Transition[] = [];\n for (const trait of extractAllTraits(orb)) {\n if (!trait.stateMachine) continue;\n transitions.push(...trait.stateMachine.transitions);\n }\n return transitions;\n}\n\nfunction collectTypes(tree: Record<string, unknown>): Set<string> {\n const types = new Set<string>();\n if (tree.type) types.add(String(tree.type));\n const children = tree.children as Record<string, unknown>[] | undefined;\n if (Array.isArray(children)) {\n for (const child of children) {\n for (const t of collectTypes(child)) types.add(t);\n }\n }\n return types;\n}\n\nfunction countNodes(tree: Record<string, unknown>): number {\n let count = 1;\n const children = tree.children as Record<string, unknown>[] | undefined;\n if (Array.isArray(children)) {\n for (const child of children) count += countNodes(child);\n }\n return count;\n}\n","/**\n * Agentic Gate Tools\n *\n * LangGraph-compatible tools that wrap the gate pipeline for use\n * by a Claude main agent. Each tool is a scoped operation:\n *\n * - decompose_app: break prompt into orbital plan (Gate 0 subagent)\n * - match_behavior: find golden behavior (Gate 0.5 subagent)\n * - build_orbital: run gate pipeline on one orbital (Gates 1-4, DeepSeek)\n * - verify_app: run orbital-verify (deterministic)\n *\n * The main agent (Claude) decides what to call, reads results, iterates.\n * The gate subagents (DeepSeek) do the scoped generation.\n *\n * @packageDocumentation\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport { createDeepSeekClient } from '@almadar/llm';\nimport type { OrbitalSchema, OrbitalDefinition } from '@almadar/core/types';\nimport { runGate0 } from '../gate0-application.js';\nimport { runGate05 } from '../gate05-behavior-match.js';\nimport { runGate1 } from '../gate1-orbital.js';\nimport { runGate2 } from '../gate2-trait.js';\nimport { runGate3 } from '../gate3-transition.js';\nimport { runGate4 } from '../gate4-render-ui.js';\nimport { validateWithOrbitalCLI } from '../../evals/utils/orbital-validate.js';\nimport type { GateOpts } from '../types.js';\n\n// ============================================================================\n// decompose_app\n// ============================================================================\n\nexport function createDecomposeAppTool() {\n return tool(\n async (input) => {\n const client = createDeepSeekClient();\n const orb = await runGate0(client, input.prompt);\n\n return {\n appName: orb.name,\n orbitals: (orb.orbitals as OrbitalDefinition[]).map((o) => ({\n name: o.name,\n entityName: (o.entity as { name: string }).name,\n traitNames: o.traits\n .filter((t): t is { name: string } => typeof t !== 'string' && !('ref' in t))\n .map((t) => t.name),\n pageCount: o.pages?.length ?? 0,\n })),\n shellOrb: orb,\n };\n },\n {\n name: 'decompose_app',\n description: 'Decompose a natural language prompt into an orbital plan. Returns the app name, orbital list with entity names, and a shell .orb schema.',\n schema: z.object({\n prompt: z.string().describe('Natural language application description'),\n }),\n },\n );\n}\n\n// ============================================================================\n// match_behavior\n// ============================================================================\n\nexport function createMatchBehaviorTool() {\n return tool(\n async (input) => {\n const client = createDeepSeekClient();\n // Create a minimal orb for the match call\n const shellOrb: OrbitalSchema = {\n name: 'App',\n orbitals: [{\n name: input.orbitalName,\n entity: { name: input.entityName, fields: [{ name: 'id', type: 'string' }] },\n traits: [],\n pages: [],\n }] as unknown as OrbitalSchema['orbitals'],\n };\n\n const result = await runGate05(client, input.description, shellOrb);\n return {\n matched: result.matchedName !== null,\n behaviorName: result.matchedName,\n hasGoldenOrb: result.goldenOrb !== null,\n };\n },\n {\n name: 'match_behavior',\n description: 'Find the best matching golden behavior from 107 standard behaviors. Returns the match name and whether a golden .orb reference was loaded.',\n schema: z.object({\n description: z.string().describe('Description of the orbital to match'),\n orbitalName: z.string().describe('Name of the orbital'),\n entityName: z.string().describe('Name of the entity'),\n }),\n },\n );\n}\n\n// ============================================================================\n// build_orbital\n// ============================================================================\n\nexport function createBuildOrbitalTool(workDir: string) {\n return tool(\n async (input) => {\n const client = createDeepSeekClient();\n const orbitalsDir = path.join(workDir, '.orbitals');\n fs.mkdirSync(orbitalsDir, { recursive: true });\n\n // Parse the shell orbital\n let shellOrb: OrbitalSchema;\n try {\n shellOrb = JSON.parse(input.shellOrb) as OrbitalSchema;\n } catch {\n return { success: false, error: 'Invalid shellOrb JSON' };\n }\n\n // Load golden orb if behavior was matched\n let goldenOrb: OrbitalSchema | undefined;\n if (input.goldenBehavior) {\n const { loadGoldenOrbByName } = await import('../gate05-behavior-match.js');\n goldenOrb = loadGoldenOrbByName(input.goldenBehavior) ?? undefined;\n }\n\n const opts: GateOpts = {\n goldenOrb,\n };\n\n // Add feedback to opts if provided (for retry)\n const feedback = input.feedback;\n\n try {\n // Gate 1: entity\n console.log(`[build_orbital] Gate 1: enriching entity for ${input.orbitalName}`);\n let orb = await runGate1(client, shellOrb, opts);\n\n // Gate 2: state machine\n console.log(`[build_orbital] Gate 2: filling state machines`);\n orb = await runGate2(client, orb, opts);\n\n // Gate 3: effects\n console.log(`[build_orbital] Gate 3: adding effects`);\n orb = await runGate3(client, orb, opts);\n\n // Gate 4: render-ui\n console.log(`[build_orbital] Gate 4: adding render-ui`);\n orb = await runGate4(client, orb, opts);\n\n // Write each orbital to .orbitals/ for finish_task\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n const safeName = orbital.name.replace(/[^a-zA-Z0-9]/g, '_').toLowerCase();\n const orbitalPath = path.join(orbitalsDir, `${safeName}.json`);\n fs.writeFileSync(orbitalPath, JSON.stringify(orbital, null, 2));\n console.log(`[build_orbital] Written: ${orbitalPath}`);\n }\n\n // Quick validate\n fs.mkdirSync(workDir, { recursive: true });\n const validation = validateWithOrbitalCLI(orb, workDir);\n\n return {\n success: true,\n orbitalName: input.orbitalName,\n orbitalsWritten: (orb.orbitals as OrbitalDefinition[]).length,\n validation: {\n valid: validation.valid,\n errorCount: validation.errors?.length ?? 0,\n errors: (validation.errors ?? []).slice(0, 5).map((e) => e.message),\n },\n };\n } catch (error) {\n return {\n success: false,\n orbitalName: input.orbitalName,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n {\n name: 'build_orbital',\n description: 'Build one orbital by running the gate pipeline (entity -> state machine -> effects -> render-ui). Writes the result to .orbitals/ for finish_task to collect. Optionally takes a golden behavior name for guided mode and feedback for retry.',\n schema: z.object({\n orbitalName: z.string().describe('Name of the orbital to build'),\n shellOrb: z.string().describe('JSON string of the shell OrbitalSchema from decompose_app'),\n goldenBehavior: z.string().optional().describe('Golden behavior name from match_behavior (e.g. \"std-cart\")'),\n feedback: z.string().optional().describe('Feedback from a failed verify_app to guide the rebuild'),\n }),\n },\n );\n}\n\n// ============================================================================\n// verify_app\n// ============================================================================\n\nexport function createVerifyAppTool(workDir: string) {\n return tool(\n async (input) => {\n const orbPath = input.orbPath || path.join(workDir, 'schema.orb');\n\n if (!fs.existsSync(orbPath)) {\n return { success: false, error: `Schema file not found: ${orbPath}` };\n }\n\n try {\n // Dynamic import to avoid rootDir constraint\n const verifyApiPath = path.resolve(\n path.dirname(new URL(import.meta.url).pathname),\n '../../../../../tools/orbital-verify-unified/src/api.js',\n );\n const { verifyApp } = await import(verifyApiPath) as {\n verifyApp: (opts: Record<string, unknown>) => Promise<{\n totalPassed: number;\n totalFailed: number;\n totalChecks: number;\n coverage?: { ratio: number; coveredItems: number; totalItems: number };\n phases: Array<{\n phase: number;\n name: string;\n passed: number;\n failed: number;\n checks: Array<{ label: string; passed: boolean; detail?: string }>;\n }>;\n }>;\n };\n\n const result = await verifyApp({\n orbPath,\n headed: true,\n screenshots: true,\n });\n\n // Collect failure details for the agent to read\n const failures: string[] = [];\n for (const phase of result.phases) {\n for (const check of phase.checks) {\n if (!check.passed) {\n failures.push(`[Phase ${phase.phase} ${phase.name}] ${check.label}: ${check.detail || 'failed'}`);\n }\n }\n }\n\n return {\n success: result.totalFailed === 0,\n passed: result.totalPassed,\n failed: result.totalFailed,\n total: result.totalChecks,\n coverage: result.coverage?.ratio ?? null,\n failures: failures.slice(0, 10),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n passed: 0,\n failed: 1,\n total: 1,\n coverage: null,\n failures: [error instanceof Error ? error.message : String(error)],\n };\n }\n },\n {\n name: 'verify_app',\n description: 'Run orbital-verify on a compiled .orb schema. Compiles the app, runs server tests, browser tests, and captures screenshots. Returns pass/fail counts and failure details.',\n schema: z.object({\n orbPath: z.string().optional().describe('Path to .orb file. Defaults to {workDir}/schema.orb'),\n }),\n },\n );\n}\n\n// ============================================================================\n// use-behavior (Phase 3)\n// ============================================================================\n\n/**\n * Behavior function registry.\n * Maps behavior names to their pure function + params builder.\n * When a function exists, use-behavior calls it directly (no substitution).\n */\nconst BEHAVIOR_FUNCTIONS: Record<string, (params: Record<string, unknown>) => OrbitalDefinition> = {};\n\nasync function loadBehaviorFunctions(): Promise<void> {\n if (Object.keys(BEHAVIOR_FUNCTIONS).length > 0) return;\n try {\n const fns = await import('@almadar/std/behaviors/functions/index.js') as Record<string, unknown>;\n const mapping: Record<string, string> = {\n // Molecules: CRUD/Data\n 'std-list': 'stdList', 'std-cart': 'stdCart', 'std-detail': 'stdDetail',\n 'std-inventory': 'stdInventory', 'std-messaging': 'stdMessaging', 'std-geospatial': 'stdGeospatial',\n // Atoms: UI\n 'std-browse': 'stdBrowse', 'std-modal': 'stdModal', 'std-confirmation': 'stdConfirmation',\n 'std-search': 'stdSearch', 'std-filter': 'stdFilter', 'std-sort': 'stdSort',\n 'std-pagination': 'stdPagination', 'std-drawer': 'stdDrawer', 'std-notification': 'stdNotification',\n 'std-timer': 'stdTimer', 'std-tabs': 'stdTabs', 'std-loading': 'stdLoading',\n 'std-selection': 'stdSelection', 'std-undo': 'stdUndo', 'std-input': 'stdInput',\n // Atoms: Domain\n 'std-wizard': 'stdWizard', 'std-display': 'stdDisplay', 'std-async': 'stdAsync',\n 'std-combat': 'stdCombat', 'std-gameflow': 'stdGameflow', 'std-movement': 'stdMovement',\n 'std-quest': 'stdQuest', 'std-overworld': 'stdOverworld',\n 'std-circuit-breaker': 'stdCircuitBreaker', 'std-cache-aside': 'stdCacheAside',\n 'std-score': 'stdScore', 'std-collision': 'stdCollision', 'std-physics2d': 'stdPhysics2d',\n 'std-rate-limiter': 'stdRateLimiter',\n // Atoms: Game UI\n 'std-game-hud': 'stdGameHud', 'std-score-board': 'stdScoreBoard',\n 'std-game-menu': 'stdGameMenu', 'std-game-over-screen': 'stdGameOverScreen',\n 'std-dialogue-box': 'stdDialogueBox', 'std-inventory-panel': 'stdInventoryPanel',\n 'std-combat-log': 'stdCombatLog', 'std-sprite': 'stdSprite', 'std-game-audio': 'stdGameAudio',\n // Atoms: Game Canvas\n 'std-isometric-canvas': 'stdIsometricCanvas', 'std-platformer-canvas': 'stdPlatformerCanvas',\n 'std-simulation-canvas': 'stdSimulationCanvas',\n 'std-game-canvas-2d': 'stdGameCanvas2d', 'std-game-canvas-3d': 'stdGameCanvas3d',\n // Molecules: Game\n 'std-turn-based-battle': 'stdTurnBasedBattle', 'std-platformer-game': 'stdPlatformerGame',\n 'std-puzzle-game': 'stdPuzzleGame',\n // Molecules: Educational\n 'std-builder-game': 'stdBuilderGame', 'std-classifier-game': 'stdClassifierGame',\n 'std-sequencer-game': 'stdSequencerGame', 'std-debugger-game': 'stdDebuggerGame',\n 'std-negotiator-game': 'stdNegotiatorGame', 'std-simulator-game': 'stdSimulatorGame',\n 'std-event-handler-game': 'stdEventHandlerGame',\n };\n for (const [behaviorName, fnName] of Object.entries(mapping)) {\n if (typeof fns[fnName] === 'function') {\n BEHAVIOR_FUNCTIONS[behaviorName] = fns[fnName] as (params: Record<string, unknown>) => OrbitalDefinition;\n }\n }\n } catch { /* functions not available, fall back to substitution */ }\n}\n\nexport function createUseBehaviorTool(workDir: string) {\n return tool(\n async (input) => {\n await loadBehaviorFunctions();\n const newEntityName = input.entityName;\n const newFields = JSON.parse(input.fieldsJson) as Array<{ name: string; type: string; required?: boolean; default?: unknown }>;\n\n let finalOrbital: Record<string, unknown>;\n\n // Try function-based approach first\n const behaviorFn = BEHAVIOR_FUNCTIONS[input.behaviorName];\n if (behaviorFn) {\n console.log(`[use_behavior] Calling ${input.behaviorName} as pure function`);\n const orbital = behaviorFn({\n entityName: newEntityName,\n fields: newFields,\n persistence: input.persistence ?? 'runtime',\n pageTitle: input.title,\n createButtonLabel: input.createButtonLabel,\n pageName: input.pageName,\n pagePath: input.pagePath,\n isInitial: input.isInitialPage,\n });\n finalOrbital = orbital as unknown as Record<string, unknown>;\n } else {\n // Fallback: load static behavior and substitute\n console.log(`[use_behavior] Falling back to substitution for ${input.behaviorName}`);\n const { getBehavior } = await import('@almadar/std');\n const behavior = getBehavior(input.behaviorName);\n if (!behavior) {\n return { success: false, error: `Behavior \"${input.behaviorName}\" not found` };\n }\n\n const cloned = structuredClone(behavior) as Record<string, unknown>;\n const orbitalData = (cloned.orbitals as Record<string, unknown>[])?.[0];\n const goldenTrait = orbitalData\n ? ((orbitalData.traits as Record<string, unknown>[]) ?? [])[0]\n : cloned;\n const goldenEntity = orbitalData?.entity as Record<string, unknown> | undefined;\n\n if (!goldenTrait?.stateMachine) {\n return { success: false, error: `Behavior \"${input.behaviorName}\" has no state machine` };\n }\n\n if (!newFields.some(f => f.name === 'id')) {\n newFields.unshift({ name: 'id', type: 'string', required: true });\n }\n\n const oldEntityName = String(goldenEntity?.name ?? goldenTrait.linkedEntity ?? 'Item');\n const traitName = `${newEntityName}Management`;\n\n const orbital: Record<string, unknown> = {\n name: `${newEntityName}Orbital`,\n entity: {\n name: newEntityName,\n persistence: input.persistence ?? 'runtime',\n ...(input.persistence === 'persistent' ? { collection: newEntityName.toLowerCase() + 's' } : {}),\n fields: newFields,\n },\n traits: [{\n ...goldenTrait,\n name: traitName,\n linkedEntity: newEntityName,\n category: String(goldenTrait.category ?? 'interaction'),\n }],\n pages: [{\n name: input.pageName ?? `${newEntityName}Page`,\n path: input.pagePath ?? `/${newEntityName.toLowerCase()}s`,\n ...(input.isInitialPage ? { isInitial: true } : {}),\n traits: [{ ref: traitName }],\n }],\n };\n\n const orbStr = JSON.stringify(orbital);\n const substituted = orbStr\n .replace(new RegExp(`\"entity\":\\\\s*\"${oldEntityName}\"`, 'g'), `\"entity\": \"${newEntityName}\"`)\n .replace(new RegExp(`@entity\\\\.${oldEntityName}\\\\.`, 'g'), `@entity.`)\n .replace(new RegExp(`\"${oldEntityName}\"`, 'g'), `\"${newEntityName}\"`);\n\n try {\n finalOrbital = JSON.parse(substituted);\n } catch {\n finalOrbital = orbital;\n }\n\n if (input.title) {\n substituteInRenderUi(finalOrbital, 'typography', 'content', oldEntityName, input.title, true);\n }\n if (input.createButtonLabel) {\n substituteInRenderUi(finalOrbital, 'button', 'label', null, input.createButtonLabel, false);\n }\n }\n\n // Write to .orbitals/\n const orbitalsDir = path.join(workDir, '.orbitals');\n fs.mkdirSync(orbitalsDir, { recursive: true });\n const safeName = newEntityName.replace(/[^a-zA-Z0-9]/g, '_').toLowerCase();\n const orbitalPath = path.join(orbitalsDir, `${safeName}.json`);\n fs.writeFileSync(orbitalPath, JSON.stringify(finalOrbital, null, 2));\n\n // Validate\n const schema = { name: newEntityName + 'App', version: '1.0.0', orbitals: [finalOrbital] };\n fs.mkdirSync(workDir, { recursive: true });\n const validation = validateWithOrbitalCLI(schema, workDir);\n\n return {\n success: true,\n behaviorName: input.behaviorName,\n entityName: newEntityName,\n orbitalPath,\n usedFunction: !!behaviorFn,\n validation: {\n valid: validation.valid ?? false,\n errorCount: (validation.errors ?? []).length,\n errors: (validation.errors ?? []).slice(0, 5).map(e => e.message),\n },\n };\n },\n {\n name: 'use_behavior',\n description: 'Instantiate a standard behavior with custom entity fields and labels. Zero LLM calls. Calls pure behavior function when available, falls back to substitution otherwise.',\n schema: z.object({\n behaviorName: z.string().describe('Standard behavior name (e.g., \"std-list\", \"std-cart\")'),\n entityName: z.string().describe('New entity name in PascalCase (e.g., \"Product\", \"Task\")'),\n fieldsJson: z.string().describe('JSON array of entity fields: [{ name, type, required?, default? }]'),\n persistence: z.string().optional().describe('\"persistent\", \"runtime\", or \"singleton\"'),\n title: z.string().optional().describe('Page title override'),\n createButtonLabel: z.string().optional().describe('Create button label override'),\n pageName: z.string().optional().describe('Page component name'),\n pagePath: z.string().optional().describe('Route path (e.g., \"/products\")'),\n isInitialPage: z.boolean().optional().describe('Whether this is the initial/home page'),\n }),\n },\n );\n}\n\n/** Walk render-ui trees and substitute text in pattern props. */\nfunction substituteInRenderUi(\n orbital: Record<string, unknown>,\n patternType: string,\n propName: string,\n oldValue: string | null,\n newValue: string,\n firstOnly: boolean,\n): void {\n let found = false;\n const traits = (orbital.traits as Record<string, unknown>[]) || [];\n for (const trait of traits) {\n const sm = trait.stateMachine as Record<string, unknown>;\n if (!sm) continue;\n const transitions = (sm.transitions as Array<Record<string, unknown>>) || [];\n for (const tr of transitions) {\n if (tr.event !== 'INIT') continue;\n const effects = (tr.effects as unknown[][]) || [];\n for (const eff of effects) {\n if (!Array.isArray(eff) || eff[0] !== 'render-ui') continue;\n const tree = eff[2] as Record<string, unknown>;\n if (!tree) continue;\n walkAndSubstitute(tree, patternType, propName, oldValue, newValue, firstOnly, () => { found = true; });\n }\n }\n }\n}\n\nfunction walkAndSubstitute(\n node: Record<string, unknown>,\n patternType: string,\n propName: string,\n oldValue: string | null,\n newValue: string,\n firstOnly: boolean,\n onFound: () => void,\n): void {\n if (node.type === patternType) {\n const current = node[propName];\n if (typeof current === 'string') {\n if (oldValue === null || current.toLowerCase().includes(oldValue.toLowerCase())) {\n if (!firstOnly || !onFound) {\n node[propName] = newValue;\n onFound();\n }\n }\n }\n }\n const children = node.children as Record<string, unknown>[];\n if (Array.isArray(children)) {\n for (const child of children) {\n if (child && typeof child === 'object') {\n walkAndSubstitute(child, patternType, propName, oldValue, newValue, firstOnly, onFound);\n }\n }\n }\n}\n\n// ============================================================================\n// connect (Phase 4)\n// ============================================================================\n\nexport function createConnectTool(workDir: string) {\n return tool(\n async (input) => {\n const emitterPath = path.join(workDir, '.orbitals', input.emitterFile);\n const listenerPath = path.join(workDir, '.orbitals', input.listenerFile);\n\n if (!fs.existsSync(emitterPath)) return { success: false, error: `Emitter not found: ${emitterPath}` };\n if (!fs.existsSync(listenerPath)) return { success: false, error: `Listener not found: ${listenerPath}` };\n\n const emitter = JSON.parse(fs.readFileSync(emitterPath, 'utf-8')) as Record<string, unknown>;\n const listener = JSON.parse(fs.readFileSync(listenerPath, 'utf-8')) as Record<string, unknown>;\n\n // Find primary traits\n const emitterTraits = (emitter.traits as Record<string, unknown>[]) || [];\n const listenerTraits = (listener.traits as Record<string, unknown>[]) || [];\n if (emitterTraits.length === 0 || listenerTraits.length === 0) {\n return { success: false, error: 'Both orbitals must have at least one trait' };\n }\n\n const emitterTrait = emitterTraits[0];\n const listenerTrait = listenerTraits[0];\n\n // Add emits to emitter\n const emits = (emitterTrait.emits as unknown[]) || [];\n emits.push({\n event: input.eventName,\n scope: 'external',\n ...(input.payloadJson ? { payload: JSON.parse(input.payloadJson) } : {}),\n });\n emitterTrait.emits = emits;\n\n // Add listens to listener\n const listens = (listenerTrait.listens as unknown[]) || [];\n listens.push({\n event: input.eventName,\n triggers: input.triggersEvent || 'INIT',\n scope: 'external',\n });\n listenerTrait.listens = listens;\n\n // Write back\n fs.writeFileSync(emitterPath, JSON.stringify(emitter, null, 2));\n fs.writeFileSync(listenerPath, JSON.stringify(listener, null, 2));\n\n return {\n success: true,\n event: input.eventName,\n emitter: String(emitterTrait.name),\n listener: String(listenerTrait.name),\n };\n },\n {\n name: 'connect_behaviors',\n description: 'Wire a cross-orbital event between two behaviors. Adds emits to the emitter trait and listens to the listener trait.',\n schema: z.object({\n emitterFile: z.string().describe('Emitter orbital filename in .orbitals/ (e.g., \"product.json\")'),\n listenerFile: z.string().describe('Listener orbital filename in .orbitals/ (e.g., \"cart_item.json\")'),\n eventName: z.string().describe('Event name in UPPER_SNAKE_CASE (e.g., \"ADD_TO_CART\")'),\n triggersEvent: z.string().optional().describe('Event to trigger on listener (defaults to \"INIT\")'),\n payloadJson: z.string().optional().describe('JSON array of payload fields: [{ name, type }]'),\n }),\n },\n );\n}\n\n// ============================================================================\n// compose (Phase 5)\n// ============================================================================\n\nexport function createComposeTool(workDir: string) {\n return tool(\n async (input) => {\n const orbitalsDir = path.join(workDir, '.orbitals');\n\n // Load all orbital files\n const orbitals: Record<string, unknown>[] = [];\n const orbitalFiles = input.orbitalFiles ? JSON.parse(input.orbitalFiles) as string[] :\n fs.readdirSync(orbitalsDir).filter(f => f.endsWith('.json'));\n\n for (const file of orbitalFiles) {\n const filePath = path.join(orbitalsDir, file);\n if (!fs.existsSync(filePath)) continue;\n orbitals.push(JSON.parse(fs.readFileSync(filePath, 'utf-8')));\n }\n\n if (orbitals.length === 0) {\n return { success: false, error: 'No orbitals found in .orbitals/' };\n }\n\n // Build pages from input or auto-generate\n let pages: Array<Record<string, unknown>>;\n if (input.pagesJson) {\n pages = JSON.parse(input.pagesJson);\n } else {\n // Auto-generate: one page per orbital\n pages = orbitals.map((o, i) => {\n const oName = String((o as Record<string, unknown>).name || `Orbital${i}`);\n const entityName = oName.replace(/Orbital$/i, '');\n const traits = ((o as Record<string, unknown>).traits as Array<Record<string, unknown>>) || [];\n return {\n name: `${entityName}Page`,\n path: `/${entityName.toLowerCase()}s`,\n ...(i === 0 ? { isInitial: true } : {}),\n traits: traits.filter(t => typeof t !== 'string' && !('ref' in t)).map(t => ({ ref: String(t.name) })),\n };\n });\n }\n\n // Merge pages into orbitals (each orbital keeps its own pages)\n for (const orbital of orbitals) {\n const oName = String(orbital.name || '');\n const orbitalTraitNames = ((orbital.traits as Array<Record<string, unknown>>) || [])\n .filter(t => typeof t !== 'string' && !('ref' in t))\n .map(t => String(t.name));\n\n orbital.pages = pages.filter(p => {\n const pageTraits = (p.traits as Array<{ ref: string }>) || [];\n return pageTraits.some(pt => orbitalTraitNames.includes(pt.ref));\n });\n }\n\n // Build final schema\n const schema = {\n name: input.appName || 'Application',\n version: '1.0.0',\n orbitals,\n };\n\n const schemaPath = path.join(workDir, 'schema.orb');\n fs.writeFileSync(schemaPath, JSON.stringify(schema, null, 2));\n\n // Validate\n const validation = validateWithOrbitalCLI(schema, workDir);\n\n return {\n success: true,\n appName: schema.name,\n orbitalCount: orbitals.length,\n pageCount: pages.length,\n schemaPath,\n validation: {\n valid: validation.valid ?? false,\n errorCount: (validation.errors || []).length,\n errors: (validation.errors || []).slice(0, 5).map(e => e.message),\n },\n };\n },\n {\n name: 'compose_app',\n description: 'Compose multiple orbitals from .orbitals/ into a final multi-page application schema. Writes schema.orb and validates.',\n schema: z.object({\n appName: z.string().optional().describe('Application name'),\n orbitalFiles: z.string().optional().describe('JSON array of orbital filenames. Defaults to all .json files in .orbitals/'),\n pagesJson: z.string().optional().describe('JSON array of page definitions: [{ name, path, isInitial?, traits: [{ ref }] }]. Auto-generated if omitted.'),\n }),\n },\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/gates/gate05-behavior-match.ts","../../src/evals/utils/orbital-validate.ts","../../src/gates/prompts.ts","../../src/gates/gate0-application.ts","../../src/gates/orchestrator.ts","../../src/gates/merge.ts","../../src/gates/gate1-orbital.ts","../../src/gates/gate2-trait.ts","../../src/gates/gate3-transition.ts","../../src/gates/gate4-render-ui.ts","../../src/gates/index.ts","../../src/gates/behavior-extract.ts","../../src/gates/scoring.ts","../../src/gates/agentic/tools.ts"],"names":["path","fs","extractJsonFromText","tr","opts","createOpenRouterClient","createDeepSeekClient"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Gate 0.5: Behavior Matching\n *\n * Given the shell .orb from Gate 0, asks the LLM to select the best-matching\n * golden behavior from @almadar/std. Loads the matched behavior's exported\n * .orb file (full OrbitalSchema with entities, state machines, render-ui)\n * as the goldenOrb for Gates 1-4.\n *\n * Only runs in guided mode. Skipped entirely in pure mode.\n *\n * @packageDocumentation\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport { getAllBehaviors } from '@almadar/std';\nimport type { OrbitalSchema } from '@almadar/core/types';\nimport type { GateOpts } from './types.js';\n\n// ============================================================================\n// Behavior Catalog (built once, cached)\n// ============================================================================\n\nlet cachedCatalog: string | null = null;\n\nfunction getBehaviorCatalog(): string {\n if (cachedCatalog) return cachedCatalog;\n\n const all = getAllBehaviors() as Array<Record<string, unknown>>;\n const lines = all.map((b) => {\n const name = String(b.name || '');\n const desc = String(b.description || '');\n const states = Array.isArray(b.states) ? b.states.length : 0;\n const events = Array.isArray(b.events) ? b.events.length : 0;\n return `- ${name}: ${desc} (${states} states, ${events} events)`;\n });\n cachedCatalog = lines.join('\\n');\n return cachedCatalog;\n}\n\n// ============================================================================\n// .orb File Loader\n// ============================================================================\n\n/**\n * Find the behaviors/exports/ directory relative to @almadar/std.\n * Works whether std is in node_modules or linked locally.\n */\nfunction findExportsDir(): string | null {\n // Try monorepo path first\n const monorepoPath = path.resolve(\n path.dirname(new URL(import.meta.url).pathname),\n '../../../almadar-std/behaviors/exports',\n );\n if (fs.existsSync(monorepoPath)) return monorepoPath;\n\n // Try node_modules\n try {\n const stdPkg = path.dirname(require.resolve('@almadar/std/package.json'));\n const nmPath = path.join(stdPkg, 'behaviors', 'exports');\n if (fs.existsSync(nmPath)) return nmPath;\n } catch {\n // require.resolve failed\n }\n\n return null;\n}\n\nexport { loadGoldenOrb as loadGoldenOrbByName };\n\nfunction loadGoldenOrb(behaviorName: string): OrbitalSchema | null {\n const exportsDir = findExportsDir();\n if (!exportsDir) {\n console.warn('[Gate 0.5] Cannot find behaviors/exports/ directory');\n return null;\n }\n\n const orbPath = path.join(exportsDir, `${behaviorName}.orb`);\n if (!fs.existsSync(orbPath)) {\n console.warn(`[Gate 0.5] .orb file not found: ${orbPath}`);\n return null;\n }\n\n const content = fs.readFileSync(orbPath, 'utf-8');\n return JSON.parse(content) as OrbitalSchema;\n}\n\n// ============================================================================\n// Prompts\n// ============================================================================\n\nfunction buildMatchSystemPrompt(): string {\n return `You are a behavior matching assistant. Given an application description and its orbital structure, select the most relevant golden behavior from the catalog below.\n\nThe catalog contains 107 standard behaviors. Each behavior is a proven, production-quality .orb program that handles a specific interaction pattern (CRUD lists, forms, search, cart, booking, etc.).\n\nYour task: pick the ONE behavior that best matches the application's primary interaction pattern. If no behavior is a close match, respond with \"none\".\n\nRespond with ONLY valid JSON: { \"match\": \"std-behavior-name\" } or { \"match\": \"none\" }\nNo markdown, no explanation.`;\n}\n\nfunction buildMatchUserPrompt(\n prompt: string,\n orb: OrbitalSchema,\n): string {\n const orbitalNames = orb.orbitals.map((o) => {\n const name = (o as { name: string }).name;\n return name;\n });\n\n return `Application: ${prompt}\n\nOrbitals produced by Gate 0: ${orbitalNames.join(', ')}\n\nBehavior catalog:\n${getBehaviorCatalog()}`;\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\nexport interface BehaviorMatchResult {\n matchedName: string | null;\n goldenOrb: OrbitalSchema | null;\n}\n\n/**\n * Match the prompt against golden behaviors via LLM.\n * Loads the matched behavior's exported .orb file as goldenOrb.\n */\nexport async function runGate05(\n client: LLMClient,\n prompt: string,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n): Promise<BehaviorMatchResult> {\n const systemPrompt = buildMatchSystemPrompt();\n const userPrompt = buildMatchUserPrompt(prompt, orb);\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 256,\n });\n\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n console.warn('[Gate 0.5] Failed to parse match response, falling back to pure mode');\n return { matchedName: null, goldenOrb: null };\n }\n\n const obj = JSON.parse(parsed) as Record<string, unknown>;\n const matchName = String(obj.match || 'none');\n\n if (matchName === 'none') {\n console.log('[Gate 0.5] No behavior match found, using pure mode');\n return { matchedName: null, goldenOrb: null };\n }\n\n // Load the full .orb file from behaviors/exports/\n const goldenOrb = loadGoldenOrb(matchName);\n if (!goldenOrb) {\n console.warn(`[Gate 0.5] Matched \"${matchName}\" but could not load .orb file`);\n return { matchedName: matchName, goldenOrb: null };\n }\n\n console.log(`[Gate 0.5] Matched behavior: ${matchName}`);\n return { matchedName: matchName, goldenOrb };\n}\n","/**\n * Orbital CLI Validation Utility\n *\n * Shells out to `orbital validate --json <file>` for real schema validation.\n * The CLI always exits 0 and outputs JSON with validation results.\n *\n * @packageDocumentation\n */\n\nimport { execSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst ORBITAL_BINARY = '/home/osamah/bin/orbital';\n\nexport interface OrbitalValidationError {\n code: string;\n path: string;\n message: string;\n suggestion?: string;\n}\n\nexport interface OrbitalValidationStats {\n orbitals: number;\n entities: number;\n traits: number;\n pages: number;\n}\n\nexport interface OrbitalValidationResult {\n valid: boolean;\n errors: OrbitalValidationError[];\n stats?: OrbitalValidationStats;\n}\n\n/**\n * Validate an orbital schema using the `orbital validate` CLI.\n *\n * @param schema - JSON schema object or JSON string\n * @param workDir - Directory to write the temp .orb file\n * @returns Validation result with errors and stats\n */\nexport function validateWithOrbitalCLI(\n schema: unknown,\n workDir: string\n): OrbitalValidationResult {\n // Check if binary exists\n if (!fs.existsSync(ORBITAL_BINARY)) {\n return {\n valid: false,\n errors: [{ code: 'CLI_NOT_FOUND', path: '', message: `orbital binary not found at ${ORBITAL_BINARY}` }],\n };\n }\n\n // Write schema to temp file\n const schemaStr = typeof schema === 'string' ? schema : JSON.stringify(schema, null, 2);\n const tempPath = path.join(workDir, `_eval_validate_${Date.now()}.orb`);\n\n try {\n fs.writeFileSync(tempPath, schemaStr);\n\n const output = execSync(`${ORBITAL_BINARY} validate --json \"${tempPath}\"`, {\n encoding: 'utf-8',\n timeout: 30_000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n const result = JSON.parse(extractJson(output)) as OrbitalValidationResult;\n return result;\n } catch (error: unknown) {\n // CLI may write JSON to stdout even on failure\n const err = error as { stdout?: string; stderr?: string; message?: string };\n if (err.stdout) {\n try {\n return JSON.parse(extractJson(err.stdout)) as OrbitalValidationResult;\n } catch {\n // stdout wasn't JSON\n }\n }\n\n return {\n valid: false,\n errors: [{\n code: 'CLI_ERROR',\n path: '',\n message: err.stderr?.trim() || err.message || 'Unknown CLI error',\n }],\n };\n } finally {\n // Clean up temp file\n try {\n fs.unlinkSync(tempPath);\n } catch {\n // ignore cleanup errors\n }\n }\n}\n\n/**\n * Extract the validation JSON from CLI output.\n * The CLI prints: DEBUG lines, echoed schema, then the validation JSON object.\n * We find the JSON object containing `\"valid\"` by extracting all top-level\n * balanced JSON objects and returning the one with a `valid` field.\n */\nfunction extractJson(raw: string): string {\n const objects: string[] = [];\n let i = 0;\n\n while (i < raw.length) {\n if (raw[i] === '{') {\n let depth = 0;\n let inString = false;\n let escape = false;\n const start = i;\n\n for (; i < raw.length; i++) {\n const ch = raw[i];\n if (escape) { escape = false; continue; }\n if (ch === '\\\\' && inString) { escape = true; continue; }\n if (ch === '\"') { inString = !inString; continue; }\n if (inString) continue;\n if (ch === '{') depth++;\n if (ch === '}') {\n depth--;\n if (depth === 0) {\n objects.push(raw.slice(start, i + 1));\n i++;\n break;\n }\n }\n }\n } else {\n i++;\n }\n }\n\n // Return the object containing \"valid\" (the validation result)\n for (const obj of objects) {\n if (obj.includes('\"valid\"')) return obj;\n }\n\n // Fallback: return last object (most likely the result)\n if (objects.length > 0) return objects[objects.length - 1];\n return raw.trim();\n}\n","/**\n * Gate Prompt Builders\n *\n * Each gate gets a minimal, focused system prompt containing ONLY the knowledge\n * that gate needs. No shared architecture dumps across gates.\n *\n * Generator functions from @almadar/skills derive content from source packages\n * so prompts update automatically when patterns/bindings/rules change.\n *\n * @packageDocumentation\n */\n\nimport type {\n OrbitalDefinition,\n Trait,\n Transition,\n Entity,\n StateMachine,\n} from '@almadar/core/types';\nimport {\n getDecompositionCompact,\n getBindingsCompact,\n getBindingContextRules,\n getOrbRenderUIGuide,\n} from '@almadar/skills';\n\n// ============================================================================\n// Gate 0: Application Decomposition\n// ============================================================================\n\nexport function buildGate0SystemPrompt(): string {\n const decomposition = getDecompositionCompact();\n\n return `You are an application architect. Given a natural language description, produce a shell .orb JSON schema.\n\n${decomposition}\n\nYour output must be a JSON object with:\n- name: PascalCase application name\n- version: \"1.0.0\"\n- orbitals: array of orbital shells\n\nEach orbital shell:\n- name: PascalCase ending in \"Orbital\" (e.g., \"TaskOrbital\")\n- entity: { name: PascalCase singular noun, fields: [{ name: \"id\", type: \"string\", required: true }] }\n- traits: [{ name: PascalCase, linkedEntity: entityName, category: \"interaction\", stateMachine: { states: [{ name: \"idle\", isInitial: true }], events: [], transitions: [] } }]\n- pages: [{ name: PascalCase, path: \"/lowercase\", traits: [{ ref: \"TraitName\" }] }]\n\nRules:\n- ONE orbital per entity type\n- Every orbital must have at least one trait\n- Keep it minimal: only the orbitals truly needed\n- Do NOT fill in entity fields (Gate 1 does that)\n- Do NOT fill in state machines (Gate 2 does that)\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport function buildGate0UserPrompt(\n prompt: string,\n guidedData?: { orbitalCount: number; entityNames: string[]; traitNames: string[] },\n): string {\n let userPrompt = `Decompose this application into an .orb schema:\\n\\n${prompt}`;\n\n if (guidedData) {\n userPrompt += `\\n\\nReference structure (use as guide):\n- ${guidedData.orbitalCount} orbital(s)\n- Entities: ${guidedData.entityNames.join(', ')}\n- Traits: ${guidedData.traitNames.join(', ')}`;\n }\n\n return userPrompt;\n}\n\n// ============================================================================\n// Gate 1: Orbital Structure (Entity Fields + Persistence)\n// ============================================================================\n\nexport function buildGate1SystemPrompt(): string {\n return `You are an entity designer. Given an orbital shell, enrich it with full entity fields, persistence, and page details. Do NOT modify the state machine (Gate 2 fills that).\n\nYour output must be a JSON object with:\n- name: keep unchanged\n- entity:\n - name: keep unchanged\n - persistence: \"persistent\" (survives sessions, needs collection), \"runtime\" (transient), or \"singleton\" (app-wide config)\n - collection: snake_case plural (only for persistent entities, e.g., \"cart_items\")\n - fields: array of { name, type, required?, default? }\n - First field MUST be { name: \"id\", type: \"string\", required: true }\n - Valid types: \"string\", \"number\", \"boolean\", \"object\", \"array\"\n - Include ALL fields the entity needs (status, timestamps, amounts, references, etc.)\n- traits: keep unchanged (shell state machine, Gate 2 fills it)\n- pages: [{ name: PascalCase, path: \"/lowercase\", isInitial?, traits: [{ ref: \"TraitName\" }] }]\n - EVERY page MUST have a traits array binding it to the orbital's trait(s)\n - Without traits, the page renders blank (runtime doesn't know which trait to activate)\n\nRules:\n- Think about what fields this entity genuinely needs for its domain\n- Include status fields (e.g., \"status\": \"string\") for entities with lifecycle states\n- Include amount/count fields (e.g., \"total\": \"number\") for entities with calculations\n- Include timestamp fields (e.g., \"createdAt\": \"string\") for auditable entities\n- Do NOT touch the stateMachine. Return it exactly as received.\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport function buildGate1UserPrompt(\n orbital: OrbitalDefinition,\n allOrbitals: OrbitalDefinition[],\n guidedOrbital?: OrbitalDefinition,\n): string {\n let userPrompt = `Enrich this orbital with full entity fields and pages:\n${JSON.stringify(orbital, null, 2)}\n\nOther orbitals in this application (for cross-orbital context):\n${JSON.stringify(allOrbitals.filter((o) => o.name !== orbital.name), null, 2)}`;\n\n if (guidedOrbital) {\n userPrompt += `\\n\\nReference (use as guide):\n${JSON.stringify(guidedOrbital, null, 2)}`;\n }\n\n return userPrompt;\n}\n\n// ============================================================================\n// Gate 2: State Machine + Slot Assignments\n// ============================================================================\n\nexport function buildGate2SystemPrompt(): string {\n return `You are a state machine designer. Given a trait and its entity, design the state machine topology and assign UI slot presentations per state.\n\nYour output must be a JSON object with:\n- name: keep unchanged\n- linkedEntity: keep unchanged\n- category: \"interaction\"\n- stateMachine:\n - states: [{ name: camelCase, isInitial?: true }]\n - events: [{ key: \"UPPER_SNAKE_CASE\", name: \"Human Label\", payloadSchema?: [{ name, type }] }]\n - transitions: [{ from, event, to, effects: [] }]\n- ui: { \"stateName\": { \"presentation\": \"inline\" | \"modal\" }, ... }\n\nState Machine Rules:\n- Exactly ONE state must have isInitial: true (typically \"idle\" or \"browsing\")\n- Every state must be reachable from the initial state\n- Every event must be used in at least one transition\n- The initial state MUST have an INIT self-loop transition (idle->INIT->idle or browsing->INIT->browsing)\n- Leave effects as empty arrays (Gate 3 fills these)\n\nUI Slot Assignment Rules:\n- Assign \"inline\" to primary view states (idle, browsing, listing, viewing)\n- Assign \"modal\" to overlay action states (creating, editing, deleting, confirming)\n- Every state MUST have an assignment in the ui object\n- Every \"modal\" state MUST have BOTH a CLOSE and CANCEL transition back to an \"inline\" state\n\nTypical CRUD state machine pattern:\n- idle/browsing (inline): main list view, INIT self-loop\n- creating (modal): opened by CREATE event, closed by SAVE/CANCEL/CLOSE\n- editing (modal): opened by EDIT event, closed by SAVE/CANCEL/CLOSE\n- deleting (modal): opened by DELETE event, closed by CONFIRM_DELETE/CANCEL/CLOSE\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport function buildGate2UserPrompt(\n trait: Trait,\n entity: Entity,\n orbitalDescription: string,\n guidedTrait?: Trait,\n): string {\n let userPrompt = `Design the state machine for trait:\n${JSON.stringify(trait, null, 2)}\n\nEntity it manages:\n${JSON.stringify(entity, null, 2)}\n\nOrbital context: ${orbitalDescription}`;\n\n if (guidedTrait) {\n userPrompt += `\\n\\nReference (use as guide):\n${JSON.stringify(guidedTrait, null, 2)}`;\n }\n\n return userPrompt;\n}\n\n// ============================================================================\n// Gate 3: Transition Effects (Guards + Data Effects)\n// ============================================================================\n\nexport function buildGate3SystemPrompt(): string {\n const bindingsCompact = getBindingsCompact();\n const bindingContextRules = getBindingContextRules();\n\n return `You are a transition effect designer. Given a transition, add guards and data effects.\n\n${bindingsCompact}\n\n${bindingContextRules}\n\nYour output must be a JSON object with:\n- from: keep unchanged\n- event: keep unchanged\n- to: keep unchanged\n- guard: s-expression array or null\n Example: [\"and\", [\"not\", [\"eq\", \"@entity.status\", \"locked\"]], [\"gt\", \"@entity.count\", 0]]\n- effects: array of effect tuples\n\nEffect types (use ONLY these four):\n- [\"set\", \"@entity.fieldName\", value] - Set entity field. Value: \"@payload.field\", \"@now\", or literal.\n- [\"fetch\", \"EntityName\"] - Load entity data. Use in INIT transitions.\n- [\"persist\", \"create\"|\"update\"|\"delete\", \"EntityName\", \"@payload.data\"] - CRUD entity records.\n- [\"notify\", \"message\", \"success\"|\"error\"|\"info\"] - Show a notification.\n\nBANNED effects: call-service, emit, log, navigate.\n\nRules:\n- Guards are optional. Only add when the transition genuinely needs a precondition.\n- INIT transitions: include [\"fetch\", \"EntityName\"]\n- SAVE transitions (from creating): include [\"persist\", \"create\", \"EntityName\", \"@payload.data\"]\n- SAVE transitions (from editing): include [\"persist\", \"update\", \"EntityName\", \"@payload.data\"]\n- CONFIRM_DELETE transitions: include [\"persist\", \"delete\", \"EntityName\", \"@payload.data\"]\n- set target MUST start with @entity (never @payload)\n- Do NOT include render-ui effects (Gate 4 handles those)\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport function buildGate3UserPrompt(\n transition: Transition,\n entity: Entity,\n sm: StateMachine,\n guidedTransition?: Transition,\n): string {\n let userPrompt = `Design effects for transition:\n${transition.from} --[${transition.event}]--> ${transition.to}\n\nEntity: ${JSON.stringify(entity, null, 2)}\nAll states: ${sm.states.map((s) => s.name).join(', ')}\nAll events: ${JSON.stringify(sm.events, null, 2)}`;\n\n if (guidedTransition) {\n userPrompt += `\\n\\nReference (use as guide):\n${JSON.stringify(guidedTransition, null, 2)}`;\n }\n\n return userPrompt;\n}\n\n// ============================================================================\n// Gate 4: Render UI\n// ============================================================================\n\nexport function buildGate4SystemPrompt(): string {\n const orbGuide = getOrbRenderUIGuide();\n\n return `You are a UI designer. Given a transition with its effects, produce the render-ui pattern tree.\n\n${orbGuide}\n\nYour output must be a JSON object with:\n- renderEffects: [{ slot, tree }]\n - slot: \"main\" or \"modal\" (determined by the state's slot assignment shown in the user prompt)\n - tree: pattern composition object, or null (to clear a slot)\n\nSlot Rules:\n- Use the slot shown in the user prompt for the target state (main or modal)\n- When exiting a modal state (the user prompt will say so), you MUST include:\n 1. { \"slot\": \"modal\", \"tree\": null } to clear the modal\n 2. { \"slot\": \"main\", \"tree\": { ... } } to render the main view\n\nBinding Rules:\n- Bindings are ONLY paths: @entity.name, @entity.price (NO expressions like @entity.x <= 0)\n- Each prop value must contain at most ONE binding. NEVER concatenate: \"@entity.price @entity.currency\" is INVALID\n- For combined display, use separate typography elements or static labels\n- button event props must match state machine event keys\n\nPattern Rules:\n- Use ONLY props that exist on the pattern. Do NOT invent props.\n- data-list: entity, itemActions, emptyState (NOT emptyIcon, emptyTitle)\n- button: label, variant, event, icon, size (NOT disabled)\n- card: children (NOT padding, bg, border, use box for those)\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport interface SlotContext {\n stateSlots: Record<string, 'main' | 'modal'>;\n exitsModal: boolean;\n}\n\nexport function buildGate4UserPrompt(\n transition: Transition,\n entity: Entity,\n targetStateName: string,\n sm: StateMachine,\n slotContext: SlotContext,\n guidedRenderEffects?: Array<{ slot: string; tree: Record<string, unknown> }>,\n): string {\n const targetSlot = slotContext.stateSlots[targetStateName] || 'main';\n const fromSlot = slotContext.stateSlots[transition.from] || 'main';\n\n let userPrompt = `Design the UI for state \"${targetStateName}\" (renders to \"${targetSlot}\" slot):\n\nTransition: ${transition.from} (${fromSlot}) --[${transition.event}]--> ${transition.to} (${targetSlot})\nCurrent effects: ${JSON.stringify(transition.effects || [], null, 2)}\nEntity: ${JSON.stringify(entity, null, 2)}\nAll states with slots: ${Object.entries(slotContext.stateSlots).map(([s, slot]) => `${s}(${slot})`).join(', ')}`;\n\n if (slotContext.exitsModal) {\n userPrompt += `\\n\\nIMPORTANT: This transition exits a modal state. You MUST include:\n1. { \"slot\": \"modal\", \"tree\": null } to clear the modal overlay\n2. { \"slot\": \"main\", \"tree\": { ... } } to render the main view`;\n }\n\n if (guidedRenderEffects) {\n userPrompt += `\\n\\nReference render-ui (use as guide):\n${JSON.stringify(guidedRenderEffects, null, 2)}`;\n }\n\n return userPrompt;\n}\n","/**\n * Gate 0: Application Decomposition\n *\n * NL prompt -> shell OrbitalSchema (orbital names, entity name + id field,\n * trait names with empty state machines, pages).\n * Single LLM call with fresh context.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate0SystemPrompt, buildGate0UserPrompt } from './prompts.js';\n\n// ============================================================================\n// Default Theme\n// ============================================================================\n\nconst DEFAULT_THEME = {\n name: 'default',\n tokens: {\n colors: {\n primary: '#6366f1',\n 'primary-hover': '#4f46e5',\n 'primary-foreground': '#ffffff',\n accent: '#ec4899',\n 'accent-foreground': '#ffffff',\n success: '#22c55e',\n warning: '#f59e0b',\n error: '#ef4444',\n },\n },\n};\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\nfunction normalizeOrbital(raw: Record<string, unknown>): OrbitalDefinition {\n const name = String(raw.name || 'Orbital');\n\n // Normalize entity\n const entityRaw = (raw.entity as Record<string, unknown>) || {};\n const entityName = String(entityRaw.name || name.replace(/Orbital$/i, ''));\n const fields = Array.isArray(entityRaw.fields) ? entityRaw.fields : [];\n const hasId = fields.some((f: Record<string, unknown>) => f.name === 'id');\n\n const entity = {\n name: entityName,\n fields: hasId\n ? fields.map((f: Record<string, unknown>) => ({\n name: String(f.name),\n type: String(f.type || 'string'),\n ...(f.required ? { required: true } : {}),\n }))\n : [\n { name: 'id', type: 'string', required: true },\n ...fields.map((f: Record<string, unknown>) => ({\n name: String(f.name),\n type: String(f.type || 'string'),\n ...(f.required ? { required: true } : {}),\n })),\n ],\n };\n\n // Normalize traits\n const traitsRaw = Array.isArray(raw.traits) ? raw.traits : [];\n const traits = traitsRaw.length > 0\n ? traitsRaw.map((t: Record<string, unknown>) => ({\n name: String(t.name || `${entityName}Control`),\n linkedEntity: String(t.linkedEntity || entityName),\n category: 'interaction' as const,\n stateMachine: {\n states: [{ name: 'idle', isInitial: true }],\n events: [] as Array<{ key: string; name: string }>,\n transitions: [] as Array<{ from: string; event: string; to: string }>,\n },\n }))\n : [{\n name: `${entityName}Control`,\n linkedEntity: entityName,\n category: 'interaction' as const,\n stateMachine: {\n states: [{ name: 'idle', isInitial: true }],\n events: [] as Array<{ key: string; name: string }>,\n transitions: [] as Array<{ from: string; event: string; to: string }>,\n },\n }];\n\n // Normalize pages - ensure every page has traits refs\n const traitNames = traits.map((t) => t.name);\n const pagesRaw = Array.isArray(raw.pages) ? raw.pages : [];\n const defaultTraits = traitNames.map((n) => ({ ref: n }));\n const pages = pagesRaw.length > 0\n ? pagesRaw.map((p: Record<string, unknown>) => ({\n name: String(p.name || name.replace(/Orbital$/i, '')),\n path: String(p.path || p.route || `/${name.toLowerCase().replace(/orbital$/i, '')}`),\n ...(p.isInitial ? { isInitial: true } : {}),\n traits: Array.isArray(p.traits) ? p.traits : defaultTraits,\n }))\n : [{\n name: name.replace(/Orbital$/i, ''),\n path: `/${name.toLowerCase().replace(/orbital$/i, '')}`,\n traits: defaultTraits,\n }];\n\n return { name, entity, traits, pages } as OrbitalDefinition;\n}\n\nfunction parseGate0Response(raw: string): OrbitalSchema {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n throw new Error(`Gate 0: failed to parse JSON from response: ${raw.slice(0, 200)}`);\n }\n\n const obj = JSON.parse(parsed) as Record<string, unknown>;\n\n const appName = String(obj.name || obj.appName || 'App');\n const version = String(obj.version || '1.0.0');\n const orbitalsRaw = Array.isArray(obj.orbitals) ? obj.orbitals : [];\n\n return {\n name: appName,\n version,\n design: { theme: DEFAULT_THEME } as OrbitalSchema['design'],\n orbitals: orbitalsRaw.map((o: Record<string, unknown>) => normalizeOrbital(o)),\n };\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\nexport async function runGate0(\n client: LLMClient,\n prompt: string,\n opts: GateOpts = {},\n behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate0SystemPrompt();\n const userPrompt = buildGate0UserPrompt(\n prompt,\n behaviorData?.appLevel,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 4096,\n });\n\n return parseGate0Response(raw);\n}\n","/**\n * Orchestrator\n *\n * Simple chain: gate0 → gate1 → gate2 → gate3 → gate4 → validate.\n * Each gate accepts an OrbitalSchema and returns an enriched OrbitalSchema.\n *\n * @packageDocumentation\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport {\n createDeepSeekClient,\n createOpenRouterClient,\n type LLMClient,\n} from '@almadar/llm';\nimport { validateWithOrbitalCLI } from '../evals/utils/orbital-validate.js';\nimport type {\n GatePipelineConfig,\n GatePipelineResult,\n GateOpts,\n GateTimings,\n BehaviorGateData,\n VerifyResult,\n} from './types.js';\nimport type { OrbitalSchema } from '@almadar/core/types';\nimport { runGate0 } from './gate0-application.js';\nimport { runGate05 } from './gate05-behavior-match.js';\nimport { runGate1 } from './gate1-orbital.js';\nimport { runGate2 } from './gate2-trait.js';\nimport { runGate3 } from './gate3-transition.js';\nimport { runGate4 } from './gate4-render-ui.js';\n\n// ============================================================================\n// Client Factory\n// ============================================================================\n\nfunction createClientForProvider(config: GatePipelineConfig): LLMClient {\n const opts = {\n ...(config.model ? { model: config.model } : {}),\n ...(config.temperature !== undefined ? { temperature: config.temperature } : {}),\n };\n\n let client: LLMClient;\n switch (config.provider) {\n case 'deepseek':\n client = createDeepSeekClient(opts);\n break;\n case 'zhipu':\n client = createOpenRouterClient({ model: 'z-ai/glm-4.7', ...opts });\n break;\n case 'qwen3.5':\n client = createOpenRouterClient({ model: 'qwen/qwen3.5-9b', ...opts });\n break;\n case 'gemma3-4b':\n client = createOpenRouterClient({ model: 'google/gemma-3-4b-it', ...opts });\n break;\n case 'mistral-small':\n client = createOpenRouterClient({ model: 'mistralai/mistral-small-3.1-24b-instruct', ...opts });\n break;\n default: {\n const _exhaustive: never = config.provider;\n throw new Error(`Unknown provider: ${_exhaustive}`);\n }\n }\n\n // Qwen3.5 burns all output tokens on reasoning unless thinking is disabled\n if (config.provider === 'qwen3.5') {\n const originalCallRaw = client.callRaw.bind(client);\n const originalCallRawWithMetadata = client.callRawWithMetadata.bind(client);\n client.callRaw = (opts) =>\n originalCallRaw({ ...opts, userPrompt: `/no_think\\n${opts.userPrompt}` });\n client.callRawWithMetadata = (opts) =>\n originalCallRawWithMetadata({ ...opts, userPrompt: `/no_think\\n${opts.userPrompt}` });\n }\n\n return client;\n}\n\n// ============================================================================\n// Timing Helper\n// ============================================================================\n\nfunction timeMs(): number {\n return performance.now();\n}\n\n// ============================================================================\n// Pipeline\n// ============================================================================\n\n/**\n * Run the full gated construction pipeline.\n *\n * Flow:\n * orb0 = gate0(prompt) → orb1 = gate1(orb0) → orb2 = gate2(orb1)\n * → orb3 = gate3(orb2) → orbFinal = gate4(orb3) → validate(orbFinal)\n */\nexport async function runGatePipeline(\n prompt: string,\n config: GatePipelineConfig,\n behaviorData?: BehaviorGateData,\n goldenOrb?: OrbitalSchema,\n): Promise<GatePipelineResult> {\n const client = createClientForProvider(config);\n const maxTokens = config.maxTokens || 4096;\n const pipelineStart = timeMs();\n\n const opts: GateOpts = {\n maxTokens,\n goldenOrb,\n workDir: config.workDir,\n };\n\n // ── Gate 0: prompt → shell .orb ──\n const g0Start = timeMs();\n const orbAfterGate0 = await runGate0(client, prompt, opts, behaviorData);\n const g0Ms = timeMs() - g0Start;\n console.log(`[Gate 0] ${orbAfterGate0.name}: ${orbAfterGate0.orbitals.length} orbital(s) (${g0Ms.toFixed(0)}ms)`);\n maybeValidate(config, orbAfterGate0, 0);\n\n // ── Gate 0.5: behavior matching (guided mode only) ──\n if (config.mode === 'guided' && !goldenOrb) {\n const g05Start = timeMs();\n const matchResult = await runGate05(client, prompt, orbAfterGate0, opts);\n const g05Ms = timeMs() - g05Start;\n if (matchResult.goldenOrb) {\n opts.goldenOrb = matchResult.goldenOrb;\n console.log(`[Gate 0.5] Matched: ${matchResult.matchedName} (${g05Ms.toFixed(0)}ms)`);\n } else {\n console.log(`[Gate 0.5] No match, continuing in pure mode (${g05Ms.toFixed(0)}ms)`);\n }\n }\n\n // ── Gate 1: enrich orbitals ──\n const g1Start = timeMs();\n const orbAfterGate1 = await runGate1(client, orbAfterGate0, opts, behaviorData);\n const g1Ms = timeMs() - g1Start;\n console.log(`[Gate 1] Enriched ${orbAfterGate1.orbitals.length} orbital(s) (${g1Ms.toFixed(0)}ms)`);\n maybeValidate(config, orbAfterGate1, 1);\n\n // ── Gate 2: fill state machines ──\n const g2Start = timeMs();\n const orbAfterGate2 = await runGate2(client, orbAfterGate1, opts, behaviorData);\n const g2Ms = timeMs() - g2Start;\n console.log(`[Gate 2] State machines filled (${g2Ms.toFixed(0)}ms)`);\n maybeValidate(config, orbAfterGate2, 2);\n\n // ── Gate 3: guards + effects ──\n const g3Start = timeMs();\n const orbAfterGate3 = await runGate3(client, orbAfterGate2, opts, behaviorData);\n const g3Ms = timeMs() - g3Start;\n console.log(`[Gate 3] Guards + effects filled (${g3Ms.toFixed(0)}ms)`);\n maybeValidate(config, orbAfterGate3, 3);\n\n // ── Gate 4: render-ui ──\n const g4Start = timeMs();\n const orbFinal = await runGate4(client, orbAfterGate3, opts, behaviorData);\n const g4Ms = timeMs() - g4Start;\n console.log(`[Gate 4] Render-ui appended (${g4Ms.toFixed(0)}ms)`);\n\n // ── Validate final .orb ──\n fs.mkdirSync(config.workDir, { recursive: true });\n const validation = validateWithOrbitalCLI(orbFinal, config.workDir);\n console.log(`[Validate] valid=${validation.valid}, errors=${(validation.errors || []).length}`);\n\n // ── Verify (compile + server + browser) ──\n let verify: VerifyResult | undefined;\n if (config.verify) {\n verify = await runVerify(orbFinal, config);\n }\n\n const totalMs = timeMs() - pipelineStart;\n console.log(`[Pipeline] Total: ${(totalMs / 1000).toFixed(1)}s`);\n\n const timings: GateTimings = {\n gate0Ms: g0Ms,\n gate1Ms: [g1Ms],\n gate2Ms: [g2Ms],\n gate3Ms: [g3Ms],\n gate4Ms: [g4Ms],\n totalMs,\n };\n\n return {\n config,\n orbAfterGate0,\n orbAfterGate1,\n orbAfterGate2,\n orbAfterGate3,\n orbFinal,\n validation: {\n valid: validation.valid ?? false,\n errors: validation.errors ?? [],\n },\n verify,\n timings,\n };\n}\n\n// ============================================================================\n// Optional Per-Gate Validation\n// ============================================================================\n\n// ============================================================================\n// Orbital Verify (Compile + Server + Browser)\n// ============================================================================\n\nasync function runVerify(\n orb: OrbitalSchema,\n config: GatePipelineConfig,\n): Promise<VerifyResult> {\n const tmpDir = path.join(config.workDir, 'gate-verify');\n fs.mkdirSync(tmpDir, { recursive: true });\n const orbPath = path.join(tmpDir, `${orb.name || 'generated'}.orb`);\n fs.writeFileSync(orbPath, JSON.stringify(orb, null, 2));\n\n // Dynamic import to avoid rootDir constraint (tool lives outside this package)\n const verifyApiPath = path.resolve(\n path.dirname(new URL(import.meta.url).pathname),\n '../../../../tools/orbital-verify-unified/src/api.js',\n );\n const { verifyApp } = await import(verifyApiPath) as { verifyApp: (opts: Record<string, unknown>) => Promise<{\n totalPassed: number;\n totalFailed: number;\n totalChecks: number;\n coverage?: { ratio: number; coveredItems: number; totalItems: number };\n phases: Array<{ phase: number; name: string; passed: number; failed: number; checks: Array<{ label: string; passed: boolean; detail?: string }> }>;\n }> };\n\n console.log(`[Verify] Starting orbital-verify on ${orbPath}`);\n const result = await verifyApp({\n orbPath,\n headed: config.verifyHeaded ?? false,\n screenshots: config.verifyScreenshots ?? false,\n });\n\n console.log(\n `[Verify] ${result.totalPassed}/${result.totalChecks} passed, ` +\n `${result.totalFailed} failed` +\n (result.coverage ? `, coverage=${(result.coverage.ratio * 100).toFixed(0)}%` : ''),\n );\n\n return {\n totalPassed: result.totalPassed,\n totalFailed: result.totalFailed,\n totalChecks: result.totalChecks,\n coverage: result.coverage ? {\n ratio: result.coverage.ratio,\n coveredItems: result.coverage.coveredItems,\n totalItems: result.coverage.totalItems,\n } : undefined,\n phases: result.phases.map((p) => ({\n phase: p.phase,\n name: p.name,\n passed: p.passed,\n failed: p.failed,\n checks: p.checks,\n })),\n };\n}\n\n// ============================================================================\n// Optional Per-Gate Validation\n// ============================================================================\n\nfunction maybeValidate(\n config: GatePipelineConfig,\n orb: OrbitalSchema,\n gate: number,\n): void {\n if (!config.validateAfterEachGate) return;\n\n const result = validateWithOrbitalCLI(orb, config.workDir);\n if (!result.valid) {\n console.warn(\n `[Gate ${gate} validate] ${result.errors.length} error(s): ` +\n result.errors.slice(0, 3).map((e) => e.message).join('; '),\n );\n }\n}\n","/**\n * Merge Utilities\n *\n * Immutable helpers for replacing orbitals, traits, and transitions\n * within an OrbitalSchema. All return a new OrbitalSchema (deep clone).\n *\n * @packageDocumentation\n */\n\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Trait,\n Transition,\n} from '@almadar/core/types';\n\n// ============================================================================\n// Deep Clone\n// ============================================================================\n\n/** Deep clone an OrbitalSchema via structured clone. */\nexport function deepCloneOrb(orb: OrbitalSchema): OrbitalSchema {\n return structuredClone(orb);\n}\n\n// ============================================================================\n// Replace Orbital\n// ============================================================================\n\n/**\n * Replace an orbital by name within the schema.\n * Returns a new OrbitalSchema with the orbital swapped.\n */\nexport function replaceOrbital(\n orb: OrbitalSchema,\n name: string,\n enriched: OrbitalDefinition,\n): OrbitalSchema {\n const clone = deepCloneOrb(orb);\n const idx = clone.orbitals.findIndex(\n (o) => (o as OrbitalDefinition).name === name,\n );\n if (idx >= 0) {\n clone.orbitals[idx] = enriched;\n }\n return clone;\n}\n\n// ============================================================================\n// Replace Trait\n// ============================================================================\n\n/**\n * Replace a trait by name within a specific orbital.\n * Returns a new OrbitalSchema with the trait swapped.\n */\nexport function replaceTrait(\n orb: OrbitalSchema,\n orbName: string,\n traitName: string,\n enriched: Trait,\n): OrbitalSchema {\n const clone = deepCloneOrb(orb);\n const orbital = clone.orbitals.find(\n (o) => (o as OrbitalDefinition).name === orbName,\n ) as OrbitalDefinition | undefined;\n if (!orbital) return clone;\n\n const traits = orbital.traits;\n const idx = traits.findIndex((t) => {\n if (typeof t === 'string') return t === traitName;\n if ('ref' in t) return t.ref === traitName;\n return t.name === traitName;\n });\n\n if (idx >= 0) {\n traits[idx] = enriched;\n }\n return clone;\n}\n\n// ============================================================================\n// Replace Transition\n// ============================================================================\n\n/**\n * Replace a transition (by from+event) within a trait's state machine.\n * Returns a new OrbitalSchema with the transition swapped.\n */\nexport function replaceTransition(\n orb: OrbitalSchema,\n orbName: string,\n traitName: string,\n from: string,\n event: string,\n enriched: Transition,\n): OrbitalSchema {\n const clone = deepCloneOrb(orb);\n const orbital = clone.orbitals.find(\n (o) => (o as OrbitalDefinition).name === orbName,\n ) as OrbitalDefinition | undefined;\n if (!orbital) return clone;\n\n const trait = orbital.traits.find((t) => {\n if (typeof t === 'string') return false;\n if ('ref' in t) return false;\n return t.name === traitName;\n }) as Trait | undefined;\n if (!trait?.stateMachine) return clone;\n\n const idx = trait.stateMachine.transitions.findIndex(\n (t) => t.from === from && t.event === event,\n );\n if (idx >= 0) {\n trait.stateMachine.transitions[idx] = enriched;\n }\n return clone;\n}\n","/**\n * Gate 1: Orbital Structure\n *\n * Enriches each orbital shell with full entity fields, persistence,\n * collection, trait emits/listens, and pages.\n * One LLM call per orbital.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n FieldType,\n TraitEventContract,\n TraitEventListener,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate1SystemPrompt, buildGate1UserPrompt } from './prompts.js';\nimport { replaceOrbital } from './merge.js';\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\nfunction parseGate1Response(raw: string, original: OrbitalDefinition): OrbitalDefinition {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n throw new Error(`Gate 1: failed to parse JSON from response: ${raw.slice(0, 200)}`);\n }\n\n const obj = JSON.parse(parsed) as Record<string, unknown>;\n\n // Normalize entity\n const entityRaw = (obj.entity as Record<string, unknown>) || {};\n const entityName = String(\n entityRaw.name || (original.entity as Entity).name,\n );\n const fieldsRaw = Array.isArray(entityRaw.fields) ? entityRaw.fields : [];\n const entity: Entity = {\n name: entityName,\n persistence: (entityRaw.persistence as Entity['persistence']) || 'runtime',\n ...(entityRaw.collection ? { collection: String(entityRaw.collection) } : {}),\n fields: fieldsRaw.length > 0\n ? fieldsRaw.map((f: Record<string, unknown>) => ({\n name: String(f.name || ''),\n type: (f.type as FieldType) || 'string',\n ...(f.required ? { required: true } : {}),\n ...(f.default !== undefined ? { default: f.default } : {}),\n }))\n : [{ name: 'id', type: 'string' as FieldType, required: true }],\n };\n\n // Normalize traits (keep shell state machines)\n const traitsRaw = Array.isArray(obj.traits) ? obj.traits : [];\n const traits: Trait[] = traitsRaw.map((t: Record<string, unknown>) => ({\n name: String(t.name || ''),\n linkedEntity: String(t.linkedEntity || entityName),\n category: 'interaction' as const,\n ...(Array.isArray(t.emits) && t.emits.length > 0\n ? { emits: t.emits.map((e: unknown): TraitEventContract => typeof e === 'string' ? { event: e } : e as TraitEventContract) }\n : {}),\n ...(Array.isArray(t.listens) && t.listens.length > 0\n ? { listens: t.listens.map((l: unknown): TraitEventListener => typeof l === 'string' ? { event: l, triggers: l } : l as TraitEventListener) }\n : {}),\n stateMachine: {\n states: [{ name: 'idle', isInitial: true }],\n events: [] as Array<{ key: string; name: string }>,\n transitions: [] as Array<{ from: string; event: string; to: string }>,\n },\n }));\n\n // Normalize pages - ensure every page has traits refs\n const traitNames = traits.map((t) => t.name);\n const defaultTraitRefs = traitNames.map((n) => ({ ref: n }));\n const pagesRaw = Array.isArray(obj.pages) ? obj.pages : [];\n const pages = pagesRaw.map((p: Record<string, unknown>) => ({\n name: String(p.name || p.label || ''),\n path: String(p.path || p.route || '/'),\n ...(p.isInitial ? { isInitial: true } : {}),\n traits: Array.isArray(p.traits) ? p.traits : defaultTraitRefs,\n }));\n\n return {\n name: String(obj.name || original.name),\n entity,\n traits,\n pages,\n } as OrbitalDefinition;\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\n/**\n * Enrich all orbital shells with full entity fields and trait details.\n * Iterates orbitals with one LLM call each, merges back via replaceOrbital.\n */\nexport async function runGate1(\n client: LLMClient,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate1SystemPrompt();\n const allOrbitals = orb.orbitals as OrbitalDefinition[];\n let result = orb;\n\n for (const orbital of allOrbitals) {\n // Find guided orbital from golden .orb\n const guidedOrbital = opts.goldenOrb?.orbitals.find(\n (o) => (o as OrbitalDefinition).name === orbital.name,\n ) as OrbitalDefinition | undefined;\n\n const userPrompt = buildGate1UserPrompt(\n orbital,\n allOrbitals,\n guidedOrbital,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 4096,\n });\n\n const enriched = parseGate1Response(raw, orbital);\n result = replaceOrbital(result, orbital.name, enriched);\n }\n\n return result;\n}\n","/**\n * Gate 2: Trait State Machine\n *\n * Fills in stateMachine (states, events, transitions with empty effects)\n * for each trait across all orbitals.\n * One LLM call per trait.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n StateMachine,\n Effect,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate2SystemPrompt, buildGate2UserPrompt } from './prompts.js';\nimport { replaceTrait } from './merge.js';\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\nfunction parseGate2Response(raw: string, original: Trait): Trait {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n console.warn(`Gate 2: no JSON found, returning trait as-is`);\n return original;\n }\n\n let obj: Record<string, unknown>;\n try {\n obj = JSON.parse(parsed) as Record<string, unknown>;\n } catch {\n console.warn(`Gate 2: malformed JSON, returning trait as-is`);\n return original;\n }\n\n const statesRaw = Array.isArray(obj.states) ? obj.states : [];\n const eventsRaw = Array.isArray(obj.events) ? obj.events : [];\n const transitionsRaw = Array.isArray(obj.transitions) ? obj.transitions : [];\n\n // Use stateMachine from the response if present, otherwise build from flat arrays\n const smRaw = obj.stateMachine as Record<string, unknown> | undefined;\n const states = (smRaw && Array.isArray(smRaw.states) ? smRaw.states : statesRaw)\n .map((s: Record<string, unknown>) => ({\n name: String(s.name || ''),\n ...(s.isInitial ? { isInitial: true } : {}),\n }));\n\n const events = (smRaw && Array.isArray(smRaw.events) ? smRaw.events : eventsRaw)\n .map((e: Record<string, unknown>) => ({\n key: String(e.key || ''),\n name: String(e.name || e.key || ''),\n ...(Array.isArray(e.payloadSchema) ? { payloadSchema: e.payloadSchema } : {}),\n }));\n\n const transitions = (smRaw && Array.isArray(smRaw.transitions) ? smRaw.transitions : transitionsRaw)\n .map((t: Record<string, unknown>) => ({\n from: String(t.from || ''),\n event: String(t.event || ''),\n to: String(t.to || ''),\n effects: [] as Effect[],\n }));\n\n const stateMachine: StateMachine = { states, events, transitions };\n\n // Parse ui slot assignments (Gate 2 outputs these for Gate 4 to consume)\n type PresentationType = 'modal' | 'drawer' | 'popover' | 'inline' | 'confirm-dialog';\n const validPresentations = new Set<string>(['modal', 'drawer', 'popover', 'inline', 'confirm-dialog']);\n const uiRaw = (obj.ui || smRaw?.ui) as Record<string, Record<string, unknown>> | undefined;\n const ui = uiRaw ? Object.fromEntries(\n Object.entries(uiRaw).map(([stateName, binding]) => {\n const pres = String(binding.presentation || 'inline');\n return [\n stateName,\n {\n presentation: (validPresentations.has(pres) ? pres : 'inline') as PresentationType,\n content: (binding.content || {}) as Record<string, unknown>,\n },\n ];\n }),\n ) : undefined;\n\n return {\n ...original,\n name: String(obj.name || original.name),\n stateMachine,\n ...(ui ? { ui } : {}),\n };\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\n/**\n * Fill in state machines for all traits across all orbitals.\n * Iterates traits with one LLM call each, merges back via replaceTrait.\n */\nexport async function runGate2(\n client: LLMClient,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate2SystemPrompt();\n let result = orb;\n\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n const entity = orbital.entity as Entity;\n\n for (const traitRef of orbital.traits) {\n if (typeof traitRef === 'string' || 'ref' in traitRef) continue;\n const trait = traitRef as Trait;\n\n // Find guided trait from golden .orb\n const guidedTrait = findGuidedTrait(opts.goldenOrb, trait.name);\n\n const userPrompt = buildGate2UserPrompt(\n trait,\n entity,\n orbital.description || '',\n guidedTrait,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 4096,\n });\n\n const enriched = parseGate2Response(raw, trait);\n result = replaceTrait(result, orbital.name, trait.name, enriched);\n }\n }\n\n return result;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction findGuidedTrait(\n goldenOrb: OrbitalSchema | undefined,\n traitName: string,\n): Trait | undefined {\n if (!goldenOrb) return undefined;\n for (const orbital of goldenOrb.orbitals as OrbitalDefinition[]) {\n for (const t of orbital.traits) {\n if (typeof t === 'string' || 'ref' in t) continue;\n if (t.name === traitName) return t as Trait;\n }\n }\n return undefined;\n}\n","/**\n * Gate 3: Transition Effects\n *\n * Fills in guard + non-render effects for each transition across all traits.\n * One LLM call per transition.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n Transition,\n Expression,\n Effect,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate3SystemPrompt, buildGate3UserPrompt } from './prompts.js';\nimport { replaceTransition } from './merge.js';\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\nfunction parseGate3Response(raw: string, original: Transition): Transition {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n console.warn(`Gate 3: no JSON found, returning transition as-is`);\n return original;\n }\n\n let obj: Record<string, unknown>;\n try {\n obj = JSON.parse(parsed) as Record<string, unknown>;\n } catch {\n console.warn(`Gate 3: malformed JSON, returning transition as-is`);\n return original;\n }\n\n const guard = Array.isArray(obj.guard) ? (obj.guard as Expression) : undefined;\n const effectsRaw = Array.isArray(obj.effects) ? obj.effects : [];\n const effects: Effect[] = effectsRaw.filter(\n (e: unknown) => Array.isArray(e) && e.length >= 2,\n ) as Effect[];\n\n return {\n from: String(obj.from || original.from),\n event: String(obj.event || original.event),\n to: String(obj.to || original.to),\n ...(guard ? { guard } : {}),\n effects,\n };\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\n/**\n * Fill in guards and non-render effects for all transitions.\n * Iterates all transitions across all traits with one LLM call each.\n */\nexport async function runGate3(\n client: LLMClient,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n _behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate3SystemPrompt();\n let result = orb;\n\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n const entity = orbital.entity as Entity;\n\n for (const traitRef of orbital.traits) {\n if (typeof traitRef === 'string' || 'ref' in traitRef) continue;\n const trait = traitRef as Trait;\n if (!trait.stateMachine) continue;\n\n for (const transition of trait.stateMachine.transitions) {\n // Find guided transition from golden .orb\n const guidedTransition = findGuidedTransition(\n opts.goldenOrb, trait.name, transition.from, transition.event,\n );\n\n const userPrompt = buildGate3UserPrompt(\n transition,\n entity,\n trait.stateMachine,\n guidedTransition,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 4096,\n });\n\n const enriched = parseGate3Response(raw, transition);\n result = replaceTransition(\n result, orbital.name, trait.name,\n transition.from, transition.event, enriched,\n );\n }\n }\n }\n\n return result;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction findGuidedTransition(\n goldenOrb: OrbitalSchema | undefined,\n traitName: string,\n from: string,\n event: string,\n): Transition | undefined {\n if (!goldenOrb) return undefined;\n for (const orbital of goldenOrb.orbitals as OrbitalDefinition[]) {\n for (const t of orbital.traits) {\n if (typeof t === 'string' || 'ref' in t) continue;\n if (t.name !== traitName) continue;\n const sm = (t as Trait).stateMachine;\n if (!sm) continue;\n const found = sm.transitions.find(\n (tr) => tr.from === from && tr.event === event,\n );\n if (found) return found;\n }\n }\n return undefined;\n}\n","/**\n * Gate 4: Render UI\n *\n * Appends render-ui effects to each transition.\n * One LLM call per transition.\n * Passes slot context (which states are modal vs main) to every call.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n Transition,\n Effect,\n StateMachine,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate4SystemPrompt, buildGate4UserPrompt, type SlotContext } from './prompts.js';\nimport { replaceTransition } from './merge.js';\n\n// ============================================================================\n// Slot Context Builder\n// ============================================================================\n\n/**\n * Build slot assignments from trait.ui (set by Gate 2).\n * Falls back to \"main\" for any state not in the ui map.\n */\nfunction buildSlotContext(\n sm: StateMachine,\n traitUi: Record<string, { presentation: string }> | undefined,\n): Record<string, 'main' | 'modal'> {\n const slots: Record<string, 'main' | 'modal'> = {};\n\n for (const state of sm.states) {\n const binding = traitUi?.[state.name];\n slots[state.name] = binding?.presentation === 'modal' ? 'modal' : 'main';\n }\n\n return slots;\n}\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\ninterface RenderEffect {\n slot: string;\n tree: Record<string, unknown> | null;\n}\n\nfunction parseGate4Response(raw: string): RenderEffect[] {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n console.warn('Gate 4: no JSON found in response, using fallback render-ui');\n return [{ slot: 'main', tree: { type: 'typography', variant: 'body', content: 'Loading...' } }];\n }\n\n let obj: Record<string, unknown>;\n try {\n obj = JSON.parse(parsed) as Record<string, unknown>;\n } catch {\n console.warn(`Gate 4: malformed JSON, using fallback render-ui: ${parsed.slice(0, 100)}`);\n return [{ slot: 'main', tree: { type: 'typography', variant: 'body', content: 'Loading...' } }];\n }\n\n const renderEffectsRaw = Array.isArray(obj.renderEffects) ? obj.renderEffects : [];\n return renderEffectsRaw.map((r: Record<string, unknown>) => ({\n slot: String(r.slot || 'main'),\n tree: r.tree === null ? null : ((r.tree as Record<string, unknown>) || { type: 'typography', variant: 'body', content: 'Empty' }),\n }));\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\n/**\n * Append render-ui effects to all transitions.\n * Builds slot context from state machine and passes it to every LLM call.\n */\nexport async function runGate4(\n client: LLMClient,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n _behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate4SystemPrompt();\n let result = orb;\n\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n const entity = orbital.entity as Entity;\n\n for (const traitRef of orbital.traits) {\n if (typeof traitRef === 'string' || 'ref' in traitRef) continue;\n const trait = traitRef as Trait;\n if (!trait.stateMachine) continue;\n\n // Build slot assignments from trait.ui (populated by Gate 2)\n const traitUi = trait.ui as Record<string, { presentation: string }> | undefined;\n const stateSlots = buildSlotContext(trait.stateMachine, traitUi);\n\n for (const transition of trait.stateMachine.transitions) {\n const fromSlot = stateSlots[transition.from] || 'main';\n const toSlot = stateSlots[transition.to] || 'main';\n\n // Detect if this transition exits a modal (from=modal, to=main)\n const exitsModal = fromSlot === 'modal' && toSlot === 'main';\n\n const slotContext: SlotContext = { stateSlots, exitsModal };\n\n // Find guided render effects from golden .orb\n const guidedRenderEffects = findGuidedRenderEffects(\n opts.goldenOrb, trait.name, transition.from, transition.event,\n );\n\n const userPrompt = buildGate4UserPrompt(\n transition,\n entity,\n transition.to,\n trait.stateMachine,\n slotContext,\n guidedRenderEffects,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: (opts.maxTokens ?? 4096) * 2,\n });\n\n const renderEffects = parseGate4Response(raw);\n\n // Append render-ui effects to existing effects\n const existingEffects = [...(transition.effects || [])] as Effect[];\n for (const re of renderEffects) {\n existingEffects.push(['render-ui', re.slot, re.tree] as Effect);\n }\n\n // If exiting modal and LLM didn't include modal null, add it\n if (exitsModal) {\n const hasModalNull = existingEffects.some(\n (e) => Array.isArray(e) && e[0] === 'render-ui' && e[1] === 'modal' && e[2] === null,\n );\n if (!hasModalNull) {\n // Prepend modal null before the main render\n existingEffects.unshift(['render-ui', 'modal', null] as Effect);\n }\n }\n\n const enriched: Transition = {\n ...transition,\n effects: existingEffects,\n };\n\n result = replaceTransition(\n result, orbital.name, trait.name,\n transition.from, transition.event, enriched,\n );\n }\n }\n }\n\n return result;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction findGuidedRenderEffects(\n goldenOrb: OrbitalSchema | undefined,\n traitName: string,\n from: string,\n event: string,\n): Array<{ slot: string; tree: Record<string, unknown> }> | undefined {\n if (!goldenOrb) return undefined;\n for (const orbital of goldenOrb.orbitals as OrbitalDefinition[]) {\n for (const t of orbital.traits) {\n if (typeof t === 'string' || 'ref' in t) continue;\n if (t.name !== traitName) continue;\n const sm = (t as Trait).stateMachine;\n if (!sm) continue;\n const tr = sm.transitions.find(\n (tr) => tr.from === from && tr.event === event,\n );\n if (!tr?.effects) continue;\n const renderEffects: Array<{ slot: string; tree: Record<string, unknown> }> = [];\n for (const eff of tr.effects) {\n if (Array.isArray(eff) && eff[0] === 'render-ui') {\n renderEffects.push({\n slot: String(eff[1] || 'main'),\n tree: (eff[2] as Record<string, unknown>) || {},\n });\n }\n }\n if (renderEffects.length > 0) return renderEffects;\n }\n }\n return undefined;\n}\n","/**\n * Gated Construction Pipeline\n *\n * Decomposes .orb program construction into five scoped gates,\n * each handled by a standalone LLM call with fresh context.\n * Every gate accepts an OrbitalSchema and returns an enriched OrbitalSchema.\n *\n * @packageDocumentation\n */\n\n// Pipeline\nexport { runGatePipeline } from './orchestrator.js';\n\n// Individual gates\nexport { runGate0 } from './gate0-application.js';\nexport { runGate05 } from './gate05-behavior-match.js';\nexport type { BehaviorMatchResult } from './gate05-behavior-match.js';\nexport { runGate1 } from './gate1-orbital.js';\nexport { runGate2 } from './gate2-trait.js';\nexport { runGate3 } from './gate3-transition.js';\nexport { runGate4 } from './gate4-render-ui.js';\n\n// Merge utilities\nexport { deepCloneOrb, replaceOrbital, replaceTrait, replaceTransition } from './merge.js';\n\n// Behavior extraction\nexport { extractBehaviorGateData, getTraitGateData, getTransitionGateData } from './behavior-extract.js';\n\n// Scoring\nexport {\n scoreGate0,\n scoreGate1,\n scoreGate2,\n scoreGate3,\n scoreGate4,\n scoreOverall,\n} from './scoring.js';\n\n// Types\nexport type {\n GateProvider,\n GateMode,\n GateOpts,\n GatePipelineConfig,\n GateTimings,\n GatePipelineResult,\n GateScore,\n PipelineScore,\n BehaviorGateData,\n} from './types.js';\n\n// Re-export core types used by gates\nexport type {\n OrbitalSchema,\n OrbitalDefinition,\n Orbital,\n Entity,\n Trait,\n StateMachine,\n State,\n Event,\n Transition,\n Effect,\n Page,\n Expression,\n} from '@almadar/core/types';\n\n// Agentic tool factories (used by converter and agentic runner)\nexport {\n createDecomposeAppTool,\n createMatchBehaviorTool,\n createBuildOrbitalTool,\n createVerifyAppTool,\n createUseBehaviorTool,\n createConnectTool,\n createComposeTool,\n} from './agentic/tools.js';\n","/**\n * Behavior Extract\n *\n * Extract per-gate slices from BehaviorSchema for guided mode.\n * Each function extracts the data a specific gate needs from the golden behavior.\n *\n * @packageDocumentation\n */\n\nimport type { BehaviorSchema } from '@almadar/std/behaviors/types';\nimport type { BehaviorGateData } from './types.js';\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction asArray<T>(val: T | T[] | undefined): T[] {\n if (!val) return [];\n return Array.isArray(val) ? val : [val];\n}\n\nfunction getOrbitals(behavior: BehaviorSchema): Record<string, unknown>[] {\n return asArray(behavior.orbitals);\n}\n\nfunction getTraitsFromOrbital(orbital: Record<string, unknown>): Record<string, unknown>[] {\n return asArray(orbital.traits as Record<string, unknown>[] | undefined);\n}\n\nfunction getStateMachine(trait: Record<string, unknown>): Record<string, unknown> | null {\n return (trait.stateMachine as Record<string, unknown>) || null;\n}\n\nfunction getStates(sm: Record<string, unknown>): Array<{ name: string }> {\n const states = asArray(sm.states as Record<string, unknown>[] | undefined);\n return states.map((s) => ({ name: String(s.name || '') }));\n}\n\nfunction getEvents(sm: Record<string, unknown>): Array<{ key: string }> {\n const events = asArray(sm.events as Record<string, unknown>[] | undefined);\n return events.map((e) => ({ key: String(e.key || '') }));\n}\n\ninterface RawTransition {\n from: string;\n event: string;\n to: string;\n guard?: unknown[];\n effects?: unknown[];\n}\n\nfunction getTransitions(sm: Record<string, unknown>): RawTransition[] {\n const transitions = asArray(sm.transitions as Record<string, unknown>[] | undefined);\n return transitions.map((t) => ({\n from: String(t.from || ''),\n event: String(t.event || ''),\n to: String(t.to || ''),\n guard: t.guard as unknown[] | undefined,\n effects: asArray(t.effects as unknown[] | undefined),\n }));\n}\n\nfunction getPagesFromOrbital(orbital: Record<string, unknown>): Record<string, unknown>[] {\n return asArray(orbital.pages as Record<string, unknown>[] | undefined);\n}\n\n// ============================================================================\n// Effect Classification\n// ============================================================================\n\nfunction isRenderUiEffect(effect: unknown): boolean {\n return Array.isArray(effect) && effect[0] === 'render-ui';\n}\n\nfunction extractRenderEffects(effects: unknown[]): Array<{ slot: string; tree: Record<string, unknown> }> {\n const results: Array<{ slot: string; tree: Record<string, unknown> }> = [];\n for (const eff of effects) {\n if (isRenderUiEffect(eff)) {\n const arr = eff as unknown[];\n const slot = String(arr[1] || 'main');\n const tree = (arr[2] as Record<string, unknown>) || {};\n results.push({ slot, tree });\n }\n }\n return results;\n}\n\nfunction extractNonRenderEffects(effects: unknown[]): unknown[] {\n return effects.filter((eff) => !isRenderUiEffect(eff));\n}\n\n// ============================================================================\n// Full Extraction\n// ============================================================================\n\n/**\n * Extract all gate-level slices from a BehaviorSchema.\n * Returns structured data that each gate can consume in guided mode.\n */\nexport function extractBehaviorGateData(behavior: BehaviorSchema): BehaviorGateData {\n const orbitals = getOrbitals(behavior);\n\n // App level\n const entityNames: string[] = [];\n const traitNames: string[] = [];\n\n for (const orbital of orbitals) {\n const entity = orbital.entity as Record<string, unknown> | undefined;\n if (entity?.name) entityNames.push(String(entity.name));\n\n for (const trait of getTraitsFromOrbital(orbital)) {\n if (trait.name) traitNames.push(String(trait.name));\n }\n }\n\n const appLevel = {\n orbitalCount: orbitals.length,\n entityNames,\n traitNames,\n };\n\n // Orbital levels\n const orbitalLevels = orbitals.map((orbital) => {\n const entity = (orbital.entity as Record<string, unknown>) || {};\n const traits = getTraitsFromOrbital(orbital);\n const pages = getPagesFromOrbital(orbital);\n\n return {\n orbitalName: String(orbital.name || ''),\n entity,\n traitNames: traits.map((t) => String(t.name || '')),\n pages,\n };\n });\n\n // Trait levels\n const traitLevels: BehaviorGateData['traitLevels'] = [];\n for (const orbital of orbitals) {\n for (const trait of getTraitsFromOrbital(orbital)) {\n const sm = getStateMachine(trait);\n if (!sm) continue;\n\n const states = getStates(sm);\n const events = getEvents(sm);\n const transitions = getTransitions(sm);\n\n traitLevels.push({\n traitName: String(trait.name || ''),\n states: states.map((s) => s.name),\n events: events.map((e) => e.key),\n transitionEdges: transitions.map((t) => ({\n from: t.from,\n event: t.event,\n to: t.to,\n })),\n });\n }\n }\n\n // Transition levels (non-render-ui effects)\n const transitionLevels: BehaviorGateData['transitionLevels'] = [];\n for (const orbital of orbitals) {\n for (const trait of getTraitsFromOrbital(orbital)) {\n const sm = getStateMachine(trait);\n if (!sm) continue;\n\n for (const transition of getTransitions(sm)) {\n const effects = transition.effects || [];\n transitionLevels.push({\n from: transition.from,\n event: transition.event,\n to: transition.to,\n guard: transition.guard || null,\n nonRenderEffects: extractNonRenderEffects(effects),\n });\n }\n }\n }\n\n // Render UI levels\n const renderUiLevels: BehaviorGateData['renderUiLevels'] = [];\n for (const orbital of orbitals) {\n for (const trait of getTraitsFromOrbital(orbital)) {\n const sm = getStateMachine(trait);\n if (!sm) continue;\n\n for (const transition of getTransitions(sm)) {\n const effects = transition.effects || [];\n const renderEffects = extractRenderEffects(effects);\n if (renderEffects.length > 0) {\n renderUiLevels.push({\n from: transition.from,\n event: transition.event,\n to: transition.to,\n renderEffects,\n });\n }\n }\n }\n }\n\n return {\n appLevel,\n orbitalLevels,\n traitLevels,\n transitionLevels,\n renderUiLevels,\n };\n}\n\n/**\n * Get gate-specific slice for a particular trait from extracted data.\n */\nexport function getTraitGateData(\n data: BehaviorGateData,\n traitName: string,\n): BehaviorGateData['traitLevels'][0] | undefined {\n return data.traitLevels.find((t) => t.traitName === traitName);\n}\n\n/**\n * Get gate-specific slice for a particular transition from extracted data.\n */\nexport function getTransitionGateData(\n data: BehaviorGateData,\n from: string,\n event: string,\n): {\n transition: BehaviorGateData['transitionLevels'][0] | undefined;\n renderUi: BehaviorGateData['renderUiLevels'][0] | undefined;\n} {\n return {\n transition: data.transitionLevels.find((t) => t.from === from && t.event === event),\n renderUi: data.renderUiLevels.find((t) => t.from === from && t.event === event),\n };\n}\n","/**\n * Scoring\n *\n * Set-based metrics for evaluating gate outputs against golden behaviors.\n * Jaccard similarity, symmetric difference, coverage ratios.\n * All O(n) and directionally correct.\n *\n * Now accepts OrbitalSchema and extracts gate-relevant sections.\n *\n * @packageDocumentation\n */\n\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n Transition,\n} from '@almadar/core/types';\nimport type {\n GateScore,\n PipelineScore,\n GateProvider,\n GateMode,\n BehaviorGateData,\n} from './types.js';\n\n// ============================================================================\n// Set Utilities\n// ============================================================================\n\nfunction jaccard(a: Set<string>, b: Set<string>): number {\n if (a.size === 0 && b.size === 0) return 1;\n const intersection = new Set([...a].filter((x) => b.has(x)));\n const union = new Set([...a, ...b]);\n return intersection.size / union.size;\n}\n\nfunction symmetricDifferenceNormalized(a: Set<string>, b: Set<string>): number {\n if (a.size === 0 && b.size === 0) return 1;\n const symDiff = new Set([\n ...[...a].filter((x) => !b.has(x)),\n ...[...b].filter((x) => !a.has(x)),\n ]);\n const union = new Set([...a, ...b]);\n return 1 - symDiff.size / union.size;\n}\n\nfunction coverageRatio(produced: Set<string>, golden: Set<string>): number {\n if (golden.size === 0) return 1;\n const covered = [...golden].filter((x) => produced.has(x));\n return covered.length / golden.size;\n}\n\n// ============================================================================\n// Gate 0 Scoring\n// ============================================================================\n\n/**\n * Score Gate 0 output (shell .orb) against golden behavior data.\n * - Orbital count match (exact = 1.0, off by 1 = 0.5, more = 0.0)\n * - Entity name Jaccard similarity\n */\nexport function scoreGate0(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const orbitals = orb.orbitals as OrbitalDefinition[];\n const countDiff = Math.abs(orbitals.length - golden.appLevel.orbitalCount);\n const countScore = countDiff === 0 ? 1.0 : countDiff === 1 ? 0.5 : 0.0;\n\n const producedEntities = new Set(\n orbitals.map((o) => String((o.entity as Entity).name).toLowerCase()),\n );\n const goldenEntities = new Set(golden.appLevel.entityNames.map((n) => n.toLowerCase()));\n const entityJaccard = jaccard(producedEntities, goldenEntities);\n\n const score = countScore * 0.4 + entityJaccard * 0.6;\n\n return {\n gate: 0,\n score,\n details: { countScore, entityJaccard },\n };\n}\n\n// ============================================================================\n// Gate 1 Scoring\n// ============================================================================\n\n/**\n * Score Gate 1 output (enriched orbitals) against golden behavior data.\n * Scores the first orbital's entity fields and persistence.\n */\nexport function scoreGate1(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const orbitals = orb.orbitals as OrbitalDefinition[];\n if (orbitals.length === 0) {\n return { gate: 1, score: 0, details: { fieldJaccard: 0, persistenceMatch: 0 } };\n }\n\n // Score first orbital (or find matching)\n const goldenOrbital = golden.orbitalLevels[0];\n if (!goldenOrbital) {\n return { gate: 1, score: 0, details: { fieldJaccard: 0, persistenceMatch: 0 } };\n }\n\n const entity = orbitals[0].entity as Entity;\n\n // Field name Jaccard\n const producedFields = new Set(entity.fields.map((f) => f.name.toLowerCase()));\n const goldenEntity = goldenOrbital.entity;\n const goldenFields = new Set(\n Array.isArray(goldenEntity.fields)\n ? (goldenEntity.fields as Array<{ name: string }>).map((f) => f.name.toLowerCase())\n : [],\n );\n const fieldJaccard = jaccard(producedFields, goldenFields);\n\n // Persistence match\n const goldenPersistence = String(goldenEntity.persistence || 'runtime');\n const persistenceMatch = entity.persistence === goldenPersistence ? 1.0 : 0.0;\n\n const score = fieldJaccard * 0.7 + persistenceMatch * 0.3;\n\n return {\n gate: 1,\n score,\n details: { fieldJaccard, persistenceMatch },\n };\n}\n\n// ============================================================================\n// Gate 2 Scoring\n// ============================================================================\n\n/**\n * Score Gate 2 output (state machines) against golden behavior data.\n * Scores state set similarity and event key Jaccard across all traits.\n */\nexport function scoreGate2(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const traits = extractAllTraits(orb);\n if (traits.length === 0 || golden.traitLevels.length === 0) {\n return { gate: 2, score: 0, details: { stateSymDiff: 0, eventJaccard: 0 } };\n }\n\n // Score first trait with state machine\n const trait = traits.find((t) => t.stateMachine) || traits[0];\n const goldenTrait = golden.traitLevels.find(\n (t) => t.traitName.toLowerCase() === trait.name.toLowerCase(),\n ) || golden.traitLevels[0];\n\n if (!goldenTrait || !trait.stateMachine) {\n return { gate: 2, score: 0, details: { stateSymDiff: 0, eventJaccard: 0 } };\n }\n\n const producedStates = new Set(trait.stateMachine.states.map((s) => s.name.toLowerCase()));\n const goldenStates = new Set(goldenTrait.states.map((s) => s.toLowerCase()));\n const stateSymDiff = symmetricDifferenceNormalized(producedStates, goldenStates);\n\n const producedEvents = new Set(trait.stateMachine.events.map((e) => e.key));\n const goldenEvents = new Set(goldenTrait.events);\n const eventJaccard = jaccard(producedEvents, goldenEvents);\n\n const score = stateSymDiff * 0.5 + eventJaccard * 0.5;\n\n return {\n gate: 2,\n score,\n details: { stateSymDiff, eventJaccard },\n };\n}\n\n// ============================================================================\n// Gate 3 Scoring\n// ============================================================================\n\n/**\n * Score Gate 3 output (guards + effects) against golden behavior data.\n * Averages across all transitions.\n */\nexport function scoreGate3(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const transitions = extractAllTransitions(orb);\n if (transitions.length === 0) {\n return { gate: 3, score: 0.5, details: { effectCoverage: 0.5, guardMatch: 0.5 } };\n }\n\n let totalEffectCoverage = 0;\n let totalGuardMatch = 0;\n let count = 0;\n\n for (const transition of transitions) {\n const goldenTransition = golden.transitionLevels.find(\n (t) => t.from === transition.from && t.event === transition.event,\n );\n\n if (!goldenTransition) {\n totalEffectCoverage += 0.5;\n totalGuardMatch += 0.5;\n count++;\n continue;\n }\n\n // Effect type coverage\n const producedTypes = new Set(\n (transition.effects || [])\n .filter((e) => Array.isArray(e))\n .map((e) => String((e as unknown[])[0]))\n .filter((t) => t !== 'render-ui'),\n );\n const goldenTypes = new Set(\n goldenTransition.nonRenderEffects\n .filter((e): e is unknown[] => Array.isArray(e))\n .map((e) => String(e[0])),\n );\n totalEffectCoverage += coverageRatio(producedTypes, goldenTypes);\n\n // Guard presence match\n const hasGuard = !!transition.guard;\n const goldenHasGuard = !!goldenTransition.guard;\n totalGuardMatch += hasGuard === goldenHasGuard ? 1.0 : 0.0;\n count++;\n }\n\n const effectCoverage = count > 0 ? totalEffectCoverage / count : 0.5;\n const guardMatch = count > 0 ? totalGuardMatch / count : 0.5;\n const score = effectCoverage * 0.7 + guardMatch * 0.3;\n\n return {\n gate: 3,\n score,\n details: { effectCoverage, guardMatch },\n };\n}\n\n// ============================================================================\n// Gate 4 Scoring\n// ============================================================================\n\n/**\n * Score Gate 4 output (render-ui effects) against golden behavior data.\n * Pattern type recall and tree node count ratio.\n */\nexport function scoreGate4(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const transitions = extractAllTransitions(orb);\n if (transitions.length === 0 || golden.renderUiLevels.length === 0) {\n return { gate: 4, score: 0.5, details: { typeRecall: 0.5, nodeRatio: 0.5 } };\n }\n\n let totalTypeRecall = 0;\n let totalNodeRatio = 0;\n let count = 0;\n\n for (const transition of transitions) {\n const goldenRender = golden.renderUiLevels.find(\n (r) => r.from === transition.from && r.event === transition.event,\n );\n\n if (!goldenRender) continue;\n\n // Collect render-ui effects from this transition\n const renderEffects = (transition.effects || [])\n .filter((e) => Array.isArray(e) && (e as unknown[])[0] === 'render-ui')\n .map((e) => {\n const arr = e as unknown[];\n return { slot: String(arr[1]), tree: (arr[2] as Record<string, unknown>) || {} };\n });\n\n // Collect pattern types\n const producedTypes = new Set<string>();\n let producedNodes = 0;\n for (const re of renderEffects) {\n for (const t of collectTypes(re.tree)) producedTypes.add(t);\n producedNodes += countNodes(re.tree);\n }\n\n const goldenTypes = new Set<string>();\n let goldenNodes = 0;\n for (const re of goldenRender.renderEffects) {\n for (const t of collectTypes(re.tree)) goldenTypes.add(t);\n goldenNodes += countNodes(re.tree);\n }\n\n totalTypeRecall += coverageRatio(producedTypes, goldenTypes);\n totalNodeRatio += goldenNodes > 0\n ? Math.min(producedNodes / goldenNodes, goldenNodes / Math.max(producedNodes, 1))\n : (producedNodes === 0 ? 1 : 0);\n count++;\n }\n\n const typeRecall = count > 0 ? totalTypeRecall / count : 0.5;\n const nodeRatio = count > 0 ? totalNodeRatio / count : 0.5;\n const score = typeRecall * 0.6 + nodeRatio * 0.4;\n\n return {\n gate: 4,\n score,\n details: { typeRecall, nodeRatio },\n };\n}\n\n// ============================================================================\n// Overall Pipeline Score\n// ============================================================================\n\nconst GATE_WEIGHTS = [0.10, 0.15, 0.25, 0.20, 0.30] as const;\n\n/**\n * Compute weighted overall score from individual gate scores.\n */\nexport function scoreOverall(\n gateScores: GateScore[],\n provider: GateProvider,\n mode: GateMode,\n behaviorName: string,\n): PipelineScore {\n let overall = 0;\n for (const gs of gateScores) {\n const weight = GATE_WEIGHTS[gs.gate] ?? 0;\n overall += gs.score * weight;\n }\n\n return {\n overall,\n gates: gateScores,\n provider,\n mode,\n behaviorName,\n };\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction extractAllTraits(orb: OrbitalSchema): Trait[] {\n const traits: Trait[] = [];\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n for (const t of orbital.traits) {\n if (typeof t === 'string' || 'ref' in t) continue;\n traits.push(t as Trait);\n }\n }\n return traits;\n}\n\nfunction extractAllTransitions(orb: OrbitalSchema): Transition[] {\n const transitions: Transition[] = [];\n for (const trait of extractAllTraits(orb)) {\n if (!trait.stateMachine) continue;\n transitions.push(...trait.stateMachine.transitions);\n }\n return transitions;\n}\n\nfunction collectTypes(tree: Record<string, unknown>): Set<string> {\n const types = new Set<string>();\n if (tree.type) types.add(String(tree.type));\n const children = tree.children as Record<string, unknown>[] | undefined;\n if (Array.isArray(children)) {\n for (const child of children) {\n for (const t of collectTypes(child)) types.add(t);\n }\n }\n return types;\n}\n\nfunction countNodes(tree: Record<string, unknown>): number {\n let count = 1;\n const children = tree.children as Record<string, unknown>[] | undefined;\n if (Array.isArray(children)) {\n for (const child of children) count += countNodes(child);\n }\n return count;\n}\n","/**\n * Agentic Gate Tools\n *\n * LangGraph-compatible tools that wrap the gate pipeline for use\n * by a Claude main agent. Each tool is a scoped operation:\n *\n * - decompose_app: break prompt into orbital plan (Gate 0 subagent)\n * - match_behavior: find golden behavior (Gate 0.5 subagent)\n * - build_orbital: run gate pipeline on one orbital (Gates 1-4, DeepSeek)\n * - verify_app: run orbital-verify (deterministic)\n *\n * The main agent (Claude) decides what to call, reads results, iterates.\n * The gate subagents (DeepSeek) do the scoped generation.\n *\n * @packageDocumentation\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport { createDeepSeekClient, createOpenRouterClient, type LLMClient } from '@almadar/llm';\nimport type { OrbitalSchema, OrbitalDefinition } from '@almadar/core/types';\nimport { runGate0 } from '../gate0-application.js';\nimport { runGate05 } from '../gate05-behavior-match.js';\nimport { runGate1 } from '../gate1-orbital.js';\nimport { runGate2 } from '../gate2-trait.js';\nimport { runGate3 } from '../gate3-transition.js';\nimport { runGate4 } from '../gate4-render-ui.js';\nimport { validateWithOrbitalCLI } from '../../evals/utils/orbital-validate.js';\nimport type { GateOpts } from '../types.js';\n\n// ============================================================================\n// Gate client factory\n// ============================================================================\n\nexport type GateClientProvider = 'deepseek' | 'qwen3.5' | 'gemma3-4b' | 'mistral-small';\n\nfunction createGateClient(provider: GateClientProvider = 'mistral-small'): LLMClient {\n let client: LLMClient;\n switch (provider) {\n case 'qwen3.5':\n client = createOpenRouterClient({ model: 'qwen/qwen3.5-9b' });\n break;\n case 'gemma3-4b':\n client = createOpenRouterClient({ model: 'google/gemma-3-4b-it' });\n break;\n case 'mistral-small':\n client = createOpenRouterClient({ model: 'mistralai/mistral-small-3.1-24b-instruct' });\n break;\n case 'deepseek':\n default:\n client = createDeepSeekClient();\n break;\n }\n\n // Qwen3.5 burns all output tokens on reasoning unless thinking is disabled\n if (provider === 'qwen3.5') {\n const originalCallRaw = client.callRaw.bind(client);\n const originalCallRawWithMetadata = client.callRawWithMetadata.bind(client);\n client.callRaw = (opts) =>\n originalCallRaw({ ...opts, userPrompt: `/no_think\\n${opts.userPrompt}` });\n client.callRawWithMetadata = (opts) =>\n originalCallRawWithMetadata({ ...opts, userPrompt: `/no_think\\n${opts.userPrompt}` });\n }\n\n return client;\n}\n\n// ============================================================================\n// decompose_app\n// ============================================================================\n\nexport function createDecomposeAppTool(gateProvider?: GateClientProvider) {\n return tool(\n async (input) => {\n const client = createGateClient(gateProvider);\n const orb = await runGate0(client, input.prompt);\n\n return {\n appName: orb.name,\n orbitals: (orb.orbitals as OrbitalDefinition[]).map((o) => ({\n name: o.name,\n entityName: (o.entity as { name: string }).name,\n traitNames: o.traits\n .filter((t): t is { name: string } => typeof t !== 'string' && !('ref' in t))\n .map((t) => t.name),\n pageCount: o.pages?.length ?? 0,\n })),\n shellOrb: orb,\n };\n },\n {\n name: 'decompose_app',\n description: 'Decompose a natural language prompt into an orbital plan. Returns the app name, orbital list with entity names, and a shell .orb schema.',\n schema: z.object({\n prompt: z.string().describe('Natural language application description'),\n }),\n },\n );\n}\n\n// ============================================================================\n// match_behavior\n// ============================================================================\n\nexport function createMatchBehaviorTool(gateProvider?: GateClientProvider) {\n return tool(\n async (input) => {\n const client = createGateClient(gateProvider);\n // Create a minimal orb for the match call\n const shellOrb: OrbitalSchema = {\n name: 'App',\n orbitals: [{\n name: input.orbitalName,\n entity: { name: input.entityName, fields: [{ name: 'id', type: 'string' }] },\n traits: [],\n pages: [],\n }] as unknown as OrbitalSchema['orbitals'],\n };\n\n const result = await runGate05(client, input.description, shellOrb);\n return {\n matched: result.matchedName !== null,\n behaviorName: result.matchedName,\n hasGoldenOrb: result.goldenOrb !== null,\n };\n },\n {\n name: 'match_behavior',\n description: 'Find the best matching golden behavior from 107 standard behaviors. Returns the match name and whether a golden .orb reference was loaded.',\n schema: z.object({\n description: z.string().describe('Description of the orbital to match'),\n orbitalName: z.string().describe('Name of the orbital'),\n entityName: z.string().describe('Name of the entity'),\n }),\n },\n );\n}\n\n// ============================================================================\n// build_orbital\n// ============================================================================\n\nexport function createBuildOrbitalTool(workDir: string, gateProvider?: GateClientProvider) {\n return tool(\n async (input) => {\n const client = createGateClient(gateProvider);\n const orbitalsDir = path.join(workDir, '.orbitals');\n fs.mkdirSync(orbitalsDir, { recursive: true });\n\n // Parse the shell orbital\n let shellOrb: OrbitalSchema;\n try {\n shellOrb = JSON.parse(input.shellOrb) as OrbitalSchema;\n } catch {\n return { success: false, error: 'Invalid shellOrb JSON' };\n }\n\n // Load golden orb if behavior was matched\n let goldenOrb: OrbitalSchema | undefined;\n if (input.goldenBehavior) {\n const { loadGoldenOrbByName } = await import('../gate05-behavior-match.js');\n goldenOrb = loadGoldenOrbByName(input.goldenBehavior) ?? undefined;\n }\n\n const opts: GateOpts = {\n goldenOrb,\n };\n\n // Add feedback to opts if provided (for retry)\n const feedback = input.feedback;\n\n try {\n // Gate 1: entity\n console.log(`[build_orbital] Gate 1: enriching entity for ${input.orbitalName}`);\n let orb = await runGate1(client, shellOrb, opts);\n\n // Gate 2: state machine\n console.log(`[build_orbital] Gate 2: filling state machines`);\n orb = await runGate2(client, orb, opts);\n\n // Gate 3: effects\n console.log(`[build_orbital] Gate 3: adding effects`);\n orb = await runGate3(client, orb, opts);\n\n // Gate 4: render-ui\n console.log(`[build_orbital] Gate 4: adding render-ui`);\n orb = await runGate4(client, orb, opts);\n\n // Write each orbital to .orbitals/ for finish_task\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n const safeName = orbital.name.replace(/[^a-zA-Z0-9]/g, '_').toLowerCase();\n const orbitalPath = path.join(orbitalsDir, `${safeName}.json`);\n fs.writeFileSync(orbitalPath, JSON.stringify(orbital, null, 2));\n console.log(`[build_orbital] Written: ${orbitalPath}`);\n }\n\n // Quick validate\n fs.mkdirSync(workDir, { recursive: true });\n const validation = validateWithOrbitalCLI(orb, workDir);\n\n return {\n success: true,\n orbitalName: input.orbitalName,\n orbitalsWritten: (orb.orbitals as OrbitalDefinition[]).length,\n validation: {\n valid: validation.valid,\n errorCount: validation.errors?.length ?? 0,\n errors: (validation.errors ?? []).slice(0, 5).map((e) => e.message),\n },\n };\n } catch (error) {\n return {\n success: false,\n orbitalName: input.orbitalName,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n {\n name: 'build_orbital',\n description: 'Build one orbital by running the gate pipeline (entity -> state machine -> effects -> render-ui). Writes the result to .orbitals/ for finish_task to collect. Optionally takes a golden behavior name for guided mode and feedback for retry.',\n schema: z.object({\n orbitalName: z.string().describe('Name of the orbital to build'),\n shellOrb: z.string().describe('JSON string of the shell OrbitalSchema from decompose_app'),\n goldenBehavior: z.string().optional().describe('Golden behavior name from match_behavior (e.g. \"std-cart\")'),\n feedback: z.string().optional().describe('Feedback from a failed verify_app to guide the rebuild'),\n }),\n },\n );\n}\n\n// ============================================================================\n// verify_app\n// ============================================================================\n\nexport function createVerifyAppTool(workDir: string) {\n return tool(\n async (input) => {\n const orbPath = input.orbPath || path.join(workDir, 'schema.orb');\n\n if (!fs.existsSync(orbPath)) {\n return { success: false, error: `Schema file not found: ${orbPath}` };\n }\n\n try {\n // Dynamic import to avoid rootDir constraint\n const verifyApiPath = path.resolve(\n path.dirname(new URL(import.meta.url).pathname),\n '../../../../../tools/orbital-verify-unified/src/api.js',\n );\n const { verifyApp } = await import(verifyApiPath) as {\n verifyApp: (opts: Record<string, unknown>) => Promise<{\n totalPassed: number;\n totalFailed: number;\n totalChecks: number;\n coverage?: { ratio: number; coveredItems: number; totalItems: number };\n phases: Array<{\n phase: number;\n name: string;\n passed: number;\n failed: number;\n checks: Array<{ label: string; passed: boolean; detail?: string }>;\n }>;\n }>;\n };\n\n const result = await verifyApp({\n orbPath,\n headed: true,\n screenshots: true,\n });\n\n // Collect failure details for the agent to read\n const failures: string[] = [];\n for (const phase of result.phases) {\n for (const check of phase.checks) {\n if (!check.passed) {\n failures.push(`[Phase ${phase.phase} ${phase.name}] ${check.label}: ${check.detail || 'failed'}`);\n }\n }\n }\n\n return {\n success: result.totalFailed === 0,\n passed: result.totalPassed,\n failed: result.totalFailed,\n total: result.totalChecks,\n coverage: result.coverage?.ratio ?? null,\n failures: failures.slice(0, 10),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n passed: 0,\n failed: 1,\n total: 1,\n coverage: null,\n failures: [error instanceof Error ? error.message : String(error)],\n };\n }\n },\n {\n name: 'verify_app',\n description: 'Run orbital-verify on a compiled .orb schema. Compiles the app, runs server tests, browser tests, and captures screenshots. Returns pass/fail counts and failure details.',\n schema: z.object({\n orbPath: z.string().optional().describe('Path to .orb file. Defaults to {workDir}/schema.orb'),\n }),\n },\n );\n}\n\n// ============================================================================\n// use-behavior (Phase 3)\n// ============================================================================\n\n/**\n * Behavior function registry.\n * Maps behavior names to their pure function + params builder.\n * When a function exists, use-behavior calls it directly (no substitution).\n */\nconst BEHAVIOR_FUNCTIONS: Record<string, (params: Record<string, unknown>) => OrbitalDefinition> = {};\n\nasync function loadBehaviorFunctions(): Promise<void> {\n if (Object.keys(BEHAVIOR_FUNCTIONS).length > 0) return;\n try {\n const fns = await import('@almadar/std/behaviors/functions') as Record<string, unknown>;\n const mapping: Record<string, string> = {\n // Molecules: CRUD/Data\n 'std-list': 'stdList', 'std-cart': 'stdCart', 'std-detail': 'stdDetail',\n 'std-inventory': 'stdInventory', 'std-messaging': 'stdMessaging', 'std-geospatial': 'stdGeospatial',\n // Atoms: UI\n 'std-browse': 'stdBrowse', 'std-modal': 'stdModal', 'std-confirmation': 'stdConfirmation',\n 'std-search': 'stdSearch', 'std-filter': 'stdFilter', 'std-sort': 'stdSort',\n 'std-pagination': 'stdPagination', 'std-drawer': 'stdDrawer', 'std-notification': 'stdNotification',\n 'std-timer': 'stdTimer', 'std-tabs': 'stdTabs', 'std-loading': 'stdLoading',\n 'std-selection': 'stdSelection', 'std-undo': 'stdUndo', 'std-input': 'stdInput',\n // Atoms: Domain\n 'std-wizard': 'stdWizard', 'std-display': 'stdDisplay', 'std-async': 'stdAsync',\n 'std-combat': 'stdCombat', 'std-gameflow': 'stdGameflow', 'std-movement': 'stdMovement',\n 'std-quest': 'stdQuest', 'std-overworld': 'stdOverworld',\n 'std-circuit-breaker': 'stdCircuitBreaker', 'std-cache-aside': 'stdCacheAside',\n 'std-score': 'stdScore', 'std-collision': 'stdCollision', 'std-physics2d': 'stdPhysics2d',\n 'std-rate-limiter': 'stdRateLimiter',\n // Atoms: Game UI\n 'std-game-hud': 'stdGameHud', 'std-score-board': 'stdScoreBoard',\n 'std-game-menu': 'stdGameMenu', 'std-game-over-screen': 'stdGameOverScreen',\n 'std-dialogue-box': 'stdDialogueBox', 'std-inventory-panel': 'stdInventoryPanel',\n 'std-combat-log': 'stdCombatLog', 'std-sprite': 'stdSprite', 'std-game-audio': 'stdGameAudio',\n // Atoms: Game Canvas\n 'std-isometric-canvas': 'stdIsometricCanvas', 'std-platformer-canvas': 'stdPlatformerCanvas',\n 'std-simulation-canvas': 'stdSimulationCanvas',\n 'std-game-canvas-2d': 'stdGameCanvas2d', 'std-game-canvas-3d': 'stdGameCanvas3d',\n // Molecules: Game\n 'std-turn-based-battle': 'stdTurnBasedBattle', 'std-platformer-game': 'stdPlatformerGame',\n 'std-puzzle-game': 'stdPuzzleGame',\n // Molecules: Educational\n 'std-builder-game': 'stdBuilderGame', 'std-classifier-game': 'stdClassifierGame',\n 'std-sequencer-game': 'stdSequencerGame', 'std-debugger-game': 'stdDebuggerGame',\n 'std-negotiator-game': 'stdNegotiatorGame', 'std-simulator-game': 'stdSimulatorGame',\n 'std-event-handler-game': 'stdEventHandlerGame',\n };\n for (const [behaviorName, fnName] of Object.entries(mapping)) {\n if (typeof fns[fnName] === 'function') {\n BEHAVIOR_FUNCTIONS[behaviorName] = fns[fnName] as (params: Record<string, unknown>) => OrbitalDefinition;\n }\n }\n } catch { /* functions not available, fall back to substitution */ }\n}\n\nexport function createUseBehaviorTool(workDir: string) {\n return tool(\n async (input) => {\n await loadBehaviorFunctions();\n const newEntityName = input.entityName;\n const newFields = JSON.parse(input.fieldsJson) as Array<{ name: string; type: string; required?: boolean; default?: unknown }>;\n\n let finalOrbital: Record<string, unknown>;\n\n // Try function-based approach first\n const behaviorFn = BEHAVIOR_FUNCTIONS[input.behaviorName];\n if (behaviorFn) {\n console.log(`[use_behavior] Calling ${input.behaviorName} as pure function`);\n const orbital = behaviorFn({\n entityName: newEntityName,\n fields: newFields,\n persistence: input.persistence ?? 'runtime',\n pageTitle: input.title,\n createButtonLabel: input.createButtonLabel,\n pageName: input.pageName,\n pagePath: input.pagePath,\n isInitial: input.isInitialPage,\n });\n finalOrbital = orbital as unknown as Record<string, unknown>;\n } else {\n // Fallback: load static behavior and substitute\n console.log(`[use_behavior] Falling back to substitution for ${input.behaviorName}`);\n const { getBehavior } = await import('@almadar/std');\n const behavior = getBehavior(input.behaviorName);\n if (!behavior) {\n return { success: false, error: `Behavior \"${input.behaviorName}\" not found` };\n }\n\n const cloned = structuredClone(behavior) as Record<string, unknown>;\n const orbitalData = (cloned.orbitals as Record<string, unknown>[])?.[0];\n const goldenTrait = orbitalData\n ? ((orbitalData.traits as Record<string, unknown>[]) ?? [])[0]\n : cloned;\n const goldenEntity = orbitalData?.entity as Record<string, unknown> | undefined;\n\n if (!goldenTrait?.stateMachine) {\n return { success: false, error: `Behavior \"${input.behaviorName}\" has no state machine` };\n }\n\n if (!newFields.some(f => f.name === 'id')) {\n newFields.unshift({ name: 'id', type: 'string', required: true });\n }\n\n const oldEntityName = String(goldenEntity?.name ?? goldenTrait.linkedEntity ?? 'Item');\n const traitName = `${newEntityName}Management`;\n\n const orbital: Record<string, unknown> = {\n name: `${newEntityName}Orbital`,\n entity: {\n name: newEntityName,\n persistence: input.persistence ?? 'runtime',\n ...(input.persistence === 'persistent' ? { collection: newEntityName.toLowerCase() + 's' } : {}),\n fields: newFields,\n },\n traits: [{\n ...goldenTrait,\n name: traitName,\n linkedEntity: newEntityName,\n category: String(goldenTrait.category ?? 'interaction'),\n }],\n pages: [{\n name: input.pageName ?? `${newEntityName}Page`,\n path: input.pagePath ?? `/${newEntityName.toLowerCase()}s`,\n ...(input.isInitialPage ? { isInitial: true } : {}),\n traits: [{ ref: traitName }],\n }],\n };\n\n const orbStr = JSON.stringify(orbital);\n const substituted = orbStr\n .replace(new RegExp(`\"entity\":\\\\s*\"${oldEntityName}\"`, 'g'), `\"entity\": \"${newEntityName}\"`)\n .replace(new RegExp(`@entity\\\\.${oldEntityName}\\\\.`, 'g'), `@entity.`)\n .replace(new RegExp(`\"${oldEntityName}\"`, 'g'), `\"${newEntityName}\"`);\n\n try {\n finalOrbital = JSON.parse(substituted);\n } catch {\n finalOrbital = orbital;\n }\n\n if (input.title) {\n substituteInRenderUi(finalOrbital, 'typography', 'content', oldEntityName, input.title, true);\n }\n if (input.createButtonLabel) {\n substituteInRenderUi(finalOrbital, 'button', 'label', null, input.createButtonLabel, false);\n }\n }\n\n // Write to .orbitals/\n const orbitalsDir = path.join(workDir, '.orbitals');\n fs.mkdirSync(orbitalsDir, { recursive: true });\n const safeName = newEntityName.replace(/[^a-zA-Z0-9]/g, '_').toLowerCase();\n const orbitalPath = path.join(orbitalsDir, `${safeName}.json`);\n fs.writeFileSync(orbitalPath, JSON.stringify(finalOrbital, null, 2));\n\n // Validate\n const schema = { name: newEntityName + 'App', version: '1.0.0', orbitals: [finalOrbital] };\n fs.mkdirSync(workDir, { recursive: true });\n const validation = validateWithOrbitalCLI(schema, workDir);\n\n return {\n success: true,\n behaviorName: input.behaviorName,\n entityName: newEntityName,\n orbitalPath,\n usedFunction: !!behaviorFn,\n validation: {\n valid: validation.valid ?? false,\n errorCount: (validation.errors ?? []).length,\n errors: (validation.errors ?? []).slice(0, 5).map(e => e.message),\n },\n };\n },\n {\n name: 'use_behavior',\n description: 'Instantiate a standard behavior with custom entity fields and labels. Zero LLM calls. Calls pure behavior function when available, falls back to substitution otherwise.',\n schema: z.object({\n behaviorName: z.string().describe('Standard behavior name (e.g., \"std-list\", \"std-cart\")'),\n entityName: z.string().describe('New entity name in PascalCase (e.g., \"Product\", \"Task\")'),\n fieldsJson: z.string().describe('JSON array of entity fields: [{ name, type, required?, default? }]'),\n persistence: z.string().optional().describe('\"persistent\", \"runtime\", or \"singleton\"'),\n title: z.string().optional().describe('Page title override'),\n createButtonLabel: z.string().optional().describe('Create button label override'),\n pageName: z.string().optional().describe('Page component name'),\n pagePath: z.string().optional().describe('Route path (e.g., \"/products\")'),\n isInitialPage: z.boolean().optional().describe('Whether this is the initial/home page'),\n }),\n },\n );\n}\n\n/** Walk render-ui trees and substitute text in pattern props. */\nfunction substituteInRenderUi(\n orbital: Record<string, unknown>,\n patternType: string,\n propName: string,\n oldValue: string | null,\n newValue: string,\n firstOnly: boolean,\n): void {\n let found = false;\n const traits = (orbital.traits as Record<string, unknown>[]) || [];\n for (const trait of traits) {\n const sm = trait.stateMachine as Record<string, unknown>;\n if (!sm) continue;\n const transitions = (sm.transitions as Array<Record<string, unknown>>) || [];\n for (const tr of transitions) {\n if (tr.event !== 'INIT') continue;\n const effects = (tr.effects as unknown[][]) || [];\n for (const eff of effects) {\n if (!Array.isArray(eff) || eff[0] !== 'render-ui') continue;\n const tree = eff[2] as Record<string, unknown>;\n if (!tree) continue;\n walkAndSubstitute(tree, patternType, propName, oldValue, newValue, firstOnly, () => { found = true; });\n }\n }\n }\n}\n\nfunction walkAndSubstitute(\n node: Record<string, unknown>,\n patternType: string,\n propName: string,\n oldValue: string | null,\n newValue: string,\n firstOnly: boolean,\n onFound: () => void,\n): void {\n if (node.type === patternType) {\n const current = node[propName];\n if (typeof current === 'string') {\n if (oldValue === null || current.toLowerCase().includes(oldValue.toLowerCase())) {\n if (!firstOnly || !onFound) {\n node[propName] = newValue;\n onFound();\n }\n }\n }\n }\n const children = node.children as Record<string, unknown>[];\n if (Array.isArray(children)) {\n for (const child of children) {\n if (child && typeof child === 'object') {\n walkAndSubstitute(child, patternType, propName, oldValue, newValue, firstOnly, onFound);\n }\n }\n }\n}\n\n// ============================================================================\n// connect (Phase 4)\n// ============================================================================\n\nexport function createConnectTool(workDir: string) {\n return tool(\n async (input) => {\n const emitterPath = path.join(workDir, '.orbitals', input.emitterFile);\n const listenerPath = path.join(workDir, '.orbitals', input.listenerFile);\n\n if (!fs.existsSync(emitterPath)) return { success: false, error: `Emitter not found: ${emitterPath}` };\n if (!fs.existsSync(listenerPath)) return { success: false, error: `Listener not found: ${listenerPath}` };\n\n const emitter = JSON.parse(fs.readFileSync(emitterPath, 'utf-8')) as Record<string, unknown>;\n const listener = JSON.parse(fs.readFileSync(listenerPath, 'utf-8')) as Record<string, unknown>;\n\n // Find primary traits\n const emitterTraits = (emitter.traits as Record<string, unknown>[]) || [];\n const listenerTraits = (listener.traits as Record<string, unknown>[]) || [];\n if (emitterTraits.length === 0 || listenerTraits.length === 0) {\n return { success: false, error: 'Both orbitals must have at least one trait' };\n }\n\n const emitterTrait = emitterTraits[0];\n const listenerTrait = listenerTraits[0];\n\n // Add emits to emitter\n const emits = (emitterTrait.emits as unknown[]) || [];\n emits.push({\n event: input.eventName,\n scope: 'external',\n ...(input.payloadJson ? { payload: JSON.parse(input.payloadJson) } : {}),\n });\n emitterTrait.emits = emits;\n\n // Add listens to listener\n const listens = (listenerTrait.listens as unknown[]) || [];\n listens.push({\n event: input.eventName,\n triggers: input.triggersEvent || 'INIT',\n scope: 'external',\n });\n listenerTrait.listens = listens;\n\n // Write back\n fs.writeFileSync(emitterPath, JSON.stringify(emitter, null, 2));\n fs.writeFileSync(listenerPath, JSON.stringify(listener, null, 2));\n\n return {\n success: true,\n event: input.eventName,\n emitter: String(emitterTrait.name),\n listener: String(listenerTrait.name),\n };\n },\n {\n name: 'connect_behaviors',\n description: 'Wire a cross-orbital event between two behaviors. Adds emits to the emitter trait and listens to the listener trait.',\n schema: z.object({\n emitterFile: z.string().describe('Emitter orbital filename in .orbitals/ (e.g., \"product.json\")'),\n listenerFile: z.string().describe('Listener orbital filename in .orbitals/ (e.g., \"cart_item.json\")'),\n eventName: z.string().describe('Event name in UPPER_SNAKE_CASE (e.g., \"ADD_TO_CART\")'),\n triggersEvent: z.string().optional().describe('Event to trigger on listener (defaults to \"INIT\")'),\n payloadJson: z.string().optional().describe('JSON array of payload fields: [{ name, type }]'),\n }),\n },\n );\n}\n\n// ============================================================================\n// compose (Phase 5)\n// ============================================================================\n\nexport function createComposeTool(workDir: string) {\n return tool(\n async (input) => {\n const orbitalsDir = path.join(workDir, '.orbitals');\n\n // Load all orbital files\n const orbitals: Record<string, unknown>[] = [];\n const orbitalFiles = input.orbitalFiles ? JSON.parse(input.orbitalFiles) as string[] :\n fs.readdirSync(orbitalsDir).filter(f => f.endsWith('.json'));\n\n for (const file of orbitalFiles) {\n const filePath = path.join(orbitalsDir, file);\n if (!fs.existsSync(filePath)) continue;\n orbitals.push(JSON.parse(fs.readFileSync(filePath, 'utf-8')));\n }\n\n if (orbitals.length === 0) {\n return { success: false, error: 'No orbitals found in .orbitals/' };\n }\n\n // Build pages from input or auto-generate\n let pages: Array<Record<string, unknown>>;\n if (input.pagesJson) {\n pages = JSON.parse(input.pagesJson);\n } else {\n // Auto-generate: one page per orbital\n pages = orbitals.map((o, i) => {\n const oName = String((o as Record<string, unknown>).name || `Orbital${i}`);\n const entityName = oName.replace(/Orbital$/i, '');\n const traits = ((o as Record<string, unknown>).traits as Array<Record<string, unknown>>) || [];\n return {\n name: `${entityName}Page`,\n path: `/${entityName.toLowerCase()}s`,\n ...(i === 0 ? { isInitial: true } : {}),\n traits: traits.filter(t => typeof t !== 'string' && !('ref' in t)).map(t => ({ ref: String(t.name) })),\n };\n });\n }\n\n // Merge pages into orbitals (each orbital keeps its own pages)\n for (const orbital of orbitals) {\n const oName = String(orbital.name || '');\n const orbitalTraitNames = ((orbital.traits as Array<Record<string, unknown>>) || [])\n .filter(t => typeof t !== 'string' && !('ref' in t))\n .map(t => String(t.name));\n\n orbital.pages = pages.filter(p => {\n const pageTraits = (p.traits as Array<{ ref: string }>) || [];\n return pageTraits.some(pt => orbitalTraitNames.includes(pt.ref));\n });\n }\n\n // Build final schema\n const schema = {\n name: input.appName || 'Application',\n version: '1.0.0',\n orbitals,\n };\n\n const schemaPath = path.join(workDir, 'schema.orb');\n fs.writeFileSync(schemaPath, JSON.stringify(schema, null, 2));\n\n // Validate\n const validation = validateWithOrbitalCLI(schema, workDir);\n\n return {\n success: true,\n appName: schema.name,\n orbitalCount: orbitals.length,\n pageCount: pages.length,\n schemaPath,\n validation: {\n valid: validation.valid ?? false,\n errorCount: (validation.errors || []).length,\n errors: (validation.errors || []).slice(0, 5).map(e => e.message),\n },\n };\n },\n {\n name: 'compose_app',\n description: 'Compose multiple orbitals from .orbitals/ into a final multi-page application schema. Writes schema.orb and validates.',\n schema: z.object({\n appName: z.string().optional().describe('Application name'),\n orbitalFiles: z.string().optional().describe('JSON array of orbital filenames. Defaults to all .json files in .orbitals/'),\n pagesJson: z.string().optional().describe('JSON array of page definitions: [{ name, path, isInitial?, traits: [{ ref }] }]. Auto-generated if omitted.'),\n }),\n },\n );\n}\n"]}
|
package/dist/gates/types.d.ts
CHANGED
|
@@ -7,8 +7,18 @@
|
|
|
7
7
|
* @packageDocumentation
|
|
8
8
|
*/
|
|
9
9
|
import type { OrbitalSchema } from '@almadar/core/types';
|
|
10
|
-
/**
|
|
11
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Providers available for gated construction.
|
|
12
|
+
*
|
|
13
|
+
* - deepseek: DeepSeek V3. Reliable baseline, good at all gates.
|
|
14
|
+
* - zhipu: Zhipu GLM-4.7 via OpenRouter.
|
|
15
|
+
* - qwen3.5: Qwen3.5-9B via OpenRouter. Thinking model, unreliable for structured JSON.
|
|
16
|
+
* - gemma3-4b: Google Gemma 3 4B via OpenRouter. Best small model: 6/6 complex decomposition,
|
|
17
|
+
* 100% behavior matching, fastest (0.5s match, 4.7s simple), FREE.
|
|
18
|
+
* - mistral-small: Mistral Small 3.1 24B via OpenRouter. Strong runner-up: 6/6 complex,
|
|
19
|
+
* smart matching (picked std-kanban over std-list for tasks).
|
|
20
|
+
*/
|
|
21
|
+
export type GateProvider = 'deepseek' | 'zhipu' | 'qwen3.5' | 'gemma3-4b' | 'mistral-small';
|
|
12
22
|
/** Whether the behavior source is injected into the user prompt. */
|
|
13
23
|
export type GateMode = 'guided' | 'pure';
|
|
14
24
|
/** Options passed to individual gate functions. */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@almadar/agent",
|
|
3
|
-
"version": "3.5.
|
|
3
|
+
"version": "3.5.5",
|
|
4
4
|
"description": "AI agent infrastructure for Almadar orbital schema generation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"@almadar/llm": ">=2.2.0",
|
|
61
61
|
"@almadar/patterns": ">=2.6.0",
|
|
62
62
|
"@almadar/skills": ">=2.5.0",
|
|
63
|
-
"@almadar/std": ">=3.0.
|
|
63
|
+
"@almadar/std": ">=3.0.4",
|
|
64
64
|
"langsmith": "^0.1.0",
|
|
65
65
|
"uuid": "^9.0.0",
|
|
66
66
|
"zod": "^3.22.0"
|