automatey 0.1.6 → 0.1.7

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 CHANGED
@@ -6,7 +6,7 @@
6
6
  <p align="center"><em>Yer lean &amp; mean agentic helper — no fluff, all action, a touch o' pirate.</em></p>
7
7
 
8
8
  <p align="center">
9
- <img alt="tests" src="https://img.shields.io/badge/tests-172%20passing-brightgreen?style=flat-square">
9
+ <img alt="tests" src="https://img.shields.io/badge/tests-189%20passing-brightgreen?style=flat-square">
10
10
  <img alt="node" src="https://img.shields.io/badge/node-%3E%3D20-blue?style=flat-square">
11
11
  <img alt="license" src="https://img.shields.io/badge/license-MIT-blue?style=flat-square">
12
12
  </p>
@@ -33,8 +33,8 @@
33
33
  ## Features
34
34
 
35
35
  - **Providers**: Nemotron (vLLM/OpenAI-compatible), OpenAI, Anthropic, Perplexity
36
- - **MCP tools**: Any stdio or HTTP MCP server; auto-loaded from `./mcp.json` or `~/.automatey/mcp.json`
37
- - **ReAct loop**: Up to 20 tool-call rounds per message (configurable)
36
+ - **MCP tools**: Any stdio or HTTP MCP server; auto-loaded from `./mcp.json`, `~/.automatey/mcp.json`, or bundled `mcp.json`
37
+ - **ReAct loop**: Up to 50 tool-call rounds per message (configurable)
38
38
  - **Chain-of-thought**: `/think` toggle for Nemotron / Anthropic reasoning tokens
39
39
  - **Sandbox**: Isolated directory with timestamped subdirectories for agent file I/O and code execution; configurable via `--sandbox` or `SANDBOX_MODE` env var
40
40
  - **Sub-agents**: `run_subagent` built-in tool spawns stateless nested ReAct loops with full MCP access; supports `AgentConfig` declarations for reusable agent definitions
@@ -44,7 +44,7 @@
44
44
  - **Prompt refiner**: Rewrites agent instructions using judge feedback; enforces brevity constraints for smaller worker models
45
45
  - **Sessions**: Save/load conversation sessions in `~/.automatey/sessions/`
46
46
  - **Checkpoints**: `/checkpoint` — full conversation snapshots with BM25 keyword search
47
- - **Auto-compact**: LLM summarises older context when usage ≥ 80%
47
+ - **Auto-compact**: LLM summarises older context when usage ≥ 90%
48
48
  - **Skills**: Progressive SKILL.md loading from `.agents/skills/`
49
49
  - **Eval system**: `/eval <file.jsonl>` runs MCQ, keyword, and regex benchmarks with per-category accuracy reports
50
50
  - **Planner MCP**: Bundled `mcp/planner` — todos + plans, prompts for task breakdown
@@ -53,6 +53,23 @@
53
53
 
54
54
  ## Quick Start
55
55
 
56
+ ### Install from npm (recommended)
57
+
58
+ ```bash
59
+ npm install -g automatey
60
+ automatey chat
61
+ ```
62
+
63
+ Or run without installing:
64
+
65
+ ```bash
66
+ npx automatey chat
67
+ npx automatey "summarise this repo"
68
+ npx ay "what time is it?"
69
+ ```
70
+
71
+ ### From source
72
+
56
73
  ```bash
57
74
  git clone https://github.com/automatey-org/automatey.git
58
75
  cd automatey
@@ -186,8 +203,9 @@ ay "summarise this repo" # one-shot against the current directory
186
203
  ## MCP Config — `mcp.json`
187
204
 
188
205
  The agent looks for MCP config in this order:
189
- 1. `./mcp.json` (current working directory / project root)
206
+ 1. `./mcp.json` (current working directory / project root)
190
207
  2. `~/.automatey/mcp.json` (global fallback)
208
+ 3. Bundled `mcp.json` from the package install directory (npx / global install)
191
209
 
192
210
  Copy `mcp.example.json` from this repo as your starting point:
193
211
 
@@ -237,7 +255,7 @@ Config lives in `~/.automatey/config.json` (auto-created on first run):
237
255
  "provider": "nemotron",
238
256
  "llm": {
239
257
  "baseUrl": "http://localhost:8002",
240
- "model": "nvidia/Llama-3.1-Nemotron-Nano-8B-v1"
258
+ "model": "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-NVFP4"
241
259
  }
242
260
  }
243
261
  ```
@@ -250,11 +268,11 @@ Environment variables (copy `.env.defaults` → `.env` to override):
250
268
  | `LLM_MODEL` | Nemotron NVFP4 | Model ID |
251
269
  | `LLM_BASE_URL` | `http://localhost:8002` | vLLM / OpenAI-compatible endpoint |
252
270
  | `LLM_MAX_TOKENS` | `200000` | Context window budget (chars, ~4/token) |
253
- | `LLM_MAX_OUTPUT_TOKENS` | `4096` | Per-call output limit |
254
- | `TEMPERATURE` | `0.1` | Sampling temperature |
255
- | `AGENT_MAX_TOOL_ROUNDS` | `20` | Max ReAct rounds |
271
+ | `LLM_MAX_OUTPUT_TOKENS` | `16384` | Per-call output limit |
272
+ | `TEMPERATURE` | `0.6` | Sampling temperature |
273
+ | `AGENT_MAX_TOOL_ROUNDS` | `50` | Max ReAct rounds |
256
274
  | `AGENT_MAX_EMPTY_RETRIES` | `2` | Retries on empty LLM response |
