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 +143 -0
- package/dist/gateway-client.d.ts +62 -0
- package/dist/gateway-client.d.ts.map +1 -0
- package/dist/gateway-client.js +58 -0
- package/dist/gateway-client.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +789 -0
- package/dist/index.js.map +1 -0
- package/package.json +43 -0
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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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
|
+
|