@cogitator-ai/cli 0.5.20 → 0.6.1

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 (99) hide show
  1. package/README.md +98 -40
  2. package/dist/commands/add.d.ts +11 -0
  3. package/dist/commands/add.d.ts.map +1 -0
  4. package/dist/commands/add.js +79 -0
  5. package/dist/commands/add.js.map +1 -0
  6. package/dist/commands/assistant.d.ts.map +1 -1
  7. package/dist/commands/assistant.js +14 -12
  8. package/dist/commands/assistant.js.map +1 -1
  9. package/dist/commands/build.d.ts.map +1 -1
  10. package/dist/commands/build.js +12 -10
  11. package/dist/commands/build.js.map +1 -1
  12. package/dist/commands/daemon.d.ts.map +1 -1
  13. package/dist/commands/daemon.js +17 -13
  14. package/dist/commands/daemon.js.map +1 -1
  15. package/dist/commands/deploy.d.ts +35 -1
  16. package/dist/commands/deploy.d.ts.map +1 -1
  17. package/dist/commands/deploy.js +134 -76
  18. package/dist/commands/deploy.js.map +1 -1
  19. package/dist/commands/dev.d.ts +14 -0
  20. package/dist/commands/dev.d.ts.map +1 -0
  21. package/dist/commands/dev.js +84 -0
  22. package/dist/commands/dev.js.map +1 -0
  23. package/dist/commands/doctor.d.ts +5 -0
  24. package/dist/commands/doctor.d.ts.map +1 -0
  25. package/dist/commands/doctor.js +52 -0
  26. package/dist/commands/doctor.js.map +1 -0
  27. package/dist/commands/eval.d.ts +12 -0
  28. package/dist/commands/eval.d.ts.map +1 -0
  29. package/dist/commands/eval.js +90 -0
  30. package/dist/commands/eval.js.map +1 -0
  31. package/dist/commands/init.d.ts +9 -51
  32. package/dist/commands/init.d.ts.map +1 -1
  33. package/dist/commands/init.js +87 -400
  34. package/dist/commands/init.js.map +1 -1
  35. package/dist/commands/logs.d.ts.map +1 -1
  36. package/dist/commands/logs.js +9 -6
  37. package/dist/commands/logs.js.map +1 -1
  38. package/dist/commands/mcp.d.ts +18 -0
  39. package/dist/commands/mcp.d.ts.map +1 -0
  40. package/dist/commands/mcp.js +155 -0
  41. package/dist/commands/mcp.js.map +1 -0
  42. package/dist/commands/models.d.ts.map +1 -1
  43. package/dist/commands/models.js +43 -15
  44. package/dist/commands/models.js.map +1 -1
  45. package/dist/commands/run.d.ts.map +1 -1
  46. package/dist/commands/run.js +16 -11
  47. package/dist/commands/run.js.map +1 -1
  48. package/dist/commands/skill.d.ts.map +1 -1
  49. package/dist/commands/skill.js +23 -23
  50. package/dist/commands/skill.js.map +1 -1
  51. package/dist/commands/status.d.ts +21 -0
  52. package/dist/commands/status.d.ts.map +1 -1
  53. package/dist/commands/status.js +64 -39
  54. package/dist/commands/status.js.map +1 -1
  55. package/dist/commands/up.d.ts.map +1 -1
  56. package/dist/commands/up.js +26 -24
  57. package/dist/commands/up.js.map +1 -1
  58. package/dist/commands/wizard.d.ts.map +1 -1
  59. package/dist/commands/wizard.js +5 -0
  60. package/dist/commands/wizard.js.map +1 -1
  61. package/dist/index.js +9 -42
  62. package/dist/index.js.map +1 -1
  63. package/dist/program.d.ts +4 -0
  64. package/dist/program.d.ts.map +1 -0
  65. package/dist/program.js +61 -0
  66. package/dist/program.js.map +1 -0
  67. package/dist/utils/add.d.ts +81 -0
  68. package/dist/utils/add.d.ts.map +1 -0
  69. package/dist/utils/add.js +151 -0
  70. package/dist/utils/add.js.map +1 -0
  71. package/dist/utils/cli.d.ts +49 -0
  72. package/dist/utils/cli.d.ts.map +1 -0
  73. package/dist/utils/cli.js +106 -0
  74. package/dist/utils/cli.js.map +1 -0
  75. package/dist/utils/docs.d.ts +39 -0
  76. package/dist/utils/docs.d.ts.map +1 -0
  77. package/dist/utils/docs.js +198 -0
  78. package/dist/utils/docs.js.map +1 -0
  79. package/dist/utils/doctor.d.ts +41 -0
  80. package/dist/utils/doctor.d.ts.map +1 -0
  81. package/dist/utils/doctor.js +378 -0
  82. package/dist/utils/doctor.js.map +1 -0
  83. package/dist/utils/evals.d.ts +50 -0
  84. package/dist/utils/evals.d.ts.map +1 -0
  85. package/dist/utils/evals.js +78 -0
  86. package/dist/utils/evals.js.map +1 -0
  87. package/dist/utils/provider-models.d.ts +8 -2
  88. package/dist/utils/provider-models.d.ts.map +1 -1
  89. package/dist/utils/provider-models.js +32 -52
  90. package/dist/utils/provider-models.js.map +1 -1
  91. package/dist/utils/registry-worker.d.ts +2 -0
  92. package/dist/utils/registry-worker.d.ts.map +1 -0
  93. package/dist/utils/registry-worker.js +35 -0
  94. package/dist/utils/registry-worker.js.map +1 -0
  95. package/dist/utils/registry.d.ts +19 -0
  96. package/dist/utils/registry.d.ts.map +1 -0
  97. package/dist/utils/registry.js +58 -0
  98. package/dist/utils/registry.js.map +1 -0
  99. package/package.json +12 -8
