4runr-os 1.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.
package/README.md ADDED
@@ -0,0 +1,143 @@
1
+ # 4Runr OS - AI Agent Operating System
2
+
3
+ Interactive terminal for managing AI agents on the 4Runr platform.
4
+
5
+ ## Installation
6
+
7
+ Install globally from npm:
8
+
9
+ ```bash
10
+ npm install -g 4runr-os
11
+ ```
12
+
13
+ Or use npx (no installation needed):
14
+
15
+ ```bash
16
+ npx 4runr-os
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ ### Connect to Local Gateway
22
+
23
+ ```bash
24
+ 4runr
25
+ # or
26
+ 4runr-os
27
+ ```
28
+
29
+ This connects to `http://localhost:3001` by default.
30
+
31
+ ### Connect to Remote Server
32
+
33
+ Set the `GATEWAY_URL` environment variable:
34
+
35
+ **Windows (PowerShell):**
36
+ ```powershell
37
+ $env:GATEWAY_URL="http://44.222.212.152"
38
+ 4runr
39
+ ```
40
+
41
+ **Windows (CMD):**
42
+ ```cmd
43
+ set GATEWAY_URL=http://44.222.212.152
44
+ 4runr
45
+ ```
46
+
47
+ **Linux/Mac:**
48
+ ```bash
49
+ export GATEWAY_URL=http://44.222.212.152
50
+ 4runr
51
+ ```
52
+
53
+ **Note:** If your server uses a custom port, include it: `http://your-server.com:3001`
54
+
55
+ ### Quick Start
56
+
57
+ 1. **Configure AI Provider:**
58
+ ```
59
+ 4runr> config
60
+ ```
61
+ Follow the prompts to add your OpenAI or Anthropic API key.
62
+
63
+ 2. **Start Chatting:**
64
+ ```
65
+ 4runr> run-agent assistant
66
+ ```
67
+ Then just type your messages!
68
+
69
+ 3. **Build Custom Agent:**
70
+ ```
71
+ 4runr> build
72
+ ```
73
+ Create your own AI agent with custom system prompts.
74
+
75
+ ## Available Commands
76
+
77
+ ### AI Configuration
78
+ - `config` - Configure AI provider (OpenAI/Anthropic)
79
+ - `models` - List available AI models
80
+ - `ai-status` - Show stored API keys and configuration
81
+
82
+ ### Agent Management
83
+ - `run-agent [name]` - Start chatting with an AI agent
84
+ - `build` - Build a custom AI agent (interactive)
85
+ - `agents` - List available agents
86
+
87
+ ### Run Management
88
+ - `create <name>` - Create a new run
89
+ - `start <run-id>` - Start a run
90
+ - `get <run-id>` - Get run details
91
+ - `list` - List all runs
92
+
93
+ ### System
94
+ - `status` - Show system status
95
+ - `sentinel` - Show Sentinel monitoring
96
+ - `metrics` - Show system metrics
97
+ - `clear` - Clear the screen
98
+ - `help` - Show all commands
99
+ - `exit` - Exit the OS
100
+
101
+ ## Examples
102
+
103
+ ### Connect to Server and Configure
104
+
105
+ ```bash
106
+ # Set server URL
107
+ export GATEWAY_URL=http://44.222.212.152:3001
108
+
109
+ # Run OS
110
+ 4runr
111
+
112
+ # Configure OpenAI
113
+ 4runr> config
114
+ # Follow prompts...
115
+
116
+ # Start chatting
117
+ 4runr> run-agent assistant
118
+ Assistant> Hello! How can I help you?
119
+ ```
120
+
121
+ ### Build Custom Agent
122
+
123
+ ```
124
+ 4runr> build
125
+ Agent name: code-reviewer
126
+ Agent description: Reviews code for bugs and improvements
127
+ System prompt: You are an expert code reviewer...
128
+ END
129
+ Temperature: 0.3
130
+ Max tokens: 2000
131
+
132
+ 4runr> run-agent code-reviewer
133
+ ```
134
+
135
+ ## Requirements
136
+
137
+ - Node.js 18+
138
+ - Access to a 4Runr Gateway (local or remote)
139
+
140
+ ## License
141
+
142
+ MIT
143
+
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Minimal Gateway Client for OS CLI
3
+ * Self-contained client for connecting to 4Runr Gateway
4
+ */
5
+ export interface Run {
6
+ id: string;
7
+ name: string;
8
+ status: 'queued' | 'running' | 'completed' | 'failed' | 'cancelled';
9
+ input?: any;
10
+ output?: any;
11
+ logs?: Array<{
12
+ timestamp: string;
13
+ level: string;
14
+ message: string;
15
+ }>;
16
+ createdAt: string;
17
+ updatedAt: string;
18
+ completedAt?: string;
19
+ }
20
+ export interface RunInput {
21
+ agent_id?: string;
22
+ data?: any;
23
+ prompt?: string;
24
+ systemPrompt?: string;
25
+ temperature?: number;
26
+ maxTokens?: number;
27
+ conversationHistory?: Array<{
28
+ role: string;
29
+ content: string;
30
+ }>;
31
+ topP?: number;
32
+ frequencyPenalty?: number;
33
+ presencePenalty?: number;
34
+ tools?: string[];
35
+ useLocalModel?: boolean;
36
+ localModelProvider?: 'ollama' | 'lm-studio' | 'custom';
37
+ localModelName?: string;
38
+ localModelUrl?: string;
39
+ [key: string]: any;
40
+ }
41
+ export declare class GatewayClient {
42
+ private http;
43
+ private gatewayUrl;
44
+ readonly runs: {
45
+ create: (data: {
46
+ name: string;
47
+ input: RunInput;
48
+ }) => Promise<Run>;
49
+ start: (id: string) => Promise<void>;
50
+ get: (id: string) => Promise<Run>;
51
+ list: (options?: {
52
+ limit?: number;
53
+ status?: string;
54
+ }) => Promise<Run[]>;
55
+ };
56
+ constructor(config: {
57
+ gatewayUrl: string;
58
+ });
59
+ health(): Promise<any>;
60
+ metrics(): Promise<any>;
61
+ }
62
+ //# sourceMappingURL=gateway-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-client.d.ts","sourceRoot":"","sources":["../src/gateway-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IACpE,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,UAAU,CAAS;IAE3B,SAAgB,IAAI,EAAE;QACpB,MAAM,EAAE,CAAC,IAAI,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,QAAQ,CAAA;SAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;QAClE,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;KACzE,CAAC;gBAEU,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE;IA+CpC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC;IAKtB,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;CAI9B"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Minimal Gateway Client for OS CLI
3
+ * Self-contained client for connecting to 4Runr Gateway
4
+ */
5
+ import axios from 'axios';
6
+ export class GatewayClient {
7
+ http;
8
+ gatewayUrl;
9
+ runs;
10
+ constructor(config) {
11
+ this.gatewayUrl = config.gatewayUrl;
12
+ this.http = axios.create({
13
+ baseURL: config.gatewayUrl,
14
+ timeout: 30000,
15
+ headers: {
16
+ 'Content-Type': 'application/json',
17
+ },
18
+ });
19
+ // Disable logging by default (can be enabled via env var)
20
+ if (!process.env.ENABLE_GATEWAY_LOGGING) {
21
+ // Suppress axios logs
22
+ this.http.interceptors.request.use((config) => config, (error) => Promise.reject(error));
23
+ this.http.interceptors.response.use((response) => response, (error) => Promise.reject(error));
24
+ }
25
+ // Create runs API
26
+ this.runs = {
27
+ create: async (data) => {
28
+ const response = await this.http.post('/api/runs', data);
29
+ return response.data;
30
+ },
31
+ start: async (id) => {
32
+ await this.http.post(`/api/runs/${id}/start`);
33
+ },
34
+ get: async (id) => {
35
+ const response = await this.http.get(`/api/runs/${id}`);
36
+ return response.data;
37
+ },
38
+ list: async (options) => {
39
+ const params = new URLSearchParams();
40
+ if (options?.limit)
41
+ params.append('limit', options.limit.toString());
42
+ if (options?.status)
43
+ params.append('status', options.status);
44
+ const response = await this.http.get(`/api/runs?${params.toString()}`);
45
+ return response.data.runs || [];
46
+ },
47
+ };
48
+ }
49
+ async health() {
50
+ const response = await this.http.get('/health');
51
+ return response.data;
52
+ }
53
+ async metrics() {
54
+ const response = await this.http.get('/api/metrics');
55
+ return response.data;
56
+ }
57
+ }
58
+ //# sourceMappingURL=gateway-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-client.js","sourceRoot":"","sources":["../src/gateway-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAwB,MAAM,OAAO,CAAC;AAiC7C,MAAM,OAAO,aAAa;IAChB,IAAI,CAAgB;IACpB,UAAU,CAAS;IAEX,IAAI,CAKlB;IAEF,YAAY,MAA8B;QACxC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAEpC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;YACvB,OAAO,EAAE,MAAM,CAAC,UAAU;YAC1B,OAAO,EAAE,KAAK;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;QAEH,0DAA0D;QAC1D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;YACxC,sBAAsB;YACtB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAChC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAClB,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CACjC,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACjC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACtB,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CACjC,CAAC;QACJ,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC,IAAI,GAAG;YACV,MAAM,EAAE,KAAK,EAAE,IAAuC,EAAE,EAAE;gBACxD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBACzD,OAAO,QAAQ,CAAC,IAAI,CAAC;YACvB,CAAC;YACD,KAAK,EAAE,KAAK,EAAE,EAAU,EAAE,EAAE;gBAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAChD,CAAC;YACD,GAAG,EAAE,KAAK,EAAE,EAAU,EAAE,EAAE;gBACxB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;gBACxD,OAAO,QAAQ,CAAC,IAAI,CAAC;YACvB,CAAC;YACD,IAAI,EAAE,KAAK,EAAE,OAA6C,EAAE,EAAE;gBAC5D,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;gBACrC,IAAI,OAAO,EAAE,KAAK;oBAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACrE,IAAI,OAAO,EAAE,MAAM;oBAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACvE,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAClC,CAAC;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * 4Runr AI Agent OS - Enhanced Interactive Terminal
4
+ * Full AI configuration, model selection, and agent customization
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG"}
package/dist/index.js ADDED
@@ -0,0 +1,789 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * 4Runr AI Agent OS - Enhanced Interactive Terminal
4
+ * Full AI configuration, model selection, and agent customization
5
+ */
6
+ import * as readline from 'readline';
7
+ import { GatewayClient } from './gateway-client';
8
+ // ANSI colors
9
+ const colors = {
10
+ reset: '\x1b[0m',
11
+ bright: '\x1b[1m',
12
+ cyan: '\x1b[36m',
13
+ green: '\x1b[32m',
14
+ yellow: '\x1b[33m',
15
+ blue: '\x1b[34m',
16
+ magenta: '\x1b[35m',
17
+ red: '\x1b[31m',
18
+ gray: '\x1b[90m'
19
+ };
20
+ const { cyan, green, yellow, blue, magenta, red, gray, bright, reset } = colors;
21
+ let client;
22
+ let systemReady = false;
23
+ // Gateway URL - configurable via GATEWAY_URL environment variable
24
+ // Local: http://localhost:3001
25
+ // Server: Set GATEWAY_URL environment variable (e.g., "http://gateway.4runr.com:3001" or "https://gateway.4runr.com")
26
+ // TODO: Replace with your domain name once set up
27
+ let gatewayUrl = process.env.GATEWAY_URL || 'http://localhost:3001';
28
+ // Chat mode state
29
+ let chatMode = false;
30
+ let chatAgent = null;
31
+ let conversationHistory = [];
32
+ const customAgents = new Map();
33
+ const aiConfig = {
34
+ provider: null,
35
+ model: null,
36
+ apiKey: null
37
+ };
38
+ // Simulate boot sequence
39
+ async function bootSequence() {
40
+ console.clear();
41
+ console.log(`${cyan}${bright}
42
+ ╔═══════════════════════════════════════════════════════╗
43
+ ║ ║
44
+ ║ ██╗ ██╗██████╗ ██╗ ██╗███╗ ██╗██████╗ ║
45
+ ║ ██║ ██║██╔══██╗██║ ██║████╗ ██║██╔══██╗ ║
46
+ ║ ███████║██████╔╝██║ ██║██╔██╗ ██║██████╔╝ ║
47
+ ║ ╚════██║██╔══██╗██║ ██║██║╚██╗██║██╔══██╗ ║
48
+ ║ ██║██║ ██║╚██████╔╝██║ ╚████║██║ ██║ ║
49
+ ║ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝ ║
50
+ ║ ║
51
+ ║ AI AGENT OPERATING SYSTEM ║
52
+ ║ Version 2.0.0 ║
53
+ ║ Enhanced with AI Configuration ║
54
+ ╚═══════════════════════════════════════════════════════╝
55
+ ${reset}`);
56
+ await sleep(500);
57
+ console.log(`\n${gray}[BOOT] Initializing 4Runr AI Agent OS...${reset}`);
58
+ await sleep(300);
59
+ console.log(`${gray}[BOOT] Loading kernel modules...${reset}`);
60
+ await progress(['gateway', 'sentinel', 'shield', 'devkit', 'metrics', 'ai-providers']);
61
+ console.log(`${gray}[BOOT] Starting services...${reset}`);
62
+ await sleep(200);
63
+ // Check gateway connection
64
+ process.stdout.write(`${gray}[BOOT] Connecting to gateway (${gatewayUrl})... ${reset}`);
65
+ try {
66
+ client = new GatewayClient({ gatewayUrl });
67
+ const health = await client.health();
68
+ console.log(`${green}✓${reset}`);
69
+ // Check database
70
+ process.stdout.write(`${gray}[BOOT] Connecting to database... ${reset}`);
71
+ await sleep(200);
72
+ console.log(`${green}✓${reset} ${gray}(${health.persistence})${reset}`);
73
+ // Check Redis
74
+ process.stdout.write(`${gray}[BOOT] Connecting to cache... ${reset}`);
75
+ await sleep(200);
76
+ console.log(`${green}✓${reset} ${gray}(redis)${reset}`);
77
+ // Check Sentinel
78
+ process.stdout.write(`${gray}[BOOT] Starting Sentinel monitor... ${reset}`);
79
+ try {
80
+ const sentinelRes = await fetch(`${gatewayUrl}/sentinel/health`);
81
+ const sentinel = await sentinelRes.json();
82
+ console.log(`${green}✓${reset} ${gray}(${sentinel?.status || 'unknown'})${reset}`);
83
+ }
84
+ catch {
85
+ console.log(`${yellow}⚠${reset} ${gray}(not available)${reset}`);
86
+ }
87
+ await sleep(300);
88
+ console.log(`\n${green}${bright}[READY] 4Runr OS is ready!${reset}\n`);
89
+ systemReady = true;
90
+ }
91
+ catch (error) {
92
+ console.log(`${red}✗${reset}`);
93
+ console.log(`${red}[ERROR] Failed to connect to gateway at ${gatewayUrl}${reset}`);
94
+ console.log(`${yellow}Make sure the gateway is running on the Ubuntu server${reset}`);
95
+ process.exit(1);
96
+ }
97
+ }
98
+ async function progress(items) {
99
+ for (const item of items) {
100
+ process.stdout.write(`${gray} - ${item}${reset}`);
101
+ await sleep(150);
102
+ console.log(` ${green}✓${reset}`);
103
+ }
104
+ }
105
+ function sleep(ms) {
106
+ return new Promise(resolve => setTimeout(resolve, ms));
107
+ }
108
+ // Show welcome screen
109
+ function showWelcome() {
110
+ console.log(`${cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${reset}`);
111
+ console.log(`${bright}Welcome to 4Runr AI Agent Operating System${reset}`);
112
+ console.log(`${gray}Type ${bright}help${reset}${gray} to see available commands${reset}`);
113
+ console.log(`${gray}Type ${bright}config${reset}${gray} to configure AI providers${reset}`);
114
+ console.log(`${gray}Type ${bright}exit${reset}${gray} to quit${reset}`);
115
+ console.log(`${cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${reset}\n`);
116
+ }
117
+ // Interactive prompt helper
118
+ function prompt(rl, question) {
119
+ return new Promise((resolve) => {
120
+ rl.question(question, (answer) => {
121
+ resolve(answer.trim());
122
+ });
123
+ });
124
+ }
125
+ // Multi-line prompt helper (for system prompts)
126
+ function promptMultiline(rl, question, endMarker = 'END') {
127
+ return new Promise((resolve) => {
128
+ console.log(question);
129
+ console.log(`${gray}Enter your text. Type '${endMarker}' on a new line when finished:${reset}\n`);
130
+ const lines = [];
131
+ let collecting = true;
132
+ const lineHandler = (line) => {
133
+ if (!collecting)
134
+ return;
135
+ const trimmed = line.trim();
136
+ // Check for end marker
137
+ if (trimmed === endMarker || trimmed === endMarker.toUpperCase()) {
138
+ collecting = false;
139
+ rl.removeListener('line', lineHandler);
140
+ rl.setPrompt(`${cyan}4runr>${reset} `);
141
+ resolve(lines.join('\n').trim());
142
+ return;
143
+ }
144
+ lines.push(line);
145
+ };
146
+ // Temporarily change prompt
147
+ rl.setPrompt(`${gray} >${reset} `);
148
+ rl.prompt();
149
+ rl.on('line', lineHandler);
150
+ });
151
+ }
152
+ // Command handlers
153
+ const commands = {
154
+ help: {
155
+ description: 'Show available commands',
156
+ usage: 'help [command]',
157
+ handler: async (args) => {
158
+ if (args.length > 0) {
159
+ const cmd = commands[args[0]];
160
+ if (cmd) {
161
+ console.log(`\n${bright}${args[0]}${reset}`);
162
+ console.log(` ${cmd.description}`);
163
+ console.log(` Usage: ${cyan}${cmd.usage}${reset}\n`);
164
+ }
165
+ else {
166
+ console.log(`${red}Unknown command: ${args[0]}${reset}`);
167
+ }
168
+ }
169
+ else {
170
+ console.log(`\n${bright}Available Commands:${reset}\n`);
171
+ console.log(`${magenta}AI Configuration:${reset}`);
172
+ console.log(` ${cyan}config${reset} Configure AI provider (OpenAI/Anthropic)`);
173
+ console.log(` ${cyan}models${reset} List available AI models`);
174
+ console.log(` ${cyan}ai-status${reset} Show stored API keys and configuration`);
175
+ console.log();
176
+ console.log(`${magenta}Agent Management:${reset}`);
177
+ console.log(` ${cyan}run-agent${reset} Start chatting with an AI agent`);
178
+ console.log(` ${cyan}build${reset} Build a custom AI agent (interactive)`);
179
+ console.log(` ${cyan}agents${reset} List available agents`);
180
+ console.log();
181
+ console.log(`${magenta}Run Management:${reset}`);
182
+ console.log(` ${cyan}create${reset} Create a new run`);
183
+ console.log(` ${cyan}start${reset} Start a run`);
184
+ console.log(` ${cyan}get${reset} Get run details`);
185
+ console.log(` ${cyan}list${reset} List all runs`);
186
+ console.log();
187
+ console.log(`${magenta}System:${reset}`);
188
+ console.log(` ${cyan}status${reset} Show system status`);
189
+ console.log(` ${cyan}sentinel${reset} Show Sentinel monitoring`);
190
+ console.log(` ${cyan}metrics${reset} Show system metrics`);
191
+ console.log(` ${cyan}clear${reset} Clear the screen`);
192
+ console.log(` ${cyan}exit${reset} Exit 4Runr OS`);
193
+ console.log();
194
+ }
195
+ }
196
+ },
197
+ config: {
198
+ description: 'Configure AI provider (OpenAI/Anthropic)',
199
+ usage: 'config',
200
+ handler: async (args, rl) => {
201
+ console.log(`\n${bright}AI Provider Configuration${reset}\n`);
202
+ // Choose provider
203
+ console.log(`${gray}Available providers:${reset}`);
204
+ console.log(` 1. OpenAI (GPT-4, GPT-3.5)`);
205
+ console.log(` 2. Anthropic (Claude)`);
206
+ const providerChoice = await prompt(rl, `\n${cyan}Select provider (1 or 2):${reset} `);
207
+ if (providerChoice !== '1' && providerChoice !== '2') {
208
+ console.log(`${red}Invalid choice${reset}\n`);
209
+ return;
210
+ }
211
+ const provider = providerChoice === '1' ? 'openai' : 'anthropic';
212
+ aiConfig.provider = provider;
213
+ // Get API key
214
+ const apiKey = await prompt(rl, `${cyan}Enter your ${provider.toUpperCase()} API key:${reset} `);
215
+ if (!apiKey) {
216
+ console.log(`${red}API key required${reset}\n`);
217
+ return;
218
+ }
219
+ aiConfig.apiKey = apiKey;
220
+ // Store credentials on server
221
+ console.log(`\n${gray}Storing credentials securely...${reset}`);
222
+ try {
223
+ const response = await fetch(`${gatewayUrl}/api/ai-providers/credentials`, {
224
+ method: 'POST',
225
+ headers: { 'Content-Type': 'application/json' },
226
+ body: JSON.stringify({ provider, apiKey })
227
+ });
228
+ if (response.ok) {
229
+ console.log(`${green}✓${reset} Credentials stored securely (AES-256-GCM encrypted)\n`);
230
+ // Choose model
231
+ console.log(`${gray}Available models for ${provider}:${reset}`);
232
+ if (provider === 'openai') {
233
+ console.log(` 1. gpt-4 (Most capable)`);
234
+ console.log(` 2. gpt-4-turbo (Faster, cheaper)`);
235
+ console.log(` 3. gpt-3.5-turbo (Fast, economical)`);
236
+ }
237
+ else {
238
+ console.log(` 1. claude-3-opus-20240229 (Most capable)`);
239
+ console.log(` 2. claude-3-sonnet-20240229 (Balanced)`);
240
+ console.log(` 3. claude-3-haiku-20240307 (Fast, economical)`);
241
+ }
242
+ const modelChoice = await prompt(rl, `\n${cyan}Select model (1-3):${reset} `);
243
+ const models = provider === 'openai'
244
+ ? ['gpt-4', 'gpt-4-turbo', 'gpt-3.5-turbo']
245
+ : ['claude-3-opus-20240229', 'claude-3-sonnet-20240229', 'claude-3-haiku-20240307'];
246
+ const modelIndex = parseInt(modelChoice) - 1;
247
+ if (modelIndex >= 0 && modelIndex < 3) {
248
+ aiConfig.model = models[modelIndex];
249
+ console.log(`${green}✓${reset} Model set to: ${bright}${aiConfig.model}${reset}\n`);
250
+ // Test connection
251
+ console.log(`${gray}Testing connection...${reset}`);
252
+ const testResponse = await fetch(`${gatewayUrl}/api/ai-providers/test`, {
253
+ method: 'POST',
254
+ headers: { 'Content-Type': 'application/json' },
255
+ body: JSON.stringify({ provider, model: aiConfig.model })
256
+ });
257
+ if (testResponse.ok) {
258
+ console.log(`${green}✓${reset} Connection successful! You're ready to build agents.\n`);
259
+ }
260
+ else {
261
+ const error = await testResponse.json();
262
+ console.log(`${yellow}⚠${reset} Warning: ${error?.message || 'Unknown error'}\n`);
263
+ }
264
+ }
265
+ else {
266
+ console.log(`${red}Invalid model choice${reset}\n`);
267
+ }
268
+ }
269
+ else {
270
+ const error = await response.json();
271
+ console.log(`${red}✗${reset} Failed to store credentials: ${error?.message || 'Unknown error'}\n`);
272
+ }
273
+ }
274
+ catch (error) {
275
+ console.log(`${red}✗${reset} Error: ${error?.message || 'Unknown error'}\n`);
276
+ }
277
+ }
278
+ },
279
+ models: {
280
+ description: 'List available AI models',
281
+ usage: 'models',
282
+ handler: async () => {
283
+ console.log(`\n${bright}Available AI Models:${reset}\n`);
284
+ console.log(`${magenta}OpenAI:${reset}`);
285
+ console.log(` ${cyan}gpt-4${reset} Most capable, best for complex tasks`);
286
+ console.log(` ${cyan}gpt-4-turbo${reset} Faster and cheaper than GPT-4`);
287
+ console.log(` ${cyan}gpt-3.5-turbo${reset} Fast and economical for simple tasks`);
288
+ console.log(`\n${magenta}Anthropic:${reset}`);
289
+ console.log(` ${cyan}claude-3-opus${reset} Most capable Claude model`);
290
+ console.log(` ${cyan}claude-3-sonnet${reset} Balanced performance and cost`);
291
+ console.log(` ${cyan}claude-3-haiku${reset} Fast and economical`);
292
+ console.log(`\n${gray}Use ${bright}config${reset}${gray} to set up your AI provider${reset}\n`);
293
+ }
294
+ },
295
+ 'ai-status': {
296
+ description: 'Show current AI configuration and stored API keys',
297
+ usage: 'ai-status',
298
+ handler: async () => {
299
+ console.log(`\n${bright}AI Configuration:${reset}`);
300
+ // Fetch server-side stored providers
301
+ try {
302
+ const response = await fetch(`${gatewayUrl}/api/ai-providers`);
303
+ if (response.ok) {
304
+ const data = await response.json();
305
+ const providers = data?.providers || [];
306
+ if (providers.length === 0) {
307
+ console.log(` ${yellow}No API keys stored on server${reset}`);
308
+ console.log(` ${gray}Run ${bright}config${reset}${gray} to add API keys${reset}\n`);
309
+ return;
310
+ }
311
+ console.log(`\n${bright}Stored API Keys (${providers.length}):${reset}\n`);
312
+ providers.forEach((p) => {
313
+ const providerName = p.provider.toUpperCase();
314
+ const models = p.models || [];
315
+ console.log(` ${cyan}${providerName}${reset}`);
316
+ console.log(` Status: ${green}✓ Configured${reset} ${gray}(encrypted in Redis)${reset}`);
317
+ if (models.length > 0) {
318
+ console.log(` Models: ${gray}${models.join(', ')}${reset}`);
319
+ }
320
+ console.log();
321
+ });
322
+ // Show local config if set
323
+ if (aiConfig.provider) {
324
+ console.log(`${bright}Local Selection:${reset}`);
325
+ console.log(` Provider: ${green}${aiConfig.provider}${reset}`);
326
+ console.log(` Model: ${green}${aiConfig.model || 'Not selected'}${reset}`);
327
+ console.log();
328
+ }
329
+ }
330
+ else {
331
+ console.log(` ${yellow}⚠ Could not fetch server status${reset}\n`);
332
+ }
333
+ }
334
+ catch (error) {
335
+ console.log(` ${red}✗${reset} Error fetching providers: ${error.message}\n`);
336
+ }
337
+ }
338
+ },
339
+ build: {
340
+ description: 'Build a custom AI agent (interactive)',
341
+ usage: 'build',
342
+ handler: async (args, rl) => {
343
+ if (!aiConfig.provider || !aiConfig.model) {
344
+ console.log(`${red}Please configure AI provider first using ${bright}config${reset}${red} command${reset}\n`);
345
+ return;
346
+ }
347
+ console.log(`\n${bright}${magenta}🤖 AI Agent Builder${reset}\n`);
348
+ // Agent name
349
+ const name = await prompt(rl, `${cyan}Agent name:${reset} `);
350
+ if (!name) {
351
+ console.log(`${red}Agent name required${reset}\n`);
352
+ return;
353
+ }
354
+ // Agent description
355
+ const description = await prompt(rl, `${cyan}Agent description:${reset} `);
356
+ // System prompt (multi-line)
357
+ console.log(`\n${gray}Define the agent's behavior and personality:${reset}`);
358
+ const systemPrompt = await promptMultiline(rl, `${cyan}System prompt:${reset}`, 'END');
359
+ // Temperature
360
+ const tempStr = await prompt(rl, `${cyan}Temperature (0.0-1.0, default 0.7):${reset} `);
361
+ const temperature = tempStr ? parseFloat(tempStr) : 0.7;
362
+ // Max tokens
363
+ const maxTokensStr = await prompt(rl, `${cyan}Max tokens (default 1000):${reset} `);
364
+ const maxTokens = maxTokensStr ? parseInt(maxTokensStr) : 1000;
365
+ // Confirm
366
+ console.log(`\n${bright}Agent Configuration:${reset}`);
367
+ console.log(` Name: ${name}`);
368
+ console.log(` Description: ${description || 'N/A'}`);
369
+ console.log(` Provider: ${aiConfig.provider}`);
370
+ console.log(` Model: ${aiConfig.model}`);
371
+ console.log(` Temperature: ${temperature}`);
372
+ console.log(` Max Tokens: ${maxTokens}`);
373
+ console.log(` System Prompt: ${systemPrompt || 'Default'}`);
374
+ const confirm = await prompt(rl, `\n${cyan}Create this agent? (yes/no):${reset} `);
375
+ if (confirm.toLowerCase() !== 'yes' && confirm.toLowerCase() !== 'y') {
376
+ console.log(`${yellow}Agent creation cancelled${reset}\n`);
377
+ return;
378
+ }
379
+ // Create agent
380
+ console.log(`\n${gray}Creating agent...${reset}`);
381
+ const agentConfig = {
382
+ name,
383
+ description,
384
+ provider: aiConfig.provider,
385
+ model: aiConfig.model,
386
+ systemPrompt,
387
+ temperature,
388
+ maxTokens
389
+ };
390
+ // Store custom agent
391
+ const customAgent = {
392
+ name,
393
+ description,
394
+ baseAgent: aiConfig.model === 'gpt-4' ? 'gpt-4' : 'gpt-3.5-turbo',
395
+ systemPrompt,
396
+ temperature,
397
+ maxTokens
398
+ };
399
+ customAgents.set(name.toLowerCase(), customAgent);
400
+ console.log(`${green}✓${reset} Agent created: ${bright}${name}${reset}`);
401
+ console.log(` Use ${cyan}run-agent ${name}${reset} to start chatting\n`);
402
+ }
403
+ },
404
+ agents: {
405
+ description: 'List available agents',
406
+ usage: 'agents',
407
+ handler: async () => {
408
+ console.log(`\n${bright}Available Pre-built Agents:${reset}\n`);
409
+ console.log(` ${cyan}gpt4-assistant${reset} General-purpose GPT-4 assistant`);
410
+ console.log(` ${cyan}claude-assistant${reset} General-purpose Claude assistant`);
411
+ console.log(` ${cyan}code-reviewer${reset} Code review and analysis`);
412
+ console.log(` ${cyan}data-analyst${reset} Data analysis and insights`);
413
+ console.log(` ${cyan}creative-writer${reset} Creative writing and content`);
414
+ console.log(`\n${gray}Use ${bright}build${reset}${gray} to create custom agents${reset}\n`);
415
+ }
416
+ },
417
+ 'run-agent': {
418
+ description: 'Start chatting with an AI agent',
419
+ usage: 'run-agent [agent-name]',
420
+ handler: async (args, rl) => {
421
+ let agentName = args[0];
422
+ // If no agent specified, prompt for one
423
+ if (!agentName) {
424
+ console.log(`\n${bright}Available Agents:${reset}\n`);
425
+ console.log(` ${cyan}assistant${reset} GPT-3.5 Assistant (fast, economical)`);
426
+ console.log(` ${cyan}gpt4${reset} GPT-4 Assistant (most capable)`);
427
+ console.log(` ${cyan}test${reset} Test agent (mock, no AI)`);
428
+ // Show custom agents
429
+ if (customAgents.size > 0) {
430
+ console.log(`\n${bright}Custom Agents:${reset}`);
431
+ customAgents.forEach((agent) => {
432
+ console.log(` ${cyan}${agent.name}${reset}${agent.description ? ` - ${agent.description}` : ''}`);
433
+ });
434
+ }
435
+ console.log();
436
+ agentName = await prompt(rl, `${cyan}Select agent (or press Enter for assistant):${reset} `);
437
+ if (!agentName) {
438
+ agentName = 'assistant';
439
+ }
440
+ }
441
+ // Check if it's a custom agent
442
+ const customAgent = customAgents.get(agentName.toLowerCase());
443
+ // Map friendly names to actual agent IDs
444
+ const agentMap = {
445
+ 'assistant': 'gpt-3.5-turbo',
446
+ 'gpt4': 'gpt-4',
447
+ 'gpt-4': 'gpt-4',
448
+ 'gpt4-assistant': 'gpt-4',
449
+ 'gpt35-assistant': 'gpt-3.5-turbo',
450
+ 'gpt-3.5-turbo': 'gpt-3.5-turbo',
451
+ 'test': 'test',
452
+ 'echo': 'echo'
453
+ };
454
+ let actualAgentId;
455
+ let agentConfig = null;
456
+ if (customAgent) {
457
+ // Use custom agent
458
+ actualAgentId = customAgent.baseAgent;
459
+ agentConfig = customAgent;
460
+ }
461
+ else {
462
+ // Use built-in agent
463
+ actualAgentId = agentMap[agentName.toLowerCase()] || agentName;
464
+ if (!agentMap[agentName.toLowerCase()] && !['test', 'echo', 'gpt-3.5-turbo', 'gpt-4', 'gpt4-assistant', 'gpt35-assistant'].includes(agentName)) {
465
+ console.log(`${red}Unknown agent: ${agentName}${reset}`);
466
+ console.log(`${gray}Available: assistant, gpt4, test${reset}`);
467
+ console.log(`${gray}Or create a custom agent with: ${bright}build${reset}\n`);
468
+ return;
469
+ }
470
+ }
471
+ // Enter chat mode
472
+ let displayName;
473
+ if (agentConfig) {
474
+ displayName = agentConfig.name;
475
+ if (agentConfig.description) {
476
+ console.log(`${gray}${agentConfig.description}${reset}`);
477
+ }
478
+ }
479
+ else {
480
+ displayName = agentName === 'assistant' ? 'Assistant (GPT-3.5)' :
481
+ agentName === 'gpt4' ? 'GPT-4 Assistant' :
482
+ agentName;
483
+ }
484
+ console.log(`\n${green}✓${reset} Connected to ${bright}${displayName}${reset}`);
485
+ console.log(`${gray}You're now chatting with the agent. Type 'exit' or 'quit' to return to command mode.${reset}\n`);
486
+ chatMode = true;
487
+ chatAgent = actualAgentId; // Use actual agent ID for execution
488
+ // Store custom agent config for use in chat
489
+ rl.chatAgentConfig = agentConfig;
490
+ conversationHistory = [];
491
+ rl.setPrompt(`${cyan}${displayName}>${reset} `);
492
+ rl.prompt();
493
+ }
494
+ },
495
+ status: {
496
+ description: 'Show system status',
497
+ usage: 'status',
498
+ handler: async () => {
499
+ console.log(`\n${bright}System Status:${reset}`);
500
+ const health = await client.health();
501
+ console.log(` Gateway: ${green}✓${reset} alive`);
502
+ console.log(` Database: ${green}✓${reset} ${health.persistence}`);
503
+ console.log(` Auth: ${health.auth.enabled ? yellow + '⚠ enabled' : green + '✓ disabled'}${reset}`);
504
+ console.log(` Rate Limit: ${health.rateLimit.enabled ? yellow + '⚠ enabled' : green + '✓ disabled'}${reset}`);
505
+ try {
506
+ const sentinelRes = await fetch(`${gatewayUrl}/sentinel/health`);
507
+ const sentinel = await sentinelRes.json();
508
+ console.log(` Sentinel: ${green}✓${reset} ${sentinel?.status || 'unknown'} (${sentinel?.watchedRuns || 0} runs watched)`);
509
+ }
510
+ catch {
511
+ console.log(` Sentinel: ${yellow}⚠ not available${reset}`);
512
+ }
513
+ console.log();
514
+ }
515
+ },
516
+ create: {
517
+ description: 'Create a new run',
518
+ usage: 'create <name> [agent-id]',
519
+ handler: async (args) => {
520
+ if (args.length === 0) {
521
+ console.log(`${red}Usage: create <name> [agent-id]${reset}\n`);
522
+ return;
523
+ }
524
+ const name = args.join(' ') || 'New Run';
525
+ const agentId = args[1] || 'default-agent';
526
+ console.log(`${gray}Creating run "${name}"...${reset}`);
527
+ const run = await client.runs.create({
528
+ name,
529
+ input: {
530
+ agent_id: agentId,
531
+ data: {
532
+ task: 'Process data',
533
+ timestamp: new Date().toISOString()
534
+ }
535
+ }
536
+ });
537
+ console.log(`${green}✓${reset} Run created: ${bright}${run.id}${reset}`);
538
+ console.log(` Status: ${cyan}${run.status}${reset}`);
539
+ console.log(` Use ${cyan}start ${run.id}${reset} to execute\n`);
540
+ }
541
+ },
542
+ start: {
543
+ description: 'Start a run',
544
+ usage: 'start <run-id>',
545
+ handler: async (args) => {
546
+ if (args.length === 0) {
547
+ console.log(`${red}Usage: start <run-id>${reset}\n`);
548
+ return;
549
+ }
550
+ const runId = args[0];
551
+ console.log(`${gray}Starting run ${runId}...${reset}`);
552
+ try {
553
+ await client.runs.start(runId);
554
+ console.log(`${green}✓${reset} Run started`);
555
+ console.log(` Use ${cyan}get ${runId}${reset} to check status\n`);
556
+ }
557
+ catch (error) {
558
+ console.log(`${red}✗${reset} Error: ${error.message}\n`);
559
+ }
560
+ }
561
+ },
562
+ get: {
563
+ description: 'Get run details',
564
+ usage: 'get <run-id>',
565
+ handler: async (args) => {
566
+ if (args.length === 0) {
567
+ console.log(`${red}Usage: get <run-id>${reset}\n`);
568
+ return;
569
+ }
570
+ const runId = args[0];
571
+ try {
572
+ const run = await client.runs.get(runId);
573
+ console.log(`\n${bright}Run Details:${reset}`);
574
+ console.log(` ID: ${run.id}`);
575
+ console.log(` Name: ${run.name}`);
576
+ console.log(` Status: ${getStatusColor(run.status)}${run.status}${reset}`);
577
+ if (run.output) {
578
+ console.log(` Output: ${JSON.stringify(run.output)}`);
579
+ }
580
+ console.log();
581
+ }
582
+ catch (error) {
583
+ console.log(`${red}✗${reset} Error: ${error.message}\n`);
584
+ }
585
+ }
586
+ },
587
+ list: {
588
+ description: 'List all runs',
589
+ usage: 'list [limit]',
590
+ handler: async (args) => {
591
+ const limit = args[0] ? parseInt(args[0]) : 10;
592
+ const runs = await client.runs.list({ limit });
593
+ if (runs.length === 0) {
594
+ console.log(`${gray}No runs found${reset}\n`);
595
+ return;
596
+ }
597
+ console.log(`\n${bright}Recent Runs:${reset} (${runs.length})\n`);
598
+ runs.forEach((run, i) => {
599
+ const status = getStatusColor(run.status) + run.status.padEnd(10) + reset;
600
+ console.log(` ${gray}${(i + 1).toString().padStart(2)}.${reset} ${status} ${run.name} ${gray}(${run.id})${reset}`);
601
+ });
602
+ console.log();
603
+ }
604
+ },
605
+ sentinel: {
606
+ description: 'Show Sentinel monitoring status',
607
+ usage: 'sentinel',
608
+ handler: async () => {
609
+ try {
610
+ const healthRes = await fetch(`${gatewayUrl}/sentinel/health`);
611
+ const health = await healthRes.json();
612
+ const metricsRes = await fetch(`${gatewayUrl}/sentinel/metrics`);
613
+ const metrics = await metricsRes.json();
614
+ console.log(`\n${bright}Sentinel Monitor:${reset}`);
615
+ console.log(` Status: ${green}${health?.status || 'unknown'}${reset}`);
616
+ console.log(` Active: ${health?.enabled ? green + 'Yes' : red + 'No'}${reset}`);
617
+ console.log(` Watched Runs: ${health?.watchedRuns || 0}`);
618
+ console.log(`\n${bright}Safety Metrics:${reset}`);
619
+ console.log(` Total Events: ${metrics?.totalEvents || 0}`);
620
+ console.log(` Hallucinations: ${metrics?.flaggedHallucinations || 0}`);
621
+ console.log(` Injections: ${metrics?.flaggedInjections || 0}`);
622
+ console.log(` PII Detected: ${metrics?.flaggedPII || 0}`);
623
+ console.log(` Avg Latency: ${metrics?.avgLatency || 0}ms`);
624
+ console.log();
625
+ }
626
+ catch (error) {
627
+ console.log(`${red}✗ Sentinel not available${reset}\n`);
628
+ }
629
+ }
630
+ },
631
+ metrics: {
632
+ description: 'Show system metrics',
633
+ usage: 'metrics',
634
+ handler: async () => {
635
+ console.log(`${gray}Fetching metrics...${reset}\n`);
636
+ try {
637
+ const metrics = await client.metrics();
638
+ console.log(`${bright}System Metrics:${reset}`);
639
+ console.log(` Timestamp: ${metrics.timestamp}`);
640
+ console.log(` Total metrics collected: ${Object.keys(metrics.metrics).length}`);
641
+ console.log(`\n${gray}Use: curl ${gatewayUrl}/metrics for full details${reset}\n`);
642
+ }
643
+ catch (error) {
644
+ console.log(`${red}✗ Metrics not available${reset}\n`);
645
+ }
646
+ }
647
+ },
648
+ clear: {
649
+ description: 'Clear the screen',
650
+ usage: 'clear',
651
+ handler: async () => {
652
+ console.clear();
653
+ showWelcome();
654
+ }
655
+ },
656
+ exit: {
657
+ description: 'Exit 4Runr OS',
658
+ usage: 'exit',
659
+ handler: async () => {
660
+ console.log(`${cyan}Shutting down 4Runr OS...${reset}`);
661
+ console.log(`${gray}Goodbye!${reset}\n`);
662
+ process.exit(0);
663
+ }
664
+ }
665
+ };
666
+ function getStatusColor(status) {
667
+ switch (status) {
668
+ case 'completed': return green;
669
+ case 'running': return blue;
670
+ case 'queued': return yellow;
671
+ case 'failed': return red;
672
+ default: return gray;
673
+ }
674
+ }
675
+ // Main REPL
676
+ async function startREPL() {
677
+ const rl = readline.createInterface({
678
+ input: process.stdin,
679
+ output: process.stdout,
680
+ prompt: `${cyan}4runr>${reset} `
681
+ });
682
+ showWelcome();
683
+ rl.prompt();
684
+ rl.on('line', async (line) => {
685
+ const input = line.trim();
686
+ if (!input) {
687
+ rl.prompt();
688
+ return;
689
+ }
690
+ // Handle chat mode
691
+ if (chatMode && chatAgent) {
692
+ // Exit commands
693
+ if (input.toLowerCase() === 'exit' || input.toLowerCase() === 'quit') {
694
+ console.log(`\n${gray}Ending chat with ${chatAgent}...${reset}\n`);
695
+ chatMode = false;
696
+ chatAgent = null;
697
+ conversationHistory = [];
698
+ rl.setPrompt(`${cyan}4runr>${reset} `);
699
+ rl.prompt();
700
+ return;
701
+ }
702
+ // Process chat message
703
+ const message = input;
704
+ process.stdout.write(`\r${gray}Thinking...${reset}`);
705
+ try {
706
+ // Get custom agent config if available
707
+ const agentConfig = rl.chatAgentConfig;
708
+ // Create and execute run
709
+ const run = await client.runs.create({
710
+ name: `${chatAgent}: ${message.substring(0, 50)}...`,
711
+ input: {
712
+ agent_id: chatAgent,
713
+ data: {
714
+ prompt: message,
715
+ // Include custom agent settings
716
+ ...(agentConfig?.systemPrompt && { systemPrompt: agentConfig.systemPrompt }),
717
+ ...(agentConfig?.temperature !== undefined && { temperature: agentConfig.temperature }),
718
+ ...(agentConfig?.maxTokens !== undefined && { maxTokens: agentConfig.maxTokens }),
719
+ ...(conversationHistory.length > 0 && { conversationHistory })
720
+ }
721
+ }
722
+ });
723
+ await client.runs.start(run.id);
724
+ // Monitor execution
725
+ let status = await client.runs.get(run.id);
726
+ while (status.status === 'running' || status.status === 'queued') {
727
+ await sleep(500);
728
+ status = await client.runs.get(run.id);
729
+ }
730
+ // Clear thinking indicator
731
+ process.stdout.write(`\r${' '.repeat(20)}\r`);
732
+ if (status.output) {
733
+ const output = status.output;
734
+ const response = output.result || output.message || JSON.stringify(output, null, 2);
735
+ // Update conversation history
736
+ conversationHistory.push({ role: 'user', content: message });
737
+ conversationHistory.push({ role: 'assistant', content: response });
738
+ // Show response with friendly name
739
+ const agentConfig = rl.chatAgentConfig;
740
+ const friendlyName = agentConfig ? agentConfig.name :
741
+ chatAgent === 'gpt-3.5-turbo' ? 'Assistant' :
742
+ chatAgent === 'gpt-4' ? 'GPT-4' :
743
+ chatAgent;
744
+ console.log(`${green}${friendlyName}:${reset} ${response}\n`);
745
+ // Show usage if available
746
+ if (output.usage) {
747
+ console.log(`${gray}Tokens: ${output.usage.totalTokens || 'N/A'} | Cost: $${(output.cost || 0).toFixed(6)}${reset}\n`);
748
+ }
749
+ }
750
+ else {
751
+ console.log(`${yellow}No response received${reset}\n`);
752
+ }
753
+ }
754
+ catch (error) {
755
+ process.stdout.write(`\r${' '.repeat(20)}\r`);
756
+ console.log(`${red}Error: ${error.message}${reset}\n`);
757
+ }
758
+ rl.prompt();
759
+ return;
760
+ }
761
+ // Normal command mode
762
+ const [command, ...args] = input.split(' ');
763
+ const cmd = commands[command];
764
+ if (cmd) {
765
+ try {
766
+ await cmd.handler(args, rl);
767
+ }
768
+ catch (error) {
769
+ console.log(`${red}Error: ${error.message}${reset}\n`);
770
+ }
771
+ }
772
+ else {
773
+ console.log(`${red}Unknown command: ${command}${reset}`);
774
+ console.log(`${gray}Type 'help' for available commands${reset}\n`);
775
+ }
776
+ rl.prompt();
777
+ });
778
+ rl.on('close', () => {
779
+ console.log(`\n${cyan}Goodbye!${reset}\n`);
780
+ process.exit(0);
781
+ });
782
+ }
783
+ // Start the OS
784
+ async function main() {
785
+ await bootSequence();
786
+ await startREPL();
787
+ }
788
+ main();
789
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "4runr-os",
3
+ "version": "1.0.0",
4
+ "description": "4Runr AI Agent OS - Interactive terminal for managing AI agents",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "4runr": "dist/index.js",
8
+ "4runr-os": "dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc --watch",
13
+ "prepublishOnly": "npm run build"
14
+ },
15
+ "keywords": [
16
+ "4runr",
17
+ "ai",
18
+ "agents",
19
+ "terminal",
20
+ "cli",
21
+ "os"
22
+ ],
23
+ "author": "4Runr Team",
24
+ "license": "MIT",
25
+ "dependencies": {
26
+ "axios": "^1.6.0"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^20.8.0",
30
+ "typescript": "^5.2.2"
31
+ },
32
+ "files": [
33
+ "dist/**/*",
34
+ "README.md"
35
+ ],
36
+ "engines": {
37
+ "node": ">=18.0.0"
38
+ },
39
+ "publishConfig": {
40
+ "access": "public"
41
+ }
42
+ }
43
+