@almadar/workspace 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/account-auth-token.test.d.ts +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +21 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +25 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/internal/backends/local.ts","../src/internal/backends/memory.ts","../src/internal/sink-manager.ts","../src/internal/path-layout.ts","../src/internal/templates.ts","../src/internal/git-client.ts","../src/internal/workspace-manager.ts","../src/internal/workspace-resolver.ts","../src/internal/restore.ts","../src/internal/memory-files.ts","../src/workspace-index/types.ts","../src/workspace-index/cosine.ts","../src/workspace-index/fingerprint.ts","../src/workspace-index/sidecar.ts","../src/workspace-index/bm25.ts","../src/workspace-index/rrf.ts","../src/workspace-index/graph-builders.ts","../src/workspace-index/manifest.ts","../src/workspace-index/index-impl.ts","../src/service.ts","../src/workspace-index/embedder.ts","../src/open-workspace.ts","../src/list-workspaces.ts","../src/delete-workspace.ts","../src/account.ts"],"names":["path","asJsonObject","tailOfRef","workDir"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Local filesystem backend. The ONLY place `node:fs` is permitted.\n */\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport type { WorkspaceBackend } from '../types.js';\n\nexport class LocalBackend implements WorkspaceBackend {\n async readFile(absPath: string): Promise<string> {\n return fs.promises.readFile(absPath, 'utf-8');\n }\n readFileSync(absPath: string): string {\n return fs.readFileSync(absPath, 'utf-8');\n }\n async writeFile(absPath: string, content: string): Promise<void> {\n // Auto-mkdir parent — callers don't pre-create the directory structure.\n // Without this, a write to a fresh path (e.g. the first\n // `.almadar/trace.jsonl` write after mint) ENOENTs.\n await fs.promises.mkdir(path.dirname(absPath), { recursive: true });\n await fs.promises.writeFile(absPath, content, 'utf-8');\n }\n writeFileSync(absPath: string, content: string): void {\n fs.mkdirSync(path.dirname(absPath), { recursive: true });\n fs.writeFileSync(absPath, content, 'utf-8');\n }\n exists(absPath: string): boolean {\n return fs.existsSync(absPath);\n }\n async readdir(absPath: string): Promise<string[]> {\n return fs.promises.readdir(absPath);\n }\n readdirSync(absPath: string): string[] {\n return fs.readdirSync(absPath);\n }\n async mkdir(absPath: string, opts?: { recursive?: boolean }): Promise<void> {\n await fs.promises.mkdir(absPath, opts);\n }\n mkdirSync(absPath: string, opts?: { recursive?: boolean }): void {\n fs.mkdirSync(absPath, opts);\n }\n async unlink(absPath: string): Promise<void> {\n await fs.promises.unlink(absPath);\n }\n async stat(\n absPath: string,\n ): Promise<{ size: number; mtimeMs: number; isDirectory: boolean }> {\n const s = await fs.promises.stat(absPath);\n return { size: s.size, mtimeMs: s.mtimeMs, isDirectory: s.isDirectory() };\n }\n async rename(srcAbs: string, dstAbs: string): Promise<void> {\n await fs.promises.mkdir(path.dirname(dstAbs), { recursive: true });\n await fs.promises.rename(srcAbs, dstAbs);\n }\n async chmod(absPath: string, mode: number): Promise<void> {\n await fs.promises.chmod(absPath, mode);\n }\n async rm(absPath: string, opts?: { recursive?: boolean }): Promise<void> {\n await fs.promises.rm(absPath, { recursive: opts?.recursive ?? false, force: true });\n }\n watch(absPath: string, onChange: (kind: 'change' | 'rename') => void): () => void {\n let watcher: fs.FSWatcher | undefined;\n let timer: NodeJS.Timeout | undefined;\n // fs.watch throws synchronously if the path doesn't exist; a missing path\n // is \"nothing to watch yet\", so degrade to a no-op closer rather than throw.\n try {\n watcher = fs.watch(absPath, (eventType) => {\n // Debounce: editors emit several events per save.\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n timer = undefined;\n onChange(eventType === 'rename' ? 'rename' : 'change');\n }, 75);\n });\n } catch {\n // not watchable — closer below is a safe no-op\n }\n return () => {\n if (timer) clearTimeout(timer);\n watcher?.close();\n };\n }\n}\n","/**\n * In-memory backend for tests and sandboxed evals. No `node:fs`.\n */\nimport type { WorkspaceBackend } from '../types.js';\n\nexport class MemoryBackend implements WorkspaceBackend {\n private files = new Map<string, string>();\n private dirs = new Set<string>();\n\n async readFile(absPath: string): Promise<string> {\n return this.readFileSync(absPath);\n }\n readFileSync(absPath: string): string {\n const content = this.files.get(absPath);\n if (content === undefined) throw new Error(`ENOENT: ${absPath}`);\n return content;\n }\n async writeFile(absPath: string, content: string): Promise<void> {\n this.writeFileSync(absPath, content);\n }\n writeFileSync(absPath: string, content: string): void {\n this.files.set(absPath, content);\n }\n exists(absPath: string): boolean {\n if (this.files.has(absPath) || this.dirs.has(absPath)) return true;\n // Treat any prefix that has children as an existing dir.\n const prefix = absPath.endsWith('/') ? absPath : absPath + '/';\n for (const k of this.files.keys()) {\n if (k.startsWith(prefix)) return true;\n }\n return false;\n }\n async readdir(absPath: string): Promise<string[]> {\n return this.readdirSync(absPath);\n }\n readdirSync(absPath: string): string[] {\n const prefix = absPath.endsWith('/') ? absPath : absPath + '/';\n const entries = new Set<string>();\n for (const key of this.files.keys()) {\n if (key.startsWith(prefix)) {\n const rest = key.slice(prefix.length);\n const firstSegment = rest.split('/')[0];\n if (firstSegment) entries.add(firstSegment);\n }\n }\n return Array.from(entries);\n }\n async mkdir(absPath: string): Promise<void> {\n this.mkdirSync(absPath);\n }\n mkdirSync(absPath: string): void {\n this.dirs.add(absPath);\n }\n async unlink(absPath: string): Promise<void> {\n this.files.delete(absPath);\n }\n async stat(\n absPath: string,\n ): Promise<{ size: number; mtimeMs: number; isDirectory: boolean }> {\n const content = this.files.get(absPath);\n if (content !== undefined) {\n return { size: content.length, mtimeMs: Date.now(), isDirectory: false };\n }\n // Treat as directory if anything sits under it.\n if (this.dirs.has(absPath)) return { size: 0, mtimeMs: Date.now(), isDirectory: true };\n const prefix = absPath.endsWith('/') ? absPath : absPath + '/';\n for (const k of this.files.keys()) {\n if (k.startsWith(prefix)) return { size: 0, mtimeMs: Date.now(), isDirectory: true };\n }\n throw new Error(`ENOENT: ${absPath}`);\n }\n async rename(srcAbs: string, dstAbs: string): Promise<void> {\n // File case — direct key swap.\n const fileContent = this.files.get(srcAbs);\n if (fileContent !== undefined) {\n this.files.delete(srcAbs);\n this.files.set(dstAbs, fileContent);\n return;\n }\n // Directory case — every file whose key starts with `srcAbs/` migrates\n // to the matching position under `dstAbs/`. Empty dirs (only present\n // in `this.dirs`) also migrate.\n const srcPrefix = srcAbs.endsWith('/') ? srcAbs : srcAbs + '/';\n const dstPrefix = dstAbs.endsWith('/') ? dstAbs : dstAbs + '/';\n const migrations: Array<[string, string]> = [];\n for (const key of this.files.keys()) {\n if (key.startsWith(srcPrefix)) {\n migrations.push([key, dstPrefix + key.slice(srcPrefix.length)]);\n }\n }\n for (const [oldKey, newKey] of migrations) {\n const content = this.files.get(oldKey);\n if (content !== undefined) {\n this.files.delete(oldKey);\n this.files.set(newKey, content);\n }\n }\n const dirsToMigrate: string[] = [];\n for (const dir of this.dirs) {\n if (dir === srcAbs || dir.startsWith(srcPrefix)) dirsToMigrate.push(dir);\n }\n for (const oldDir of dirsToMigrate) {\n this.dirs.delete(oldDir);\n const newDir = oldDir === srcAbs ? dstAbs : dstPrefix + oldDir.slice(srcPrefix.length);\n this.dirs.add(newDir);\n }\n }\n async chmod(): Promise<void> {\n // In-memory backend has no mode bits — no-op.\n }\n watch(): () => void {\n // No external filesystem to watch — return a no-op closer.\n return () => {};\n }\n async rm(absPath: string, opts?: { recursive?: boolean }): Promise<void> {\n this.files.delete(absPath);\n this.dirs.delete(absPath);\n if (opts?.recursive) {\n const prefix = absPath.endsWith('/') ? absPath : absPath + '/';\n for (const k of [...this.files.keys()]) if (k.startsWith(prefix)) this.files.delete(k);\n for (const d of [...this.dirs]) if (d.startsWith(prefix)) this.dirs.delete(d);\n }\n }\n\n // Test helpers\n getAll(): Map<string, string> {\n return new Map(this.files);\n }\n clear(): void {\n this.files.clear();\n this.dirs.clear();\n }\n}\n","/**\n * Internal SinkManager — fans `WorkspaceWriteEvent` out to every\n * registered `WorkspaceObserver`. A slow / hung observer does not crash\n * the writer; results are collected via `Promise.allSettled`.\n *\n * @packageDocumentation\n */\n\nimport type { WorkspaceObserver, WorkspaceWriteEvent } from '../types.js';\n\nexport class SinkManager {\n private readonly observers: WorkspaceObserver[] = [];\n\n /** Register an observer; returns an unsubscribe function. */\n subscribe(observer: WorkspaceObserver): () => void {\n this.observers.push(observer);\n return () => {\n const i = this.observers.indexOf(observer);\n if (i >= 0) this.observers.splice(i, 1);\n };\n }\n\n /** Snapshot of observer count — useful for diagnostics. */\n get observerCount(): number {\n return this.observers.length;\n }\n\n /**\n * Notify all observers in parallel. Awaits all settlements. A rejected\n * observer is captured in the result; subsequent writes still proceed.\n */\n async notifyAll(event: WorkspaceWriteEvent): Promise<void> {\n if (this.observers.length === 0) return;\n const settled = await Promise.allSettled(\n this.observers.map(async o => o.onWrite(event)),\n );\n for (const r of settled) {\n if (r.status === 'rejected') {\n // Observer failure must not surface as a write failure, but it is\n // useful to keep visible. Console-only so the package stays\n // logger-agnostic.\n const reason = r.reason instanceof Error ? r.reason.message : String(r.reason);\n console.error(`[workspace] observer error on ${event.kind}: ${reason}`);\n }\n }\n }\n}\n","/**\n * Path discipline — every absolute path the service uses is computed here.\n *\n * Consumers never construct paths. Public methods take logical names; the\n * service calls into this module to resolve them. Trusted internal paths\n * (orbital files, session files) use `path.join` directly; sandboxed\n * methods (`readFile` / `writeFile`) go through `sandboxedPath` which\n * rejects traversal.\n *\n * @packageDocumentation\n */\n\nimport path from 'node:path';\n\n/** Single source of truth for workspace directory layout. */\nexport const WORKSPACE_LAYOUT = {\n ALMADAR_DIR: '.almadar',\n ORBITALS_DIR: 'orbitals',\n SESSIONS_DIR: '.almadar/sessions',\n COORDINATOR_DIR: '.almadar/sessions/Coordinator',\n TRACE_FILE: '.almadar/trace.jsonl',\n SCHEMA_FILE: 'schema.orb',\n COMPILED_DIR: 'apps',\n APP_MARKER: '.almadar/app-marker.json',\n USER_MEMORY: '.almadar/user.orb',\n PROJECT_MEMORY: '.almadar/project.orb',\n} as const;\n\n/** Logical orbital name → absolute `.orb` path. */\nexport function orbitalFile(workDir: string, name: string): string {\n return path.join(workDir, WORKSPACE_LAYOUT.ORBITALS_DIR, `${name}.orb`);\n}\n\n/** Archived orbital path. */\nexport function archivedOrbitalFile(workDir: string, name: string): string {\n return path.join(workDir, WORKSPACE_LAYOUT.ORBITALS_DIR, '.archived', `${name}.orb`);\n}\n\n/** Schema (combined output) file. */\nexport function schemaFile(workDir: string): string {\n return path.join(workDir, WORKSPACE_LAYOUT.SCHEMA_FILE);\n}\n\n/** Coordinator session dir. */\nexport function coordinatorDir(workDir: string): string {\n return path.join(workDir, WORKSPACE_LAYOUT.COORDINATOR_DIR);\n}\n\n/** Coordinator-level artifact path. */\nexport function coordinatorFile(workDir: string, basename: string): string {\n return path.join(coordinatorDir(workDir), basename);\n}\n\n/** Per-orbital session dir. */\nexport function orbitalSessionDir(workDir: string, orbital: string): string {\n return path.join(workDir, WORKSPACE_LAYOUT.SESSIONS_DIR, orbital);\n}\n\n/** Per-orbital session-file path. */\nexport function orbitalSessionFile(workDir: string, orbital: string, basename: string): string {\n return path.join(orbitalSessionDir(workDir, orbital), basename);\n}\n\n/** Trace JSONL. */\nexport function traceFile(workDir: string): string {\n return path.join(workDir, WORKSPACE_LAYOUT.TRACE_FILE);\n}\n\n/** Compiled output base. */\nexport function compiledDir(workDir: string): string {\n return path.join(workDir, WORKSPACE_LAYOUT.COMPILED_DIR);\n}\n\n/** Compiled-output path for a given relative key. */\nexport function compiledFile(workDir: string, relPath: string): string {\n return path.join(compiledDir(workDir), relPath);\n}\n\n/** App marker — used internally by the resolver/factory. */\nexport function appMarkerFile(workDir: string): string {\n return path.join(workDir, WORKSPACE_LAYOUT.APP_MARKER);\n}\n\n/** Workspace-level index manifest path. */\nexport function workspaceIndexManifestFile(workDir: string): string {\n return path.join(workDir, WORKSPACE_LAYOUT.ALMADAR_DIR, 'index.json');\n}\n\n/**\n * Resolve a user-supplied relative path within the sandbox. Rejects\n * absolute paths, `..` traversal, and any path that resolves outside\n * `workDir`. Returns the absolute resolved path on success.\n */\nexport function sandboxedPath(workDir: string, relPath: string): string {\n if (typeof relPath !== 'string' || relPath.length === 0) {\n throw new Error('sandbox: empty relative path');\n }\n if (path.isAbsolute(relPath)) {\n throw new Error(`sandbox: absolute paths are not allowed (${relPath})`);\n }\n // Reject Windows-style absolute paths on cross-platform consumers.\n if (/^[a-zA-Z]:[\\\\/]/.test(relPath)) {\n throw new Error(`sandbox: drive-letter paths are not allowed (${relPath})`);\n }\n const rootAbs = path.resolve(workDir);\n const target = path.resolve(rootAbs, relPath);\n if (target !== rootAbs && !target.startsWith(rootAbs + path.sep)) {\n throw new Error(`sandbox: path escapes workspace (${relPath})`);\n }\n return target;\n}\n\n/** Validate an orbital logical name — no path separators, no `..`. */\nexport function assertOrbitalName(name: string): void {\n if (typeof name !== 'string' || name.length === 0) {\n throw new Error('orbital name: empty');\n }\n if (name.includes('/') || name.includes('\\\\') || name === '.' || name === '..') {\n throw new Error(`orbital name: invalid (${name})`);\n }\n}\n","/**\n * Mint-time templates. Written by `openWorkspace` when minting a fresh\n * workspace. Internal — not exported from the package barrel.\n *\n * The shapes follow @almadar/core's `OrbitalSchema` but are kept here as\n * literal JSON so this package has zero dependency on the std memory\n * orbital definitions.\n *\n * @packageDocumentation\n */\n\nimport type { JsonObject } from '@almadar/core';\n\n/** Empty scaffold for a new generation. */\nexport function createSchemaOrbTemplate(name: string): JsonObject {\n return {\n name,\n version: '1.0.0',\n description: '',\n orbitals: [],\n };\n}\n\n/** User preferences template — minimal seed. */\nexport function createUserOrbTemplate(userId: string): JsonObject {\n return {\n name: 'UserMemory',\n version: '1.0.0',\n description: 'User preferences and learned patterns',\n orbitals: [\n {\n name: 'PreferenceTracking',\n entity: {\n name: 'UserPreference',\n fields: [],\n instances: [\n {\n id: `pref-${userId}`,\n userId,\n },\n ],\n },\n traits: [],\n pages: [],\n },\n ],\n };\n}\n\n/** Project context template. */\nexport function createProjectOrbTemplate(projectName: string, appId?: string): JsonObject {\n return {\n name: 'ProjectMemory',\n version: '1.0.0',\n description: `Domain knowledge for ${projectName}`,\n orbitals: [\n {\n name: 'DomainKnowledge',\n entity: {\n name: 'ProjectContext',\n fields: [],\n instances: [\n {\n id: appId ?? `project-${projectName}`,\n appId: appId ?? '',\n projectName,\n lastUpdatedAt: new Date().toISOString(),\n },\n ],\n },\n traits: [],\n pages: [],\n },\n ],\n };\n}\n\nexport function serializeJson(value: JsonObject): string {\n return JSON.stringify(value, null, 2);\n}\n","/**\n * Thin wrapper around local `git` CLI for workspace-local operations\n * (init, add, commit, tag, push, pull, status). No `node:fs` use here —\n * existence checks ride the backend.\n *\n * @packageDocumentation\n */\n\nimport { execFile } from 'node:child_process';\nimport path from 'node:path';\nimport type { WorkspaceBackend } from './types.js';\n\nexport interface GitStatus {\n clean: boolean;\n staged: string[];\n modified: string[];\n untracked: string[];\n}\n\nexport class GitClient {\n constructor(private readonly cwd: string, private readonly backend: WorkspaceBackend) {}\n\n /** Is the working dir already a git repo? */\n async isRepo(): Promise<boolean> {\n return this.backend.exists(path.join(this.cwd, '.git'));\n }\n\n async init(): Promise<void> {\n if (await this.isRepo()) return;\n await this.exec(['init']);\n await this.exec(['config', 'user.email', 'agent@almadar.io']);\n await this.exec(['config', 'user.name', 'Almadar Agent']);\n }\n\n async addAll(): Promise<void> {\n await this.exec(['add', '-A']);\n }\n\n async commit(message: string): Promise<string | null> {\n try {\n const out = await this.exec(['commit', '-m', message, '--allow-empty-message']);\n const match = out.match(/\\[[\\w/.-]+ ([a-f0-9]+)\\]/);\n return match ? match[1] : null;\n } catch (err: unknown) {\n if (err instanceof Error && err.message.includes('nothing to commit')) return null;\n throw err;\n }\n }\n\n async tag(name: string, message?: string): Promise<void> {\n const args = ['tag'];\n if (message) {\n args.push('-a', name, '-m', message);\n } else {\n args.push(name);\n }\n await this.exec(args);\n }\n\n async push(remote = 'origin', branch?: string): Promise<void> {\n const args = ['push', remote];\n if (branch) args.push(branch);\n await this.exec(args);\n }\n\n async pull(remote = 'origin', branch?: string): Promise<void> {\n const args = ['pull', remote];\n if (branch) args.push(branch);\n await this.exec(args);\n }\n\n async hasRemote(remote = 'origin'): Promise<boolean> {\n try {\n const out = await this.exec(['remote']);\n return out.split('\\n').map(s => s.trim()).includes(remote);\n } catch {\n return false;\n }\n }\n\n async addRemote(remote: string, url: string): Promise<void> {\n await this.exec(['remote', 'add', remote, url]);\n }\n\n async status(): Promise<GitStatus> {\n const out = await this.exec(['status', '--porcelain']);\n const lines = out.split('\\n').filter(Boolean);\n const staged: string[] = [];\n const modified: string[] = [];\n const untracked: string[] = [];\n for (const line of lines) {\n const index = line[0];\n const work = line[1];\n const file = line.slice(3);\n if (index === '?' && work === '?') untracked.push(file);\n else if (index !== ' ' && index !== '?') staged.push(file);\n else if (work !== ' ') modified.push(file);\n }\n return { clean: lines.length === 0, staged, modified, untracked };\n }\n\n async headSha(): Promise<string | null> {\n try {\n const out = await this.exec(['rev-parse', 'HEAD']);\n return out.trim() || null;\n } catch {\n return null;\n }\n }\n\n private exec(args: string[]): Promise<string> {\n return execGit(args, this.cwd);\n }\n}\n\nfunction execGit(args: string[], cwd: string): Promise<string> {\n return new Promise((resolve, reject) => {\n execFile('git', args, { cwd, maxBuffer: 10 * 1024 * 1024 }, (err, stdout, stderr) => {\n if (err) {\n const message = stderr?.trim() || stdout?.trim() || err.message;\n reject(new Error(`git ${args[0]}: ${message}`));\n return;\n }\n resolve(stdout);\n });\n });\n}\n","/**\n * Internal lifecycle helpers used by `openWorkspace` on mint/adopt/resume.\n *\n * - Create the workspace directory skeleton.\n * - Write mint-time templates (schema.orb, user.orb, project.orb) if missing.\n * - Initialize git when `github` is supplied.\n *\n * No `node:fs` use here — everything rides the backend.\n *\n * @packageDocumentation\n */\n\nimport path from 'node:path';\nimport type { WorkspaceBackend } from './types.js';\nimport {\n WORKSPACE_LAYOUT,\n coordinatorDir,\n orbitalSessionDir,\n schemaFile,\n} from './path-layout.js';\nimport {\n createSchemaOrbTemplate,\n createUserOrbTemplate,\n createProjectOrbTemplate,\n serializeJson,\n} from './templates.js';\nimport { GitClient } from './git-client.js';\n\n/** Make sure every workspace dir exists. */\nexport async function ensureSkeleton(\n backend: WorkspaceBackend,\n workDir: string,\n): Promise<void> {\n await backend.mkdir(workDir, { recursive: true });\n await backend.mkdir(path.join(workDir, WORKSPACE_LAYOUT.ALMADAR_DIR), { recursive: true });\n await backend.mkdir(path.join(workDir, WORKSPACE_LAYOUT.ORBITALS_DIR), { recursive: true });\n await backend.mkdir(path.join(workDir, WORKSPACE_LAYOUT.SESSIONS_DIR), { recursive: true });\n await backend.mkdir(coordinatorDir(workDir), { recursive: true });\n}\n\n/** Initialise per-orbital session dir lazily. */\nexport async function ensureOrbitalSessionDir(\n backend: WorkspaceBackend,\n workDir: string,\n orbital: string,\n): Promise<void> {\n await backend.mkdir(orbitalSessionDir(workDir, orbital), { recursive: true });\n}\n\n/** Write mint-time templates only when they don't exist. */\nexport async function writeMintTemplatesIfMissing(\n backend: WorkspaceBackend,\n workDir: string,\n userId: string,\n projectName: string,\n appId?: string,\n): Promise<void> {\n const schemaPath = schemaFile(workDir);\n if (!backend.exists(schemaPath)) {\n await backend.writeFile(schemaPath, serializeJson(createSchemaOrbTemplate(projectName)));\n }\n const userPath = path.join(workDir, WORKSPACE_LAYOUT.USER_MEMORY);\n if (!backend.exists(userPath)) {\n await backend.writeFile(userPath, serializeJson(createUserOrbTemplate(userId)));\n }\n const projectPath = path.join(workDir, WORKSPACE_LAYOUT.PROJECT_MEMORY);\n if (!backend.exists(projectPath)) {\n await backend.writeFile(\n projectPath,\n serializeJson(createProjectOrbTemplate(projectName, appId)),\n );\n }\n}\n\n/** Initialise git for the workspace if it isn't already a repo. */\nexport async function ensureGitInit(\n backend: WorkspaceBackend,\n workDir: string,\n): Promise<GitClient> {\n const git = new GitClient(workDir, backend);\n await git.init();\n return git;\n}\n","/**\n * Lifecycle helpers — read + write the per-workspace app marker, and\n * scan a user's workspace root for one that matches a known `appId`.\n *\n * No `node:fs` here — everything rides the backend.\n *\n * @packageDocumentation\n */\n\nimport path from 'node:path';\nimport { randomBytes } from 'node:crypto';\nimport type { JsonObject } from '@almadar/core';\nimport type { WorkspaceBackend, AppMarker } from './types.js';\nimport { appMarkerFile } from './path-layout.js';\n\n/** Synchronous read — used during resolution before the service is built. */\nexport function readAppMarker(backend: WorkspaceBackend, workDir: string): AppMarker | null {\n const markerPath = appMarkerFile(workDir);\n if (!backend.exists(markerPath)) return null;\n try {\n const raw = backend.readFileSync(markerPath);\n const parsed = JSON.parse(raw) as JsonObject;\n if (\n typeof parsed.appId !== 'string'\n || typeof parsed.userId !== 'string'\n || typeof parsed.createdAt !== 'number'\n ) {\n return null;\n }\n const marker: AppMarker = {\n appId: parsed.appId,\n userId: parsed.userId,\n createdAt: parsed.createdAt,\n };\n if (typeof parsed.repoUrl === 'string') marker.repoUrl = parsed.repoUrl;\n return marker;\n } catch {\n return null;\n }\n}\n\n/** Write the marker. Caller ensures the `.almadar/` dir exists. */\nexport async function writeAppMarker(\n backend: WorkspaceBackend,\n workDir: string,\n marker: AppMarker,\n): Promise<void> {\n const markerPath = appMarkerFile(workDir);\n await backend.mkdir(path.dirname(markerPath), { recursive: true });\n await backend.writeFile(markerPath, JSON.stringify(marker, null, 2));\n}\n\n/**\n * Scan `<workspacesRoot>/<userId>/` for a session dir whose\n * `.almadar/app-marker.json` matches `appId`. Returns null on miss.\n */\nexport async function findLocalWorkspaceDir(\n backend: WorkspaceBackend,\n workspacesRoot: string,\n userId: string,\n appId: string,\n): Promise<string | null> {\n const userDir = path.join(workspacesRoot, userId);\n if (!backend.exists(userDir)) return null;\n\n let entries: string[];\n try {\n entries = await backend.readdir(userDir);\n } catch {\n return null;\n }\n\n for (const entry of entries) {\n const sessionDir = path.join(userDir, entry);\n let isDir = false;\n try {\n const s = await backend.stat(sessionDir);\n isDir = s.isDirectory;\n } catch {\n continue;\n }\n if (!isDir) continue;\n const marker = readAppMarker(backend, sessionDir);\n if (marker && marker.appId === appId) return sessionDir;\n }\n return null;\n}\n\n/**\n * Compose a fresh session dir under `<workspacesRoot>/<userId>/`.\n *\n * The suffix combines `Date.now().toString(36)` with 4 hex chars of\n * `crypto.randomBytes` so two concurrent mints in the same millisecond\n * cannot collide on the same path. Without the random tail, two\n * `mintSessionDir` calls in the same ms produced the same path; the\n * subsequent `backend.mkdir(..., { recursive: true })` silently succeeded\n * for both, and two `WorkspaceService` instances ended up pointing at\n * the same directory — observed in apps/builder during concurrent\n * `/analyze` + `/skill/generate-stream` requests.\n */\nexport function mintSessionDir(workspacesRoot: string, userId: string): string {\n const ts = new Date().toISOString().slice(0, 10);\n const suffix = `${Date.now().toString(36)}${randomBytes(2).toString('hex')}`;\n return path.join(workspacesRoot, userId, `${ts}_${suffix}`);\n}\n","/**\n * Restore an empty/missing workspace from a `RestoreBackend`.\n *\n * Used by `openWorkspace` when `opts.appId` is set, the local cache\n * misses, and `opts.restore` is supplied. Writes via the backend (so no\n * `node:fs` here).\n *\n * @packageDocumentation\n */\n\nimport path from 'node:path';\nimport type { RestoreBackend } from '../types.js';\nimport type { WorkspaceBackend } from './types.js';\n\nexport interface RestoreResult {\n filesRestored: number;\n bytesWritten: number;\n}\n\n/** Pull every file the backend knows about and write it under `rootDir`. */\nexport async function restoreWorkspace(\n backend: WorkspaceBackend,\n rootDir: string,\n restore: RestoreBackend,\n): Promise<RestoreResult> {\n const rootAbs = path.resolve(rootDir);\n await backend.mkdir(rootAbs, { recursive: true });\n\n const paths = await restore.listFiles();\n let filesRestored = 0;\n let bytesWritten = 0;\n\n for (const relativePath of paths) {\n const normalised = relativePath.replace(/\\\\/g, '/');\n const target = path.resolve(rootAbs, normalised);\n if (target !== rootAbs && !target.startsWith(rootAbs + path.sep)) {\n // Escape attempt — drop.\n continue;\n }\n const content = await restore.readFile(normalised);\n if (content === null) continue;\n await backend.mkdir(path.dirname(target), { recursive: true });\n await backend.writeFile(target, content);\n filesRestored++;\n bytesWritten += Buffer.byteLength(content, 'utf-8');\n }\n\n return { filesRestored, bytesWritten };\n}\n","/**\n * Memory-file helpers used internally by the service.\n *\n * @packageDocumentation\n */\n\nimport type { JsonObject } from '@almadar/core';\nimport type { WorkspaceBackend } from './types.js';\n\n/**\n * Try to read JSON from `absPath` via the backend. Returns `null` when\n * the file is missing or unparseable.\n */\nexport async function readJsonFile<T extends JsonObject>(\n backend: WorkspaceBackend,\n absPath: string,\n): Promise<T | null> {\n if (!backend.exists(absPath)) return null;\n try {\n const raw = await backend.readFile(absPath);\n return JSON.parse(raw) as T;\n } catch {\n return null;\n }\n}\n\n/**\n * Write a JSON object via the backend with 2-space pretty-printing.\n */\nexport async function writeJsonFile<T extends JsonObject>(\n backend: WorkspaceBackend,\n absPath: string,\n value: T,\n): Promise<void> {\n await backend.writeFile(absPath, JSON.stringify(value, null, 2));\n}\n\n/**\n * Read newline-delimited JSON. Drops malformed lines silently.\n */\nexport async function readJsonLines<T extends JsonObject>(\n backend: WorkspaceBackend,\n absPath: string,\n): Promise<T[]> {\n if (!backend.exists(absPath)) return [];\n try {\n const raw = await backend.readFile(absPath);\n const out: T[] = [];\n for (const line of raw.split('\\n')) {\n if (!line.trim()) continue;\n try {\n out.push(JSON.parse(line) as T);\n } catch {\n // skip malformed\n }\n }\n return out;\n } catch {\n return [];\n }\n}\n\n/**\n * Append a single JSON value as a line. Used for trace + history streams.\n * Caller is responsible for any per-path serialization (the service's\n * write queue handles that).\n */\nexport async function appendJsonLine<T extends JsonObject>(\n backend: WorkspaceBackend,\n absPath: string,\n value: T,\n): Promise<void> {\n const existing = backend.exists(absPath) ? await backend.readFile(absPath) : '';\n const ending = existing.length > 0 && !existing.endsWith('\\n') ? '\\n' : '';\n await backend.writeFile(absPath, existing + ending + JSON.stringify(value) + '\\n');\n}\n","/**\n * Public types for the workspace index — Phase A of\n * `docs/Almadar_Workspace_Index.md`. Identity vectors per orbital and\n * per extraTraits[] entry, used for semantic coercion of LLM-emitted\n * names back to canonical entities (R-10 orbital name drift + R-8\n * duplicate-ref trait drift).\n *\n * @packageDocumentation\n */\n\nimport type { JsonObject } from '@almadar/core';\n\n/** Schema version baked into every sidecar; mismatch triggers re-bake.\n * v1 — identity vector + extraTrait identity vectors only (Phase A).\n * v2 — adds contentVector + contentFingerprint for prompt-narrowing retrieval (Phase B).\n * Existing v1 sidecars get re-baked transparently on next openWorkspace.\n */\nexport const WORKSPACE_INDEX_SCHEMA_VERSION = 2 as const;\n\n/** Default coercion threshold per the doc's locked decision. */\nexport const DEFAULT_COERCION_THRESHOLD = 0.85 as const;\n\n/** RRF fusion constant (Elastic / OpenSearch convention). */\nexport const RRF_K = 60 as const;\n\n/** Default top-K for retrieveOrbitalsForPrompt. */\nexport const DEFAULT_RETRIEVAL_TOP_K = 3 as const;\n\n/**\n * Per-extraTraits[] entry identity vector. Baked alongside the orbital\n * sidecar whenever the orbital's spec.json is written.\n */\nexport interface ExtraTraitIdentity {\n /** Canonical ref of this entry (the key for coercion match). */\n ref: string;\n /** Entry's `name` rename, or trait-name tail of ref if no rename. */\n alias: string;\n /** Fingerprint text actually embedded — kept for debugging. */\n fingerprint: string;\n /** 768-d vector from bge-base-en-v1.5 (or whatever model the embedder uses). */\n vector: readonly number[];\n}\n\n/**\n * Per-orbital sidecar contents, persisted at\n * `.almadar/sessions/<Orbital>/index.json` after every spec write.\n *\n * Two dense vectors per orbital — DIFFERENT compositions, DIFFERENT\n * invalidation cadence, DIFFERENT use:\n *\n * - `identityVector` (Phase A) — small fingerprint over name + entity.\n * Stable across knob edits. Used by `resolveOrbitalName` for R-10\n * coercion.\n * - `contentVector` (Phase B) — richer fingerprint that ALSO folds\n * in every `traitOverrides.*.config.*` value, entityFields[].name,\n * extraTraits[].name + .ref tail, ruleOverlay rule capabilities.\n * Invalidates on every spec edit. Used by\n * `retrieveOrbitalsForPrompt` to rank orbitals against the user's\n * edit-prompt language.\n */\nexport interface OrbitalIndexEntry {\n schemaVersion: typeof WORKSPACE_INDEX_SCHEMA_VERSION;\n /** sha256 of the spec.json that produced this sidecar. */\n specChecksum: string;\n /** Orbital-level identity vector (Phase A — R-10 coercion). */\n identityVector: readonly number[];\n /** Fingerprint text for the orbital identity vector — kept for debugging. */\n identityFingerprint: string;\n /** Orbital-level content vector (Phase B — prompt narrowing). */\n contentVector: readonly number[];\n /** Fingerprint text for the content vector — kept for debugging. */\n contentFingerprint: string;\n /** One per current `extraTraits[]` entry on this orbital. */\n extraTraitIdentities: readonly ExtraTraitIdentity[];\n /** Epoch ms at bake time — debugging only. */\n bakedAt: number;\n}\n\n/**\n * Input to `resolveTraitRef` — the LLM's emitted extraTraits entry,\n * narrowed to the fields the coercion needs to see. Mirrors the\n * `RawExtraTraitRef` shape rabit's analyzer constructs.\n */\nexport interface TraitRefEmit {\n ref: string;\n name?: string;\n linkedEntity?: string;\n}\n\n/**\n * Common result shape for both `resolveOrbitalName` and\n * `resolveTraitRef`. `coercedTo` is null when no existing entity\n * exceeded the threshold — the emit is genuinely new.\n */\nexport interface ResolveResult {\n coercedTo: string | null;\n similarity: number;\n method: 'identity-vector';\n}\n\n/**\n * Options for both `resolveOrbitalName` and `resolveTraitRef`. The\n * default threshold (0.85) lives in `DEFAULT_COERCION_THRESHOLD`.\n */\nexport interface ResolveOptions {\n threshold?: number;\n}\n\n/**\n * Stats surface for diagnostics. Cheap to compute (read in-memory\n * state).\n */\nexport interface WorkspaceIndexStats {\n orbitalCount: number;\n extraTraitIdentityCount: number;\n staleOrbitals: readonly string[];\n}\n\n/**\n * Public surface exposed via `WorkspaceService.index`.\n */\nexport interface WorkspaceIndex {\n /**\n * Walk every existing orbital, bake any missing or stale sidecars.\n * Called synchronously by `openWorkspace` (strict cold start per the\n * doc decision) so this is the authoritative point past which all\n * subsequent queries return real data. Idempotent — re-baking an\n * already-warm sidecar is a no-op (checksum matches).\n */\n warm(): Promise<void>;\n\n /**\n * R-10 coercion. Embed `name`, cosine-match against every orbital's\n * identity vector, return the best match if it exceeds the\n * threshold. Returns `{ coercedTo: null, ... }` when below threshold\n * or when no orbitals exist in the workspace.\n */\n resolveOrbitalName(name: string, opts?: ResolveOptions): Promise<ResolveResult>;\n\n /**\n * R-8 coercion. Embed an LLM-emitted trait emit, cosine-match against\n * the existing `extraTraits[]` identity vectors on the named orbital.\n * Returns the existing entry's `ref` (or its `name` rename) as\n * `coercedTo` when match exceeds threshold; null when the emit is a\n * genuinely new addition.\n *\n * Scoped per orbital — the same trait import on two different orbitals\n * is structurally legitimate, so we don't cross-coerce.\n */\n resolveTraitRef(\n emit: TraitRefEmit,\n orbitalContext: { orbitalName: string },\n opts?: ResolveOptions,\n ): Promise<ResolveResult>;\n\n /**\n * Phase B — RRF-hybrid prompt retrieval. Embed the prompt, run sparse\n * BM25 against the workspace token table, fuse via Reciprocal Rank\n * Fusion (k=60), return top-K orbitals with explainability fields.\n */\n retrieveOrbitalsForPrompt(\n prompt: string,\n opts?: RetrievalOptions,\n ): Promise<readonly RetrievalResult[]>;\n\n /** Phase B — sparse-only escape hatch. Tokenizes `query` and returns orbitals containing any term. */\n findByToken(query: string): readonly string[];\n\n // ── Phase C — graph queries (all O(1) hash lookups; sync) ─────────────────\n\n /** Orbitals + traits whose state machine listens for `event`. */\n orbitalsListeningTo(event: string): readonly EventEdge[];\n\n /** Orbitals + traits whose state machine emits `event`. */\n orbitalsEmitting(event: string): readonly EventEdge[];\n\n /**\n * Orbitals linked to `entity` — both composed (from the resolved\n * schema.orb) and override-intent (from spec.json `linkedEntity`).\n */\n orbitalsLinkedToEntity(entity: string): readonly EntityBinding[];\n\n /** Orbitals importing the trait at `refPath` via extraTraits[]. */\n extraTraitImporters(refPath: string): readonly string[];\n\n /**\n * Every event name currently appearing in the composed schema as an\n * emit or listen edge. Lets consumers feed each name back into\n * `orbitalsEmitting` / `orbitalsListeningTo` to derive cross-orbital\n * reactivity hints without holding a copy of the composed map.\n */\n composedEvents(): readonly string[];\n\n /**\n * Every entity name currently bound by the composed schema or by spec\n * overrides. Lets consumers feed each name back into\n * `orbitalsLinkedToEntity` without enumerating the composed map.\n */\n composedEntities(): readonly string[];\n\n /**\n * Every trait `refPath` currently imported via `extraTraits[]` across\n * the workspace's per-orbital spec.json files. Lets consumers feed\n * each back into `extraTraitImporters` for importer-set hints.\n */\n composedTraitRefPaths(): readonly string[];\n\n /** Rules applied to `entity` via spec.json ruleOverlay.rules[]. */\n rulesAppliedTo(entity: string): readonly RuleBinding[];\n\n /**\n * Orbitals edited within the last N turns (per\n * params-history.jsonl). Ordered newest-first.\n */\n recentlyEdited(opts?: RecentlyEditedOptions): readonly string[];\n\n /** Diagnostics surface. */\n stats(): WorkspaceIndexStats;\n}\n\n/**\n * Pluggable embedder — production wires `@almadar/llm`'s\n * `EmbeddingClient`; tests inject a deterministic mock.\n */\nexport interface EmbedderPort {\n /** Embed a batch of texts; returned vectors are in input order. */\n embedBatch(texts: readonly string[]): Promise<{\n embeddings: readonly (readonly number[])[];\n }>;\n}\n\n/**\n * JSON shape persisted at `.almadar/sessions/<Orbital>/index.json`.\n * Mirrors `OrbitalIndexEntry` but with the JsonObject upper-bound the\n * workspace's writeJsonFile helper requires.\n */\nexport type OrbitalIndexSidecar = OrbitalIndexEntry & JsonObject;\n\n// ============================================================================\n// Phase B — token / sparse BM25 index (workspace-level)\n// ============================================================================\n\n/**\n * One orbital's tokenization row inside the BM25 table. `docLen` is the\n * full token count (with repeats) — BM25's length normalization needs\n * it. `termFreq` is the per-term count for cosine/IDF math.\n */\nexport interface BM25Document {\n orbital: string;\n termFreq: Readonly<Record<string, number>>;\n docLen: number;\n}\n\n/**\n * Workspace-level inverted-index payload. Persisted inside the index\n * manifest at `.almadar/index.json`. Rebuilt incrementally per\n * orbital — `documents` is the row store keyed by orbitalName.\n */\nexport interface BM25Table {\n /** Per-orbital tokenization row. */\n documents: Readonly<Record<string, BM25Document>>;\n /**\n * Document frequency — count of orbitals containing each term.\n * Recomputed whenever `documents` changes (cheap; tens of orbitals).\n */\n docFreq: Readonly<Record<string, number>>;\n /** Number of orbitals indexed (`Object.keys(documents).length`). */\n docCount: number;\n /** Sum(docLen) / docCount — BM25 needs this for length normalization. */\n avgDocLen: number;\n}\n\n/** BM25 query options (Elastic defaults). */\nexport interface BM25Options {\n k1?: number; // default 1.5\n b?: number; // default 0.75\n}\n\n// ============================================================================\n// Phase B — retrieval (`retrieveOrbitalsForPrompt`)\n// ============================================================================\n\nexport interface RetrievalOptions {\n topK?: number; // default DEFAULT_RETRIEVAL_TOP_K (3)\n rrfK?: number; // default RRF_K (60)\n bm25?: BM25Options;\n}\n\nexport interface RetrievalResult {\n orbitalName: string;\n /** RRF-fused score, monotonically decreasing across the returned array. */\n score: number;\n /**\n * Tokens from the prompt that matched the orbital's BM25 row.\n * Empty when this orbital surfaced via the dense leg only.\n */\n matchedTokens: readonly string[];\n /**\n * Domain knob keys (and their values) from the orbital's spec that the\n * dense leg surfaced. Heuristic: knobs whose RENDERED text appears in\n * the orbital's content fingerprint AND in the prompt verbatim.\n * Empty when this orbital surfaced via the sparse leg only.\n */\n matchedKnobs: readonly string[];\n /** 1-based rank within the dense ranking; `null` if not in the top-N dense list. */\n rankByDense: number | null;\n /** 1-based rank within the sparse ranking; `null` if not in the top-N sparse list. */\n rankBySparse: number | null;\n}\n\n// ============================================================================\n// Phase C — graph indexes\n// ============================================================================\n\n/** One emit/listen edge surfaced by the composed schema.orb. */\nexport interface EventEdge {\n orbital: string;\n trait: string;\n state?: string;\n role: 'emit' | 'listen';\n scope?: 'internal' | 'external';\n}\n\n/** One orbital→entity binding surfaced by either the composed schema or the user/agent's override intent. */\nexport interface EntityBinding {\n orbital: string;\n trait: string;\n source: 'composed' | 'override';\n}\n\n/** Rule applied to an entity, derived from spec.json ruleOverlay. */\nexport interface RuleBinding {\n orbital: string;\n entityName: string;\n capability: string;\n}\n\n/**\n * Per-orbital recency entry. `turn` is monotonic across the workspace\n * (rabit increments it on every coordinator turn). `lastChange` is\n * epoch ms of the most recent params-history append.\n */\nexport interface RecencyEntry {\n recencyTurn: number;\n lastChange: number;\n}\n\n/**\n * Maps derived ONLY from per-orbital spec.json. Rebuilt on each\n * `kind: 'spec'` write for the affected orbital.\n */\nexport interface IntentMaps {\n /** `entity_name → orbitals overriding linkedEntity`. */\n entityNameOverrides: Readonly<Record<string, readonly EntityBinding[]>>;\n /** `trait_ref_path → orbitals importing the trait`. */\n traitRefImporters: Readonly<Record<string, readonly string[]>>;\n /** `rule_capability → orbital-rule bindings`. */\n ruleCapabilities: Readonly<Record<string, readonly RuleBinding[]>>;\n /** `organism → orbitals`. */\n organism: Readonly<Record<string, readonly string[]>>;\n}\n\n/**\n * Maps derived ONLY from the composed schema.orb. Rebuilt on each\n * `kind: 'schema'` write.\n */\nexport interface ComposedMaps {\n /** `event_name → emit/listen edges`. */\n events: Readonly<Record<string, readonly EventEdge[]>>;\n /** `entity_name → composed entity bindings`. */\n entityNameComposed: Readonly<Record<string, readonly EntityBinding[]>>;\n}\n\n/**\n * Workspace-level manifest — combines BM25 table + intent maps + composed\n * maps + recency. Persisted at `.almadar/index.json` and emitted via\n * `WorkspaceWriteEvent.kind === 'workspace-index-manifest'` so consumer\n * mirrors (apps/builder's Firestore observer) pick it up.\n */\nexport interface WorkspaceIndexManifest {\n schemaVersion: typeof WORKSPACE_INDEX_SCHEMA_VERSION;\n bm25: BM25Table;\n intent: IntentMaps;\n composed: ComposedMaps;\n recency: Readonly<Record<string, RecencyEntry>>;\n /** Epoch ms at last manifest write — debugging only. */\n bakedAt: number;\n}\n\n/** JSON-persisted shape (intersection with JsonObject upper bound). */\nexport type WorkspaceIndexManifestSidecar = WorkspaceIndexManifest & JsonObject;\n\n// ============================================================================\n// Phase C — temporal recency\n// ============================================================================\n\nexport interface RecentlyEditedOptions {\n /** Return orbitals edited within the last N turns. Default: 5. */\n withinTurns?: number;\n}\n","/**\n * Cosine similarity. Defensive: zero-vector and length-mismatch\n * return 0 instead of throwing or returning NaN — a malformed manifest\n * entry shouldn't crash the index.\n *\n * @packageDocumentation\n */\n\nexport function cosineSimilarity(\n a: readonly number[],\n b: readonly number[],\n): number {\n if (a.length !== b.length || a.length === 0) return 0;\n let dot = 0;\n let magA = 0;\n let magB = 0;\n for (let i = 0; i < a.length; i++) {\n const av = a[i] ?? 0;\n const bv = b[i] ?? 0;\n dot += av * bv;\n magA += av * av;\n magB += bv * bv;\n }\n if (magA === 0 || magB === 0) return 0;\n return dot / (Math.sqrt(magA) * Math.sqrt(magB));\n}\n","/**\n * Fingerprint composition — pure functions that turn typed spec state\n * into the short text strings the embedder hashes.\n *\n * Per the doc, orbital identity vectors stay small (~50-100 tokens)\n * so they're stable under spec edits, while content/extraTrait\n * fingerprints can grow more.\n *\n * @packageDocumentation\n */\n\nimport type { JsonObject, JsonValue } from '@almadar/core';\n\n/**\n * Compose the orbital identity fingerprint from a spec.\n *\n * Pulls these typed fields off the spec (all optional — when missing\n * the segment is omitted, never `undefined` interpolated):\n * - `orbitalName` (top-level on spec) — the discriminating signal\n * - `params.entityName` — boosts cosine when the name drifts but the\n * entity stays (e.g. `VisitOrbital` → `VisitV2Orbital`, same entity)\n *\n * The `organism` is intentionally OMITTED: every orbital in an app\n * shares it (`std-record-modal` across an entire CRUD app), so\n * including it dominates the cosine and makes unrelated orbital\n * names look similar (real-embedder spec showed `InvoiceOrbital ·\n * Invoice · std-record-modal` matching `ProductOrbital` above the\n * 0.85 threshold). Keeping the fingerprint name+entity-only sharpens\n * the geometry for R-10 coercion.\n *\n * The output is a single string with ` · ` separators.\n */\nexport function composeOrbitalIdentityFingerprint(\n spec: JsonObject,\n): string {\n const segments: string[] = [];\n pushString(segments, spec['orbitalName']);\n const params = asJsonObject(spec['params']);\n if (params) {\n pushString(segments, params['entityName']);\n }\n return segments.join(' · ');\n}\n\n/**\n * Compose the per-extraTraits[] entry fingerprint.\n *\n * Used both at bake time (for the sidecar's extraTraitIdentities[])\n * and at query time (for the LLM-emitted entry being coerced). The\n * shape MUST be identical on both sides so cosine geometry is\n * meaningful — same fields in the same order.\n */\nexport function composeExtraTraitIdentityFingerprint(emit: {\n ref: string;\n name?: string;\n linkedEntity?: string;\n}): string {\n const segments: string[] = [];\n pushString(segments, emit.ref);\n // Emit the alias explicitly so the embedder sees \"ProductAccessControl\n // for RowAccessGate\" — not just the ref.\n const alias = emit.name && emit.name.length > 0 ? emit.name : tailOfRef(emit.ref);\n if (alias && alias !== emit.ref) {\n pushString(segments, alias);\n }\n pushString(segments, emit.linkedEntity);\n return segments.join(' · ');\n}\n\n/**\n * Derive the alias an entry would canonically be referenced by. Used by\n * the sidecar baker to store the `alias` field next to each extraTrait\n * identity vector — also the value `resolveTraitRef` returns as\n * `coercedTo` when a match fires.\n */\nexport function deriveExtraTraitAlias(emit: { ref: string; name?: string }): string {\n if (emit.name && emit.name.length > 0) return emit.name;\n return tailOfRef(emit.ref);\n}\n\n/**\n * Compose the orbital CONTENT fingerprint from a spec — the richer\n * text the retrieval system embeds for prompt narrowing.\n *\n * Starts from the identity fingerprint then folds in every\n * user-meaningful signal the spec carries:\n * - traitOverrides keys (the trait names being customized)\n * - traitOverrides.*.config.* values (the actual customizations\n * — discount percentages, labels, button text, chart types, etc.)\n * - entityFields[].name (the user's domain vocabulary)\n * - extraTraits[].name + tail-of-ref (added capabilities)\n * - ruleOverlay.rules[].capability values (compliance/audit signals)\n *\n * Order matters for token-position effects: identity first (so the\n * embedder weights it heaviest), then the config values (the \"what\n * does it DO\" signal), then entity + extra + rule tags.\n *\n * Per the design doc this is intentionally not catalog-filtered by\n * `@tier === 'domain'` — that would require an @almadar/std dep from\n * inside the workspace package. If retrieval-quality eval shows\n * noise from internal-tier knobs polluting the fingerprint, the\n * fix lands in a follow-up that brings the catalog metadata into\n * reach (see plan B-Wave 0 notes).\n */\nexport function composeOrbitalContentFingerprint(spec: JsonObject): string {\n const segments: string[] = [composeOrbitalIdentityFingerprint(spec)];\n const params = asJsonObject(spec['params']);\n if (params) {\n const traitOverrides = asJsonObject(params['traitOverrides']);\n if (traitOverrides) {\n for (const trait of Object.keys(traitOverrides).sort()) {\n segments.push(trait);\n const override = asJsonObject(traitOverrides[trait]);\n if (!override) continue;\n const config = asJsonObject(override['config']);\n if (!config) continue;\n for (const knob of Object.keys(config).sort()) {\n const rendered = renderKnobValue(config[knob]);\n if (rendered.length > 0) segments.push(`${trait}.${knob}: ${rendered}`);\n }\n }\n }\n const fields = params['entityFields'];\n if (Array.isArray(fields)) {\n const names: string[] = [];\n for (const f of fields) {\n const obj = asJsonObject(f);\n if (obj && typeof obj['name'] === 'string') names.push(obj['name']);\n }\n if (names.length > 0) segments.push(names.join(', '));\n }\n const extras = params['extraTraits'];\n if (Array.isArray(extras)) {\n const labels: string[] = [];\n for (const e of extras) {\n const obj = asJsonObject(e);\n if (!obj) continue;\n const ref = typeof obj['ref'] === 'string' ? obj['ref'] : null;\n const name = typeof obj['name'] === 'string' ? obj['name'] : null;\n const label = name && name.length > 0 ? name : (ref ? tailOfRef(ref) : null);\n if (label) labels.push(label);\n }\n if (labels.length > 0) segments.push(labels.join(', '));\n }\n const ruleOverlay = asJsonObject(params['ruleOverlay']);\n if (ruleOverlay) {\n const rules = ruleOverlay['rules'];\n if (Array.isArray(rules)) {\n const caps: string[] = [];\n for (const r of rules) {\n const obj = asJsonObject(r);\n if (obj && typeof obj['capability'] === 'string') caps.push(obj['capability']);\n }\n if (caps.length > 0) segments.push(caps.join(', '));\n }\n }\n }\n return segments.filter((s) => s.length > 0).join(' · ');\n}\n\n/**\n * Stringify one JSON value at the granularity the embedder cares about.\n * Strings and primitives go as-is. Small arrays of primitives flatten\n * to comma-separated. Anything deeper or larger gets squashed to\n * empty — the embedder doesn't benefit from arbitrarily nested JSON,\n * and that level of detail belongs in the structural graph (Phase C),\n * not in the semantic-similarity surface.\n */\nfunction renderKnobValue(value: JsonValue | undefined): string {\n if (value === undefined || value === null) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (Array.isArray(value)) {\n const parts: string[] = [];\n for (const entry of value) {\n if (typeof entry === 'string') parts.push(entry);\n else if (typeof entry === 'number' || typeof entry === 'boolean') parts.push(String(entry));\n }\n return parts.join(', ');\n }\n return '';\n}\n\nfunction pushString(out: string[], value: JsonValue | undefined): void {\n if (typeof value === 'string' && value.length > 0) out.push(value);\n}\n\nfunction asJsonObject(value: JsonValue | undefined): JsonObject | null {\n if (value === undefined || value === null) return null;\n if (typeof value !== 'object' || Array.isArray(value)) return null;\n return value;\n}\n\nfunction tailOfRef(ref: string): string {\n const match = /\\.traits\\.([A-Za-z0-9_]+)$/.exec(ref);\n return match ? match[1] : ref;\n}\n","/**\n * Sidecar I/O for per-orbital index entries.\n *\n * Reuses the workspace package's existing typed file helpers\n * (`readJsonFile` + `writeJsonFile`) and path layout\n * (`orbitalSessionFile`). No parallel file plumbing; no parallel path\n * math.\n *\n * @packageDocumentation\n */\n\nimport { createHash } from 'node:crypto';\nimport type { JsonObject } from '@almadar/core';\nimport type { WorkspaceBackend } from '../internal/types.js';\nimport { orbitalSessionFile } from '../internal/path-layout.js';\nimport { readJsonFile, writeJsonFile } from '../internal/memory-files.js';\nimport { ensureOrbitalSessionDir } from '../internal/workspace-manager.js';\nimport type { OrbitalIndexEntry, OrbitalIndexSidecar } from './types.js';\nimport { WORKSPACE_INDEX_SCHEMA_VERSION } from './types.js';\n\nconst SIDECAR_BASENAME = 'index.json';\n\nexport function sidecarPath(workDir: string, orbital: string): string {\n return orbitalSessionFile(workDir, orbital, SIDECAR_BASENAME);\n}\n\nexport async function readSidecar(\n backend: WorkspaceBackend,\n workDir: string,\n orbital: string,\n): Promise<OrbitalIndexEntry | null> {\n const raw = await readJsonFile<OrbitalIndexSidecar>(backend, sidecarPath(workDir, orbital));\n if (raw === null) return null;\n if (raw.schemaVersion !== WORKSPACE_INDEX_SCHEMA_VERSION) return null;\n return raw;\n}\n\nexport async function writeSidecar(\n backend: WorkspaceBackend,\n workDir: string,\n orbital: string,\n entry: OrbitalIndexEntry,\n): Promise<void> {\n await ensureOrbitalSessionDir(backend, workDir, orbital);\n // Cast through JsonObject is safe — OrbitalIndexEntry's shape only\n // contains primitives + arrays of primitives + arrays of objects whose\n // fields are likewise json-compatible. The structural compatibility is\n // captured by the OrbitalIndexSidecar intersection type.\n await writeJsonFile<OrbitalIndexSidecar>(\n backend,\n sidecarPath(workDir, orbital),\n entry as OrbitalIndexSidecar,\n );\n}\n\n/**\n * SHA-256 over the JSON-stringified spec — the same content the\n * sidecar's embeddings were computed from. Used to detect stale\n * sidecars (spec changed since last bake → re-bake).\n */\nexport function checksumSpec(spec: JsonObject): string {\n return createHash('sha256').update(JSON.stringify(spec)).digest('hex');\n}\n","/**\n * BM25 sparse retrieval — Phase B of the workspace-index.\n *\n * Tokenizes per-orbital spec.json into the term list the table indexes,\n * builds a workspace-level inverted index, and scores free-form queries\n * against it. Pure functions; no I/O.\n *\n * @packageDocumentation\n */\n\nimport type { JsonObject, JsonValue } from '@almadar/core';\nimport type { BM25Document, BM25Table, BM25Options } from './types.js';\n\n/** Tokenize one spec.json into the set of terms BM25 indexes. */\nexport function tokenizeSpec(spec: JsonObject): readonly string[] {\n const tokens: string[] = [];\n pushTokens(tokens, spec['orbitalName']);\n const params = asJsonObject(spec['params']);\n if (params) {\n pushTokens(tokens, params['entityName']);\n\n const fields = params['entityFields'];\n if (Array.isArray(fields)) {\n for (const f of fields) {\n const obj = asJsonObject(f);\n if (obj) pushTokens(tokens, obj['name']);\n }\n }\n\n const extras = params['extraTraits'];\n if (Array.isArray(extras)) {\n for (const e of extras) {\n const obj = asJsonObject(e);\n if (!obj) continue;\n pushTokens(tokens, obj['name']);\n const ref = obj['ref'];\n if (typeof ref === 'string') {\n pushTokens(tokens, tailOfRef(ref));\n }\n }\n }\n\n const pages = params['pages'];\n if (Array.isArray(pages)) {\n for (const p of pages) {\n const obj = asJsonObject(p);\n if (!obj) continue;\n const path = obj['path'];\n if (typeof path === 'string') pushTokens(tokens, path);\n }\n }\n\n const ruleOverlay = asJsonObject(params['ruleOverlay']);\n if (ruleOverlay) {\n const rules = ruleOverlay['rules'];\n if (Array.isArray(rules)) {\n for (const r of rules) {\n const obj = asJsonObject(r);\n if (obj) pushTokens(tokens, obj['capability']);\n }\n }\n }\n\n const traitOverrides = asJsonObject(params['traitOverrides']);\n if (traitOverrides) {\n for (const trait of Object.keys(traitOverrides)) {\n pushTokens(tokens, trait);\n const override = asJsonObject(traitOverrides[trait]);\n if (!override) continue;\n const config = asJsonObject(override['config']);\n if (!config) continue;\n for (const knob of Object.keys(config)) {\n pushPrimitiveValue(tokens, config[knob]);\n }\n }\n }\n }\n return tokens;\n}\n\n/** Build the workspace BM25 table from per-orbital token lists. */\nexport function buildBM25Table(\n tokensPerOrbital: Readonly<Record<string, readonly string[]>>,\n): BM25Table {\n const documents: Record<string, BM25Document> = {};\n const docFreq: Record<string, number> = {};\n let totalLen = 0;\n const orbitals = Object.keys(tokensPerOrbital);\n for (const orbital of orbitals) {\n const list = tokensPerOrbital[orbital] ?? [];\n const termFreq: Record<string, number> = {};\n for (const t of list) {\n termFreq[t] = (termFreq[t] ?? 0) + 1;\n }\n const docLen = list.length;\n totalLen += docLen;\n documents[orbital] = { orbital, termFreq, docLen };\n for (const term of Object.keys(termFreq)) {\n docFreq[term] = (docFreq[term] ?? 0) + 1;\n }\n }\n const docCount = orbitals.length;\n const avgDocLen = docCount > 0 ? totalLen / docCount : 0;\n return { documents, docFreq, docCount, avgDocLen };\n}\n\n/** Score every orbital in `table` against a free-form query string. */\nexport function queryBM25(\n table: BM25Table,\n query: string,\n opts?: BM25Options,\n): readonly {\n orbital: string;\n score: number;\n matchedTokens: readonly string[];\n}[] {\n const k1 = opts?.k1 ?? 1.5;\n const b = opts?.b ?? 0.75;\n const queryTokensRaw = tokenize(query);\n if (queryTokensRaw.length === 0) return [];\n const uniqueQueryTokens = Array.from(new Set(queryTokensRaw));\n const { documents, docFreq, docCount, avgDocLen } = table;\n if (docCount === 0 || avgDocLen === 0) return [];\n\n const results: { orbital: string; score: number; matchedTokens: readonly string[] }[] = [];\n for (const orbital of Object.keys(documents)) {\n const doc = documents[orbital];\n if (!doc) continue;\n let score = 0;\n const matched: string[] = [];\n for (const qt of uniqueQueryTokens) {\n const tf = doc.termFreq[qt] ?? 0;\n if (tf === 0) continue;\n const df = docFreq[qt] ?? 0;\n const idf = Math.log1p((docCount - df + 0.5) / (df + 0.5));\n const norm = tf + k1 * (1 - b + (b * doc.docLen) / avgDocLen);\n const contribution = (idf * tf * (k1 + 1)) / norm;\n if (contribution > 0) {\n score += contribution;\n matched.push(qt);\n }\n }\n if (score > 0) results.push({ orbital, score, matchedTokens: matched });\n }\n results.sort((a, b2) => b2.score - a.score);\n return results;\n}\n\n// ──────────────────────────────────────────────────────────────────────\n// Private helpers — same normalization on both bake and query sides.\n// ──────────────────────────────────────────────────────────────────────\n\nfunction tokenize(text: string): string[] {\n if (text.length === 0) return [];\n const out: string[] = [];\n const pieces = text.split(/[\\s_\\-/.:]+/u);\n for (const piece of pieces) {\n if (piece.length === 0) continue;\n const lower = piece.toLowerCase();\n if (lower.length >= 2) out.push(lower);\n const parts = splitCamel(piece);\n if (parts.length > 1) {\n for (const part of parts) {\n const p = part.toLowerCase();\n if (p.length >= 2) out.push(p);\n }\n }\n }\n return out;\n}\n\nfunction splitCamel(s: string): string[] {\n return s.split(/(?<=[a-z0-9])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/u);\n}\n\nfunction pushTokens(out: string[], value: JsonValue | undefined): void {\n if (typeof value !== 'string' || value.length === 0) return;\n for (const t of tokenize(value)) out.push(t);\n}\n\nfunction pushPrimitiveValue(out: string[], value: JsonValue | undefined): void {\n if (value === undefined || value === null) return;\n if (typeof value === 'string') {\n for (const t of tokenize(value)) out.push(t);\n return;\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n for (const t of tokenize(String(value))) out.push(t);\n return;\n }\n if (Array.isArray(value)) {\n for (const entry of value) pushPrimitiveValue(out, entry);\n }\n}\n\nfunction asJsonObject(value: JsonValue | undefined): JsonObject | null {\n if (value === undefined || value === null) return null;\n if (typeof value !== 'object' || Array.isArray(value)) return null;\n return value;\n}\n\nfunction tailOfRef(ref: string): string {\n const match = /\\.traits\\.([A-Za-z0-9_]+)$/.exec(ref);\n return match ? match[1] : ref;\n}\n","/**\n * Reciprocal Rank Fusion — combines arbitrary rankings into a single\n * stable order. Key-agnostic; the workspace index uses orbital names.\n *\n * @packageDocumentation\n */\n\nimport { RRF_K } from './types.js';\n\nexport interface RRFRankInput<TKey extends string> {\n rankings: ReadonlyArray<readonly TKey[]>;\n}\n\nexport interface RRFResult<TKey extends string> {\n key: TKey;\n score: number;\n /** 1-based rank per input ranking; null when the key was absent from that ranking. */\n ranks: readonly (number | null)[];\n}\n\n/** Reciprocal Rank Fusion. `k` defaults to `RRF_K` (60). */\nexport function rrfFuse<TKey extends string>(\n rankings: ReadonlyArray<readonly TKey[]>,\n k: number = RRF_K,\n): readonly RRFResult<TKey>[] {\n if (rankings.length === 0) return [];\n const order: TKey[] = [];\n const seen = new Set<TKey>();\n // Track first-appearance order across rankings for stable tie-break.\n for (const ranking of rankings) {\n for (const key of ranking) {\n if (!seen.has(key)) {\n seen.add(key);\n order.push(key);\n }\n }\n }\n const ranksByKey = new Map<TKey, (number | null)[]>();\n const scoreByKey = new Map<TKey, number>();\n for (const key of order) {\n ranksByKey.set(\n key,\n rankings.map(() => null),\n );\n scoreByKey.set(key, 0);\n }\n for (let i = 0; i < rankings.length; i++) {\n const ranking = rankings[i];\n if (!ranking) continue;\n for (let j = 0; j < ranking.length; j++) {\n const key = ranking[j];\n if (key === undefined) continue;\n const rank = j + 1;\n const ranks = ranksByKey.get(key);\n if (ranks) ranks[i] = rank;\n scoreByKey.set(key, (scoreByKey.get(key) ?? 0) + 1 / (k + rank));\n }\n }\n const indexed = order.map((key, idx) => ({\n key,\n idx,\n score: scoreByKey.get(key) ?? 0,\n ranks: ranksByKey.get(key) ?? [],\n }));\n indexed.sort((a, b) => {\n if (b.score !== a.score) return b.score - a.score;\n return a.idx - b.idx;\n });\n return indexed.map(({ key, score, ranks }) => ({ key, score, ranks }));\n}\n","/**\n * Graph builders — Phase C of the workspace-index.\n *\n * Pure walkers over typed inputs (spec.json batches, composed\n * schema.orb text, params-history rows) that produce the hash-lookup\n * maps the public Phase C surface serves.\n *\n * @packageDocumentation\n */\n\nimport type { JsonObject, JsonValue } from '@almadar/core';\nimport type {\n ComposedMaps,\n EntityBinding,\n EventEdge,\n IntentMaps,\n RecencyEntry,\n RuleBinding,\n} from './types.js';\n\n/** Per-orbital spec.json walker — derives the four intent maps. */\nexport function buildIntentMaps(specs: Readonly<Record<string, JsonObject>>): IntentMaps {\n const entityNameOverrides: Record<string, EntityBinding[]> = {};\n const traitRefImporters: Record<string, string[]> = {};\n const ruleCapabilities: Record<string, RuleBinding[]> = {};\n const organism: Record<string, string[]> = {};\n\n const orbitalNames = Object.keys(specs).sort();\n for (const orbital of orbitalNames) {\n const spec = specs[orbital];\n if (!spec) continue;\n\n const organismName = typeof spec['organism'] === 'string' ? spec['organism'] : null;\n if (organismName && organismName.length > 0) {\n (organism[organismName] ??= []).push(orbital);\n }\n\n const params = asJsonObject(spec['params']);\n if (!params) continue;\n const defaultEntity = typeof params['entityName'] === 'string' ? params['entityName'] : null;\n\n const traitOverrides = asJsonObject(params['traitOverrides']);\n if (traitOverrides) {\n for (const trait of Object.keys(traitOverrides).sort()) {\n const override = asJsonObject(traitOverrides[trait]);\n if (!override) continue;\n const linked = override['linkedEntity'];\n if (typeof linked === 'string' && linked.length > 0) {\n (entityNameOverrides[linked] ??= []).push({\n orbital,\n trait,\n source: 'override',\n });\n }\n }\n }\n\n const extras = params['extraTraits'];\n if (Array.isArray(extras)) {\n for (const e of extras) {\n const obj = asJsonObject(e);\n if (!obj) continue;\n const ref = obj['ref'];\n if (typeof ref === 'string' && ref.length > 0) {\n (traitRefImporters[ref] ??= []).push(orbital);\n }\n }\n }\n\n const ruleOverlay = asJsonObject(params['ruleOverlay']);\n if (ruleOverlay) {\n const rules = ruleOverlay['rules'];\n if (Array.isArray(rules)) {\n for (const r of rules) {\n const obj = asJsonObject(r);\n if (!obj) continue;\n const capability = obj['capability'];\n if (typeof capability !== 'string' || capability.length === 0) continue;\n const entityName = typeof obj['entityName'] === 'string' && obj['entityName'].length > 0\n ? obj['entityName']\n : defaultEntity;\n if (!entityName) continue;\n (ruleCapabilities[capability] ??= []).push({\n orbital,\n entityName,\n capability,\n });\n }\n }\n }\n }\n\n return { entityNameOverrides, traitRefImporters, ruleCapabilities, organism };\n}\n\n/** Composed schema.orb parser — derives event_name + composed entity_name maps. */\nexport function buildComposedMaps(schemaOrbContent: string | null): ComposedMaps {\n if (schemaOrbContent === null) return { events: {}, entityNameComposed: {} };\n let parsed: JsonValue;\n try {\n parsed = JSON.parse(schemaOrbContent);\n } catch {\n return { events: {}, entityNameComposed: {} };\n }\n const root = asJsonObject(parsed);\n if (!root) return { events: {}, entityNameComposed: {} };\n const orbitals = root['orbitals'];\n if (!Array.isArray(orbitals)) return { events: {}, entityNameComposed: {} };\n\n const events: Record<string, EventEdge[]> = {};\n const entityNameComposed: Record<string, EntityBinding[]> = {};\n\n for (const o of orbitals) {\n const orbObj = asJsonObject(o);\n if (!orbObj) continue;\n const orbitalName = typeof orbObj['name'] === 'string' ? orbObj['name'] : null;\n if (!orbitalName) continue;\n\n const entity = asJsonObject(orbObj['entity']);\n if (entity) {\n const entityName = entity['name'];\n if (typeof entityName === 'string' && entityName.length > 0) {\n (entityNameComposed[entityName] ??= []).push({\n orbital: orbitalName,\n trait: '<orbital-entity>',\n source: 'composed',\n });\n }\n }\n\n const traits = orbObj['traits'];\n if (!Array.isArray(traits)) continue;\n for (const t of traits) {\n const traitObj = asJsonObject(t);\n if (!traitObj) continue;\n const traitName = typeof traitObj['name'] === 'string' ? traitObj['name'] : null;\n if (!traitName) continue;\n\n const linked = traitObj['linkedEntity'];\n if (typeof linked === 'string' && linked.length > 0) {\n (entityNameComposed[linked] ??= []).push({\n orbital: orbitalName,\n trait: traitName,\n source: 'composed',\n });\n }\n\n // Trait-level `emits` array — composed schema's authoritative\n // declaration of every event this trait emits. Shape:\n // emits: [{ event: 'X', scope?: 'internal'|'external', payloadSchema?: ... }]\n const traitEmits = traitObj['emits'];\n if (Array.isArray(traitEmits)) {\n for (const e of traitEmits) {\n const emitObj = asJsonObject(e);\n if (!emitObj) continue;\n const emitEvent = emitObj['event'];\n if (typeof emitEvent !== 'string' || emitEvent.length === 0) continue;\n const scope = emitObj['scope'];\n const scopeNarrowed: 'internal' | 'external' | undefined =\n scope === 'internal' || scope === 'external' ? scope : undefined;\n const edge: EventEdge = {\n orbital: orbitalName,\n trait: traitName,\n role: 'emit',\n ...(scopeNarrowed ? { scope: scopeNarrowed } : {}),\n };\n (events[emitEvent] ??= []).push(edge);\n }\n }\n\n // Trait-level `listens` array — composed schema's authoritative\n // declaration of every event this trait listens for. Shape:\n // listens: [{ event: 'X', triggers?: 'Y', source?: {kind, trait} }]\n const traitListens = traitObj['listens'];\n if (Array.isArray(traitListens)) {\n for (const l of traitListens) {\n const listenObj = asJsonObject(l);\n if (!listenObj) continue;\n const listenEvent = listenObj['event'];\n if (typeof listenEvent !== 'string' || listenEvent.length === 0) continue;\n (events[listenEvent] ??= []).push({\n orbital: orbitalName,\n trait: traitName,\n role: 'listen',\n });\n }\n }\n\n // State-machine transition walk — supplementary. Carries\n // `state` context for emit/listen pairs that originated as\n // SExpr `(emit X ...)` effects rather than top-level `emits`\n // declarations. Both legacy `traitObj.states` and current\n // `traitObj.stateMachine.states` shapes are checked because\n // the composer's output format evolved across rabit versions.\n const stateMachine = asJsonObject(traitObj['stateMachine']);\n const statesFromMachine = stateMachine ? stateMachine['states'] : undefined;\n const statesDirect = traitObj['states'];\n const states = Array.isArray(statesFromMachine)\n ? statesFromMachine\n : Array.isArray(statesDirect)\n ? statesDirect\n : null;\n if (!states) continue;\n for (const s of states) {\n const stateObj = asJsonObject(s);\n if (!stateObj) continue;\n const stateName = typeof stateObj['name'] === 'string' ? stateObj['name'] : undefined;\n const transitions = stateObj['transitions'];\n if (!Array.isArray(transitions)) continue;\n for (const tr of transitions) {\n const trObj = asJsonObject(tr);\n if (!trObj) continue;\n const listenEvent = trObj['event'];\n if (typeof listenEvent === 'string' && listenEvent.length > 0) {\n (events[listenEvent] ??= []).push({\n orbital: orbitalName,\n trait: traitName,\n state: stateName,\n role: 'listen',\n });\n }\n const emit = asJsonObject(trObj['emit']);\n if (emit) {\n const emitEvent = emit['event'];\n if (typeof emitEvent === 'string' && emitEvent.length > 0) {\n const scope = emit['scope'];\n const scopeNarrowed: 'internal' | 'external' | undefined =\n scope === 'internal' || scope === 'external' ? scope : undefined;\n const edge: EventEdge = {\n orbital: orbitalName,\n trait: traitName,\n state: stateName,\n role: 'emit',\n ...(scopeNarrowed ? { scope: scopeNarrowed } : {}),\n };\n (events[emitEvent] ??= []).push(edge);\n }\n }\n }\n }\n }\n }\n\n return { events, entityNameComposed };\n}\n\n/** Per-orbital params-history.jsonl tail walker — derives the recency map. */\nexport function buildRecencyMap(\n history: Readonly<Record<string, readonly JsonObject[]>>,\n): Readonly<Record<string, RecencyEntry>> {\n const out: Record<string, RecencyEntry> = {};\n for (const orbital of Object.keys(history)) {\n const rows = history[orbital];\n if (!rows || rows.length === 0) continue;\n let maxTurn: number | null = null;\n let maxTimestamp: number | null = null;\n for (const row of rows) {\n const turn = row['turn'];\n if (typeof turn === 'number' && Number.isFinite(turn)) {\n if (maxTurn === null || turn > maxTurn) maxTurn = turn;\n }\n const ts = row['timestamp'];\n if (typeof ts === 'number' && Number.isFinite(ts)) {\n if (maxTimestamp === null || ts > maxTimestamp) maxTimestamp = ts;\n }\n }\n const recencyTurn = maxTurn ?? rows.length - 1;\n const lastChange = maxTimestamp ?? 0;\n out[orbital] = { recencyTurn, lastChange };\n }\n return out;\n}\n\nfunction asJsonObject(value: JsonValue | undefined): JsonObject | null {\n if (value === undefined || value === null) return null;\n if (typeof value !== 'object' || Array.isArray(value)) return null;\n return value;\n}\n","/**\n * Workspace-level manifest I/O for the BM25 token table + graph maps +\n * recency. Mirrors `sidecar.ts` — same helpers (`readJsonFile` +\n * `writeJsonFile`), same path-layout discipline. Parent dir `.almadar/`\n * is created by `ensureSkeleton` at workspace open, so no mkdir here.\n *\n * @packageDocumentation\n */\n\nimport type { WorkspaceBackend } from '../internal/types.js';\nimport { workspaceIndexManifestFile } from '../internal/path-layout.js';\nimport { readJsonFile, writeJsonFile } from '../internal/memory-files.js';\nimport type { WorkspaceIndexManifest, WorkspaceIndexManifestSidecar } from './types.js';\nimport { WORKSPACE_INDEX_SCHEMA_VERSION } from './types.js';\n\nexport function manifestPath(workDir: string): string {\n return workspaceIndexManifestFile(workDir);\n}\n\nexport async function readManifest(\n backend: WorkspaceBackend,\n workDir: string,\n): Promise<WorkspaceIndexManifest | null> {\n const raw = await readJsonFile<WorkspaceIndexManifestSidecar>(backend, manifestPath(workDir));\n if (raw === null) return null;\n if (raw.schemaVersion !== WORKSPACE_INDEX_SCHEMA_VERSION) return null;\n return raw;\n}\n\nexport async function writeManifest(\n backend: WorkspaceBackend,\n workDir: string,\n manifest: WorkspaceIndexManifest,\n): Promise<void> {\n // Cast through JsonObject is safe — WorkspaceIndexManifest's shape is\n // json-compatible. Structural compatibility is captured by the\n // WorkspaceIndexManifestSidecar intersection type (same pattern as\n // sidecar.ts:writeSidecar).\n await writeJsonFile<WorkspaceIndexManifestSidecar>(\n backend,\n manifestPath(workDir),\n manifest as WorkspaceIndexManifestSidecar,\n );\n}\n","/**\n * `WorkspaceIndexImpl` — the runtime carrying the identity vectors per\n * orbital + per extraTraits[] entry. Wires into the workspace's\n * `SinkManager` to re-bake on each `kind: 'spec'` write; exposes the\n * coercion methods `resolveOrbitalName` + `resolveTraitRef`.\n *\n * @packageDocumentation\n */\n\nimport type { JsonObject, JsonValue } from '@almadar/core';\nimport type { WorkspaceBackend } from '../internal/types.js';\nimport type { SinkManager } from '../internal/sink-manager.js';\nimport type { WorkspaceWriteEvent } from '../types.js';\nimport type {\n BM25Document,\n BM25Table,\n EmbedderPort,\n EntityBinding,\n EventEdge,\n ExtraTraitIdentity,\n OrbitalIndexEntry,\n RecencyEntry,\n RecentlyEditedOptions,\n ResolveOptions,\n ResolveResult,\n RetrievalOptions,\n RetrievalResult,\n RuleBinding,\n TraitRefEmit,\n WorkspaceIndex,\n WorkspaceIndexManifest,\n WorkspaceIndexStats,\n} from './types.js';\nimport {\n DEFAULT_COERCION_THRESHOLD,\n DEFAULT_RETRIEVAL_TOP_K,\n RRF_K,\n WORKSPACE_INDEX_SCHEMA_VERSION,\n} from './types.js';\nimport { cosineSimilarity } from './cosine.js';\nimport {\n composeExtraTraitIdentityFingerprint,\n composeOrbitalContentFingerprint,\n composeOrbitalIdentityFingerprint,\n deriveExtraTraitAlias,\n} from './fingerprint.js';\nimport { checksumSpec, readSidecar, writeSidecar } from './sidecar.js';\nimport { buildBM25Table, queryBM25, tokenizeSpec } from './bm25.js';\nimport { rrfFuse } from './rrf.js';\nimport { buildComposedMaps, buildIntentMaps, buildRecencyMap } from './graph-builders.js';\nimport { readManifest, writeManifest } from './manifest.js';\n\nexport interface WorkspaceIndexDeps {\n workDir: string;\n backend: WorkspaceBackend;\n sinks: SinkManager;\n embedder: EmbedderPort;\n listOrbitals: () => string[];\n readSpec: (orbital: string) => JsonObject | null;\n /** Composed schema.orb content; null when missing or unparseable. */\n readSchema: () => string | null;\n /** Tail of params-history.jsonl rows for an orbital; empty array when none. */\n readHistory: (orbital: string) => readonly JsonObject[];\n}\n\ninterface ExtraTraitFingerprintInput {\n fingerprint: string;\n ref: string;\n alias: string;\n}\n\nexport class WorkspaceIndexImpl implements WorkspaceIndex {\n private readonly entries = new Map<string, OrbitalIndexEntry>();\n /** Serialized re-bake per orbital so concurrent writeSpec events don't race. */\n private readonly bakeQueue = new Map<string, Promise<void>>();\n /** Names whose checksum doesn't match the current spec — surfaced via stats. */\n private readonly stale = new Set<string>();\n /** Cached spec.json per orbital so manifest rebuilds don't re-read disk. */\n private readonly specsByOrbital = new Map<string, JsonObject>();\n /** Tokenized BM25 rows per orbital — rebuilt incrementally. */\n private readonly tokensByOrbital = new Map<string, readonly string[]>();\n /** Last-known recency timeline per orbital. */\n private readonly recencyByOrbital = new Map<string, RecencyEntry>();\n /** Latest manifest payload (BM25 + intent + composed + recency). */\n private manifest: WorkspaceIndexManifest = emptyManifest();\n /** Serialized manifest writes so concurrent observer fires don't race. */\n private manifestQueue: Promise<void> = Promise.resolve();\n\n constructor(private readonly deps: WorkspaceIndexDeps) {\n this.deps.sinks.subscribe({\n onWrite: (event) => this.onWorkspaceWrite(event),\n });\n }\n\n private async onWorkspaceWrite(event: WorkspaceWriteEvent): Promise<void> {\n switch (event.kind) {\n case 'spec':\n await this.rebakeOrbital(event.orbital, event.content);\n this.specsByOrbital.set(event.orbital, event.content);\n this.tokensByOrbital.set(event.orbital, tokenizeSpec(event.content));\n await this.scheduleManifestRebuild();\n return;\n case 'schema':\n await this.scheduleManifestRebuild();\n return;\n case 'params-history':\n // Incremental recency append — cheap enough to redo on every row.\n this.recencyByOrbital.set(event.orbital, deriveRecencyEntry(event.orbital, [event.row], this.recencyByOrbital.get(event.orbital)));\n await this.scheduleManifestRebuild();\n return;\n case 'orbital-archived':\n this.entries.delete(event.name);\n this.specsByOrbital.delete(event.name);\n this.tokensByOrbital.delete(event.name);\n this.recencyByOrbital.delete(event.name);\n await this.scheduleManifestRebuild();\n return;\n case 'orbital-renamed':\n renameKey(this.entries, event.from, event.to);\n renameKey(this.specsByOrbital, event.from, event.to);\n renameKey(this.tokensByOrbital, event.from, event.to);\n renameKey(this.recencyByOrbital, event.from, event.to);\n await this.scheduleManifestRebuild();\n return;\n default:\n // Other event kinds (analysis, plan, trace, etc.) are not index inputs.\n return;\n }\n }\n\n async warm(): Promise<void> {\n const orbitals = this.deps.listOrbitals();\n const work: Promise<void>[] = [];\n for (const orbital of orbitals) {\n const spec = this.deps.readSpec(orbital);\n if (spec === null) {\n // Orbital exists on disk but has no spec.json — nothing to bake.\n // (Coordinator owns spec creation; an orbital may be archived or\n // mid-creation.) Keep the entry slot empty.\n continue;\n }\n this.specsByOrbital.set(orbital, spec);\n this.tokensByOrbital.set(orbital, tokenizeSpec(spec));\n const history = this.deps.readHistory(orbital);\n if (history.length > 0) {\n this.recencyByOrbital.set(orbital, deriveRecencyEntry(orbital, history, undefined));\n }\n const checksum = checksumSpec(spec);\n const existing = await readSidecar(this.deps.backend, this.deps.workDir, orbital);\n if (existing !== null && existing.specChecksum === checksum) {\n this.entries.set(orbital, existing);\n this.stale.delete(orbital);\n continue;\n }\n work.push(this.bakeAndPersist(orbital, spec, checksum));\n }\n await Promise.all(work);\n // Manifest cold start — try restored copy first; fall back to a fresh build.\n const restored = await readManifest(this.deps.backend, this.deps.workDir);\n if (restored !== null) {\n this.manifest = restored;\n this.hydrateRecencyFromManifest(restored);\n }\n await this.rebuildManifest();\n }\n\n async resolveOrbitalName(name: string, opts?: ResolveOptions): Promise<ResolveResult> {\n const threshold = opts?.threshold ?? DEFAULT_COERCION_THRESHOLD;\n if (this.entries.size === 0) {\n return { coercedTo: null, similarity: 0, method: 'identity-vector' };\n }\n // Embedder is best-effort. Transient provider failures (e.g. DeepSeek\n // returning a response without `data`) shouldn't halt the agent run;\n // the caller (set_plan's coercion pass) treats `coercedTo: null` as\n // \"no coercion possible, pass through unchanged\" — same outcome.\n let vector: readonly number[];\n try {\n [vector] = await this.embedOne(name);\n } catch (err) {\n const reason = err instanceof Error ? err.message : String(err);\n console.warn(`[workspace-index] resolveOrbitalName: embedder failed, returning null (${reason})`);\n return { coercedTo: null, similarity: 0, method: 'identity-vector' };\n }\n let bestOrbital: string | null = null;\n let bestSim = 0;\n for (const [orbital, entry] of this.entries) {\n const sim = cosineSimilarity(vector, entry.identityVector);\n if (sim > bestSim) {\n bestSim = sim;\n bestOrbital = orbital;\n }\n }\n if (bestOrbital !== null && bestSim >= threshold) {\n return { coercedTo: bestOrbital, similarity: bestSim, method: 'identity-vector' };\n }\n return { coercedTo: null, similarity: bestSim, method: 'identity-vector' };\n }\n\n async resolveTraitRef(\n emit: TraitRefEmit,\n orbitalContext: { orbitalName: string },\n opts?: ResolveOptions,\n ): Promise<ResolveResult> {\n const threshold = opts?.threshold ?? DEFAULT_COERCION_THRESHOLD;\n const entry = this.entries.get(orbitalContext.orbitalName);\n if (!entry || entry.extraTraitIdentities.length === 0) {\n return { coercedTo: null, similarity: 0, method: 'identity-vector' };\n }\n const fingerprint = composeExtraTraitIdentityFingerprint(emit);\n // Same embedder-resilience guard as resolveOrbitalName.\n let vector: readonly number[];\n try {\n [vector] = await this.embedOne(fingerprint);\n } catch (err) {\n const reason = err instanceof Error ? err.message : String(err);\n console.warn(`[workspace-index] resolveTraitRef: embedder failed, returning null (${reason})`);\n return { coercedTo: null, similarity: 0, method: 'identity-vector' };\n }\n let bestAlias: string | null = null;\n let bestSim = 0;\n for (const candidate of entry.extraTraitIdentities) {\n const sim = cosineSimilarity(vector, candidate.vector);\n if (sim > bestSim) {\n bestSim = sim;\n bestAlias = candidate.alias;\n }\n }\n if (bestAlias !== null && bestSim >= threshold) {\n return { coercedTo: bestAlias, similarity: bestSim, method: 'identity-vector' };\n }\n return { coercedTo: null, similarity: bestSim, method: 'identity-vector' };\n }\n\n stats(): WorkspaceIndexStats {\n let extraTraitIdentityCount = 0;\n for (const entry of this.entries.values()) {\n extraTraitIdentityCount += entry.extraTraitIdentities.length;\n }\n return {\n orbitalCount: this.entries.size,\n extraTraitIdentityCount,\n staleOrbitals: Array.from(this.stale).sort(),\n };\n }\n\n // ── Phase B — RRF-hybrid retrieval ──────────────────────────────────────────\n\n async retrieveOrbitalsForPrompt(\n prompt: string,\n opts?: RetrievalOptions,\n ): Promise<readonly RetrievalResult[]> {\n const topK = opts?.topK ?? DEFAULT_RETRIEVAL_TOP_K;\n const rrfK = opts?.rrfK ?? RRF_K;\n if (this.entries.size === 0) return [];\n\n // Sparse leg — BM25 over the current workspace token table.\n const sparseHits = queryBM25(this.manifest.bm25, prompt, opts?.bm25);\n const sparseRanking = sparseHits.map((h) => h.orbital);\n const matchedTokensByOrbital = new Map<string, readonly string[]>();\n for (const hit of sparseHits) matchedTokensByOrbital.set(hit.orbital, hit.matchedTokens);\n\n // Dense leg — cosine vs every orbital's content vector. The\n // embedder is best-effort: a transient provider failure (DeepSeek\n // occasionally returns a response without `data`) shouldn't take\n // down the entire prompt narrowing path. Fall back to sparse-only\n // ranking when the dense leg fails; log to console so the failure\n // stays visible without halting the agent run.\n let denseRanking: readonly string[] = [];\n try {\n const [promptVector] = await this.embedOne(prompt);\n const dense: { orbital: string; sim: number }[] = [];\n for (const [orbital, entry] of this.entries) {\n const sim = cosineSimilarity(promptVector, entry.contentVector);\n if (sim > 0) dense.push({ orbital, sim });\n }\n dense.sort((a, b) => b.sim - a.sim);\n denseRanking = dense.map((d) => d.orbital);\n } catch (err) {\n const reason = err instanceof Error ? err.message : String(err);\n console.warn(`[workspace-index] dense retrieval failed, falling back to sparse-only: ${reason}`);\n }\n\n const fused = rrfFuse([denseRanking, sparseRanking], rrfK);\n return fused.slice(0, topK).map((entry) => ({\n orbitalName: entry.key,\n score: entry.score,\n matchedTokens: matchedTokensByOrbital.get(entry.key) ?? [],\n matchedKnobs: this.explainKnobMatches(entry.key, prompt),\n rankByDense: entry.ranks[0] ?? null,\n rankBySparse: entry.ranks[1] ?? null,\n }));\n }\n\n findByToken(query: string): readonly string[] {\n const hits = queryBM25(this.manifest.bm25, query);\n return hits.map((h) => h.orbital);\n }\n\n // ── Phase C — graph queries ────────────────────────────────────────────────\n\n orbitalsListeningTo(event: string): readonly EventEdge[] {\n return (this.manifest.composed.events[event] ?? []).filter((e) => e.role === 'listen');\n }\n\n orbitalsEmitting(event: string): readonly EventEdge[] {\n return (this.manifest.composed.events[event] ?? []).filter((e) => e.role === 'emit');\n }\n\n orbitalsLinkedToEntity(entity: string): readonly EntityBinding[] {\n const composed = this.manifest.composed.entityNameComposed[entity] ?? [];\n const override = this.manifest.intent.entityNameOverrides[entity] ?? [];\n return [...composed, ...override];\n }\n\n extraTraitImporters(refPath: string): readonly string[] {\n return this.manifest.intent.traitRefImporters[refPath] ?? [];\n }\n\n composedEvents(): readonly string[] {\n return Object.keys(this.manifest.composed.events);\n }\n\n composedEntities(): readonly string[] {\n const set = new Set<string>();\n for (const name of Object.keys(this.manifest.composed.entityNameComposed)) {\n set.add(name);\n }\n for (const name of Object.keys(this.manifest.intent.entityNameOverrides)) {\n set.add(name);\n }\n return Array.from(set);\n }\n\n composedTraitRefPaths(): readonly string[] {\n return Object.keys(this.manifest.intent.traitRefImporters);\n }\n\n rulesAppliedTo(entity: string): readonly RuleBinding[] {\n const out: RuleBinding[] = [];\n for (const bindings of Object.values(this.manifest.intent.ruleCapabilities)) {\n for (const b of bindings) if (b.entityName === entity) out.push(b);\n }\n return out;\n }\n\n recentlyEdited(opts?: RecentlyEditedOptions): readonly string[] {\n const withinTurns = opts?.withinTurns ?? 5;\n const entries: { orbital: string; recencyTurn: number }[] = [];\n for (const [orbital, recency] of Object.entries(this.manifest.recency)) {\n entries.push({ orbital, recencyTurn: recency.recencyTurn });\n }\n if (entries.length === 0) return [];\n const maxTurn = entries.reduce((m, e) => (e.recencyTurn > m ? e.recencyTurn : m), -Infinity);\n entries.sort((a, b) => b.recencyTurn - a.recencyTurn);\n return entries\n .filter((e) => e.recencyTurn > maxTurn - withinTurns)\n .map((e) => e.orbital);\n }\n\n // ── Manifest internals ─────────────────────────────────────────────────────\n\n private scheduleManifestRebuild(): Promise<void> {\n const next = this.manifestQueue.then(() => this.rebuildManifest());\n this.manifestQueue = next.catch(() => undefined);\n return next;\n }\n\n private async rebuildManifest(): Promise<void> {\n const tokensPerOrbital: Record<string, readonly string[]> = {};\n for (const [orbital, tokens] of this.tokensByOrbital) {\n tokensPerOrbital[orbital] = tokens;\n }\n const specsPerOrbital: Record<string, JsonObject> = {};\n for (const [orbital, spec] of this.specsByOrbital) {\n specsPerOrbital[orbital] = spec;\n }\n const recency: Record<string, RecencyEntry> = {};\n for (const [orbital, entry] of this.recencyByOrbital) {\n recency[orbital] = entry;\n }\n const next: WorkspaceIndexManifest = {\n schemaVersion: WORKSPACE_INDEX_SCHEMA_VERSION,\n bm25: buildBM25Table(tokensPerOrbital),\n intent: buildIntentMaps(specsPerOrbital),\n composed: buildComposedMaps(this.deps.readSchema()),\n recency,\n bakedAt: Date.now(),\n };\n this.manifest = next;\n await writeManifest(this.deps.backend, this.deps.workDir, next);\n await this.deps.sinks.notifyAll({\n kind: 'workspace-index-manifest',\n content: serializeManifestForMirror(next),\n });\n }\n\n private hydrateRecencyFromManifest(manifest: WorkspaceIndexManifest): void {\n for (const [orbital, entry] of Object.entries(manifest.recency)) {\n this.recencyByOrbital.set(orbital, entry);\n }\n }\n\n private explainKnobMatches(orbital: string, prompt: string): readonly string[] {\n const spec = this.specsByOrbital.get(orbital);\n if (!spec) return [];\n const params = asJsonObject(spec['params']);\n if (!params) return [];\n const traitOverrides = asJsonObject(params['traitOverrides']);\n if (!traitOverrides) return [];\n const promptLower = prompt.toLowerCase();\n const out: string[] = [];\n for (const trait of Object.keys(traitOverrides).sort()) {\n const override = asJsonObject(traitOverrides[trait]);\n if (!override) continue;\n const config = asJsonObject(override['config']);\n if (!config) continue;\n for (const knob of Object.keys(config).sort()) {\n const rendered = renderKnobValueForExplain(config[knob]);\n if (rendered.length === 0) continue;\n if (promptLower.includes(rendered.toLowerCase())) {\n out.push(`${trait}.${knob}`);\n }\n }\n }\n return out;\n }\n\n private async rebakeOrbital(orbital: string, spec: JsonObject): Promise<void> {\n const checksum = checksumSpec(spec);\n const existing = this.entries.get(orbital);\n if (existing && existing.specChecksum === checksum) return;\n await this.enqueueBake(orbital, () => this.bakeAndPersist(orbital, spec, checksum));\n }\n\n private enqueueBake(orbital: string, op: () => Promise<void>): Promise<void> {\n const prev = this.bakeQueue.get(orbital) ?? Promise.resolve();\n const next = prev.then(op);\n const swallowed = next.catch(() => undefined);\n this.bakeQueue.set(orbital, swallowed);\n return next;\n }\n\n private async bakeAndPersist(\n orbital: string,\n spec: JsonObject,\n checksum: string,\n ): Promise<void> {\n this.stale.add(orbital);\n const identityFingerprint = composeOrbitalIdentityFingerprint(spec);\n const contentFingerprint = composeOrbitalContentFingerprint(spec);\n const extraInputs = extractExtraTraitInputs(spec);\n // One batched embedBatch call for the whole orbital — keeps the\n // per-bake HTTP round-trip count at 1. Order: identity, content,\n // then per-extraTrait. Destructured back below in the same order.\n const allTexts = [\n identityFingerprint,\n contentFingerprint,\n ...extraInputs.map((e) => e.fingerprint),\n ];\n // Embedder is best-effort. Transient provider failures (DeepSeek's\n // occasional missing-`data` response) shouldn't crash the workspace\n // index — the orbital just doesn't get a baked sidecar this round.\n // Subsequent coercion / retrieval calls return null/empty gracefully.\n // The orbital STAYS in `this.stale` so the next non-failing\n // writeSpec triggers a re-bake.\n let embeddings: readonly (readonly number[])[];\n try {\n const result = await this.deps.embedder.embedBatch(allTexts);\n embeddings = result.embeddings;\n } catch (err) {\n const reason = err instanceof Error ? err.message : String(err);\n console.warn(`[workspace-index] bakeAndPersist[${orbital}]: embedder failed, skipping (${reason})`);\n return;\n }\n if (embeddings.length !== allTexts.length) {\n console.warn(\n `[workspace-index] bakeAndPersist[${orbital}]: embedder returned ${embeddings.length} vectors for ${allTexts.length} inputs; skipping`,\n );\n return;\n }\n const [identityVector, contentVector, ...extraVectors] = embeddings;\n const extraTraitIdentities: ExtraTraitIdentity[] = extraInputs.map((input, idx) => ({\n ref: input.ref,\n alias: input.alias,\n fingerprint: input.fingerprint,\n vector: extraVectors[idx],\n }));\n const entry: OrbitalIndexEntry = {\n schemaVersion: WORKSPACE_INDEX_SCHEMA_VERSION,\n specChecksum: checksum,\n identityVector,\n identityFingerprint,\n contentVector,\n contentFingerprint,\n extraTraitIdentities,\n bakedAt: Date.now(),\n };\n await writeSidecar(this.deps.backend, this.deps.workDir, orbital, entry);\n this.entries.set(orbital, entry);\n this.stale.delete(orbital);\n // Emit so the apps/builder Firestore mirror (and any other registered\n // observer) can persist the sidecar alongside spec.json, memory.json,\n // etc. Without this, cold restore re-bakes every orbital on every\n // server restart — paid embedder calls for deterministic vectors.\n await this.deps.sinks.notifyAll({\n kind: 'workspace-index',\n orbital,\n content: serializeEntryForMirror(entry),\n });\n }\n\n private async embedOne(text: string): Promise<readonly (readonly number[])[]> {\n const { embeddings } = await this.deps.embedder.embedBatch([text]);\n if (embeddings.length !== 1) {\n throw new Error(\n `[workspace-index] embedder returned ${embeddings.length} vectors for a single text`,\n );\n }\n return embeddings;\n }\n}\n\n/**\n * Project a typed `OrbitalIndexEntry` into a plain `JsonObject` so it\n * can ride the typed `WorkspaceWriteEvent.content` channel. Object\n * literal + spread → TS infers a fresh shape structurally assignable\n * to the JsonObject index signature; no cast needed.\n */\nfunction serializeEntryForMirror(entry: OrbitalIndexEntry): JsonObject {\n return {\n schemaVersion: entry.schemaVersion,\n specChecksum: entry.specChecksum,\n identityVector: [...entry.identityVector],\n identityFingerprint: entry.identityFingerprint,\n contentVector: [...entry.contentVector],\n contentFingerprint: entry.contentFingerprint,\n extraTraitIdentities: entry.extraTraitIdentities.map((e) => ({\n ref: e.ref,\n alias: e.alias,\n fingerprint: e.fingerprint,\n vector: [...e.vector],\n })),\n bakedAt: entry.bakedAt,\n };\n}\n\nfunction extractExtraTraitInputs(spec: JsonObject): ExtraTraitFingerprintInput[] {\n const params = asJsonObject(spec['params']);\n if (!params) return [];\n const extras = params['extraTraits'];\n if (!Array.isArray(extras)) return [];\n const out: ExtraTraitFingerprintInput[] = [];\n for (const entry of extras) {\n const obj = asJsonObject(entry);\n if (!obj) continue;\n const ref = typeof obj['ref'] === 'string' ? obj['ref'] : null;\n if (ref === null) continue;\n const name = typeof obj['name'] === 'string' ? obj['name'] : undefined;\n const linkedEntity = typeof obj['linkedEntity'] === 'string' ? obj['linkedEntity'] : undefined;\n const alias = deriveExtraTraitAlias({ ref, name });\n out.push({\n ref,\n alias,\n fingerprint: composeExtraTraitIdentityFingerprint({ ref, name, linkedEntity }),\n });\n }\n return out;\n}\n\nfunction asJsonObject(value: JsonValue | undefined): JsonObject | null {\n if (value === undefined || value === null) return null;\n if (typeof value !== 'object' || Array.isArray(value)) return null;\n return value;\n}\n\nfunction emptyManifest(): WorkspaceIndexManifest {\n return {\n schemaVersion: WORKSPACE_INDEX_SCHEMA_VERSION,\n bm25: { documents: {}, docFreq: {}, docCount: 0, avgDocLen: 0 },\n intent: { entityNameOverrides: {}, traitRefImporters: {}, ruleCapabilities: {}, organism: {} },\n composed: { events: {}, entityNameComposed: {} },\n recency: {},\n bakedAt: 0,\n };\n}\n\nfunction deriveRecencyEntry(\n _orbital: string,\n rows: readonly JsonObject[],\n prior: RecencyEntry | undefined,\n): RecencyEntry {\n let recencyTurn = prior?.recencyTurn ?? 0;\n let lastChange = prior?.lastChange ?? 0;\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const turn = typeof row['turn'] === 'number' ? row['turn'] : recencyTurn + 1;\n const ts = typeof row['timestamp'] === 'number' ? row['timestamp'] : 0;\n if (turn > recencyTurn) recencyTurn = turn;\n if (ts > lastChange) lastChange = ts;\n }\n return { recencyTurn, lastChange };\n}\n\nfunction renameKey<V>(map: Map<string, V>, from: string, to: string): void {\n if (!map.has(from)) return;\n const value = map.get(from);\n if (value === undefined) return;\n map.delete(from);\n map.set(to, value);\n}\n\nfunction renderKnobValueForExplain(value: JsonValue | undefined): string {\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n return '';\n}\n\n/**\n * Project the typed manifest into a JsonObject for the observer-event\n * channel. Same trick as `serializeEntryForMirror` — inline object\n * literal + spreads → TS infers a fresh JsonObject-compatible shape.\n */\nfunction serializeManifestForMirror(manifest: WorkspaceIndexManifest): JsonObject {\n return {\n schemaVersion: manifest.schemaVersion,\n bm25: serializeBM25(manifest.bm25),\n intent: serializeIntent(manifest.intent),\n composed: serializeComposed(manifest.composed),\n recency: serializeRecency(manifest.recency),\n bakedAt: manifest.bakedAt,\n };\n}\n\nfunction serializeBM25(t: BM25Table): JsonObject {\n const documents: Record<string, JsonObject> = {};\n for (const [orbital, doc] of Object.entries(t.documents)) {\n documents[orbital] = serializeBM25Doc(doc);\n }\n return {\n documents,\n docFreq: { ...t.docFreq },\n docCount: t.docCount,\n avgDocLen: t.avgDocLen,\n };\n}\n\nfunction serializeBM25Doc(doc: BM25Document): JsonObject {\n return {\n orbital: doc.orbital,\n termFreq: { ...doc.termFreq },\n docLen: doc.docLen,\n };\n}\n\nfunction serializeIntent(intent: WorkspaceIndexManifest['intent']): JsonObject {\n return {\n entityNameOverrides: serializeMapOfArrays(intent.entityNameOverrides, (b) => ({ ...b })),\n traitRefImporters: serializeMapOfArrays(intent.traitRefImporters, (s) => s),\n ruleCapabilities: serializeMapOfArrays(intent.ruleCapabilities, (b) => ({ ...b })),\n organism: serializeMapOfArrays(intent.organism, (s) => s),\n };\n}\n\nfunction serializeComposed(composed: WorkspaceIndexManifest['composed']): JsonObject {\n return {\n events: serializeMapOfArrays(composed.events, (e) => ({ ...e })),\n entityNameComposed: serializeMapOfArrays(composed.entityNameComposed, (b) => ({ ...b })),\n };\n}\n\nfunction serializeRecency(recency: WorkspaceIndexManifest['recency']): JsonObject {\n const out: Record<string, JsonObject> = {};\n for (const [orbital, entry] of Object.entries(recency)) {\n out[orbital] = { recencyTurn: entry.recencyTurn, lastChange: entry.lastChange };\n }\n return out;\n}\n\nfunction serializeMapOfArrays<T>(\n map: Readonly<Record<string, readonly T[]>>,\n projectOne: (item: T) => JsonValue,\n): JsonObject {\n const out: Record<string, JsonValue[]> = {};\n for (const [key, items] of Object.entries(map)) {\n out[key] = items.map(projectOne);\n }\n return out;\n}\n","/**\n * `WorkspaceService` implementation. The single chokepoint — every read\n * and write that any consumer performs lands here, computes its absolute\n * path via `path-layout.ts`, runs the backend op, then fans out a typed\n * `WorkspaceWriteEvent` to every registered observer.\n *\n * @packageDocumentation\n */\n\nimport path from 'node:path';\nimport type { JsonObject, JsonValue } from '@almadar/core';\nimport type {\n FileTreeNode,\n GitHubConfig,\n GitStatusInfo,\n WorkspaceObserver,\n WorkspaceService,\n WorkspaceWatchEvent,\n WorkspaceWriteEvent,\n} from './types.js';\nimport type { WorkspaceBackend } from './internal/types.js';\nimport { SinkManager } from './internal/sink-manager.js';\nimport { GitClient } from './internal/git-client.js';\nimport {\n archivedOrbitalFile,\n assertOrbitalName,\n compiledDir,\n compiledFile,\n coordinatorFile,\n orbitalFile,\n orbitalSessionDir,\n orbitalSessionFile,\n sandboxedPath,\n schemaFile,\n traceFile,\n WORKSPACE_LAYOUT,\n} from './internal/path-layout.js';\nimport {\n ensureOrbitalSessionDir,\n} from './internal/workspace-manager.js';\nimport {\n appendJsonLine,\n readJsonFile,\n readJsonLines,\n writeJsonFile,\n} from './internal/memory-files.js';\nimport { WorkspaceIndexImpl } from './workspace-index/index-impl.js';\nimport type { EmbedderPort, WorkspaceIndex } from './workspace-index/types.js';\n\ninterface ServiceCtorArgs {\n workDir: string;\n backend: WorkspaceBackend;\n sinks: SinkManager;\n embedder: EmbedderPort;\n appId?: string;\n git?: GitClient;\n github?: GitHubConfig;\n}\n\nconst COORD_FILES = {\n analysis: 'analysis.json',\n plan: 'plan.json',\n clarifications: 'clarifications.json',\n messages: 'messages.json',\n} as const;\n\nconst ORBITAL_FILES = {\n spec: 'spec.json',\n memory: 'memory.json',\n history: 'history.jsonl',\n paramsHistory: 'params-history.jsonl',\n errors: 'errors.json',\n messages: 'messages.json',\n} as const;\n\nexport class WorkspaceServiceImpl implements WorkspaceService {\n readonly workDir: string;\n private _appId: string | undefined;\n private readonly backend: WorkspaceBackend;\n private readonly sinks: SinkManager;\n private readonly git: GitClient | undefined;\n private readonly github: GitHubConfig | undefined;\n /** Per-absolute-path serial queue. */\n private readonly writeQueue = new Map<string, Promise<void>>();\n readonly index: WorkspaceIndex;\n\n constructor(args: ServiceCtorArgs) {\n this.workDir = args.workDir;\n this.backend = args.backend;\n this.sinks = args.sinks;\n this._appId = args.appId;\n this.git = args.git;\n this.github = args.github;\n this.index = new WorkspaceIndexImpl({\n workDir: this.workDir,\n backend: this.backend,\n sinks: this.sinks,\n embedder: args.embedder,\n listOrbitals: () => this.listOrbitals(),\n readSpec: (orbital) => this.readSpec(orbital),\n readSchema: () => this.readSchema(),\n readHistory: (orbital) => this.readHistory(orbital),\n });\n }\n\n // === Identity ===\n\n get appId(): string | undefined {\n return this._appId;\n }\n\n setAppId(id: string): void {\n this._appId = id;\n }\n\n // === Helpers ===\n\n /** Run `op` under a per-path serial lock. */\n private withLock<T>(absPath: string, op: () => Promise<T>): Promise<T> {\n const prev = this.writeQueue.get(absPath) ?? Promise.resolve();\n let resolved!: T;\n const next = prev.then(async () => {\n resolved = await op();\n });\n // Best-effort: ensure the queue continues even on failure.\n const swallowed = next.catch(() => undefined);\n this.writeQueue.set(absPath, swallowed);\n return next.then(() => resolved);\n }\n\n /** Make sure the parent directory of `absPath` exists. */\n private async ensureParent(absPath: string): Promise<void> {\n await this.backend.mkdir(path.dirname(absPath), { recursive: true });\n }\n\n private async emit(event: WorkspaceWriteEvent): Promise<void> {\n await this.sinks.notifyAll(event);\n }\n\n // === Orbital artifacts ===\n\n readOrbital(name: string): string | null {\n assertOrbitalName(name);\n const p = orbitalFile(this.workDir, name);\n if (!this.backend.exists(p)) return null;\n try {\n return this.backend.readFileSync(p);\n } catch {\n return null;\n }\n }\n\n async writeOrbital(name: string, content: string): Promise<void> {\n assertOrbitalName(name);\n const p = orbitalFile(this.workDir, name);\n await this.withLock(p, async () => {\n await this.ensureParent(p);\n await this.backend.writeFile(p, content);\n });\n await this.emit({ kind: 'orbital', name, content });\n }\n\n listOrbitals(): string[] {\n const dir = path.join(this.workDir, WORKSPACE_LAYOUT.ORBITALS_DIR);\n if (!this.backend.exists(dir)) return [];\n try {\n return this.backend.readdirSync(dir)\n .filter(f => f.endsWith('.orb'))\n .map(f => f.replace(/\\.orb$/, ''))\n .sort();\n } catch {\n return [];\n }\n }\n\n async archiveOrbital(name: string): Promise<void> {\n assertOrbitalName(name);\n const src = orbitalFile(this.workDir, name);\n if (!this.backend.exists(src)) return;\n const content = await this.backend.readFile(src);\n const dst = archivedOrbitalFile(this.workDir, name);\n await this.withLock(src, async () => {\n await this.ensureParent(dst);\n await this.backend.writeFile(dst, content);\n await this.backend.unlink(src);\n });\n await this.emit({ kind: 'orbital-archived', name });\n }\n\n async renameOrbital(from: string, to: string): Promise<void> {\n assertOrbitalName(from);\n assertOrbitalName(to);\n const src = orbitalFile(this.workDir, from);\n const dst = orbitalFile(this.workDir, to);\n if (!this.backend.exists(src)) return;\n const content = await this.backend.readFile(src);\n await this.withLock(src, async () => {\n await this.ensureParent(dst);\n await this.backend.writeFile(dst, content);\n await this.backend.unlink(src);\n });\n await this.emit({ kind: 'orbital-renamed', from, to });\n }\n\n async renameOrbitalSession(from: string, to: string): Promise<void> {\n assertOrbitalName(from);\n assertOrbitalName(to);\n const src = orbitalSessionDir(this.workDir, from);\n const dst = orbitalSessionDir(this.workDir, to);\n if (!this.backend.exists(src)) return;\n if (this.backend.exists(dst)) return;\n await this.withLock(src, async () => {\n await this.backend.rename(src, dst);\n });\n await this.emit({ kind: 'session-renamed', from, to });\n }\n\n // === Schema artifact ===\n\n readSchema(): string | null {\n const p = schemaFile(this.workDir);\n if (!this.backend.exists(p)) return null;\n try {\n return this.backend.readFileSync(p);\n } catch {\n return null;\n }\n }\n\n async writeSchema(content: string): Promise<void> {\n const p = schemaFile(this.workDir);\n await this.withLock(p, async () => {\n await this.ensureParent(p);\n await this.backend.writeFile(p, content);\n });\n await this.emit({ kind: 'schema', content });\n }\n\n // === Coordinator session ===\n\n readAnalysis<T extends JsonObject>(): T | null {\n return readJsonFileSync<T>(this.backend, coordinatorFile(this.workDir, COORD_FILES.analysis));\n }\n\n async writeAnalysis<T extends JsonObject>(analysis: T): Promise<void> {\n const p = coordinatorFile(this.workDir, COORD_FILES.analysis);\n await this.withLock(p, async () => {\n await this.ensureParent(p);\n await writeJsonFile(this.backend, p, analysis);\n });\n await this.emit({ kind: 'analysis', content: analysis });\n }\n\n readPlan<T extends JsonObject>(): T | null {\n return readJsonFileSync<T>(this.backend, coordinatorFile(this.workDir, COORD_FILES.plan));\n }\n\n async writePlan<T extends JsonObject>(plan: T): Promise<void> {\n const p = coordinatorFile(this.workDir, COORD_FILES.plan);\n await this.withLock(p, async () => {\n await this.ensureParent(p);\n await writeJsonFile(this.backend, p, plan);\n });\n await this.emit({ kind: 'plan', content: plan });\n }\n\n readClarificationAnswers(): Record<string, string> {\n const p = coordinatorFile(this.workDir, COORD_FILES.clarifications);\n if (!this.backend.exists(p)) return {};\n try {\n const parsed = JSON.parse(this.backend.readFileSync(p)) as JsonObject;\n const out: Record<string, string> = {};\n for (const k of Object.keys(parsed)) {\n const v = parsed[k];\n if (typeof v === 'string') out[k] = v;\n }\n return out;\n } catch {\n return {};\n }\n }\n\n async writeClarificationAnswers(answers: Record<string, string>): Promise<void> {\n const p = coordinatorFile(this.workDir, COORD_FILES.clarifications);\n const asJson: JsonObject = { ...answers };\n await this.withLock(p, async () => {\n await this.ensureParent(p);\n await writeJsonFile(this.backend, p, asJson);\n });\n await this.emit({ kind: 'clarifications', content: answers });\n }\n\n readCoordinatorMessages<T extends JsonValue>(): T[] | null {\n const p = coordinatorFile(this.workDir, COORD_FILES.messages);\n if (!this.backend.exists(p)) return null;\n try {\n const parsed = JSON.parse(this.backend.readFileSync(p));\n if (!Array.isArray(parsed)) return null;\n return parsed as T[];\n } catch {\n return null;\n }\n }\n\n async writeCoordinatorMessages<T extends JsonValue>(messages: T[]): Promise<void> {\n const p = coordinatorFile(this.workDir, COORD_FILES.messages);\n await this.withLock(p, async () => {\n await this.ensureParent(p);\n await this.backend.writeFile(p, JSON.stringify(messages, null, 2));\n });\n await this.emit({ kind: 'coordinator-messages', content: messages as JsonValue[] });\n }\n\n // === Per-orbital session ===\n\n private orbitalFile(orbital: string, basename: string): string {\n assertOrbitalName(orbital);\n return orbitalSessionFile(this.workDir, orbital, basename);\n }\n\n readSpec<T extends JsonObject>(orbital: string): T | null {\n return readJsonFileSync<T>(this.backend, this.orbitalFile(orbital, ORBITAL_FILES.spec));\n }\n\n async writeSpec<T extends JsonObject>(orbital: string, spec: T): Promise<void> {\n const p = this.orbitalFile(orbital, ORBITAL_FILES.spec);\n await this.withLock(p, async () => {\n await ensureOrbitalSessionDir(this.backend, this.workDir, orbital);\n await writeJsonFile(this.backend, p, spec);\n });\n await this.emit({ kind: 'spec', orbital, content: spec });\n }\n\n readMemory<T extends JsonObject>(orbital: string): T | null {\n return readJsonFileSync<T>(this.backend, this.orbitalFile(orbital, ORBITAL_FILES.memory));\n }\n\n async writeMemory<T extends JsonObject>(orbital: string, memory: T): Promise<void> {\n const p = this.orbitalFile(orbital, ORBITAL_FILES.memory);\n await this.withLock(p, async () => {\n await ensureOrbitalSessionDir(this.backend, this.workDir, orbital);\n await writeJsonFile(this.backend, p, memory);\n });\n await this.emit({ kind: 'memory', orbital, content: memory });\n }\n\n async appendHistory<T extends JsonObject>(orbital: string, entry: T): Promise<void> {\n const p = this.orbitalFile(orbital, ORBITAL_FILES.history);\n await this.withLock(p, async () => {\n await ensureOrbitalSessionDir(this.backend, this.workDir, orbital);\n await appendJsonLine(this.backend, p, entry);\n });\n await this.emit({ kind: 'history', orbital, entry });\n }\n\n readHistory<T extends JsonObject>(orbital: string): T[] {\n const p = this.orbitalFile(orbital, ORBITAL_FILES.history);\n return readJsonLinesSync<T>(this.backend, p);\n }\n\n async appendParamsHistory<T extends JsonObject>(orbital: string, row: T): Promise<void> {\n const p = this.orbitalFile(orbital, ORBITAL_FILES.paramsHistory);\n await this.withLock(p, async () => {\n await ensureOrbitalSessionDir(this.backend, this.workDir, orbital);\n await appendJsonLine(this.backend, p, row);\n });\n await this.emit({ kind: 'params-history', orbital, row });\n }\n\n readErrors<T extends JsonObject>(orbital: string): T[] {\n const p = this.orbitalFile(orbital, ORBITAL_FILES.errors);\n if (!this.backend.exists(p)) return [];\n try {\n const parsed = JSON.parse(this.backend.readFileSync(p));\n if (!Array.isArray(parsed)) return [];\n return parsed as T[];\n } catch {\n return [];\n }\n }\n\n async writeErrors<T extends JsonObject>(orbital: string, errors: T[]): Promise<void> {\n const p = this.orbitalFile(orbital, ORBITAL_FILES.errors);\n await this.withLock(p, async () => {\n await ensureOrbitalSessionDir(this.backend, this.workDir, orbital);\n await this.backend.writeFile(p, JSON.stringify(errors, null, 2));\n });\n await this.emit({ kind: 'errors', orbital, content: errors });\n }\n\n readSubagentMessages<T extends JsonValue>(orbital: string): T[] | null {\n const p = this.orbitalFile(orbital, ORBITAL_FILES.messages);\n if (!this.backend.exists(p)) return null;\n try {\n const parsed = JSON.parse(this.backend.readFileSync(p));\n if (!Array.isArray(parsed)) return null;\n return parsed as T[];\n } catch {\n return null;\n }\n }\n\n async writeSubagentMessages<T extends JsonValue>(\n orbital: string,\n messages: T[],\n ): Promise<void> {\n const p = this.orbitalFile(orbital, ORBITAL_FILES.messages);\n await this.withLock(p, async () => {\n await ensureOrbitalSessionDir(this.backend, this.workDir, orbital);\n await this.backend.writeFile(p, JSON.stringify(messages, null, 2));\n });\n await this.emit({ kind: 'subagent-messages', orbital, content: messages as JsonValue[] });\n }\n\n // === Trace ===\n\n async emitTrace<T extends JsonObject>(event: T): Promise<void> {\n const p = traceFile(this.workDir);\n await this.withLock(p, async () => {\n await this.ensureParent(p);\n await appendJsonLine(this.backend, p, event);\n });\n await this.emit({ kind: 'trace', event });\n }\n\n readTrace<T extends JsonObject>(): T[] {\n const p = traceFile(this.workDir);\n return readJsonLinesSync<T>(this.backend, p);\n }\n\n // === Compiled output ===\n\n async writeCompiled(relPath: string, content: string): Promise<void> {\n if (relPath.includes('..') || path.isAbsolute(relPath)) {\n throw new Error(`compiled: invalid relPath (${relPath})`);\n }\n const p = compiledFile(this.workDir, relPath);\n await this.withLock(p, async () => {\n await this.ensureParent(p);\n await this.backend.writeFile(p, content);\n });\n await this.emit({ kind: 'compiled', relPath, content });\n }\n\n readCompiled(relPath: string): string | null {\n if (relPath.includes('..') || path.isAbsolute(relPath)) return null;\n const p = compiledFile(this.workDir, relPath);\n if (!this.backend.exists(p)) return null;\n try {\n return this.backend.readFileSync(p);\n } catch {\n return null;\n }\n }\n\n async clearCompiled(): Promise<void> {\n const dir = compiledDir(this.workDir);\n if (!this.backend.exists(dir)) return;\n await removeTree(this.backend, dir);\n }\n\n // === Sandboxed generic file I/O ===\n\n async readFile(relPath: string): Promise<string | null> {\n const abs = sandboxedPath(this.workDir, relPath);\n if (!this.backend.exists(abs)) return null;\n try {\n return await this.backend.readFile(abs);\n } catch {\n return null;\n }\n }\n\n async writeFile(relPath: string, content: string): Promise<void> {\n const abs = sandboxedPath(this.workDir, relPath);\n await this.withLock(abs, async () => {\n await this.ensureParent(abs);\n await this.backend.writeFile(abs, content);\n });\n await this.emit({ kind: 'file', relPath, content });\n }\n\n async listTree(relPath?: string): Promise<FileTreeNode[]> {\n const base = relPath === undefined ? this.workDir : sandboxedPath(this.workDir, relPath);\n if (!this.backend.exists(base)) return [];\n const out: FileTreeNode[] = [];\n await walk(this.backend, base, this.workDir, out);\n return out;\n }\n\n async exists(relPath: string): Promise<boolean> {\n let abs: string;\n try {\n abs = sandboxedPath(this.workDir, relPath);\n } catch {\n return false;\n }\n return this.backend.exists(abs);\n }\n\n // === Git ===\n\n async commitAndPush(opts: {\n message: string;\n tags?: string[];\n }): Promise<{ sha: string } | null> {\n if (!this.git) return null;\n await this.git.addAll();\n const sha = await this.git.commit(opts.message);\n if (sha === null) return null;\n if (opts.tags) {\n for (const t of opts.tags) await this.git.tag(t);\n }\n if (this.github && this.github.repoUrl) {\n if (!(await this.git.hasRemote('origin'))) {\n await this.git.addRemote('origin', this.github.repoUrl);\n }\n await this.git.push('origin', this.github.branch ?? 'main');\n }\n return { sha };\n }\n\n async pullIfLinked(): Promise<boolean> {\n if (!this.git || !this.github) return false;\n if (!(await this.git.hasRemote('origin'))) return false;\n await this.git.pull('origin', this.github.branch ?? 'main');\n return true;\n }\n\n async gitStatus(): Promise<GitStatusInfo> {\n if (!this.git) {\n return { clean: true, staged: [], modified: [], untracked: [], linked: false };\n }\n const s = await this.git.status();\n const linked = await this.git.hasRemote('origin');\n return { ...s, linked };\n }\n\n // === Observation ===\n\n subscribe(observer: WorkspaceObserver): () => void {\n return this.sinks.subscribe(observer);\n }\n\n watch(relPath: string, onChange: (event: WorkspaceWatchEvent) => void): () => void {\n const abs = sandboxedPath(this.workDir, relPath);\n return this.backend.watch(abs, (kind) => onChange({ relPath, kind }));\n }\n\n // === Disposal ===\n\n async dispose(): Promise<void> {\n // Drain pending writes.\n const pending = Array.from(this.writeQueue.values());\n await Promise.allSettled(pending);\n // Optional final commit when configured.\n if (this.git && this.github) {\n try {\n await this.commitAndPush({ message: 'workspace: dispose' });\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error(`[workspace] dispose: commitAndPush failed: ${msg}`);\n }\n }\n }\n}\n\n// ============================================================================\n// Sync helpers — wrap backend reads with safe JSON parse.\n// ============================================================================\n\nfunction readJsonFileSync<T extends JsonObject>(\n backend: WorkspaceBackend,\n absPath: string,\n): T | null {\n if (!backend.exists(absPath)) return null;\n try {\n return JSON.parse(backend.readFileSync(absPath)) as T;\n } catch {\n return null;\n }\n}\n\nfunction readJsonLinesSync<T extends JsonObject>(\n backend: WorkspaceBackend,\n absPath: string,\n): T[] {\n if (!backend.exists(absPath)) return [];\n try {\n const raw = backend.readFileSync(absPath);\n const out: T[] = [];\n for (const line of raw.split('\\n')) {\n if (!line.trim()) continue;\n try {\n out.push(JSON.parse(line) as T);\n } catch {\n // skip\n }\n }\n return out;\n } catch {\n return [];\n }\n}\n\nasync function walk(\n backend: WorkspaceBackend,\n dir: string,\n root: string,\n out: FileTreeNode[],\n): Promise<void> {\n const entries = await backend.readdir(dir);\n for (const name of entries) {\n const full = path.join(dir, name);\n const s = await backend.stat(full);\n const rel = path.relative(root, full).split(path.sep).join('/');\n if (s.isDirectory) {\n out.push({ path: rel, type: 'directory', size: 0 });\n await walk(backend, full, root, out);\n } else {\n out.push({ path: rel, type: 'file', size: s.size });\n }\n }\n}\n\nasync function removeTree(backend: WorkspaceBackend, dir: string): Promise<void> {\n const entries = await backend.readdir(dir);\n for (const name of entries) {\n const full = path.join(dir, name);\n let isDir = false;\n try {\n isDir = (await backend.stat(full)).isDirectory;\n } catch {\n continue;\n }\n if (isDir) {\n await removeTree(backend, full);\n } else {\n try {\n await backend.unlink(full);\n } catch {\n // ignore\n }\n }\n }\n}\n","/**\n * Embedder port + production binding to `@almadar/llm`'s\n * `EmbeddingClient`.\n *\n * The port lets tests inject a deterministic mock without paying for\n * real network calls. Production wiring constructs an `EmbeddingClient`\n * once per workspace open and reuses it for every bake.\n *\n * @packageDocumentation\n */\n\nimport { EmbeddingClient } from '@almadar/llm';\nimport type { EmbedderPort } from './types.js';\n\n/**\n * Production embedder backed by `@almadar/llm`'s `EmbeddingClient` on\n * the openrouter provider (bge-base-en-v1.5, 768-d) — same model the\n * catalog narrower uses, so vectors share an embedding space across\n * the workspace + catalog surfaces.\n *\n * Construction is lazy: the `EmbeddingClient` (and its env-key check)\n * only fires when `embedBatch` is first called. A workspace that has\n * no orbitals to bake never pays the cost or trips the missing-key\n * error — useful for the memory-backed CLI runner that opens fresh\n * workspaces without an API key.\n */\nexport function createDefaultEmbedder(): EmbedderPort {\n let client: EmbeddingClient | null = null;\n function get(): EmbeddingClient {\n if (client === null) client = new EmbeddingClient({ provider: 'openrouter' });\n return client;\n }\n return {\n async embedBatch(texts) {\n if (texts.length === 0) return { embeddings: [] };\n const result = await get().embedBatch(texts);\n return { embeddings: result.embeddings };\n },\n };\n}\n","/**\n * `openWorkspace` — single entry point for every consumer.\n *\n * Resolves the workspace lifecycle (adopt → resume → restore → clone →\n * mint), constructs the backend + sink manager + git client, writes\n * templates on mint, and returns a fully wired `WorkspaceService`.\n *\n * @packageDocumentation\n */\n\nimport path from 'node:path';\nimport type { OpenWorkspaceOptions, WorkspaceService } from './types.js';\nimport type { WorkspaceBackend, AppMarker } from './internal/types.js';\nimport { LocalBackend } from './internal/backends/local.js';\nimport { MemoryBackend } from './internal/backends/memory.js';\nimport { SinkManager } from './internal/sink-manager.js';\nimport {\n ensureGitInit,\n ensureSkeleton,\n writeMintTemplatesIfMissing,\n} from './internal/workspace-manager.js';\nimport {\n findLocalWorkspaceDir,\n mintSessionDir,\n readAppMarker,\n writeAppMarker,\n} from './internal/workspace-resolver.js';\nimport { restoreWorkspace } from './internal/restore.js';\nimport { WorkspaceServiceImpl } from './service.js';\nimport { createDefaultEmbedder } from './workspace-index/embedder.js';\n\n/**\n * Per-(userId, appId) in-process dedupe of concurrent `openWorkspace`\n * calls. Two near-simultaneous calls for the same appId would both fail\n * `findLocalWorkspaceDir` (neither has written `app-marker.json` yet)\n * and both fall through to `mintSessionDir`, producing two distinct\n * directories for the same logical workspace. The cached Promise lets\n * subsequent callers await the first call's resolution and share the\n * resulting `WorkspaceService` instance.\n *\n * The cache key includes `backend` because memory and local backends\n * are disjoint stores — a memory-backed call must not share with a\n * local-backed one. Anonymous calls (no `appId`) bypass entirely;\n * every anonymous mint is intended to be a fresh independent session.\n *\n * Failed resolutions clear their own entry so the next call retries\n * cleanly instead of returning the cached rejection forever.\n */\nconst openWorkspaceInFlight = new Map<string, Promise<WorkspaceService>>();\n\nfunction openWorkspaceCacheKey(opts: OpenWorkspaceOptions): string | null {\n if (opts.appId === undefined) return null;\n const backendTag = opts.backend === 'memory' ? 'memory' : 'local';\n return `${backendTag}:${opts.userId}:${opts.appId}`;\n}\n\nexport async function openWorkspace(opts: OpenWorkspaceOptions & { create: false }): Promise<WorkspaceService | null>;\nexport async function openWorkspace(opts: OpenWorkspaceOptions): Promise<WorkspaceService>;\nexport async function openWorkspace(opts: OpenWorkspaceOptions): Promise<WorkspaceService | null> {\n // `create:false` is a pure read — it never mints, so the double-mint race the\n // in-flight cache guards against cannot happen; bypass the cache (and its\n // non-null contract) entirely.\n if (opts.create === false) {\n return openWorkspaceInternal(opts);\n }\n const key = openWorkspaceCacheKey(opts);\n if (key !== null) {\n const cached = openWorkspaceInFlight.get(key);\n if (cached) return cached;\n const pending = (async (): Promise<WorkspaceService> => {\n try {\n const ws = await openWorkspaceInternal(opts);\n // Unreachable: `create` is not false here, so the lifecycle always mints.\n if (ws === null) throw new Error('openWorkspace: null resolution without create:false');\n return ws;\n } catch (err) {\n openWorkspaceInFlight.delete(key);\n throw err;\n }\n })();\n openWorkspaceInFlight.set(key, pending);\n return pending;\n }\n return openWorkspaceInternal(opts);\n}\n\nasync function openWorkspaceInternal(opts: OpenWorkspaceOptions): Promise<WorkspaceService | null> {\n const backend: WorkspaceBackend = opts.backend === 'memory'\n ? new MemoryBackend()\n : new LocalBackend();\n const sinks = new SinkManager();\n\n const resolved = await resolveLifecycle(backend, opts);\n // `create:false` miss — the app exists in neither local cache nor restore.\n if (resolved === null) return null;\n\n // Bare adopt: use the dir untouched (no skeleton, mint, marker, git, or index\n // warm) so opening a loose external file leaves zero litter beside it.\n const bare = opts.bare === true && opts.adopt !== undefined;\n\n if (!bare) {\n await ensureSkeleton(backend, resolved.workDir);\n await writeMintTemplatesIfMissing(\n backend,\n resolved.workDir,\n opts.userId,\n opts.projectName ?? 'Untitled',\n resolved.appId,\n );\n\n // App marker — pin appId to dir when known.\n if (resolved.appId !== undefined) {\n const existing = readAppMarker(backend, resolved.workDir);\n if (!existing || existing.appId !== resolved.appId) {\n const marker: AppMarker = {\n appId: resolved.appId,\n userId: opts.userId,\n createdAt: existing?.createdAt ?? Date.now(),\n };\n if (opts.github?.repoUrl) marker.repoUrl = opts.github.repoUrl;\n await writeAppMarker(backend, resolved.workDir, marker);\n }\n }\n }\n\n // Git initialisation only on local backend; memory backend skips git.\n let git;\n if (!bare && opts.github && opts.backend !== 'memory') {\n git = await ensureGitInit(backend, resolved.workDir);\n }\n\n const service = new WorkspaceServiceImpl({\n workDir: resolved.workDir,\n backend,\n sinks,\n embedder: opts.embedder ?? createDefaultEmbedder(),\n appId: resolved.appId,\n git,\n github: opts.github,\n });\n\n // Strict cold start — warm any missing or stale index sidecars before\n // returning so the first `resolveOrbitalName`/`resolveTraitRef` call\n // sees authoritative data (per Almadar_Workspace_Index.md decision). Skipped\n // for bare adopt: a loose-file editor needs no semantic index and warming\n // would write `.almadar/` sidecars into the user's directory.\n if (!bare) {\n await service.index.warm();\n }\n\n return service;\n}\n\ninterface ResolvedLifecycle {\n workDir: string;\n appId: string | undefined;\n}\n\nasync function resolveLifecycle(\n backend: WorkspaceBackend,\n opts: OpenWorkspaceOptions,\n): Promise<ResolvedLifecycle | null> {\n // `create:false` is a pure read: resolve an existing workspace, but never\n // mint a fresh one — return null to signal \"not found\" so the caller can 404.\n const noCreate = opts.create === false;\n\n // 1. adopt — caller hands us a directory (explicit; unaffected by `create`).\n if (opts.adopt) {\n const workDir = path.resolve(opts.adopt);\n const marker = readAppMarker(backend, workDir);\n return { workDir, appId: marker?.appId ?? opts.appId };\n }\n\n // 2. resume from disk — appId set + we can find a marker locally.\n if (opts.appId) {\n const local = await findLocalWorkspaceDir(\n backend,\n opts.root,\n opts.userId,\n opts.appId,\n );\n if (local) return { workDir: local, appId: opts.appId };\n }\n\n // 3. restore-from-backend — appId set + local miss + restore supplied.\n if (opts.appId && opts.restore) {\n const workDir = mintSessionDir(opts.root, opts.userId);\n await backend.mkdir(workDir, { recursive: true });\n const result = await restoreWorkspace(backend, workDir, opts.restore);\n // Under `create:false` an empty restore is a true miss — the backend has\n // nothing for this app. Don't leave a phantom dir behind; report not-found.\n if (noCreate && result.filesRestored === 0) {\n await backend.rm(workDir, { recursive: true });\n return null;\n }\n return { workDir, appId: opts.appId };\n }\n\n // 4. github clone — appId set + local miss + no restore + github cfg.\n if (opts.appId && opts.github && opts.github.repoUrl) {\n // Can't verify remote existence without cloning, so a pure read declines.\n if (noCreate) return null;\n const workDir = mintSessionDir(opts.root, opts.userId);\n await backend.mkdir(workDir, { recursive: true });\n // Defer the actual clone to the consumer's git plumbing — we record\n // the marker and let `pullIfLinked` / `commitAndPush` drive remote\n // sync. Cloning requires shell access and we already have a thin git\n // client; emit a placeholder marker and let the consumer drive.\n return { workDir, appId: opts.appId };\n }\n\n // 5. mint fresh — anonymous workspace, appId may be promoted later.\n if (noCreate) return null;\n const workDir = mintSessionDir(opts.root, opts.userId);\n return { workDir, appId: opts.appId };\n}\n","/**\n * `listWorkspaces` — enumerate the app-workspaces a user has under a root.\n *\n * The single source for \"which projects exist locally\": scans\n * `<root>/<userId>/*` for dirs carrying an `app-marker.json` (minted or\n * adopted-as-app workspaces) and reports `{ appId, workDir, name?, updatedAt? }`.\n * Bare-adopted loose files (no marker) are intentionally excluded — they aren't\n * projects. Consumers (apps/builder's offline AppStore, orbital-agent-cli) use\n * this instead of fs-scanning the layout themselves.\n *\n * @packageDocumentation\n */\n\nimport path from 'node:path';\nimport type { WorkspaceBackend } from './internal/types.js';\nimport { LocalBackend } from './internal/backends/local.js';\nimport { MemoryBackend } from './internal/backends/memory.js';\nimport { readAppMarker } from './internal/workspace-resolver.js';\nimport { schemaFile } from './internal/path-layout.js';\nimport type { ListWorkspacesOptions, WorkspaceSummary } from './types.js';\n\nexport async function listWorkspaces(opts: ListWorkspacesOptions): Promise<WorkspaceSummary[]> {\n const backend: WorkspaceBackend =\n opts.backend === 'memory' ? new MemoryBackend() : new LocalBackend();\n\n const userDir = path.join(opts.root, opts.userId);\n if (!backend.exists(userDir)) return [];\n\n let entries: string[];\n try {\n entries = await backend.readdir(userDir);\n } catch {\n return [];\n }\n\n const out: WorkspaceSummary[] = [];\n for (const entry of entries) {\n const workDir = path.join(userDir, entry);\n try {\n if (!(await backend.stat(workDir)).isDirectory) continue;\n } catch {\n continue;\n }\n\n const marker = readAppMarker(backend, workDir);\n if (!marker) continue; // only marked (project) workspaces\n\n const summary: WorkspaceSummary = { appId: marker.appId, workDir, updatedAt: marker.createdAt };\n\n const sf = schemaFile(workDir);\n if (backend.exists(sf)) {\n try {\n const parsed = JSON.parse(backend.readFileSync(sf)) as { name?: unknown };\n if (typeof parsed.name === 'string') summary.name = parsed.name;\n } catch {\n // schema unreadable/invalid — leave name unset\n }\n try {\n summary.updatedAt = (await backend.stat(sf)).mtimeMs;\n } catch {\n // keep marker.createdAt\n }\n }\n\n out.push(summary);\n }\n\n // Most-recently-updated first (matches the cloud list ordering).\n out.sort((a, b) => (b.updatedAt ?? 0) - (a.updatedAt ?? 0));\n return out;\n}\n","/**\n * `deleteWorkspace` — remove a user's app-workspace dir by appId.\n *\n * Locates the workspace via its `app-marker.json` (reuse `findLocalWorkspaceDir`)\n * and removes the tree. Idempotent: returns `false` if no matching workspace.\n * Keeps workspace lifecycle inside the package (consumers don't fs-scan/rm the\n * layout themselves).\n *\n * @packageDocumentation\n */\n\nimport type { WorkspaceBackend } from './internal/types.js';\nimport { LocalBackend } from './internal/backends/local.js';\nimport { MemoryBackend } from './internal/backends/memory.js';\nimport { findLocalWorkspaceDir } from './internal/workspace-resolver.js';\nimport type { ListWorkspacesOptions } from './types.js';\n\nexport async function deleteWorkspace(\n opts: ListWorkspacesOptions & { appId: string },\n): Promise<boolean> {\n const backend: WorkspaceBackend =\n opts.backend === 'memory' ? new MemoryBackend() : new LocalBackend();\n const workDir = await findLocalWorkspaceDir(backend, opts.root, opts.userId, opts.appId);\n if (!workDir) return false;\n await backend.rm(workDir, { recursive: true });\n return true;\n}\n","/**\n * `openAccount` — the account-level store at `~/.almadar/`. Home-rooted and\n * NOT sandboxed (the sibling to the project-scoped, sandboxed WorkspaceService\n * in `open-workspace.ts`). Owns config.json, credentials.json (chmod 600),\n * and the Studio identity overlay account.json.\n */\nimport os from 'node:os';\nimport path from 'node:path';\nimport type { ProviderConfig } from '@almadar/llm';\nimport { LocalBackend } from './internal/backends/local.js';\nimport { MemoryBackend } from './internal/backends/memory.js';\nimport type { WorkspaceBackend } from './internal/types.js';\nimport type {\n AccountConfig,\n AccountIdentity,\n AccountService,\n OpenAccountOptions,\n ProviderCredential,\n} from './types.js';\n\nconst ACCOUNT_DIR = '.almadar';\nconst CONFIG_FILE = 'config.json';\nconst CREDENTIALS_FILE = 'credentials.json';\nconst ACCOUNT_FILE = 'account.json';\n/** Owner read/write only — credentials.json must never be group/world readable. */\nconst SECRET_MODE = 0o600;\n\nconst DEFAULT_CONFIG: AccountConfig = {\n schemaVersion: 1,\n defaultProvider: 'deepseek',\n defaultModel: 'deepseek-v4-flash',\n autonomy: 'balanced',\n source: 'local',\n};\n\nexport async function openAccount(opts: OpenAccountOptions = {}): Promise<AccountService> {\n const home = opts.home ?? os.homedir();\n const root = path.join(home, ACCOUNT_DIR);\n const backend: WorkspaceBackend =\n opts.backend === 'memory' ? new MemoryBackend() : new LocalBackend();\n\n const file = (name: string): string => path.join(root, name);\n\n // Boundary deserialization. Mirrors internal/memory-files.ts `readJsonFile`,\n // but unconstrained by its `T extends JsonObject` bound so typed config\n // interfaces fit. Returns null when the file is absent or empty.\n async function readJson<T>(name: string): Promise<T | null> {\n const p = file(name);\n if (!backend.exists(p)) return null;\n const raw = await backend.readFile(p);\n if (raw.trim().length === 0) return null;\n return JSON.parse(raw) as T;\n }\n\n async function getConfig(): Promise<AccountConfig> {\n const stored = await readJson<AccountConfig>(CONFIG_FILE);\n return stored ? { ...DEFAULT_CONFIG, ...stored } : { ...DEFAULT_CONFIG };\n }\n\n async function setConfig(patch: Partial<AccountConfig>): Promise<void> {\n const next: AccountConfig = { ...(await getConfig()), ...patch };\n await backend.writeFile(file(CONFIG_FILE), JSON.stringify(next, null, 2));\n }\n\n async function readCredentials(): Promise<Record<string, ProviderCredential>> {\n return (await readJson<Record<string, ProviderCredential>>(CREDENTIALS_FILE)) ?? {};\n }\n\n async function writeCredentials(creds: Record<string, ProviderCredential>): Promise<void> {\n const p = file(CREDENTIALS_FILE);\n await backend.writeFile(p, JSON.stringify(creds, null, 2));\n await backend.chmod(p, SECRET_MODE);\n }\n\n return {\n root,\n getConfig,\n setConfig,\n async getCredential(provider: string): Promise<ProviderCredential | null> {\n return (await readCredentials())[provider] ?? null;\n },\n async setCredential(provider: string, cred: ProviderCredential): Promise<void> {\n const creds = await readCredentials();\n creds[provider] = cred;\n await writeCredentials(creds);\n },\n async listCredentialedProviders(): Promise<string[]> {\n return Object.keys(await readCredentials());\n },\n async readAccount(): Promise<AccountIdentity | null> {\n return readJson<AccountIdentity>(ACCOUNT_FILE);\n },\n async writeAccount(identity: AccountIdentity): Promise<void> {\n await backend.writeFile(file(ACCOUNT_FILE), JSON.stringify(identity, null, 2));\n },\n async resolveProviderConfig(provider: string): Promise<ProviderConfig | null> {\n const creds = await readCredentials();\n const cred = creds[provider];\n if (!cred) return null;\n const cfg = await getConfig();\n const override = cfg.providers?.[provider];\n return {\n apiKey: cred.apiKey,\n ...(override?.baseUrl ? { baseUrl: override.baseUrl } : {}),\n defaultModel: override?.model ?? cfg.defaultModel,\n };\n },\n async isConfigured(): Promise<boolean> {\n const cfg = await getConfig();\n if (!cfg.setupCompletedAt) return false;\n return Object.keys(await readCredentials()).length > 0;\n },\n async dispose(): Promise<void> {\n // No long-lived resources to release.\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/internal/backends/local.ts","../src/internal/backends/memory.ts","../src/internal/sink-manager.ts","../src/internal/path-layout.ts","../src/internal/templates.ts","../src/internal/git-client.ts","../src/internal/workspace-manager.ts","../src/internal/workspace-resolver.ts","../src/internal/restore.ts","../src/internal/memory-files.ts","../src/workspace-index/types.ts","../src/workspace-index/cosine.ts","../src/workspace-index/fingerprint.ts","../src/workspace-index/sidecar.ts","../src/workspace-index/bm25.ts","../src/workspace-index/rrf.ts","../src/workspace-index/graph-builders.ts","../src/workspace-index/manifest.ts","../src/workspace-index/index-impl.ts","../src/service.ts","../src/workspace-index/embedder.ts","../src/open-workspace.ts","../src/list-workspaces.ts","../src/delete-workspace.ts","../src/account.ts"],"names":["path","asJsonObject","tailOfRef","workDir"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Local filesystem backend. The ONLY place `node:fs` is permitted.\n */\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport type { WorkspaceBackend } from '../types.js';\n\nexport class LocalBackend implements WorkspaceBackend {\n async readFile(absPath: string): Promise<string> {\n return fs.promises.readFile(absPath, 'utf-8');\n }\n readFileSync(absPath: string): string {\n return fs.readFileSync(absPath, 'utf-8');\n }\n async writeFile(absPath: string, content: string): Promise<void> {\n // Auto-mkdir parent — callers don't pre-create the directory structure.\n // Without this, a write to a fresh path (e.g. the first\n // `.almadar/trace.jsonl` write after mint) ENOENTs.\n await fs.promises.mkdir(path.dirname(absPath), { recursive: true });\n await fs.promises.writeFile(absPath, content, 'utf-8');\n }\n writeFileSync(absPath: string, content: string): void {\n fs.mkdirSync(path.dirname(absPath), { recursive: true });\n fs.writeFileSync(absPath, content, 'utf-8');\n }\n exists(absPath: string): boolean {\n return fs.existsSync(absPath);\n }\n async readdir(absPath: string): Promise<string[]> {\n return fs.promises.readdir(absPath);\n }\n readdirSync(absPath: string): string[] {\n return fs.readdirSync(absPath);\n }\n async mkdir(absPath: string, opts?: { recursive?: boolean }): Promise<void> {\n await fs.promises.mkdir(absPath, opts);\n }\n mkdirSync(absPath: string, opts?: { recursive?: boolean }): void {\n fs.mkdirSync(absPath, opts);\n }\n async unlink(absPath: string): Promise<void> {\n await fs.promises.unlink(absPath);\n }\n async stat(\n absPath: string,\n ): Promise<{ size: number; mtimeMs: number; isDirectory: boolean }> {\n const s = await fs.promises.stat(absPath);\n return { size: s.size, mtimeMs: s.mtimeMs, isDirectory: s.isDirectory() };\n }\n async rename(srcAbs: string, dstAbs: string): Promise<void> {\n await fs.promises.mkdir(path.dirname(dstAbs), { recursive: true });\n await fs.promises.rename(srcAbs, dstAbs);\n }\n async chmod(absPath: string, mode: number): Promise<void> {\n await fs.promises.chmod(absPath, mode);\n }\n async rm(absPath: string, opts?: { recursive?: boolean }): Promise<void> {\n await fs.promises.rm(absPath, { recursive: opts?.recursive ?? false, force: true });\n }\n watch(absPath: string, onChange: (kind: 'change' | 'rename') => void): () => void {\n let watcher: fs.FSWatcher | undefined;\n let timer: NodeJS.Timeout | undefined;\n // fs.watch throws synchronously if the path doesn't exist; a missing path\n // is \"nothing to watch yet\", so degrade to a no-op closer rather than throw.\n try {\n watcher = fs.watch(absPath, (eventType) => {\n // Debounce: editors emit several events per save.\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n timer = undefined;\n onChange(eventType === 'rename' ? 'rename' : 'change');\n }, 75);\n });\n } catch {\n // not watchable — closer below is a safe no-op\n }\n return () => {\n if (timer) clearTimeout(timer);\n watcher?.close();\n };\n }\n}\n","/**\n * In-memory backend for tests and sandboxed evals. No `node:fs`.\n */\nimport type { WorkspaceBackend } from '../types.js';\n\nexport class MemoryBackend implements WorkspaceBackend {\n private files = new Map<string, string>();\n private dirs = new Set<string>();\n\n async readFile(absPath: string): Promise<string> {\n return this.readFileSync(absPath);\n }\n readFileSync(absPath: string): string {\n const content = this.files.get(absPath);\n if (content === undefined) throw new Error(`ENOENT: ${absPath}`);\n return content;\n }\n async writeFile(absPath: string, content: string): Promise<void> {\n this.writeFileSync(absPath, content);\n }\n writeFileSync(absPath: string, content: string): void {\n this.files.set(absPath, content);\n }\n exists(absPath: string): boolean {\n if (this.files.has(absPath) || this.dirs.has(absPath)) return true;\n // Treat any prefix that has children as an existing dir.\n const prefix = absPath.endsWith('/') ? absPath : absPath + '/';\n for (const k of this.files.keys()) {\n if (k.startsWith(prefix)) return true;\n }\n return false;\n }\n async readdir(absPath: string): Promise<string[]> {\n return this.readdirSync(absPath);\n }\n readdirSync(absPath: string): string[] {\n const prefix = absPath.endsWith('/') ? absPath : absPath + '/';\n const entries = new Set<string>();\n for (const key of this.files.keys()) {\n if (key.startsWith(prefix)) {\n const rest = key.slice(prefix.length);\n const firstSegment = rest.split('/')[0];\n if (firstSegment) entries.add(firstSegment);\n }\n }\n return Array.from(entries);\n }\n async mkdir(absPath: string): Promise<void> {\n this.mkdirSync(absPath);\n }\n mkdirSync(absPath: string): void {\n this.dirs.add(absPath);\n }\n async unlink(absPath: string): Promise<void> {\n this.files.delete(absPath);\n }\n async stat(\n absPath: string,\n ): Promise<{ size: number; mtimeMs: number; isDirectory: boolean }> {\n const content = this.files.get(absPath);\n if (content !== undefined) {\n return { size: content.length, mtimeMs: Date.now(), isDirectory: false };\n }\n // Treat as directory if anything sits under it.\n if (this.dirs.has(absPath)) return { size: 0, mtimeMs: Date.now(), isDirectory: true };\n const prefix = absPath.endsWith('/') ? absPath : absPath + '/';\n for (const k of this.files.keys()) {\n if (k.startsWith(prefix)) return { size: 0, mtimeMs: Date.now(), isDirectory: true };\n }\n throw new Error(`ENOENT: ${absPath}`);\n }\n async rename(srcAbs: string, dstAbs: string): Promise<void> {\n // File case — direct key swap.\n const fileContent = this.files.get(srcAbs);\n if (fileContent !== undefined) {\n this.files.delete(srcAbs);\n this.files.set(dstAbs, fileContent);\n return;\n }\n // Directory case — every file whose key starts with `srcAbs/` migrates\n // to the matching position under `dstAbs/`. Empty dirs (only present\n // in `this.dirs`) also migrate.\n const srcPrefix = srcAbs.endsWith('/') ? srcAbs : srcAbs + '/';\n const dstPrefix = dstAbs.endsWith('/') ? dstAbs : dstAbs + '/';\n const migrations: Array<[string, string]> = [];\n for (const key of this.files.keys()) {\n if (key.startsWith(srcPrefix)) {\n migrations.push([key, dstPrefix + key.slice(srcPrefix.length)]);\n }\n }\n for (const [oldKey, newKey] of migrations) {\n const content = this.files.get(oldKey);\n if (content !== undefined) {\n this.files.delete(oldKey);\n this.files.set(newKey, content);\n }\n }\n const dirsToMigrate: string[] = [];\n for (const dir of this.dirs) {\n if (dir === srcAbs || dir.startsWith(srcPrefix)) dirsToMigrate.push(dir);\n }\n for (const oldDir of dirsToMigrate) {\n this.dirs.delete(oldDir);\n const newDir = oldDir === srcAbs ? dstAbs : dstPrefix + oldDir.slice(srcPrefix.length);\n this.dirs.add(newDir);\n }\n }\n async chmod(): Promise<void> {\n // In-memory backend has no mode bits — no-op.\n }\n watch(): () => void {\n // No external filesystem to watch — return a no-op closer.\n return () => {};\n }\n async rm(absPath: string, opts?: { recursive?: boolean }): Promise<void> {\n this.files.delete(absPath);\n this.dirs.delete(absPath);\n if (opts?.recursive) {\n const prefix = absPath.endsWith('/') ? absPath : absPath + '/';\n for (const k of [...this.files.keys()]) if (k.startsWith(prefix)) this.files.delete(k);\n for (const d of [...this.dirs]) if (d.startsWith(prefix)) this.dirs.delete(d);\n }\n }\n\n // Test helpers\n getAll(): Map<string, string> {\n return new Map(this.files);\n }\n clear(): void {\n this.files.clear();\n this.dirs.clear();\n }\n}\n","/**\n * Internal SinkManager — fans `WorkspaceWriteEvent` out to every\n * registered `WorkspaceObserver`. A slow / hung observer does not crash\n * the writer; results are collected via `Promise.allSettled`.\n *\n * @packageDocumentation\n */\n\nimport type { WorkspaceObserver, WorkspaceWriteEvent } from '../types.js';\n\nexport class SinkManager {\n private readonly observers: WorkspaceObserver[] = [];\n\n /** Register an observer; returns an unsubscribe function. */\n subscribe(observer: WorkspaceObserver): () => void {\n this.observers.push(observer);\n return () => {\n const i = this.observers.indexOf(observer);\n if (i >= 0) this.observers.splice(i, 1);\n };\n }\n\n /** Snapshot of observer count — useful for diagnostics. */\n get observerCount(): number {\n return this.observers.length;\n }\n\n /**\n * Notify all observers in parallel. Awaits all settlements. A rejected\n * observer is captured in the result; subsequent writes still proceed.\n */\n async notifyAll(event: WorkspaceWriteEvent): Promise<void> {\n if (this.observers.length === 0) return;\n const settled = await Promise.allSettled(\n this.observers.map(async o => o.onWrite(event)),\n );\n for (const r of settled) {\n if (r.status === 'rejected') {\n // Observer failure must not surface as a write failure, but it is\n // useful to keep visible. Console-only so the package stays\n // logger-agnostic.\n const reason = r.reason instanceof Error ? r.reason.message : String(r.reason);\n console.error(`[workspace] observer error on ${event.kind}: ${reason}`);\n }\n }\n }\n}\n","/**\n * Path discipline — every absolute path the service uses is computed here.\n *\n * Consumers never construct paths. Public methods take logical names; the\n * service calls into this module to resolve them. Trusted internal paths\n * (orbital files, session files) use `path.join` directly; sandboxed\n * methods (`readFile` / `writeFile`) go through `sandboxedPath` which\n * rejects traversal.\n *\n * @packageDocumentation\n */\n\nimport path from 'node:path';\n\n/** Single source of truth for workspace directory layout. */\nexport const WORKSPACE_LAYOUT = {\n ALMADAR_DIR: '.almadar',\n ORBITALS_DIR: 'orbitals',\n SESSIONS_DIR: '.almadar/sessions',\n COORDINATOR_DIR: '.almadar/sessions/Coordinator',\n TRACE_FILE: '.almadar/trace.jsonl',\n SCHEMA_FILE: 'schema.orb',\n COMPILED_DIR: 'apps',\n APP_MARKER: '.almadar/app-marker.json',\n USER_MEMORY: '.almadar/user.orb',\n PROJECT_MEMORY: '.almadar/project.orb',\n} as const;\n\n/** Logical orbital name → absolute `.orb` path. */\nexport function orbitalFile(workDir: string, name: string): string {\n return path.join(workDir, WORKSPACE_LAYOUT.ORBITALS_DIR, `${name}.orb`);\n}\n\n/** Archived orbital path. */\nexport function archivedOrbitalFile(workDir: string, name: string): string {\n return path.join(workDir, WORKSPACE_LAYOUT.ORBITALS_DIR, '.archived', `${name}.orb`);\n}\n\n/** Schema (combined output) file. */\nexport function schemaFile(workDir: string): string {\n return path.join(workDir, WORKSPACE_LAYOUT.SCHEMA_FILE);\n}\n\n/** Coordinator session dir. */\nexport function coordinatorDir(workDir: string): string {\n return path.join(workDir, WORKSPACE_LAYOUT.COORDINATOR_DIR);\n}\n\n/** Coordinator-level artifact path. */\nexport function coordinatorFile(workDir: string, basename: string): string {\n return path.join(coordinatorDir(workDir), basename);\n}\n\n/** Per-orbital session dir. */\nexport function orbitalSessionDir(workDir: string, orbital: string): string {\n return path.join(workDir, WORKSPACE_LAYOUT.SESSIONS_DIR, orbital);\n}\n\n/** Per-orbital session-file path. */\nexport function orbitalSessionFile(workDir: string, orbital: string, basename: string): string {\n return path.join(orbitalSessionDir(workDir, orbital), basename);\n}\n\n/** Trace JSONL. */\nexport function traceFile(workDir: string): string {\n return path.join(workDir, WORKSPACE_LAYOUT.TRACE_FILE);\n}\n\n/** Compiled output base. */\nexport function compiledDir(workDir: string): string {\n return path.join(workDir, WORKSPACE_LAYOUT.COMPILED_DIR);\n}\n\n/** Compiled-output path for a given relative key. */\nexport function compiledFile(workDir: string, relPath: string): string {\n return path.join(compiledDir(workDir), relPath);\n}\n\n/** App marker — used internally by the resolver/factory. */\nexport function appMarkerFile(workDir: string): string {\n return path.join(workDir, WORKSPACE_LAYOUT.APP_MARKER);\n}\n\n/** Workspace-level index manifest path. */\nexport function workspaceIndexManifestFile(workDir: string): string {\n return path.join(workDir, WORKSPACE_LAYOUT.ALMADAR_DIR, 'index.json');\n}\n\n/**\n * Resolve a user-supplied relative path within the sandbox. Rejects\n * absolute paths, `..` traversal, and any path that resolves outside\n * `workDir`. Returns the absolute resolved path on success.\n */\nexport function sandboxedPath(workDir: string, relPath: string): string {\n if (typeof relPath !== 'string' || relPath.length === 0) {\n throw new Error('sandbox: empty relative path');\n }\n if (path.isAbsolute(relPath)) {\n throw new Error(`sandbox: absolute paths are not allowed (${relPath})`);\n }\n // Reject Windows-style absolute paths on cross-platform consumers.\n if (/^[a-zA-Z]:[\\\\/]/.test(relPath)) {\n throw new Error(`sandbox: drive-letter paths are not allowed (${relPath})`);\n }\n const rootAbs = path.resolve(workDir);\n const target = path.resolve(rootAbs, relPath);\n if (target !== rootAbs && !target.startsWith(rootAbs + path.sep)) {\n throw new Error(`sandbox: path escapes workspace (${relPath})`);\n }\n return target;\n}\n\n/** Validate an orbital logical name — no path separators, no `..`. */\nexport function assertOrbitalName(name: string): void {\n if (typeof name !== 'string' || name.length === 0) {\n throw new Error('orbital name: empty');\n }\n if (name.includes('/') || name.includes('\\\\') || name === '.' || name === '..') {\n throw new Error(`orbital name: invalid (${name})`);\n }\n}\n","/**\n * Mint-time templates. Written by `openWorkspace` when minting a fresh\n * workspace. Internal — not exported from the package barrel.\n *\n * The shapes follow @almadar/core's `OrbitalSchema` but are kept here as\n * literal JSON so this package has zero dependency on the std memory\n * orbital definitions.\n *\n * @packageDocumentation\n */\n\nimport type { JsonObject } from '@almadar/core';\n\n/** Empty scaffold for a new generation. */\nexport function createSchemaOrbTemplate(name: string): JsonObject {\n return {\n name,\n version: '1.0.0',\n description: '',\n orbitals: [],\n };\n}\n\n/** User preferences template — minimal seed. */\nexport function createUserOrbTemplate(userId: string): JsonObject {\n return {\n name: 'UserMemory',\n version: '1.0.0',\n description: 'User preferences and learned patterns',\n orbitals: [\n {\n name: 'PreferenceTracking',\n entity: {\n name: 'UserPreference',\n fields: [],\n instances: [\n {\n id: `pref-${userId}`,\n userId,\n },\n ],\n },\n traits: [],\n pages: [],\n },\n ],\n };\n}\n\n/** Project context template. */\nexport function createProjectOrbTemplate(projectName: string, appId?: string): JsonObject {\n return {\n name: 'ProjectMemory',\n version: '1.0.0',\n description: `Domain knowledge for ${projectName}`,\n orbitals: [\n {\n name: 'DomainKnowledge',\n entity: {\n name: 'ProjectContext',\n fields: [],\n instances: [\n {\n id: appId ?? `project-${projectName}`,\n appId: appId ?? '',\n projectName,\n lastUpdatedAt: new Date().toISOString(),\n },\n ],\n },\n traits: [],\n pages: [],\n },\n ],\n };\n}\n\nexport function serializeJson(value: JsonObject): string {\n return JSON.stringify(value, null, 2);\n}\n","/**\n * Thin wrapper around local `git` CLI for workspace-local operations\n * (init, add, commit, tag, push, pull, status). No `node:fs` use here —\n * existence checks ride the backend.\n *\n * @packageDocumentation\n */\n\nimport { execFile } from 'node:child_process';\nimport path from 'node:path';\nimport type { WorkspaceBackend } from './types.js';\n\nexport interface GitStatus {\n clean: boolean;\n staged: string[];\n modified: string[];\n untracked: string[];\n}\n\nexport class GitClient {\n constructor(private readonly cwd: string, private readonly backend: WorkspaceBackend) {}\n\n /** Is the working dir already a git repo? */\n async isRepo(): Promise<boolean> {\n return this.backend.exists(path.join(this.cwd, '.git'));\n }\n\n async init(): Promise<void> {\n if (await this.isRepo()) return;\n await this.exec(['init']);\n await this.exec(['config', 'user.email', 'agent@almadar.io']);\n await this.exec(['config', 'user.name', 'Almadar Agent']);\n }\n\n async addAll(): Promise<void> {\n await this.exec(['add', '-A']);\n }\n\n async commit(message: string): Promise<string | null> {\n try {\n const out = await this.exec(['commit', '-m', message, '--allow-empty-message']);\n const match = out.match(/\\[[\\w/.-]+ ([a-f0-9]+)\\]/);\n return match ? match[1] : null;\n } catch (err: unknown) {\n if (err instanceof Error && err.message.includes('nothing to commit')) return null;\n throw err;\n }\n }\n\n async tag(name: string, message?: string): Promise<void> {\n const args = ['tag'];\n if (message) {\n args.push('-a', name, '-m', message);\n } else {\n args.push(name);\n }\n await this.exec(args);\n }\n\n async push(remote = 'origin', branch?: string): Promise<void> {\n const args = ['push', remote];\n if (branch) args.push(branch);\n await this.exec(args);\n }\n\n async pull(remote = 'origin', branch?: string): Promise<void> {\n const args = ['pull', remote];\n if (branch) args.push(branch);\n await this.exec(args);\n }\n\n async hasRemote(remote = 'origin'): Promise<boolean> {\n try {\n const out = await this.exec(['remote']);\n return out.split('\\n').map(s => s.trim()).includes(remote);\n } catch {\n return false;\n }\n }\n\n async addRemote(remote: string, url: string): Promise<void> {\n await this.exec(['remote', 'add', remote, url]);\n }\n\n async status(): Promise<GitStatus> {\n const out = await this.exec(['status', '--porcelain']);\n const lines = out.split('\\n').filter(Boolean);\n const staged: string[] = [];\n const modified: string[] = [];\n const untracked: string[] = [];\n for (const line of lines) {\n const index = line[0];\n const work = line[1];\n const file = line.slice(3);\n if (index === '?' && work === '?') untracked.push(file);\n else if (index !== ' ' && index !== '?') staged.push(file);\n else if (work !== ' ') modified.push(file);\n }\n return { clean: lines.length === 0, staged, modified, untracked };\n }\n\n async headSha(): Promise<string | null> {\n try {\n const out = await this.exec(['rev-parse', 'HEAD']);\n return out.trim() || null;\n } catch {\n return null;\n }\n }\n\n private exec(args: string[]): Promise<string> {\n return execGit(args, this.cwd);\n }\n}\n\nfunction execGit(args: string[], cwd: string): Promise<string> {\n return new Promise((resolve, reject) => {\n execFile('git', args, { cwd, maxBuffer: 10 * 1024 * 1024 }, (err, stdout, stderr) => {\n if (err) {\n const message = stderr?.trim() || stdout?.trim() || err.message;\n reject(new Error(`git ${args[0]}: ${message}`));\n return;\n }\n resolve(stdout);\n });\n });\n}\n","/**\n * Internal lifecycle helpers used by `openWorkspace` on mint/adopt/resume.\n *\n * - Create the workspace directory skeleton.\n * - Write mint-time templates (schema.orb, user.orb, project.orb) if missing.\n * - Initialize git when `github` is supplied.\n *\n * No `node:fs` use here — everything rides the backend.\n *\n * @packageDocumentation\n */\n\nimport path from 'node:path';\nimport type { WorkspaceBackend } from './types.js';\nimport {\n WORKSPACE_LAYOUT,\n coordinatorDir,\n orbitalSessionDir,\n schemaFile,\n} from './path-layout.js';\nimport {\n createSchemaOrbTemplate,\n createUserOrbTemplate,\n createProjectOrbTemplate,\n serializeJson,\n} from './templates.js';\nimport { GitClient } from './git-client.js';\n\n/** Make sure every workspace dir exists. */\nexport async function ensureSkeleton(\n backend: WorkspaceBackend,\n workDir: string,\n): Promise<void> {\n await backend.mkdir(workDir, { recursive: true });\n await backend.mkdir(path.join(workDir, WORKSPACE_LAYOUT.ALMADAR_DIR), { recursive: true });\n await backend.mkdir(path.join(workDir, WORKSPACE_LAYOUT.ORBITALS_DIR), { recursive: true });\n await backend.mkdir(path.join(workDir, WORKSPACE_LAYOUT.SESSIONS_DIR), { recursive: true });\n await backend.mkdir(coordinatorDir(workDir), { recursive: true });\n}\n\n/** Initialise per-orbital session dir lazily. */\nexport async function ensureOrbitalSessionDir(\n backend: WorkspaceBackend,\n workDir: string,\n orbital: string,\n): Promise<void> {\n await backend.mkdir(orbitalSessionDir(workDir, orbital), { recursive: true });\n}\n\n/** Write mint-time templates only when they don't exist. */\nexport async function writeMintTemplatesIfMissing(\n backend: WorkspaceBackend,\n workDir: string,\n userId: string,\n projectName: string,\n appId?: string,\n): Promise<void> {\n const schemaPath = schemaFile(workDir);\n if (!backend.exists(schemaPath)) {\n await backend.writeFile(schemaPath, serializeJson(createSchemaOrbTemplate(projectName)));\n }\n const userPath = path.join(workDir, WORKSPACE_LAYOUT.USER_MEMORY);\n if (!backend.exists(userPath)) {\n await backend.writeFile(userPath, serializeJson(createUserOrbTemplate(userId)));\n }\n const projectPath = path.join(workDir, WORKSPACE_LAYOUT.PROJECT_MEMORY);\n if (!backend.exists(projectPath)) {\n await backend.writeFile(\n projectPath,\n serializeJson(createProjectOrbTemplate(projectName, appId)),\n );\n }\n}\n\n/** Initialise git for the workspace if it isn't already a repo. */\nexport async function ensureGitInit(\n backend: WorkspaceBackend,\n workDir: string,\n): Promise<GitClient> {\n const git = new GitClient(workDir, backend);\n await git.init();\n return git;\n}\n","/**\n * Lifecycle helpers — read + write the per-workspace app marker, and\n * scan a user's workspace root for one that matches a known `appId`.\n *\n * No `node:fs` here — everything rides the backend.\n *\n * @packageDocumentation\n */\n\nimport path from 'node:path';\nimport { randomBytes } from 'node:crypto';\nimport type { JsonObject } from '@almadar/core';\nimport type { WorkspaceBackend, AppMarker } from './types.js';\nimport { appMarkerFile } from './path-layout.js';\n\n/** Synchronous read — used during resolution before the service is built. */\nexport function readAppMarker(backend: WorkspaceBackend, workDir: string): AppMarker | null {\n const markerPath = appMarkerFile(workDir);\n if (!backend.exists(markerPath)) return null;\n try {\n const raw = backend.readFileSync(markerPath);\n const parsed = JSON.parse(raw) as JsonObject;\n if (\n typeof parsed.appId !== 'string'\n || typeof parsed.userId !== 'string'\n || typeof parsed.createdAt !== 'number'\n ) {\n return null;\n }\n const marker: AppMarker = {\n appId: parsed.appId,\n userId: parsed.userId,\n createdAt: parsed.createdAt,\n };\n if (typeof parsed.repoUrl === 'string') marker.repoUrl = parsed.repoUrl;\n return marker;\n } catch {\n return null;\n }\n}\n\n/** Write the marker. Caller ensures the `.almadar/` dir exists. */\nexport async function writeAppMarker(\n backend: WorkspaceBackend,\n workDir: string,\n marker: AppMarker,\n): Promise<void> {\n const markerPath = appMarkerFile(workDir);\n await backend.mkdir(path.dirname(markerPath), { recursive: true });\n await backend.writeFile(markerPath, JSON.stringify(marker, null, 2));\n}\n\n/**\n * Scan `<workspacesRoot>/<userId>/` for a session dir whose\n * `.almadar/app-marker.json` matches `appId`. Returns null on miss.\n */\nexport async function findLocalWorkspaceDir(\n backend: WorkspaceBackend,\n workspacesRoot: string,\n userId: string,\n appId: string,\n): Promise<string | null> {\n const userDir = path.join(workspacesRoot, userId);\n if (!backend.exists(userDir)) return null;\n\n let entries: string[];\n try {\n entries = await backend.readdir(userDir);\n } catch {\n return null;\n }\n\n for (const entry of entries) {\n const sessionDir = path.join(userDir, entry);\n let isDir = false;\n try {\n const s = await backend.stat(sessionDir);\n isDir = s.isDirectory;\n } catch {\n continue;\n }\n if (!isDir) continue;\n const marker = readAppMarker(backend, sessionDir);\n if (marker && marker.appId === appId) return sessionDir;\n }\n return null;\n}\n\n/**\n * Compose a fresh session dir under `<workspacesRoot>/<userId>/`.\n *\n * The suffix combines `Date.now().toString(36)` with 4 hex chars of\n * `crypto.randomBytes` so two concurrent mints in the same millisecond\n * cannot collide on the same path. Without the random tail, two\n * `mintSessionDir` calls in the same ms produced the same path; the\n * subsequent `backend.mkdir(..., { recursive: true })` silently succeeded\n * for both, and two `WorkspaceService` instances ended up pointing at\n * the same directory — observed in apps/builder during concurrent\n * `/analyze` + `/skill/generate-stream` requests.\n */\nexport function mintSessionDir(workspacesRoot: string, userId: string): string {\n const ts = new Date().toISOString().slice(0, 10);\n const suffix = `${Date.now().toString(36)}${randomBytes(2).toString('hex')}`;\n return path.join(workspacesRoot, userId, `${ts}_${suffix}`);\n}\n","/**\n * Restore an empty/missing workspace from a `RestoreBackend`.\n *\n * Used by `openWorkspace` when `opts.appId` is set, the local cache\n * misses, and `opts.restore` is supplied. Writes via the backend (so no\n * `node:fs` here).\n *\n * @packageDocumentation\n */\n\nimport path from 'node:path';\nimport type { RestoreBackend } from '../types.js';\nimport type { WorkspaceBackend } from './types.js';\n\nexport interface RestoreResult {\n filesRestored: number;\n bytesWritten: number;\n}\n\n/** Pull every file the backend knows about and write it under `rootDir`. */\nexport async function restoreWorkspace(\n backend: WorkspaceBackend,\n rootDir: string,\n restore: RestoreBackend,\n): Promise<RestoreResult> {\n const rootAbs = path.resolve(rootDir);\n await backend.mkdir(rootAbs, { recursive: true });\n\n const paths = await restore.listFiles();\n let filesRestored = 0;\n let bytesWritten = 0;\n\n for (const relativePath of paths) {\n const normalised = relativePath.replace(/\\\\/g, '/');\n const target = path.resolve(rootAbs, normalised);\n if (target !== rootAbs && !target.startsWith(rootAbs + path.sep)) {\n // Escape attempt — drop.\n continue;\n }\n const content = await restore.readFile(normalised);\n if (content === null) continue;\n await backend.mkdir(path.dirname(target), { recursive: true });\n await backend.writeFile(target, content);\n filesRestored++;\n bytesWritten += Buffer.byteLength(content, 'utf-8');\n }\n\n return { filesRestored, bytesWritten };\n}\n","/**\n * Memory-file helpers used internally by the service.\n *\n * @packageDocumentation\n */\n\nimport type { JsonObject } from '@almadar/core';\nimport type { WorkspaceBackend } from './types.js';\n\n/**\n * Try to read JSON from `absPath` via the backend. Returns `null` when\n * the file is missing or unparseable.\n */\nexport async function readJsonFile<T extends JsonObject>(\n backend: WorkspaceBackend,\n absPath: string,\n): Promise<T | null> {\n if (!backend.exists(absPath)) return null;\n try {\n const raw = await backend.readFile(absPath);\n return JSON.parse(raw) as T;\n } catch {\n return null;\n }\n}\n\n/**\n * Write a JSON object via the backend with 2-space pretty-printing.\n */\nexport async function writeJsonFile<T extends JsonObject>(\n backend: WorkspaceBackend,\n absPath: string,\n value: T,\n): Promise<void> {\n await backend.writeFile(absPath, JSON.stringify(value, null, 2));\n}\n\n/**\n * Read newline-delimited JSON. Drops malformed lines silently.\n */\nexport async function readJsonLines<T extends JsonObject>(\n backend: WorkspaceBackend,\n absPath: string,\n): Promise<T[]> {\n if (!backend.exists(absPath)) return [];\n try {\n const raw = await backend.readFile(absPath);\n const out: T[] = [];\n for (const line of raw.split('\\n')) {\n if (!line.trim()) continue;\n try {\n out.push(JSON.parse(line) as T);\n } catch {\n // skip malformed\n }\n }\n return out;\n } catch {\n return [];\n }\n}\n\n/**\n * Append a single JSON value as a line. Used for trace + history streams.\n * Caller is responsible for any per-path serialization (the service's\n * write queue handles that).\n */\nexport async function appendJsonLine<T extends JsonObject>(\n backend: WorkspaceBackend,\n absPath: string,\n value: T,\n): Promise<void> {\n const existing = backend.exists(absPath) ? await backend.readFile(absPath) : '';\n const ending = existing.length > 0 && !existing.endsWith('\\n') ? '\\n' : '';\n await backend.writeFile(absPath, existing + ending + JSON.stringify(value) + '\\n');\n}\n","/**\n * Public types for the workspace index — Phase A of\n * `docs/Almadar_Workspace_Index.md`. Identity vectors per orbital and\n * per extraTraits[] entry, used for semantic coercion of LLM-emitted\n * names back to canonical entities (R-10 orbital name drift + R-8\n * duplicate-ref trait drift).\n *\n * @packageDocumentation\n */\n\nimport type { JsonObject } from '@almadar/core';\n\n/** Schema version baked into every sidecar; mismatch triggers re-bake.\n * v1 — identity vector + extraTrait identity vectors only (Phase A).\n * v2 — adds contentVector + contentFingerprint for prompt-narrowing retrieval (Phase B).\n * Existing v1 sidecars get re-baked transparently on next openWorkspace.\n */\nexport const WORKSPACE_INDEX_SCHEMA_VERSION = 2 as const;\n\n/** Default coercion threshold per the doc's locked decision. */\nexport const DEFAULT_COERCION_THRESHOLD = 0.85 as const;\n\n/** RRF fusion constant (Elastic / OpenSearch convention). */\nexport const RRF_K = 60 as const;\n\n/** Default top-K for retrieveOrbitalsForPrompt. */\nexport const DEFAULT_RETRIEVAL_TOP_K = 3 as const;\n\n/**\n * Per-extraTraits[] entry identity vector. Baked alongside the orbital\n * sidecar whenever the orbital's spec.json is written.\n */\nexport interface ExtraTraitIdentity {\n /** Canonical ref of this entry (the key for coercion match). */\n ref: string;\n /** Entry's `name` rename, or trait-name tail of ref if no rename. */\n alias: string;\n /** Fingerprint text actually embedded — kept for debugging. */\n fingerprint: string;\n /** 768-d vector from bge-base-en-v1.5 (or whatever model the embedder uses). */\n vector: readonly number[];\n}\n\n/**\n * Per-orbital sidecar contents, persisted at\n * `.almadar/sessions/<Orbital>/index.json` after every spec write.\n *\n * Two dense vectors per orbital — DIFFERENT compositions, DIFFERENT\n * invalidation cadence, DIFFERENT use:\n *\n * - `identityVector` (Phase A) — small fingerprint over name + entity.\n * Stable across knob edits. Used by `resolveOrbitalName` for R-10\n * coercion.\n * - `contentVector` (Phase B) — richer fingerprint that ALSO folds\n * in every `traitOverrides.*.config.*` value, entityFields[].name,\n * extraTraits[].name + .ref tail, ruleOverlay rule capabilities.\n * Invalidates on every spec edit. Used by\n * `retrieveOrbitalsForPrompt` to rank orbitals against the user's\n * edit-prompt language.\n */\nexport interface OrbitalIndexEntry {\n schemaVersion: typeof WORKSPACE_INDEX_SCHEMA_VERSION;\n /** sha256 of the spec.json that produced this sidecar. */\n specChecksum: string;\n /** Orbital-level identity vector (Phase A — R-10 coercion). */\n identityVector: readonly number[];\n /** Fingerprint text for the orbital identity vector — kept for debugging. */\n identityFingerprint: string;\n /** Orbital-level content vector (Phase B — prompt narrowing). */\n contentVector: readonly number[];\n /** Fingerprint text for the content vector — kept for debugging. */\n contentFingerprint: string;\n /** One per current `extraTraits[]` entry on this orbital. */\n extraTraitIdentities: readonly ExtraTraitIdentity[];\n /** Epoch ms at bake time — debugging only. */\n bakedAt: number;\n}\n\n/**\n * Input to `resolveTraitRef` — the LLM's emitted extraTraits entry,\n * narrowed to the fields the coercion needs to see. Mirrors the\n * `RawExtraTraitRef` shape rabit's analyzer constructs.\n */\nexport interface TraitRefEmit {\n ref: string;\n name?: string;\n linkedEntity?: string;\n}\n\n/**\n * Common result shape for both `resolveOrbitalName` and\n * `resolveTraitRef`. `coercedTo` is null when no existing entity\n * exceeded the threshold — the emit is genuinely new.\n */\nexport interface ResolveResult {\n coercedTo: string | null;\n similarity: number;\n method: 'identity-vector';\n}\n\n/**\n * Options for both `resolveOrbitalName` and `resolveTraitRef`. The\n * default threshold (0.85) lives in `DEFAULT_COERCION_THRESHOLD`.\n */\nexport interface ResolveOptions {\n threshold?: number;\n}\n\n/**\n * Stats surface for diagnostics. Cheap to compute (read in-memory\n * state).\n */\nexport interface WorkspaceIndexStats {\n orbitalCount: number;\n extraTraitIdentityCount: number;\n staleOrbitals: readonly string[];\n}\n\n/**\n * Public surface exposed via `WorkspaceService.index`.\n */\nexport interface WorkspaceIndex {\n /**\n * Walk every existing orbital, bake any missing or stale sidecars.\n * Called synchronously by `openWorkspace` (strict cold start per the\n * doc decision) so this is the authoritative point past which all\n * subsequent queries return real data. Idempotent — re-baking an\n * already-warm sidecar is a no-op (checksum matches).\n */\n warm(): Promise<void>;\n\n /**\n * R-10 coercion. Embed `name`, cosine-match against every orbital's\n * identity vector, return the best match if it exceeds the\n * threshold. Returns `{ coercedTo: null, ... }` when below threshold\n * or when no orbitals exist in the workspace.\n */\n resolveOrbitalName(name: string, opts?: ResolveOptions): Promise<ResolveResult>;\n\n /**\n * R-8 coercion. Embed an LLM-emitted trait emit, cosine-match against\n * the existing `extraTraits[]` identity vectors on the named orbital.\n * Returns the existing entry's `ref` (or its `name` rename) as\n * `coercedTo` when match exceeds threshold; null when the emit is a\n * genuinely new addition.\n *\n * Scoped per orbital — the same trait import on two different orbitals\n * is structurally legitimate, so we don't cross-coerce.\n */\n resolveTraitRef(\n emit: TraitRefEmit,\n orbitalContext: { orbitalName: string },\n opts?: ResolveOptions,\n ): Promise<ResolveResult>;\n\n /**\n * Phase B — RRF-hybrid prompt retrieval. Embed the prompt, run sparse\n * BM25 against the workspace token table, fuse via Reciprocal Rank\n * Fusion (k=60), return top-K orbitals with explainability fields.\n */\n retrieveOrbitalsForPrompt(\n prompt: string,\n opts?: RetrievalOptions,\n ): Promise<readonly RetrievalResult[]>;\n\n /** Phase B — sparse-only escape hatch. Tokenizes `query` and returns orbitals containing any term. */\n findByToken(query: string): readonly string[];\n\n // ── Phase C — graph queries (all O(1) hash lookups; sync) ─────────────────\n\n /** Orbitals + traits whose state machine listens for `event`. */\n orbitalsListeningTo(event: string): readonly EventEdge[];\n\n /** Orbitals + traits whose state machine emits `event`. */\n orbitalsEmitting(event: string): readonly EventEdge[];\n\n /**\n * Orbitals linked to `entity` — both composed (from the resolved\n * schema.orb) and override-intent (from spec.json `linkedEntity`).\n */\n orbitalsLinkedToEntity(entity: string): readonly EntityBinding[];\n\n /** Orbitals importing the trait at `refPath` via extraTraits[]. */\n extraTraitImporters(refPath: string): readonly string[];\n\n /**\n * Every event name currently appearing in the composed schema as an\n * emit or listen edge. Lets consumers feed each name back into\n * `orbitalsEmitting` / `orbitalsListeningTo` to derive cross-orbital\n * reactivity hints without holding a copy of the composed map.\n */\n composedEvents(): readonly string[];\n\n /**\n * Every entity name currently bound by the composed schema or by spec\n * overrides. Lets consumers feed each name back into\n * `orbitalsLinkedToEntity` without enumerating the composed map.\n */\n composedEntities(): readonly string[];\n\n /**\n * Every trait `refPath` currently imported via `extraTraits[]` across\n * the workspace's per-orbital spec.json files. Lets consumers feed\n * each back into `extraTraitImporters` for importer-set hints.\n */\n composedTraitRefPaths(): readonly string[];\n\n /** Rules applied to `entity` via spec.json ruleOverlay.rules[]. */\n rulesAppliedTo(entity: string): readonly RuleBinding[];\n\n /**\n * Orbitals edited within the last N turns (per\n * params-history.jsonl). Ordered newest-first.\n */\n recentlyEdited(opts?: RecentlyEditedOptions): readonly string[];\n\n /** Diagnostics surface. */\n stats(): WorkspaceIndexStats;\n}\n\n/**\n * Pluggable embedder — production wires `@almadar/llm`'s\n * `EmbeddingClient`; tests inject a deterministic mock.\n */\nexport interface EmbedderPort {\n /** Embed a batch of texts; returned vectors are in input order. */\n embedBatch(texts: readonly string[]): Promise<{\n embeddings: readonly (readonly number[])[];\n }>;\n}\n\n/**\n * JSON shape persisted at `.almadar/sessions/<Orbital>/index.json`.\n * Mirrors `OrbitalIndexEntry` but with the JsonObject upper-bound the\n * workspace's writeJsonFile helper requires.\n */\nexport type OrbitalIndexSidecar = OrbitalIndexEntry & JsonObject;\n\n// ============================================================================\n// Phase B — token / sparse BM25 index (workspace-level)\n// ============================================================================\n\n/**\n * One orbital's tokenization row inside the BM25 table. `docLen` is the\n * full token count (with repeats) — BM25's length normalization needs\n * it. `termFreq` is the per-term count for cosine/IDF math.\n */\nexport interface BM25Document {\n orbital: string;\n termFreq: Readonly<Record<string, number>>;\n docLen: number;\n}\n\n/**\n * Workspace-level inverted-index payload. Persisted inside the index\n * manifest at `.almadar/index.json`. Rebuilt incrementally per\n * orbital — `documents` is the row store keyed by orbitalName.\n */\nexport interface BM25Table {\n /** Per-orbital tokenization row. */\n documents: Readonly<Record<string, BM25Document>>;\n /**\n * Document frequency — count of orbitals containing each term.\n * Recomputed whenever `documents` changes (cheap; tens of orbitals).\n */\n docFreq: Readonly<Record<string, number>>;\n /** Number of orbitals indexed (`Object.keys(documents).length`). */\n docCount: number;\n /** Sum(docLen) / docCount — BM25 needs this for length normalization. */\n avgDocLen: number;\n}\n\n/** BM25 query options (Elastic defaults). */\nexport interface BM25Options {\n k1?: number; // default 1.5\n b?: number; // default 0.75\n}\n\n// ============================================================================\n// Phase B — retrieval (`retrieveOrbitalsForPrompt`)\n// ============================================================================\n\nexport interface RetrievalOptions {\n topK?: number; // default DEFAULT_RETRIEVAL_TOP_K (3)\n rrfK?: number; // default RRF_K (60)\n bm25?: BM25Options;\n}\n\nexport interface RetrievalResult {\n orbitalName: string;\n /** RRF-fused score, monotonically decreasing across the returned array. */\n score: number;\n /**\n * Tokens from the prompt that matched the orbital's BM25 row.\n * Empty when this orbital surfaced via the dense leg only.\n */\n matchedTokens: readonly string[];\n /**\n * Domain knob keys (and their values) from the orbital's spec that the\n * dense leg surfaced. Heuristic: knobs whose RENDERED text appears in\n * the orbital's content fingerprint AND in the prompt verbatim.\n * Empty when this orbital surfaced via the sparse leg only.\n */\n matchedKnobs: readonly string[];\n /** 1-based rank within the dense ranking; `null` if not in the top-N dense list. */\n rankByDense: number | null;\n /** 1-based rank within the sparse ranking; `null` if not in the top-N sparse list. */\n rankBySparse: number | null;\n}\n\n// ============================================================================\n// Phase C — graph indexes\n// ============================================================================\n\n/** One emit/listen edge surfaced by the composed schema.orb. */\nexport interface EventEdge {\n orbital: string;\n trait: string;\n state?: string;\n role: 'emit' | 'listen';\n scope?: 'internal' | 'external';\n}\n\n/** One orbital→entity binding surfaced by either the composed schema or the user/agent's override intent. */\nexport interface EntityBinding {\n orbital: string;\n trait: string;\n source: 'composed' | 'override';\n}\n\n/** Rule applied to an entity, derived from spec.json ruleOverlay. */\nexport interface RuleBinding {\n orbital: string;\n entityName: string;\n capability: string;\n}\n\n/**\n * Per-orbital recency entry. `turn` is monotonic across the workspace\n * (rabit increments it on every coordinator turn). `lastChange` is\n * epoch ms of the most recent params-history append.\n */\nexport interface RecencyEntry {\n recencyTurn: number;\n lastChange: number;\n}\n\n/**\n * Maps derived ONLY from per-orbital spec.json. Rebuilt on each\n * `kind: 'spec'` write for the affected orbital.\n */\nexport interface IntentMaps {\n /** `entity_name → orbitals overriding linkedEntity`. */\n entityNameOverrides: Readonly<Record<string, readonly EntityBinding[]>>;\n /** `trait_ref_path → orbitals importing the trait`. */\n traitRefImporters: Readonly<Record<string, readonly string[]>>;\n /** `rule_capability → orbital-rule bindings`. */\n ruleCapabilities: Readonly<Record<string, readonly RuleBinding[]>>;\n /** `organism → orbitals`. */\n organism: Readonly<Record<string, readonly string[]>>;\n}\n\n/**\n * Maps derived ONLY from the composed schema.orb. Rebuilt on each\n * `kind: 'schema'` write.\n */\nexport interface ComposedMaps {\n /** `event_name → emit/listen edges`. */\n events: Readonly<Record<string, readonly EventEdge[]>>;\n /** `entity_name → composed entity bindings`. */\n entityNameComposed: Readonly<Record<string, readonly EntityBinding[]>>;\n}\n\n/**\n * Workspace-level manifest — combines BM25 table + intent maps + composed\n * maps + recency. Persisted at `.almadar/index.json` and emitted via\n * `WorkspaceWriteEvent.kind === 'workspace-index-manifest'` so consumer\n * mirrors (apps/builder's Firestore observer) pick it up.\n */\nexport interface WorkspaceIndexManifest {\n schemaVersion: typeof WORKSPACE_INDEX_SCHEMA_VERSION;\n bm25: BM25Table;\n intent: IntentMaps;\n composed: ComposedMaps;\n recency: Readonly<Record<string, RecencyEntry>>;\n /** Epoch ms at last manifest write — debugging only. */\n bakedAt: number;\n}\n\n/** JSON-persisted shape (intersection with JsonObject upper bound). */\nexport type WorkspaceIndexManifestSidecar = WorkspaceIndexManifest & JsonObject;\n\n// ============================================================================\n// Phase C — temporal recency\n// ============================================================================\n\nexport interface RecentlyEditedOptions {\n /** Return orbitals edited within the last N turns. Default: 5. */\n withinTurns?: number;\n}\n","/**\n * Cosine similarity. Defensive: zero-vector and length-mismatch\n * return 0 instead of throwing or returning NaN — a malformed manifest\n * entry shouldn't crash the index.\n *\n * @packageDocumentation\n */\n\nexport function cosineSimilarity(\n a: readonly number[],\n b: readonly number[],\n): number {\n if (a.length !== b.length || a.length === 0) return 0;\n let dot = 0;\n let magA = 0;\n let magB = 0;\n for (let i = 0; i < a.length; i++) {\n const av = a[i] ?? 0;\n const bv = b[i] ?? 0;\n dot += av * bv;\n magA += av * av;\n magB += bv * bv;\n }\n if (magA === 0 || magB === 0) return 0;\n return dot / (Math.sqrt(magA) * Math.sqrt(magB));\n}\n","/**\n * Fingerprint composition — pure functions that turn typed spec state\n * into the short text strings the embedder hashes.\n *\n * Per the doc, orbital identity vectors stay small (~50-100 tokens)\n * so they're stable under spec edits, while content/extraTrait\n * fingerprints can grow more.\n *\n * @packageDocumentation\n */\n\nimport type { JsonObject, JsonValue } from '@almadar/core';\n\n/**\n * Compose the orbital identity fingerprint from a spec.\n *\n * Pulls these typed fields off the spec (all optional — when missing\n * the segment is omitted, never `undefined` interpolated):\n * - `orbitalName` (top-level on spec) — the discriminating signal\n * - `params.entityName` — boosts cosine when the name drifts but the\n * entity stays (e.g. `VisitOrbital` → `VisitV2Orbital`, same entity)\n *\n * The `organism` is intentionally OMITTED: every orbital in an app\n * shares it (`std-record-modal` across an entire CRUD app), so\n * including it dominates the cosine and makes unrelated orbital\n * names look similar (real-embedder spec showed `InvoiceOrbital ·\n * Invoice · std-record-modal` matching `ProductOrbital` above the\n * 0.85 threshold). Keeping the fingerprint name+entity-only sharpens\n * the geometry for R-10 coercion.\n *\n * The output is a single string with ` · ` separators.\n */\nexport function composeOrbitalIdentityFingerprint(\n spec: JsonObject,\n): string {\n const segments: string[] = [];\n pushString(segments, spec['orbitalName']);\n const params = asJsonObject(spec['params']);\n if (params) {\n pushString(segments, params['entityName']);\n }\n return segments.join(' · ');\n}\n\n/**\n * Compose the per-extraTraits[] entry fingerprint.\n *\n * Used both at bake time (for the sidecar's extraTraitIdentities[])\n * and at query time (for the LLM-emitted entry being coerced). The\n * shape MUST be identical on both sides so cosine geometry is\n * meaningful — same fields in the same order.\n */\nexport function composeExtraTraitIdentityFingerprint(emit: {\n ref: string;\n name?: string;\n linkedEntity?: string;\n}): string {\n const segments: string[] = [];\n pushString(segments, emit.ref);\n // Emit the alias explicitly so the embedder sees \"ProductAccessControl\n // for RowAccessGate\" — not just the ref.\n const alias = emit.name && emit.name.length > 0 ? emit.name : tailOfRef(emit.ref);\n if (alias && alias !== emit.ref) {\n pushString(segments, alias);\n }\n pushString(segments, emit.linkedEntity);\n return segments.join(' · ');\n}\n\n/**\n * Derive the alias an entry would canonically be referenced by. Used by\n * the sidecar baker to store the `alias` field next to each extraTrait\n * identity vector — also the value `resolveTraitRef` returns as\n * `coercedTo` when a match fires.\n */\nexport function deriveExtraTraitAlias(emit: { ref: string; name?: string }): string {\n if (emit.name && emit.name.length > 0) return emit.name;\n return tailOfRef(emit.ref);\n}\n\n/**\n * Compose the orbital CONTENT fingerprint from a spec — the richer\n * text the retrieval system embeds for prompt narrowing.\n *\n * Starts from the identity fingerprint then folds in every\n * user-meaningful signal the spec carries:\n * - traitOverrides keys (the trait names being customized)\n * - traitOverrides.*.config.* values (the actual customizations\n * — discount percentages, labels, button text, chart types, etc.)\n * - entityFields[].name (the user's domain vocabulary)\n * - extraTraits[].name + tail-of-ref (added capabilities)\n * - ruleOverlay.rules[].capability values (compliance/audit signals)\n *\n * Order matters for token-position effects: identity first (so the\n * embedder weights it heaviest), then the config values (the \"what\n * does it DO\" signal), then entity + extra + rule tags.\n *\n * Per the design doc this is intentionally not catalog-filtered by\n * `@tier === 'domain'` — that would require an @almadar/std dep from\n * inside the workspace package. If retrieval-quality eval shows\n * noise from internal-tier knobs polluting the fingerprint, the\n * fix lands in a follow-up that brings the catalog metadata into\n * reach (see plan B-Wave 0 notes).\n */\nexport function composeOrbitalContentFingerprint(spec: JsonObject): string {\n const segments: string[] = [composeOrbitalIdentityFingerprint(spec)];\n const params = asJsonObject(spec['params']);\n if (params) {\n const traitOverrides = asJsonObject(params['traitOverrides']);\n if (traitOverrides) {\n for (const trait of Object.keys(traitOverrides).sort()) {\n segments.push(trait);\n const override = asJsonObject(traitOverrides[trait]);\n if (!override) continue;\n const config = asJsonObject(override['config']);\n if (!config) continue;\n for (const knob of Object.keys(config).sort()) {\n const rendered = renderKnobValue(config[knob]);\n if (rendered.length > 0) segments.push(`${trait}.${knob}: ${rendered}`);\n }\n }\n }\n const fields = params['entityFields'];\n if (Array.isArray(fields)) {\n const names: string[] = [];\n for (const f of fields) {\n const obj = asJsonObject(f);\n if (obj && typeof obj['name'] === 'string') names.push(obj['name']);\n }\n if (names.length > 0) segments.push(names.join(', '));\n }\n const extras = params['extraTraits'];\n if (Array.isArray(extras)) {\n const labels: string[] = [];\n for (const e of extras) {\n const obj = asJsonObject(e);\n if (!obj) continue;\n const ref = typeof obj['ref'] === 'string' ? obj['ref'] : null;\n const name = typeof obj['name'] === 'string' ? obj['name'] : null;\n const label = name && name.length > 0 ? name : (ref ? tailOfRef(ref) : null);\n if (label) labels.push(label);\n }\n if (labels.length > 0) segments.push(labels.join(', '));\n }\n const ruleOverlay = asJsonObject(params['ruleOverlay']);\n if (ruleOverlay) {\n const rules = ruleOverlay['rules'];\n if (Array.isArray(rules)) {\n const caps: string[] = [];\n for (const r of rules) {\n const obj = asJsonObject(r);\n if (obj && typeof obj['capability'] === 'string') caps.push(obj['capability']);\n }\n if (caps.length > 0) segments.push(caps.join(', '));\n }\n }\n }\n return segments.filter((s) => s.length > 0).join(' · ');\n}\n\n/**\n * Stringify one JSON value at the granularity the embedder cares about.\n * Strings and primitives go as-is. Small arrays of primitives flatten\n * to comma-separated. Anything deeper or larger gets squashed to\n * empty — the embedder doesn't benefit from arbitrarily nested JSON,\n * and that level of detail belongs in the structural graph (Phase C),\n * not in the semantic-similarity surface.\n */\nfunction renderKnobValue(value: JsonValue | undefined): string {\n if (value === undefined || value === null) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (Array.isArray(value)) {\n const parts: string[] = [];\n for (const entry of value) {\n if (typeof entry === 'string') parts.push(entry);\n else if (typeof entry === 'number' || typeof entry === 'boolean') parts.push(String(entry));\n }\n return parts.join(', ');\n }\n return '';\n}\n\nfunction pushString(out: string[], value: JsonValue | undefined): void {\n if (typeof value === 'string' && value.length > 0) out.push(value);\n}\n\nfunction asJsonObject(value: JsonValue | undefined): JsonObject | null {\n if (value === undefined || value === null) return null;\n if (typeof value !== 'object' || Array.isArray(value)) return null;\n return value;\n}\n\nfunction tailOfRef(ref: string): string {\n const match = /\\.traits\\.([A-Za-z0-9_]+)$/.exec(ref);\n return match ? match[1] : ref;\n}\n","/**\n * Sidecar I/O for per-orbital index entries.\n *\n * Reuses the workspace package's existing typed file helpers\n * (`readJsonFile` + `writeJsonFile`) and path layout\n * (`orbitalSessionFile`). No parallel file plumbing; no parallel path\n * math.\n *\n * @packageDocumentation\n */\n\nimport { createHash } from 'node:crypto';\nimport type { JsonObject } from '@almadar/core';\nimport type { WorkspaceBackend } from '../internal/types.js';\nimport { orbitalSessionFile } from '../internal/path-layout.js';\nimport { readJsonFile, writeJsonFile } from '../internal/memory-files.js';\nimport { ensureOrbitalSessionDir } from '../internal/workspace-manager.js';\nimport type { OrbitalIndexEntry, OrbitalIndexSidecar } from './types.js';\nimport { WORKSPACE_INDEX_SCHEMA_VERSION } from './types.js';\n\nconst SIDECAR_BASENAME = 'index.json';\n\nexport function sidecarPath(workDir: string, orbital: string): string {\n return orbitalSessionFile(workDir, orbital, SIDECAR_BASENAME);\n}\n\nexport async function readSidecar(\n backend: WorkspaceBackend,\n workDir: string,\n orbital: string,\n): Promise<OrbitalIndexEntry | null> {\n const raw = await readJsonFile<OrbitalIndexSidecar>(backend, sidecarPath(workDir, orbital));\n if (raw === null) return null;\n if (raw.schemaVersion !== WORKSPACE_INDEX_SCHEMA_VERSION) return null;\n return raw;\n}\n\nexport async function writeSidecar(\n backend: WorkspaceBackend,\n workDir: string,\n orbital: string,\n entry: OrbitalIndexEntry,\n): Promise<void> {\n await ensureOrbitalSessionDir(backend, workDir, orbital);\n // Cast through JsonObject is safe — OrbitalIndexEntry's shape only\n // contains primitives + arrays of primitives + arrays of objects whose\n // fields are likewise json-compatible. The structural compatibility is\n // captured by the OrbitalIndexSidecar intersection type.\n await writeJsonFile<OrbitalIndexSidecar>(\n backend,\n sidecarPath(workDir, orbital),\n entry as OrbitalIndexSidecar,\n );\n}\n\n/**\n * SHA-256 over the JSON-stringified spec — the same content the\n * sidecar's embeddings were computed from. Used to detect stale\n * sidecars (spec changed since last bake → re-bake).\n */\nexport function checksumSpec(spec: JsonObject): string {\n return createHash('sha256').update(JSON.stringify(spec)).digest('hex');\n}\n","/**\n * BM25 sparse retrieval — Phase B of the workspace-index.\n *\n * Tokenizes per-orbital spec.json into the term list the table indexes,\n * builds a workspace-level inverted index, and scores free-form queries\n * against it. Pure functions; no I/O.\n *\n * @packageDocumentation\n */\n\nimport type { JsonObject, JsonValue } from '@almadar/core';\nimport type { BM25Document, BM25Table, BM25Options } from './types.js';\n\n/** Tokenize one spec.json into the set of terms BM25 indexes. */\nexport function tokenizeSpec(spec: JsonObject): readonly string[] {\n const tokens: string[] = [];\n pushTokens(tokens, spec['orbitalName']);\n const params = asJsonObject(spec['params']);\n if (params) {\n pushTokens(tokens, params['entityName']);\n\n const fields = params['entityFields'];\n if (Array.isArray(fields)) {\n for (const f of fields) {\n const obj = asJsonObject(f);\n if (obj) pushTokens(tokens, obj['name']);\n }\n }\n\n const extras = params['extraTraits'];\n if (Array.isArray(extras)) {\n for (const e of extras) {\n const obj = asJsonObject(e);\n if (!obj) continue;\n pushTokens(tokens, obj['name']);\n const ref = obj['ref'];\n if (typeof ref === 'string') {\n pushTokens(tokens, tailOfRef(ref));\n }\n }\n }\n\n const pages = params['pages'];\n if (Array.isArray(pages)) {\n for (const p of pages) {\n const obj = asJsonObject(p);\n if (!obj) continue;\n const path = obj['path'];\n if (typeof path === 'string') pushTokens(tokens, path);\n }\n }\n\n const ruleOverlay = asJsonObject(params['ruleOverlay']);\n if (ruleOverlay) {\n const rules = ruleOverlay['rules'];\n if (Array.isArray(rules)) {\n for (const r of rules) {\n const obj = asJsonObject(r);\n if (obj) pushTokens(tokens, obj['capability']);\n }\n }\n }\n\n const traitOverrides = asJsonObject(params['traitOverrides']);\n if (traitOverrides) {\n for (const trait of Object.keys(traitOverrides)) {\n pushTokens(tokens, trait);\n const override = asJsonObject(traitOverrides[trait]);\n if (!override) continue;\n const config = asJsonObject(override['config']);\n if (!config) continue;\n for (const knob of Object.keys(config)) {\n pushPrimitiveValue(tokens, config[knob]);\n }\n }\n }\n }\n return tokens;\n}\n\n/** Build the workspace BM25 table from per-orbital token lists. */\nexport function buildBM25Table(\n tokensPerOrbital: Readonly<Record<string, readonly string[]>>,\n): BM25Table {\n const documents: Record<string, BM25Document> = {};\n const docFreq: Record<string, number> = {};\n let totalLen = 0;\n const orbitals = Object.keys(tokensPerOrbital);\n for (const orbital of orbitals) {\n const list = tokensPerOrbital[orbital] ?? [];\n const termFreq: Record<string, number> = {};\n for (const t of list) {\n termFreq[t] = (termFreq[t] ?? 0) + 1;\n }\n const docLen = list.length;\n totalLen += docLen;\n documents[orbital] = { orbital, termFreq, docLen };\n for (const term of Object.keys(termFreq)) {\n docFreq[term] = (docFreq[term] ?? 0) + 1;\n }\n }\n const docCount = orbitals.length;\n const avgDocLen = docCount > 0 ? totalLen / docCount : 0;\n return { documents, docFreq, docCount, avgDocLen };\n}\n\n/** Score every orbital in `table` against a free-form query string. */\nexport function queryBM25(\n table: BM25Table,\n query: string,\n opts?: BM25Options,\n): readonly {\n orbital: string;\n score: number;\n matchedTokens: readonly string[];\n}[] {\n const k1 = opts?.k1 ?? 1.5;\n const b = opts?.b ?? 0.75;\n const queryTokensRaw = tokenize(query);\n if (queryTokensRaw.length === 0) return [];\n const uniqueQueryTokens = Array.from(new Set(queryTokensRaw));\n const { documents, docFreq, docCount, avgDocLen } = table;\n if (docCount === 0 || avgDocLen === 0) return [];\n\n const results: { orbital: string; score: number; matchedTokens: readonly string[] }[] = [];\n for (const orbital of Object.keys(documents)) {\n const doc = documents[orbital];\n if (!doc) continue;\n let score = 0;\n const matched: string[] = [];\n for (const qt of uniqueQueryTokens) {\n const tf = doc.termFreq[qt] ?? 0;\n if (tf === 0) continue;\n const df = docFreq[qt] ?? 0;\n const idf = Math.log1p((docCount - df + 0.5) / (df + 0.5));\n const norm = tf + k1 * (1 - b + (b * doc.docLen) / avgDocLen);\n const contribution = (idf * tf * (k1 + 1)) / norm;\n if (contribution > 0) {\n score += contribution;\n matched.push(qt);\n }\n }\n if (score > 0) results.push({ orbital, score, matchedTokens: matched });\n }\n results.sort((a, b2) => b2.score - a.score);\n return results;\n}\n\n// ──────────────────────────────────────────────────────────────────────\n// Private helpers — same normalization on both bake and query sides.\n// ──────────────────────────────────────────────────────────────────────\n\nfunction tokenize(text: string): string[] {\n if (text.length === 0) return [];\n const out: string[] = [];\n const pieces = text.split(/[\\s_\\-/.:]+/u);\n for (const piece of pieces) {\n if (piece.length === 0) continue;\n const lower = piece.toLowerCase();\n if (lower.length >= 2) out.push(lower);\n const parts = splitCamel(piece);\n if (parts.length > 1) {\n for (const part of parts) {\n const p = part.toLowerCase();\n if (p.length >= 2) out.push(p);\n }\n }\n }\n return out;\n}\n\nfunction splitCamel(s: string): string[] {\n return s.split(/(?<=[a-z0-9])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/u);\n}\n\nfunction pushTokens(out: string[], value: JsonValue | undefined): void {\n if (typeof value !== 'string' || value.length === 0) return;\n for (const t of tokenize(value)) out.push(t);\n}\n\nfunction pushPrimitiveValue(out: string[], value: JsonValue | undefined): void {\n if (value === undefined || value === null) return;\n if (typeof value === 'string') {\n for (const t of tokenize(value)) out.push(t);\n return;\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n for (const t of tokenize(String(value))) out.push(t);\n return;\n }\n if (Array.isArray(value)) {\n for (const entry of value) pushPrimitiveValue(out, entry);\n }\n}\n\nfunction asJsonObject(value: JsonValue | undefined): JsonObject | null {\n if (value === undefined || value === null) return null;\n if (typeof value !== 'object' || Array.isArray(value)) return null;\n return value;\n}\n\nfunction tailOfRef(ref: string): string {\n const match = /\\.traits\\.([A-Za-z0-9_]+)$/.exec(ref);\n return match ? match[1] : ref;\n}\n","/**\n * Reciprocal Rank Fusion — combines arbitrary rankings into a single\n * stable order. Key-agnostic; the workspace index uses orbital names.\n *\n * @packageDocumentation\n */\n\nimport { RRF_K } from './types.js';\n\nexport interface RRFRankInput<TKey extends string> {\n rankings: ReadonlyArray<readonly TKey[]>;\n}\n\nexport interface RRFResult<TKey extends string> {\n key: TKey;\n score: number;\n /** 1-based rank per input ranking; null when the key was absent from that ranking. */\n ranks: readonly (number | null)[];\n}\n\n/** Reciprocal Rank Fusion. `k` defaults to `RRF_K` (60). */\nexport function rrfFuse<TKey extends string>(\n rankings: ReadonlyArray<readonly TKey[]>,\n k: number = RRF_K,\n): readonly RRFResult<TKey>[] {\n if (rankings.length === 0) return [];\n const order: TKey[] = [];\n const seen = new Set<TKey>();\n // Track first-appearance order across rankings for stable tie-break.\n for (const ranking of rankings) {\n for (const key of ranking) {\n if (!seen.has(key)) {\n seen.add(key);\n order.push(key);\n }\n }\n }\n const ranksByKey = new Map<TKey, (number | null)[]>();\n const scoreByKey = new Map<TKey, number>();\n for (const key of order) {\n ranksByKey.set(\n key,\n rankings.map(() => null),\n );\n scoreByKey.set(key, 0);\n }\n for (let i = 0; i < rankings.length; i++) {\n const ranking = rankings[i];\n if (!ranking) continue;\n for (let j = 0; j < ranking.length; j++) {\n const key = ranking[j];\n if (key === undefined) continue;\n const rank = j + 1;\n const ranks = ranksByKey.get(key);\n if (ranks) ranks[i] = rank;\n scoreByKey.set(key, (scoreByKey.get(key) ?? 0) + 1 / (k + rank));\n }\n }\n const indexed = order.map((key, idx) => ({\n key,\n idx,\n score: scoreByKey.get(key) ?? 0,\n ranks: ranksByKey.get(key) ?? [],\n }));\n indexed.sort((a, b) => {\n if (b.score !== a.score) return b.score - a.score;\n return a.idx - b.idx;\n });\n return indexed.map(({ key, score, ranks }) => ({ key, score, ranks }));\n}\n","/**\n * Graph builders — Phase C of the workspace-index.\n *\n * Pure walkers over typed inputs (spec.json batches, composed\n * schema.orb text, params-history rows) that produce the hash-lookup\n * maps the public Phase C surface serves.\n *\n * @packageDocumentation\n */\n\nimport type { JsonObject, JsonValue } from '@almadar/core';\nimport type {\n ComposedMaps,\n EntityBinding,\n EventEdge,\n IntentMaps,\n RecencyEntry,\n RuleBinding,\n} from './types.js';\n\n/** Per-orbital spec.json walker — derives the four intent maps. */\nexport function buildIntentMaps(specs: Readonly<Record<string, JsonObject>>): IntentMaps {\n const entityNameOverrides: Record<string, EntityBinding[]> = {};\n const traitRefImporters: Record<string, string[]> = {};\n const ruleCapabilities: Record<string, RuleBinding[]> = {};\n const organism: Record<string, string[]> = {};\n\n const orbitalNames = Object.keys(specs).sort();\n for (const orbital of orbitalNames) {\n const spec = specs[orbital];\n if (!spec) continue;\n\n const organismName = typeof spec['organism'] === 'string' ? spec['organism'] : null;\n if (organismName && organismName.length > 0) {\n (organism[organismName] ??= []).push(orbital);\n }\n\n const params = asJsonObject(spec['params']);\n if (!params) continue;\n const defaultEntity = typeof params['entityName'] === 'string' ? params['entityName'] : null;\n\n const traitOverrides = asJsonObject(params['traitOverrides']);\n if (traitOverrides) {\n for (const trait of Object.keys(traitOverrides).sort()) {\n const override = asJsonObject(traitOverrides[trait]);\n if (!override) continue;\n const linked = override['linkedEntity'];\n if (typeof linked === 'string' && linked.length > 0) {\n (entityNameOverrides[linked] ??= []).push({\n orbital,\n trait,\n source: 'override',\n });\n }\n }\n }\n\n const extras = params['extraTraits'];\n if (Array.isArray(extras)) {\n for (const e of extras) {\n const obj = asJsonObject(e);\n if (!obj) continue;\n const ref = obj['ref'];\n if (typeof ref === 'string' && ref.length > 0) {\n (traitRefImporters[ref] ??= []).push(orbital);\n }\n }\n }\n\n const ruleOverlay = asJsonObject(params['ruleOverlay']);\n if (ruleOverlay) {\n const rules = ruleOverlay['rules'];\n if (Array.isArray(rules)) {\n for (const r of rules) {\n const obj = asJsonObject(r);\n if (!obj) continue;\n const capability = obj['capability'];\n if (typeof capability !== 'string' || capability.length === 0) continue;\n const entityName = typeof obj['entityName'] === 'string' && obj['entityName'].length > 0\n ? obj['entityName']\n : defaultEntity;\n if (!entityName) continue;\n (ruleCapabilities[capability] ??= []).push({\n orbital,\n entityName,\n capability,\n });\n }\n }\n }\n }\n\n return { entityNameOverrides, traitRefImporters, ruleCapabilities, organism };\n}\n\n/** Composed schema.orb parser — derives event_name + composed entity_name maps. */\nexport function buildComposedMaps(schemaOrbContent: string | null): ComposedMaps {\n if (schemaOrbContent === null) return { events: {}, entityNameComposed: {} };\n let parsed: JsonValue;\n try {\n parsed = JSON.parse(schemaOrbContent);\n } catch {\n return { events: {}, entityNameComposed: {} };\n }\n const root = asJsonObject(parsed);\n if (!root) return { events: {}, entityNameComposed: {} };\n const orbitals = root['orbitals'];\n if (!Array.isArray(orbitals)) return { events: {}, entityNameComposed: {} };\n\n const events: Record<string, EventEdge[]> = {};\n const entityNameComposed: Record<string, EntityBinding[]> = {};\n\n for (const o of orbitals) {\n const orbObj = asJsonObject(o);\n if (!orbObj) continue;\n const orbitalName = typeof orbObj['name'] === 'string' ? orbObj['name'] : null;\n if (!orbitalName) continue;\n\n const entity = asJsonObject(orbObj['entity']);\n if (entity) {\n const entityName = entity['name'];\n if (typeof entityName === 'string' && entityName.length > 0) {\n (entityNameComposed[entityName] ??= []).push({\n orbital: orbitalName,\n trait: '<orbital-entity>',\n source: 'composed',\n });\n }\n }\n\n const traits = orbObj['traits'];\n if (!Array.isArray(traits)) continue;\n for (const t of traits) {\n const traitObj = asJsonObject(t);\n if (!traitObj) continue;\n const traitName = typeof traitObj['name'] === 'string' ? traitObj['name'] : null;\n if (!traitName) continue;\n\n const linked = traitObj['linkedEntity'];\n if (typeof linked === 'string' && linked.length > 0) {\n (entityNameComposed[linked] ??= []).push({\n orbital: orbitalName,\n trait: traitName,\n source: 'composed',\n });\n }\n\n // Trait-level `emits` array — composed schema's authoritative\n // declaration of every event this trait emits. Shape:\n // emits: [{ event: 'X', scope?: 'internal'|'external', payloadSchema?: ... }]\n const traitEmits = traitObj['emits'];\n if (Array.isArray(traitEmits)) {\n for (const e of traitEmits) {\n const emitObj = asJsonObject(e);\n if (!emitObj) continue;\n const emitEvent = emitObj['event'];\n if (typeof emitEvent !== 'string' || emitEvent.length === 0) continue;\n const scope = emitObj['scope'];\n const scopeNarrowed: 'internal' | 'external' | undefined =\n scope === 'internal' || scope === 'external' ? scope : undefined;\n const edge: EventEdge = {\n orbital: orbitalName,\n trait: traitName,\n role: 'emit',\n ...(scopeNarrowed ? { scope: scopeNarrowed } : {}),\n };\n (events[emitEvent] ??= []).push(edge);\n }\n }\n\n // Trait-level `listens` array — composed schema's authoritative\n // declaration of every event this trait listens for. Shape:\n // listens: [{ event: 'X', triggers?: 'Y', source?: {kind, trait} }]\n const traitListens = traitObj['listens'];\n if (Array.isArray(traitListens)) {\n for (const l of traitListens) {\n const listenObj = asJsonObject(l);\n if (!listenObj) continue;\n const listenEvent = listenObj['event'];\n if (typeof listenEvent !== 'string' || listenEvent.length === 0) continue;\n (events[listenEvent] ??= []).push({\n orbital: orbitalName,\n trait: traitName,\n role: 'listen',\n });\n }\n }\n\n // State-machine transition walk — supplementary. Carries\n // `state` context for emit/listen pairs that originated as\n // SExpr `(emit X ...)` effects rather than top-level `emits`\n // declarations. Both legacy `traitObj.states` and current\n // `traitObj.stateMachine.states` shapes are checked because\n // the composer's output format evolved across rabit versions.\n const stateMachine = asJsonObject(traitObj['stateMachine']);\n const statesFromMachine = stateMachine ? stateMachine['states'] : undefined;\n const statesDirect = traitObj['states'];\n const states = Array.isArray(statesFromMachine)\n ? statesFromMachine\n : Array.isArray(statesDirect)\n ? statesDirect\n : null;\n if (!states) continue;\n for (const s of states) {\n const stateObj = asJsonObject(s);\n if (!stateObj) continue;\n const stateName = typeof stateObj['name'] === 'string' ? stateObj['name'] : undefined;\n const transitions = stateObj['transitions'];\n if (!Array.isArray(transitions)) continue;\n for (const tr of transitions) {\n const trObj = asJsonObject(tr);\n if (!trObj) continue;\n const listenEvent = trObj['event'];\n if (typeof listenEvent === 'string' && listenEvent.length > 0) {\n (events[listenEvent] ??= []).push({\n orbital: orbitalName,\n trait: traitName,\n state: stateName,\n role: 'listen',\n });\n }\n const emit = asJsonObject(trObj['emit']);\n if (emit) {\n const emitEvent = emit['event'];\n if (typeof emitEvent === 'string' && emitEvent.length > 0) {\n const scope = emit['scope'];\n const scopeNarrowed: 'internal' | 'external' | undefined =\n scope === 'internal' || scope === 'external' ? scope : undefined;\n const edge: EventEdge = {\n orbital: orbitalName,\n trait: traitName,\n state: stateName,\n role: 'emit',\n ...(scopeNarrowed ? { scope: scopeNarrowed } : {}),\n };\n (events[emitEvent] ??= []).push(edge);\n }\n }\n }\n }\n }\n }\n\n return { events, entityNameComposed };\n}\n\n/** Per-orbital params-history.jsonl tail walker — derives the recency map. */\nexport function buildRecencyMap(\n history: Readonly<Record<string, readonly JsonObject[]>>,\n): Readonly<Record<string, RecencyEntry>> {\n const out: Record<string, RecencyEntry> = {};\n for (const orbital of Object.keys(history)) {\n const rows = history[orbital];\n if (!rows || rows.length === 0) continue;\n let maxTurn: number | null = null;\n let maxTimestamp: number | null = null;\n for (const row of rows) {\n const turn = row['turn'];\n if (typeof turn === 'number' && Number.isFinite(turn)) {\n if (maxTurn === null || turn > maxTurn) maxTurn = turn;\n }\n const ts = row['timestamp'];\n if (typeof ts === 'number' && Number.isFinite(ts)) {\n if (maxTimestamp === null || ts > maxTimestamp) maxTimestamp = ts;\n }\n }\n const recencyTurn = maxTurn ?? rows.length - 1;\n const lastChange = maxTimestamp ?? 0;\n out[orbital] = { recencyTurn, lastChange };\n }\n return out;\n}\n\nfunction asJsonObject(value: JsonValue | undefined): JsonObject | null {\n if (value === undefined || value === null) return null;\n if (typeof value !== 'object' || Array.isArray(value)) return null;\n return value;\n}\n","/**\n * Workspace-level manifest I/O for the BM25 token table + graph maps +\n * recency. Mirrors `sidecar.ts` — same helpers (`readJsonFile` +\n * `writeJsonFile`), same path-layout discipline. Parent dir `.almadar/`\n * is created by `ensureSkeleton` at workspace open, so no mkdir here.\n *\n * @packageDocumentation\n */\n\nimport type { WorkspaceBackend } from '../internal/types.js';\nimport { workspaceIndexManifestFile } from '../internal/path-layout.js';\nimport { readJsonFile, writeJsonFile } from '../internal/memory-files.js';\nimport type { WorkspaceIndexManifest, WorkspaceIndexManifestSidecar } from './types.js';\nimport { WORKSPACE_INDEX_SCHEMA_VERSION } from './types.js';\n\nexport function manifestPath(workDir: string): string {\n return workspaceIndexManifestFile(workDir);\n}\n\nexport async function readManifest(\n backend: WorkspaceBackend,\n workDir: string,\n): Promise<WorkspaceIndexManifest | null> {\n const raw = await readJsonFile<WorkspaceIndexManifestSidecar>(backend, manifestPath(workDir));\n if (raw === null) return null;\n if (raw.schemaVersion !== WORKSPACE_INDEX_SCHEMA_VERSION) return null;\n return raw;\n}\n\nexport async function writeManifest(\n backend: WorkspaceBackend,\n workDir: string,\n manifest: WorkspaceIndexManifest,\n): Promise<void> {\n // Cast through JsonObject is safe — WorkspaceIndexManifest's shape is\n // json-compatible. Structural compatibility is captured by the\n // WorkspaceIndexManifestSidecar intersection type (same pattern as\n // sidecar.ts:writeSidecar).\n await writeJsonFile<WorkspaceIndexManifestSidecar>(\n backend,\n manifestPath(workDir),\n manifest as WorkspaceIndexManifestSidecar,\n );\n}\n","/**\n * `WorkspaceIndexImpl` — the runtime carrying the identity vectors per\n * orbital + per extraTraits[] entry. Wires into the workspace's\n * `SinkManager` to re-bake on each `kind: 'spec'` write; exposes the\n * coercion methods `resolveOrbitalName` + `resolveTraitRef`.\n *\n * @packageDocumentation\n */\n\nimport type { JsonObject, JsonValue } from '@almadar/core';\nimport type { WorkspaceBackend } from '../internal/types.js';\nimport type { SinkManager } from '../internal/sink-manager.js';\nimport type { WorkspaceWriteEvent } from '../types.js';\nimport type {\n BM25Document,\n BM25Table,\n EmbedderPort,\n EntityBinding,\n EventEdge,\n ExtraTraitIdentity,\n OrbitalIndexEntry,\n RecencyEntry,\n RecentlyEditedOptions,\n ResolveOptions,\n ResolveResult,\n RetrievalOptions,\n RetrievalResult,\n RuleBinding,\n TraitRefEmit,\n WorkspaceIndex,\n WorkspaceIndexManifest,\n WorkspaceIndexStats,\n} from './types.js';\nimport {\n DEFAULT_COERCION_THRESHOLD,\n DEFAULT_RETRIEVAL_TOP_K,\n RRF_K,\n WORKSPACE_INDEX_SCHEMA_VERSION,\n} from './types.js';\nimport { cosineSimilarity } from './cosine.js';\nimport {\n composeExtraTraitIdentityFingerprint,\n composeOrbitalContentFingerprint,\n composeOrbitalIdentityFingerprint,\n deriveExtraTraitAlias,\n} from './fingerprint.js';\nimport { checksumSpec, readSidecar, writeSidecar } from './sidecar.js';\nimport { buildBM25Table, queryBM25, tokenizeSpec } from './bm25.js';\nimport { rrfFuse } from './rrf.js';\nimport { buildComposedMaps, buildIntentMaps, buildRecencyMap } from './graph-builders.js';\nimport { readManifest, writeManifest } from './manifest.js';\n\nexport interface WorkspaceIndexDeps {\n workDir: string;\n backend: WorkspaceBackend;\n sinks: SinkManager;\n embedder: EmbedderPort;\n listOrbitals: () => string[];\n readSpec: (orbital: string) => JsonObject | null;\n /** Composed schema.orb content; null when missing or unparseable. */\n readSchema: () => string | null;\n /** Tail of params-history.jsonl rows for an orbital; empty array when none. */\n readHistory: (orbital: string) => readonly JsonObject[];\n}\n\ninterface ExtraTraitFingerprintInput {\n fingerprint: string;\n ref: string;\n alias: string;\n}\n\nexport class WorkspaceIndexImpl implements WorkspaceIndex {\n private readonly entries = new Map<string, OrbitalIndexEntry>();\n /** Serialized re-bake per orbital so concurrent writeSpec events don't race. */\n private readonly bakeQueue = new Map<string, Promise<void>>();\n /** Names whose checksum doesn't match the current spec — surfaced via stats. */\n private readonly stale = new Set<string>();\n /** Cached spec.json per orbital so manifest rebuilds don't re-read disk. */\n private readonly specsByOrbital = new Map<string, JsonObject>();\n /** Tokenized BM25 rows per orbital — rebuilt incrementally. */\n private readonly tokensByOrbital = new Map<string, readonly string[]>();\n /** Last-known recency timeline per orbital. */\n private readonly recencyByOrbital = new Map<string, RecencyEntry>();\n /** Latest manifest payload (BM25 + intent + composed + recency). */\n private manifest: WorkspaceIndexManifest = emptyManifest();\n /** Serialized manifest writes so concurrent observer fires don't race. */\n private manifestQueue: Promise<void> = Promise.resolve();\n\n constructor(private readonly deps: WorkspaceIndexDeps) {\n this.deps.sinks.subscribe({\n onWrite: (event) => this.onWorkspaceWrite(event),\n });\n }\n\n private async onWorkspaceWrite(event: WorkspaceWriteEvent): Promise<void> {\n switch (event.kind) {\n case 'spec':\n await this.rebakeOrbital(event.orbital, event.content);\n this.specsByOrbital.set(event.orbital, event.content);\n this.tokensByOrbital.set(event.orbital, tokenizeSpec(event.content));\n await this.scheduleManifestRebuild();\n return;\n case 'schema':\n await this.scheduleManifestRebuild();\n return;\n case 'params-history':\n // Incremental recency append — cheap enough to redo on every row.\n this.recencyByOrbital.set(event.orbital, deriveRecencyEntry(event.orbital, [event.row], this.recencyByOrbital.get(event.orbital)));\n await this.scheduleManifestRebuild();\n return;\n case 'orbital-archived':\n this.entries.delete(event.name);\n this.specsByOrbital.delete(event.name);\n this.tokensByOrbital.delete(event.name);\n this.recencyByOrbital.delete(event.name);\n await this.scheduleManifestRebuild();\n return;\n case 'orbital-renamed':\n renameKey(this.entries, event.from, event.to);\n renameKey(this.specsByOrbital, event.from, event.to);\n renameKey(this.tokensByOrbital, event.from, event.to);\n renameKey(this.recencyByOrbital, event.from, event.to);\n await this.scheduleManifestRebuild();\n return;\n default:\n // Other event kinds (analysis, plan, trace, etc.) are not index inputs.\n return;\n }\n }\n\n async warm(): Promise<void> {\n const orbitals = this.deps.listOrbitals();\n const work: Promise<void>[] = [];\n for (const orbital of orbitals) {\n const spec = this.deps.readSpec(orbital);\n if (spec === null) {\n // Orbital exists on disk but has no spec.json — nothing to bake.\n // (Coordinator owns spec creation; an orbital may be archived or\n // mid-creation.) Keep the entry slot empty.\n continue;\n }\n this.specsByOrbital.set(orbital, spec);\n this.tokensByOrbital.set(orbital, tokenizeSpec(spec));\n const history = this.deps.readHistory(orbital);\n if (history.length > 0) {\n this.recencyByOrbital.set(orbital, deriveRecencyEntry(orbital, history, undefined));\n }\n const checksum = checksumSpec(spec);\n const existing = await readSidecar(this.deps.backend, this.deps.workDir, orbital);\n if (existing !== null && existing.specChecksum === checksum) {\n this.entries.set(orbital, existing);\n this.stale.delete(orbital);\n continue;\n }\n work.push(this.bakeAndPersist(orbital, spec, checksum));\n }\n await Promise.all(work);\n // Manifest cold start — try restored copy first; fall back to a fresh build.\n const restored = await readManifest(this.deps.backend, this.deps.workDir);\n if (restored !== null) {\n this.manifest = restored;\n this.hydrateRecencyFromManifest(restored);\n }\n await this.rebuildManifest();\n }\n\n async resolveOrbitalName(name: string, opts?: ResolveOptions): Promise<ResolveResult> {\n const threshold = opts?.threshold ?? DEFAULT_COERCION_THRESHOLD;\n if (this.entries.size === 0) {\n return { coercedTo: null, similarity: 0, method: 'identity-vector' };\n }\n // Embedder is best-effort. Transient provider failures (e.g. DeepSeek\n // returning a response without `data`) shouldn't halt the agent run;\n // the caller (set_plan's coercion pass) treats `coercedTo: null` as\n // \"no coercion possible, pass through unchanged\" — same outcome.\n let vector: readonly number[];\n try {\n [vector] = await this.embedOne(name);\n } catch (err) {\n const reason = err instanceof Error ? err.message : String(err);\n console.warn(`[workspace-index] resolveOrbitalName: embedder failed, returning null (${reason})`);\n return { coercedTo: null, similarity: 0, method: 'identity-vector' };\n }\n let bestOrbital: string | null = null;\n let bestSim = 0;\n for (const [orbital, entry] of this.entries) {\n const sim = cosineSimilarity(vector, entry.identityVector);\n if (sim > bestSim) {\n bestSim = sim;\n bestOrbital = orbital;\n }\n }\n if (bestOrbital !== null && bestSim >= threshold) {\n return { coercedTo: bestOrbital, similarity: bestSim, method: 'identity-vector' };\n }\n return { coercedTo: null, similarity: bestSim, method: 'identity-vector' };\n }\n\n async resolveTraitRef(\n emit: TraitRefEmit,\n orbitalContext: { orbitalName: string },\n opts?: ResolveOptions,\n ): Promise<ResolveResult> {\n const threshold = opts?.threshold ?? DEFAULT_COERCION_THRESHOLD;\n const entry = this.entries.get(orbitalContext.orbitalName);\n if (!entry || entry.extraTraitIdentities.length === 0) {\n return { coercedTo: null, similarity: 0, method: 'identity-vector' };\n }\n const fingerprint = composeExtraTraitIdentityFingerprint(emit);\n // Same embedder-resilience guard as resolveOrbitalName.\n let vector: readonly number[];\n try {\n [vector] = await this.embedOne(fingerprint);\n } catch (err) {\n const reason = err instanceof Error ? err.message : String(err);\n console.warn(`[workspace-index] resolveTraitRef: embedder failed, returning null (${reason})`);\n return { coercedTo: null, similarity: 0, method: 'identity-vector' };\n }\n let bestAlias: string | null = null;\n let bestSim = 0;\n for (const candidate of entry.extraTraitIdentities) {\n const sim = cosineSimilarity(vector, candidate.vector);\n if (sim > bestSim) {\n bestSim = sim;\n bestAlias = candidate.alias;\n }\n }\n if (bestAlias !== null && bestSim >= threshold) {\n return { coercedTo: bestAlias, similarity: bestSim, method: 'identity-vector' };\n }\n return { coercedTo: null, similarity: bestSim, method: 'identity-vector' };\n }\n\n stats(): WorkspaceIndexStats {\n let extraTraitIdentityCount = 0;\n for (const entry of this.entries.values()) {\n extraTraitIdentityCount += entry.extraTraitIdentities.length;\n }\n return {\n orbitalCount: this.entries.size,\n extraTraitIdentityCount,\n staleOrbitals: Array.from(this.stale).sort(),\n };\n }\n\n // ── Phase B — RRF-hybrid retrieval ──────────────────────────────────────────\n\n async retrieveOrbitalsForPrompt(\n prompt: string,\n opts?: RetrievalOptions,\n ): Promise<readonly RetrievalResult[]> {\n const topK = opts?.topK ?? DEFAULT_RETRIEVAL_TOP_K;\n const rrfK = opts?.rrfK ?? RRF_K;\n if (this.entries.size === 0) return [];\n\n // Sparse leg — BM25 over the current workspace token table.\n const sparseHits = queryBM25(this.manifest.bm25, prompt, opts?.bm25);\n const sparseRanking = sparseHits.map((h) => h.orbital);\n const matchedTokensByOrbital = new Map<string, readonly string[]>();\n for (const hit of sparseHits) matchedTokensByOrbital.set(hit.orbital, hit.matchedTokens);\n\n // Dense leg — cosine vs every orbital's content vector. The\n // embedder is best-effort: a transient provider failure (DeepSeek\n // occasionally returns a response without `data`) shouldn't take\n // down the entire prompt narrowing path. Fall back to sparse-only\n // ranking when the dense leg fails; log to console so the failure\n // stays visible without halting the agent run.\n let denseRanking: readonly string[] = [];\n try {\n const [promptVector] = await this.embedOne(prompt);\n const dense: { orbital: string; sim: number }[] = [];\n for (const [orbital, entry] of this.entries) {\n const sim = cosineSimilarity(promptVector, entry.contentVector);\n if (sim > 0) dense.push({ orbital, sim });\n }\n dense.sort((a, b) => b.sim - a.sim);\n denseRanking = dense.map((d) => d.orbital);\n } catch (err) {\n const reason = err instanceof Error ? err.message : String(err);\n console.warn(`[workspace-index] dense retrieval failed, falling back to sparse-only: ${reason}`);\n }\n\n const fused = rrfFuse([denseRanking, sparseRanking], rrfK);\n return fused.slice(0, topK).map((entry) => ({\n orbitalName: entry.key,\n score: entry.score,\n matchedTokens: matchedTokensByOrbital.get(entry.key) ?? [],\n matchedKnobs: this.explainKnobMatches(entry.key, prompt),\n rankByDense: entry.ranks[0] ?? null,\n rankBySparse: entry.ranks[1] ?? null,\n }));\n }\n\n findByToken(query: string): readonly string[] {\n const hits = queryBM25(this.manifest.bm25, query);\n return hits.map((h) => h.orbital);\n }\n\n // ── Phase C — graph queries ────────────────────────────────────────────────\n\n orbitalsListeningTo(event: string): readonly EventEdge[] {\n return (this.manifest.composed.events[event] ?? []).filter((e) => e.role === 'listen');\n }\n\n orbitalsEmitting(event: string): readonly EventEdge[] {\n return (this.manifest.composed.events[event] ?? []).filter((e) => e.role === 'emit');\n }\n\n orbitalsLinkedToEntity(entity: string): readonly EntityBinding[] {\n const composed = this.manifest.composed.entityNameComposed[entity] ?? [];\n const override = this.manifest.intent.entityNameOverrides[entity] ?? [];\n return [...composed, ...override];\n }\n\n extraTraitImporters(refPath: string): readonly string[] {\n return this.manifest.intent.traitRefImporters[refPath] ?? [];\n }\n\n composedEvents(): readonly string[] {\n return Object.keys(this.manifest.composed.events);\n }\n\n composedEntities(): readonly string[] {\n const set = new Set<string>();\n for (const name of Object.keys(this.manifest.composed.entityNameComposed)) {\n set.add(name);\n }\n for (const name of Object.keys(this.manifest.intent.entityNameOverrides)) {\n set.add(name);\n }\n return Array.from(set);\n }\n\n composedTraitRefPaths(): readonly string[] {\n return Object.keys(this.manifest.intent.traitRefImporters);\n }\n\n rulesAppliedTo(entity: string): readonly RuleBinding[] {\n const out: RuleBinding[] = [];\n for (const bindings of Object.values(this.manifest.intent.ruleCapabilities)) {\n for (const b of bindings) if (b.entityName === entity) out.push(b);\n }\n return out;\n }\n\n recentlyEdited(opts?: RecentlyEditedOptions): readonly string[] {\n const withinTurns = opts?.withinTurns ?? 5;\n const entries: { orbital: string; recencyTurn: number }[] = [];\n for (const [orbital, recency] of Object.entries(this.manifest.recency)) {\n entries.push({ orbital, recencyTurn: recency.recencyTurn });\n }\n if (entries.length === 0) return [];\n const maxTurn = entries.reduce((m, e) => (e.recencyTurn > m ? e.recencyTurn : m), -Infinity);\n entries.sort((a, b) => b.recencyTurn - a.recencyTurn);\n return entries\n .filter((e) => e.recencyTurn > maxTurn - withinTurns)\n .map((e) => e.orbital);\n }\n\n // ── Manifest internals ─────────────────────────────────────────────────────\n\n private scheduleManifestRebuild(): Promise<void> {\n const next = this.manifestQueue.then(() => this.rebuildManifest());\n this.manifestQueue = next.catch(() => undefined);\n return next;\n }\n\n private async rebuildManifest(): Promise<void> {\n const tokensPerOrbital: Record<string, readonly string[]> = {};\n for (const [orbital, tokens] of this.tokensByOrbital) {\n tokensPerOrbital[orbital] = tokens;\n }\n const specsPerOrbital: Record<string, JsonObject> = {};\n for (const [orbital, spec] of this.specsByOrbital) {\n specsPerOrbital[orbital] = spec;\n }\n const recency: Record<string, RecencyEntry> = {};\n for (const [orbital, entry] of this.recencyByOrbital) {\n recency[orbital] = entry;\n }\n const next: WorkspaceIndexManifest = {\n schemaVersion: WORKSPACE_INDEX_SCHEMA_VERSION,\n bm25: buildBM25Table(tokensPerOrbital),\n intent: buildIntentMaps(specsPerOrbital),\n composed: buildComposedMaps(this.deps.readSchema()),\n recency,\n bakedAt: Date.now(),\n };\n this.manifest = next;\n await writeManifest(this.deps.backend, this.deps.workDir, next);\n await this.deps.sinks.notifyAll({\n kind: 'workspace-index-manifest',\n content: serializeManifestForMirror(next),\n });\n }\n\n private hydrateRecencyFromManifest(manifest: WorkspaceIndexManifest): void {\n for (const [orbital, entry] of Object.entries(manifest.recency)) {\n this.recencyByOrbital.set(orbital, entry);\n }\n }\n\n private explainKnobMatches(orbital: string, prompt: string): readonly string[] {\n const spec = this.specsByOrbital.get(orbital);\n if (!spec) return [];\n const params = asJsonObject(spec['params']);\n if (!params) return [];\n const traitOverrides = asJsonObject(params['traitOverrides']);\n if (!traitOverrides) return [];\n const promptLower = prompt.toLowerCase();\n const out: string[] = [];\n for (const trait of Object.keys(traitOverrides).sort()) {\n const override = asJsonObject(traitOverrides[trait]);\n if (!override) continue;\n const config = asJsonObject(override['config']);\n if (!config) continue;\n for (const knob of Object.keys(config).sort()) {\n const rendered = renderKnobValueForExplain(config[knob]);\n if (rendered.length === 0) continue;\n if (promptLower.includes(rendered.toLowerCase())) {\n out.push(`${trait}.${knob}`);\n }\n }\n }\n return out;\n }\n\n private async rebakeOrbital(orbital: string, spec: JsonObject): Promise<void> {\n const checksum = checksumSpec(spec);\n const existing = this.entries.get(orbital);\n if (existing && existing.specChecksum === checksum) return;\n await this.enqueueBake(orbital, () => this.bakeAndPersist(orbital, spec, checksum));\n }\n\n private enqueueBake(orbital: string, op: () => Promise<void>): Promise<void> {\n const prev = this.bakeQueue.get(orbital) ?? Promise.resolve();\n const next = prev.then(op);\n const swallowed = next.catch(() => undefined);\n this.bakeQueue.set(orbital, swallowed);\n return next;\n }\n\n private async bakeAndPersist(\n orbital: string,\n spec: JsonObject,\n checksum: string,\n ): Promise<void> {\n this.stale.add(orbital);\n const identityFingerprint = composeOrbitalIdentityFingerprint(spec);\n const contentFingerprint = composeOrbitalContentFingerprint(spec);\n const extraInputs = extractExtraTraitInputs(spec);\n // One batched embedBatch call for the whole orbital — keeps the\n // per-bake HTTP round-trip count at 1. Order: identity, content,\n // then per-extraTrait. Destructured back below in the same order.\n const allTexts = [\n identityFingerprint,\n contentFingerprint,\n ...extraInputs.map((e) => e.fingerprint),\n ];\n // Embedder is best-effort. Transient provider failures (DeepSeek's\n // occasional missing-`data` response) shouldn't crash the workspace\n // index — the orbital just doesn't get a baked sidecar this round.\n // Subsequent coercion / retrieval calls return null/empty gracefully.\n // The orbital STAYS in `this.stale` so the next non-failing\n // writeSpec triggers a re-bake.\n let embeddings: readonly (readonly number[])[];\n try {\n const result = await this.deps.embedder.embedBatch(allTexts);\n embeddings = result.embeddings;\n } catch (err) {\n const reason = err instanceof Error ? err.message : String(err);\n console.warn(`[workspace-index] bakeAndPersist[${orbital}]: embedder failed, skipping (${reason})`);\n return;\n }\n if (embeddings.length !== allTexts.length) {\n console.warn(\n `[workspace-index] bakeAndPersist[${orbital}]: embedder returned ${embeddings.length} vectors for ${allTexts.length} inputs; skipping`,\n );\n return;\n }\n const [identityVector, contentVector, ...extraVectors] = embeddings;\n const extraTraitIdentities: ExtraTraitIdentity[] = extraInputs.map((input, idx) => ({\n ref: input.ref,\n alias: input.alias,\n fingerprint: input.fingerprint,\n vector: extraVectors[idx],\n }));\n const entry: OrbitalIndexEntry = {\n schemaVersion: WORKSPACE_INDEX_SCHEMA_VERSION,\n specChecksum: checksum,\n identityVector,\n identityFingerprint,\n contentVector,\n contentFingerprint,\n extraTraitIdentities,\n bakedAt: Date.now(),\n };\n await writeSidecar(this.deps.backend, this.deps.workDir, orbital, entry);\n this.entries.set(orbital, entry);\n this.stale.delete(orbital);\n // Emit so the apps/builder Firestore mirror (and any other registered\n // observer) can persist the sidecar alongside spec.json, memory.json,\n // etc. Without this, cold restore re-bakes every orbital on every\n // server restart — paid embedder calls for deterministic vectors.\n await this.deps.sinks.notifyAll({\n kind: 'workspace-index',\n orbital,\n content: serializeEntryForMirror(entry),\n });\n }\n\n private async embedOne(text: string): Promise<readonly (readonly number[])[]> {\n const { embeddings } = await this.deps.embedder.embedBatch([text]);\n if (embeddings.length !== 1) {\n throw new Error(\n `[workspace-index] embedder returned ${embeddings.length} vectors for a single text`,\n );\n }\n return embeddings;\n }\n}\n\n/**\n * Project a typed `OrbitalIndexEntry` into a plain `JsonObject` so it\n * can ride the typed `WorkspaceWriteEvent.content` channel. Object\n * literal + spread → TS infers a fresh shape structurally assignable\n * to the JsonObject index signature; no cast needed.\n */\nfunction serializeEntryForMirror(entry: OrbitalIndexEntry): JsonObject {\n return {\n schemaVersion: entry.schemaVersion,\n specChecksum: entry.specChecksum,\n identityVector: [...entry.identityVector],\n identityFingerprint: entry.identityFingerprint,\n contentVector: [...entry.contentVector],\n contentFingerprint: entry.contentFingerprint,\n extraTraitIdentities: entry.extraTraitIdentities.map((e) => ({\n ref: e.ref,\n alias: e.alias,\n fingerprint: e.fingerprint,\n vector: [...e.vector],\n })),\n bakedAt: entry.bakedAt,\n };\n}\n\nfunction extractExtraTraitInputs(spec: JsonObject): ExtraTraitFingerprintInput[] {\n const params = asJsonObject(spec['params']);\n if (!params) return [];\n const extras = params['extraTraits'];\n if (!Array.isArray(extras)) return [];\n const out: ExtraTraitFingerprintInput[] = [];\n for (const entry of extras) {\n const obj = asJsonObject(entry);\n if (!obj) continue;\n const ref = typeof obj['ref'] === 'string' ? obj['ref'] : null;\n if (ref === null) continue;\n const name = typeof obj['name'] === 'string' ? obj['name'] : undefined;\n const linkedEntity = typeof obj['linkedEntity'] === 'string' ? obj['linkedEntity'] : undefined;\n const alias = deriveExtraTraitAlias({ ref, name });\n out.push({\n ref,\n alias,\n fingerprint: composeExtraTraitIdentityFingerprint({ ref, name, linkedEntity }),\n });\n }\n return out;\n}\n\nfunction asJsonObject(value: JsonValue | undefined): JsonObject | null {\n if (value === undefined || value === null) return null;\n if (typeof value !== 'object' || Array.isArray(value)) return null;\n return value;\n}\n\nfunction emptyManifest(): WorkspaceIndexManifest {\n return {\n schemaVersion: WORKSPACE_INDEX_SCHEMA_VERSION,\n bm25: { documents: {}, docFreq: {}, docCount: 0, avgDocLen: 0 },\n intent: { entityNameOverrides: {}, traitRefImporters: {}, ruleCapabilities: {}, organism: {} },\n composed: { events: {}, entityNameComposed: {} },\n recency: {},\n bakedAt: 0,\n };\n}\n\nfunction deriveRecencyEntry(\n _orbital: string,\n rows: readonly JsonObject[],\n prior: RecencyEntry | undefined,\n): RecencyEntry {\n let recencyTurn = prior?.recencyTurn ?? 0;\n let lastChange = prior?.lastChange ?? 0;\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const turn = typeof row['turn'] === 'number' ? row['turn'] : recencyTurn + 1;\n const ts = typeof row['timestamp'] === 'number' ? row['timestamp'] : 0;\n if (turn > recencyTurn) recencyTurn = turn;\n if (ts > lastChange) lastChange = ts;\n }\n return { recencyTurn, lastChange };\n}\n\nfunction renameKey<V>(map: Map<string, V>, from: string, to: string): void {\n if (!map.has(from)) return;\n const value = map.get(from);\n if (value === undefined) return;\n map.delete(from);\n map.set(to, value);\n}\n\nfunction renderKnobValueForExplain(value: JsonValue | undefined): string {\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n return '';\n}\n\n/**\n * Project the typed manifest into a JsonObject for the observer-event\n * channel. Same trick as `serializeEntryForMirror` — inline object\n * literal + spreads → TS infers a fresh JsonObject-compatible shape.\n */\nfunction serializeManifestForMirror(manifest: WorkspaceIndexManifest): JsonObject {\n return {\n schemaVersion: manifest.schemaVersion,\n bm25: serializeBM25(manifest.bm25),\n intent: serializeIntent(manifest.intent),\n composed: serializeComposed(manifest.composed),\n recency: serializeRecency(manifest.recency),\n bakedAt: manifest.bakedAt,\n };\n}\n\nfunction serializeBM25(t: BM25Table): JsonObject {\n const documents: Record<string, JsonObject> = {};\n for (const [orbital, doc] of Object.entries(t.documents)) {\n documents[orbital] = serializeBM25Doc(doc);\n }\n return {\n documents,\n docFreq: { ...t.docFreq },\n docCount: t.docCount,\n avgDocLen: t.avgDocLen,\n };\n}\n\nfunction serializeBM25Doc(doc: BM25Document): JsonObject {\n return {\n orbital: doc.orbital,\n termFreq: { ...doc.termFreq },\n docLen: doc.docLen,\n };\n}\n\nfunction serializeIntent(intent: WorkspaceIndexManifest['intent']): JsonObject {\n return {\n entityNameOverrides: serializeMapOfArrays(intent.entityNameOverrides, (b) => ({ ...b })),\n traitRefImporters: serializeMapOfArrays(intent.traitRefImporters, (s) => s),\n ruleCapabilities: serializeMapOfArrays(intent.ruleCapabilities, (b) => ({ ...b })),\n organism: serializeMapOfArrays(intent.organism, (s) => s),\n };\n}\n\nfunction serializeComposed(composed: WorkspaceIndexManifest['composed']): JsonObject {\n return {\n events: serializeMapOfArrays(composed.events, (e) => ({ ...e })),\n entityNameComposed: serializeMapOfArrays(composed.entityNameComposed, (b) => ({ ...b })),\n };\n}\n\nfunction serializeRecency(recency: WorkspaceIndexManifest['recency']): JsonObject {\n const out: Record<string, JsonObject> = {};\n for (const [orbital, entry] of Object.entries(recency)) {\n out[orbital] = { recencyTurn: entry.recencyTurn, lastChange: entry.lastChange };\n }\n return out;\n}\n\nfunction serializeMapOfArrays<T>(\n map: Readonly<Record<string, readonly T[]>>,\n projectOne: (item: T) => JsonValue,\n): JsonObject {\n const out: Record<string, JsonValue[]> = {};\n for (const [key, items] of Object.entries(map)) {\n out[key] = items.map(projectOne);\n }\n return out;\n}\n","/**\n * `WorkspaceService` implementation. The single chokepoint — every read\n * and write that any consumer performs lands here, computes its absolute\n * path via `path-layout.ts`, runs the backend op, then fans out a typed\n * `WorkspaceWriteEvent` to every registered observer.\n *\n * @packageDocumentation\n */\n\nimport path from 'node:path';\nimport type { JsonObject, JsonValue } from '@almadar/core';\nimport type {\n FileTreeNode,\n GitHubConfig,\n GitStatusInfo,\n WorkspaceObserver,\n WorkspaceService,\n WorkspaceWatchEvent,\n WorkspaceWriteEvent,\n} from './types.js';\nimport type { WorkspaceBackend } from './internal/types.js';\nimport { SinkManager } from './internal/sink-manager.js';\nimport { GitClient } from './internal/git-client.js';\nimport {\n archivedOrbitalFile,\n assertOrbitalName,\n compiledDir,\n compiledFile,\n coordinatorFile,\n orbitalFile,\n orbitalSessionDir,\n orbitalSessionFile,\n sandboxedPath,\n schemaFile,\n traceFile,\n WORKSPACE_LAYOUT,\n} from './internal/path-layout.js';\nimport {\n ensureOrbitalSessionDir,\n} from './internal/workspace-manager.js';\nimport {\n appendJsonLine,\n readJsonFile,\n readJsonLines,\n writeJsonFile,\n} from './internal/memory-files.js';\nimport { WorkspaceIndexImpl } from './workspace-index/index-impl.js';\nimport type { EmbedderPort, WorkspaceIndex } from './workspace-index/types.js';\n\ninterface ServiceCtorArgs {\n workDir: string;\n backend: WorkspaceBackend;\n sinks: SinkManager;\n embedder: EmbedderPort;\n appId?: string;\n git?: GitClient;\n github?: GitHubConfig;\n}\n\nconst COORD_FILES = {\n analysis: 'analysis.json',\n plan: 'plan.json',\n clarifications: 'clarifications.json',\n messages: 'messages.json',\n} as const;\n\nconst ORBITAL_FILES = {\n spec: 'spec.json',\n memory: 'memory.json',\n history: 'history.jsonl',\n paramsHistory: 'params-history.jsonl',\n errors: 'errors.json',\n messages: 'messages.json',\n} as const;\n\nexport class WorkspaceServiceImpl implements WorkspaceService {\n readonly workDir: string;\n private _appId: string | undefined;\n private readonly backend: WorkspaceBackend;\n private readonly sinks: SinkManager;\n private readonly git: GitClient | undefined;\n private readonly github: GitHubConfig | undefined;\n /** Per-absolute-path serial queue. */\n private readonly writeQueue = new Map<string, Promise<void>>();\n readonly index: WorkspaceIndex;\n\n constructor(args: ServiceCtorArgs) {\n this.workDir = args.workDir;\n this.backend = args.backend;\n this.sinks = args.sinks;\n this._appId = args.appId;\n this.git = args.git;\n this.github = args.github;\n this.index = new WorkspaceIndexImpl({\n workDir: this.workDir,\n backend: this.backend,\n sinks: this.sinks,\n embedder: args.embedder,\n listOrbitals: () => this.listOrbitals(),\n readSpec: (orbital) => this.readSpec(orbital),\n readSchema: () => this.readSchema(),\n readHistory: (orbital) => this.readHistory(orbital),\n });\n }\n\n // === Identity ===\n\n get appId(): string | undefined {\n return this._appId;\n }\n\n setAppId(id: string): void {\n this._appId = id;\n }\n\n // === Helpers ===\n\n /** Run `op` under a per-path serial lock. */\n private withLock<T>(absPath: string, op: () => Promise<T>): Promise<T> {\n const prev = this.writeQueue.get(absPath) ?? Promise.resolve();\n let resolved!: T;\n const next = prev.then(async () => {\n resolved = await op();\n });\n // Best-effort: ensure the queue continues even on failure.\n const swallowed = next.catch(() => undefined);\n this.writeQueue.set(absPath, swallowed);\n return next.then(() => resolved);\n }\n\n /** Make sure the parent directory of `absPath` exists. */\n private async ensureParent(absPath: string): Promise<void> {\n await this.backend.mkdir(path.dirname(absPath), { recursive: true });\n }\n\n private async emit(event: WorkspaceWriteEvent): Promise<void> {\n await this.sinks.notifyAll(event);\n }\n\n // === Orbital artifacts ===\n\n readOrbital(name: string): string | null {\n assertOrbitalName(name);\n const p = orbitalFile(this.workDir, name);\n if (!this.backend.exists(p)) return null;\n try {\n return this.backend.readFileSync(p);\n } catch {\n return null;\n }\n }\n\n async writeOrbital(name: string, content: string): Promise<void> {\n assertOrbitalName(name);\n const p = orbitalFile(this.workDir, name);\n await this.withLock(p, async () => {\n await this.ensureParent(p);\n await this.backend.writeFile(p, content);\n });\n await this.emit({ kind: 'orbital', name, content });\n }\n\n listOrbitals(): string[] {\n const dir = path.join(this.workDir, WORKSPACE_LAYOUT.ORBITALS_DIR);\n if (!this.backend.exists(dir)) return [];\n try {\n return this.backend.readdirSync(dir)\n .filter(f => f.endsWith('.orb'))\n .map(f => f.replace(/\\.orb$/, ''))\n .sort();\n } catch {\n return [];\n }\n }\n\n async archiveOrbital(name: string): Promise<void> {\n assertOrbitalName(name);\n const src = orbitalFile(this.workDir, name);\n if (!this.backend.exists(src)) return;\n const content = await this.backend.readFile(src);\n const dst = archivedOrbitalFile(this.workDir, name);\n await this.withLock(src, async () => {\n await this.ensureParent(dst);\n await this.backend.writeFile(dst, content);\n await this.backend.unlink(src);\n });\n await this.emit({ kind: 'orbital-archived', name });\n }\n\n async renameOrbital(from: string, to: string): Promise<void> {\n assertOrbitalName(from);\n assertOrbitalName(to);\n const src = orbitalFile(this.workDir, from);\n const dst = orbitalFile(this.workDir, to);\n if (!this.backend.exists(src)) return;\n const content = await this.backend.readFile(src);\n await this.withLock(src, async () => {\n await this.ensureParent(dst);\n await this.backend.writeFile(dst, content);\n await this.backend.unlink(src);\n });\n await this.emit({ kind: 'orbital-renamed', from, to });\n }\n\n async renameOrbitalSession(from: string, to: string): Promise<void> {\n assertOrbitalName(from);\n assertOrbitalName(to);\n const src = orbitalSessionDir(this.workDir, from);\n const dst = orbitalSessionDir(this.workDir, to);\n if (!this.backend.exists(src)) return;\n if (this.backend.exists(dst)) return;\n await this.withLock(src, async () => {\n await this.backend.rename(src, dst);\n });\n await this.emit({ kind: 'session-renamed', from, to });\n }\n\n // === Schema artifact ===\n\n readSchema(): string | null {\n const p = schemaFile(this.workDir);\n if (!this.backend.exists(p)) return null;\n try {\n return this.backend.readFileSync(p);\n } catch {\n return null;\n }\n }\n\n async writeSchema(content: string): Promise<void> {\n const p = schemaFile(this.workDir);\n await this.withLock(p, async () => {\n await this.ensureParent(p);\n await this.backend.writeFile(p, content);\n });\n await this.emit({ kind: 'schema', content });\n }\n\n // === Coordinator session ===\n\n readAnalysis<T extends JsonObject>(): T | null {\n return readJsonFileSync<T>(this.backend, coordinatorFile(this.workDir, COORD_FILES.analysis));\n }\n\n async writeAnalysis<T extends JsonObject>(analysis: T): Promise<void> {\n const p = coordinatorFile(this.workDir, COORD_FILES.analysis);\n await this.withLock(p, async () => {\n await this.ensureParent(p);\n await writeJsonFile(this.backend, p, analysis);\n });\n await this.emit({ kind: 'analysis', content: analysis });\n }\n\n readPlan<T extends JsonObject>(): T | null {\n return readJsonFileSync<T>(this.backend, coordinatorFile(this.workDir, COORD_FILES.plan));\n }\n\n async writePlan<T extends JsonObject>(plan: T): Promise<void> {\n const p = coordinatorFile(this.workDir, COORD_FILES.plan);\n await this.withLock(p, async () => {\n await this.ensureParent(p);\n await writeJsonFile(this.backend, p, plan);\n });\n await this.emit({ kind: 'plan', content: plan });\n }\n\n readClarificationAnswers(): Record<string, string> {\n const p = coordinatorFile(this.workDir, COORD_FILES.clarifications);\n if (!this.backend.exists(p)) return {};\n try {\n const parsed = JSON.parse(this.backend.readFileSync(p)) as JsonObject;\n const out: Record<string, string> = {};\n for (const k of Object.keys(parsed)) {\n const v = parsed[k];\n if (typeof v === 'string') out[k] = v;\n }\n return out;\n } catch {\n return {};\n }\n }\n\n async writeClarificationAnswers(answers: Record<string, string>): Promise<void> {\n const p = coordinatorFile(this.workDir, COORD_FILES.clarifications);\n const asJson: JsonObject = { ...answers };\n await this.withLock(p, async () => {\n await this.ensureParent(p);\n await writeJsonFile(this.backend, p, asJson);\n });\n await this.emit({ kind: 'clarifications', content: answers });\n }\n\n readCoordinatorMessages<T extends JsonValue>(): T[] | null {\n const p = coordinatorFile(this.workDir, COORD_FILES.messages);\n if (!this.backend.exists(p)) return null;\n try {\n const parsed = JSON.parse(this.backend.readFileSync(p));\n if (!Array.isArray(parsed)) return null;\n return parsed as T[];\n } catch {\n return null;\n }\n }\n\n async writeCoordinatorMessages<T extends JsonValue>(messages: T[]): Promise<void> {\n const p = coordinatorFile(this.workDir, COORD_FILES.messages);\n await this.withLock(p, async () => {\n await this.ensureParent(p);\n await this.backend.writeFile(p, JSON.stringify(messages, null, 2));\n });\n await this.emit({ kind: 'coordinator-messages', content: messages as JsonValue[] });\n }\n\n // === Per-orbital session ===\n\n private orbitalFile(orbital: string, basename: string): string {\n assertOrbitalName(orbital);\n return orbitalSessionFile(this.workDir, orbital, basename);\n }\n\n readSpec<T extends JsonObject>(orbital: string): T | null {\n return readJsonFileSync<T>(this.backend, this.orbitalFile(orbital, ORBITAL_FILES.spec));\n }\n\n async writeSpec<T extends JsonObject>(orbital: string, spec: T): Promise<void> {\n const p = this.orbitalFile(orbital, ORBITAL_FILES.spec);\n await this.withLock(p, async () => {\n await ensureOrbitalSessionDir(this.backend, this.workDir, orbital);\n await writeJsonFile(this.backend, p, spec);\n });\n await this.emit({ kind: 'spec', orbital, content: spec });\n }\n\n readMemory<T extends JsonObject>(orbital: string): T | null {\n return readJsonFileSync<T>(this.backend, this.orbitalFile(orbital, ORBITAL_FILES.memory));\n }\n\n async writeMemory<T extends JsonObject>(orbital: string, memory: T): Promise<void> {\n const p = this.orbitalFile(orbital, ORBITAL_FILES.memory);\n await this.withLock(p, async () => {\n await ensureOrbitalSessionDir(this.backend, this.workDir, orbital);\n await writeJsonFile(this.backend, p, memory);\n });\n await this.emit({ kind: 'memory', orbital, content: memory });\n }\n\n async appendHistory<T extends JsonObject>(orbital: string, entry: T): Promise<void> {\n const p = this.orbitalFile(orbital, ORBITAL_FILES.history);\n await this.withLock(p, async () => {\n await ensureOrbitalSessionDir(this.backend, this.workDir, orbital);\n await appendJsonLine(this.backend, p, entry);\n });\n await this.emit({ kind: 'history', orbital, entry });\n }\n\n readHistory<T extends JsonObject>(orbital: string): T[] {\n const p = this.orbitalFile(orbital, ORBITAL_FILES.history);\n return readJsonLinesSync<T>(this.backend, p);\n }\n\n async appendParamsHistory<T extends JsonObject>(orbital: string, row: T): Promise<void> {\n const p = this.orbitalFile(orbital, ORBITAL_FILES.paramsHistory);\n await this.withLock(p, async () => {\n await ensureOrbitalSessionDir(this.backend, this.workDir, orbital);\n await appendJsonLine(this.backend, p, row);\n });\n await this.emit({ kind: 'params-history', orbital, row });\n }\n\n readErrors<T extends JsonObject>(orbital: string): T[] {\n const p = this.orbitalFile(orbital, ORBITAL_FILES.errors);\n if (!this.backend.exists(p)) return [];\n try {\n const parsed = JSON.parse(this.backend.readFileSync(p));\n if (!Array.isArray(parsed)) return [];\n return parsed as T[];\n } catch {\n return [];\n }\n }\n\n async writeErrors<T extends JsonObject>(orbital: string, errors: T[]): Promise<void> {\n const p = this.orbitalFile(orbital, ORBITAL_FILES.errors);\n await this.withLock(p, async () => {\n await ensureOrbitalSessionDir(this.backend, this.workDir, orbital);\n await this.backend.writeFile(p, JSON.stringify(errors, null, 2));\n });\n await this.emit({ kind: 'errors', orbital, content: errors });\n }\n\n readSubagentMessages<T extends JsonValue>(orbital: string): T[] | null {\n const p = this.orbitalFile(orbital, ORBITAL_FILES.messages);\n if (!this.backend.exists(p)) return null;\n try {\n const parsed = JSON.parse(this.backend.readFileSync(p));\n if (!Array.isArray(parsed)) return null;\n return parsed as T[];\n } catch {\n return null;\n }\n }\n\n async writeSubagentMessages<T extends JsonValue>(\n orbital: string,\n messages: T[],\n ): Promise<void> {\n const p = this.orbitalFile(orbital, ORBITAL_FILES.messages);\n await this.withLock(p, async () => {\n await ensureOrbitalSessionDir(this.backend, this.workDir, orbital);\n await this.backend.writeFile(p, JSON.stringify(messages, null, 2));\n });\n await this.emit({ kind: 'subagent-messages', orbital, content: messages as JsonValue[] });\n }\n\n // === Trace ===\n\n async emitTrace<T extends JsonObject>(event: T): Promise<void> {\n const p = traceFile(this.workDir);\n await this.withLock(p, async () => {\n await this.ensureParent(p);\n await appendJsonLine(this.backend, p, event);\n });\n await this.emit({ kind: 'trace', event });\n }\n\n readTrace<T extends JsonObject>(): T[] {\n const p = traceFile(this.workDir);\n return readJsonLinesSync<T>(this.backend, p);\n }\n\n // === Compiled output ===\n\n async writeCompiled(relPath: string, content: string): Promise<void> {\n if (relPath.includes('..') || path.isAbsolute(relPath)) {\n throw new Error(`compiled: invalid relPath (${relPath})`);\n }\n const p = compiledFile(this.workDir, relPath);\n await this.withLock(p, async () => {\n await this.ensureParent(p);\n await this.backend.writeFile(p, content);\n });\n await this.emit({ kind: 'compiled', relPath, content });\n }\n\n readCompiled(relPath: string): string | null {\n if (relPath.includes('..') || path.isAbsolute(relPath)) return null;\n const p = compiledFile(this.workDir, relPath);\n if (!this.backend.exists(p)) return null;\n try {\n return this.backend.readFileSync(p);\n } catch {\n return null;\n }\n }\n\n async clearCompiled(): Promise<void> {\n const dir = compiledDir(this.workDir);\n if (!this.backend.exists(dir)) return;\n await removeTree(this.backend, dir);\n }\n\n // === Sandboxed generic file I/O ===\n\n async readFile(relPath: string): Promise<string | null> {\n const abs = sandboxedPath(this.workDir, relPath);\n if (!this.backend.exists(abs)) return null;\n try {\n return await this.backend.readFile(abs);\n } catch {\n return null;\n }\n }\n\n async writeFile(relPath: string, content: string): Promise<void> {\n const abs = sandboxedPath(this.workDir, relPath);\n await this.withLock(abs, async () => {\n await this.ensureParent(abs);\n await this.backend.writeFile(abs, content);\n });\n await this.emit({ kind: 'file', relPath, content });\n }\n\n async listTree(relPath?: string): Promise<FileTreeNode[]> {\n const base = relPath === undefined ? this.workDir : sandboxedPath(this.workDir, relPath);\n if (!this.backend.exists(base)) return [];\n const out: FileTreeNode[] = [];\n await walk(this.backend, base, this.workDir, out);\n return out;\n }\n\n async exists(relPath: string): Promise<boolean> {\n let abs: string;\n try {\n abs = sandboxedPath(this.workDir, relPath);\n } catch {\n return false;\n }\n return this.backend.exists(abs);\n }\n\n // === Git ===\n\n async commitAndPush(opts: {\n message: string;\n tags?: string[];\n }): Promise<{ sha: string } | null> {\n if (!this.git) return null;\n await this.git.addAll();\n const sha = await this.git.commit(opts.message);\n if (sha === null) return null;\n if (opts.tags) {\n for (const t of opts.tags) await this.git.tag(t);\n }\n if (this.github && this.github.repoUrl) {\n if (!(await this.git.hasRemote('origin'))) {\n await this.git.addRemote('origin', this.github.repoUrl);\n }\n await this.git.push('origin', this.github.branch ?? 'main');\n }\n return { sha };\n }\n\n async pullIfLinked(): Promise<boolean> {\n if (!this.git || !this.github) return false;\n if (!(await this.git.hasRemote('origin'))) return false;\n await this.git.pull('origin', this.github.branch ?? 'main');\n return true;\n }\n\n async gitStatus(): Promise<GitStatusInfo> {\n if (!this.git) {\n return { clean: true, staged: [], modified: [], untracked: [], linked: false };\n }\n const s = await this.git.status();\n const linked = await this.git.hasRemote('origin');\n return { ...s, linked };\n }\n\n // === Observation ===\n\n subscribe(observer: WorkspaceObserver): () => void {\n return this.sinks.subscribe(observer);\n }\n\n watch(relPath: string, onChange: (event: WorkspaceWatchEvent) => void): () => void {\n const abs = sandboxedPath(this.workDir, relPath);\n return this.backend.watch(abs, (kind) => onChange({ relPath, kind }));\n }\n\n // === Disposal ===\n\n async dispose(): Promise<void> {\n // Drain pending writes.\n const pending = Array.from(this.writeQueue.values());\n await Promise.allSettled(pending);\n // Optional final commit when configured.\n if (this.git && this.github) {\n try {\n await this.commitAndPush({ message: 'workspace: dispose' });\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error(`[workspace] dispose: commitAndPush failed: ${msg}`);\n }\n }\n }\n}\n\n// ============================================================================\n// Sync helpers — wrap backend reads with safe JSON parse.\n// ============================================================================\n\nfunction readJsonFileSync<T extends JsonObject>(\n backend: WorkspaceBackend,\n absPath: string,\n): T | null {\n if (!backend.exists(absPath)) return null;\n try {\n return JSON.parse(backend.readFileSync(absPath)) as T;\n } catch {\n return null;\n }\n}\n\nfunction readJsonLinesSync<T extends JsonObject>(\n backend: WorkspaceBackend,\n absPath: string,\n): T[] {\n if (!backend.exists(absPath)) return [];\n try {\n const raw = backend.readFileSync(absPath);\n const out: T[] = [];\n for (const line of raw.split('\\n')) {\n if (!line.trim()) continue;\n try {\n out.push(JSON.parse(line) as T);\n } catch {\n // skip\n }\n }\n return out;\n } catch {\n return [];\n }\n}\n\nasync function walk(\n backend: WorkspaceBackend,\n dir: string,\n root: string,\n out: FileTreeNode[],\n): Promise<void> {\n const entries = await backend.readdir(dir);\n for (const name of entries) {\n const full = path.join(dir, name);\n const s = await backend.stat(full);\n const rel = path.relative(root, full).split(path.sep).join('/');\n if (s.isDirectory) {\n out.push({ path: rel, type: 'directory', size: 0 });\n await walk(backend, full, root, out);\n } else {\n out.push({ path: rel, type: 'file', size: s.size });\n }\n }\n}\n\nasync function removeTree(backend: WorkspaceBackend, dir: string): Promise<void> {\n const entries = await backend.readdir(dir);\n for (const name of entries) {\n const full = path.join(dir, name);\n let isDir = false;\n try {\n isDir = (await backend.stat(full)).isDirectory;\n } catch {\n continue;\n }\n if (isDir) {\n await removeTree(backend, full);\n } else {\n try {\n await backend.unlink(full);\n } catch {\n // ignore\n }\n }\n }\n}\n","/**\n * Embedder port + production binding to `@almadar/llm`'s\n * `EmbeddingClient`.\n *\n * The port lets tests inject a deterministic mock without paying for\n * real network calls. Production wiring constructs an `EmbeddingClient`\n * once per workspace open and reuses it for every bake.\n *\n * @packageDocumentation\n */\n\nimport { EmbeddingClient } from '@almadar/llm';\nimport type { EmbedderPort } from './types.js';\n\n/**\n * Production embedder backed by `@almadar/llm`'s `EmbeddingClient` on\n * the openrouter provider (bge-base-en-v1.5, 768-d) — same model the\n * catalog narrower uses, so vectors share an embedding space across\n * the workspace + catalog surfaces.\n *\n * Construction is lazy: the `EmbeddingClient` (and its env-key check)\n * only fires when `embedBatch` is first called. A workspace that has\n * no orbitals to bake never pays the cost or trips the missing-key\n * error — useful for the memory-backed CLI runner that opens fresh\n * workspaces without an API key.\n */\nexport function createDefaultEmbedder(): EmbedderPort {\n let client: EmbeddingClient | null = null;\n function get(): EmbeddingClient {\n if (client === null) client = new EmbeddingClient({ provider: 'openrouter' });\n return client;\n }\n return {\n async embedBatch(texts) {\n if (texts.length === 0) return { embeddings: [] };\n const result = await get().embedBatch(texts);\n return { embeddings: result.embeddings };\n },\n };\n}\n","/**\n * `openWorkspace` — single entry point for every consumer.\n *\n * Resolves the workspace lifecycle (adopt → resume → restore → clone →\n * mint), constructs the backend + sink manager + git client, writes\n * templates on mint, and returns a fully wired `WorkspaceService`.\n *\n * @packageDocumentation\n */\n\nimport path from 'node:path';\nimport type { OpenWorkspaceOptions, WorkspaceService } from './types.js';\nimport type { WorkspaceBackend, AppMarker } from './internal/types.js';\nimport { LocalBackend } from './internal/backends/local.js';\nimport { MemoryBackend } from './internal/backends/memory.js';\nimport { SinkManager } from './internal/sink-manager.js';\nimport {\n ensureGitInit,\n ensureSkeleton,\n writeMintTemplatesIfMissing,\n} from './internal/workspace-manager.js';\nimport {\n findLocalWorkspaceDir,\n mintSessionDir,\n readAppMarker,\n writeAppMarker,\n} from './internal/workspace-resolver.js';\nimport { restoreWorkspace } from './internal/restore.js';\nimport { WorkspaceServiceImpl } from './service.js';\nimport { createDefaultEmbedder } from './workspace-index/embedder.js';\n\n/**\n * Per-(userId, appId) in-process dedupe of concurrent `openWorkspace`\n * calls. Two near-simultaneous calls for the same appId would both fail\n * `findLocalWorkspaceDir` (neither has written `app-marker.json` yet)\n * and both fall through to `mintSessionDir`, producing two distinct\n * directories for the same logical workspace. The cached Promise lets\n * subsequent callers await the first call's resolution and share the\n * resulting `WorkspaceService` instance.\n *\n * The cache key includes `backend` because memory and local backends\n * are disjoint stores — a memory-backed call must not share with a\n * local-backed one. Anonymous calls (no `appId`) bypass entirely;\n * every anonymous mint is intended to be a fresh independent session.\n *\n * Failed resolutions clear their own entry so the next call retries\n * cleanly instead of returning the cached rejection forever.\n */\nconst openWorkspaceInFlight = new Map<string, Promise<WorkspaceService>>();\n\nfunction openWorkspaceCacheKey(opts: OpenWorkspaceOptions): string | null {\n if (opts.appId === undefined) return null;\n const backendTag = opts.backend === 'memory' ? 'memory' : 'local';\n return `${backendTag}:${opts.userId}:${opts.appId}`;\n}\n\nexport async function openWorkspace(opts: OpenWorkspaceOptions & { create: false }): Promise<WorkspaceService | null>;\nexport async function openWorkspace(opts: OpenWorkspaceOptions): Promise<WorkspaceService>;\nexport async function openWorkspace(opts: OpenWorkspaceOptions): Promise<WorkspaceService | null> {\n // `create:false` is a pure read — it never mints, so the double-mint race the\n // in-flight cache guards against cannot happen; bypass the cache (and its\n // non-null contract) entirely.\n if (opts.create === false) {\n return openWorkspaceInternal(opts);\n }\n const key = openWorkspaceCacheKey(opts);\n if (key !== null) {\n const cached = openWorkspaceInFlight.get(key);\n if (cached) return cached;\n const pending = (async (): Promise<WorkspaceService> => {\n try {\n const ws = await openWorkspaceInternal(opts);\n // Unreachable: `create` is not false here, so the lifecycle always mints.\n if (ws === null) throw new Error('openWorkspace: null resolution without create:false');\n return ws;\n } catch (err) {\n openWorkspaceInFlight.delete(key);\n throw err;\n }\n })();\n openWorkspaceInFlight.set(key, pending);\n return pending;\n }\n return openWorkspaceInternal(opts);\n}\n\nasync function openWorkspaceInternal(opts: OpenWorkspaceOptions): Promise<WorkspaceService | null> {\n const backend: WorkspaceBackend = opts.backend === 'memory'\n ? new MemoryBackend()\n : new LocalBackend();\n const sinks = new SinkManager();\n\n const resolved = await resolveLifecycle(backend, opts);\n // `create:false` miss — the app exists in neither local cache nor restore.\n if (resolved === null) return null;\n\n // Bare adopt: use the dir untouched (no skeleton, mint, marker, git, or index\n // warm) so opening a loose external file leaves zero litter beside it.\n const bare = opts.bare === true && opts.adopt !== undefined;\n\n if (!bare) {\n await ensureSkeleton(backend, resolved.workDir);\n await writeMintTemplatesIfMissing(\n backend,\n resolved.workDir,\n opts.userId,\n opts.projectName ?? 'Untitled',\n resolved.appId,\n );\n\n // App marker — pin appId to dir when known.\n if (resolved.appId !== undefined) {\n const existing = readAppMarker(backend, resolved.workDir);\n if (!existing || existing.appId !== resolved.appId) {\n const marker: AppMarker = {\n appId: resolved.appId,\n userId: opts.userId,\n createdAt: existing?.createdAt ?? Date.now(),\n };\n if (opts.github?.repoUrl) marker.repoUrl = opts.github.repoUrl;\n await writeAppMarker(backend, resolved.workDir, marker);\n }\n }\n }\n\n // Git initialisation only on local backend; memory backend skips git.\n let git;\n if (!bare && opts.github && opts.backend !== 'memory') {\n git = await ensureGitInit(backend, resolved.workDir);\n }\n\n const service = new WorkspaceServiceImpl({\n workDir: resolved.workDir,\n backend,\n sinks,\n embedder: opts.embedder ?? createDefaultEmbedder(),\n appId: resolved.appId,\n git,\n github: opts.github,\n });\n\n // Strict cold start — warm any missing or stale index sidecars before\n // returning so the first `resolveOrbitalName`/`resolveTraitRef` call\n // sees authoritative data (per Almadar_Workspace_Index.md decision). Skipped\n // for bare adopt: a loose-file editor needs no semantic index and warming\n // would write `.almadar/` sidecars into the user's directory.\n if (!bare) {\n await service.index.warm();\n }\n\n return service;\n}\n\ninterface ResolvedLifecycle {\n workDir: string;\n appId: string | undefined;\n}\n\nasync function resolveLifecycle(\n backend: WorkspaceBackend,\n opts: OpenWorkspaceOptions,\n): Promise<ResolvedLifecycle | null> {\n // `create:false` is a pure read: resolve an existing workspace, but never\n // mint a fresh one — return null to signal \"not found\" so the caller can 404.\n const noCreate = opts.create === false;\n\n // 1. adopt — caller hands us a directory (explicit; unaffected by `create`).\n if (opts.adopt) {\n const workDir = path.resolve(opts.adopt);\n const marker = readAppMarker(backend, workDir);\n return { workDir, appId: marker?.appId ?? opts.appId };\n }\n\n // 2. resume from disk — appId set + we can find a marker locally.\n if (opts.appId) {\n const local = await findLocalWorkspaceDir(\n backend,\n opts.root,\n opts.userId,\n opts.appId,\n );\n if (local) return { workDir: local, appId: opts.appId };\n }\n\n // 3. restore-from-backend — appId set + local miss + restore supplied.\n if (opts.appId && opts.restore) {\n const workDir = mintSessionDir(opts.root, opts.userId);\n await backend.mkdir(workDir, { recursive: true });\n const result = await restoreWorkspace(backend, workDir, opts.restore);\n // Under `create:false` an empty restore is a true miss — the backend has\n // nothing for this app. Don't leave a phantom dir behind; report not-found.\n if (noCreate && result.filesRestored === 0) {\n await backend.rm(workDir, { recursive: true });\n return null;\n }\n return { workDir, appId: opts.appId };\n }\n\n // 4. github clone — appId set + local miss + no restore + github cfg.\n if (opts.appId && opts.github && opts.github.repoUrl) {\n // Can't verify remote existence without cloning, so a pure read declines.\n if (noCreate) return null;\n const workDir = mintSessionDir(opts.root, opts.userId);\n await backend.mkdir(workDir, { recursive: true });\n // Defer the actual clone to the consumer's git plumbing — we record\n // the marker and let `pullIfLinked` / `commitAndPush` drive remote\n // sync. Cloning requires shell access and we already have a thin git\n // client; emit a placeholder marker and let the consumer drive.\n return { workDir, appId: opts.appId };\n }\n\n // 5. mint fresh — anonymous workspace, appId may be promoted later.\n if (noCreate) return null;\n const workDir = mintSessionDir(opts.root, opts.userId);\n return { workDir, appId: opts.appId };\n}\n","/**\n * `listWorkspaces` — enumerate the app-workspaces a user has under a root.\n *\n * The single source for \"which projects exist locally\": scans\n * `<root>/<userId>/*` for dirs carrying an `app-marker.json` (minted or\n * adopted-as-app workspaces) and reports `{ appId, workDir, name?, updatedAt? }`.\n * Bare-adopted loose files (no marker) are intentionally excluded — they aren't\n * projects. Consumers (apps/builder's offline AppStore, orbital-agent-cli) use\n * this instead of fs-scanning the layout themselves.\n *\n * @packageDocumentation\n */\n\nimport path from 'node:path';\nimport type { WorkspaceBackend } from './internal/types.js';\nimport { LocalBackend } from './internal/backends/local.js';\nimport { MemoryBackend } from './internal/backends/memory.js';\nimport { readAppMarker } from './internal/workspace-resolver.js';\nimport { schemaFile } from './internal/path-layout.js';\nimport type { ListWorkspacesOptions, WorkspaceSummary } from './types.js';\n\nexport async function listWorkspaces(opts: ListWorkspacesOptions): Promise<WorkspaceSummary[]> {\n const backend: WorkspaceBackend =\n opts.backend === 'memory' ? new MemoryBackend() : new LocalBackend();\n\n const userDir = path.join(opts.root, opts.userId);\n if (!backend.exists(userDir)) return [];\n\n let entries: string[];\n try {\n entries = await backend.readdir(userDir);\n } catch {\n return [];\n }\n\n const out: WorkspaceSummary[] = [];\n for (const entry of entries) {\n const workDir = path.join(userDir, entry);\n try {\n if (!(await backend.stat(workDir)).isDirectory) continue;\n } catch {\n continue;\n }\n\n const marker = readAppMarker(backend, workDir);\n if (!marker) continue; // only marked (project) workspaces\n\n const summary: WorkspaceSummary = { appId: marker.appId, workDir, updatedAt: marker.createdAt };\n\n const sf = schemaFile(workDir);\n if (backend.exists(sf)) {\n try {\n const parsed = JSON.parse(backend.readFileSync(sf)) as { name?: unknown };\n if (typeof parsed.name === 'string') summary.name = parsed.name;\n } catch {\n // schema unreadable/invalid — leave name unset\n }\n try {\n summary.updatedAt = (await backend.stat(sf)).mtimeMs;\n } catch {\n // keep marker.createdAt\n }\n }\n\n out.push(summary);\n }\n\n // Most-recently-updated first (matches the cloud list ordering).\n out.sort((a, b) => (b.updatedAt ?? 0) - (a.updatedAt ?? 0));\n return out;\n}\n","/**\n * `deleteWorkspace` — remove a user's app-workspace dir by appId.\n *\n * Locates the workspace via its `app-marker.json` (reuse `findLocalWorkspaceDir`)\n * and removes the tree. Idempotent: returns `false` if no matching workspace.\n * Keeps workspace lifecycle inside the package (consumers don't fs-scan/rm the\n * layout themselves).\n *\n * @packageDocumentation\n */\n\nimport type { WorkspaceBackend } from './internal/types.js';\nimport { LocalBackend } from './internal/backends/local.js';\nimport { MemoryBackend } from './internal/backends/memory.js';\nimport { findLocalWorkspaceDir } from './internal/workspace-resolver.js';\nimport type { ListWorkspacesOptions } from './types.js';\n\nexport async function deleteWorkspace(\n opts: ListWorkspacesOptions & { appId: string },\n): Promise<boolean> {\n const backend: WorkspaceBackend =\n opts.backend === 'memory' ? new MemoryBackend() : new LocalBackend();\n const workDir = await findLocalWorkspaceDir(backend, opts.root, opts.userId, opts.appId);\n if (!workDir) return false;\n await backend.rm(workDir, { recursive: true });\n return true;\n}\n","/**\n * `openAccount` — the account-level store at `~/.almadar/`. Home-rooted and\n * NOT sandboxed (the sibling to the project-scoped, sandboxed WorkspaceService\n * in `open-workspace.ts`). Owns config.json, credentials.json (chmod 600),\n * and the Studio identity overlay account.json.\n */\nimport os from 'node:os';\nimport path from 'node:path';\nimport type { ProviderConfig } from '@almadar/llm';\nimport { LocalBackend } from './internal/backends/local.js';\nimport { MemoryBackend } from './internal/backends/memory.js';\nimport type { WorkspaceBackend } from './internal/types.js';\nimport type {\n AccountConfig,\n AccountIdentity,\n AccountService,\n AuthToken,\n OpenAccountOptions,\n ProviderCredential,\n} from './types.js';\n\nconst ACCOUNT_DIR = '.almadar';\nconst CONFIG_FILE = 'config.json';\nconst CREDENTIALS_FILE = 'credentials.json';\nconst ACCOUNT_FILE = 'account.json';\nconst AUTH_FILE = 'auth.json';\n/** Owner read/write only — credentials.json + auth.json must never be group/world readable. */\nconst SECRET_MODE = 0o600;\n\nconst DEFAULT_CONFIG: AccountConfig = {\n schemaVersion: 1,\n defaultProvider: 'deepseek',\n defaultModel: 'deepseek-v4-flash',\n autonomy: 'balanced',\n source: 'local',\n};\n\nexport async function openAccount(opts: OpenAccountOptions = {}): Promise<AccountService> {\n const home = opts.home ?? os.homedir();\n const root = path.join(home, ACCOUNT_DIR);\n const backend: WorkspaceBackend =\n opts.backend === 'memory' ? new MemoryBackend() : new LocalBackend();\n\n const file = (name: string): string => path.join(root, name);\n\n // Boundary deserialization. Mirrors internal/memory-files.ts `readJsonFile`,\n // but unconstrained by its `T extends JsonObject` bound so typed config\n // interfaces fit. Returns null when the file is absent or empty.\n async function readJson<T>(name: string): Promise<T | null> {\n const p = file(name);\n if (!backend.exists(p)) return null;\n const raw = await backend.readFile(p);\n if (raw.trim().length === 0) return null;\n return JSON.parse(raw) as T;\n }\n\n async function getConfig(): Promise<AccountConfig> {\n const stored = await readJson<AccountConfig>(CONFIG_FILE);\n return stored ? { ...DEFAULT_CONFIG, ...stored } : { ...DEFAULT_CONFIG };\n }\n\n async function setConfig(patch: Partial<AccountConfig>): Promise<void> {\n const next: AccountConfig = { ...(await getConfig()), ...patch };\n await backend.writeFile(file(CONFIG_FILE), JSON.stringify(next, null, 2));\n }\n\n async function readCredentials(): Promise<Record<string, ProviderCredential>> {\n return (await readJson<Record<string, ProviderCredential>>(CREDENTIALS_FILE)) ?? {};\n }\n\n async function writeCredentials(creds: Record<string, ProviderCredential>): Promise<void> {\n const p = file(CREDENTIALS_FILE);\n await backend.writeFile(p, JSON.stringify(creds, null, 2));\n await backend.chmod(p, SECRET_MODE);\n }\n\n return {\n root,\n getConfig,\n setConfig,\n async getCredential(provider: string): Promise<ProviderCredential | null> {\n return (await readCredentials())[provider] ?? null;\n },\n async setCredential(provider: string, cred: ProviderCredential): Promise<void> {\n const creds = await readCredentials();\n creds[provider] = cred;\n await writeCredentials(creds);\n },\n async listCredentialedProviders(): Promise<string[]> {\n return Object.keys(await readCredentials());\n },\n async clearCredential(provider: string): Promise<void> {\n const creds = await readCredentials();\n if (!(provider in creds)) return;\n delete creds[provider];\n await writeCredentials(creds);\n },\n async readAccount(): Promise<AccountIdentity | null> {\n return readJson<AccountIdentity>(ACCOUNT_FILE);\n },\n async writeAccount(identity: AccountIdentity): Promise<void> {\n await backend.writeFile(file(ACCOUNT_FILE), JSON.stringify(identity, null, 2));\n },\n async getAuthToken(): Promise<AuthToken | null> {\n return readJson<AuthToken>(AUTH_FILE);\n },\n async setAuthToken(token: AuthToken): Promise<void> {\n const p = file(AUTH_FILE);\n await backend.writeFile(p, JSON.stringify(token, null, 2));\n await backend.chmod(p, SECRET_MODE);\n },\n async clearAuthToken(): Promise<void> {\n const p = file(AUTH_FILE);\n if (backend.exists(p)) await backend.rm(p);\n },\n async resolveProviderConfig(provider: string): Promise<ProviderConfig | null> {\n const creds = await readCredentials();\n const cred = creds[provider];\n if (!cred) return null;\n const cfg = await getConfig();\n const override = cfg.providers?.[provider];\n return {\n apiKey: cred.apiKey,\n ...(override?.baseUrl ? { baseUrl: override.baseUrl } : {}),\n defaultModel: override?.model ?? cfg.defaultModel,\n };\n },\n async isConfigured(): Promise<boolean> {\n const cfg = await getConfig();\n if (!cfg.setupCompletedAt) return false;\n // BYO-key (a stored provider credential) OR signed-in studio (an auth token).\n if (Object.keys(await readCredentials()).length > 0) return true;\n return (await readJson<AuthToken>(AUTH_FILE)) !== null;\n },\n async dispose(): Promise<void> {\n // No long-lived resources to release.\n },\n };\n}\n"]}
|