@iambarryking/ag 3.0.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 (50) hide show
  1. package/README.md +199 -0
  2. package/dist/cli/parser.d.ts +6 -0
  3. package/dist/cli/parser.d.ts.map +1 -0
  4. package/dist/cli/parser.js +69 -0
  5. package/dist/cli/parser.js.map +1 -0
  6. package/dist/cli/repl.d.ts +10 -0
  7. package/dist/cli/repl.d.ts.map +1 -0
  8. package/dist/cli/repl.js +256 -0
  9. package/dist/cli/repl.js.map +1 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +80 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/core/agent.d.ts +54 -0
  15. package/dist/core/agent.d.ts.map +1 -0
  16. package/dist/core/agent.js +137 -0
  17. package/dist/core/agent.js.map +1 -0
  18. package/dist/core/colors.d.ts +10 -0
  19. package/dist/core/colors.d.ts.map +1 -0
  20. package/dist/core/colors.js +5 -0
  21. package/dist/core/colors.js.map +1 -0
  22. package/dist/core/config.d.ts +11 -0
  23. package/dist/core/config.d.ts.map +1 -0
  24. package/dist/core/config.js +30 -0
  25. package/dist/core/config.js.map +1 -0
  26. package/dist/core/loader.d.ts +3 -0
  27. package/dist/core/loader.d.ts.map +1 -0
  28. package/dist/core/loader.js +39 -0
  29. package/dist/core/loader.js.map +1 -0
  30. package/dist/core/types.d.ts +47 -0
  31. package/dist/core/types.d.ts.map +1 -0
  32. package/dist/core/types.js +2 -0
  33. package/dist/core/types.js.map +1 -0
  34. package/dist/memory/memory.d.ts +38 -0
  35. package/dist/memory/memory.d.ts.map +1 -0
  36. package/dist/memory/memory.js +153 -0
  37. package/dist/memory/memory.js.map +1 -0
  38. package/dist/tools/bash.d.ts +6 -0
  39. package/dist/tools/bash.d.ts.map +1 -0
  40. package/dist/tools/bash.js +37 -0
  41. package/dist/tools/bash.js.map +1 -0
  42. package/dist/tools/memory.d.ts +3 -0
  43. package/dist/tools/memory.d.ts.map +1 -0
  44. package/dist/tools/memory.js +27 -0
  45. package/dist/tools/memory.js.map +1 -0
  46. package/dist/tools/plan.d.ts +4 -0
  47. package/dist/tools/plan.d.ts.map +1 -0
  48. package/dist/tools/plan.js +49 -0
  49. package/dist/tools/plan.js.map +1 -0
  50. package/package.json +28 -0