@@ -0,0 +1,50 @@
1
+ import type { CogitatorConfig } from '@cogitator-ai/types';
2
+ /** What `cogitator eval` needs from an `EvalSuite`, checked at runtime on the default export. */
3
+ export interface EvalSuiteLike {
4
+ run(options?: {
5
+ maxCases?: number;
6
+ signal?: AbortSignal;
7
+ }): Promise<EvalSuiteResultLike>;
8
+ }
9
+ export interface EvalSuiteResultLike {
10
+ assertions: Array<{
11
+ name: string;
12
+ passed: boolean;
13
+ message: string;
14
+ }>;
15
+ aggregated: Record<string, {
16
+ name: string;
17
+ mean: number;
18
+ }>;
19
+ stats: {
20
+ total: number;
21
+ errors: number;
22
+ duration: number;
23
+ cost: number;
24
+ };
25
+ report(type: 'console' | 'json', options?: {
26
+ path?: string;
27
+ }): void;
28
+ }
29
+ export declare function isEvalSuite(value: unknown): value is EvalSuiteLike;
30
+ /** The eval files under `dir`, `*.eval.ts` and friends, sorted for a stable order. */
31
+ export declare function findEvalFiles(dir: string): string[];
32
+ /** The eval files to run: the arguments as given, or every file under `evals/`. */
33
+ export declare function resolveEvalFiles(projectDir: string, args: readonly string[]): string[];
34
+ /**
35
+ * The credential the default model is missing, or undefined when its provider
36
+ * has everything it needs. Evals call the model, so without a key they cannot
37
+ * run, and CI on a fork without secrets skips them instead of failing.
38
+ */
39
+ export declare function missingCredential(config: CogitatorConfig): string | undefined;
40
+ export interface SuiteOutcome {
41
+ file: string;
42
+ passed: boolean;
43
+ stats: EvalSuiteResultLike['stats'];
44
+ metrics: Record<string, number>;
45
+ assertions: EvalSuiteResultLike['assertions'];
46
+ }
47
+ /** Whether a finished suite counts as passed: every assertion holds and not every case failed. */
48
+ export declare function suitePassed(result: EvalSuiteResultLike): boolean;
49
+ export declare function outcomeOf(projectDir: string, file: string, result: EvalSuiteResultLike): SuiteOutcome;
50
+ //# sourceMappingURL=evals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evals.d.ts","sourceRoot":"","sources":["../../src/utils/evals.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAI3D,iGAAiG;AACjG,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAC1F;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzE,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACrE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAOlE;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAanD;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAOtF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAc7E;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,UAAU,EAAE,mBAAmB,CAAC,YAAY,CAAC,CAAC;CAC/C;AAED,kGAAkG;AAClG,wBAAgB,WAAW,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAGhE;AAED,wBAAgB,SAAS,CACvB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,mBAAmB,GAC1B,YAAY,CAUd"}
@@ -0,0 +1,78 @@
1
+ import { existsSync, readdirSync, statSync } from 'node:fs';
2
+ import { join, relative, resolve } from 'node:path';
3
+ import { PROVIDER_ENV, preferredEnvName } from '@cogitator-ai/config';
4
+ const EVAL_FILE = /\.eval\.(?:ts|mts|js|mjs)$/;
5
+ export function isEvalSuite(value) {
6
+ return (typeof value === 'object' &&
7
+ value !== null &&
8
+ 'run' in value &&
9
+ typeof value.run === 'function');
10
+ }
11
+ /** The eval files under `dir`, `*.eval.ts` and friends, sorted for a stable order. */
12
+ export function findEvalFiles(dir) {
13
+ if (!existsSync(dir))
14
+ return [];
15
+ const found = [];
16
+ const walk = (current) => {
17
+ for (const entry of readdirSync(current).sort()) {
18
+ if (entry === 'node_modules' || entry.startsWith('.'))
19
+ continue;
20
+ const full = join(current, entry);
21
+ if (statSync(full).isDirectory())
22
+ walk(full);
23
+ else if (EVAL_FILE.test(entry))
24
+ found.push(full);
25
+ }
26
+ };
27
+ walk(dir);
28
+ return found;
29
+ }
30
+ /** The eval files to run: the arguments as given, or every file under `evals/`. */
31
+ export function resolveEvalFiles(projectDir, args) {
32
+ if (args.length === 0)
33
+ return findEvalFiles(join(projectDir, 'evals'));
34
+ return args.flatMap((arg) => {
35
+ const full = resolve(projectDir, arg);
36
+ if (!existsSync(full))
37
+ throw new Error(`No eval file or directory at ${arg}`);
38
+ return statSync(full).isDirectory() ? findEvalFiles(full) : [full];
39
+ });
40
+ }
41
+ /**
42
+ * The credential the default model is missing, or undefined when its provider
43
+ * has everything it needs. Evals call the model, so without a key they cannot
44
+ * run, and CI on a fork without secrets skips them instead of failing.
45
+ */
46
+ export function missingCredential(config) {
47
+ const model = config.llm?.defaultModel;
48
+ const provider = model?.includes('/') ? model.split('/')[0] : config.llm?.defaultProvider;
49
+ if (!provider || !(provider in PROVIDER_ENV))
50
+ return undefined;
51
+ const settings = PROVIDER_ENV[provider];
52
+ const configured = config.llm?.providers?.[provider];
53
+ for (const setting of settings) {
54
+ if (!setting.required)
55
+ continue;
56
+ if (setting.sdkEnv?.some((name) => process.env[name]))
57
+ continue;
58
+ const value = configured?.[setting.field];
59
+ if (value === undefined || value === '')
60
+ return preferredEnvName(setting);
61
+ }
62
+ return undefined;
63
+ }
64
+ /** Whether a finished suite counts as passed: every assertion holds and not every case failed. */
65
+ export function suitePassed(result) {
66
+ const allErrored = result.stats.total > 0 && result.stats.errors === result.stats.total;
67
+ return !allErrored && result.assertions.every((assertion) => assertion.passed);
68
+ }
69
+ export function outcomeOf(projectDir, file, result) {
70
+ return {
71
+ file: relative(projectDir, file),
72
+ passed: suitePassed(result),
73
+ stats: result.stats,
74
+ metrics: Object.fromEntries(Object.entries(result.aggregated).map(([name, m]) => [name, m.mean])),
75
+ assertions: result.assertions,
76
+ };
77
+ }
78
+ //# sourceMappingURL=evals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evals.js","sourceRoot":"","sources":["../../src/utils/evals.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { cloudModelChoices } from 'create-cogitator-app';
1
2
  export type SetupProvider = 'anthropic' | 'openai' | 'google' | 'ollama';
