create-cogitator-app 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/lib.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/scaffold.ts","../src/utils/providers.ts","../src/templates/versions.ts","../src/templates/basic.ts","../src/templates/memory.ts","../src/templates/swarm.ts","../src/templates/workflow.ts","../src/templates/api-server.ts","../src/templates/nextjs.ts","../src/templates/index.ts","../src/templates/base/tsconfig.ts","../src/templates/base/gitignore.ts","../src/templates/base/env-example.ts","../src/templates/base/docker-compose.ts","../src/templates/base/cogitator-yml.ts","../src/utils/package-manager.ts","../src/utils/links.ts","../src/templates/base/readme.ts","../src/templates/base/pnpm-workspace.ts","../src/utils/git.ts","../src/prompts.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport * as p from '@clack/prompts';\nimport type { ProjectOptions, ScaffoldResult, ScaffoldStep, TemplateFile } from './types.js';\nimport { getTemplate } from './templates/index.js';\nimport { generateTsconfig } from './templates/base/tsconfig.js';\nimport { generateGitignore } from './templates/base/gitignore.js';\nimport { generateEnvExample } from './templates/base/env-example.js';\nimport { generateDockerCompose } from './templates/base/docker-compose.js';\nimport { generateCogitatorYml } from './templates/base/cogitator-yml.js';\nimport { generateReadme } from './templates/base/readme.js';\nimport { generatePnpmWorkspace } from './templates/base/pnpm-workspace.js';\nimport { installDependencies } from './utils/package-manager.js';\nimport { initGitRepo, isGitInstalled } from './utils/git.js';\n\nfunction writeFile(basePath: string, file: TemplateFile) {\n const fullPath = path.join(basePath, file.path);\n fs.mkdirSync(path.dirname(fullPath), { recursive: true });\n fs.writeFileSync(fullPath, file.content, 'utf-8');\n}\n\nfunction buildPackageJson(options: ProjectOptions): string {\n const template = getTemplate(options.template);\n const isNextjs = options.template === 'nextjs';\n\n const pkg: Record<string, unknown> = {\n name: options.name,\n version: '0.1.0',\n private: true,\n ...(isNextjs ? {} : { type: 'module' }),\n scripts: template.scripts(),\n dependencies: template.dependencies(),\n devDependencies: template.devDependencies(),\n };\n\n return JSON.stringify(pkg, null, 2) + '\\n';\n}\n\nfunction collectFiles(options: ProjectOptions): TemplateFile[] {\n const template = getTemplate(options.template);\n const files: TemplateFile[] = [];\n\n files.push({ path: 'package.json', content: buildPackageJson(options) });\n files.push(...template.files(options));\n files.push(generateGitignore());\n files.push(generateEnvExample(options.provider, options.template));\n files.push(generateCogitatorYml(options.provider, options.template));\n files.push(generateReadme(options));\n\n if (options.template !== 'nextjs') {\n files.push(generateTsconfig());\n }\n\n if (options.packageManager === 'pnpm') {\n files.push(generatePnpmWorkspace());\n }\n\n if (options.docker) {\n files.push(generateDockerCompose(options.provider));\n }\n\n return files;\n}\n\nfunction runStep(\n spinner: ReturnType<typeof p.spinner>,\n messages: { start: string; done: string; failed: string },\n step: () => void\n): ScaffoldStep {\n spinner.start(messages.start);\n try {\n step();\n spinner.stop(messages.done);\n return { status: 'done' };\n } catch (error) {\n spinner.stop(messages.failed);\n return { status: 'failed', error: error instanceof Error ? error : new Error(String(error)) };\n }\n}\n\n/**\n * Writes the project described by `options`, then installs its dependencies\n * (unless `install` is `false`) and initializes git (when `git` is `true`).\n * Throws when `path` exists and is not empty. A failed install or git step\n * does not throw: the result reports it, and the project stays written.\n */\nexport async function scaffold(options: ProjectOptions): Promise<ScaffoldResult> {\n if (fs.existsSync(options.path) && fs.readdirSync(options.path).length > 0) {\n throw new Error(`Directory \"${options.path}\" already exists and is not empty`);\n }\n\n const s = p.spinner();\n\n s.start('Generating project files');\n const files = collectFiles(options);\n\n fs.mkdirSync(options.path, { recursive: true });\n for (const file of files) {\n writeFile(options.path, file);\n }\n s.stop('Generated project files');\n\n const install: ScaffoldStep =\n options.install === false\n ? { status: 'skipped' }\n : runStep(\n s,\n {\n start: 'Installing dependencies',\n done: 'Installed dependencies',\n failed: `Failed to install dependencies, run \"${options.packageManager} install\" yourself`,\n },\n () => installDependencies(options.path, options.packageManager)\n );\n\n const git: ScaffoldStep =\n options.git && isGitInstalled()\n ? runStep(\n s,\n {\n start: 'Initializing git repository',\n done: 'Initialized git repository',\n failed: 'Failed to initialize git, run \"git init\" yourself',\n },\n () => initGitRepo(options.path)\n )\n : { status: 'skipped' };\n\n return { files: files.map((file) => file.path), install, git };\n}\n","import type { LLMProvider } from '../types.js';\n\nexport const defaultModels: Record<LLMProvider, string> = {\n ollama: 'qwen3:8b',\n openai: 'gpt-6.1-sol',\n anthropic: 'claude-sonnet-5-5',\n google: 'gemini-3.8-flash',\n};\n\nexport function providerEnvKey(provider: LLMProvider): string {\n const map: Record<LLMProvider, string> = {\n ollama: 'OLLAMA_BASE_URL',\n openai: 'OPENAI_API_KEY',\n anthropic: 'ANTHROPIC_API_KEY',\n google: 'GOOGLE_API_KEY',\n };\n return map[provider];\n}\n\nexport function providerConfig(provider: LLMProvider): string {\n switch (provider) {\n case 'ollama':\n return [\n ` llm: {`,\n ` defaultProvider: 'ollama',`,\n ` providers: {`,\n ` ollama: { baseUrl: process.env.OLLAMA_BASE_URL || 'http://localhost:11434' },`,\n ` },`,\n ` },`,\n ].join('\\n');\n\n case 'openai':\n return [\n ` llm: {`,\n ` defaultProvider: 'openai',`,\n ` providers: {`,\n ` openai: { apiKey: process.env.OPENAI_API_KEY! },`,\n ` },`,\n ` },`,\n ].join('\\n');\n\n case 'anthropic':\n return [\n ` llm: {`,\n ` defaultProvider: 'anthropic',`,\n ` providers: {`,\n ` anthropic: { apiKey: process.env.ANTHROPIC_API_KEY! },`,\n ` },`,\n ` },`,\n ].join('\\n');\n\n case 'google':\n return [\n ` llm: {`,\n ` defaultProvider: 'google',`,\n ` providers: {`,\n ` google: { apiKey: process.env.GOOGLE_API_KEY! },`,\n ` },`,\n ` },`,\n ].join('\\n');\n }\n}\n","/** The zod range generated projects depend on: the one `@cogitator-ai/core` depends on, so tool schemas and core share one zod. */\nexport const ZOD_VERSION = '^4.6.5';\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { defaultModels, providerConfig } from '../utils/providers.js';\nimport { ZOD_VERSION } from './versions.js';\n\nexport const basicTemplate: TemplateGenerator = {\n files(options: ProjectOptions) {\n const model = defaultModels[options.provider];\n\n const indexTs = [\n `import { Cogitator, Agent } from '@cogitator-ai/core'`,\n `import { searchTool, summarizeTool } from './tools.js'`,\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n `})`,\n ``,\n `const agent = new Agent({`,\n ` name: '${options.name}-agent',`,\n ` model: '${model}',`,\n ` instructions: 'You are a helpful AI assistant. Use your tools to help the user.',`,\n ` tools: [searchTool, summarizeTool],`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n `async function main() {`,\n ` const result = await cogitator.run(agent, {`,\n ` input: 'What is Cogitator and how does it work?',`,\n ` })`,\n ``,\n ` console.log(result.output)`,\n `}`,\n ``,\n `main().catch(console.error)`,\n ``,\n ].join('\\n');\n\n const toolsTs = [\n `import { tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `export const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information on a topic',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('The search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Search results for: \\${query}\\\\n\\\\nCogitator is a self-hosted AI agent runtime for TypeScript.\\``,\n ` },`,\n `})`,\n ``,\n `export const summarizeTool = tool({`,\n ` name: 'summarize',`,\n ` description: 'Summarize a piece of text',`,\n ` parameters: z.object({`,\n ` text: z.string().describe('The text to summarize'),`,\n ` maxLength: z.number().optional().describe('Maximum summary length'),`,\n ` }),`,\n ` execute: async ({ text, maxLength }) => {`,\n ` const limit = maxLength || 200`,\n ` return text.length > limit ? text.slice(0, limit) + '...' : text`,\n ` },`,\n `})`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/tools.ts', content: toolsTs },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': 'latest',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n tsx: '^4.19.0',\n '@types/node': '^22.0.0',\n };\n },\n\n scripts() {\n return {\n dev: 'tsx watch src/index.ts',\n start: 'tsx src/index.ts',\n build: 'tsc',\n typecheck: 'tsc --noEmit',\n };\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { defaultModels, providerConfig } from '../utils/providers.js';\nimport { ZOD_VERSION } from './versions.js';\n\nexport const memoryTemplate: TemplateGenerator = {\n files(options: ProjectOptions) {\n const model = defaultModels[options.provider];\n\n const indexTs = [\n `import { Cogitator, Agent } from '@cogitator-ai/core'`,\n `import { searchTool, noteTool } from './tools.js'`,\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n ` memory: {`,\n ` adapter: 'redis',`,\n ` redis: { url: process.env.REDIS_URL || 'redis://localhost:6379' },`,\n ` },`,\n `})`,\n ``,\n `const agent = new Agent({`,\n ` name: '${options.name}-agent',`,\n ` model: '${model}',`,\n ` instructions: [`,\n ` 'You are an AI assistant with persistent memory.',`,\n ` 'You remember past conversations and user preferences.',`,\n ` 'Use the note tool to save important information.',`,\n ` ].join(' '),`,\n ` tools: [searchTool, noteTool],`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n `async function main() {`,\n ` const threadId = 'demo-thread'`,\n ``,\n ` const result1 = await cogitator.run(agent, {`,\n ` input: 'My name is Alex and I prefer TypeScript.',`,\n ` threadId,`,\n ` useMemory: true,`,\n ` })`,\n ` console.log('Response 1:', result1.output)`,\n ``,\n ` const result2 = await cogitator.run(agent, {`,\n ` input: 'What is my name and preferred language?',`,\n ` threadId,`,\n ` useMemory: true,`,\n ` })`,\n ` console.log('Response 2:', result2.output)`,\n ``,\n ` await cogitator.close()`,\n `}`,\n ``,\n `main().catch(console.error)`,\n ``,\n ].join('\\n');\n\n const toolsTs = [\n `import { tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `export const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('Search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Results for: \\${query}\\``,\n ` },`,\n `})`,\n ``,\n `export const noteTool = tool({`,\n ` name: 'note',`,\n ` description: 'Save a note for later reference',`,\n ` parameters: z.object({`,\n ` title: z.string().describe('Note title'),`,\n ` content: z.string().describe('Note content'),`,\n ` }),`,\n ` execute: async ({ title, content }) => {`,\n ` return \\`Saved note \"\\${title}\": \\${content}\\``,\n ` },`,\n `})`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/tools.ts', content: toolsTs },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': 'latest',\n '@cogitator-ai/memory': 'latest',\n '@cogitator-ai/redis': 'latest',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n tsx: '^4.19.0',\n '@types/node': '^22.0.0',\n };\n },\n\n scripts() {\n return {\n dev: 'tsx watch src/index.ts',\n start: 'tsx src/index.ts',\n build: 'tsc',\n typecheck: 'tsc --noEmit',\n };\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { defaultModels, providerConfig } from '../utils/providers.js';\nimport { ZOD_VERSION } from './versions.js';\n\nexport const swarmTemplate: TemplateGenerator = {\n files(options: ProjectOptions) {\n const model = defaultModels[options.provider];\n\n const researcherTs = [\n `import { Agent } from '@cogitator-ai/core'`,\n `import { searchTool } from '../tools.js'`,\n ``,\n `export const researcher = new Agent({`,\n ` name: 'researcher',`,\n ` model: '${model}',`,\n ` instructions: [`,\n ` 'You are a research specialist.',`,\n ` 'Use the search tool to find information.',`,\n ` 'Provide detailed, factual findings.',`,\n ` ].join(' '),`,\n ` tools: [searchTool],`,\n ` temperature: 0.3,`,\n `})`,\n ``,\n ].join('\\n');\n\n const writerTs = [\n `import { Agent } from '@cogitator-ai/core'`,\n ``,\n `export const writer = new Agent({`,\n ` name: 'writer',`,\n ` model: '${model}',`,\n ` instructions: [`,\n ` 'You are a skilled content writer.',`,\n ` 'Take research findings and craft well-structured, engaging content.',`,\n ` 'Focus on clarity and readability.',`,\n ` ].join(' '),`,\n ` temperature: 0.8,`,\n `})`,\n ``,\n ].join('\\n');\n\n const reviewerTs = [\n `import { Agent } from '@cogitator-ai/core'`,\n ``,\n `export const reviewer = new Agent({`,\n ` name: 'reviewer',`,\n ` model: '${model}',`,\n ` instructions: [`,\n ` 'You are a meticulous content reviewer.',`,\n ` 'Check for accuracy, grammar, and overall quality.',`,\n ` 'Provide constructive feedback.',`,\n ` ].join(' '),`,\n ` temperature: 0.2,`,\n `})`,\n ``,\n ].join('\\n');\n\n const toolsTs = [\n `import { tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `export const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information on a topic',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('Search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Research findings for \"\\${query}\": Cogitator is a production-grade AI agent runtime for TypeScript that supports swarms, workflows, and tool execution.\\``,\n ` },`,\n `})`,\n ``,\n ].join('\\n');\n\n const indexTs = [\n `import { Cogitator } from '@cogitator-ai/core'`,\n `import { Swarm } from '@cogitator-ai/swarms'`,\n `import { researcher } from './agents/researcher.js'`,\n `import { writer } from './agents/writer.js'`,\n `import { reviewer } from './agents/reviewer.js'`,\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n `})`,\n ``,\n `const team = new Swarm(cogitator, {`,\n ` name: '${options.name}-team',`,\n ` strategy: 'hierarchical',`,\n ` supervisor: reviewer,`,\n ` workers: [researcher, writer],`,\n ` hierarchical: {`,\n ` visibility: 'full',`,\n ` workerCommunication: true,`,\n ` },`,\n ` resources: {`,\n ` maxConcurrency: 3,`,\n ` timeout: 120000,`,\n ` },`,\n `})`,\n ``,\n `async function main() {`,\n ` console.log('Starting swarm...')`,\n ``,\n ` const result = await team.run({`,\n ` input: 'Write a comprehensive article about AI agent orchestration.',`,\n ` })`,\n ``,\n ` console.log('Result:', result.output)`,\n ` console.log('Strategy:', team.strategyType)`,\n ``,\n ` await team.close()`,\n `}`,\n ``,\n `main().catch(console.error)`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/tools.ts', content: toolsTs },\n { path: 'src/agents/researcher.ts', content: researcherTs },\n { path: 'src/agents/writer.ts', content: writerTs },\n { path: 'src/agents/reviewer.ts', content: reviewerTs },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': 'latest',\n '@cogitator-ai/swarms': 'latest',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n tsx: '^4.19.0',\n '@types/node': '^22.0.0',\n };\n },\n\n scripts() {\n return {\n dev: 'tsx watch src/index.ts',\n start: 'tsx src/index.ts',\n build: 'tsc',\n typecheck: 'tsc --noEmit',\n };\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { defaultModels, providerConfig } from '../utils/providers.js';\nimport { ZOD_VERSION } from './versions.js';\n\nexport const workflowTemplate: TemplateGenerator = {\n files(options: ProjectOptions) {\n const model = defaultModels[options.provider];\n\n const agentsTs = [\n `import { Agent } from '@cogitator-ai/core'`,\n ``,\n `export const analyzer = new Agent({`,\n ` name: 'analyzer',`,\n ` model: '${model}',`,\n ` instructions: 'You analyze input data and extract key information. Be thorough and structured.',`,\n ` temperature: 0.3,`,\n `})`,\n ``,\n `export const processor = new Agent({`,\n ` name: 'processor',`,\n ` model: '${model}',`,\n ` instructions: 'You process analyzed data and transform it into actionable insights.',`,\n ` temperature: 0.5,`,\n `})`,\n ``,\n `export const formatter = new Agent({`,\n ` name: 'formatter',`,\n ` model: '${model}',`,\n ` instructions: 'You format processed data into a clean, readable report.',`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n ].join('\\n');\n\n const indexTs = [\n `import { Cogitator } from '@cogitator-ai/core'`,\n `import {`,\n ` WorkflowBuilder,`,\n ` WorkflowExecutor,`,\n ` agentNode,`,\n ` functionNode,`,\n `} from '@cogitator-ai/workflows'`,\n `import { analyzer, processor, formatter } from './agents.js'`,\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n `})`,\n ``,\n `type WorkflowState = {`,\n ` input: string`,\n ` analysis?: string`,\n ` processed?: string`,\n ` report?: string`,\n `}`,\n ``,\n `const analyzeNode = agentNode<WorkflowState>(analyzer, {`,\n ` inputMapper: (state) => \\`Analyze the following: \\${state.input}\\`,`,\n ` stateMapper: (result) => ({ analysis: result.output }),`,\n `})`,\n ``,\n `const processNode = agentNode<WorkflowState>(processor, {`,\n ` inputMapper: (state) => \\`Process this analysis: \\${state.analysis ?? ''}\\`,`,\n ` stateMapper: (result) => ({ processed: result.output }),`,\n `})`,\n ``,\n `const formatNode = agentNode<WorkflowState>(formatter, {`,\n ` inputMapper: (state) => \\`Format this into a report: \\${state.processed ?? ''}\\`,`,\n ` stateMapper: (result) => ({ report: result.output }),`,\n `})`,\n ``,\n `const outputNode = functionNode<WorkflowState>(`,\n ` 'output',`,\n ` async (state) => state.report,`,\n `)`,\n ``,\n `const workflow = new WorkflowBuilder<WorkflowState>('${options.name}-workflow')`,\n ` .initialState({ input: '' })`,\n ` .entryPoint(analyzeNode.name)`,\n ` .addNode(analyzeNode.name, analyzeNode.fn)`,\n ` .addNode(processNode.name, processNode.fn, { after: [analyzeNode.name] })`,\n ` .addNode(formatNode.name, formatNode.fn, { after: [processNode.name] })`,\n ` .addNode(outputNode.name, outputNode.fn, { after: [formatNode.name] })`,\n ` .build()`,\n ``,\n `async function main() {`,\n ` const executor = new WorkflowExecutor(cogitator)`,\n ``,\n ` console.log('Starting workflow...')`,\n ``,\n ` const result = await executor.execute(workflow, {`,\n ` input: 'Analyze the current state of AI agent frameworks and their adoption in enterprise.',`,\n ` })`,\n ``,\n ` console.log('Workflow completed!')`,\n ` console.log('Result:', JSON.stringify(result, null, 2))`,\n `}`,\n ``,\n `main().catch(console.error)`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/agents.ts', content: agentsTs },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': 'latest',\n '@cogitator-ai/workflows': 'latest',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n tsx: '^4.19.0',\n '@types/node': '^22.0.0',\n };\n },\n\n scripts() {\n return {\n dev: 'tsx watch src/index.ts',\n start: 'tsx src/index.ts',\n build: 'tsc',\n typecheck: 'tsc --noEmit',\n };\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { defaultModels, providerConfig } from '../utils/providers.js';\nimport { ZOD_VERSION } from './versions.js';\n\n/** Where the generated server mounts the Cogitator routes. */\nconst BASE_PATH = '/api';\n\nexport const apiServerTemplate: TemplateGenerator = {\n healthPath: `${BASE_PATH}/health`,\n\n files(options: ProjectOptions) {\n const model = defaultModels[options.provider];\n\n const agentsTs = [\n `import { Agent, tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('Search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Results for: \\${query}\\``,\n ` },`,\n `})`,\n ``,\n `export const assistant = new Agent({`,\n ` name: 'assistant',`,\n ` model: '${model}',`,\n ` instructions: 'You are a helpful API assistant. Answer questions clearly and concisely.',`,\n ` tools: [searchTool],`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n `export const coder = new Agent({`,\n ` name: 'coder',`,\n ` model: '${model}',`,\n ` instructions: 'You are an expert programmer. Write clean, well-structured code.',`,\n ` temperature: 0.3,`,\n `})`,\n ``,\n ].join('\\n');\n\n const indexTs = [\n `import express from 'express'`,\n `import { Cogitator } from '@cogitator-ai/core'`,\n `import { CogitatorServer } from '@cogitator-ai/express'`,\n `import { assistant, coder } from './agents.js'`,\n ``,\n `const app = express()`,\n `const port = process.env.PORT || 3000`,\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n `})`,\n ``,\n `const server = new CogitatorServer({`,\n ` app,`,\n ` cogitator,`,\n ` agents: { assistant, coder },`,\n ` config: {`,\n ` basePath: '${BASE_PATH}',`,\n ` enableSwagger: true,`,\n ` cors: { origin: '*' },`,\n ` swagger: {`,\n ` title: '${options.name} API',`,\n ` version: '1.0.0',`,\n ` },`,\n ` },`,\n `})`,\n ``,\n `async function main() {`,\n ` await server.init()`,\n ``,\n ` app.listen(port, () => {`,\n ` console.log(\\`Server running at http://localhost:\\${port}\\`)`,\n ` console.log(\\`Swagger docs at http://localhost:\\${port}${BASE_PATH}/docs\\`)`,\n ` })`,\n `}`,\n ``,\n `main().catch(console.error)`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/agents.ts', content: agentsTs },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': 'latest',\n '@cogitator-ai/express': 'latest',\n express: '^5.2.1',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n tsx: '^4.19.0',\n '@types/node': '^22.0.0',\n '@types/express': '^5.0.6',\n };\n },\n\n scripts() {\n return {\n dev: 'tsx watch src/index.ts',\n start: 'tsx src/index.ts',\n build: 'tsc',\n typecheck: 'tsc --noEmit',\n };\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { defaultModels, providerConfig } from '../utils/providers.js';\nimport { ZOD_VERSION } from './versions.js';\n\nexport const nextjsTemplate: TemplateGenerator = {\n healthPath: '/api/health',\n\n files(options: ProjectOptions) {\n const model = defaultModels[options.provider];\n\n const agentTs = [\n `import { Cogitator, Agent, tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('Search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Results for: \\${query}\\``,\n ` },`,\n `})`,\n ``,\n `export const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n `})`,\n ``,\n `export const agent = new Agent({`,\n ` name: '${options.name}-chat',`,\n ` model: '${model}',`,\n ` instructions: 'You are a helpful AI chat assistant. Be conversational and helpful.',`,\n ` tools: [searchTool],`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n ].join('\\n');\n\n const routeTs = [\n `import { createChatHandler } from '@cogitator-ai/next'`,\n `import { cogitator, agent } from '@/lib/agent'`,\n ``,\n `export const POST = createChatHandler(cogitator, agent)`,\n ``,\n ].join('\\n');\n\n const healthRouteTs = [\n `export function GET() {`,\n ` return Response.json({ status: 'ok' })`,\n `}`,\n ``,\n ].join('\\n');\n\n const pageTsx = [\n `'use client'`,\n ``,\n `import { useCogitatorChat } from '@cogitator-ai/next/client'`,\n `import { useState, useRef, useEffect } from 'react'`,\n ``,\n `export default function Home() {`,\n ` const { messages, input, setInput, send, isLoading } = useCogitatorChat({`,\n ` api: '/api/chat',`,\n ` })`,\n ` const messagesEndRef = useRef<HTMLDivElement>(null)`,\n ``,\n ` useEffect(() => {`,\n ` messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' })`,\n ` }, [messages])`,\n ``,\n ` const handleSubmit = (e: React.FormEvent) => {`,\n ` e.preventDefault()`,\n ` if (!input.trim() || isLoading) return`,\n ` send(input)`,\n ` setInput('')`,\n ` }`,\n ``,\n ` return (`,\n ` <main className=\"flex min-h-screen flex-col items-center p-4 bg-gray-950 text-white\">`,\n ` <div className=\"w-full max-w-2xl flex flex-col h-screen\">`,\n ` <header className=\"py-6 text-center\">`,\n ` <h1 className=\"text-2xl font-bold\">${options.name}</h1>`,\n ` <p className=\"text-gray-400 text-sm mt-1\">Powered by Cogitator</p>`,\n ` </header>`,\n ``,\n ` <div className=\"flex-1 overflow-y-auto space-y-4 pb-4\">`,\n ` {messages.map((msg, i) => (`,\n ` <div`,\n ` key={i}`,\n ` className={\\`flex \\${msg.role === 'user' ? 'justify-end' : 'justify-start'}\\`}`,\n ` >`,\n ` <div`,\n ` className={\\`max-w-[80%] rounded-2xl px-4 py-2 \\${`,\n ` msg.role === 'user'`,\n ` ? 'bg-blue-600 text-white'`,\n ` : 'bg-gray-800 text-gray-100'`,\n ` }\\`}`,\n ` >`,\n ` {msg.content}`,\n ` </div>`,\n ` </div>`,\n ` ))}`,\n ` {isLoading && (`,\n ` <div className=\"flex justify-start\">`,\n ` <div className=\"bg-gray-800 rounded-2xl px-4 py-2 text-gray-400\">`,\n ` Thinking...`,\n ` </div>`,\n ` </div>`,\n ` )}`,\n ` <div ref={messagesEndRef} />`,\n ` </div>`,\n ``,\n ` <form onSubmit={handleSubmit} className=\"flex gap-2 py-4\">`,\n ` <input`,\n ` value={input}`,\n ` onChange={(e) => setInput(e.target.value)}`,\n ` placeholder=\"Type a message...\"`,\n ` className=\"flex-1 bg-gray-800 border border-gray-700 rounded-xl px-4 py-3 text-white placeholder-gray-500 focus:outline-none focus:border-blue-500\"`,\n ` />`,\n ` <button`,\n ` type=\"submit\"`,\n ` disabled={isLoading || !input.trim()}`,\n ` className=\"bg-blue-600 hover:bg-blue-500 disabled:opacity-50 disabled:cursor-not-allowed text-white rounded-xl px-6 py-3 font-medium transition-colors\"`,\n ` >`,\n ` Send`,\n ` </button>`,\n ` </form>`,\n ` </div>`,\n ` </main>`,\n ` )`,\n `}`,\n ``,\n ].join('\\n');\n\n const layoutTsx = [\n `import type { Metadata } from 'next'`,\n `import './globals.css'`,\n ``,\n `export const metadata: Metadata = {`,\n ` title: '${options.name}',`,\n ` description: 'AI chat app powered by Cogitator',`,\n `}`,\n ``,\n `export default function RootLayout({`,\n ` children,`,\n `}: {`,\n ` children: React.ReactNode`,\n `}) {`,\n ` return (`,\n ` <html lang=\"en\">`,\n ` <body>{children}</body>`,\n ` </html>`,\n ` )`,\n `}`,\n ``,\n ].join('\\n');\n\n const globalsCss = [\n `@tailwind base;`,\n `@tailwind components;`,\n `@tailwind utilities;`,\n ``,\n ].join('\\n');\n\n const nextConfig = [\n `import type { NextConfig } from 'next'`,\n ``,\n `const config: NextConfig = {}`,\n ``,\n `export default config`,\n ``,\n ].join('\\n');\n\n const tsconfigJson = JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2017',\n lib: ['dom', 'dom.iterable', 'esnext'],\n allowJs: true,\n skipLibCheck: true,\n strict: true,\n noEmit: true,\n esModuleInterop: true,\n module: 'esnext',\n moduleResolution: 'bundler',\n resolveJsonModule: true,\n isolatedModules: true,\n jsx: 'preserve',\n incremental: true,\n plugins: [{ name: 'next' }],\n paths: { '@/*': ['./src/*'] },\n },\n include: ['next-env.d.ts', '**/*.ts', '**/*.tsx', '.next/types/**/*.ts'],\n exclude: ['node_modules'],\n },\n null,\n 2\n );\n\n const tailwindConfig = [\n `import type { Config } from 'tailwindcss'`,\n ``,\n `const config: Config = {`,\n ` content: ['./src/**/*.{ts,tsx}'],`,\n ` theme: { extend: {} },`,\n ` plugins: [],`,\n `}`,\n ``,\n `export default config`,\n ``,\n ].join('\\n');\n\n const postcssConfig = [\n `const config = {`,\n ` plugins: {`,\n ` tailwindcss: {},`,\n ` autoprefixer: {},`,\n ` },`,\n `}`,\n ``,\n `export default config`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/lib/agent.ts', content: agentTs },\n { path: 'src/app/api/chat/route.ts', content: routeTs },\n { path: 'src/app/api/health/route.ts', content: healthRouteTs },\n { path: 'src/app/page.tsx', content: pageTsx },\n { path: 'src/app/layout.tsx', content: layoutTsx },\n { path: 'src/app/globals.css', content: globalsCss },\n { path: 'next.config.ts', content: nextConfig },\n { path: 'tsconfig.json', content: tsconfigJson },\n { path: 'tailwind.config.ts', content: tailwindConfig },\n { path: 'postcss.config.mjs', content: postcssConfig },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': 'latest',\n '@cogitator-ai/next': 'latest',\n next: '^15.0.0',\n react: '^19.0.0',\n 'react-dom': '^19.0.0',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n '@types/node': '^22.0.0',\n '@types/react': '^19.0.0',\n '@types/react-dom': '^19.0.0',\n tailwindcss: '^3.4.0',\n autoprefixer: '^10.4.0',\n postcss: '^8.4.0',\n };\n },\n\n scripts() {\n return {\n dev: 'next dev',\n build: 'next build',\n start: 'next start',\n lint: 'next lint',\n };\n },\n};\n","import type { Template, TemplateGenerator } from '../types.js';\nimport { basicTemplate } from './basic.js';\nimport { memoryTemplate } from './memory.js';\nimport { swarmTemplate } from './swarm.js';\nimport { workflowTemplate } from './workflow.js';\nimport { apiServerTemplate } from './api-server.js';\nimport { nextjsTemplate } from './nextjs.js';\n\nconst templates: Record<Template, TemplateGenerator> = {\n basic: basicTemplate,\n memory: memoryTemplate,\n swarm: swarmTemplate,\n workflow: workflowTemplate,\n 'api-server': apiServerTemplate,\n nextjs: nextjsTemplate,\n};\n\nexport function getTemplate(name: Template): TemplateGenerator {\n return templates[name];\n}\n\nexport const templateChoices: Array<{\n value: Template;\n label: string;\n hint: string;\n}> = [\n {\n value: 'basic',\n label: 'Basic agent',\n hint: 'Single agent with tools — best for getting started',\n },\n { value: 'memory', label: 'Agent with memory', hint: 'Persistent memory with Redis' },\n {\n value: 'swarm',\n label: 'Multi-agent swarm',\n hint: 'Team of agents with hierarchical coordination',\n },\n { value: 'workflow', label: 'DAG workflow', hint: 'Multi-step pipeline with checkpoints' },\n {\n value: 'api-server',\n label: 'REST API server',\n hint: 'Express server exposing agents via HTTP',\n },\n { value: 'nextjs', label: 'Next.js chat app', hint: 'Full-stack chat app with streaming' },\n];\n","import type { TemplateFile } from '../../types.js';\n\nexport function generateTsconfig(): TemplateFile {\n return {\n path: 'tsconfig.json',\n content: JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n module: 'NodeNext',\n moduleResolution: 'NodeNext',\n esModuleInterop: true,\n strict: true,\n skipLibCheck: true,\n outDir: 'dist',\n rootDir: 'src',\n declaration: true,\n resolveJsonModule: true,\n isolatedModules: true,\n },\n include: ['src'],\n },\n null,\n 2\n ),\n };\n}\n","import type { TemplateFile } from '../../types.js';\n\nexport function generateGitignore(): TemplateFile {\n return {\n path: '.gitignore',\n content: [\n 'node_modules/',\n 'dist/',\n '.env',\n '.env.local',\n '*.log',\n '.DS_Store',\n 'coverage/',\n '.turbo/',\n '',\n ].join('\\n'),\n };\n}\n","import type { LLMProvider, Template, TemplateFile } from '../../types.js';\n\nexport function generateEnvExample(provider: LLMProvider, template?: Template): TemplateFile {\n const lines: string[] = ['# Cogitator Environment Variables', ''];\n\n switch (provider) {\n case 'ollama':\n lines.push('# Ollama (default: http://localhost:11434)');\n lines.push('# OLLAMA_BASE_URL=http://localhost:11434');\n break;\n case 'openai':\n lines.push('# OpenAI');\n lines.push('OPENAI_API_KEY=sk-...');\n break;\n case 'anthropic':\n lines.push('# Anthropic');\n lines.push('ANTHROPIC_API_KEY=sk-ant-...');\n break;\n case 'google':\n lines.push('# Google AI');\n lines.push('GOOGLE_API_KEY=...');\n break;\n }\n\n if (template === 'memory') {\n lines.push('');\n lines.push('# Redis');\n lines.push('REDIS_URL=redis://localhost:6379');\n }\n\n lines.push('');\n\n return { path: '.env.example', content: lines.join('\\n') };\n}\n","import type { LLMProvider, TemplateFile } from '../../types.js';\n\nexport function generateDockerCompose(provider: LLMProvider): TemplateFile {\n const services: string[] = [];\n\n if (provider === 'ollama') {\n services.push(\n ...[\n ' ollama:',\n ' image: ollama/ollama:latest',\n ' ports:',\n ' - \"11434:11434\"',\n ' volumes:',\n ' - ollama_data:/root/.ollama',\n '',\n ]\n );\n }\n\n services.push(\n ...[\n ' redis:',\n ' image: redis:7-alpine',\n ' ports:',\n ' - \"6379:6379\"',\n ' volumes:',\n ' - redis_data:/data',\n '',\n ' postgres:',\n ' image: postgres:16-alpine',\n ' ports:',\n ' - \"5432:5432\"',\n ' environment:',\n ' POSTGRES_USER: ${POSTGRES_USER:-cogitator}',\n ' POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-cogitator}',\n ' POSTGRES_DB: ${POSTGRES_DB:-cogitator}',\n ' volumes:',\n ' - postgres_data:/var/lib/postgresql/data',\n ]\n );\n\n const volumes = ['volumes:'];\n if (provider === 'ollama') volumes.push(' ollama_data:');\n volumes.push(' redis_data:', ' postgres_data:');\n\n const content = ['services:', ...services, '', ...volumes, ''].join('\\n');\n\n return { path: 'docker-compose.yml', content };\n}\n","import type { LLMProvider, Template, TemplateFile } from '../../types.js';\nimport { defaultModels } from '../../utils/providers.js';\nimport { getTemplate } from '../index.js';\n\n/**\n * `cogitator.yml` in the shape `@cogitator-ai/config` loads: the provider and model\n * the generated code uses, the memory it connects to, and for servers the path\n * `cogitator deploy` probes for health. API keys stay in the environment, where\n * the config loader picks them up.\n */\nexport function generateCogitatorYml(provider: LLMProvider, template?: Template): TemplateFile {\n const lines = [\n 'llm:',\n ` defaultProvider: ${provider}`,\n ` defaultModel: ${defaultModels[provider]}`,\n ];\n\n if (provider === 'ollama') {\n lines.push(\n ' providers:',\n ' ollama:',\n ' baseUrl: ${OLLAMA_BASE_URL:-http://localhost:11434}'\n );\n }\n\n if (template === 'memory') {\n lines.push(\n '',\n 'memory:',\n ' adapter: redis',\n ' redis:',\n ' url: ${REDIS_URL:-redis://localhost:6379}'\n );\n }\n\n const healthPath = template ? getTemplate(template).healthPath : undefined;\n if (healthPath) {\n lines.push('', 'deploy:', ' health:', ` path: ${healthPath}`);\n }\n\n lines.push('');\n return { path: 'cogitator.yml', content: lines.join('\\n') };\n}\n","import { execSync } from 'node:child_process';\nimport type { PackageManager } from '../types.js';\n\nexport function detectPackageManager(): PackageManager {\n const ua = process.env.npm_config_user_agent;\n if (ua) {\n if (ua.startsWith('pnpm')) return 'pnpm';\n if (ua.startsWith('yarn')) return 'yarn';\n if (ua.startsWith('bun')) return 'bun';\n }\n return 'pnpm';\n}\n\nexport function installDependencies(cwd: string, pm: PackageManager) {\n execSync(`${pm} install`, { cwd, stdio: 'inherit' });\n}\n\nexport function devCommand(pm: PackageManager): string {\n if (pm === 'npm') return 'npm run dev';\n return `${pm} dev`;\n}\n\nexport function runCommand(pm: PackageManager): string {\n if (pm === 'npm') return 'npx';\n if (pm === 'pnpm') return 'pnpm dlx';\n if (pm === 'yarn') return 'yarn dlx';\n return 'bunx';\n}\n","export const DOCS_URL = 'https://cogitator.app/docs';\nexport const REPO_URL = 'https://github.com/cogitator-ai/Cogitator-AI';\n","import type { ProjectOptions, TemplateFile } from '../../types.js';\nimport { devCommand } from '../../utils/package-manager.js';\nimport { DOCS_URL, REPO_URL } from '../../utils/links.js';\n\nconst templateNames: Record<string, string> = {\n basic: 'Basic Agent',\n memory: 'Agent with Memory',\n swarm: 'Multi-Agent Swarm',\n workflow: 'DAG Workflow',\n 'api-server': 'REST API Server',\n nextjs: 'Next.js Chat App',\n};\n\nexport function generateReadme(options: ProjectOptions): TemplateFile {\n const dev = devCommand(options.packageManager);\n const templateName = templateNames[options.template] || options.template;\n\n const content = [\n `# ${options.name}`,\n '',\n `> Created with [create-cogitator-app](${REPO_URL}) — ${templateName} template`,\n '',\n '## Getting Started',\n '',\n '```bash',\n `# Install dependencies`,\n `${options.packageManager} install`,\n '',\n `# Run the project`,\n dev,\n '```',\n '',\n ...(options.docker\n ? ['## Docker Services', '', '```bash', 'docker compose up -d', '```', '']\n : []),\n '## Learn More',\n '',\n `- [Cogitator Documentation](${DOCS_URL})`,\n `- [GitHub Repository](${REPO_URL})`,\n '',\n ];\n\n return { path: 'README.md', content: content.join('\\n') };\n}\n","import type { TemplateFile } from '../../types.js';\n\n/**\n * pnpm 10.26+ skips dependency build scripts unless they are allowed, and pnpm 11 fails the\n * install instead. These are the native/binary packages a Cogitator project pulls in.\n */\nexport const PNPM_ALLOWED_BUILDS = ['better-sqlite3', 'esbuild', 'sharp'] as const;\n\nexport function generatePnpmWorkspace(): TemplateFile {\n return {\n path: 'pnpm-workspace.yaml',\n content: ['allowBuilds:', ...PNPM_ALLOWED_BUILDS.map((name) => ` ${name}: true`), ''].join(\n '\\n'\n ),\n };\n}\n","import { execFileSync } from 'node:child_process';\n\n/** Used only when the user has no git identity, so the first commit can still be made. */\nconst FALLBACK_IDENTITY = [\n '-c',\n 'user.name=create-cogitator-app',\n '-c',\n 'user.email=create-cogitator-app@localhost',\n];\n\nexport function isGitInstalled(): boolean {\n try {\n execFileSync('git', ['--version'], { stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n}\n\nfunction hasIdentity(cwd: string): boolean {\n try {\n const name = execFileSync('git', ['config', 'user.name'], { cwd, encoding: 'utf8' }).trim();\n const email = execFileSync('git', ['config', 'user.email'], { cwd, encoding: 'utf8' }).trim();\n return name.length > 0 && email.length > 0;\n } catch {\n return false;\n }\n}\n\n/**\n * Initialises a repository and commits the scaffold, authored by the user's own git identity;\n * a neutral local identity is used only when none is configured.\n */\nexport function initGitRepo(cwd: string) {\n execFileSync('git', ['init'], { cwd, stdio: 'ignore' });\n execFileSync('git', ['add', '-A'], { cwd, stdio: 'ignore' });\n const identity = hasIdentity(cwd) ? [] : FALLBACK_IDENTITY;\n execFileSync('git', [...identity, 'commit', '-m', 'feat: initial project scaffold'], {\n cwd,\n stdio: 'ignore',\n });\n}\n","import * as p from '@clack/prompts';\nimport path from 'node:path';\nimport type { LLMProvider, PackageManager, ProjectOptions, Template } from './types.js';\nimport { templateChoices } from './templates/index.js';\nimport { detectPackageManager } from './utils/package-manager.js';\nimport { defaultModels } from './utils/providers.js';\n\ninterface ParsedArgs {\n name?: string;\n template?: Template;\n provider?: LLMProvider;\n packageManager?: PackageManager;\n docker?: boolean;\n git?: boolean;\n install?: boolean;\n yes?: boolean;\n}\n\nconst validTemplates: Template[] = ['basic', 'memory', 'swarm', 'workflow', 'api-server', 'nextjs'];\nconst validProviders: LLMProvider[] = ['ollama', 'openai', 'anthropic', 'google'];\nconst validPMs: PackageManager[] = ['pnpm', 'npm', 'yarn', 'bun'];\n\nexport function parseArgs(args: string[]): ParsedArgs {\n const parsed: ParsedArgs = {};\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n if (arg === '--template' || arg === '-t') {\n if (i + 1 < args.length) {\n const val = args[++i] as Template;\n if (validTemplates.includes(val)) parsed.template = val;\n }\n } else if (arg === '--provider' || arg === '-p') {\n if (i + 1 < args.length) {\n const val = args[++i] as LLMProvider;\n if (validProviders.includes(val)) parsed.provider = val;\n }\n } else if (arg === '--pm') {\n if (i + 1 < args.length) {\n const val = args[++i] as PackageManager;\n if (validPMs.includes(val)) parsed.packageManager = val;\n }\n } else if (arg === '--docker') {\n parsed.docker = true;\n } else if (arg === '--no-docker') {\n parsed.docker = false;\n } else if (arg === '--git') {\n parsed.git = true;\n } else if (arg === '--no-git') {\n parsed.git = false;\n } else if (arg === '--install') {\n parsed.install = true;\n } else if (arg === '--no-install') {\n parsed.install = false;\n } else if (arg === '-y' || arg === '--yes') {\n parsed.yes = true;\n } else if (!arg.startsWith('-') && !parsed.name) {\n parsed.name = arg;\n }\n }\n\n return parsed;\n}\n\n/** What `--yes` answers, and what each prompt suggests. */\nexport const defaultAnswers = {\n name: 'my-agents',\n template: 'basic',\n provider: 'ollama',\n docker: true,\n git: true,\n} as const satisfies Partial<ProjectOptions>;\n\nfunction unlessCancelled<T>(answer: T | typeof p.CANCEL_SYMBOL): T {\n if (p.isCancel(answer)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n return answer;\n}\n\n/**\n * Turn the parsed arguments into project options, asking for whatever they leave\n * out; with `--yes` nothing is asked and the defaults fill the gaps.\n */\nexport async function collectOptions(args: ParsedArgs): Promise<ProjectOptions> {\n const interactive = !args.yes;\n\n const rawName =\n args.name ||\n (interactive\n ? unlessCancelled(\n await p.text({\n message: 'Where should we create your project?',\n placeholder: `./${defaultAnswers.name}`,\n defaultValue: defaultAnswers.name,\n validate: (value) => {\n if (value && !value.trim()) return 'Project name is required';\n return undefined;\n },\n })\n )\n : defaultAnswers.name);\n\n const name = rawName.trim();\n const projectName = path.basename(path.normalize(name).replace(/^\\.\\//, '').replace(/^\\.\\\\/, ''));\n const projectPath = path.resolve(process.cwd(), name);\n\n const template =\n args.template ??\n (interactive\n ? unlessCancelled(\n await p.select<Template>({\n message: 'Which template would you like?',\n options: templateChoices,\n initialValue: defaultAnswers.template,\n })\n )\n : defaultAnswers.template);\n\n const provider =\n args.provider ??\n (interactive\n ? unlessCancelled(\n await p.select<LLMProvider>({\n message: 'Which LLM provider?',\n options: [\n {\n value: 'ollama',\n label: 'Ollama',\n hint: `${defaultModels.ollama} — local, free, requires Ollama installed`,\n },\n { value: 'openai', label: 'OpenAI', hint: defaultModels.openai },\n { value: 'anthropic', label: 'Anthropic', hint: defaultModels.anthropic },\n { value: 'google', label: 'Google Gemini', hint: defaultModels.google },\n ],\n initialValue: defaultAnswers.provider,\n })\n )\n : defaultAnswers.provider);\n\n const packageManager =\n args.packageManager ??\n (interactive\n ? unlessCancelled(\n await p.select<PackageManager>({\n message: 'Package manager?',\n options: [\n { value: 'pnpm', label: 'pnpm' },\n { value: 'npm', label: 'npm' },\n { value: 'yarn', label: 'yarn' },\n { value: 'bun', label: 'bun' },\n ],\n initialValue: detectPackageManager(),\n })\n )\n : detectPackageManager());\n\n const docker =\n args.docker ??\n (interactive\n ? unlessCancelled(\n await p.confirm({\n message:\n 'Include Docker Compose? (Redis + Postgres' +\n (provider === 'ollama' ? ' + Ollama)' : ')'),\n initialValue: defaultAnswers.docker,\n })\n )\n : defaultAnswers.docker);\n\n const git =\n args.git ??\n (interactive\n ? unlessCancelled(\n await p.confirm({\n message: 'Initialize git repository?',\n initialValue: defaultAnswers.git,\n })\n )\n : defaultAnswers.git);\n\n return {\n name: projectName,\n path: projectPath,\n template,\n provider,\n packageManager,\n docker,\n git,\n ...(args.install !== undefined && { install: args.install }),\n };\n}\n"],"mappings":"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","names":["spinner","p","path","path"]}
1
+ {"version":3,"sources":["../src/scaffold.ts","../src/utils/providers.ts","../src/templates/versions.ts","../src/templates/shared.ts","../src/templates/basic.ts","../src/templates/memory.ts","../src/templates/swarm.ts","../src/templates/workflow.ts","../src/templates/api-server.ts","../src/templates/nextjs.ts","../src/templates/index.ts","../src/templates/base/tsconfig.ts","../src/templates/base/gitignore.ts","../src/templates/base/env-example.ts","../src/templates/base/docker-compose.ts","../src/templates/base/cogitator-yml.ts","../src/utils/package-manager.ts","../src/next-steps.ts","../src/utils/links.ts","../src/templates/base/readme.ts","../src/templates/base/pnpm-workspace.ts","../src/utils/git.ts","../src/utils/project-name.ts","../src/prompts.ts","../src/utils/ollama.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport * as p from '@clack/prompts';\nimport type { ProjectOptions, ScaffoldResult, ScaffoldStep, TemplateFile } from './types.js';\nimport { getTemplate } from './templates/index.js';\nimport { generateTsconfig } from './templates/base/tsconfig.js';\nimport { generateGitignore } from './templates/base/gitignore.js';\nimport { generateEnvExample } from './templates/base/env-example.js';\nimport { generateDockerCompose } from './templates/base/docker-compose.js';\nimport { generateCogitatorYml } from './templates/base/cogitator-yml.js';\nimport { generateReadme } from './templates/base/readme.js';\nimport { generatePnpmWorkspace } from './templates/base/pnpm-workspace.js';\nimport { installDependencies } from './utils/package-manager.js';\nimport { initGitRepo, isGitInstalled } from './utils/git.js';\nimport { validateProjectName } from './utils/project-name.js';\nimport { modelFor } from './utils/providers.js';\n\n/** The Node.js versions generated projects run on: `--env-file-if-exists` in their scripts needs 22.9+. */\nconst NODE_ENGINES = '>=22.12.0';\n\nfunction writeFile(basePath: string, file: TemplateFile) {\n const fullPath = path.join(basePath, file.path);\n fs.mkdirSync(path.dirname(fullPath), { recursive: true });\n fs.writeFileSync(fullPath, file.content, 'utf-8');\n}\n\nfunction buildPackageJson(options: ProjectOptions): string {\n const template = getTemplate(options.template);\n const isNextjs = options.template === 'nextjs';\n\n const pkg: Record<string, unknown> = {\n name: options.name,\n version: '0.1.0',\n private: true,\n ...(isNextjs ? {} : { type: 'module' }),\n engines: { node: NODE_ENGINES },\n scripts: template.scripts(),\n dependencies: template.dependencies(),\n devDependencies: template.devDependencies(),\n };\n\n return JSON.stringify(pkg, null, 2) + '\\n';\n}\n\nfunction collectFiles(options: ProjectOptions): TemplateFile[] {\n const template = getTemplate(options.template);\n const files: TemplateFile[] = [];\n\n files.push({ path: 'package.json', content: buildPackageJson(options) });\n files.push(...template.files(options));\n files.push(generateGitignore(options.template));\n files.push(generateEnvExample(options.provider, options.template));\n files.push(generateCogitatorYml(options.provider, options.template, modelFor(options)));\n files.push(generateReadme(options));\n\n if (options.template !== 'nextjs') {\n files.push(generateTsconfig());\n }\n\n if (options.packageManager === 'pnpm') {\n files.push(generatePnpmWorkspace());\n }\n\n if (options.docker) {\n files.push(generateDockerCompose(options.provider, modelFor(options)));\n }\n\n return files;\n}\n\nfunction runStep(\n spinner: ReturnType<typeof p.spinner>,\n messages: { start: string; done: string; failed: string },\n step: () => void\n): ScaffoldStep {\n spinner.start(messages.start);\n try {\n step();\n spinner.stop(messages.done);\n return { status: 'done' };\n } catch (error) {\n spinner.stop(messages.failed);\n return { status: 'failed', error: error instanceof Error ? error : new Error(String(error)) };\n }\n}\n\n/**\n * Writes the project described by `options`, then installs its dependencies\n * (unless `install` is `false`) and initializes git (when `git` is `true`).\n * Throws when `name` is not a valid package name or `path` exists and is not\n * empty. A failed install or git step does not throw: the result reports it,\n * and the project stays written.\n */\nexport async function scaffold(options: ProjectOptions): Promise<ScaffoldResult> {\n const nameError = validateProjectName(options.name);\n if (nameError) {\n throw new Error(`Invalid project name \"${options.name}\": ${nameError}`);\n }\n if (fs.existsSync(options.path) && fs.readdirSync(options.path).length > 0) {\n throw new Error(`Directory \"${options.path}\" already exists and is not empty`);\n }\n\n const s = p.spinner();\n\n s.start('Generating project files');\n const files = collectFiles(options);\n\n fs.mkdirSync(options.path, { recursive: true });\n for (const file of files) {\n writeFile(options.path, file);\n }\n s.stop('Generated project files');\n\n const install: ScaffoldStep =\n options.install === false\n ? { status: 'skipped' }\n : runStep(\n s,\n {\n start: 'Installing dependencies',\n done: 'Installed dependencies',\n failed: `Failed to install dependencies, run \"${options.packageManager} install\" yourself`,\n },\n () => installDependencies(options.path, options.packageManager)\n );\n\n const git: ScaffoldStep =\n options.git && isGitInstalled()\n ? runStep(\n s,\n {\n start: 'Initializing git repository',\n done: 'Initialized git repository',\n failed: 'Failed to initialize git, run \"git init\" yourself',\n },\n () => initGitRepo(options.path)\n )\n : { status: 'skipped' };\n\n return { files: files.map((file) => file.path), install, git };\n}\n","import type { LLMProvider, ProjectOptions } from '../types.js';\n\nexport const defaultModels: Record<LLMProvider, string> = {\n ollama: 'qwen3.5:9b',\n openai: 'gpt-6.1-sol',\n anthropic: 'claude-sonnet-5-5',\n google: 'gemini-3.8-flash',\n};\n\n/** The model the project's agents use: `options.model`, else the provider's default. */\nexport function modelFor(options: Pick<ProjectOptions, 'provider' | 'model'>): string {\n return options.model?.trim() || defaultModels[options.provider];\n}\n\nexport function providerEnvKey(provider: LLMProvider): string {\n const map: Record<LLMProvider, string> = {\n ollama: 'OLLAMA_BASE_URL',\n openai: 'OPENAI_API_KEY',\n anthropic: 'ANTHROPIC_API_KEY',\n google: 'GOOGLE_API_KEY',\n };\n return map[provider];\n}\n\n/**\n * How generated code reads the provider's API key: `requireEnv` calls the\n * `requireEnv` helper of the generated `src/env.ts`, which fails at startup\n * with the name of the missing variable. `process-env` reads `process.env` and\n * leaves a missing key to the first request, for code a build imports without\n * the key, such as a Next.js route.\n */\nexport type ApiKeyAccess = 'requireEnv' | 'process-env';\n\nfunction apiKeyExpression(envKey: string, access: ApiKeyAccess): string {\n return access === 'requireEnv' ? `requireEnv('${envKey}')` : `process.env.${envKey} ?? ''`;\n}\n\n/** The `llm` section of the generated `new Cogitator({...})` call. */\nexport function providerConfig(\n provider: LLMProvider,\n access: ApiKeyAccess = 'process-env'\n): string {\n if (provider === 'ollama') {\n return [\n ` llm: {`,\n ` defaultProvider: 'ollama',`,\n ` providers: {`,\n ` ollama: { baseUrl: process.env.OLLAMA_BASE_URL || 'http://localhost:11434' },`,\n ` },`,\n ` },`,\n ].join('\\n');\n }\n\n return [\n ` llm: {`,\n ` defaultProvider: '${provider}',`,\n ` providers: {`,\n ` ${provider}: { apiKey: ${apiKeyExpression(providerEnvKey(provider), access)} },`,\n ` },`,\n ` },`,\n ].join('\\n');\n}\n","import { existsSync, readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\n/** The zod range generated projects depend on: the one `@cogitator-ai/core` depends on, so tool schemas and core share one zod. */\nexport const ZOD_VERSION = '^4.6.5';\n\n/** The Redis driver the memory template's store loads: memory and redis take it as an optional peer, not as a dependency. */\nexport const IOREDIS_VERSION = '^6.0.0';\n\nconst OWN_NAME = 'create-cogitator-app';\nconst SCOPE = '@cogitator-ai/';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction readManifest(file: string): Record<string, unknown> {\n const parsed: unknown = JSON.parse(readFileSync(file, 'utf-8'));\n if (!isRecord(parsed)) throw new Error(`${file} is not a package manifest`);\n return parsed;\n}\n\nfunction findOwnRoot(from: string): string {\n let dir = from;\n while (true) {\n const manifest = path.join(dir, 'package.json');\n if (existsSync(manifest) && readManifest(manifest).name === OWN_NAME) return dir;\n const parent = path.dirname(dir);\n if (parent === dir) throw new Error(`Cannot find the ${OWN_NAME} package.json above ${from}`);\n dir = parent;\n }\n}\n\nfunction linkedVersion(packageRoot: string, name: string): string {\n const manifest = path.join(packageRoot, 'node_modules', name, 'package.json');\n if (!existsSync(manifest)) {\n throw new Error(`Cannot resolve the version of ${name}: ${manifest} does not exist`);\n }\n const version = readManifest(manifest).version;\n if (typeof version !== 'string') throw new Error(`${manifest} has no version`);\n return version;\n}\n\n/**\n * The ranges generated projects depend on for each `@cogitator-ai/*` package, read\n * from the devDependencies of the create-cogitator-app manifest in `packageRoot`.\n *\n * In the monorepo those are `workspace:^` and resolve to a caret on the linked\n * package's version. `pnpm publish` rewrites them to `^<version>` of the packages\n * released alongside, so a published scaffolder generates projects pinned to the\n * releases it was published with, and an old cached one never pulls in a newer,\n * incompatible minor.\n */\nexport function readCogitatorVersions(packageRoot: string): Record<string, string> {\n const devDependencies = readManifest(path.join(packageRoot, 'package.json')).devDependencies;\n const versions: Record<string, string> = {};\n if (!isRecord(devDependencies)) return versions;\n\n for (const [name, range] of Object.entries(devDependencies)) {\n if (!name.startsWith(SCOPE) || typeof range !== 'string') continue;\n versions[name] = range.startsWith('workspace:')\n ? `^${linkedVersion(packageRoot, name)}`\n : range;\n }\n return versions;\n}\n\nlet resolved: Record<string, string> | undefined;\n\n/** The range a generated project depends on for `name`, an `@cogitator-ai/*` package. */\nexport function cogitatorVersion(name: `${typeof SCOPE}${string}`): string {\n resolved ??= readCogitatorVersions(findOwnRoot(path.dirname(fileURLToPath(import.meta.url))));\n const range = resolved[name];\n if (!range) {\n throw new Error(`${name} is not a devDependency of ${OWN_NAME}, so its version is unknown`);\n }\n return range;\n}\n","import type { LLMProvider, TemplateFile } from '../types.js';\n\n/** `value` as a single-quoted TypeScript string literal, safe for any project name. */\nexport function tsString(value: string): string {\n const escaped = value\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\r/g, '\\\\r')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\p{Zl}/gu, '\\\\u2028')\n .replace(/\\p{Zp}/gu, '\\\\u2029');\n return `'${escaped}'`;\n}\n\n/** Whether the provider needs an API key, which script templates read through `requireEnv`. */\nfunction needsApiKey(provider: LLMProvider): boolean {\n return provider !== 'ollama';\n}\n\n/** `src/env.ts` with the `requireEnv` helper, for providers that need an API key. */\nexport function envHelperFiles(provider: LLMProvider): TemplateFile[] {\n if (!needsApiKey(provider)) return [];\n const content = [\n `export function requireEnv(name: string): string {`,\n ` const value = process.env[name]`,\n ` if (!value) {`,\n ` throw new Error(\\`\\${name} is not set. Copy .env.example to .env and fill it in.\\`)`,\n ` }`,\n ` return value`,\n `}`,\n ``,\n ].join('\\n');\n return [{ path: 'src/env.ts', content }];\n}\n\n/** The import of `requireEnv` for the file that builds the `Cogitator`, if it needs one. */\nexport function envHelperImport(provider: LLMProvider): string[] {\n return needsApiKey(provider) ? [`import { requireEnv } from './env.js'`] : [];\n}\n\n/** Runs `main()` and turns a failure into a non-zero exit code. */\nexport const RUN_MAIN = [\n `main().catch((error: unknown) => {`,\n ` console.error(error)`,\n ` process.exitCode = 1`,\n `})`,\n ``,\n];\n\n/** The scripts of the templates that run `src/index.ts` with tsx, loading `.env` when it exists. */\nexport function scriptTemplateScripts(): Record<string, string> {\n return {\n dev: 'tsx watch --env-file-if-exists=.env src/index.ts',\n start: 'tsx --env-file-if-exists=.env src/index.ts',\n build: 'tsc',\n typecheck: 'tsc --noEmit',\n };\n}\n\n/** The dev dependencies of the templates that run `src/index.ts` with tsx. */\nexport function scriptTemplateDevDependencies(): Record<string, string> {\n return {\n typescript: '^5.8.0',\n tsx: '^4.19.0',\n '@types/node': '^22.0.0',\n };\n}\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { modelFor, providerConfig } from '../utils/providers.js';\nimport { cogitatorVersion, ZOD_VERSION } from './versions.js';\nimport {\n envHelperFiles,\n envHelperImport,\n RUN_MAIN,\n scriptTemplateDevDependencies,\n scriptTemplateScripts,\n tsString,\n} from './shared.js';\n\nexport const basicTemplate: TemplateGenerator = {\n files(options: ProjectOptions) {\n const model = modelFor(options);\n\n const indexTs = [\n `import { Cogitator, Agent } from '@cogitator-ai/core'`,\n `import { searchTool, summarizeTool } from './tools.js'`,\n ...envHelperImport(options.provider),\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider, 'requireEnv'),\n `})`,\n ``,\n `const agent = new Agent({`,\n ` name: ${tsString(`${options.name}-agent`)},`,\n ` model: ${tsString(model)},`,\n ` instructions: 'You are a helpful AI assistant. Use your tools to help the user.',`,\n ` tools: [searchTool, summarizeTool],`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n `async function main() {`,\n ` const result = await cogitator.run(agent, {`,\n ` input: 'What is Cogitator and how does it work?',`,\n ` })`,\n ``,\n ` console.log(result.output)`,\n `}`,\n ``,\n ...RUN_MAIN,\n ].join('\\n');\n\n const toolsTs = [\n `import { tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `export const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information on a topic',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('The search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Search results for: \\${query}\\\\n\\\\nCogitator is a self-hosted AI agent runtime for TypeScript.\\``,\n ` },`,\n `})`,\n ``,\n `export const summarizeTool = tool({`,\n ` name: 'summarize',`,\n ` description: 'Summarize a piece of text',`,\n ` parameters: z.object({`,\n ` text: z.string().describe('The text to summarize'),`,\n ` maxLength: z.number().optional().describe('Maximum summary length'),`,\n ` }),`,\n ` execute: async ({ text, maxLength }) => {`,\n ` const limit = maxLength || 200`,\n ` return text.length > limit ? text.slice(0, limit) + '...' : text`,\n ` },`,\n `})`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/tools.ts', content: toolsTs },\n ...envHelperFiles(options.provider),\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': cogitatorVersion('@cogitator-ai/core'),\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return scriptTemplateDevDependencies();\n },\n\n scripts() {\n return scriptTemplateScripts();\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { modelFor, providerConfig } from '../utils/providers.js';\nimport { cogitatorVersion, IOREDIS_VERSION, ZOD_VERSION } from './versions.js';\nimport {\n envHelperFiles,\n envHelperImport,\n RUN_MAIN,\n scriptTemplateDevDependencies,\n scriptTemplateScripts,\n tsString,\n} from './shared.js';\n\nexport const memoryTemplate: TemplateGenerator = {\n memoryAdapter: 'redis',\n\n files(options: ProjectOptions) {\n const model = modelFor(options);\n\n const indexTs = [\n `import { Cogitator, Agent } from '@cogitator-ai/core'`,\n `import { searchTool, noteTool } from './tools.js'`,\n ...envHelperImport(options.provider),\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider, 'requireEnv'),\n ` memory: {`,\n ` adapter: 'redis',`,\n ` redis: { url: process.env.REDIS_URL || 'redis://localhost:6379' },`,\n ` },`,\n `})`,\n ``,\n `const agent = new Agent({`,\n ` name: ${tsString(`${options.name}-agent`)},`,\n ` model: ${tsString(model)},`,\n ` instructions: [`,\n ` 'You are an AI assistant with persistent memory.',`,\n ` 'You remember past conversations and user preferences.',`,\n ` 'Use the note tool to save important information.',`,\n ` ].join(' '),`,\n ` tools: [searchTool, noteTool],`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n `async function main() {`,\n ` const threadId = 'demo-thread'`,\n ``,\n ` try {`,\n ` const result1 = await cogitator.run(agent, {`,\n ` input: 'My name is Alex and I prefer TypeScript.',`,\n ` threadId,`,\n ` useMemory: true,`,\n ` })`,\n ` console.log('Response 1:', result1.output)`,\n ``,\n ` const result2 = await cogitator.run(agent, {`,\n ` input: 'What is my name and preferred language?',`,\n ` threadId,`,\n ` useMemory: true,`,\n ` })`,\n ` console.log('Response 2:', result2.output)`,\n ` } finally {`,\n ` await cogitator.close()`,\n ` }`,\n `}`,\n ``,\n ...RUN_MAIN,\n ].join('\\n');\n\n const toolsTs = [\n `import { tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `export const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('Search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Results for: \\${query}\\``,\n ` },`,\n `})`,\n ``,\n `export const noteTool = tool({`,\n ` name: 'note',`,\n ` description: 'Save a note for later reference',`,\n ` parameters: z.object({`,\n ` title: z.string().describe('Note title'),`,\n ` content: z.string().describe('Note content'),`,\n ` }),`,\n ` execute: async ({ title, content }) => {`,\n ` return \\`Saved note \"\\${title}\": \\${content}\\``,\n ` },`,\n `})`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/tools.ts', content: toolsTs },\n ...envHelperFiles(options.provider),\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': cogitatorVersion('@cogitator-ai/core'),\n '@cogitator-ai/memory': cogitatorVersion('@cogitator-ai/memory'),\n '@cogitator-ai/redis': cogitatorVersion('@cogitator-ai/redis'),\n ioredis: IOREDIS_VERSION,\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return scriptTemplateDevDependencies();\n },\n\n scripts() {\n return scriptTemplateScripts();\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { modelFor, providerConfig } from '../utils/providers.js';\nimport { cogitatorVersion, ZOD_VERSION } from './versions.js';\nimport {\n envHelperFiles,\n envHelperImport,\n RUN_MAIN,\n scriptTemplateDevDependencies,\n scriptTemplateScripts,\n tsString,\n} from './shared.js';\n\nexport const swarmTemplate: TemplateGenerator = {\n files(options: ProjectOptions) {\n const model = modelFor(options);\n\n const researcherTs = [\n `import { Agent } from '@cogitator-ai/core'`,\n `import { searchTool } from '../tools.js'`,\n ``,\n `export const researcher = new Agent({`,\n ` name: 'researcher',`,\n ` model: ${tsString(model)},`,\n ` instructions: [`,\n ` 'You are a research specialist.',`,\n ` 'Use the search tool to find information.',`,\n ` 'Provide detailed, factual findings.',`,\n ` ].join(' '),`,\n ` tools: [searchTool],`,\n ` temperature: 0.3,`,\n `})`,\n ``,\n ].join('\\n');\n\n const writerTs = [\n `import { Agent } from '@cogitator-ai/core'`,\n ``,\n `export const writer = new Agent({`,\n ` name: 'writer',`,\n ` model: ${tsString(model)},`,\n ` instructions: [`,\n ` 'You are a skilled content writer.',`,\n ` 'Take research findings and craft well-structured, engaging content.',`,\n ` 'Focus on clarity and readability.',`,\n ` ].join(' '),`,\n ` temperature: 0.8,`,\n `})`,\n ``,\n ].join('\\n');\n\n const reviewerTs = [\n `import { Agent } from '@cogitator-ai/core'`,\n ``,\n `export const reviewer = new Agent({`,\n ` name: 'reviewer',`,\n ` model: ${tsString(model)},`,\n ` instructions: [`,\n ` 'You are a meticulous content reviewer.',`,\n ` 'Check for accuracy, grammar, and overall quality.',`,\n ` 'Provide constructive feedback.',`,\n ` ].join(' '),`,\n ` temperature: 0.2,`,\n `})`,\n ``,\n ].join('\\n');\n\n const toolsTs = [\n `import { tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `export const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information on a topic',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('Search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Research findings for \"\\${query}\": Cogitator is a production-grade AI agent runtime for TypeScript that supports swarms, workflows, and tool execution.\\``,\n ` },`,\n `})`,\n ``,\n ].join('\\n');\n\n const indexTs = [\n `import { Cogitator } from '@cogitator-ai/core'`,\n `import { Swarm } from '@cogitator-ai/swarms'`,\n `import { researcher } from './agents/researcher.js'`,\n `import { writer } from './agents/writer.js'`,\n `import { reviewer } from './agents/reviewer.js'`,\n ...envHelperImport(options.provider),\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider, 'requireEnv'),\n `})`,\n ``,\n `const team = new Swarm(cogitator, {`,\n ` name: ${tsString(`${options.name}-team`)},`,\n ` strategy: 'hierarchical',`,\n ` supervisor: reviewer,`,\n ` workers: [researcher, writer],`,\n ` hierarchical: {`,\n ` visibility: 'full',`,\n ` workerCommunication: true,`,\n ` },`,\n ` resources: {`,\n ` maxConcurrency: 3,`,\n ` timeout: 120000,`,\n ` },`,\n `})`,\n ``,\n `async function main() {`,\n ` console.log('Starting swarm...')`,\n ``,\n ` try {`,\n ` const result = await team.run({`,\n ` input: 'Write a comprehensive article about AI agent orchestration.',`,\n ` })`,\n ``,\n ` console.log('Result:', result.output)`,\n ` console.log('Strategy:', team.strategyType)`,\n ` } finally {`,\n ` await team.close()`,\n ` }`,\n `}`,\n ``,\n ...RUN_MAIN,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/tools.ts', content: toolsTs },\n { path: 'src/agents/researcher.ts', content: researcherTs },\n { path: 'src/agents/writer.ts', content: writerTs },\n { path: 'src/agents/reviewer.ts', content: reviewerTs },\n ...envHelperFiles(options.provider),\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': cogitatorVersion('@cogitator-ai/core'),\n '@cogitator-ai/swarms': cogitatorVersion('@cogitator-ai/swarms'),\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return scriptTemplateDevDependencies();\n },\n\n scripts() {\n return scriptTemplateScripts();\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { modelFor, providerConfig } from '../utils/providers.js';\nimport { cogitatorVersion, ZOD_VERSION } from './versions.js';\nimport {\n envHelperFiles,\n envHelperImport,\n RUN_MAIN,\n scriptTemplateDevDependencies,\n scriptTemplateScripts,\n tsString,\n} from './shared.js';\n\nexport const workflowTemplate: TemplateGenerator = {\n files(options: ProjectOptions) {\n const model = modelFor(options);\n\n const agentsTs = [\n `import { Agent } from '@cogitator-ai/core'`,\n ``,\n `export const analyzer = new Agent({`,\n ` name: 'analyzer',`,\n ` model: ${tsString(model)},`,\n ` instructions: 'You analyze input data and extract key information. Be thorough and structured.',`,\n ` temperature: 0.3,`,\n `})`,\n ``,\n `export const processor = new Agent({`,\n ` name: 'processor',`,\n ` model: ${tsString(model)},`,\n ` instructions: 'You process analyzed data and transform it into actionable insights.',`,\n ` temperature: 0.5,`,\n `})`,\n ``,\n `export const formatter = new Agent({`,\n ` name: 'formatter',`,\n ` model: ${tsString(model)},`,\n ` instructions: 'You format processed data into a clean, readable report.',`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n ].join('\\n');\n\n const indexTs = [\n `import { Cogitator } from '@cogitator-ai/core'`,\n `import {`,\n ` WorkflowBuilder,`,\n ` WorkflowExecutor,`,\n ` agentNode,`,\n ` functionNode,`,\n `} from '@cogitator-ai/workflows'`,\n `import { analyzer, processor, formatter } from './agents.js'`,\n ...envHelperImport(options.provider),\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider, 'requireEnv'),\n `})`,\n ``,\n `type WorkflowState = {`,\n ` input: string`,\n ` analysis?: string`,\n ` processed?: string`,\n ` report?: string`,\n `}`,\n ``,\n `const analyzeNode = agentNode<WorkflowState>(analyzer, {`,\n ` inputMapper: (state) => \\`Analyze the following: \\${state.input}\\`,`,\n ` stateMapper: (result) => ({ analysis: result.output }),`,\n `})`,\n ``,\n `const processNode = agentNode<WorkflowState>(processor, {`,\n ` inputMapper: (state) => \\`Process this analysis: \\${state.analysis ?? ''}\\`,`,\n ` stateMapper: (result) => ({ processed: result.output }),`,\n `})`,\n ``,\n `const formatNode = agentNode<WorkflowState>(formatter, {`,\n ` inputMapper: (state) => \\`Format this into a report: \\${state.processed ?? ''}\\`,`,\n ` stateMapper: (result) => ({ report: result.output }),`,\n `})`,\n ``,\n `const outputNode = functionNode<WorkflowState>(`,\n ` 'output',`,\n ` async (state) => state.report,`,\n `)`,\n ``,\n `const workflow = new WorkflowBuilder<WorkflowState>(${tsString(`${options.name}-workflow`)})`,\n ` .initialState({ input: '' })`,\n ` .entryPoint(analyzeNode.name)`,\n ` .addNode(analyzeNode.name, analyzeNode.fn)`,\n ` .addNode(processNode.name, processNode.fn, { after: [analyzeNode.name] })`,\n ` .addNode(formatNode.name, formatNode.fn, { after: [processNode.name] })`,\n ` .addNode(outputNode.name, outputNode.fn, { after: [formatNode.name] })`,\n ` .build()`,\n ``,\n `async function main() {`,\n ` const executor = new WorkflowExecutor(cogitator)`,\n ``,\n ` console.log('Starting workflow...')`,\n ``,\n ` const result = await executor.execute(workflow, {`,\n ` input: 'Analyze the current state of AI agent frameworks and their adoption in enterprise.',`,\n ` })`,\n ``,\n ` if (result.error) throw result.error`,\n ``,\n ` console.log(\\`Workflow completed in \\${result.duration}ms\\`)`,\n ` console.log('Report:', result.state.report)`,\n ` console.log('Nodes:', JSON.stringify(Object.fromEntries(result.nodeResults), null, 2))`,\n `}`,\n ``,\n ...RUN_MAIN,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/agents.ts', content: agentsTs },\n ...envHelperFiles(options.provider),\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': cogitatorVersion('@cogitator-ai/core'),\n '@cogitator-ai/workflows': cogitatorVersion('@cogitator-ai/workflows'),\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return scriptTemplateDevDependencies();\n },\n\n scripts() {\n return scriptTemplateScripts();\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { modelFor, providerConfig } from '../utils/providers.js';\nimport { cogitatorVersion, ZOD_VERSION } from './versions.js';\nimport {\n envHelperFiles,\n envHelperImport,\n RUN_MAIN,\n scriptTemplateDevDependencies,\n scriptTemplateScripts,\n tsString,\n} from './shared.js';\n\n/** Where the generated server mounts the Cogitator routes. */\nconst BASE_PATH = '/api';\n\n/** Routes under BASE_PATH that answer without API_TOKEN: health probes and the API docs. */\nconst PUBLIC_PATHS = ['/health', '/ready', '/docs', '/openapi.json'];\n\nexport const apiServerTemplate: TemplateGenerator = {\n memoryAdapter: 'memory',\n secrets: ['API_TOKEN'],\n\n healthPath: `${BASE_PATH}/health`,\n\n files(options: ProjectOptions) {\n const model = modelFor(options);\n\n const agentsTs = [\n `import { Agent, tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('Search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Results for: \\${query}\\``,\n ` },`,\n `})`,\n ``,\n `export const assistant = new Agent({`,\n ` name: 'assistant',`,\n ` model: ${tsString(model)},`,\n ` instructions: 'You are a helpful API assistant. Answer questions clearly and concisely.',`,\n ` tools: [searchTool],`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n `export const coder = new Agent({`,\n ` name: 'coder',`,\n ` model: ${tsString(model)},`,\n ` instructions: 'You are an expert programmer. Write clean, well-structured code.',`,\n ` temperature: 0.3,`,\n `})`,\n ``,\n ].join('\\n');\n\n const indexTs = [\n `import { timingSafeEqual } from 'node:crypto'`,\n `import express, { type Request } from 'express'`,\n `import { Cogitator } from '@cogitator-ai/core'`,\n `import { CogitatorServer } from '@cogitator-ai/express'`,\n `import { assistant, coder } from './agents.js'`,\n ...envHelperImport(options.provider),\n ``,\n `const production = process.env.NODE_ENV === 'production'`,\n `const port = Number(process.env.PORT ?? 3000)`,\n `const host = process.env.HOST ?? (production ? '0.0.0.0' : '127.0.0.1')`,\n `const apiToken = process.env.API_TOKEN`,\n `const corsOrigin = process.env.CORS_ORIGIN`,\n `const publicPaths = new Set([${PUBLIC_PATHS.map(tsString).join(', ')}])`,\n ``,\n `function hasToken(header: string | undefined): boolean {`,\n ` if (!apiToken || !header) return false`,\n ` const expected = Buffer.from(\\`Bearer \\${apiToken}\\`)`,\n ` const given = Buffer.from(header)`,\n ` return given.length === expected.length && timingSafeEqual(given, expected)`,\n `}`,\n ``,\n `function authenticate(req: Request) {`,\n ` if (!apiToken || publicPaths.has(req.path)) return undefined`,\n ` if (!hasToken(req.get('authorization'))) throw new Error('Unauthorized')`,\n ` return { userId: 'api-token' }`,\n `}`,\n ``,\n `const app = express()`,\n ``,\n `const cogitator = new Cogitator({`,\n providerConfig(options.provider, 'requireEnv'),\n ` memory: { adapter: 'memory' },`,\n `})`,\n ``,\n `const server = new CogitatorServer({`,\n ` app,`,\n ` cogitator,`,\n ` agents: { assistant, coder },`,\n ` config: {`,\n ` basePath: '${BASE_PATH}',`,\n ` enableSwagger: true,`,\n ` auth: authenticate,`,\n ` ...(corsOrigin ? { cors: { origin: corsOrigin.split(',').map((o) => o.trim()) } } : {}),`,\n ` swagger: {`,\n ` title: ${tsString(`${options.name} API`)},`,\n ` version: '1.0.0',`,\n ` },`,\n ` },`,\n `})`,\n ``,\n `async function main() {`,\n ` if (production && !apiToken) {`,\n ` throw new Error('Set API_TOKEN in production: it guards every route except health and docs')`,\n ` }`,\n ``,\n ` await server.init()`,\n ``,\n ` app.listen(port, host, () => {`,\n ` console.log(\\`Server running at http://\\${host}:\\${port}\\`)`,\n ` console.log(\\`Swagger docs at http://\\${host}:\\${port}${BASE_PATH}/docs\\`)`,\n ` if (!apiToken) console.log('API_TOKEN is not set, so the API is open to anyone who can reach it')`,\n ` })`,\n `}`,\n ``,\n ...RUN_MAIN,\n ].join('\\n');\n\n return [\n { path: 'src/index.ts', content: indexTs },\n { path: 'src/agents.ts', content: agentsTs },\n ...envHelperFiles(options.provider),\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': cogitatorVersion('@cogitator-ai/core'),\n '@cogitator-ai/express': cogitatorVersion('@cogitator-ai/express'),\n express: '^5.2.1',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n ...scriptTemplateDevDependencies(),\n '@types/express': '^5.0.6',\n };\n },\n\n scripts() {\n return scriptTemplateScripts();\n },\n};\n","import type { ProjectOptions, TemplateGenerator } from '../types.js';\nimport { modelFor, providerConfig } from '../utils/providers.js';\nimport { cogitatorVersion, ZOD_VERSION } from './versions.js';\nimport { tsString } from './shared.js';\n\nexport const nextjsTemplate: TemplateGenerator = {\n memoryAdapter: 'memory',\n\n healthPath: '/api/health',\n\n files(options: ProjectOptions) {\n const model = modelFor(options);\n\n const agentTs = [\n `import { Cogitator, Agent, tool } from '@cogitator-ai/core'`,\n `import { z } from 'zod'`,\n ``,\n `const searchTool = tool({`,\n ` name: 'search',`,\n ` description: 'Search for information',`,\n ` parameters: z.object({`,\n ` query: z.string().describe('Search query'),`,\n ` }),`,\n ` execute: async ({ query }) => {`,\n ` return \\`Results for: \\${query}\\``,\n ` },`,\n `})`,\n ``,\n `export const cogitator = new Cogitator({`,\n providerConfig(options.provider),\n ` memory: { adapter: 'memory' },`,\n `})`,\n ``,\n `export const agent = new Agent({`,\n ` name: ${tsString(`${options.name}-chat`)},`,\n ` model: ${tsString(model)},`,\n ` instructions: 'You are a helpful AI chat assistant. Be conversational and helpful.',`,\n ` tools: [searchTool],`,\n ` temperature: 0.7,`,\n `})`,\n ``,\n ].join('\\n');\n\n const routeTs = [\n `import { createChatHandler } from '@cogitator-ai/next'`,\n `import { cogitator, agent } from '@/lib/agent'`,\n ``,\n `export const POST = createChatHandler(cogitator, agent)`,\n ``,\n ].join('\\n');\n\n const healthRouteTs = [\n `export function GET() {`,\n ` return Response.json({ status: 'ok' })`,\n `}`,\n ``,\n ].join('\\n');\n\n const pageTsx = [\n `'use client'`,\n ``,\n `import { useCogitatorChat } from '@cogitator-ai/next/client'`,\n `import { useState, useRef, useEffect } from 'react'`,\n ``,\n `export default function Home() {`,\n ` const { messages, input, setInput, send, stop, isLoading, error } = useCogitatorChat({`,\n ` api: '/api/chat',`,\n ` })`,\n ` const messagesEndRef = useRef<HTMLDivElement>(null)`,\n ``,\n ` useEffect(() => {`,\n ` messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' })`,\n ` }, [messages])`,\n ``,\n ` const handleSubmit = (e: React.FormEvent) => {`,\n ` e.preventDefault()`,\n ` if (!input.trim() || isLoading) return`,\n ` send(input)`,\n ` setInput('')`,\n ` }`,\n ``,\n ` return (`,\n ` <main className=\"flex min-h-screen flex-col items-center p-4 bg-gray-950 text-white\">`,\n ` <div className=\"w-full max-w-2xl flex flex-col h-screen\">`,\n ` <header className=\"py-6 text-center\">`,\n ` <h1 className=\"text-2xl font-bold\">{${tsString(options.name)}}</h1>`,\n ` <p className=\"text-gray-400 text-sm mt-1\">Powered by Cogitator</p>`,\n ` </header>`,\n ``,\n ` <div className=\"flex-1 overflow-y-auto space-y-4 pb-4\">`,\n ` {messages`,\n ` .filter((msg) => msg.content)`,\n ` .map((msg) => (`,\n ` <div`,\n ` key={msg.id}`,\n ` className={\\`flex \\${msg.role === 'user' ? 'justify-end' : 'justify-start'}\\`}`,\n ` >`,\n ` <div`,\n ` className={\\`max-w-[80%] rounded-2xl px-4 py-2 \\${`,\n ` msg.role === 'user'`,\n ` ? 'bg-blue-600 text-white'`,\n ` : 'bg-gray-800 text-gray-100'`,\n ` }\\`}`,\n ` >`,\n ` {msg.content}`,\n ` </div>`,\n ` </div>`,\n ` ))}`,\n ` {isLoading && (`,\n ` <div className=\"flex justify-start\">`,\n ` <div className=\"bg-gray-800 rounded-2xl px-4 py-2 text-gray-400\">`,\n ` Thinking...`,\n ` </div>`,\n ` </div>`,\n ` )}`,\n ` {error && (`,\n ` <div className=\"rounded-xl border border-red-800 bg-red-950 px-4 py-2 text-sm text-red-200\">`,\n ` {error.message}`,\n ` </div>`,\n ` )}`,\n ` <div ref={messagesEndRef} />`,\n ` </div>`,\n ``,\n ` <form onSubmit={handleSubmit} className=\"flex gap-2 py-4\">`,\n ` <input`,\n ` value={input}`,\n ` onChange={(e) => setInput(e.target.value)}`,\n ` placeholder=\"Type a message...\"`,\n ` className=\"flex-1 bg-gray-800 border border-gray-700 rounded-xl px-4 py-3 text-white placeholder-gray-500 focus:outline-none focus:border-blue-500\"`,\n ` />`,\n ` {isLoading ? (`,\n ` <button`,\n ` type=\"button\"`,\n ` onClick={stop}`,\n ` className=\"bg-gray-700 hover:bg-gray-600 text-white rounded-xl px-6 py-3 font-medium transition-colors\"`,\n ` >`,\n ` Stop`,\n ` </button>`,\n ` ) : (`,\n ` <button`,\n ` type=\"submit\"`,\n ` disabled={!input.trim()}`,\n ` className=\"bg-blue-600 hover:bg-blue-500 disabled:opacity-50 disabled:cursor-not-allowed text-white rounded-xl px-6 py-3 font-medium transition-colors\"`,\n ` >`,\n ` Send`,\n ` </button>`,\n ` )}`,\n ` </form>`,\n ` </div>`,\n ` </main>`,\n ` )`,\n `}`,\n ``,\n ].join('\\n');\n\n const layoutTsx = [\n `import type { Metadata } from 'next'`,\n `import './globals.css'`,\n ``,\n `export const metadata: Metadata = {`,\n ` title: ${tsString(options.name)},`,\n ` description: 'AI chat app powered by Cogitator',`,\n `}`,\n ``,\n `export default function RootLayout({`,\n ` children,`,\n `}: {`,\n ` children: React.ReactNode`,\n `}) {`,\n ` return (`,\n ` <html lang=\"en\">`,\n ` <body>{children}</body>`,\n ` </html>`,\n ` )`,\n `}`,\n ``,\n ].join('\\n');\n\n const globalsCss = [\n `@tailwind base;`,\n `@tailwind components;`,\n `@tailwind utilities;`,\n ``,\n ].join('\\n');\n\n const nextConfig = [\n `import type { NextConfig } from 'next'`,\n ``,\n `const config: NextConfig = {}`,\n ``,\n `export default config`,\n ``,\n ].join('\\n');\n\n const tsconfigJson = JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2017',\n lib: ['dom', 'dom.iterable', 'esnext'],\n allowJs: true,\n skipLibCheck: true,\n strict: true,\n noEmit: true,\n esModuleInterop: true,\n module: 'esnext',\n moduleResolution: 'bundler',\n resolveJsonModule: true,\n isolatedModules: true,\n jsx: 'preserve',\n incremental: true,\n plugins: [{ name: 'next' }],\n paths: { '@/*': ['./src/*'] },\n },\n include: ['next-env.d.ts', '**/*.ts', '**/*.tsx', '.next/types/**/*.ts'],\n exclude: ['node_modules'],\n },\n null,\n 2\n );\n\n const tailwindConfig = [\n `import type { Config } from 'tailwindcss'`,\n ``,\n `const config: Config = {`,\n ` content: ['./src/**/*.{ts,tsx}'],`,\n ` theme: { extend: {} },`,\n ` plugins: [],`,\n `}`,\n ``,\n `export default config`,\n ``,\n ].join('\\n');\n\n const postcssConfig = [\n `const config = {`,\n ` plugins: {`,\n ` tailwindcss: {},`,\n ` autoprefixer: {},`,\n ` },`,\n `}`,\n ``,\n `export default config`,\n ``,\n ].join('\\n');\n\n return [\n { path: 'src/lib/agent.ts', content: agentTs },\n { path: 'src/app/api/chat/route.ts', content: routeTs },\n { path: 'src/app/api/health/route.ts', content: healthRouteTs },\n { path: 'src/app/page.tsx', content: pageTsx },\n { path: 'src/app/layout.tsx', content: layoutTsx },\n { path: 'src/app/globals.css', content: globalsCss },\n { path: 'next.config.ts', content: nextConfig },\n { path: 'tsconfig.json', content: tsconfigJson },\n { path: 'tailwind.config.ts', content: tailwindConfig },\n { path: 'postcss.config.mjs', content: postcssConfig },\n ];\n },\n\n dependencies() {\n return {\n '@cogitator-ai/core': cogitatorVersion('@cogitator-ai/core'),\n '@cogitator-ai/next': cogitatorVersion('@cogitator-ai/next'),\n next: '^15.0.0',\n react: '^19.0.0',\n 'react-dom': '^19.0.0',\n zod: ZOD_VERSION,\n };\n },\n\n devDependencies() {\n return {\n typescript: '^5.8.0',\n '@types/node': '^22.0.0',\n '@types/react': '^19.0.0',\n '@types/react-dom': '^19.0.0',\n tailwindcss: '^3.4.0',\n autoprefixer: '^10.4.0',\n postcss: '^8.4.0',\n };\n },\n\n scripts() {\n return {\n dev: 'next dev',\n build: 'next build',\n start: 'next start',\n typecheck: 'tsc --noEmit',\n };\n },\n};\n","import type { Template, TemplateGenerator } from '../types.js';\nimport { basicTemplate } from './basic.js';\nimport { memoryTemplate } from './memory.js';\nimport { swarmTemplate } from './swarm.js';\nimport { workflowTemplate } from './workflow.js';\nimport { apiServerTemplate } from './api-server.js';\nimport { nextjsTemplate } from './nextjs.js';\n\nconst templates: Record<Template, TemplateGenerator> = {\n basic: basicTemplate,\n memory: memoryTemplate,\n swarm: swarmTemplate,\n workflow: workflowTemplate,\n 'api-server': apiServerTemplate,\n nextjs: nextjsTemplate,\n};\n\nexport function getTemplate(name: Template): TemplateGenerator {\n return templates[name];\n}\n\nexport const templateChoices: Array<{\n value: Template;\n label: string;\n hint: string;\n}> = [\n {\n value: 'basic',\n label: 'Basic agent',\n hint: 'Single agent with tools — best for getting started',\n },\n { value: 'memory', label: 'Agent with memory', hint: 'Persistent memory with Redis' },\n {\n value: 'swarm',\n label: 'Multi-agent swarm',\n hint: 'Team of agents with hierarchical coordination',\n },\n { value: 'workflow', label: 'DAG workflow', hint: 'Multi-step pipeline with checkpoints' },\n {\n value: 'api-server',\n label: 'REST API server',\n hint: 'Express server exposing agents via HTTP',\n },\n { value: 'nextjs', label: 'Next.js chat app', hint: 'Full-stack chat app with streaming' },\n];\n","import type { TemplateFile } from '../../types.js';\n\nexport function generateTsconfig(): TemplateFile {\n return {\n path: 'tsconfig.json',\n content: JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n module: 'NodeNext',\n moduleResolution: 'NodeNext',\n esModuleInterop: true,\n strict: true,\n skipLibCheck: true,\n outDir: 'dist',\n rootDir: 'src',\n declaration: true,\n resolveJsonModule: true,\n isolatedModules: true,\n },\n include: ['src'],\n },\n null,\n 2\n ),\n };\n}\n","import type { Template, TemplateFile } from '../../types.js';\n\n/** What `next build` and `next dev` write next to the sources. */\nconst NEXT_OUTPUT = ['.next/', 'out/', 'next-env.d.ts'];\n\nexport function generateGitignore(template: Template): TemplateFile {\n return {\n path: '.gitignore',\n content: [\n 'node_modules/',\n 'dist/',\n ...(template === 'nextjs' ? NEXT_OUTPUT : []),\n '.env',\n '.env.*',\n '!.env.example',\n '*.log',\n '*.tsbuildinfo',\n '.DS_Store',\n 'coverage/',\n '.turbo/',\n '',\n ].join('\\n'),\n };\n}\n","import type { LLMProvider, Template, TemplateFile } from '../../types.js';\n\nexport function generateEnvExample(provider: LLMProvider, template?: Template): TemplateFile {\n const lines: string[] = ['# Cogitator Environment Variables', ''];\n\n switch (provider) {\n case 'ollama':\n lines.push('# Ollama (default: http://localhost:11434)');\n lines.push('# OLLAMA_BASE_URL=http://localhost:11434');\n break;\n case 'openai':\n lines.push('# OpenAI, https://platform.openai.com/api-keys');\n lines.push('OPENAI_API_KEY=');\n break;\n case 'anthropic':\n lines.push('# Anthropic, https://console.anthropic.com/settings/keys');\n lines.push('ANTHROPIC_API_KEY=');\n break;\n case 'google':\n lines.push('# Google AI, https://aistudio.google.com/apikey');\n lines.push('GOOGLE_API_KEY=');\n break;\n }\n\n if (template === 'memory') {\n lines.push('');\n lines.push('# Redis');\n lines.push('REDIS_URL=redis://localhost:6379');\n }\n\n if (template === 'api-server') {\n lines.push('');\n lines.push('# Bearer token that every API route except health and docs requires.');\n lines.push('# Optional in development, where the server listens on 127.0.0.1 only,');\n lines.push('# required in production (NODE_ENV=production), where it listens on 0.0.0.0.');\n lines.push('API_TOKEN=');\n lines.push('');\n lines.push('# Comma-separated browser origins allowed to call the API, CORS is off without it');\n lines.push('# CORS_ORIGIN=http://localhost:5173');\n lines.push('');\n lines.push('# HOST=127.0.0.1');\n lines.push('# PORT=3000');\n }\n\n lines.push('');\n\n return { path: '.env.example', content: lines.join('\\n') };\n}\n","import type { LLMProvider, TemplateFile } from '../../types.js';\nimport { defaultModels } from '../../utils/providers.js';\n\n/**\n * Ollama with an empty volume answers \"model not found\", so a one-shot\n * `ollama-pull` service downloads the project's model into it once the server\n * is up. Later runs find the model in the volume and finish at once.\n */\nfunction ollamaServices(model: string): string[] {\n return [\n ' ollama:',\n ' image: ollama/ollama:latest',\n ' ports:',\n ' - \"11434:11434\"',\n ' volumes:',\n ' - ollama_data:/root/.ollama',\n ' healthcheck:',\n ' test: [\"CMD\", \"ollama\", \"list\"]',\n ' interval: 5s',\n ' timeout: 5s',\n ' retries: 20',\n '',\n ' ollama-pull:',\n ' image: ollama/ollama:latest',\n ' depends_on:',\n ' ollama:',\n ' condition: service_healthy',\n ' environment:',\n ' OLLAMA_HOST: http://ollama:11434',\n ` entrypoint: [\"ollama\", \"pull\", ${JSON.stringify(model)}]`,\n ' restart: \"no\"',\n '',\n ];\n}\n\nexport function generateDockerCompose(\n provider: LLMProvider,\n model: string = defaultModels[provider]\n): TemplateFile {\n const services: string[] = [];\n\n if (provider === 'ollama') {\n services.push(...ollamaServices(model));\n }\n\n services.push(\n ...[\n ' redis:',\n ' image: redis:7-alpine',\n ' ports:',\n ' - \"6379:6379\"',\n ' volumes:',\n ' - redis_data:/data',\n '',\n ' postgres:',\n ' image: postgres:16-alpine',\n ' ports:',\n ' - \"5432:5432\"',\n ' environment:',\n ' POSTGRES_USER: ${POSTGRES_USER:-cogitator}',\n ' POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-cogitator}',\n ' POSTGRES_DB: ${POSTGRES_DB:-cogitator}',\n ' volumes:',\n ' - postgres_data:/var/lib/postgresql/data',\n ]\n );\n\n const volumes = ['volumes:'];\n if (provider === 'ollama') volumes.push(' ollama_data:');\n volumes.push(' redis_data:', ' postgres_data:');\n\n const content = ['services:', ...services, '', ...volumes, ''].join('\\n');\n\n return { path: 'docker-compose.yml', content };\n}\n","import type { LLMProvider, Template, TemplateFile } from '../../types.js';\nimport { defaultModels, providerEnvKey } from '../../utils/providers.js';\nimport { getTemplate } from '../index.js';\n\nconst HEADER = [\n '# Read by `cogitator run` and `cogitator deploy`: the provider and model, the',\n '# memory to provision and the deploy settings. The code in src/ configures',\n '# Cogitator itself, so change the provider, model or memory in both places.',\n '',\n];\n\n/**\n * `cogitator.yml` in the shape `@cogitator-ai/config` loads: the provider and model\n * the generated code uses, the memory it connects to, and for servers the path\n * `cogitator deploy` probes for health and the secrets the app needs. API keys stay\n * in the environment, where the config loader picks them up.\n */\nexport function generateCogitatorYml(\n provider: LLMProvider,\n template?: Template,\n model: string = defaultModels[provider]\n): TemplateFile {\n const generator = template ? getTemplate(template) : undefined;\n const lines = [...HEADER, 'llm:', ` defaultProvider: ${provider}`, ` defaultModel: ${model}`];\n\n if (provider === 'ollama') {\n lines.push(\n ' providers:',\n ' ollama:',\n ' baseUrl: ${OLLAMA_BASE_URL:-http://localhost:11434}'\n );\n }\n\n if (generator?.memoryAdapter === 'redis') {\n lines.push(\n '',\n 'memory:',\n ' adapter: redis',\n ' redis:',\n ' url: ${REDIS_URL:-redis://localhost:6379}'\n );\n } else if (generator?.memoryAdapter === 'memory') {\n lines.push('', 'memory:', ' adapter: memory');\n }\n\n const deploy: string[] = [];\n if (generator?.healthPath) {\n deploy.push(' health:', ` path: ${generator.healthPath}`);\n }\n if (generator?.secrets?.length) {\n const secrets = [\n ...(provider === 'ollama' ? [] : [providerEnvKey(provider)]),\n ...generator.secrets,\n ];\n deploy.push(' secrets:', ...secrets.map((name) => ` - ${name}`));\n }\n if (deploy.length > 0) {\n lines.push('', 'deploy:', ...deploy);\n }\n\n lines.push('');\n return { path: 'cogitator.yml', content: lines.join('\\n') };\n}\n","import { execSync } from 'node:child_process';\nimport type { PackageManager } from '../types.js';\n\n/**\n * The package manager that launched the scaffolder, read from the\n * `npm_config_user_agent` it sets (`npm/10.9.8 node/v22...` under npx), or pnpm\n * when there is none.\n */\nexport function detectPackageManager(): PackageManager {\n const name = process.env.npm_config_user_agent?.split('/')[0];\n if (name === 'npm' || name === 'pnpm' || name === 'yarn' || name === 'bun') return name;\n return 'pnpm';\n}\n\nexport function installDependencies(cwd: string, pm: PackageManager) {\n execSync(`${pm} install`, { cwd, stdio: 'inherit' });\n}\n\nexport function devCommand(pm: PackageManager): string {\n if (pm === 'npm') return 'npm run dev';\n return `${pm} dev`;\n}\n\nexport function runCommand(pm: PackageManager): string {\n if (pm === 'npm') return 'npx';\n if (pm === 'pnpm') return 'pnpm dlx';\n if (pm === 'yarn') return 'yarn dlx';\n return 'bunx';\n}\n","import type { ProjectOptions } from './types.js';\nimport { devCommand } from './utils/package-manager.js';\nimport { modelFor, providerEnvKey } from './utils/providers.js';\n\n/** A command to run before the first start, with an optional explanation. */\nexport interface NextStep {\n command: string;\n note?: string;\n}\n\nexport interface NextStepsState {\n /** Whether `<pm> install` already ran. */\n installed: boolean;\n /** Whether the Ollama model is known to be pulled; ignored for other providers. */\n modelReady: boolean;\n /** Where the project is relative to the user's shell, to start with `cd`; no `cd` when absent. */\n directory?: string;\n}\n\n/** The commands that take a freshly scaffolded project to its first successful run. */\nexport function nextSteps(options: ProjectOptions, state: NextStepsState): NextStep[] {\n const steps: NextStep[] = [];\n\n if (state.directory) {\n const dir = /^[\\w./-]+$/.test(state.directory)\n ? state.directory\n : JSON.stringify(state.directory);\n steps.push({ command: `cd ${dir}` });\n }\n if (!state.installed) {\n steps.push({ command: `${options.packageManager} install` });\n }\n if (options.provider !== 'ollama') {\n steps.push({\n command: 'cp .env.example .env',\n note: `then set ${providerEnvKey(options.provider)} in .env`,\n });\n }\n if (options.provider === 'ollama' && !state.modelReady) {\n steps.push({\n command: `ollama pull ${modelFor(options)}`,\n note: options.docker\n ? 'download the model the agents use, or let `docker compose up -d` pull it into the Ollama container'\n : 'download the model the agents use',\n });\n }\n if (options.template === 'memory' && options.docker) {\n steps.push({ command: 'docker compose up -d redis', note: 'the memory lives in Redis' });\n }\n steps.push({ command: devCommand(options.packageManager) });\n\n return steps;\n}\n","export const DOCS_URL = 'https://cogitator.app/docs';\nexport const REPO_URL = 'https://github.com/cogitator-ai/Cogitator-AI';\n","import type { ProjectOptions, TemplateFile } from '../../types.js';\nimport { nextSteps } from '../../next-steps.js';\nimport { DOCS_URL, REPO_URL } from '../../utils/links.js';\n\nconst templateNames: Record<string, string> = {\n basic: 'Basic Agent',\n memory: 'Agent with Memory',\n swarm: 'Multi-Agent Swarm',\n workflow: 'DAG Workflow',\n 'api-server': 'REST API Server',\n nextjs: 'Next.js Chat App',\n};\n\nexport function generateReadme(options: ProjectOptions): TemplateFile {\n const templateName = templateNames[options.template] || options.template;\n const steps = nextSteps(options, { installed: false, modelReady: false });\n\n const content = [\n `# ${options.name}`,\n '',\n `> Created with [create-cogitator-app](${REPO_URL}) - ${templateName} template`,\n '',\n '## Getting Started',\n '',\n '```bash',\n ...steps.flatMap((step, i) => [\n ...(i > 0 ? [''] : []),\n ...(step.note ? [`# ${step.note}`] : []),\n step.command,\n ]),\n '```',\n '',\n ...(options.docker\n ? [\n '## Docker Services',\n '',\n '```bash',\n 'docker compose up -d',\n '```',\n '',\n options.provider === 'ollama'\n ? 'Starts Redis, Postgres and Ollama, and pulls the model into the Ollama container.'\n : 'Starts Redis and Postgres.',\n '',\n ]\n : []),\n '## Learn More',\n '',\n `- [Cogitator Documentation](${DOCS_URL})`,\n `- [GitHub Repository](${REPO_URL})`,\n '',\n ];\n\n return { path: 'README.md', content: content.join('\\n') };\n}\n","import type { TemplateFile } from '../../types.js';\n\n/**\n * pnpm 10.26+ skips dependency build scripts unless they are allowed, and pnpm 11 fails the\n * install instead. These are the native/binary packages a Cogitator project pulls in.\n */\nexport const PNPM_ALLOWED_BUILDS = ['better-sqlite3', 'esbuild', 'sharp'] as const;\n\nexport function generatePnpmWorkspace(): TemplateFile {\n return {\n path: 'pnpm-workspace.yaml',\n content: ['allowBuilds:', ...PNPM_ALLOWED_BUILDS.map((name) => ` ${name}: true`), ''].join(\n '\\n'\n ),\n };\n}\n","import { execFileSync } from 'node:child_process';\n\n/** Used only when the user has no git identity, so the first commit can still be made. */\nconst FALLBACK_IDENTITY = [\n '-c',\n 'user.name=create-cogitator-app',\n '-c',\n 'user.email=create-cogitator-app@localhost',\n];\n\nexport function isGitInstalled(): boolean {\n try {\n execFileSync('git', ['--version'], { stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n}\n\nfunction hasIdentity(cwd: string): boolean {\n try {\n const name = execFileSync('git', ['config', 'user.name'], { cwd, encoding: 'utf8' }).trim();\n const email = execFileSync('git', ['config', 'user.email'], { cwd, encoding: 'utf8' }).trim();\n return name.length > 0 && email.length > 0;\n } catch {\n return false;\n }\n}\n\n/**\n * Initialises a repository and commits the scaffold, authored by the user's own git identity;\n * a neutral local identity is used only when none is configured.\n */\nexport function initGitRepo(cwd: string) {\n execFileSync('git', ['init'], { cwd, stdio: 'ignore' });\n execFileSync('git', ['add', '-A'], { cwd, stdio: 'ignore' });\n const identity = hasIdentity(cwd) ? [] : FALLBACK_IDENTITY;\n execFileSync('git', [...identity, 'commit', '-m', 'feat: initial project scaffold'], {\n cwd,\n stdio: 'ignore',\n });\n}\n","import path from 'node:path';\n\nconst PACKAGE_NAME = /^[a-z0-9][a-z0-9._-]*$/;\nconst MAX_LENGTH = 214;\n\n/**\n * Why `name` cannot be the generated package's name, or `undefined` when it can.\n * The name lands in package.json and in generated code, so it has to be a valid\n * unscoped npm package name.\n */\nexport function validateProjectName(name: string): string | undefined {\n const trimmed = name.trim();\n if (!trimmed) return 'Project name is required';\n if (trimmed.length > MAX_LENGTH) return `Use at most ${MAX_LENGTH} characters`;\n if (!PACKAGE_NAME.test(trimmed)) {\n return 'Use lowercase letters, digits, \".\", \"_\" or \"-\", starting with a letter or digit';\n }\n return undefined;\n}\n\n/** The package name for a project created in `dir`: its last path segment, so `.` names it after the current directory. */\nexport function projectNameFromDirectory(dir: string, cwd: string = process.cwd()): string {\n return path.basename(path.resolve(cwd, dir.trim()));\n}\n","import * as p from '@clack/prompts';\nimport path from 'node:path';\nimport type { LLMProvider, PackageManager, ProjectOptions, Template } from './types.js';\nimport { templateChoices } from './templates/index.js';\nimport { detectPackageManager } from './utils/package-manager.js';\nimport { defaultModels } from './utils/providers.js';\nimport { projectNameFromDirectory, validateProjectName } from './utils/project-name.js';\nimport { hasOllamaModel, listOllamaModels, resolveOllamaUrl } from './utils/ollama.js';\n\ninterface ParsedArgs {\n name?: string;\n template?: Template;\n provider?: LLMProvider;\n model?: string;\n packageManager?: PackageManager;\n docker?: boolean;\n git?: boolean;\n install?: boolean;\n yes?: boolean;\n}\n\nconst validTemplates: Template[] = ['basic', 'memory', 'swarm', 'workflow', 'api-server', 'nextjs'];\nconst validProviders: LLMProvider[] = ['ollama', 'openai', 'anthropic', 'google'];\nconst validPMs: PackageManager[] = ['pnpm', 'npm', 'yarn', 'bun'];\n\nexport function parseArgs(args: string[]): ParsedArgs {\n const parsed: ParsedArgs = {};\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n if (arg === '--template' || arg === '-t') {\n if (i + 1 < args.length) {\n const val = args[++i] as Template;\n if (validTemplates.includes(val)) parsed.template = val;\n }\n } else if (arg === '--provider' || arg === '-p') {\n if (i + 1 < args.length) {\n const val = args[++i] as LLMProvider;\n if (validProviders.includes(val)) parsed.provider = val;\n }\n } else if (arg === '--model') {\n const val = args[i + 1];\n if (val !== undefined && !val.startsWith('-')) {\n parsed.model = val;\n i++;\n }\n } else if (arg === '--pm') {\n if (i + 1 < args.length) {\n const val = args[++i] as PackageManager;\n if (validPMs.includes(val)) parsed.packageManager = val;\n }\n } else if (arg === '--docker') {\n parsed.docker = true;\n } else if (arg === '--no-docker') {\n parsed.docker = false;\n } else if (arg === '--git') {\n parsed.git = true;\n } else if (arg === '--no-git') {\n parsed.git = false;\n } else if (arg === '--install') {\n parsed.install = true;\n } else if (arg === '--no-install') {\n parsed.install = false;\n } else if (arg === '-y' || arg === '--yes') {\n parsed.yes = true;\n } else if (!arg.startsWith('-') && !parsed.name) {\n parsed.name = arg;\n }\n }\n\n return parsed;\n}\n\n/** What `--yes` answers, and what each prompt suggests. */\nexport const defaultAnswers = {\n name: 'my-agents',\n template: 'basic',\n provider: 'ollama',\n docker: true,\n git: true,\n} as const satisfies Partial<ProjectOptions>;\n\nfunction unlessCancelled<T>(answer: T | typeof p.CANCEL_SYMBOL): T {\n if (p.isCancel(answer)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n return answer;\n}\n\nfunction validateDirectory(value: string | undefined): string | undefined {\n if (!value) return undefined;\n if (!value.trim()) return 'Project name is required';\n return validateProjectName(projectNameFromDirectory(value));\n}\n\nfunction formatSize(bytes: number): string | undefined {\n return bytes > 0 ? `${(bytes / 1e9).toFixed(1)} GB` : undefined;\n}\n\n/**\n * Asks which local model the agents should use, offering the recommended one and\n * the ones already installed. Returns `undefined` without asking when Ollama does\n * not answer, which leaves the recommended model in place.\n */\nasync function promptOllamaModel(): Promise<string | undefined> {\n const installed = await listOllamaModels(resolveOllamaUrl());\n if (!installed) return undefined;\n\n const recommended = defaultModels.ollama;\n const others = installed.filter((model) => !hasOllamaModel([model], recommended));\n\n return unlessCancelled(\n await p.select<string>({\n message: 'Which Ollama model?',\n options: [\n {\n value: recommended,\n label: recommended,\n hint: hasOllamaModel(installed, recommended)\n ? 'recommended, installed'\n : 'recommended, not installed yet',\n },\n ...others.map((model) => ({\n value: model.name,\n label: model.name,\n hint: formatSize(model.size),\n })),\n ],\n initialValue: recommended,\n })\n );\n}\n\n/**\n * Turn the parsed arguments into project options, asking for whatever they leave\n * out; with `--yes` nothing is asked and the defaults fill the gaps.\n */\nexport async function collectOptions(args: ParsedArgs): Promise<ProjectOptions> {\n const interactive = !args.yes;\n\n const directory = (\n args.name ||\n (interactive\n ? unlessCancelled(\n await p.text({\n message: 'Where should we create your project?',\n placeholder: `./${defaultAnswers.name}`,\n defaultValue: defaultAnswers.name,\n validate: validateDirectory,\n })\n )\n : defaultAnswers.name)\n ).trim();\n\n const projectPath = path.resolve(process.cwd(), directory);\n const projectName = projectNameFromDirectory(directory);\n const nameError = validateProjectName(projectName);\n if (nameError) {\n throw new Error(`Invalid project name \"${projectName}\": ${nameError}`);\n }\n\n const template =\n args.template ??\n (interactive\n ? unlessCancelled(\n await p.select<Template>({\n message: 'Which template would you like?',\n options: templateChoices,\n initialValue: defaultAnswers.template,\n })\n )\n : defaultAnswers.template);\n\n const provider =\n args.provider ??\n (interactive\n ? unlessCancelled(\n await p.select<LLMProvider>({\n message: 'Which LLM provider?',\n options: [\n {\n value: 'ollama',\n label: 'Ollama',\n hint: `${defaultModels.ollama}, local, free, requires Ollama installed`,\n },\n { value: 'openai', label: 'OpenAI', hint: defaultModels.openai },\n { value: 'anthropic', label: 'Anthropic', hint: defaultModels.anthropic },\n { value: 'google', label: 'Google Gemini', hint: defaultModels.google },\n ],\n initialValue: defaultAnswers.provider,\n })\n )\n : defaultAnswers.provider);\n\n const model =\n args.model ?? (interactive && provider === 'ollama' ? await promptOllamaModel() : undefined);\n\n const packageManager =\n args.packageManager ??\n (interactive\n ? unlessCancelled(\n await p.select<PackageManager>({\n message: 'Package manager?',\n options: [\n { value: 'pnpm', label: 'pnpm' },\n { value: 'npm', label: 'npm' },\n { value: 'yarn', label: 'yarn' },\n { value: 'bun', label: 'bun' },\n ],\n initialValue: detectPackageManager(),\n })\n )\n : detectPackageManager());\n\n const docker =\n args.docker ??\n (interactive\n ? unlessCancelled(\n await p.confirm({\n message:\n 'Include Docker Compose? (Redis + Postgres' +\n (provider === 'ollama' ? ' + Ollama)' : ')'),\n initialValue: defaultAnswers.docker,\n })\n )\n : defaultAnswers.docker);\n\n const git =\n args.git ??\n (interactive\n ? unlessCancelled(\n await p.confirm({\n message: 'Initialize git repository?',\n initialValue: defaultAnswers.git,\n })\n )\n : defaultAnswers.git);\n\n return {\n name: projectName,\n path: projectPath,\n template,\n provider,\n ...(model !== undefined && { model }),\n packageManager,\n docker,\n git,\n ...(args.install !== undefined && { install: args.install }),\n };\n}\n","export const DEFAULT_OLLAMA_URL = 'http://localhost:11434';\n\nexport interface OllamaModel {\n name: string;\n size: number;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** `value` without the slashes it ends with, in linear time, unlike `replace(/\\/+$/, '')`. */\nfunction trimTrailingSlashes(value: string): string {\n let end = value.length;\n while (end > 0 && value[end - 1] === '/') end--;\n return value.slice(0, end);\n}\n\n/**\n * The Ollama server the generated code talks to: `OLLAMA_BASE_URL`, which it\n * reads, then `OLLAMA_HOST`, which the Ollama CLI reads, then the local default.\n */\nexport function resolveOllamaUrl(env: Record<string, string | undefined> = process.env): string {\n const raw = env.OLLAMA_BASE_URL?.trim() || env.OLLAMA_HOST?.trim();\n if (!raw) return DEFAULT_OLLAMA_URL;\n const withScheme = /^https?:\\/\\//i.test(raw) ? raw : `http://${raw}`;\n return trimTrailingSlashes(withScheme);\n}\n\n/** The models installed in the Ollama at `baseUrl`, or `undefined` when it does not answer. */\nexport async function listOllamaModels(\n baseUrl: string,\n timeoutMs = 2000\n): Promise<OllamaModel[] | undefined> {\n try {\n const res = await fetch(`${baseUrl}/api/tags`, { signal: AbortSignal.timeout(timeoutMs) });\n if (!res.ok) return undefined;\n const data: unknown = await res.json();\n if (!isRecord(data) || !Array.isArray(data.models)) return undefined;\n return data.models.flatMap((model: unknown) =>\n isRecord(model) && typeof model.name === 'string'\n ? [{ name: model.name, size: typeof model.size === 'number' ? model.size : 0 }]\n : []\n );\n } catch {\n return undefined;\n }\n}\n\nfunction withTag(name: string): string {\n return name.includes(':') ? name : `${name}:latest`;\n}\n\n/** Whether `model` is among `installed`, treating a name without a tag as `:latest` like Ollama does. */\nexport function hasOllamaModel(installed: readonly OllamaModel[], model: string): boolean {\n const wanted = withTag(model);\n return installed.some((m) => withTag(m.name) === wanted);\n}\n\nfunction describeProgress(event: Record<string, unknown>, status: string): string {\n const { completed, total } = event;\n if (typeof completed === 'number' && typeof total === 'number' && total > 0) {\n return `${status} ${Math.floor((completed / total) * 100)}%`;\n }\n return status;\n}\n\nasync function* ndjson(stream: ReadableStream<Uint8Array>): AsyncGenerator<unknown> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n let newline = buffer.indexOf('\\n');\n while (newline >= 0) {\n const line = buffer.slice(0, newline).trim();\n buffer = buffer.slice(newline + 1);\n if (line) yield JSON.parse(line) as unknown;\n newline = buffer.indexOf('\\n');\n }\n }\n const rest = (buffer + decoder.decode()).trim();\n if (rest) yield JSON.parse(rest) as unknown;\n } finally {\n reader.releaseLock();\n }\n}\n\n/** Pulls `model` into the Ollama at `baseUrl`, reporting each status line; throws when the pull fails. */\nexport async function pullOllamaModel(\n baseUrl: string,\n model: string,\n onStatus: (status: string) => void\n): Promise<void> {\n const res = await fetch(`${baseUrl}/api/pull`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ model, stream: true }),\n });\n if (!res.ok || !res.body) {\n const detail = await res.text().catch(() => '');\n throw new Error(`Failed to pull ${model}: HTTP ${res.status}${detail ? ` ${detail}` : ''}`);\n }\n\n let succeeded = false;\n for await (const event of ndjson(res.body)) {\n if (!isRecord(event)) continue;\n if (typeof event.error === 'string') throw new Error(`Failed to pull ${model}: ${event.error}`);\n if (typeof event.status !== 'string') continue;\n if (event.status === 'success') succeeded = true;\n onStatus(describeProgress(event, event.status));\n }\n\n if (!succeeded) {\n throw new Error(`Failed to pull ${model}: the download stopped before it finished`);\n }\n}\n"],"mappings":"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","names":["path","path","path","spinner","p","path","isRecord","path"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-cogitator-app",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "description": "Create a new Cogitator AI agent project",
5
5
  "keywords": [
6
6
  "cogitator",
@@ -35,6 +35,13 @@
35
35
  "picocolors": "^1.1.0"
36
36
  },
37
37
  "devDependencies": {
38
+ "@cogitator-ai/core": "^0.34.0",
39
+ "@cogitator-ai/express": "^0.8.0",
40
+ "@cogitator-ai/memory": "^0.12.0",
41
+ "@cogitator-ai/next": "^0.8.0",
42
+ "@cogitator-ai/redis": "^0.5.2",
43
+ "@cogitator-ai/swarms": "^0.12.0",
44
+ "@cogitator-ai/workflows": "^0.12.0",
38
45
  "@types/node": "^22.20.4",
39
46
  "tsup": "^8.4.0",
40
47
  "typescript": "^6.0.3",