@cogitator-ai/cli 0.3.15 → 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.
Files changed (73) hide show
  1. package/README.md +159 -510
  2. package/dist/commands/assistant.d.ts +13 -0
  3. package/dist/commands/assistant.d.ts.map +1 -1
  4. package/dist/commands/assistant.js +64 -58
  5. package/dist/commands/assistant.js.map +1 -1
  6. package/dist/commands/build.d.ts +2 -0
  7. package/dist/commands/build.d.ts.map +1 -1
  8. package/dist/commands/build.js +114 -59
  9. package/dist/commands/build.js.map +1 -1
  10. package/dist/commands/daemon.d.ts.map +1 -1
  11. package/dist/commands/daemon.js +223 -262
  12. package/dist/commands/daemon.js.map +1 -1
  13. package/dist/commands/deploy.d.ts.map +1 -1
  14. package/dist/commands/deploy.js +80 -42
  15. package/dist/commands/deploy.js.map +1 -1
  16. package/dist/commands/init.d.ts +44 -0
  17. package/dist/commands/init.d.ts.map +1 -1
  18. package/dist/commands/init.js +334 -265
  19. package/dist/commands/init.js.map +1 -1
  20. package/dist/commands/logs.d.ts +1 -0
  21. package/dist/commands/logs.d.ts.map +1 -1
  22. package/dist/commands/logs.js +8 -4
  23. package/dist/commands/logs.js.map +1 -1
  24. package/dist/commands/models.d.ts +1 -1
  25. package/dist/commands/models.d.ts.map +1 -1
  26. package/dist/commands/models.js +83 -93
  27. package/dist/commands/models.js.map +1 -1
  28. package/dist/commands/run.d.ts +4 -1
  29. package/dist/commands/run.d.ts.map +1 -1
  30. package/dist/commands/run.js +151 -128
  31. package/dist/commands/run.js.map +1 -1
  32. package/dist/commands/skill.d.ts +17 -0
  33. package/dist/commands/skill.d.ts.map +1 -1
  34. package/dist/commands/skill.js +203 -81
  35. package/dist/commands/skill.js.map +1 -1
  36. package/dist/commands/status.d.ts.map +1 -1
  37. package/dist/commands/status.js +20 -24
  38. package/dist/commands/status.js.map +1 -1
  39. package/dist/commands/up.d.ts +4 -0
  40. package/dist/commands/up.d.ts.map +1 -1
  41. package/dist/commands/up.js +182 -130
  42. package/dist/commands/up.js.map +1 -1
  43. package/dist/commands/wizard.d.ts +6 -0
  44. package/dist/commands/wizard.d.ts.map +1 -1
  45. package/dist/commands/wizard.js +301 -267
  46. package/dist/commands/wizard.js.map +1 -1
  47. package/dist/index.js +8 -1
  48. package/dist/index.js.map +1 -1
  49. package/dist/utils/daemon.d.ts +37 -0
  50. package/dist/utils/daemon.d.ts.map +1 -0
  51. package/dist/utils/daemon.js +194 -0
  52. package/dist/utils/daemon.js.map +1 -0
  53. package/dist/utils/docker.d.ts +9 -0
  54. package/dist/utils/docker.d.ts.map +1 -1
  55. package/dist/utils/docker.js +67 -12
  56. package/dist/utils/docker.js.map +1 -1
  57. package/dist/utils/env.d.ts +7 -0
  58. package/dist/utils/env.d.ts.map +1 -0
  59. package/dist/utils/env.js +41 -0
  60. package/dist/utils/env.js.map +1 -0
  61. package/dist/utils/module-loader.d.ts +5 -0
  62. package/dist/utils/module-loader.d.ts.map +1 -0
  63. package/dist/utils/module-loader.js +52 -0
  64. package/dist/utils/module-loader.js.map +1 -0
  65. package/dist/utils/ollama.d.ts +20 -0
  66. package/dist/utils/ollama.d.ts.map +1 -0
  67. package/dist/utils/ollama.js +111 -0
  68. package/dist/utils/ollama.js.map +1 -0
  69. package/dist/utils/provider-models.d.ts +13 -0
  70. package/dist/utils/provider-models.d.ts.map +1 -0
  71. package/dist/utils/provider-models.js +78 -0
  72. package/dist/utils/provider-models.js.map +1 -0
  73. package/package.json +9 -9
