@dotrino/ia-agent 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/bin/cli.js +43 -0
- package/index.js +34 -0
- package/package.json +31 -0
package/bin/cli.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* dotrino-ia-agent — CLI del agente de IA.
|
|
4
|
+
* enroll <qr-json | -> enropa esta máquina al vault como agente 'ia-agent'
|
|
5
|
+
* run arranca el agente (escucha chats desde la PWA)
|
|
6
|
+
*/
|
|
7
|
+
import { enroll, parseQr, dataDir } from '@dotrino/remote-agent/link'
|
|
8
|
+
import { startIaAgent } from '../index.js'
|
|
9
|
+
|
|
10
|
+
const DIR = dataDir('dotrino-ia-agent')
|
|
11
|
+
const cmd = process.argv[2]
|
|
12
|
+
|
|
13
|
+
function readStdin () {
|
|
14
|
+
return new Promise((resolve) => {
|
|
15
|
+
let d = ''
|
|
16
|
+
process.stdin.setEncoding('utf8')
|
|
17
|
+
process.stdin.on('data', (c) => { d += c })
|
|
18
|
+
process.stdin.on('end', () => resolve(d.trim()))
|
|
19
|
+
})
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (cmd === 'enroll') {
|
|
23
|
+
let qrText = process.argv[3]
|
|
24
|
+
if (!qrText || qrText === '-') qrText = await readStdin()
|
|
25
|
+
if (!qrText) { console.error('Uso: dotrino-ia-agent enroll "<qr-json>" (o pega el QR por stdin con -)'); process.exit(1) }
|
|
26
|
+
try {
|
|
27
|
+
const link = await enroll({
|
|
28
|
+
qr: parseQr(qrText),
|
|
29
|
+
label: 'ia-agent',
|
|
30
|
+
dir: DIR,
|
|
31
|
+
onChallenge: ({ deviceId, code }) => console.log(`\nMáquina ${deviceId}\n Tipeá este código en el vault: ${code}\n`)
|
|
32
|
+
})
|
|
33
|
+
console.log(`\n✓ Enrolado como 'ia-agent' (vault ${link.iss.slice(0, 16)}…).\n Ahora arranca el agente: dotrino-ia-agent run\n`)
|
|
34
|
+
} catch (e) { console.error('Error:', e.message); process.exit(1) }
|
|
35
|
+
} else if (cmd === 'run' || !cmd) {
|
|
36
|
+
try {
|
|
37
|
+
await startIaAgent({ dir: DIR })
|
|
38
|
+
console.log('(Ctrl+C para detener)')
|
|
39
|
+
} catch (e) { console.error('Error:', e.message); process.exit(1) }
|
|
40
|
+
} else {
|
|
41
|
+
console.error('Comandos:\n dotrino-ia-agent enroll "<qr-json>" | -\n dotrino-ia-agent run')
|
|
42
|
+
process.exit(1)
|
|
43
|
+
}
|
package/index.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dotrino/ia-agent — agente de Dotrino IA (Node).
|
|
3
|
+
*
|
|
4
|
+
* Expone tus CLIs de IA (Claude, OpenCode…) al chat remoto, sobre
|
|
5
|
+
* `@dotrino/remote-agent` (handshake E2E, emparejamiento con vault, revocación).
|
|
6
|
+
*
|
|
7
|
+
* F0: driver ECHO — devuelve el texto recibido. Sirve para validar el flujo extremo
|
|
8
|
+
* a extremo (enrolamiento → descubrimiento → handshake → chat) antes de meter el
|
|
9
|
+
* driver de Claude (F1). Reemplazar el cuerpo de `onSession` por el driver.
|
|
10
|
+
*/
|
|
11
|
+
import { startRemoteAgent } from '@dotrino/remote-agent/agent'
|
|
12
|
+
|
|
13
|
+
export async function startIaAgent (opts = {}) {
|
|
14
|
+
return startRemoteAgent({
|
|
15
|
+
label: 'ia-agent',
|
|
16
|
+
proxyUrl: opts.proxyUrl,
|
|
17
|
+
dir: opts.dir,
|
|
18
|
+
quiet: opts.quiet,
|
|
19
|
+
onReady: opts.onReady,
|
|
20
|
+
onRevoked: opts.onRevoked,
|
|
21
|
+
onSession (session) {
|
|
22
|
+
session.on('message', async (msg) => {
|
|
23
|
+
if (msg?.type === 'msg' && typeof msg.text === 'string') {
|
|
24
|
+
// F0 — ECHO. F1+: session es un canal cifrado; pasalo al driver:
|
|
25
|
+
// const reply = await claudeDriver.send(msg.text, { sessionId, onToken })
|
|
26
|
+
// session.send({ type: 'done', text: reply })
|
|
27
|
+
await session.send({ type: 'done', text: 'echo: ' + msg.text })
|
|
28
|
+
}
|
|
29
|
+
})
|
|
30
|
+
}
|
|
31
|
+
})
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export default { startIaAgent }
|
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dotrino/ia-agent",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Agente de Dotrino IA: expone tus CLIs de IA (Claude, OpenCode) al chat remoto de ia.dotrino.com, vía @dotrino/remote-agent.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"dotrino-ia-agent": "bin/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"exports": {
|
|
10
|
+
".": "./index.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"index.js",
|
|
14
|
+
"bin"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"start": "node bin/cli.js run"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@dotrino/remote-agent": "^0.1.0"
|
|
21
|
+
},
|
|
22
|
+
"engines": {
|
|
23
|
+
"node": ">=18"
|
|
24
|
+
},
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "git+ssh://git@github.com/imdotrino/dotrino-ia.git",
|
|
29
|
+
"directory": "agent"
|
|
30
|
+
}
|
|
31
|
+
}
|