@roj-ai/cli 0.0.2
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/dist/client.d.ts +8 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +28 -0
- package/dist/commands/answer.d.ts +3 -0
- package/dist/commands/answer.d.ts.map +1 -0
- package/dist/commands/answer.js +15 -0
- package/dist/commands/debug-format.d.ts +12 -0
- package/dist/commands/debug-format.d.ts.map +1 -0
- package/dist/commands/debug-format.js +262 -0
- package/dist/commands/debug.d.ts +14 -0
- package/dist/commands/debug.d.ts.map +1 -0
- package/dist/commands/debug.js +187 -0
- package/dist/commands/messages.d.ts +4 -0
- package/dist/commands/messages.d.ts.map +1 -0
- package/dist/commands/messages.js +77 -0
- package/dist/commands/presets.d.ts +3 -0
- package/dist/commands/presets.d.ts.map +1 -0
- package/dist/commands/presets.js +14 -0
- package/dist/commands/sessions.d.ts +6 -0
- package/dist/commands/sessions.d.ts.map +1 -0
- package/dist/commands/sessions.js +50 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +277 -0
- package/dist/repl/formatter.d.ts +16 -0
- package/dist/repl/formatter.d.ts.map +1 -0
- package/dist/repl/formatter.js +72 -0
- package/dist/repl/repl.d.ts +3 -0
- package/dist/repl/repl.d.ts.map +1 -0
- package/dist/repl/repl.js +212 -0
- package/dist/repl/session-picker.d.ts +6 -0
- package/dist/repl/session-picker.d.ts.map +1 -0
- package/dist/repl/session-picker.js +60 -0
- package/dist/unwrap.d.ts +4 -0
- package/dist/unwrap.d.ts.map +1 -0
- package/dist/unwrap.js +6 -0
- package/package.json +27 -0
- package/src/client.ts +41 -0
- package/src/commands/answer.ts +27 -0
- package/src/commands/debug-format.ts +299 -0
- package/src/commands/debug.ts +347 -0
- package/src/commands/messages.ts +92 -0
- package/src/commands/presets.ts +22 -0
- package/src/commands/sessions.ts +73 -0
- package/src/main.ts +319 -0
- package/src/repl/formatter.ts +84 -0
- package/src/repl/repl.ts +246 -0
- package/src/repl/session-picker.ts +81 -0
- package/src/unwrap.ts +8 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { SessionMetadata } from '@roj-ai/sdk'
|
|
2
|
+
import { SessionId } from '@roj-ai/shared'
|
|
3
|
+
import type { RpcClient } from '@roj-ai/shared/rpc'
|
|
4
|
+
import * as readline from 'node:readline'
|
|
5
|
+
import { unwrap } from '../unwrap.js'
|
|
6
|
+
|
|
7
|
+
const DIM = '\x1b[2m'
|
|
8
|
+
const BOLD = '\x1b[1m'
|
|
9
|
+
const RESET = '\x1b[0m'
|
|
10
|
+
|
|
11
|
+
function ask(rl: readline.Interface, question: string): Promise<string> {
|
|
12
|
+
return new Promise(resolve => {
|
|
13
|
+
rl.question(question, resolve)
|
|
14
|
+
})
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function isSessionMetadata(data: unknown): data is SessionMetadata {
|
|
18
|
+
return typeof data === 'object' && data !== null && 'sessionId' in data && 'presetId' in data
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export async function pickSession(client: RpcClient, rl: readline.Interface): Promise<SessionId> {
|
|
22
|
+
const { sessions: rawSessions } = unwrap(await client.call('sessions.list', { status: 'active', limit: 20, order: 'desc' }))
|
|
23
|
+
const sessions = rawSessions.filter(isSessionMetadata)
|
|
24
|
+
|
|
25
|
+
console.log()
|
|
26
|
+
console.log(`${BOLD}Active sessions:${RESET}`)
|
|
27
|
+
|
|
28
|
+
for (let i = 0; i < sessions.length; i++) {
|
|
29
|
+
const s = sessions[i]
|
|
30
|
+
const date = new Date(s.createdAt).toLocaleString()
|
|
31
|
+
const name = s.name ? ` - ${s.name}` : ''
|
|
32
|
+
console.log(` ${BOLD}${i + 1})${RESET} ${s.sessionId.slice(0, 8)}... ${DIM}[${s.presetId}]${RESET}${name} ${DIM}${date}${RESET}`)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
console.log(` ${BOLD}n)${RESET} Create new session`)
|
|
36
|
+
console.log()
|
|
37
|
+
|
|
38
|
+
const choice = await ask(rl, 'Select session: ')
|
|
39
|
+
|
|
40
|
+
if (choice.toLowerCase() === 'n') {
|
|
41
|
+
return createNewSession(client, rl)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const index = parseInt(choice, 10) - 1
|
|
45
|
+
if (index >= 0 && index < sessions.length) {
|
|
46
|
+
return sessions[index].sessionId
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
console.log('Invalid choice, try again.')
|
|
50
|
+
return pickSession(client, rl)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export async function createNewSession(client: RpcClient, rl: readline.Interface): Promise<SessionId> {
|
|
54
|
+
const { presets } = unwrap(await client.call('presets.list', {}))
|
|
55
|
+
|
|
56
|
+
if (presets.length === 0) {
|
|
57
|
+
throw new Error('No presets available on the server.')
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
console.log()
|
|
61
|
+
console.log(`${BOLD}Available presets:${RESET}`)
|
|
62
|
+
|
|
63
|
+
for (let i = 0; i < presets.length; i++) {
|
|
64
|
+
const p = presets[i]
|
|
65
|
+
const desc = p.description ? ` - ${p.description}` : ''
|
|
66
|
+
console.log(` ${BOLD}${i + 1})${RESET} ${p.name}${DIM}${desc}${RESET}`)
|
|
67
|
+
}
|
|
68
|
+
console.log()
|
|
69
|
+
|
|
70
|
+
const choice = await ask(rl, 'Select preset: ')
|
|
71
|
+
const index = parseInt(choice, 10) - 1
|
|
72
|
+
|
|
73
|
+
if (index < 0 || index >= presets.length) {
|
|
74
|
+
console.log('Invalid choice, try again.')
|
|
75
|
+
return createNewSession(client, rl)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const { sessionId } = unwrap(await client.call('sessions.create', { presetId: presets[index].id }))
|
|
79
|
+
console.log(`Session created: ${sessionId}`)
|
|
80
|
+
return SessionId(sessionId)
|
|
81
|
+
}
|
package/src/unwrap.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { RpcError } from '@roj-ai/shared/rpc'
|
|
2
|
+
import type { Result } from '@roj-ai/shared/rpc'
|
|
3
|
+
import type { RpcErrorInfo } from '@roj-ai/shared/rpc'
|
|
4
|
+
|
|
5
|
+
export function unwrap<T>(result: Result<T, RpcErrorInfo>): T {
|
|
6
|
+
if (result.ok) return result.value
|
|
7
|
+
throw new RpcError(0, result.error)
|
|
8
|
+
}
|