tnega 0.1.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.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../packages/cli/src/commands.ts", "../packages/core/src/utils.ts", "../packages/core/src/events.ts", "../packages/core/src/fiber.ts", "../packages/core/src/logger.ts", "../packages/core/src/reflect.ts", "../packages/core/src/registry.ts", "../packages/core/src/context.ts", "../packages/core/src/service.ts", "../packages/agent/src/index.ts", "../packages/llm/src/index.ts", "../packages/session/src/index.ts", "../packages/tools/src/builtins.ts", "../packages/tools/src/calc.ts", "../packages/tools/src/path.ts", "../packages/tools/src/index.ts", "../packages/eval/src/strategies.ts", "../packages/eval/src/runner.ts", "../packages/eval/src/utils.ts", "../packages/eval/src/service.ts", "../packages/cli/src/yaml.ts", "../packages/evolve/src/diagnose.ts", "../packages/evolve/src/llm.ts", "../packages/evolve/src/log.ts", "../packages/evolve/src/select.ts", "../packages/evolve/src/service.ts", "../packages/cli/src/index.ts", "../packages/cli/src/bin.ts"],
4
+ "sourcesContent": ["import { join, resolve } from 'node:path'\nimport { readFileSync } from 'node:fs'\nimport { Context, type Plugin } from '@tnega/core'\nimport {\n agent,\n type AgentLoop,\n type AgentInput,\n type AgentRunOptions,\n type AgentRunResult,\n type LLMAdapter,\n} from '@tnega/agent'\nimport { openaiCompatAdapter } from '@tnega/llm'\nimport { session } from '@tnega/session'\nimport { builtinTools, tools } from '@tnega/tools'\nimport {\n evalPlugin,\n type CompareResult,\n type CandidatePreset,\n type EvalPluginConfig,\n type EvalRun,\n type EvalRunOptions,\n type EvalService,\n type RunBudget,\n type Task,\n} from '@tnega/eval'\nimport { parseYaml } from './yaml.js'\nimport {\n createLlmProposeRule,\n evolvePlugin,\n llmCandidate,\n type EvolvePluginConfig,\n type EvolveService,\n type EvolveStepResult,\n type SelectionPolicy,\n} from '@tnega/evolve'\n\nexport interface TasksFile {\n tasks: Task[]\n candidates?: Record<string, unknown>\n defaultCandidate?: string\n strategyNames?: string[]\n outputDir?: string\n evolve?: EvolveFileConfig\n}\n\nexport interface EvolveFileConfig {\n maxIterations?: number\n maxRuns?: number\n baseSystem?: string\n policy?: SelectionPolicy\n budget?: RunBudget\n}\n\nexport interface RunCommandOptions {\n tasksFile: string\n candidateName?: string\n cache?: boolean\n budget?: RunBudget\n outputFile?: string\n cwd?: string\n}\n\nexport interface CompareCommandOptions {\n base: string\n head: string\n outputDir?: string\n cwd?: string\n}\n\nexport interface RunAgentCommandOptions {\n prompt: string\n cwd?: string\n sessionFile?: string\n model?: string\n baseUrl?: string\n maxTokens?: number\n temperature?: number\n maxTurns?: number\n maxSteps?: number\n allowNetwork?: boolean\n allowShell?: boolean\n}\n\nexport interface RunAgentCommandResult {\n run: AgentRunResult\n sessionFile: string\n}\n\nexport interface RunEvolveCommandOptions {\n tasksFile: string\n cwd?: string\n outputDir?: string\n maxIterations?: number\n maxRuns?: number\n baseSystem?: string\n model?: string\n baseUrl?: string\n maxTokens?: number\n temperature?: number\n maxTurns?: number\n maxSteps?: number\n budget?: RunBudget\n cache?: boolean\n policy?: SelectionPolicy\n}\n\nexport interface RunEvolveCommandResult {\n prime: EvolveStepResult\n result: EvolveStepResult\n logFile: string\n runDir: string\n}\n\nexport interface LlmEnvConfig {\n apiKey?: string\n baseUrl?: string\n model?: string\n}\n\nexport class CliError extends Error {\n override name = 'CliError'\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : {}\n}\n\nfunction toTask(value: unknown, index: number): Task {\n const record = asRecord(value)\n const id = typeof record.id === 'string' ? record.id : `task-${index + 1}`\n const task: Task = {\n id,\n }\n if (typeof record.name === 'string') task.name = record.name\n if (typeof record.description === 'string') task.description = record.description\n if (typeof record.inputText === 'string') {\n task.inputText = record.inputText\n } else if (typeof record.input === 'string') {\n task.inputText = record.input\n } else if (record.input !== undefined) {\n task.input = record.input\n }\n const assertion = record.assertion === undefined ? undefined : asRecord(record.assertion) as Task['assertion']\n if (assertion !== undefined) task.assertion = assertion\n if (Array.isArray(record.strategies)) {\n task.strategies = record.strategies.map(item => String(item))\n }\n const budget = record.budget === undefined ? undefined : asRecord(record.budget) as Task['budget']\n if (budget !== undefined) task.budget = budget\n const artifacts = record.artifacts === undefined ? undefined : asRecord(record.artifacts)\n if (artifacts !== undefined) task.artifacts = artifacts\n return task\n}\n\nexport function loadTasksFile(file: string): TasksFile {\n const text = readFileSync(resolve(file), 'utf8')\n const data = parseYaml(text)\n const tasks = Array.isArray(data.tasks) ? data.tasks.map(toTask) : []\n const result: TasksFile = { tasks }\n if (data.candidates !== undefined) {\n result.candidates = asRecord(data.candidates)\n }\n if (typeof data.defaultCandidate === 'string') result.defaultCandidate = data.defaultCandidate\n if (Array.isArray(data.strategyNames)) {\n result.strategyNames = data.strategyNames.map(item => String(item))\n }\n if (typeof data.outputDir === 'string') result.outputDir = data.outputDir\n if (data.evolve !== undefined) {\n result.evolve = asRecord(data.evolve) as EvolveFileConfig\n }\n if (!tasks.length) {\n throw new CliError(`no tasks found in ${file}`)\n }\n return result\n}\n\nfunction candidateFromFile(\n tasksFile: TasksFile,\n name: string | undefined,\n): CandidatePreset {\n const candidates = tasksFile.candidates ?? {}\n const candidateName = name ?? tasksFile.defaultCandidate\n if (!candidateName || !(candidateName in candidates)) {\n return {\n plugin: (ctx: Context) => {\n ctx.provide('evalCandidateName', candidateName ?? 'default')\n },\n name: candidateName ?? 'default',\n }\n }\n const entry = asRecord(candidates[candidateName])\n if (entry.loop === 'echo') {\n return {\n plugin: (ctx: Context) => {\n ctx.provide('evalCandidateName', candidateName)\n ctx.provide('agentLoop', echoLoop)\n },\n name: candidateName,\n ...(typeof entry.version === 'string' ? { version: entry.version } : {}),\n }\n }\n if (entry.plugin === undefined) {\n return {\n plugin: (ctx: Context) => {\n ctx.provide('evalCandidateName', candidateName)\n },\n name: candidateName,\n ...(typeof entry.version === 'string' ? { version: entry.version } : {}),\n }\n }\n return {\n plugin: entry.plugin as unknown as Plugin,\n name: candidateName,\n ...(typeof entry.version === 'string' ? { version: entry.version } : {}),\n ...(entry.config !== undefined ? { config: asRecord(entry.config) } : {}),\n }\n}\n\nfunction echoLoop(input?: AgentInput): Promise<AgentRunResult> {\n const text = input?.text ?? ''\n return Promise.resolve({\n input: input ?? {},\n output: text,\n finishReason: 'stop',\n steps: [],\n messages: text ? [{ role: 'user', content: text }] : [],\n })\n}\n\nasync function createEvalContext(cwd: string, config: EvalPluginConfig = {}): Promise<Context> {\n const root = new Context()\n await root.plugin(session, { file: join(cwd, '.tnega', 'cli-session.jsonl') })\n await root.plugin(tools)\n await root.plugin(agent)\n await root.plugin(evalPlugin, config)\n return root\n}\n\nfunction evalService(root: Context): EvalService {\n return root.get('eval') as EvalService\n}\n\nexport async function runCommand(options: RunCommandOptions): Promise<EvalRun> {\n const cwd = options.cwd ?? process.cwd()\n const tasksFile = loadTasksFile(options.tasksFile)\n const outputDir = resolve(cwd, tasksFile.outputDir ?? '.tnega/runs')\n const root = await createEvalContext(cwd, {\n outputDir,\n defaultBudget: options.budget ?? {},\n })\n const candidate = candidateFromFile(tasksFile, options.candidateName)\n const runOptions: EvalRunOptions = {\n candidate: candidate as CandidatePreset,\n tasks: tasksFile.tasks,\n cache: options.cache ?? true,\n }\n if (options.outputFile) runOptions.outputFile = resolve(cwd, options.outputFile)\n if (tasksFile.strategyNames) {\n runOptions.strategyNames = tasksFile.strategyNames\n }\n return evalService(root).run(runOptions)\n}\n\nexport function formatRun(run: EvalRun): string {\n const lines: string[] = [\n `run ${run.id}`,\n `candidate ${run.candidate.name}${run.candidate.version ? `@${run.candidate.version}` : ''}`,\n `score ${run.summary.score.toFixed(3)} (${run.summary.passed} passed, ${run.summary.failed} failed, ${run.summary.skipped} skipped, ${run.summary.errors} errors)`,\n ]\n if (run.aborted) lines.push(`aborted: ${run.abortedReason ?? 'unknown'}`)\n if (run.cacheHits) lines.push(`cache hits: ${run.cacheHits}`)\n return lines.join('\\n')\n}\n\nexport function formatCompare(result: CompareResult): string {\n const lines: string[] = [\n `base ${result.base.id}: ${result.summary.baseScore.toFixed(3)}`,\n `head ${result.head.id}: ${result.summary.headScore.toFixed(3)}`,\n `delta ${result.summary.delta >= 0 ? '+' : ''}${result.summary.delta.toFixed(3)}`,\n ...result.summary.regressions.map(taskId => `regression ${taskId}`),\n ...result.summary.improvements.map(taskId => `improvement ${taskId}`),\n ]\n return lines.join('\\n')\n}\n\nexport async function compareCommand(options: CompareCommandOptions): Promise<CompareResult> {\n const cwd = options.cwd ?? process.cwd()\n const root = await createEvalContext(cwd, {\n outputDir: resolve(cwd, options.outputDir ?? '.tnega/runs'),\n })\n return evalService(root).compare(\n resolveRunInput(options.base, cwd),\n resolveRunInput(options.head, cwd),\n )\n}\n\nfunction resolveRunInput(input: string, cwd: string): string {\n if (input.endsWith('.json')) return resolve(cwd, input)\n return input\n}\n\nexport function resolveLlmEnv(env: NodeJS.ProcessEnv = process.env): LlmEnvConfig {\n const config: LlmEnvConfig = {}\n const apiKey = env.OPENCODE_GO_API_KEY || env.OPENAI_API_KEY || env.DEEPSEEK_API_KEY\n if (apiKey) config.apiKey = apiKey\n if (env.OPENCODE_GO_BASE_URL) config.baseUrl = env.OPENCODE_GO_BASE_URL\n if (env.OPENCODE_GO_MODEL) config.model = env.OPENCODE_GO_MODEL\n return config\n}\n\nexport async function runAgentCommand(\n options: RunAgentCommandOptions,\n): Promise<RunAgentCommandResult> {\n const cwd = options.cwd ?? process.cwd()\n const sessionFile = resolve(cwd, options.sessionFile ?? join('.tnega', 'run.jsonl'))\n const envConfig = resolveLlmEnv(process.env)\n const apiKey = envConfig.apiKey\n if (!apiKey) {\n throw new CliError(\n 'missing OPENCODE_GO_API_KEY (or OPENAI_API_KEY / DEEPSEEK_API_KEY); set it before running tnega run',\n )\n }\n\n const model = options.model ?? envConfig.model\n const baseUrl = options.baseUrl ?? envConfig.baseUrl\n const adapter = openaiCompatAdapter({\n apiKey,\n ...(model ? { model } : {}),\n ...(baseUrl ? { baseUrl } : {}),\n ...(options.maxTokens !== undefined ? { maxTokens: options.maxTokens } : {}),\n ...(options.temperature !== undefined ? { temperature: options.temperature } : {}),\n })\n const context = await createRunContext(sessionFile, adapter, options)\n try {\n const loop = context.root.get('agentLoop') as AgentLoop\n const runOptions: AgentRunOptions = {}\n if (options.maxTurns !== undefined) runOptions.maxTurns = options.maxTurns\n if (options.maxSteps !== undefined) runOptions.maxSteps = options.maxSteps\n const run = await loop({ text: options.prompt }, runOptions)\n return { run, sessionFile }\n } finally {\n await context.dispose()\n }\n}\n\nasync function createRunContext(\n sessionFile: string,\n llm: LLMAdapter,\n options: RunAgentCommandOptions,\n) {\n const root = new Context()\n const sessionFiber = await root.plugin(session, { file: sessionFile })\n const toolsFiber = await root.plugin(tools)\n const builtinToolsFiber = await root.plugin(builtinTools, {\n cwd: options.cwd ?? process.cwd(),\n ...(options.allowNetwork ? { allowNetwork: true } : {}),\n ...(options.allowShell ? { allowShell: true } : {}),\n })\n const agentConfig: {\n llm: LLMAdapter\n maxTurns?: number\n maxSteps?: number\n } = { llm }\n if (options.maxTurns !== undefined) agentConfig.maxTurns = options.maxTurns\n if (options.maxSteps !== undefined) agentConfig.maxSteps = options.maxSteps\n const agentFiber = await root.plugin(agent, agentConfig)\n return {\n root,\n dispose: async () => {\n for (const fiber of [agentFiber, builtinToolsFiber, toolsFiber, sessionFiber].reverse()) {\n await fiber.dispose()\n }\n },\n }\n}\n\nexport function formatAgentRun(result: RunAgentCommandResult): string {\n const output = result.run.output.trim()\n const lines: string[] = []\n if (output) lines.push(output)\n lines.push(`finish ${result.run.finishReason}`)\n lines.push(`steps ${result.run.steps.length}`)\n lines.push(`session ${result.sessionFile}`)\n return lines.join('\\n')\n}\n\nexport async function runEvolveCommand(\n options: RunEvolveCommandOptions,\n): Promise<RunEvolveCommandResult> {\n const cwd = options.cwd ?? process.cwd()\n const tasksFile = loadTasksFile(options.tasksFile)\n const envConfig = resolveLlmEnv(process.env)\n const apiKey = envConfig.apiKey\n if (!apiKey) {\n throw new CliError(\n 'missing OPENCODE_GO_API_KEY (or OPENAI_API_KEY / DEEPSEEK_API_KEY); set it before running tnega evolve run',\n )\n }\n\n const model = options.model ?? envConfig.model\n const baseUrl = options.baseUrl ?? envConfig.baseUrl\n const adapter = openaiCompatAdapter({\n apiKey,\n ...(model ? { model } : {}),\n ...(baseUrl ? { baseUrl } : {}),\n ...(options.maxTokens !== undefined ? { maxTokens: options.maxTokens } : {}),\n ...(options.temperature !== undefined ? { temperature: options.temperature } : {}),\n })\n const modelConfig = model || baseUrl\n ? {\n ...(model ? { model } : {}),\n ...(baseUrl ? { baseUrl } : {}),\n }\n : undefined\n const evolveFile = tasksFile.evolve ?? {}\n const outputDir = resolve(cwd, options.outputDir ?? tasksFile.outputDir ?? '.tnega/experiments')\n const runDir = join(outputDir, 'runs')\n const policy = options.policy ?? evolveFile.policy ?? {\n minScore: 0,\n maxDegradation: 0,\n minDelta: 0.001,\n }\n const maxIterations = options.maxIterations ?? evolveFile.maxIterations ?? 3\n const baseSystem = options.baseSystem ?? evolveFile.baseSystem ?? ''\n const rule = createLlmProposeRule({\n adapter,\n ...(options.maxTurns !== undefined ? { maxTurns: options.maxTurns } : {}),\n ...(options.maxSteps !== undefined ? { maxSteps: options.maxSteps } : {}),\n ...(modelConfig ? { model: modelConfig } : {}),\n })\n\n const root = new Context()\n const evalFiber = await root.plugin(evalPlugin, { outputDir: runDir })\n const evolveConfig: EvolvePluginConfig = {\n outputDir,\n tasks: tasksFile.tasks,\n policy,\n rules: [rule],\n cache: options.cache ?? false,\n }\n if (tasksFile.strategyNames) evolveConfig.strategyNames = tasksFile.strategyNames\n const budget = options.budget ?? evolveFile.budget\n if (budget) {\n evolveConfig.budget = budget\n }\n const evolveFiber = await root.plugin(evolvePlugin, evolveConfig)\n try {\n const evolve = root.get('evolve') as EvolveService\n const baseline = llmCandidate({\n name: 'baseline',\n system: baseSystem,\n adapter,\n ...(options.maxTurns !== undefined ? { maxTurns: options.maxTurns } : {}),\n ...(options.maxSteps !== undefined ? { maxSteps: options.maxSteps } : {}),\n ...(modelConfig ? { model: modelConfig } : {}),\n })\n const prime = await evolve.step({ candidate: baseline })\n const maxRuns = options.maxRuns ?? evolveFile.maxRuns\n const result = await evolve.evolve({\n maxIterations,\n ...(maxRuns !== undefined ? { maxRuns } : {}),\n run: { cache: options.cache ?? false },\n })\n return {\n prime,\n result,\n logFile: join(outputDir, 'log.json'),\n runDir,\n }\n } finally {\n await evolveFiber.dispose()\n await evalFiber.dispose()\n }\n}\n\nexport function formatEvolveResult(result: RunEvolveCommandResult): string {\n const lines: string[] = []\n const primeNode = stepNode(result.prime)\n const finalNode = stepNode(result.result)\n if (primeNode) {\n lines.push(\n `baseline ${candidateLabel(primeNode.candidate)}: `\n + `score ${primeNode.run.summary.score.toFixed(3)} `\n + `(${primeNode.run.summary.passed}/${primeNode.run.summary.total})`,\n )\n }\n lines.push(`decision ${result.result.kind}`)\n if (finalNode) {\n lines.push(`candidate ${candidateLabel(finalNode.candidate)}: score ${finalNode.run.summary.score.toFixed(3)}`)\n lines.push(`status ${finalNode.status}`)\n if (finalNode.decision?.reason) lines.push(`reason ${finalNode.decision.reason}`)\n if (finalNode.decision?.delta !== undefined) {\n const delta = finalNode.decision.delta\n lines.push(`delta ${delta >= 0 ? '+' : ''}${delta.toFixed(3)}`)\n }\n } else if (result.result.kind === 'no-candidate') {\n lines.push(`reason ${result.result.reason}`)\n }\n lines.push(`log ${result.logFile}`)\n return lines.join('\\n')\n}\n\nfunction stepNode(result: EvolveStepResult) {\n return result.kind === 'no-candidate' ? undefined : result.node\n}\n\nfunction candidateLabel(candidate: { name: string; version?: string }): string {\n return candidate.version ? `${candidate.name}@${candidate.version}` : candidate.name\n}\n", "/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nexport type Any = any\nexport type AnyFunction = (...args: Any[]) => Any\nexport type Dict<T = Any, K extends PropertyKey = string> = Record<K, T>\n\nexport class DisposableList<T extends WeakKey> {\n private sn = 0\n private map = new Map<number, T>()\n private weak = new WeakMap<T, number>()\n\n get length() {\n return this.map.size\n }\n\n push(value: T) {\n const sn = ++this.sn\n this.map.set(sn, value)\n this.weak.set(value, sn)\n return () => this.map.delete(sn)\n }\n\n unshift(value: T) {\n const sn = ++this.sn\n const entries = [...this.map.entries()]\n this.map.clear()\n this.map.set(sn, value)\n this.weak.set(value, sn)\n for (const [oldSn, oldValue] of entries) {\n this.map.set(oldSn, oldValue)\n }\n return () => this.map.delete(sn)\n }\n\n delete(value: T) {\n const sn = this.weak.get(value)\n if (!sn) return false\n return this.map.delete(sn)\n }\n\n clear() {\n const values = [...this.map.values()]\n this.map.clear()\n return values.reverse()\n }\n\n [Symbol.iterator]() {\n return this.map.values()\n }\n\n [Symbol.for('nodejs.util.inspect.custom')]() {\n return [...this]\n }\n}\n\nexport interface Tracker {\n associate?: string\n property?: string\n noShadow?: boolean\n}\n\nexport const symbols = {\n shadow: Symbol.for('tnega.shadow'),\n caller: Symbol.for('tnega.caller'),\n receiver: Symbol.for('tnega.receiver'),\n original: Symbol.for('tnega.original'),\n metadata: Symbol.for('tnega.metadata'),\n initHooks: Symbol.for('tnega.initHooks'),\n checkProto: Symbol.for('tnega.checkProto'),\n effect: Symbol.for('tnega.effect'),\n filter: Symbol.for('tnega.filter'),\n isolate: Symbol.for('tnega.isolate'),\n intercept: Symbol.for('tnega.intercept'),\n init: Symbol.for('tnega.init'),\n check: Symbol.for('tnega.check'),\n config: Symbol.for('tnega.config'),\n invoke: Symbol.for('tnega.invoke'),\n extend: Symbol.for('tnega.extend'),\n tracker: Symbol.for('tnega.tracker'),\n resolveConfig: Symbol.for('tnega.resolveConfig'),\n} as const\n\nconst GeneratorFunction = function* () {}.constructor\nconst AsyncGeneratorFunction = async function* () {}.constructor\n\nexport function isConstructor(func: Any): func is new (...args: Any[]) => Any {\n if (typeof func !== 'function') return false\n if (func instanceof GeneratorFunction) return false\n if (AsyncGeneratorFunction !== Function && func instanceof AsyncGeneratorFunction) return false\n return /^class\\s/.test(Function.prototype.toString.call(func))\n}\n\nexport function isObject(value: Any): value is object {\n return !!value && (typeof value === 'object' || typeof value === 'function')\n}\n\nexport function isNullable(value: Any) {\n return value == null\n}\n\nexport function joinPrototype(proto1: object, proto2: object): object {\n if (proto1 === Object.prototype) return proto2\n const result: object = Object.create(joinPrototype(Object.getPrototypeOf(proto1), proto2))\n for (const key of Reflect.ownKeys(proto1)) {\n Object.defineProperty(result, key, Reflect.getOwnPropertyDescriptor(proto1, key)!)\n }\n return result\n}\n\nexport function getPropertyDescriptor(target: Any, prop: string | symbol) {\n let proto = target\n while (proto) {\n const desc = Reflect.getOwnPropertyDescriptor(proto, prop)\n if (desc) return desc\n proto = Object.getPrototypeOf(proto)\n }\n}\n\nexport function getTraceable<T>(ctx: Any, value: T): T {\n if (!isObject(value)) return value\n if (Object.hasOwn(value, symbols.shadow)) {\n return Object.getPrototypeOf(value)\n }\n const tracker = (value as Any)[symbols.tracker]\n if (!tracker) return value\n return createTraceable(ctx, value, tracker)\n}\n\nexport function withProps(target: Any, props?: Any) {\n if (!props) return target\n return new Proxy(target, {\n get: (target, prop, receiver) => {\n if (prop in props && prop !== 'constructor') return Reflect.get(props, prop, receiver)\n return Reflect.get(target, prop, receiver)\n },\n set: (target, prop, value, receiver) => {\n if (prop in props && prop !== 'constructor') return Reflect.set(props, prop, value, receiver)\n return Reflect.set(target, prop, value, receiver)\n },\n })\n}\n\nfunction withProp(target: Any, prop: string | symbol, value: Any) {\n return withProps(target, Object.defineProperty(Object.create(null), prop, {\n value,\n writable: false,\n }))\n}\n\nfunction createShadow(ctx: Any, target: Any, property: string | undefined, receiver: Any) {\n if (!property) return receiver\n const origin = getPropertyDescriptor(target, property)?.value\n if (!origin) return receiver\n return withProp(receiver, property, ctx.extend({ [symbols.shadow]: origin }))\n}\n\nfunction createShadowMethod(ctx: Any, value: Any, outer: Any, shadow: Any) {\n const proxy = new Proxy(value, {\n apply: (target, thisArg, args) => {\n if (thisArg === outer) thisArg = shadow\n return getTraceable(ctx, Reflect.apply(target, thisArg, args))\n },\n })\n return proxy\n}\n\nfunction createTraceable(ctx: Any, value: Any, tracker: Tracker) {\n const caller = ctx[symbols.shadow] ?? ctx\n if (ctx[symbols.shadow]) {\n ctx = Object.getPrototypeOf(ctx)\n }\n const proxy = new Proxy(value, {\n get: (target, prop, receiver) => {\n if (prop === symbols.original) return target\n if (prop === symbols.caller) return caller\n if (prop === tracker.property) return ctx\n if (typeof prop === 'symbol') {\n return Reflect.get(target, prop, receiver)\n }\n if (tracker.associate && ctx.reflect.props[`${tracker.associate}.${prop}`]) {\n return Reflect.get(ctx, `${tracker.associate}.${prop}`, withProp(ctx, symbols.receiver, receiver))\n }\n let shadow: Any\n let innerValue: Any\n const desc = getPropertyDescriptor(target, prop)\n if (desc?.value !== undefined) {\n innerValue = desc.value\n } else {\n shadow = createShadow(ctx, target, tracker.property, receiver)\n innerValue = Reflect.get(target, prop, shadow)\n }\n const innerTracker = innerValue?.[symbols.tracker]\n if (innerTracker) {\n return createTraceable(ctx, innerValue, innerTracker)\n } else if (!tracker.noShadow && typeof innerValue === 'function') {\n shadow ??= createShadow(ctx, target, tracker.property, receiver)\n return createShadowMethod(ctx, innerValue, receiver, shadow)\n } else {\n return innerValue\n }\n },\n set: (target, prop, value, receiver) => {\n if (prop === symbols.original || prop === symbols.caller || prop === tracker.property) return false\n if (typeof prop === 'symbol') {\n return Reflect.set(target, prop, value, receiver)\n }\n if (tracker.associate && ctx.reflect.props[`${tracker.associate}.${prop}`]) {\n return Reflect.set(ctx, `${tracker.associate}.${prop}`, value, withProp(ctx, symbols.receiver, receiver))\n }\n const shadow = createShadow(ctx, target, tracker.property, receiver)\n return Reflect.set(target, prop, value, shadow)\n },\n apply: (target, thisArg, args) => {\n const receiver = tracker.noShadow\n ? proxy\n : createShadow(ctx, target, tracker.property, proxy)\n return applyTraceable(receiver, target, thisArg, args)\n },\n })\n return proxy\n}\n\nfunction applyTraceable(proxy: Any, value: Any, thisArg: Any, args: Any[]) {\n if (!value[symbols.invoke]) return Reflect.apply(value, thisArg, args)\n return value[symbols.invoke].apply(proxy, args)\n}\n\nexport function createCallable(name: string, proto: object, tracker: Tracker) {\n const self: Any = function (this: Any, ...args: Any[]) {\n const proxy = createTraceable(self.ctx, self, tracker)\n return Reflect.apply(proxy, this, args)\n }\n Object.defineProperty(self, 'name', { value: name, configurable: true, writable: true })\n return Object.setPrototypeOf(self, proto)\n}\n\ninterface StackInfo {\n offset: number\n error: Error\n}\n\nfunction handleError(info: StackInfo, reason: Any, getOuterStack: () => string[]): never {\n const innerLines = info.error.stack!.split('\\n')\n if (typeof reason?.stack !== 'string') {\n const outerError = new Error(reason)\n const lines = outerError.stack!.split('\\n')\n lines.splice(1, Infinity, ...getOuterStack())\n outerError.stack = lines.join('\\n')\n throw outerError\n }\n const lines: string[] = reason.stack.split('\\n')\n const index = lines.indexOf(innerLines[2]!)\n if (index === -1) throw reason\n lines.splice(index - info.offset, Infinity, ...getOuterStack())\n reason.stack = lines.join('\\n')\n throw reason\n}\n\nexport function composeError<T>(callback: (info: StackInfo) => T, getOuterStack = buildOuterStack()): T {\n const info: StackInfo = { offset: 1, error: new Error() }\n try {\n const result: Any = callback(info)\n if (isObject(result) && 'then' in result) {\n return (result as Any).then(undefined, (reason: Any) => handleError(info, reason, getOuterStack)) as T\n }\n return result\n } catch (reason: Any) {\n handleError(info, reason, getOuterStack)\n }\n}\n\nexport function buildOuterStack(offset = 0) {\n const outerError = new Error()\n return () => outerError.stack!.split('\\n').slice(3 + offset)\n}\n", "import { Context } from './context.js'\nimport { DisposableList, symbols, type Any, type AnyFunction } from './utils.js'\n\ndeclare module './context.js' {\n interface Context {\n on(name: string, listener: AnyFunction, options?: boolean | EventOptions): () => Any\n once(name: string, listener: AnyFunction, options?: boolean | EventOptions): () => Any\n emit(name: string, ...args: Any[]): void\n emit(thisArg: object, name: string, ...args: Any[]): void\n parallel(name: string, ...args: Any[]): Promise<void>\n parallel(thisArg: object, name: string, ...args: Any[]): Promise<void>\n serial(name: string, ...args: Any[]): Promise<void>\n serial(thisArg: object, name: string, ...args: Any[]): Promise<void>\n bail(name: string, ...args: Any[]): Any\n bail(thisArg: object, name: string, ...args: Any[]): Any\n waterfall(name: string, ...args: Any[]): Any\n waterfall(thisArg: object, name: string, ...args: Any[]): Any\n }\n}\n\nexport function isBailed(value: Any) {\n return value !== null && value !== false && value !== undefined\n}\n\nexport type DispatchMode = 'emit' | 'parallel' | 'serial' | 'bail' | 'waterfall'\n\nexport interface EventOptions {\n prepend?: boolean\n global?: boolean\n}\n\nexport interface Hook extends EventOptions {\n ctx: Context\n callback: AnyFunction\n}\n\nexport class EventsService {\n _hooks: Record<string, Hook[]> = Object.create(null)\n\n constructor(private ctx: Context) {\n Object.defineProperty(this, symbols.tracker, {\n value: { property: 'ctx', noShadow: true },\n })\n\n this.on('internal/listener', function (this: Context, name: string, listener: AnyFunction, options: EventOptions) {\n if (name === 'internal/update' && !options.global) {\n const hooks = (this.fiber._hooks['internal/update'] ??= new DisposableList<AnyFunction>())\n const method = options.prepend ? 'unshift' : 'push'\n return hooks[method](listener)\n }\n })\n\n this.on('internal/update', function (this: Context, config: Any, noSave: boolean, next: AnyFunction) {\n const cbs = [...(this.fiber._hooks['internal/update'] ?? [])]\n const _next = () => {\n const cb = cbs.shift() ?? next\n return cb.call(this, config, noSave, _next)\n }\n return _next()\n }, { global: true, prepend: true })\n }\n\n private _resolve(type: string, args: Any[]) {\n const thisArg = typeof args[0] === 'object' || typeof args[0] === 'function' ? args.shift() : null\n const name: string = args.shift()\n if (!name.startsWith('internal/') && this._hooks['internal/dispatch']?.length) {\n this.emit('internal/dispatch', type, name, args, thisArg)\n }\n const filter = thisArg?.[Context.filter]\n return [thisArg, (this._hooks[name] || [])\n .filter(hook => hook.global || !filter || filter.call(thisArg, hook.ctx))\n .map(hook => hook.callback)] as const\n }\n\n dispatch(type: string, args: Any[]) {\n const [thisArg, callbacks] = this._resolve(type, args)\n return callbacks.map(callback => callback.bind(thisArg))\n }\n\n async parallel(...args: Any[]) {\n const [thisArg, callbacks] = this._resolve('parallel', args)\n const results = await Promise.allSettled(callbacks.map(async callback => Reflect.apply(callback, thisArg, args)))\n const errors = results\n .filter((result): result is PromiseRejectedResult => result.status === 'rejected')\n .map(result => result.reason)\n if (errors.length) throw new AggregateError(errors)\n }\n\n emit(...args: Any[]) {\n const [thisArg, callbacks] = this._resolve('emit', args)\n for (const callback of callbacks) Reflect.apply(callback, thisArg, args)\n }\n\n async serial(...args: Any[]) {\n const [thisArg, callbacks] = this._resolve('serial', args)\n for (const callback of callbacks) {\n const result = await Reflect.apply(callback, thisArg, args)\n if (isBailed(result)) return result\n }\n }\n\n bail(...args: Any[]) {\n const [thisArg, callbacks] = this._resolve('bail', args)\n for (const callback of callbacks) {\n const result = Reflect.apply(callback, thisArg, args)\n if (isBailed(result)) return result\n }\n }\n\n waterfall(...args: Any[]) {\n const [thisArg, callbacks] = this._resolve('waterfall', args)\n const inner = args.pop()\n const next = () => {\n const callback = callbacks.shift()\n return callback ? Reflect.apply(callback, thisArg, args) : inner(...args)\n }\n args.push(next)\n return next()\n }\n\n register(label: string, hooks: Hook[], callback: AnyFunction, options: EventOptions): Any {\n const method = options.prepend ? 'unshift' : 'push'\n return this.ctx.fiber.effect(() => {\n hooks[method]({ ctx: this.ctx, callback, ...options })\n return () => this.unregister(hooks, callback)\n }, label)\n }\n\n unregister(hooks: Hook[], callback: AnyFunction) {\n const index = hooks.findIndex(hook => hook.callback === callback)\n if (index >= 0) {\n hooks.splice(index, 1)\n return true\n }\n }\n\n on(name: string, listener: AnyFunction, options: boolean | EventOptions = {}): Any {\n if (typeof options !== 'object') {\n options = { prepend: options }\n }\n this.ctx.fiber.assertActive()\n listener = this.ctx.reflect.bind(listener)\n const result = this.bail(this.ctx, 'internal/listener', name, listener, options)\n if (result) return result\n\n const hooks = this._hooks[name] ??= []\n return this.register(`ctx.on(${JSON.stringify(name)})`, hooks, listener, options)\n }\n\n once(name: string, listener: AnyFunction, options: boolean | EventOptions = {}) {\n const dispose = this.on(name, function (this: Any, ...args: Any[]) {\n dispose()\n return listener.apply(this, args)\n }, options)\n return dispose\n }\n}\n\nexport interface Events {\n 'internal/plugin'(this: Any): void\n 'internal/status'(this: Any, oldValue: Any): void\n 'internal/service'(this: Context, name: string, value: Any): void\n 'internal/update'(this: Any, config: Any, noSave: boolean, next: AnyFunction): void\n 'internal/get'(this: Context, name: string, error: Error, next: AnyFunction): Any\n 'internal/set'(this: Context, name: string, value: Any, error: Error, next: AnyFunction): boolean\n 'internal/listener'(this: Context, name: string, listener: AnyFunction, options: EventOptions): Any\n 'internal/dispatch'(mode: DispatchMode, name: string, args: Any[], thisArg: Any): void\n}\n", "import type { Context } from './context.js'\nimport type { PluginRuntime } from './registry.js'\nimport type { Impl } from './reflect.js'\nimport {\n buildOuterStack,\n composeError,\n DisposableList,\n getTraceable,\n isConstructor,\n isNullable,\n isObject,\n symbols,\n type Any,\n type AnyFunction,\n type Dict,\n} from './utils.js'\n\ndeclare module './context.js' {\n interface Context extends Pick<Fiber, 'effect'> {\n fiber: Fiber\n }\n}\n\nconst INACTIVE = '__INACTIVE__'\n\nexport class ValidationError extends TypeError {\n override name = 'ValidationError'\n\n constructor(issues: readonly Any[]) {\n super('invalid config:\\n' + issues.map(issue => {\n if (issue.path) {\n return ` - ${issue.message} (at ${issue.path.join('.')})`\n }\n return ` - ${issue.message}`\n }).join('\\n'))\n }\n}\n\nexport function resolveConfig(runtime: PluginRuntime, config: Any) {\n if (!runtime.Config) return config\n const schema = runtime.Config\n if (typeof schema === 'function') return schema(config)\n const validate = schema?.['~standard']?.validate\n if (typeof validate === 'function') {\n const result = validate(config)\n if ('then' in result) {\n throw new TypeError('Async config validation is not supported')\n }\n if (result.issues) {\n throw new ValidationError(result.issues)\n }\n return result.value\n }\n return config\n}\n\nexport type Disposable = () => Any\nexport type SyncEffect = Disposable | Iterable<Disposable> | null | undefined\nexport type AsyncEffect = Promise<Disposable> | AsyncIterable<Disposable> | null | undefined\nexport type Effect = SyncEffect | AsyncEffect\n\ninterface AsyncDisposable extends PromiseLike<() => Promise<void>> {\n (): Any\n}\n\nexport interface EffectMeta {\n label: string\n children: EffectMeta[]\n}\n\ninterface EffectRunner<T> {\n epoch: T\n execute: () => Any\n collect: (dispose: Disposable) => void\n getOuterStack: () => string[]\n}\n\nexport const enum FiberState {\n PENDING,\n LOADING,\n ACTIVE,\n FAILED,\n DISPOSED,\n UNLOADING,\n}\n\nexport const CordisErrorCode = {\n INACTIVE_EFFECT: 'cannot create effect on inactive context',\n} as const\n\nexport type CordisErrorCode = keyof typeof CordisErrorCode\n\nexport class CordisError extends Error {\n constructor(public code: CordisErrorCode, message?: string) {\n super(message ?? CordisErrorCode[code])\n }\n}\n\nexport class Fiber {\n public uid: number | null\n public readonly ctx: Context\n public config: Any\n public state = FiberState.PENDING\n public readonly dispose: () => Promise<void>\n public store: Dict<Impl> | undefined\n public inertia: Promise<void> | undefined\n\n public readonly _hooks: Dict<DisposableList<AnyFunction>> = Object.create(null)\n public readonly _disposables = new DisposableList<Disposable>()\n\n protected context: Context\n\n private _error: Any = undefined\n private _runner: EffectRunner<string>\n private _store: Dict<Impl> = Object.create(null)\n private _restarting: Promise<void> | undefined\n\n constructor(\n public parent: Context,\n config: Any,\n public inject: Dict<Any>,\n public runtime: PluginRuntime | null,\n getOuterStack: () => string[],\n ) {\n const collect = (dispose: Disposable) => {\n this._disposables.push(dispose)\n }\n\n if (runtime) {\n this.uid = parent.registry.counter\n this.ctx = this.context = parent.extend({ fiber: this })\n\n const injectEntries = Object.entries(this.inject)\n if (injectEntries.length) {\n this.ctx[symbols.intercept] = Object.create(parent[symbols.intercept]!)\n for (const [name, config] of injectEntries) {\n if (isNullable(config)) continue\n this.ctx[symbols.intercept]![name] = config\n }\n }\n\n this._runner = {\n epoch: INACTIVE,\n getOuterStack,\n execute: () => {\n if (isConstructor(runtime.callback)) {\n const instance = new runtime.callback(this.ctx, this.config)\n for (const hook of instance?.[symbols.initHooks] ?? []) {\n hook()\n }\n return instance?.[symbols.init]?.()\n } else {\n return runtime.callback(this.ctx, this.config)\n }\n },\n collect,\n }\n\n this.context.emit(this, 'internal/plugin')\n\n for (const name of Object.keys(this.inject)) {\n this._checkImpl(name)\n }\n\n this.dispose = parent.fiber.effect(() => {\n const remove = runtime.fibers.push(this)\n try {\n this.config = resolveConfig(runtime, config)\n this._refresh()\n } catch (error) {\n this.ctx.logger.error(error)\n this._error = error\n }\n return async () => {\n this.uid = null\n this.context.emit(this, 'internal/plugin')\n if (this.ctx.registry.has(runtime.callback)) {\n remove()\n if (!runtime.fibers.length) {\n this.ctx.registry.delete(runtime.callback)\n }\n }\n this._setEpoch(INACTIVE)\n while (this.inertia) {\n await this.inertia\n }\n }\n }, 'ctx.plugin()')\n } else {\n this.uid = 0\n this.ctx = this.context = parent\n this.state = FiberState.ACTIVE\n this.store = Object.create(null)\n this._runner = {\n epoch: '',\n getOuterStack,\n execute: () => {},\n collect,\n }\n this.dispose = () => this.restart()\n }\n }\n\n get name() {\n if (this.runtime?.name) return this.runtime.name\n let fiber = this.parent.fiber\n while (fiber !== fiber.parent.fiber) {\n if (fiber.runtime?.name) return fiber.runtime.name\n fiber = fiber.parent.fiber\n }\n return 'root'\n }\n\n assertActive() {\n if (this.uid !== null) return\n throw new CordisError('INACTIVE_EFFECT')\n }\n\n private _execute<T>(runner: EffectRunner<T>) {\n const oldEpoch = runner.epoch\n return composeError((info: Any) => {\n const safeCollect = (dispose: Any) => {\n if (typeof dispose === 'function') {\n runner.collect(dispose)\n } else if (!isNullable(dispose)) {\n throw new TypeError('Invalid effect')\n }\n }\n const effect: Effect = runner.execute.call(this)\n if (typeof effect === 'function') {\n return runner.collect(effect)\n } else if (isNullable(effect)) {\n return\n } else if (!isObject(effect)) {\n throw new TypeError('Invalid effect')\n } else if ('then' in effect) {\n return (effect as Any).then(safeCollect)\n } else if (Symbol.iterator in effect) {\n info.error = new Error()\n const iter = (effect as Any)[Symbol.iterator]()\n while (true) {\n const result = iter.next()\n safeCollect(result.value)\n if (result.done) return\n }\n } else if (Symbol.asyncIterator in effect) {\n const iter = (effect as Any)[Symbol.asyncIterator]()\n return (async () => {\n await Promise.resolve()\n info.error = new Error()\n while (true) {\n if (runner.epoch !== oldEpoch) return\n const result = await iter.next()\n safeCollect(result.value)\n if (result.done) return\n }\n })()\n } else {\n throw new TypeError('Invalid effect')\n }\n }, runner.getOuterStack)\n }\n\n effect(execute: () => SyncEffect, label?: string): Disposable\n effect(execute: () => Effect, label?: string): AsyncDisposable\n effect(execute: () => Effect, label = 'anonymous'): Any {\n this.assertActive()\n\n const disposables: Disposable[] = []\n const dispose = () => {\n let task: Any\n for (const dispose of disposables.splice(0).reverse()) {\n if (task) {\n task = task.then(dispose)\n } else {\n const result = dispose()\n if (isObject(result) && 'then' in result) {\n task = result\n }\n }\n }\n return task\n }\n\n const meta: EffectMeta = { label, children: [] }\n const runner: EffectRunner<boolean> = {\n execute,\n epoch: true,\n collect: (dispose) => {\n disposables.push(dispose)\n this._disposables.delete(dispose)\n if ((dispose as Any)[symbols.effect]) {\n meta.children.push((dispose as Any)[symbols.effect])\n }\n },\n getOuterStack: buildOuterStack(),\n }\n\n let task: Any\n try {\n task = this._execute(runner)\n } catch (reason) {\n dispose()\n throw reason\n }\n\n task?.catch(dispose).catch((error: Any) => this.ctx.logger.error(error))\n\n const wrapper = Object.defineProperty(() => {\n if (!runner.epoch) return\n runner.epoch = false\n return task ? task.then(dispose) : dispose()\n }, symbols.effect, { value: meta }) as AsyncDisposable\n\n const disposeAsync = () => {\n if (!runner.epoch) return\n runner.epoch = false\n return dispose()\n }\n wrapper.then = async (onFulfilled, onRejected) => {\n return Promise.resolve(task)\n .then(() => disposeAsync)\n .then(onFulfilled, onRejected)\n }\n disposables.push(this._disposables.push(wrapper))\n return wrapper\n }\n\n getEffects() {\n return [...this._disposables]\n .map<EffectMeta>(dispose => (dispose as Any)[symbols.effect])\n .filter(Boolean)\n }\n\n private _getState() {\n if (this.uid === null) return FiberState.DISPOSED\n if (this._error) return FiberState.FAILED\n if (this._runner.epoch !== INACTIVE) return FiberState.ACTIVE\n return FiberState.PENDING\n }\n\n private _updateState(callback?: () => void | FiberState) {\n const oldState = this.state\n this.state = callback?.() ?? this._getState()\n if (oldState === this.state) return\n this.context.emit(this, 'internal/status', oldState)\n\n if (oldState !== FiberState.ACTIVE && this.state !== FiberState.ACTIVE) return\n for (const key of Reflect.ownKeys(this.ctx.reflect.store)) {\n const impl = this.ctx.reflect.store[key as symbol]\n if (!impl) continue\n if (impl.fiber !== this) continue\n this.ctx.reflect.notify([impl.name])\n }\n }\n\n _checkImpl(name: string) {\n const impl = this.ctx.reflect._getImpl(name, true)\n if (!impl) return delete this._store[name]\n try {\n if (impl.check && !impl.check.call(getTraceable(this.ctx, impl.value))) {\n return delete this._store[name]\n }\n } catch (error) {\n impl.fiber.ctx.logger.error(error)\n return delete this._store[name]\n }\n this._store[name] = impl\n }\n\n _refresh() {\n let epoch: string = ''\n for (const name of Object.keys(this.inject)) {\n const impl = this._store[name]\n if (!impl) {\n epoch = INACTIVE\n break\n }\n epoch += ':' + impl.fiber.uid\n }\n this._setEpoch(epoch)\n }\n\n private _setEpoch(epoch: string) {\n const oldEpoch = this._runner.epoch\n if (epoch === oldEpoch) return\n this._runner.epoch = epoch\n if (this.inertia) return\n this._updateState(() => {\n if (epoch !== INACTIVE && oldEpoch === INACTIVE) {\n this.inertia = this._reload()\n return FiberState.LOADING\n } else {\n this.inertia = this._unload()\n return FiberState.UNLOADING\n }\n })\n }\n\n private async _reload() {\n this.store = { ...this._store }\n const oldEpoch = this._runner.epoch\n try {\n await Promise.resolve()\n await this._execute(this._runner)\n } catch (reason) {\n this.ctx.logger.error(reason)\n this._error = reason\n this._runner.epoch = INACTIVE\n }\n this._updateState(() => {\n if (this._runner.epoch === oldEpoch) {\n this.inertia = undefined\n } else {\n this.inertia = this._unload()\n return FiberState.UNLOADING\n }\n })\n }\n\n private async _unload() {\n await Promise.all(this._disposables.clear().map(async (dispose: Disposable) => {\n try {\n await composeError(async (info: Any) => {\n await Promise.resolve()\n info.error = new Error()\n await dispose()\n }, this._runner.getOuterStack)\n } catch (reason) {\n this.ctx.logger.error(reason)\n }\n }))\n this.store = undefined\n this._updateState(() => {\n if (this._runner.epoch === INACTIVE) {\n this.inertia = undefined\n } else {\n this.inertia = this._reload()\n return FiberState.LOADING\n }\n })\n }\n\n async await() {\n while (this.inertia || this._restarting) {\n await Promise.all([this.inertia, this._restarting]\n .filter((task): task is Promise<void> => !!task))\n }\n if (this._error) throw this._error\n return this\n }\n\n async restart() {\n const fiber = this.ctx.fiber\n fiber.assertActive()\n if (fiber._restarting) return fiber._restarting.then(() => undefined)\n let resolve!: () => void\n const restarting = new Promise<void>((resolvePromise) => {\n resolve = resolvePromise\n })\n fiber._restarting = restarting\n try {\n await this._runRestart(fiber)\n } finally {\n fiber._restarting = undefined\n resolve()\n }\n }\n\n private async _runRestart(fiber: Fiber) {\n if (fiber.inertia) {\n fiber._setEpoch(INACTIVE)\n while (fiber.inertia) await fiber.inertia\n }\n fiber._setEpoch(INACTIVE)\n fiber._refresh()\n while (fiber.inertia) await fiber.inertia\n }\n\n update(config: Any, noSave = false) {\n const fiber = this.ctx.fiber\n fiber.assertActive()\n config = resolveConfig(fiber.runtime!, config)\n fiber.context.waterfall(fiber.context, 'internal/update', config, noSave, () => {\n fiber.config = config\n fiber._error = undefined\n return fiber.restart()\n })\n }\n}\n", "/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\nimport type { Context } from './context.js'\nimport { createCallable, joinPrototype, symbols, type Any } from './utils.js'\n\nexport type LoggerType = 'error' | 'info' | 'warn' | 'debug'\nexport type LoggerMethod = (format: Any, ...param: Any[]) => void\n\nexport interface Message {\n sn: number\n ts: number\n name: string\n type: LoggerType\n args: Any[]\n}\n\nexport interface Exporter {\n level?: number\n export(message: Message): void\n}\n\nexport interface LoggerOptions {\n name: string\n level?: number\n}\n\nexport interface LoggerService {\n (name?: string): Logger\n}\n\nexport class Logger {\n public name: string\n public level: number | undefined\n error!: LoggerMethod\n info!: LoggerMethod\n warn!: LoggerMethod\n debug!: LoggerMethod\n\n constructor(options: LoggerOptions, private service: LoggerService) {\n this.name = options.name\n this.level = options.level\n this.error = this._method('error')\n this.info = this._method('info')\n this.warn = this._method('warn')\n this.debug = this._method('debug')\n }\n\n private _method(type: LoggerType): LoggerMethod {\n return (...args: Any[]) => this.service._log({ name: this.name, type, args })\n }\n}\n\nexport class LoggerService {\n buffer: Message[] = []\n ctx!: Context\n _snMessage = 0\n _snExporter = 0\n exporters = new Map<number, Exporter>()\n\n constructor(ctx: Context) {\n const tracker = {\n property: 'ctx',\n noShadow: true,\n }\n const self = createCallable('logger', joinPrototype(Object.getPrototypeOf(this), Function.prototype), tracker) as unknown as LoggerService\n Object.assign(self, this)\n self.ctx = ctx\n Object.defineProperty(self, symbols.tracker, { value: tracker })\n self.exporter({\n export: (message) => {\n self.buffer.push(message)\n },\n })\n ctx.reflect.provide('logger', self)\n return self\n }\n\n exporter(exporter: Exporter) {\n return this.ctx.fiber.effect(() => {\n const id = ++this._snExporter\n this.exporters.set(id, exporter)\n return () => this.exporters.delete(id)\n }, 'ctx.logger.exporter()')\n }\n\n [symbols.invoke](name?: string): Logger {\n const caller = (this as Any)[symbols.caller] as Context | undefined\n const fiber = (caller ?? this.ctx).fiber\n return new Logger({\n name: name ?? fiber.name,\n }, this)\n }\n\n _log(message: Omit<Message, 'sn' | 'ts'>) {\n const sn = ++this._snMessage\n const ts = Date.now()\n for (const exporter of this.exporters.values()) {\n if (exporter.level != null && exporter.level < 0) continue\n exporter.export({ sn, ts, ...message })\n }\n }\n\n error(...args: Any[]) {\n return (this as Any)().error(...args)\n }\n\n info(...args: Any[]) {\n return (this as Any)().info(...args)\n }\n\n warn(...args: Any[]) {\n return (this as Any)().warn(...args)\n }\n\n debug(...args: Any[]) {\n return (this as Any)().debug(...args)\n }\n}\n", "import type { Context } from './context.js'\nimport { FiberState } from './fiber.js'\nimport { getTraceable, symbols, withProps, type Any, type AnyFunction, type Dict } from './utils.js'\n\ndeclare module './context.js' {\n interface Context {\n get(name: string, strict?: boolean): Any\n set(name: string, value: Any): void\n provide(name: string, value?: Any, check?: () => boolean): () => Any\n accessor(name: string, options: Omit<AccessorProperty, 'type'>): () => Any\n mixin(source: Any, mixins: string[] | Dict<string>): void\n }\n}\n\nfunction enhanceError(error: Error) {\n const lines = error.stack!.split('\\n')\n lines.splice(0, 2, `Error: ${error.message}`)\n error.stack = lines.join('\\n')\n return error\n}\n\nconst RESERVED_WORDS = ['prototype', 'then']\n\nfunction isSpecialProperty(prop: string | symbol) {\n return typeof prop === 'symbol'\n || RESERVED_WORDS.includes(prop as string)\n || parseInt(prop as string).toString() === prop\n || (prop as string).startsWith('_')\n}\n\nexport interface ServiceProperty {\n type: 'service'\n}\n\nexport interface AccessorProperty {\n type: 'accessor'\n get: (this: Context, receiver: Any, error: Error) => Any\n set?: (this: Context, value: Any, receiver: Any, error: Error) => boolean\n}\n\nexport type ReflectProperty = ServiceProperty | AccessorProperty\n\nexport interface Impl {\n name: string\n fiber: Any\n value?: Any\n check?: () => boolean\n}\n\nexport class ReflectService {\n static handler: ProxyHandler<Context> = {\n get: (target, prop, ctx: Context) => {\n if (isSpecialProperty(prop)) {\n return Reflect.get(target, prop, ctx)\n }\n if (Reflect.has(target, prop)) {\n return getTraceable(ctx, Reflect.get(target, prop, ctx))\n }\n\n const error = new Error(`cannot get property \"${String(prop)}\" without inject`)\n try {\n const def = target.reflect.props[prop as string]\n if (def?.type === 'accessor') {\n return def.get.call(ctx, ctx[symbols.receiver], error)\n }\n\n if (!ctx.fiber.runtime) return ctx.reflect.get(prop as string, false)\n return ctx.events.waterfall(ctx, 'internal/get', prop, error, () => {\n const key = target[symbols.isolate]![prop as string]\n let fiber = ((ctx[symbols.shadow] as Context) ?? ctx).fiber\n while (true) {\n const impl = fiber.store?.[prop as string]\n if (impl) return getTraceable(ctx, impl.value)\n if (prop in fiber.inject) {\n error.message = `cannot get required service \"${String(prop)}\" in inactive context`\n throw error\n }\n if (!fiber.runtime) throw error\n if (fiber.parent[symbols.isolate]![prop as string] !== key) throw error\n fiber = fiber.parent.fiber\n }\n })\n } catch (e: Any) {\n throw e === error ? enhanceError(e) : e\n }\n },\n\n set: (target, prop, value, ctx: Context) => {\n if (isSpecialProperty(prop)) {\n return Reflect.set(target, prop, value, ctx)\n }\n\n const error = new Error(`cannot set property \"${String(prop)}\" without provide`)\n const def = target.reflect.props[prop as string]\n\n try {\n if (def?.type === 'accessor') {\n if (!def.set) return false\n return def.set.call(ctx, value, ctx[symbols.receiver], error)\n }\n\n if (!def && !ctx.fiber.runtime) {\n return Reflect.set(target, prop, value, ctx)\n }\n\n return ctx.events.waterfall(ctx, 'internal/set', prop, value, error, () => {\n if (!def) throw error\n return ctx.reflect.set(prop as string, value)\n })\n } catch (e: Any) {\n throw e === error ? enhanceError(e) : e\n }\n },\n\n has: (target, prop) => {\n if (isSpecialProperty(prop)) {\n return Reflect.has(target, prop)\n }\n if (Reflect.has(target, prop)) return true\n return !!target.reflect.props[prop as string]\n },\n }\n\n public store: Dict<Impl, symbol> = Object.create(null)\n public props: Dict<ReflectProperty> = Object.create(null)\n\n constructor(public ctx: Context) {\n Object.defineProperty(this, symbols.tracker, {\n value: { property: 'ctx', noShadow: true },\n })\n\n this.mixin('reflect', ['get', 'set', 'provide', 'accessor', 'mixin'])\n this.mixin('fiber', ['runtime', 'effect'])\n this.mixin('registry', ['inject', 'plugin'])\n this.mixin('events', ['on', 'once', 'parallel', 'emit', 'serial', 'bail', 'waterfall'])\n }\n\n get(name: string, strict = true) {\n return getTraceable(this.ctx, this._getImpl(name, strict)?.value)\n }\n\n _getImpl(name: string, strict = true) {\n const key = this.ctx[symbols.isolate]![name]\n const impl = key && this.store[key as symbol]\n if (!impl) return\n if (strict && impl.fiber.state !== FiberState.ACTIVE) return\n return impl\n }\n\n set(name: string, value: Any) {\n const key = this.ctx[symbols.isolate]![name]\n const impl = key && this.store[key as symbol]\n if (!impl) {\n throw new Error(`cannot set property \"${name}\" without provide`)\n }\n if (impl.fiber !== this.ctx.fiber) {\n throw new Error(`cannot set property \"${name}\" in multiple fibers`)\n }\n impl.value = value\n return true\n }\n\n provide(name: string, value?: Any, check?: () => boolean) {\n return this.ctx.fiber.effect(() => {\n if (!this.props[name]) {\n this.props[name] = { type: 'service' }\n } else if (this.props[name].type !== 'service') {\n throw new Error(`property \"${name}\" is already declared as ${this.props[name].type}`)\n }\n this.props[name] = { type: 'service' }\n\n this.ctx.root[symbols.isolate]![name] ??= Symbol(name)\n const key = this.ctx[symbols.isolate]![name]\n const impl: Impl = {\n name,\n value,\n fiber: this.ctx.fiber,\n ...(check ? { check } : {}),\n }\n if (key && this.store[key]) {\n throw new Error(`service \"${name}\" has been registered at <${this.store[key].fiber.name}>`)\n }\n this.store[key as symbol] = impl\n this.ctx.fiber.store![name] = impl\n if (this.ctx.fiber.state === FiberState.ACTIVE) {\n this.notify([name])\n }\n return async () => {\n delete this.store[key as symbol]\n const fibers = this.notify([name])\n await Promise.allSettled(fibers.map(fiber => fiber.await()))\n delete this.ctx.fiber.store![name]\n }\n }, `ctx.provide(${JSON.stringify(name)})`)\n }\n\n notify(\n names: string[],\n filter = (ctx: Context, name: string) => ctx[symbols.isolate]![name] === this.ctx[symbols.isolate]![name],\n ) {\n const fibers: Any[] = []\n for (const runtime of this.ctx.registry.values()) {\n for (const fiber of runtime.fibers) {\n let hasUpdate = false\n for (const name of names) {\n if (!(name in fiber.inject)) continue\n if (!filter(fiber.ctx, name)) continue\n hasUpdate = true\n fiber._checkImpl(name)\n }\n if (!hasUpdate) continue\n fiber._refresh()\n fibers.push(fiber)\n }\n }\n for (const name of names) {\n const self: Any = Object.create(this.ctx)\n self[symbols.filter] = (target: Context) => filter(target, name)\n this.ctx.events.emit(self, 'internal/service', name, this._getImpl(name, false)?.value)\n }\n return fibers\n }\n\n accessor(name: string, options: Omit<AccessorProperty, 'type'>) {\n return this.ctx.fiber.effect(() => {\n if (name in this.props) {\n throw new Error(`property \"${name}\" is already declared as ${this.props[name]!.type}`)\n }\n this.props[name] = { type: 'accessor', ...options }\n return () => delete this.props[name]\n }, `ctx.accessor(${JSON.stringify(name)})`)\n }\n\n mixin(source: Any, mixins: string[] | Dict<string>) {\n return this.ctx.fiber.effect(() => {\n const entries: [string, string][] = Array.isArray(mixins)\n ? mixins.map(key => [key, key] as [string, string])\n : Object.entries(mixins)\n const getTarget = (target: Context): Any => target[source]\n return entries.map(([key, value]) => {\n return this.accessor(value, {\n get(receiver) {\n const service: Any = getTarget(this)\n if (service == null) return service\n const mixin = receiver ? withProps(receiver, service) : service\n const result = Reflect.get(service, key, mixin)\n if (typeof result !== 'function') return result\n return result.bind(mixin ?? service)\n },\n set(value, receiver) {\n const service: Any = getTarget(this)\n const mixin = receiver ? withProps(receiver, service) : service\n return Reflect.set(service, key, value, mixin)\n },\n })\n })\n }, `ctx.mixin(${JSON.stringify(source)})`)\n }\n\n trace<T>(value: T) {\n return getTraceable(this.ctx, value)\n }\n\n bind<T extends AnyFunction>(callback: T) {\n return new Proxy(callback, {\n apply: (target, thisArg, args) => {\n return Reflect.apply(target, this.trace(thisArg), args.map(arg => this.trace(arg)))\n },\n construct: (target, args, newTarget) => {\n return Reflect.construct(target, args.map(arg => this.trace(arg)), newTarget)\n },\n })\n }\n}\n", "import type { Context } from './context.js'\nimport { Fiber } from './fiber.js'\nimport { buildOuterStack, DisposableList, symbols, withProps, type Any, type AnyFunction, type Dict } from './utils.js'\n\ndeclare module './context.js' {\n interface Context {\n inject(deps: Inject, callback: FunctionPlugin): Fiber & PromiseLike<Fiber>\n plugin<P extends Plugin>(plugin: P, ...args: Any[]): Fiber & PromiseLike<Fiber>\n }\n}\n\nfunction isApplicable(object: Plugin) {\n return object && typeof object === 'object' && typeof object.apply === 'function'\n}\n\nexport type Inject = string[] | Dict<Any>\nexport type InjectKey = string & keyof Context\n\nexport function Inject(name: string, config?: Any) {\n return function (value: Any, decorator: Any) {\n if (decorator.kind === 'class') {\n if (!Object.hasOwn(value, 'inject')) {\n Object.defineProperty(value, 'inject', {\n value: Object.create(Object.getPrototypeOf(value).inject ?? null),\n })\n Object.defineProperty(value.inject, symbols.checkProto, { value: true })\n }\n value.inject[name] = config\n } else if (decorator.kind === 'method') {\n const inject = (value[symbols.metadata] ??= {}).inject ??= Object.create(null)\n inject[name] = config\n decorator.addInitializer(function (this: Any) {\n const property = this[symbols.tracker]?.property\n ;(this[symbols.initHooks] ??= []).push(() => {\n (this.ctx as Context).inject(inject, (ctx) => {\n return value.call(property ? withProps(this, { [property]: ctx }) : this)\n })\n })\n })\n } else {\n throw new Error('@Inject() can only be used on class or class methods')\n }\n }\n}\n\nexport function resolveInject(inject: Inject | null | undefined, result: Dict = Object.create(null)) {\n if (!inject) return result\n if (Array.isArray(inject)) {\n for (const name of inject) {\n result[name] = null\n }\n } else if (Reflect.has(inject, symbols.checkProto)) {\n Object.assign(result, resolveInject(Object.getPrototypeOf(inject)))\n for (const name of Object.keys(inject)) {\n result[name] = inject[name] ?? null\n }\n } else {\n for (const name of Object.keys(inject)) {\n result[name] = inject[name] ?? null\n }\n }\n return result\n}\n\nexport type Plugin = FunctionPlugin | ConstructorPlugin | ObjectPlugin\n\nexport interface PluginBase {\n name?: string\n Config?: Any\n inject?: Inject\n provide?: string | string[]\n intercept?: Dict<boolean>\n}\n\nexport interface FunctionPlugin extends PluginBase {\n (ctx: Context, config: Any): Any\n}\n\nexport interface ConstructorPlugin extends PluginBase {\n new (ctx: Context, config: Any): Any\n}\n\nexport interface ObjectPlugin extends PluginBase {\n apply(ctx: Context, config: Any): Any\n}\n\nexport interface PluginRuntime {\n name?: string\n fibers: DisposableList<Fiber>\n callback: Any\n Config?: Any\n}\n\nexport class RegistryService {\n private _counter = 0\n private _internal = new Map<AnyFunction, PluginRuntime>()\n\n constructor(public ctx: Context) {\n Object.defineProperty(this, symbols.tracker, {\n value: { property: 'ctx', noShadow: true },\n })\n }\n\n get counter() {\n return ++this._counter\n }\n\n get size() {\n return this._internal.size\n }\n\n resolve(plugin: Plugin): AnyFunction | undefined {\n try {\n if (typeof plugin === 'function') return plugin as AnyFunction\n if (isApplicable(plugin)) return plugin.apply\n } catch {\n // getters on plugin objects may throw during resolution\n }\n }\n\n get(plugin: Plugin) {\n const key = this.resolve(plugin)\n return key && this._internal.get(key)\n }\n\n has(plugin: Plugin) {\n const key = this.resolve(plugin)\n return !!key && this._internal.has(key)\n }\n\n delete(plugin: Plugin) {\n const key = this.resolve(plugin)\n const runtime = key && this._internal.get(key)\n if (!runtime) return\n this._internal.delete(key)\n for (const fiber of [...runtime.fibers]) {\n fiber.dispose()\n }\n return runtime\n }\n\n keys() {\n return this._internal.keys()\n }\n\n values() {\n return this._internal.values()\n }\n\n entries() {\n return this._internal.entries()\n }\n\n forEach(callback: (value: PluginRuntime, key: AnyFunction) => void) {\n return this._internal.forEach(callback)\n }\n\n inject(inject: Inject, callback: FunctionPlugin) {\n const name = callback.name || undefined\n return this.plugin(Object.assign(\n { inject, apply: callback },\n name ? { name } : {},\n ))\n }\n\n plugin(plugin: Plugin, config?: Any, getOuterStack = buildOuterStack()) {\n const callback = this.resolve(plugin)\n if (!callback) throw new Error('invalid plugin, expect function or object with an \"apply\" method, received ' + typeof plugin)\n this.ctx.fiber.assertActive()\n\n let runtime = this._internal.get(callback)\n if (!runtime) {\n let name = plugin.name\n if (name === 'apply') name = undefined\n runtime = {\n callback,\n fibers: new DisposableList(),\n ...(name ? { name } : {}),\n ...(plugin.Config ? { Config: plugin.Config } : {}),\n }\n this._internal.set(callback, runtime)\n }\n\n const fiber = new Fiber(this.ctx, config, resolveInject(plugin.inject), runtime, getOuterStack)\n const wrapped = Object.create(fiber) as Fiber & PromiseLike<Fiber>\n wrapped.then = (onFulfilled: Any, onRejected: Any) => {\n return fiber.await().then(onFulfilled, onRejected)\n }\n return wrapped\n }\n}\n", "/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\nimport { EventsService } from './events.js'\nimport { Fiber } from './fiber.js'\nimport { Logger, LoggerService } from './logger.js'\nimport { ReflectService } from './reflect.js'\nimport { RegistryService } from './registry.js'\nimport { getTraceable, symbols, type Any, type Dict } from './utils.js'\n\nexport interface Context {\n [symbols.isolate]: Dict<symbol | undefined>\n [symbols.intercept]: Dict<Any>\n root: this\n baseUrl?: string | undefined\n events: EventsService\n logger: LoggerService & ((name?: string) => Logger)\n reflect: ReflectService\n registry: RegistryService\n}\n\nexport class Context {\n static readonly effect: symbol = symbols.effect\n static readonly filter: symbol = symbols.filter\n static readonly isolate: symbol = symbols.isolate\n static readonly intercept: symbol = symbols.intercept\n static readonly marker = Symbol.for('tnega.is')\n\n static is(value: Any): value is Context {\n return !!value?.[Context.marker]\n }\n\n static {\n (Context.prototype as Any)[Context.marker] = true\n }\n\n constructor() {\n this[symbols.isolate] = Object.create(null)\n this[symbols.intercept] = Object.create(null)\n const self = new Proxy<this>(this, ReflectService.handler)\n this.root = self\n this.baseUrl = undefined\n this.fiber = new Fiber(self, {}, Object.create(null), null, () => [])\n this.reflect = new ReflectService(self)\n this.registry = new RegistryService(self)\n this.events = new EventsService(self)\n this.logger = new LoggerService(self)\n this.fiber._disposables.clear()\n return self\n }\n\n [Symbol.for('nodejs.util.inspect.custom')]() {\n return `Context <${this.fiber.name}>`\n }\n\n extend(meta: Dict = {}): this {\n const shadow = Reflect.getOwnPropertyDescriptor(this, symbols.shadow)?.value\n const self = Object.create(getTraceable(this, this))\n for (const prop of Reflect.ownKeys(meta)) {\n Object.defineProperty(self, prop, Reflect.getOwnPropertyDescriptor(meta, prop)!)\n }\n if (!shadow) return self\n return Object.assign(Object.create(self), { [symbols.shadow]: shadow })\n }\n\n isolate(name: string, label?: symbol) {\n const shadow = Object.create(this[symbols.isolate]!)\n shadow[name] = label ?? Symbol(name)\n return this.extend({ [symbols.isolate]: shadow })\n }\n\n intercept(name: string, config: Any) {\n const intercept = Object.create(this[symbols.intercept]!)\n intercept[name] = config\n return this.extend({ [symbols.intercept]: intercept })\n }\n}\n", "import type { Context } from './context.js'\nimport { createCallable, joinPrototype, symbols, type Any, type Tracker } from './utils.js'\n\nexport abstract class Service<out T = never> {\n static readonly init: symbol = symbols.init\n static readonly check: symbol = symbols.check\n static readonly config: symbol = symbols.config\n static readonly invoke: symbol = symbols.invoke\n static readonly extend: symbol = symbols.extend\n static readonly tracker: symbol = symbols.tracker\n static readonly resolveConfig: symbol = symbols.resolveConfig\n\n declare [symbols.config]: T\n\n public name!: string\n\n constructor(protected ctx: Context, name?: string) {\n name ??= (this.constructor as Any).provide as string\n\n const tracker: Tracker = {\n associate: name,\n property: 'ctx',\n }\n const self: Any = (this as Any)[symbols.invoke]\n ? createCallable(name, joinPrototype(Object.getPrototypeOf(this), Function.prototype), tracker)\n : this\n\n self.ctx = ctx\n self.name = name\n Object.defineProperty(self, symbols.tracker, { value: tracker })\n\n self.ctx.reflect.provide(name, self, (this as Any)[symbols.check])\n return self\n }\n\n protected [symbols.filter](ctx: Context) {\n return ctx[symbols.isolate]![this.name] === this.ctx[symbols.isolate]![this.name]\n }\n\n protected [symbols.extend](props?: Any) {\n let self: Any\n if ((this as Any)[Service.invoke]) {\n self = createCallable(this.name, this, (this as Any)[symbols.tracker])\n } else {\n self = Object.create(this)\n }\n return Object.assign(self, props)\n }\n\n [symbols.resolveConfig](base?: T, head?: T): T {\n let intercept: Any = this.ctx[symbols.intercept]!\n const configs: Any[] = []\n while (this.name in intercept) {\n if (Object.hasOwn(intercept, this.name)) {\n configs.unshift(intercept[this.name])\n }\n intercept = Object.getPrototypeOf(intercept)\n }\n if (base) configs.unshift(base)\n if (head) configs.push(head)\n if ((this as Any)['Config']?.merge) {\n return (this as Any)['Config'].merge(...configs)\n } else {\n return Object.assign({}, ...configs)\n }\n }\n\n static [Symbol.hasInstance](instance: Any) {\n if (!instance) return false\n let constructor = instance.constructor\n while (constructor) {\n constructor = constructor.prototype?.constructor\n if (constructor === this) return true\n constructor &&= Object.getPrototypeOf(constructor)\n }\n return false\n }\n}\n", "import type { Context } from '@tnega/core'\nimport type { ModelMessage, SessionLog, ToolResultPayload } from '@tnega/session'\nimport type { ToolDefinition, ToolResult } from '@tnega/tools'\nimport type { ToolsService } from '@tnega/tools'\n\nexport type AgentFinishReason = 'stop' | 'tool_calls' | 'length' | 'max_turns' | 'max_steps' | 'error'\n\nexport interface LLMToolCall {\n id: string\n name: string\n arguments: unknown\n}\n\nexport interface LLMCompletion {\n content?: string\n toolCalls?: LLMToolCall[]\n finishReason: AgentFinishReason\n}\n\nexport interface CompleteOptions {\n maxSteps?: number\n signal?: AbortSignal\n}\n\nexport interface LLMAdapter {\n complete(\n messages: readonly ModelMessage[],\n tools: readonly ToolDefinition[],\n options: CompleteOptions,\n ): Promise<LLMCompletion>\n}\n\nexport interface AgentInput {\n text?: string\n messages?: ModelMessage[]\n context?: unknown\n}\n\nexport interface AgentStep {\n index: number\n input: readonly ModelMessage[]\n completion: LLMCompletion\n toolResults: readonly ToolResult[]\n}\n\nexport interface AgentRunResult {\n input: AgentInput\n output: string\n finishReason: AgentFinishReason\n steps: readonly AgentStep[]\n messages: readonly ModelMessage[]\n}\n\nexport interface AgentRunOptions {\n maxTurns?: number\n maxSteps?: number\n signal?: AbortSignal\n}\n\nexport interface AgentConfig {\n llm?: LLMAdapter\n maxTurns?: number\n maxSteps?: number\n inbox?: AgentInbox\n}\n\nexport interface AgentStartEvent {\n input: AgentInput\n options: AgentRunOptions\n injected: ReadonlyMap<string, unknown>\n}\n\nexport interface AgentTurnStartEvent {\n input: AgentInput\n messages: readonly ModelMessage[]\n injected: ReadonlyMap<string, unknown>\n}\n\nexport interface AgentStepEvent {\n index: number\n input: readonly ModelMessage[]\n}\n\nexport interface AgentToolCallEvent {\n index: number\n call: LLMToolCall\n}\n\nexport interface AgentToolResultEvent {\n index: number\n call: LLMToolCall\n result: ToolResult\n}\n\nexport interface AgentTurnEndEvent {\n input: AgentInput\n steps: readonly AgentStep[]\n messages: readonly ModelMessage[]\n output: string\n finishReason: AgentFinishReason\n}\n\nexport type AgentEndEvent = AgentTurnEndEvent\n\nexport type AgentLoop = (\n input?: AgentInput,\n options?: AgentRunOptions,\n) => Promise<AgentRunResult>\n\nexport class AgentError extends Error {\n override name = 'AgentError'\n}\n\nexport class AgentInbox {\n private _queue: AgentInput[] = []\n private _injected = new Map<string, unknown>()\n\n get size(): number {\n return this._queue.length\n }\n\n push(input: AgentInput): AgentInput {\n this._queue.push(input)\n return input\n }\n\n claim(): AgentInput | undefined {\n return this._queue.shift()\n }\n\n peek(): AgentInput | undefined {\n return this._queue[0]\n }\n\n inject(key: string, value: unknown): void {\n this._injected.set(key, value)\n }\n\n injected(): ReadonlyMap<string, unknown> {\n return new Map(this._injected)\n }\n}\n\nfunction copyMessages(messages: readonly ModelMessage[]): ModelMessage[] {\n return messages.map((message) => {\n const copy: ModelMessage = {\n role: message.role,\n content: message.content,\n }\n if (message.name) copy.name = message.name\n if (message.tool_call_id) copy.tool_call_id = message.tool_call_id\n if (message.tool_calls) {\n copy.tool_calls = message.tool_calls.map(call => ({\n id: call.id,\n name: call.name,\n arguments: call.arguments,\n }))\n }\n return copy\n })\n}\n\nfunction stringify(value: unknown): string {\n if (typeof value === 'string') return value\n try {\n return JSON.stringify(value) ?? String(value)\n } catch {\n return String(value)\n }\n}\n\nfunction copyCompletion(completion: LLMCompletion): LLMCompletion {\n const copy: LLMCompletion = {\n finishReason: completion.finishReason,\n }\n if (completion.content !== undefined) copy.content = completion.content\n if (completion.toolCalls) {\n copy.toolCalls = completion.toolCalls.map(call => ({\n id: call.id,\n name: call.name,\n arguments: call.arguments,\n }))\n }\n return copy\n}\n\nexport class AgentService {\n readonly inbox: AgentInbox\n\n constructor(\n private ctx: Context,\n private config: AgentConfig = {},\n ) {\n this.inbox = config.inbox ?? new AgentInbox()\n }\n\n async run(input?: AgentInput, options: AgentRunOptions = {}): Promise<AgentRunResult> {\n const claimed = input ?? this.inbox.claim()\n if (!claimed) throw new AgentError('no agent input available')\n\n const session = this._session()\n const tools = this._tools()\n const llm = this._llm()\n if (!llm) throw new AgentError('no LLM adapter available')\n\n const maxTurns = options.maxTurns ?? this.config.maxTurns ?? 8\n const maxSteps = options.maxSteps ?? this.config.maxSteps ?? 64\n const injected = this.inbox.injected()\n this.ctx.emit('agent/start', { input: claimed, options, injected })\n\n let messages = this._initialMessages(claimed)\n if (claimed.text) {\n await session.append('message', { role: 'user', content: claimed.text })\n }\n\n const steps: AgentStep[] = []\n let output = ''\n let finishReason: AgentFinishReason = 'stop'\n\n this.ctx.emit('agent/turn-start', {\n input: claimed,\n messages: copyMessages(messages),\n injected,\n })\n\n for (let index = 0; index < maxTurns; index++) {\n if (options.signal?.aborted) {\n finishReason = 'error'\n break\n }\n if (steps.length >= maxSteps) {\n finishReason = 'max_steps'\n break\n }\n\n const stepInput = copyMessages(messages)\n this.ctx.emit('agent/step', { index, input: copyMessages(stepInput) })\n const completeOptions: CompleteOptions = {\n maxSteps: maxSteps - steps.length,\n }\n if (options.signal) completeOptions.signal = options.signal\n const completion = await llm.complete(stepInput, tools.list(), completeOptions)\n\n const toolCalls = completion.toolCalls ?? []\n const toolResults: ToolResult[] = []\n if (toolCalls.length) {\n await session.append('message', {\n role: 'assistant',\n content: completion.content ?? '',\n })\n }\n for (const call of toolCalls) {\n this.ctx.emit('agent/tool-call', { index, call })\n await session.append('tool-call', {\n id: call.id,\n name: call.name,\n arguments: call.arguments,\n })\n const result = await tools.execute(call.name, call.arguments, { callId: call.id })\n toolResults.push(result)\n const toolResultPayload: ToolResultPayload = {\n id: call.id,\n toolCallId: call.id,\n name: call.name,\n ok: result.ok,\n }\n if (result.output !== undefined) toolResultPayload.output = result.output\n if (result.error) {\n toolResultPayload.error = {\n message: result.error.message,\n }\n if (result.error.stack) toolResultPayload.error.stack = result.error.stack\n }\n await session.append('tool-result', toolResultPayload)\n this.ctx.emit('agent/tool-result', { index, call, result })\n }\n\n steps.push({\n index,\n input: stepInput,\n completion,\n toolResults,\n })\n\n if (completion.content) {\n output = completion.content\n }\n if (!toolCalls.length) {\n await session.append('message', { role: 'assistant', content: completion.content ?? '' })\n }\n\n messages = this._extendMessages(messages, completion, toolResults)\n if (toolCalls.length === 0) {\n finishReason = completion.finishReason === 'length'\n ? 'length'\n : completion.finishReason === 'error'\n ? 'error'\n : 'stop'\n break\n }\n if (index + 1 >= maxTurns) {\n finishReason = 'max_turns'\n } else {\n finishReason = 'tool_calls'\n }\n }\n\n this.ctx.emit('agent/turn-end', {\n input: claimed,\n steps: copySteps(steps),\n messages: copyMessages(messages),\n output,\n finishReason,\n })\n this.ctx.emit('agent/end', {\n input: claimed,\n steps: copySteps(steps),\n messages: copyMessages(messages),\n output,\n finishReason,\n })\n\n return {\n input: claimed,\n output,\n finishReason,\n steps,\n messages: copyMessages(messages),\n }\n }\n\n private _initialMessages(input: AgentInput): ModelMessage[] {\n if (input.messages?.length) return copyMessages(input.messages)\n if (input.text) return [{ role: 'user', content: input.text }]\n return []\n }\n\n private _extendMessages(\n messages: readonly ModelMessage[],\n completion: LLMCompletion,\n toolResults: readonly ToolResult[],\n ): ModelMessage[] {\n const next = copyMessages(messages)\n const assistant: ModelMessage = {\n role: 'assistant',\n content: completion.content ?? '',\n }\n const toolCalls = completion.toolCalls ?? []\n if (toolCalls.length) {\n assistant.tool_calls = toolCalls.map(call => ({\n id: call.id,\n name: call.name,\n arguments: call.arguments,\n }))\n }\n next.push(assistant)\n\n for (const call of toolCalls) {\n const result = toolResults.find(candidate => candidate.callId === call.id)\n const content = result\n ? result.ok\n ? stringify(result.output)\n : `error: ${result.error?.message ?? 'unknown'}`\n : 'error: missing tool result'\n const message: ModelMessage = {\n role: 'tool',\n content,\n tool_call_id: call.id,\n }\n message.name = result?.name ?? call.name\n next.push(message)\n }\n return next\n }\n\n private _session(): SessionLog {\n const session = (this.ctx as unknown as { session?: SessionLog }).session\n if (!session) throw new AgentError('session service is required')\n return session\n }\n\n private _tools(): ToolsService {\n const tools = (this.ctx as unknown as { tools?: ToolsService }).tools\n if (!tools) throw new AgentError('tools service is required')\n return tools\n }\n\n private _llm(): LLMAdapter | undefined {\n return this.config.llm\n }\n}\n\nfunction copySteps(steps: readonly AgentStep[]): readonly AgentStep[] {\n return steps.map(step => ({\n index: step.index,\n input: copyMessages(step.input),\n completion: copyCompletion(step.completion),\n toolResults: step.toolResults.map(result => ({ ...result })),\n }))\n}\n\nexport const agent = {\n name: 'agent',\n inject: ['session', 'tools'],\n apply: (ctx: Context, config: AgentConfig = {}) => {\n const service = new AgentService(ctx, config)\n ctx.provide('agent', service)\n ctx.provide('agentLoop', (input?: AgentInput, options?: AgentRunOptions) => service.run(input, options))\n ctx.provide('inbox', service.inbox)\n return () => {}\n },\n}\n\nexport const name = '@tnega/agent'\n", "import type {\n AgentFinishReason,\n LLMAdapter,\n LLMCompletion,\n LLMToolCall,\n} from '@tnega/agent'\nimport type { ModelMessage } from '@tnega/session'\nimport type { ToolDefinition } from '@tnega/tools'\n\nexport const DEFAULT_OPENCODE_GO_BASE_URL = 'https://opencode.ai/zen/go/v1'\nexport const DEFAULT_DEEPSEEK_MODEL = 'deepseek-v4-flash'\n\nexport interface OpenAICompatibleConfig {\n apiKey?: string\n baseUrl?: string\n model?: string\n temperature?: number\n maxTokens?: number\n}\n\ninterface OpenAICompatibleToolCall {\n id?: unknown\n type?: unknown\n function?: {\n name?: unknown\n arguments?: unknown\n }\n}\n\ninterface OpenAICompatibleChoice {\n message?: {\n content?: string | null\n tool_calls?: unknown\n }\n finish_reason?: string | null\n}\n\ninterface OpenAICompatiblePayload {\n choices?: unknown\n data?: unknown\n}\n\ninterface RequestPayload {\n url: string\n init: RequestInit\n}\n\nexport class OpenAICompatibleError extends Error {\n override name = 'OpenAICompatibleError'\n\n constructor(\n readonly status: number,\n message: string,\n readonly detail?: string,\n ) {\n super(message)\n }\n}\n\nexport function openaiCompatAdapter(config: OpenAICompatibleConfig = {}): LLMAdapter {\n return {\n async complete(messages, tools, options) {\n const request = buildRequest(messages, tools, config, options.signal)\n let response: Response\n try {\n response = await fetch(request.url, request.init)\n } catch (error) {\n throw new OpenAICompatibleError(\n 0,\n `LLM request failed: ${errorMessage(error)}`,\n )\n }\n return parseResponse(response)\n },\n }\n}\n\nexport async function listModels(config: OpenAICompatibleConfig = {}): Promise<string[]> {\n const baseUrl = normalizeBaseUrl(config.baseUrl)\n const headers = authHeaders(config.apiKey)\n let response: Response\n try {\n response = await fetch(`${baseUrl}/models`, { headers })\n } catch (error) {\n throw new OpenAICompatibleError(\n 0,\n `model list request failed: ${errorMessage(error)}`,\n )\n }\n await assertOk(response)\n const payload = await parseJson(response)\n const data = (payload as OpenAICompatiblePayload | null)?.data\n if (!Array.isArray(data)) {\n throw new OpenAICompatibleError(\n response.status,\n 'model list response did not contain an array in data',\n )\n }\n return data\n .map((entry) => {\n const record = entry as { id?: unknown } | null\n return typeof record?.id === 'string' ? record.id : ''\n })\n .filter(Boolean)\n}\n\nfunction buildRequest(\n messages: readonly ModelMessage[],\n tools: readonly ToolDefinition[],\n config: OpenAICompatibleConfig,\n signal: AbortSignal | undefined,\n): RequestPayload {\n const body: Record<string, unknown> = {\n model: config.model ?? DEFAULT_DEEPSEEK_MODEL,\n messages: messages.map(toOpenAIMessage),\n }\n if (tools.length) {\n body.tools = tools.map(toOpenAITool)\n }\n if (config.temperature !== undefined) body.temperature = config.temperature\n if (config.maxTokens !== undefined) body.max_tokens = config.maxTokens\n\n return {\n url: `${normalizeBaseUrl(config.baseUrl)}/chat/completions`,\n init: {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n ...authHeaders(config.apiKey),\n },\n body: JSON.stringify(body),\n ...(signal ? { signal } : {}),\n },\n }\n}\n\nfunction authHeaders(apiKey: string | undefined): Record<string, string> {\n return apiKey ? { authorization: `Bearer ${apiKey}` } : {}\n}\n\nfunction normalizeBaseUrl(baseUrl: string | undefined): string {\n return (baseUrl ?? DEFAULT_OPENCODE_GO_BASE_URL).replace(/\\/+$/, '')\n}\n\nfunction toOpenAIMessage(message: ModelMessage): Record<string, unknown> {\n const payload: Record<string, unknown> = {\n role: message.role,\n content: message.content,\n }\n if (message.role === 'tool' && message.name) payload.name = message.name\n if (message.tool_call_id) payload.tool_call_id = message.tool_call_id\n if (message.tool_calls?.length) {\n payload.tool_calls = message.tool_calls.map(call => ({\n id: call.id,\n type: 'function',\n function: {\n name: call.name,\n arguments: stringifyArguments(call.arguments),\n },\n }))\n }\n return payload\n}\n\nfunction toOpenAITool(tool: ToolDefinition): Record<string, unknown> {\n return {\n type: 'function',\n function: {\n name: tool.schema.name,\n description: tool.schema.description,\n parameters: tool.schema.parameters ?? { type: 'object', properties: {} },\n },\n }\n}\n\nfunction stringifyArguments(value: unknown): string {\n if (typeof value === 'string') return value\n try {\n return JSON.stringify(value) ?? '{}'\n } catch {\n return '{}'\n }\n}\n\nasync function parseResponse(response: Response): Promise<LLMCompletion> {\n await assertOk(response)\n const payload = await parseJson(response)\n return parseCompletion(payload)\n}\n\nasync function assertOk(response: Response): Promise<void> {\n if (response.ok) return\n let detail: string | undefined\n try {\n const text = await response.text()\n if (text.trim()) detail = text.slice(0, 2000)\n } catch {\n detail = undefined\n }\n throw new OpenAICompatibleError(\n response.status,\n `LLM request failed with status ${response.status}`,\n detail,\n )\n}\n\nasync function parseJson(response: Response): Promise<unknown> {\n try {\n return await response.json()\n } catch {\n throw new OpenAICompatibleError(\n response.status,\n 'LLM response was not valid JSON',\n )\n }\n}\n\nfunction parseCompletion(payload: unknown): LLMCompletion {\n const record = payload as OpenAICompatiblePayload | null\n const choices = Array.isArray(record?.choices)\n ? record.choices as OpenAICompatibleChoice[]\n : []\n const choice = choices[0]\n const rawContent = choice?.message?.content\n const content = typeof rawContent === 'string' ? rawContent : undefined\n const toolCalls = parseToolCalls(choice?.message?.tool_calls)\n const finishReason = toFinishReason(\n choice?.finish_reason,\n content,\n toolCalls !== undefined,\n )\n const completion: LLMCompletion = {\n finishReason,\n }\n if (content !== undefined) completion.content = content\n if (toolCalls !== undefined) completion.toolCalls = toolCalls\n return completion\n}\n\nfunction parseToolCalls(value: unknown): LLMToolCall[] | undefined {\n if (!Array.isArray(value)) return undefined\n const calls: LLMToolCall[] = []\n for (const entry of value) {\n if (!entry || typeof entry !== 'object') continue\n const item = entry as OpenAICompatibleToolCall\n const name = typeof item.function?.name === 'string' ? item.function.name : ''\n if (!name) continue\n const id = typeof item.id === 'string' && item.id\n ? item.id\n : `call_${calls.length + 1}`\n const rawArguments = typeof item.function?.arguments === 'string'\n ? item.function.arguments\n : ''\n calls.push({\n id,\n name,\n arguments: parseArguments(rawArguments),\n })\n }\n return calls.length ? calls : undefined\n}\n\nfunction parseArguments(raw: string): unknown {\n const text = raw.trim()\n if (!text) return {}\n try {\n return JSON.parse(text) as unknown\n } catch {\n return raw\n }\n}\n\nfunction toFinishReason(\n raw: string | null | undefined,\n content: string | undefined,\n hasToolCalls: boolean,\n): AgentFinishReason {\n if (raw === 'stop' || (raw === undefined && content !== undefined && !hasToolCalls)) {\n return 'stop'\n }\n if (raw === 'length') return 'length'\n if (raw === 'tool_calls' || hasToolCalls) return 'tool_calls'\n return 'error'\n}\n\nfunction errorMessage(error: unknown): string {\n if (error instanceof Error) return error.message\n return String(error)\n}\n", "import { randomUUID } from 'node:crypto'\nimport { appendFile, mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { dirname, resolve } from 'node:path'\nimport type { Context } from '@tnega/core'\n\nexport type ModelRole = 'system' | 'user' | 'assistant' | 'tool'\n\nexport interface ModelToolCall {\n id: string\n name: string\n arguments: unknown\n}\n\nexport interface ModelMessage {\n role: ModelRole\n content: string\n name?: string\n tool_call_id?: string\n tool_calls?: ModelToolCall[]\n}\n\nexport type MessageRole = 'system' | 'user' | 'assistant'\n\nexport interface MessagePayload {\n role: MessageRole\n content: string\n name?: string\n}\n\nexport interface ToolCallPayload {\n id: string\n name: string\n arguments: unknown\n}\n\nexport interface ToolResultPayload {\n id: string\n toolCallId: string\n name: string\n ok: boolean\n output?: unknown\n error?: {\n message: string\n stack?: string\n }\n}\n\nexport interface CheckpointPayload {\n messages: ModelMessage[]\n}\n\nexport type SessionEventType =\n | 'message'\n | 'tool-call'\n | 'tool-result'\n | 'checkpoint'\n | 'meta'\n\nexport interface SessionEventBase<T extends SessionEventType, P> {\n id: string\n seq: number\n ts: number\n type: T\n payload: P\n}\n\nexport type SessionEvent =\n | SessionEventBase<'message', MessagePayload>\n | SessionEventBase<'tool-call', ToolCallPayload>\n | SessionEventBase<'tool-result', ToolResultPayload>\n | SessionEventBase<'checkpoint', CheckpointPayload>\n | SessionEventBase<'meta', Record<string, unknown>>\n\nexport interface SessionConfig {\n file: string\n}\n\nexport interface CompactOptions {\n keep?: number\n}\n\nexport type ReplayReducer<T> = (state: T, event: SessionEvent) => T | Promise<T>\n\nfunction isSessionEvent(value: unknown): value is SessionEvent {\n if (typeof value !== 'object' || value === null) return false\n const record = value as Record<string, unknown>\n return typeof record.id === 'string'\n && typeof record.seq === 'number'\n && typeof record.ts === 'number'\n && typeof record.type === 'string'\n && 'payload' in record\n}\n\nfunction clone<T>(value: T): T {\n return structuredClone(value)\n}\n\nexport function projectEvents(events: readonly SessionEvent[]): ModelMessage[] {\n const messages: ModelMessage[] = []\n for (const event of events) {\n switch (event.type) {\n case 'checkpoint':\n messages.push(...clone(event.payload.messages))\n break\n case 'message': {\n const message: ModelMessage = {\n role: event.payload.role,\n content: event.payload.content,\n }\n if (event.payload.name) message.name = event.payload.name\n messages.push(message)\n break\n }\n case 'tool-call': {\n const last = messages.at(-1)\n if (!last || last.role !== 'assistant') {\n messages.push({\n role: 'assistant',\n content: '',\n tool_calls: [],\n })\n } else if (!last.tool_calls) {\n last.tool_calls = []\n }\n messages.at(-1)!.tool_calls!.push({\n id: event.payload.id,\n name: event.payload.name,\n arguments: event.payload.arguments,\n })\n break\n }\n case 'tool-result': {\n const content = event.payload.ok\n ? stringify(event.payload.output)\n : `error: ${event.payload.error?.message ?? 'unknown'}`\n const message: ModelMessage = {\n role: 'tool',\n content,\n tool_call_id: event.payload.toolCallId,\n }\n message.name = event.payload.name\n messages.push(message)\n break\n }\n case 'meta':\n break\n }\n }\n return messages\n}\n\nfunction stringify(value: unknown): string {\n if (typeof value === 'string') return value\n try {\n return JSON.stringify(value) ?? String(value)\n } catch {\n return String(value)\n }\n}\n\nexport class SessionLog {\n private _events: SessionEvent[] = []\n private _loaded = false\n private _nextSeq = 1\n private _queue: Promise<unknown> = Promise.resolve()\n\n constructor(readonly file: string) {}\n\n init(): Promise<void> {\n return this._run(async () => {\n await this._ensureLoaded()\n })\n }\n\n append(type: 'message', payload: MessagePayload): Promise<SessionEvent>\n append(type: 'tool-call', payload: ToolCallPayload): Promise<SessionEvent>\n append(type: 'tool-result', payload: ToolResultPayload): Promise<SessionEvent>\n append(type: 'checkpoint', payload: CheckpointPayload): Promise<SessionEvent>\n append(type: 'meta', payload: Record<string, unknown>): Promise<SessionEvent>\n append(type: SessionEventType, payload: SessionEvent['payload']): Promise<SessionEvent> {\n return this._run(async () => {\n await this._ensureLoaded()\n const event = {\n id: randomUUID(),\n seq: this._nextSeq,\n ts: Date.now(),\n type: type as SessionEvent['type'],\n payload,\n } as SessionEvent\n await appendFile(this.file, `${JSON.stringify(event)}\\n`, 'utf8')\n this._events.push(event)\n this._nextSeq += 1\n return event\n })\n }\n\n read(): Promise<SessionEvent[]> {\n return this._run(async () => {\n await this._ensureLoaded()\n return this._events.map(event => clone(event))\n })\n }\n\n deriveMessages(): Promise<ModelMessage[]> {\n return this._run(async () => {\n await this._ensureLoaded()\n return clone(projectEvents(this._events))\n })\n }\n\n replay(): Promise<SessionEvent[]>\n replay<T>(reduce: ReplayReducer<T>, initial: T): Promise<T>\n replay<T>(reduce?: ReplayReducer<T>, initial?: T): Promise<SessionEvent[] | T> {\n return this.read().then((events) => {\n if (!reduce) return events\n let state = initial as T\n let pending: Promise<void> = Promise.resolve()\n for (const event of events) {\n pending = pending.then(async () => {\n state = await reduce(state, event)\n })\n }\n return pending.then(() => state)\n })\n }\n\n async fork(targetFile?: string): Promise<SessionLog> {\n const file = targetFile ?? `${this.file}.${Date.now()}.${randomUUID()}.fork.jsonl`\n return this._run(async () => {\n await this._ensureLoaded()\n const child = new SessionLog(file)\n await child._run(async () => {\n await child._ensureLoaded()\n const events = this._events.map(event => clone(event))\n if (events.length) {\n await writeFile(child.file, `${events.map(event => JSON.stringify(event)).join('\\n')}\\n`, 'utf8')\n }\n child._events = events\n child._nextSeq = this._nextSeq\n })\n return child\n })\n }\n\n compact(options: CompactOptions = {}): Promise<number> {\n return this._run(async () => {\n await this._ensureLoaded()\n const keep = Math.max(0, Math.min(options.keep ?? 0, this._events.length))\n const split = this._events.length - keep\n const prefix = this._events.slice(0, split)\n const suffix = this._events.slice(split)\n const checkpoint: SessionEvent = {\n id: randomUUID(),\n seq: this._events.at(-1)?.seq ?? 0,\n ts: Date.now(),\n type: 'checkpoint',\n payload: {\n messages: projectEvents(prefix),\n },\n }\n const next = [checkpoint, ...suffix]\n if (next.length) {\n await writeFile(this.file, `${next.map(event => JSON.stringify(event)).join('\\n')}\\n`, 'utf8')\n } else {\n await writeFile(this.file, '', 'utf8')\n }\n this._events = next\n return next.length\n })\n }\n\n close(): Promise<void> {\n return this._queue.then(() => undefined)\n }\n\n private _run<T>(task: () => Promise<T>): Promise<T> {\n const next = this._queue.then(task, task)\n this._queue = next.then(() => undefined, () => undefined)\n return next\n }\n\n private async _ensureLoaded(): Promise<void> {\n if (this._loaded) return\n await mkdir(dirname(resolve(this.file)), { recursive: true })\n this._events = await this._read()\n this._nextSeq = (this._events.at(-1)?.seq ?? 0) + 1\n this._loaded = true\n }\n\n private async _read(): Promise<SessionEvent[]> {\n try {\n const text = await readFile(this.file, 'utf8')\n const events: SessionEvent[] = []\n for (const line of text.split('\\n')) {\n if (!line.trim()) continue\n let parsed: unknown\n try {\n parsed = JSON.parse(line)\n } catch {\n continue\n }\n if (isSessionEvent(parsed)) events.push(parsed)\n }\n return events\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return []\n throw error\n }\n }\n}\n\nexport const session = {\n name: 'session',\n apply: async (ctx: Context, config: SessionConfig) => {\n const log = new SessionLog(config.file)\n await log.init()\n ctx.provide('session', log)\n return () => log.close()\n },\n}\n\nexport const name = '@tnega/session'\n", "import { spawn } from 'node:child_process'\nimport {\n appendFile,\n mkdir,\n readFile,\n readdir,\n stat,\n writeFile,\n} from 'node:fs/promises'\nimport { dirname, join, relative, sep } from 'node:path'\nimport type { Context } from '@tnega/core'\nimport type {\n ToolDefinition,\n ToolExecuteOptions,\n ToolExecutor,\n ToolParameterSchema,\n ToolSchema,\n ToolsService,\n} from './index.js'\nimport { evaluateExpression } from './calc.js'\nimport { resolveInside } from './path.js'\n\nexport interface BuiltinToolsConfig {\n cwd?: string\n allowNetwork?: boolean\n allowShell?: boolean\n disabled?: readonly string[]\n maxReadBytes?: number\n maxWriteBytes?: number\n maxSearchBytes?: number\n maxResults?: number\n timeoutMs?: number\n}\n\ninterface NormalizedBuiltinToolsConfig {\n cwd: string\n allowNetwork: boolean\n allowShell: boolean\n disabled: readonly string[]\n maxReadBytes: number\n maxWriteBytes: number\n maxSearchBytes: number\n maxResults: number\n timeoutMs: number\n}\n\nexport class ToolInputError extends Error {\n override name = 'ToolInputError'\n}\n\nconst DEFAULT_TOOL_NAMES = [\n 'echo',\n 'now',\n 'calculator',\n 'json',\n 'read_file',\n 'write_file',\n 'list_dir',\n 'glob',\n 'grep',\n] as const\n\nfunction normalizeConfig(config: BuiltinToolsConfig = {}): NormalizedBuiltinToolsConfig {\n return {\n cwd: config.cwd ?? process.cwd(),\n allowNetwork: config.allowNetwork ?? false,\n allowShell: config.allowShell ?? false,\n disabled: [...(config.disabled ?? [])],\n maxReadBytes: config.maxReadBytes ?? 256 * 1024,\n maxWriteBytes: config.maxWriteBytes ?? 1024 * 1024,\n maxSearchBytes: config.maxSearchBytes ?? 1024 * 1024,\n maxResults: config.maxResults ?? 200,\n timeoutMs: config.timeoutMs ?? 15_000,\n }\n}\n\nfunction definition(\n name: string,\n description: string,\n execute: ToolExecutor,\n parameters?: ToolParameterSchema,\n): ToolDefinition {\n const schema: ToolSchema = { name, description }\n if (parameters) schema.parameters = parameters\n return { schema, execute }\n}\n\nfunction record(value: unknown, label = 'input'): Record<string, unknown> {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return value as Record<string, unknown>\n }\n throw new ToolInputError(`${label} must be an object`)\n}\n\nfunction stringField(value: unknown, name: string): string {\n if (typeof value === 'string') return value\n throw new ToolInputError(`${name} must be a string`)\n}\n\nfunction optionalString(value: unknown, name: string): string | undefined {\n if (value === undefined) return undefined\n return stringField(value, name)\n}\n\nfunction numberField(value: unknown, name: string): number {\n if (typeof value === 'number' && Number.isFinite(value)) return value\n throw new ToolInputError(`${name} must be a finite number`)\n}\n\nfunction optionalNumber(value: unknown, name: string): number | undefined {\n if (value === undefined) return undefined\n return numberField(value, name)\n}\n\nfunction booleanField(value: unknown, name: string): boolean {\n if (typeof value === 'boolean') return value\n throw new ToolInputError(`${name} must be a boolean`)\n}\n\nfunction optionalBoolean(value: unknown, name: string): boolean | undefined {\n if (value === undefined) return undefined\n return booleanField(value, name)\n}\n\nfunction optionalRecord(value: unknown, name: string): Record<string, string> | undefined {\n if (value === undefined) return undefined\n const source = record(value, name)\n const result: Record<string, string> = {}\n for (const [key, entry] of Object.entries(source)) {\n if (typeof entry !== 'string') throw new ToolInputError(`${name}.${key} must be a string`)\n result[key] = entry\n }\n return result\n}\n\nfunction displayPath(cwd: string, target: string): string {\n const rel = relative(cwd, target)\n return (rel === '' ? '.' : rel).split(sep).join('/')\n}\n\nfunction message(error: unknown): string {\n if (error instanceof Error) return error.message\n return String(error)\n}\n\nfunction echoTool(): ToolDefinition {\n return definition(\n 'echo',\n 'Return the input text unchanged. Useful for quick checks and debugging.',\n (input) => stringField(record(input).text, 'text'),\n {\n type: 'object',\n properties: {\n text: { type: 'string', description: 'text to return' },\n },\n required: ['text'],\n },\n )\n}\n\nfunction nowTool(): ToolDefinition {\n return definition(\n 'now',\n 'Return the current date and time as an ISO 8601 string in the local timezone.',\n () => new Date().toISOString(),\n { type: 'object', properties: {} },\n )\n}\n\nfunction calculatorTool(): ToolDefinition {\n return definition(\n 'calculator',\n 'Evaluate a safe arithmetic expression and return the numeric result. Supports + - * / % ^, parentheses, constants pi/e/tau and functions abs/round/floor/ceil/sqrt/pow/min/max/log/ln.',\n (input) => evaluateExpression(stringField(record(input).expression, 'expression')),\n {\n type: 'object',\n properties: {\n expression: {\n type: 'string',\n description: 'arithmetic expression, e.g. \"(2 + 3) * 4\"',\n },\n },\n required: ['expression'],\n },\n )\n}\n\nfunction jsonTool(): ToolDefinition {\n return definition(\n 'json',\n 'Parse a JSON string, stringify a value, or get a value by path. Operations: parse (value is a JSON string), stringify (value is any JSON value), get (value is a JSON value, path uses dot and bracket notation like a.b[0].c).',\n (input) => {\n const args = record(input)\n const operation = optionalString(args.operation, 'operation') ?? 'parse'\n if (operation === 'stringify') {\n const space = optionalNumber(args.space, 'space')\n try {\n return JSON.stringify(args.value, null, space)\n } catch (error) {\n throw new ToolInputError(`cannot stringify value: ${message(error)}`)\n }\n }\n if (operation === 'get') {\n return jsonGet(args.value, stringField(args.path, 'path'))\n }\n if (operation !== 'parse') {\n throw new ToolInputError(`unknown json operation: ${operation}`)\n }\n const text = stringField(args.value, 'value')\n try {\n return JSON.parse(text) as unknown\n } catch (error) {\n throw new ToolInputError(`invalid JSON: ${message(error)}`)\n }\n },\n {\n type: 'object',\n properties: {\n operation: {\n type: 'string',\n enum: ['parse', 'stringify', 'get'],\n description: 'operation to perform',\n },\n value: {\n description: 'input value for the operation',\n },\n path: {\n type: 'string',\n description: 'path to get, e.g. \"a.b[0]\"',\n },\n space: {\n type: 'number',\n description: 'indentation for stringify',\n },\n },\n required: ['operation'],\n },\n )\n}\n\nfunction jsonGet(value: unknown, path: string): unknown {\n const segments = parseJsonPath(path)\n let current: unknown = value\n for (const segment of segments) {\n if (current == null || (typeof current !== 'object' && typeof current !== 'string')) {\n throw new ToolInputError(`json path not found: ${path}`)\n }\n if (Array.isArray(current)) {\n current = current[Number(segment)]\n } else if (typeof current === 'string') {\n current = Number.isInteger(Number(segment)) ? current[Number(segment)] : undefined\n } else {\n current = (current as Record<string, unknown>)[segment]\n }\n if (current === undefined) throw new ToolInputError(`json path not found: ${path}`)\n }\n return current\n}\n\nfunction parseJsonPath(path: string): string[] {\n let text = path.trim()\n if (!text) throw new ToolInputError('json path must be a non-empty string')\n if (text.startsWith('$')) text = text.slice(1)\n if (text.startsWith('.')) text = text.slice(1)\n\n const segments: string[] = []\n let index = 0\n while (index < text.length) {\n const char = text[index]!\n if (char === '.') {\n index += 1\n continue\n }\n if (char === '[') {\n const close = text.indexOf(']', index + 1)\n if (close < 0) throw new ToolInputError(`invalid json path: ${path}`)\n const inner = text.slice(index + 1, close).trim()\n if (!inner) throw new ToolInputError(`invalid json path: ${path}`)\n segments.push(stripQuotes(inner))\n index = close + 1\n continue\n }\n const dot = text.indexOf('.', index)\n const bracket = text.indexOf('[', index)\n const end = Math.min(\n text.length,\n ...(dot >= 0 ? [dot] : []),\n ...(bracket >= 0 ? [bracket] : []),\n )\n const segment = text.slice(index, end).trim()\n if (!segment) throw new ToolInputError(`invalid json path: ${path}`)\n segments.push(segment)\n index = end\n }\n return segments\n}\n\nfunction stripQuotes(value: string): string {\n if (value.length >= 2) {\n const first = value[0]\n const last = value[value.length - 1]\n if ((first === '\"' && last === '\"') || (first === \"'\" && last === \"'\")) {\n return value.slice(1, -1)\n }\n }\n return value\n}\n\nfunction readFileTool(config: NormalizedBuiltinToolsConfig): ToolDefinition {\n return definition(\n 'read_file',\n 'Read a UTF-8 text file inside the workspace. Returns { path, bytes, content }.',\n async (input) => {\n const args = record(input)\n const target = await resolveInside(config.cwd, stringField(args.path, 'path'))\n const stats = await stat(target)\n if (stats.isDirectory()) throw new ToolInputError(`not a file: ${args.path}`)\n const maxBytes = optionalNumber(args.maxBytes, 'maxBytes') ?? config.maxReadBytes\n if (stats.size > maxBytes) {\n throw new ToolInputError(`file exceeds ${maxBytes} bytes: ${args.path}`)\n }\n const buffer = await readFile(target)\n if (buffer.includes(0)) throw new ToolInputError(`file is binary: ${args.path}`)\n return {\n path: displayPath(config.cwd, target),\n bytes: buffer.byteLength,\n content: buffer.toString('utf8'),\n }\n },\n {\n type: 'object',\n properties: {\n path: { type: 'string', description: 'file path relative to the workspace' },\n maxBytes: { type: 'number', description: 'optional byte limit' },\n },\n required: ['path'],\n },\n )\n}\n\nfunction writeFileTool(config: NormalizedBuiltinToolsConfig): ToolDefinition {\n return definition(\n 'write_file',\n 'Write UTF-8 text to a file inside the workspace, creating parent directories as needed. Returns { path, bytes, appended }.',\n async (input) => {\n const args = record(input)\n const target = await resolveInside(config.cwd, stringField(args.path, 'path'))\n const content = stringField(args.content, 'content')\n const append = optionalBoolean(args.append, 'append') ?? false\n const bytes = Buffer.byteLength(content, 'utf8')\n if (bytes > config.maxWriteBytes) {\n throw new ToolInputError(`content exceeds ${config.maxWriteBytes} bytes`)\n }\n await mkdir(dirname(target), { recursive: true })\n if (append) {\n await appendFile(target, content, 'utf8')\n } else {\n await writeFile(target, content, 'utf8')\n }\n return {\n path: displayPath(config.cwd, target),\n bytes,\n appended: append,\n }\n },\n {\n type: 'object',\n properties: {\n path: { type: 'string', description: 'file path relative to the workspace' },\n content: { type: 'string', description: 'text content to write' },\n append: { type: 'boolean', description: 'append instead of overwrite' },\n },\n required: ['path', 'content'],\n },\n )\n}\n\ninterface DirectoryEntry {\n name: string\n path: string\n type: 'file' | 'directory'\n}\n\nfunction toEntry(cwd: string, dir: string, entry: { name: string; isDirectory(): boolean }): DirectoryEntry {\n return {\n name: entry.name,\n path: displayPath(cwd, join(dir, entry.name)),\n type: entry.isDirectory() ? 'directory' : 'file',\n }\n}\n\nasync function collectEntries(\n cwd: string,\n root: string,\n dir: string,\n max: number,\n): Promise<DirectoryEntry[]> {\n const entries: DirectoryEntry[] = []\n const children = await readdir(dir, { withFileTypes: true })\n for (const entry of children) {\n if (entries.length >= max) break\n entries.push(toEntry(cwd, dir, entry))\n if (entry.isDirectory()) {\n entries.push(...await collectEntries(cwd, root, join(dir, entry.name), max))\n }\n }\n return entries\n}\n\nfunction listDirTool(config: NormalizedBuiltinToolsConfig): ToolDefinition {\n return definition(\n 'list_dir',\n 'List directory entries inside the workspace. Returns [{ name, path, type }].',\n async (input) => {\n const args = record(input)\n const base = await resolveInside(config.cwd, optionalString(args.path, 'path') ?? '.')\n const stats = await stat(base)\n if (!stats.isDirectory()) throw new ToolInputError(`not a directory: ${args.path ?? '.'}`)\n const recursive = optionalBoolean(args.recursive, 'recursive') ?? false\n const entries = recursive\n ? await collectEntries(config.cwd, base, base, config.maxResults)\n : (await readdir(base, { withFileTypes: true }))\n .map(entry => toEntry(config.cwd, base, entry))\n return entries.slice(0, config.maxResults)\n },\n {\n type: 'object',\n properties: {\n path: { type: 'string', description: 'directory path relative to the workspace' },\n recursive: { type: 'boolean', description: 'include nested entries' },\n },\n },\n )\n}\n\nfunction normalizeGlobPattern(pattern: string): string {\n return pattern.replaceAll('\\\\', '/').replace(/^\\.\\//, '')\n}\n\nfunction globToRegExp(pattern: string): RegExp {\n let source = ''\n let index = 0\n while (index < pattern.length) {\n const char = pattern[index]!\n if (char === '*') {\n if (pattern[index + 1] === '*') {\n source += '.*'\n index += 2\n if (pattern[index] === '/') {\n source += '/?'\n index += 1\n }\n } else {\n source += '[^/]*'\n index += 1\n }\n } else if (char === '?') {\n source += '[^/]'\n index += 1\n } else {\n source += char.replace(/[\\\\^$+?.()|{}[\\]]/g, '\\\\$&')\n index += 1\n }\n }\n return new RegExp(`^${source}$`)\n}\n\nasync function walkFiles(\n cwd: string,\n root: string,\n dir: string,\n regex: RegExp,\n matches: string[],\n max: number,\n): Promise<void> {\n if (matches.length >= max) return\n const children = await readdir(dir, { withFileTypes: true })\n for (const entry of children) {\n if (matches.length >= max) return\n const target = join(dir, entry.name)\n if (entry.isDirectory()) {\n await walkFiles(cwd, root, target, regex, matches, max)\n } else if (entry.isFile()) {\n const rel = relative(root, target).split(sep).join('/')\n if (regex.test(rel)) matches.push(displayPath(cwd, target))\n }\n }\n}\n\nfunction globTool(config: NormalizedBuiltinToolsConfig): ToolDefinition {\n return definition(\n 'glob',\n 'Find files by glob pattern inside the workspace. Supports ** (any depth), * (within a segment) and ? (single character). Returns relative paths.',\n async (input) => {\n const args = record(input)\n const pattern = normalizeGlobPattern(stringField(args.pattern, 'pattern'))\n const root = await resolveInside(config.cwd, optionalString(args.base, 'base') ?? '.')\n const regex = globToRegExp(pattern)\n const matches: string[] = []\n await walkFiles(config.cwd, root, root, regex, matches, config.maxResults)\n return matches.slice(0, config.maxResults)\n },\n {\n type: 'object',\n properties: {\n pattern: { type: 'string', description: 'glob pattern, e.g. \"**/*.ts\"' },\n base: { type: 'string', description: 'directory to search, defaults to workspace root' },\n },\n required: ['pattern'],\n },\n )\n}\n\ninterface GrepMatch {\n file: string\n line: number\n text: string\n}\n\nasync function grepWalk(\n config: NormalizedBuiltinToolsConfig,\n root: string,\n dir: string,\n regex: RegExp,\n globRegex: RegExp | undefined,\n matches: GrepMatch[],\n max: number,\n): Promise<void> {\n if (matches.length >= max) return\n const children = await readdir(dir, { withFileTypes: true })\n for (const entry of children) {\n if (matches.length >= max) return\n const target = join(dir, entry.name)\n if (entry.isDirectory()) {\n await grepWalk(config, root, target, regex, globRegex, matches, max)\n continue\n }\n if (!entry.isFile()) continue\n const rel = relative(root, target).split(sep).join('/')\n if (globRegex && !globRegex.test(rel)) continue\n const stats = await stat(target)\n if (stats.size > config.maxSearchBytes) continue\n const buffer = await readFile(target)\n if (buffer.includes(0)) continue\n const lines = buffer.toString('utf8').split('\\n')\n for (let index = 0; index < lines.length; index += 1) {\n if (matches.length >= max) return\n const line = lines[index]!\n if (regex.test(line)) {\n matches.push({\n file: displayPath(config.cwd, target),\n line: index + 1,\n text: line,\n })\n }\n }\n }\n}\n\nfunction grepTool(config: NormalizedBuiltinToolsConfig): ToolDefinition {\n return definition(\n 'grep',\n 'Search text files for a regular expression. Returns [{ file, line, text }].',\n async (input) => {\n const args = record(input)\n const pattern = stringField(args.pattern, 'pattern')\n let regex: RegExp\n try {\n regex = new RegExp(pattern)\n } catch (error) {\n throw new ToolInputError(`invalid regular expression: ${message(error)}`)\n }\n const root = await resolveInside(config.cwd, optionalString(args.path, 'path') ?? '.')\n const globPattern = optionalString(args.glob, 'glob')\n const globRegex = globPattern ? globToRegExp(normalizeGlobPattern(globPattern)) : undefined\n const max = optionalNumber(args.maxResults, 'maxResults') ?? config.maxResults\n const matches: GrepMatch[] = []\n await grepWalk(config, root, root, regex, globRegex, matches, max)\n return matches\n },\n {\n type: 'object',\n properties: {\n pattern: { type: 'string', description: 'regular expression to search for' },\n path: { type: 'string', description: 'directory to search, defaults to workspace root' },\n glob: { type: 'string', description: 'optional file glob filter, e.g. \"**/*.md\"' },\n maxResults: { type: 'number', description: 'optional result limit' },\n },\n required: ['pattern'],\n },\n )\n}\n\nfunction httpGetTool(config: NormalizedBuiltinToolsConfig): ToolDefinition {\n return definition(\n 'http_get',\n 'Fetch a URL over HTTP(S) and return { status, ok, headers, body, truncated }.',\n async (input, options: ToolExecuteOptions) => {\n const args = record(input)\n const rawUrl = stringField(args.url, 'url')\n let url: URL\n try {\n url = new URL(rawUrl)\n } catch {\n throw new ToolInputError(`invalid URL: ${rawUrl}`)\n }\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new ToolInputError(`unsupported protocol: ${url.protocol}`)\n }\n const headers = optionalRecord(args.headers, 'headers') ?? {}\n const maxBytes = optionalNumber(args.maxBytes, 'maxBytes') ?? config.maxReadBytes\n const init: RequestInit = { headers }\n if (options.signal) init.signal = options.signal\n const response = await fetch(url, init)\n const buffer = Buffer.from(await response.arrayBuffer())\n const truncated = buffer.byteLength > maxBytes\n const headerMap: Record<string, string> = {}\n response.headers.forEach((value, key) => {\n headerMap[key] = value\n })\n return {\n status: response.status,\n ok: response.ok,\n headers: headerMap,\n body: buffer.subarray(0, maxBytes).toString('utf8'),\n truncated,\n }\n },\n {\n type: 'object',\n properties: {\n url: { type: 'string', description: 'http or https URL' },\n headers: {\n type: 'object',\n description: 'optional request headers',\n },\n maxBytes: { type: 'number', description: 'optional response body byte limit' },\n },\n required: ['url'],\n },\n )\n}\n\nfunction shellTool(config: NormalizedBuiltinToolsConfig): ToolDefinition {\n return definition(\n 'shell',\n 'Run a shell command inside the workspace and return { exitCode, stdout, stderr }. Disabled by default; enable with allowShell.',\n async (input) => {\n const args = record(input)\n const command = stringField(args.command, 'command')\n const cwd = await resolveInside(config.cwd, optionalString(args.cwd, 'cwd') ?? '.')\n const timeoutMs = optionalNumber(args.timeoutMs, 'timeoutMs') ?? config.timeoutMs\n const result = await runShellCommand(command, cwd, timeoutMs, config.maxWriteBytes)\n return {\n exitCode: result.exitCode,\n stdout: result.stdout,\n stderr: result.stderr,\n }\n },\n {\n type: 'object',\n properties: {\n command: { type: 'string', description: 'shell command to run' },\n cwd: { type: 'string', description: 'working directory relative to the workspace' },\n timeoutMs: { type: 'number', description: 'optional timeout in milliseconds' },\n },\n required: ['command'],\n },\n )\n}\n\ninterface ShellResult {\n exitCode: number\n stdout: string\n stderr: string\n}\n\nfunction runShellCommand(\n command: string,\n cwd: string,\n timeoutMs: number,\n maxBuffer: number,\n): Promise<ShellResult> {\n return new Promise((resolve) => {\n const child = spawn(command, {\n cwd,\n shell: true,\n timeout: timeoutMs,\n windowsHide: true,\n })\n let stdout = ''\n let stderr = ''\n const append = (target: string, chunk: Buffer, limit: number): string => {\n if (target.length >= limit) return target\n return target + chunk.toString('utf8').slice(0, limit - target.length)\n }\n child.stdout.on('data', (chunk: Buffer) => {\n stdout = append(stdout, chunk, maxBuffer)\n })\n child.stderr.on('data', (chunk: Buffer) => {\n stderr = append(stderr, chunk, maxBuffer)\n })\n child.on('error', (error) => {\n resolve({ exitCode: 1, stdout, stderr: message(error) })\n })\n child.on('close', (code, signal) => {\n resolve({\n exitCode: code ?? 1,\n stdout,\n stderr: signal ? `killed by ${signal}` : stderr,\n })\n })\n })\n}\n\nexport function createBuiltinToolDefinitions(\n config: BuiltinToolsConfig = {},\n): ToolDefinition[] {\n const normalized = normalizeConfig(config)\n const disabled = new Set(normalized.disabled)\n const definitions: ToolDefinition[] = []\n if (!disabled.has('echo')) definitions.push(echoTool())\n if (!disabled.has('now')) definitions.push(nowTool())\n if (!disabled.has('calculator')) definitions.push(calculatorTool())\n if (!disabled.has('json')) definitions.push(jsonTool())\n if (!disabled.has('read_file')) definitions.push(readFileTool(normalized))\n if (!disabled.has('write_file')) definitions.push(writeFileTool(normalized))\n if (!disabled.has('list_dir')) definitions.push(listDirTool(normalized))\n if (!disabled.has('glob')) definitions.push(globTool(normalized))\n if (!disabled.has('grep')) definitions.push(grepTool(normalized))\n if (normalized.allowNetwork && !disabled.has('http_get')) {\n definitions.push(httpGetTool(normalized))\n }\n if (normalized.allowShell && !disabled.has('shell')) {\n definitions.push(shellTool(normalized))\n }\n return definitions\n}\n\nexport const builtinTools = {\n name: 'builtinTools',\n inject: ['tools'],\n apply(ctx: Context, config: BuiltinToolsConfig = {}) {\n const service = ctx.get('tools') as ToolsService\n for (const definition of createBuiltinToolDefinitions(config)) {\n service.register(definition)\n }\n },\n}\n\nexport const DEFAULT_BUILTIN_TOOL_NAMES: readonly string[] = DEFAULT_TOOL_NAMES\n", "export class CalculatorError extends Error {\n override name = 'CalculatorError'\n}\n\ntype Token =\n | { type: 'number'; value: number }\n | { type: 'identifier'; value: string }\n | { type: 'operator'; value: string }\n | { type: 'left-paren' }\n | { type: 'right-paren' }\n | { type: 'comma' }\n\ninterface FunctionSpec {\n min: number\n max?: number\n apply(args: readonly number[]): number\n}\n\nconst CONSTANTS: Record<string, number> = {\n e: Math.E,\n pi: Math.PI,\n tau: Math.PI * 2,\n}\n\nconst FUNCTIONS: Record<string, FunctionSpec> = {\n abs: { min: 1, max: 1, apply: ([value]) => Math.abs(value!) },\n round: {\n min: 1,\n max: 2,\n apply: ([value, precision]) => precision === undefined\n ? Math.round(value!)\n : Number(value!.toFixed(precision)),\n },\n floor: { min: 1, max: 1, apply: ([value]) => Math.floor(value!) },\n ceil: { min: 1, max: 1, apply: ([value]) => Math.ceil(value!) },\n sqrt: { min: 1, max: 1, apply: ([value]) => Math.sqrt(value!) },\n pow: { min: 2, max: 2, apply: ([base, exponent]) => Math.pow(base!, exponent!) },\n min: { min: 1, apply: (args) => Math.min(...args) },\n max: { min: 1, apply: (args) => Math.max(...args) },\n log: { min: 1, max: 1, apply: ([value]) => Math.log10(value!) },\n ln: { min: 1, max: 1, apply: ([value]) => Math.log(value!) },\n}\n\nfunction fail(message: string): never {\n throw new CalculatorError(message)\n}\n\nfunction tokenize(source: string): Token[] {\n const tokens: Token[] = []\n let index = 0\n while (index < source.length) {\n const char = source[index]!\n if (/\\s/.test(char)) {\n index += 1\n continue\n }\n if (/[0-9.]/.test(char)) {\n const start = index\n while (index < source.length && /[0-9.]/.test(source[index]!)) {\n index += 1\n }\n let text = source.slice(start, index)\n if (index < source.length && /[eE]/.test(source[index]!)) {\n const exponentStart = index\n index += 1\n if (index < source.length && /[+-]/.test(source[index]!)) {\n index += 1\n }\n const digitsStart = index\n while (index < source.length && /[0-9]/.test(source[index]!)) {\n index += 1\n }\n if (index === digitsStart) {\n index = exponentStart\n } else {\n text = source.slice(start, index)\n }\n }\n const value = Number(text)\n if (!Number.isFinite(value)) fail(`invalid number: ${text}`)\n tokens.push({ type: 'number', value })\n continue\n }\n if (/[A-Za-z_]/.test(char)) {\n const start = index\n while (index < source.length && /[A-Za-z0-9_]/.test(source[index]!)) {\n index += 1\n }\n tokens.push({ type: 'identifier', value: source.slice(start, index) })\n continue\n }\n if ('+-*/%^'.includes(char)) {\n tokens.push({ type: 'operator', value: char })\n index += 1\n continue\n }\n if (char === '(') {\n tokens.push({ type: 'left-paren' })\n index += 1\n continue\n }\n if (char === ')') {\n tokens.push({ type: 'right-paren' })\n index += 1\n continue\n }\n if (char === ',') {\n tokens.push({ type: 'comma' })\n index += 1\n continue\n }\n fail(`unexpected character: ${char}`)\n }\n return tokens\n}\n\nclass Parser {\n private position = 0\n\n constructor(private readonly tokens: Token[]) {}\n\n parse(): number {\n if (!this.tokens.length) fail('empty expression')\n const value = this.expression()\n if (!this.atEnd()) fail(`unexpected token: ${this.peek()!.type}`)\n return value\n }\n\n private expression(): number {\n let value = this.term()\n while (this.matchOperator('+', '-')) {\n const operator = this.operatorValue(this.previous())\n const right = this.term()\n value = operator === '+' ? value + right : value - right\n }\n return value\n }\n\n private term(): number {\n let value = this.factor()\n while (this.matchOperator('*', '/', '%')) {\n const operator = this.operatorValue(this.previous())\n const right = this.factor()\n if (operator === '*') {\n value *= right\n } else if (operator === '/') {\n if (right === 0) fail('division by zero')\n value /= right\n } else {\n if (right === 0) fail('modulo by zero')\n value %= right\n }\n }\n return value\n }\n\n private factor(): number {\n return this.unary()\n }\n\n private unary(): number {\n if (this.matchOperator('+', '-')) {\n const operator = this.operatorValue(this.previous())\n const value = this.unary()\n return operator === '-' ? -value : value\n }\n return this.power()\n }\n\n private power(): number {\n const base = this.primary()\n if (this.matchOperator('^')) {\n return Math.pow(base, this.unary())\n }\n return base\n }\n\n private primary(): number {\n const token = this.advance()\n switch (token.type) {\n case 'number':\n return token.value\n case 'identifier':\n return this.callOrConstant(token.value)\n case 'left-paren': {\n const value = this.expression()\n if (!this.matchType('right-paren')) fail('missing closing parenthesis')\n return value\n }\n default:\n fail(`unexpected token: ${token.type}`)\n }\n }\n\n private callOrConstant(name: string): number {\n if (this.matchType('left-paren')) return this.call(name)\n const constant = CONSTANTS[name]\n if (constant === undefined) fail(`unknown identifier: ${name}`)\n return constant\n }\n\n private call(name: string): number {\n const args: number[] = []\n if (!this.matchType('right-paren')) {\n do {\n args.push(this.expression())\n } while (this.matchType('comma'))\n if (!this.matchType('right-paren')) {\n fail('missing closing parenthesis after arguments')\n }\n }\n const spec = FUNCTIONS[name]\n if (!spec) fail(`unknown function: ${name}`)\n if (args.length < spec.min || (spec.max !== undefined && args.length > spec.max)) {\n fail(`${name} expects ${spec.min}${spec.max === undefined ? ' or more' : ` to ${spec.max}`} arguments`)\n }\n return spec.apply(args)\n }\n\n private advance(): Token {\n if (this.atEnd()) fail('unexpected end of expression')\n const token = this.tokens[this.position]!\n this.position += 1\n return token\n }\n\n private peek(): Token | undefined {\n return this.tokens[this.position]\n }\n\n private previous(): Token {\n return this.tokens[this.position - 1]!\n }\n\n private operatorValue(token: Token): string {\n if (token.type !== 'operator') fail(`unexpected token: ${token.type}`)\n return token.value\n }\n\n private atEnd(): boolean {\n return this.position >= this.tokens.length\n }\n\n private matchOperator(...values: string[]): boolean {\n const token = this.peek()\n if (token?.type === 'operator' && values.includes(token.value)) {\n this.position += 1\n return true\n }\n return false\n }\n\n private matchType(type: Token['type']): boolean {\n if (this.peek()?.type === type) {\n this.position += 1\n return true\n }\n return false\n }\n}\n\nexport function evaluateExpression(source: string): number {\n const value = new Parser(tokenize(source)).parse()\n if (!Number.isFinite(value)) fail(`result is not a finite number: ${value}`)\n return value\n}\n", "import { realpath } from 'node:fs/promises'\nimport { dirname, isAbsolute, relative, resolve, sep } from 'node:path'\n\nexport class PathSandboxError extends Error {\n override name = 'PathSandboxError'\n}\n\nfunction inside(root: string, target: string): boolean {\n const rel = relative(root, target)\n return rel === ''\n || (rel !== '..' && !rel.startsWith(`..${sep}`) && !isAbsolute(rel))\n}\n\nfunction isMissing(error: unknown): boolean {\n const code = (error as NodeJS.ErrnoException | null)?.code\n return code === 'ENOENT' || code === 'ENOTDIR'\n}\n\nexport async function resolveInside(cwd: string, input: string): Promise<string> {\n if (typeof input !== 'string' || !input.trim()) {\n throw new PathSandboxError('path must be a non-empty string')\n }\n let root: string\n try {\n root = await realpath(cwd)\n } catch {\n throw new PathSandboxError(`workspace directory is not accessible: ${cwd}`)\n }\n const target = resolve(cwd, input)\n if (!inside(root, target)) {\n throw new PathSandboxError(`path escapes the workspace: ${input}`)\n }\n\n // Follow the deepest existing ancestor so a symlinked parent cannot escape.\n let current = target\n for (;;) {\n try {\n const real = await realpath(current)\n if (!inside(root, real)) {\n throw new PathSandboxError(`path escapes the workspace through a symlink: ${input}`)\n }\n return target\n } catch (error) {\n if (!isMissing(error)) throw error\n const parent = dirname(current)\n if (parent === current) {\n throw new PathSandboxError(`path escapes the workspace: ${input}`)\n }\n current = parent\n }\n }\n}\n", "import type { Context, Disposable } from '@tnega/core'\nimport { Service } from '@tnega/core'\n\nexport * from './builtins.js'\nexport * from './calc.js'\nexport * from './path.js'\n\nexport interface ToolParameterSchema {\n type?: string\n properties?: Record<string, unknown>\n required?: string[]\n [key: string]: unknown\n}\n\nexport interface ToolSchema {\n name: string\n description: string\n parameters?: ToolParameterSchema\n}\n\nexport interface ToolExecuteOptions {\n callId?: string\n signal?: AbortSignal\n [key: string]: unknown\n}\n\nexport type ToolExecutor = (\n input: unknown,\n options: ToolExecuteOptions,\n) => unknown | Promise<unknown>\n\nexport interface ToolDefinition {\n schema: ToolSchema\n execute: ToolExecutor\n metadata?: Record<string, unknown>\n}\n\nexport interface ToolError {\n name: string\n message: string\n stack?: string\n}\n\nexport interface ToolResult {\n ok: boolean\n name: string\n callId?: string\n input: unknown\n output?: unknown\n error?: ToolError\n startedAt: number\n durationMs: number\n}\n\nexport interface ToolRequest {\n tool: ToolDefinition\n name: string\n input: unknown\n options: ToolExecuteOptions\n startedAt: number\n}\n\nexport interface ToolStagePayload {\n request: ToolRequest\n result: ToolResult\n}\n\nexport interface ToolsConfig {\n [key: string]: unknown\n}\n\nexport class ToolNotFoundError extends Error {\n override name = 'ToolNotFoundError'\n\n constructor(readonly toolName: string) {\n super(`tool not found: ${toolName}`)\n }\n}\n\nexport class ToolAlreadyRegisteredError extends Error {\n override name = 'ToolAlreadyRegisteredError'\n\n constructor(readonly toolName: string) {\n super(`tool already registered: ${toolName}`)\n }\n}\n\nfunction toToolError(error: unknown): ToolError {\n if (error instanceof Error) {\n const result: ToolError = {\n name: error.name,\n message: error.message,\n }\n if (error.stack) result.stack = error.stack\n return result\n }\n return {\n name: 'ToolExecutionError',\n message: String(error),\n }\n}\n\nexport class ToolsService extends Service<never> {\n static provide = 'tools'\n\n private _tools = new Map<string, ToolDefinition>()\n\n constructor(ctx: Context) {\n super(ctx, 'tools')\n }\n\n register(definition: ToolDefinition): Disposable {\n this._validate(definition)\n const name = definition.schema.name\n return this.ctx.fiber.effect(() => {\n if (this._tools.has(name)) {\n throw new ToolAlreadyRegisteredError(name)\n }\n this._tools.set(name, definition)\n return () => {\n this._tools.delete(name)\n }\n }, `ctx.tools.register(${JSON.stringify(name)})`)\n }\n\n unregister(name: string): boolean {\n return this._tools.delete(name)\n }\n\n has(name: string): boolean {\n return this._tools.has(name)\n }\n\n list(): readonly ToolDefinition[] {\n return [...this._tools.values()]\n }\n\n toSpecs(): readonly ToolSchema[] {\n return this.list().map(tool => tool.schema)\n }\n\n async execute(\n name: string,\n input: unknown,\n options: ToolExecuteOptions = {},\n ): Promise<ToolResult> {\n const tool = this._tools.get(name)\n if (!tool) throw new ToolNotFoundError(name)\n\n const request: ToolRequest = {\n tool,\n name,\n input,\n options,\n startedAt: Date.now(),\n }\n\n await this.ctx.parallel('tools/pre-execute', request)\n\n let output: unknown\n let caught: unknown\n try {\n await this.ctx.parallel('tools/execute', request)\n output = await tool.execute(request.input, request.options)\n } catch (error) {\n caught = error\n }\n\n const result = caught === undefined\n ? this._success(request, output)\n : this._failure(request, caught)\n\n await this.ctx.parallel('tools/post-execute', { request, result })\n await this.ctx.parallel('tools/result', { request, result })\n return result\n }\n\n private _validate(definition: ToolDefinition): void {\n if (!definition || typeof definition.schema?.name !== 'string' || !definition.schema.name) {\n throw new TypeError('tool definition requires a non-empty schema.name')\n }\n if (typeof definition.execute !== 'function') {\n throw new TypeError(`tool \"${definition.schema.name}\" requires an execute function`)\n }\n }\n\n private _success(request: ToolRequest, output: unknown): ToolResult {\n const result: ToolResult = {\n ok: true,\n name: request.name,\n input: request.input,\n output,\n startedAt: request.startedAt,\n durationMs: Date.now() - request.startedAt,\n }\n if (request.options.callId) result.callId = request.options.callId\n return result\n }\n\n private _failure(request: ToolRequest, error: unknown): ToolResult {\n const result: ToolResult = {\n ok: false,\n name: request.name,\n input: request.input,\n error: toToolError(error),\n startedAt: request.startedAt,\n durationMs: Date.now() - request.startedAt,\n }\n if (request.options.callId) result.callId = request.options.callId\n return result\n }\n}\n\nexport const tools = {\n name: 'tools',\n apply(ctx: Context) {\n new ToolsService(ctx)\n },\n}\n\nexport const name = '@tnega/tools'\n", "import {\n type EvalStrategy,\n type EvalStrategyDefinition,\n type Evidence,\n type Task,\n type Verdict,\n} from './types.js'\n\nexport interface AssertStrategyOptions {\n /** Compare exact output when no task assertion is present. */\n expect?: string | string[]\n /** Treat a failing task as error instead of fail. */\n strictFiles?: boolean\n}\n\nexport interface JudgeStrategyOptions {\n judge?: (task: Task, evidence: Evidence) => number | Promise<number>\n /** Threshold above which the verdict passes (default 0.5). */\n passThreshold?: number\n}\n\nexport interface RegressionStrategyOptions {\n maxDegradation?: number\n requireBaseline?: boolean\n}\n\nexport interface AllStrategyOptions {\n strategies?: string[]\n}\n\nexport interface WeightedStrategyOptions {\n strategies?: Array<{ name: string; weight: number }>\n passThreshold?: number\n}\n\nexport interface GateStrategyOptions {\n required?: string[]\n thresholds?: Record<string, number>\n minScore?: number\n}\n\nfunction errorVerdict(taskId: string, strategy: string, message: string): Verdict {\n return {\n taskId,\n strategy,\n status: 'error',\n score: 0,\n reason: message,\n }\n}\n\nfunction cloneVerdict(verdict: Verdict): Verdict {\n return {\n ...verdict,\n ...(verdict.output !== undefined ? { output: structuredClone(verdict.output) } : {}),\n ...(verdict.meta !== undefined ? { meta: structuredClone(verdict.meta) } : {}),\n }\n}\n\nfunction stringifyOutput(output: unknown): string {\n if (typeof output === 'string') return output\n try {\n return JSON.stringify(output) ?? String(output)\n } catch {\n return String(output)\n }\n}\n\nexport function assertStrategy(options: AssertStrategyOptions = {}): EvalStrategy {\n return {\n name: 'assert',\n async evaluate(_ctx, task, evidence) {\n const assertion: Task['assertion'] = {\n ...(task.assertion ?? {}),\n ...(options.expect !== undefined ? { expect: options.expect } : {}),\n }\n const output = stringifyOutput(evidence.agentResult?.output ?? evidence.artifacts.output ?? '')\n\n if (assertion.check) {\n const ok = await assertion.check(evidence, task)\n return {\n taskId: task.id,\n strategy: 'assert',\n status: ok ? 'pass' : 'fail',\n score: ok ? 1 : 0,\n reason: ok ? 'predicate passed' : 'predicate failed',\n output,\n }\n }\n\n if (assertion.expect !== undefined) {\n const expected = Array.isArray(assertion.expect) ? assertion.expect : [assertion.expect]\n const missing = expected.filter(item => !output.includes(item))\n const ok = missing.length === 0\n return {\n taskId: task.id,\n strategy: 'assert',\n status: ok ? 'pass' : 'fail',\n score: ok ? 1 : 0,\n reason: ok ? 'output matched' : `missing: ${missing.join(', ')}`,\n output,\n }\n }\n\n if (assertion.files) {\n const ok = typeof assertion.files === 'function'\n ? await assertion.files(evidence)\n : assertion.files.every(file => evidence.artifacts[file] !== undefined)\n return {\n taskId: task.id,\n strategy: 'assert',\n status: ok ? 'pass' : 'fail',\n score: ok ? 1 : 0,\n reason: ok ? 'files present' : 'files missing',\n output,\n }\n }\n\n return {\n taskId: task.id,\n strategy: 'assert',\n status: output ? 'pass' : 'fail',\n score: output ? 1 : 0,\n reason: output ? 'non-empty output' : 'empty output',\n output,\n }\n },\n }\n}\n\nconst judgeScores = new Map<string, number>()\n\nexport function recordJudgeOutput(key: string, score: number): void {\n judgeScores.set(key, score)\n}\n\nexport function recordedJudgeOutput(key: string): number | undefined {\n return judgeScores.get(key)\n}\n\nexport function judgeStrategy(options: JudgeStrategyOptions = {}): EvalStrategy {\n return {\n name: 'llm-judge',\n async evaluate(ctx, task, evidence) {\n const replayKey = [\n ctx.run.candidate.name,\n ctx.run.candidate.version ?? '',\n task.id,\n 'llm-judge',\n String(evidence.artifacts.modelConfigHash ?? ''),\n ].join(':')\n const recorded = recordedJudgeOutput(replayKey)\n if (recorded !== undefined) {\n const threshold = options.passThreshold ?? 0.5\n return {\n taskId: task.id,\n strategy: 'llm-judge',\n status: recorded >= threshold ? 'pass' : 'fail',\n score: recorded,\n reason: 'replayed recorded judge score',\n meta: { replayed: true, hash: evidence.artifacts.modelConfigHash ?? '' },\n }\n }\n\n if (options.judge) {\n const score = Math.max(0, Math.min(1, Number(await options.judge(task, evidence)) || 0))\n const threshold = options.passThreshold ?? 0.5\n recordJudgeOutput(replayKey, score)\n return {\n taskId: task.id,\n strategy: 'llm-judge',\n status: score >= threshold ? 'pass' : 'fail',\n score,\n reason: `judge scored ${score.toFixed(3)}`,\n meta: { replayed: false },\n }\n }\n\n return errorVerdict(\n task.id,\n 'llm-judge',\n 'no judge function and no recorded score available',\n )\n },\n }\n}\n\nexport function regressionStrategy(options: RegressionStrategyOptions = {}): EvalStrategy {\n return {\n name: 'regression',\n async evaluate(ctx, task, evidence) {\n if (!ctx.baseline) {\n if (options.requireBaseline) {\n return errorVerdict(task.id, 'regression', 'baseline run required')\n }\n return {\n taskId: task.id,\n strategy: 'regression',\n status: 'skip',\n score: 0,\n reason: 'no baseline',\n meta: { skipped: true },\n }\n }\n\n const base = ctx.baseline.verdicts.find(verdict => verdict.taskId === task.id)\n const headScore = verdictScore(ctx, task, evidence)\n if (!base) {\n return {\n taskId: task.id,\n strategy: 'regression',\n status: 'skip',\n score: headScore,\n reason: 'task absent from baseline',\n meta: { skipped: true, headScore },\n }\n }\n\n const delta = headScore - base.score\n const degradation = Math.max(0, base.score - headScore)\n const limit = options.maxDegradation ?? 0\n const ok = degradation <= limit\n return {\n taskId: task.id,\n strategy: 'regression',\n status: ok ? 'pass' : 'fail',\n score: headScore,\n reason: ok\n ? `head ${headScore.toFixed(3)} vs base ${base.score.toFixed(3)}`\n : `degraded by ${degradation.toFixed(3)}, limit ${limit.toFixed(3)}`,\n meta: {\n baseScore: base.score,\n headScore,\n delta,\n degradation,\n limit,\n },\n }\n },\n }\n}\n\nfunction verdictScore(ctx: import('./types.js').StrategyContext, task: Task, evidence: Evidence): number {\n const recorded = evidence.strategyOutputs['score']\n if (typeof recorded === 'number') return recorded\n const output = stringifyOutput(evidence.agentResult?.output ?? evidence.artifacts.output ?? '')\n if (task.assertion?.expect !== undefined) {\n const expected = Array.isArray(task.assertion.expect)\n ? task.assertion.expect\n : [task.assertion.expect]\n return expected.every(item => output.includes(item)) ? 1 : 0\n }\n if (output) return 1\n return ctx.baseline?.verdicts.find(verdict => verdict.taskId === task.id)?.score ?? 0\n}\n\nexport function allStrategy(options: AllStrategyOptions = {}): EvalStrategy {\n return {\n name: 'all',\n async evaluate(ctx, task, evidence) {\n const names = options.strategies ?? ctx.ctx.get('evalStrategies') ?? []\n const strategies = (Array.isArray(names) ? names : []) as string[]\n const verdicts: Verdict[] = []\n for (const name of strategies) {\n const strategy = (ctx.ctx.get('eval') as { getStrategy(name: string): EvalStrategy | undefined })\n .getStrategy(name)\n if (!strategy) {\n verdicts.push(errorVerdict(task.id, 'all', `strategy not found: ${name}`))\n continue\n }\n verdicts.push(await strategy.evaluate(ctx, task, evidence))\n }\n const passed = verdicts.every(verdict => verdict.status === 'pass')\n return {\n taskId: task.id,\n strategy: 'all',\n status: passed ? 'pass' : 'fail',\n score: passed ? 1 : 0,\n reason: passed ? 'all sub-strategies passed' : 'one or more sub-strategies failed',\n meta: { verdicts: verdicts.map(cloneVerdict) },\n }\n },\n }\n}\n\nexport function weightedStrategy(options: WeightedStrategyOptions = {}): EvalStrategy {\n return {\n name: 'weighted',\n async evaluate(ctx, task, evidence) {\n const items = options.strategies ?? []\n if (!items.length) {\n return errorVerdict(task.id, 'weighted', 'no weighted strategies configured')\n }\n const service = ctx.ctx.get('eval') as { getStrategy(name: string): EvalStrategy | undefined }\n let total = 0\n let weightSum = 0\n for (const item of items) {\n const strategy = service.getStrategy(item.name)\n if (!strategy) {\n return errorVerdict(task.id, 'weighted', `strategy not found: ${item.name}`)\n }\n const verdict = await strategy.evaluate(ctx, task, evidence)\n total += verdict.score * item.weight\n weightSum += item.weight\n }\n const score = weightSum ? total / weightSum : 0\n const threshold = options.passThreshold ?? 0.5\n return {\n taskId: task.id,\n strategy: 'weighted',\n status: score >= threshold ? 'pass' : 'fail',\n score,\n reason: `weighted score ${score.toFixed(3)}, threshold ${threshold.toFixed(3)}`,\n }\n },\n }\n}\n\nexport function gateStrategy(options: GateStrategyOptions = {}): EvalStrategy {\n return {\n name: 'gate',\n async evaluate(ctx, task, evidence) {\n const service = ctx.ctx.get('eval') as { getStrategy(name: string): EvalStrategy | undefined }\n const required = options.required ?? []\n const verdicts: Verdict[] = []\n for (const name of required) {\n const strategy = service.getStrategy(name)\n if (!strategy) {\n verdicts.push(errorVerdict(task.id, 'gate', `required strategy not found: ${name}`))\n continue\n }\n verdicts.push(await strategy.evaluate(ctx, task, evidence))\n }\n const failed = verdicts.filter(verdict => verdict.status !== 'pass')\n const score = verdicts.length\n ? verdicts.reduce((sum, verdict) => sum + verdict.score, 0) / verdicts.length\n : 0\n const underThreshold = verdicts.some(verdict => {\n const threshold = options.thresholds?.[verdict.strategy]\n return threshold !== undefined && verdict.score < threshold\n })\n const minScoreOk = options.minScore === undefined || score >= options.minScore\n const ok = failed.length === 0 && !underThreshold && minScoreOk\n return {\n taskId: task.id,\n strategy: 'gate',\n status: ok ? 'pass' : 'fail',\n score,\n reason: ok\n ? 'gate passed'\n : failed.length\n ? `required verdicts failed: ${failed.map(v => v.strategy).join(', ')}`\n : 'gate threshold not met',\n meta: { verdicts: verdicts.map(cloneVerdict), score },\n }\n },\n }\n}\n\nexport interface StrategyRegistry {\n register(definition: EvalStrategyDefinition): () => void\n unregister(name: string): boolean\n get(name: string): EvalStrategy | undefined\n has(name: string): boolean\n names(): string[]\n}\n\nexport function createStrategyRegistry(initial: EvalStrategyDefinition[] = []): StrategyRegistry {\n const strategies = new Map<string, EvalStrategy>()\n for (const definition of initial) {\n const strategy: EvalStrategy = {\n name: definition.name,\n evaluate: definition.evaluate,\n }\n strategies.set(definition.name, strategy)\n }\n\n return {\n register(definition) {\n const strategy: EvalStrategy = {\n name: definition.name,\n evaluate: definition.evaluate,\n }\n if (strategies.has(definition.name)) {\n throw new Error(`strategy already registered: ${definition.name}`)\n }\n strategies.set(definition.name, strategy)\n return () => {\n if (strategies.get(definition.name) === strategy) {\n strategies.delete(definition.name)\n }\n }\n },\n unregister(name) {\n return strategies.delete(name)\n },\n get(name) {\n return strategies.get(name)\n },\n has(name) {\n return strategies.has(name)\n },\n names() {\n return [...strategies.keys()]\n },\n }\n}\n\nexport function defaultStrategyDefinitions(): EvalStrategyDefinition[] {\n return [\n assertStrategy(),\n judgeStrategy(),\n regressionStrategy(),\n allStrategy(),\n weightedStrategy(),\n gateStrategy(),\n ]\n}\n", "import { randomUUID } from 'node:crypto'\nimport { mkdtemp } from 'node:fs/promises'\nimport { tmpdir } from 'node:os'\nimport { join } from 'node:path'\nimport type { Context } from '@tnega/core'\nimport type { AgentInput, AgentLoop, AgentRunResult } from '@tnega/agent'\nimport type { SessionLog } from '@tnega/session'\nimport { session } from '@tnega/session'\nimport { tools } from '@tnega/tools'\nimport {\n type BudgetUsage,\n type Evidence,\n type EvalRun,\n type EvalRunOptions,\n type RunBudget,\n type Task,\n type Verdict,\n} from './types.js'\nimport { clone, hashJson, loadJson, saveJson } from './utils.js'\nimport type { StrategyRegistry } from './strategies.js'\n\ninterface TaskRunState {\n task: Task\n scope: Context\n dispose(): Promise<void>\n}\n\nexport class EvalRunner {\n constructor(\n private ctx: Context,\n private strategies: StrategyRegistry,\n private defaultBudget: RunBudget = {},\n private outputDir = '.tnega/runs',\n ) {}\n\n async run(options: EvalRunOptions): Promise<EvalRun> {\n const id = randomUUID()\n const runScope = this.ctx\n .isolate('eval')\n .isolate('agentLoop')\n .isolate('session')\n .isolate('tools')\n const candidateFiber = runScope.plugin(options.candidate.plugin, options.candidate.config)\n try {\n await candidateFiber\n } catch (error) {\n this._abort(runScope, id, `candidate failed to load: ${this._message(error)}`)\n throw error\n }\n\n const candidate = {\n name: options.candidate.name,\n ...(options.candidate.version ? { version: options.candidate.version } : {}),\n ...(options.candidate.config ? { config: options.candidate.config } : {}),\n ...(options.candidate.model ? { model: options.candidate.model } : {}),\n }\n const modelConfigHash = options.candidate.model\n ? hashJson(options.candidate.model)\n : undefined\n const budget: RunBudget = {\n ...this.defaultBudget,\n ...(options.budget ?? {}),\n }\n const startedAt = Date.now()\n const usage: BudgetUsage = {\n turns: 0,\n tokens: 0,\n cost: 0,\n timeMs: 0,\n }\n const controller = new AbortController()\n let aborted = false\n let abortedReason: string | undefined\n const run: EvalRun = {\n id,\n createdAt: startedAt,\n candidate,\n taskIds: options.tasks.map(task => task.id),\n verdicts: [],\n summary: {\n total: options.tasks.length,\n passed: 0,\n failed: 0,\n skipped: 0,\n errors: 0,\n score: 0,\n budget: usage,\n },\n cacheHits: 0,\n aborted,\n ...(modelConfigHash ? { modelConfigHash } : {}),\n ...(options.baselineRunId ? { baselineRunId: options.baselineRunId } : {}),\n }\n\n const baseline = options.baselineRunId\n ? await this._loadRun(join(this.outputDir, `${options.baselineRunId}.json`))\n : undefined\n\n this.ctx.emit('eval/start', {\n runId: id,\n candidate,\n taskIds: run.taskIds,\n budget,\n })\n\n for (const task of options.tasks) {\n if (controller.signal.aborted || this._exceeded(budget, usage)) {\n aborted = true\n abortedReason = 'budget exceeded'\n this._abort(runScope, id, abortedReason)\n break\n }\n\n const taskStartedAt = Date.now()\n const cacheKey = options.cache\n ? this._cacheKey(task, options.candidate, modelConfigHash)\n : undefined\n const cachedEvidence = cacheKey ? await this._loadCachedEvidence(cacheKey) : undefined\n\n let evidence: Evidence\n let fromCache = false\n if (cachedEvidence) {\n evidence = cachedEvidence\n fromCache = true\n run.cacheHits += 1\n this.ctx.emit('eval/task-start', {\n runId: id,\n task,\n scope: runScope,\n })\n } else {\n const state = await this._createTaskScope(runScope, task)\n try {\n this.ctx.emit('eval/task-start', {\n runId: id,\n task,\n scope: state.scope,\n })\n this._armTimeout(task, controller)\n evidence = await this._runTask(\n state.scope,\n task,\n options,\n run,\n controller,\n usage,\n )\n } finally {\n await state.dispose()\n }\n usage.timeMs = Date.now() - startedAt\n if (cacheKey) {\n await this._saveCachedEvidence(cacheKey, evidence)\n }\n }\n\n const durationMs = Date.now() - taskStartedAt\n this.ctx.emit('eval/task-end', {\n runId: id,\n task,\n evidence,\n durationMs,\n fromCache,\n })\n\n const strategyNames = task.strategies?.length\n ? task.strategies\n : options.strategyNames?.length\n ? options.strategyNames\n : ['assert']\n for (const name of strategyNames) {\n const strategy = this.strategies.get(name)\n const verdict = strategy\n ? await strategy.evaluate(\n {\n ctx: this.ctx,\n run,\n ...(baseline ? { baseline } : {}),\n },\n task,\n evidence,\n )\n : {\n taskId: task.id,\n strategy: name,\n status: 'error' as const,\n score: 0,\n reason: `strategy not found: ${name}`,\n }\n run.verdicts.push(verdict)\n this.ctx.emit('eval/verdict', {\n runId: id,\n taskId: task.id,\n verdict,\n })\n }\n\n if (this._exceeded(budget, usage)) {\n aborted = true\n abortedReason = 'budget exceeded'\n this._abort(runScope, id, abortedReason)\n break\n }\n }\n\n const summary = this._summarize(run.verdicts, usage)\n run.summary = summary\n run.aborted = aborted\n if (abortedReason) run.abortedReason = abortedReason\n\n await candidateFiber.dispose()\n this.ctx.emit('eval/run-end', { run: clone(run) })\n if (options.outputFile) {\n await saveJson(options.outputFile, run)\n } else {\n await saveJson(join(this.outputDir, `${id}.json`), run)\n }\n return run\n }\n\n private async _createTaskScope(runScope: Context, task: Task): Promise<TaskRunState> {\n const scope = runScope.isolate(`task:${task.id}`)\n const sessionFile = await this._sessionFile(task.id)\n const sessionFiber = await scope.plugin(session, { file: sessionFile })\n const toolsFiber = await scope.plugin(tools)\n return {\n task,\n scope,\n dispose: async () => {\n await toolsFiber.dispose()\n await sessionFiber.dispose()\n },\n }\n }\n\n private _armTimeout(task: Task, controller: AbortController): void {\n if (task.budget?.maxTimeMs === undefined) return\n const timer = setTimeout(() => {\n controller.abort()\n }, task.budget.maxTimeMs)\n timer.unref()\n }\n\n private async _runTask(\n scope: Context,\n task: Task,\n options: EvalRunOptions,\n run: EvalRun,\n controller: AbortController,\n usage: BudgetUsage,\n ): Promise<Evidence> {\n const input: AgentInput = {\n ...(task.inputText !== undefined ? { text: task.inputText } : {}),\n ...(task.messages?.length ? { messages: clone(task.messages) } : {}),\n ...(task.input && typeof task.input === 'object'\n ? { context: clone(task.input) }\n : {}),\n }\n let agentResult: AgentRunResult | undefined\n let error: unknown\n const loop = options.runCandidate\n ? (agentInput: AgentInput) => options.runCandidate!(scope, {\n ...task,\n input: agentInput,\n })\n : this._loop(scope) ?? (this.ctx.root.get('agentLoop') as AgentLoop | undefined)\n if (!loop) {\n throw new Error('no agentLoop available; provide a candidate agentLoop or runCandidate')\n }\n\n try {\n agentResult = await loop(input)\n usage.turns += agentResult.steps.length\n usage.tokens += this._tokens(agentResult)\n usage.cost += this._cost(agentResult)\n usage.timeMs = Date.now() - run.createdAt\n if (controller.signal.aborted) {\n error = new Error('aborted: task time budget exceeded')\n agentResult = undefined\n this.ctx.emit('eval/abort', {\n runId: run.id,\n taskId: task.id,\n reason: 'task time budget exceeded',\n })\n }\n } catch (caught) {\n error = caught\n }\n\n const session = scope.get('session') as SessionLog | undefined\n const messages = session\n ? await session.deriveMessages()\n : agentResult?.messages\n ? clone([...agentResult.messages])\n : []\n const artifacts: Record<string, unknown> = {\n ...clone(task.artifacts ?? {}),\n ...(run.modelConfigHash ? { modelConfigHash: run.modelConfigHash } : {}),\n }\n if (error) {\n artifacts.error = this._errorPayload(error)\n }\n\n return {\n task,\n ...(agentResult ? { agentResult: clone(agentResult) } : {}),\n messages: clone(messages),\n artifacts,\n strategyOutputs: {},\n }\n }\n\n private _loop(scope: Context): AgentLoop | undefined {\n return scope.get('agentLoop') as AgentLoop | undefined\n }\n\n private _cacheKey(\n task: Task,\n candidate: { name: string; version?: string; config?: Record<string, unknown> },\n modelConfigHash: string | undefined,\n ): string {\n return hashJson({\n task: {\n id: task.id,\n input: task.input,\n inputText: task.inputText,\n messages: task.messages,\n },\n candidate: {\n name: candidate.name,\n version: candidate.version,\n config: candidate.config,\n },\n model: modelConfigHash,\n })\n }\n\n private async _sessionFile(taskId: string): Promise<string> {\n const dir = await mkdtemp(join(tmpdir(), `tnega-eval-${taskId}-`))\n return join(dir, 'session.jsonl')\n }\n\n private _tokens(result: AgentRunResult): number {\n let tokens = 0\n for (const message of result.messages) {\n tokens += Math.ceil(message.content.length / 4)\n }\n return tokens\n }\n\n private _cost(result: AgentRunResult): number {\n const meta = result.messages.at(-1)\n const record = meta as unknown as { cost?: unknown } | undefined\n if (record && typeof record.cost === 'number') {\n return record.cost\n }\n return 0\n }\n\n private _exceeded(budget: RunBudget, usage: BudgetUsage): boolean {\n if (budget.maxTimeMs !== undefined && usage.timeMs >= budget.maxTimeMs) return true\n if (budget.maxTurns !== undefined && usage.turns >= budget.maxTurns) return true\n if (budget.maxTokens !== undefined && usage.tokens >= budget.maxTokens) return true\n if (budget.maxCost !== undefined && usage.cost >= budget.maxCost) return true\n return false\n }\n\n private _summarize(verdicts: readonly Verdict[], usage: BudgetUsage) {\n let passed = 0\n let failed = 0\n let skipped = 0\n let errors = 0\n let scoreSum = 0\n for (const verdict of verdicts) {\n if (verdict.status === 'pass') passed += 1\n else if (verdict.status === 'fail') failed += 1\n else if (verdict.status === 'skip') skipped += 1\n else errors += 1\n scoreSum += verdict.score\n }\n return {\n total: verdicts.length,\n passed,\n failed,\n skipped,\n errors,\n score: verdicts.length ? scoreSum / verdicts.length : 0,\n budget: { ...usage },\n }\n }\n\n private _abort(scope: Context, runId: string, reason: string): void {\n this.ctx.emit('eval/abort', { runId, reason })\n void scope\n }\n\n private async _loadRun(file: string): Promise<EvalRun | undefined> {\n try {\n return await loadJson<EvalRun>(file)\n } catch {\n return undefined\n }\n }\n\n private async _loadCachedEvidence(cacheKey: string): Promise<Evidence | undefined> {\n try {\n return await loadJson<Evidence>(join(this.outputDir, `${cacheKey}.cache.json`))\n } catch {\n return undefined\n }\n }\n\n private async _saveCachedEvidence(cacheKey: string, evidence: Evidence): Promise<void> {\n await saveJson(join(this.outputDir, `${cacheKey}.cache.json`), evidence)\n }\n\n private _message(error: unknown): string {\n if (error instanceof Error) return error.message\n return String(error)\n }\n\n private _errorPayload(error: unknown): { message: string; stack?: string } {\n if (error instanceof Error) {\n return {\n message: error.message,\n ...(error.stack ? { stack: error.stack } : {}),\n }\n }\n return { message: String(error) }\n }\n}\n", "import { createHash } from 'node:crypto'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { dirname, resolve } from 'node:path'\n\nexport function stableStringify(value: unknown): string {\n const seen = new Set<unknown>()\n return JSON.stringify(value, (_key, entry) => {\n if (typeof entry === 'function' || typeof entry === 'symbol') return undefined\n if (entry && typeof entry === 'object') {\n if (seen.has(entry)) return '[Circular]'\n seen.add(entry)\n if (Array.isArray(entry)) {\n return entry.map(item => item ?? null)\n }\n const sorted: Record<string, unknown> = {}\n for (const key of Object.keys(entry).sort()) {\n sorted[key] = entry[key]\n }\n return sorted\n }\n return entry\n })\n}\n\nexport function hashJson(value: unknown): string {\n return createHash('sha256').update(stableStringify(value) ?? '').digest('hex').slice(0, 16)\n}\n\nexport function clone<T>(value: T): T {\n if (value === undefined) return value\n return structuredClone(value)\n}\n\nexport async function saveJson(file: string, value: unknown): Promise<void> {\n const target = resolve(file)\n await mkdir(dirname(target), { recursive: true })\n await writeFile(target, `${JSON.stringify(value, null, 2)}\\n`, 'utf8')\n}\n\nexport async function loadJson<T>(file: string): Promise<T> {\n const text = await readFile(resolve(file), 'utf8')\n return JSON.parse(text) as T\n}\n", "import type { Context } from '@tnega/core'\nimport {\n createStrategyRegistry,\n defaultStrategyDefinitions,\n gateStrategy,\n judgeStrategy,\n type StrategyRegistry,\n} from './strategies.js'\nimport { EvalRunner } from './runner.js'\nimport {\n type CompareResult,\n type EvalPluginConfig,\n type EvalRun,\n type EvalRunOptions,\n type EvalStrategyDefinition,\n type Verdict,\n} from './types.js'\nimport { loadJson, saveJson } from './utils.js'\n\nexport class EvalService {\n readonly strategies: StrategyRegistry\n\n constructor(\n private ctx: Context,\n private config: EvalPluginConfig = {},\n ) {\n this.strategies = createStrategyRegistry()\n for (const definition of defaultStrategyDefinitions()) {\n this.strategies.register(definition)\n }\n if (config.llmJudge) {\n this.strategies.unregister('llm-judge')\n this.strategies.register(judgeStrategy({ judge: config.llmJudge }))\n }\n if (config.gate) {\n this.strategies.unregister('gate')\n this.strategies.register(gateStrategy(config.gate))\n }\n }\n\n register(definition: EvalStrategyDefinition): () => void {\n return this.strategies.register(definition)\n }\n\n unregister(name: string): boolean {\n return this.strategies.unregister(name)\n }\n\n getStrategy(name: string) {\n return this.strategies.get(name)\n }\n\n listStrategies(): string[] {\n return this.strategies.names()\n }\n\n async run(options: EvalRunOptions): Promise<EvalRun> {\n const runner = new EvalRunner(\n this.ctx,\n this.strategies,\n this.config.defaultBudget,\n this.config.outputDir,\n )\n return runner.run(options)\n }\n\n async loadRun(input: string | EvalRun): Promise<EvalRun> {\n if (typeof input !== 'string') return input\n const candidates = [\n input,\n `${this.config.outputDir ?? '.tnega/runs'}/${input}.json`,\n `${this.config.outputDir ?? '.tnega/runs'}/${input}`,\n ]\n for (const file of candidates) {\n try {\n return await loadJson<EvalRun>(file)\n } catch {\n // try the next candidate path\n }\n }\n throw new Error(`eval run not found: ${input}`)\n }\n\n async saveRun(run: EvalRun, file?: string): Promise<string> {\n const target = file ?? `${this.config.outputDir ?? '.tnega/runs'}/${run.id}.json`\n await saveJson(target, run)\n return target\n }\n\n async compare(base: string | EvalRun, head: string | EvalRun): Promise<CompareResult> {\n const baseRun = await this.loadRun(base)\n const headRun = await this.loadRun(head)\n const taskIds = [...new Set([...baseRun.taskIds, ...headRun.taskIds])]\n const regressions: string[] = []\n const improvements: string[] = []\n let passed = 0\n let failed = 0\n\n const taskResults = taskIds.map((taskId) => {\n const baseVerdict = this._taskVerdict(baseRun, taskId)\n const headVerdict = this._taskVerdict(headRun, taskId)\n const baseScore = baseVerdict?.score ?? 0\n const headScore = headVerdict?.score ?? 0\n const delta = headScore - baseScore\n if (delta < 0) regressions.push(taskId)\n if (delta > 0) improvements.push(taskId)\n if (headVerdict?.status === 'pass') passed += 1\n else if (headVerdict) failed += 1\n return {\n taskId,\n base: baseVerdict,\n head: headVerdict,\n delta,\n changed: delta !== 0,\n }\n })\n\n return {\n base: baseRun,\n head: headRun,\n summary: {\n baseScore: this._score(baseRun),\n headScore: this._score(headRun),\n delta: this._score(headRun) - this._score(baseRun),\n passed,\n failed,\n regressions,\n improvements,\n },\n taskResults,\n }\n }\n\n private _taskVerdict(run: EvalRun, taskId: string): Verdict | undefined {\n const verdicts = run.verdicts.filter(verdict => verdict.taskId === taskId)\n return verdicts.at(-1)\n }\n\n private _score(run: EvalRun): number {\n if (!run.verdicts.length) return 0\n return run.verdicts.reduce((sum, verdict) => sum + verdict.score, 0) / run.verdicts.length\n }\n}\n\nexport const evalPlugin = {\n name: 'eval',\n apply: (ctx: Context, config: EvalPluginConfig = {}) => {\n const service = new EvalService(ctx, config)\n ctx.provide('eval', service)\n return () => {}\n },\n}\n", "type YamlValue = Record<string, unknown> | unknown[] | string | number | boolean | null\n\nfunction parseScalar(raw: string): YamlValue {\n const value = raw.trim()\n if (!value) return ''\n if (value === 'true') return true\n if (value === 'false') return false\n if (value === 'null' || value === '~') return null\n if (/^-?\\d+$/.test(value)) return Number(value)\n if (/^-?\\d+\\.\\d+$/.test(value)) return Number(value)\n if (\n (value.startsWith('\"') && value.endsWith('\"'))\n || (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n return value.slice(1, -1)\n }\n const comment = value.indexOf(' #')\n return comment >= 0 ? value.slice(0, comment).trim() : value\n}\n\nfunction parseSequence(lines: string[], index: number): { value: unknown[]; index: number } {\n const items: unknown[] = []\n const indent = lines[index]!.match(/^ */)![0].length\n let cursor = index\n while (cursor < lines.length) {\n const line = lines[cursor]!\n const currentIndent = line.match(/^ */)![0].length\n const body = line.trim()\n if (!body) {\n cursor += 1\n continue\n }\n if (currentIndent < indent) break\n if (!body.startsWith('- ')) break\n const rest = body.slice(2)\n if (!rest.trim()) {\n const nested = parseBlock(lines, cursor + 1)\n items.push(nested.value)\n cursor = nested.index\n continue\n }\n if (rest.includes(': ')) {\n const nestedLines = [`${' '.repeat(currentIndent + 2)}${rest}`, ...lines.slice(cursor + 1)]\n const nested = parseMapping(nestedLines)\n items.push(nested)\n cursor += 1\n while (cursor < lines.length) {\n const current = lines[cursor]!\n if (current.trim() && current.match(/^ */)![0].length > indent) {\n cursor += 1\n } else {\n break\n }\n }\n } else if (rest.trim().startsWith('- ')) {\n const nested = parseSequence(lines, cursor)\n items.push(nested.value)\n cursor = nested.index\n } else {\n items.push(parseScalar(rest))\n cursor += 1\n }\n }\n return { value: items, index: cursor }\n}\n\nfunction parseBlock(\n lines: string[],\n start: number,\n): { value: Record<string, unknown> | unknown[]; index: number } {\n const line = lines[start]\n if (!line) return { value: [], index: start }\n if (line.trim().startsWith('- ')) return parseSequence(lines, start)\n return { value: parseMapping(lines, start), index: start }\n}\n\nfunction parseMapping(lines: string[], startIndex = 0): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n const baseIndent = lines[startIndex]!.match(/^ */)![0].length\n let cursor = startIndex\n while (cursor < lines.length) {\n const line = lines[cursor]!\n const trimmed = line.trim()\n if (!trimmed) {\n cursor += 1\n continue\n }\n const indent = line.match(/^ */)![0].length\n if (indent < baseIndent) break\n const separator = trimmed.indexOf(':')\n if (separator < 0) {\n cursor += 1\n continue\n }\n const key = trimmed.slice(0, separator).trim()\n const rawValue = trimmed.slice(separator + 1).trim()\n if (rawValue) {\n result[key] = parseScalar(rawValue)\n cursor += 1\n continue\n }\n\n const next = lines[cursor + 1]\n if (!next || next.trim() === '' || next.match(/^ */)![0].length <= indent) {\n result[key] = null\n cursor += 1\n continue\n }\n if (next.trim().startsWith('- ')) {\n const nested = parseSequence(lines, cursor + 1)\n result[key] = nested.value\n cursor = nested.index\n } else {\n const nested = parseMapping(lines, cursor + 1)\n result[key] = nested\n cursor += 1\n while (cursor < lines.length) {\n const current = lines[cursor]!\n if (current.trim() && current.match(/^ */)![0].length > baseIndent) {\n cursor += 1\n } else {\n break\n }\n }\n }\n }\n return result\n}\n\nexport function parseYaml(text: string): Record<string, unknown> {\n const lines = text.split(/\\r?\\n/)\n const clean = lines.filter(line => {\n const trimmed = line.trim()\n return trimmed.length > 0 && !trimmed.startsWith('#')\n })\n if (!clean.length) return {}\n return parseMapping(clean)\n}\n", "import type { EvalRun } from '@tnega/eval'\nimport {\n type Candidate,\n type CandidateSnapshot,\n type Diagnosis,\n type ProposalContext,\n type ProposeRule,\n type StrategySummary,\n} from './types.js'\n\nexport function emptyDiagnosis(): Diagnosis {\n return {\n score: 0,\n total: 0,\n passed: 0,\n failed: 0,\n errors: 0,\n aborted: false,\n failureModes: [],\n failingTasks: [],\n strategySummary: {},\n }\n}\n\nexport function diagnose(run: EvalRun): Diagnosis {\n const failureModes = run.verdicts\n .filter(verdict => verdict.status !== 'pass')\n .map(verdict => ({\n taskId: verdict.taskId,\n strategy: verdict.strategy,\n status: verdict.status,\n score: verdict.score,\n ...(verdict.reason ? { reason: verdict.reason } : {}),\n }))\n const failingTasks = [...new Set(failureModes.map(mode => mode.taskId))]\n const strategySummary: Record<string, StrategySummary> = Object.create(null) as Record<string, StrategySummary>\n\n for (const verdict of run.verdicts) {\n const entry = strategySummary[verdict.strategy] ??= {\n total: 0,\n passed: 0,\n failed: 0,\n errors: 0,\n }\n entry.total += 1\n if (verdict.status === 'pass') entry.passed += 1\n else if (verdict.status === 'fail') entry.failed += 1\n else if (verdict.status === 'skip') entry.failed += 1\n else entry.errors += 1\n }\n\n return {\n score: run.summary.score,\n total: run.summary.total,\n passed: run.summary.passed,\n failed: run.summary.failed,\n errors: run.summary.errors,\n aborted: run.aborted,\n ...(run.abortedReason ? { abortedReason: run.abortedReason } : {}),\n failureModes,\n failingTasks,\n strategySummary,\n }\n}\n\nexport function candidateKey(candidate: Candidate): string {\n return [\n candidate.name,\n candidate.version ?? '',\n candidate.mutation?.type ?? '',\n ].join('@')\n}\n\nexport async function proposeCandidates(\n context: ProposalContext,\n rules: readonly ProposeRule[],\n): Promise<Candidate[]> {\n const candidates: Candidate[] = []\n const seen = new Set<string>()\n\n for (const rule of rules) {\n const result = await rule.apply(context)\n if (result === undefined || result === null) continue\n const list = Array.isArray(result) ? result : [result]\n for (const candidate of list) {\n if (!candidate || typeof candidate.name !== 'string' || !candidate.name) {\n throw new TypeError(`rule ${rule.id} produced a candidate without a name`)\n }\n if (!candidate.plugin) {\n throw new TypeError(`candidate ${candidate.name} requires a plugin`)\n }\n const key = candidateKey(candidate)\n if (seen.has(key)) continue\n seen.add(key)\n candidates.push(candidate)\n }\n }\n\n return candidates\n}\n\nexport function proposalContext(\n baseline: EvalRun | undefined,\n history: readonly import('./types.js').ExperimentNode[],\n rules: readonly ProposeRule[],\n iteration = history.length,\n diagnosis = baseline ? diagnose(baseline) : emptyDiagnosis(),\n): ProposalContext {\n return {\n ...(baseline ? { baseline } : {}),\n diagnosis,\n iteration,\n history,\n rules,\n }\n}\n\nexport function toCandidateSnapshot(candidate: Candidate): CandidateSnapshot {\n return {\n name: candidate.name,\n ...(candidate.version ? { version: candidate.version } : {}),\n ...(candidate.config ? { config: candidate.config } : {}),\n ...(candidate.model ? { model: candidate.model } : {}),\n ...(candidate.mutation ? { mutation: candidate.mutation } : {}),\n ...(candidate.rationale ? { rationale: candidate.rationale } : {}),\n }\n}\n\nexport function toCandidatePreset(candidate: Candidate): import('@tnega/eval').CandidatePreset {\n return {\n plugin: candidate.plugin,\n name: candidate.name,\n ...(candidate.version ? { version: candidate.version } : {}),\n ...(candidate.config ? { config: candidate.config } : {}),\n ...(candidate.model ? { model: candidate.model } : {}),\n }\n}\n", "import type { LLMAdapter } from '@tnega/agent'\nimport { agent } from '@tnega/agent'\nimport type { Context, Plugin } from '@tnega/core'\nimport type {\n Candidate,\n CandidateMutation,\n ProposalContext,\n ProposeRule,\n} from './types.js'\n\nexport interface LlmCandidateConfig {\n system?: string\n maxTurns?: number\n maxSteps?: number\n}\n\nexport interface LlmCandidateOptions {\n name: string\n version?: string\n system?: string\n adapter: LLMAdapter\n maxTurns?: number\n maxSteps?: number\n model?: Record<string, unknown>\n mutation?: CandidateMutation\n rationale?: string\n}\n\nexport interface LlmProposal {\n name: string\n system: string\n rationale: string\n mutationDescription: string\n}\n\nexport interface LlmProposeRuleOptions {\n adapter: LLMAdapter\n maxTurns?: number\n maxSteps?: number\n model?: Record<string, unknown>\n ruleId?: string\n parse?: (content: string) => LlmProposal | Promise<LlmProposal>\n}\n\nexport class LlmProposalError extends Error {\n override name = 'LlmProposalError'\n}\n\nexport function withSystemPrompt(adapter: LLMAdapter, system: string): LLMAdapter {\n return {\n async complete(messages, tools, options) {\n const hasSystem = messages.some(message => message.role === 'system')\n const next = !system || hasSystem\n ? messages\n : [{ role: 'system' as const, content: system }, ...messages]\n return adapter.complete(next, tools, options)\n },\n }\n}\n\nexport function llmCandidate(options: LlmCandidateOptions): Candidate {\n const config: LlmCandidateConfig = {}\n if (options.system !== undefined) config.system = options.system\n if (options.maxTurns !== undefined) config.maxTurns = options.maxTurns\n if (options.maxSteps !== undefined) config.maxSteps = options.maxSteps\n\n const plugin: Plugin = {\n name: options.name,\n apply: async (ctx: Context, rawConfig: unknown) => {\n const candidateConfig = readConfig(rawConfig)\n const fiber = await ctx.plugin(agent, {\n llm: withSystemPrompt(options.adapter, candidateConfig.system ?? ''),\n ...(candidateConfig.maxTurns !== undefined\n ? { maxTurns: candidateConfig.maxTurns }\n : {}),\n ...(candidateConfig.maxSteps !== undefined\n ? { maxSteps: candidateConfig.maxSteps }\n : {}),\n })\n return () => fiber.dispose()\n },\n }\n\n return {\n name: options.name,\n plugin,\n ...(options.version ? { version: options.version } : {}),\n config: config as Record<string, unknown>,\n ...(options.mutation ? { mutation: options.mutation } : {}),\n ...(options.rationale ? { rationale: options.rationale } : {}),\n ...(options.model ? { model: options.model } : {}),\n }\n}\n\nexport function createLlmProposeRule(options: LlmProposeRuleOptions): ProposeRule {\n const parse = options.parse ?? parseLlmProposal\n return {\n id: options.ruleId ?? 'llm-propose',\n description: 'use an LLM to propose a system prompt mutation',\n async apply(context) {\n const completion = await options.adapter.complete(\n [{ role: 'user', content: buildProposalPrompt(context) }],\n [],\n {},\n )\n const content = completion.content\n if (!content) {\n throw new LlmProposalError('LLM proposal returned no content')\n }\n const proposal = await parse(content)\n return llmCandidate({\n name: proposal.name,\n system: proposal.system,\n adapter: options.adapter,\n ...(options.maxTurns !== undefined ? { maxTurns: options.maxTurns } : {}),\n ...(options.maxSteps !== undefined ? { maxSteps: options.maxSteps } : {}),\n ...(options.model ? { model: options.model } : {}),\n mutation: {\n type: 'system-prompt',\n description: proposal.mutationDescription,\n patch: { system: proposal.system },\n },\n rationale: proposal.rationale,\n })\n },\n }\n}\n\nexport function parseLlmProposal(content: string): LlmProposal {\n const json = extractJson(content)\n let parsed: unknown\n try {\n parsed = JSON.parse(json)\n } catch (error) {\n throw new LlmProposalError(`LLM proposal is not valid JSON: ${message(error)}`)\n }\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new LlmProposalError('LLM proposal must be a JSON object')\n }\n const record = parsed as Record<string, unknown>\n const name = record.name\n const system = record.system\n const rationale = record.rationale\n const mutationDescription = record.mutationDescription\n if (typeof name !== 'string' || !name.trim()) {\n throw new LlmProposalError('LLM proposal missing string field: name')\n }\n if (typeof system !== 'string' || !system.trim()) {\n throw new LlmProposalError('LLM proposal missing string field: system')\n }\n if (typeof rationale !== 'string' || !rationale.trim()) {\n throw new LlmProposalError('LLM proposal missing string field: rationale')\n }\n if (typeof mutationDescription !== 'string' || !mutationDescription.trim()) {\n throw new LlmProposalError('LLM proposal missing string field: mutationDescription')\n }\n return {\n name: name.trim(),\n system: system.trim(),\n rationale: rationale.trim(),\n mutationDescription: mutationDescription.trim(),\n }\n}\n\nfunction readConfig(value: unknown): LlmCandidateConfig {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return {}\n const record = value as Record<string, unknown>\n const config: LlmCandidateConfig = {}\n if (typeof record.system === 'string') config.system = record.system\n if (typeof record.maxTurns === 'number') config.maxTurns = record.maxTurns\n if (typeof record.maxSteps === 'number') config.maxSteps = record.maxSteps\n return config\n}\n\nfunction buildProposalPrompt(context: ProposalContext): string {\n const diagnosis = context.diagnosis\n const lines: string[] = [\n '\u4F60\u662F tnega \u7684\u81EA\u8FDB\u5316\u5F15\u64CE\u3002\u6839\u636E\u4E00\u6B21\u8BC4\u6D4B\u7684\u8BCA\u65AD\u7ED3\u679C\uFF0C\u751F\u6210\u4E00\u4E2A\u6539\u8FDB\u540E\u7684 Agent \u7CFB\u7EDF\u63D0\u793A\u8BCD\u5019\u9009\u3002',\n '\u53EA\u8F93\u51FA\u4E00\u4E2A JSON \u5BF9\u8C61\uFF0C\u4E0D\u8981 Markdown \u4EE3\u7801\u5757\uFF0C\u4E0D\u8981\u989D\u5916\u89E3\u91CA\u3002JSON \u5B57\u6BB5\uFF1A',\n '{\"name\":\"\u5019\u9009\u540D\",\"system\":\"\u65B0\u7684\u7CFB\u7EDF\u63D0\u793A\u8BCD\",\"rationale\":\"\u4FEE\u6539\u7406\u7531\",\"mutationDescription\":\"\u5177\u4F53\u6539\u52A8\u8BF4\u660E\"}',\n '',\n `\u8FED\u4EE3\uFF1A${context.iteration}`,\n ]\n if (context.baseline) {\n const run = context.baseline\n lines.push(\n `baseline: ${run.candidate.name} score=${run.summary.score.toFixed(3)} `\n + `passed=${run.summary.passed}/${run.summary.total}`,\n )\n }\n if (diagnosis.failingTasks.length) {\n lines.push('\u5931\u8D25\u4EFB\u52A1\uFF1A')\n for (const taskId of diagnosis.failingTasks) {\n const modes = diagnosis.failureModes.filter(mode => mode.taskId === taskId)\n const reasons = modes.map(mode => {\n const reason = mode.reason ? `(${mode.reason})` : ''\n return `${mode.strategy}=${mode.status}${reason}`\n }).join(', ')\n lines.push(`- ${taskId}: ${reasons}`)\n }\n } else if (context.baseline) {\n lines.push('\u5F53\u524D baseline \u5168\u90E8\u901A\u8FC7\uFF0C\u8BF7\u4FDD\u6301\u6B63\u786E\u884C\u4E3A\uFF0C\u5E76\u5C1D\u8BD5\u8BA9\u8F93\u51FA\u66F4\u7A33\u5B9A\u3002')\n }\n if (context.history.length) {\n lines.push('\u5DF2\u6709\u5019\u9009\uFF08\u907F\u514D\u91CD\u590D\uFF09\uFF1A')\n for (const node of context.history.slice(-5)) {\n lines.push(`- ${node.candidate.name}: ${node.candidate.rationale ?? ''}`)\n }\n }\n lines.push('\u7EA6\u675F\uFF1Asystem \u5FC5\u987B\u662F\u7B80\u6D01\u53EF\u6267\u884C\u7684\u4E2D\u6587\u6216\u82F1\u6587\u7CFB\u7EDF\u63D0\u793A\u8BCD\uFF1B\u4E0D\u8981\u5305\u542B JSON \u4E4B\u5916\u7684\u8F93\u51FA\u3002')\n return lines.join('\\n')\n}\n\nfunction extractJson(content: string): string {\n const fenced = content.match(/```(?:json)?\\s*([\\s\\S]*?)```/i)\n if (fenced?.[1]) return fenced[1]\n const start = content.indexOf('{')\n const end = content.lastIndexOf('}')\n if (start < 0 || end < start) {\n throw new LlmProposalError('LLM proposal did not contain a JSON object')\n }\n return content.slice(start, end + 1)\n}\n\nfunction message(error: unknown): string {\n if (error instanceof Error) return error.message\n return String(error)\n}\n", "import { randomUUID } from 'node:crypto'\nimport { loadJson, saveJson } from '@tnega/eval'\nimport { diagnose } from './diagnose.js'\nimport type {\n ExperimentLogData,\n ExperimentNode,\n ExperimentReplay,\n} from './types.js'\n\nfunction clone<T>(value: T): T {\n return structuredClone(value)\n}\n\nexport class ExperimentLog {\n private _data: ExperimentLogData\n\n constructor(\n readonly file: string,\n data?: ExperimentLogData,\n ) {\n this._data = data ?? this._empty()\n }\n\n static async open(file: string): Promise<ExperimentLog> {\n try {\n const data = await loadJson<ExperimentLogData>(file)\n return new ExperimentLog(file, data)\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return new ExperimentLog(file)\n }\n throw error\n }\n }\n\n get id(): string {\n return this._data.id\n }\n\n get baselineId(): string | undefined {\n return this._data.baselineId\n }\n\n get baseline(): ExperimentNode | undefined {\n return this._data.baselineId ? this.get(this._data.baselineId) : undefined\n }\n\n get size(): number {\n return Object.keys(this._data.nodes).length\n }\n\n nodes(): ExperimentNode[] {\n return Object.values(this._data.nodes).map(node => clone(node))\n }\n\n get(id: string): ExperimentNode | undefined {\n const node = this._data.nodes[id]\n return node ? clone(node) : undefined\n }\n\n roots(): ExperimentNode[] {\n return this.nodes().filter(node => node.parentId === undefined)\n }\n\n children(parentId: string): ExperimentNode[] {\n return this.nodes().filter(node => node.parentId === parentId)\n }\n\n lineage(id: string): ExperimentNode[] {\n const path: ExperimentNode[] = []\n let cursor: ExperimentNode | undefined = this._data.nodes[id]\n while (cursor) {\n path.unshift(clone(cursor))\n cursor = cursor.parentId ? this._data.nodes[cursor.parentId] : undefined\n }\n return path\n }\n\n async add(node: ExperimentNode): Promise<void> {\n if (this._data.nodes[node.id]) {\n throw new Error(`experiment node already exists: ${node.id}`)\n }\n this._data.nodes[node.id] = clone(node)\n await this.save()\n }\n\n async update(node: ExperimentNode): Promise<void> {\n if (!this._data.nodes[node.id]) {\n throw new Error(`experiment node not found: ${node.id}`)\n }\n this._data.nodes[node.id] = clone(node)\n await this.save()\n }\n\n async setBaseline(nodeId: string): Promise<void> {\n if (!this._data.nodes[nodeId]) {\n throw new Error(`cannot set baseline for unknown node: ${nodeId}`)\n }\n this._data.baselineId = nodeId\n await this.save()\n }\n\n async fork(options: { parentId?: string; file?: string } = {}): Promise<ExperimentLog> {\n const data = clone(this._data)\n const parentId = options.parentId ?? data.baselineId\n if (parentId && !data.nodes[parentId]) {\n throw new Error(`cannot fork from unknown node: ${parentId}`)\n }\n const child: ExperimentLogData = {\n ...data,\n id: randomUUID(),\n createdAt: Date.now(),\n updatedAt: Date.now(),\n ...(parentId ? { baselineId: parentId } : {}),\n }\n return new ExperimentLog(options.file ?? this.file, child)\n }\n\n async replay(nodeId: string): Promise<ExperimentReplay> {\n const node = this.get(nodeId)\n if (!node) throw new Error(`experiment node not found: ${nodeId}`)\n const baseline = node.parentId ? this.get(node.parentId) : undefined\n return {\n node,\n diagnosis: diagnose(node.run),\n history: this.lineage(nodeId).map(item => item.id),\n ...(baseline ? { baseline } : {}),\n }\n }\n\n async save(): Promise<void> {\n this._data.updatedAt = Date.now()\n await saveJson(this.file, this._data)\n }\n\n private _empty(): ExperimentLogData {\n return {\n version: 1,\n id: randomUUID(),\n createdAt: Date.now(),\n updatedAt: Date.now(),\n nodes: {},\n }\n }\n}\n", "import type { CompareResult, EvalRun } from '@tnega/eval'\nimport type {\n ExperimentNode,\n GateCheck,\n SelectionPolicy,\n} from './types.js'\n\nexport async function evaluateGate(\n node: ExperimentNode,\n baseline: EvalRun | undefined,\n compare: CompareResult | undefined,\n policy: SelectionPolicy = {},\n): Promise<GateCheck[]> {\n const checks: GateCheck[] = []\n const run = node.run\n\n checks.push({\n name: 'run-complete',\n ok: !run.aborted && !run.error,\n detail: run.aborted\n ? `run aborted: ${run.abortedReason ?? 'unknown'}`\n : run.error\n ? `run errored: ${run.error.message}`\n : 'run completed',\n })\n\n checks.push({\n name: 'no-errors',\n ok: run.summary.errors === 0,\n detail: `${run.summary.errors} error verdicts`,\n })\n\n if (policy.minScore !== undefined) {\n const ok = run.summary.score >= policy.minScore\n checks.push({\n name: 'min-score',\n ok,\n detail: `score ${run.summary.score.toFixed(3)} >= ${policy.minScore}`,\n })\n }\n\n for (const strategy of policy.requiredStrategies ?? []) {\n const verdicts = run.verdicts.filter(verdict => verdict.strategy === strategy)\n const ok = verdicts.length > 0 && verdicts.every(verdict => verdict.status === 'pass')\n checks.push({\n name: `required:${strategy}`,\n ok,\n detail: ok\n ? `strategy ${strategy} passed ${verdicts.length} verdicts`\n : `strategy ${strategy} has ${verdicts.length} verdicts`,\n })\n }\n\n for (const strategy of policy.safetyStrategies ?? []) {\n const verdicts = run.verdicts.filter(verdict => verdict.strategy === strategy)\n const ok = verdicts.length > 0 && verdicts.every(verdict => verdict.status === 'pass')\n checks.push({\n name: `safety:${strategy}`,\n ok,\n detail: ok\n ? `safety strategy ${strategy} passed`\n : `safety strategy ${strategy} failed`,\n })\n }\n\n for (const taskId of policy.safetyTasks ?? []) {\n const verdicts = run.verdicts.filter(verdict => verdict.taskId === taskId)\n const ok = verdicts.length > 0 && verdicts.every(verdict => verdict.status === 'pass')\n checks.push({\n name: `safety-task:${taskId}`,\n ok,\n detail: ok\n ? `safety task ${taskId} passed`\n : `safety task ${taskId} failed`,\n })\n }\n\n if (!baseline || !compare) return checks\n const changed = compare.taskResults.filter(item => item.changed)\n const regressions = compare.summary.regressions\n const maxDegradation = regressions.length\n ? Math.max(...compare.taskResults\n .filter(item => item.delta < 0)\n .map(item => -item.delta))\n : 0\n\n if (policy.maxDegradation !== undefined) {\n const ok = maxDegradation <= policy.maxDegradation\n checks.push({\n name: 'max-degradation',\n ok,\n detail: `max regression ${maxDegradation.toFixed(3)} <= ${policy.maxDegradation}`,\n })\n }\n\n if (policy.maxRegressions !== undefined) {\n const ok = regressions.length <= policy.maxRegressions\n checks.push({\n name: 'max-regressions',\n ok,\n detail: `${regressions.length} regressions <= ${policy.maxRegressions}`,\n })\n }\n\n if (policy.maxRegressionRatio !== undefined) {\n const ratio = compare.taskResults.length\n ? regressions.length / compare.taskResults.length\n : 0\n const ok = ratio <= policy.maxRegressionRatio\n checks.push({\n name: 'max-regression-ratio',\n ok,\n detail: `regression ratio ${ratio.toFixed(3)} <= ${policy.maxRegressionRatio}`,\n })\n }\n\n if (policy.minDelta !== undefined) {\n const ok = compare.summary.delta >= policy.minDelta\n checks.push({\n name: 'min-delta',\n ok,\n detail: `delta ${compare.summary.delta.toFixed(3)} >= ${policy.minDelta}`,\n })\n }\n\n if (policy.minPairs !== undefined) {\n const ok = changed.length >= policy.minPairs\n checks.push({\n name: 'min-pairs',\n ok,\n detail: `${changed.length} changed pairs >= ${policy.minPairs}`,\n })\n }\n\n if (policy.requireImprovement) {\n const ok = compare.summary.improvements.length > 0\n checks.push({\n name: 'require-improvement',\n ok,\n detail: ok\n ? `${compare.summary.improvements.length} improvements`\n : 'no improvements',\n })\n }\n\n if (policy.significance) {\n const ok = await policy.significance(compare, policy)\n checks.push({\n name: 'significance',\n ok,\n detail: ok ? 'significance rule passed' : 'significance rule failed',\n })\n }\n\n return checks\n}\n", "import { randomUUID } from 'node:crypto'\nimport { join } from 'node:path'\nimport type { Context } from '@tnega/core'\nimport type { EvalRunOptions, EvalService } from '@tnega/eval'\nimport {\n diagnose,\n emptyDiagnosis,\n proposeCandidates,\n proposalContext,\n toCandidatePreset,\n toCandidateSnapshot,\n} from './diagnose.js'\nimport { ExperimentLog } from './log.js'\nimport { evaluateGate } from './select.js'\nimport type {\n ApprovalRequest,\n Candidate,\n EvolveOptions,\n EvolvePluginConfig,\n EvolveStepOptions,\n EvolveStepResult,\n ExperimentNode,\n ProposalContext,\n SelectionDecision,\n} from './types.js'\n\nexport class EvolveService {\n private _log: ExperimentLog | undefined\n private _ready: Promise<ExperimentLog> | undefined\n\n constructor(\n private ctx: Context,\n private config: EvolvePluginConfig = {},\n ) {}\n\n async init(): Promise<ExperimentLog> {\n if (this._log) return this._log\n if (!this._ready) {\n this._ready = ExperimentLog.open(this._logFile()).then((log) => {\n this._log = log\n return log\n })\n }\n return this._ready\n }\n\n async propose(options: Partial<ProposalContext> = {}): Promise<Candidate[]> {\n const log = await this.init()\n const baseline = options.baseline ?? log.baseline?.run\n const history = options.history ?? log.nodes()\n const iteration = options.iteration ?? history.length\n const diagnosis = options.diagnosis ?? (baseline ? diagnose(baseline) : emptyDiagnosis())\n const rules = this.config.rules ?? []\n const context = proposalContext(baseline, history, rules, iteration, diagnosis)\n const candidates = await proposeCandidates(context, rules)\n this.ctx.emit('evolve/propose', {\n iteration,\n ...(baseline?.id ? { baselineRunId: baseline.id } : {}),\n candidates: candidates.map(toCandidateSnapshot),\n })\n return candidates\n }\n\n async evaluate(\n candidate: Candidate,\n options: Partial<EvalRunOptions> = {},\n ): Promise<ExperimentNode> {\n const log = await this.init()\n const evalService = this._eval()\n const parent = options.baselineRunId\n ? this._nodeByRunId(log, options.baselineRunId)\n : log.baseline\n const tasks = options.tasks ?? this.config.tasks\n if (!tasks?.length) {\n throw new Error('evolve requires at least one eval task')\n }\n\n const runOptions: EvalRunOptions = {\n candidate: toCandidatePreset(candidate),\n tasks,\n ...(options.strategyNames ?? this.config.strategyNames\n ? { strategyNames: options.strategyNames ?? this.config.strategyNames }\n : {}),\n }\n const budget = options.budget ?? this.config.budget\n if (budget) runOptions.budget = budget\n const cache = options.cache ?? this.config.cache\n if (cache !== undefined) runOptions.cache = cache\n if (parent) runOptions.baselineRunId = parent.run.id\n else if (options.baselineRunId) runOptions.baselineRunId = options.baselineRunId\n if (options.outputFile) runOptions.outputFile = options.outputFile\n if (options.runCandidate) runOptions.runCandidate = options.runCandidate\n\n const run = await evalService.run(runOptions)\n const node: ExperimentNode = {\n id: randomUUID(),\n ...(parent ? { parentId: parent.id } : {}),\n candidate: toCandidateSnapshot(candidate),\n run,\n status: 'pending',\n createdAt: Date.now(),\n }\n await log.add(node)\n this.ctx.emit('evolve/run', {\n nodeId: node.id,\n runId: run.id,\n candidate: node.candidate,\n })\n\n if (this.config.policy?.requiresApproval) {\n node.decision = {\n status: 'pending',\n reason: 'awaiting approval',\n checks: [],\n requiresApproval: true,\n }\n await log.update(node)\n const request: ApprovalRequest = {\n nodeId: node.id,\n candidate: node.candidate,\n run,\n ...(parent ? { baseline: parent.run } : {}),\n }\n this.ctx.emit('evolve/approval-request', { node, request })\n }\n\n return node\n }\n\n async decide(nodeId: string, approved = true): Promise<ExperimentNode> {\n const log = await this.init()\n const node = log.get(nodeId)\n if (!node) throw new Error(`experiment node not found: ${nodeId}`)\n if (node.status !== 'pending') {\n throw new Error(`experiment node already decided: ${node.status}`)\n }\n\n const parent = node.parentId ? log.get(node.parentId) : undefined\n const compare = parent\n ? await this._eval().compare(parent.run, node.run)\n : undefined\n const requiresApproval = this.config.policy?.requiresApproval ?? false\n const checks = approved\n ? await evaluateGate(node, parent?.run, compare, this.config.policy)\n : []\n const allPassed = checks.every(check => check.ok)\n const status = !approved\n ? 'rejected'\n : node.run.aborted\n ? 'aborted'\n : allPassed\n ? 'accepted'\n : 'rejected'\n const failed = checks.filter(check => !check.ok)\n const reason = !approved\n ? 'rejected by approval'\n : status === 'aborted'\n ? `run aborted: ${node.run.abortedReason ?? 'unknown'}`\n : allPassed\n ? 'all gates passed'\n : `${failed.length} gates failed: ${failed.map(check => check.name).join(', ')}`\n const decision: SelectionDecision = {\n status,\n reason,\n checks,\n ...(requiresApproval ? { approved, requiresApproval: true } : {}),\n }\n if (compare) {\n decision.delta = compare.summary.delta\n decision.regressions = compare.summary.regressions\n decision.improvements = compare.summary.improvements\n }\n if (node.run.abortedReason) decision.abortedReason = node.run.abortedReason\n\n node.status = status\n node.decision = decision\n await log.update(node)\n if (status === 'accepted') await log.setBaseline(node.id)\n\n const event = { node, decision }\n if (status === 'accepted') this.ctx.emit('evolve/accept', event)\n else if (status === 'aborted') this.ctx.emit('evolve/abort', event)\n else this.ctx.emit('evolve/reject', event)\n return node\n }\n\n approve(nodeId: string, approved = true): Promise<ExperimentNode> {\n return this.decide(nodeId, approved)\n }\n\n async step(options: EvolveStepOptions = {}): Promise<EvolveStepResult> {\n const log = await this.init()\n const baseline = log.baseline\n let candidate = options.candidate\n if (!candidate) {\n const candidates = await this.propose({\n iteration: options.iteration ?? log.size,\n ...(baseline ? { baseline: baseline.run } : {}),\n })\n candidate = candidates[0]\n }\n if (!candidate) {\n return { kind: 'no-candidate', reason: 'no rules produced a candidate' }\n }\n\n const node = await this.evaluate(candidate, options.run ?? {})\n if (node.decision?.requiresApproval) {\n return { kind: 'approval-pending', node }\n }\n const decided = await this.decide(node.id)\n const kind = !decided.parentId && decided.status === 'accepted'\n ? 'established' as const\n : decided.status === 'accepted'\n ? 'accepted' as const\n : decided.status === 'aborted'\n ? 'aborted' as const\n : 'rejected' as const\n return { kind, node: decided }\n }\n\n async evolve(options: EvolveOptions = {}): Promise<EvolveStepResult> {\n const maxIterations = options.maxIterations ?? 10\n const maxRuns = options.maxRuns\n let evaluated = 0\n\n for (let iteration = 0; iteration < maxIterations; iteration += 1) {\n const stepOptions: EvolveStepOptions = {\n iteration,\n ...(iteration === 0 && options.candidate ? { candidate: options.candidate } : {}),\n ...(options.run ? { run: options.run } : {}),\n }\n const result = await this.step(stepOptions)\n if (result.kind === 'no-candidate') return result\n if (\n result.kind === 'established'\n || result.kind === 'accepted'\n || result.kind === 'aborted'\n || result.kind === 'approval-pending'\n ) {\n return result\n }\n evaluated += 1\n if (maxRuns !== undefined && evaluated >= maxRuns) {\n return { kind: 'no-candidate', reason: `maxRuns reached: ${maxRuns}` }\n }\n }\n\n return { kind: 'no-candidate', reason: `maxIterations reached: ${maxIterations}` }\n }\n\n async baseline(): Promise<ExperimentNode | undefined> {\n const log = await this.init()\n return log.baseline\n }\n\n async history(): Promise<ExperimentNode[]> {\n const log = await this.init()\n return log.nodes()\n }\n\n async replay(nodeId: string) {\n const log = await this.init()\n return log.replay(nodeId)\n }\n\n async loadLog(file?: string): Promise<ExperimentLog> {\n if (file) {\n this._log = await ExperimentLog.open(file)\n this._ready = Promise.resolve(this._log)\n }\n return this.init()\n }\n\n private _eval(): EvalService {\n const service = this.ctx.get('eval') as EvalService | undefined\n if (!service) throw new Error('evolve requires the eval plugin to be installed')\n return service\n }\n\n private _nodeByRunId(log: ExperimentLog, runId: string): ExperimentNode | undefined {\n return log.nodes().find(node => node.run.id === runId)\n }\n\n private _logFile(): string {\n return this.config.logFile ?? join(this.config.outputDir ?? '.tnega/experiments', 'log.json')\n }\n}\n\nexport const evolvePlugin = {\n name: 'evolve',\n apply: async (ctx: Context, config: EvolvePluginConfig = {}) => {\n const service = new EvolveService(ctx, config)\n await service.init()\n ctx.provide('evolve', service)\n return () => {}\n },\n}\n", "import type { CompareResult, EvalRun } from '@tnega/eval'\nimport {\n CliError,\n compareCommand,\n formatAgentRun,\n formatCompare,\n formatEvolveResult,\n formatRun,\n runAgentCommand,\n runCommand,\n runEvolveCommand,\n} from './commands.js'\n\nexport type {\n EvolveFileConfig,\n LlmEnvConfig,\n RunAgentCommandOptions,\n RunAgentCommandResult,\n RunEvolveCommandOptions,\n RunEvolveCommandResult,\n TasksFile,\n} from './commands.js'\nexport {\n CliError,\n compareCommand,\n formatAgentRun,\n formatCompare,\n formatEvolveResult,\n formatRun,\n loadTasksFile,\n resolveLlmEnv,\n runAgentCommand,\n runCommand,\n runEvolveCommand,\n} from './commands.js'\nexport { parseYaml } from './yaml.js'\nexport type { CompareResult, EvalRun }\n\nexport function main(argv: readonly string[]): Promise<number> {\n return (async () => {\n const [command, ...args] = argv\n if (command === 'run') {\n const parsed = parseRunAgentArgs(args)\n if (!parsed.prompt) throw new CliError('run requires a prompt')\n const result = await runAgentCommand({\n prompt: parsed.prompt,\n ...(parsed.cwd ? { cwd: parsed.cwd } : {}),\n ...(parsed.sessionFile ? { sessionFile: parsed.sessionFile } : {}),\n ...(parsed.model ? { model: parsed.model } : {}),\n ...(parsed.baseUrl ? { baseUrl: parsed.baseUrl } : {}),\n ...(parsed.maxTokens !== undefined ? { maxTokens: parsed.maxTokens } : {}),\n ...(parsed.temperature !== undefined ? { temperature: parsed.temperature } : {}),\n ...(parsed.maxTurns !== undefined ? { maxTurns: parsed.maxTurns } : {}),\n ...(parsed.maxSteps !== undefined ? { maxSteps: parsed.maxSteps } : {}),\n ...(parsed.allowNetwork !== undefined ? { allowNetwork: parsed.allowNetwork } : {}),\n ...(parsed.allowShell !== undefined ? { allowShell: parsed.allowShell } : {}),\n })\n return emit(formatAgentRun(result), 0)\n }\n\n if (command === 'eval' && args[0] === 'run') {\n const parsed = parseRunArgs(args.slice(1))\n if (!parsed.tasksFile) throw new CliError('eval run requires a tasks file')\n const run = await runCommand({\n tasksFile: parsed.tasksFile,\n ...(parsed.candidateName ? { candidateName: parsed.candidateName } : {}),\n ...(parsed.cache !== undefined ? { cache: parsed.cache } : {}),\n ...(parsed.outputFile ? { outputFile: parsed.outputFile } : {}),\n ...(parsed.cwd ? { cwd: parsed.cwd } : {}),\n })\n return emit(formatRun(run), run.summary.failed > 0 ? 1 : 0)\n }\n\n if (command === 'eval' && args[0] === 'compare') {\n const parsed = parseCompareArgs(args.slice(1))\n if (!parsed.base || !parsed.head) {\n throw new CliError('eval compare requires two run references')\n }\n const result = await compareCommand({\n base: parsed.base,\n head: parsed.head,\n ...(parsed.cwd ? { cwd: parsed.cwd } : {}),\n })\n return emit(formatCompare(result), result.summary.regressions.length ? 1 : 0)\n }\n\n if (command === 'evolve' && args[0] === 'run') {\n const parsed = parseEvolveRunArgs(args.slice(1))\n if (!parsed.tasksFile) throw new CliError('evolve run requires a tasks file')\n const result = await runEvolveCommand({\n tasksFile: parsed.tasksFile,\n ...(parsed.cwd ? { cwd: parsed.cwd } : {}),\n ...(parsed.outputDir ? { outputDir: parsed.outputDir } : {}),\n ...(parsed.maxIterations !== undefined\n ? { maxIterations: parsed.maxIterations }\n : {}),\n ...(parsed.maxRuns !== undefined ? { maxRuns: parsed.maxRuns } : {}),\n ...(parsed.baseSystem ? { baseSystem: parsed.baseSystem } : {}),\n ...(parsed.model ? { model: parsed.model } : {}),\n ...(parsed.baseUrl ? { baseUrl: parsed.baseUrl } : {}),\n ...(parsed.maxTokens !== undefined ? { maxTokens: parsed.maxTokens } : {}),\n ...(parsed.temperature !== undefined ? { temperature: parsed.temperature } : {}),\n ...(parsed.maxTurns !== undefined ? { maxTurns: parsed.maxTurns } : {}),\n ...(parsed.maxSteps !== undefined ? { maxSteps: parsed.maxSteps } : {}),\n ...(parsed.cache !== undefined ? { cache: parsed.cache } : {}),\n })\n return emit(formatEvolveResult(result), 0)\n }\n\n throw new CliError(`unknown command: ${command ?? '<empty>'}`)\n })().catch((error: unknown) => {\n if (error instanceof CliError) return emit(`error: ${error.message}`, 2)\n return emit(`error: ${error instanceof Error ? error.message : String(error)}`, 2)\n })\n}\n\ninterface ParsedRunArgs {\n tasksFile?: string\n candidateName?: string\n cache?: boolean\n outputFile?: string\n cwd?: string\n}\n\ninterface ParsedCompareArgs {\n base?: string\n head?: string\n cwd?: string\n}\n\ninterface ParsedRunAgentArgs {\n prompt?: string\n cwd?: string\n sessionFile?: string\n model?: string\n baseUrl?: string\n maxTokens?: number\n temperature?: number\n maxTurns?: number\n maxSteps?: number\n allowNetwork?: boolean\n allowShell?: boolean\n}\n\ninterface ParsedEvolveRunArgs {\n tasksFile?: string\n cwd?: string\n outputDir?: string\n maxIterations?: number\n maxRuns?: number\n baseSystem?: string\n model?: string\n baseUrl?: string\n maxTokens?: number\n temperature?: number\n maxTurns?: number\n maxSteps?: number\n cache?: boolean\n}\n\nfunction parseRunArgs(args: readonly string[]): ParsedRunArgs {\n const parsed: ParsedRunArgs = {}\n let cursor = 0\n while (cursor < args.length) {\n const arg = args[cursor]!\n if (arg === '--candidate' || arg === '--output' || arg === '--cwd') {\n const value = args[cursor + 1]\n if (!value) throw new CliError(`${arg} requires a value`)\n if (arg === '--candidate') parsed.candidateName = value\n if (arg === '--output') parsed.outputFile = value\n if (arg === '--cwd') parsed.cwd = value\n cursor += 2\n } else if (arg === '--no-cache') {\n parsed.cache = false\n cursor += 1\n } else if (!parsed.tasksFile) {\n parsed.tasksFile = arg\n cursor += 1\n } else {\n throw new CliError(`unexpected argument: ${arg}`)\n }\n }\n return parsed\n}\n\nfunction parseRunAgentArgs(args: readonly string[]): ParsedRunAgentArgs {\n const parsed: ParsedRunAgentArgs = {}\n const positional: string[] = []\n let cursor = 0\n while (cursor < args.length) {\n const arg = args[cursor]!\n if (!arg.startsWith('--')) {\n positional.push(arg)\n cursor += 1\n continue\n }\n if (arg === '--allow-network') {\n parsed.allowNetwork = true\n cursor += 1\n continue\n }\n if (arg === '--allow-shell') {\n parsed.allowShell = true\n cursor += 1\n continue\n }\n\n const eq = arg.indexOf('=')\n const name = eq >= 0 ? arg.slice(2, eq) : arg.slice(2)\n const value = eq >= 0 ? arg.slice(eq + 1) : args[cursor + 1]\n if (!value) throw new CliError(`--${name} requires a value`)\n assignRunAgentOption(parsed, name, value)\n cursor += eq >= 0 ? 1 : 2\n }\n\n const prompt = positional.join(' ').trim()\n if (prompt) parsed.prompt = prompt\n return parsed\n}\n\nfunction parseEvolveRunArgs(args: readonly string[]): ParsedEvolveRunArgs {\n const parsed: ParsedEvolveRunArgs = {}\n const positional: string[] = []\n let cursor = 0\n while (cursor < args.length) {\n const arg = args[cursor]!\n if (!arg.startsWith('--')) {\n positional.push(arg)\n cursor += 1\n continue\n }\n if (arg === '--no-cache') {\n parsed.cache = false\n cursor += 1\n continue\n }\n\n const eq = arg.indexOf('=')\n const name = eq >= 0 ? arg.slice(2, eq) : arg.slice(2)\n const value = eq >= 0 ? arg.slice(eq + 1) : args[cursor + 1]\n if (!value) throw new CliError(`--${name} requires a value`)\n assignEvolveRunOption(parsed, name, value)\n cursor += eq >= 0 ? 1 : 2\n }\n\n const tasksFile = positional.join(' ').trim()\n if (tasksFile) parsed.tasksFile = tasksFile\n return parsed\n}\n\nfunction assignEvolveRunOption(\n parsed: ParsedEvolveRunArgs,\n name: string,\n value: string,\n): void {\n switch (name) {\n case 'cwd':\n parsed.cwd = value\n return\n case 'output-dir':\n parsed.outputDir = value\n return\n case 'iterations':\n parsed.maxIterations = parseFiniteNumber('--iterations', value)\n return\n case 'max-runs':\n parsed.maxRuns = parseFiniteNumber('--max-runs', value)\n return\n case 'base-system':\n parsed.baseSystem = value\n return\n case 'model':\n parsed.model = value\n return\n case 'base-url':\n parsed.baseUrl = value\n return\n case 'max-tokens':\n parsed.maxTokens = parseFiniteNumber('--max-tokens', value)\n return\n case 'temperature':\n parsed.temperature = parseFiniteNumber('--temperature', value)\n return\n case 'max-turns':\n parsed.maxTurns = parseFiniteNumber('--max-turns', value)\n return\n case 'max-steps':\n parsed.maxSteps = parseFiniteNumber('--max-steps', value)\n return\n case 'no-cache':\n parsed.cache = false\n return\n default:\n throw new CliError(`unknown option: --${name}`)\n }\n}\n\nfunction assignRunAgentOption(\n parsed: ParsedRunAgentArgs,\n name: string,\n value: string,\n): void {\n switch (name) {\n case 'cwd':\n parsed.cwd = value\n return\n case 'session':\n parsed.sessionFile = value\n return\n case 'model':\n parsed.model = value\n return\n case 'base-url':\n parsed.baseUrl = value\n return\n case 'max-tokens':\n parsed.maxTokens = parseFiniteNumber('--max-tokens', value)\n return\n case 'temperature':\n parsed.temperature = parseFiniteNumber('--temperature', value)\n return\n case 'max-turns':\n parsed.maxTurns = parseFiniteNumber('--max-turns', value)\n return\n case 'max-steps':\n parsed.maxSteps = parseFiniteNumber('--max-steps', value)\n return\n default:\n throw new CliError(`unknown option: --${name}`)\n }\n}\n\nfunction parseFiniteNumber(name: string, value: string): number {\n const number = Number(value)\n if (!Number.isFinite(number)) throw new CliError(`${name} requires a finite number`)\n return number\n}\n\nfunction parseCompareArgs(args: readonly string[]): ParsedCompareArgs {\n const parsed: ParsedCompareArgs = {}\n let cursor = 0\n while (cursor < args.length) {\n const arg = args[cursor]!\n if (arg === '--cwd') {\n const value = args[cursor + 1]\n if (!value) throw new CliError('--cwd requires a value')\n parsed.cwd = value\n cursor += 2\n } else if (!parsed.base) {\n parsed.base = arg\n cursor += 1\n } else if (!parsed.head) {\n parsed.head = arg\n cursor += 1\n } else {\n throw new CliError(`unexpected argument: ${arg}`)\n }\n }\n return parsed\n}\n\nfunction emit(output: string, code: number): number {\n process.stdout.write(`${output}\\n`)\n return code\n}\n\nexport const name = '@tnega/cli'\n", "#!/usr/bin/env node\nimport { main } from './index.js'\n\nprocess.exitCode = await main(process.argv.slice(2))\n"],
5
+ "mappings": "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",
6
+ "names": ["join", "resolve", "target", "value", "lines", "message", "config", "task", "dispose", "resolve", "message", "value", "message", "session", "tools", "message", "tools", "tools", "message", "record", "record", "message", "stringify", "appendFile", "mkdir", "readFile", "writeFile", "dirname", "relative", "sep", "message", "dirname", "resolve", "relative", "sep", "readFile", "mkdir", "dirname", "appendFile", "writeFile", "resolve", "definition", "definition", "message", "definition", "randomUUID", "join", "mkdir", "readFile", "writeFile", "dirname", "resolve", "clone", "randomUUID", "join", "clone", "session", "message", "record", "definition", "tools", "message", "record", "randomUUID", "clone", "randomUUID", "randomUUID", "join", "evalService", "randomUUID", "join", "record", "resolve", "join"]
7
+ }