{"version":3,"file":"program-methods.mjs","names":[],"sources":["../../src/core/program-methods.ts"],"sourcesContent":["import type { Schema } from 'ai';\nimport type { ShellType } from '../feature/completion.ts';\nimport { createReplIterator } from '../feature/repl-loop.ts';\nimport { generateHelp } from '../output/help.ts';\nimport type {\n  AnyPadroneCommand,\n  AnyPadroneProgram,\n  InterceptorExecuteContext,\n  InterceptorExecuteResult,\n  PadroneActionContext,\n  PadroneAPI,\n  PadroneReplPreferences,\n} from '../types/index.ts';\nimport { extractSchemaMetadata, parsePositionalConfig } from './args.ts';\nimport { findCommandByName, getCommandRuntime, resolveAllCommands } from './commands.ts';\nimport { RoutingError } from './errors.ts';\nimport type { ExecContext } from './exec.ts';\nimport { collectInterceptors, errorResultWithSignal, execCommand } from './exec.ts';\nimport { resolveRegisteredInterceptors, runInterceptorChain } from './interceptors.ts';\nimport { errorResult, makeThenable, thenMaybe, warnIfUnexpectedAsync, withDrain, withPromiseDrain } from './results.ts';\nimport { coreValidateForParse } from './validate.ts';\n\nexport function createProgramMethods(ctx: ExecContext, evalCommand: AnyPadroneProgram['eval']) {\n  const { rootCommand } = ctx;\n\n  // A never-aborted signal for contexts that don't need signal handling (parse, run).\n  const inertSignal = new AbortController().signal;\n\n  const stringify: AnyPadroneProgram['stringify'] = (command = '' as any, args) => {\n    const commandObj = typeof command === 'string' ? findCommandByName(command, rootCommand.commands) : (command as AnyPadroneCommand);\n    if (!commandObj) throw new RoutingError(`Command \"${command ?? ''}\" not found`);\n\n    const parts: string[] = [];\n\n    if (commandObj.path) parts.push(commandObj.path);\n\n    const positionalConfig = commandObj.meta?.positional ? parsePositionalConfig(commandObj.meta.positional) : [];\n    const positionalNames = new Set(positionalConfig.map((p) => p.name));\n\n    // Build reverse map: arg name → first negative keyword (for stringify)\n    const negativeKeyword: Record<string, string> = {};\n    if (commandObj.argsSchema) {\n      const { negatives } = extractSchemaMetadata(commandObj.argsSchema, commandObj.meta?.fields, commandObj.meta?.autoAlias);\n      for (const [keyword, argName] of Object.entries(negatives)) {\n        if (!(argName in negativeKeyword)) negativeKeyword[argName] = keyword;\n      }\n    }\n\n    if (args && typeof args === 'object') {\n      for (const { name, variadic } of positionalConfig) {\n        const value = (args as Record<string, unknown>)[name];\n        if (value === undefined) continue;\n\n        if (variadic && Array.isArray(value)) {\n          for (const v of value) {\n            const vStr = String(v);\n            if (vStr.includes(' ')) parts.push(`\"${vStr}\"`);\n            else parts.push(vStr);\n          }\n        } else {\n          const argStr = String(value);\n          if (argStr.includes(' ')) parts.push(`\"${argStr}\"`);\n          else parts.push(argStr);\n        }\n      }\n\n      const stringifyValue = (key: string, value: unknown) => {\n        if (value === undefined) return;\n\n        if (typeof value === 'boolean') {\n          if (value) parts.push(`--${key}`);\n          else if (negativeKeyword[key]) parts.push(`--${negativeKeyword[key]}`);\n          else parts.push(`--no-${key}`);\n        } else if (Array.isArray(value)) {\n          for (const v of value) {\n            const vStr = String(v);\n            if (vStr.includes(' ')) parts.push(`--${key}=\"${vStr}\"`);\n            else parts.push(`--${key}=${vStr}`);\n          }\n        } else if (typeof value === 'object' && value !== null) {\n          for (const [nestedKey, nestedValue] of Object.entries(value)) {\n            stringifyValue(`${key}.${nestedKey}`, nestedValue);\n          }\n        } else if (typeof value === 'string') {\n          if (value.includes(' ')) parts.push(`--${key}=\"${value}\"`);\n          else parts.push(`--${key}=${value}`);\n        } else {\n          parts.push(`--${key}=${value}`);\n        }\n      };\n\n      for (const [key, value] of Object.entries(args)) {\n        if (value === undefined || positionalNames.has(key)) continue;\n        stringifyValue(key, value);\n      }\n    }\n\n    return parts.join(' ');\n  };\n\n  const resolveContext = (command: AnyPadroneCommand, initialContext: unknown): unknown => {\n    const chain: AnyPadroneCommand[] = [];\n    let current: AnyPadroneCommand | undefined = command;\n    while (current) {\n      chain.unshift(current);\n      current = current.parent;\n    }\n    let resolved = initialContext;\n    for (const cmd of chain) {\n      if (cmd.contextTransform) resolved = cmd.contextTransform(resolved);\n    }\n    return resolved;\n  };\n\n  const run: AnyPadroneProgram['run'] = (command, args, prefs?: { context?: unknown }) => {\n    try {\n      const commandObj = typeof command === 'string' ? findCommandByName(command, rootCommand.commands) : (command as AnyPadroneCommand);\n      if (!commandObj) throw new RoutingError(`Command \"${command ?? ''}\" not found`);\n      if (!commandObj.action) throw new RoutingError(`Command \"${commandObj.path}\" has no action`, { command: commandObj.path });\n\n      const resolvedCtx = resolveContext(commandObj, prefs?.context);\n      const commandRuntime = getCommandRuntime(commandObj);\n      const executeCtx: InterceptorExecuteContext = {\n        command: commandObj,\n        input: undefined,\n        rawArgs: {},\n        positionalArgs: [],\n        args,\n        signal: inertSignal,\n        context: resolvedCtx as object,\n        runtime: commandRuntime,\n        program: ctx.builder as any,\n        caller: 'run',\n      };\n\n      const coreExecute = (executeCtx: InterceptorExecuteContext): InterceptorExecuteResult => {\n        const actionCtx: PadroneActionContext = {\n          runtime: executeCtx.runtime,\n          command: executeCtx.command,\n          program: ctx.builder as any,\n          signal: inertSignal,\n          context: executeCtx.context,\n          caller: 'run',\n        };\n        const result = commandObj.action!(executeCtx.args as any, actionCtx);\n        return { result };\n      };\n\n      const commandInterceptors = resolveRegisteredInterceptors(collectInterceptors(commandObj, rootCommand), new Map());\n      const executedOrPromise = runInterceptorChain('execute', commandInterceptors, executeCtx, coreExecute);\n\n      const toResult = (e: InterceptorExecuteResult) => withDrain({ command: commandObj as any, args: args as any, result: e.result });\n\n      if (executedOrPromise instanceof Promise) {\n        return executedOrPromise.then(toResult).catch((err: unknown) => errorResult(err, { command: commandObj, args })) as any;\n      }\n      return toResult(executedOrPromise);\n    } catch (err) {\n      return errorResult(err) as any;\n    }\n  };\n\n  const tool: AnyPadroneProgram['tool'] = () => {\n    resolveAllCommands(rootCommand);\n    const helpText = generateHelp(rootCommand, undefined, { format: 'text' });\n\n    const description = `Run a command. Pass the full command string including arguments. Use \"help <command>\" for detailed usage.\\n\\n${helpText}`;\n\n    return {\n      type: 'function',\n      name: rootCommand.name,\n      strict: true,\n      title: rootCommand.description,\n      description,\n      inputExamples: [{ input: { command: '<command> [positionals...] [arguments...]' } }],\n      inputSchema: {\n        [Symbol.for('vercel.ai.schema') as keyof Schema & symbol]: true,\n        jsonSchema: {\n          type: 'object',\n          properties: { command: { type: 'string' } },\n          additionalProperties: false,\n        },\n        _type: undefined as unknown as { command: string },\n        validate: (value) => {\n          const command = (value as any)?.command;\n          if (typeof command === 'string') return { success: true, value: { command } };\n          return { success: false, error: new Error('Expected an object with command property as string.') };\n        },\n      } satisfies Schema<{ command: string }> as Schema<{ command: string }>,\n      needsApproval: async (input) => {\n        const parsed = await parse(input.command);\n        if (typeof parsed.command.needsApproval === 'function') return parsed.command.needsApproval(parsed.args);\n        if (parsed.command.needsApproval != null) return !!parsed.command.needsApproval;\n        return !!parsed.command.mutation;\n      },\n      execute: async (input) => {\n        const output: string[] = [];\n        const errors: string[] = [];\n        const result = await evalCommand(input.command, {\n          caller: 'tool',\n          runtime: {\n            output: (...args) => output.push(args.map(String).join(' ')),\n            error: (text) => errors.push(text),\n            interactive: 'unsupported',\n            format: 'text',\n          },\n        });\n        return { result: result.result, logs: output.join('\\n'), error: errors.join('\\n') };\n      },\n    };\n  };\n\n  const replActiveRef = { value: false };\n  const replFn = (options?: PadroneReplPreferences) =>\n    createReplIterator({ existingCommand: rootCommand, evalCommand, replActiveRef }, options);\n\n  const cli: AnyPadroneProgram['cli'] = (cliOptions) => {\n    try {\n      const runtime = getCommandRuntime(rootCommand);\n      const resolvedInput = (runtime.argv().join(' ') || undefined) as string | undefined;\n\n      const result = execCommand(resolvedInput, ctx, cliOptions, 'hard', 'cli');\n\n      if (result instanceof Promise) return withPromiseDrain(result.catch((err: unknown) => errorResultWithSignal(err))) as any;\n      return makeThenable(result);\n    } catch (err) {\n      return makeThenable(errorResultWithSignal(err)) as any;\n    }\n  };\n\n  const find: AnyPadroneProgram['find'] = (command) => {\n    if (typeof command !== 'string') return findCommandByName(command.path, rootCommand.commands) as any;\n    return findCommandByName(command, rootCommand.commands) as any;\n  };\n\n  const parse: AnyPadroneProgram['parse'] = (input) => {\n    const { command, rawArgs, args } = ctx.parseCommandFn(input as string | undefined);\n\n    const validatedOrPromise = coreValidateForParse(command, rawArgs, args);\n\n    return makeThenable(\n      warnIfUnexpectedAsync(\n        thenMaybe(validatedOrPromise, (v: any) => ({ command: command as any, args: v.args, argsResult: v.argsResult })),\n        command,\n      ),\n    ) as any;\n  };\n\n  const help: AnyPadroneProgram['help'] = (command, prefs) => {\n    resolveAllCommands(rootCommand);\n    const commandObj = !command\n      ? rootCommand\n      : typeof command === 'string'\n        ? findCommandByName(command, rootCommand.commands)\n        : (command as AnyPadroneCommand);\n    if (!commandObj) throw new RoutingError(`Command \"${command ?? ''}\" not found`);\n    const runtime = getCommandRuntime(rootCommand);\n    return generateHelp(rootCommand, commandObj, {\n      ...prefs,\n      format: prefs?.format ?? runtime.format,\n      theme: prefs?.theme ?? runtime.theme,\n      terminal: prefs?.terminal ?? runtime.terminal,\n      env: prefs?.env ?? runtime.env(),\n    });\n  };\n\n  const api: AnyPadroneProgram['api'] = () => {\n    resolveAllCommands(rootCommand);\n    function buildApi(command: AnyPadroneCommand) {\n      const runCommand = ((args) => run(command, args).result) as PadroneAPI<AnyPadroneCommand>;\n      if (!command.commands) return runCommand;\n      for (const cmd of command.commands) runCommand[cmd.name] = buildApi(cmd);\n      return runCommand;\n    }\n    return buildApi(rootCommand);\n  };\n\n  const completion: AnyPadroneProgram['completion'] = async (shell) => {\n    resolveAllCommands(rootCommand);\n    const { generateCompletionOutput } = await import('../feature/completion.ts');\n    return generateCompletionOutput(rootCommand, shell as ShellType | undefined);\n  };\n\n  const mcp: AnyPadroneProgram['mcp'] = async (prefs) => {\n    resolveAllCommands(rootCommand);\n    const { startMcpServer } = await import('../feature/mcp.ts');\n    return startMcpServer(ctx.builder as any, rootCommand, evalCommand, prefs);\n  };\n\n  const serve: AnyPadroneProgram['serve'] = async (prefs) => {\n    resolveAllCommands(rootCommand);\n    const { startServeServer } = await import('../feature/serve.ts');\n    return startServeServer(ctx.builder as any, rootCommand, evalCommand, prefs);\n  };\n\n  return {\n    find,\n    parse,\n    stringify,\n    run,\n    eval: evalCommand,\n    cli,\n    tool,\n    repl: replFn,\n    api,\n    help,\n    completion,\n    mcp,\n    serve,\n  };\n}\n"],"mappings":"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"}