ai-agent-test 0.3.2 → 0.4.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 CHANGED
@@ -1,5 +1,7 @@
1
1
  # AI Agent Test
2
2
 
3
+ [![npm version](https://img.shields.io/npm/v/ai-agent-test.svg)](https://www.npmjs.com/package/ai-agent-test)
4
+
3
5
  A lightweight, extensible agentic workflow system built with TypeScript and the AI SDK. This project serves as a testbed for implementing mini agentic flows with support for small-sized local LLMs (30B-80B parameters) and few tool integrations.
4
6
 
5
7
  ## 🌟 Features
@@ -74,6 +76,18 @@ ai
74
76
  AI_MODEL_INDEX=1 ai
75
77
  ```
76
78
 
79
+ ### Using Environment Variables (CI/CD Friendly)
80
+
81
+ Instead of using `~/.ai/models.json`, you can configure the CLI entirely through environment variables. This is especially useful for CI/CD environments:
82
+
83
+ ```bash
84
+ export AI_MODEL_APITYPE="openai"
85
+ export AI_MODEL_NAME="gpt-4o"
86
+ export AI_API_BASE_URL="https://api.openai.com/v1"
87
+ export AI_API_KEY="your_api_key_here"
88
+ ai
89
+ ```
90
+
77
91
  ### Additional Environment Variables
78
92
 
79
93
  - `BRAVE_API_KEY`: (Required) API key for Brave Search for the internet search tool
@@ -86,3 +100,14 @@ When installed globally, run `ai` to start the interactive CLI:
86
100
  - `exit` or `quit` to terminate the session
87
101
  - `debug <n>` to view last n messages (or all if no number provided)
88
102
  - ESC key to interrupt the current agent iteration
103
+
104
+ ### Session Management
105
+
106
+ View and restore previous sessions:
107
+
108
+ ```bash
109
+ ai sessions ls # List last 20 sessions with 0-based indexing
110
+ ai sessions 2 # Load and restart from session 2
111
+ ```
112
+
113
+ When loading a session, the conversation history is restored and logged to the current session file.
package/bin/ai CHANGED
@@ -1,5 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ // Load config first (before any imports that use it)
4
+ import { loadConfig } from '../dist/config.js';
5
+ const config = loadConfig();
6
+ process.env.AI_MODEL_APITYPE = config.modelApiType;
7
+ process.env.AI_MODEL_NAME = config.modelName;
8
+ process.env.AI_API_BASE_URL = config.apiBaseUrl;
9
+ process.env.AI_API_KEY = config.apiKey;
10
+
3
11
  // Pass command-line arguments to the main module
4
12
  import { argv } from 'process';
5
13
 
@@ -21,7 +29,9 @@ if (argv[2] === '--help') {
21
29
  Usage: ai [options] [model-index]
22
30
 
23
31
  Commands:
24
- update Update the ai-agent-test package to the latest version
32
+ sessions ls List last 20 sessions
33
+ sessions <idx> Load and restart from session <idx>
34
+ update Update the ai-agent-test package to the latest version
25
35
  --version Show version number
26
36
  --help Show help message
27
37
 
@@ -31,6 +41,8 @@ Arguments:
31
41
  Examples:
32
42
  ai # Run with default model
33
43
  ai 1 # Run with second model in config
44
+ ai sessions ls # List last 20 sessions
45
+ ai sessions 2 # Load and restart from session 2
34
46
  ai update # Update to latest version
35
47
  ai --version # Show version
36
48
  ai --help # Show help
@@ -47,6 +59,57 @@ if (argv[2] === 'update') {
47
59
  });
48
60
  }
49
61
 
62
+ // Handle sessions command
63
+ if (argv[2] === 'sessions') {
64
+ const subCommand = argv[3];
65
+
66
+ import('../dist/utils/system.js').then(({ listSessions, loadSession, getSessionFileByIndex }) => {
67
+ if (subCommand === 'ls') {
68
+ // List sessions
69
+ const sessions = listSessions(20);
70
+ if (sessions.length === 0) {
71
+ console.log('No sessions found.');
72
+ } else {
73
+ console.log(`Last ${sessions.length} sessions:`);
74
+ sessions.forEach((session, index) => {
75
+ let line = `${index}. ${session.timestamp}`;
76
+ if (session.summary) {
77
+ line += ` - ${session.summary}`;
78
+ }
79
+ console.log(line);
80
+ });
81
+ }
82
+ process.exit(0);
83
+ } else {
84
+ // Load a specific session by index
85
+ const sessionIndex = subCommand ? parseInt(subCommand, 10) : undefined;
86
+ if (sessionIndex !== undefined && !isNaN(sessionIndex)) {
87
+ const sessionFile = getSessionFileByIndex(sessionIndex);
88
+ if (!sessionFile) {
89
+ console.log(`Session ${sessionIndex} not found.`);
90
+ process.exit(1);
91
+ }
92
+
93
+ const messages = loadSession(sessionFile);
94
+ if (!messages) {
95
+ console.log(`Could not load session ${sessionIndex}.`);
96
+ process.exit(1);
97
+ }
98
+
99
+ // Set env var to tell index.ts to load this session
100
+ process.env.AI_SESSION_INDEX = sessionIndex.toString();
101
+ process.env.AI_SESSION_FILE = sessionFile;
102
+
103
+ console.log(`Loaded session ${sessionIndex} from ${sessionFile}`);
104
+ // Don't exit here - let the app continue to index.js
105
+ } else {
106
+ console.log('Usage: ai sessions <index> or ai sessions ls');
107
+ process.exit(1);
108
+ }
109
+ }
110
+ });
111
+ }
112
+
50
113
  // Set AI_MODEL_INDEX environment variable if provided as first argument
51
114
  if (argv[2]) {
52
115
  process.env.AI_MODEL_INDEX = argv[2];
@@ -0,0 +1,8 @@
1
+ export interface ModelConfig {
2
+ modelApiType: "openai" | "google";
3
+ modelName: string;
4
+ apiBaseUrl: string;
5
+ apiKey: string;
6
+ }
7
+ export declare function loadConfig(): ModelConfig;
8
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,UAAU,IAAI,WAAW,CAkExC"}
package/dist/config.js ADDED
@@ -0,0 +1,50 @@
1
+ import { homedir } from "os";
2
+ import { join } from "path";
3
+ import { readFileSync } from "fs";
4
+ import chalk from "chalk";
5
+ export function loadConfig() {
6
+ const modelsFile = join(homedir(), ".ai", "models.json");
7
+ // Try to load from models.json first
8
+ try {
9
+ const fileContent = readFileSync(modelsFile, "utf-8");
10
+ const models = JSON.parse(fileContent);
11
+ const modelIndex = parseInt(process.env.AI_MODEL_INDEX || "0", 10);
12
+ return models[modelIndex];
13
+ }
14
+ catch (error) {
15
+ // models.json doesn't exist or is invalid
16
+ // Check for environment variables as fallback
17
+ const modelApiType = process.env.AI_MODEL_APITYPE;
18
+ const modelName = process.env.AI_MODEL_NAME;
19
+ const apiBaseUrl = process.env.AI_API_BASE_URL;
20
+ const apiKey = process.env.AI_API_KEY;
21
+ if (modelApiType && modelName && apiBaseUrl && apiKey) {
22
+ console.log(chalk.yellow(`\nUsing environment variables for configuration (no ~/.ai/models.json found)\n`));
23
+ return {
24
+ modelApiType: modelApiType,
25
+ modelName,
26
+ apiBaseUrl,
27
+ apiKey,
28
+ };
29
+ }
30
+ // No config available
31
+ console.error(chalk.red(`Failed to load configuration from ${modelsFile}: ${error.message}`));
32
+ const sampleConfig = [
33
+ {
34
+ modelApiType: "openai (openai or google)",
35
+ modelName: "gpt-4o",
36
+ apiBaseUrl: "https://api.openai.com/v1",
37
+ apiKey: "your-api-key-here",
38
+ },
39
+ ];
40
+ console.log(chalk.yellow("\nPlease create a ~/.ai/models.json file with the following format:"));
41
+ console.log(chalk.yellow(JSON.stringify(sampleConfig, null, 2)));
42
+ console.log(chalk.yellow("\nOr set these environment variables:\n"));
43
+ console.log(chalk.yellow(` AI_MODEL_APITYPE - Either "openai" or "google"`));
44
+ console.log(chalk.yellow(` AI_MODEL_NAME - Model name (e.g., "gpt-4o")`));
45
+ console.log(chalk.yellow(` AI_API_BASE_URL - Base URL for the API`));
46
+ console.log(chalk.yellow(` AI_API_KEY - Your API key`));
47
+ process.exit(1);
48
+ }
49
+ }
50
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,MAAM,UAAU,UAAU;IACxB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IAEzD,qCAAqC;IACrC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QACnE,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,0CAA0C;QAC1C,8CAA8C;QAC9C,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAClD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QAEtC,IAAI,YAAY,IAAI,SAAS,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;YACtD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,gFAAgF,CACjF,CACF,CAAC;YACF,OAAO;gBACL,YAAY,EAAE,YAAmC;gBACjD,SAAS;gBACT,UAAU;gBACV,MAAM;aACP,CAAC;QACJ,CAAC;QAED,sBAAsB;QACtB,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,qCAAqC,UAAU,KAAM,KAAe,CAAC,OAAO,EAAE,CAC/E,CACF,CAAC;QACF,MAAM,YAAY,GAAG;YACnB;gBACE,YAAY,EAAE,2BAA2B;gBACzC,SAAS,EAAE,QAAQ;gBACnB,UAAU,EAAE,2BAA2B;gBACvC,MAAM,EAAE,mBAAmB;aAC5B;SACF,CAAC;QACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,qEAAqE,CACtE,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,yCAAyC,CAC1C,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mDAAmD,CAC/E,CAAC,CAAC;QACC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mDAAmD,CAC/E,CAAC,CAAC;QACC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4CAA4C,CACxE,CAAC,CAAC;QACC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oCAAoC,CAChE,CAAC,CAAC;QACC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
package/dist/index.js CHANGED
@@ -6,38 +6,25 @@ import chalk from "chalk";
6
6
  import fs from "fs";
7
7
  import path from "path";
8
8
  import { fileURLToPath } from "url";
9
- import { readFileSync } from "fs";
10
- import { homedir } from "os";
11
- import { join, dirname } from "path";
9
+ import { dirname } from "path";
12
10
  import { createGoogleGenerativeAI } from "@ai-sdk/google";
13
- import { logToFile, logMessages } from "./utils/system.js";
11
+ import { appendMessageToLog, loadSession } from "./utils/system.js";
12
+ import dotenv from "dotenv";
13
+ // Load environment variables from .env file
14
+ dotenv.config();
14
15
  // Get the directory of this module (works with ES modules)
15
16
  const __filename = fileURLToPath(import.meta.url);
16
17
  const __dirname = dirname(__filename);
17
- // Load configuration from ~/.ai/models.json
18
- const modelsFile = join(homedir(), ".ai", "models.json");
19
- let config;
20
- try {
21
- const fileContent = readFileSync(modelsFile, "utf-8");
22
- const models = JSON.parse(fileContent);
23
- const modelIndex = parseInt(process.env.AI_MODEL_INDEX || "0", 10);
24
- config = models[modelIndex];
18
+ // Helper function to push to messages array and write to log
19
+ function pushMessage(message) {
20
+ messages.push(message);
21
+ appendMessageToLog(message);
25
22
  }
26
- catch (error) {
27
- console.error(chalk.red(`Failed to load configuration from ${modelsFile}: ${error.message}`));
28
- const sampleConfig = [
29
- {
30
- modelApiType: "openai (openai or google)",
31
- modelName: "gpt-4o",
32
- apiBaseUrl: "https://api.openai.com/v1",
33
- apiKey: "your-api-key-here",
34
- },
35
- ];
36
- console.log(chalk.yellow("\nPlease create a ~/.ai/models.json file with the following format:"));
37
- console.log(chalk.yellow(JSON.stringify(sampleConfig, null, 2)));
38
- process.exit(1);
39
- }
40
- const { modelApiType: modelProvider, modelName, apiBaseUrl: baseUrl, apiKey, } = config;
23
+ // Read configuration from environment variables set by bin/ai
24
+ const modelProvider = process.env.AI_MODEL_APITYPE;
25
+ const modelName = process.env.AI_MODEL_NAME || "";
26
+ const baseUrl = process.env.AI_API_BASE_URL || "";
27
+ const apiKey = process.env.AI_API_KEY || "";
41
28
  let model;
42
29
  if (modelProvider === "google") {
43
30
  model = createGoogleGenerativeAI({
@@ -68,13 +55,28 @@ async function askQuestion(prompt) {
68
55
  rl.once("line", (answer) => resolve(answer));
69
56
  });
70
57
  }
58
+ // Check for loaded messages from a previous session via env var
71
59
  const messages = [];
60
+ const sessionFile = process.env.AI_SESSION_FILE;
61
+ if (sessionFile) {
62
+ const loadedMessages = loadSession(sessionFile);
63
+ if (loadedMessages) {
64
+ messages.push(...loadedMessages);
65
+ pushMessage({
66
+ role: "assistant",
67
+ content: `[Resuming previous session from file ${sessionFile}]`,
68
+ });
69
+ console.log(chalk.green(`Loaded ${messages.length} messages from previous session.`));
70
+ }
71
+ else {
72
+ console.error(chalk.red("Failed to load session."));
73
+ }
74
+ }
72
75
  async function runLoop(prompt) {
73
- messages.push({
76
+ pushMessage({
74
77
  role: "user",
75
78
  content: prompt,
76
79
  });
77
- logToFile(`User prompt: ${prompt.substring(0, 200)}...`);
78
80
  // Reset interrupt flag
79
81
  interruptRequested = false;
80
82
  // Set up ESC key listener
@@ -112,7 +114,6 @@ async function runLoop(prompt) {
112
114
  for await (const part of res.fullStream) {
113
115
  if (interruptRequested) {
114
116
  cleanupEscListener();
115
- logToFile("=== break loop: user interrupted with ESC key ===");
116
117
  return;
117
118
  }
118
119
  if (part.type === "text-delta") {
@@ -160,6 +161,7 @@ async function runLoop(prompt) {
160
161
  const toolResultIds = new Set(toolResultContent.map((result) => result.toolCallId));
161
162
  for (const toolCall of toolCallsCollected) {
162
163
  if (!toolResultIds.has(toolCall.toolCallId)) {
164
+ console.log(chalk.red(`Warning: Missing tool result for call ${toolCall.toolCallId} (${toolCall.toolName})`));
163
165
  toolResultContent.push({
164
166
  type: "tool-result",
165
167
  toolCallId: toolCall.toolCallId,
@@ -169,7 +171,6 @@ async function runLoop(prompt) {
169
171
  value: `Tool execution failed: missing tool result for call ${toolCall.toolCallId} (${toolCall.toolName}).`,
170
172
  },
171
173
  });
172
- logToFile(`Synthesized failed tool result for missing call ${toolCall.toolCallId} (${toolCall.toolName})`);
173
174
  }
174
175
  }
175
176
  const usage = await res.usage;
@@ -181,41 +182,33 @@ async function runLoop(prompt) {
181
182
  assistantContent.push(toolCall);
182
183
  }
183
184
  if (assistantContent.length > 0) {
184
- messages.push({
185
+ pushMessage({
185
186
  role: "assistant",
186
187
  content: assistantContent,
187
188
  });
188
- logToFile("Added assistant message with content");
189
189
  }
190
190
  if (toolResultContent.length > 0) {
191
- messages.push({
191
+ pushMessage({
192
192
  role: "tool",
193
193
  content: toolResultContent,
194
194
  });
195
- logToFile(`Added ${toolResultContent.length} tool result(s)`);
196
195
  }
197
196
  // Display token usage
198
197
  console.log(chalk.gray(`\n\n[${modelName}] Token: ${usage.totalTokens || 0} (${usage.inputTokens || 0} + ${usage.outputTokens || 0})`));
199
- logToFile(`Iteration complete. Tool calls: ${toolCallsCollected.length}, Tool results: ${toolResultContent.length}`);
200
- logMessages(messages);
201
198
  if (toolCallsCollected.length === 0) {
202
- logToFile("=== break loop: no tool calls ===");
203
199
  break;
204
200
  }
205
201
  const progressRes = toolResultContent.find((result) => result.toolName === toolNames.recordProgress);
206
202
  if (progressRes && progressRes.output?.value === 100) {
207
203
  console.log("\nTask completed with 100% progress!");
208
- logToFile("=== break loop: task completed with 100% progress ===");
209
204
  break;
210
205
  }
211
206
  const followUpRes = toolResultContent.find((result) => result.toolName === toolNames.askUserFollowup);
212
207
  if (followUpRes) {
213
208
  console.log(chalk.yellow("\n--- Waiting for user input ---"));
214
- logToFile("=== break loop: asked user followup ===");
215
209
  break;
216
210
  }
217
211
  if (interruptRequested) {
218
- logToFile("=== break loop: user interrupted with ESC key ===");
219
212
  break;
220
213
  }
221
214
  }
@@ -261,7 +254,6 @@ async function checkNpmUpdate() {
261
254
  }
262
255
  }
263
256
  async function main() {
264
- logToFile(`\n========== Session Started ========== pwd: ${process.cwd()}`);
265
257
  console.log(chalk.cyan(`AI Agent Ready! (${process.cwd()})\n`));
266
258
  console.log(chalk.cyan("interrupt: ESC, debug: 'debug [num]'"));
267
259
  // Check for updates - only show if update is available
@@ -273,15 +265,12 @@ async function main() {
273
265
  }
274
266
  catch (error) {
275
267
  // Silent fail - just don't show update message if something goes wrong
276
- logToFile(`Failed to check for updates: ${error.message}`);
277
268
  }
278
269
  console.log(chalk.cyan("============================================================\n"));
279
270
  while (true) {
280
271
  const userPrompt = await askQuestion("\nPrompt: ");
281
272
  if (userPrompt.toLowerCase() === "exit" ||
282
273
  userPrompt.toLowerCase() === "quit") {
283
- logToFile("User exited the session");
284
- logToFile("========== Session Ended ==========\n");
285
274
  rl.close();
286
275
  break;
287
276
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,11 @@
1
1
  import type { ModelMessage } from "ai";
2
- export declare function logToFile(message: string): void;
3
- export declare function logMessages(messages: ModelMessage[]): void;
2
+ export declare function getSessionFile(): string;
3
+ export declare function appendMessageToLog(message: ModelMessage): void;
4
+ export declare function listSessions(limit?: number): Array<{
5
+ file: string;
6
+ timestamp: string;
7
+ summary?: string;
8
+ }>;
9
+ export declare function loadSession(file: string): ModelMessage[] | null;
10
+ export declare function getSessionFileByIndex(index: number): string | null;
4
11
  //# sourceMappingURL=system.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/utils/system.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAavC,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,QAIxC;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,QAoBnD"}
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/utils/system.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAWvC,wBAAgB,cAAc,IAAI,MAAM,CAavC;AAQD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,QAmCvD;AAED,wBAAgB,YAAY,CAC1B,KAAK,GAAE,MAAW,GACjB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwD9D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,GAAG,IAAI,CAY/D;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOlE"}
@@ -1,35 +1,128 @@
1
1
  import * as fs from "fs";
2
2
  import path from "path";
3
3
  import { homedir } from "os";
4
- // Log file setup
5
- const logDir = path.join(homedir(), ".ai", "logs");
6
- if (!fs.existsSync(logDir)) {
7
- fs.mkdirSync(logDir, { recursive: true });
4
+ // Session file setup
5
+ const sessionDir = path.join(homedir(), ".ai", "sessions");
6
+ if (!fs.existsSync(sessionDir)) {
7
+ fs.mkdirSync(sessionDir, { recursive: true });
8
8
  }
9
- const logFile = path.join(logDir, `agent-${new Date().toISOString().split("T")[0]}.log`);
10
- export function logToFile(message) {
11
- const timestamp = new Date().toISOString();
12
- const logEntry = `[${timestamp}] ${message}\n`;
13
- fs.appendFileSync(logFile, logEntry);
9
+ // Get session file - checks env var dynamically, creates new file only if needed
10
+ let currentSessionFile;
11
+ export function getSessionFile() {
12
+ if (process.env.AI_SESSION_FILE) {
13
+ return path.join(sessionDir, process.env.AI_SESSION_FILE);
14
+ }
15
+ // If no env var, use the same session file for the duration of this run
16
+ if (!currentSessionFile) {
17
+ const date = new Date();
18
+ currentSessionFile = path.join(sessionDir, `${date.toISOString().replace(/\.\d{3}Z$/, "")}-messages.json`);
19
+ }
20
+ return currentSessionFile;
14
21
  }
15
- export function logMessages(messages) {
16
- logToFile("\n--- Current Messages ---");
17
- messages.forEach((msg, idx) => {
18
- logToFile(`Message ${idx}: ${msg.role}`);
19
- if (Array.isArray(msg.content)) {
20
- msg.content.forEach((c) => {
21
- if (c.type === "text")
22
- logToFile(` [Text] ${c.text.substring(0, 100)}...`);
23
- else if (c.type === "tool-call")
24
- logToFile(` [Tool Call] ${c.toolName}`);
25
- else if (c.type === "tool-result")
26
- logToFile(` [Tool Result] ${c.toolName}`);
22
+ // For backward compatibility - default session file
23
+ const defaultSessionFile = path.join(sessionDir, `${new Date().toISOString().replace(/\.\d{3}Z$/, "")}-messages.json`);
24
+ export function appendMessageToLog(message) {
25
+ const formattedMessage = JSON.stringify(message, null, 2)
26
+ .split("\n")
27
+ .map((line) => ` ${line}`)
28
+ .join("\n");
29
+ let fd;
30
+ try {
31
+ // Open read/write so we can truncate the closing bracket and append in-place.
32
+ fd = fs.openSync(getSessionFile(), "a+");
33
+ const { size } = fs.fstatSync(fd);
34
+ if (size === 0) {
35
+ fs.writeSync(fd, `[\n${formattedMessage}\n]\n`);
36
+ return;
37
+ }
38
+ // Expected file ending is "\n]\n" from our writer.
39
+ if (size >= 3) {
40
+ fs.ftruncateSync(fd, size - 3);
41
+ fs.writeSync(fd, `,\n${formattedMessage}\n]\n`);
42
+ return;
43
+ }
44
+ // Fallback for unexpected tiny/corrupt content.
45
+ fs.ftruncateSync(fd, 0);
46
+ fs.writeSync(fd, `[\n${formattedMessage}\n]\n`);
47
+ }
48
+ catch {
49
+ // Last-resort fallback keeps logging functional.
50
+ fs.writeFileSync(getSessionFile(), `[\n${formattedMessage}\n]\n`);
51
+ }
52
+ finally {
53
+ if (fd !== undefined) {
54
+ fs.closeSync(fd);
55
+ }
56
+ }
57
+ }
58
+ export function listSessions(limit = 20) {
59
+ if (!fs.existsSync(sessionDir)) {
60
+ return [];
61
+ }
62
+ const files = fs
63
+ .readdirSync(sessionDir)
64
+ .filter((file) => file.endsWith("-messages.json"))
65
+ .sort((a, b) => {
66
+ // Sort by filename (which includes ISO timestamp) in reverse chronological order
67
+ return b.localeCompare(a);
68
+ })
69
+ .slice(0, limit);
70
+ const result = files.map((file) => {
71
+ const timestamp = file.split("-messages.json")[0] || "";
72
+ // Try to read and parse the session file for a summary
73
+ let summary = undefined;
74
+ try {
75
+ const content = fs.readFileSync(path.join(sessionDir, file), "utf-8");
76
+ const messages = JSON.parse(content);
77
+ // Collect all user messages and join them
78
+ const userMessages = [];
79
+ messages.forEach((msg) => {
80
+ if (msg.role === "user" && typeof msg.content === "string") {
81
+ userMessages.push(msg.content);
82
+ }
27
83
  });
84
+ if (userMessages.length > 0) {
85
+ // Join all user messages with spaces
86
+ const combined = userMessages.join(" ");
87
+ // Truncate to 40 characters if needed
88
+ summary =
89
+ combined.length > 40 ? combined.substring(0, 40) + "..." : combined;
90
+ }
28
91
  }
29
- else {
30
- logToFile(` Content: ${typeof msg.content === "string" ? msg.content.substring(0, 100) : JSON.stringify(msg.content)}`);
92
+ catch (error) {
93
+ // If we can't read the file, just show timestamp
31
94
  }
95
+ const session = {
96
+ file,
97
+ timestamp,
98
+ };
99
+ if (summary !== undefined) {
100
+ session.summary = summary;
101
+ }
102
+ return session;
32
103
  });
33
- logToFile("--- End Messages ---\n");
104
+ return result;
105
+ }
106
+ export function loadSession(file) {
107
+ try {
108
+ const fullPath = path.join(sessionDir, file);
109
+ if (!fs.existsSync(fullPath)) {
110
+ return null;
111
+ }
112
+ const content = fs.readFileSync(fullPath, "utf-8");
113
+ return JSON.parse(content);
114
+ }
115
+ catch (error) {
116
+ console.error(`Error loading session ${file}: ${error.message}`);
117
+ return null;
118
+ }
119
+ }
120
+ export function getSessionFileByIndex(index) {
121
+ const sessions = listSessions();
122
+ if (index < 0 || index >= sessions.length) {
123
+ return null;
124
+ }
125
+ const session = sessions[index];
126
+ return session ? session.file : null;
34
127
  }
35
128
  //# sourceMappingURL=system.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/utils/system.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,iBAAiB;AACjB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3B,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5C,CAAC;AACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CACvB,MAAM,EACN,SAAS,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CACtD,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC;IAC/C,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAwB;IAClD,SAAS,CAAC,4BAA4B,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5B,SAAS,CAAC,WAAW,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;gBAC7B,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;oBACnB,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;qBAClD,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;oBAC7B,SAAS,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;qBACtC,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa;oBAC/B,SAAS,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,SAAS,CACP,cAAc,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAC9G,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,wBAAwB,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/utils/system.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-agent-test",
3
- "version": "0.3.2",
3
+ "version": "0.4.0",
4
4
  "main": "dist/index.js",
5
5
  "bin": {
6
6
  "ai": "./bin/ai"
@@ -21,13 +21,23 @@
21
21
  "lint": "oxlint . --ignore-pattern dist/",
22
22
  "prepack": "rm -rf dist && npm run build"
23
23
  },
24
- "author": "",
24
+ "author": "Bright Lee <benevbright@gmail.com>",
25
25
  "repository": {
26
26
  "type": "git",
27
27
  "url": "https://github.com/benevbright/ai-agent-test.git"
28
28
  },
29
29
  "license": "ISC",
30
- "description": "",
30
+ "description": "A lightweight agentic workflow system for testing AI agent flows with local LLMs and tool integrations",
31
+ "keywords": [
32
+ "ai",
33
+ "agent",
34
+ "agentic",
35
+ "workflow",
36
+ "llm",
37
+ "local-llm",
38
+ "cli",
39
+ "automation"
40
+ ],
31
41
  "devDependencies": {
32
42
  "@types/jsdom": "^28.0.1",
33
43
  "@types/node": "^25.5.0",
@@ -41,6 +51,7 @@
41
51
  "@ai-sdk/openai": "^3.0.50",
42
52
  "ai": "^6.0.146",
43
53
  "chalk": "^5.6.2",
54
+ "dotenv": "^17.4.1",
44
55
  "jsdom": "^29.0.1",
45
56
  "zod": "^4.3.6"
46
57
  }