@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.
Files changed (41) hide show
  1. package/README.md +76 -0
  2. package/dist/api.d.ts +9 -0
  3. package/dist/api.js +110 -0
  4. package/dist/api.js.map +1 -0
  5. package/dist/commands/agents.d.ts +3 -0
  6. package/dist/commands/agents.js +92 -0
  7. package/dist/commands/agents.js.map +1 -0
  8. package/dist/commands/approve.d.ts +1 -0
  9. package/dist/commands/approve.js +75 -0
  10. package/dist/commands/approve.js.map +1 -0
  11. package/dist/commands/check.d.ts +1 -0
  12. package/dist/commands/check.js +54 -0
  13. package/dist/commands/check.js.map +1 -0
  14. package/dist/commands/init.d.ts +1 -0
  15. package/dist/commands/init.js +88 -0
  16. package/dist/commands/init.js.map +1 -0
  17. package/dist/commands/log.d.ts +1 -0
  18. package/dist/commands/log.js +68 -0
  19. package/dist/commands/log.js.map +1 -0
  20. package/dist/commands/report.d.ts +1 -0
  21. package/dist/commands/report.js +62 -0
  22. package/dist/commands/report.js.map +1 -0
  23. package/dist/commands/status.d.ts +1 -0
  24. package/dist/commands/status.js +53 -0
  25. package/dist/commands/status.js.map +1 -0
  26. package/dist/commands/tasks.d.ts +1 -0
  27. package/dist/commands/tasks.js +73 -0
  28. package/dist/commands/tasks.js.map +1 -0
  29. package/dist/commands/trust.d.ts +1 -0
  30. package/dist/commands/trust.js +33 -0
  31. package/dist/commands/trust.js.map +1 -0
  32. package/dist/config.d.ts +19 -0
  33. package/dist/config.js +50 -0
  34. package/dist/config.js.map +1 -0
  35. package/dist/format.d.ts +36 -0
  36. package/dist/format.js +159 -0
  37. package/dist/format.js.map +1 -0
  38. package/dist/index.d.ts +2 -0
  39. package/dist/index.js +265 -0
  40. package/dist/index.js.map +1 -0
  41. 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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function agentsCommand(args: string[]): void;
2
+ export declare function useCommand(args: string[]): void;
3
+ export declare function whoamiCommand(): Promise<void>;
@@ -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>;