tnega 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +115 -189
- package/dist/agent.js +2907 -0
- package/dist/agent.js.map +7 -0
- package/dist/bin.js +32512 -4419
- package/dist/bin.js.map +4 -4
- package/dist/cli-runtime.js +33404 -0
- package/dist/cli-runtime.js.map +7 -0
- package/dist/coding-agent.js +19088 -0
- package/dist/coding-agent.js.map +7 -0
- package/dist/core.js +1398 -0
- package/dist/core.js.map +7 -0
- package/dist/eval.js +23905 -0
- package/dist/eval.js.map +7 -0
- package/dist/events.js +1215 -0
- package/dist/events.js.map +7 -0
- package/dist/evolve.js +18303 -0
- package/dist/evolve.js.map +7 -0
- package/dist/index.js +33087 -4450
- package/dist/index.js.map +4 -4
- package/dist/llm.js +1016 -0
- package/dist/llm.js.map +7 -0
- package/dist/services.js +1142 -0
- package/dist/services.js.map +7 -0
- package/dist/session.js +1045 -0
- package/dist/session.js.map +7 -0
- package/dist/tools.js +2577 -0
- package/dist/tools.js.map +7 -0
- package/dist/types/packages/agent/src/definition.d.ts +17 -0
- package/dist/types/packages/agent/src/inbox-durable.d.ts +54 -0
- package/dist/types/packages/agent/src/index.d.ts +7 -0
- package/dist/types/packages/agent/src/live.d.ts +115 -0
- package/dist/types/packages/agent/src/llm-service.d.ts +32 -0
- package/dist/types/packages/agent/src/prompt.d.ts +55 -0
- package/dist/types/packages/agent/src/service.d.ts +68 -0
- package/dist/types/packages/agent/src/types.d.ts +215 -0
- package/dist/types/packages/benchmark/src/bigcodebench.d.ts +6 -0
- package/dist/types/packages/benchmark/src/humaneval.d.ts +11 -0
- package/dist/types/packages/benchmark/src/index.d.ts +9 -0
- package/dist/types/packages/benchmark/src/manifest.d.ts +10 -0
- package/dist/types/packages/benchmark/src/mbpp.d.ts +10 -0
- package/dist/types/packages/benchmark/src/parquet.d.ts +2 -0
- package/dist/types/packages/benchmark/src/stdlib.d.ts +3 -0
- package/dist/types/packages/benchmark/src/swebench.d.ts +2 -0
- package/dist/types/packages/benchmark/src/types.d.ts +58 -0
- package/dist/types/packages/cli/src/bin.d.ts +2 -0
- package/dist/types/packages/cli/src/commands.d.ts +146 -0
- package/dist/types/packages/cli/src/config.d.ts +28 -0
- package/dist/types/packages/cli/src/index.d.ts +9 -0
- package/dist/types/packages/cli/src/profile-file.d.ts +26 -0
- package/dist/types/packages/cli/src/profile.d.ts +9 -0
- package/dist/types/packages/cli/src/server.d.ts +14 -0
- package/dist/types/packages/cli/src/store.d.ts +60 -0
- package/dist/types/packages/cli/src/yaml.d.ts +1 -0
- package/dist/types/packages/coding-agent/src/codingAgent.d.ts +25 -0
- package/dist/types/packages/coding-agent/src/index.d.ts +6 -0
- package/dist/types/packages/coding-agent/src/mcp.d.ts +24 -0
- package/dist/types/packages/coding-agent/src/plan.d.ts +13 -0
- package/dist/types/packages/coding-agent/src/skills.d.ts +12 -0
- package/dist/types/packages/coding-agent/src/slash.d.ts +28 -0
- package/dist/types/packages/coding-agent/src/types.d.ts +41 -0
- package/dist/types/packages/core/src/context.d.ts +28 -0
- package/dist/types/packages/core/src/events.d.ts +57 -0
- package/dist/types/packages/core/src/fiber.d.ts +79 -0
- package/dist/types/packages/core/src/index.d.ts +10 -0
- package/dist/types/packages/core/src/invariant.d.ts +45 -0
- package/dist/types/packages/core/src/logger.d.ts +48 -0
- package/dist/types/packages/core/src/reflect.d.ts +42 -0
- package/dist/types/packages/core/src/registry.d.ts +54 -0
- package/dist/types/packages/core/src/service.d.ts +19 -0
- package/dist/types/packages/core/src/utils.d.ts +54 -0
- package/dist/types/packages/eval/src/codingRuntime.d.ts +18 -0
- package/dist/types/packages/eval/src/index.d.ts +5 -0
- package/dist/types/packages/eval/src/policy.d.ts +8 -0
- package/dist/types/packages/eval/src/runner.d.ts +31 -0
- package/dist/types/packages/eval/src/service.d.ts +23 -0
- package/dist/types/packages/eval/src/strategies.d.ts +58 -0
- package/dist/types/packages/eval/src/trace.d.ts +7 -0
- package/dist/types/packages/eval/src/types.d.ts +281 -0
- package/dist/types/packages/eval/src/utils.d.ts +5 -0
- package/dist/types/packages/eval/src/workspace.d.ts +17 -0
- package/dist/types/packages/evolve/src/diagnose.d.ts +9 -0
- package/dist/types/packages/evolve/src/index.d.ts +7 -0
- package/dist/types/packages/evolve/src/llm.d.ts +39 -0
- package/dist/types/packages/evolve/src/log.d.ts +26 -0
- package/dist/types/packages/evolve/src/select.d.ts +3 -0
- package/dist/types/packages/evolve/src/service.d.ts +29 -0
- package/dist/types/packages/evolve/src/types.d.ts +176 -0
- package/dist/types/packages/llm/src/anthropic-messages.d.ts +4 -0
- package/dist/types/packages/llm/src/errors.d.ts +6 -0
- package/dist/types/packages/llm/src/index.d.ts +7 -0
- package/dist/types/packages/llm/src/models.d.ts +29 -0
- package/dist/types/packages/llm/src/openai.d.ts +4 -0
- package/dist/types/packages/llm/src/provider.d.ts +3 -0
- package/dist/types/packages/llm/src/shared.d.ts +15 -0
- package/dist/types/packages/llm/src/types.d.ts +13 -0
- package/dist/types/packages/session/src/index.d.ts +500 -0
- package/dist/types/packages/session/src/invariant.d.ts +33 -0
- package/dist/types/packages/tools/src/builtins.d.ts +25 -0
- package/dist/types/packages/tools/src/calc.d.ts +4 -0
- package/dist/types/packages/tools/src/execution.d.ts +31 -0
- package/dist/types/packages/tools/src/index.d.ts +107 -0
- package/dist/types/packages/tools/src/path.d.ts +4 -0
- package/dist/types/packages/tools/src/policy.d.ts +14 -0
- package/dist/types/src/events.d.ts +1 -0
- package/dist/types/src/index.d.ts +15 -0
- package/dist/types/src/services.d.ts +4 -0
- package/dist/web/assets/index-45pokiBH.js +270 -0
- package/dist/web/assets/index-DCLL69Kz.css +1 -0
- package/dist/web/index.html +13 -0
- package/package.json +92 -35
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../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/tools/src/builtins.ts", "../packages/tools/src/calc.ts", "../packages/tools/src/execution.ts", "../packages/tools/src/path.ts", "../packages/tools/src/policy.ts", "../packages/tools/src/index.ts"],
|
|
4
|
+
"sourcesContent": ["/* 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'\r\nimport { DisposableList, symbols, type Any, type AnyFunction } from './utils.js'\r\n\r\ndeclare module './context.js' {\r\n interface Context {\r\n on(name: string, listener: AnyFunction, options?: boolean | EventOptions): () => Any\r\n once(name: string, listener: AnyFunction, options?: boolean | EventOptions): () => Any\r\n emit(name: string, ...args: Any[]): void\r\n emit(thisArg: object, name: string, ...args: Any[]): void\r\n parallel(name: string, ...args: Any[]): Promise<void>\r\n parallel(thisArg: object, name: string, ...args: Any[]): Promise<void>\r\n serial(name: string, ...args: Any[]): Promise<void>\r\n serial(thisArg: object, name: string, ...args: Any[]): Promise<void>\r\n bail(name: string, ...args: Any[]): Any\r\n bail(thisArg: object, name: string, ...args: Any[]): Any\r\n waterfall(name: string, ...args: Any[]): Any\r\n waterfall(thisArg: object, name: string, ...args: Any[]): Any\r\n waterfallAsync(name: string, ...args: Any[]): Promise<Any>\r\n waterfallAsync(thisArg: object, name: string, ...args: Any[]): Promise<Any>\r\n }\r\n}\r\n\r\nexport function isBailed(value: Any) {\r\n return value !== null && value !== false && value !== undefined\r\n}\r\n\r\nexport type DispatchMode = 'emit' | 'parallel' | 'serial' | 'bail' | 'waterfall' | 'waterfallAsync'\r\n\r\nexport interface EventOptions {\r\n prepend?: boolean\r\n global?: boolean\r\n}\r\n\r\nexport interface Hook extends EventOptions {\r\n ctx: Context\r\n callback: AnyFunction\r\n}\r\n\r\nexport class EventsService {\r\n _hooks: Record<string, Hook[]> = Object.create(null)\r\n\r\n constructor(private ctx: Context) {\r\n Object.defineProperty(this, symbols.tracker, {\r\n value: { property: 'ctx', noShadow: true },\r\n })\r\n\r\n this.on('internal/listener', function (this: Context, name: string, listener: AnyFunction, options: EventOptions) {\r\n if (name === 'internal/update' && !options.global) {\r\n const hooks = (this.fiber._hooks['internal/update'] ??= new DisposableList<AnyFunction>())\r\n const method = options.prepend ? 'unshift' : 'push'\r\n return hooks[method](listener)\r\n }\r\n })\r\n\r\n this.on('internal/update', function (this: Context, config: Any, noSave: boolean, next: AnyFunction) {\r\n const cbs = [...(this.fiber._hooks['internal/update'] ?? [])]\r\n const _next = () => {\r\n const cb = cbs.shift() ?? next\r\n return cb.call(this, config, noSave, _next)\r\n }\r\n return _next()\r\n }, { global: true, prepend: true })\r\n }\r\n\r\n private _resolve(type: string, args: Any[]) {\r\n const thisArg = typeof args[0] === 'object' || typeof args[0] === 'function' ? args.shift() : null\r\n const name: string = args.shift()\r\n if (!name.startsWith('internal/') && this._hooks['internal/dispatch']?.length) {\r\n this.emit('internal/dispatch', type, name, args, thisArg)\r\n }\r\n const filter = thisArg?.[Context.filter]\r\n return [thisArg, (this._hooks[name] || [])\r\n .filter(hook => hook.global || !filter || filter.call(thisArg, hook.ctx))\r\n .map(hook => hook.callback)] as const\r\n }\r\n\r\n dispatch(type: string, args: Any[]) {\r\n const [thisArg, callbacks] = this._resolve(type, args)\r\n return callbacks.map(callback => callback.bind(thisArg))\r\n }\r\n\r\n async parallel(...args: Any[]) {\r\n const [thisArg, callbacks] = this._resolve('parallel', args)\r\n const results = await Promise.allSettled(callbacks.map(async callback => Reflect.apply(callback, thisArg, args)))\r\n const errors = results\r\n .filter((result): result is PromiseRejectedResult => result.status === 'rejected')\r\n .map(result => result.reason)\r\n if (errors.length) throw new AggregateError(errors)\r\n }\r\n\r\n emit(...args: Any[]) {\r\n const [thisArg, callbacks] = this._resolve('emit', args)\r\n for (const callback of callbacks) Reflect.apply(callback, thisArg, args)\r\n }\r\n\r\n async serial(...args: Any[]) {\r\n const [thisArg, callbacks] = this._resolve('serial', args)\r\n for (const callback of callbacks) {\r\n const result = await Reflect.apply(callback, thisArg, args)\r\n if (isBailed(result)) return result\r\n }\r\n }\r\n\r\n bail(...args: Any[]) {\r\n const [thisArg, callbacks] = this._resolve('bail', args)\r\n for (const callback of callbacks) {\r\n const result = Reflect.apply(callback, thisArg, args)\r\n if (isBailed(result)) return result\r\n }\r\n }\r\n\r\n waterfall(...args: Any[]) {\r\n const [thisArg, callbacks] = this._resolve('waterfall', args)\r\n const inner = args.pop()\r\n const next = () => {\r\n const callback = callbacks.shift()\r\n return callback ? Reflect.apply(callback, thisArg, args) : inner(...args)\r\n }\r\n args.push(next)\r\n return next()\r\n }\r\n\r\n async waterfallAsync(...args: Any[]) {\r\n const [thisArg, callbacks] = this._resolve('waterfallAsync', args)\r\n const inner = args.pop()\r\n const next = async () => {\r\n const callback = callbacks.shift()\r\n return callback\r\n ? await Reflect.apply(callback, thisArg, args)\r\n : inner(...args)\r\n }\r\n args.push(next)\r\n return next()\r\n }\r\n\r\n register(label: string, hooks: Hook[], callback: AnyFunction, options: EventOptions): Any {\r\n const method = options.prepend ? 'unshift' : 'push'\r\n return this.ctx.fiber.effect(() => {\r\n hooks[method]({ ctx: this.ctx, callback, ...options })\r\n return () => this.unregister(hooks, callback)\r\n }, label)\r\n }\r\n\r\n unregister(hooks: Hook[], callback: AnyFunction) {\r\n const index = hooks.findIndex(hook => hook.callback === callback)\r\n if (index >= 0) {\r\n hooks.splice(index, 1)\r\n return true\r\n }\r\n }\r\n\r\n on(name: string, listener: AnyFunction, options: boolean | EventOptions = {}): Any {\r\n if (typeof options !== 'object') {\r\n options = { prepend: options }\r\n }\r\n this.ctx.fiber.assertActive()\r\n listener = this.ctx.reflect.bind(listener)\r\n const result = this.bail(this.ctx, 'internal/listener', name, listener, options)\r\n if (result) return result\r\n\r\n const hooks = this._hooks[name] ??= []\r\n return this.register(`ctx.on(${JSON.stringify(name)})`, hooks, listener, options)\r\n }\r\n\r\n once(name: string, listener: AnyFunction, options: boolean | EventOptions = {}) {\r\n const dispose = this.on(name, function (this: Any, ...args: Any[]) {\r\n dispose()\r\n return listener.apply(this, args)\r\n }, options)\r\n return dispose\r\n }\r\n}\r\n\r\nexport interface Events {\r\n 'internal/plugin'(this: Any): void\r\n 'internal/status'(this: Any, oldValue: Any): void\r\n 'internal/service'(this: Context, name: string, value: Any): void\r\n 'internal/update'(this: Any, config: Any, noSave: boolean, next: AnyFunction): void\r\n 'internal/get'(this: Context, name: string, error: Error, next: AnyFunction): Any\r\n 'internal/set'(this: Context, name: string, value: Any, error: Error, next: AnyFunction): boolean\r\n 'internal/listener'(this: Context, name: string, listener: AnyFunction, options: EventOptions): Any\r\n 'internal/dispatch'(mode: DispatchMode, name: string, args: Any[], thisArg: Any): void\r\n}\r\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'\r\nimport { FiberState } from './fiber.js'\r\nimport { getTraceable, symbols, withProps, type Any, type AnyFunction, type Dict } from './utils.js'\r\n\r\ndeclare module './context.js' {\r\n interface Context {\r\n get(name: string, strict?: boolean): Any\r\n set(name: string, value: Any): void\r\n provide(name: string, value?: Any, check?: () => boolean): () => Any\r\n accessor(name: string, options: Omit<AccessorProperty, 'type'>): () => Any\r\n mixin(source: Any, mixins: string[] | Dict<string>): void\r\n }\r\n}\r\n\r\nfunction enhanceError(error: Error) {\r\n const lines = error.stack!.split('\\n')\r\n lines.splice(0, 2, `Error: ${error.message}`)\r\n error.stack = lines.join('\\n')\r\n return error\r\n}\r\n\r\nconst RESERVED_WORDS = ['prototype', 'then']\r\n\r\nfunction isSpecialProperty(prop: string | symbol) {\r\n return typeof prop === 'symbol'\r\n || RESERVED_WORDS.includes(prop as string)\r\n || parseInt(prop as string).toString() === prop\r\n || (prop as string).startsWith('_')\r\n}\r\n\r\nexport interface ServiceProperty {\r\n type: 'service'\r\n}\r\n\r\nexport interface AccessorProperty {\r\n type: 'accessor'\r\n get: (this: Context, receiver: Any, error: Error) => Any\r\n set?: (this: Context, value: Any, receiver: Any, error: Error) => boolean\r\n}\r\n\r\nexport type ReflectProperty = ServiceProperty | AccessorProperty\r\n\r\nexport interface Impl {\r\n name: string\r\n fiber: Any\r\n value?: Any\r\n check?: () => boolean\r\n}\r\n\r\nexport class ReflectService {\r\n static handler: ProxyHandler<Context> = {\r\n get: (target, prop, ctx: Context) => {\r\n if (isSpecialProperty(prop)) {\r\n return Reflect.get(target, prop, ctx)\r\n }\r\n if (Reflect.has(target, prop)) {\r\n return getTraceable(ctx, Reflect.get(target, prop, ctx))\r\n }\r\n\r\n const error = new Error(`cannot get property \"${String(prop)}\" without inject`)\r\n try {\r\n const def = target.reflect.props[prop as string]\r\n if (def?.type === 'accessor') {\r\n return def.get.call(ctx, ctx[symbols.receiver], error)\r\n }\r\n\r\n if (!ctx.fiber.runtime) return ctx.reflect.get(prop as string, false)\r\n return ctx.events.waterfall(ctx, 'internal/get', prop, error, () => {\r\n const key = target[symbols.isolate]![prop as string]\r\n let fiber = ((ctx[symbols.shadow] as Context) ?? ctx).fiber\r\n while (true) {\r\n const impl = fiber.store?.[prop as string]\r\n if (impl) return getTraceable(ctx, impl.value)\r\n if (prop in fiber.inject) {\r\n error.message = `cannot get required service \"${String(prop)}\" in inactive context`\r\n throw error\r\n }\r\n if (!fiber.runtime) throw error\r\n if (fiber.parent[symbols.isolate]![prop as string] !== key) throw error\r\n fiber = fiber.parent.fiber\r\n }\r\n })\r\n } catch (e: Any) {\r\n throw e === error ? enhanceError(e) : e\r\n }\r\n },\r\n\r\n set: (target, prop, value, ctx: Context) => {\r\n if (isSpecialProperty(prop)) {\r\n return Reflect.set(target, prop, value, ctx)\r\n }\r\n\r\n const error = new Error(`cannot set property \"${String(prop)}\" without provide`)\r\n const def = target.reflect.props[prop as string]\r\n\r\n try {\r\n if (def?.type === 'accessor') {\r\n if (!def.set) return false\r\n return def.set.call(ctx, value, ctx[symbols.receiver], error)\r\n }\r\n\r\n if (!def && !ctx.fiber.runtime) {\r\n return Reflect.set(target, prop, value, ctx)\r\n }\r\n\r\n return ctx.events.waterfall(ctx, 'internal/set', prop, value, error, () => {\r\n if (!def) throw error\r\n return ctx.reflect.set(prop as string, value)\r\n })\r\n } catch (e: Any) {\r\n throw e === error ? enhanceError(e) : e\r\n }\r\n },\r\n\r\n has: (target, prop) => {\r\n if (isSpecialProperty(prop)) {\r\n return Reflect.has(target, prop)\r\n }\r\n if (Reflect.has(target, prop)) return true\r\n return !!target.reflect.props[prop as string]\r\n },\r\n }\r\n\r\n public store: Dict<Impl, symbol> = Object.create(null)\r\n public props: Dict<ReflectProperty> = Object.create(null)\r\n\r\n constructor(public ctx: Context) {\r\n Object.defineProperty(this, symbols.tracker, {\r\n value: { property: 'ctx', noShadow: true },\r\n })\r\n\r\n this.mixin('reflect', ['get', 'set', 'provide', 'accessor', 'mixin'])\r\n this.mixin('fiber', ['runtime', 'effect'])\r\n this.mixin('registry', ['inject', 'plugin'])\r\n this.mixin('events', [\r\n 'on',\r\n 'once',\r\n 'parallel',\r\n 'emit',\r\n 'serial',\r\n 'bail',\r\n 'waterfall',\r\n 'waterfallAsync',\r\n ])\r\n }\r\n\r\n get(name: string, strict = true) {\r\n return getTraceable(this.ctx, this._getImpl(name, strict)?.value)\r\n }\r\n\r\n _getImpl(name: string, strict = true) {\r\n const key = this.ctx[symbols.isolate]![name]\r\n const impl = key && this.store[key as symbol]\r\n if (!impl) return\r\n if (strict && impl.fiber.state !== FiberState.ACTIVE) return\r\n return impl\r\n }\r\n\r\n set(name: string, value: Any) {\r\n const key = this.ctx[symbols.isolate]![name]\r\n const impl = key && this.store[key as symbol]\r\n if (!impl) {\r\n throw new Error(`cannot set property \"${name}\" without provide`)\r\n }\r\n if (impl.fiber !== this.ctx.fiber) {\r\n throw new Error(`cannot set property \"${name}\" in multiple fibers`)\r\n }\r\n impl.value = value\r\n return true\r\n }\r\n\r\n provide(name: string, value?: Any, check?: () => boolean) {\r\n return this.ctx.fiber.effect(() => {\r\n if (!this.props[name]) {\r\n this.props[name] = { type: 'service' }\r\n } else if (this.props[name].type !== 'service') {\r\n throw new Error(`property \"${name}\" is already declared as ${this.props[name].type}`)\r\n }\r\n this.props[name] = { type: 'service' }\r\n\r\n this.ctx.root[symbols.isolate]![name] ??= Symbol(name)\r\n const key = this.ctx[symbols.isolate]![name]\r\n const impl: Impl = {\r\n name,\r\n value,\r\n fiber: this.ctx.fiber,\r\n ...(check ? { check } : {}),\r\n }\r\n if (key && this.store[key]) {\r\n throw new Error(`service \"${name}\" has been registered at <${this.store[key].fiber.name}>`)\r\n }\r\n this.store[key as symbol] = impl\r\n this.ctx.fiber.store![name] = impl\r\n if (this.ctx.fiber.state === FiberState.ACTIVE) {\r\n this.notify([name])\r\n }\r\n return async () => {\r\n delete this.store[key as symbol]\r\n const fibers = this.notify([name])\r\n await Promise.allSettled(fibers.map(fiber => fiber.await()))\r\n delete this.ctx.fiber.store![name]\r\n }\r\n }, `ctx.provide(${JSON.stringify(name)})`)\r\n }\r\n\r\n notify(\r\n names: string[],\r\n filter = (ctx: Context, name: string) => ctx[symbols.isolate]![name] === this.ctx[symbols.isolate]![name],\r\n ) {\r\n const fibers: Any[] = []\r\n for (const runtime of this.ctx.registry.values()) {\r\n for (const fiber of runtime.fibers) {\r\n let hasUpdate = false\r\n for (const name of names) {\r\n if (!(name in fiber.inject)) continue\r\n if (!filter(fiber.ctx, name)) continue\r\n hasUpdate = true\r\n fiber._checkImpl(name)\r\n }\r\n if (!hasUpdate) continue\r\n fiber._refresh()\r\n fibers.push(fiber)\r\n }\r\n }\r\n for (const name of names) {\r\n const self: Any = Object.create(this.ctx)\r\n self[symbols.filter] = (target: Context) => filter(target, name)\r\n this.ctx.events.emit(self, 'internal/service', name, this._getImpl(name, false)?.value)\r\n }\r\n return fibers\r\n }\r\n\r\n accessor(name: string, options: Omit<AccessorProperty, 'type'>) {\r\n return this.ctx.fiber.effect(() => {\r\n if (name in this.props) {\r\n throw new Error(`property \"${name}\" is already declared as ${this.props[name]!.type}`)\r\n }\r\n this.props[name] = { type: 'accessor', ...options }\r\n return () => delete this.props[name]\r\n }, `ctx.accessor(${JSON.stringify(name)})`)\r\n }\r\n\r\n mixin(source: Any, mixins: string[] | Dict<string>) {\r\n return this.ctx.fiber.effect(() => {\r\n const entries: [string, string][] = Array.isArray(mixins)\r\n ? mixins.map(key => [key, key] as [string, string])\r\n : Object.entries(mixins)\r\n const getTarget = (target: Context): Any => target[source]\r\n return entries.map(([key, value]) => {\r\n return this.accessor(value, {\r\n get(receiver) {\r\n const service: Any = getTarget(this)\r\n if (service == null) return service\r\n const mixin = receiver ? withProps(receiver, service) : service\r\n const result = Reflect.get(service, key, mixin)\r\n if (typeof result !== 'function') return result\r\n return result.bind(mixin ?? service)\r\n },\r\n set(value, receiver) {\r\n const service: Any = getTarget(this)\r\n const mixin = receiver ? withProps(receiver, service) : service\r\n return Reflect.set(service, key, value, mixin)\r\n },\r\n })\r\n })\r\n }, `ctx.mixin(${JSON.stringify(source)})`)\r\n }\r\n\r\n trace<T>(value: T) {\r\n return getTraceable(this.ctx, value)\r\n }\r\n\r\n bind<T extends AnyFunction>(callback: T) {\r\n return new Proxy(callback, {\r\n apply: (target, thisArg, args) => {\r\n return Reflect.apply(target, this.trace(thisArg), args.map(arg => this.trace(arg)))\r\n },\r\n construct: (target, args, newTarget) => {\r\n return Reflect.construct(target, args.map(arg => this.trace(arg)), newTarget)\r\n },\r\n })\r\n }\r\n}\r\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 {\r\n appendFile,\r\n mkdir,\r\n readFile,\r\n readdir,\r\n stat,\r\n writeFile,\r\n} from 'node:fs/promises'\r\nimport { dirname, join, relative, sep } from 'node:path'\r\nimport type { Context } from '@tnega/core'\r\nimport type {\r\n ToolDefinition,\r\n ToolExecuteOptions,\r\n ToolExecutor,\r\n ToolParameterSchema,\r\n ToolSchema,\r\n ToolsService,\r\n} from './index.js'\r\nimport { evaluateExpression } from './calc.js'\r\nimport { localExecutionProvider, type ExecutionProvider } from './execution.js'\r\nimport { resolveInside } from './path.js'\r\n\r\nexport interface BuiltinToolsConfig {\r\n cwd?: string\r\n allowNetwork?: boolean\r\n allowShell?: boolean\r\n disabled?: readonly string[]\r\n maxReadBytes?: number\r\n maxWriteBytes?: number\r\n maxSearchBytes?: number\r\n maxResults?: number\r\n timeoutMs?: number\r\n execution?: ExecutionProvider\r\n}\r\n\r\ninterface NormalizedBuiltinToolsConfig {\r\n cwd: string\r\n allowNetwork: boolean\r\n allowShell: boolean\r\n disabled: readonly string[]\r\n maxReadBytes: number\r\n maxWriteBytes: number\r\n maxSearchBytes: number\r\n maxResults: number\r\n timeoutMs: number\r\n execution: ExecutionProvider\r\n}\r\n\r\nexport class ToolInputError extends Error {\r\n override name = 'ToolInputError'\r\n}\r\n\r\nconst DEFAULT_TOOL_NAMES = [\r\n 'echo',\r\n 'now',\r\n 'calculator',\r\n 'json',\r\n 'read_file',\r\n 'write_file',\r\n 'list_dir',\r\n 'glob',\r\n 'grep',\r\n] as const\r\n\r\nfunction normalizeConfig(config: BuiltinToolsConfig = {}): NormalizedBuiltinToolsConfig {\r\n return {\r\n cwd: config.cwd ?? process.cwd(),\r\n allowNetwork: config.allowNetwork ?? false,\r\n allowShell: config.allowShell ?? false,\r\n disabled: [...(config.disabled ?? [])],\r\n maxReadBytes: config.maxReadBytes ?? 256 * 1024,\r\n maxWriteBytes: config.maxWriteBytes ?? 1024 * 1024,\r\n maxSearchBytes: config.maxSearchBytes ?? 1024 * 1024,\r\n maxResults: config.maxResults ?? 200,\r\n timeoutMs: config.timeoutMs ?? 15_000,\r\n execution: config.execution ?? localExecutionProvider,\r\n }\r\n}\r\n\r\nfunction definition(\r\n name: string,\r\n description: string,\r\n execute: ToolExecutor,\r\n parameters?: ToolParameterSchema,\r\n): ToolDefinition {\r\n const schema: ToolSchema = { name, description }\r\n if (parameters) schema.parameters = parameters\r\n return { schema, execute }\r\n}\r\n\r\nfunction record(value: unknown, label = 'input'): Record<string, unknown> {\r\n if (value && typeof value === 'object' && !Array.isArray(value)) {\r\n return value as Record<string, unknown>\r\n }\r\n throw new ToolInputError(`${label} must be an object`)\r\n}\r\n\r\nfunction stringField(value: unknown, name: string): string {\r\n if (typeof value === 'string') return value\r\n throw new ToolInputError(`${name} must be a string`)\r\n}\r\n\r\nfunction optionalString(value: unknown, name: string): string | undefined {\r\n if (value === undefined) return undefined\r\n return stringField(value, name)\r\n}\r\n\r\nfunction numberField(value: unknown, name: string): number {\r\n if (typeof value === 'number' && Number.isFinite(value)) return value\r\n throw new ToolInputError(`${name} must be a finite number`)\r\n}\r\n\r\nfunction optionalNumber(value: unknown, name: string): number | undefined {\r\n if (value === undefined) return undefined\r\n return numberField(value, name)\r\n}\r\n\r\nfunction booleanField(value: unknown, name: string): boolean {\r\n if (typeof value === 'boolean') return value\r\n throw new ToolInputError(`${name} must be a boolean`)\r\n}\r\n\r\nfunction optionalBoolean(value: unknown, name: string): boolean | undefined {\r\n if (value === undefined) return undefined\r\n return booleanField(value, name)\r\n}\r\n\r\nfunction optionalRecord(value: unknown, name: string): Record<string, string> | undefined {\r\n if (value === undefined) return undefined\r\n const source = record(value, name)\r\n const result: Record<string, string> = {}\r\n for (const [key, entry] of Object.entries(source)) {\r\n if (typeof entry !== 'string') throw new ToolInputError(`${name}.${key} must be a string`)\r\n result[key] = entry\r\n }\r\n return result\r\n}\r\n\r\nfunction displayPath(cwd: string, target: string): string {\r\n const rel = relative(cwd, target)\r\n return (rel === '' ? '.' : rel).split(sep).join('/')\r\n}\r\n\r\nfunction message(error: unknown): string {\r\n if (error instanceof Error) return error.message\r\n return String(error)\r\n}\r\n\r\nfunction echoTool(): ToolDefinition {\r\n return definition(\r\n 'echo',\r\n 'Return the input text unchanged. Useful for quick checks and debugging.',\r\n (input) => stringField(record(input).text, 'text'),\r\n {\r\n type: 'object',\r\n properties: {\r\n text: { type: 'string', description: 'text to return' },\r\n },\r\n required: ['text'],\r\n },\r\n )\r\n}\r\n\r\nfunction nowTool(): ToolDefinition {\r\n return definition(\r\n 'now',\r\n 'Return the current date and time as an ISO 8601 string in the local timezone.',\r\n () => new Date().toISOString(),\r\n { type: 'object', properties: {} },\r\n )\r\n}\r\n\r\nfunction calculatorTool(): ToolDefinition {\r\n return definition(\r\n 'calculator',\r\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.',\r\n (input) => evaluateExpression(stringField(record(input).expression, 'expression')),\r\n {\r\n type: 'object',\r\n properties: {\r\n expression: {\r\n type: 'string',\r\n description: 'arithmetic expression, e.g. \"(2 + 3) * 4\"',\r\n },\r\n },\r\n required: ['expression'],\r\n },\r\n )\r\n}\r\n\r\nfunction jsonTool(): ToolDefinition {\r\n return definition(\r\n 'json',\r\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).',\r\n (input) => {\r\n const args = record(input)\r\n const operation = optionalString(args.operation, 'operation') ?? 'parse'\r\n if (operation === 'stringify') {\r\n const space = optionalNumber(args.space, 'space')\r\n try {\r\n return JSON.stringify(args.value, null, space)\r\n } catch (error) {\r\n throw new ToolInputError(`cannot stringify value: ${message(error)}`)\r\n }\r\n }\r\n if (operation === 'get') {\r\n return jsonGet(args.value, stringField(args.path, 'path'))\r\n }\r\n if (operation !== 'parse') {\r\n throw new ToolInputError(`unknown json operation: ${operation}`)\r\n }\r\n const text = stringField(args.value, 'value')\r\n try {\r\n return JSON.parse(text) as unknown\r\n } catch (error) {\r\n throw new ToolInputError(`invalid JSON: ${message(error)}`)\r\n }\r\n },\r\n {\r\n type: 'object',\r\n properties: {\r\n operation: {\r\n type: 'string',\r\n enum: ['parse', 'stringify', 'get'],\r\n description: 'operation to perform',\r\n },\r\n value: {\r\n description: 'input value for the operation',\r\n },\r\n path: {\r\n type: 'string',\r\n description: 'path to get, e.g. \"a.b[0]\"',\r\n },\r\n space: {\r\n type: 'number',\r\n description: 'indentation for stringify',\r\n },\r\n },\r\n required: ['operation'],\r\n },\r\n )\r\n}\r\n\r\nfunction jsonGet(value: unknown, path: string): unknown {\r\n const segments = parseJsonPath(path)\r\n let current: unknown = value\r\n for (const segment of segments) {\r\n if (current == null || (typeof current !== 'object' && typeof current !== 'string')) {\r\n throw new ToolInputError(`json path not found: ${path}`)\r\n }\r\n if (Array.isArray(current)) {\r\n current = current[Number(segment)]\r\n } else if (typeof current === 'string') {\r\n current = Number.isInteger(Number(segment)) ? current[Number(segment)] : undefined\r\n } else {\r\n current = (current as Record<string, unknown>)[segment]\r\n }\r\n if (current === undefined) throw new ToolInputError(`json path not found: ${path}`)\r\n }\r\n return current\r\n}\r\n\r\nfunction parseJsonPath(path: string): string[] {\r\n let text = path.trim()\r\n if (!text) throw new ToolInputError('json path must be a non-empty string')\r\n if (text.startsWith('$')) text = text.slice(1)\r\n if (text.startsWith('.')) text = text.slice(1)\r\n\r\n const segments: string[] = []\r\n let index = 0\r\n while (index < text.length) {\r\n const char = text[index]!\r\n if (char === '.') {\r\n index += 1\r\n continue\r\n }\r\n if (char === '[') {\r\n const close = text.indexOf(']', index + 1)\r\n if (close < 0) throw new ToolInputError(`invalid json path: ${path}`)\r\n const inner = text.slice(index + 1, close).trim()\r\n if (!inner) throw new ToolInputError(`invalid json path: ${path}`)\r\n segments.push(stripQuotes(inner))\r\n index = close + 1\r\n continue\r\n }\r\n const dot = text.indexOf('.', index)\r\n const bracket = text.indexOf('[', index)\r\n const end = Math.min(\r\n text.length,\r\n ...(dot >= 0 ? [dot] : []),\r\n ...(bracket >= 0 ? [bracket] : []),\r\n )\r\n const segment = text.slice(index, end).trim()\r\n if (!segment) throw new ToolInputError(`invalid json path: ${path}`)\r\n segments.push(segment)\r\n index = end\r\n }\r\n return segments\r\n}\r\n\r\nfunction stripQuotes(value: string): string {\r\n if (value.length >= 2) {\r\n const first = value[0]\r\n const last = value[value.length - 1]\r\n if ((first === '\"' && last === '\"') || (first === \"'\" && last === \"'\")) {\r\n return value.slice(1, -1)\r\n }\r\n }\r\n return value\r\n}\r\n\r\nfunction readFileTool(config: NormalizedBuiltinToolsConfig): ToolDefinition {\r\n return definition(\r\n 'read_file',\r\n 'Read a UTF-8 text file inside the workspace. Returns { path, bytes, content }.',\r\n async (input) => {\r\n const args = record(input)\r\n const target = await resolveInside(config.cwd, stringField(args.path, 'path'))\r\n const stats = await stat(target)\r\n if (stats.isDirectory()) throw new ToolInputError(`not a file: ${args.path}`)\r\n const maxBytes = optionalNumber(args.maxBytes, 'maxBytes') ?? config.maxReadBytes\r\n if (stats.size > maxBytes) {\r\n throw new ToolInputError(`file exceeds ${maxBytes} bytes: ${args.path}`)\r\n }\r\n const buffer = await readFile(target)\r\n if (buffer.includes(0)) throw new ToolInputError(`file is binary: ${args.path}`)\r\n return {\r\n path: displayPath(config.cwd, target),\r\n bytes: buffer.byteLength,\r\n content: buffer.toString('utf8'),\r\n }\r\n },\r\n {\r\n type: 'object',\r\n properties: {\r\n path: { type: 'string', description: 'file path relative to the workspace' },\r\n maxBytes: { type: 'number', description: 'optional byte limit' },\r\n },\r\n required: ['path'],\r\n },\r\n )\r\n}\r\n\r\nfunction writeFileTool(config: NormalizedBuiltinToolsConfig): ToolDefinition {\r\n return definition(\r\n 'write_file',\r\n 'Write UTF-8 text to a file inside the workspace, creating parent directories as needed. Returns { path, bytes, appended }.',\r\n async (input) => {\r\n const args = record(input)\r\n const target = await resolveInside(config.cwd, stringField(args.path, 'path'))\r\n const content = stringField(args.content, 'content')\r\n const append = optionalBoolean(args.append, 'append') ?? false\r\n const bytes = Buffer.byteLength(content, 'utf8')\r\n if (bytes > config.maxWriteBytes) {\r\n throw new ToolInputError(`content exceeds ${config.maxWriteBytes} bytes`)\r\n }\r\n await mkdir(dirname(target), { recursive: true })\r\n if (append) {\r\n await appendFile(target, content, 'utf8')\r\n } else {\r\n await writeFile(target, content, 'utf8')\r\n }\r\n return {\r\n path: displayPath(config.cwd, target),\r\n bytes,\r\n appended: append,\r\n }\r\n },\r\n {\r\n type: 'object',\r\n properties: {\r\n path: { type: 'string', description: 'file path relative to the workspace' },\r\n content: { type: 'string', description: 'text content to write' },\r\n append: { type: 'boolean', description: 'append instead of overwrite' },\r\n },\r\n required: ['path', 'content'],\r\n },\r\n )\r\n}\r\n\r\ninterface DirectoryEntry {\r\n name: string\r\n path: string\r\n type: 'file' | 'directory'\r\n}\r\n\r\nfunction toEntry(cwd: string, dir: string, entry: { name: string; isDirectory(): boolean }): DirectoryEntry {\r\n return {\r\n name: entry.name,\r\n path: displayPath(cwd, join(dir, entry.name)),\r\n type: entry.isDirectory() ? 'directory' : 'file',\r\n }\r\n}\r\n\r\nasync function collectEntries(\r\n cwd: string,\r\n root: string,\r\n dir: string,\r\n max: number,\r\n): Promise<DirectoryEntry[]> {\r\n const entries: DirectoryEntry[] = []\r\n const children = await readdir(dir, { withFileTypes: true })\r\n for (const entry of children) {\r\n if (entries.length >= max) break\r\n entries.push(toEntry(cwd, dir, entry))\r\n if (entry.isDirectory()) {\r\n entries.push(...await collectEntries(cwd, root, join(dir, entry.name), max))\r\n }\r\n }\r\n return entries\r\n}\r\n\r\nfunction listDirTool(config: NormalizedBuiltinToolsConfig): ToolDefinition {\r\n return definition(\r\n 'list_dir',\r\n 'List directory entries inside the workspace. Returns [{ name, path, type }].',\r\n async (input) => {\r\n const args = record(input)\r\n const base = await resolveInside(config.cwd, optionalString(args.path, 'path') ?? '.')\r\n const stats = await stat(base)\r\n if (!stats.isDirectory()) throw new ToolInputError(`not a directory: ${args.path ?? '.'}`)\r\n const recursive = optionalBoolean(args.recursive, 'recursive') ?? false\r\n const entries = recursive\r\n ? await collectEntries(config.cwd, base, base, config.maxResults)\r\n : (await readdir(base, { withFileTypes: true }))\r\n .map(entry => toEntry(config.cwd, base, entry))\r\n return entries.slice(0, config.maxResults)\r\n },\r\n {\r\n type: 'object',\r\n properties: {\r\n path: { type: 'string', description: 'directory path relative to the workspace' },\r\n recursive: { type: 'boolean', description: 'include nested entries' },\r\n },\r\n },\r\n )\r\n}\r\n\r\nfunction normalizeGlobPattern(pattern: string): string {\r\n return pattern.replaceAll('\\\\', '/').replace(/^\\.\\//, '')\r\n}\r\n\r\nfunction globToRegExp(pattern: string): RegExp {\r\n let source = ''\r\n let index = 0\r\n while (index < pattern.length) {\r\n const char = pattern[index]!\r\n if (char === '*') {\r\n if (pattern[index + 1] === '*') {\r\n source += '.*'\r\n index += 2\r\n if (pattern[index] === '/') {\r\n source += '/?'\r\n index += 1\r\n }\r\n } else {\r\n source += '[^/]*'\r\n index += 1\r\n }\r\n } else if (char === '?') {\r\n source += '[^/]'\r\n index += 1\r\n } else {\r\n source += char.replace(/[\\\\^$+?.()|{}[\\]]/g, '\\\\$&')\r\n index += 1\r\n }\r\n }\r\n return new RegExp(`^${source}$`)\r\n}\r\n\r\nasync function walkFiles(\r\n cwd: string,\r\n root: string,\r\n dir: string,\r\n regex: RegExp,\r\n matches: string[],\r\n max: number,\r\n): Promise<void> {\r\n if (matches.length >= max) return\r\n const children = await readdir(dir, { withFileTypes: true })\r\n for (const entry of children) {\r\n if (matches.length >= max) return\r\n const target = join(dir, entry.name)\r\n if (entry.isDirectory()) {\r\n await walkFiles(cwd, root, target, regex, matches, max)\r\n } else if (entry.isFile()) {\r\n const rel = relative(root, target).split(sep).join('/')\r\n if (regex.test(rel)) matches.push(displayPath(cwd, target))\r\n }\r\n }\r\n}\r\n\r\nfunction globTool(config: NormalizedBuiltinToolsConfig): ToolDefinition {\r\n return definition(\r\n 'glob',\r\n 'Find files by glob pattern inside the workspace. Supports ** (any depth), * (within a segment) and ? (single character). Returns relative paths.',\r\n async (input) => {\r\n const args = record(input)\r\n const pattern = normalizeGlobPattern(stringField(args.pattern, 'pattern'))\r\n const root = await resolveInside(config.cwd, optionalString(args.base, 'base') ?? '.')\r\n const regex = globToRegExp(pattern)\r\n const matches: string[] = []\r\n await walkFiles(config.cwd, root, root, regex, matches, config.maxResults)\r\n return matches.slice(0, config.maxResults)\r\n },\r\n {\r\n type: 'object',\r\n properties: {\r\n pattern: { type: 'string', description: 'glob pattern, e.g. \"**/*.ts\"' },\r\n base: { type: 'string', description: 'directory to search, defaults to workspace root' },\r\n },\r\n required: ['pattern'],\r\n },\r\n )\r\n}\r\n\r\ninterface GrepMatch {\r\n file: string\r\n line: number\r\n text: string\r\n}\r\n\r\nasync function grepWalk(\r\n config: NormalizedBuiltinToolsConfig,\r\n root: string,\r\n dir: string,\r\n regex: RegExp,\r\n globRegex: RegExp | undefined,\r\n matches: GrepMatch[],\r\n max: number,\r\n): Promise<void> {\r\n if (matches.length >= max) return\r\n const children = await readdir(dir, { withFileTypes: true })\r\n for (const entry of children) {\r\n if (matches.length >= max) return\r\n const target = join(dir, entry.name)\r\n if (entry.isDirectory()) {\r\n await grepWalk(config, root, target, regex, globRegex, matches, max)\r\n continue\r\n }\r\n if (!entry.isFile()) continue\r\n const rel = relative(root, target).split(sep).join('/')\r\n if (globRegex && !globRegex.test(rel)) continue\r\n const stats = await stat(target)\r\n if (stats.size > config.maxSearchBytes) continue\r\n const buffer = await readFile(target)\r\n if (buffer.includes(0)) continue\r\n const lines = buffer.toString('utf8').split('\\n')\r\n for (let index = 0; index < lines.length; index += 1) {\r\n if (matches.length >= max) return\r\n const line = lines[index]!\r\n if (regex.test(line)) {\r\n matches.push({\r\n file: displayPath(config.cwd, target),\r\n line: index + 1,\r\n text: line,\r\n })\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction grepTool(config: NormalizedBuiltinToolsConfig): ToolDefinition {\r\n return definition(\r\n 'grep',\r\n 'Search text files for a regular expression. Returns [{ file, line, text }].',\r\n async (input) => {\r\n const args = record(input)\r\n const pattern = stringField(args.pattern, 'pattern')\r\n let regex: RegExp\r\n try {\r\n regex = new RegExp(pattern)\r\n } catch (error) {\r\n throw new ToolInputError(`invalid regular expression: ${message(error)}`)\r\n }\r\n const root = await resolveInside(config.cwd, optionalString(args.path, 'path') ?? '.')\r\n const globPattern = optionalString(args.glob, 'glob')\r\n const globRegex = globPattern ? globToRegExp(normalizeGlobPattern(globPattern)) : undefined\r\n const max = optionalNumber(args.maxResults, 'maxResults') ?? config.maxResults\r\n const matches: GrepMatch[] = []\r\n await grepWalk(config, root, root, regex, globRegex, matches, max)\r\n return matches\r\n },\r\n {\r\n type: 'object',\r\n properties: {\r\n pattern: { type: 'string', description: 'regular expression to search for' },\r\n path: { type: 'string', description: 'directory to search, defaults to workspace root' },\r\n glob: { type: 'string', description: 'optional file glob filter, e.g. \"**/*.md\"' },\r\n maxResults: { type: 'number', description: 'optional result limit' },\r\n },\r\n required: ['pattern'],\r\n },\r\n )\r\n}\r\n\r\nfunction httpGetTool(config: NormalizedBuiltinToolsConfig): ToolDefinition {\r\n return definition(\r\n 'http_get',\r\n 'Fetch a URL over HTTP(S) and return { status, ok, headers, body, truncated }.',\r\n async (input, options: ToolExecuteOptions) => {\r\n const args = record(input)\r\n const rawUrl = stringField(args.url, 'url')\r\n let url: URL\r\n try {\r\n url = new URL(rawUrl)\r\n } catch {\r\n throw new ToolInputError(`invalid URL: ${rawUrl}`)\r\n }\r\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\r\n throw new ToolInputError(`unsupported protocol: ${url.protocol}`)\r\n }\r\n const headers = optionalRecord(args.headers, 'headers') ?? {}\r\n const maxBytes = optionalNumber(args.maxBytes, 'maxBytes') ?? config.maxReadBytes\r\n return config.execution.fetchHttp({\r\n url: url.href,\r\n ...(Object.keys(headers).length ? { headers } : {}),\r\n ...(maxBytes !== config.maxReadBytes ? { maxBytes } : {}),\r\n ...(options.signal ? { signal: options.signal } : {}),\r\n })\r\n },\r\n {\r\n type: 'object',\r\n properties: {\r\n url: { type: 'string', description: 'http or https URL' },\r\n headers: {\r\n type: 'object',\r\n description: 'optional request headers',\r\n },\r\n maxBytes: { type: 'number', description: 'optional response body byte limit' },\r\n },\r\n required: ['url'],\r\n },\r\n )\r\n}\r\n\r\nfunction shellTool(config: NormalizedBuiltinToolsConfig): ToolDefinition {\r\n return definition(\r\n 'shell',\r\n 'Run a shell command inside the workspace and return { exitCode, stdout, stderr }. Disabled by default; enable with allowShell.',\r\n async (input, options: ToolExecuteOptions) => {\r\n const args = record(input)\r\n const command = stringField(args.command, 'command')\r\n const cwd = await resolveInside(config.cwd, optionalString(args.cwd, 'cwd') ?? '.')\r\n const timeoutMs = optionalNumber(args.timeoutMs, 'timeoutMs') ?? config.timeoutMs\r\n const result = await config.execution.runShell({\r\n command,\r\n cwd,\r\n timeoutMs,\r\n maxBuffer: config.maxWriteBytes,\r\n ...(options.signal ? { signal: options.signal } : {}),\r\n })\r\n return {\r\n exitCode: result.exitCode,\r\n stdout: result.stdout,\r\n stderr: result.stderr,\r\n }\r\n },\r\n {\r\n type: 'object',\r\n properties: {\r\n command: { type: 'string', description: 'shell command to run' },\r\n cwd: { type: 'string', description: 'working directory relative to the workspace' },\r\n timeoutMs: { type: 'number', description: 'optional timeout in milliseconds' },\r\n },\r\n required: ['command'],\r\n },\r\n )\r\n}\r\n\r\nexport function createBuiltinToolDefinitions(\r\n config: BuiltinToolsConfig = {},\r\n): ToolDefinition[] {\r\n const normalized = normalizeConfig(config)\r\n const disabled = new Set(normalized.disabled)\r\n const definitions: ToolDefinition[] = []\r\n if (!disabled.has('echo')) definitions.push(echoTool())\r\n if (!disabled.has('now')) definitions.push(nowTool())\r\n if (!disabled.has('calculator')) definitions.push(calculatorTool())\r\n if (!disabled.has('json')) definitions.push(jsonTool())\r\n if (!disabled.has('read_file')) definitions.push(readFileTool(normalized))\r\n if (!disabled.has('write_file')) definitions.push(writeFileTool(normalized))\r\n if (!disabled.has('list_dir')) definitions.push(listDirTool(normalized))\r\n if (!disabled.has('glob')) definitions.push(globTool(normalized))\r\n if (!disabled.has('grep')) definitions.push(grepTool(normalized))\r\n if (normalized.allowNetwork && !disabled.has('http_get')) {\r\n definitions.push(httpGetTool(normalized))\r\n }\r\n if (normalized.allowShell && !disabled.has('shell')) {\r\n definitions.push(shellTool(normalized))\r\n }\r\n return definitions\r\n}\r\n\r\nexport const builtinTools = {\r\n name: 'builtinTools',\r\n inject: ['tools'],\r\n apply(ctx: Context, config: BuiltinToolsConfig = {}) {\r\n const service = ctx.get('tools') as ToolsService\r\n for (const definition of createBuiltinToolDefinitions(config)) {\r\n service.register(definition)\r\n }\r\n },\r\n}\r\n\r\nexport const DEFAULT_BUILTIN_TOOL_NAMES: readonly string[] = DEFAULT_TOOL_NAMES\r\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 { spawn, type ChildProcess } from 'node:child_process'\r\n\r\nexport interface ShellRequest {\r\n command: string\r\n cwd: string\r\n timeoutMs?: number\r\n maxBuffer?: number\r\n signal?: AbortSignal\r\n}\r\n\r\nexport interface ShellResult {\r\n exitCode: number\r\n stdout: string\r\n stderr: string\r\n}\r\n\r\nexport interface HttpRequest {\r\n url: string\r\n headers?: Record<string, string>\r\n signal?: AbortSignal\r\n maxBytes?: number\r\n}\r\n\r\nexport interface HttpResponse {\r\n status: number\r\n ok: boolean\r\n headers: Record<string, string>\r\n body: string\r\n truncated: boolean\r\n}\r\n\r\n/** Replaceable execution boundary used by builtin network/shell tools. */\r\nexport interface ExecutionProvider {\r\n runShell(request: ShellRequest): Promise<ShellResult>\r\n fetchHttp(request: HttpRequest): Promise<HttpResponse>\r\n}\r\n\r\nfunction errorMessage(error: unknown): string {\r\n if (error instanceof Error) return error.message\r\n return String(error)\r\n}\r\n\r\nasync function killProcessTree(child: ChildProcess): Promise<void> {\r\n if (child.pid === undefined) return\r\n if (process.platform === 'win32') {\r\n await new Promise<void>((resolve) => {\r\n const killer = spawn('taskkill', ['/pid', String(child.pid), '/t', '/f'], {\r\n stdio: 'ignore',\r\n windowsHide: true,\r\n })\r\n killer.on('error', () => resolve())\r\n killer.on('exit', () => resolve())\r\n })\r\n } else {\r\n try {\r\n process.kill(-child.pid, 'SIGKILL')\r\n } catch {\r\n // Process group already gone.\r\n }\r\n child.kill('SIGKILL')\r\n }\r\n}\r\n\r\nfunction runLocalShell(request: ShellRequest): Promise<ShellResult> {\r\n const timeoutMs = request.timeoutMs ?? 15_000\r\n const maxBuffer = request.maxBuffer ?? 1024 * 1024\r\n return new Promise((resolve, reject) => {\r\n const child = spawn(request.command, {\r\n cwd: request.cwd,\r\n shell: true,\r\n windowsHide: true,\r\n ...(process.platform === 'win32' ? {} : { detached: true }),\r\n })\r\n let stdout = ''\r\n let stderr = ''\r\n let settled = false\r\n let timer: NodeJS.Timeout | undefined\r\n let onAbort: () => void = () => {}\r\n const append = (target: string, chunk: Buffer, limit: number): string => {\r\n if (target.length >= limit) return target\r\n return target + chunk.toString('utf8').slice(0, limit - target.length)\r\n }\r\n const cleanup = (): void => {\r\n if (timer) clearTimeout(timer)\r\n request.signal?.removeEventListener('abort', onAbort)\r\n }\r\n const finish = (action: () => void): void => {\r\n if (settled) return\r\n settled = true\r\n cleanup()\r\n action()\r\n }\r\n const fail = (message: string): void => {\r\n finish(() => {\r\n void killProcessTree(child).finally(() => reject(new Error(message)))\r\n })\r\n }\r\n onAbort = () => fail('shell command cancelled')\r\n if (request.signal) {\r\n if (request.signal.aborted) onAbort()\r\n else request.signal.addEventListener('abort', onAbort, { once: true })\r\n }\r\n if (timeoutMs > 0) {\r\n timer = setTimeout(() => fail(`shell command timed out after ${timeoutMs}ms`), timeoutMs)\r\n }\r\n child.stdout.on('data', (chunk: Buffer) => {\r\n stdout = append(stdout, chunk, maxBuffer)\r\n })\r\n child.stderr.on('data', (chunk: Buffer) => {\r\n stderr = append(stderr, chunk, maxBuffer)\r\n })\r\n child.on('error', (error) => {\r\n finish(() => resolve({ exitCode: 1, stdout, stderr: errorMessage(error) }))\r\n })\r\n child.on('close', (code, closeSignal) => {\r\n finish(() => resolve({\r\n exitCode: code ?? 1,\r\n stdout,\r\n stderr: closeSignal ? `killed by ${closeSignal}` : stderr,\r\n }))\r\n })\r\n })\r\n}\r\n\r\nexport const localExecutionProvider: ExecutionProvider = {\r\n runShell: runLocalShell,\r\n async fetchHttp(request) {\r\n const init: RequestInit = {}\r\n if (request.headers) init.headers = request.headers\r\n if (request.signal) init.signal = request.signal\r\n const response = await fetch(request.url, init)\r\n const buffer = Buffer.from(await response.arrayBuffer())\r\n const maxBytes = request.maxBytes ?? 256 * 1024\r\n const truncated = buffer.byteLength > maxBytes\r\n const headers: Record<string, string> = {}\r\n response.headers.forEach((value, key) => {\r\n headers[key] = value\r\n })\r\n return {\r\n status: response.status,\r\n ok: response.ok,\r\n headers,\r\n body: buffer.subarray(0, maxBytes).toString('utf8'),\r\n truncated,\r\n }\r\n },\r\n}\r\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 { ToolInputError } from './builtins.js'\nimport type {\n ToolDefinition,\n ToolParameterSchema,\n ToolRequest,\n ToolResult,\n} from './index.js'\n\nexport type ToolInputValidator = (\n input: unknown,\n tool: ToolDefinition,\n) => void | Promise<void>\n\nexport type ToolAuthorizer = (\n request: ToolRequest,\n) => boolean | Promise<boolean>\n\nexport type ToolResultTruncator = (\n result: ToolResult,\n request: ToolRequest,\n) => ToolResult | Promise<ToolResult>\n\nexport interface ToolPolicy {\n validator?: ToolInputValidator\n authorizer?: ToolAuthorizer\n truncator?: ToolResultTruncator\n}\n\nexport class ToolAuthorizationError extends Error {\n override name = 'ToolAuthorizationError'\n}\n\nfunction typeName(value: unknown): string {\n if (value === null) return 'null'\n if (Array.isArray(value)) return 'array'\n return typeof value\n}\n\nfunction matchesType(value: unknown, type: string): boolean {\n switch (type) {\n case 'string':\n return typeof value === 'string'\n case 'number':\n return typeof value === 'number' && Number.isFinite(value)\n case 'integer':\n return typeof value === 'number' && Number.isInteger(value)\n case 'boolean':\n return typeof value === 'boolean'\n case 'object':\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n case 'array':\n return Array.isArray(value)\n case 'null':\n return value === null\n default:\n return true\n }\n}\n\nexport function validateSchema(\n input: unknown,\n schema: ToolParameterSchema | undefined,\n): string[] {\n if (!schema) return []\n\n const issues: string[] = []\n if (schema.type && !matchesType(input, schema.type)) {\n issues.push(`expected ${schema.type}, received ${typeName(input)}`)\n return issues\n }\n\n const objectLike = schema.type === 'object'\n || Boolean(schema.properties)\n || (schema.required?.length ?? 0) > 0\n if (objectLike && (typeof input !== 'object' || input === null || Array.isArray(input))) {\n issues.push('expected object')\n return issues\n }\n if (!objectLike || typeof input !== 'object' || input === null || Array.isArray(input)) {\n return issues\n }\n\n const record = input as Record<string, unknown>\n for (const key of schema.required ?? []) {\n if (!(key in record)) issues.push(`missing required property: ${key}`)\n }\n\n for (const [key, raw] of Object.entries(schema.properties ?? {})) {\n const value = record[key]\n if (value === undefined) continue\n if (!raw || typeof raw !== 'object') continue\n const property = raw as ToolParameterSchema\n const nested = validateSchema(value, property)\n if (nested.length) issues.push(...nested.map(issue => `${key}.${issue}`))\n if (Array.isArray(property.enum) && !property.enum.includes(value)) {\n issues.push(`${key} must be one of ${property.enum.join(', ')}`)\n }\n }\n\n if (schema.type === 'array' && Array.isArray(input) && schema.items) {\n const itemSchema = schema.items as ToolParameterSchema\n for (let index = 0; index < input.length; index += 1) {\n const nested = validateSchema(input[index], itemSchema)\n if (nested.length) issues.push(...nested.map(issue => `[${index}].${issue}`))\n }\n }\n\n return issues\n}\n\nexport function validateToolInput(input: unknown, tool: ToolDefinition): void {\n const issues = validateSchema(input, tool.schema.parameters)\n if (issues.length) throw new ToolInputError(issues.join('; '))\n}\n", "import type { Context, Disposable } from '@tnega/core'\r\nimport { Service } from '@tnega/core'\r\nimport { ToolAuthorizationError, validateToolInput } from './policy.js'\r\nimport type {\r\n ToolAuthorizer,\r\n ToolInputValidator,\r\n ToolPolicy,\r\n ToolResultTruncator,\r\n} from './policy.js'\r\n\r\nexport * from './builtins.js'\r\nexport * from './calc.js'\r\nexport * from './path.js'\r\nexport * from './execution.js'\r\nexport {\r\n ToolAuthorizationError,\r\n validateSchema,\r\n validateToolInput,\r\n type ToolAuthorizer,\r\n type ToolInputValidator,\r\n type ToolPolicy,\r\n type ToolResultTruncator,\r\n} from './policy.js'\r\n\r\nexport interface ToolParameterSchema {\r\n type?: string\r\n properties?: Record<string, unknown>\r\n required?: string[]\r\n [key: string]: unknown\r\n}\r\n\r\nexport interface ToolSchema {\r\n name: string\r\n description: string\r\n parameters?: ToolParameterSchema\r\n}\r\n\r\nexport interface ToolExecuteOptions {\r\n callId?: string\r\n signal?: AbortSignal\r\n /** Runtime opt-in: mark a successful result as concluding the agent turn. */\r\n concludesTurn?: boolean\r\n [key: string]: unknown\r\n}\r\n\r\nexport type ToolExecutor = (\r\n input: unknown,\r\n options: ToolExecuteOptions,\r\n) => unknown | Promise<unknown>\r\n\r\nexport interface ToolDefinition {\r\n schema: ToolSchema\r\n execute: ToolExecutor\r\n metadata?: Record<string, unknown>\r\n policy?: ToolPolicy\r\n}\r\n\r\nexport interface ToolError {\r\n name: string\r\n message: string\r\n stack?: string\r\n}\r\n\r\nexport interface ToolResult {\r\n ok: boolean\r\n name: string\r\n callId?: string\r\n input: unknown\r\n output?: unknown\r\n error?: ToolError\r\n /** When true, the agent turn should stop after this tool result. */\r\n concludesTurn?: boolean\r\n startedAt: number\r\n durationMs: number\r\n}\r\n\r\nexport interface ToolRequest {\r\n tool: ToolDefinition\r\n name: string\r\n input: unknown\r\n options: ToolExecuteOptions\r\n startedAt: number\r\n}\r\n\r\nexport interface ToolStagePayload {\r\n request: ToolRequest\r\n result: ToolResult\r\n}\r\n\r\nexport interface ToolsConfig extends ToolPolicy {\r\n [key: string]: unknown\r\n}\r\n\r\n/**\r\n * Final pre-dispatch check evaluated after the `tools/pre-execute` waterfall.\r\n * A returned reason denies the call; `undefined` leaves it unchanged. Guards\r\n * are monotonic: no later listener can re-allow a denied call.\r\n */\r\nexport type ToolGuard = (\r\n request: ToolRequest,\r\n) => string | undefined | Promise<string | undefined>\r\n\r\nexport class ToolNotFoundError extends Error {\r\n override name = 'ToolNotFoundError'\r\n\r\n constructor(readonly toolName: string) {\r\n super(`tool not found: ${toolName}`)\r\n }\r\n}\r\n\r\nexport class ToolAlreadyRegisteredError extends Error {\r\n override name = 'ToolAlreadyRegisteredError'\r\n\r\n constructor(readonly toolName: string) {\r\n super(`tool already registered: ${toolName}`)\r\n }\r\n}\r\n\r\nfunction toToolError(error: unknown): ToolError {\r\n if (error instanceof Error) {\r\n const result: ToolError = {\r\n name: error.name,\r\n message: error.message,\r\n }\r\n if (error.stack) result.stack = error.stack\r\n return result\r\n }\r\n return {\r\n name: 'ToolExecutionError',\r\n message: String(error),\r\n }\r\n}\r\n\r\nexport class ToolsService extends Service<never> {\r\n static provide = 'tools'\r\n\r\n private _tools = new Map<string, ToolDefinition>()\r\n private _guards = new Set<ToolGuard>()\r\n private _policy: {\r\n validator: ToolInputValidator\r\n authorizer?: ToolAuthorizer\r\n truncator?: ToolResultTruncator\r\n }\r\n\r\n constructor(ctx: Context, config: ToolsConfig = {}) {\r\n super(ctx, 'tools')\r\n this._policy = {\r\n validator: config.validator ?? validateToolInput,\r\n }\r\n if (config.authorizer !== undefined) this._policy.authorizer = config.authorizer\r\n if (config.truncator !== undefined) this._policy.truncator = config.truncator\r\n }\r\n\r\n register(definition: ToolDefinition): Disposable {\r\n this._validate(definition)\r\n const name = definition.schema.name\r\n return this.ctx.fiber.effect(() => {\r\n if (this._tools.has(name)) {\r\n throw new ToolAlreadyRegisteredError(name)\r\n }\r\n this._tools.set(name, definition)\r\n this.ctx.emit('tools/change')\r\n return () => {\r\n this._tools.delete(name)\r\n this.ctx.emit('tools/change')\r\n }\r\n }, `ctx.tools.register(${JSON.stringify(name)})`)\r\n }\r\n\r\n unregister(name: string): boolean {\r\n const removed = this._tools.delete(name)\r\n if (removed) this.ctx.emit('tools/change')\r\n return removed\r\n }\r\n\r\n /** Register a monotonic guard evaluated after pre-execute policy. */\r\n guard(guard: ToolGuard): Disposable {\r\n if (typeof guard !== 'function') throw new TypeError('tool guard must be a function')\r\n return this.ctx.fiber.effect(() => {\r\n this._guards.add(guard)\r\n return () => {\r\n this._guards.delete(guard)\r\n }\r\n }, 'ctx.tools.guard()')\r\n }\r\n\r\n has(name: string): boolean {\r\n return this._tools.has(name)\r\n }\r\n\r\n list(): readonly ToolDefinition[] {\r\n return [...this._tools.values()]\r\n }\r\n\r\n toSpecs(): readonly ToolSchema[] {\r\n return this.list().map(tool => tool.schema)\r\n }\r\n\r\n async execute(\r\n name: string,\r\n input: unknown,\r\n options: ToolExecuteOptions = {},\r\n ): Promise<ToolResult> {\r\n const tool = this._tools.get(name)\r\n if (!tool) throw new ToolNotFoundError(name)\r\n\r\n let request: ToolRequest = {\r\n tool,\r\n name,\r\n input,\r\n options,\r\n startedAt: Date.now(),\r\n }\r\n\r\n let preError: unknown\r\n try {\r\n const resolved = await this.ctx.waterfallAsync(\r\n 'tools/pre-execute',\r\n request,\r\n async (payload: ToolRequest) => {\r\n await this._applyPolicy(payload)\r\n return payload\r\n },\r\n )\r\n if (!resolved) {\r\n throw new ToolAuthorizationError(`tool rejected by tools/pre-execute: ${name}`)\r\n }\r\n request = resolved\r\n const denial = await this._checkGuards(request)\r\n if (denial) throw new ToolAuthorizationError(denial)\r\n } catch (error) {\r\n preError = error\r\n }\r\n\r\n let result: ToolResult | undefined\r\n try {\r\n if (!preError) {\r\n result = await this.ctx.waterfallAsync(\r\n 'tools/execute',\r\n request,\r\n async (payload: ToolRequest) => {\r\n const output = await payload.tool.execute(payload.input, payload.options)\r\n return this._success(payload, output)\r\n },\r\n )\r\n }\r\n } catch (error) {\r\n result = this._failure(request, error)\r\n }\r\n if (preError) result = this._failure(request, preError)\r\n if (!result) {\r\n result = this._failure(\r\n request,\r\n new Error('tools/execute did not return a tool result'),\r\n )\r\n }\r\n\r\n try {\r\n const normalized = await this.ctx.waterfallAsync(\r\n 'tools/post-execute',\r\n { request, result },\r\n async (payload: ToolStagePayload) => {\r\n const policy = payload.request.tool.policy\r\n const truncator = policy?.truncator ?? this._policy.truncator\r\n return truncator\r\n ? await truncator(payload.result, payload.request)\r\n : payload.result\r\n },\r\n )\r\n if (normalized && typeof normalized.ok === 'boolean') result = normalized\r\n } catch (error) {\r\n result = this._failure(request, error)\r\n }\r\n\r\n return this._finish(\r\n request,\r\n result ?? this._failure(\r\n request,\r\n new Error('tools/execute did not return a tool result'),\r\n ),\r\n )\r\n }\r\n\r\n private async _finish(\r\n request: ToolRequest,\r\n result: ToolResult,\r\n ): Promise<ToolResult> {\r\n await this.ctx.parallel('tools/result', { request, result })\r\n return result\r\n }\r\n\r\n private async _applyPolicy(request: ToolRequest): Promise<void> {\r\n const policy = request.tool.policy\r\n const authorizer = policy?.authorizer ?? this._policy.authorizer\r\n if (authorizer) {\r\n const allowed = await authorizer(request)\r\n if (!allowed) {\r\n throw new ToolAuthorizationError(`tool authorization denied: ${request.name}`)\r\n }\r\n }\r\n const validator = policy?.validator ?? this._policy.validator\r\n if (validator) await validator(request.input, request.tool)\r\n }\r\n\r\n private async _checkGuards(request: ToolRequest): Promise<string | undefined> {\r\n for (const guard of this._guards) {\r\n const denial = await guard(request)\r\n if (denial) return denial\r\n }\r\n return undefined\r\n }\r\n\r\n private _validate(definition: ToolDefinition): void {\r\n if (!definition || typeof definition.schema?.name !== 'string' || !definition.schema.name) {\r\n throw new TypeError('tool definition requires a non-empty schema.name')\r\n }\r\n if (typeof definition.execute !== 'function') {\r\n throw new TypeError(`tool \"${definition.schema.name}\" requires an execute function`)\r\n }\r\n }\r\n\r\n private _success(request: ToolRequest, output: unknown): ToolResult {\r\n const result: ToolResult = {\r\n ok: true,\r\n name: request.name,\r\n input: request.input,\r\n output,\r\n startedAt: request.startedAt,\r\n durationMs: Date.now() - request.startedAt,\r\n }\r\n if (request.options.callId) result.callId = request.options.callId\r\n this._applyConcludesTurn(request, result)\r\n return result\r\n }\r\n\r\n private _failure(request: ToolRequest, error: unknown): ToolResult {\r\n const result: ToolResult = {\r\n ok: false,\r\n name: request.name,\r\n input: request.input,\r\n error: toToolError(error),\r\n startedAt: request.startedAt,\r\n durationMs: Date.now() - request.startedAt,\r\n }\r\n if (request.options.callId) result.callId = request.options.callId\r\n return result\r\n }\r\n\r\n private _applyConcludesTurn(request: ToolRequest, result: ToolResult): void {\r\n const staticDeclares = (request.tool.metadata as { concludesTurn?: unknown } | undefined)\r\n ?.concludesTurn\r\n if (staticDeclares === true || request.options.concludesTurn === true) {\r\n result.concludesTurn = true\r\n }\r\n }\r\n}\r\n\r\nexport const tools = {\r\n name: 'tools',\r\n apply(ctx: Context, config: ToolsConfig = {}) {\r\n new ToolsService(ctx, config)\r\n },\r\n}\r\n\r\nexport const name = '@tnega/tools'\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["target", "value", "name", "lines", "name", "message", "name", "config", "task", "dispose", "resolve", "message", "name", "name", "value", "name", "name", "name", "dirname", "relative", "sep", "message", "name", "resolve", "fail", "message", "name", "relative", "sep", "dirname", "definition", "record", "definition", "name"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Context, Plugin } from "../../core/src/index.js";
|
|
2
|
+
import type { ToolDefinition } from "../../tools/src/index.js";
|
|
3
|
+
import { type AgentConfig } from './service.js';
|
|
4
|
+
import type { AgentHooks, AgentLoop } from './types.js';
|
|
5
|
+
export type AgentDefinitionHooks = AgentHooks;
|
|
6
|
+
export interface AgentDefinition {
|
|
7
|
+
name: string;
|
|
8
|
+
version?: string;
|
|
9
|
+
system?: string | ((ctx: Context) => string);
|
|
10
|
+
tools?: readonly ToolDefinition[];
|
|
11
|
+
loop?: AgentLoop;
|
|
12
|
+
hooks?: AgentDefinitionHooks;
|
|
13
|
+
}
|
|
14
|
+
export interface DefineAgentConfig extends Partial<Pick<AgentConfig, 'llm' | 'maxTurns' | 'maxSteps' | 'inbox' | 'contextBudget'>> {
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
}
|
|
17
|
+
export declare function defineAgent(definition: AgentDefinition): Plugin;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { SessionLog } from "../../session/src/index.js";
|
|
2
|
+
export type DurableTarget = 'next-turn' | 'next-step';
|
|
3
|
+
export interface DurableInboxMessage {
|
|
4
|
+
id: string;
|
|
5
|
+
text?: string;
|
|
6
|
+
content?: unknown;
|
|
7
|
+
}
|
|
8
|
+
export declare class DurableInbox {
|
|
9
|
+
private _session;
|
|
10
|
+
private _nextTurn;
|
|
11
|
+
private _nextStep;
|
|
12
|
+
constructor(_session: SessionLog);
|
|
13
|
+
get size(): number;
|
|
14
|
+
insert(input: {
|
|
15
|
+
text?: string;
|
|
16
|
+
content?: unknown;
|
|
17
|
+
}, target?: DurableTarget): Promise<DurableInboxMessage>;
|
|
18
|
+
steer(input: {
|
|
19
|
+
text?: string;
|
|
20
|
+
content?: unknown;
|
|
21
|
+
}): Promise<DurableInboxMessage>;
|
|
22
|
+
claim(): Promise<DurableInboxMessage | undefined>;
|
|
23
|
+
/**
|
|
24
|
+
* Claim the complete proposed step batch: every pending next-step input plus
|
|
25
|
+
* one next-turn message at a turn boundary. Returns an empty array when
|
|
26
|
+
* nothing is pending.
|
|
27
|
+
*/
|
|
28
|
+
claimBatch(): Promise<DurableInboxMessage[]>;
|
|
29
|
+
clear(): Promise<void>;
|
|
30
|
+
/** Insert a message at an explicit target/index boundary. */
|
|
31
|
+
insertAt(input: {
|
|
32
|
+
text?: string;
|
|
33
|
+
content?: unknown;
|
|
34
|
+
}, target: DurableTarget, index: number, mode?: 'followup' | 'steer'): Promise<DurableInboxMessage>;
|
|
35
|
+
/**
|
|
36
|
+
* Replace one pending message by id. The old message is emitted as
|
|
37
|
+
* discarded and the new one as inserted, matching the DSH inbox contract.
|
|
38
|
+
*/
|
|
39
|
+
replace(messageId: string, input: {
|
|
40
|
+
text?: string;
|
|
41
|
+
content?: unknown;
|
|
42
|
+
}): Promise<DurableInboxMessage | undefined>;
|
|
43
|
+
/** Remove one pending message by id. */
|
|
44
|
+
remove(messageId: string): Promise<DurableInboxMessage | undefined>;
|
|
45
|
+
/** Return the first pending message by id across both queues. */
|
|
46
|
+
get(messageId: string): DurableInboxMessage | undefined;
|
|
47
|
+
snapshot(): {
|
|
48
|
+
nextTurn: readonly DurableInboxMessage[];
|
|
49
|
+
nextStep: readonly DurableInboxMessage[];
|
|
50
|
+
};
|
|
51
|
+
private _find;
|
|
52
|
+
static restore(session: SessionLog): Promise<DurableInbox>;
|
|
53
|
+
private _applyAll;
|
|
54
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import type { Context } from "../../core/src/index.js";
|
|
2
|
+
import { SessionLog } from "../../session/src/index.js";
|
|
3
|
+
import { type DurableInboxMessage } from './inbox-durable.js';
|
|
4
|
+
import type { AgentCancelCause, AgentContextBudget, AgentHooks, AgentInput, AgentStreamEvent, LLMAdapter } from './types.js';
|
|
5
|
+
export interface AgentSessionMeta {
|
|
6
|
+
agentId: string;
|
|
7
|
+
agentType?: 'general' | 'coding';
|
|
8
|
+
mode?: 'auto' | 'plan' | 'execute';
|
|
9
|
+
title?: string;
|
|
10
|
+
owner?: string;
|
|
11
|
+
parentSessionId?: string;
|
|
12
|
+
forkedAtMessageId?: string;
|
|
13
|
+
createdAt?: number;
|
|
14
|
+
}
|
|
15
|
+
/** Synchronous finalizer invoked immediately before agent publication. */
|
|
16
|
+
export interface AgentSetupCommit {
|
|
17
|
+
commit(): void;
|
|
18
|
+
}
|
|
19
|
+
/** Compose an unpublished agent scope; a throw rejects the whole creation. */
|
|
20
|
+
export type AgentSetup = (agentCtx: Context) => AgentSetupCommit | Promise<AgentSetupCommit | void> | void;
|
|
21
|
+
export interface LiveInboxView {
|
|
22
|
+
readonly size: number;
|
|
23
|
+
snapshot(): {
|
|
24
|
+
nextTurn: readonly DurableInboxMessage[];
|
|
25
|
+
nextStep: readonly DurableInboxMessage[];
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export type AgentStatus = 'idle' | 'running';
|
|
29
|
+
export interface AgentCancelOptions {
|
|
30
|
+
keepInbox?: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface LiveAgent {
|
|
33
|
+
readonly id: string;
|
|
34
|
+
readonly meta: AgentSessionMeta;
|
|
35
|
+
readonly agentType: 'general' | 'coding' | undefined;
|
|
36
|
+
readonly mode: 'auto' | 'plan' | 'execute' | undefined;
|
|
37
|
+
readonly owner: string | undefined;
|
|
38
|
+
readonly parentSessionId: string | undefined;
|
|
39
|
+
readonly status: AgentStatus;
|
|
40
|
+
readonly inbox: LiveInboxView;
|
|
41
|
+
readonly session: SessionLog;
|
|
42
|
+
readonly ctx: Context;
|
|
43
|
+
/** The scoped context setup composes before publication. */
|
|
44
|
+
readonly agentCtx: Context;
|
|
45
|
+
followup(input: AgentInput): void;
|
|
46
|
+
steer(input: AgentInput): void;
|
|
47
|
+
replaceMessage(messageId: string, input: AgentInput): void;
|
|
48
|
+
removeMessage(messageId: string): void;
|
|
49
|
+
inject(key: string, value: unknown): void;
|
|
50
|
+
send(input: AgentInput, options?: {
|
|
51
|
+
mode?: 'followup' | 'steer';
|
|
52
|
+
}): void;
|
|
53
|
+
cancel(cause: AgentCancelCause, options?: AgentCancelOptions): void;
|
|
54
|
+
whenIdle(): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Drain currently queued durable work as a live event stream, one turn per
|
|
57
|
+
* claimed inbox item. In manual-streaming mode this is the only drain; the
|
|
58
|
+
* generator settles when the queue is empty, so callers stream a run and
|
|
59
|
+
* stop at quiescence.
|
|
60
|
+
*/
|
|
61
|
+
runTurns(signal?: AbortSignal): AsyncGenerator<AgentStreamEvent, void, void>;
|
|
62
|
+
runMaintenance<T>(task: (signal: AbortSignal) => Promise<T>): Promise<T>;
|
|
63
|
+
dispose(): Promise<void>;
|
|
64
|
+
}
|
|
65
|
+
export interface AgentHandle {
|
|
66
|
+
agent: LiveAgent;
|
|
67
|
+
dispose(): Promise<void>;
|
|
68
|
+
}
|
|
69
|
+
export interface AgentCreationOptions {
|
|
70
|
+
file: string;
|
|
71
|
+
/** Stable identity shared by this process and future resumes. */
|
|
72
|
+
sessionId?: string;
|
|
73
|
+
agentType?: 'general' | 'coding';
|
|
74
|
+
mode?: 'auto' | 'plan' | 'execute';
|
|
75
|
+
title?: string;
|
|
76
|
+
owner?: string;
|
|
77
|
+
parentSessionId?: string;
|
|
78
|
+
forkedAtMessageId?: string;
|
|
79
|
+
id?: string;
|
|
80
|
+
/** Optional composition callback run before the agent is published. */
|
|
81
|
+
setup?: AgentSetup;
|
|
82
|
+
llm?: LLMAdapter;
|
|
83
|
+
system?: string;
|
|
84
|
+
maxTurns?: number;
|
|
85
|
+
maxSteps?: number;
|
|
86
|
+
contextBudget?: AgentContextBudget;
|
|
87
|
+
hooks?: AgentHooks;
|
|
88
|
+
initial?: readonly AgentInput[];
|
|
89
|
+
/** Disable the automatic drain; callers drive turns via `runTurns`. */
|
|
90
|
+
manualStreaming?: boolean;
|
|
91
|
+
}
|
|
92
|
+
export interface AgentFactory {
|
|
93
|
+
create(options: AgentCreationOptions): Promise<AgentHandle>;
|
|
94
|
+
resume(options: AgentCreationOptions): Promise<AgentHandle>;
|
|
95
|
+
}
|
|
96
|
+
export declare class AgentRegistry {
|
|
97
|
+
private _ctx;
|
|
98
|
+
private _agents;
|
|
99
|
+
private _owners;
|
|
100
|
+
private _factory;
|
|
101
|
+
constructor(_ctx: Context);
|
|
102
|
+
setFactory(factory: AgentFactory): () => void;
|
|
103
|
+
create(options: AgentCreationOptions): Promise<AgentHandle>;
|
|
104
|
+
resume(options: AgentCreationOptions): Promise<AgentHandle>;
|
|
105
|
+
get(id: string): LiveAgent | undefined;
|
|
106
|
+
list(): LiveAgent[];
|
|
107
|
+
roots(): LiveAgent[];
|
|
108
|
+
isOwnedBy(id: string, owner: string): boolean;
|
|
109
|
+
private _dispose;
|
|
110
|
+
}
|
|
111
|
+
export declare const agents: {
|
|
112
|
+
name: string;
|
|
113
|
+
inject: string[];
|
|
114
|
+
apply: (ctx: Context) => () => void;
|
|
115
|
+
};
|