@rovn-ai/cli 0.1.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 +76 -0
- package/dist/api.d.ts +9 -0
- package/dist/api.js +110 -0
- package/dist/api.js.map +1 -0
- package/dist/commands/agents.d.ts +3 -0
- package/dist/commands/agents.js +92 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/approve.d.ts +1 -0
- package/dist/commands/approve.js +75 -0
- package/dist/commands/approve.js.map +1 -0
- package/dist/commands/check.d.ts +1 -0
- package/dist/commands/check.js +54 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.js +88 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/log.d.ts +1 -0
- package/dist/commands/log.js +68 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/report.d.ts +1 -0
- package/dist/commands/report.js +62 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/status.d.ts +1 -0
- package/dist/commands/status.js +53 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/tasks.d.ts +1 -0
- package/dist/commands/tasks.js +73 -0
- package/dist/commands/tasks.js.map +1 -0
- package/dist/commands/trust.d.ts +1 -0
- package/dist/commands/trust.js +33 -0
- package/dist/commands/trust.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.js +50 -0
- package/dist/config.js.map +1 -0
- package/dist/format.d.ts +36 -0
- package/dist/format.js +159 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +265 -0
- package/dist/index.js.map +1 -0
- package/package.json +28 -0
package/README.md
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# @rovn/cli
|
|
2
|
+
|
|
3
|
+
**Governance toolkit for AI agents** — monitor activities, check policies, and manage trust from the terminal.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @rovn/cli
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Register an agent
|
|
15
|
+
rovn init --name "My Agent" --email owner@example.com
|
|
16
|
+
|
|
17
|
+
# Log activities
|
|
18
|
+
rovn log --push "Deployed v2.1" --type deployment
|
|
19
|
+
|
|
20
|
+
# View recent activities
|
|
21
|
+
rovn log
|
|
22
|
+
|
|
23
|
+
# Pre-flight check
|
|
24
|
+
rovn check send_email --urgency high
|
|
25
|
+
|
|
26
|
+
# View trust score
|
|
27
|
+
rovn trust
|
|
28
|
+
|
|
29
|
+
# View report card
|
|
30
|
+
rovn report
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Multi-Agent Profiles
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# Register multiple agents
|
|
37
|
+
rovn init --name "Claude Code" --as claude
|
|
38
|
+
rovn init --name "Cursor Agent" --as cursor
|
|
39
|
+
|
|
40
|
+
# Switch between agents
|
|
41
|
+
rovn use claude
|
|
42
|
+
rovn use cursor
|
|
43
|
+
|
|
44
|
+
# Check current agent
|
|
45
|
+
rovn whoami
|
|
46
|
+
|
|
47
|
+
# List all agents
|
|
48
|
+
rovn agents
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Commands
|
|
52
|
+
|
|
53
|
+
| Command | Description |
|
|
54
|
+
|---------|-------------|
|
|
55
|
+
| `rovn init` | Register a new agent |
|
|
56
|
+
| `rovn log` | View recent activities |
|
|
57
|
+
| `rovn log --push "title"` | Log a new activity |
|
|
58
|
+
| `rovn tasks` | View assigned tasks |
|
|
59
|
+
| `rovn tasks done <id>` | Mark task as completed |
|
|
60
|
+
| `rovn check <action>` | Pre-flight policy check |
|
|
61
|
+
| `rovn approve` | List pending approvals |
|
|
62
|
+
| `rovn approve request "title"` | Request approval |
|
|
63
|
+
| `rovn trust` | View trust score |
|
|
64
|
+
| `rovn report` | View report card |
|
|
65
|
+
| `rovn status` | Agent overview |
|
|
66
|
+
| `rovn agents` | List all registered agents |
|
|
67
|
+
| `rovn use <profile>` | Switch active agent |
|
|
68
|
+
| `rovn whoami` | Show current agent |
|
|
69
|
+
|
|
70
|
+
## Configuration
|
|
71
|
+
|
|
72
|
+
Agent credentials are stored in `~/.rovnrc`. This file is created automatically by `rovn init`.
|
|
73
|
+
|
|
74
|
+
## License
|
|
75
|
+
|
|
76
|
+
MIT
|
package/dist/api.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AgentProfile } from './config.js';
|
|
2
|
+
export declare class ApiError extends Error {
|
|
3
|
+
status: number;
|
|
4
|
+
hint?: string | undefined;
|
|
5
|
+
constructor(message: string, status?: number, hint?: string | undefined);
|
|
6
|
+
}
|
|
7
|
+
export declare function apiGet(agent: AgentProfile, path: string): Promise<Record<string, unknown>>;
|
|
8
|
+
export declare function apiPost(agent: AgentProfile, path: string, body: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
9
|
+
export declare function apiPatch(agent: AgentProfile, path: string, body: Record<string, unknown>): Promise<Record<string, unknown>>;
|
package/dist/api.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiError = void 0;
|
|
4
|
+
exports.apiGet = apiGet;
|
|
5
|
+
exports.apiPost = apiPost;
|
|
6
|
+
exports.apiPatch = apiPatch;
|
|
7
|
+
// ─── HTTP Client ─────────────────────────────────────────
|
|
8
|
+
class ApiError extends Error {
|
|
9
|
+
status;
|
|
10
|
+
hint;
|
|
11
|
+
constructor(message, status = 0, hint) {
|
|
12
|
+
super(message);
|
|
13
|
+
this.status = status;
|
|
14
|
+
this.hint = hint;
|
|
15
|
+
this.name = 'ApiError';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.ApiError = ApiError;
|
|
19
|
+
function isJsonMode() {
|
|
20
|
+
return process.env.ROVN_JSON === '1';
|
|
21
|
+
}
|
|
22
|
+
function statusMessage(status) {
|
|
23
|
+
if (status === 401 || status === 403) {
|
|
24
|
+
return { message: 'Authentication failed', hint: 'Run `rovn init` to register or check your API key' };
|
|
25
|
+
}
|
|
26
|
+
if (status === 404) {
|
|
27
|
+
return { message: 'Resource not found' };
|
|
28
|
+
}
|
|
29
|
+
if (status >= 500) {
|
|
30
|
+
return { message: `Server error (${status})`, hint: 'Try again later' };
|
|
31
|
+
}
|
|
32
|
+
return { message: `Request failed (${status})` };
|
|
33
|
+
}
|
|
34
|
+
async function safeFetch(url, init) {
|
|
35
|
+
let res;
|
|
36
|
+
try {
|
|
37
|
+
res = await fetch(url, {
|
|
38
|
+
...init,
|
|
39
|
+
signal: AbortSignal.timeout(15000),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
if (err instanceof DOMException && err.name === 'TimeoutError') {
|
|
44
|
+
throw new ApiError('Request timed out', 0, 'Check your network connection or try again');
|
|
45
|
+
}
|
|
46
|
+
throw new ApiError('Could not connect to server', 0, 'Verify the server URL and your network');
|
|
47
|
+
}
|
|
48
|
+
if (!res.ok) {
|
|
49
|
+
const { message, hint } = statusMessage(res.status);
|
|
50
|
+
// Try to extract server error message
|
|
51
|
+
let serverMsg = '';
|
|
52
|
+
try {
|
|
53
|
+
const body = await res.json();
|
|
54
|
+
serverMsg = body.error ?? '';
|
|
55
|
+
}
|
|
56
|
+
catch { /* ignore */ }
|
|
57
|
+
throw new ApiError(serverMsg || message, res.status, hint);
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
return (await res.json());
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
throw new ApiError('Invalid response from server', res.status, 'The server returned non-JSON data');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function makeHeaders(agent, method) {
|
|
67
|
+
const headers = {};
|
|
68
|
+
if (agent.api_key)
|
|
69
|
+
headers['Authorization'] = `Bearer ${agent.api_key}`;
|
|
70
|
+
if (method !== 'GET') {
|
|
71
|
+
headers['Content-Type'] = 'application/json';
|
|
72
|
+
headers['X-Requested-With'] = 'rovn-cli';
|
|
73
|
+
}
|
|
74
|
+
return headers;
|
|
75
|
+
}
|
|
76
|
+
async function apiGet(agent, path) {
|
|
77
|
+
const data = await safeFetch(`${agent.url}${path}`, {
|
|
78
|
+
headers: makeHeaders(agent, 'GET'),
|
|
79
|
+
});
|
|
80
|
+
if (isJsonMode()) {
|
|
81
|
+
console.log(JSON.stringify(data, null, 2));
|
|
82
|
+
process.exit(0);
|
|
83
|
+
}
|
|
84
|
+
return data;
|
|
85
|
+
}
|
|
86
|
+
async function apiPost(agent, path, body) {
|
|
87
|
+
const data = await safeFetch(`${agent.url}${path}`, {
|
|
88
|
+
method: 'POST',
|
|
89
|
+
headers: makeHeaders(agent, 'POST'),
|
|
90
|
+
body: JSON.stringify(body),
|
|
91
|
+
});
|
|
92
|
+
if (isJsonMode()) {
|
|
93
|
+
console.log(JSON.stringify(data, null, 2));
|
|
94
|
+
process.exit(0);
|
|
95
|
+
}
|
|
96
|
+
return data;
|
|
97
|
+
}
|
|
98
|
+
async function apiPatch(agent, path, body) {
|
|
99
|
+
const data = await safeFetch(`${agent.url}${path}`, {
|
|
100
|
+
method: 'PATCH',
|
|
101
|
+
headers: makeHeaders(agent, 'PATCH'),
|
|
102
|
+
body: JSON.stringify(body),
|
|
103
|
+
});
|
|
104
|
+
if (isJsonMode()) {
|
|
105
|
+
console.log(JSON.stringify(data, null, 2));
|
|
106
|
+
process.exit(0);
|
|
107
|
+
}
|
|
108
|
+
return data;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.agentsCommand = agentsCommand;
|
|
4
|
+
exports.useCommand = useCommand;
|
|
5
|
+
exports.whoamiCommand = whoamiCommand;
|
|
6
|
+
const config_js_1 = require("../config.js");
|
|
7
|
+
const api_js_1 = require("../api.js");
|
|
8
|
+
const format_js_1 = require("../format.js");
|
|
9
|
+
function agentsCommand(args) {
|
|
10
|
+
// rovn use <profile>
|
|
11
|
+
if (args[0] === 'use' || args[0] === 'switch') {
|
|
12
|
+
const profile = args[1];
|
|
13
|
+
if (!profile) {
|
|
14
|
+
console.error((0, format_js_1.error)('Missing profile name', 'Usage: rovn use <profile-name>'));
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
const config = (0, config_js_1.loadConfig)();
|
|
18
|
+
if (!config.agents[profile]) {
|
|
19
|
+
console.error((0, format_js_1.error)(`Profile "${profile}" not found`));
|
|
20
|
+
console.log(format_js_1.fmt.dim('\n Available profiles:'));
|
|
21
|
+
for (const name of Object.keys(config.agents)) {
|
|
22
|
+
console.log(` ${format_js_1.fmt.cyan(name)}`);
|
|
23
|
+
}
|
|
24
|
+
console.log('');
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
config.current = profile;
|
|
28
|
+
(0, config_js_1.saveConfig)(config);
|
|
29
|
+
console.log((0, format_js_1.success)(`Switched to: ${format_js_1.fmt.bold(config.agents[profile].name)} ${format_js_1.fmt.dim(`(${profile})`)}`));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// rovn agents (list)
|
|
33
|
+
const profiles = (0, config_js_1.listProfiles)();
|
|
34
|
+
if (profiles.length === 0) {
|
|
35
|
+
console.log((0, format_js_1.emptyState)('No agents configured.', 'Run: rovn init'));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
console.log((0, format_js_1.header)('Registered Agents'));
|
|
39
|
+
const rows = profiles.map(p => [
|
|
40
|
+
p.isCurrent ? format_js_1.fmt.green(`${p.name} ${format_js_1.symbols.dot}`) : p.name,
|
|
41
|
+
p.agent.name,
|
|
42
|
+
p.agent.id.slice(0, 12) + '...',
|
|
43
|
+
p.agent.url,
|
|
44
|
+
]);
|
|
45
|
+
console.log((0, format_js_1.table)(['Profile', 'Name', 'ID', 'Server'], rows));
|
|
46
|
+
console.log(`\n ${format_js_1.fmt.dim(`${format_js_1.symbols.dot} = active`)} ${format_js_1.fmt.cyan('rovn use <profile>')} ${format_js_1.fmt.dim('Switch agent')}\n`);
|
|
47
|
+
}
|
|
48
|
+
function useCommand(args) {
|
|
49
|
+
agentsCommand(['use', ...args]);
|
|
50
|
+
}
|
|
51
|
+
async function whoamiCommand() {
|
|
52
|
+
const profiles = (0, config_js_1.listProfiles)();
|
|
53
|
+
const current = profiles.find(p => p.isCurrent);
|
|
54
|
+
if (!current) {
|
|
55
|
+
console.log((0, format_js_1.emptyState)('No agent configured.', 'Run: rovn init'));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const agent = current.agent;
|
|
59
|
+
// Try to fetch trust score for richer card
|
|
60
|
+
let score = '?';
|
|
61
|
+
let grade = '?';
|
|
62
|
+
try {
|
|
63
|
+
const s = (0, format_js_1.spinner)('Loading...');
|
|
64
|
+
const res = await (0, api_js_1.apiGet)(agent, `/api/agents/${agent.id}/trust-score`);
|
|
65
|
+
s.stop();
|
|
66
|
+
if (res.success) {
|
|
67
|
+
const data = (res.data ?? res);
|
|
68
|
+
score = String(data.trust_score ?? data.score ?? '?');
|
|
69
|
+
grade = String(data.grade ?? data.trust_level ?? data.level ?? '?');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Show card without trust score
|
|
74
|
+
}
|
|
75
|
+
const scoreNum = parseInt(score, 10);
|
|
76
|
+
const coloredScore = isNaN(scoreNum) ? score
|
|
77
|
+
: scoreNum >= 61 ? format_js_1.fmt.green(score)
|
|
78
|
+
: scoreNum >= 31 ? format_js_1.fmt.yellow(score)
|
|
79
|
+
: format_js_1.fmt.red(score);
|
|
80
|
+
const lines = [
|
|
81
|
+
`${format_js_1.fmt.bold(agent.name)}`,
|
|
82
|
+
``,
|
|
83
|
+
`${format_js_1.fmt.dim('Profile')} ${format_js_1.fmt.cyan(current.name)}`,
|
|
84
|
+
`${format_js_1.fmt.dim('ID')} ${agent.id}`,
|
|
85
|
+
`${format_js_1.fmt.dim('Server')} ${agent.url}`,
|
|
86
|
+
`${format_js_1.fmt.dim('Trust')} ${coloredScore}/100 ${format_js_1.fmt.dim(`(Grade ${grade})`)}`,
|
|
87
|
+
];
|
|
88
|
+
console.log('');
|
|
89
|
+
console.log((0, format_js_1.box)(lines, `${format_js_1.symbols.dot} whoami`));
|
|
90
|
+
console.log('');
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function approveCommand(args: string[]): Promise<void>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.approveCommand = approveCommand;
|
|
4
|
+
const config_js_1 = require("../config.js");
|
|
5
|
+
const api_js_1 = require("../api.js");
|
|
6
|
+
const format_js_1 = require("../format.js");
|
|
7
|
+
async function approveCommand(args) {
|
|
8
|
+
const agent = (0, config_js_1.requireAgent)();
|
|
9
|
+
// rovn approve request "title" --type deployment --urgency high
|
|
10
|
+
if (args[0] === 'request') {
|
|
11
|
+
const title = args[1];
|
|
12
|
+
if (!title) {
|
|
13
|
+
console.error((0, format_js_1.error)('Missing title', 'Usage: rovn approve request "Deploy to production" [--type deployment] [--urgency high]'));
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
let type = 'action';
|
|
17
|
+
let urgency = 'medium';
|
|
18
|
+
let description = '';
|
|
19
|
+
for (let i = 2; i < args.length; i++) {
|
|
20
|
+
if (args[i] === '--type' && args[i + 1])
|
|
21
|
+
type = args[++i];
|
|
22
|
+
if (args[i] === '--urgency' && args[i + 1])
|
|
23
|
+
urgency = args[++i];
|
|
24
|
+
if (args[i] === '--desc' && args[i + 1])
|
|
25
|
+
description = args[++i];
|
|
26
|
+
}
|
|
27
|
+
const s = (0, format_js_1.spinner)('Requesting approval...');
|
|
28
|
+
const res = await (0, api_js_1.apiPost)(agent, `/api/agents/${agent.id}/approvals`, {
|
|
29
|
+
title,
|
|
30
|
+
type,
|
|
31
|
+
urgency,
|
|
32
|
+
description: description || undefined,
|
|
33
|
+
});
|
|
34
|
+
s.stop();
|
|
35
|
+
if (res.success) {
|
|
36
|
+
console.log((0, format_js_1.success)(`Approval requested: ${format_js_1.fmt.bold(title)}`));
|
|
37
|
+
console.log(format_js_1.fmt.dim(' The owner will see this in their dashboard.'));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.error((0, format_js_1.error)(`Failed: ${res.error ?? 'Unknown error'}`));
|
|
41
|
+
}
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
// rovn approve (list pending approvals)
|
|
45
|
+
const s = (0, format_js_1.spinner)('Loading approvals...');
|
|
46
|
+
const res = await (0, api_js_1.apiGet)(agent, `/api/agents/${agent.id}/approvals?status=pending`);
|
|
47
|
+
s.stop();
|
|
48
|
+
if (!res.success) {
|
|
49
|
+
console.error((0, format_js_1.error)(`Failed: ${res.error ?? 'Unknown error'}`));
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
const approvals = (res.data ?? res.approvals ?? []);
|
|
53
|
+
if (approvals.length === 0) {
|
|
54
|
+
console.log((0, format_js_1.emptyState)('No pending approvals.', 'Request one with: rovn approve request "title"'));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
console.log((0, format_js_1.header)(`Pending Approvals (${approvals.length})`));
|
|
58
|
+
const urgencyBadge = (u) => {
|
|
59
|
+
if (u === 'critical')
|
|
60
|
+
return (0, format_js_1.badge)(u, 'red');
|
|
61
|
+
if (u === 'high')
|
|
62
|
+
return (0, format_js_1.badge)(u, 'yellow');
|
|
63
|
+
return (0, format_js_1.badge)(u, 'dim');
|
|
64
|
+
};
|
|
65
|
+
const rows = approvals.map((a, i) => [
|
|
66
|
+
String(i + 1),
|
|
67
|
+
a.title ?? '',
|
|
68
|
+
a.type ?? '',
|
|
69
|
+
urgencyBadge(a.urgency ?? ''),
|
|
70
|
+
a.created_at ? (0, format_js_1.timeAgo)(a.created_at) : '',
|
|
71
|
+
]);
|
|
72
|
+
console.log((0, format_js_1.table)(['#', 'Title', 'Type', 'Urgency', 'Requested'], rows));
|
|
73
|
+
console.log('');
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=approve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approve.js","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function checkCommand(args: string[]): Promise<void>;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.checkCommand = checkCommand;
|
|
4
|
+
const config_js_1 = require("../config.js");
|
|
5
|
+
const api_js_1 = require("../api.js");
|
|
6
|
+
const format_js_1 = require("../format.js");
|
|
7
|
+
async function checkCommand(args) {
|
|
8
|
+
const agent = (0, config_js_1.requireAgent)();
|
|
9
|
+
const action = args[0];
|
|
10
|
+
if (!action) {
|
|
11
|
+
console.error((0, format_js_1.error)('Missing action', 'Usage: rovn check <action> [--urgency low|medium|high|critical] [--cost 10.00]'));
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
let urgency = 'medium';
|
|
15
|
+
let cost;
|
|
16
|
+
let context = '';
|
|
17
|
+
for (let i = 1; i < args.length; i++) {
|
|
18
|
+
if (args[i] === '--urgency' && args[i + 1])
|
|
19
|
+
urgency = args[++i];
|
|
20
|
+
if (args[i] === '--cost' && args[i + 1])
|
|
21
|
+
cost = parseFloat(args[++i]);
|
|
22
|
+
if (args[i] === '--context' && args[i + 1])
|
|
23
|
+
context = args[++i];
|
|
24
|
+
}
|
|
25
|
+
const params = new URLSearchParams({ action, urgency });
|
|
26
|
+
if (cost !== undefined)
|
|
27
|
+
params.set('cost', String(cost));
|
|
28
|
+
if (context)
|
|
29
|
+
params.set('context', context);
|
|
30
|
+
const s = (0, format_js_1.spinner)(`Checking: ${action}...`);
|
|
31
|
+
const res = await (0, api_js_1.apiGet)(agent, `/api/agents/${agent.id}/check?${params}`);
|
|
32
|
+
s.stop();
|
|
33
|
+
if (!res.success) {
|
|
34
|
+
console.error((0, format_js_1.error)(`Failed: ${res.error ?? 'Unknown error'}`));
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
const data = (res.data ?? res);
|
|
38
|
+
const decision = data.decision ?? 'unknown';
|
|
39
|
+
const decisionDisplay = decision === 'approved'
|
|
40
|
+
? format_js_1.fmt.bgGreen(` ${format_js_1.symbols.check} APPROVED `)
|
|
41
|
+
: decision === 'denied'
|
|
42
|
+
? format_js_1.fmt.bgRed(` ${format_js_1.symbols.cross} DENIED `)
|
|
43
|
+
: format_js_1.fmt.bgYellow(` ${format_js_1.symbols.warning} NEEDS APPROVAL `);
|
|
44
|
+
const lines = [
|
|
45
|
+
`${format_js_1.fmt.dim('Action')} ${format_js_1.fmt.bold(action)}`,
|
|
46
|
+
`${format_js_1.fmt.dim('Decision')} ${decisionDisplay}`,
|
|
47
|
+
...(data.reason ? [`${format_js_1.fmt.dim('Reason')} ${data.reason}`] : []),
|
|
48
|
+
...(data.trust_level !== undefined ? [`${format_js_1.fmt.dim('Trust')} Level ${data.trust_level}`] : []),
|
|
49
|
+
];
|
|
50
|
+
console.log('');
|
|
51
|
+
console.log((0, format_js_1.box)(lines, 'Pre-flight Check'));
|
|
52
|
+
console.log('');
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function initCommand(args: string[]): Promise<void>;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initCommand = initCommand;
|
|
4
|
+
const readline_1 = require("readline");
|
|
5
|
+
const config_js_1 = require("../config.js");
|
|
6
|
+
const api_js_1 = require("../api.js");
|
|
7
|
+
const format_js_1 = require("../format.js");
|
|
8
|
+
function prompt(question) {
|
|
9
|
+
const rl = (0, readline_1.createInterface)({ input: process.stdin, output: process.stdout });
|
|
10
|
+
return new Promise(resolve => {
|
|
11
|
+
rl.question(question, answer => {
|
|
12
|
+
rl.close();
|
|
13
|
+
resolve(answer.trim());
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
async function initCommand(args) {
|
|
18
|
+
console.log((0, format_js_1.header)('Rovn Agent Setup'));
|
|
19
|
+
// Parse flags
|
|
20
|
+
let name = '';
|
|
21
|
+
let profile = '';
|
|
22
|
+
let email = '';
|
|
23
|
+
let url = 'https://rovn.io';
|
|
24
|
+
for (let i = 0; i < args.length; i++) {
|
|
25
|
+
if (args[i] === '--name' && args[i + 1])
|
|
26
|
+
name = args[++i];
|
|
27
|
+
if (args[i] === '--as' && args[i + 1])
|
|
28
|
+
profile = args[++i];
|
|
29
|
+
if (args[i] === '--email' && args[i + 1])
|
|
30
|
+
email = args[++i];
|
|
31
|
+
if (args[i] === '--url' && args[i + 1])
|
|
32
|
+
url = args[++i];
|
|
33
|
+
}
|
|
34
|
+
// Interactive prompts for missing values
|
|
35
|
+
if (!name)
|
|
36
|
+
name = await prompt(` ${format_js_1.symbols.arrow} Agent name: `);
|
|
37
|
+
if (!name) {
|
|
38
|
+
console.error((0, format_js_1.error)('Agent name is required.'));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
if (!profile)
|
|
42
|
+
profile = name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
|
|
43
|
+
if (!email)
|
|
44
|
+
email = await prompt(` ${format_js_1.symbols.arrow} Owner email (optional): `);
|
|
45
|
+
// Register via API
|
|
46
|
+
const s = (0, format_js_1.spinner)(`Registering ${name}...`);
|
|
47
|
+
const res = await (0, api_js_1.apiPost)({ id: '', api_key: '', name: '', url }, '/api/agents/register', {
|
|
48
|
+
name,
|
|
49
|
+
type: 'cli-agent',
|
|
50
|
+
owner_email: email || undefined,
|
|
51
|
+
metadata: { platform: 'cli', registered_at: new Date().toISOString() },
|
|
52
|
+
});
|
|
53
|
+
s.stop();
|
|
54
|
+
if (!res.success) {
|
|
55
|
+
console.error((0, format_js_1.error)(`Registration failed: ${res.error ?? 'Unknown error'}`));
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
const data = res.data;
|
|
59
|
+
// Save to config
|
|
60
|
+
const config = (0, config_js_1.loadConfig)();
|
|
61
|
+
config.agents[profile] = {
|
|
62
|
+
id: data.id,
|
|
63
|
+
api_key: data.api_key,
|
|
64
|
+
name: data.name,
|
|
65
|
+
url,
|
|
66
|
+
};
|
|
67
|
+
config.current = profile;
|
|
68
|
+
(0, config_js_1.saveConfig)(config);
|
|
69
|
+
// Success card
|
|
70
|
+
const lines = [
|
|
71
|
+
`${format_js_1.fmt.green(format_js_1.symbols.check)} ${format_js_1.fmt.bold('Agent registered successfully!')}`,
|
|
72
|
+
``,
|
|
73
|
+
`${format_js_1.fmt.dim('Profile')} ${format_js_1.fmt.cyan(profile)}`,
|
|
74
|
+
`${format_js_1.fmt.dim('Agent ID')} ${data.id}`,
|
|
75
|
+
`${format_js_1.fmt.dim('Name')} ${data.name}`,
|
|
76
|
+
`${format_js_1.fmt.dim('Server')} ${url}`,
|
|
77
|
+
...(data.claim_url ? [
|
|
78
|
+
``,
|
|
79
|
+
`${format_js_1.fmt.yellow(format_js_1.symbols.warning)} ${format_js_1.fmt.bold('Share this URL with the owner to claim:')}`,
|
|
80
|
+
`${format_js_1.fmt.cyan(data.claim_url)}`,
|
|
81
|
+
] : []),
|
|
82
|
+
];
|
|
83
|
+
console.log('');
|
|
84
|
+
console.log((0, format_js_1.box)(lines, 'Registration Complete'));
|
|
85
|
+
console.log(`\n Config saved to ${format_js_1.fmt.dim('~/.rovnrc')}`);
|
|
86
|
+
console.log(` Run ${format_js_1.fmt.cyan('rovn status')} to check your agent.\n`);
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function logCommand(args: string[]): Promise<void>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logCommand = logCommand;
|
|
4
|
+
const config_js_1 = require("../config.js");
|
|
5
|
+
const api_js_1 = require("../api.js");
|
|
6
|
+
const format_js_1 = require("../format.js");
|
|
7
|
+
async function logCommand(args) {
|
|
8
|
+
const agent = (0, config_js_1.requireAgent)();
|
|
9
|
+
// rovn log --push "title" --type "type"
|
|
10
|
+
const pushIdx = args.indexOf('--push');
|
|
11
|
+
if (pushIdx >= 0) {
|
|
12
|
+
const title = args[pushIdx + 1];
|
|
13
|
+
if (!title) {
|
|
14
|
+
console.error((0, format_js_1.error)('Missing title', 'Usage: rovn log --push "Activity title"'));
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
let type = 'action';
|
|
18
|
+
const typeIdx = args.indexOf('--type');
|
|
19
|
+
if (typeIdx >= 0 && args[typeIdx + 1])
|
|
20
|
+
type = args[typeIdx + 1];
|
|
21
|
+
let description = '';
|
|
22
|
+
const descIdx = args.indexOf('--desc');
|
|
23
|
+
if (descIdx >= 0 && args[descIdx + 1])
|
|
24
|
+
description = args[descIdx + 1];
|
|
25
|
+
const s = (0, format_js_1.spinner)('Logging activity...');
|
|
26
|
+
const res = await (0, api_js_1.apiPost)(agent, `/api/agents/${agent.id}/activities`, {
|
|
27
|
+
title,
|
|
28
|
+
type,
|
|
29
|
+
description: description || undefined,
|
|
30
|
+
});
|
|
31
|
+
s.stop();
|
|
32
|
+
if (res.success) {
|
|
33
|
+
console.log((0, format_js_1.success)(`Logged: ${format_js_1.fmt.bold(title)}`));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.error((0, format_js_1.error)(`Failed: ${res.error ?? 'Unknown error'}`));
|
|
37
|
+
}
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
// rovn log (list activities)
|
|
41
|
+
let limit = 10;
|
|
42
|
+
const lastIdx = args.indexOf('--last');
|
|
43
|
+
if (lastIdx >= 0 && args[lastIdx + 1])
|
|
44
|
+
limit = parseInt(args[lastIdx + 1], 10) || 10;
|
|
45
|
+
const s = (0, format_js_1.spinner)('Loading activities...');
|
|
46
|
+
const res = await (0, api_js_1.apiGet)(agent, `/api/agents/${agent.id}/activities?limit=${limit}`);
|
|
47
|
+
s.stop();
|
|
48
|
+
if (!res.success) {
|
|
49
|
+
console.error((0, format_js_1.error)(`Failed: ${res.error ?? 'Unknown error'}`));
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
const resData = (res.data ?? {});
|
|
53
|
+
const activities = (resData.activities ?? res.activities ?? []);
|
|
54
|
+
if (activities.length === 0) {
|
|
55
|
+
console.log((0, format_js_1.emptyState)('No activities yet.', 'Log one with: rovn log --push "Did something"'));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
console.log((0, format_js_1.header)(`Recent Activities (${activities.length})`));
|
|
59
|
+
const rows = activities.map((a, i) => [
|
|
60
|
+
String(i + 1),
|
|
61
|
+
a.title ?? '',
|
|
62
|
+
a.type ?? '',
|
|
63
|
+
a.created_at ? (0, format_js_1.timeAgo)(a.created_at) : '',
|
|
64
|
+
]);
|
|
65
|
+
console.log((0, format_js_1.table)(['#', 'Title', 'Type', 'Time'], rows));
|
|
66
|
+
console.log('');
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function reportCommand(args: string[]): Promise<void>;
|