2
3
  export interface ModelOption {
3
4
  label: string;
@@ -5,9 +6,14 @@ export interface ModelOption {
5
6
  hint?: string;
6
7
  }
7
8
  export declare const API_KEY_ENV: Record<Exclude<SetupProvider, 'ollama'>, string>;
8
- export declare const FALLBACK_MODELS: Record<SetupProvider, ModelOption[]>;
9
9
  export declare function isSetupProvider(value: string): value is SetupProvider;
10
10
  export declare function withProviderPrefix(provider: SetupProvider, modelId: string): string;
11
- export declare function fetchProviderModels(provider: Exclude<SetupProvider, 'ollama'>): Promise<ModelOption[]>;
11
+ /**
12
+ * The current models of a cloud provider with their prices, from the catalogue
13
+ * create-cogitator-app offers too, as `provider/model` values.
14
+ */
15
+ export declare function fetchProviderModels(provider: Exclude<SetupProvider, 'ollama'>, options?: Parameters<typeof cloudModelChoices>[1]): Promise<ModelOption[]>;
16
+ /** Small models with reliable tool calling, offered when Ollama has none installed or does not answer. */
17
+ export declare function suggestedOllamaModels(): ModelOption[];
12
18
  export declare function fetchOllamaModelOptions(baseUrl: string, apiKey?: string): Promise<ModelOption[]>;
13
19
  //# sourceMappingURL=provider-models.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider-models.d.ts","sourceRoot":"","sources":["../../src/utils/provider-models.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEzE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,MAAM,CAIxE,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,aAAa,EAAE,WAAW,EAAE,CAuBhE,CAAC;AAEF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,aAAa,CAErE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnF;AAOD,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,GACzC,OAAO,CAAC,WAAW,EAAE,CAAC,CAwBxB;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,EAAE,CAAC,CAYxB"}
1
+ {"version":3,"file":"provider-models.d.ts","sourceRoot":"","sources":["../../src/utils/provider-models.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAKlB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEzE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAQD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,MAAM,CAIxE,CAAC;AAEF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,aAAa,CAErE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnF;AAOD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,EAC1C,OAAO,GAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAM,GACpD,OAAO,CAAC,WAAW,EAAE,CAAC,CAOxB;AAED,0GAA0G;AAC1G,wBAAgB,qBAAqB,IAAI,WAAW,EAAE,CAOrD;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,EAAE,CAAC,CAYxB"}
@@ -1,33 +1,15 @@
1
- import { ModelRegistry } from '@cogitator-ai/models';
1
+ import { cloudModelChoices, defaultModel, OLLAMA_SUGGESTED_MODELS, PROVIDER_INFO, } from 'create-cogitator-app';
2
2
  import { listOllamaModels } from './ollama.js';
3
+ function envKeyOf(provider) {
4
+ const key = PROVIDER_INFO[provider].envKey;
5
+ if (!key)
6
+ throw new Error(`${provider} has no API key variable`);
7
+ return key;
8
+ }
3
9
  export const API_KEY_ENV = {
4
- anthropic: 'ANTHROPIC_API_KEY',
5
- openai: 'OPENAI_API_KEY',
6
- google: 'GOOGLE_API_KEY',
7
- };
8
- export const FALLBACK_MODELS = {
9
- anthropic: [
10
- { label: 'Claude Sonnet 5.5', value: 'anthropic/claude-sonnet-5-5' },
11
- { label: 'Claude Opus 5.5', value: 'anthropic/claude-opus-5-5' },
12
- { label: 'Claude Haiku 4.5', value: 'anthropic/claude-haiku-4-5' },
13
- ],
14
- openai: [
15
- { label: 'GPT-6.1 Sol', value: 'openai/gpt-6.1-sol' },
16
- { label: 'GPT-6 Astra', value: 'openai/gpt-6-astra' },
17
- { label: 'GPT-6 Luna', value: 'openai/gpt-6-luna' },
18
- ],
19
- google: [
20
- { label: 'Gemini 3.8 Flash', value: 'google/gemini-3.8-flash' },
21
- { label: 'Gemini 3.1 Pro Preview', value: 'google/gemini-3.1-pro-preview' },
22
- { label: 'Gemini 3.5 Flash-Lite', value: 'google/gemini-3.5-flash-lite' },
23
- ],
24
- ollama: [
25
- { label: 'Qwen3 8B', value: 'ollama/qwen3:8b' },
26
- { label: 'Qwen3.5 9B', value: 'ollama/qwen3.5:9b' },
27
- { label: 'Llama 3.1 8B', value: 'ollama/llama3.1:8b' },
28
- { label: 'Gemma 3 4B', value: 'ollama/gemma3:4b' },
29
- { label: 'Mistral 7B', value: 'ollama/mistral:7b' },
30
- ],
10
+ anthropic: envKeyOf('anthropic'),
11
+ openai: envKeyOf('openai'),
12
+ google: envKeyOf('google'),
31
13
  };
32
14
  export function isSetupProvider(value) {
33
15
  return value === 'anthropic' || value === 'openai' || value === 'google' || value === 'ollama';
@@ -40,34 +22,32 @@ function formatBytes(bytes) {
40
22
  return `${(bytes / (1024 * 1024)).toFixed(0)} MB`;
41
23
  return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;
42
24
  }
43
- export async function fetchProviderModels(provider) {
44
- try {
45
- const registry = new ModelRegistry({ fallbackToBuiltin: true });
46
- await registry.initialize();
47
- let models = registry.listModels({
48
- provider,
49
- supportsTools: true,
50
- excludeDeprecated: true,
51
- });
52
- if (provider === 'google') {
53
- models = models.filter((m) => m.id.includes('gemini'));
54
- }
55
- if (models.length === 0)
56
- return FALLBACK_MODELS[provider];
57
- return models.map((m) => ({
58
- label: m.displayName,
59
- value: withProviderPrefix(provider, m.id),
60
- }));
61
- }
62
- catch {
63
- return FALLBACK_MODELS[provider];
64
- }
25
+ /**
26
+ * The current models of a cloud provider with their prices, from the catalogue
27
+ * create-cogitator-app offers too, as `provider/model` values.
28
+ */
29
+ export async function fetchProviderModels(provider, options = {}) {
30
+ const { choices } = await cloudModelChoices(provider, options);
31
+ return choices.map((choice) => ({
32
+ label: choice.label,
33
+ value: withProviderPrefix(provider, choice.value),
34
+ ...(choice.hint && { hint: choice.hint }),
35
+ }));
36
+ }
37
+ /** Small models with reliable tool calling, offered when Ollama has none installed or does not answer. */
38
+ export function suggestedOllamaModels() {
39
+ const recommended = defaultModel('ollama');
40
+ return OLLAMA_SUGGESTED_MODELS.map((name) => ({
41
+ label: name,
42
+ value: `ollama/${name}`,
43
+ hint: name === recommended ? 'recommended, pull it first' : 'pull it first',
44
+ }));
65
45
  }
66
46
  export async function fetchOllamaModelOptions(baseUrl, apiKey) {
67
47
  try {
68
48
  const models = await listOllamaModels(baseUrl, { apiKey });
69
49
  if (models.length === 0)
70
- return FALLBACK_MODELS.ollama;
50
+ return suggestedOllamaModels();
71
51
  return models.map((m) => ({
72
52
  label: m.name,
73
53
  value: `ollama/${m.name}`,
@@ -75,7 +55,7 @@ export async function fetchOllamaModelOptions(baseUrl, apiKey) {
75
55
  }));
76
56
  }
77
57
  catch {
78
- return FALLBACK_MODELS.ollama;
58
+ return suggestedOllamaModels();
79
59
  }
80
60
  }
81
61
  //# sourceMappingURL=provider-models.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider-models.js","sourceRoot":"","sources":["../../src/utils/provider-models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-models.js","sourceRoot":"","sources":["../../src/utils/provider-models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=registry-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-worker.d.ts","sourceRoot":"","sources":["../../src/utils/registry-worker.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import { join } from 'node:path';
2
+ import { loadProjectEnv } from './doctor.js';
3
+ import { importUserModule } from './module-loader.js';
4
+ import { describeRegistry, REGISTRY_PATH } from './registry.js';
5
+ /**
6
+ * Runs in a child process of `inspectRegistry`: imports the project's
7
+ * registry, sends its description to the parent and exits.
8
+ */
9
+ async function main() {
10
+ const projectDir = process.argv[2] ?? process.cwd();
11
+ let message;
12
+ let module;
13
+ try {
14
+ loadProjectEnv(projectDir);
15
+ module = await importUserModule(join(projectDir, REGISTRY_PATH), projectDir);
16
+ message = { ok: true, registry: describeRegistry(module) };
17
+ }
18
+ catch (error) {
19
+ message = { ok: false, error: error instanceof Error ? error.message : String(error) };
20
+ }
21
+ await new Promise((resolve) => process.send?.(message, () => resolve()) ?? resolve());
22
+ const runtime = module?.cogitator;
23
+ if (typeof runtime === 'object' &&
24
+ runtime !== null &&
25
+ 'close' in runtime &&
26
+ typeof runtime.close === 'function') {
27
+ await Promise.race([
28
+ runtime.close().catch(() => undefined),
29
+ new Promise((resolve) => setTimeout(resolve, 5_000).unref()),
30
+ ]);
31
+ }
32
+ process.exit(0);
33
+ }
34
+ void main();
35
+ //# sourceMappingURL=registry-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-worker.js","sourceRoot":"","sources":["../../src/utils/registry-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAA0B,MAAM,eAAe,CAAC;AAExF;;;GAGG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACpD,IAAI,OAA0B,CAAC;IAC/B,IAAI,MAA2C,CAAC;IAChD,IAAI,CAAC;QACH,cAAc,CAAC,UAAU,CAAC,CAAC;QAC3B,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,UAAU,CAAC,CAAC;QAC7E,OAAO,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACzF,CAAC;IACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IAC5F,MAAM,OAAO,GAAG,MAAM,EAAE,SAAS,CAAC;IAClC,IACE,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,KAAK,IAAI;QAChB,OAAO,IAAI,OAAO;QAClB,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EACnC,CAAC;QACD,MAAM,OAAO,CAAC,IAAI,CAAC;YAChB,OAAO,CAAC,KAA6B,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;YAC/D,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;SAC7D,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,IAAI,EAAE,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type RegistryInfo } from '@cogitator-ai/studio';
2
+ export { describeRegistry, REGISTRY_PATH } from '@cogitator-ai/studio';
3
+ export type { AgentInfo, RegistryInfo, SwarmInfo, ToolInfo, WorkflowInfo, } from '@cogitator-ai/studio';
4
+ /** What the inspection child process sends back. */
5
+ export type InspectionMessage = {
6
+ ok: true;
7
+ registry: RegistryInfo;
8
+ } | {
9
+ ok: false;
10
+ error: string;
11
+ };
12
+ /**
13
+ * Loads the registry of the project in `projectDir` in a child process and
14
+ * describes it. A fresh process sees the code as it is now, keeps the
15
+ * project's output and connections away from the caller, and is killed when
16
+ * it takes longer than `timeoutMs`.
17
+ */
18
+ export declare function inspectRegistry(projectDir: string, timeoutMs?: number): Promise<RegistryInfo>;
19
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACvE,YAAY,EACV,SAAS,EACT,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,YAAY,GACb,MAAM,sBAAsB,CAAC;AAE9B,oDAAoD;AACpD,MAAM,MAAM,iBAAiB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAYpG;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CA0C7F"}
@@ -0,0 +1,58 @@
1
+ import { fork } from 'node:child_process';
2
+ import { existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { createRequire } from 'node:module';
5
+ import { fileURLToPath, pathToFileURL } from 'node:url';
6
+ import { REGISTRY_PATH } from '@cogitator-ai/studio';
7
+ export { describeRegistry, REGISTRY_PATH } from '@cogitator-ai/studio';
8
+ function workerEntry() {
9
+ const compiled = fileURLToPath(new URL('./registry-worker.js', import.meta.url));
10
+ if (existsSync(compiled))
11
+ return { path: compiled, execArgv: [] };
12
+ const tsx = pathToFileURL(createRequire(import.meta.url).resolve('tsx')).href;
13
+ return {
14
+ path: fileURLToPath(new URL('./registry-worker.ts', import.meta.url)),
15
+ execArgv: ['--import', tsx],
16
+ };
17
+ }
18
+ /**
19
+ * Loads the registry of the project in `projectDir` in a child process and
20
+ * describes it. A fresh process sees the code as it is now, keeps the
21
+ * project's output and connections away from the caller, and is killed when
22
+ * it takes longer than `timeoutMs`.
23
+ */
24
+ export function inspectRegistry(projectDir, timeoutMs = 60_000) {
25
+ if (!existsSync(join(projectDir, REGISTRY_PATH))) {
26
+ return Promise.reject(new Error(`${REGISTRY_PATH} not found in ${projectDir}: projects from create-cogitator-app register their agents there`));
27
+ }
28
+ const entry = workerEntry();
29
+ return new Promise((resolve, reject) => {
30
+ const child = fork(entry.path, [projectDir], {
31
+ cwd: projectDir,
32
+ execArgv: entry.execArgv,
33
+ stdio: ['ignore', 'ignore', 'pipe', 'ipc'],
34
+ });
35
+ let stderr = '';
36
+ let settled = false;
37
+ const settle = (action) => {
38
+ if (settled)
39
+ return;
40
+ settled = true;
41
+ clearTimeout(timer);
42
+ action();
43
+ };
44
+ const timer = setTimeout(() => {
45
+ child.kill('SIGKILL');
46
+ settle(() => reject(new Error(`Loading ${REGISTRY_PATH} took longer than ${timeoutMs} ms`)));
47
+ }, timeoutMs);
48
+ child.stderr?.on('data', (chunk) => (stderr += chunk.toString()));
49
+ child.once('message', (message) => {
50
+ settle(() => (message.ok ? resolve(message.registry) : reject(new Error(message.error))));
51
+ });
52
+ child.once('error', (error) => settle(() => reject(error)));
53
+ child.once('exit', (code) => {
54
+ settle(() => reject(new Error(`Loading ${REGISTRY_PATH} failed (exit ${code ?? 'signal'})${stderr ? `:\n${stderr.trim().split('\n').slice(-20).join('\n')}` : ''}`)));
55
+ });
56
+ });
57
+ }
58
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cogitator-ai/cli",
3
- "version": "0.5.20",
3
+ "version": "0.6.1",
4
4
  "description": "CLI for Cogitator AI Agent Runtime",
5
5
  "keywords": [
6
6
  "cogitator",
@@ -33,18 +33,22 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "@clack/prompts": "^1.8.1",
36
- "@cogitator-ai/channels": "0.9.0",
37
- "@cogitator-ai/config": "0.12.0",
38
- "@cogitator-ai/core": "0.34.0",
36
+ "@cogitator-ai/channels": "0.9.2",
37
+ "@cogitator-ai/config": "0.12.2",
38
+ "@cogitator-ai/core": "0.36.0",
39
+ "@cogitator-ai/deploy": "0.6.1",
40
+ "@cogitator-ai/mcp": "19.3.2",
41
+ "@cogitator-ai/memory": "0.12.2",
39
42
  "@cogitator-ai/models": "18.3.0",
40
- "@cogitator-ai/deploy": "0.5.0",
41
- "@cogitator-ai/memory": "0.12.0",
42
- "@cogitator-ai/types": "0.36.0",
43
+ "@cogitator-ai/studio": "0.1.1",
44
+ "@cogitator-ai/types": "0.38.0",
45
+ "better-sqlite3": "^13.0.3",
43
46
  "chalk": "^6.0.1",
44
47
  "commander": "^15.0.0",
48
+ "create-cogitator-app": "^0.5.0",
45
49
  "ora": "^9.4.1",
46
50
  "yaml": "^2.9.1",
47
- "better-sqlite3": "^13.0.3"
51
+ "zod": "^4.6.5"
48
52
  },
49
53
  "devDependencies": {
50
54
  "@types/node": "^22.20.4",