@cogitator-ai/cli 0.5.20 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +98 -40
- package/dist/commands/add.d.ts +11 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +79 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/assistant.d.ts.map +1 -1
- package/dist/commands/assistant.js +14 -12
- package/dist/commands/assistant.js.map +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +12 -10
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +17 -13
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/deploy.d.ts +35 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +134 -76
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.d.ts +14 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +84 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/doctor.d.ts +5 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +52 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/eval.d.ts +12 -0
- package/dist/commands/eval.d.ts.map +1 -0
- package/dist/commands/eval.js +90 -0
- package/dist/commands/eval.js.map +1 -0
- package/dist/commands/init.d.ts +9 -51
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +87 -400
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +9 -6
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/mcp.d.ts +18 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +155 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/models.d.ts.map +1 -1
- package/dist/commands/models.js +43 -15
- package/dist/commands/models.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +16 -11
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/skill.d.ts.map +1 -1
- package/dist/commands/skill.js +23 -23
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/status.d.ts +21 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +64 -39
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +26 -24
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/wizard.d.ts.map +1 -1
- package/dist/commands/wizard.js +5 -0
- package/dist/commands/wizard.js.map +1 -1
- package/dist/index.js +9 -42
- package/dist/index.js.map +1 -1
- package/dist/program.d.ts +4 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +61 -0
- package/dist/program.js.map +1 -0
- package/dist/utils/add.d.ts +81 -0
- package/dist/utils/add.d.ts.map +1 -0
- package/dist/utils/add.js +151 -0
- package/dist/utils/add.js.map +1 -0
- package/dist/utils/cli.d.ts +49 -0
- package/dist/utils/cli.d.ts.map +1 -0
- package/dist/utils/cli.js +106 -0
- package/dist/utils/cli.js.map +1 -0
- package/dist/utils/docs.d.ts +39 -0
- package/dist/utils/docs.d.ts.map +1 -0
- package/dist/utils/docs.js +198 -0
- package/dist/utils/docs.js.map +1 -0
- package/dist/utils/doctor.d.ts +41 -0
- package/dist/utils/doctor.d.ts.map +1 -0
- package/dist/utils/doctor.js +378 -0
- package/dist/utils/doctor.js.map +1 -0
- package/dist/utils/evals.d.ts +50 -0
- package/dist/utils/evals.d.ts.map +1 -0
- package/dist/utils/evals.js +78 -0
- package/dist/utils/evals.js.map +1 -0
- package/dist/utils/provider-models.d.ts +8 -2
- package/dist/utils/provider-models.d.ts.map +1 -1
- package/dist/utils/provider-models.js +32 -52
- package/dist/utils/provider-models.js.map +1 -1
- package/dist/utils/registry-worker.d.ts +2 -0
- package/dist/utils/registry-worker.d.ts.map +1 -0
- package/dist/utils/registry-worker.js +35 -0
- package/dist/utils/registry-worker.js.map +1 -0
- package/dist/utils/registry.d.ts +19 -0
- package/dist/utils/registry.d.ts.map +1 -0
- package/dist/utils/registry.js +58 -0
- package/dist/utils/registry.js.map +1 -0
- package/package.json +12 -8
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @cogitator-ai/cli
|
|
2
2
|
|
|
3
|
-
Command-line interface for the Cogitator AI agent runtime. Scaffold
|
|
3
|
+
Command-line interface for the Cogitator AI agent runtime. Scaffold projects and grow them with `cogitator add`, debug them in Cogitator Studio, give coding agents the docs over MCP, check that a project can run, score it with evals, run assistants in the foreground or as a background service, chat with agents from the terminal, manage Ollama models and Docker services, and deploy.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -26,9 +26,10 @@ cogitator wizard # answers → cogitator.yml + .env
|
|
|
26
26
|
cogitator up # run it
|
|
27
27
|
|
|
28
28
|
# B) Code-first project
|
|
29
|
-
cogitator init my-assistant
|
|
29
|
+
npx create-cogitator-app my-assistant # or: cogitator init my-assistant for a messaging bot
|
|
30
30
|
cd my-assistant
|
|
31
|
-
pnpm dev
|
|
31
|
+
pnpm dev
|
|
32
|
+
cogitator dev # Cogitator Studio: chat, traces, approvals, workflows, forks
|
|
32
33
|
```
|
|
33
34
|
|
|
34
35
|
Quick one-off chat with any model:
|
|
@@ -41,59 +42,111 @@ cogitator run -m ollama/llama3.1:8b "What is the capital of France?"
|
|
|
41
42
|
|
|
42
43
|
## Commands
|
|
43
44
|
|
|
44
|
-
| Command
|
|
45
|
-
|
|
|
46
|
-
| `cogitator init [name]`
|
|
47
|
-
| `cogitator
|
|
48
|
-
| `cogitator
|
|
49
|
-
| `cogitator
|
|
50
|
-
| `cogitator
|
|
51
|
-
| `cogitator
|
|
52
|
-
| `cogitator
|
|
53
|
-
| `cogitator
|
|
54
|
-
| `cogitator
|
|
55
|
-
| `cogitator
|
|
56
|
-
| `cogitator
|
|
57
|
-
| `cogitator
|
|
58
|
-
| `cogitator
|
|
59
|
-
|
|
60
|
-
|
|
45
|
+
| Command | Description |
|
|
46
|
+
| -------------------------- | --------------------------------------------------------------------------------------------------------------- |
|
|
47
|
+
| `cogitator init [name]` | Scaffold a messaging assistant project (the `channels` preset of create-cogitator-app) |
|
|
48
|
+
| `cogitator add [features]` | Add rag, mcp, workflows, evals, memory, deploy and the other generated features to a project |
|
|
49
|
+
| `cogitator dev` | Open Cogitator Studio for the project |
|
|
50
|
+
| `cogitator mcp` | Serve the Cogitator docs and the project to coding agents over MCP (stdio) |
|
|
51
|
+
| `cogitator doctor` | Check that a project can run: Node, packages, config, keys, models and services |
|
|
52
|
+
| `cogitator eval [files]` | Run the eval suites and fail when an assertion fails |
|
|
53
|
+
| `cogitator wizard` | Interactive setup that writes `cogitator.yml` + `.env` |
|
|
54
|
+
| `cogitator up` | Run the assistant from `cogitator.yml`, or start Docker services |
|
|
55
|
+
| `cogitator down` | Stop Docker Compose services |
|
|
56
|
+
| `cogitator assistant` | Run a gateway module (`src/gateway.ts`) with a live dashboard |
|
|
57
|
+
| `cogitator run [msg]` | Chat with an agent (one-shot or interactive REPL) |
|
|
58
|
+
| `cogitator build` | Bundle a gateway into a self-starting `dist/cogitator.mjs` |
|
|
59
|
+
| `cogitator daemon <cmd>` | Run in the background / install as a launchd or systemd service |
|
|
60
|
+
| `cogitator skill <cmd>` | Create, validate, install and remove skills |
|
|
61
|
+
| `cogitator models` | List or pull Ollama models |
|
|
62
|
+
| `cogitator status` | Show Docker Compose and Ollama status (alias: `ps`) |
|
|
63
|
+
| `cogitator logs` | View Docker Compose service logs |
|
|
64
|
+
| `cogitator deploy` | Deploy with Docker or Fly.io (see [`@cogitator-ai/deploy`](https://www.npmjs.com/package/@cogitator-ai/deploy)) |
|
|
65
|
+
|
|
66
|
+
Every command ends with examples in its `--help`.
|
|
67
|
+
|
|
68
|
+
### Output and exit codes
|
|
69
|
+
|
|
70
|
+
Every command exits with `0` when it did what was asked, `1` when it could not (a failed check, deploy or install, a missing service) and `2` when the command line is wrong (an unknown option, command or value, with the closest valid name). Failures print the message and what to do about it on stderr; `COGITATOR_DEBUG=1` adds the stack trace. With `--json` (`add`, `doctor`, `eval`, `models`, `status`, `deploy`) the result goes to stdout as JSON, and a failure as `{ "ok": false, "error": { "message", "exitCode", "hints" } }`.
|
|
61
71
|
|
|
62
72
|
---
|
|
63
73
|
|
|
64
74
|
### cogitator init
|
|
65
75
|
|
|
66
|
-
Creates a
|
|
76
|
+
Creates a messaging assistant project: the `channels` preset of [create-cogitator-app](https://www.npmjs.com/package/create-cogitator-app), generated by the same engine, with the provider, model, channels and memory you choose.
|
|
67
77
|
|
|
68
78
|
```bash
|
|
69
79
|
cogitator init my-assistant # prompts for provider, model, channels, memory
|
|
70
|
-
cogitator init my-assistant --no-install
|
|
80
|
+
cogitator init my-assistant --no-install --no-git --no-telemetry
|
|
71
81
|
```
|
|
72
82
|
|
|
73
|
-
The prompts cover the LLM provider (Anthropic, OpenAI, Google or Ollama) and model, channels (Telegram, Discord, Slack, WebChat) with their tokens, and the memory adapter. The project
|
|
83
|
+
The prompts cover the LLM provider (Anthropic, OpenAI, Google or Ollama) and model, channels (Telegram, Discord, Slack, WebChat) with their tokens, and the memory adapter (SQLite, in-memory or Postgres). Tokens and keys go to `.env` (mode 600). The project is the same as `npx create-cogitator-app my-assistant --preset channels`: the registry in `src/cogitator.ts`, tests on a mocked model, `cogitator.yml`, `AGENTS.md`, Cogitator Studio and the rest. The assistant is `src/gateway.ts`, the `gateway` export that `cogitator assistant`, `cogitator build` and `cogitator daemon` run, and `src/index.ts` starts it for `dev` and `start`.
|
|
74
84
|
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
### cogitator add
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
cogitator add rag # answers grounded in docs/
|
|
91
|
+
cogitator add workflows evals # two features at once
|
|
92
|
+
cogitator add --memory postgres # switch the memory adapter
|
|
93
|
+
cogitator add --deploy docker --dry-run # every diff, nothing written
|
|
94
|
+
cogitator add --agent claude # MCP config and skill for Claude Code
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Grows a project created by create-cogitator-app or `cogitator init` with the same feature modules that generated it: the project and its extended spec are both planned, and what the addition changes between them is merged into the files on disk. Files still as generated (by the hashes in `.cogitator/scaffold.json`) take the change; `package.json`, `cogitator.yml`, `docker-compose.yml` and `pnpm-workspace.yaml` merge key by key, keeping your values and comments; the managed block of `AGENTS.md` is rewritten and the rest kept; `.gitignore` gains missing lines; an edited README is left with a note. Any other file you edited that the addition changes is a conflict: nothing is written, and the change is printed as a diff. Adding what the project has is a no-op. New dependencies are installed (`--no-install` skips it), the written files formatted, and the new spec and command recorded in `package.json`.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
### cogitator dev
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
cogitator dev # http://localhost:4321, opens the browser
|
|
105
|
+
cogitator dev --port 4400 --no-open
|
|
106
|
+
cogitator dev --host 0.0.0.0 # reachable from your network, with a token in the URL
|
|
75
107
|
```
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
108
|
+
|
|
109
|
+
Opens [Cogitator Studio](https://www.npmjs.com/package/@cogitator-ai/studio) for the project in the current directory: chat with every agent of `src/cogitator.ts` (streamed answers, reasoning, tool calls, stop, threads), approve tool calls that need it, read the waterfall trace of each run with nested agents, tokens and cost per model call, run workflows with live node statuses and rerun them from a node, and fork a run from any step with a changed input or tool result. The project runs in a child process that reloads when you save (`--no-watch` turns it off). History lives in `.cogitator/studio/`.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
### cogitator mcp
|
|
114
|
+
|
|
115
|
+
A stdio MCP server for Claude Code, Cursor and Codex, configured by `create-cogitator-app --agent` or `cogitator add --agent`:
|
|
116
|
+
|
|
117
|
+
| Tool | What it does |
|
|
118
|
+
| ----------------- | ------------------------------------------------------------------------------------------ |
|
|
119
|
+
| `search_docs` | Searches the docs bundled with the installed `@cogitator-ai/core`, best passages first |
|
|
120
|
+
| `read_doc` | Reads a page, or one section with `path#section` |
|
|
121
|
+
| `inspect_project` | The agents (model, instructions, tool schemas), workflows and swarms of `src/cogitator.ts` |
|
|
122
|
+
| `check_project` | Runs `cogitator doctor`, offline unless asked |
|
|
123
|
+
|
|
124
|
+
The registry loads in a child process, so the agent always sees the current code and the project's own output never reaches the MCP stream. The server finds the project from a subdirectory, or takes `--project <dir>`.
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
### cogitator doctor
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
cogitator doctor # Node, packages, cogitator.yml, keys, services, models
|
|
132
|
+
cogitator doctor --offline # no provider or service probes
|
|
133
|
+
cogitator doctor --json
|
|
86
134
|
```
|
|
87
135
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
| In-memory | `InMemoryAdapter` | - | Lost on restart |
|
|
92
|
-
| PostgreSQL | `PostgresAdapter` | `pg` | Connection string in `DATABASE_URL` |
|
|
136
|
+
Checks the Node version against `engines`, the installed `@cogitator-ai/*` packages, `cogitator.yml`, the variables `src/env.ts` requires, the provider key (with a cheap call), Redis, Postgres and the other services the config uses, and the Ollama models. Each problem comes with the fix; it exits `1` when one fails.
|
|
137
|
+
|
|
138
|
+
---
|
|
93
139
|
|
|
94
|
-
|
|
140
|
+
### cogitator eval
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
cogitator eval # every evals/*.eval.ts
|
|
144
|
+
cogitator eval evals/answers.eval.ts --max-cases 5
|
|
145
|
+
cogitator eval --json --report eval-report.json # for CI
|
|
146
|
+
cogitator eval --skip-without-key # exit 0 on forks without the key
|
|
147
|
+
```
|
|
95
148
|
|
|
96
|
-
|
|
149
|
+
Runs eval suites (files exporting an `EvalSuite` from `@cogitator-ai/evals` as default) and exits `1` when an assertion fails or every case errored.
|
|
97
150
|
|
|
98
151
|
---
|
|
99
152
|
|
|
@@ -247,6 +300,7 @@ Local skills live in `./skills`, global ones in `~/.cogitator/skills`. Skill nam
|
|
|
247
300
|
cogitator models # list installed models
|
|
248
301
|
cogitator models --pull qwen2.5:0.5b # pull with progress
|
|
249
302
|
cogitator models --url http://gpu-box:11434
|
|
303
|
+
cogitator models --json # name, size and date of each model
|
|
250
304
|
```
|
|
251
305
|
|
|
252
306
|
The Ollama URL defaults to `OLLAMA_BASE_URL`, then `OLLAMA_URL`, then `OLLAMA_HOST` (read like Ollama reads it: port 11434 when none is given, `0.0.0.0` as `localhost`), then `http://localhost:11434`, `OLLAMA_API_KEY` is sent as a bearer token. Pull errors reported by Ollama (e.g. unknown model) fail the command.
|
|
@@ -257,6 +311,7 @@ The Ollama URL defaults to `OLLAMA_BASE_URL`, then `OLLAMA_URL`, then `OLLAMA_HO
|
|
|
257
311
|
|
|
258
312
|
```bash
|
|
259
313
|
cogitator status # compose services (state, health) + Ollama reachability
|
|
314
|
+
cogitator status --json
|
|
260
315
|
cogitator logs ollama -f -t -n 50
|
|
261
316
|
cogitator logs -n all
|
|
262
317
|
```
|
|
@@ -276,6 +331,7 @@ cogitator logs -n all
|
|
|
276
331
|
|
|
277
332
|
```bash
|
|
278
333
|
cogitator deploy --dry-run # analyze + preflight only
|
|
334
|
+
cogitator deploy --dry-run --json # the plan for scripts and CI: secrets, services, warnings, checks
|
|
279
335
|
cogitator deploy # docker: build image, start compose stack
|
|
280
336
|
cogitator deploy --target fly --region ord
|
|
281
337
|
cogitator deploy --registry ghcr.io/acme # build + push (use --no-push to skip)
|
|
@@ -291,6 +347,7 @@ cogitator deploy destroy
|
|
|
291
347
|
| `--no-push` | Skip pushing even when a registry is set |
|
|
292
348
|
| `--dry-run` | Show the plan without executing |
|
|
293
349
|
| `--region <region>` | Deploy region (Fly.io) |
|
|
350
|
+
| `--json` | The plan, result or status as JSON |
|
|
294
351
|
|
|
295
352
|
The model, memory and `deploy:` section all come from one config file: the `-c` file, else the first of `cogitator.yml`, `cogitator.yaml`, `.cogitator.yml`, `.cogitator.yaml`. The plan lists the kind (server or worker), detected services (marked as not provisioned on Fly, where `REDIS_URL` / `DATABASE_URL` are required instead), volumes, required secrets (read from the environment or the project's `.env`), warnings and preflight checks. On Docker the deploy only succeeds when the app container keeps running after it starts, otherwise its last log lines are shown. See [`@cogitator-ai/deploy`](https://www.npmjs.com/package/@cogitator-ai/deploy) and the [deploy guide](https://cogitator.app/docs/deployment/deploy-package) for details.
|
|
296
353
|
|
|
@@ -306,6 +363,7 @@ The model, memory and `deploy:` section all come from one config file: the `-c`
|
|
|
306
363
|
| `OLLAMA_API_KEY` | `run`, `models`, `wizard` | Ollama Cloud / authenticated Ollama |
|
|
307
364
|
| `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GOOGLE_API_KEY` | `run`, `init`, `wizard` | Provider keys |
|
|
308
365
|
| `COGITATOR_DEBUG` | all | Print stack traces |
|
|
366
|
+
| `COGITATOR_TELEMETRY_DISABLED`, `DO_NOT_TRACK` | `init` | Send no anonymous usage event |
|
|
309
367
|
|
|
310
368
|
See [`@cogitator-ai/config`](https://www.npmjs.com/package/@cogitator-ai/config) and the [configuration guide](https://cogitator.app/docs/getting-started/configuration) for every `COGITATOR_*` variable.
|
|
311
369
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { type AddFlags } from '../utils/add.js';
|
|
3
|
+
export interface AddCommandFlags extends AddFlags {
|
|
4
|
+
dryRun?: boolean;
|
|
5
|
+
json?: boolean;
|
|
6
|
+
install?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/** Adds features to the project in `directory` and resolves with the exit code. */
|
|
9
|
+
export declare function runAdd(directory: string, features: readonly string[], flags: AddCommandFlags): Promise<number>;
|
|
10
|
+
export declare const addCommand: Command;
|
|
11
|
+
//# sourceMappingURL=add.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,iBAAiB,CAAC;AAIzB,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AASD,mFAAmF;AACnF,wBAAsB,MAAM,CAC1B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,MAAM,CAAC,CAmCjB;AAMD,eAAO,MAAM,UAAU,SA6BnB,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { addToProject, changesDependencies, FEATURES, installCommand, planAdd, silentLogger, } from 'create-cogitator-app';
|
|
4
|
+
import { addChangesFrom, addPlanJson, formatAddPlan, formatConflicts, } from '../utils/add.js';
|
|
5
|
+
import { examplesHelp } from '../utils/cli.js';
|
|
6
|
+
import { log } from '../utils/logger.js';
|
|
7
|
+
const consoleLogger = {
|
|
8
|
+
start: (message) => log.step(message),
|
|
9
|
+
done: (message) => log.success(message),
|
|
10
|
+
fail: (message) => log.error(message),
|
|
11
|
+
warn: (message) => log.warn(message),
|
|
12
|
+
};
|
|
13
|
+
/** Adds features to the project in `directory` and resolves with the exit code. */
|
|
14
|
+
export async function runAdd(directory, features, flags) {
|
|
15
|
+
const changes = addChangesFrom(features, flags);
|
|
16
|
+
const plan = planAdd(directory, changes);
|
|
17
|
+
const refused = plan.conflicts.length > 0;
|
|
18
|
+
if (flags.dryRun || refused || plan.upToDate) {
|
|
19
|
+
if (flags.json)
|
|
20
|
+
console.log(JSON.stringify(addPlanJson(plan), null, 2));
|
|
21
|
+
else
|
|
22
|
+
console.log(refused ? formatConflicts(plan) : formatAddPlan(plan, { diffs: true }));
|
|
23
|
+
return refused ? 1 : 0;
|
|
24
|
+
}
|
|
25
|
+
const result = await addToProject(directory, changes, {
|
|
26
|
+
install: flags.install !== false,
|
|
27
|
+
log: flags.json ? silentLogger : consoleLogger,
|
|
28
|
+
});
|
|
29
|
+
if (flags.json) {
|
|
30
|
+
console.log(JSON.stringify(addPlanJson(result.plan, result), null, 2));
|
|
31
|
+
return result.install.status === 'failed' ? 1 : 0;
|
|
32
|
+
}
|
|
33
|
+
console.log(`\n${formatAddPlan(result.plan, { diffs: false })}\n`);
|
|
34
|
+
const steps = [];
|
|
35
|
+
if (changesDependencies(result.plan) && result.install.status !== 'done') {
|
|
36
|
+
steps.push(installCommand(result.plan.to.packageManager));
|
|
37
|
+
}
|
|
38
|
+
for (const variable of result.plan.env.filter((entry) => entry.required)) {
|
|
39
|
+
steps.push(`set ${variable.name} in .env ${chalk.dim(`(${variable.description})`)}`);
|
|
40
|
+
}
|
|
41
|
+
if (result.plan.services.length > 0) {
|
|
42
|
+
steps.push(`docker compose up -d ${result.plan.services.join(' ')}`);
|
|
43
|
+
}
|
|
44
|
+
if (steps.length > 0)
|
|
45
|
+
console.log([chalk.bold('Next'), ...steps.map((step) => ` ${step}`)].join('\n'));
|
|
46
|
+
log.success(`Added ${result.plan.summary.join(', ')}`);
|
|
47
|
+
return result.install.status === 'failed' ? 1 : 0;
|
|
48
|
+
}
|
|
49
|
+
function collect(value, previous = []) {
|
|
50
|
+
return [...previous, value];
|
|
51
|
+
}
|
|
52
|
+
export const addCommand = new Command('add')
|
|
53
|
+
.description('Add features to a project created by create-cogitator-app or cogitator init')
|
|
54
|
+
.argument('[features...]', `features to add: ${FEATURES.join(', ')}`)
|
|
55
|
+
.option('--memory <kind>', 'switch the memory adapter: memory, sqlite, postgres, redis, mongodb')
|
|
56
|
+
.option('--vector-store <store>', 'switch the RAG vector store: memory, postgres, qdrant')
|
|
57
|
+
.option('--deploy <target>', 'add deployment: docker or fly')
|
|
58
|
+
.option('--channel <name>', 'add a messaging channel to a bot (repeatable)', collect)
|
|
59
|
+
.option('--agent <name>', 'add coding agent setup: claude, cursor, codex (repeatable)', collect)
|
|
60
|
+
.option('--dry-run', 'show what would change, with diffs, without writing anything')
|
|
61
|
+
.option('--json', 'print the plan or the result as JSON')
|
|
62
|
+
.option('--no-install', 'do not install when the dependencies change')
|
|
63
|
+
.addHelpText('after', [
|
|
64
|
+
examplesHelp([
|
|
65
|
+
['cogitator add rag', 'answers grounded in docs/'],
|
|
66
|
+
['cogitator add workflows evals', 'two features at once'],
|
|
67
|
+
['cogitator add --memory postgres', 'switch memory to Postgres'],
|
|
68
|
+
['cogitator add --deploy docker --dry-run', 'see every diff first'],
|
|
69
|
+
]),
|
|
70
|
+
'',
|
|
71
|
+
'Files you edited are merged where they can be (package.json, cogitator.yml,',
|
|
72
|
+
'docker-compose.yml, the managed block of AGENTS.md, .gitignore). When the',
|
|
73
|
+
'addition needs to change a file you edited in another way, nothing is written',
|
|
74
|
+
'and the change is printed as a diff. Adding what the project has is a no-op.',
|
|
75
|
+
].join('\n'))
|
|
76
|
+
.action(async (features, flags) => {
|
|
77
|
+
process.exitCode = await runAdd(process.cwd(), features, flags);
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistant.d.ts","sourceRoot":"","sources":["../../src/commands/assistant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"assistant.d.ts","sourceRoot":"","sources":["../../src/commands/assistant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,MAAM,WAAW,WAAW;IAC1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;CACH;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAYlE;AAED,eAAO,MAAM,gBAAgB,SAgFzB,CAAC;AA0HL,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQ/C"}
|
|
@@ -3,6 +3,7 @@ import chalk from 'chalk';
|
|
|
3
3
|
import { existsSync } from 'node:fs';
|
|
4
4
|
import { resolve } from 'node:path';
|
|
5
5
|
import { log, printBanner } from '../utils/logger.js';
|
|
6
|
+
import { CommandError, exitWithFailure, examplesHelp } from '../utils/cli.js';
|
|
6
7
|
import { importUserModule } from '../utils/module-loader.js';
|
|
7
8
|
import { loadDotenvInto } from '../utils/env.js';
|
|
8
9
|
export function isGatewayLike(value) {
|
|
@@ -24,15 +25,19 @@ export const assistantCommand = new Command('assistant')
|
|
|
24
25
|
.description('Start AI assistant with live dashboard')
|
|
25
26
|
.option('-c, --config <path>', 'Path to gateway config file', 'src/gateway.ts')
|
|
26
27
|
.option('-q, --quiet', 'Minimal output (no banner, live status or hotkeys)')
|
|
28
|
+
.addHelpText('after', examplesHelp([
|
|
29
|
+
['cogitator assistant', 'start src/gateway.ts with the live dashboard'],
|
|
30
|
+
['cogitator assistant -c src/bot.ts -q', 'another config, plain output'],
|
|
31
|
+
]))
|
|
27
32
|
.action(async (options) => {
|
|
28
33
|
const quiet = options.quiet ?? false;
|
|
29
34
|
if (!quiet)
|
|
30
35
|
printBanner();
|
|
31
36
|
const configPath = resolve(process.cwd(), options.config);
|
|
32
37
|
if (!existsSync(configPath)) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
38
|
+
throw new CommandError(`Config not found: ${configPath}`, {
|
|
39
|
+
hints: ['Run "cogitator init" to create a project first'],
|
|
40
|
+
});
|
|
36
41
|
}
|
|
37
42
|
log.info(`Loading config from ${chalk.dim(options.config)}`);
|
|
38
43
|
loadDotenvInto(resolve(process.cwd(), '.env'), process.env);
|
|
@@ -42,21 +47,19 @@ export const assistantCommand = new Command('assistant')
|
|
|
42
47
|
gatewayExport = mod.gateway;
|
|
43
48
|
}
|
|
44
49
|
catch (err) {
|
|
45
|
-
|
|
46
|
-
process.exit(1);
|
|
50
|
+
throw new CommandError(`Failed to load config: ${err instanceof Error ? err.message : String(err)}`);
|
|
47
51
|
}
|
|
48
52
|
if (!isGatewayLike(gatewayExport)) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
53
|
+
throw new CommandError('Config file must export a "gateway" instance', {
|
|
54
|
+
hints: ['Example: export const gateway = new Gateway({ ... })'],
|
|
55
|
+
});
|
|
52
56
|
}
|
|
53
57
|
const gateway = gatewayExport;
|
|
54
58
|
try {
|
|
55
59
|
await gateway.start();
|
|
56
60
|
}
|
|
57
61
|
catch (err) {
|
|
58
|
-
|
|
59
|
-
process.exit(1);
|
|
62
|
+
throw new CommandError(`Failed to start: ${err instanceof Error ? err.message : String(err)}`);
|
|
60
63
|
}
|
|
61
64
|
printDashboard(gateway, quiet);
|
|
62
65
|
let stopping = false;
|
|
@@ -75,8 +78,7 @@ export const assistantCommand = new Command('assistant')
|
|
|
75
78
|
process.exit(0);
|
|
76
79
|
}
|
|
77
80
|
catch (err) {
|
|
78
|
-
|
|
79
|
-
process.exit(1);
|
|
81
|
+
exitWithFailure(new CommandError(`Shutdown failed: ${err instanceof Error ? err.message : String(err)}`));
|
|
80
82
|
}
|
|
81
83
|
};
|
|
82
84
|
process.on('SIGINT', () => void shutdown());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistant.js","sourceRoot":"","sources":["../../src/commands/assistant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAcjD,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAC3E,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IACzE,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,mBAAmB,IAAI,KAAK;QAC5B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CACvC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;KACrD,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,qBAAqB,EAAE,6BAA6B,EAAE,gBAAgB,CAAC;KAC9E,MAAM,CAAC,aAAa,EAAE,oDAAoD,CAAC;KAC3E,MAAM,CAAC,KAAK,EAAE,OAA4C,EAAE,EAAE;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;IACrC,IAAI,CAAC,KAAK;QAAE,WAAW,EAAE,CAAC;IAE1B,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE1D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,
|
|
1
|
+
{"version":3,"file":"assistant.js","sourceRoot":"","sources":["../../src/commands/assistant.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiCpC,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA4B7D;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2BzF;AAQD,eAAO,MAAM,YAAY,SAqFtB,CAAC"}
|
package/dist/commands/build.js
CHANGED
|
@@ -3,6 +3,7 @@ import chalk from 'chalk';
|
|
|
3
3
|
import { existsSync, mkdirSync, statSync } from 'node:fs';
|
|
4
4
|
import { dirname, resolve, relative } from 'node:path';
|
|
5
5
|
import { log, printBanner } from '../utils/logger.js';
|
|
6
|
+
import { CommandError, errorMessage, examplesHelp } from '../utils/cli.js';
|
|
6
7
|
import { importOptionalPackage } from '../utils/module-loader.js';
|
|
7
8
|
import { BUNDLE_MARKER } from '../utils/daemon.js';
|
|
8
9
|
function isEsbuildApi(value) {
|
|
@@ -99,6 +100,10 @@ export const buildCommand = new Command('build')
|
|
|
99
100
|
.option('--no-sourcemap', 'Disable sourcemap')
|
|
100
101
|
.option('--minify', 'Minify output')
|
|
101
102
|
.option('-q, --quiet', 'Minimal output')
|
|
103
|
+
.addHelpText('after', examplesHelp([
|
|
104
|
+
['cogitator build', 'bundle src/gateway.ts into dist/cogitator.mjs'],
|
|
105
|
+
['cogitator build --minify --no-sourcemap', 'the smallest bundle'],
|
|
106
|
+
]))
|
|
102
107
|
.action(async (options) => {
|
|
103
108
|
if (!options.quiet)
|
|
104
109
|
printBanner();
|
|
@@ -106,15 +111,15 @@ export const buildCommand = new Command('build')
|
|
|
106
111
|
const configPath = resolve(cwd, options.config);
|
|
107
112
|
const outfile = resolve(cwd, options.outfile);
|
|
108
113
|
if (!existsSync(configPath)) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
114
|
+
throw new CommandError(`Config not found: ${configPath}`, {
|
|
115
|
+
hints: ['Run "cogitator init" to create a project first'],
|
|
116
|
+
});
|
|
112
117
|
}
|
|
113
118
|
const esbuild = await loadEsbuild(cwd);
|
|
114
119
|
if (!esbuild) {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
120
|
+
throw new CommandError('esbuild is required for building. Install it:', {
|
|
121
|
+
hints: [' pnpm add -D esbuild'],
|
|
122
|
+
});
|
|
118
123
|
}
|
|
119
124
|
mkdirSync(dirname(outfile), { recursive: true });
|
|
120
125
|
log.step(`Bundling ${chalk.dim(relative(cwd, configPath))}`);
|
|
@@ -131,10 +136,7 @@ export const buildCommand = new Command('build')
|
|
|
131
136
|
}));
|
|
132
137
|
}
|
|
133
138
|
catch (error) {
|
|
134
|
-
|
|
135
|
-
if (error instanceof Error)
|
|
136
|
-
log.dim(error.message);
|
|
137
|
-
process.exit(1);
|
|
139
|
+
throw new CommandError('Build failed', { hints: [errorMessage(error)] });
|
|
138
140
|
}
|
|
139
141
|
const elapsed = ((performance.now() - startTime) / 1000).toFixed(2);
|
|
140
142
|
const sizeStr = formatSize(statSync(outfile).size);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAwB,MAAM,WAAW,CAAC;AAyK1D,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAwB,MAAM,WAAW,CAAC;AAyK1D,eAAO,MAAM,aAAa,SASvB,CAAC"}
|
package/dist/commands/daemon.js
CHANGED
|
@@ -5,6 +5,7 @@ import { homedir } from 'node:os';
|
|
|
5
5
|
import { dirname, resolve } from 'node:path';
|
|
6
6
|
import { execFileSync, spawn } from 'node:child_process';
|
|
7
7
|
import { log } from '../utils/logger.js';
|
|
8
|
+
import { CommandError, exitWithFailure, examplesHelp } from '../utils/cli.js';
|
|
8
9
|
import { DAEMON_LABEL, SYSTEMD_UNIT, buildLaunchdPlist, buildSystemdUnit, isDaemonProcess, isProcessAlive, readPidRecord, resolveDaemonLaunch, serializePidRecord, } from '../utils/daemon.js';
|
|
9
10
|
const STOP_POLL_MS = 500;
|
|
10
11
|
const STOP_ATTEMPTS = 20;
|
|
@@ -42,9 +43,9 @@ function resolveLaunch(config) {
|
|
|
42
43
|
});
|
|
43
44
|
}
|
|
44
45
|
catch (error) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
throw new CommandError(error instanceof Error ? error.message : String(error), {
|
|
47
|
+
hints: ['Run "cogitator init" or "cogitator wizard" to create a project first'],
|
|
48
|
+
});
|
|
48
49
|
}
|
|
49
50
|
}
|
|
50
51
|
function runningDaemon() {
|
|
@@ -105,8 +106,7 @@ function startDaemon(config) {
|
|
|
105
106
|
closeSync(out);
|
|
106
107
|
}
|
|
107
108
|
if (!pid) {
|
|
108
|
-
|
|
109
|
-
process.exit(1);
|
|
109
|
+
throw new CommandError('Failed to start daemon');
|
|
110
110
|
}
|
|
111
111
|
writeFileSync(pidFile(), serializePidRecord({ pid, script: launch.args[0] }));
|
|
112
112
|
log.success(`Daemon started (PID: ${pid})`);
|
|
@@ -137,7 +137,13 @@ function psField(pid, field) {
|
|
|
137
137
|
return null;
|
|
138
138
|
}
|
|
139
139
|
}
|
|
140
|
-
export const daemonCommand = new Command('daemon')
|
|
140
|
+
export const daemonCommand = new Command('daemon')
|
|
141
|
+
.description('Manage background daemon process')
|
|
142
|
+
.addHelpText('after', examplesHelp([
|
|
143
|
+
['cogitator daemon install', 'run the assistant at login (launchd or systemd)'],
|
|
144
|
+
['cogitator daemon start', 'start it in the background now'],
|
|
145
|
+
['cogitator daemon logs -f', 'follow its output'],
|
|
146
|
+
]));
|
|
141
147
|
daemonCommand
|
|
142
148
|
.command('start')
|
|
143
149
|
.description('Start the assistant as a background daemon')
|
|
@@ -226,8 +232,7 @@ daemonCommand
|
|
|
226
232
|
args.push(logFile());
|
|
227
233
|
const tail = spawn('tail', args, { stdio: 'inherit' });
|
|
228
234
|
tail.on('error', (error) => {
|
|
229
|
-
|
|
230
|
-
process.exit(1);
|
|
235
|
+
exitWithFailure(new CommandError(`Failed to run tail: ${error.message}`));
|
|
231
236
|
});
|
|
232
237
|
tail.on('exit', (code) => process.exit(code ?? 0));
|
|
233
238
|
});
|
|
@@ -237,9 +242,9 @@ daemonCommand
|
|
|
237
242
|
.option('-c, --config <path>', 'Entry to run: cogitator.yml, a gateway module, or a bundle (default: auto-detect)')
|
|
238
243
|
.action((options) => {
|
|
239
244
|
if (process.platform !== 'darwin' && process.platform !== 'linux') {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
245
|
+
throw new CommandError(`Unsupported platform: ${process.platform}`, {
|
|
246
|
+
hints: ['Manual setup required for Windows'],
|
|
247
|
+
});
|
|
243
248
|
}
|
|
244
249
|
const launch = resolveLaunch(options.config);
|
|
245
250
|
mkdirSync(dataDir(), { recursive: true });
|
|
@@ -267,8 +272,7 @@ daemonCommand
|
|
|
267
272
|
uninstallSystemd();
|
|
268
273
|
}
|
|
269
274
|
else {
|
|
270
|
-
|
|
271
|
-
process.exit(1);
|
|
275
|
+
throw new CommandError(`Unsupported platform: ${process.platform}`);
|
|
272
276
|
}
|
|
273
277
|
});
|
|
274
278
|
function launchdPlistPath() {
|