@@ -1,34 +1,146 @@
1
- import { Command } from 'commander';
1
+ import { Command, InvalidArgumentError } from 'commander';
2
2
  import chalk from 'chalk';
3
- import { existsSync, mkdirSync, readdirSync, rmSync, writeFileSync } from 'node:fs';
4
- import { resolve, basename } from 'node:path';
3
+ import { cpSync, existsSync, mkdirSync, readdirSync, rmSync, statSync, writeFileSync, } from 'node:fs';
4
+ import { createRequire } from 'node:module';
5
+ import { homedir } from 'node:os';
6
+ import { resolve, basename, relative } from 'node:path';
7
+ import { validateSkill } from '@cogitator-ai/core';
5
8
  import { log } from '../utils/logger.js';
6
- const GLOBAL_SKILLS_DIR = resolve(process.env.HOME ?? '~', '.cogitator/skills');
7
- const LOCAL_SKILLS_DIR = resolve(process.cwd(), 'skills');
8
- async function discoverSkills() {
9
+ import { importUserModule } from '../utils/module-loader.js';
10
+ const SKILL_NAME = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
11
+ const INSTALLED_SKILL_NAME = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
12
+ const SKILL_FILES = ['skill.ts', 'skill.js', 'skill.mjs'];
13
+ export const SKILL_TEMPLATES = ['basic', 'device', 'api'];
14
+ function globalSkillsDir() {
15
+ return resolve(homedir(), '.cogitator', 'skills');
16
+ }
17
+ function localSkillsDir() {
18
+ return resolve(process.cwd(), 'skills');
19
+ }
20
+ export function isValidSkillName(name) {
21
+ return SKILL_NAME.test(name);
22
+ }
23
+ export function isSafeSkillDirName(name) {
24
+ return INSTALLED_SKILL_NAME.test(name) && !name.includes('..');
25
+ }
26
+ function parseInstalledSkillName(value) {
27
+ if (isSafeSkillDirName(value))
28
+ return value;
29
+ throw new InvalidArgumentError('Skill name must be a plain directory name.');
30
+ }
31
+ function parseSkillName(value) {
32
+ if (isValidSkillName(value))
33
+ return value;
34
+ throw new InvalidArgumentError('Skill names must be kebab-case: lowercase letters, digits and single dashes (e.g. "weather-api").');
35
+ }
36
+ function parseTemplate(value) {
37
+ const template = SKILL_TEMPLATES.find((t) => t === value);
38
+ if (template)
39
+ return template;
40
+ throw new InvalidArgumentError(`Expected one of: ${SKILL_TEMPLATES.join(', ')}.`);
41
+ }
42
+ export function findSkillFile(dir) {
43
+ for (const file of SKILL_FILES) {
44
+ const full = resolve(dir, file);
45
+ if (existsSync(full))
46
+ return full;
47
+ }
48
+ return null;
49
+ }
50
+ function discoverSkills() {
9
51
  const skills = [];
10
- for (const dir of [LOCAL_SKILLS_DIR, GLOBAL_SKILLS_DIR]) {
52
+ const locations = [
53
+ [localSkillsDir(), 'local'],
54
+ [globalSkillsDir(), 'global'],
55
+ ];
56
+ for (const [dir, location] of locations) {
11
57
  if (!existsSync(dir))
12
58
  continue;
13
- const location = dir === LOCAL_SKILLS_DIR ? 'local' : 'global';
14
59
  for (const entry of readdirSync(dir, { withFileTypes: true })) {
15
60
  if (!entry.isDirectory())
16
61
  continue;
17
62
  const skillDir = resolve(dir, entry.name);
18
- const hasSkillFile = existsSync(resolve(skillDir, 'skill.ts')) || existsSync(resolve(skillDir, 'skill.js'));
19
- if (hasSkillFile) {
63
+ if (findSkillFile(skillDir)) {
20
64
  skills.push({ name: entry.name, location, path: skillDir });
21
65
  }
22
66
  }
23
67
  }
24
68
  return skills;
25
69
  }
70
+ function isTool(value) {
71
+ return (typeof value === 'object' &&
72
+ value !== null &&
73
+ 'name' in value &&
74
+ typeof value.name === 'string' &&
75
+ 'execute' in value &&
76
+ typeof value.execute === 'function');
77
+ }
78
+ function optionalString(value, key) {
79
+ const field = Reflect.get(value, key);
80
+ return typeof field === 'string' ? field : undefined;
81
+ }
82
+ function optionalStringArray(value, key) {
83
+ const field = Reflect.get(value, key);
84
+ return Array.isArray(field) && field.every((v) => typeof v === 'string') ? field : undefined;
85
+ }
86
+ export function toSkill(value) {
87
+ if (typeof value !== 'object' || value === null) {
88
+ return { skill: null, issues: ['Export is not an object'] };
89
+ }
90
+ const issues = [];
91
+ const name = optionalString(value, 'name');
92
+ const version = optionalString(value, 'version');
93
+ const description = optionalString(value, 'description');
94
+ const tools = Reflect.get(value, 'tools');
95
+ if (!name)
96
+ issues.push('Missing or invalid "name" field');
97
+ if (!version)
98
+ issues.push('Missing or invalid "version" field');
99
+ if (description === undefined)
100
+ issues.push('Missing or invalid "description" field');
101
+ if (!Array.isArray(tools)) {
102
+ issues.push('Missing or invalid "tools" array');
103
+ }
104
+ else {
105
+ tools.forEach((tool, index) => {
106
+ if (!isTool(tool))
107
+ issues.push(`tools[${index}] is not a valid tool (needs name + execute)`);
108
+ });
109
+ }
110
+ if (issues.length > 0 || !name || !version || description === undefined) {
111
+ return { skill: null, issues };
112
+ }
113
+ return {
114
+ skill: {
115
+ name,
116
+ version,
117
+ description,
118
+ tools: Array.isArray(tools) ? tools.filter(isTool) : [],
119
+ instructions: optionalString(value, 'instructions'),
120
+ env: optionalStringArray(value, 'env'),
121
+ dependencies: optionalStringArray(value, 'dependencies'),
122
+ },
123
+ issues,
124
+ };
125
+ }
126
+ export function findMissingDependencies(dependencies, fromFile) {
127
+ const require = createRequire(fromFile);
128
+ return dependencies.filter((dep) => {
129
+ try {
130
+ require.resolve(dep);
131
+ return false;
132
+ }
133
+ catch {
134
+ return true;
135
+ }
136
+ });
137
+ }
26
138
  export const skillCommand = new Command('skill').description('Manage agent skills');
27
139
  skillCommand
28
140
  .command('list')
29
141
  .description('List installed skills')
30
- .action(async () => {
31
- const skills = await discoverSkills();
142
+ .action(() => {
143
+ const skills = discoverSkills();
32
144
  if (skills.length === 0) {
33
145
  log.info('No skills installed');
34
146
  log.dim(' cogitator skill create <name> Create a new skill');
@@ -51,37 +163,46 @@ skillCommand
51
163
  .command('add <source>')
52
164
  .description('Install a skill from a local path or directory')
53
165
  .option('-g, --global', 'Install globally', false)
54
- .action(async (source, options) => {
166
+ .action((source, options) => {
55
167
  const sourcePath = resolve(process.cwd(), source);
56
- if (!existsSync(sourcePath)) {
57
- log.error(`Source not found: ${sourcePath}`);
168
+ if (!existsSync(sourcePath) || !statSync(sourcePath).isDirectory()) {
169
+ log.error(`Source is not a directory: ${sourcePath}`);
170
+ process.exit(1);
171
+ }
172
+ if (!findSkillFile(sourcePath)) {
173
+ log.error(`No ${SKILL_FILES.join(' / ')} found in ${sourcePath}`);
58
174
  process.exit(1);
59
175
  }
60
176
  const name = basename(sourcePath);
61
- const targetDir = options.global ? GLOBAL_SKILLS_DIR : LOCAL_SKILLS_DIR;
177
+ if (!isSafeSkillDirName(name)) {
178
+ log.error(`Invalid skill directory name "${name}"`);
179
+ process.exit(1);
180
+ }
181
+ const targetDir = options.global ? globalSkillsDir() : localSkillsDir();
62
182
  const targetPath = resolve(targetDir, name);
63
183
  if (existsSync(targetPath)) {
64
184
  log.error(`Skill "${name}" already exists at ${targetPath}`);
65
185
  log.dim('Remove it first: cogitator skill remove ' + name);
66
186
  process.exit(1);
67
187
  }
68
- if (!existsSync(targetDir)) {
69
- mkdirSync(targetDir, { recursive: true });
70
- }
71
- const { cpSync } = await import('node:fs');
72
- cpSync(sourcePath, targetPath, { recursive: true });
188
+ mkdirSync(targetDir, { recursive: true });
189
+ cpSync(sourcePath, targetPath, {
190
+ recursive: true,
191
+ filter: (src) => !relative(sourcePath, src).split(/[\\/]/).includes('node_modules'),
192
+ });
73
193
  log.success(`Skill "${name}" installed to ${options.global ? 'global' : 'local'} skills`);
74
194
  log.dim(targetPath);
75
195
  });
76
196
  skillCommand
77
- .command('remove <name>')
197
+ .command('remove')
198
+ .argument('<name>', 'Skill name', parseInstalledSkillName)
78
199
  .description('Remove an installed skill')
79
200
  .option('-g, --global', 'Remove from global skills', false)
80
201
  .action((name, options) => {
81
- const dirs = options.global ? [GLOBAL_SKILLS_DIR] : [LOCAL_SKILLS_DIR, GLOBAL_SKILLS_DIR];
202
+ const dirs = options.global ? [globalSkillsDir()] : [localSkillsDir(), globalSkillsDir()];
82
203
  for (const dir of dirs) {
83
204
  const skillPath = resolve(dir, name);
84
- if (existsSync(skillPath)) {
205
+ if (existsSync(skillPath) && findSkillFile(skillPath)) {
85
206
  rmSync(skillPath, { recursive: true, force: true });
86
207
  log.success(`Skill "${name}" removed from ${skillPath}`);
87
208
  return;
@@ -89,14 +210,16 @@ skillCommand
89
210
  }
90
211
  log.error(`Skill "${name}" not found`);
91
212
  log.dim('Run "cogitator skill list" to see installed skills');
213
+ process.exit(1);
92
214
  });
93
215
  skillCommand
94
- .command('create <name>')
216
+ .command('create')
217
+ .argument('<name>', 'Skill name (kebab-case)', parseSkillName)
95
218
  .description('Scaffold a new skill')
96
219
  .option('-g, --global', 'Create in global skills directory', false)
97
- .option('-t, --template <type>', 'Template type (basic, device, api)', 'basic')
220
+ .option('-t, --template <type>', 'Template type (basic, device, api)', parseTemplate, 'basic')
98
221
  .action((name, options) => {
99
- const targetDir = options.global ? GLOBAL_SKILLS_DIR : LOCAL_SKILLS_DIR;
222
+ const targetDir = options.global ? globalSkillsDir() : localSkillsDir();
100
223
  const skillDir = resolve(targetDir, name);
101
224
  if (existsSync(skillDir)) {
102
225
  log.error(`Skill "${name}" already exists at ${skillDir}`);
@@ -109,8 +232,8 @@ skillCommand
109
232
  log.success(`Skill "${name}" created at ${skillDir}`);
110
233
  console.log();
111
234
  log.dim(' Files:');
112
- log.dim(` ${skillDir}/skill.ts`);
113
- log.dim(` ${skillDir}/tools/${name}.ts`);
235
+ log.dim(` ${resolve(skillDir, 'skill.ts')}`);
236
+ log.dim(` ${resolve(skillDir, 'tools', `${name}.ts`)}`);
114
237
  console.log();
115
238
  log.dim(' Next steps:');
116
239
  log.dim(' 1. Edit the tool implementation');
@@ -123,59 +246,59 @@ skillCommand
123
246
  .description('Validate a skill definition')
124
247
  .action(async (path) => {
125
248
  const skillPath = path ? resolve(process.cwd(), path) : process.cwd();
126
- const skillFile = existsSync(resolve(skillPath, 'skill.ts'))
127
- ? resolve(skillPath, 'skill.ts')
128
- : existsSync(resolve(skillPath, 'skill.js'))
129
- ? resolve(skillPath, 'skill.js')
130
- : null;
249
+ const skillFile = findSkillFile(skillPath);
131
250
  if (!skillFile) {
132
- log.error('No skill.ts or skill.js found');
251
+ log.error(`No ${SKILL_FILES.join(' / ')} found`);
133
252
  log.dim(`Searched in: ${skillPath}`);
134
253
  process.exit(1);
135
254
  }
136
255
  log.step(`Validating ${chalk.dim(skillFile)}`);
256
+ let exported;
137
257
  try {
138
- const mod = await import(`file://${skillFile}`);
139
- const skill = mod.default ?? mod.skill;
140
- if (!skill) {
141
- log.error('Skill file must export a default or named "skill" export');
142
- process.exit(1);
143
- }
144
- const issues = [];
145
- if (!skill.name || typeof skill.name !== 'string') {
146
- issues.push('Missing or invalid "name" field');
147
- }
148
- if (!skill.tools || !Array.isArray(skill.tools)) {
149
- issues.push('Missing or invalid "tools" array');
150
- }
151
- if (skill.env && Array.isArray(skill.env)) {
152
- for (const envVar of skill.env) {
153
- if (!process.env[envVar]) {
154
- issues.push(`Environment variable not set: ${envVar}`);
155
- }
156
- }
157
- }
158
- if (issues.length > 0) {
159
- log.warn(`Found ${issues.length} issue${issues.length !== 1 ? 's' : ''}:`);
160
- for (const issue of issues) {
161
- console.log(` ${chalk.yellow('!')} ${issue}`);
162
- }
163
- process.exit(1);
164
- }
165
- log.success('Skill is valid');
166
- console.log(` ${chalk.bold('Name')} ${skill.name}`);
167
- console.log(` ${chalk.bold('Tools')} ${skill.tools.length}`);
168
- if (skill.instructions) {
169
- console.log(` ${chalk.bold('Instructions')} ${skill.instructions.length} chars`);
170
- }
258
+ const mod = await importUserModule(skillFile, process.cwd());
259
+ exported = mod.default ?? mod.skill;
171
260
  }
172
261
  catch (err) {
173
262
  log.error(`Failed to load skill: ${err instanceof Error ? err.message : String(err)}`);
174
263
  process.exit(1);
175
264
  }
265
+ if (exported === undefined) {
266
+ log.error('Skill file must export a default or named "skill" export');
267
+ process.exit(1);
268
+ }
269
+ const { skill, issues } = toSkill(exported);
270
+ const warnings = [];
271
+ if (skill) {
272
+ const result = validateSkill({ ...skill, dependencies: undefined });
273
+ issues.push(...result.errors);
274
+ warnings.push(...result.warnings);
275
+ const missingDeps = findMissingDependencies(skill.dependencies ?? [], skillFile);
276
+ if (missingDeps.length > 0) {
277
+ issues.push(`Missing dependencies: ${missingDeps.join(', ')}`);
278
+ }
279
+ }
280
+ for (const warning of warnings) {
281
+ console.log(` ${chalk.yellow('!')} ${warning}`);
282
+ }
283
+ if (!skill || issues.length > 0) {
284
+ log.warn(`Found ${issues.length} issue${issues.length !== 1 ? 's' : ''}:`);
285
+ for (const issue of issues) {
286
+ console.log(` ${chalk.red('✗')} ${issue}`);
287
+ }
288
+ process.exit(1);
289
+ }
290
+ log.success('Skill is valid');
291
+ console.log(` ${chalk.bold('Name')} ${skill.name}`);
292
+ console.log(` ${chalk.bold('Version')} ${skill.version}`);
293
+ console.log(` ${chalk.bold('Tools')} ${skill.tools.length}`);
294
+ if (skill.instructions) {
295
+ console.log(` ${chalk.bold('Instructions')} ${skill.instructions.length} chars`);
296
+ }
176
297
  });
177
- function getTemplate(name, template) {
178
- const camelName = name.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
298
+ export function getTemplate(name, template) {
299
+ const camelName = name.replace(/-([a-z0-9])/g, (_, c) => c.toUpperCase());
300
+ const toolName = name.replace(/-/g, '_');
301
+ const envName = `${name.toUpperCase().replace(/-/g, '_')}_API_KEY`;
179
302
  if (template === 'device') {
180
303
  return {
181
304
  skill: `import { defineSkill } from '@cogitator-ai/core';
@@ -186,15 +309,14 @@ export default defineSkill({
186
309
  version: '1.0.0',
187
310
  description: 'Device control skill',
188
311
  tools: [${camelName}Tool],
189
- instructions: \`Use the ${name} tool when the user asks to interact with their device.\`,
312
+ instructions: \`Use the ${toolName} tool when the user asks to interact with their device.\`,
190
313
  });
191
314
  `,
192
315
  tool: `import { tool } from '@cogitator-ai/core';
193
316
  import { z } from 'zod';
194
- import { execSync } from 'node:child_process';
195
317
 
196
318
  export const ${camelName}Tool = tool({
197
- name: '${name}',
319
+ name: '${toolName}',
198
320
  description: 'Interact with the device',
199
321
  parameters: z.object({
200
322
  action: z.string().describe('The action to perform'),
@@ -216,22 +338,22 @@ export default defineSkill({
216
338
  version: '1.0.0',
217
339
  description: 'API integration skill',
218
340
  tools: [${camelName}Tool],
219
- env: ['${name.toUpperCase().replace(/-/g, '_')}_API_KEY'],
220
- instructions: \`Use the ${name} tool to interact with the ${name} API.\`,
341
+ env: ['${envName}'],
342
+ instructions: \`Use the ${toolName} tool to interact with the ${name} API.\`,
221
343
  });
222
344
  `,
223
345
  tool: `import { tool } from '@cogitator-ai/core';
224
346
  import { z } from 'zod';
225
347
 
226
348
  export const ${camelName}Tool = tool({
227
- name: '${name}',
349
+ name: '${toolName}',
228
350
  description: 'Call the ${name} API',
229
351
  parameters: z.object({
230
352
  query: z.string().describe('The query to send'),
231
353
  }),
232
354
  execute: async ({ query }) => {
233
- const apiKey = process.env.${name.toUpperCase().replace(/-/g, '_')}_API_KEY;
234
- if (!apiKey) throw new Error('API key not configured');
355
+ const apiKey = process.env.${envName};
356
+ if (!apiKey) throw new Error('${envName} is not configured');
235
357
 
236
358
  return { query, result: 'not implemented' };
237
359
  },
@@ -248,15 +370,15 @@ export default defineSkill({
248
370
  version: '1.0.0',
249
371
  description: 'A custom skill',
250
372
  tools: [${camelName}Tool],
251
- instructions: \`Use the ${name} tool when appropriate.\`,
373
+ instructions: \`Use the ${toolName} tool when appropriate.\`,
252
374
  });
253
375
  `,
254
376
  tool: `import { tool } from '@cogitator-ai/core';
255
377
  import { z } from 'zod';
256
378
 
257
379
  export const ${camelName}Tool = tool({
258
- name: '${name}',
259
- description: 'TODO: describe what this tool does',
380
+ name: '${toolName}',
381
+ description: 'Describe what this tool does so the model knows when to call it',
260
382
  parameters: z.object({
261
383
  input: z.string().describe('The input to process'),
262
384
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,eAAO,MAAM,aAAa,SAoEtB,CAAC"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,eAAO,MAAM,aAAa,SA6DtB,CAAC"}
@@ -2,15 +2,15 @@
2
2
  * cogitator status - show service status
3
3
  */
4
4
  import { Command } from 'commander';
5
- import { execSync } from 'node:child_process';
6
5
  import { dirname } from 'node:path';
7
6
  import chalk from 'chalk';
8
7
  import { log } from '../utils/logger.js';
9
- import { findDockerCompose, checkDocker } from '../utils/docker.js';
10
- async function checkOllama() {
8
+ import { findDockerCompose, checkDocker, composePs } from '../utils/docker.js';
9
+ import { listOllamaModels, resolveOllamaUrl } from '../utils/ollama.js';
10
+ async function checkOllama(baseUrl) {
11
11
  try {
12
- const res = await fetch('http://localhost:11434/api/tags');
13
- return res.ok;
12
+ await listOllamaModels(baseUrl, { apiKey: process.env.OLLAMA_API_KEY, timeoutMs: 3000 });
13
+ return true;
14
14
  }
15
15
  catch {
16
16
  return false;
@@ -23,25 +23,17 @@ export const statusCommand = new Command('status')
23
23
  console.log();
24
24
  log.info('Cogitator Services Status');
25
25
  console.log();
26
- if (!checkDocker()) {
27
- log.error('Docker is not running');
26
+ const dockerAvailable = checkDocker();
27
+ if (!dockerAvailable) {
28
+ log.warn('Docker is not running — skipping Docker Compose services');
28
29
  log.dim('Start Docker Desktop or run: sudo systemctl start docker');
29
- process.exit(1);
30
+ console.log();
30
31
  }
31
- const composePath = findDockerCompose();
32
+ const composePath = dockerAvailable ? findDockerCompose() : null;
32
33
  if (composePath) {
33
34
  const composeDir = dirname(composePath);
34
35
  try {
35
- const output = execSync('docker compose ps --format json', {
36
- cwd: composeDir,
37
- encoding: 'utf-8',
38
- stdio: ['pipe', 'pipe', 'pipe'],
39
- });
40
- const services = output
41
- .trim()
42
- .split('\n')
43
- .filter(Boolean)
44
- .map((line) => JSON.parse(line));
36
+ const services = composePs(composeDir);
45
37
  if (services.length === 0) {
46
38
  log.warn('No services running');
47
39
  log.dim('Run "cogitator up" to start services');
@@ -54,21 +46,25 @@ export const statusCommand = new Command('status')
54
46
  const icon = isRunning ? chalk.green('●') : chalk.red('○');
55
47
  const name = svc.Name.padEnd(20);
56
48
  const state = isRunning ? chalk.green(svc.State) : chalk.red(svc.State);
57
- console.log(` ${icon} ${name} ${state} ${chalk.dim(svc.Status)}`);
49
+ const health = svc.Health ? chalk.dim(` (${svc.Health})`) : '';
50
+ console.log(` ${icon} ${name} ${state}${health} ${chalk.dim(svc.Status)}`);
58
51
  }
59
52
  console.log();
60
53
  }
61
54
  }
62
- catch {
63
- log.dim('No docker-compose services found');
55
+ catch (error) {
56
+ log.warn('Failed to query docker compose services');
57
+ log.dim(error instanceof Error ? error.message.split('\n')[0] : String(error));
58
+ console.log();
64
59
  }
65
60
  }
66
61
  console.log(chalk.dim(' External Services:'));
67
62
  console.log();
68
- const ollamaRunning = await checkOllama();
63
+ const ollamaUrl = resolveOllamaUrl();
64
+ const ollamaRunning = await checkOllama(ollamaUrl);
69
65
  const ollamaIcon = ollamaRunning ? chalk.green('●') : chalk.red('○');
70
66
  const ollamaState = ollamaRunning ? chalk.green('running') : chalk.red('stopped');
71
- console.log(` ${ollamaIcon} ${'Ollama'.padEnd(20)} ${ollamaState} ${chalk.dim('localhost:11434')}`);
67
+ console.log(` ${ollamaIcon} ${'Ollama'.padEnd(20)} ${ollamaState} ${chalk.dim(ollamaUrl)}`);
72
68
  console.log();
73
69
  if (!ollamaRunning) {
74
70
  log.dim('Tip: Start Ollama with "ollama serve" or via Docker');
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,8 @@
1
1
  import { Command } from 'commander';
2
+ import { type AssistantConfigOutput } from '@cogitator-ai/channels';
3
+ export declare const RESTART_EXIT_CODE = 78;
4
+ export declare function findAssistantConfig(cwd?: string): string | null;
5
+ export declare function loadAssistantConfig(configPath: string): AssistantConfigOutput;
2
6
  export declare const upCommand: Command;
3
7
  export declare const downCommand: Command;
4
8
  //# sourceMappingURL=up.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"up.d.ts","sourceRoot":"","sources":["../../src/commands/up.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuGpC,eAAO,MAAM,SAAS,SAiHlB,CAAC;AAEL,eAAO,MAAM,WAAW,SAyBpB,CAAC"}
1
+ {"version":3,"file":"up.d.ts","sourceRoot":"","sources":["../../src/commands/up.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,OAAO,EAGL,KAAK,qBAAqB,EAE3B,MAAM,wBAAwB,CAAC;AAKhC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAGpC,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAM9E;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,qBAAqB,CAU7E;AAsND,eAAO,MAAM,SAAS,SA2BnB,CAAC;AAEJ,eAAO,MAAM,WAAW,SAuBpB,CAAC"}