@inkeep/agents-cli 0.74.2 → 0.74.3

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.
@@ -16,7 +16,7 @@ const defaultGoogleModelConfigurations = {
16
16
  const defaultOpenaiModelConfigurations = {
17
17
  base: { model: OPENAI_MODELS.GPT_5_2 },
18
18
  structuredOutput: { model: OPENAI_MODELS.GPT_4_1_MINI },
19
- summarizer: { model: OPENAI_MODELS.GPT_4_1_NANO }
19
+ summarizer: { model: OPENAI_MODELS.GPT_5_4_NANO }
20
20
  };
21
21
  const defaultAnthropicModelConfigurations = {
22
22
  base: { model: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5 },
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","names":["template"],"sources":["../../src/commands/add.ts"],"sourcesContent":["import path from 'node:path';\nimport * as p from '@clack/prompts';\nimport { ANTHROPIC_MODELS, GOOGLE_MODELS, OPENAI_MODELS } from '@inkeep/agents-core';\nimport chalk from 'chalk';\nimport { findUp } from 'find-up';\nimport fs from 'fs-extra';\nimport type { ModelSettings } from '../utils/model-config';\nimport {\n type ContentReplacement,\n cloneTemplate,\n cloneTemplateLocal,\n getAvailableTemplates,\n} from '../utils/templates';\nimport { addUiCommand } from './add-ui';\n\nexport interface AddOptions {\n project?: string;\n mcp?: string;\n ui?: string | true;\n list?: boolean;\n targetPath?: string;\n config?: string;\n profile?: string;\n quiet?: boolean;\n localPrefix?: string;\n}\n\nexport const defaultGoogleModelConfigurations: ModelSettings = {\n base: {\n model: GOOGLE_MODELS.GEMINI_2_5_FLASH,\n },\n structuredOutput: {\n model: GOOGLE_MODELS.GEMINI_2_5_FLASH_LITE,\n },\n summarizer: {\n model: GOOGLE_MODELS.GEMINI_2_5_FLASH_LITE,\n },\n};\n\nexport const defaultOpenaiModelConfigurations: ModelSettings = {\n base: {\n model: OPENAI_MODELS.GPT_5_2,\n },\n structuredOutput: {\n model: OPENAI_MODELS.GPT_4_1_MINI,\n },\n summarizer: {\n model: OPENAI_MODELS.GPT_4_1_NANO,\n },\n};\n\nexport const defaultAnthropicModelConfigurations: ModelSettings = {\n base: {\n model: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5,\n },\n structuredOutput: {\n model: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5,\n },\n summarizer: {\n model: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5,\n },\n};\n\nexport async function addCommand(options: AddOptions): Promise<void> {\n if (options.ui !== undefined) {\n await addUiCommand({\n ui: options.ui,\n list: options.list,\n config: options.config,\n profile: options.profile,\n quiet: options.quiet,\n });\n return;\n }\n const projectTemplates = await getAvailableTemplates('template-projects', options.localPrefix);\n const mcpTemplates = await getAvailableTemplates('template-mcps', options.localPrefix);\n if (!options.project && !options.mcp) {\n console.log(chalk.cyan('\\nUsage:\\n'));\n console.log(chalk.white('Add a project with: inkeep add --project <project-template>'));\n console.log(chalk.gray(' Example: inkeep add --project docs-assistant\\n'));\n console.log(chalk.yellow('Available project templates:'));\n for (const template of projectTemplates) {\n console.log(chalk.gray(` • ${template}`));\n }\n\n console.log(chalk.white('\\nAdd an MCP server with: inkeep add --mcp <mcp-template>'));\n console.log(chalk.gray(' Example: inkeep add --mcp slack\\n'));\n console.log(chalk.yellow('Available MCP templates:'));\n for (const template of mcpTemplates) {\n console.log(chalk.gray(` • ${template}`));\n }\n process.exit(0);\n } else {\n if (options.project && !projectTemplates.includes(options.project)) {\n console.error(`❌ Project template \"${options.project}\" not found`);\n process.exit(1);\n }\n if (options.mcp && !mcpTemplates.includes(options.mcp)) {\n console.error(`❌ MCP template \"${options.mcp}\" not found`);\n process.exit(1);\n }\n\n if (options.project) {\n await addProjectTemplate(\n projectTemplates,\n options.project,\n options.targetPath,\n options.localPrefix\n );\n }\n if (options.mcp) {\n await addMcpTemplate(mcpTemplates, options.mcp, options.targetPath, options.localPrefix);\n }\n return;\n }\n}\n\nexport async function checkTemplateDir(\n templateDir: string,\n commandType: 'project' | 'mcp'\n): Promise<void> {\n const s = p.spinner();\n // Check if the template directory already exists\n if (await fs.pathExists(templateDir)) {\n const overwrite = await p.confirm({\n message: `Directory \"${templateDir}\" already exists. Do you want to overwrite it?`,\n });\n if (!overwrite) {\n p.cancel(\n `You can specify a different target path like: \\`inkeep add --${commandType} <${commandType}-template> --target-path <path>\\``\n );\n process.exit(0);\n }\n s.start('Cleaning existing directory...');\n await fs.emptyDir(templateDir);\n s.stop();\n }\n}\n\nfunction buildTemplateUrl(\n templateType: 'template-projects' | 'template-mcps',\n templateName: string\n): string {\n return `https://github.com/inkeep/agents/agents-cookbook/${templateType}/${templateName}`;\n}\n\nexport async function addProjectTemplate(\n availableTemplates: string[],\n template: string,\n targetPath: string | undefined,\n localPrefix: string | undefined\n): Promise<void> {\n if (!template) {\n console.log(chalk.yellow('Available templates:'));\n for (const template of availableTemplates) {\n console.log(chalk.gray(` • ${template}`));\n }\n process.exit(0);\n } else {\n if (!availableTemplates.includes(template)) {\n console.error(`❌ Template \"${template}\" not found`);\n process.exit(1);\n }\n const s = p.spinner();\n\n const anthropicKey = process.env.ANTHROPIC_API_KEY;\n const openAiKey = process.env.OPENAI_API_KEY;\n const googleKey = process.env.GOOGLE_GENERATIVE_AI_API_KEY;\n\n let defaultModelSettings = {};\n if (anthropicKey) {\n defaultModelSettings = defaultAnthropicModelConfigurations;\n } else if (openAiKey) {\n defaultModelSettings = defaultOpenaiModelConfigurations;\n } else if (googleKey) {\n defaultModelSettings = defaultGoogleModelConfigurations;\n }\n\n const contentReplacements: ContentReplacement[] = [\n {\n filePath: 'index.ts',\n replacements: {\n models: defaultModelSettings,\n },\n },\n ];\n\n // Check if the model settings are empty\n if (Object.keys(defaultModelSettings).length === 0) {\n console.error(\n '❌ No AI provider key found in environment variables. Please set one of: ANTHROPIC_API_KEY, OPENAI_API_KEY, or GOOGLE_GENERATIVE_AI_API_KEY'\n );\n }\n const projectDirectory = await findAppDirectory('project');\n\n // Determine the base directory (use provided target path or current directory)\n const baseDir = targetPath || projectDirectory;\n\n // Create the full path including the template name as a subdirectory\n const templateDir = path.join(baseDir, template);\n\n await checkTemplateDir(templateDir, 'project');\n\n // Ensure the base directory exists\n if (targetPath && !(await fs.pathExists(baseDir))) {\n try {\n await fs.mkdir(baseDir, { recursive: true });\n } catch (error) {\n console.error(\n `❌ Failed to create target directory \"${baseDir}\": ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n process.exit(1);\n }\n }\n\n s.start('Adding template...');\n\n // Clone into the template-named subdirectory\n if (localPrefix && localPrefix.length > 0) {\n const fullTemplatePath = path.join(localPrefix, 'template-projects', template);\n await cloneTemplateLocal(fullTemplatePath, templateDir, contentReplacements);\n } else {\n const fullTemplatePath = buildTemplateUrl('template-projects', template);\n await cloneTemplate(fullTemplatePath, templateDir, contentReplacements);\n }\n s.stop(`Template \"${template}\" added to ${templateDir}`);\n return;\n }\n}\n\nexport async function addMcpTemplate(\n availableTemplates: string[],\n template: string,\n targetPath: string | undefined,\n localPrefix: string | undefined\n): Promise<void> {\n if (!template) {\n console.log(chalk.yellow('Available templates:'));\n for (const template of availableTemplates) {\n console.log(chalk.gray(` • ${template}`));\n }\n process.exit(0);\n }\n\n if (!targetPath) {\n const foundPath = await findAppDirectory('mcp');\n targetPath = path.join(foundPath, template);\n }\n\n await checkTemplateDir(targetPath, 'mcp');\n\n const s = p.spinner();\n s.start('Adding template...');\n if (localPrefix && localPrefix.length > 0) {\n const fullTemplatePath = path.join(localPrefix, 'template-mcps', template);\n await cloneTemplateLocal(fullTemplatePath, targetPath);\n } else {\n const fullTemplatePath = buildTemplateUrl('template-mcps', template);\n await cloneTemplate(fullTemplatePath, targetPath);\n }\n s.stop(`MCP template \"${template}\" added to ${targetPath}`);\n}\n\nexport async function findAppDirectory(type: 'project' | 'mcp'): Promise<string> {\n const searchPath = type === 'project' ? 'src/projects' : 'apps/mcp/app';\n const directory = await findUp(searchPath, { type: 'directory' });\n\n if (!directory || !directory.includes(searchPath)) {\n console.log(chalk.yellow(`⚠️ No ${type} directory found.`));\n const continueAnyway = await p.confirm({\n message: `Do you want to add to ${process.cwd()} instead?`,\n });\n if (!continueAnyway) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n }\n return directory || process.cwd();\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"add.js","names":["template"],"sources":["../../src/commands/add.ts"],"sourcesContent":["import path from 'node:path';\nimport * as p from '@clack/prompts';\nimport { ANTHROPIC_MODELS, GOOGLE_MODELS, OPENAI_MODELS } from '@inkeep/agents-core';\nimport chalk from 'chalk';\nimport { findUp } from 'find-up';\nimport fs from 'fs-extra';\nimport type { ModelSettings } from '../utils/model-config';\nimport {\n type ContentReplacement,\n cloneTemplate,\n cloneTemplateLocal,\n getAvailableTemplates,\n} from '../utils/templates';\nimport { addUiCommand } from './add-ui';\n\nexport interface AddOptions {\n project?: string;\n mcp?: string;\n ui?: string | true;\n list?: boolean;\n targetPath?: string;\n config?: string;\n profile?: string;\n quiet?: boolean;\n localPrefix?: string;\n}\n\nexport const defaultGoogleModelConfigurations: ModelSettings = {\n base: {\n model: GOOGLE_MODELS.GEMINI_2_5_FLASH,\n },\n structuredOutput: {\n model: GOOGLE_MODELS.GEMINI_2_5_FLASH_LITE,\n },\n summarizer: {\n model: GOOGLE_MODELS.GEMINI_2_5_FLASH_LITE,\n },\n};\n\nexport const defaultOpenaiModelConfigurations: ModelSettings = {\n base: {\n model: OPENAI_MODELS.GPT_5_2,\n },\n structuredOutput: {\n model: OPENAI_MODELS.GPT_4_1_MINI,\n },\n summarizer: {\n model: OPENAI_MODELS.GPT_5_4_NANO,\n },\n};\n\nexport const defaultAnthropicModelConfigurations: ModelSettings = {\n base: {\n model: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5,\n },\n structuredOutput: {\n model: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5,\n },\n summarizer: {\n model: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5,\n },\n};\n\nexport async function addCommand(options: AddOptions): Promise<void> {\n if (options.ui !== undefined) {\n await addUiCommand({\n ui: options.ui,\n list: options.list,\n config: options.config,\n profile: options.profile,\n quiet: options.quiet,\n });\n return;\n }\n const projectTemplates = await getAvailableTemplates('template-projects', options.localPrefix);\n const mcpTemplates = await getAvailableTemplates('template-mcps', options.localPrefix);\n if (!options.project && !options.mcp) {\n console.log(chalk.cyan('\\nUsage:\\n'));\n console.log(chalk.white('Add a project with: inkeep add --project <project-template>'));\n console.log(chalk.gray(' Example: inkeep add --project docs-assistant\\n'));\n console.log(chalk.yellow('Available project templates:'));\n for (const template of projectTemplates) {\n console.log(chalk.gray(` • ${template}`));\n }\n\n console.log(chalk.white('\\nAdd an MCP server with: inkeep add --mcp <mcp-template>'));\n console.log(chalk.gray(' Example: inkeep add --mcp slack\\n'));\n console.log(chalk.yellow('Available MCP templates:'));\n for (const template of mcpTemplates) {\n console.log(chalk.gray(` • ${template}`));\n }\n process.exit(0);\n } else {\n if (options.project && !projectTemplates.includes(options.project)) {\n console.error(`❌ Project template \"${options.project}\" not found`);\n process.exit(1);\n }\n if (options.mcp && !mcpTemplates.includes(options.mcp)) {\n console.error(`❌ MCP template \"${options.mcp}\" not found`);\n process.exit(1);\n }\n\n if (options.project) {\n await addProjectTemplate(\n projectTemplates,\n options.project,\n options.targetPath,\n options.localPrefix\n );\n }\n if (options.mcp) {\n await addMcpTemplate(mcpTemplates, options.mcp, options.targetPath, options.localPrefix);\n }\n return;\n }\n}\n\nexport async function checkTemplateDir(\n templateDir: string,\n commandType: 'project' | 'mcp'\n): Promise<void> {\n const s = p.spinner();\n // Check if the template directory already exists\n if (await fs.pathExists(templateDir)) {\n const overwrite = await p.confirm({\n message: `Directory \"${templateDir}\" already exists. Do you want to overwrite it?`,\n });\n if (!overwrite) {\n p.cancel(\n `You can specify a different target path like: \\`inkeep add --${commandType} <${commandType}-template> --target-path <path>\\``\n );\n process.exit(0);\n }\n s.start('Cleaning existing directory...');\n await fs.emptyDir(templateDir);\n s.stop();\n }\n}\n\nfunction buildTemplateUrl(\n templateType: 'template-projects' | 'template-mcps',\n templateName: string\n): string {\n return `https://github.com/inkeep/agents/agents-cookbook/${templateType}/${templateName}`;\n}\n\nexport async function addProjectTemplate(\n availableTemplates: string[],\n template: string,\n targetPath: string | undefined,\n localPrefix: string | undefined\n): Promise<void> {\n if (!template) {\n console.log(chalk.yellow('Available templates:'));\n for (const template of availableTemplates) {\n console.log(chalk.gray(` • ${template}`));\n }\n process.exit(0);\n } else {\n if (!availableTemplates.includes(template)) {\n console.error(`❌ Template \"${template}\" not found`);\n process.exit(1);\n }\n const s = p.spinner();\n\n const anthropicKey = process.env.ANTHROPIC_API_KEY;\n const openAiKey = process.env.OPENAI_API_KEY;\n const googleKey = process.env.GOOGLE_GENERATIVE_AI_API_KEY;\n\n let defaultModelSettings = {};\n if (anthropicKey) {\n defaultModelSettings = defaultAnthropicModelConfigurations;\n } else if (openAiKey) {\n defaultModelSettings = defaultOpenaiModelConfigurations;\n } else if (googleKey) {\n defaultModelSettings = defaultGoogleModelConfigurations;\n }\n\n const contentReplacements: ContentReplacement[] = [\n {\n filePath: 'index.ts',\n replacements: {\n models: defaultModelSettings,\n },\n },\n ];\n\n // Check if the model settings are empty\n if (Object.keys(defaultModelSettings).length === 0) {\n console.error(\n '❌ No AI provider key found in environment variables. Please set one of: ANTHROPIC_API_KEY, OPENAI_API_KEY, or GOOGLE_GENERATIVE_AI_API_KEY'\n );\n }\n const projectDirectory = await findAppDirectory('project');\n\n // Determine the base directory (use provided target path or current directory)\n const baseDir = targetPath || projectDirectory;\n\n // Create the full path including the template name as a subdirectory\n const templateDir = path.join(baseDir, template);\n\n await checkTemplateDir(templateDir, 'project');\n\n // Ensure the base directory exists\n if (targetPath && !(await fs.pathExists(baseDir))) {\n try {\n await fs.mkdir(baseDir, { recursive: true });\n } catch (error) {\n console.error(\n `❌ Failed to create target directory \"${baseDir}\": ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n process.exit(1);\n }\n }\n\n s.start('Adding template...');\n\n // Clone into the template-named subdirectory\n if (localPrefix && localPrefix.length > 0) {\n const fullTemplatePath = path.join(localPrefix, 'template-projects', template);\n await cloneTemplateLocal(fullTemplatePath, templateDir, contentReplacements);\n } else {\n const fullTemplatePath = buildTemplateUrl('template-projects', template);\n await cloneTemplate(fullTemplatePath, templateDir, contentReplacements);\n }\n s.stop(`Template \"${template}\" added to ${templateDir}`);\n return;\n }\n}\n\nexport async function addMcpTemplate(\n availableTemplates: string[],\n template: string,\n targetPath: string | undefined,\n localPrefix: string | undefined\n): Promise<void> {\n if (!template) {\n console.log(chalk.yellow('Available templates:'));\n for (const template of availableTemplates) {\n console.log(chalk.gray(` • ${template}`));\n }\n process.exit(0);\n }\n\n if (!targetPath) {\n const foundPath = await findAppDirectory('mcp');\n targetPath = path.join(foundPath, template);\n }\n\n await checkTemplateDir(targetPath, 'mcp');\n\n const s = p.spinner();\n s.start('Adding template...');\n if (localPrefix && localPrefix.length > 0) {\n const fullTemplatePath = path.join(localPrefix, 'template-mcps', template);\n await cloneTemplateLocal(fullTemplatePath, targetPath);\n } else {\n const fullTemplatePath = buildTemplateUrl('template-mcps', template);\n await cloneTemplate(fullTemplatePath, targetPath);\n }\n s.stop(`MCP template \"${template}\" added to ${targetPath}`);\n}\n\nexport async function findAppDirectory(type: 'project' | 'mcp'): Promise<string> {\n const searchPath = type === 'project' ? 'src/projects' : 'apps/mcp/app';\n const directory = await findUp(searchPath, { type: 'directory' });\n\n if (!directory || !directory.includes(searchPath)) {\n console.log(chalk.yellow(`⚠️ No ${type} directory found.`));\n const continueAnyway = await p.confirm({\n message: `Do you want to add to ${process.cwd()} instead?`,\n });\n if (!continueAnyway) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n }\n return directory || process.cwd();\n}\n"],"mappings":";;;;;;;;;;AA2BA,MAAa,mCAAkD;CAC7D,MAAM,EACJ,OAAO,cAAc,kBACtB;CACD,kBAAkB,EAChB,OAAO,cAAc,uBACtB;CACD,YAAY,EACV,OAAO,cAAc,uBACtB;CACF;AAED,MAAa,mCAAkD;CAC7D,MAAM,EACJ,OAAO,cAAc,SACtB;CACD,kBAAkB,EAChB,OAAO,cAAc,cACtB;CACD,YAAY,EACV,OAAO,cAAc,cACtB;CACF;AAED,MAAa,sCAAqD;CAChE,MAAM,EACJ,OAAO,iBAAiB,mBACzB;CACD,kBAAkB,EAChB,OAAO,iBAAiB,mBACzB;CACD,YAAY,EACV,OAAO,iBAAiB,mBACzB;CACF;AAED,eAAsB,WAAW,SAAoC;AACnE,KAAI,QAAQ,OAAO,QAAW;AAC5B,QAAM,aAAa;GACjB,IAAI,QAAQ;GACZ,MAAM,QAAQ;GACd,QAAQ,QAAQ;GAChB,SAAS,QAAQ;GACjB,OAAO,QAAQ;GAChB,CAAC;AACF;;CAEF,MAAM,mBAAmB,MAAM,sBAAsB,qBAAqB,QAAQ,YAAY;CAC9F,MAAM,eAAe,MAAM,sBAAsB,iBAAiB,QAAQ,YAAY;AACtF,KAAI,CAAC,QAAQ,WAAW,CAAC,QAAQ,KAAK;AACpC,UAAQ,IAAI,MAAM,KAAK,aAAa,CAAC;AACrC,UAAQ,IAAI,MAAM,MAAM,8DAA8D,CAAC;AACvF,UAAQ,IAAI,MAAM,KAAK,mDAAmD,CAAC;AAC3E,UAAQ,IAAI,MAAM,OAAO,+BAA+B,CAAC;AACzD,OAAK,MAAM,YAAY,iBACrB,SAAQ,IAAI,MAAM,KAAK,OAAO,WAAW,CAAC;AAG5C,UAAQ,IAAI,MAAM,MAAM,4DAA4D,CAAC;AACrF,UAAQ,IAAI,MAAM,KAAK,sCAAsC,CAAC;AAC9D,UAAQ,IAAI,MAAM,OAAO,2BAA2B,CAAC;AACrD,OAAK,MAAM,YAAY,aACrB,SAAQ,IAAI,MAAM,KAAK,OAAO,WAAW,CAAC;AAE5C,UAAQ,KAAK,EAAE;QACV;AACL,MAAI,QAAQ,WAAW,CAAC,iBAAiB,SAAS,QAAQ,QAAQ,EAAE;AAClE,WAAQ,MAAM,uBAAuB,QAAQ,QAAQ,aAAa;AAClE,WAAQ,KAAK,EAAE;;AAEjB,MAAI,QAAQ,OAAO,CAAC,aAAa,SAAS,QAAQ,IAAI,EAAE;AACtD,WAAQ,MAAM,mBAAmB,QAAQ,IAAI,aAAa;AAC1D,WAAQ,KAAK,EAAE;;AAGjB,MAAI,QAAQ,QACV,OAAM,mBACJ,kBACA,QAAQ,SACR,QAAQ,YACR,QAAQ,YACT;AAEH,MAAI,QAAQ,IACV,OAAM,eAAe,cAAc,QAAQ,KAAK,QAAQ,YAAY,QAAQ,YAAY;AAE1F;;;AAIJ,eAAsB,iBACpB,aACA,aACe;CACf,MAAM,IAAI,EAAE,SAAS;AAErB,KAAI,MAAM,GAAG,WAAW,YAAY,EAAE;AAIpC,MAAI,CAHc,MAAM,EAAE,QAAQ,EAChC,SAAS,cAAc,YAAY,iDACpC,CAAC,EACc;AACd,KAAE,OACA,gEAAgE,YAAY,IAAI,YAAY,mCAC7F;AACD,WAAQ,KAAK,EAAE;;AAEjB,IAAE,MAAM,iCAAiC;AACzC,QAAM,GAAG,SAAS,YAAY;AAC9B,IAAE,MAAM;;;AAIZ,SAAS,iBACP,cACA,cACQ;AACR,QAAO,oDAAoD,aAAa,GAAG;;AAG7E,eAAsB,mBACpB,oBACA,UACA,YACA,aACe;AACf,KAAI,CAAC,UAAU;AACb,UAAQ,IAAI,MAAM,OAAO,uBAAuB,CAAC;AACjD,OAAK,MAAMA,cAAY,mBACrB,SAAQ,IAAI,MAAM,KAAK,OAAOA,aAAW,CAAC;AAE5C,UAAQ,KAAK,EAAE;QACV;AACL,MAAI,CAAC,mBAAmB,SAAS,SAAS,EAAE;AAC1C,WAAQ,MAAM,eAAe,SAAS,aAAa;AACnD,WAAQ,KAAK,EAAE;;EAEjB,MAAM,IAAI,EAAE,SAAS;EAErB,MAAM,eAAe,QAAQ,IAAI;EACjC,MAAM,YAAY,QAAQ,IAAI;EAC9B,MAAM,YAAY,QAAQ,IAAI;EAE9B,IAAI,uBAAuB,EAAE;AAC7B,MAAI,aACF,wBAAuB;WACd,UACT,wBAAuB;WACd,UACT,wBAAuB;EAGzB,MAAM,sBAA4C,CAChD;GACE,UAAU;GACV,cAAc,EACZ,QAAQ,sBACT;GACF,CACF;AAGD,MAAI,OAAO,KAAK,qBAAqB,CAAC,WAAW,EAC/C,SAAQ,MACN,6IACD;EAEH,MAAM,mBAAmB,MAAM,iBAAiB,UAAU;EAG1D,MAAM,UAAU,cAAc;EAG9B,MAAM,cAAc,KAAK,KAAK,SAAS,SAAS;AAEhD,QAAM,iBAAiB,aAAa,UAAU;AAG9C,MAAI,cAAc,CAAE,MAAM,GAAG,WAAW,QAAQ,CAC9C,KAAI;AACF,SAAM,GAAG,MAAM,SAAS,EAAE,WAAW,MAAM,CAAC;WACrC,OAAO;AACd,WAAQ,MACN,wCAAwC,QAAQ,KAAK,iBAAiB,QAAQ,MAAM,UAAU,kBAC/F;AACD,WAAQ,KAAK,EAAE;;AAInB,IAAE,MAAM,qBAAqB;AAG7B,MAAI,eAAe,YAAY,SAAS,EAEtC,OAAM,mBADmB,KAAK,KAAK,aAAa,qBAAqB,SAAS,EACnC,aAAa,oBAAoB;MAG5E,OAAM,cADmB,iBAAiB,qBAAqB,SAAS,EAClC,aAAa,oBAAoB;AAEzE,IAAE,KAAK,aAAa,SAAS,aAAa,cAAc;AACxD;;;AAIJ,eAAsB,eACpB,oBACA,UACA,YACA,aACe;AACf,KAAI,CAAC,UAAU;AACb,UAAQ,IAAI,MAAM,OAAO,uBAAuB,CAAC;AACjD,OAAK,MAAMA,cAAY,mBACrB,SAAQ,IAAI,MAAM,KAAK,OAAOA,aAAW,CAAC;AAE5C,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,YAAY;EACf,MAAM,YAAY,MAAM,iBAAiB,MAAM;AAC/C,eAAa,KAAK,KAAK,WAAW,SAAS;;AAG7C,OAAM,iBAAiB,YAAY,MAAM;CAEzC,MAAM,IAAI,EAAE,SAAS;AACrB,GAAE,MAAM,qBAAqB;AAC7B,KAAI,eAAe,YAAY,SAAS,EAEtC,OAAM,mBADmB,KAAK,KAAK,aAAa,iBAAiB,SAAS,EAC/B,WAAW;KAGtD,OAAM,cADmB,iBAAiB,iBAAiB,SAAS,EAC9B,WAAW;AAEnD,GAAE,KAAK,iBAAiB,SAAS,aAAa,aAAa;;AAG7D,eAAsB,iBAAiB,MAA0C;CAC/E,MAAM,aAAa,SAAS,YAAY,iBAAiB;CACzD,MAAM,YAAY,MAAM,OAAO,YAAY,EAAE,MAAM,aAAa,CAAC;AAEjE,KAAI,CAAC,aAAa,CAAC,UAAU,SAAS,WAAW,EAAE;AACjD,UAAQ,IAAI,MAAM,OAAO,UAAU,KAAK,mBAAmB,CAAC;AAI5D,MAAI,CAHmB,MAAM,EAAE,QAAQ,EACrC,SAAS,yBAAyB,QAAQ,KAAK,CAAC,YACjD,CAAC,EACmB;AACnB,KAAE,OAAO,sBAAsB;AAC/B,WAAQ,KAAK,EAAE;;;AAGnB,QAAO,aAAa,QAAQ,KAAK"}
package/dist/package.js CHANGED
@@ -1,6 +1,6 @@
1
1
  //#region package.json
2
2
  var name = "@inkeep/agents-cli";
3
- var version = "0.74.2";
3
+ var version = "0.74.3";
4
4
 
5
5
  //#endregion
6
6
  export { name, version };
@@ -10,7 +10,7 @@ const defaultGeminiModelConfigurations = {
10
10
  const defaultOpenaiModelConfigurations = {
11
11
  base: { model: OPENAI_MODELS.GPT_5_2 },
12
12
  structuredOutput: { model: OPENAI_MODELS.GPT_4_1_MINI },
13
- summarizer: { model: OPENAI_MODELS.GPT_4_1_NANO }
13
+ summarizer: { model: OPENAI_MODELS.GPT_5_4_NANO }
14
14
  };
15
15
  const defaultAnthropicModelConfigurations = {
16
16
  base: { model: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5 },
@@ -49,6 +49,10 @@ async function promptForModelConfiguration() {
49
49
  process.exit(0);
50
50
  }
51
51
  const anthropicModels = [
52
+ {
53
+ label: "Claude Opus 4.7",
54
+ value: ANTHROPIC_MODELS.CLAUDE_OPUS_4_7
55
+ },
52
56
  {
53
57
  label: "Claude Opus 4.6",
54
58
  value: ANTHROPIC_MODELS.CLAUDE_OPUS_4_6
@@ -57,14 +61,6 @@ async function promptForModelConfiguration() {
57
61
  label: "Claude Opus 4.5",
58
62
  value: ANTHROPIC_MODELS.CLAUDE_OPUS_4_5
59
63
  },
60
- {
61
- label: "Claude Opus 4.1",
62
- value: ANTHROPIC_MODELS.CLAUDE_OPUS_4_1
63
- },
64
- {
65
- label: "Claude Opus 4",
66
- value: ANTHROPIC_MODELS.CLAUDE_OPUS_4
67
- },
68
64
  {
69
65
  label: "Claude Sonnet 4.6",
70
66
  value: ANTHROPIC_MODELS.CLAUDE_SONNET_4_6
@@ -73,13 +69,13 @@ async function promptForModelConfiguration() {
73
69
  label: "Claude Sonnet 4.5",
74
70
  value: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5
75
71
  },
76
- {
77
- label: "Claude Sonnet 4",
78
- value: ANTHROPIC_MODELS.CLAUDE_SONNET_4
79
- },
80
72
  {
81
73
  label: "Claude Haiku 4.5",
82
74
  value: ANTHROPIC_MODELS.CLAUDE_HAIKU_4_5
75
+ },
76
+ {
77
+ label: "Claude Opus 4.1",
78
+ value: ANTHROPIC_MODELS.CLAUDE_OPUS_4_1
83
79
  }
84
80
  ];
85
81
  const openaiModels = [
@@ -87,41 +83,53 @@ async function promptForModelConfiguration() {
87
83
  label: "GPT-5.5 Pro",
88
84
  value: OPENAI_MODELS.GPT_5_5_PRO
89
85
  },
90
- {
91
- label: "GPT-5.5",
92
- value: OPENAI_MODELS.GPT_5_5
93
- },
94
86
  {
95
87
  label: "GPT-5.4 Pro",
96
88
  value: OPENAI_MODELS.GPT_5_4_PRO
97
89
  },
90
+ {
91
+ label: "GPT-5.2 Pro",
92
+ value: OPENAI_MODELS.GPT_5_2_PRO
93
+ },
94
+ {
95
+ label: "GPT-5.5",
96
+ value: OPENAI_MODELS.GPT_5_5
97
+ },
98
98
  {
99
99
  label: "GPT-5.4",
100
100
  value: OPENAI_MODELS.GPT_5_4
101
101
  },
102
102
  {
103
- label: "GPT-5.4 Mini",
104
- value: OPENAI_MODELS.GPT_5_4_MINI
103
+ label: "GPT-5.2",
104
+ value: OPENAI_MODELS.GPT_5_2
105
105
  },
106
106
  {
107
- label: "GPT-5.4 Nano",
108
- value: OPENAI_MODELS.GPT_5_4_NANO
107
+ label: "GPT-5.1",
108
+ value: OPENAI_MODELS.GPT_5_1
109
+ },
110
+ {
111
+ label: "GPT-5",
112
+ value: OPENAI_MODELS.GPT_5
109
113
  },
110
114
  {
111
115
  label: "GPT-5.3 Codex",
112
116
  value: OPENAI_MODELS.GPT_5_3_CODEX
113
117
  },
114
118
  {
115
- label: "GPT-5.2 Pro",
116
- value: OPENAI_MODELS.GPT_5_2_PRO
119
+ label: "GPT-5.4 Mini",
120
+ value: OPENAI_MODELS.GPT_5_4_MINI
117
121
  },
118
122
  {
119
- label: "GPT-5.2",
120
- value: OPENAI_MODELS.GPT_5_2
123
+ label: "GPT-5 Mini",
124
+ value: OPENAI_MODELS.GPT_5_MINI
121
125
  },
122
126
  {
123
- label: "GPT-5.1",
124
- value: OPENAI_MODELS.GPT_5_1
127
+ label: "GPT-5.4 Nano",
128
+ value: OPENAI_MODELS.GPT_5_4_NANO
129
+ },
130
+ {
131
+ label: "GPT-5 Nano",
132
+ value: OPENAI_MODELS.GPT_5_NANO
125
133
  },
126
134
  {
127
135
  label: "o3 Pro",
@@ -138,22 +146,6 @@ async function promptForModelConfiguration() {
138
146
  {
139
147
  label: "GPT-4.1 Mini",
140
148
  value: OPENAI_MODELS.GPT_4_1_MINI
141
- },
142
- {
143
- label: "GPT-4.1 Nano",
144
- value: OPENAI_MODELS.GPT_4_1_NANO
145
- },
146
- {
147
- label: "GPT-5",
148
- value: OPENAI_MODELS.GPT_5
149
- },
150
- {
151
- label: "GPT-5 Mini",
152
- value: OPENAI_MODELS.GPT_5_MINI
153
- },
154
- {
155
- label: "GPT-5 Nano",
156
- value: OPENAI_MODELS.GPT_5_NANO
157
149
  }
158
150
  ];
159
151
  const googleModels = [
@@ -162,16 +154,12 @@ async function promptForModelConfiguration() {
162
154
  value: GOOGLE_MODELS.GEMINI_3_1_PRO_PREVIEW
163
155
  },
164
156
  {
165
- label: "Gemini 3.1 Flash Lite Preview",
166
- value: GOOGLE_MODELS.GEMINI_3_1_FLASH_LITE_PREVIEW
167
- },
168
- {
169
- label: "Gemini 3 Flash",
170
- value: GOOGLE_MODELS.GEMINI_3_FLASH
157
+ label: "Gemini 3.5 Flash",
158
+ value: GOOGLE_MODELS.GEMINI_3_5_FLASH
171
159
  },
172
160
  {
173
- label: "Gemini 3 Pro Preview",
174
- value: GOOGLE_MODELS.GEMINI_3_PRO_PREVIEW
161
+ label: "Gemini 3.1 Flash Lite",
162
+ value: GOOGLE_MODELS.GEMINI_3_1_FLASH_LITE
175
163
  },
176
164
  {
177
165
  label: "Gemini 2.5 Pro",
@@ -1 +1 @@
1
- {"version":3,"file":"model-config.js","names":[],"sources":["../../src/utils/model-config.ts"],"sourcesContent":["import * as p from '@clack/prompts';\nimport { ANTHROPIC_MODELS, GOOGLE_MODELS, OPENAI_MODELS } from '@inkeep/agents-core';\n\nexport interface ModelConfigurationResult {\n modelSettings: {\n base: {\n model: string;\n providerOptions?: Record<string, any>;\n };\n structuredOutput?: {\n model: string;\n providerOptions?: Record<string, any>;\n };\n summarizer?: {\n model: string;\n providerOptions?: Record<string, any>;\n };\n };\n}\n\nexport type ModelSettings = ModelConfigurationResult['modelSettings'];\n\nexport const defaultGeminiModelConfigurations: ModelSettings = {\n base: {\n model: GOOGLE_MODELS.GEMINI_2_5_FLASH,\n },\n structuredOutput: {\n model: GOOGLE_MODELS.GEMINI_2_5_FLASH_LITE,\n },\n summarizer: {\n model: GOOGLE_MODELS.GEMINI_2_5_FLASH_LITE,\n },\n};\n\nexport const defaultOpenaiModelConfigurations: ModelSettings = {\n base: {\n model: OPENAI_MODELS.GPT_5_2,\n },\n structuredOutput: {\n model: OPENAI_MODELS.GPT_4_1_MINI,\n },\n summarizer: {\n model: OPENAI_MODELS.GPT_4_1_NANO,\n },\n};\n\nexport const defaultAnthropicModelConfigurations: ModelSettings = {\n base: {\n model: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5,\n },\n structuredOutput: {\n model: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5,\n },\n summarizer: {\n model: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5,\n },\n};\n\n/**\n * Prompt user for model configuration (providers and model selection)\n * This is shared between init and push commands\n */\nexport async function promptForModelConfiguration(): Promise<ModelConfigurationResult> {\n // Provider selection\n const providers = (await p.multiselect({\n message: 'Which AI providers would you like to configure?',\n options: [\n { value: 'anthropic', label: 'Anthropic (Claude)' },\n { value: 'openai', label: 'OpenAI (GPT)' },\n { value: 'google', label: 'Google (Gemini)' },\n { value: 'azure', label: 'Azure OpenAI' },\n ],\n required: true,\n })) as string[];\n\n if (p.isCancel(providers)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n\n // Available models for each provider (matching frontend options)\n const anthropicModels = [\n { label: 'Claude Opus 4.6', value: ANTHROPIC_MODELS.CLAUDE_OPUS_4_6 },\n { label: 'Claude Opus 4.5', value: ANTHROPIC_MODELS.CLAUDE_OPUS_4_5 },\n { label: 'Claude Opus 4.1', value: ANTHROPIC_MODELS.CLAUDE_OPUS_4_1 },\n { label: 'Claude Opus 4', value: ANTHROPIC_MODELS.CLAUDE_OPUS_4 },\n { label: 'Claude Sonnet 4.6', value: ANTHROPIC_MODELS.CLAUDE_SONNET_4_6 },\n { label: 'Claude Sonnet 4.5', value: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5 },\n { label: 'Claude Sonnet 4', value: ANTHROPIC_MODELS.CLAUDE_SONNET_4 },\n { label: 'Claude Haiku 4.5', value: ANTHROPIC_MODELS.CLAUDE_HAIKU_4_5 },\n ];\n\n const openaiModels = [\n { label: 'GPT-5.5 Pro', value: OPENAI_MODELS.GPT_5_5_PRO },\n { label: 'GPT-5.5', value: OPENAI_MODELS.GPT_5_5 },\n { label: 'GPT-5.4 Pro', value: OPENAI_MODELS.GPT_5_4_PRO },\n { label: 'GPT-5.4', value: OPENAI_MODELS.GPT_5_4 },\n { label: 'GPT-5.4 Mini', value: OPENAI_MODELS.GPT_5_4_MINI },\n { label: 'GPT-5.4 Nano', value: OPENAI_MODELS.GPT_5_4_NANO },\n { label: 'GPT-5.3 Codex', value: OPENAI_MODELS.GPT_5_3_CODEX },\n { label: 'GPT-5.2 Pro', value: OPENAI_MODELS.GPT_5_2_PRO },\n { label: 'GPT-5.2', value: OPENAI_MODELS.GPT_5_2 },\n { label: 'GPT-5.1', value: OPENAI_MODELS.GPT_5_1 },\n { label: 'o3 Pro', value: OPENAI_MODELS.O3_PRO },\n { label: 'o3', value: OPENAI_MODELS.O3 },\n { label: 'GPT-4.1', value: OPENAI_MODELS.GPT_4_1 },\n { label: 'GPT-4.1 Mini', value: OPENAI_MODELS.GPT_4_1_MINI },\n { label: 'GPT-4.1 Nano', value: OPENAI_MODELS.GPT_4_1_NANO },\n { label: 'GPT-5', value: OPENAI_MODELS.GPT_5 },\n { label: 'GPT-5 Mini', value: OPENAI_MODELS.GPT_5_MINI },\n { label: 'GPT-5 Nano', value: OPENAI_MODELS.GPT_5_NANO },\n ];\n\n const googleModels = [\n { label: 'Gemini 3.1 Pro Preview', value: GOOGLE_MODELS.GEMINI_3_1_PRO_PREVIEW },\n { label: 'Gemini 3.1 Flash Lite Preview', value: GOOGLE_MODELS.GEMINI_3_1_FLASH_LITE_PREVIEW },\n { label: 'Gemini 3 Flash', value: GOOGLE_MODELS.GEMINI_3_FLASH },\n { label: 'Gemini 3 Pro Preview', value: GOOGLE_MODELS.GEMINI_3_PRO_PREVIEW },\n { label: 'Gemini 2.5 Pro', value: GOOGLE_MODELS.GEMINI_2_5_PRO },\n { label: 'Gemini 2.5 Flash', value: GOOGLE_MODELS.GEMINI_2_5_FLASH },\n { label: 'Gemini 2.5 Flash Lite', value: GOOGLE_MODELS.GEMINI_2_5_FLASH_LITE },\n ];\n\n // Handle Azure configuration if selected\n const azureConfigs: any = {};\n if (providers.includes('azure')) {\n p.note('Azure OpenAI requires custom deployment configuration.');\n\n const deploymentName = await p.text({\n message: 'Enter your Azure deployment name:',\n placeholder: 'my-gpt-4o-deployment',\n validate: (value) => {\n if (!value?.trim()) return 'Deployment name is required';\n },\n });\n\n if (p.isCancel(deploymentName)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n\n const connectionMethod = await p.select({\n message: 'How would you like to connect to Azure?',\n options: [\n { value: 'resource', label: 'Azure Resource Name (recommended)' },\n { value: 'url', label: 'Custom Base URL' },\n ],\n });\n\n if (p.isCancel(connectionMethod)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n\n if (connectionMethod === 'resource') {\n const resourceName = await p.text({\n message: 'Enter your Azure resource name:',\n placeholder: 'your-azure-resource',\n validate: (value) => {\n if (!value?.trim()) return 'Resource name is required';\n },\n });\n\n if (p.isCancel(resourceName)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n\n azureConfigs.resourceName = resourceName;\n } else {\n const baseURL = await p.text({\n message: 'Enter your Azure base URL:',\n placeholder: 'https://your-endpoint.openai.azure.com/openai',\n validate: (value) => {\n if (!value?.trim()) return 'Base URL is required';\n if (!value.startsWith('https://')) return 'Base URL must start with https://';\n },\n });\n\n if (p.isCancel(baseURL)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n\n azureConfigs.baseURL = baseURL;\n }\n\n azureConfigs.deploymentName = deploymentName;\n azureConfigs.model = `azure/${deploymentName}`;\n }\n\n // Collect all available models based on selected providers\n const availableModels = [];\n if (providers.includes('anthropic')) {\n availableModels.push(...anthropicModels);\n }\n if (providers.includes('openai')) {\n availableModels.push(...openaiModels);\n }\n if (providers.includes('google')) {\n availableModels.push(...googleModels);\n }\n if (providers.includes('azure') && azureConfigs.model) {\n availableModels.push({\n label: `${azureConfigs.deploymentName} (Azure)`,\n value: azureConfigs.model,\n });\n }\n\n // Model selection for different use cases\n const baseModel = (await p.select({\n message: 'Select your default model for general tasks (required):',\n options: availableModels,\n })) as string;\n\n if (p.isCancel(baseModel)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n\n const configureOptionalModels = await p.confirm({\n message: 'Would you like to configure optional models for structured output and summaries?',\n initialValue: false,\n });\n\n if (p.isCancel(configureOptionalModels)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n\n let structuredOutputModel: string | null = null;\n let summarizerModel: string | null = null;\n\n if (configureOptionalModels) {\n const optionalChoices = [...availableModels, { label: 'Use base model', value: null }];\n\n const structuredOutputResponse = await p.select({\n message: 'Select your model for structured output tasks (or use base model):',\n options: optionalChoices,\n });\n\n if (p.isCancel(structuredOutputResponse)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n structuredOutputModel = structuredOutputResponse as string | null;\n\n const summarizerResponse = await p.select({\n message: 'Select your model for summaries and quick tasks (or use base model):',\n options: optionalChoices,\n });\n\n if (p.isCancel(summarizerResponse)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n summarizerModel = summarizerResponse as string | null;\n }\n\n // Helper function to add Azure provider options if needed\n const addProviderOptions = (model: string) => {\n if (model.startsWith('azure/') && (azureConfigs.resourceName || azureConfigs.baseURL)) {\n const providerOptions: any = {};\n if (azureConfigs.resourceName) {\n providerOptions.resourceName = azureConfigs.resourceName;\n }\n if (azureConfigs.baseURL) {\n providerOptions.baseURL = azureConfigs.baseURL;\n }\n return providerOptions;\n }\n return undefined;\n };\n\n // Build model settings object\n const modelSettings: any = {\n base: {\n model: baseModel,\n },\n };\n\n // Add Azure provider options to base model if needed\n const baseProviderOptions = addProviderOptions(baseModel);\n if (baseProviderOptions) {\n modelSettings.base.providerOptions = baseProviderOptions;\n }\n\n // Add optional models only if they were configured\n if (structuredOutputModel) {\n modelSettings.structuredOutput = {\n model: structuredOutputModel,\n };\n\n const structuredProviderOptions = addProviderOptions(structuredOutputModel);\n if (structuredProviderOptions) {\n modelSettings.structuredOutput.providerOptions = structuredProviderOptions;\n }\n }\n\n if (summarizerModel) {\n modelSettings.summarizer = {\n model: summarizerModel,\n };\n\n const summarizerProviderOptions = addProviderOptions(summarizerModel);\n if (summarizerProviderOptions) {\n modelSettings.summarizer.providerOptions = summarizerProviderOptions;\n }\n }\n\n return { modelSettings };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"model-config.js","names":[],"sources":["../../src/utils/model-config.ts"],"sourcesContent":["import * as p from '@clack/prompts';\nimport { ANTHROPIC_MODELS, GOOGLE_MODELS, OPENAI_MODELS } from '@inkeep/agents-core';\n\nexport interface ModelConfigurationResult {\n modelSettings: {\n base: {\n model: string;\n providerOptions?: Record<string, any>;\n };\n structuredOutput?: {\n model: string;\n providerOptions?: Record<string, any>;\n };\n summarizer?: {\n model: string;\n providerOptions?: Record<string, any>;\n };\n };\n}\n\nexport type ModelSettings = ModelConfigurationResult['modelSettings'];\n\nexport const defaultGeminiModelConfigurations: ModelSettings = {\n base: {\n model: GOOGLE_MODELS.GEMINI_2_5_FLASH,\n },\n structuredOutput: {\n model: GOOGLE_MODELS.GEMINI_2_5_FLASH_LITE,\n },\n summarizer: {\n model: GOOGLE_MODELS.GEMINI_2_5_FLASH_LITE,\n },\n};\n\nexport const defaultOpenaiModelConfigurations: ModelSettings = {\n base: {\n model: OPENAI_MODELS.GPT_5_2,\n },\n structuredOutput: {\n model: OPENAI_MODELS.GPT_4_1_MINI,\n },\n summarizer: {\n model: OPENAI_MODELS.GPT_5_4_NANO,\n },\n};\n\nexport const defaultAnthropicModelConfigurations: ModelSettings = {\n base: {\n model: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5,\n },\n structuredOutput: {\n model: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5,\n },\n summarizer: {\n model: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5,\n },\n};\n\n/**\n * Prompt user for model configuration (providers and model selection)\n * This is shared between init and push commands\n */\nexport async function promptForModelConfiguration(): Promise<ModelConfigurationResult> {\n // Provider selection\n const providers = (await p.multiselect({\n message: 'Which AI providers would you like to configure?',\n options: [\n { value: 'anthropic', label: 'Anthropic (Claude)' },\n { value: 'openai', label: 'OpenAI (GPT)' },\n { value: 'google', label: 'Google (Gemini)' },\n { value: 'azure', label: 'Azure OpenAI' },\n ],\n required: true,\n })) as string[];\n\n if (p.isCancel(providers)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n\n // Available models for each provider (matching frontend options)\n const anthropicModels = [\n { label: 'Claude Opus 4.7', value: ANTHROPIC_MODELS.CLAUDE_OPUS_4_7 },\n { label: 'Claude Opus 4.6', value: ANTHROPIC_MODELS.CLAUDE_OPUS_4_6 },\n { label: 'Claude Opus 4.5', value: ANTHROPIC_MODELS.CLAUDE_OPUS_4_5 },\n { label: 'Claude Sonnet 4.6', value: ANTHROPIC_MODELS.CLAUDE_SONNET_4_6 },\n { label: 'Claude Sonnet 4.5', value: ANTHROPIC_MODELS.CLAUDE_SONNET_4_5 },\n { label: 'Claude Haiku 4.5', value: ANTHROPIC_MODELS.CLAUDE_HAIKU_4_5 },\n { label: 'Claude Opus 4.1', value: ANTHROPIC_MODELS.CLAUDE_OPUS_4_1 },\n ];\n\n const openaiModels = [\n { label: 'GPT-5.5 Pro', value: OPENAI_MODELS.GPT_5_5_PRO },\n { label: 'GPT-5.4 Pro', value: OPENAI_MODELS.GPT_5_4_PRO },\n { label: 'GPT-5.2 Pro', value: OPENAI_MODELS.GPT_5_2_PRO },\n { label: 'GPT-5.5', value: OPENAI_MODELS.GPT_5_5 },\n { label: 'GPT-5.4', value: OPENAI_MODELS.GPT_5_4 },\n { label: 'GPT-5.2', value: OPENAI_MODELS.GPT_5_2 },\n { label: 'GPT-5.1', value: OPENAI_MODELS.GPT_5_1 },\n { label: 'GPT-5', value: OPENAI_MODELS.GPT_5 },\n { label: 'GPT-5.3 Codex', value: OPENAI_MODELS.GPT_5_3_CODEX },\n { label: 'GPT-5.4 Mini', value: OPENAI_MODELS.GPT_5_4_MINI },\n { label: 'GPT-5 Mini', value: OPENAI_MODELS.GPT_5_MINI },\n { label: 'GPT-5.4 Nano', value: OPENAI_MODELS.GPT_5_4_NANO },\n { label: 'GPT-5 Nano', value: OPENAI_MODELS.GPT_5_NANO },\n { label: 'o3 Pro', value: OPENAI_MODELS.O3_PRO },\n { label: 'o3', value: OPENAI_MODELS.O3 },\n { label: 'GPT-4.1', value: OPENAI_MODELS.GPT_4_1 },\n { label: 'GPT-4.1 Mini', value: OPENAI_MODELS.GPT_4_1_MINI },\n ];\n\n const googleModels = [\n { label: 'Gemini 3.1 Pro Preview', value: GOOGLE_MODELS.GEMINI_3_1_PRO_PREVIEW },\n { label: 'Gemini 3.5 Flash', value: GOOGLE_MODELS.GEMINI_3_5_FLASH },\n { label: 'Gemini 3.1 Flash Lite', value: GOOGLE_MODELS.GEMINI_3_1_FLASH_LITE },\n { label: 'Gemini 2.5 Pro', value: GOOGLE_MODELS.GEMINI_2_5_PRO },\n { label: 'Gemini 2.5 Flash', value: GOOGLE_MODELS.GEMINI_2_5_FLASH },\n { label: 'Gemini 2.5 Flash Lite', value: GOOGLE_MODELS.GEMINI_2_5_FLASH_LITE },\n ];\n\n // Handle Azure configuration if selected\n const azureConfigs: any = {};\n if (providers.includes('azure')) {\n p.note('Azure OpenAI requires custom deployment configuration.');\n\n const deploymentName = await p.text({\n message: 'Enter your Azure deployment name:',\n placeholder: 'my-gpt-4o-deployment',\n validate: (value) => {\n if (!value?.trim()) return 'Deployment name is required';\n },\n });\n\n if (p.isCancel(deploymentName)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n\n const connectionMethod = await p.select({\n message: 'How would you like to connect to Azure?',\n options: [\n { value: 'resource', label: 'Azure Resource Name (recommended)' },\n { value: 'url', label: 'Custom Base URL' },\n ],\n });\n\n if (p.isCancel(connectionMethod)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n\n if (connectionMethod === 'resource') {\n const resourceName = await p.text({\n message: 'Enter your Azure resource name:',\n placeholder: 'your-azure-resource',\n validate: (value) => {\n if (!value?.trim()) return 'Resource name is required';\n },\n });\n\n if (p.isCancel(resourceName)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n\n azureConfigs.resourceName = resourceName;\n } else {\n const baseURL = await p.text({\n message: 'Enter your Azure base URL:',\n placeholder: 'https://your-endpoint.openai.azure.com/openai',\n validate: (value) => {\n if (!value?.trim()) return 'Base URL is required';\n if (!value.startsWith('https://')) return 'Base URL must start with https://';\n },\n });\n\n if (p.isCancel(baseURL)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n\n azureConfigs.baseURL = baseURL;\n }\n\n azureConfigs.deploymentName = deploymentName;\n azureConfigs.model = `azure/${deploymentName}`;\n }\n\n // Collect all available models based on selected providers\n const availableModels = [];\n if (providers.includes('anthropic')) {\n availableModels.push(...anthropicModels);\n }\n if (providers.includes('openai')) {\n availableModels.push(...openaiModels);\n }\n if (providers.includes('google')) {\n availableModels.push(...googleModels);\n }\n if (providers.includes('azure') && azureConfigs.model) {\n availableModels.push({\n label: `${azureConfigs.deploymentName} (Azure)`,\n value: azureConfigs.model,\n });\n }\n\n // Model selection for different use cases\n const baseModel = (await p.select({\n message: 'Select your default model for general tasks (required):',\n options: availableModels,\n })) as string;\n\n if (p.isCancel(baseModel)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n\n const configureOptionalModels = await p.confirm({\n message: 'Would you like to configure optional models for structured output and summaries?',\n initialValue: false,\n });\n\n if (p.isCancel(configureOptionalModels)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n\n let structuredOutputModel: string | null = null;\n let summarizerModel: string | null = null;\n\n if (configureOptionalModels) {\n const optionalChoices = [...availableModels, { label: 'Use base model', value: null }];\n\n const structuredOutputResponse = await p.select({\n message: 'Select your model for structured output tasks (or use base model):',\n options: optionalChoices,\n });\n\n if (p.isCancel(structuredOutputResponse)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n structuredOutputModel = structuredOutputResponse as string | null;\n\n const summarizerResponse = await p.select({\n message: 'Select your model for summaries and quick tasks (or use base model):',\n options: optionalChoices,\n });\n\n if (p.isCancel(summarizerResponse)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n summarizerModel = summarizerResponse as string | null;\n }\n\n // Helper function to add Azure provider options if needed\n const addProviderOptions = (model: string) => {\n if (model.startsWith('azure/') && (azureConfigs.resourceName || azureConfigs.baseURL)) {\n const providerOptions: any = {};\n if (azureConfigs.resourceName) {\n providerOptions.resourceName = azureConfigs.resourceName;\n }\n if (azureConfigs.baseURL) {\n providerOptions.baseURL = azureConfigs.baseURL;\n }\n return providerOptions;\n }\n return undefined;\n };\n\n // Build model settings object\n const modelSettings: any = {\n base: {\n model: baseModel,\n },\n };\n\n // Add Azure provider options to base model if needed\n const baseProviderOptions = addProviderOptions(baseModel);\n if (baseProviderOptions) {\n modelSettings.base.providerOptions = baseProviderOptions;\n }\n\n // Add optional models only if they were configured\n if (structuredOutputModel) {\n modelSettings.structuredOutput = {\n model: structuredOutputModel,\n };\n\n const structuredProviderOptions = addProviderOptions(structuredOutputModel);\n if (structuredProviderOptions) {\n modelSettings.structuredOutput.providerOptions = structuredProviderOptions;\n }\n }\n\n if (summarizerModel) {\n modelSettings.summarizer = {\n model: summarizerModel,\n };\n\n const summarizerProviderOptions = addProviderOptions(summarizerModel);\n if (summarizerProviderOptions) {\n modelSettings.summarizer.providerOptions = summarizerProviderOptions;\n }\n }\n\n return { modelSettings };\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inkeep/agents-cli",
3
- "version": "0.74.2",
3
+ "version": "0.74.3",
4
4
  "description": "Inkeep CLI tool",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -22,7 +22,7 @@
22
22
  "dependencies": {
23
23
  "@clack/prompts": "^0.11.0",
24
24
  "@vercel/otel": "^2.0.1",
25
- "ai": "6.0.14",
25
+ "ai": "6.0.191",
26
26
  "chalk": "^5.3.0",
27
27
  "cli-table3": "^0.6.3",
28
28
  "commander": "^14.0.0",
@@ -39,8 +39,8 @@
39
39
  "tsx": "^4.20.5",
40
40
  "yaml": "^2.7.0",
41
41
  "zod": "^4.3.6",
42
- "@inkeep/agents-core": "^0.74.2",
43
- "@inkeep/agents-sdk": "^0.74.2"
42
+ "@inkeep/agents-core": "^0.74.3",
43
+ "@inkeep/agents-sdk": "^0.74.3"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@types/degit": "^2.8.6",