@agntk/cli 0.1.2 → 0.2.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/dist/repl.js DELETED
@@ -1,217 +0,0 @@
1
- /**
2
- * @fileoverview Interactive REPL mode for agntk.
3
- * Provides a readline-based conversational loop with the agent.
4
- *
5
- * Usage: npx agntk -i [--memory] [--role coder]
6
- */
7
- import { createInterface } from 'node:readline';
8
- import { createAgent } from '@agntk/core';
9
- import { formatEnvironmentPrompt } from './environment.js';
10
- import { getVersion } from './version.js';
11
- // ============================================================================
12
- // REPL Commands
13
- // ============================================================================
14
- const REPL_COMMANDS = {
15
- '/help': {
16
- description: 'Show available commands',
17
- handler: (ctx) => {
18
- ctx.output.write('\nAvailable commands:\n');
19
- for (const [cmd, { description }] of Object.entries(REPL_COMMANDS)) {
20
- ctx.output.write(` ${cmd.padEnd(12)} ${description}\n`);
21
- }
22
- ctx.output.write('\n');
23
- },
24
- },
25
- '/clear': {
26
- description: 'Clear conversation history',
27
- handler: (ctx) => {
28
- ctx.history = [];
29
- ctx.output.write('Conversation cleared.\n');
30
- },
31
- },
32
- '/role': {
33
- description: 'Show current agent role',
34
- handler: (ctx) => {
35
- ctx.output.write(`Current role: ${ctx.config.role}\n`);
36
- },
37
- },
38
- '/env': {
39
- description: 'Show detected environment',
40
- handler: (ctx) => {
41
- ctx.output.write(formatEnvironmentPrompt(ctx.environment) + '\n');
42
- },
43
- },
44
- '/exit': {
45
- description: 'Exit the REPL',
46
- handler: (ctx) => {
47
- ctx.shouldExit = true;
48
- },
49
- },
50
- };
51
- // ============================================================================
52
- // Interactive REPL
53
- // ============================================================================
54
- /**
55
- * Run the interactive REPL.
56
- */
57
- export async function runRepl(options) {
58
- const { config, environment } = options;
59
- const input = options.input ?? process.stdin;
60
- const output = options.output ?? process.stdout;
61
- // Validate API key
62
- if (!config.apiKey) {
63
- output.write('Error: No API key found.\n\n' +
64
- ' 1. Get a free key at https://openrouter.ai/keys\n' +
65
- ' 2. Add to your shell profile (~/.zshrc or ~/.bashrc):\n\n' +
66
- ' export OPENROUTER_API_KEY=sk-or-...\n\n' +
67
- ' Then restart your terminal or run: source ~/.zshrc\n');
68
- return { exchanges: 0, success: false, error: 'No API key' };
69
- }
70
- // Build agent options
71
- const envPrompt = formatEnvironmentPrompt(environment);
72
- const agentOptions = {
73
- role: config.role,
74
- maxSteps: config.maxSteps,
75
- toolPreset: config.toolPreset,
76
- workspaceRoot: config.workspace,
77
- enableMemory: config.memory,
78
- };
79
- if (config.model && config.provider) {
80
- agentOptions.modelProvider = config.provider;
81
- agentOptions.modelName = config.model;
82
- }
83
- // Create agent
84
- const agent = createAgent(agentOptions);
85
- // Print welcome banner
86
- const version = getVersion();
87
- output.write(`\nagntk v${version} — interactive mode\n`);
88
- output.write(`Role: ${config.role} | Model: ${config.model ?? 'default'} | Memory: ${config.memory ? 'on' : 'off'}\n`);
89
- output.write(`Type /help for commands, /exit or Ctrl+C to quit.\n\n`);
90
- // Create readline interface
91
- const rl = createInterface({
92
- input: input,
93
- output: output,
94
- prompt: '> ',
95
- terminal: true,
96
- });
97
- const ctx = {
98
- config,
99
- environment,
100
- history: [],
101
- output,
102
- shouldExit: false,
103
- };
104
- let exchanges = 0;
105
- return new Promise((resolve) => {
106
- rl.prompt();
107
- rl.on('line', async (line) => {
108
- const trimmed = line.trim();
109
- // Empty line
110
- if (!trimmed) {
111
- rl.prompt();
112
- return;
113
- }
114
- // Check for REPL commands
115
- const cmdKey = trimmed.split(' ')[0].toLowerCase();
116
- if (REPL_COMMANDS[cmdKey]) {
117
- REPL_COMMANDS[cmdKey].handler(ctx);
118
- if (ctx.shouldExit) {
119
- rl.close();
120
- return;
121
- }
122
- rl.prompt();
123
- return;
124
- }
125
- // Send to agent
126
- ctx.history.push({ role: 'user', content: trimmed });
127
- const maxHistoryPairs = 10; // keep last 10 user/assistant pairs
128
- const recentHistory = ctx.history.length > maxHistoryPairs * 2
129
- ? ctx.history.slice(-maxHistoryPairs * 2)
130
- : ctx.history;
131
- const historyLines = recentHistory.map((h) => h.role === 'user' ? `[User]: ${h.content}` : `[Assistant]: ${h.content}`);
132
- const contextPrompt = [
133
- '<conversation_history>',
134
- ...historyLines.slice(0, -1), // all but current user message
135
- '</conversation_history>',
136
- '',
137
- recentHistory[recentHistory.length - 1].content, // current user message as the actual prompt
138
- ].join('\n');
139
- try {
140
- output.write('\n');
141
- // Stream output progressively (show tool calls + results + text)
142
- const streamResult = await agent.stream({ prompt: contextPrompt });
143
- let afterToolResult = false;
144
- for await (const chunk of streamResult.fullStream) {
145
- if (chunk.type === 'tool-call') {
146
- const toolChunk = chunk;
147
- const argsStr = toolChunk.input ? JSON.stringify(toolChunk.input) : '';
148
- output.write(`\n⚡ ${toolChunk.toolName}(${argsStr})\n`);
149
- afterToolResult = false;
150
- }
151
- else if (chunk.type === 'tool-result') {
152
- const resultChunk = chunk;
153
- const raw = typeof resultChunk.output === 'string'
154
- ? resultChunk.output
155
- : JSON.stringify(resultChunk.output);
156
- let displayOutput = raw;
157
- try {
158
- const parsed = JSON.parse(raw);
159
- if (parsed && typeof parsed.output === 'string') {
160
- displayOutput = parsed.output;
161
- }
162
- }
163
- catch {
164
- // Use raw output as-is
165
- }
166
- const maxLen = 2000;
167
- if (displayOutput.length > maxLen) {
168
- displayOutput = displayOutput.slice(0, maxLen) + `\n... (${displayOutput.length} chars total)`;
169
- }
170
- output.write(`${displayOutput}\n`);
171
- afterToolResult = true;
172
- }
173
- else if (chunk.type === 'text-delta') {
174
- const textChunk = chunk;
175
- if (afterToolResult) {
176
- output.write('\n');
177
- afterToolResult = false;
178
- }
179
- output.write(textChunk.text);
180
- }
181
- }
182
- const responseText = (await streamResult.text) ?? '';
183
- if (responseText && !responseText.endsWith('\n')) {
184
- output.write('\n');
185
- }
186
- ctx.history.push({ role: 'assistant', content: responseText });
187
- exchanges++;
188
- if (config.verbose) {
189
- const totalUsage = await streamResult.totalUsage;
190
- const steps = await streamResult.steps;
191
- if (totalUsage) {
192
- const usage = totalUsage;
193
- output.write(`\n[${usage.inputTokens ?? 0} in / ${usage.outputTokens ?? 0} out | ${steps?.length ?? 0} step(s)]\n`);
194
- }
195
- }
196
- }
197
- catch (error) {
198
- const msg = error instanceof Error ? error.message : String(error);
199
- output.write(`\nError: ${msg}\n`);
200
- }
201
- output.write('\n');
202
- rl.prompt();
203
- });
204
- rl.on('close', () => {
205
- output.write('\nGoodbye!\n');
206
- resolve({
207
- exchanges,
208
- success: true,
209
- });
210
- });
211
- rl.on('SIGINT', () => {
212
- output.write('\n');
213
- rl.close();
214
- });
215
- });
216
- }
217
- //# sourceMappingURL=repl.js.map
package/dist/repl.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"repl.js","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"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"}
package/dist/runner.d.ts DELETED
@@ -1,38 +0,0 @@
1
- /**
2
- * @fileoverview One-shot execution runner for agntk CLI.
3
- * Takes a resolved config + prompt, creates an agent, and streams output progressively to stdout.
4
- *
5
- * This is the "happy path": npx agntk "organize this folder by date"
6
- */
7
- import type { ResolvedCLIConfig } from './config.js';
8
- import type { EnvironmentContext } from './environment.js';
9
- export interface RunResult {
10
- /** Final text output from the agent */
11
- text: string;
12
- /** Number of tool steps executed */
13
- steps: number;
14
- /** Whether the run completed successfully */
15
- success: boolean;
16
- /** Error message if failed */
17
- error?: string;
18
- }
19
- export interface RunOptions {
20
- /** Resolved CLI config */
21
- config: ResolvedCLIConfig;
22
- /** Environment context (for system prompt injection) */
23
- environment: EnvironmentContext;
24
- /** Where to write streaming output. Default: process.stdout */
25
- output?: NodeJS.WritableStream;
26
- /** Where to write status messages. Default: process.stderr */
27
- statusOutput?: NodeJS.WritableStream;
28
- }
29
- /**
30
- * Run the agent in one-shot mode.
31
- * Creates an agent, sends the prompt, streams output to stdout.
32
- */
33
- export declare function runOneShot(prompt: string, options: RunOptions): Promise<RunResult>;
34
- /**
35
- * Read piped stdin (e.g., `cat file.log | agntk "explain this"`)
36
- */
37
- export declare function readStdin(timeoutMs?: number): Promise<string | null>;
38
- //# sourceMappingURL=runner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAO3D,MAAM,WAAW,SAAS;IACxB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,0BAA0B;IAC1B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,wDAAwD;IACxD,WAAW,EAAE,kBAAkB,CAAC;IAChC,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC/B,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CACtC;AAgCD;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,SAAS,CAAC,CAkKpB;AAMD;;GAEG;AACH,wBAAsB,SAAS,CAAC,SAAS,GAAE,MAAY,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgC/E"}
package/dist/runner.js DELETED
@@ -1,218 +0,0 @@
1
- /**
2
- * @fileoverview One-shot execution runner for agntk CLI.
3
- * Takes a resolved config + prompt, creates an agent, and streams output progressively to stdout.
4
- *
5
- * This is the "happy path": npx agntk "organize this folder by date"
6
- */
7
- import { createAgent } from '@agntk/core';
8
- import { formatEnvironmentPrompt } from './environment.js';
9
- // ============================================================================
10
- // Config → AgentOptions mapping
11
- // ============================================================================
12
- function buildAgentOptions(config, environment) {
13
- const agentOptions = {
14
- role: config.role,
15
- maxSteps: config.maxSteps,
16
- toolPreset: config.toolPreset,
17
- workspaceRoot: config.workspace,
18
- enableMemory: config.memory,
19
- systemPromptPrefix: formatEnvironmentPrompt(environment),
20
- };
21
- // If user provided a model string, pass it through
22
- if (config.model && config.provider) {
23
- agentOptions.modelProvider = config.provider;
24
- agentOptions.modelName = config.model;
25
- }
26
- return agentOptions;
27
- }
28
- // ============================================================================
29
- // One-Shot Runner
30
- // ============================================================================
31
- /**
32
- * Run the agent in one-shot mode.
33
- * Creates an agent, sends the prompt, streams output to stdout.
34
- */
35
- export async function runOneShot(prompt, options) {
36
- const { config, environment } = options;
37
- const output = options.output ?? process.stdout;
38
- const statusOutput = options.statusOutput ?? process.stderr;
39
- // Validate
40
- if (!prompt || prompt.trim().length === 0) {
41
- return {
42
- text: '',
43
- steps: 0,
44
- success: false,
45
- error: 'No prompt provided. Use: agntk "your prompt here" or agntk -i for interactive mode.',
46
- };
47
- }
48
- if (config.verbose) {
49
- statusOutput.write(`[agntk] Role: ${config.role}\n`);
50
- statusOutput.write(`[agntk] Provider: ${config.provider ?? 'auto-detect'}\n`);
51
- statusOutput.write(`[agntk] Model: ${config.model ?? 'default'}\n`);
52
- statusOutput.write(`[agntk] Workspace: ${config.workspace}\n`);
53
- statusOutput.write(`[agntk] Max steps: ${config.maxSteps}\n`);
54
- statusOutput.write(`[agntk] Tool preset: ${config.toolPreset}\n`);
55
- statusOutput.write(`[agntk] Memory: ${config.memory ? 'enabled' : 'disabled'}\n`);
56
- }
57
- // Dry run — show what would happen without executing (no API key needed)
58
- if (config.dryRun) {
59
- const dryOutput = [
60
- `[dry-run] Would create agent:`,
61
- ` Role: ${config.role}`,
62
- ` Provider: ${config.provider}`,
63
- ` Model: ${config.model ?? 'default'}`,
64
- ` Workspace: ${config.workspace}`,
65
- ` Max steps: ${config.maxSteps}`,
66
- ` Tool preset: ${config.toolPreset}`,
67
- ` Memory: ${config.memory ? 'enabled' : 'disabled'}`,
68
- ` Prompt: "${prompt}"`,
69
- ``,
70
- ].join('\n');
71
- output.write(dryOutput);
72
- return {
73
- text: dryOutput,
74
- steps: 0,
75
- success: true,
76
- };
77
- }
78
- // API key required for actual execution
79
- if (!config.apiKey) {
80
- return {
81
- text: '',
82
- steps: 0,
83
- success: false,
84
- error: 'No API key found.\n\n' +
85
- ' 1. Get a free key at https://openrouter.ai/keys\n' +
86
- ' 2. Add to your shell profile (~/.zshrc or ~/.bashrc):\n\n' +
87
- ' export OPENROUTER_API_KEY=sk-or-...\n\n' +
88
- ' Then restart your terminal or run: source ~/.zshrc',
89
- };
90
- }
91
- // Build agent options
92
- const agentOptions = buildAgentOptions(config, environment);
93
- try {
94
- // Create the agent
95
- const agent = createAgent(agentOptions);
96
- if (config.verbose) {
97
- statusOutput.write(`[agntk] Agent created (${agent.agentId})\n`);
98
- statusOutput.write(`[agntk] Sending prompt...\n`);
99
- }
100
- // Stream output progressively so text appears as the model generates it
101
- const streamResult = await agent.stream({ prompt });
102
- // Track whether we need a leading newline before text (after tool output)
103
- let afterToolResult = false;
104
- // Write text chunks and tool activity as they arrive
105
- for await (const chunk of streamResult.fullStream) {
106
- if (chunk.type === 'tool-call') {
107
- const toolChunk = chunk;
108
- const argsStr = toolChunk.input ? JSON.stringify(toolChunk.input) : '';
109
- statusOutput.write(`\n⚡ ${toolChunk.toolName}(${argsStr})\n`);
110
- afterToolResult = false;
111
- }
112
- else if (chunk.type === 'tool-result') {
113
- const resultChunk = chunk;
114
- const raw = typeof resultChunk.output === 'string'
115
- ? resultChunk.output
116
- : JSON.stringify(resultChunk.output);
117
- // Parse tool output — tools return JSON with { success, output }
118
- let displayOutput = raw;
119
- try {
120
- const parsed = JSON.parse(raw);
121
- if (parsed && typeof parsed.output === 'string') {
122
- displayOutput = parsed.output;
123
- }
124
- }
125
- catch {
126
- // Use raw output as-is
127
- }
128
- // Truncate very long output for display
129
- const maxLen = 2000;
130
- if (displayOutput.length > maxLen) {
131
- displayOutput = displayOutput.slice(0, maxLen) + `\n... (${displayOutput.length} chars total)`;
132
- }
133
- statusOutput.write(`${displayOutput}\n`);
134
- afterToolResult = true;
135
- }
136
- else if (chunk.type === 'text-delta') {
137
- const textChunk = chunk;
138
- if (afterToolResult) {
139
- output.write('\n');
140
- afterToolResult = false;
141
- }
142
- output.write(textChunk.text);
143
- }
144
- }
145
- // Get final results (already resolved since we consumed the full stream)
146
- const finalText = await streamResult.text;
147
- const steps = await streamResult.steps;
148
- const stepCount = steps?.length ?? 0;
149
- // Ensure trailing newline
150
- if (finalText && !finalText.endsWith('\n')) {
151
- output.write('\n');
152
- }
153
- if (config.verbose) {
154
- statusOutput.write(`[agntk] Completed in ${stepCount} step(s)\n`);
155
- const totalUsage = await streamResult.totalUsage;
156
- if (totalUsage) {
157
- const usage = totalUsage;
158
- statusOutput.write(`[agntk] Tokens: ${usage.inputTokens ?? 0} in / ${usage.outputTokens ?? 0} out\n`);
159
- }
160
- }
161
- return {
162
- text: finalText ?? '',
163
- steps: stepCount,
164
- success: true,
165
- };
166
- }
167
- catch (error) {
168
- const message = error instanceof Error ? error.message : String(error);
169
- if (config.verbose) {
170
- statusOutput.write(`[agntk] Error: ${message}\n`);
171
- if (error instanceof Error && error.stack) {
172
- statusOutput.write(`[agntk] ${error.stack}\n`);
173
- }
174
- }
175
- return {
176
- text: '',
177
- steps: 0,
178
- success: false,
179
- error: message,
180
- };
181
- }
182
- }
183
- // ============================================================================
184
- // Piped Input Handler
185
- // ============================================================================
186
- /**
187
- * Read piped stdin (e.g., `cat file.log | agntk "explain this"`)
188
- */
189
- export async function readStdin(timeoutMs = 100) {
190
- // If stdin is a TTY (interactive terminal), there's no piped input
191
- if (process.stdin.isTTY) {
192
- return null;
193
- }
194
- return new Promise((resolve) => {
195
- const chunks = [];
196
- let resolved = false;
197
- const finish = () => {
198
- if (resolved)
199
- return;
200
- resolved = true;
201
- if (chunks.length === 0) {
202
- resolve(null);
203
- }
204
- else {
205
- resolve(Buffer.concat(chunks).toString('utf-8'));
206
- }
207
- };
208
- process.stdin.on('data', (chunk) => {
209
- chunks.push(chunk);
210
- });
211
- process.stdin.on('end', finish);
212
- process.stdin.on('error', () => finish());
213
- // Safety timeout for edge cases
214
- setTimeout(finish, timeoutMs);
215
- process.stdin.resume();
216
- });
217
- }
218
- //# sourceMappingURL=runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}