@hilbras/omninode 0.3.0 → 0.4.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/README.md +20 -3
- package/dist/cli/index.js +374 -26
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +96 -34
- package/dist/index.js +288 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/index.ts","../../src/version.ts","../../src/errors/index.ts","../../src/cli/commands/init.ts","../../src/config/schema.ts","../../src/config/loader.ts","../../src/config/default.ts","../../src/cli/commands/project.ts","../../src/cli/commands/providers.ts","../../src/providers/auth.ts","../../src/providers/http.ts","../../src/logger/index.ts","../../src/providers/openai-compatible/index.ts","../../src/providers/omnihilbras/index.ts","../../src/providers/factory.ts","../../src/registry/index.ts","../../src/cli/commands/shared.ts","../../src/cli/commands/models.ts","../../src/cli/commands/agents.ts","../../src/cli/commands/roles.ts","../../src/cli/commands/tasks.ts","../../src/cli/commands/reports.ts"],"sourcesContent":["import { pathToFileURL } from \"node:url\";\nimport { realpathSync } from \"node:fs\";\nimport { Command } from \"commander\";\nimport { OMNINODE_VERSION } from \"../version.js\";\nimport { isOmniNodeError } from \"../errors/index.js\";\nimport { registerInitCommand } from \"./commands/init.js\";\nimport { registerProjectCommands } from \"./commands/project.js\";\nimport { registerProviderCommands } from \"./commands/providers.js\";\nimport { registerModelsCommand } from \"./commands/models.js\";\nimport { registerAgentCommands } from \"./commands/agents.js\";\nimport { registerRoleCommands } from \"./commands/roles.js\";\nimport { registerTaskCommands } from \"./commands/tasks.js\";\nimport { registerReportCommands } from \"./commands/reports.js\";\n\nexport function createProgram(): Command {\n const program = new Command();\n\n program\n .name(\"omninode\")\n .description(\n \"Provider-agnostic multi-AI orchestration platform: coordinate CLI agents, \" +\n \"AI providers, memory, roles, reports and planning in one execution system.\",\n )\n .version(OMNINODE_VERSION, \"-v, --version\", \"Print the OmniNode version.\");\n\n registerInitCommand(program);\n registerProjectCommands(program);\n registerProviderCommands(program);\n registerAgentCommands(program);\n registerRoleCommands(program);\n registerTaskCommands(program);\n registerReportCommands(program);\n registerModelsCommand(program);\n\n return program;\n}\n\nexport async function run(argv: string[]): Promise<void> {\n const program = createProgram();\n try {\n await program.parseAsync(argv);\n } catch (error) {\n handleError(error);\n }\n}\n\nexport function handleError(error: unknown): never {\n if (isOmniNodeError(error)) {\n console.error(`error: [${error.code}] ${error.message}`);\n if (error.details !== undefined) {\n console.error(JSON.stringify(error.details, null, 2));\n }\n process.exit(1);\n }\n console.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n}\n\nconst entry = process.argv[1]\n ? pathToFileURL(realpathSync(process.argv[1])).href\n : \"\";\nif (import.meta.url === entry) {\n run(process.argv).catch((error) => handleError(error));\n}\n","export const OMNINODE_VERSION = \"0.3.0\";\n","/** Typed error hierarchy shared across the whole codebase (§4.1 — error model). */\n\nexport type OmniNodeErrorCode =\n | \"CONFIG_NOT_FOUND\"\n | \"CONFIG_INVALID\"\n | \"PROVIDER_NOT_FOUND\"\n | \"PROVIDER_UNAVAILABLE\"\n | \"PROVIDER_AUTH_FAILED\"\n | \"MODEL_NOT_FOUND\"\n | \"AGENT_NOT_FOUND\"\n | \"AGENT_FAILED\"\n | \"AGENT_TIMEOUT\"\n | \"TASK_INVALID\"\n | \"TASK_FAILED\"\n | \"PIPELINE_INVALID\"\n | \"PIPELINE_FAILED\"\n | \"PROTOCOL_VIOLATION\"\n | \"MEMORY_UNAVAILABLE\"\n | \"NOT_IMPLEMENTED\"\n | \"CLI_USAGE\"\n | \"INTERNAL\";\n\nexport interface OmniNodeErrorOptions {\n cause?: unknown;\n details?: Record<string, unknown>;\n}\n\nexport class OmniNodeError extends Error {\n readonly code: OmniNodeErrorCode;\n readonly details?: Record<string, unknown>;\n\n constructor(code: OmniNodeErrorCode, message: string, options: OmniNodeErrorOptions = {}) {\n super(message, { cause: options.cause });\n this.name = new.target.name;\n this.code = code;\n this.details = options.details;\n }\n}\n\nexport class ConfigError extends OmniNodeError {\n constructor(\n code: \"CONFIG_NOT_FOUND\" | \"CONFIG_INVALID\",\n message: string,\n options: OmniNodeErrorOptions = {},\n ) {\n super(code, message, options);\n }\n}\n\nexport class ProviderError extends OmniNodeError {\n constructor(\n code:\n | \"PROVIDER_NOT_FOUND\"\n | \"PROVIDER_UNAVAILABLE\"\n | \"PROVIDER_AUTH_FAILED\"\n | \"MODEL_NOT_FOUND\",\n message: string,\n options: OmniNodeErrorOptions = {},\n ) {\n super(code, message, options);\n }\n}\n\nexport class AgentError extends OmniNodeError {\n constructor(\n code: \"AGENT_NOT_FOUND\" | \"AGENT_FAILED\" | \"AGENT_TIMEOUT\",\n message: string,\n options: OmniNodeErrorOptions = {},\n ) {\n super(code, message, options);\n }\n}\n\nexport class TaskError extends OmniNodeError {\n constructor(\n code: \"TASK_INVALID\" | \"TASK_FAILED\",\n message: string,\n options: OmniNodeErrorOptions = {},\n ) {\n super(code, message, options);\n }\n}\n\nexport class PipelineError extends OmniNodeError {\n constructor(\n code: \"PIPELINE_INVALID\" | \"PIPELINE_FAILED\",\n message: string,\n options: OmniNodeErrorOptions = {},\n ) {\n super(code, message, options);\n }\n}\n\nexport class ProtocolError extends OmniNodeError {\n constructor(message: string, options: OmniNodeErrorOptions = {}) {\n super(\"PROTOCOL_VIOLATION\", message, options);\n }\n}\n\nexport class MemoryError extends OmniNodeError {\n constructor(message: string, options: OmniNodeErrorOptions = {}) {\n super(\"MEMORY_UNAVAILABLE\", message, options);\n }\n}\n\nexport function isOmniNodeError(value: unknown): value is OmniNodeError {\n return value instanceof OmniNodeError;\n}\n","import { existsSync, writeFileSync } from \"node:fs\";\nimport type { Command } from \"commander\";\nimport { OmniNodeError } from \"../../errors/index.js\";\nimport { defaultProjectConfigYaml } from \"../../config/index.js\";\n\nexport async function runInit(options: { force?: boolean; name?: string }): Promise<void> {\n const target = `${process.cwd()}/omninode.yaml`;\n if (!options.force && existsSync(target)) {\n throw new OmniNodeError(\n \"CLI_USAGE\",\n `${target} already exists. Use --force to overwrite it.`,\n );\n }\n writeFileSync(target, defaultProjectConfigYaml(options.name), \"utf8\");\n console.log(`Created ${target}`);\n console.log(\"\\nNext steps:\");\n console.log(\" 1. Add a provider under `project.providers` (see omninode.yaml.example).\");\n console.log(\" 2. Register CLI agents under `project.agents`.\");\n console.log(\" 3. Run `omninode provider list` to validate the configuration.\");\n}\n\nexport function registerInitCommand(program: Command): void {\n program\n .command(\"init\")\n .description(\"Create an omninode.yaml project configuration in the current directory.\")\n .option(\"-f, --force\", \"Overwrite an existing omninode.yaml.\")\n .option(\"-n, --name <name>\", \"Project name to write into the configuration.\", \"My Project\")\n .action(async (options: { force?: boolean; name: string }) => runInit(options));\n}\n","/**\n * Configuration schema. The project file (omninode.yaml) uses snake_case keys\n * as shown in DEVELOPMENT_PLAN.md §7 and §23; the loader maps them onto the\n * camelCase TypeScript contracts in src/types.\n */\nimport { z } from \"zod\";\n\nexport const providerConfigSchema = z\n .object({\n name: z.string().min(1),\n type: z.enum([\"openai-compatible\", \"omnihilbras\", \"openrouter\", \"local\", \"custom\"]),\n base_url: z.string().url(),\n api_key_env_var: z.string().min(1).optional(),\n headers: z.record(z.string()).optional(),\n enabled: z.boolean().optional(),\n metadata: z.record(z.unknown()).optional(),\n })\n .strict();\n\nexport const agentConfigSchema = z\n .object({\n name: z.string().min(1),\n /** \"cli\" agents communicate over stdin/stdout (process adapter). */\n type: z.enum([\"cli\", \"native\", \"process\"]).default(\"cli\"),\n command: z.string().min(1).optional(),\n args: z.array(z.string()).optional(),\n cwd: z.string().optional(),\n env: z.record(z.string()).optional(),\n metadata: z.record(z.unknown()).optional(),\n })\n .strict();\n\nexport const roleConfigSchema = z\n .object({\n id: z\n .string()\n .min(1)\n .regex(/^[a-z0-9][a-z0-9-]*$/, \"role id must be kebab-case\"),\n name: z.string().min(1),\n description: z.string().optional(),\n responsibilities: z.array(z.string()).default([]),\n expected_outputs: z.array(z.string()).default([]),\n preferred_agents: z.array(z.string()).optional(),\n system_prompt: z.string().optional(),\n metadata: z.record(z.unknown()).optional(),\n })\n .strict();\n\nexport const projectConfigSchema = z\n .object({\n name: z.string().min(1),\n providers: z.array(providerConfigSchema).default([]),\n agents: z.array(agentConfigSchema).default([]),\n roles: z.array(roleConfigSchema).default([]),\n memory: z\n .object({ provider: z.string().min(1) })\n .strict()\n .optional(),\n })\n .strict();\n\nexport const appConfigSchema = z\n .object({\n project: projectConfigSchema,\n logging: z\n .object({ level: z.enum([\"debug\", \"info\", \"warn\", \"error\"]) })\n .strict()\n .optional(),\n })\n .strict();\n\nexport type ProviderConfigYaml = z.infer<typeof providerConfigSchema>;\nexport type AgentConfigYaml = z.infer<typeof agentConfigSchema>;\nexport type RoleConfigYaml = z.infer<typeof roleConfigSchema>;\nexport type ProjectConfigYaml = z.infer<typeof projectConfigSchema>;\nexport type AppConfigYaml = z.infer<typeof appConfigSchema>;\n","/**\n * Configuration loader: discovers omninode.yaml, expands ${ENV_VAR}\n * references (so credentials never live in project files, §24), validates it\n * and maps it onto the core TypeScript contracts.\n */\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { parse as parseYaml } from \"yaml\";\nimport { ConfigError } from \"../errors/index.js\";\nimport type { AgentConfig, AgentIntegrationType } from \"../types/agent.js\";\nimport type { ProviderConfig } from \"../types/provider.js\";\nimport type { RoleDefinition } from \"../types/role.js\";\nimport type { LogLevel } from \"../logger/index.js\";\nimport { appConfigSchema } from \"./schema.js\";\nimport type { AgentConfigYaml, ProviderConfigYaml, RoleConfigYaml } from \"./schema.js\";\n\nconst CONFIG_FILENAMES = [\"omninode.yaml\", \"omninode.yml\", \"omninode.json\"];\n\nexport interface AppConfig {\n project: {\n name: string;\n providers: ProviderConfig[];\n agents: AgentConfig[];\n roles: RoleDefinition[];\n memory?: {\n provider: string;\n };\n };\n logging?: {\n level: LogLevel;\n };\n}\n\nexport interface LoadConfigOptions {\n /** Explicit path; otherwise omninode.yaml/yml/json is looked up in the given directory. */\n path?: string;\n directory?: string;\n /** Environment used for ${VAR} expansion; defaults to process.env. */\n env?: Record<string, string | undefined>;\n}\n\nexport function findConfigFile(directory = process.cwd()): string | undefined {\n for (const filename of CONFIG_FILENAMES) {\n const candidate = `${directory}/${filename}`;\n if (existsSync(candidate)) return candidate;\n }\n return undefined;\n}\n\n/**\n * Replaces ${VAR} and ${VAR:-fallback} references. Unset variables without a\n * fallback abort loading: a half-resolved config could silently misroute\n * authentication.\n */\nexport function expandEnvRefs(\n text: string,\n env: Record<string, string | undefined>,\n source = \"config\",\n): string {\n return text.replace(\n /\\$\\{([A-Za-z_][A-Za-z0-9_]*)(?::-([^}]*))?\\}/g,\n (_match, name: string, fallback?: string) => {\n const value = env[name] ?? fallback;\n if (value === undefined) {\n throw new ConfigError(\n \"CONFIG_INVALID\",\n `Environment variable \"${name}\" is referenced in ${source} but is not set and has no default.`,\n );\n }\n return value;\n },\n );\n}\n\nexport function loadConfig(options: LoadConfigOptions = {}): AppConfig {\n const env = options.env ?? process.env;\n const path = options.path ?? (options.directory ? findConfigFile(options.directory) : findConfigFile());\n if (!path) {\n throw new ConfigError(\n \"CONFIG_NOT_FOUND\",\n \"No omninode.yaml found. Run `omninode init` to create one, or pass an explicit path.\",\n );\n }\n\n const raw = readFileSync(path, \"utf8\");\n const expanded = expandEnvRefs(raw, env, path);\n\n let data: unknown;\n try {\n data = parseYaml(expanded);\n } catch (error) {\n throw new ConfigError(\"CONFIG_INVALID\", `Failed to parse ${path}.`, { cause: error });\n }\n\n const parsed = appConfigSchema.safeParse(data);\n if (!parsed.success) {\n const issues = parsed.error.issues.map((issue) => {\n const location = issue.path.length > 0 ? issue.path.join(\".\") : \"(root)\";\n return `${location}: ${issue.message}`;\n });\n throw new ConfigError(\"CONFIG_INVALID\", `Invalid configuration in ${path}.`, {\n details: { issues },\n });\n }\n\n return toAppConfig(parsed.data);\n}\n\nfunction toAppConfig(yaml: ReturnType<typeof appConfigSchema.parse>): AppConfig {\n return {\n project: {\n name: yaml.project.name,\n providers: yaml.project.providers.map(toProviderConfig),\n agents: yaml.project.agents.map(toAgentConfig),\n roles: yaml.project.roles.map(toRoleDefinition),\n ...(yaml.project.memory !== undefined ? { memory: yaml.project.memory } : {}),\n },\n ...(yaml.logging !== undefined ? { logging: yaml.logging } : {}),\n };\n}\n\nfunction toProviderConfig(raw: ProviderConfigYaml): ProviderConfig {\n return {\n name: raw.name,\n type: raw.type,\n baseUrl: raw.base_url,\n apiKeyEnvVar: raw.api_key_env_var,\n headers: raw.headers,\n enabled: raw.enabled,\n metadata: raw.metadata,\n };\n}\n\nfunction toAgentConfig(raw: AgentConfigYaml): AgentConfig {\n const integration: AgentIntegrationType =\n raw.type === \"native\" ? \"native\" : \"process\";\n return {\n name: raw.name,\n integration,\n command: raw.command,\n args: raw.args,\n cwd: raw.cwd,\n env: raw.env,\n metadata: raw.metadata,\n };\n}\n\nfunction toRoleDefinition(raw: RoleConfigYaml): RoleDefinition {\n return {\n id: raw.id,\n name: raw.name,\n description: raw.description,\n responsibilities: raw.responsibilities,\n expectedOutputs: raw.expected_outputs,\n preferredAgents: raw.preferred_agents,\n systemPrompt: raw.system_prompt,\n metadata: raw.metadata,\n };\n}\n\n","/** Template written by `omninode init` (§22, §23). */\n\nexport function defaultProjectConfigYaml(projectName = \"My Project\"): string {\n return `project:\n name: ${projectName}\n\n # Providers connect OmniNode to AI model gateways (Phase 1+).\n # Credentials are referenced by environment variable, never stored in this file.\n providers: []\n # - name: my-gateway\n # type: openai-compatible\n # base_url: https://example.com/v1\n # api_key_env_var: MY_API_KEY\n\n # CLI agents registered with OmniNode (Phase 3 wires them up).\n agents: []\n # - name: opencode\n # type: cli\n # command: opencode\n\n # Roles describe what an AI is supposed to do (Phase 4).\n roles: []\n # - id: architecture-reviewer\n # name: Architecture Reviewer\n # responsibilities:\n # - architecture analysis\n # expected_outputs:\n # - findings\n # - recommendations\n\n # Memory is optional; Remembera is the preferred integration (Phase 7).\n # memory:\n # provider: remembera\n`;\n}\n","import type { Command } from \"commander\";\nimport { runInit } from \"./init.js\";\n\nexport function registerProjectCommands(program: Command): void {\n const project = program\n .command(\"project\")\n .description(\"Project-level operations.\");\n\n project\n .command(\"init\")\n .description(\"Alias of `omninode init`.\")\n .option(\"-f, --force\", \"Overwrite an existing omninode.yaml.\")\n .option(\"-n, --name <name>\", \"Project name to write into the configuration.\", \"My Project\")\n .action(async (options: { force?: boolean; name: string }) => runInit(options));\n}\n","import { readFileSync, writeFileSync } from \"node:fs\";\nimport type { Command } from \"commander\";\nimport { parseDocument } from \"yaml\";\nimport { appConfigSchema, findConfigFile, loadConfig, providerConfigSchema } from \"../../config/index.js\";\nimport { ConfigError, OmniNodeError, ProviderError } from \"../../errors/index.js\";\nimport { createProvider, OmniHilbrasProvider } from \"../../providers/index.js\";\nimport { ModelRegistry } from \"../../registry/index.js\";\nimport type { ProviderStatus } from \"../../types/provider.js\";\nimport { notImplemented } from \"./shared.js\";\n\ninterface AddProviderOptions {\n name: string;\n baseUrl: string;\n type: string;\n apiKeyEnvVar?: string;\n}\n\nexport function registerProviderCommands(program: Command): void {\n const provider = program\n .command(\"provider\")\n .description(\"Manage AI providers configured in omninode.yaml.\");\n\n provider\n .command(\"list\")\n .description(\"List configured providers.\")\n .action(async () => {\n const config = loadConfig();\n const providers = config.project.providers;\n if (providers.length === 0) {\n console.log(\n \"No providers configured. Add one with `omninode provider add` or edit omninode.yaml.\",\n );\n return;\n }\n for (const provider of providers) {\n const key = provider.apiKeyEnvVar ? `$${provider.apiKeyEnvVar}` : \"none\";\n const enabled = provider.enabled === false ? \" (disabled)\" : \"\";\n console.log(\n `${provider.name} type=${provider.type} base_url=${provider.baseUrl} key=${key}${enabled}`,\n );\n }\n });\n\n provider\n .command(\"add\")\n .description(\n \"Add a provider to omninode.yaml. OpenAI-compatible gateways (including OpenRouter \" +\n \"and local runtimes) are supported today; OmniHilbras gets its own adapter in Phase 2.\",\n )\n .requiredOption(\"--name <name>\", \"Unique provider name used in configuration and the model registry.\")\n .requiredOption(\"--base-url <url>\", \"Provider base URL, e.g. https://example.com/v1\")\n .option(\n \"--type <type>\",\n \"Provider type: openai-compatible, omnihilbras, openrouter, local or custom.\",\n \"openai-compatible\",\n )\n .option(\n \"--api-key-env-var <envVar>\",\n \"Environment variable holding the API key. Keys are never written to the config file.\",\n )\n .action(async (options: AddProviderOptions) => addProvider(options));\n\n provider\n .command(\"test <name>\")\n .description(\"Test connectivity, authentication and model discovery for a configured provider.\")\n .option(\n \"--connect\",\n \"Run the full provider connect flow (authenticate, fetch, validate, register) where the adapter supports it.\",\n )\n .action(async (name: string, options: { connect?: boolean }) => testProvider(name, options));\n\n provider\n .command(\"remove <name>\")\n .description(\"Remove a provider (planned for Phase 1 follow-up).\")\n .action(() => {\n throw notImplemented(\"omninode provider remove\", \"a Phase 1 follow-up\");\n });\n}\n\nexport async function addProvider(options: AddProviderOptions): Promise<void> {\n const configPath = findConfigFile();\n if (!configPath) {\n throw new OmniNodeError(\"CONFIG_NOT_FOUND\", \"No omninode.yaml found. Run `omninode init` first.\");\n }\n\n const candidate = providerConfigSchema.safeParse({\n name: options.name,\n type: options.type,\n base_url: options.baseUrl,\n ...(options.apiKeyEnvVar !== undefined ? { api_key_env_var: options.apiKeyEnvVar } : {}),\n });\n if (!candidate.success) {\n const issues = candidate.error.issues\n .map((issue) => `${issue.path.join(\".\") || \"(root)\"}: ${issue.message}`)\n .join(\"; \");\n throw new OmniNodeError(\"CLI_USAGE\", `Invalid provider options: ${issues}`);\n }\n const newProvider = candidate.data;\n\n const existing = loadConfig();\n if (existing.project.providers.some((p) => p.name === newProvider.name)) {\n throw new OmniNodeError(\n \"CLI_USAGE\",\n `Provider \"${newProvider.name}\" already exists in ${configPath}.`,\n );\n }\n\n // Edit as a YAML document so existing comments and formatting survive.\n const doc = parseDocument(readFileSync(configPath, \"utf8\"));\n if (doc.getIn([\"project\", \"providers\"]) === undefined) {\n doc.setIn([\"project\", \"providers\"], [newProvider]);\n } else {\n doc.addIn([\"project\", \"providers\"], newProvider);\n }\n\n const validated = appConfigSchema.safeParse(doc.toJS());\n if (!validated.success) {\n const issues = validated.error.issues\n .map((issue) => `${issue.path.join(\".\") || \"(root)\"}: ${issue.message}`)\n .join(\"; \");\n throw new ConfigError(\n \"CONFIG_INVALID\",\n `Editing ${configPath} would produce an invalid configuration: ${issues}`,\n );\n }\n\n writeFileSync(configPath, doc.toString(), \"utf8\");\n console.log(`Added provider \"${newProvider.name}\" (${newProvider.type}) to ${configPath}.`);\n if (newProvider.api_key_env_var) {\n console.log(\n `Set $${newProvider.api_key_env_var} in your environment, then run: omninode provider test ${newProvider.name}`,\n );\n } else {\n console.log(`Run \\`omninode provider test ${newProvider.name}\\` to verify connectivity.`);\n }\n}\n\nexport async function testProvider(\n name: string,\n options: { connect?: boolean } = {},\n): Promise<void> {\n const config = loadConfig();\n const providerConfig = config.project.providers.find((p) => p.name === name);\n if (!providerConfig) {\n const available = config.project.providers.map((p) => p.name).join(\", \") || \"(none)\";\n throw new ProviderError(\n \"PROVIDER_NOT_FOUND\",\n `Provider \"${name}\" is not configured. Configured providers: ${available}.`,\n );\n }\n\n const provider = createProvider(providerConfig);\n console.log(`Testing provider \"${name}\" (${providerConfig.type}) at ${provider.config.baseUrl}`);\n\n if (options.connect && provider instanceof OmniHilbrasProvider) {\n const registry = new ModelRegistry();\n try {\n const result = await provider.connect(registry);\n printProviderStatus(result.status);\n console.log(` registered: ${result.registered}`);\n } catch (error) {\n console.log(` connect failed: ${error instanceof Error ? error.message : String(error)}`);\n process.exitCode = 1;\n }\n return;\n }\n\n const health = await provider.healthCheck();\n printProviderStatus(health);\n if (!health.connected) process.exitCode = 1;\n}\n\nfunction printProviderStatus(status: ProviderStatus): void {\n console.log(` health: ${status.health}`);\n console.log(` connected: ${status.connected}`);\n console.log(` models: ${status.modelCount}`);\n if (status.message) console.log(` detail: ${status.message}`);\n}\n","/**\n * Authentication resolution (§24): API keys live in the environment and are\n * referenced from configuration by variable name — never stored in files.\n */\nimport { ProviderError } from \"../errors/index.js\";\nimport type { ProviderConfig } from \"../types/provider.js\";\n\nexport function resolveApiKey(\n config: ProviderConfig,\n env: Record<string, string | undefined> = process.env,\n): string | undefined {\n if (!config.apiKeyEnvVar) return undefined;\n const value = env[config.apiKeyEnvVar];\n if (!value) {\n throw new ProviderError(\n \"PROVIDER_AUTH_FAILED\",\n `Environment variable \"${config.apiKeyEnvVar}\" (referenced by provider \"${config.name}\") is not set.`,\n );\n }\n return value;\n}\n\nexport function authHeaders(\n config: ProviderConfig,\n env: Record<string, string | undefined> = process.env,\n): Record<string, string> {\n const key = resolveApiKey(config, env);\n const base = { ...(config.headers ?? {}) };\n return key ? { ...base, authorization: `Bearer ${key}` } : base;\n}\n","/**\n * Thin JSON HTTP layer over global fetch. HTTP error statuses are returned to\n * the caller, not thrown — provider methods interpret them; only transport\n * failures (network, timeout, unparseable body) throw.\n */\nimport { ProviderError } from \"../errors/index.js\";\n\nexport interface HttpRequestOptions {\n method?: \"GET\" | \"POST\";\n headers?: Record<string, string>;\n body?: unknown;\n timeoutMs?: number;\n}\n\nexport interface HttpResponse {\n status: number;\n body: unknown;\n}\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\n\nexport async function requestJson(\n url: string,\n options: HttpRequestOptions = {},\n): Promise<HttpResponse> {\n const { method = \"GET\", headers = {}, body, timeoutMs = DEFAULT_TIMEOUT_MS } = options;\n\n let response: Response;\n try {\n response = await fetch(url, {\n method,\n headers: {\n accept: \"application/json\",\n ...(body !== undefined ? { \"content-type\": \"application/json\" } : {}),\n ...headers,\n },\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n signal: AbortSignal.timeout(timeoutMs),\n });\n } catch (error) {\n const reason =\n error instanceof Error && error.name === \"TimeoutError\"\n ? `timed out after ${timeoutMs}ms`\n : error instanceof Error\n ? error.message\n : String(error);\n throw new ProviderError(\"PROVIDER_UNAVAILABLE\", `Request to ${url} failed: ${reason}.`, {\n cause: error,\n });\n }\n\n let parsed: unknown;\n try {\n parsed = await response.json();\n } catch (error) {\n throw new ProviderError(\"PROVIDER_UNAVAILABLE\", `Response from ${url} was not valid JSON.`, {\n cause: error,\n details: { status: response.status },\n });\n }\n\n return { status: response.status, body: parsed };\n}\n","/** Leveled logger with a pluggable sink and child loggers (§4.1 — logging). */\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nexport interface LogSink {\n write(level: LogLevel, line: string): void;\n}\n\nconst LEVEL_ORDER: Record<LogLevel, number> = {\n debug: 10,\n info: 20,\n warn: 30,\n error: 40,\n};\n\nexport interface WritableLike {\n write(chunk: string): unknown;\n}\n\nexport class ConsoleLogSink implements LogSink {\n constructor(private readonly stream: WritableLike = process.stderr) {}\n\n write(_level: LogLevel, line: string): void {\n this.stream.write(line + \"\\n\");\n }\n}\n\nexport interface LoggerOptions {\n level?: LogLevel;\n sink?: LogSink;\n /** Structured fields attached to every line, e.g. { component: \"config\" }. */\n context?: Record<string, unknown>;\n}\n\nexport class Logger {\n private readonly level: LogLevel;\n private readonly sink: LogSink;\n private readonly context: Record<string, unknown>;\n\n constructor(options: LoggerOptions = {}) {\n this.level = options.level ?? \"info\";\n this.sink = options.sink ?? new ConsoleLogSink();\n this.context = options.context ?? {};\n }\n\n child(context: Record<string, unknown>): Logger {\n return new Logger({\n level: this.level,\n sink: this.sink,\n context: { ...this.context, ...context },\n });\n }\n\n debug(message: string, data?: Record<string, unknown>): void {\n this.log(\"debug\", message, data);\n }\n\n info(message: string, data?: Record<string, unknown>): void {\n this.log(\"info\", message, data);\n }\n\n warn(message: string, data?: Record<string, unknown>): void {\n this.log(\"warn\", message, data);\n }\n\n error(message: string, data?: Record<string, unknown>): void {\n this.log(\"error\", message, data);\n }\n\n private log(level: LogLevel, message: string, data?: Record<string, unknown>): void {\n if (LEVEL_ORDER[level] < LEVEL_ORDER[this.level]) return;\n const parts = [new Date().toISOString(), level.toUpperCase(), message];\n const merged = { ...this.context, ...data };\n if (Object.keys(merged).length > 0) {\n parts.push(JSON.stringify(merged));\n }\n this.sink.write(level, parts.join(\" \"));\n }\n}\n\n/** Default application logger. Writes to stderr so stdout stays clean for CLI output. */\nexport const logger = new Logger();\n","/**\n * OpenAI-compatible provider adapter (§5, §7): works with OpenAI, OpenRouter,\n * local runtimes (Ollama/LM Studio/vLLM) and custom gateways that expose the\n * /models and /chat/completions endpoints.\n */\nimport { ProviderError } from \"../../errors/index.js\";\nimport { logger, type Logger } from \"../../logger/index.js\";\nimport type { ChatRequest, ChatResponse } from \"../../types/chat.js\";\nimport type { ModelInfo } from \"../../types/model.js\";\nimport type { IChatProvider, ProviderConfig, ProviderStatus } from \"../../types/provider.js\";\nimport { authHeaders } from \"../auth.js\";\nimport { requestJson } from \"../http.js\";\n\ninterface OpenAIModelEntry {\n id?: unknown;\n owned_by?: unknown;\n created?: unknown;\n}\n\ninterface OpenAIChatResponse {\n model?: unknown;\n choices?: unknown;\n usage?: unknown;\n}\n\nexport class OpenAICompatibleProvider implements IChatProvider {\n readonly config: ProviderConfig;\n private readonly log: Logger;\n\n constructor(config: ProviderConfig, log: Logger = logger) {\n this.config = { ...config, baseUrl: normalizeBaseUrl(config.baseUrl) };\n this.log = log.child({ provider: config.name });\n }\n\n async listModels(): Promise<ModelInfo[]> {\n const { status, body } = await requestJson(`${this.config.baseUrl}/models`, {\n headers: authHeaders(this.config),\n });\n if (status === 401 || status === 403) {\n throw authFailed(this.config, status);\n }\n if (status !== 200) {\n throw unavailable(this.config, `Model discovery returned HTTP ${status}.`, status);\n }\n\n const entries = extractModelEntries(body, this.config);\n const models: ModelInfo[] = [];\n let skipped = 0;\n for (const entry of entries) {\n if (typeof entry.id !== \"string\" || entry.id.length === 0) {\n skipped += 1;\n continue;\n }\n models.push({\n provider: this.config.name,\n id: entry.id,\n displayName: entry.id,\n status: \"available\",\n metadata: {\n ...(typeof entry.owned_by === \"string\" ? { ownedBy: entry.owned_by } : {}),\n ...(typeof entry.created === \"number\" ? { createdAt: entry.created } : {}),\n },\n });\n }\n if (skipped > 0) {\n this.log.warn(`Skipped ${skipped} model entr(y/ies) without a valid id.`);\n }\n return models;\n }\n\n async healthCheck(): Promise<ProviderStatus> {\n const lastCheckedAt = new Date().toISOString();\n try {\n const started = Date.now();\n const models = await this.listModels();\n return {\n name: this.config.name,\n type: this.config.type,\n baseUrl: this.config.baseUrl,\n health: \"healthy\",\n connected: true,\n modelCount: models.length,\n lastCheckedAt,\n message: `Discovered ${models.length} model(s) in ${Date.now() - started}ms.`,\n };\n } catch (error) {\n return {\n name: this.config.name,\n type: this.config.type,\n baseUrl: this.config.baseUrl,\n health: inferHealth(error),\n connected: false,\n modelCount: 0,\n lastCheckedAt,\n message: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n async chat(request: ChatRequest): Promise<ChatResponse> {\n const { status, body } = await requestJson(`${this.config.baseUrl}/chat/completions`, {\n method: \"POST\",\n headers: authHeaders(this.config),\n body: {\n model: request.model,\n messages: request.messages,\n ...(request.temperature !== undefined ? { temperature: request.temperature } : {}),\n ...(request.maxTokens !== undefined ? { max_tokens: request.maxTokens } : {}),\n ...(request.stop !== undefined ? { stop: request.stop } : {}),\n },\n });\n\n if (status === 401 || status === 403) throw authFailed(this.config, status);\n if (status === 404) {\n throw new ProviderError(\n \"MODEL_NOT_FOUND\",\n `Model \"${request.model}\" or the chat endpoint was not found on provider \"${this.config.name}\" (HTTP 404).`,\n { details: { status } },\n );\n }\n if (status !== 200) {\n throw unavailable(this.config, `Chat completion returned HTTP ${status}.`, status);\n }\n\n const payload = body as OpenAIChatResponse;\n const choices = Array.isArray(payload.choices) ? payload.choices : [];\n const first = choices[0] as { message?: { content?: unknown }; finish_reason?: unknown } | undefined;\n if (!first || typeof first.message?.content !== \"string\") {\n throw unavailable(this.config, \"Chat completion response had no message content.\", status);\n }\n\n const usage = (payload.usage ?? {}) as {\n prompt_tokens?: unknown;\n completion_tokens?: unknown;\n total_tokens?: unknown;\n };\n\n return {\n model: typeof payload.model === \"string\" ? payload.model : request.model,\n content: first.message.content,\n finishReason: typeof first.finish_reason === \"string\" ? first.finish_reason : undefined,\n usage: {\n promptTokens: typeof usage.prompt_tokens === \"number\" ? usage.prompt_tokens : undefined,\n completionTokens:\n typeof usage.completion_tokens === \"number\" ? usage.completion_tokens : undefined,\n totalTokens: typeof usage.total_tokens === \"number\" ? usage.total_tokens : undefined,\n },\n raw: body,\n };\n }\n}\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, \"\");\n}\n\nfunction extractModelEntries(body: unknown, config: ProviderConfig): OpenAIModelEntry[] {\n if (Array.isArray(body)) return body as OpenAIModelEntry[];\n if (body !== null && typeof body === \"object\" && Array.isArray((body as { data?: unknown }).data)) {\n return (body as { data: OpenAIModelEntry[] }).data;\n }\n throw new ProviderError(\n \"PROVIDER_UNAVAILABLE\",\n `Provider \"${config.name}\" returned an unrecognized model list shape.`,\n { details: { endpoint: \"models\" } },\n );\n}\n\nfunction authFailed(config: ProviderConfig, status: number): ProviderError {\n const envHint = config.apiKeyEnvVar\n ? ` Check that $${config.apiKeyEnvVar} is set and valid.`\n : \" The provider requires authentication; configure api_key_env_var for it.\";\n return new ProviderError(\n \"PROVIDER_AUTH_FAILED\",\n `Authentication with provider \"${config.name}\" failed (HTTP ${status}).${envHint}`,\n { details: { status } },\n );\n}\n\nfunction unavailable(config: ProviderConfig, message: string, status: number): ProviderError {\n return new ProviderError(\"PROVIDER_UNAVAILABLE\", `Provider \"${config.name}\": ${message}`, {\n details: { status },\n });\n}\n\nfunction inferHealth(error: unknown): \"degraded\" | \"unreachable\" {\n const status =\n error instanceof ProviderError && typeof error.details?.status === \"number\"\n ? error.details.status\n : undefined;\n return status !== undefined && status >= 500 ? \"degraded\" : \"unreachable\";\n}\n","/**\n * OmniHilbras provider adapter (§6, Phase 2).\n *\n * OmniHilbras is one provider source among many — always optional (§2: the\n * core runs with zero Hilbras dependencies). The gateway exposes an\n * OpenAI-compatible API surface, so this adapter rides the OpenAI-compatible\n * transport and implements the plan's connect flow on top of it:\n *\n * Connect → Authenticate → Fetch Models → Validate Models → Register\n */\nimport { resolveApiKey } from \"../auth.js\";\nimport { OpenAICompatibleProvider } from \"../openai-compatible/index.js\";\nimport type { ModelRegistry } from \"../../registry/index.js\";\nimport type { ModelInfo } from \"../../types/model.js\";\nimport type { ProviderStatus } from \"../../types/provider.js\";\n\nexport interface OmniHilbrasConnectionResult {\n status: ProviderStatus;\n /** Validated, deduplicated models — registered when a registry was given. */\n models: ModelInfo[];\n /** Model ids that appeared more than once in the gateway's list. */\n duplicates: string[];\n /** Number of models written into the registry (0 when no registry given). */\n registered: number;\n}\n\nexport class OmniHilbrasProvider extends OpenAICompatibleProvider {\n /**\n * Run the full connect flow. Throws on authentication or transport failure\n * (use healthCheck() for a non-throwing probe).\n */\n async connect(registry?: ModelRegistry): Promise<OmniHilbrasConnectionResult> {\n // Authenticate — throws PROVIDER_AUTH_FAILED when the referenced env var is unset.\n const apiKey = resolveApiKey(this.config);\n\n // Fetch models — throws on transport errors and non-2xx responses.\n const discovered = await this.listModels();\n\n // Validate — deduplicate ids, annotate gateway metadata, force availability.\n const seen = new Set<string>();\n const models: ModelInfo[] = [];\n const duplicates: string[] = [];\n for (const model of discovered) {\n if (seen.has(model.id)) {\n duplicates.push(model.id);\n continue;\n }\n seen.add(model.id);\n models.push({\n ...model,\n provider: this.config.name,\n status: \"available\",\n metadata: { ...model.metadata, gateway: \"omnihilbras\" },\n });\n }\n\n // Register.\n if (registry) {\n for (const model of models) registry.register(model);\n }\n\n const message =\n `Authenticated${apiKey ? \" with API key\" : \" (no API key configured)\"}; ` +\n `validated ${models.length} unique model(s)` +\n (duplicates.length > 0 ? `, skipped ${duplicates.length} duplicate(s)` : \"\") +\n \".\";\n\n const status: ProviderStatus = {\n name: this.config.name,\n type: this.config.type,\n baseUrl: this.config.baseUrl,\n health: \"healthy\",\n connected: true,\n modelCount: models.length,\n lastCheckedAt: new Date().toISOString(),\n message,\n };\n\n return { status, models, duplicates, registered: registry ? models.length : 0 };\n }\n}\n","/**\n * Provider factory: builds adapter instances from configuration (§5, §7).\n * Custom and local gateways ride the OpenAI-compatible adapter unless a\n * dedicated one exists.\n */\nimport { OmniNodeError } from \"../errors/index.js\";\nimport type { IChatProvider, ProviderConfig, ProviderType } from \"../types/provider.js\";\nimport { OmniHilbrasProvider } from \"./omnihilbras/index.js\";\nimport { OpenAICompatibleProvider } from \"./openai-compatible/index.js\";\n\n/** Provider types served by the OpenAI-compatible adapter. */\nexport const OPENAI_COMPATIBLE_TYPES: readonly ProviderType[] = [\n \"openai-compatible\",\n \"openrouter\",\n \"local\",\n \"custom\",\n];\n\nexport function createProvider(config: ProviderConfig): IChatProvider {\n if (config.type === \"omnihilbras\") {\n return new OmniHilbrasProvider(config);\n }\n if (OPENAI_COMPATIBLE_TYPES.includes(config.type)) {\n return new OpenAICompatibleProvider(config);\n }\n throw new OmniNodeError(\"NOT_IMPLEMENTED\", `Provider type \"${config.type}\" has no adapter yet.`);\n}\n","/**\n * Normalized model registry (§8): aggregates models discovered from all\n * configured providers under \"provider:model\" keys.\n */\nimport type { ModelCapabilities, ModelInfo } from \"../types/model.js\";\nimport type { IProvider } from \"../types/provider.js\";\n\nexport interface ModelFilter {\n provider?: string;\n capability?: keyof ModelCapabilities;\n}\n\nexport interface DiscoveryResult {\n provider: string;\n models: ModelInfo[];\n error?: Error;\n}\n\nexport function registryKey(provider: string, id: string): string {\n return `${provider}:${id}`;\n}\n\nexport class ModelRegistry {\n private readonly models = new Map<string, ModelInfo>();\n\n register(model: ModelInfo): void {\n this.models.set(registryKey(model.provider, model.id), model);\n }\n\n get(provider: string, id: string): ModelInfo | undefined {\n return this.models.get(registryKey(provider, id));\n }\n\n list(filter: ModelFilter = {}): ModelInfo[] {\n return [...this.models.values()]\n .filter((model) => (filter.provider ? model.provider === filter.provider : true))\n .filter((model) =>\n filter.capability ? model.capabilities?.[filter.capability] === true : true,\n )\n .sort((a, b) => a.provider.localeCompare(b.provider) || a.id.localeCompare(b.id));\n }\n\n /** Availability validation (§27 Phase 1): present in the registry and not retired. */\n isAvailable(provider: string, id: string): boolean {\n const model = this.get(provider, id);\n return model !== undefined && (model.status ?? \"available\") === \"available\";\n }\n\n /** Discover models from one provider and register them. */\n async discoverFrom(provider: IProvider): Promise<ModelInfo[]> {\n const discovered = await provider.listModels();\n for (const model of discovered) this.register(model);\n return discovered;\n }\n\n /** Discover from many providers; a failing provider does not abort the rest. */\n async discoverAll(providers: IProvider[]): Promise<DiscoveryResult[]> {\n return Promise.all(\n providers.map(async (provider) => {\n try {\n return {\n provider: provider.config.name,\n models: await this.discoverFrom(provider),\n };\n } catch (error) {\n return {\n provider: provider.config.name,\n models: [],\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n }),\n );\n }\n}\n","import { OmniNodeError } from \"../../errors/index.js\";\n\n/** Shared helper for commands whose phase has not landed yet. */\nexport function notImplemented(command: string, when: string): OmniNodeError {\n return new OmniNodeError(\n \"NOT_IMPLEMENTED\",\n `${command} is planned for ${when}. Edit omninode.yaml directly for now.`,\n );\n}\n","import type { Command } from \"commander\";\nimport { loadConfig } from \"../../config/index.js\";\nimport { OmniNodeError } from \"../../errors/index.js\";\nimport { createProvider } from \"../../providers/index.js\";\nimport { ModelRegistry } from \"../../registry/index.js\";\nimport type { ModelCapabilities } from \"../../types/model.js\";\n\nconst CAPABILITIES: readonly (keyof ModelCapabilities)[] = [\n \"chat\",\n \"coding\",\n \"tools\",\n \"vision\",\n \"embeddings\",\n];\n\nexport function registerModelsCommand(program: Command): void {\n program\n .command(\"models\")\n .description(\"Discover and list models from configured providers (model registry, §8).\")\n .argument(\"[provider]\", \"Only discover from this provider.\")\n .option(\"-c, --capability <capability>\", `Filter by capability: ${CAPABILITIES.join(\", \")}.`)\n .action(async (providerName: string | undefined, options: { capability?: string }) => {\n const capability = options.capability as keyof ModelCapabilities | undefined;\n if (capability !== undefined && !CAPABILITIES.includes(capability)) {\n throw new OmniNodeError(\n \"CLI_USAGE\",\n `Unknown capability \"${options.capability}\". Valid capabilities: ${CAPABILITIES.join(\", \")}.`,\n );\n }\n\n const config = loadConfig();\n const selected = config.project.providers.filter((p) =>\n providerName ? p.name === providerName : true,\n );\n if (selected.length === 0) {\n throw new OmniNodeError(\n \"PROVIDER_NOT_FOUND\",\n providerName\n ? `Provider \"${providerName}\" is not configured.`\n : \"No providers configured. Add one with `omninode provider add`.\",\n );\n }\n\n const registry = new ModelRegistry();\n for (const providerConfig of selected) {\n try {\n const provider = createProvider(providerConfig);\n const discovered = await registry.discoverFrom(provider);\n console.log(`${providerConfig.name}: ${discovered.length} model(s)`);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.log(`${providerConfig.name}: discovery failed — ${message}`);\n }\n }\n\n const models = registry.list({\n ...(providerName !== undefined ? { provider: providerName } : {}),\n ...(capability !== undefined ? { capability } : {}),\n });\n if (models.length === 0) {\n console.log(\"No models found.\");\n return;\n }\n console.log(\"\");\n for (const model of models) {\n console.log(`${model.provider}:${model.id}`);\n }\n });\n}\n","import type { Command } from \"commander\";\nimport { loadConfig } from \"../../config/index.js\";\nimport { notImplemented } from \"./shared.js\";\n\nexport function registerAgentCommands(program: Command): void {\n const agent = program\n .command(\"agent\")\n .description(\"Manage CLI agents registered with OmniNode.\");\n\n agent\n .command(\"list\")\n .description(\"List configured agents.\")\n .action(async () => {\n const config = loadConfig();\n const agents = config.project.agents;\n if (agents.length === 0) {\n console.log(\"No agents configured. Add one under `project.agents` in omninode.yaml.\");\n return;\n }\n for (const agent of agents) {\n const command = agent.command ?? \"(no command)\";\n console.log(\n `${agent.name} integration=${agent.integration} command=${command}`,\n );\n }\n });\n\n agent\n .command(\"add\")\n .description(\"Register an agent (planned for Phase 3 — CLI Agent System).\")\n .action(() => {\n throw notImplemented(\"omninode agent add\", \"Phase 3 (CLI Agent System)\");\n });\n}\n","import type { Command } from \"commander\";\nimport { loadConfig } from \"../../config/index.js\";\n\nexport function registerRoleCommands(program: Command): void {\n const role = program\n .command(\"role\")\n .description(\"Inspect roles defined in omninode.yaml.\");\n\n role\n .command(\"list\")\n .description(\"List configured roles.\")\n .action(async () => {\n const config = loadConfig();\n const roles = config.project.roles;\n if (roles.length === 0) {\n console.log(\"No roles configured. Add one under `project.roles` in omninode.yaml.\");\n return;\n }\n for (const role of roles) {\n console.log(`${role.id} ${role.name}`);\n for (const responsibility of role.responsibilities) {\n console.log(` - ${responsibility}`);\n }\n }\n });\n}\n","import type { Command } from \"commander\";\nimport { notImplemented } from \"./shared.js\";\n\nexport function registerTaskCommands(program: Command): void {\n const task = program\n .command(\"task\")\n .description(\"Create, run and inspect tasks (Phase 4+).\");\n\n task\n .command(\"create\")\n .description(\"Create a task (planned for Phase 4 — Roles & Tasks).\")\n .action(() => {\n throw notImplemented(\"omninode task create\", \"Phase 4 (Roles & Tasks)\");\n });\n\n task\n .command(\"run <objective>\")\n .description(\"Run a task or pipeline (planned for Phase 5 — Pipeline Engine).\")\n .action(() => {\n throw notImplemented(\"omninode task run\", \"Phase 5 (Pipeline Engine)\");\n });\n\n task\n .command(\"status <task-id>\")\n .description(\"Show task status (planned for Phase 4 — Roles & Tasks).\")\n .action(() => {\n throw notImplemented(\"omninode task status\", \"Phase 4 (Roles & Tasks)\");\n });\n}\n","import type { Command } from \"commander\";\nimport { notImplemented } from \"./shared.js\";\n\nexport function registerReportCommands(program: Command): void {\n const report = program\n .command(\"report\")\n .description(\"Inspect AI reports (Phase 6+).\");\n\n report\n .command(\"list\")\n .description(\"List collected reports (planned for Phase 6 — Multi-AI Report System).\")\n .action(() => {\n throw notImplemented(\"omninode report list\", \"Phase 6 (Multi-AI Report System)\");\n });\n}\n"],"mappings":"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","names":["existsSync","existsSync","readFileSync","writeFileSync","entry","provider","readFileSync","writeFileSync","agent","role"]}
|
|
1
|
+
{"version":3,"sources":["../../src/cli/index.ts","../../src/version.ts","../../src/errors/index.ts","../../src/cli/commands/init.ts","../../src/config/schema.ts","../../src/config/loader.ts","../../src/config/default.ts","../../src/cli/commands/project.ts","../../src/providers/auth.ts","../../src/providers/http.ts","../../src/logger/index.ts","../../src/providers/openai-compatible/index.ts","../../src/providers/omnihilbras/index.ts","../../src/providers/factory.ts","../../src/registry/index.ts","../../src/cli/commands/shared.ts","../../src/cli/commands/providers.ts","../../src/cli/commands/models.ts","../../src/agents/process/index.ts","../../src/agents/factory.ts","../../src/cli/commands/agents.ts","../../src/cli/commands/roles.ts","../../src/cli/commands/tasks.ts","../../src/cli/commands/reports.ts"],"sourcesContent":["import { pathToFileURL } from \"node:url\";\nimport { realpathSync } from \"node:fs\";\nimport { Command } from \"commander\";\nimport { OMNINODE_VERSION } from \"../version.js\";\nimport { isOmniNodeError } from \"../errors/index.js\";\nimport { registerInitCommand } from \"./commands/init.js\";\nimport { registerProjectCommands } from \"./commands/project.js\";\nimport { registerProviderCommands } from \"./commands/providers.js\";\nimport { registerModelsCommand } from \"./commands/models.js\";\nimport { registerAgentCommands } from \"./commands/agents.js\";\nimport { registerRoleCommands } from \"./commands/roles.js\";\nimport { registerTaskCommands } from \"./commands/tasks.js\";\nimport { registerReportCommands } from \"./commands/reports.js\";\n\nexport function createProgram(): Command {\n const program = new Command();\n\n program\n .name(\"omninode\")\n .description(\n \"Provider-agnostic multi-AI orchestration platform: coordinate CLI agents, \" +\n \"AI providers, memory, roles, reports and planning in one execution system.\",\n )\n .version(OMNINODE_VERSION, \"-v, --version\", \"Print the OmniNode version.\");\n\n registerInitCommand(program);\n registerProjectCommands(program);\n registerProviderCommands(program);\n registerAgentCommands(program);\n registerRoleCommands(program);\n registerTaskCommands(program);\n registerReportCommands(program);\n registerModelsCommand(program);\n\n return program;\n}\n\nexport async function run(argv: string[]): Promise<void> {\n const program = createProgram();\n try {\n await program.parseAsync(argv);\n } catch (error) {\n handleError(error);\n }\n}\n\nexport function handleError(error: unknown): never {\n if (isOmniNodeError(error)) {\n console.error(`error: [${error.code}] ${error.message}`);\n if (error.details !== undefined) {\n console.error(JSON.stringify(error.details, null, 2));\n }\n process.exit(1);\n }\n console.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n}\n\nconst entry = process.argv[1]\n ? pathToFileURL(realpathSync(process.argv[1])).href\n : \"\";\nif (import.meta.url === entry) {\n run(process.argv).catch((error) => handleError(error));\n}\n","export const OMNINODE_VERSION = \"0.4.0\";\n","/** Typed error hierarchy shared across the whole codebase (§4.1 — error model). */\n\nexport type OmniNodeErrorCode =\n | \"CONFIG_NOT_FOUND\"\n | \"CONFIG_INVALID\"\n | \"PROVIDER_NOT_FOUND\"\n | \"PROVIDER_UNAVAILABLE\"\n | \"PROVIDER_AUTH_FAILED\"\n | \"MODEL_NOT_FOUND\"\n | \"AGENT_NOT_FOUND\"\n | \"AGENT_FAILED\"\n | \"AGENT_TIMEOUT\"\n | \"TASK_INVALID\"\n | \"TASK_FAILED\"\n | \"PIPELINE_INVALID\"\n | \"PIPELINE_FAILED\"\n | \"PROTOCOL_VIOLATION\"\n | \"MEMORY_UNAVAILABLE\"\n | \"NOT_IMPLEMENTED\"\n | \"CLI_USAGE\"\n | \"INTERNAL\";\n\nexport interface OmniNodeErrorOptions {\n cause?: unknown;\n details?: Record<string, unknown>;\n}\n\nexport class OmniNodeError extends Error {\n readonly code: OmniNodeErrorCode;\n readonly details?: Record<string, unknown>;\n\n constructor(code: OmniNodeErrorCode, message: string, options: OmniNodeErrorOptions = {}) {\n super(message, { cause: options.cause });\n this.name = new.target.name;\n this.code = code;\n this.details = options.details;\n }\n}\n\nexport class ConfigError extends OmniNodeError {\n constructor(\n code: \"CONFIG_NOT_FOUND\" | \"CONFIG_INVALID\",\n message: string,\n options: OmniNodeErrorOptions = {},\n ) {\n super(code, message, options);\n }\n}\n\nexport class ProviderError extends OmniNodeError {\n constructor(\n code:\n | \"PROVIDER_NOT_FOUND\"\n | \"PROVIDER_UNAVAILABLE\"\n | \"PROVIDER_AUTH_FAILED\"\n | \"MODEL_NOT_FOUND\",\n message: string,\n options: OmniNodeErrorOptions = {},\n ) {\n super(code, message, options);\n }\n}\n\nexport class AgentError extends OmniNodeError {\n constructor(\n code: \"AGENT_NOT_FOUND\" | \"AGENT_FAILED\" | \"AGENT_TIMEOUT\",\n message: string,\n options: OmniNodeErrorOptions = {},\n ) {\n super(code, message, options);\n }\n}\n\nexport class TaskError extends OmniNodeError {\n constructor(\n code: \"TASK_INVALID\" | \"TASK_FAILED\",\n message: string,\n options: OmniNodeErrorOptions = {},\n ) {\n super(code, message, options);\n }\n}\n\nexport class PipelineError extends OmniNodeError {\n constructor(\n code: \"PIPELINE_INVALID\" | \"PIPELINE_FAILED\",\n message: string,\n options: OmniNodeErrorOptions = {},\n ) {\n super(code, message, options);\n }\n}\n\nexport class ProtocolError extends OmniNodeError {\n constructor(message: string, options: OmniNodeErrorOptions = {}) {\n super(\"PROTOCOL_VIOLATION\", message, options);\n }\n}\n\nexport class MemoryError extends OmniNodeError {\n constructor(message: string, options: OmniNodeErrorOptions = {}) {\n super(\"MEMORY_UNAVAILABLE\", message, options);\n }\n}\n\nexport function isOmniNodeError(value: unknown): value is OmniNodeError {\n return value instanceof OmniNodeError;\n}\n","import { existsSync, writeFileSync } from \"node:fs\";\nimport type { Command } from \"commander\";\nimport { OmniNodeError } from \"../../errors/index.js\";\nimport { defaultProjectConfigYaml } from \"../../config/index.js\";\n\nexport async function runInit(options: { force?: boolean; name?: string }): Promise<void> {\n const target = `${process.cwd()}/omninode.yaml`;\n if (!options.force && existsSync(target)) {\n throw new OmniNodeError(\n \"CLI_USAGE\",\n `${target} already exists. Use --force to overwrite it.`,\n );\n }\n writeFileSync(target, defaultProjectConfigYaml(options.name), \"utf8\");\n console.log(`Created ${target}`);\n console.log(\"\\nNext steps:\");\n console.log(\" 1. Add a provider under `project.providers` (see omninode.yaml.example).\");\n console.log(\" 2. Register CLI agents under `project.agents`.\");\n console.log(\" 3. Run `omninode provider list` to validate the configuration.\");\n}\n\nexport function registerInitCommand(program: Command): void {\n program\n .command(\"init\")\n .description(\"Create an omninode.yaml project configuration in the current directory.\")\n .option(\"-f, --force\", \"Overwrite an existing omninode.yaml.\")\n .option(\"-n, --name <name>\", \"Project name to write into the configuration.\", \"My Project\")\n .action(async (options: { force?: boolean; name: string }) => runInit(options));\n}\n","/**\n * Configuration schema. The project file (omninode.yaml) uses snake_case keys\n * as shown in DEVELOPMENT_PLAN.md §7 and §23; the loader maps them onto the\n * camelCase TypeScript contracts in src/types.\n */\nimport { z } from \"zod\";\n\nexport const providerConfigSchema = z\n .object({\n name: z.string().min(1),\n type: z.enum([\"openai-compatible\", \"omnihilbras\", \"openrouter\", \"local\", \"custom\"]),\n base_url: z.string().url(),\n api_key_env_var: z.string().min(1).optional(),\n headers: z.record(z.string()).optional(),\n enabled: z.boolean().optional(),\n metadata: z.record(z.unknown()).optional(),\n })\n .strict();\n\nexport const agentConfigSchema = z\n .object({\n name: z.string().min(1),\n /** \"cli\" agents communicate over stdin/stdout (process adapter). */\n type: z.enum([\"cli\", \"native\", \"process\"]).default(\"cli\"),\n command: z.string().min(1).optional(),\n args: z.array(z.string()).optional(),\n cwd: z.string().optional(),\n env: z.record(z.string()).optional(),\n input_mode: z.enum([\"stdin\", \"arg\", \"protocol\"]).default(\"stdin\"),\n timeout_ms: z.number().int().positive().optional(),\n metadata: z.record(z.unknown()).optional(),\n })\n .strict();\n\nexport const roleConfigSchema = z\n .object({\n id: z\n .string()\n .min(1)\n .regex(/^[a-z0-9][a-z0-9-]*$/, \"role id must be kebab-case\"),\n name: z.string().min(1),\n description: z.string().optional(),\n responsibilities: z.array(z.string()).default([]),\n expected_outputs: z.array(z.string()).default([]),\n preferred_agents: z.array(z.string()).optional(),\n system_prompt: z.string().optional(),\n metadata: z.record(z.unknown()).optional(),\n })\n .strict();\n\nexport const projectConfigSchema = z\n .object({\n name: z.string().min(1),\n providers: z.array(providerConfigSchema).default([]),\n agents: z.array(agentConfigSchema).default([]),\n roles: z.array(roleConfigSchema).default([]),\n memory: z\n .object({ provider: z.string().min(1) })\n .strict()\n .optional(),\n })\n .strict();\n\nexport const appConfigSchema = z\n .object({\n project: projectConfigSchema,\n logging: z\n .object({ level: z.enum([\"debug\", \"info\", \"warn\", \"error\"]) })\n .strict()\n .optional(),\n })\n .strict();\n\nexport type ProviderConfigYaml = z.infer<typeof providerConfigSchema>;\nexport type AgentConfigYaml = z.infer<typeof agentConfigSchema>;\nexport type RoleConfigYaml = z.infer<typeof roleConfigSchema>;\nexport type ProjectConfigYaml = z.infer<typeof projectConfigSchema>;\nexport type AppConfigYaml = z.infer<typeof appConfigSchema>;\n","/**\n * Configuration loader: discovers omninode.yaml, expands ${ENV_VAR}\n * references (so credentials never live in project files, §24), validates it\n * and maps it onto the core TypeScript contracts.\n */\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { parse as parseYaml } from \"yaml\";\nimport { ConfigError } from \"../errors/index.js\";\nimport type { AgentConfig, AgentIntegrationType } from \"../types/agent.js\";\nimport type { ProviderConfig } from \"../types/provider.js\";\nimport type { RoleDefinition } from \"../types/role.js\";\nimport type { LogLevel } from \"../logger/index.js\";\nimport { appConfigSchema } from \"./schema.js\";\nimport type { AgentConfigYaml, ProviderConfigYaml, RoleConfigYaml } from \"./schema.js\";\n\nconst CONFIG_FILENAMES = [\"omninode.yaml\", \"omninode.yml\", \"omninode.json\"];\n\nexport interface AppConfig {\n project: {\n name: string;\n providers: ProviderConfig[];\n agents: AgentConfig[];\n roles: RoleDefinition[];\n memory?: {\n provider: string;\n };\n };\n logging?: {\n level: LogLevel;\n };\n}\n\nexport interface LoadConfigOptions {\n /** Explicit path; otherwise omninode.yaml/yml/json is looked up in the given directory. */\n path?: string;\n directory?: string;\n /** Environment used for ${VAR} expansion; defaults to process.env. */\n env?: Record<string, string | undefined>;\n}\n\nexport function findConfigFile(directory = process.cwd()): string | undefined {\n for (const filename of CONFIG_FILENAMES) {\n const candidate = `${directory}/${filename}`;\n if (existsSync(candidate)) return candidate;\n }\n return undefined;\n}\n\n/**\n * Replaces ${VAR} and ${VAR:-fallback} references. Unset variables without a\n * fallback abort loading: a half-resolved config could silently misroute\n * authentication.\n */\nexport function expandEnvRefs(\n text: string,\n env: Record<string, string | undefined>,\n source = \"config\",\n): string {\n return text.replace(\n /\\$\\{([A-Za-z_][A-Za-z0-9_]*)(?::-([^}]*))?\\}/g,\n (_match, name: string, fallback?: string) => {\n const value = env[name] ?? fallback;\n if (value === undefined) {\n throw new ConfigError(\n \"CONFIG_INVALID\",\n `Environment variable \"${name}\" is referenced in ${source} but is not set and has no default.`,\n );\n }\n return value;\n },\n );\n}\n\nexport function loadConfig(options: LoadConfigOptions = {}): AppConfig {\n const env = options.env ?? process.env;\n const path = options.path ?? (options.directory ? findConfigFile(options.directory) : findConfigFile());\n if (!path) {\n throw new ConfigError(\n \"CONFIG_NOT_FOUND\",\n \"No omninode.yaml found. Run `omninode init` to create one, or pass an explicit path.\",\n );\n }\n\n const raw = readFileSync(path, \"utf8\");\n const expanded = expandEnvRefs(raw, env, path);\n\n let data: unknown;\n try {\n data = parseYaml(expanded);\n } catch (error) {\n throw new ConfigError(\"CONFIG_INVALID\", `Failed to parse ${path}.`, { cause: error });\n }\n\n const parsed = appConfigSchema.safeParse(data);\n if (!parsed.success) {\n const issues = parsed.error.issues.map((issue) => {\n const location = issue.path.length > 0 ? issue.path.join(\".\") : \"(root)\";\n return `${location}: ${issue.message}`;\n });\n throw new ConfigError(\"CONFIG_INVALID\", `Invalid configuration in ${path}.`, {\n details: { issues },\n });\n }\n\n return toAppConfig(parsed.data);\n}\n\nfunction toAppConfig(yaml: ReturnType<typeof appConfigSchema.parse>): AppConfig {\n return {\n project: {\n name: yaml.project.name,\n providers: yaml.project.providers.map(toProviderConfig),\n agents: yaml.project.agents.map(toAgentConfig),\n roles: yaml.project.roles.map(toRoleDefinition),\n ...(yaml.project.memory !== undefined ? { memory: yaml.project.memory } : {}),\n },\n ...(yaml.logging !== undefined ? { logging: yaml.logging } : {}),\n };\n}\n\nfunction toProviderConfig(raw: ProviderConfigYaml): ProviderConfig {\n return {\n name: raw.name,\n type: raw.type,\n baseUrl: raw.base_url,\n apiKeyEnvVar: raw.api_key_env_var,\n headers: raw.headers,\n enabled: raw.enabled,\n metadata: raw.metadata,\n };\n}\n\nfunction toAgentConfig(raw: AgentConfigYaml): AgentConfig {\n const integration: AgentIntegrationType =\n raw.type === \"native\" ? \"native\" : \"process\";\n return {\n name: raw.name,\n integration,\n command: raw.command,\n args: raw.args,\n cwd: raw.cwd,\n env: raw.env,\n inputMode: raw.input_mode,\n timeoutMs: raw.timeout_ms,\n metadata: raw.metadata,\n };\n}\n\nfunction toRoleDefinition(raw: RoleConfigYaml): RoleDefinition {\n return {\n id: raw.id,\n name: raw.name,\n description: raw.description,\n responsibilities: raw.responsibilities,\n expectedOutputs: raw.expected_outputs,\n preferredAgents: raw.preferred_agents,\n systemPrompt: raw.system_prompt,\n metadata: raw.metadata,\n };\n}\n\n","/** Template written by `omninode init` (§22, §23). */\n\nexport function defaultProjectConfigYaml(projectName = \"My Project\"): string {\n return `project:\n name: ${projectName}\n\n # Providers connect OmniNode to AI model gateways (Phase 1+).\n # Credentials are referenced by environment variable, never stored in this file.\n providers: []\n # - name: my-gateway\n # type: openai-compatible\n # base_url: https://example.com/v1\n # api_key_env_var: MY_API_KEY\n\n # CLI agents registered with OmniNode (Phase 3 wires them up).\n agents: []\n # - name: opencode\n # type: cli\n # command: opencode\n\n # Roles describe what an AI is supposed to do (Phase 4).\n roles: []\n # - id: architecture-reviewer\n # name: Architecture Reviewer\n # responsibilities:\n # - architecture analysis\n # expected_outputs:\n # - findings\n # - recommendations\n\n # Memory is optional; Remembera is the preferred integration (Phase 7).\n # memory:\n # provider: remembera\n`;\n}\n","import type { Command } from \"commander\";\nimport { runInit } from \"./init.js\";\n\nexport function registerProjectCommands(program: Command): void {\n const project = program\n .command(\"project\")\n .description(\"Project-level operations.\");\n\n project\n .command(\"init\")\n .description(\"Alias of `omninode init`.\")\n .option(\"-f, --force\", \"Overwrite an existing omninode.yaml.\")\n .option(\"-n, --name <name>\", \"Project name to write into the configuration.\", \"My Project\")\n .action(async (options: { force?: boolean; name: string }) => runInit(options));\n}\n","/**\n * Authentication resolution (§24): API keys live in the environment and are\n * referenced from configuration by variable name — never stored in files.\n */\nimport { ProviderError } from \"../errors/index.js\";\nimport type { ProviderConfig } from \"../types/provider.js\";\n\nexport function resolveApiKey(\n config: ProviderConfig,\n env: Record<string, string | undefined> = process.env,\n): string | undefined {\n if (!config.apiKeyEnvVar) return undefined;\n const value = env[config.apiKeyEnvVar];\n if (!value) {\n throw new ProviderError(\n \"PROVIDER_AUTH_FAILED\",\n `Environment variable \"${config.apiKeyEnvVar}\" (referenced by provider \"${config.name}\") is not set.`,\n );\n }\n return value;\n}\n\nexport function authHeaders(\n config: ProviderConfig,\n env: Record<string, string | undefined> = process.env,\n): Record<string, string> {\n const key = resolveApiKey(config, env);\n const base = { ...(config.headers ?? {}) };\n return key ? { ...base, authorization: `Bearer ${key}` } : base;\n}\n","/**\n * Thin JSON HTTP layer over global fetch. HTTP error statuses are returned to\n * the caller, not thrown — provider methods interpret them; only transport\n * failures (network, timeout, unparseable body) throw.\n */\nimport { ProviderError } from \"../errors/index.js\";\n\nexport interface HttpRequestOptions {\n method?: \"GET\" | \"POST\";\n headers?: Record<string, string>;\n body?: unknown;\n timeoutMs?: number;\n}\n\nexport interface HttpResponse {\n status: number;\n body: unknown;\n}\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\n\nexport async function requestJson(\n url: string,\n options: HttpRequestOptions = {},\n): Promise<HttpResponse> {\n const { method = \"GET\", headers = {}, body, timeoutMs = DEFAULT_TIMEOUT_MS } = options;\n\n let response: Response;\n try {\n response = await fetch(url, {\n method,\n headers: {\n accept: \"application/json\",\n ...(body !== undefined ? { \"content-type\": \"application/json\" } : {}),\n ...headers,\n },\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n signal: AbortSignal.timeout(timeoutMs),\n });\n } catch (error) {\n const reason =\n error instanceof Error && error.name === \"TimeoutError\"\n ? `timed out after ${timeoutMs}ms`\n : error instanceof Error\n ? error.message\n : String(error);\n throw new ProviderError(\"PROVIDER_UNAVAILABLE\", `Request to ${url} failed: ${reason}.`, {\n cause: error,\n });\n }\n\n let parsed: unknown;\n try {\n parsed = await response.json();\n } catch (error) {\n throw new ProviderError(\"PROVIDER_UNAVAILABLE\", `Response from ${url} was not valid JSON.`, {\n cause: error,\n details: { status: response.status },\n });\n }\n\n return { status: response.status, body: parsed };\n}\n","/** Leveled logger with a pluggable sink and child loggers (§4.1 — logging). */\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nexport interface LogSink {\n write(level: LogLevel, line: string): void;\n}\n\nconst LEVEL_ORDER: Record<LogLevel, number> = {\n debug: 10,\n info: 20,\n warn: 30,\n error: 40,\n};\n\nexport interface WritableLike {\n write(chunk: string): unknown;\n}\n\nexport class ConsoleLogSink implements LogSink {\n constructor(private readonly stream: WritableLike = process.stderr) {}\n\n write(_level: LogLevel, line: string): void {\n this.stream.write(line + \"\\n\");\n }\n}\n\nexport interface LoggerOptions {\n level?: LogLevel;\n sink?: LogSink;\n /** Structured fields attached to every line, e.g. { component: \"config\" }. */\n context?: Record<string, unknown>;\n}\n\nexport class Logger {\n private readonly level: LogLevel;\n private readonly sink: LogSink;\n private readonly context: Record<string, unknown>;\n\n constructor(options: LoggerOptions = {}) {\n this.level = options.level ?? \"info\";\n this.sink = options.sink ?? new ConsoleLogSink();\n this.context = options.context ?? {};\n }\n\n child(context: Record<string, unknown>): Logger {\n return new Logger({\n level: this.level,\n sink: this.sink,\n context: { ...this.context, ...context },\n });\n }\n\n debug(message: string, data?: Record<string, unknown>): void {\n this.log(\"debug\", message, data);\n }\n\n info(message: string, data?: Record<string, unknown>): void {\n this.log(\"info\", message, data);\n }\n\n warn(message: string, data?: Record<string, unknown>): void {\n this.log(\"warn\", message, data);\n }\n\n error(message: string, data?: Record<string, unknown>): void {\n this.log(\"error\", message, data);\n }\n\n private log(level: LogLevel, message: string, data?: Record<string, unknown>): void {\n if (LEVEL_ORDER[level] < LEVEL_ORDER[this.level]) return;\n const parts = [new Date().toISOString(), level.toUpperCase(), message];\n const merged = { ...this.context, ...data };\n if (Object.keys(merged).length > 0) {\n parts.push(JSON.stringify(merged));\n }\n this.sink.write(level, parts.join(\" \"));\n }\n}\n\n/** Default application logger. Writes to stderr so stdout stays clean for CLI output. */\nexport const logger = new Logger();\n","/**\n * OpenAI-compatible provider adapter (§5, §7): works with OpenAI, OpenRouter,\n * local runtimes (Ollama/LM Studio/vLLM) and custom gateways that expose the\n * /models and /chat/completions endpoints.\n */\nimport { ProviderError } from \"../../errors/index.js\";\nimport { logger, type Logger } from \"../../logger/index.js\";\nimport type { ChatRequest, ChatResponse } from \"../../types/chat.js\";\nimport type { ModelInfo } from \"../../types/model.js\";\nimport type { IChatProvider, ProviderConfig, ProviderStatus } from \"../../types/provider.js\";\nimport { authHeaders } from \"../auth.js\";\nimport { requestJson } from \"../http.js\";\n\ninterface OpenAIModelEntry {\n id?: unknown;\n owned_by?: unknown;\n created?: unknown;\n}\n\ninterface OpenAIChatResponse {\n model?: unknown;\n choices?: unknown;\n usage?: unknown;\n}\n\nexport class OpenAICompatibleProvider implements IChatProvider {\n readonly config: ProviderConfig;\n private readonly log: Logger;\n\n constructor(config: ProviderConfig, log: Logger = logger) {\n this.config = { ...config, baseUrl: normalizeBaseUrl(config.baseUrl) };\n this.log = log.child({ provider: config.name });\n }\n\n async listModels(): Promise<ModelInfo[]> {\n const { status, body } = await requestJson(`${this.config.baseUrl}/models`, {\n headers: authHeaders(this.config),\n });\n if (status === 401 || status === 403) {\n throw authFailed(this.config, status);\n }\n if (status !== 200) {\n throw unavailable(this.config, `Model discovery returned HTTP ${status}.`, status);\n }\n\n const entries = extractModelEntries(body, this.config);\n const models: ModelInfo[] = [];\n let skipped = 0;\n for (const entry of entries) {\n if (typeof entry.id !== \"string\" || entry.id.length === 0) {\n skipped += 1;\n continue;\n }\n models.push({\n provider: this.config.name,\n id: entry.id,\n displayName: entry.id,\n status: \"available\",\n metadata: {\n ...(typeof entry.owned_by === \"string\" ? { ownedBy: entry.owned_by } : {}),\n ...(typeof entry.created === \"number\" ? { createdAt: entry.created } : {}),\n },\n });\n }\n if (skipped > 0) {\n this.log.warn(`Skipped ${skipped} model entr(y/ies) without a valid id.`);\n }\n return models;\n }\n\n async healthCheck(): Promise<ProviderStatus> {\n const lastCheckedAt = new Date().toISOString();\n try {\n const started = Date.now();\n const models = await this.listModels();\n return {\n name: this.config.name,\n type: this.config.type,\n baseUrl: this.config.baseUrl,\n health: \"healthy\",\n connected: true,\n modelCount: models.length,\n lastCheckedAt,\n message: `Discovered ${models.length} model(s) in ${Date.now() - started}ms.`,\n };\n } catch (error) {\n return {\n name: this.config.name,\n type: this.config.type,\n baseUrl: this.config.baseUrl,\n health: inferHealth(error),\n connected: false,\n modelCount: 0,\n lastCheckedAt,\n message: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n async chat(request: ChatRequest): Promise<ChatResponse> {\n const { status, body } = await requestJson(`${this.config.baseUrl}/chat/completions`, {\n method: \"POST\",\n headers: authHeaders(this.config),\n body: {\n model: request.model,\n messages: request.messages,\n ...(request.temperature !== undefined ? { temperature: request.temperature } : {}),\n ...(request.maxTokens !== undefined ? { max_tokens: request.maxTokens } : {}),\n ...(request.stop !== undefined ? { stop: request.stop } : {}),\n },\n });\n\n if (status === 401 || status === 403) throw authFailed(this.config, status);\n if (status === 404) {\n throw new ProviderError(\n \"MODEL_NOT_FOUND\",\n `Model \"${request.model}\" or the chat endpoint was not found on provider \"${this.config.name}\" (HTTP 404).`,\n { details: { status } },\n );\n }\n if (status !== 200) {\n throw unavailable(this.config, `Chat completion returned HTTP ${status}.`, status);\n }\n\n const payload = body as OpenAIChatResponse;\n const choices = Array.isArray(payload.choices) ? payload.choices : [];\n const first = choices[0] as { message?: { content?: unknown }; finish_reason?: unknown } | undefined;\n if (!first || typeof first.message?.content !== \"string\") {\n throw unavailable(this.config, \"Chat completion response had no message content.\", status);\n }\n\n const usage = (payload.usage ?? {}) as {\n prompt_tokens?: unknown;\n completion_tokens?: unknown;\n total_tokens?: unknown;\n };\n\n return {\n model: typeof payload.model === \"string\" ? payload.model : request.model,\n content: first.message.content,\n finishReason: typeof first.finish_reason === \"string\" ? first.finish_reason : undefined,\n usage: {\n promptTokens: typeof usage.prompt_tokens === \"number\" ? usage.prompt_tokens : undefined,\n completionTokens:\n typeof usage.completion_tokens === \"number\" ? usage.completion_tokens : undefined,\n totalTokens: typeof usage.total_tokens === \"number\" ? usage.total_tokens : undefined,\n },\n raw: body,\n };\n }\n}\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, \"\");\n}\n\nfunction extractModelEntries(body: unknown, config: ProviderConfig): OpenAIModelEntry[] {\n if (Array.isArray(body)) return body as OpenAIModelEntry[];\n if (body !== null && typeof body === \"object\" && Array.isArray((body as { data?: unknown }).data)) {\n return (body as { data: OpenAIModelEntry[] }).data;\n }\n throw new ProviderError(\n \"PROVIDER_UNAVAILABLE\",\n `Provider \"${config.name}\" returned an unrecognized model list shape.`,\n { details: { endpoint: \"models\" } },\n );\n}\n\nfunction authFailed(config: ProviderConfig, status: number): ProviderError {\n const envHint = config.apiKeyEnvVar\n ? ` Check that $${config.apiKeyEnvVar} is set and valid.`\n : \" The provider requires authentication; configure api_key_env_var for it.\";\n return new ProviderError(\n \"PROVIDER_AUTH_FAILED\",\n `Authentication with provider \"${config.name}\" failed (HTTP ${status}).${envHint}`,\n { details: { status } },\n );\n}\n\nfunction unavailable(config: ProviderConfig, message: string, status: number): ProviderError {\n return new ProviderError(\"PROVIDER_UNAVAILABLE\", `Provider \"${config.name}\": ${message}`, {\n details: { status },\n });\n}\n\nfunction inferHealth(error: unknown): \"degraded\" | \"unreachable\" {\n const status =\n error instanceof ProviderError && typeof error.details?.status === \"number\"\n ? error.details.status\n : undefined;\n return status !== undefined && status >= 500 ? \"degraded\" : \"unreachable\";\n}\n","/**\n * OmniHilbras provider adapter (§6, Phase 2).\n *\n * OmniHilbras is one provider source among many — always optional (§2: the\n * core runs with zero Hilbras dependencies). The gateway exposes an\n * OpenAI-compatible API surface, so this adapter rides the OpenAI-compatible\n * transport and implements the plan's connect flow on top of it:\n *\n * Connect → Authenticate → Fetch Models → Validate Models → Register\n */\nimport { resolveApiKey } from \"../auth.js\";\nimport { OpenAICompatibleProvider } from \"../openai-compatible/index.js\";\nimport type { ModelRegistry } from \"../../registry/index.js\";\nimport type { ModelInfo } from \"../../types/model.js\";\nimport type { ProviderStatus } from \"../../types/provider.js\";\n\nexport interface OmniHilbrasConnectionResult {\n status: ProviderStatus;\n /** Validated, deduplicated models — registered when a registry was given. */\n models: ModelInfo[];\n /** Model ids that appeared more than once in the gateway's list. */\n duplicates: string[];\n /** Number of models written into the registry (0 when no registry given). */\n registered: number;\n}\n\nexport class OmniHilbrasProvider extends OpenAICompatibleProvider {\n /**\n * Run the full connect flow. Throws on authentication or transport failure\n * (use healthCheck() for a non-throwing probe).\n */\n async connect(registry?: ModelRegistry): Promise<OmniHilbrasConnectionResult> {\n // Authenticate — throws PROVIDER_AUTH_FAILED when the referenced env var is unset.\n const apiKey = resolveApiKey(this.config);\n\n // Fetch models — throws on transport errors and non-2xx responses.\n const discovered = await this.listModels();\n\n // Validate — deduplicate ids, annotate gateway metadata, force availability.\n const seen = new Set<string>();\n const models: ModelInfo[] = [];\n const duplicates: string[] = [];\n for (const model of discovered) {\n if (seen.has(model.id)) {\n duplicates.push(model.id);\n continue;\n }\n seen.add(model.id);\n models.push({\n ...model,\n provider: this.config.name,\n status: \"available\",\n metadata: { ...model.metadata, gateway: \"omnihilbras\" },\n });\n }\n\n // Register.\n if (registry) {\n for (const model of models) registry.register(model);\n }\n\n const message =\n `Authenticated${apiKey ? \" with API key\" : \" (no API key configured)\"}; ` +\n `validated ${models.length} unique model(s)` +\n (duplicates.length > 0 ? `, skipped ${duplicates.length} duplicate(s)` : \"\") +\n \".\";\n\n const status: ProviderStatus = {\n name: this.config.name,\n type: this.config.type,\n baseUrl: this.config.baseUrl,\n health: \"healthy\",\n connected: true,\n modelCount: models.length,\n lastCheckedAt: new Date().toISOString(),\n message,\n };\n\n return { status, models, duplicates, registered: registry ? models.length : 0 };\n }\n}\n","/**\n * Provider factory: builds adapter instances from configuration (§5, §7).\n * Custom and local gateways ride the OpenAI-compatible adapter unless a\n * dedicated one exists.\n */\nimport { OmniNodeError } from \"../errors/index.js\";\nimport type { IChatProvider, ProviderConfig, ProviderType } from \"../types/provider.js\";\nimport { OmniHilbrasProvider } from \"./omnihilbras/index.js\";\nimport { OpenAICompatibleProvider } from \"./openai-compatible/index.js\";\n\n/** Provider types served by the OpenAI-compatible adapter. */\nexport const OPENAI_COMPATIBLE_TYPES: readonly ProviderType[] = [\n \"openai-compatible\",\n \"openrouter\",\n \"local\",\n \"custom\",\n];\n\nexport function createProvider(config: ProviderConfig): IChatProvider {\n if (config.type === \"omnihilbras\") {\n return new OmniHilbrasProvider(config);\n }\n if (OPENAI_COMPATIBLE_TYPES.includes(config.type)) {\n return new OpenAICompatibleProvider(config);\n }\n throw new OmniNodeError(\"NOT_IMPLEMENTED\", `Provider type \"${config.type}\" has no adapter yet.`);\n}\n","/**\n * Normalized model registry (§8): aggregates models discovered from all\n * configured providers under \"provider:model\" keys.\n */\nimport type { ModelCapabilities, ModelInfo } from \"../types/model.js\";\nimport type { IProvider } from \"../types/provider.js\";\n\nexport interface ModelFilter {\n provider?: string;\n capability?: keyof ModelCapabilities;\n}\n\nexport interface DiscoveryResult {\n provider: string;\n models: ModelInfo[];\n error?: Error;\n}\n\nexport function registryKey(provider: string, id: string): string {\n return `${provider}:${id}`;\n}\n\nexport class ModelRegistry {\n private readonly models = new Map<string, ModelInfo>();\n\n register(model: ModelInfo): void {\n this.models.set(registryKey(model.provider, model.id), model);\n }\n\n get(provider: string, id: string): ModelInfo | undefined {\n return this.models.get(registryKey(provider, id));\n }\n\n list(filter: ModelFilter = {}): ModelInfo[] {\n return [...this.models.values()]\n .filter((model) => (filter.provider ? model.provider === filter.provider : true))\n .filter((model) =>\n filter.capability ? model.capabilities?.[filter.capability] === true : true,\n )\n .sort((a, b) => a.provider.localeCompare(b.provider) || a.id.localeCompare(b.id));\n }\n\n /** Availability validation (§27 Phase 1): present in the registry and not retired. */\n isAvailable(provider: string, id: string): boolean {\n const model = this.get(provider, id);\n return model !== undefined && (model.status ?? \"available\") === \"available\";\n }\n\n /** Discover models from one provider and register them. */\n async discoverFrom(provider: IProvider): Promise<ModelInfo[]> {\n const discovered = await provider.listModels();\n for (const model of discovered) this.register(model);\n return discovered;\n }\n\n /** Discover from many providers; a failing provider does not abort the rest. */\n async discoverAll(providers: IProvider[]): Promise<DiscoveryResult[]> {\n return Promise.all(\n providers.map(async (provider) => {\n try {\n return {\n provider: provider.config.name,\n models: await this.discoverFrom(provider),\n };\n } catch (error) {\n return {\n provider: provider.config.name,\n models: [],\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n }),\n );\n }\n}\n","import { readFileSync, writeFileSync } from \"node:fs\";\nimport { parseDocument } from \"yaml\";\nimport { appConfigSchema, findConfigFile } from \"../../config/index.js\";\nimport { ConfigError, OmniNodeError } from \"../../errors/index.js\";\n\n/** Shared helper for commands whose phase has not landed yet. */\nexport function notImplemented(command: string, when: string): OmniNodeError {\n return new OmniNodeError(\n \"NOT_IMPLEMENTED\",\n `${command} is planned for ${when}. Edit omninode.yaml directly for now.`,\n );\n}\n\n/**\n * Appends an item to a list in omninode.yaml, preserving comments and\n * formatting, and validates the resulting document before writing.\n * Returns the config path that was edited.\n */\nexport function appendToConfigList(listKey: \"providers\" | \"agents\", item: unknown): string {\n const configPath = findConfigFile();\n if (!configPath) {\n throw new OmniNodeError(\"CONFIG_NOT_FOUND\", \"No omninode.yaml found. Run `omninode init` first.\");\n }\n\n // Edit as a YAML document so existing comments and formatting survive.\n const doc = parseDocument(readFileSync(configPath, \"utf8\"));\n if (doc.getIn([\"project\", listKey]) === undefined) {\n doc.setIn([\"project\", listKey], [item]);\n } else {\n doc.addIn([\"project\", listKey], item);\n }\n\n const validated = appConfigSchema.safeParse(doc.toJS());\n if (!validated.success) {\n const issues = validated.error.issues\n .map((issue) => `${issue.path.join(\".\") || \"(root)\"}: ${issue.message}`)\n .join(\"; \");\n throw new ConfigError(\n \"CONFIG_INVALID\",\n `Editing ${configPath} would produce an invalid configuration: ${issues}`,\n );\n }\n\n writeFileSync(configPath, doc.toString(), \"utf8\");\n return configPath;\n}\n","import type { Command } from \"commander\";\nimport { findConfigFile, loadConfig, providerConfigSchema } from \"../../config/index.js\";\nimport { OmniNodeError, ProviderError } from \"../../errors/index.js\";\nimport { createProvider, OmniHilbrasProvider } from \"../../providers/index.js\";\nimport { ModelRegistry } from \"../../registry/index.js\";\nimport type { ProviderStatus } from \"../../types/provider.js\";\nimport { appendToConfigList, notImplemented } from \"./shared.js\";\n\ninterface AddProviderOptions {\n name: string;\n baseUrl: string;\n type: string;\n apiKeyEnvVar?: string;\n}\n\nexport function registerProviderCommands(program: Command): void {\n const provider = program\n .command(\"provider\")\n .description(\"Manage AI providers configured in omninode.yaml.\");\n\n provider\n .command(\"list\")\n .description(\"List configured providers.\")\n .action(async () => {\n const config = loadConfig();\n const providers = config.project.providers;\n if (providers.length === 0) {\n console.log(\n \"No providers configured. Add one with `omninode provider add` or edit omninode.yaml.\",\n );\n return;\n }\n for (const provider of providers) {\n const key = provider.apiKeyEnvVar ? `$${provider.apiKeyEnvVar}` : \"none\";\n const enabled = provider.enabled === false ? \" (disabled)\" : \"\";\n console.log(\n `${provider.name} type=${provider.type} base_url=${provider.baseUrl} key=${key}${enabled}`,\n );\n }\n });\n\n provider\n .command(\"add\")\n .description(\n \"Add a provider to omninode.yaml. OpenAI-compatible gateways (including OpenRouter \" +\n \"and local runtimes) are supported today; OmniHilbras gets its own adapter in Phase 2.\",\n )\n .requiredOption(\"--name <name>\", \"Unique provider name used in configuration and the model registry.\")\n .requiredOption(\"--base-url <url>\", \"Provider base URL, e.g. https://example.com/v1\")\n .option(\n \"--type <type>\",\n \"Provider type: openai-compatible, omnihilbras, openrouter, local or custom.\",\n \"openai-compatible\",\n )\n .option(\n \"--api-key-env-var <envVar>\",\n \"Environment variable holding the API key. Keys are never written to the config file.\",\n )\n .action(async (options: AddProviderOptions) => addProvider(options));\n\n provider\n .command(\"test <name>\")\n .description(\"Test connectivity, authentication and model discovery for a configured provider.\")\n .option(\n \"--connect\",\n \"Run the full provider connect flow (authenticate, fetch, validate, register) where the adapter supports it.\",\n )\n .action(async (name: string, options: { connect?: boolean }) => testProvider(name, options));\n\n provider\n .command(\"remove <name>\")\n .description(\"Remove a provider (planned for Phase 1 follow-up).\")\n .action(() => {\n throw notImplemented(\"omninode provider remove\", \"a Phase 1 follow-up\");\n });\n}\n\nexport async function addProvider(options: AddProviderOptions): Promise<void> {\n const configPath = findConfigFile();\n if (!configPath) {\n throw new OmniNodeError(\"CONFIG_NOT_FOUND\", \"No omninode.yaml found. Run `omninode init` first.\");\n }\n\n const candidate = providerConfigSchema.safeParse({\n name: options.name,\n type: options.type,\n base_url: options.baseUrl,\n ...(options.apiKeyEnvVar !== undefined ? { api_key_env_var: options.apiKeyEnvVar } : {}),\n });\n if (!candidate.success) {\n const issues = candidate.error.issues\n .map((issue) => `${issue.path.join(\".\") || \"(root)\"}: ${issue.message}`)\n .join(\"; \");\n throw new OmniNodeError(\"CLI_USAGE\", `Invalid provider options: ${issues}`);\n }\n const newProvider = candidate.data;\n\n // Existing name check happens before the document is edited.\n const existing = loadConfig();\n if (existing.project.providers.some((p) => p.name === newProvider.name)) {\n throw new OmniNodeError(\n \"CLI_USAGE\",\n `Provider \"${newProvider.name}\" already exists in ${findConfigFile() ?? \"omninode.yaml\"}.`,\n );\n }\n\n const writtenPath = appendToConfigList(\"providers\", newProvider);\n console.log(`Added provider \"${newProvider.name}\" (${newProvider.type}) to ${writtenPath}.`);\n if (newProvider.api_key_env_var) {\n console.log(\n `Set $${newProvider.api_key_env_var} in your environment, then run: omninode provider test ${newProvider.name}`,\n );\n } else {\n console.log(`Run \\`omninode provider test ${newProvider.name}\\` to verify connectivity.`);\n }\n}\n\nexport async function testProvider(\n name: string,\n options: { connect?: boolean } = {},\n): Promise<void> {\n const config = loadConfig();\n const providerConfig = config.project.providers.find((p) => p.name === name);\n if (!providerConfig) {\n const available = config.project.providers.map((p) => p.name).join(\", \") || \"(none)\";\n throw new ProviderError(\n \"PROVIDER_NOT_FOUND\",\n `Provider \"${name}\" is not configured. Configured providers: ${available}.`,\n );\n }\n\n const provider = createProvider(providerConfig);\n console.log(`Testing provider \"${name}\" (${providerConfig.type}) at ${provider.config.baseUrl}`);\n\n if (options.connect && provider instanceof OmniHilbrasProvider) {\n const registry = new ModelRegistry();\n try {\n const result = await provider.connect(registry);\n printProviderStatus(result.status);\n console.log(` registered: ${result.registered}`);\n } catch (error) {\n console.log(` connect failed: ${error instanceof Error ? error.message : String(error)}`);\n process.exitCode = 1;\n }\n return;\n }\n\n const health = await provider.healthCheck();\n printProviderStatus(health);\n if (!health.connected) process.exitCode = 1;\n}\n\nfunction printProviderStatus(status: ProviderStatus): void {\n console.log(` health: ${status.health}`);\n console.log(` connected: ${status.connected}`);\n console.log(` models: ${status.modelCount}`);\n if (status.message) console.log(` detail: ${status.message}`);\n}\n","import type { Command } from \"commander\";\nimport { loadConfig } from \"../../config/index.js\";\nimport { OmniNodeError } from \"../../errors/index.js\";\nimport { createProvider } from \"../../providers/index.js\";\nimport { ModelRegistry } from \"../../registry/index.js\";\nimport type { ModelCapabilities } from \"../../types/model.js\";\n\nconst CAPABILITIES: readonly (keyof ModelCapabilities)[] = [\n \"chat\",\n \"coding\",\n \"tools\",\n \"vision\",\n \"embeddings\",\n];\n\nexport function registerModelsCommand(program: Command): void {\n program\n .command(\"models\")\n .description(\"Discover and list models from configured providers (model registry, §8).\")\n .argument(\"[provider]\", \"Only discover from this provider.\")\n .option(\"-c, --capability <capability>\", `Filter by capability: ${CAPABILITIES.join(\", \")}.`)\n .action(async (providerName: string | undefined, options: { capability?: string }) => {\n const capability = options.capability as keyof ModelCapabilities | undefined;\n if (capability !== undefined && !CAPABILITIES.includes(capability)) {\n throw new OmniNodeError(\n \"CLI_USAGE\",\n `Unknown capability \"${options.capability}\". Valid capabilities: ${CAPABILITIES.join(\", \")}.`,\n );\n }\n\n const config = loadConfig();\n const selected = config.project.providers.filter((p) =>\n providerName ? p.name === providerName : true,\n );\n if (selected.length === 0) {\n throw new OmniNodeError(\n \"PROVIDER_NOT_FOUND\",\n providerName\n ? `Provider \"${providerName}\" is not configured.`\n : \"No providers configured. Add one with `omninode provider add`.\",\n );\n }\n\n const registry = new ModelRegistry();\n for (const providerConfig of selected) {\n try {\n const provider = createProvider(providerConfig);\n const discovered = await registry.discoverFrom(provider);\n console.log(`${providerConfig.name}: ${discovered.length} model(s)`);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.log(`${providerConfig.name}: discovery failed — ${message}`);\n }\n }\n\n const models = registry.list({\n ...(providerName !== undefined ? { provider: providerName } : {}),\n ...(capability !== undefined ? { capability } : {}),\n });\n if (models.length === 0) {\n console.log(\"No models found.\");\n return;\n }\n console.log(\"\");\n for (const model of models) {\n console.log(`${model.provider}:${model.id}`);\n }\n });\n}\n","/**\n * Process adapter (§9): runs CLI agents as child processes and communicates\n * over stdin/stdout, managing the process lifecycle, working directory,\n * environment, exit codes, logs and timeouts.\n *\n * Three input modes (§9, §21):\n * - \"stdin\": the composed task text is written to the agent's stdin.\n * - \"arg\": the composed task text is appended as the last command argument.\n * - \"protocol\": NodeToAgentMessage envelopes as JSON lines on stdin; the\n * agent answers with AgentToNodeMessage JSON lines (REPORT,\n * COMPLETION, ERROR, ...) whose structured payloads are parsed\n * into reports.\n */\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { AgentError, ProtocolError } from \"../../errors/index.js\";\nimport { logger, type Logger } from \"../../logger/index.js\";\nimport type {\n AgentConfig,\n AgentInfo,\n AgentTaskInput,\n AgentTaskOutput,\n IAgent,\n} from \"../../types/agent.js\";\nimport type { EnvelopeMeta, NodeToAgentMessage } from \"../../types/protocol.js\";\nimport type { Report } from \"../../types/report.js\";\n\nconst DEFAULT_TIMEOUT_MS = 600_000;\nconst KILL_GRACE_MS = 5_000;\n\nexport function composeTaskText(input: AgentTaskInput): string {\n const sections: string[] = [`# Objective\\n${input.objective}`];\n if (input.role) {\n const lines = [\"# Role\", `${input.role.name} (${input.role.id})`];\n if (input.role.responsibilities.length > 0) {\n lines.push(\"\", \"Responsibilities:\", ...input.role.responsibilities.map((r) => `- ${r}`));\n }\n if (input.role.expectedOutputs.length > 0) {\n lines.push(\"\", \"Expected outputs:\", ...input.role.expectedOutputs.map((o) => `- ${o}`));\n }\n sections.push(lines.join(\"\\n\"));\n }\n if (input.context) sections.push(`# Context\\n${input.context}`);\n if (input.instruction) sections.push(`# Instruction\\n${input.instruction}`);\n return sections.join(\"\\n\\n\");\n}\n\nfunction buildProtocolMessages(input: AgentTaskInput, agentName: string): string[] {\n const meta: EnvelopeMeta = {\n taskId: input.taskId,\n agent: agentName,\n timestamp: new Date().toISOString(),\n };\n const messages: NodeToAgentMessage[] = [\n { type: \"TASK\", payload: { taskId: input.taskId, objective: input.objective } },\n ];\n if (input.role) messages.push({ type: \"ROLE\", payload: input.role });\n if (input.context) messages.push({ type: \"CONTEXT\", payload: { body: input.context } });\n if (input.instruction) messages.push({ type: \"INSTRUCTION\", payload: { text: input.instruction } });\n return messages.map((message) => JSON.stringify({ meta, message }));\n}\n\nexport class ProcessAgent implements IAgent {\n readonly config: AgentConfig;\n readonly info: AgentInfo;\n private readonly log: Logger;\n private readonly running = new Map<string, ChildProcess>();\n\n constructor(config: AgentConfig, log: Logger = logger) {\n if (!config.command) {\n throw new AgentError(\"AGENT_NOT_FOUND\", `Agent \"${config.name}\" has no command configured.`);\n }\n this.config = config;\n this.log = log.child({ agent: config.name });\n this.info = {\n name: config.name,\n integration: \"process\",\n command: config.command,\n cwd: config.cwd,\n status: \"ready\",\n capabilities: [config.inputMode ?? \"stdin\"],\n };\n }\n\n async run(input: AgentTaskInput): Promise<AgentTaskOutput> {\n const command = this.config.command;\n if (!command) {\n throw new AgentError(\"AGENT_NOT_FOUND\", `Agent \"${this.config.name}\" has no command configured.`);\n }\n const mode = this.config.inputMode ?? \"stdin\";\n const timeoutMs = this.config.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n\n return new Promise<AgentTaskOutput>((resolve, reject) => {\n const child = spawn(\n command,\n [...(this.config.args ?? []), ...(mode === \"arg\" ? [composeTaskText(input)] : [])],\n {\n cwd: this.config.cwd,\n env: { ...process.env, ...this.config.env },\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n },\n );\n this.running.set(input.taskId, child);\n\n let stdout = \"\";\n let stderr = \"\";\n let timedOut = false;\n let settled = false;\n\n const timer = setTimeout(() => {\n timedOut = true;\n this.log.warn(`Task ${input.taskId} exceeded ${timeoutMs}ms — killing process.`);\n child.kill(\"SIGTERM\");\n setTimeout(() => child.kill(\"SIGKILL\"), KILL_GRACE_MS).unref();\n }, timeoutMs);\n\n const settle = (finish: () => void): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n this.running.delete(input.taskId);\n finish();\n };\n\n child.stdout?.on(\"data\", (chunk: Buffer) => {\n stdout += chunk.toString();\n });\n child.stderr?.on(\"data\", (chunk: Buffer) => {\n stderr += chunk.toString();\n });\n\n // Agents that exit without reading stdin raise EPIPE on write — that is\n // not an agent failure, so the stream error is ignored.\n child.stdin?.on(\"error\", () => {});\n if (mode !== \"arg\") {\n const payload =\n mode === \"protocol\"\n ? buildProtocolMessages(input, this.config.name).join(\"\\n\") + \"\\n\"\n : composeTaskText(input) + \"\\n\";\n child.stdin?.write(payload);\n child.stdin?.end();\n }\n\n child.on(\"error\", (error) => {\n settle(() => {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n reject(\n new AgentError(\n \"AGENT_NOT_FOUND\",\n `Agent \"${this.config.name}\": command \"${command}\" was not found. Is it installed and on PATH?`,\n { cause: error },\n ),\n );\n return;\n }\n reject(\n new AgentError(\"AGENT_FAILED\", `Agent \"${this.config.name}\" failed to start: ${error.message}.`, {\n cause: error,\n }),\n );\n });\n });\n\n child.on(\"close\", (code, signal) => {\n settle(() => {\n if (timedOut) {\n reject(\n new AgentError(\n \"AGENT_TIMEOUT\",\n `Agent \"${this.config.name}\" timed out after ${timeoutMs}ms and was killed.`,\n { details: { taskId: input.taskId, stdout: stdout.slice(0, 4000), stderr: stderr.slice(0, 2000) } },\n ),\n );\n return;\n }\n\n const logs = stderr.trim().length > 0 ? stderr.split(\"\\n\") : undefined;\n if (mode === \"protocol\") {\n // interpretProtocolRun can reject (e.g. protocol violations); throwing\n // inside this event callback would escape the promise entirely.\n try {\n resolve(\n interpretProtocolRun({\n input,\n agentName: this.config.name,\n stdout,\n exitCode: code,\n logs,\n }),\n );\n } catch (error) {\n reject(error);\n }\n return;\n }\n\n const trimmed = stdout.trim();\n resolve({\n taskId: input.taskId,\n status: code === 0 ? \"completed\" : \"failed\",\n summary: trimmed.length > 0 ? firstLine(trimmed) : undefined,\n rawOutput: trimmed.length > 0 ? trimmed : undefined,\n exitCode: code ?? undefined,\n logs,\n error:\n code === 0\n ? undefined\n : `Process exited with code ${code ?? \"unknown\"}${signal ? ` (signal: ${signal})` : \"\"}`,\n });\n });\n });\n });\n }\n\n /** Ask the agent to stop current work (SIGTERM). */\n async cancel(taskId: string): Promise<void> {\n const child = this.running.get(taskId);\n if (child) child.kill(\"SIGTERM\");\n }\n\n runningTaskIds(): string[] {\n return [...this.running.keys()];\n }\n}\n\ninterface ProtocolRunInput {\n input: AgentTaskInput;\n agentName: string;\n stdout: string;\n exitCode: number | null;\n logs?: string[];\n}\n\nfunction interpretProtocolRun({ input, agentName, stdout, exitCode, logs }: ProtocolRunInput): AgentTaskOutput {\n const reports: Report[] = [];\n let summary: string | undefined;\n let error: string | undefined;\n let sawProtocolMessage = false;\n\n for (const line of stdout.split(\"\\n\")) {\n const trimmed = line.trim();\n if (trimmed.length === 0) continue;\n const message = parseAgentMessage(trimmed);\n if (!message) continue;\n sawProtocolMessage = true;\n\n if (message.type === \"REPORT\") {\n const report = normalizeReport(message.payload, input.taskId, agentName, reports.length);\n if (report) reports.push(report);\n } else if (message.type === \"COMPLETION\") {\n const payload = message.payload as { summary?: unknown } | undefined;\n if (typeof payload?.summary === \"string\") summary = payload.summary;\n } else if (message.type === \"ERROR\") {\n const payload = message.payload as { code?: unknown; message?: unknown } | undefined;\n const detail = typeof payload?.message === \"string\" ? payload.message : \"unknown error\";\n const code = typeof payload?.code === \"string\" ? ` [${payload.code}]` : \"\";\n error = `Agent error${code}: ${detail}`;\n }\n // STATUS / QUESTION / ARTIFACT are informational in v0.4 (§21 backlog).\n }\n\n if (!sawProtocolMessage && exitCode === 0) {\n throw new ProtocolError(\n `Agent \"${agentName}\" produced no protocol messages on stdout (input mode \"protocol\").`,\n { details: { taskId: input.taskId, stdout: stdout.slice(0, 2000) } },\n );\n }\n\n const trimmed = stdout.trim();\n return {\n taskId: input.taskId,\n status: error !== undefined || exitCode !== 0 ? \"failed\" : \"completed\",\n summary: summary ?? reports[0]?.summary,\n rawOutput: trimmed.length > 0 ? trimmed : undefined,\n exitCode: exitCode ?? undefined,\n logs,\n reports: reports.length > 0 ? reports : undefined,\n error:\n error ??\n (exitCode !== 0 ? `Process exited with code ${exitCode ?? \"unknown\"}` : undefined),\n };\n}\n\n/** Accepts both bare `{ type, payload }` and enveloped `{ meta, message }` lines. */\nfunction parseAgentMessage(line: string): { type: string; payload: unknown } | undefined {\n try {\n const parsed = JSON.parse(line) as Record<string, unknown>;\n if (typeof parsed.type === \"string\") {\n return { type: parsed.type, payload: parsed.payload };\n }\n const inner = parsed.message as Record<string, unknown> | undefined;\n if (inner && typeof inner.type === \"string\") {\n return { type: inner.type, payload: inner.payload };\n }\n } catch {\n // Non-JSON chatter is tolerated; protocol compliance is judged overall.\n }\n return undefined;\n}\n\nfunction normalizeReport(\n payload: unknown,\n taskId: string,\n agentName: string,\n index: number,\n): Report | undefined {\n if (payload === null || typeof payload !== \"object\") return undefined;\n const raw = payload as Record<string, unknown>;\n if (typeof raw.summary !== \"string\") return undefined;\n return {\n id: typeof raw.id === \"string\" ? raw.id : `${taskId}-report-${index}`,\n taskId: typeof raw.taskId === \"string\" ? raw.taskId : taskId,\n agent: typeof raw.agent === \"string\" ? raw.agent : agentName,\n summary: raw.summary,\n findings: Array.isArray(raw.findings) ? (raw.findings as Report[\"findings\"]) : [],\n recommendations: Array.isArray(raw.recommendations) ? (raw.recommendations as string[]) : [],\n createdAt: typeof raw.createdAt === \"string\" ? raw.createdAt : new Date().toISOString(),\n };\n}\n\nfunction firstLine(text: string, maxLength = 200): string {\n const line = text.split(\"\\n\", 1)[0] ?? text;\n return line.length > maxLength ? `${line.slice(0, maxLength)}…` : line;\n}\n","/**\n * Agent factory (§9–§10): builds adapter instances from configuration.\n * \"cli\" agent configs are mapped to the process integration by the loader.\n */\nimport { OmniNodeError } from \"../errors/index.js\";\nimport type { AgentConfig, IAgent } from \"../types/agent.js\";\nimport { ProcessAgent } from \"./process/index.js\";\n\nexport function createAgent(config: AgentConfig): IAgent {\n if (config.integration === \"process\") {\n return new ProcessAgent(config);\n }\n if (config.integration === \"native\") {\n throw new OmniNodeError(\n \"NOT_IMPLEMENTED\",\n `Native agent adapters are planned for a later phase. Use input over stdin/stdout (type \"cli\") for \"${config.name}\" for now.`,\n );\n }\n throw new OmniNodeError(\"NOT_IMPLEMENTED\", `Agent integration \"${config.integration}\" has no adapter yet.`);\n}\n","import type { Command } from \"commander\";\nimport { agentConfigSchema, loadConfig } from \"../../config/index.js\";\nimport { AgentError, OmniNodeError } from \"../../errors/index.js\";\nimport { createAgent } from \"../../agents/index.js\";\nimport { appendToConfigList } from \"./shared.js\";\n\nconst collectArgs = (value: string, previous: string[]): string[] => [...previous, value];\n\ninterface AddAgentOptions {\n name: string;\n command: string;\n arg?: string[];\n cwd?: string;\n inputMode: string;\n timeoutMs?: number;\n}\n\nexport function registerAgentCommands(program: Command): void {\n const agent = program\n .command(\"agent\")\n .description(\"Manage CLI agents registered with OmniNode.\");\n\n agent\n .command(\"list\")\n .description(\"List configured agents.\")\n .action(async () => {\n const config = loadConfig();\n const agents = config.project.agents;\n if (agents.length === 0) {\n console.log(\"No agents configured. Add one with `omninode agent add` or edit omninode.yaml.\");\n return;\n }\n for (const agent of agents) {\n const command = agent.command ?? \"(no command)\";\n console.log(\n `${agent.name} integration=${agent.integration} command=${command} input=${agent.inputMode ?? \"stdin\"}`,\n );\n }\n });\n\n agent\n .command(\"add\")\n .description(\n \"Register a CLI agent in omninode.yaml. Agents run as child processes \" +\n \"(stdin/stdout); native adapters come in a later phase.\",\n )\n .requiredOption(\"--name <name>\", \"Unique agent name.\")\n .requiredOption(\"--command <command>\", \"Executable command, e.g. opencode\")\n .option(\"--arg <value>\", \"Additional command argument (repeatable).\", collectArgs, [])\n .option(\"--cwd <dir>\", \"Working directory for the agent process.\")\n .option(\n \"--input-mode <mode>\",\n \"How the task is delivered: stdin (prompt on stdin), arg (prompt as last argument) or protocol (§21 JSON-lines task protocol).\",\n \"stdin\",\n )\n .option(\"--timeout-ms <ms>\", \"Per-task timeout in milliseconds.\", (value: string) =>\n Number(value),\n )\n .action(async (options: AddAgentOptions) => addAgent(options));\n\n agent\n .command(\"test <name>\")\n .description(\"Verify the OmniNode ↔ agent connection by sending a trivial task.\")\n .action(async (name: string) => testAgent(name));\n}\n\nexport async function addAgent(options: AddAgentOptions): Promise<void> {\n const candidate = agentConfigSchema.safeParse({\n name: options.name,\n type: \"cli\",\n command: options.command,\n ...(options.arg !== undefined && options.arg.length > 0 ? { args: options.arg } : {}),\n ...(options.cwd !== undefined ? { cwd: options.cwd } : {}),\n input_mode: options.inputMode,\n ...(options.timeoutMs !== undefined ? { timeout_ms: options.timeoutMs } : {}),\n });\n if (!candidate.success) {\n const issues = candidate.error.issues\n .map((issue) => `${issue.path.join(\".\") || \"(root)\"}: ${issue.message}`)\n .join(\"; \");\n throw new OmniNodeError(\"CLI_USAGE\", `Invalid agent options: ${issues}`);\n }\n const newAgent = candidate.data;\n\n const existing = loadConfig();\n if (existing.project.agents.some((a) => a.name === newAgent.name)) {\n throw new OmniNodeError(\n \"CLI_USAGE\",\n `Agent \"${newAgent.name}\" already exists in omninode.yaml. Remove it first or pick another name.`,\n );\n }\n\n const configPath = appendToConfigList(\"agents\", newAgent);\n console.log(`Added agent \"${newAgent.name}\" (${newAgent.type}, input=${newAgent.input_mode}) to ${configPath}.`);\n console.log(`Run \\`omninode agent test ${newAgent.name}\\` to verify the connection.`);\n}\n\nexport async function testAgent(name: string): Promise<void> {\n const config = loadConfig();\n const agentConfig = config.project.agents.find((a) => a.name === name);\n if (!agentConfig) {\n const available = config.project.agents.map((a) => a.name).join(\", \") || \"(none)\";\n throw new AgentError(\n \"AGENT_NOT_FOUND\",\n `Agent \"${name}\" is not configured. Configured agents: ${available}.`,\n );\n }\n\n const agent = createAgent(agentConfig);\n console.log(\n `Testing agent \"${name}\" (${agent.info.integration}, input=${agentConfig.inputMode ?? \"stdin\"}) — sending a trivial task.`,\n );\n const result = await agent.run({\n taskId: `test-${Date.now()}`,\n objective: \"Reply with the single word: OK\",\n });\n console.log(` status: ${result.status}`);\n if (result.exitCode !== undefined) console.log(` exit: ${result.exitCode}`);\n if (result.summary) console.log(` output: ${result.summary}`);\n if (result.rawOutput && result.rawOutput !== result.summary) {\n console.log(` raw: ${result.rawOutput.slice(0, 200).replace(/\\n/g, \" \")}`);\n }\n if (result.error) console.log(` error: ${result.error}`);\n if (result.status !== \"completed\") process.exitCode = 1;\n}\n","import type { Command } from \"commander\";\nimport { loadConfig } from \"../../config/index.js\";\n\nexport function registerRoleCommands(program: Command): void {\n const role = program\n .command(\"role\")\n .description(\"Inspect roles defined in omninode.yaml.\");\n\n role\n .command(\"list\")\n .description(\"List configured roles.\")\n .action(async () => {\n const config = loadConfig();\n const roles = config.project.roles;\n if (roles.length === 0) {\n console.log(\"No roles configured. Add one under `project.roles` in omninode.yaml.\");\n return;\n }\n for (const role of roles) {\n console.log(`${role.id} ${role.name}`);\n for (const responsibility of role.responsibilities) {\n console.log(` - ${responsibility}`);\n }\n }\n });\n}\n","import type { Command } from \"commander\";\nimport { notImplemented } from \"./shared.js\";\n\nexport function registerTaskCommands(program: Command): void {\n const task = program\n .command(\"task\")\n .description(\"Create, run and inspect tasks (Phase 4+).\");\n\n task\n .command(\"create\")\n .description(\"Create a task (planned for Phase 4 — Roles & Tasks).\")\n .action(() => {\n throw notImplemented(\"omninode task create\", \"Phase 4 (Roles & Tasks)\");\n });\n\n task\n .command(\"run <objective>\")\n .description(\"Run a task or pipeline (planned for Phase 5 — Pipeline Engine).\")\n .action(() => {\n throw notImplemented(\"omninode task run\", \"Phase 5 (Pipeline Engine)\");\n });\n\n task\n .command(\"status <task-id>\")\n .description(\"Show task status (planned for Phase 4 — Roles & Tasks).\")\n .action(() => {\n throw notImplemented(\"omninode task status\", \"Phase 4 (Roles & Tasks)\");\n });\n}\n","import type { Command } from \"commander\";\nimport { notImplemented } from \"./shared.js\";\n\nexport function registerReportCommands(program: Command): void {\n const report = program\n .command(\"report\")\n .description(\"Inspect AI reports (Phase 6+).\");\n\n report\n .command(\"list\")\n .description(\"List collected reports (planned for Phase 6 — Multi-AI Report System).\")\n .action(() => {\n throw notImplemented(\"omninode report list\", \"Phase 6 (Multi-AI Report System)\");\n });\n}\n"],"mappings":"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","names":["existsSync","existsSync","entry","readFileSync","writeFileSync","readFileSync","writeFileSync","provider","DEFAULT_TIMEOUT_MS","trimmed","agent","role"]}
|