257
- | `AGENT_COMPACT_THRESHOLD` | `0.8` | Auto-compact at 80% context fill |
275
+ | `AGENT_COMPACT_THRESHOLD` | `0.9` | Auto-compact at 90% context fill |
258
276
 
259
277
  ## Commands
260
278
 
@@ -277,7 +295,7 @@ Environment variables (copy `.env.defaults` → `.env` to override):
277
295
  ## Context Management
278
296
 
279
297
  ### Auto-compact
280
- When estimated context usage reaches `AGENT_COMPACT_THRESHOLD` (default 80%), the older portion of the conversation is automatically summarized by the LLM and replaced with a concise summary message. This keeps the token count manageable without discarding knowledge.
298
+ When estimated context usage reaches `AGENT_COMPACT_THRESHOLD` (default 90%), the older portion of the conversation is automatically summarized by the LLM and replaced with a concise summary message. This keeps the token count manageable without discarding knowledge.
281
299
 
282
300
  Disable per-session: the `/compact` command can be used to trigger compaction manually at any time.
283
301
 
@@ -345,7 +363,7 @@ All configuration comes from environment variables — zero hardcoded defaults:
345
363
  | `LLM_PROVIDER` | ✅ | `nemotron` \| `openai` \| `anthropic` \| `perplexity` |
346
364
  | `AUTOMATEY_TIMEOUT` | | Default task timeout in ms (default: 300000) |
347
365
 
348
- The agent MCP server has its own test suite (22 tests — unit, functional, e2e) in `mcp/agent/tests/`.
366
+ The agent MCP server has its own test suite (23 tests — unit, functional, e2e) in `mcp/agent/tests/`.
349
367
 
350
368
  ## Docker
351
369
 
@@ -450,7 +468,7 @@ DMR uses `llama.cpp` under the hood — CPU-only works, GPU (NVIDIA/Apple Silico
450
468
  ```bash
451
469
  npm run dev # tsx watch (no build needed)
452
470
  npm run build # tsc + build all MCP servers
453
- npm test # 172 tests (Vitest)
471
+ npm test # 189 tests (Vitest)
454
472
  npm run test:watch # watch mode
455
473
  ```
456
474
 
@@ -464,7 +482,7 @@ npm run test:watch # watch mode
464
482
  ## Tests
465
483
 
466
484
  ```
467
- Tests 172 passed | 3 skipped
485
+ Tests 189 passed | 2 skipped
468
486
  ├── unit/ chat-engine, coder-server, command-parser, config-manager,
469
487
  │ context-manager, eval-runner, llm-client,
470
488
  │ markdown-rendering, mcp-config-manager,
@@ -487,7 +505,7 @@ LLM writes `index.js`, executes it, output is verified. Results live in `sandbox
487
505
  ## Artwork
488
506
 
489
507
  Logos in `extra/logo/` are from the [Automatey](https://github.com/top-5/automatey) terminal project,
490
- licensed **CC BY 4.0** — Copyright © 2024–2025 Top-5 And Contributors.
508
+ licensed **CC BY 4.0** — Copyright © 2024–2026 Top-5 And Contributors.
491
509
  Used here with attribution as permitted by the license.
492
510
 
493
511
  ## License
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "automatey",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "description": "Lean & mean MCP-powered CLI agent — Nemotron, OpenAI, Anthropic, Perplexity",
5
5
  "keywords": [
6
6
  "ai",
@@ -28,6 +28,7 @@
28
28
  "mcp/coder/node_modules/",
29
29
  "mcp/coder/package.json",
30
30
  "mcp/coder/src/landlock-exec.c",
31
+ "scripts/postinstall.js",
31
32
  "scripts/setup-bwrap-apparmor.sh",
32
33
  "mcp.json",
33
34
  "README.md",
@@ -58,7 +59,7 @@
58
59
  },
59
60
  "license": "MIT",
60
61
  "scripts": {
61
- "postinstall": "for d in mcp/planner mcp/coder; do [ -f \"$d/package.json\" ] && [ ! -d \"$d/node_modules\" ] && npm install --omit=dev --prefix \"$d\" || true; done",
62
+ "postinstall": "node scripts/postinstall.js",
62
63
  "prepublishOnly": "npm run build",
63
64
  "build": "tsc && npm run build:planner && npm run build:coder && npm run build:agent",
64
65
  "build:planner": "npm run build --prefix mcp/planner",
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ // Cross-platform postinstall: install deps for MCP sub-packages
3
+ import { execSync } from 'node:child_process';
4
+ import { existsSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+
7
+ const root = join(import.meta.dirname, '..');
8
+ const dirs = ['mcp/planner', 'mcp/coder'];
9
+
10
+ for (const d of dirs) {
11
+ const dir = join(root, d);
12
+ const pkg = join(dir, 'package.json');
13
+ const nm = join(dir, 'node_modules');
14
+ if (existsSync(pkg) && !existsSync(nm)) {
15
+ console.log(`postinstall: npm install --omit=dev --prefix ${d}`);
16
+ execSync('npm install --omit=dev', { cwd: dir, stdio: 'inherit' });
17
+ }
18
+ }