cortask 0.2.38 → 0.2.39
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/index.js +641 -76
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/terminal/theme.ts","../src/terminal/banner.ts","../src/terminal/help.ts","../src/commands/setup.ts","../src/commands/status.ts","../src/commands/dashboard.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport {\n loadConfig,\n getDataDir,\n WorkspaceManager,\n SessionStore,\n EncryptedCredentialStore,\n getOrCreateSecret,\n createProvider,\n AgentRunner,\n builtinTools,\n createCronTool,\n createArtifactTool,\n loadSkills,\n getEligibleSkills,\n buildSkillTools,\n CronService,\n ArtifactStore,\n installSkillFromGit,\n removeSkill,\n type ProviderId,\n type ToolHandler,\n} from \"@cortask/core\";\nimport path from \"node:path\";\nimport readline from \"node:readline\";\nimport { theme } from \"./terminal/theme.js\";\nimport { emitBanner } from \"./terminal/banner.js\";\nimport { configureHelp } from \"./terminal/help.js\";\nimport { setupCommand } from \"./commands/setup.js\";\nimport { statusCommand } from \"./commands/status.js\";\nimport { dashboardCommand } from \"./commands/dashboard.js\";\nimport { createRequire } from \"node:module\";\n\nconst require = createRequire(import.meta.url);\nconst VERSION: string = require(\"../package.json\").version;\n\nconst program = new Command();\n\nprogram\n .name(\"cortask\")\n .description(\"Cortask — Local AI agent with skills, workspaces, and cron\")\n .version(VERSION);\n\n// Configure themed help and banner\nconfigureHelp(program, VERSION);\n\n// ── serve ──────────────────────────────────────────────────\n\nprogram\n .command(\"serve\")\n .description(\"Start the gateway server\")\n .option(\"-p, --port <port>\", \"Port to listen on\", \"3777\")\n .option(\"--host <host>\", \"Host to bind to\", \"127.0.0.1\")\n .action(async (opts) => {\n emitBanner(VERSION);\n const { startServer } = await import(\"@cortask/gateway\");\n console.log(\n `${theme.muted(\"Starting gateway on\")} ${theme.info(`http://${opts.host}:${opts.port}`)}`,\n );\n await startServer(parseInt(opts.port, 10), opts.host);\n });\n\n// ── chat ───────────────────────────────────────────────────\n\nprogram\n .command(\"chat\")\n .description(\"Interactive chat REPL\")\n .option(\"-w, --workspace <path>\", \"Workspace directory path\", \".\")\n .action(async (opts) => {\n emitBanner(VERSION);\n const dataDir = getDataDir();\n const configPath = path.join(dataDir, \"config.yaml\");\n const config = await loadConfig(configPath);\n const dbPath = path.join(dataDir, \"cortask.db\");\n const workspaceManager = new WorkspaceManager(dbPath);\n const secret = await getOrCreateSecret(dataDir);\n const credentialStore = new EncryptedCredentialStore(\n path.join(dataDir, \"credentials.enc.json\"),\n secret,\n );\n const cronService = new CronService(dbPath);\n const artifactStore = new ArtifactStore();\n\n // Resolve workspace\n const workspacePath = path.resolve(opts.workspace);\n const workspaces = await workspaceManager.list();\n let workspace = workspaces.find((w) => w.rootPath === workspacePath);\n if (!workspace) {\n workspace = await workspaceManager.create(\n path.basename(workspacePath),\n workspacePath,\n );\n console.log(\n `${theme.success(\"✓\")} Registered workspace: ${theme.command(workspace.name)}`,\n );\n }\n\n const sessionStore = new SessionStore(\n workspaceManager.getSessionDbPath(workspacePath),\n );\n\n // Load skills\n const bundledSkillsDir = path.resolve(\"skills\");\n const userSkillsDir = path.join(dataDir, \"skills\");\n const allSkills = await loadSkills(\n bundledSkillsDir,\n userSkillsDir,\n config.skills.dirs,\n credentialStore,\n );\n const eligible = getEligibleSkills(allSkills);\n const skillRegistry = await buildSkillTools(eligible, credentialStore);\n const skillToolHandlers: ToolHandler[] = skillRegistry.toolDefs.map((def) => ({\n definition: def,\n execute: async (args: Record<string, unknown>, context: Parameters<ToolHandler[\"execute\"]>[1]) => {\n const handler = skillRegistry.handlers.get(def.name);\n if (!handler) return { toolCallId: \"\", content: \"Tool not found\", isError: true };\n return handler(args, context.workspacePath);\n },\n }));\n const skillPrompts = eligible\n .map((s) => s.content)\n .filter(Boolean);\n\n // Build provider\n const providerId = (config.providers.default || \"anthropic\") as ProviderId;\n const providerConfig = config.providers[providerId];\n const apiKey = await credentialStore.get(`provider.${providerId}.apiKey`);\n if (!apiKey) {\n console.error(theme.error(`\\n✗ No API key for provider \"${providerId}\"`));\n console.error(theme.muted(\" Set it with:\"));\n console.error(\n theme.command(\n ` cortask credentials set provider.${providerId}.apiKey YOUR_KEY`,\n ),\n );\n console.log();\n process.exit(1);\n }\n const provider = createProvider(providerId, apiKey);\n const model =\n ((providerConfig as Record<string, unknown>)?.model as string) ??\n \"claude-sonnet-4-5-20250929\";\n\n const sessionId = `cli_${Date.now()}`;\n\n const runner = new AgentRunner({\n config: {\n provider,\n model,\n maxTurns: config.agent.maxTurns,\n temperature: config.agent.temperature,\n maxTokens: config.agent.maxTokens,\n },\n tools: [\n ...builtinTools,\n createCronTool(cronService),\n createArtifactTool(artifactStore),\n ...skillToolHandlers,\n ],\n getWorkspacePath: () => workspacePath,\n getDataDir: () => dataDir,\n getMemoryContent: () => workspaceManager.readMemory(workspacePath),\n getGlobalMemoryContent: () => workspaceManager.readGlobalMemory(dataDir),\n getSkillPrompts: () => skillPrompts,\n getSessionMessages: async (sid) => sessionStore.getMessages(sid),\n saveSessionMessages: async (sid, msgs) =>\n sessionStore.saveMessages(sid, msgs),\n });\n\n console.log(\n `${theme.muted(\"Workspace:\")} ${theme.info(workspacePath)}`,\n );\n console.log(\n `${theme.muted(\"Provider:\")} ${theme.command(providerId)} ${theme.muted(`(${model})`)}`,\n );\n console.log(\n theme.muted(\"Type a message, /help for commands, /quit to exit.\\n\"),\n );\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n prompt: `${theme.accent(\"you>\")} `,\n });\n\n rl.prompt();\n\n rl.on(\"line\", async (line) => {\n const input = line.trim();\n if (!input) {\n rl.prompt();\n return;\n }\n\n // Slash commands\n if (input.startsWith(\"/\")) {\n const cmd = input.toLowerCase();\n if (cmd === \"/quit\" || cmd === \"/exit\") {\n rl.close();\n return;\n }\n if (cmd === \"/help\") {\n console.log(theme.heading(\"\\nCommands:\"));\n console.log(` ${theme.command(\"/help\")} ${theme.muted(\"Show this help\")}`);\n console.log(` ${theme.command(\"/quit\")} ${theme.muted(\"Exit the REPL\")}`);\n console.log();\n rl.prompt();\n return;\n }\n console.log(theme.warn(`Unknown command: ${input}. Type /help for commands.`));\n rl.prompt();\n return;\n }\n\n process.stdout.write(`\\n${theme.accentBright(\"cortask>\")} `);\n try {\n for await (const event of runner.runStream({\n prompt: input,\n sessionId,\n })) {\n if (event.type === \"text_delta\" && event.text) {\n process.stdout.write(event.text);\n } else if (event.type === \"tool_call_start\") {\n process.stdout.write(\n `\\n${theme.muted(\"[\")}${theme.warn(\"tool\")}${theme.muted(\":\")} ${theme.command(event.toolName)}${theme.muted(\"]\")} `,\n );\n } else if (event.type === \"tool_result\") {\n const preview = event.toolResult?.content?.slice(0, 200) ?? \"\";\n process.stdout.write(`${theme.muted(\"→\")} ${theme.muted(preview)}\\n`);\n }\n }\n } catch (err) {\n console.error(\n theme.error(\n `\\n✗ ${err instanceof Error ? err.message : String(err)}`,\n ),\n );\n }\n process.stdout.write(\"\\n\\n\");\n rl.prompt();\n });\n\n rl.on(\"close\", () => {\n console.log(theme.muted(\"\\nGoodbye.\"));\n workspaceManager.close();\n process.exit(0);\n });\n });\n\n// ── run ────────────────────────────────────────────────────\n\nprogram\n .command(\"run\")\n .description(\"Run a one-shot prompt\")\n .argument(\"<prompt>\", \"The prompt to execute\")\n .option(\"-w, --workspace <path>\", \"Workspace directory path\", \".\")\n .action(async (prompt, opts) => {\n const dataDir = getDataDir();\n const configPath = path.join(dataDir, \"config.yaml\");\n const config = await loadConfig(configPath);\n const dbPath = path.join(dataDir, \"cortask.db\");\n const workspaceManager = new WorkspaceManager(dbPath);\n const secret = await getOrCreateSecret(dataDir);\n const credentialStore = new EncryptedCredentialStore(\n path.join(dataDir, \"credentials.enc.json\"),\n secret,\n );\n const cronService = new CronService(dbPath);\n const artifactStore = new ArtifactStore();\n\n const workspacePath = path.resolve(opts.workspace);\n const workspaces = await workspaceManager.list();\n let workspace = workspaces.find((w) => w.rootPath === workspacePath);\n if (!workspace) {\n workspace = await workspaceManager.create(\n path.basename(workspacePath),\n workspacePath,\n );\n }\n\n const sessionStore = new SessionStore(\n workspaceManager.getSessionDbPath(workspacePath),\n );\n\n const providerId = (config.providers.default || \"anthropic\") as ProviderId;\n const apiKey = await credentialStore.get(`provider.${providerId}.apiKey`);\n if (!apiKey) {\n console.error(theme.error(`\\n✗ No API key for provider \"${providerId}\".`));\n console.error(theme.muted(\" Set it with:\"));\n console.error(\n theme.command(\n ` cortask credentials set provider.${providerId}.apiKey YOUR_KEY`,\n ),\n );\n process.exit(1);\n }\n const provider = createProvider(providerId, apiKey);\n const providerConfig = config.providers[providerId];\n const model =\n ((providerConfig as Record<string, unknown>)?.model as string) ??\n \"claude-sonnet-4-5-20250929\";\n\n const runner = new AgentRunner({\n config: {\n provider,\n model,\n maxTurns: config.agent.maxTurns,\n temperature: config.agent.temperature,\n maxTokens: config.agent.maxTokens,\n },\n tools: [\n ...builtinTools,\n createCronTool(cronService),\n createArtifactTool(artifactStore),\n ],\n getWorkspacePath: () => workspacePath,\n getDataDir: () => dataDir,\n getMemoryContent: () => workspaceManager.readMemory(workspacePath),\n getGlobalMemoryContent: () => workspaceManager.readGlobalMemory(dataDir),\n getSkillPrompts: () => [],\n getSessionMessages: async (sid) => sessionStore.getMessages(sid),\n saveSessionMessages: async (sid, msgs) =>\n sessionStore.saveMessages(sid, msgs),\n });\n\n const result = await runner.run({ prompt });\n console.log(result.response);\n\n workspaceManager.close();\n });\n\n// ── setup, status, dashboard ──────────────────────────────\n\nprogram.addCommand(setupCommand);\nprogram.addCommand(statusCommand);\nprogram.addCommand(dashboardCommand);\n\n// ── workspaces ─────────────────────────────────────────────\n\nconst ws = program.command(\"workspaces\").description(\"Manage workspaces\");\n\nws.command(\"list\").action(async () => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const wm = new WorkspaceManager(dbPath);\n const list = await wm.list();\n if (list.length === 0) {\n console.log(theme.muted(\"No workspaces registered.\"));\n } else {\n for (const w of list) {\n console.log(\n ` ${theme.success(\"✓\")} ${theme.command(w.name)} ${theme.muted(\"→\")} ${theme.info(w.rootPath)} ${theme.muted(`(${w.id})`)}`,\n );\n }\n }\n wm.close();\n});\n\nws.command(\"add\")\n .argument(\"<name>\", \"Workspace name\")\n .argument(\"<path>\", \"Workspace directory path\")\n .action(async (name, dirPath) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const wm = new WorkspaceManager(dbPath);\n const workspace = await wm.create(name, dirPath);\n console.log(\n `${theme.success(\"✓\")} Created workspace ${theme.command(workspace.name)} ${theme.muted(`(${workspace.id})`)}`,\n );\n console.log(` ${theme.muted(\"Path:\")} ${theme.info(workspace.rootPath)}`);\n wm.close();\n });\n\nws.command(\"remove\")\n .argument(\"<id>\", \"Workspace ID\")\n .action(async (id) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const wm = new WorkspaceManager(dbPath);\n await wm.delete(id);\n console.log(`${theme.success(\"✓\")} Removed workspace ${theme.muted(id)}`);\n wm.close();\n });\n\n// ── credentials ────────────────────────────────────────────\n\nconst creds = program\n .command(\"credentials\")\n .description(\"Manage credentials\");\n\ncreds.command(\"list\").action(async () => {\n const dataDir = getDataDir();\n const secret = await getOrCreateSecret(dataDir);\n const store = new EncryptedCredentialStore(\n path.join(dataDir, \"credentials.enc.json\"),\n secret,\n );\n const keys = await store.list();\n if (keys.length === 0) {\n console.log(theme.muted(\"No credentials stored.\"));\n } else {\n for (const key of keys) {\n console.log(` ${theme.muted(\"•\")} ${theme.command(key)}`);\n }\n }\n});\n\ncreds\n .command(\"set\")\n .argument(\"<key>\", \"Credential key (e.g. provider.anthropic.apiKey)\")\n .argument(\"<value>\", \"Credential value\")\n .action(async (key, value) => {\n const dataDir = getDataDir();\n const secret = await getOrCreateSecret(dataDir);\n const store = new EncryptedCredentialStore(\n path.join(dataDir, \"credentials.enc.json\"),\n secret,\n );\n await store.set(key, value);\n console.log(`${theme.success(\"✓\")} Credential ${theme.command(key)} saved.`);\n });\n\ncreds\n .command(\"remove\")\n .argument(\"<key>\", \"Credential key\")\n .action(async (key) => {\n const dataDir = getDataDir();\n const secret = await getOrCreateSecret(dataDir);\n const store = new EncryptedCredentialStore(\n path.join(dataDir, \"credentials.enc.json\"),\n secret,\n );\n await store.delete(key);\n console.log(`${theme.success(\"✓\")} Credential ${theme.command(key)} removed.`);\n });\n\n// ── skills ─────────────────────────────────────────────────\n\nconst sk = program.command(\"skills\").description(\"Manage skills\");\n\nsk.command(\"list\").action(async () => {\n const dataDir = getDataDir();\n const secret = await getOrCreateSecret(dataDir);\n const credentialStore = new EncryptedCredentialStore(\n path.join(dataDir, \"credentials.enc.json\"),\n secret,\n );\n const bundledSkillsDir = path.resolve(\"skills\");\n const userSkillsDir = path.join(dataDir, \"skills\");\n const configPath = path.join(dataDir, \"config.yaml\");\n const config = await loadConfig(configPath);\n const allSkills = await loadSkills(\n bundledSkillsDir,\n userSkillsDir,\n config.skills.dirs,\n credentialStore,\n );\n if (allSkills.length === 0) {\n console.log(theme.muted(\"No skills found.\"));\n } else {\n for (const skill of allSkills) {\n const icon = skill.eligible ? theme.success(\"✓\") : theme.muted(\"○\");\n const name = theme.command(skill.manifest.name);\n const desc = theme.muted(skill.manifest.description ?? \"\");\n console.log(` ${icon} ${name} ${desc}`);\n }\n }\n});\n\nsk.command(\"install\")\n .argument(\"<git-url>\", \"Git URL of the skill repository\")\n .action(async (gitUrl) => {\n const dataDir = getDataDir();\n const userSkillsDir = path.join(dataDir, \"skills\");\n const result = await installSkillFromGit(gitUrl, userSkillsDir);\n console.log(\n `${theme.success(\"✓\")} Installed skill ${theme.command(result.name)}`,\n );\n });\n\nsk.command(\"remove\")\n .argument(\"<name>\", \"Skill name\")\n .action(async (name) => {\n const dataDir = getDataDir();\n const userSkillsDir = path.join(dataDir, \"skills\");\n await removeSkill(name, userSkillsDir);\n console.log(`${theme.success(\"✓\")} Removed skill ${theme.command(name)}`);\n });\n\n// ── cron ───────────────────────────────────────────────────\n\nconst cr = program.command(\"cron\").description(\"Manage cron jobs\");\n\ncr.command(\"list\").action(async () => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const cronService = new CronService(dbPath);\n const jobs = cronService.list();\n if (jobs.length === 0) {\n console.log(theme.muted(\"No cron jobs.\"));\n } else {\n for (const job of jobs) {\n const icon = job.enabled ? theme.success(\"✓\") : theme.muted(\"○\");\n console.log(` ${icon} ${theme.command(job.name)} ${theme.muted(`(${job.id})`)}`);\n console.log(` ${theme.muted(\"Schedule:\")} ${theme.info(JSON.stringify(job.schedule))}`);\n console.log(` ${theme.muted(\"Prompt:\")} ${job.prompt.slice(0, 80)}...`);\n }\n }\n cronService.stop();\n});\n\ncr.command(\"add\")\n .requiredOption(\"-n, --name <name>\", \"Job name\")\n .requiredOption(\"-s, --schedule <cron>\", \"Cron expression\")\n .requiredOption(\"-p, --prompt <prompt>\", \"Prompt to execute\")\n .option(\"-w, --workspace <id>\", \"Workspace ID\")\n .action(async (opts) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const cronService = new CronService(dbPath);\n const job = cronService.add({\n name: opts.name,\n schedule: { type: \"cron\", expression: opts.schedule },\n prompt: opts.prompt,\n delivery: {},\n workspaceId: opts.workspace,\n });\n console.log(\n `${theme.success(\"✓\")} Created cron job ${theme.command(job.name)} ${theme.muted(`(${job.id})`)}`,\n );\n cronService.stop();\n });\n\ncr.command(\"remove\")\n .argument(\"<id>\", \"Job ID\")\n .action(async (id) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const cronService = new CronService(dbPath);\n cronService.remove(id);\n console.log(`${theme.success(\"✓\")} Deleted cron job ${theme.muted(id)}`);\n cronService.stop();\n });\n\n// ── update ─────────────────────────────────────────────────\n\nprogram\n .command(\"update\")\n .description(\"Check for updates and optionally install them\")\n .option(\"--check\", \"Only check, do not install\")\n .action(async (opts) => {\n try {\n const res = await fetch(\"https://registry.npmjs.org/cortask/latest\");\n if (!res.ok) throw new Error(\"Failed to fetch from npm registry\");\n const data = (await res.json()) as { version: string };\n const latest = data.version;\n\n if (latest === VERSION) {\n console.log(`${theme.success(\"✓\")} You're on the latest version ${theme.info(VERSION)}`);\n return;\n }\n\n console.log(`${theme.info(\"Update available:\")} ${theme.muted(VERSION)} → ${theme.success(latest)}`);\n\n if (opts.check) return;\n\n console.log(`\\nRun the following command to update:\\n`);\n console.log(` ${theme.info(\"npm update -g cortask\")}\\n`);\n } catch (err) {\n console.error(\n `${theme.error(\"✗\")} Failed to check for updates: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n });\n\nprogram.parse();\n","import chalk, { Chalk } from \"chalk\";\n\nconst PALETTE = {\n accent: \"#6366f1\",\n accentBright: \"#818cf8\",\n accentDim: \"#a5b4fc\",\n info: \"#38bdf8\",\n success: \"#22c55e\",\n warn: \"#f59e0b\",\n error: \"#ef4444\",\n muted: \"#9ca3af\",\n};\n\nconst hasForceColor =\n typeof process.env.FORCE_COLOR === \"string\" &&\n process.env.FORCE_COLOR.trim().length > 0 &&\n process.env.FORCE_COLOR.trim() !== \"0\";\n\nconst baseChalk =\n process.env.NO_COLOR && !hasForceColor\n ? new Chalk({ level: 0 })\n : chalk;\n\nconst hex = (value: string) => baseChalk.hex(value);\n\nexport const theme = {\n accent: hex(PALETTE.accent),\n accentBright: hex(PALETTE.accentBright),\n accentDim: hex(PALETTE.accentDim),\n info: hex(PALETTE.info),\n success: hex(PALETTE.success),\n warn: hex(PALETTE.warn),\n error: hex(PALETTE.error),\n muted: hex(PALETTE.muted),\n heading: baseChalk.bold.hex(PALETTE.accent),\n command: hex(PALETTE.accentBright),\n option: hex(PALETTE.warn),\n} as const;\n\nexport const isRich = () => Boolean(baseChalk.level > 0);\n","import { isRich, theme } from \"./theme.js\";\n\nlet bannerEmitted = false;\n\nconst hasFlag = (argv: string[], ...flags: string[]) =>\n argv.some((arg) => flags.includes(arg));\n\nexport function emitBanner(version: string, argv?: string[]) {\n if (bannerEmitted) return;\n const args = argv ?? process.argv;\n if (!process.stdout.isTTY) return;\n if (hasFlag(args, \"--json\", \"--version\", \"-V\")) return;\n\n const title = \"⚡ Cortask\";\n const tagline = \"Local AI agent platform\";\n\n if (isRich()) {\n process.stdout.write(\n `\\n${theme.heading(title)} ${theme.info(version)} ${theme.muted(\"—\")} ${theme.accentDim(tagline)}\\n\\n`,\n );\n } else {\n process.stdout.write(`\\n${title} ${version} — ${tagline}\\n\\n`);\n }\n\n bannerEmitted = true;\n}\n\nexport function hasBannerEmitted(): boolean {\n return bannerEmitted;\n}\n","import type { Command } from \"commander\";\nimport { emitBanner, hasBannerEmitted } from \"./banner.js\";\nimport { theme } from \"./theme.js\";\n\nconst EXAMPLES = [\n [\"cortask serve\", \"Start the gateway server\"],\n [\"cortask chat\", \"Start interactive chat session\"],\n [\"cortask run \\\"hello\\\"\", \"Run a one-shot prompt\"],\n [\"cortask status\", \"Show system status\"],\n [\"cortask dashboard\", \"Open the web UI\"],\n [\"cortask setup\", \"Initialize configuration\"],\n [\"cortask workspaces list\", \"List registered workspaces\"],\n [\"cortask credentials set provider.anthropic.apiKey KEY\", \"Set API key\"],\n] as const;\n\nexport function configureHelp(program: Command, version: string) {\n program.helpOption(\"-h, --help\", \"Display help for command\");\n program.helpCommand(\"help [command]\", \"Display help for command\");\n\n program.configureHelp({\n sortSubcommands: true,\n sortOptions: true,\n optionTerm: (option) => theme.option(option.flags),\n subcommandTerm: (cmd) => theme.command(cmd.name()),\n });\n\n const formatHelp = (str: string) =>\n str\n .replace(/^Usage:/gm, theme.heading(\"Usage:\"))\n .replace(/^Options:/gm, theme.heading(\"Options:\"))\n .replace(/^Commands:/gm, theme.heading(\"Commands:\"))\n .replace(/^Arguments:/gm, theme.heading(\"Arguments:\"));\n\n program.configureOutput({\n writeOut: (str) => process.stdout.write(formatHelp(str)),\n writeErr: (str) => process.stderr.write(formatHelp(str)),\n outputError: (str, write) => write(theme.error(str)),\n });\n\n program.addHelpText(\"beforeAll\", () => {\n if (hasBannerEmitted()) return \"\";\n emitBanner(version);\n return \"\";\n });\n\n const fmtExamples = EXAMPLES.map(\n ([cmd, desc]) => ` ${theme.command(cmd)}\\n ${theme.muted(desc)}`,\n ).join(\"\\n\");\n\n program.addHelpText(\"afterAll\", ({ command }) => {\n if (command !== program) return \"\";\n return `\\n${theme.heading(\"Examples:\")}\\n${fmtExamples}\\n`;\n });\n}\n","import { Command } from \"commander\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { getDataDir } from \"@cortask/core\";\nimport { theme } from \"../terminal/theme.js\";\n\nconst DEFAULT_CONFIG = `# Cortask Configuration\nonboarded: true\n\nproviders:\n default: anthropic\n\nagent:\n maxTurns: 25\n temperature: 0.7\n\nserver:\n port: 3777\n host: 127.0.0.1\n\nskills:\n dirs: []\n`;\n\nfunction ensureDir(dir: string) {\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n}\n\nexport const setupCommand = new Command(\"setup\")\n .description(\"Initialize configuration and data directory\")\n .option(\"--force\", \"Overwrite existing configuration\")\n .action(async (opts: { force?: boolean }) => {\n const dataDir = getDataDir();\n const configPath = path.join(dataDir, \"config.yaml\");\n\n console.log(theme.heading(\"\\n⚡ Cortask Setup\\n\"));\n\n if (fs.existsSync(configPath) && !opts.force) {\n console.log(theme.warn(\"⚠ Configuration already exists:\"));\n console.log(theme.info(` ${configPath}`));\n console.log(theme.muted(\"\\n Use --force to overwrite\"));\n console.log();\n process.exit(1);\n }\n\n try {\n ensureDir(dataDir);\n console.log(`${theme.success(\"✓\")} Data directory: ${theme.info(dataDir)}`);\n\n fs.writeFileSync(configPath, DEFAULT_CONFIG, \"utf-8\");\n console.log(`${theme.success(\"✓\")} Config: ${theme.info(configPath)}`);\n\n const skillsDir = path.join(dataDir, \"skills\");\n ensureDir(skillsDir);\n console.log(`${theme.success(\"✓\")} Skills: ${theme.info(skillsDir)}`);\n\n console.log(theme.heading(\"\\n✓ Setup complete!\\n\"));\n\n console.log(theme.muted(\"Next steps:\"));\n console.log(theme.command(\" 1. Set your API key:\"));\n console.log(theme.info(` cortask credentials set provider.anthropic.apiKey YOUR_KEY`));\n console.log(theme.command(\"\\n 2. Add a workspace:\"));\n console.log(theme.info(\" cortask workspaces add my-project /path/to/project\"));\n console.log(theme.command(\"\\n 3. Start chatting:\"));\n console.log(theme.info(\" cortask chat -w /path/to/project\"));\n console.log();\n } catch (err) {\n console.error(theme.error(\"\\n✗ Setup failed\"));\n console.error(theme.muted(` ${(err as Error).message}`));\n process.exit(1);\n }\n });\n","import { Command } from \"commander\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { getDataDir, loadConfig, WorkspaceManager } from \"@cortask/core\";\nimport { theme } from \"../terminal/theme.js\";\n\nasync function fetchHealth(host: string, port: number) {\n try {\n const res = await fetch(`http://${host}:${port}/api/health`);\n if (!res.ok) return null;\n return res.json();\n } catch {\n return null;\n }\n}\n\nexport const statusCommand = new Command(\"status\")\n .description(\"Show system status and configuration\")\n .action(async () => {\n const dataDir = getDataDir();\n const configPath = path.join(dataDir, \"config.yaml\");\n\n if (!fs.existsSync(configPath)) {\n console.error(theme.error(\"\\n✗ No configuration found\"));\n console.error(theme.muted(\" Run this command to set up:\"));\n console.error(theme.command(\" cortask setup\"));\n console.log();\n process.exit(1);\n }\n\n try {\n const config = await loadConfig(configPath);\n const host = config.server.host;\n const port = config.server.port;\n\n console.log(theme.heading(\"\\n Configuration\"));\n console.log(` File: ${theme.info(configPath)}`);\n console.log(` Data: ${theme.info(dataDir)}`);\n\n // Gateway status\n console.log(theme.heading(\"\\n Gateway\"));\n const health = await fetchHealth(host, port);\n if (health) {\n console.log(` Status: ${theme.success(\"online\")}`);\n console.log(` URL: ${theme.info(`http://${host}:${port}`)}`);\n } else {\n console.log(` Status: ${theme.error(\"offline\")}`);\n console.log(` Expected: ${theme.muted(`http://${host}:${port}`)}`);\n }\n\n // Provider\n console.log(theme.heading(\"\\n Provider\"));\n console.log(` Default: ${theme.command(config.providers.default)}`);\n\n // Workspaces\n console.log(theme.heading(\"\\n Workspaces\"));\n const dbPath = path.join(dataDir, \"cortask.db\");\n if (fs.existsSync(dbPath)) {\n const wm = new WorkspaceManager(dbPath);\n const workspaces = await wm.list();\n if (workspaces.length === 0) {\n console.log(` ${theme.muted(\"No workspaces registered\")}`);\n } else {\n for (const w of workspaces) {\n console.log(` ${theme.success(\"✓\")} ${theme.command(w.name)} ${theme.muted(`→ ${w.rootPath}`)}`);\n }\n }\n wm.close();\n } else {\n console.log(` ${theme.muted(\"Database not initialized\")}`);\n }\n\n // Skills\n console.log(theme.heading(\"\\n Skills\"));\n const skillsDir = path.join(dataDir, \"skills\");\n if (fs.existsSync(skillsDir)) {\n const entries = fs.readdirSync(skillsDir).filter((e) =>\n fs.statSync(path.join(skillsDir, e)).isDirectory(),\n );\n console.log(` Installed: ${theme.info(entries.length.toString())} skill(s)`);\n } else {\n console.log(` ${theme.muted(\"No skills directory\")}`);\n }\n\n console.log();\n } catch (err) {\n console.error(theme.error(\"\\n✗ Failed to load status\"));\n console.error(theme.muted(` ${(err as Error).message}`));\n process.exit(1);\n }\n });\n","import { Command } from \"commander\";\nimport { exec } from \"node:child_process\";\nimport path from \"node:path\";\nimport { getDataDir, loadConfig } from \"@cortask/core\";\nimport { theme } from \"../terminal/theme.js\";\n\nfunction openBrowser(url: string): Promise<void> {\n const cmd =\n process.platform === \"win32\"\n ? `start ${url}`\n : process.platform === \"darwin\"\n ? `open ${url}`\n : `xdg-open ${url}`;\n\n return new Promise((resolve, reject) => {\n exec(cmd, (err) => (err ? reject(err) : resolve()));\n });\n}\n\nasync function isGatewayOnline(host: string, port: number): Promise<boolean> {\n try {\n const res = await fetch(`http://${host}:${port}/api/health`);\n return res.ok;\n } catch {\n return false;\n }\n}\n\nexport const dashboardCommand = new Command(\"dashboard\")\n .description(\"Open the web UI in your browser\")\n .option(\"--no-open\", \"Print URL without opening browser\")\n .action(async (opts: { open: boolean }) => {\n const dataDir = getDataDir();\n const configPath = path.join(dataDir, \"config.yaml\");\n const config = await loadConfig(configPath);\n const url = `http://${config.server.host}:${config.server.port}`;\n\n const online = await isGatewayOnline(config.server.host, config.server.port);\n if (!online) {\n console.log(theme.warn(\"\\n⚠ Gateway appears to be offline\"));\n console.log(theme.muted(\" Start it with:\"));\n console.log(theme.command(\" cortask serve\"));\n console.log();\n }\n\n if (opts.open) {\n console.log(theme.info(`\\nOpening dashboard: ${url}`));\n try {\n await openBrowser(url);\n console.log(theme.success(\"✓ Browser opened\"));\n } catch {\n console.log(theme.warn(\"\\n⚠ Could not open browser automatically\"));\n console.log(theme.info(` Open this URL manually: ${url}`));\n }\n } else {\n console.log(theme.info(`\\nDashboard URL: ${url}`));\n }\n console.log();\n });\n"],"mappings":"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","names":["Command","loadConfig","getDataDir","WorkspaceManager","path","program","Command","fs","path","getDataDir","Command","getDataDir","path","fs","Command","path","getDataDir","loadConfig","Command","getDataDir","path","loadConfig","require","Command","getDataDir","path","loadConfig","WorkspaceManager"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/terminal/theme.ts","../src/terminal/banner.ts","../src/terminal/help.ts","../src/commands/setup.ts","../src/commands/status.ts","../src/commands/dashboard.ts","../src/commands/config.ts","../src/commands/providers.ts","../src/commands/sessions.ts","../src/commands/usage.ts","../src/commands/models.ts","../src/commands/templates.ts","../src/commands/channels.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport {\n loadConfig,\n getDataDir,\n WorkspaceManager,\n SessionStore,\n EncryptedCredentialStore,\n getOrCreateSecret,\n createProvider,\n AgentRunner,\n builtinTools,\n createCronTool,\n createArtifactTool,\n loadSkills,\n getEligibleSkills,\n buildSkillTools,\n CronService,\n ArtifactStore,\n installSkillFromGit,\n removeSkill,\n createSkill,\n updateSkill,\n readSkillFile,\n type ProviderId,\n type ToolHandler,\n} from \"@cortask/core\";\nimport path from \"node:path\";\nimport readline from \"node:readline\";\nimport { theme } from \"./terminal/theme.js\";\nimport { emitBanner } from \"./terminal/banner.js\";\nimport { configureHelp } from \"./terminal/help.js\";\nimport { setupCommand } from \"./commands/setup.js\";\nimport { statusCommand } from \"./commands/status.js\";\nimport { dashboardCommand } from \"./commands/dashboard.js\";\nimport { configCommand } from \"./commands/config.js\";\nimport { providersCommand } from \"./commands/providers.js\";\nimport { sessionsCommand } from \"./commands/sessions.js\";\nimport { usageCommand } from \"./commands/usage.js\";\nimport { modelsCommand } from \"./commands/models.js\";\nimport { templatesCommand } from \"./commands/templates.js\";\nimport { channelsCommand } from \"./commands/channels.js\";\nimport { createRequire } from \"node:module\";\n\nconst require = createRequire(import.meta.url);\nconst VERSION: string = require(\"../package.json\").version;\n\nconst program = new Command();\n\nprogram\n .name(\"cortask\")\n .description(\"Cortask — Local AI agent with skills, workspaces, and cron\")\n .version(VERSION);\n\n// Configure themed help and banner\nconfigureHelp(program, VERSION);\n\n// ── serve ──────────────────────────────────────────────────\n\nprogram\n .command(\"serve\")\n .description(\"Start the gateway server\")\n .option(\"-p, --port <port>\", \"Port to listen on\", \"3777\")\n .option(\"--host <host>\", \"Host to bind to\", \"127.0.0.1\")\n .action(async (opts) => {\n emitBanner(VERSION);\n const { startServer } = await import(\"@cortask/gateway\");\n console.log(\n `${theme.muted(\"Starting gateway on\")} ${theme.info(`http://${opts.host}:${opts.port}`)}`,\n );\n await startServer(parseInt(opts.port, 10), opts.host);\n });\n\n// ── chat ───────────────────────────────────────────────────\n\nprogram\n .command(\"chat\")\n .description(\"Interactive chat REPL\")\n .option(\"-w, --workspace <path>\", \"Workspace directory path\", \".\")\n .action(async (opts) => {\n emitBanner(VERSION);\n const dataDir = getDataDir();\n const configPath = path.join(dataDir, \"config.yaml\");\n const config = await loadConfig(configPath);\n const dbPath = path.join(dataDir, \"cortask.db\");\n const workspaceManager = new WorkspaceManager(dbPath);\n const secret = await getOrCreateSecret(dataDir);\n const credentialStore = new EncryptedCredentialStore(\n path.join(dataDir, \"credentials.enc.json\"),\n secret,\n );\n const cronService = new CronService(dbPath);\n const artifactStore = new ArtifactStore();\n\n // Resolve workspace\n const workspacePath = path.resolve(opts.workspace);\n const workspaces = await workspaceManager.list();\n let workspace = workspaces.find((w) => w.rootPath === workspacePath);\n if (!workspace) {\n workspace = await workspaceManager.create(\n path.basename(workspacePath),\n workspacePath,\n );\n console.log(\n `${theme.success(\"✓\")} Registered workspace: ${theme.command(workspace.name)}`,\n );\n }\n\n const sessionStore = new SessionStore(\n workspaceManager.getSessionDbPath(workspacePath),\n );\n\n // Load skills\n const bundledSkillsDir = path.resolve(\"skills\");\n const userSkillsDir = path.join(dataDir, \"skills\");\n const allSkills = await loadSkills(\n bundledSkillsDir,\n userSkillsDir,\n config.skills.dirs,\n credentialStore,\n );\n const eligible = getEligibleSkills(allSkills);\n const skillRegistry = await buildSkillTools(eligible, credentialStore);\n const skillToolHandlers: ToolHandler[] = skillRegistry.toolDefs.map((def) => ({\n definition: def,\n execute: async (args: Record<string, unknown>, context: Parameters<ToolHandler[\"execute\"]>[1]) => {\n const handler = skillRegistry.handlers.get(def.name);\n if (!handler) return { toolCallId: \"\", content: \"Tool not found\", isError: true };\n return handler(args, context.workspacePath);\n },\n }));\n const skillPrompts = eligible\n .map((s) => s.content)\n .filter(Boolean);\n\n // Build provider\n const providerId = (config.providers.default || \"anthropic\") as ProviderId;\n const providerConfig = config.providers[providerId];\n const apiKey = await credentialStore.get(`provider.${providerId}.apiKey`);\n if (!apiKey) {\n console.error(theme.error(`\\n✗ No API key for provider \"${providerId}\"`));\n console.error(theme.muted(\" Set it with:\"));\n console.error(\n theme.command(\n ` cortask credentials set provider.${providerId}.apiKey YOUR_KEY`,\n ),\n );\n console.log();\n process.exit(1);\n }\n const provider = createProvider(providerId, apiKey);\n const model =\n ((providerConfig as Record<string, unknown>)?.model as string) ??\n \"claude-sonnet-4-5-20250929\";\n\n const sessionId = `cli_${Date.now()}`;\n\n const runner = new AgentRunner({\n config: {\n provider,\n model,\n maxTurns: config.agent.maxTurns,\n temperature: config.agent.temperature,\n maxTokens: config.agent.maxTokens,\n },\n tools: [\n ...builtinTools,\n createCronTool(cronService),\n createArtifactTool(artifactStore),\n ...skillToolHandlers,\n ],\n getWorkspacePath: () => workspacePath,\n getDataDir: () => dataDir,\n getMemoryContent: () => workspaceManager.readMemory(workspacePath),\n getGlobalMemoryContent: () => workspaceManager.readGlobalMemory(dataDir),\n getSkillPrompts: () => skillPrompts,\n getSessionMessages: async (sid) => sessionStore.getMessages(sid),\n saveSessionMessages: async (sid, msgs) =>\n sessionStore.saveMessages(sid, msgs),\n });\n\n console.log(\n `${theme.muted(\"Workspace:\")} ${theme.info(workspacePath)}`,\n );\n console.log(\n `${theme.muted(\"Provider:\")} ${theme.command(providerId)} ${theme.muted(`(${model})`)}`,\n );\n console.log(\n theme.muted(\"Type a message, /help for commands, /quit to exit.\\n\"),\n );\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n prompt: `${theme.accent(\"you>\")} `,\n });\n\n rl.prompt();\n\n rl.on(\"line\", async (line) => {\n const input = line.trim();\n if (!input) {\n rl.prompt();\n return;\n }\n\n // Slash commands\n if (input.startsWith(\"/\")) {\n const cmd = input.toLowerCase();\n if (cmd === \"/quit\" || cmd === \"/exit\") {\n rl.close();\n return;\n }\n if (cmd === \"/help\") {\n console.log(theme.heading(\"\\nCommands:\"));\n console.log(` ${theme.command(\"/help\")} ${theme.muted(\"Show this help\")}`);\n console.log(` ${theme.command(\"/quit\")} ${theme.muted(\"Exit the REPL\")}`);\n console.log();\n rl.prompt();\n return;\n }\n console.log(theme.warn(`Unknown command: ${input}. Type /help for commands.`));\n rl.prompt();\n return;\n }\n\n process.stdout.write(`\\n${theme.accentBright(\"cortask>\")} `);\n try {\n for await (const event of runner.runStream({\n prompt: input,\n sessionId,\n })) {\n if (event.type === \"text_delta\" && event.text) {\n process.stdout.write(event.text);\n } else if (event.type === \"tool_call_start\") {\n process.stdout.write(\n `\\n${theme.muted(\"[\")}${theme.warn(\"tool\")}${theme.muted(\":\")} ${theme.command(event.toolName)}${theme.muted(\"]\")} `,\n );\n } else if (event.type === \"tool_result\") {\n const preview = event.toolResult?.content?.slice(0, 200) ?? \"\";\n process.stdout.write(`${theme.muted(\"→\")} ${theme.muted(preview)}\\n`);\n }\n }\n } catch (err) {\n console.error(\n theme.error(\n `\\n✗ ${err instanceof Error ? err.message : String(err)}`,\n ),\n );\n }\n process.stdout.write(\"\\n\\n\");\n rl.prompt();\n });\n\n rl.on(\"close\", () => {\n console.log(theme.muted(\"\\nGoodbye.\"));\n workspaceManager.close();\n process.exit(0);\n });\n });\n\n// ── run ────────────────────────────────────────────────────\n\nprogram\n .command(\"run\")\n .description(\"Run a one-shot prompt\")\n .argument(\"<prompt>\", \"The prompt to execute\")\n .option(\"-w, --workspace <path>\", \"Workspace directory path\", \".\")\n .action(async (prompt, opts) => {\n const dataDir = getDataDir();\n const configPath = path.join(dataDir, \"config.yaml\");\n const config = await loadConfig(configPath);\n const dbPath = path.join(dataDir, \"cortask.db\");\n const workspaceManager = new WorkspaceManager(dbPath);\n const secret = await getOrCreateSecret(dataDir);\n const credentialStore = new EncryptedCredentialStore(\n path.join(dataDir, \"credentials.enc.json\"),\n secret,\n );\n const cronService = new CronService(dbPath);\n const artifactStore = new ArtifactStore();\n\n const workspacePath = path.resolve(opts.workspace);\n const workspaces = await workspaceManager.list();\n let workspace = workspaces.find((w) => w.rootPath === workspacePath);\n if (!workspace) {\n workspace = await workspaceManager.create(\n path.basename(workspacePath),\n workspacePath,\n );\n }\n\n const sessionStore = new SessionStore(\n workspaceManager.getSessionDbPath(workspacePath),\n );\n\n const providerId = (config.providers.default || \"anthropic\") as ProviderId;\n const apiKey = await credentialStore.get(`provider.${providerId}.apiKey`);\n if (!apiKey) {\n console.error(theme.error(`\\n✗ No API key for provider \"${providerId}\".`));\n console.error(theme.muted(\" Set it with:\"));\n console.error(\n theme.command(\n ` cortask credentials set provider.${providerId}.apiKey YOUR_KEY`,\n ),\n );\n process.exit(1);\n }\n const provider = createProvider(providerId, apiKey);\n const providerConfig = config.providers[providerId];\n const model =\n ((providerConfig as Record<string, unknown>)?.model as string) ??\n \"claude-sonnet-4-5-20250929\";\n\n const runner = new AgentRunner({\n config: {\n provider,\n model,\n maxTurns: config.agent.maxTurns,\n temperature: config.agent.temperature,\n maxTokens: config.agent.maxTokens,\n },\n tools: [\n ...builtinTools,\n createCronTool(cronService),\n createArtifactTool(artifactStore),\n ],\n getWorkspacePath: () => workspacePath,\n getDataDir: () => dataDir,\n getMemoryContent: () => workspaceManager.readMemory(workspacePath),\n getGlobalMemoryContent: () => workspaceManager.readGlobalMemory(dataDir),\n getSkillPrompts: () => [],\n getSessionMessages: async (sid) => sessionStore.getMessages(sid),\n saveSessionMessages: async (sid, msgs) =>\n sessionStore.saveMessages(sid, msgs),\n });\n\n const result = await runner.run({ prompt });\n console.log(result.response);\n\n workspaceManager.close();\n });\n\n// ── setup, status, dashboard ──────────────────────────────\n\nprogram.addCommand(setupCommand);\nprogram.addCommand(statusCommand);\nprogram.addCommand(dashboardCommand);\nprogram.addCommand(configCommand);\nprogram.addCommand(providersCommand);\nprogram.addCommand(sessionsCommand);\nprogram.addCommand(usageCommand);\nprogram.addCommand(modelsCommand);\nprogram.addCommand(templatesCommand);\nprogram.addCommand(channelsCommand);\n\n// ── workspaces ─────────────────────────────────────────────\n\nconst ws = program.command(\"workspaces\").description(\"Manage workspaces\");\n\nws.command(\"list\").action(async () => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const wm = new WorkspaceManager(dbPath);\n const list = await wm.list();\n if (list.length === 0) {\n console.log(theme.muted(\"No workspaces registered.\"));\n } else {\n for (const w of list) {\n console.log(\n ` ${theme.success(\"✓\")} ${theme.command(w.name)} ${theme.muted(\"→\")} ${theme.info(w.rootPath)} ${theme.muted(`(${w.id})`)}`,\n );\n }\n }\n wm.close();\n});\n\nws.command(\"add\")\n .argument(\"<name>\", \"Workspace name\")\n .argument(\"<path>\", \"Workspace directory path\")\n .action(async (name, dirPath) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const wm = new WorkspaceManager(dbPath);\n const workspace = await wm.create(name, dirPath);\n console.log(\n `${theme.success(\"✓\")} Created workspace ${theme.command(workspace.name)} ${theme.muted(`(${workspace.id})`)}`,\n );\n console.log(` ${theme.muted(\"Path:\")} ${theme.info(workspace.rootPath)}`);\n wm.close();\n });\n\nws.command(\"remove\")\n .argument(\"<id>\", \"Workspace ID\")\n .action(async (id) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const wm = new WorkspaceManager(dbPath);\n await wm.delete(id);\n console.log(`${theme.success(\"✓\")} Removed workspace ${theme.muted(id)}`);\n wm.close();\n });\n\n// ── credentials ────────────────────────────────────────────\n\nconst creds = program\n .command(\"credentials\")\n .description(\"Manage credentials\");\n\ncreds.command(\"list\").action(async () => {\n const dataDir = getDataDir();\n const secret = await getOrCreateSecret(dataDir);\n const store = new EncryptedCredentialStore(\n path.join(dataDir, \"credentials.enc.json\"),\n secret,\n );\n const keys = await store.list();\n if (keys.length === 0) {\n console.log(theme.muted(\"No credentials stored.\"));\n } else {\n for (const key of keys) {\n console.log(` ${theme.muted(\"•\")} ${theme.command(key)}`);\n }\n }\n});\n\ncreds\n .command(\"set\")\n .argument(\"<key>\", \"Credential key (e.g. provider.anthropic.apiKey)\")\n .argument(\"<value>\", \"Credential value\")\n .action(async (key, value) => {\n const dataDir = getDataDir();\n const secret = await getOrCreateSecret(dataDir);\n const store = new EncryptedCredentialStore(\n path.join(dataDir, \"credentials.enc.json\"),\n secret,\n );\n await store.set(key, value);\n console.log(`${theme.success(\"✓\")} Credential ${theme.command(key)} saved.`);\n });\n\ncreds\n .command(\"remove\")\n .argument(\"<key>\", \"Credential key\")\n .action(async (key) => {\n const dataDir = getDataDir();\n const secret = await getOrCreateSecret(dataDir);\n const store = new EncryptedCredentialStore(\n path.join(dataDir, \"credentials.enc.json\"),\n secret,\n );\n await store.delete(key);\n console.log(`${theme.success(\"✓\")} Credential ${theme.command(key)} removed.`);\n });\n\n// ── skills ─────────────────────────────────────────────────\n\nconst sk = program.command(\"skills\").description(\"Manage skills\");\n\nsk.command(\"list\").action(async () => {\n const dataDir = getDataDir();\n const secret = await getOrCreateSecret(dataDir);\n const credentialStore = new EncryptedCredentialStore(\n path.join(dataDir, \"credentials.enc.json\"),\n secret,\n );\n const bundledSkillsDir = path.resolve(\"skills\");\n const userSkillsDir = path.join(dataDir, \"skills\");\n const configPath = path.join(dataDir, \"config.yaml\");\n const config = await loadConfig(configPath);\n const allSkills = await loadSkills(\n bundledSkillsDir,\n userSkillsDir,\n config.skills.dirs,\n credentialStore,\n );\n if (allSkills.length === 0) {\n console.log(theme.muted(\"No skills found.\"));\n } else {\n for (const skill of allSkills) {\n const icon = skill.eligible ? theme.success(\"✓\") : theme.muted(\"○\");\n const name = theme.command(skill.manifest.name);\n const desc = theme.muted(skill.manifest.description ?? \"\");\n console.log(` ${icon} ${name} ${desc}`);\n }\n }\n});\n\nsk.command(\"install\")\n .argument(\"<git-url>\", \"Git URL of the skill repository\")\n .action(async (gitUrl) => {\n const dataDir = getDataDir();\n const userSkillsDir = path.join(dataDir, \"skills\");\n const result = await installSkillFromGit(gitUrl, userSkillsDir);\n console.log(\n `${theme.success(\"✓\")} Installed skill ${theme.command(result.name)}`,\n );\n });\n\nsk.command(\"remove\")\n .argument(\"<name>\", \"Skill name\")\n .action(async (name) => {\n const dataDir = getDataDir();\n const userSkillsDir = path.join(dataDir, \"skills\");\n await removeSkill(name, userSkillsDir);\n console.log(`${theme.success(\"✓\")} Removed skill ${theme.command(name)}`);\n });\n\nsk.command(\"create\")\n .description(\"Create a new custom skill\")\n .argument(\"<name>\", \"Skill name (kebab-case)\")\n .requiredOption(\"-c, --content <content>\", \"SKILL.md content (or use --file)\")\n .action(async (name, opts) => {\n const dataDir = getDataDir();\n const userSkillsDir = path.join(dataDir, \"skills\");\n await createSkill(userSkillsDir, name, opts.content);\n console.log(`${theme.success(\"✓\")} Created skill ${theme.command(name)}`);\n });\n\nsk.command(\"update\")\n .description(\"Update a custom skill\")\n .argument(\"<name>\", \"Skill name\")\n .requiredOption(\"-c, --content <content>\", \"New SKILL.md content\")\n .action(async (name, opts) => {\n const dataDir = getDataDir();\n const userSkillsDir = path.join(dataDir, \"skills\");\n await updateSkill(userSkillsDir, name, opts.content);\n console.log(`${theme.success(\"✓\")} Updated skill ${theme.command(name)}`);\n });\n\nsk.command(\"show\")\n .description(\"Show skill content\")\n .argument(\"<name>\", \"Skill name\")\n .action(async (name) => {\n const dataDir = getDataDir();\n const userSkillsDir = path.join(dataDir, \"skills\");\n const content = await readSkillFile(userSkillsDir, name);\n if (!content) {\n console.error(theme.error(`✗ Skill not found: ${name}`));\n process.exit(1);\n }\n console.log(content);\n });\n\n// ── cron ───────────────────────────────────────────────────\n\nconst cr = program.command(\"cron\").description(\"Manage cron jobs\");\n\ncr.command(\"list\").action(async () => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const cronService = new CronService(dbPath);\n const jobs = cronService.list();\n if (jobs.length === 0) {\n console.log(theme.muted(\"No cron jobs.\"));\n } else {\n for (const job of jobs) {\n const icon = job.enabled ? theme.success(\"✓\") : theme.muted(\"○\");\n console.log(` ${icon} ${theme.command(job.name)} ${theme.muted(`(${job.id})`)}`);\n console.log(` ${theme.muted(\"Schedule:\")} ${theme.info(JSON.stringify(job.schedule))}`);\n console.log(` ${theme.muted(\"Prompt:\")} ${job.prompt.slice(0, 80)}...`);\n }\n }\n cronService.stop();\n});\n\ncr.command(\"add\")\n .requiredOption(\"-n, --name <name>\", \"Job name\")\n .requiredOption(\"-s, --schedule <cron>\", \"Cron expression\")\n .requiredOption(\"-p, --prompt <prompt>\", \"Prompt to execute\")\n .option(\"-w, --workspace <id>\", \"Workspace ID\")\n .action(async (opts) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const cronService = new CronService(dbPath);\n const job = cronService.add({\n name: opts.name,\n schedule: { type: \"cron\", expression: opts.schedule },\n prompt: opts.prompt,\n delivery: {},\n workspaceId: opts.workspace,\n });\n console.log(\n `${theme.success(\"✓\")} Created cron job ${theme.command(job.name)} ${theme.muted(`(${job.id})`)}`,\n );\n cronService.stop();\n });\n\ncr.command(\"remove\")\n .argument(\"<id>\", \"Job ID\")\n .action(async (id) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const cronService = new CronService(dbPath);\n cronService.remove(id);\n console.log(`${theme.success(\"✓\")} Deleted cron job ${theme.muted(id)}`);\n cronService.stop();\n });\n\ncr.command(\"update\")\n .description(\"Update a cron job\")\n .argument(\"<id>\", \"Job ID\")\n .option(\"-n, --name <name>\", \"New job name\")\n .option(\"-s, --schedule <cron>\", \"New cron expression\")\n .option(\"-p, --prompt <prompt>\", \"New prompt\")\n .option(\"--enable\", \"Enable the job\")\n .option(\"--disable\", \"Disable the job\")\n .action(async (id, opts) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const cronService = new CronService(dbPath);\n\n const updates: Record<string, unknown> = {};\n if (opts.name) updates.name = opts.name;\n if (opts.schedule) updates.schedule = { type: \"cron\", expression: opts.schedule };\n if (opts.prompt) updates.prompt = opts.prompt;\n if (opts.enable) updates.enabled = true;\n if (opts.disable) updates.enabled = false;\n\n if (Object.keys(updates).length === 0) {\n console.error(theme.error(\"✗ No fields to update. Use --name, --schedule, --prompt, --enable, or --disable.\"));\n cronService.stop();\n process.exit(1);\n }\n\n const job = cronService.update(id, updates);\n if (!job) {\n console.error(theme.error(`✗ Cron job not found: ${id}`));\n cronService.stop();\n process.exit(1);\n }\n\n console.log(`${theme.success(\"✓\")} Updated cron job ${theme.command(job.name)}`);\n cronService.stop();\n });\n\ncr.command(\"run\")\n .description(\"Execute a cron job immediately\")\n .argument(\"<id>\", \"Job ID\")\n .action(async (id) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const cronService = new CronService(dbPath);\n\n const job = cronService.getJob(id);\n if (!job) {\n console.error(theme.error(`✗ Cron job not found: ${id}`));\n cronService.stop();\n process.exit(1);\n }\n\n console.log(theme.muted(`Executing job \"${job.name}\"...`));\n try {\n await cronService.runNow(id);\n console.log(`${theme.success(\"✓\")} Job executed successfully`);\n } catch (err) {\n console.error(theme.error(`✗ ${err instanceof Error ? err.message : String(err)}`));\n }\n cronService.stop();\n });\n\n// ── update ─────────────────────────────────────────────────\n\nprogram\n .command(\"update\")\n .description(\"Check for updates and optionally install them\")\n .option(\"--check\", \"Only check, do not install\")\n .action(async (opts) => {\n try {\n const res = await fetch(\"https://registry.npmjs.org/cortask/latest\");\n if (!res.ok) throw new Error(\"Failed to fetch from npm registry\");\n const data = (await res.json()) as { version: string };\n const latest = data.version;\n\n if (latest === VERSION) {\n console.log(`${theme.success(\"✓\")} You're on the latest version ${theme.info(VERSION)}`);\n return;\n }\n\n console.log(`${theme.info(\"Update available:\")} ${theme.muted(VERSION)} → ${theme.success(latest)}`);\n\n if (opts.check) return;\n\n console.log(`\\nRun the following command to update:\\n`);\n console.log(` ${theme.info(\"npm update -g cortask\")}\\n`);\n } catch (err) {\n console.error(\n `${theme.error(\"✗\")} Failed to check for updates: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n });\n\nprogram.parse();\n","import chalk, { Chalk } from \"chalk\";\n\nconst PALETTE = {\n accent: \"#6366f1\",\n accentBright: \"#818cf8\",\n accentDim: \"#a5b4fc\",\n info: \"#38bdf8\",\n success: \"#22c55e\",\n warn: \"#f59e0b\",\n error: \"#ef4444\",\n muted: \"#9ca3af\",\n};\n\nconst hasForceColor =\n typeof process.env.FORCE_COLOR === \"string\" &&\n process.env.FORCE_COLOR.trim().length > 0 &&\n process.env.FORCE_COLOR.trim() !== \"0\";\n\nconst baseChalk =\n process.env.NO_COLOR && !hasForceColor\n ? new Chalk({ level: 0 })\n : chalk;\n\nconst hex = (value: string) => baseChalk.hex(value);\n\nexport const theme = {\n accent: hex(PALETTE.accent),\n accentBright: hex(PALETTE.accentBright),\n accentDim: hex(PALETTE.accentDim),\n info: hex(PALETTE.info),\n success: hex(PALETTE.success),\n warn: hex(PALETTE.warn),\n error: hex(PALETTE.error),\n muted: hex(PALETTE.muted),\n heading: baseChalk.bold.hex(PALETTE.accent),\n command: hex(PALETTE.accentBright),\n option: hex(PALETTE.warn),\n} as const;\n\nexport const isRich = () => Boolean(baseChalk.level > 0);\n","import { isRich, theme } from \"./theme.js\";\n\nlet bannerEmitted = false;\n\nconst hasFlag = (argv: string[], ...flags: string[]) =>\n argv.some((arg) => flags.includes(arg));\n\nexport function emitBanner(version: string, argv?: string[]) {\n if (bannerEmitted) return;\n const args = argv ?? process.argv;\n if (!process.stdout.isTTY) return;\n if (hasFlag(args, \"--json\", \"--version\", \"-V\")) return;\n\n const title = \"⚡ Cortask\";\n const tagline = \"Local AI agent platform\";\n\n if (isRich()) {\n process.stdout.write(\n `\\n${theme.heading(title)} ${theme.info(version)} ${theme.muted(\"—\")} ${theme.accentDim(tagline)}\\n\\n`,\n );\n } else {\n process.stdout.write(`\\n${title} ${version} — ${tagline}\\n\\n`);\n }\n\n bannerEmitted = true;\n}\n\nexport function hasBannerEmitted(): boolean {\n return bannerEmitted;\n}\n","import type { Command } from \"commander\";\nimport { emitBanner, hasBannerEmitted } from \"./banner.js\";\nimport { theme } from \"./theme.js\";\n\nconst EXAMPLES = [\n [\"cortask serve\", \"Start the gateway server\"],\n [\"cortask chat\", \"Start interactive chat session\"],\n [\"cortask run \\\"hello\\\"\", \"Run a one-shot prompt\"],\n [\"cortask status\", \"Show system status\"],\n [\"cortask dashboard\", \"Open the web UI\"],\n [\"cortask setup\", \"Initialize configuration\"],\n [\"cortask workspaces list\", \"List registered workspaces\"],\n [\"cortask credentials set provider.anthropic.apiKey KEY\", \"Set API key\"],\n] as const;\n\nexport function configureHelp(program: Command, version: string) {\n program.helpOption(\"-h, --help\", \"Display help for command\");\n program.helpCommand(\"help [command]\", \"Display help for command\");\n\n program.configureHelp({\n sortSubcommands: true,\n sortOptions: true,\n optionTerm: (option) => theme.option(option.flags),\n subcommandTerm: (cmd) => theme.command(cmd.name()),\n });\n\n const formatHelp = (str: string) =>\n str\n .replace(/^Usage:/gm, theme.heading(\"Usage:\"))\n .replace(/^Options:/gm, theme.heading(\"Options:\"))\n .replace(/^Commands:/gm, theme.heading(\"Commands:\"))\n .replace(/^Arguments:/gm, theme.heading(\"Arguments:\"));\n\n program.configureOutput({\n writeOut: (str) => process.stdout.write(formatHelp(str)),\n writeErr: (str) => process.stderr.write(formatHelp(str)),\n outputError: (str, write) => write(theme.error(str)),\n });\n\n program.addHelpText(\"beforeAll\", () => {\n if (hasBannerEmitted()) return \"\";\n emitBanner(version);\n return \"\";\n });\n\n const fmtExamples = EXAMPLES.map(\n ([cmd, desc]) => ` ${theme.command(cmd)}\\n ${theme.muted(desc)}`,\n ).join(\"\\n\");\n\n program.addHelpText(\"afterAll\", ({ command }) => {\n if (command !== program) return \"\";\n return `\\n${theme.heading(\"Examples:\")}\\n${fmtExamples}\\n`;\n });\n}\n","import { Command } from \"commander\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { getDataDir } from \"@cortask/core\";\nimport { theme } from \"../terminal/theme.js\";\n\nconst DEFAULT_CONFIG = `# Cortask Configuration\nonboarded: true\n\nproviders:\n default: anthropic\n\nagent:\n maxTurns: 25\n temperature: 0.7\n\nserver:\n port: 3777\n host: 127.0.0.1\n\nskills:\n dirs: []\n`;\n\nfunction ensureDir(dir: string) {\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n}\n\nexport const setupCommand = new Command(\"setup\")\n .description(\"Initialize configuration and data directory\")\n .option(\"--force\", \"Overwrite existing configuration\")\n .action(async (opts: { force?: boolean }) => {\n const dataDir = getDataDir();\n const configPath = path.join(dataDir, \"config.yaml\");\n\n console.log(theme.heading(\"\\n⚡ Cortask Setup\\n\"));\n\n if (fs.existsSync(configPath) && !opts.force) {\n console.log(theme.warn(\"⚠ Configuration already exists:\"));\n console.log(theme.info(` ${configPath}`));\n console.log(theme.muted(\"\\n Use --force to overwrite\"));\n console.log();\n process.exit(1);\n }\n\n try {\n ensureDir(dataDir);\n console.log(`${theme.success(\"✓\")} Data directory: ${theme.info(dataDir)}`);\n\n fs.writeFileSync(configPath, DEFAULT_CONFIG, \"utf-8\");\n console.log(`${theme.success(\"✓\")} Config: ${theme.info(configPath)}`);\n\n const skillsDir = path.join(dataDir, \"skills\");\n ensureDir(skillsDir);\n console.log(`${theme.success(\"✓\")} Skills: ${theme.info(skillsDir)}`);\n\n console.log(theme.heading(\"\\n✓ Setup complete!\\n\"));\n\n console.log(theme.muted(\"Next steps:\"));\n console.log(theme.command(\" 1. Set your API key:\"));\n console.log(theme.info(` cortask credentials set provider.anthropic.apiKey YOUR_KEY`));\n console.log(theme.command(\"\\n 2. Add a workspace:\"));\n console.log(theme.info(\" cortask workspaces add my-project /path/to/project\"));\n console.log(theme.command(\"\\n 3. Start chatting:\"));\n console.log(theme.info(\" cortask chat -w /path/to/project\"));\n console.log();\n } catch (err) {\n console.error(theme.error(\"\\n✗ Setup failed\"));\n console.error(theme.muted(` ${(err as Error).message}`));\n process.exit(1);\n }\n });\n","import { Command } from \"commander\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { getDataDir, loadConfig, WorkspaceManager } from \"@cortask/core\";\nimport { theme } from \"../terminal/theme.js\";\n\nasync function fetchHealth(host: string, port: number) {\n try {\n const res = await fetch(`http://${host}:${port}/api/health`);\n if (!res.ok) return null;\n return res.json();\n } catch {\n return null;\n }\n}\n\nexport const statusCommand = new Command(\"status\")\n .description(\"Show system status and configuration\")\n .action(async () => {\n const dataDir = getDataDir();\n const configPath = path.join(dataDir, \"config.yaml\");\n\n if (!fs.existsSync(configPath)) {\n console.error(theme.error(\"\\n✗ No configuration found\"));\n console.error(theme.muted(\" Run this command to set up:\"));\n console.error(theme.command(\" cortask setup\"));\n console.log();\n process.exit(1);\n }\n\n try {\n const config = await loadConfig(configPath);\n const host = config.server.host;\n const port = config.server.port;\n\n console.log(theme.heading(\"\\n Configuration\"));\n console.log(` File: ${theme.info(configPath)}`);\n console.log(` Data: ${theme.info(dataDir)}`);\n\n // Gateway status\n console.log(theme.heading(\"\\n Gateway\"));\n const health = await fetchHealth(host, port);\n if (health) {\n console.log(` Status: ${theme.success(\"online\")}`);\n console.log(` URL: ${theme.info(`http://${host}:${port}`)}`);\n } else {\n console.log(` Status: ${theme.error(\"offline\")}`);\n console.log(` Expected: ${theme.muted(`http://${host}:${port}`)}`);\n }\n\n // Provider\n console.log(theme.heading(\"\\n Provider\"));\n console.log(` Default: ${theme.command(config.providers.default)}`);\n\n // Workspaces\n console.log(theme.heading(\"\\n Workspaces\"));\n const dbPath = path.join(dataDir, \"cortask.db\");\n if (fs.existsSync(dbPath)) {\n const wm = new WorkspaceManager(dbPath);\n const workspaces = await wm.list();\n if (workspaces.length === 0) {\n console.log(` ${theme.muted(\"No workspaces registered\")}`);\n } else {\n for (const w of workspaces) {\n console.log(` ${theme.success(\"✓\")} ${theme.command(w.name)} ${theme.muted(`→ ${w.rootPath}`)}`);\n }\n }\n wm.close();\n } else {\n console.log(` ${theme.muted(\"Database not initialized\")}`);\n }\n\n // Skills\n console.log(theme.heading(\"\\n Skills\"));\n const skillsDir = path.join(dataDir, \"skills\");\n if (fs.existsSync(skillsDir)) {\n const entries = fs.readdirSync(skillsDir).filter((e) =>\n fs.statSync(path.join(skillsDir, e)).isDirectory(),\n );\n console.log(` Installed: ${theme.info(entries.length.toString())} skill(s)`);\n } else {\n console.log(` ${theme.muted(\"No skills directory\")}`);\n }\n\n console.log();\n } catch (err) {\n console.error(theme.error(\"\\n✗ Failed to load status\"));\n console.error(theme.muted(` ${(err as Error).message}`));\n process.exit(1);\n }\n });\n","import { Command } from \"commander\";\nimport { exec } from \"node:child_process\";\nimport path from \"node:path\";\nimport { getDataDir, loadConfig } from \"@cortask/core\";\nimport { theme } from \"../terminal/theme.js\";\n\nfunction openBrowser(url: string): Promise<void> {\n const cmd =\n process.platform === \"win32\"\n ? `start ${url}`\n : process.platform === \"darwin\"\n ? `open ${url}`\n : `xdg-open ${url}`;\n\n return new Promise((resolve, reject) => {\n exec(cmd, (err) => (err ? reject(err) : resolve()));\n });\n}\n\nasync function isGatewayOnline(host: string, port: number): Promise<boolean> {\n try {\n const res = await fetch(`http://${host}:${port}/api/health`);\n return res.ok;\n } catch {\n return false;\n }\n}\n\nexport const dashboardCommand = new Command(\"dashboard\")\n .description(\"Open the web UI in your browser\")\n .option(\"--no-open\", \"Print URL without opening browser\")\n .action(async (opts: { open: boolean }) => {\n const dataDir = getDataDir();\n const configPath = path.join(dataDir, \"config.yaml\");\n const config = await loadConfig(configPath);\n const url = `http://${config.server.host}:${config.server.port}`;\n\n const online = await isGatewayOnline(config.server.host, config.server.port);\n if (!online) {\n console.log(theme.warn(\"\\n⚠ Gateway appears to be offline\"));\n console.log(theme.muted(\" Start it with:\"));\n console.log(theme.command(\" cortask serve\"));\n console.log();\n }\n\n if (opts.open) {\n console.log(theme.info(`\\nOpening dashboard: ${url}`));\n try {\n await openBrowser(url);\n console.log(theme.success(\"✓ Browser opened\"));\n } catch {\n console.log(theme.warn(\"\\n⚠ Could not open browser automatically\"));\n console.log(theme.info(` Open this URL manually: ${url}`));\n }\n } else {\n console.log(theme.info(`\\nDashboard URL: ${url}`));\n }\n console.log();\n });\n","import { Command } from \"commander\";\nimport path from \"node:path\";\nimport { getDataDir, loadConfig, saveConfig } from \"@cortask/core\";\nimport { theme } from \"../terminal/theme.js\";\n\nexport const configCommand = new Command(\"config\")\n .description(\"View and update configuration\");\n\nconfigCommand\n .command(\"show\")\n .description(\"Show current configuration\")\n .action(async () => {\n const dataDir = getDataDir();\n const config = await loadConfig(path.join(dataDir, \"config.yaml\"));\n\n console.log(theme.heading(\"\\n Agent\"));\n console.log(` Max turns: ${theme.info(String(config.agent.maxTurns))}`);\n console.log(` Temperature: ${theme.info(String(config.agent.temperature))}`);\n console.log(` Max tokens: ${theme.info(config.agent.maxTokens ? String(config.agent.maxTokens) : \"default\")}`);\n\n console.log(theme.heading(\"\\n Server\"));\n console.log(` Host: ${theme.info(config.server.host)}`);\n console.log(` Port: ${theme.info(String(config.server.port))}`);\n\n console.log(theme.heading(\"\\n Spending\"));\n console.log(` Enabled: ${config.spending.enabled ? theme.success(\"yes\") : theme.muted(\"no\")}`);\n console.log(` Max tokens: ${theme.info(config.spending.maxTokens ? String(config.spending.maxTokens) : \"unlimited\")}`);\n console.log(` Max cost: ${theme.info(config.spending.maxCostUsd ? `$${config.spending.maxCostUsd}` : \"unlimited\")}`);\n console.log(` Period: ${theme.info(config.spending.period)}`);\n\n console.log(theme.heading(\"\\n Memory\"));\n console.log(` Embedding provider: ${theme.info(config.memory.embeddingProvider)}`);\n if (config.memory.embeddingModel) {\n console.log(` Embedding model: ${theme.info(config.memory.embeddingModel)}`);\n }\n\n console.log(theme.heading(\"\\n Skills\"));\n if (config.skills.dirs.length > 0) {\n for (const dir of config.skills.dirs) {\n console.log(` ${theme.muted(\"•\")} ${theme.info(dir)}`);\n }\n } else {\n console.log(` ${theme.muted(\"No custom skill directories\")}`);\n }\n\n console.log();\n });\n\nconfigCommand\n .command(\"set\")\n .description(\"Set a configuration value\")\n .argument(\"<key>\", \"Config key (e.g. agent.maxTurns, server.port, spending.enabled)\")\n .argument(\"<value>\", \"Config value\")\n .action(async (key: string, value: string) => {\n const dataDir = getDataDir();\n const configPath = path.join(dataDir, \"config.yaml\");\n const config = await loadConfig(configPath);\n\n const parts = key.split(\".\");\n if (parts.length !== 2) {\n console.error(theme.error(\"✗ Key must be in format section.field (e.g. agent.maxTurns)\"));\n process.exit(1);\n }\n\n const [section, field] = parts;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const cfg = config as any;\n if (!(section in cfg) || typeof cfg[section] !== \"object\") {\n console.error(theme.error(`✗ Unknown config section: ${section}`));\n console.error(theme.muted(\" Valid sections: agent, server, spending, memory, skills\"));\n process.exit(1);\n }\n\n // Parse value to correct type\n let parsed: unknown = value;\n if (value === \"true\") parsed = true;\n else if (value === \"false\") parsed = false;\n else if (/^\\d+$/.test(value)) parsed = parseInt(value, 10);\n else if (/^\\d+\\.\\d+$/.test(value)) parsed = parseFloat(value);\n\n cfg[section][field] = parsed;\n\n await saveConfig(configPath, config);\n console.log(`${theme.success(\"✓\")} Set ${theme.command(key)} = ${theme.info(String(parsed))}`);\n });\n\nconfigCommand\n .command(\"get\")\n .description(\"Get a configuration value\")\n .argument(\"<key>\", \"Config key (e.g. agent.maxTurns)\")\n .action(async (key: string) => {\n const dataDir = getDataDir();\n const config = await loadConfig(path.join(dataDir, \"config.yaml\"));\n\n const parts = key.split(\".\");\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let current: any = config;\n for (const part of parts) {\n if (current == null || typeof current !== \"object\" || !(part in current)) {\n console.error(theme.error(`✗ Unknown config key: ${key}`));\n process.exit(1);\n }\n current = current[part];\n }\n\n console.log(typeof current === \"object\" ? JSON.stringify(current, null, 2) : String(current));\n });\n","import { Command } from \"commander\";\nimport path from \"node:path\";\nimport {\n getDataDir,\n loadConfig,\n saveConfig,\n EncryptedCredentialStore,\n getOrCreateSecret,\n createProvider,\n AVAILABLE_PROVIDERS,\n getModelDefinitions,\n type ProviderId,\n} from \"@cortask/core\";\nimport { theme } from \"../terminal/theme.js\";\n\nexport const providersCommand = new Command(\"providers\")\n .description(\"Manage LLM providers\");\n\nprovidersCommand\n .command(\"list\")\n .description(\"List all available providers and their status\")\n .action(async () => {\n const dataDir = getDataDir();\n const config = await loadConfig(path.join(dataDir, \"config.yaml\"));\n const secret = await getOrCreateSecret(dataDir);\n const credentialStore = new EncryptedCredentialStore(\n path.join(dataDir, \"credentials.enc.json\"),\n secret,\n );\n\n const defaultProvider = config.providers.default;\n\n for (const p of AVAILABLE_PROVIDERS) {\n const apiKey = await credentialStore.get(`provider.${p.id}.apiKey`);\n const configured = p.requiresApiKey ? !!apiKey : true;\n const isDefault = p.id === defaultProvider;\n const icon = configured ? theme.success(\"✓\") : theme.muted(\"○\");\n const defaultTag = isDefault ? theme.accent(\" [default]\") : \"\";\n const providerConfig = config.providers[p.id as keyof typeof config.providers];\n const model = typeof providerConfig === \"object\" && providerConfig && \"model\" in providerConfig\n ? (providerConfig as { model?: string }).model\n : undefined;\n const modelTag = model ? theme.muted(` (${model})`) : \"\";\n\n console.log(` ${icon} ${theme.command(p.name)}${defaultTag}${modelTag}`);\n }\n });\n\nprovidersCommand\n .command(\"default\")\n .description(\"Set the default provider and optionally model\")\n .argument(\"<provider>\", \"Provider ID (e.g. anthropic, openai, google)\")\n .argument(\"[model]\", \"Model ID\")\n .action(async (providerId: string, model?: string) => {\n const dataDir = getDataDir();\n const configPath = path.join(dataDir, \"config.yaml\");\n const config = await loadConfig(configPath);\n\n const valid = AVAILABLE_PROVIDERS.find((p) => p.id === providerId);\n if (!valid) {\n console.error(theme.error(`✗ Unknown provider: ${providerId}`));\n console.error(theme.muted(\" Valid providers: \" + AVAILABLE_PROVIDERS.map((p) => p.id).join(\", \")));\n process.exit(1);\n }\n\n config.providers.default = providerId;\n if (model) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (config.providers as any)[providerId] = {\n ...(config.providers as any)[providerId],\n model,\n };\n }\n\n await saveConfig(configPath, config);\n console.log(`${theme.success(\"✓\")} Default provider set to ${theme.command(valid.name)}${model ? ` with model ${theme.info(model)}` : \"\"}`);\n });\n\nprovidersCommand\n .command(\"test\")\n .description(\"Test provider credentials with a simple API call\")\n .argument(\"<provider>\", \"Provider ID\")\n .action(async (providerId: string) => {\n const dataDir = getDataDir();\n const secret = await getOrCreateSecret(dataDir);\n const credentialStore = new EncryptedCredentialStore(\n path.join(dataDir, \"credentials.enc.json\"),\n secret,\n );\n const config = await loadConfig(path.join(dataDir, \"config.yaml\"));\n\n const valid = AVAILABLE_PROVIDERS.find((p) => p.id === providerId);\n if (!valid) {\n console.error(theme.error(`✗ Unknown provider: ${providerId}`));\n process.exit(1);\n }\n\n const apiKey = await credentialStore.get(`provider.${providerId}.apiKey`);\n if (!apiKey && valid.requiresApiKey) {\n console.error(theme.error(`✗ No API key set for ${providerId}`));\n console.error(theme.muted(` Set it with: cortask credentials set provider.${providerId}.apiKey YOUR_KEY`));\n process.exit(1);\n }\n\n console.log(theme.muted(`Testing ${valid.name}...`));\n\n try {\n const provider = createProvider(providerId as ProviderId, apiKey ?? \"\");\n const providerConfig = config.providers[providerId as keyof typeof config.providers];\n const model = typeof providerConfig === \"object\" && providerConfig && \"model\" in providerConfig\n ? (providerConfig as { model?: string }).model\n : undefined;\n\n const defaultModel = getModelDefinitions(providerId)[0]?.id;\n const result = await provider.generateText({\n model: model ?? defaultModel ?? providerId,\n messages: [{ role: \"user\", content: [{ type: \"text\", text: \"Say hi in exactly one word.\" }] }],\n maxTokens: 20,\n });\n\n console.log(`${theme.success(\"✓\")} Provider responded successfully`);\n console.log(` ${theme.muted(\"Response:\")} ${result.content}`);\n if (result.usage) {\n console.log(` ${theme.muted(\"Tokens:\")} ${result.usage.inputTokens} in / ${result.usage.outputTokens} out`);\n }\n } catch (err) {\n console.error(`${theme.error(\"✗\")} Provider test failed: ${err instanceof Error ? err.message : String(err)}`);\n process.exit(1);\n }\n });\n","import { Command } from \"commander\";\nimport path from \"node:path\";\nimport { getDataDir, WorkspaceManager, SessionStore } from \"@cortask/core\";\nimport { theme } from \"../terminal/theme.js\";\n\nexport const sessionsCommand = new Command(\"sessions\")\n .description(\"Manage chat sessions\");\n\nsessionsCommand\n .command(\"list\")\n .description(\"List sessions for a workspace\")\n .requiredOption(\"-w, --workspace <id>\", \"Workspace ID\")\n .action(async (opts) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const wm = new WorkspaceManager(dbPath);\n const workspace = await wm.get(opts.workspace);\n\n if (!workspace) {\n console.error(theme.error(`✗ Workspace not found: ${opts.workspace}`));\n wm.close();\n process.exit(1);\n }\n\n const sessionStore = new SessionStore(wm.getSessionDbPath(workspace.rootPath));\n const sessions = sessionStore.listSessions();\n\n if (sessions.length === 0) {\n console.log(theme.muted(\"No sessions found.\"));\n } else {\n for (const s of sessions) {\n const date = new Date(s.updatedAt).toLocaleString();\n console.log(` ${theme.muted(\"•\")} ${theme.command(s.title || \"Untitled\")} ${theme.muted(`(${s.id})`)}`);\n console.log(` ${theme.muted(\"Updated:\")} ${date}`);\n }\n }\n wm.close();\n });\n\nsessionsCommand\n .command(\"show\")\n .description(\"Show session messages\")\n .argument(\"<id>\", \"Session ID\")\n .requiredOption(\"-w, --workspace <id>\", \"Workspace ID\")\n .option(\"-n, --limit <count>\", \"Number of messages to show\", \"20\")\n .action(async (id, opts) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const wm = new WorkspaceManager(dbPath);\n const workspace = await wm.get(opts.workspace);\n\n if (!workspace) {\n console.error(theme.error(`✗ Workspace not found: ${opts.workspace}`));\n wm.close();\n process.exit(1);\n }\n\n const sessionStore = new SessionStore(wm.getSessionDbPath(workspace.rootPath));\n const session = sessionStore.getSession(id);\n\n if (!session) {\n console.error(theme.error(`✗ Session not found: ${id}`));\n wm.close();\n process.exit(1);\n }\n\n console.log(theme.heading(`\\n ${session.title || \"Untitled Session\"}`));\n console.log(theme.muted(` ID: ${session.id}`));\n console.log(theme.muted(` Created: ${new Date(session.createdAt).toLocaleString()}`));\n console.log();\n\n const limit = parseInt(opts.limit, 10);\n const messages = session.messages.slice(-limit);\n\n for (const msg of messages) {\n const role = msg.role === \"user\"\n ? theme.accent(\"you>\")\n : theme.accentBright(\"cortask>\");\n\n // Extract text content\n let text = \"\";\n if (typeof msg.content === \"string\") {\n text = msg.content;\n } else if (Array.isArray(msg.content)) {\n text = msg.content\n .filter((c: { type: string }) => c.type === \"text\")\n .map((c: { text?: string }) => c.text ?? \"\")\n .join(\"\");\n }\n\n if (text) {\n console.log(`${role} ${text.slice(0, 500)}${text.length > 500 ? \"...\" : \"\"}`);\n console.log();\n }\n }\n wm.close();\n });\n\nsessionsCommand\n .command(\"delete\")\n .description(\"Delete a session\")\n .argument(\"<id>\", \"Session ID\")\n .requiredOption(\"-w, --workspace <id>\", \"Workspace ID\")\n .action(async (id, opts) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const wm = new WorkspaceManager(dbPath);\n const workspace = await wm.get(opts.workspace);\n\n if (!workspace) {\n console.error(theme.error(`✗ Workspace not found: ${opts.workspace}`));\n wm.close();\n process.exit(1);\n }\n\n const sessionStore = new SessionStore(wm.getSessionDbPath(workspace.rootPath));\n sessionStore.deleteSession(id);\n console.log(`${theme.success(\"✓\")} Deleted session ${theme.muted(id)}`);\n wm.close();\n });\n","import { Command } from \"commander\";\nimport path from \"node:path\";\nimport { getDataDir, UsageStore, ModelStore } from \"@cortask/core\";\nimport { theme } from \"../terminal/theme.js\";\n\nexport const usageCommand = new Command(\"usage\")\n .description(\"View token usage and costs\");\n\nusageCommand\n .command(\"summary\")\n .description(\"Show usage summary for a period\")\n .option(\"-p, --period <period>\", \"Period: daily, weekly, monthly\", \"monthly\")\n .action(async (opts) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const modelStore = new ModelStore(dbPath);\n const usageStore = new UsageStore(dbPath, modelStore);\n const period = opts.period as \"daily\" | \"weekly\" | \"monthly\";\n\n const summary = usageStore.getSummary(period);\n\n console.log(theme.heading(`\\n Usage (${period})`));\n console.log(` Requests: ${theme.info(String(summary.recordCount))}`);\n console.log(` Input tokens: ${theme.info(summary.totalInputTokens.toLocaleString())}`);\n console.log(` Output tokens: ${theme.info(summary.totalOutputTokens.toLocaleString())}`);\n console.log(` Total tokens: ${theme.info(summary.totalTokens.toLocaleString())}`);\n console.log(` Total cost: ${theme.info(`$${summary.totalCostUsd.toFixed(4)}`)}`);\n console.log();\n });\n\nusageCommand\n .command(\"history\")\n .description(\"Show daily usage history\")\n .option(\"-d, --days <days>\", \"Number of days\", \"14\")\n .action(async (opts) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const modelStore = new ModelStore(dbPath);\n const usageStore = new UsageStore(dbPath, modelStore);\n const days = parseInt(opts.days, 10);\n\n const history = usageStore.getHistory(days);\n\n if (history.length === 0) {\n console.log(theme.muted(\"No usage data found.\"));\n return;\n }\n\n console.log(theme.heading(`\\n Usage History (last ${days} days)\\n`));\n console.log(` ${theme.muted(\"Date\".padEnd(12))} ${theme.muted(\"Tokens\".padStart(12))} ${theme.muted(\"Cost\".padStart(10))}`);\n console.log(` ${theme.muted(\"─\".repeat(34))}`);\n\n for (const row of history) {\n const date = row.date.padEnd(12);\n const tokens = row.tokens.toLocaleString().padStart(12);\n const cost = `$${row.costUsd.toFixed(4)}`.padStart(10);\n console.log(` ${theme.info(date)} ${tokens} ${theme.muted(cost)}`);\n }\n console.log();\n });\n","import { Command } from \"commander\";\nimport path from \"node:path\";\nimport { getDataDir, ModelStore, getModelDefinitions, AVAILABLE_PROVIDERS } from \"@cortask/core\";\nimport { theme } from \"../terminal/theme.js\";\n\nexport const modelsCommand = new Command(\"models\")\n .description(\"Manage available models\");\n\nmodelsCommand\n .command(\"available\")\n .description(\"List available models for a provider\")\n .argument(\"<provider>\", \"Provider ID (e.g. anthropic, openai, google)\")\n .action(async (providerId: string) => {\n const models = getModelDefinitions(providerId);\n\n if (models.length === 0) {\n console.log(theme.muted(`No hardcoded models for provider \"${providerId}\".`));\n console.log(theme.muted(\"This provider may fetch models dynamically from its API.\"));\n return;\n }\n\n console.log(theme.heading(`\\n Models for ${providerId}\\n`));\n for (const m of models) {\n const pricing = m.inputPricePer1m != null\n ? theme.muted(` ($${m.inputPricePer1m}/$${m.outputPricePer1m} per 1M)`)\n : \"\";\n console.log(` ${theme.muted(\"•\")} ${theme.command(m.id)} ${theme.info(m.name)}${pricing}`);\n }\n console.log();\n });\n\nmodelsCommand\n .command(\"list\")\n .description(\"List enabled models\")\n .option(\"-p, --provider <provider>\", \"Filter by provider\")\n .action(async (opts) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const modelStore = new ModelStore(dbPath);\n const models = modelStore.list(opts.provider);\n\n if (models.length === 0) {\n console.log(theme.muted(\"No models enabled.\"));\n console.log(theme.muted(\"Enable models with: cortask models enable <provider> <model-id> <label> <input-price> <output-price>\"));\n return;\n }\n\n console.log(theme.heading(\"\\n Enabled Models\\n\"));\n for (const m of models) {\n console.log(` ${theme.success(\"✓\")} ${theme.command(m.label)} ${theme.muted(`(${m.provider}/${m.modelId})`)}`);\n console.log(` ${theme.muted(`$${m.inputPricePer1m}/$${m.outputPricePer1m} per 1M tokens`)}`);\n }\n console.log();\n });\n\nmodelsCommand\n .command(\"enable\")\n .description(\"Enable a model\")\n .argument(\"<provider>\", \"Provider ID\")\n .argument(\"<model-id>\", \"Model ID\")\n .argument(\"<label>\", \"Display label\")\n .argument(\"<input-price>\", \"Input price per 1M tokens (USD)\")\n .argument(\"<output-price>\", \"Output price per 1M tokens (USD)\")\n .action(async (provider: string, modelId: string, label: string, inputPrice: string, outputPrice: string) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const modelStore = new ModelStore(dbPath);\n\n const model = modelStore.enable(\n provider,\n modelId,\n label,\n parseFloat(inputPrice),\n parseFloat(outputPrice),\n );\n\n console.log(`${theme.success(\"✓\")} Enabled model ${theme.command(model.label)} ${theme.muted(`(${provider}/${modelId})`)}`);\n });\n\nmodelsCommand\n .command(\"disable\")\n .description(\"Disable a model\")\n .argument(\"<provider>\", \"Provider ID\")\n .argument(\"<model-id>\", \"Model ID\")\n .action(async (provider: string, modelId: string) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const modelStore = new ModelStore(dbPath);\n\n modelStore.disable(provider, modelId);\n console.log(`${theme.success(\"✓\")} Disabled model ${theme.muted(`${provider}/${modelId}`)}`);\n });\n","import { Command } from \"commander\";\nimport path from \"node:path\";\nimport { getDataDir, TemplateStore } from \"@cortask/core\";\nimport { theme } from \"../terminal/theme.js\";\n\nexport const templatesCommand = new Command(\"templates\")\n .description(\"Manage prompt templates\");\n\ntemplatesCommand\n .command(\"list\")\n .description(\"List all templates\")\n .action(async () => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const store = new TemplateStore(dbPath);\n const templates = store.list();\n\n if (templates.length === 0) {\n console.log(theme.muted(\"No templates found.\"));\n return;\n }\n\n let currentCategory = \"\";\n for (const t of templates) {\n if (t.category !== currentCategory) {\n currentCategory = t.category;\n console.log(theme.heading(`\\n ${currentCategory}`));\n }\n console.log(` ${theme.muted(\"•\")} ${theme.command(t.name)} ${theme.muted(`(${t.id.slice(0, 8)}...)`)}`);\n console.log(` ${theme.muted(t.content.slice(0, 80).replace(/\\n/g, \" \"))}${t.content.length > 80 ? \"...\" : \"\"}`);\n }\n console.log();\n });\n\ntemplatesCommand\n .command(\"create\")\n .description(\"Create a new template\")\n .requiredOption(\"-n, --name <name>\", \"Template name\")\n .requiredOption(\"-c, --content <content>\", \"Template content\")\n .option(\"--category <category>\", \"Category\", \"General\")\n .action(async (opts) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const store = new TemplateStore(dbPath);\n\n const template = store.create(opts.name, opts.content, opts.category);\n console.log(`${theme.success(\"✓\")} Created template ${theme.command(template.name)} ${theme.muted(`(${template.id.slice(0, 8)}...)`)}`);\n });\n\ntemplatesCommand\n .command(\"update\")\n .description(\"Update a template\")\n .argument(\"<id>\", \"Template ID\")\n .option(\"-n, --name <name>\", \"New name\")\n .option(\"-c, --content <content>\", \"New content\")\n .option(\"--category <category>\", \"New category\")\n .action(async (id, opts) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const store = new TemplateStore(dbPath);\n\n const updates: Record<string, string> = {};\n if (opts.name) updates.name = opts.name;\n if (opts.content) updates.content = opts.content;\n if (opts.category) updates.category = opts.category;\n\n if (Object.keys(updates).length === 0) {\n console.error(theme.error(\"✗ No fields to update. Use --name, --content, or --category.\"));\n process.exit(1);\n }\n\n const result = store.update(id, updates);\n if (!result) {\n console.error(theme.error(`✗ Template not found: ${id}`));\n process.exit(1);\n }\n\n console.log(`${theme.success(\"✓\")} Updated template ${theme.command(result.name)}`);\n });\n\ntemplatesCommand\n .command(\"delete\")\n .description(\"Delete a template\")\n .argument(\"<id>\", \"Template ID\")\n .action(async (id) => {\n const dataDir = getDataDir();\n const dbPath = path.join(dataDir, \"cortask.db\");\n const store = new TemplateStore(dbPath);\n\n store.delete(id);\n console.log(`${theme.success(\"✓\")} Deleted template ${theme.muted(id)}`);\n });\n","import { Command } from \"commander\";\nimport path from \"node:path\";\nimport { getDataDir, loadConfig } from \"@cortask/core\";\nimport { theme } from \"../terminal/theme.js\";\n\nasync function fetchGateway(host: string, port: number, path: string, method = \"GET\"): Promise<unknown> {\n const res = await fetch(`http://${host}:${port}${path}`, { method });\n if (!res.ok) {\n const body = await res.text();\n throw new Error(`Gateway returned ${res.status}: ${body}`);\n }\n return res.json();\n}\n\nexport const channelsCommand = new Command(\"channels\")\n .description(\"Manage messaging channels (requires running gateway)\");\n\nchannelsCommand\n .command(\"list\")\n .description(\"List channel statuses\")\n .action(async () => {\n const dataDir = getDataDir();\n const config = await loadConfig(path.join(dataDir, \"config.yaml\"));\n\n try {\n const channels = await fetchGateway(\n config.server.host,\n config.server.port,\n \"/api/channels\",\n ) as Array<{ id: string; name: string; running: boolean; authenticated?: boolean }>;\n\n if (channels.length === 0) {\n console.log(theme.muted(\"No channels available.\"));\n return;\n }\n\n for (const ch of channels) {\n const statusIcon = ch.running ? theme.success(\"●\") : theme.muted(\"○\");\n const status = ch.running ? theme.success(\"running\") : theme.muted(\"stopped\");\n const auth = ch.authenticated != null\n ? (ch.authenticated ? theme.success(\" (authenticated)\") : theme.warn(\" (not authenticated)\"))\n : \"\";\n console.log(` ${statusIcon} ${theme.command(ch.name)} ${status}${auth}`);\n }\n } catch (err) {\n console.error(theme.error(`✗ ${err instanceof Error ? err.message : String(err)}`));\n console.error(theme.muted(\" Is the gateway running? Start it with: cortask serve\"));\n process.exit(1);\n }\n });\n\nchannelsCommand\n .command(\"start\")\n .description(\"Start a channel\")\n .argument(\"<channel>\", \"Channel ID (telegram, discord, whatsapp)\")\n .action(async (channelId: string) => {\n const dataDir = getDataDir();\n const config = await loadConfig(path.join(dataDir, \"config.yaml\"));\n\n try {\n await fetchGateway(\n config.server.host,\n config.server.port,\n `/api/channels/${channelId}/start`,\n \"POST\",\n );\n console.log(`${theme.success(\"✓\")} Channel ${theme.command(channelId)} started`);\n } catch (err) {\n console.error(theme.error(`✗ ${err instanceof Error ? err.message : String(err)}`));\n process.exit(1);\n }\n });\n\nchannelsCommand\n .command(\"stop\")\n .description(\"Stop a channel\")\n .argument(\"<channel>\", \"Channel ID (telegram, discord, whatsapp)\")\n .action(async (channelId: string) => {\n const dataDir = getDataDir();\n const config = await loadConfig(path.join(dataDir, \"config.yaml\"));\n\n try {\n await fetchGateway(\n config.server.host,\n config.server.port,\n `/api/channels/${channelId}/stop`,\n \"POST\",\n );\n console.log(`${theme.success(\"✓\")} Channel ${theme.command(channelId)} stopped`);\n } catch (err) {\n console.error(theme.error(`✗ ${err instanceof Error ? err.message : String(err)}`));\n process.exit(1);\n }\n });\n"],"mappings":"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","names":["Command","loadConfig","getDataDir","WorkspaceManager","SessionStore","EncryptedCredentialStore","getOrCreateSecret","createProvider","path","program","Command","fs","path","getDataDir","Command","getDataDir","path","fs","Command","path","getDataDir","loadConfig","Command","getDataDir","path","loadConfig","Command","path","getDataDir","loadConfig","Command","getDataDir","loadConfig","path","Command","path","getDataDir","loadConfig","saveConfig","Command","getDataDir","loadConfig","path","saveConfig","Command","path","getDataDir","WorkspaceManager","Command","getDataDir","path","WorkspaceManager","Command","path","getDataDir","Command","getDataDir","path","Command","path","getDataDir","ModelStore","getModelDefinitions","Command","getModelDefinitions","getDataDir","path","ModelStore","Command","path","getDataDir","Command","getDataDir","path","Command","path","getDataDir","loadConfig","path","Command","getDataDir","loadConfig","require","Command","getDataDir","path","loadConfig","WorkspaceManager","getOrCreateSecret","EncryptedCredentialStore","SessionStore","createProvider"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cortask",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.39",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Local AI agent with skills, workspaces, and cron",
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"chalk": "^5.6.2",
|
|
20
20
|
"commander": "^12.1.0",
|
|
21
|
-
"@cortask/core": "0.2.
|
|
22
|
-
"@cortask/gateway": "0.2.
|
|
21
|
+
"@cortask/core": "0.2.39",
|
|
22
|
+
"@cortask/gateway": "0.2.39"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@types/node": "^22.0.0",
|