package/README.md ADDED
@@ -0,0 +1,199 @@
1
+ # ag
2
+
3
+ A persistent AI coding agent with memory. Any model via OpenRouter.
4
+
5
+ Built as a tool-calling loop with bash -- inspired by [How does Claude Code actually work?](https://youtu.be/I82j7AzMU80). Started as 60 lines, grew to ~600 because persistent memory, plans, and a REPL are worth the extra lines.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npx @iambarryking/ag # run directly (prompts for API key on first use)
11
+ npm install -g @iambarryking/ag # or install globally
12
+ ```
13
+
14
+ Or from source:
15
+
16
+ ```bash
17
+ git clone <repo>
18
+ cd simple-agent
19
+ npm install && npm run build && npm link
20
+ ```
21
+
22
+ ## Usage
23
+
24
+ ```bash
25
+ ag # interactive REPL
26
+ ag "what files are here?" # one-shot mode
27
+ ag -m openai/gpt-4o "help me" # specific model
28
+ ag -m openrouter/auto "help" # let OpenRouter pick
29
+ ag --stats # show memory status
30
+ ag --help # all options
31
+ ```
32
+
33
+ On first run, `ag` prompts for your OpenRouter API key and saves it to `~/.ag/config.json`. You can also set it via environment variable:
34
+
35
+ ```bash
36
+ export OPENROUTER_API_KEY=sk-or-v1-...
37
+ ```
38
+
39
+ ## CLI Options
40
+
41
+ ```
42
+ -m, --model <model> Model ID (default: anthropic/claude-sonnet-4.6)
43
+ -k, --key <key> API key (or set OPENROUTER_API_KEY)
44
+ -s, --system <prompt> Custom system prompt
45
+ -b, --base-url <url> API base URL (default: OpenRouter; use for local LLMs)
46
+ -n, --max-iterations <n> Max tool-call iterations (default: 25)
47
+ --stats Show memory file paths and status
48
+ -h, --help Show help
49
+ ```
50
+
51
+ ## REPL Commands
52
+
53
+ ```
54
+ /help Show all commands
55
+ /model <name> Switch model (e.g. /model openai/gpt-4o)
56
+ /model Show current model
57
+ /models [query] List OpenRouter models (e.g. /models claude, /models gemini)
58
+ /tools List loaded tools (built-in + custom)
59
+ /config Show persistent config (API key, model, base URL)
60
+ /config set <k> <v> Set a config value (e.g. /config set model openai/gpt-4o)
61
+ /stats Memory status
62
+ /memory Show global memory
63
+ /project Show project memory
64
+ /plan Show current (latest) plan
65
+ /plan use <name> Activate an older plan (copies as latest)
66
+ /plans List all plans
67
+ /paths Show memory file paths
68
+ /clear project Clear project memory, plans, and history
69
+ /clear all Clear everything including global memory
70
+ /exit Exit
71
+ ```
72
+
73
+ ## Tools
74
+
75
+ | Tool | Purpose |
76
+ |------|---------|
77
+ | `bash` | Run any shell command. The universal tool. |
78
+ | `save_memory` | Persist a fact to global or project memory. |
79
+ | `save_plan` | Save a task plan (timestamped, latest auto-loaded). |
80
+ | `list_plans` | List or read previous plans. |
81
+
82
+ ## Custom Tools
83
+
84
+ Drop a `.mjs` file in a tools directory and it gets loaded at startup:
85
+
86
+ ```
87
+ ~/.ag/tools/ # global (all projects)
88
+ .ag/tools/ # project-local (overrides global if same name)
89
+ ```
90
+
91
+ Each file exports a default tool object:
92
+
93
+ ```js
94
+ // ~/.ag/tools/weather.mjs
95
+ export default {
96
+ type: "function",
97
+ function: {
98
+ name: "weather",
99
+ description: "Get current weather for a city",
100
+ parameters: {
101
+ type: "object",
102
+ properties: { city: { type: "string", description: "City name" } },
103
+ required: ["city"]
104
+ }
105
+ },
106
+ execute: ({ city }) => {
107
+ // your logic here -- can be async
108
+ return `Weather in ${city}: sunny, 22C`;
109
+ }
110
+ };
111
+ ```
112
+
113
+ That's it. No config, no registry. Use `/tools` in the REPL to see what's loaded.
114
+
115
+ ## Configuration
116
+
117
+ Persistent settings are stored in `~/.ag/config.json`:
118
+
119
+ ```json
120
+ {
121
+ "apiKey": "sk-or-v1-...",
122
+ "model": "anthropic/claude-sonnet-4.6",
123
+ "baseURL": "https://openrouter.ai/api/v1",
124
+ "maxIterations": 25
125
+ }
126
+ ```
127
+
128
+ Set values via the REPL (`/config set model openai/gpt-4o`) or edit the file directly. CLI flags and environment variables always take priority over config file values.
129
+
130
+ ## Memory
131
+
132
+ Three tiers, all plain markdown you can edit directly:
133
+
134
+ ```
135
+ ~/.ag/
136
+ config.json # settings: API key, default model, base URL
137
+ memory.md # global: preferences, patterns
138
+ projects/
139
+ <id>/
140
+ memory.md # project: architecture, decisions
141
+ plans/ # timestamped plan files
142
+ 2026-04-13T12-31-22-add-auth.md
143
+ history.jsonl # conversation history
144
+ ```
145
+
146
+ All memory is injected into the system prompt on every API call (capped at ~6000 chars total to avoid context bloat). The agent reads it automatically and writes via `save_memory` and `save_plan`.
147
+
148
+ ## Local LLMs
149
+
150
+ Point `ag` at any OpenAI-compatible API:
151
+
152
+ ```bash
153
+ ag -b http://localhost:11434/v1 "hello" # Ollama
154
+ ag -b http://localhost:1234/v1 "hello" # LM Studio
155
+ ```
156
+
157
+ Or set it permanently:
158
+
159
+ ```bash
160
+ # In the REPL:
161
+ /config set baseURL http://localhost:11434/v1
162
+ ```
163
+
164
+ ## Workflow
165
+
166
+ - For multi-step coding tasks, the agent creates a plan before starting and updates it as it goes.
167
+ - For simple questions, it just answers directly.
168
+ - At 25 iterations the REPL asks if you want to continue.
169
+
170
+ ## When to use something else
171
+
172
+ - **Claude Code** -- if you have a subscription and want the full harness with parallel tool calls, MCP, and a polished UI. ag is not trying to replace it.
173
+ - **aider** -- if your workflow is git-centric (commit-per-change, diff-based editing). ag doesn't know about git.
174
+ - **Cursor / Windsurf** -- if you want IDE integration. ag is terminal-only.
175
+
176
+ ag is for when you want a hackable, persistent, model-agnostic agent you fully control in ~600 lines of TypeScript.
177
+
178
+ ## Architecture
179
+
180
+ ```
181
+ src/
182
+ cli.ts # entry point
183
+ cli/parser.ts # arg parsing + help
184
+ cli/repl.ts # interactive REPL
185
+ core/agent.ts # the loop
186
+ core/config.ts # persistent config (~/.ag/config.json)
187
+ core/types.ts # interfaces
188
+ core/colors.ts # ANSI colors (respects NO_COLOR)
189
+ memory/memory.ts # three-tier file memory
190
+ tools/bash.ts # shell execution
191
+ tools/memory.ts # save_memory tool
192
+ tools/plan.ts # save_plan + list_plans
193
+ ```
194
+
195
+ Zero npm dependencies. Node.js 18+ and TypeScript.
196
+
197
+ ## License
198
+
199
+ MIT
@@ -0,0 +1,6 @@
1
+ import { CLIOptions } from '../core/types.js';
2
+ export declare function parseArgs(args: string[]): CLIOptions & {
3
+ positional: string[];
4
+ };
5
+ export declare function showHelp(): void;
6
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/cli/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG;IAAE,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAiB/E;AAED,wBAAgB,QAAQ,IAAI,IAAI,CA2C/B"}
@@ -0,0 +1,69 @@
1
+ export function parseArgs(args) {
2
+ const options = {};
3
+ const positional = [];
4
+ for (let i = 0; i < args.length; i++) {
5
+ const arg = args[i];
6
+ if ((arg === '--model' || arg === '-m') && i + 1 < args.length)
7
+ options.model = args[++i];
8
+ else if ((arg === '--key' || arg === '-k') && i + 1 < args.length)
9
+ options.key = args[++i];
10
+ else if ((arg === '--system' || arg === '-s') && i + 1 < args.length)
11
+ options.system = args[++i];
12
+ else if ((arg === '--base-url' || arg === '-b') && i + 1 < args.length)
13
+ options.baseURL = args[++i];
14
+ else if ((arg === '--max-iterations' || arg === '-n') && i + 1 < args.length)
15
+ options.maxIterations = parseInt(args[++i], 10);
16
+ else if (arg === '--stats')
17
+ options.stats = true;
18
+ else if (arg === '--help' || arg === '-h')
19
+ options.help = true;
20
+ else if (!arg.startsWith('-'))
21
+ positional.push(arg);
22
+ }
23
+ return { ...options, positional };
24
+ }
25
+ export function showHelp() {
26
+ console.log(`
27
+ ag - Persistent AI coding agent with memory (any model via OpenRouter)
28
+
29
+ Usage:
30
+ ag # Interactive REPL
31
+ ag "what files are here?" # One-shot mode
32
+ ag --stats # Show memory stats
33
+ ag -m openai/gpt-4o "help me" # Use specific model
34
+
35
+ Options:
36
+ -m, --model <model> Model ID (default: anthropic/claude-sonnet-4.6)
37
+ -k, --key <key> API key (or set OPENROUTER_API_KEY)
38
+ -s, --system <prompt> Custom system prompt
39
+ -b, --base-url <url> API base URL (default: OpenRouter; use for local LLMs)
40
+ -n, --max-iterations <n> Max tool-call iterations (default: 25)
41
+ --stats Show memory file locations and status
42
+ -h, --help Show this help
43
+
44
+ Config:
45
+ On first run, ag prompts for your API key and saves it to ~/.ag/config.json.
46
+ Use /config in the REPL to view or change persistent settings.
47
+
48
+ Memory (all files editable):
49
+ ~/.ag/config.json Settings: API key, default model, base URL
50
+ ~/.ag/memory.md Global: patterns, preferences, facts
51
+ ~/.ag/projects/<id>/memory.md Project: architecture, decisions, gotchas
52
+ ~/.ag/projects/<id>/plans/ Plans: timestamped, latest auto-loaded
53
+ ~/.ag/projects/<id>/history.jsonl Conversation history
54
+
55
+ REPL commands:
56
+ /help, /model, /models, /tools, /config, /stats, /memory,
57
+ /project, /plan, /plans, /paths, /clear, /exit
58
+
59
+ Install:
60
+ npx @iambarryking/ag # Run directly
61
+ npm install -g @iambarryking/ag # Install globally
62
+
63
+ Examples:
64
+ ag "debug this typescript error"
65
+ ag -m google/gemini-2.5-flash "refactor this"
66
+ ag -b http://localhost:11434/v1 "hello" # Local Ollama
67
+ `);
68
+ }
69
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/cli/parser.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;aACrF,IAAI,CAAC,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;aACtF,IAAI,CAAC,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;aAC5F,IAAI,CAAC,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;aAC/F,IAAI,CAAC,GAAG,KAAK,kBAAkB,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;aACzH,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;aAC5C,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;aAC1D,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCb,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Agent } from '../core/agent.js';
2
+ export declare class REPL {
3
+ private readonly agent;
4
+ private readonly rl;
5
+ constructor(agent: Agent);
6
+ start(): Promise<void>;
7
+ private handleCommand;
8
+ private ask;
9
+ }
10
+ //# sourceMappingURL=repl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/cli/repl.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AASzC,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;gBAEnB,KAAK,EAAE,KAAK;IAKlB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAiCd,aAAa;IA0L3B,OAAO,CAAC,GAAG;CAGZ"}
@@ -0,0 +1,256 @@
1
+ import { createInterface } from 'node:readline';
2
+ import { loadConfig, saveConfig, configPath } from '../core/config.js';
3
+ import { C } from '../core/colors.js';
4
+ function maskKey(key) {
5
+ if (key.length <= 8)
6
+ return '****';
7
+ return key.slice(0, 8) + '****';
8
+ }
9
+ export class REPL {
10
+ agent;
11
+ rl;
12
+ constructor(agent) {
13
+ this.agent = agent;
14
+ this.rl = createInterface({ input: process.stdin, output: process.stderr });
15
+ }
16
+ async start() {
17
+ const stats = this.agent.getStats();
18
+ console.error(`${C.bold}ag${C.reset} ${C.dim}(${this.agent.getModel()} via OpenRouter)${C.reset}`);
19
+ if (stats.globalMemory || stats.projectMemory || stats.planCount > 0) {
20
+ const loaded = [stats.globalMemory && 'global', stats.projectMemory && 'project', stats.planCount > 0 && `${stats.planCount} plan(s)`].filter(Boolean);
21
+ console.error(`${C.dim}Memory loaded: ${loaded.join(', ')}${C.reset}`);
22
+ }
23
+ if (stats.historyLines > 0) {
24
+ console.error(`${C.dim}History: ${stats.historyLines} messages${C.reset}`);
25
+ }
26
+ console.error(`${C.dim}Commands: /help${C.reset}\n`);
27
+ while (true) {
28
+ try {
29
+ const input = await this.ask(`${C.green}you>${C.reset} `);
30
+ if (!input.trim())
31
+ continue;
32
+ if (input.startsWith('/')) {
33
+ await this.handleCommand(input);
34
+ continue;
35
+ }
36
+ let response = await this.agent.chat(input);
37
+ while (response === '[Max iterations reached]') {
38
+ console.error(`${C.yellow}Reached iteration limit.${C.reset}`);
39
+ const answer = await this.ask(`${C.yellow}Continue? (y/n)>${C.reset} `);
40
+ if (answer.trim().toLowerCase() !== 'y')
41
+ break;
42
+ response = await this.agent.chat('continue where you left off');
43
+ }
44
+ if (response !== '[Max iterations reached]') {
45
+ console.log(`\n${C.bold}agent>${C.reset} ${response}\n`);
46
+ }
47
+ }
48
+ catch (error) {
49
+ console.error(`${C.red}Error: ${error.message}${C.reset}\n`);
50
+ }
51
+ }
52
+ }
53
+ async handleCommand(command) {
54
+ const [cmd, ...args] = command.slice(1).split(' ');
55
+ const sub = cmd.toLowerCase();
56
+ switch (sub) {
57
+ case 'help':
58
+ console.error(`${C.bold}Commands:${C.reset}`);
59
+ console.error(` ${C.cyan}/help${C.reset} Show this help`);
60
+ console.error(` ${C.cyan}/model <name>${C.reset} Switch model (e.g. anthropic/claude-sonnet-4.6)`);
61
+ console.error(` ${C.cyan}/models [query]${C.reset} List OpenRouter models (e.g. /models claude)`);
62
+ console.error(` ${C.cyan}/tools${C.reset} List loaded tools`);
63
+ console.error(` ${C.cyan}/config${C.reset} Show persistent config`);
64
+ console.error(` ${C.cyan}/config set <k> <v>${C.reset} Set a config value`);
65
+ console.error(` ${C.cyan}/stats${C.reset} Memory status`);
66
+ console.error(` ${C.cyan}/memory${C.reset} Show global memory`);
67
+ console.error(` ${C.cyan}/project${C.reset} Show project memory`);
68
+ console.error(` ${C.cyan}/plan${C.reset} Show current (latest) plan`);
69
+ console.error(` ${C.cyan}/plan use <name>${C.reset} Activate an older plan (copies as latest)`);
70
+ console.error(` ${C.cyan}/plans${C.reset} List all plans`);
71
+ console.error(` ${C.cyan}/clear project${C.reset} Clear project memory + plan + history`);
72
+ console.error(` ${C.cyan}/clear all${C.reset} Clear everything including global`);
73
+ console.error(` ${C.cyan}/paths${C.reset} Show memory file paths`);
74
+ console.error(` ${C.cyan}/exit${C.reset} Exit`);
75
+ console.error('');
76
+ break;
77
+ case 'model':
78
+ if (!args[0]) {
79
+ console.error(`${C.dim}Current model: ${this.agent.getModel()}${C.reset}\n`);
80
+ }
81
+ else {
82
+ this.agent.setModel(args.join('/'));
83
+ console.error(`${C.yellow}Model set to: ${this.agent.getModel()}${C.reset}\n`);
84
+ }
85
+ break;
86
+ case 'models': {
87
+ const query = args.join(' ');
88
+ console.error(`${C.dim}Fetching models from OpenRouter...${C.reset}`);
89
+ try {
90
+ const models = await this.agent.fetchModels(query || undefined);
91
+ if (models.length === 0) {
92
+ console.error(`${C.dim}No models found${query ? ` matching "${query}"` : ''}.${C.reset}\n`);
93
+ break;
94
+ }
95
+ const current = this.agent.getModel();
96
+ const shown = models.slice(0, 30);
97
+ for (const m of shown) {
98
+ const marker = m.id === current ? C.green + '> ' : ' ';
99
+ const ctx = m.context_length ? `${C.dim}${Math.round(m.context_length / 1000)}k${C.reset}` : '';
100
+ const price = m.pricing?.prompt ? `${C.dim}$${(parseFloat(m.pricing.prompt) * 1_000_000).toFixed(2)}/M${C.reset}` : '';
101
+ console.error(`${marker}${C.cyan}${m.id}${C.reset} ${ctx} ${price}`);
102
+ }
103
+ if (models.length > 30)
104
+ console.error(`${C.dim} ...and ${models.length - 30} more. Filter with /models <query>${C.reset}`);
105
+ console.error(`${C.dim} Use /model <id> to switch${C.reset}\n`);
106
+ }
107
+ catch (e) {
108
+ console.error(`${C.red}Error fetching models: ${e.message}${C.reset}\n`);
109
+ }
110
+ break;
111
+ }
112
+ case 'tools': {
113
+ const tools = this.agent.getTools();
114
+ console.error(`${C.bold}Tools (${tools.length}):${C.reset}`);
115
+ for (const t of tools) {
116
+ console.error(` ${C.cyan}${t.name}${C.reset} ${C.dim}${t.description.slice(0, 70)}${t.description.length > 70 ? '...' : ''}${C.reset}`);
117
+ }
118
+ console.error('');
119
+ break;
120
+ }
121
+ case 'config': {
122
+ if (args[0]?.toLowerCase() === 'set' && args[1]) {
123
+ const key = args[1];
124
+ const value = args.slice(2).join(' ');
125
+ if (!value) {
126
+ console.error(`${C.red}Usage: /config set <key> <value>${C.reset}\n`);
127
+ break;
128
+ }
129
+ const validKeys = ['apiKey', 'model', 'baseURL', 'systemPrompt', 'maxIterations'];
130
+ if (!validKeys.includes(key)) {
131
+ console.error(`${C.red}Valid keys: ${validKeys.join(', ')}${C.reset}\n`);
132
+ break;
133
+ }
134
+ const parsed = key === 'maxIterations' ? parseInt(value, 10) : value;
135
+ saveConfig({ [key]: parsed });
136
+ const display = key === 'apiKey' ? maskKey(value) : value;
137
+ console.error(`${C.yellow}Config: ${key} = ${display}${C.reset}`);
138
+ console.error(`${C.dim}Saved to ${configPath()}${C.reset}\n`);
139
+ }
140
+ else if (args[0]?.toLowerCase() === 'path') {
141
+ console.error(`${C.dim}${configPath()}${C.reset}\n`);
142
+ }
143
+ else {
144
+ const cfg = loadConfig();
145
+ console.error(`${C.bold}Config${C.reset} ${C.dim}(${configPath()})${C.reset}`);
146
+ if (cfg.apiKey)
147
+ console.error(` apiKey: ${C.dim}${maskKey(cfg.apiKey)}${C.reset}`);
148
+ if (cfg.model)
149
+ console.error(` model: ${C.cyan}${cfg.model}${C.reset}`);
150
+ if (cfg.baseURL)
151
+ console.error(` baseURL: ${C.dim}${cfg.baseURL}${C.reset}`);
152
+ if (cfg.systemPrompt)
153
+ console.error(` systemPrompt: ${C.dim}${cfg.systemPrompt.slice(0, 60)}...${C.reset}`);
154
+ if (cfg.maxIterations)
155
+ console.error(` maxIterations: ${C.cyan}${cfg.maxIterations}${C.reset}`);
156
+ if (!cfg.apiKey && !cfg.model && !cfg.baseURL && !cfg.systemPrompt && !cfg.maxIterations) {
157
+ console.error(`${C.dim} (empty — using defaults and env vars)${C.reset}`);
158
+ }
159
+ console.error('');
160
+ }
161
+ break;
162
+ }
163
+ case 'stats': {
164
+ const stats = this.agent.getStats();
165
+ console.error(`${C.bold}Memory${C.reset}`);
166
+ console.error(` Global memory: ${stats.globalMemory ? C.green + 'yes' : C.dim + 'none'}${C.reset}`);
167
+ console.error(` Project memory: ${stats.projectMemory ? C.green + 'yes' : C.dim + 'none'}${C.reset}`);
168
+ console.error(` Plans: ${C.cyan}${stats.planCount}${C.reset}`);
169
+ console.error(` History: ${C.cyan}${stats.historyLines}${C.reset} messages`);
170
+ console.error('');
171
+ break;
172
+ }
173
+ case 'memory': {
174
+ const content = this.agent.getGlobalMemory();
175
+ console.error(content ? `${C.bold}Global memory:${C.reset}\n${content}\n` : `${C.dim}No global memory. Edit ~/.ag/memory.md${C.reset}\n`);
176
+ break;
177
+ }
178
+ case 'project': {
179
+ const content = this.agent.getProjectMemory();
180
+ console.error(content ? `${C.bold}Project memory:${C.reset}\n${content}\n` : `${C.dim}No project memory yet.${C.reset}\n`);
181
+ break;
182
+ }
183
+ case 'plan': {
184
+ if (args[0]?.toLowerCase() === 'use' && args[1]) {
185
+ const name = args.slice(1).join(' ');
186
+ const plans = this.agent.getPlans();
187
+ const match = plans.find(p => p.name.includes(name));
188
+ if (!match) {
189
+ console.error(`${C.red}No plan matching "${name}". Use /plans to list.${C.reset}\n`);
190
+ break;
191
+ }
192
+ const content = this.agent.getPlanByName(match.name);
193
+ if (!content) {
194
+ console.error(`${C.red}Plan is empty.${C.reset}\n`);
195
+ break;
196
+ }
197
+ this.agent.setPlan(content, match.name.replace(/^\d{4}-\d{2}-\d{2}T[\d-]+-?/, '').replace(/-/g, ' ').trim() || undefined);
198
+ console.error(`${C.yellow}Activated plan: ${match.name}${C.reset}`);
199
+ console.error(`${C.dim}(copied as new latest plan)${C.reset}\n`);
200
+ }
201
+ else {
202
+ const content = this.agent.getPlan();
203
+ console.error(content ? `${C.bold}Current plan (latest):${C.reset}\n${content}\n` : `${C.dim}No plans yet.${C.reset}\n`);
204
+ }
205
+ break;
206
+ }
207
+ case 'plans': {
208
+ const plans = this.agent.getPlans();
209
+ if (plans.length === 0) {
210
+ console.error(`${C.dim}No plans yet.${C.reset}\n`);
211
+ break;
212
+ }
213
+ console.error(`${C.bold}Plans (${plans.length}):${C.reset}`);
214
+ plans.forEach((p, i) => console.error(` ${i === 0 ? C.green + '>' : ' '} ${p.name}${C.reset}`));
215
+ console.error('');
216
+ break;
217
+ }
218
+ case 'paths': {
219
+ const p = this.agent.getPaths();
220
+ console.error(`${C.bold}Memory files:${C.reset}`);
221
+ console.error(` Config: ${configPath()}`);
222
+ console.error(` Global: ${p.globalMemory}`);
223
+ console.error(` Project: ${p.projectMemory}`);
224
+ console.error(` Plans: ${p.plansDir}/`);
225
+ console.error(` History: ${p.history}`);
226
+ console.error('');
227
+ break;
228
+ }
229
+ case 'clear': {
230
+ const target = args[0]?.toLowerCase();
231
+ if (target === 'project') {
232
+ this.agent.clearProject();
233
+ console.error(`${C.yellow}Project memory, plan, and history cleared.${C.reset}\n`);
234
+ }
235
+ else if (target === 'all') {
236
+ this.agent.clearAll();
237
+ console.error(`${C.yellow}All memory cleared.${C.reset}\n`);
238
+ }
239
+ else {
240
+ console.error(`${C.dim}Usage: /clear project or /clear all${C.reset}\n`);
241
+ }
242
+ break;
243
+ }
244
+ case 'exit':
245
+ case 'quit':
246
+ console.error(`${C.dim}Goodbye!${C.reset}`);
247
+ process.exit(0);
248
+ default:
249
+ console.error(`${C.red}Unknown command: ${sub}. Type /help${C.reset}\n`);
250
+ }
251
+ }
252
+ ask(prompt) {
253
+ return new Promise(resolve => this.rl.question(prompt, resolve));
254
+ }
255
+ }
256
+ //# sourceMappingURL=repl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/cli/repl.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}