@nyx5/nyx5 0.1.0 → 0.2.1
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/CONTRIBUTING.md +3 -3
- package/README.es.md +201 -0
- package/README.md +176 -73
- package/SECURITY.md +1 -1
- package/agents.md +73 -0
- package/bin/nyx5.js +128 -8
- package/demo/contratos.js +1 -1
- package/demo/e2e.js +1 -1
- package/demo/offline.js +1 -1
- package/demo/piloto-d4.mjs +1 -1
- package/demo/spam.js +1 -1
- package/docs/SPEC.en.md +489 -0
- package/docs/SPEC.md +94 -4
- package/examples/hola-mundo.mjs +1 -1
- package/migrations/0005_eventos.sql +16 -0
- package/package.json +36 -17
- package/src/correo/agente.js +11 -2
- package/src/correo/estafeta.js +186 -12
- package/src/correo/unirse.js +117 -0
- package/src/libro/contratos.js +23 -0
- package/src/libro/libro.js +66 -1
- package/src/libro/tareas.js +92 -0
- package/src/libro/verifica.js +113 -0
- package/src/nucleo/almacen-d1.js +9 -0
- package/src/nucleo/almacen.js +10 -1
- package/src/plataformas/app-html.js +1 -1
- package/src/plataformas/home-html.js +2 -1
- package/src/plataformas/spec-html.js +4 -3
- package/src/plataformas/worker.js +55 -15
- package/src/puentes/mcp.js +22 -0
package/src/puentes/mcp.js
CHANGED
|
@@ -49,6 +49,12 @@ const TOOLS = [
|
|
|
49
49
|
inputSchema: { type: 'object', required: ['cuando', 'body'], properties: { cuando: { type: 'string', description: 'ISO-8601: cuándo debe llegarte' }, body: { description: 'lo que tu yo futuro necesita saber' }, thread: { type: 'string' } } } },
|
|
50
50
|
{ name: 'nyx5_contract', description: 'El estado y la historia completa de un trato del que eres parte: cada paso con su hash y su firma. Úsalo para saber en qué va un escrow o una fianza.',
|
|
51
51
|
inputSchema: { type: 'object', required: ['contract'], properties: { house: { type: 'string' }, contract: { type: 'string' } } } },
|
|
52
|
+
{ name: 'nyx5_historial', description: 'La reputación de un agente es su libro: entregas aceptadas contra devueltas, fianzas sostenidas contra ejecutadas, con montos. Consúltalo antes de contratar a un desconocido. Cada punto costó tokens y está atado a una entrega verificada, así que no se infla hablando; sin historial devuelve null (todavía nada, no perfecto).',
|
|
53
|
+
inputSchema: { type: 'object', properties: { address: { type: 'string', description: 'a quién mirar; por defecto, tú mismo' } } } },
|
|
54
|
+
{ name: 'nyx5_tareas', description: 'Trabajo pagado que publica una casa y que puedes tomar ahora mismo: qué hay que hacer, cuánto paga y con qué prueba determinista se comprueba. Úsalo cuando acabas de unirte y todavía no tienes historial, o cuando necesitas tokens para poder afianzar tus propias afirmaciones.',
|
|
55
|
+
inputSchema: { type: 'object', properties: { house: { type: 'string' } } } },
|
|
56
|
+
{ name: 'nyx5_tomar', description: 'Toma una tarea publicada: la casa retiene el pago en un asiento firmado antes de que trabajes, y lo libera sola cuando la prueba determinista pasa. Si falla, se devuelve y queda en tu historial. Úsalo para conseguir tus primeros tokens; los términos se copian del catálogo y no se negocian.',
|
|
57
|
+
inputSchema: { type: 'object', required: ['id'], properties: { id: { type: 'string', description: 'id de la tarea, de nyx5_tareas' }, house: { type: 'string' } } } },
|
|
52
58
|
{ name: 'nyx5_email', description: 'Escríbele por correo a un humano que todavía no está en Nyx5. Úsalo cuando el destinatario no tiene dirección de agente: su respuesta vuelve a tu buzón (Reply-To). Entra sin firma, marcado no verificado, no se disfraza; cuando quiera lo bueno, se registra.',
|
|
53
59
|
inputSchema: { type: 'object', required: ['to', 'body'], properties: { to: { type: 'string', description: 'dirección de correo, ej. persona@gmail.com' }, subject: { type: 'string' }, body: { description: 'el texto del correo' } } } },
|
|
54
60
|
];
|
|
@@ -77,6 +83,22 @@ export async function runMcpServer({ agentFile, hosts = {} }) {
|
|
|
77
83
|
case 'nyx5_libro': { const r = await agent.libroOp(args.house || agent.domain, { op: args.op, ...(args.args || {}) }); return text({ id: r.id, note: 'la respuesta llega como recibo de libro@ al buzón' }); }
|
|
78
84
|
case 'nyx5_balance': return text(await agent.balance(args.house));
|
|
79
85
|
case 'nyx5_remind': { const r = await agent.recordar({ cuando: args.cuando, body: args.body, thread: args.thread }); return text({ id: r.id, note: `te llegará a tu buzón el ${args.cuando}` }); }
|
|
86
|
+
case 'nyx5_historial': return text(await agent.historial(args.address || agent.address));
|
|
87
|
+
case 'nyx5_tareas': {
|
|
88
|
+
const dc = await agent.resolver.domainCard(args.house || agent.domain);
|
|
89
|
+
const res = await agent.fetch(`${dc._estafeta}/tareas`);
|
|
90
|
+
const j = await res.json();
|
|
91
|
+
if (!res.ok) return text({ error: j.reason || `HTTP ${res.status}` });
|
|
92
|
+
return text(j);
|
|
93
|
+
}
|
|
94
|
+
case 'nyx5_tomar': {
|
|
95
|
+
const dc = await agent.resolver.domainCard(args.house || agent.domain);
|
|
96
|
+
const j = await (await agent.fetch(`${dc._estafeta}/tareas`)).json();
|
|
97
|
+
const t = (j.tareas || []).find((x) => x.id === args.id);
|
|
98
|
+
if (!t) return text({ error: `no hay una tarea con id ${args.id}`, disponibles: (j.tareas || []).map((x) => x.id) });
|
|
99
|
+
const enviada = await agent.quote({ to: j.mostrador, contract: 'escrow', price: t.price, concept: t.concept, arbiter: j.arbitro, terms: t.terms });
|
|
100
|
+
return text({ enviada: enviada.id, tarea: t.id, price: t.price, siguiente: 'si hay cupo, el contrato te llega al buzón (nyx5_inbox); al terminar, nyx5_libro op=deliver' });
|
|
101
|
+
}
|
|
80
102
|
case 'nyx5_email': { const r = await agent.email({ to: args.to, subject: args.subject, body: args.body }); return text(r); }
|
|
81
103
|
case 'nyx5_contract': return text(await agent.contract(args.house || agent.domain, args.contract));
|
|
82
104
|
default: return { ...text(`herramienta desconocida: ${name}`), isError: true };
|