@t4h/agent-runtime 0.1.0 → 0.2.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 (48) hide show
  1. package/README.md +77 -5
  2. package/catalog/agents.catalog.yaml +123 -0
  3. package/dist/catalog.d.ts +13 -0
  4. package/dist/catalog.js +39 -0
  5. package/dist/catalog.js.map +1 -0
  6. package/dist/cli.js +33 -8
  7. package/dist/cli.js.map +1 -1
  8. package/dist/connector.d.ts +13 -0
  9. package/dist/connector.js +208 -0
  10. package/dist/connector.js.map +1 -0
  11. package/dist/env.d.ts +56 -0
  12. package/dist/env.js +134 -0
  13. package/dist/env.js.map +1 -0
  14. package/dist/evals.js +1 -1
  15. package/dist/host.d.ts +111 -13
  16. package/dist/host.js +251 -43
  17. package/dist/host.js.map +1 -1
  18. package/dist/index.d.ts +16 -4
  19. package/dist/index.js +10 -2
  20. package/dist/index.js.map +1 -1
  21. package/dist/notifier.d.ts +1 -1
  22. package/dist/policy.js +12 -1
  23. package/dist/policy.js.map +1 -1
  24. package/dist/prompt.d.ts +8 -0
  25. package/dist/prompt.js +10 -3
  26. package/dist/prompt.js.map +1 -1
  27. package/dist/round.js +2 -1
  28. package/dist/round.js.map +1 -1
  29. package/dist/runtime-tools.d.ts +1 -1
  30. package/dist/runtime-tools.js +3 -3
  31. package/dist/runtime-tools.js.map +1 -1
  32. package/dist/signature.d.ts +34 -0
  33. package/dist/signature.js +87 -0
  34. package/dist/signature.js.map +1 -0
  35. package/dist/start.d.ts +31 -0
  36. package/dist/start.js +109 -0
  37. package/dist/start.js.map +1 -0
  38. package/dist/store/long-term.d.ts +63 -3
  39. package/dist/store/long-term.js +71 -11
  40. package/dist/store/long-term.js.map +1 -1
  41. package/dist/store/migrations.d.ts +1 -1
  42. package/dist/store/migrations.js +24 -0
  43. package/dist/store/migrations.js.map +1 -1
  44. package/dist/wiring.d.ts +11 -0
  45. package/dist/wiring.js +32 -0
  46. package/dist/wiring.js.map +1 -0
  47. package/package.json +19 -12
  48. package/proto/t4h/agents/v1/agents.proto +176 -0
package/dist/host.js CHANGED
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * Host dos agentes de um repositório de círculo: um processo, vários agentes.
3
3
  *
4
- * Junta as peças: caixa de entrada, rodadas (no despertar do cron ou sob demanda),
5
- * agenda das rotinas com o time, conversa direta, propostas esperando uma pessoa,
6
- * correções, disjuntor e bloqueio de emergência.
4
+ * Junta as peças: caixa de entrada, rodadas (no despertar do cron, por evento novo ou sob
5
+ * demanda), agenda das rotinas com o time, conversa direta, propostas esperando uma
6
+ * pessoa, correções, disjuntor, teto de nível e bloqueio de emergência.
7
7
  */
8
- import { createHmac, timingSafeEqual } from 'node:crypto';
8
+ import { randomUUID } from 'node:crypto';
9
9
  import { createServer } from 'node:http';
10
10
  import { Cron } from 'croner';
11
11
  import { resolveKind } from './inbox.js';
@@ -15,7 +15,9 @@ import { evaluateBreaker, PolicyGate } from './policy.js';
15
15
  import { conversationPrompt, systemPrompt } from './prompt.js';
16
16
  import { runRound } from './round.js';
17
17
  import { RuntimeTools } from './runtime-tools.js';
18
+ import { SIGNATURE_HEADER, SOURCE_HEADER, verifyEventSignature } from './signature.js';
18
19
  import { ShortTermMemory } from './short-term.js';
20
+ import { CONVERSATION_ROUTINE } from './store/long-term.js';
19
21
  export function gatewayExecutor(gateway) {
20
22
  return {
21
23
  call: (_agent, tool, input) => {
@@ -24,18 +26,44 @@ export function gatewayExecutor(gateway) {
24
26
  },
25
27
  };
26
28
  }
29
+ /**
30
+ * Recusa do host que não é regra do agente: o processo está desligando (`unavailable`),
31
+ * passou do teto de conversas simultâneas (`resource_exhausted`) ou o pedido veio
32
+ * malformado (`invalid_argument`). O conector traduz para o status gRPC equivalente.
33
+ */
34
+ export class HostError extends Error {
35
+ code;
36
+ constructor(code, message) {
37
+ super(message);
38
+ this.code = code;
39
+ this.name = 'HostError';
40
+ }
41
+ }
42
+ /** `thread_id` vem de quem chama: só letras, dígitos, `_` e `-` (um `ask_id` serve). */
43
+ export const THREAD_ID_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
44
+ /** Quantas trocas anteriores do mesmo fio entram no prompt da conversa. */
45
+ export const THREAD_HISTORY_LIMIT = 5;
46
+ /** Teto de conversas rodando ao mesmo tempo com um agente (somando as réplicas). */
47
+ export const DEFAULT_ASK_LIMITS = { perAsker: 3, perAgent: 20 };
48
+ export const DEFAULT_ASK_WAIT_MS = 20_000;
27
49
  export class AgentHost {
28
50
  o;
29
51
  agents = new Map();
30
52
  skills = new Map();
31
53
  crons = [];
54
+ wakeTimers = new Map();
55
+ /** Conversas e rodadas em andamento: o `stop()` espera um pouco por elas. */
56
+ inflight = new Set();
32
57
  notifier;
58
+ onRound;
33
59
  http;
60
+ stopped = false;
34
61
  constructor(o) {
35
62
  this.o = o;
36
63
  for (const a of o.agents)
37
64
  this.agents.set(a.manifest.id, a);
38
65
  this.notifier = o.notifier ?? consoleNotifier;
66
+ this.onRound = o.onRound ?? (() => { });
39
67
  }
40
68
  get store() {
41
69
  return this.o.store;
@@ -55,17 +83,52 @@ export class AgentHost {
55
83
  return s;
56
84
  }
57
85
  // ── entrada ─────────────────────────────────────────────────────────────────────
58
- async enqueue(agentId, ev) {
86
+ /** `source` é a fonte do webhook: o id do evento fica `<fonte>:<id>` (dedup por fonte). */
87
+ async enqueue(agentId, ev, source) {
59
88
  const a = this.agent(agentId);
60
89
  if (!a.eventKinds.has(ev.type) && !ev.type.startsWith('schedule.')) {
61
90
  throw new Error(`${agentId} não assina o evento "${ev.type}" (triggers.events)`);
62
91
  }
63
- return this.o.store.enqueue(agentId, ev, resolveKind(ev, a.eventKinds));
92
+ const r = await this.o.store.enqueue(agentId, ev, resolveKind(ev, a.eventKinds), source);
93
+ if (!r.duplicate)
94
+ this.wake(agentId);
95
+ return r;
96
+ }
97
+ /**
98
+ * Agenda uma rodada para logo depois de um evento novo. Os eventos que chegam enquanto
99
+ * a rodada está agendada entram nela (não reinicia a espera, para uma rajada não adiar a
100
+ * rodada para sempre). O lock continua garantindo uma rodada por vez; se outra réplica
101
+ * estiver rodando, tenta de novo depois. O cron segue como rede de segurança.
102
+ */
103
+ wake(agentId) {
104
+ const ms = this.o.wakeDebounceMs;
105
+ if (ms === undefined || this.stopped || this.wakeTimers.has(agentId))
106
+ return;
107
+ const timer = setTimeout(() => {
108
+ this.wakeTimers.delete(agentId);
109
+ if (this.stopped)
110
+ return;
111
+ this.runRound(agentId).then(async (r) => {
112
+ this.onRound(agentId, r);
113
+ // Ficou trabalho para trás (rodada de outra réplica, teto de itens): mais uma.
114
+ if (r.skipped === 'locked' || (!r.skipped && (await this.o.store.queueDepth(agentId)) > 0))
115
+ this.wake(agentId);
116
+ }, (e) => this.onRound(agentId, { items: [], costUsd: 0, error: String(e) })).catch((e) => console.error(`despertar de ${agentId}:`, e));
117
+ }, ms);
118
+ timer.unref();
119
+ this.wakeTimers.set(agentId, timer);
120
+ }
121
+ /** Acompanha o trabalho em andamento para o `stop()` esperar por ele antes do banco fechar. */
122
+ track(p) {
123
+ const settled = p.then(() => { }, () => { });
124
+ this.inflight.add(settled);
125
+ void settled.then(() => this.inflight.delete(settled));
126
+ return p;
64
127
  }
65
128
  // ── rodada ──────────────────────────────────────────────────────────────────────
66
129
  runRound(agentId, hops = 0) {
67
130
  const a = this.agent(agentId);
68
- return runRound({
131
+ return this.track(runRound({
69
132
  agent: a,
70
133
  store: this.o.store,
71
134
  brain: this.o.brain,
@@ -74,15 +137,80 @@ export class AgentHost {
74
137
  servers: () => this.o.servers(a),
75
138
  askPeer: (peer, q) => this.converse(peer, { email: a.manifest.identity.email, kind: 'agent' }, q, `handoff:${agentId}`, hops + 1).then((r) => r.answer),
76
139
  ...(this.o.now ? { now: this.o.now } : {}),
77
- });
140
+ }));
78
141
  }
79
142
  // ── conversa ────────────────────────────────────────────────────────────────────
80
143
  /**
81
- * Conversa direta (pelo Claude, via conector do círculo, ou de outro agente). Corre à
82
- * parte da fila. Só lê, com o acesso do próprio agente: ele é um colaborador virtual, e
83
- * quem pode conversar com ele é decidido pelo grant do conector `agents_<círculo>`.
144
+ * Pergunta pelo conector: grava a conversa, roda em segundo plano e espera até
145
+ * `askWaitMs`. Se a resposta não vier a tempo, devolve `running`, e quem perguntou busca
146
+ * depois com `answer()`. O estado fica no Postgres: qualquer réplica responde.
84
147
  */
85
- async converse(agentId, asker, message, conversationId, hops = 0) {
148
+ async ask(agentId, asker, message, threadId) {
149
+ if (this.stopped)
150
+ throw new HostError('unavailable', 'o processo dos agentes está desligando; pergunte de novo em instantes');
151
+ const a = this.agent(agentId);
152
+ if (threadId !== undefined && !THREAD_ID_PATTERN.test(threadId)) {
153
+ throw new HostError('invalid_argument', 'thread_id inválido: use até 64 letras, dígitos, "_" ou "-" (o ask_id da primeira pergunta serve)');
154
+ }
155
+ if (!a.manifest.conversation.enabled)
156
+ throw new Error(`${agentId} não aceita conversa direta`);
157
+ if (await this.o.store.killSwitch(agentId))
158
+ throw new Error(`${agentId} está bloqueado`);
159
+ // Cada pergunta roda o modelo em segundo plano, além do timeout do gateway: sem teto,
160
+ // quem tem o grant multiplica custo e carga.
161
+ const limits = this.o.askLimits ?? DEFAULT_ASK_LIMITS;
162
+ const running = await this.o.store.runningConversations(agentId, asker.email, a.manifest.limits.roundTimeoutSec + 60);
163
+ if (running.mine >= limits.perAsker) {
164
+ throw new HostError('resource_exhausted', `você já tem ${running.mine} perguntas em andamento com ${agentId}: busque a resposta (agent_answer) antes de perguntar de novo`);
165
+ }
166
+ if (running.total >= limits.perAgent)
167
+ throw new HostError('resource_exhausted', `${agentId} está com ${running.total} conversas em andamento; tente em instantes`);
168
+ const id = randomUUID();
169
+ const thread = threadId || id;
170
+ // O fio continua: as últimas trocas terminadas, só de quem pergunta.
171
+ const previous = threadId ? await this.o.store.threadHistory(agentId, thread, asker.email, THREAD_HISTORY_LIMIT) : [];
172
+ await this.o.store.startConversation({ id, agentId, asker: asker.email, askerKind: asker.kind, threadId: thread, message });
173
+ const run = this.track(this.converse(agentId, asker, message, thread, 0, previous)
174
+ .then((r) => this.o.store.finishConversation(id, { status: 'done', answer: r.answer, costUsd: r.costUsd }), (e) => this.o.store.finishConversation(id, { status: 'error', error: e.message }))
175
+ .catch((e) => console.error(`conversa ${id}:`, e)));
176
+ let timer;
177
+ const answered = await Promise.race([
178
+ run.then(() => true),
179
+ new Promise((ok) => (timer = setTimeout(() => ok(false), this.o.askWaitMs ?? DEFAULT_ASK_WAIT_MS))),
180
+ ]);
181
+ clearTimeout(timer);
182
+ if (!answered)
183
+ return { ask_id: id, status: 'running' };
184
+ const row = await this.o.store.getConversation(id);
185
+ return {
186
+ ask_id: id,
187
+ status: row?.status ?? 'error',
188
+ ...(row?.answer ? { answer: row.answer } : {}),
189
+ ...(row?.error ? { error: row.error } : {}),
190
+ };
191
+ }
192
+ /**
193
+ * A resposta de um `ask()`. Só quem perguntou lê: para os outros, a conversa não existe.
194
+ * `running` há mais tempo que uma rodada inteira (mais um minuto) virou erro: a réplica
195
+ * que respondia caiu.
196
+ */
197
+ async answer(askId, askerEmail) {
198
+ const row = await this.o.store.getConversation(askId);
199
+ if (!row || row.asker.toLowerCase() !== askerEmail.toLowerCase())
200
+ return undefined;
201
+ if (row.status !== 'running')
202
+ return row;
203
+ const timeoutSec = this.agents.get(row.agent_id)?.manifest.limits.roundTimeoutSec ?? 300;
204
+ return this.o.store.getConversation(askId, timeoutSec + 60);
205
+ }
206
+ /**
207
+ * Conversa direta, à parte da fila. Síncrona: o conector usa `ask()`, que roda esta em
208
+ * segundo plano; aqui chega direto a conversa entre agentes (handoff). Só lê, com o
209
+ * acesso do próprio agente: ele é um colaborador virtual, e quem pode conversar com ele
210
+ * é decidido pelo grant do conector `agents_<círculo>`. `previous`: trocas anteriores do
211
+ * mesmo fio (o `ask()` só passa as de quem pergunta).
212
+ */
213
+ async converse(agentId, asker, message, conversationId, hops = 0, previous = []) {
86
214
  const a = this.agent(agentId);
87
215
  const m = a.manifest;
88
216
  if (!m.conversation.enabled)
@@ -106,12 +234,14 @@ export class AgentHost {
106
234
  const res = await this.o.brain.run({
107
235
  agent: a,
108
236
  systemPrompt: systemPrompt(a, (r) => gate.levelOf(r)),
109
- prompt: conversationPrompt({ asker: asker.email, askerKind: asker.kind, message, conversationId }),
237
+ prompt: conversationPrompt({ asker: asker.email, askerKind: asker.kind, message, conversationId, previous }),
110
238
  gate,
111
239
  tools,
112
240
  mcpServers: await this.o.servers(a),
113
241
  skills: this.skillsOf(a),
114
242
  maxTurns: m.conversation.maxTurns,
243
+ // A conversa respeita o mesmo teto de custo de um item da rodada.
244
+ ...(m.limits.budgetUsdPerItem ? { budgetUsd: m.limits.budgetUsdPerItem } : {}),
115
245
  signal: AbortSignal.timeout(m.limits.roundTimeoutSec * 1000),
116
246
  });
117
247
  if (res.error)
@@ -120,7 +250,7 @@ export class AgentHost {
120
250
  await this.o.store.recordAction({
121
251
  agentId,
122
252
  itemId: null,
123
- routine: '_conversation',
253
+ routine: CONVERSATION_ROUTINE,
124
254
  tool: 'runtime.answer',
125
255
  input: { asker: asker.email, askerKind: asker.kind, conversationId, hops, message },
126
256
  reason: null,
@@ -139,8 +269,17 @@ export class AgentHost {
139
269
  pendingProposals(agentId) {
140
270
  return this.o.store.history(agentId, { mode: 'proposed', status: 'pending', limit: 100 });
141
271
  }
142
- /** Uma pessoa aprova ou recusa a proposta. Aprovada, roda pelo gateway com a identidade do agente. */
272
+ /**
273
+ * Uma pessoa aprova ou recusa a proposta. Aprovada, roda pelo gateway com a identidade do
274
+ * agente. Com o agente bloqueado, recusar vale; aprovar não (nada roda no nome dele).
275
+ */
143
276
  async decideProposal(actionId, decision, by, note) {
277
+ if (decision === 'approved') {
278
+ const pending = await this.o.store.getAction(actionId);
279
+ if (pending && (await this.o.store.killSwitch(pending.agent_id))) {
280
+ throw new Error(`${pending.agent_id} está bloqueado: a proposta #${actionId} só pode ser recusada até o desbloqueio`);
281
+ }
282
+ }
144
283
  const row = await this.o.store.decideProposal(actionId, decision, by, note);
145
284
  if (!row)
146
285
  throw new Error(`proposta #${actionId} não existe ou já foi decidida`);
@@ -165,27 +304,54 @@ export class AgentHost {
165
304
  await evaluateBreaker(this.agent(row.agent_id), row.routine, this.o.store, this.notifier);
166
305
  return row;
167
306
  }
307
+ routineOf(agentId, routine) {
308
+ const m = this.agent(agentId).manifest;
309
+ if (!m.routines[routine])
310
+ throw new Error(`${agentId} não tem a rotina "${routine}"`);
311
+ return m;
312
+ }
168
313
  /** Incidente: a rotina desce na hora, por decisão de pessoa. */
169
314
  async demote(agentId, routine, to, by, reason) {
315
+ const m = this.routineOf(agentId, routine);
170
316
  await this.o.store.setLevelCap(agentId, routine, to, `${by}: ${reason}`);
171
- const m = this.agent(agentId).manifest;
172
317
  await this.notifier.notify({ agentId, kind: 'demotion', to: [m.owner.dri, 'seguranca'], text: `${m.name}: ${routine} desceu para ${to} por ${by}. ${reason}` });
173
318
  }
319
+ /** Tira o teto: volta a valer o nível do manifesto (depois de tratar a causa). */
320
+ async restore(agentId, routine, by, reason) {
321
+ const m = this.routineOf(agentId, routine);
322
+ await this.o.store.clearLevelCap(agentId, routine);
323
+ await this.notifier.notify({
324
+ agentId,
325
+ kind: 'restore',
326
+ to: [m.owner.dri, 'seguranca'],
327
+ text: `${m.name}: ${routine} voltou ao nível do manifesto por ${by}.${reason ? ` ${reason}` : ''}`,
328
+ });
329
+ }
174
330
  /** Bloqueio de emergência: para tudo na hora, sem deploy. */
175
331
  async kill(agentId, by, reason) {
176
- await this.o.store.setKillSwitch(agentId, reason, by);
177
332
  const m = this.agent(agentId).manifest;
333
+ await this.o.store.setKillSwitch(agentId, reason, by);
178
334
  await this.notifier.notify({ agentId, kind: 'kill-switch', to: [m.owner.dri, 'seguranca'], text: `${m.name} bloqueado por ${by}: ${reason}` });
179
335
  }
336
+ /** Fim do bloqueio de emergência. Sem bloqueio, não faz nada (nem avisa). */
337
+ async unblock(agentId, by, reason) {
338
+ const m = this.agent(agentId).manifest;
339
+ if (!(await this.o.store.killSwitch(agentId)))
340
+ return;
341
+ await this.o.store.clearKillSwitch(agentId);
342
+ await this.notifier.notify({ agentId, kind: 'unblock', to: [m.owner.dri, 'seguranca'], text: `${m.name} liberado por ${by}.${reason ? ` ${reason}` : ''}` });
343
+ }
180
344
  // ── agenda e entrada HTTP ───────────────────────────────────────────────────────
181
345
  /** Liga o despertar de cada agente e a agenda das rotinas. */
182
- startSchedules(onRound = () => { }) {
346
+ startSchedules(onRound) {
347
+ if (onRound)
348
+ this.onRound = onRound;
183
349
  for (const a of this.agents.values()) {
184
350
  const m = a.manifest;
185
351
  const tz = m.triggers.timezone;
186
352
  if (m.triggers.schedule) {
187
353
  this.crons.push(new Cron(m.triggers.schedule, { timezone: tz, protect: true }, async () => {
188
- onRound(m.id, await this.runRound(m.id).catch((e) => ({ items: [], costUsd: 0, error: String(e) })));
354
+ this.onRound(m.id, await this.runRound(m.id).catch((e) => ({ items: [], costUsd: 0, error: String(e) })));
189
355
  }));
190
356
  }
191
357
  for (const [name, r] of Object.entries(m.routines)) {
@@ -199,42 +365,94 @@ export class AgentHost {
199
365
  }
200
366
  }
201
367
  /**
202
- * Entrada de eventos por webhook: POST /agents/:id/events, assinado com HMAC-SHA256
203
- * (`x-t4h-signature: sha256=<hex>`). GET /healthz para o Container App.
368
+ * Entrada de eventos por webhook: POST /agents/:id/events, assinado por fonte
369
+ * (`x-t4h-source` + `x-t4h-signature`, ver signature.ts). POST /agents/:id/rounds acorda
370
+ * o agente na hora, só fora de produção. GET /healthz para o Container App.
204
371
  */
205
- listen(port, hmacSecret) {
372
+ listen(port, opts = {}) {
373
+ const production = opts.production ?? process.env.NODE_ENV === 'production';
374
+ const secrets = opts.secrets ?? new Map();
375
+ const manualRounds = !production && (opts.allowManualRounds ?? true);
376
+ if (!secrets.size && !production)
377
+ console.warn('eventos: sem EVENTS_HMAC_SECRETS, aceitando eventos sem assinatura (só fora de produção)');
206
378
  this.http = createServer(async (req, res) => {
207
379
  const reply = (status, body) => {
208
380
  res.writeHead(status, { 'content-type': 'application/json' });
209
381
  res.end(JSON.stringify(body));
210
382
  };
211
383
  try {
384
+ // Em produção, o healthz não diz quem mora aqui.
212
385
  if (req.method === 'GET' && req.url === '/healthz')
213
- return reply(200, { ok: true, agents: [...this.agents.keys()] });
386
+ return reply(200, production ? { ok: true } : { ok: true, agents: [...this.agents.keys()] });
214
387
  const m = /^\/agents\/([a-z0-9-]+)\/(events|rounds)$/.exec(req.url ?? '');
215
- if (req.method !== 'POST' || !m)
388
+ if (req.method !== 'POST' || !m || (m[2] === 'rounds' && !manualRounds))
216
389
  return reply(404, { error: 'not found' });
217
- const raw = await readBody(req);
218
- if (!verifySignature(raw, req.headers['x-t4h-signature'], hmacSecret))
390
+ let raw;
391
+ try {
392
+ raw = await readBody(req);
393
+ }
394
+ catch {
395
+ return reply(413, { error: 'evento grande demais (máximo 256 KB)' });
396
+ }
397
+ const check = verifyEventSignature({ raw, source: req.headers[SOURCE_HEADER], signature: req.headers[SIGNATURE_HEADER], secrets, production });
398
+ if (!check.ok) {
399
+ // O motivo fica só no log: a resposta não ajuda a descobrir quais fontes existem.
400
+ console.warn(`eventos: recusado em ${req.url}: ${check.reason}`);
219
401
  return reply(401, { error: 'assinatura inválida' });
220
- // Acordar agora, sem esperar o cron (operação e testes). Responde com o relatório.
402
+ }
403
+ const agentId = m[1];
404
+ const a = this.agents.get(agentId);
405
+ if (!a)
406
+ return reply(404, { error: `agente "${agentId}" não existe` });
407
+ // Acordar agora, sem esperar o cron (desenvolvimento e testes). Responde com o relatório.
221
408
  if (m[2] === 'rounds')
222
- return reply(200, await this.runRound(m[1]));
223
- const ev = JSON.parse(raw);
224
- if (!ev?.type || !ev?.subject)
409
+ return reply(200, await this.runRound(agentId));
410
+ let ev;
411
+ try {
412
+ ev = JSON.parse(raw);
413
+ }
414
+ catch {
415
+ return reply(400, { error: 'corpo não é JSON' });
416
+ }
417
+ if (typeof ev?.type !== 'string' || typeof ev?.subject !== 'string')
225
418
  return reply(400, { error: 'type e subject são obrigatórios' });
226
- return reply(202, await this.enqueue(m[1], ev));
419
+ // Sem id não há dedup: o mesmo corpo assinado entraria de novo a cada reenvio.
420
+ if (typeof ev.id !== 'string' || !ev.id)
421
+ return reply(400, { error: 'id (único na fonte) é obrigatório' });
422
+ // `schedule.*` é da agenda interna das rotinas, nunca de uma fonte de fora.
423
+ if (ev.type.startsWith('schedule.'))
424
+ return reply(400, { error: 'eventos schedule.* são só da agenda interna' });
425
+ if (!a.eventKinds.has(ev.type))
426
+ return reply(400, { error: `${agentId} não assina o evento "${ev.type}" (triggers.events)` });
427
+ return reply(202, await this.enqueue(agentId, ev, check.source));
227
428
  }
228
429
  catch (e) {
229
- return reply(400, { error: e.message });
430
+ // Erro interno (banco, rodada): o detalhe fica só no log.
431
+ console.error(`eventos: ${req.method} ${req.url}:`, e);
432
+ return reply(500, { error: 'erro interno' });
230
433
  }
231
434
  });
232
435
  return new Promise((ok) => this.http.listen(port, () => ok(this.http.address().port)));
233
436
  }
234
- async stop() {
437
+ /**
438
+ * Para a entrada (webhook, cron, despertares, novas perguntas) e espera até `graceMs`
439
+ * pelas conversas e rodadas em andamento. A conversa que não terminar fica `running` e
440
+ * vira erro no próximo `answer()`; o item de uma rodada interrompida fica `working` e
441
+ * volta para a fila quando o prazo do lock vencer (`leaseBatch`).
442
+ */
443
+ async stop(graceMs = 10_000) {
444
+ this.stopped = true;
445
+ for (const t of this.wakeTimers.values())
446
+ clearTimeout(t);
447
+ this.wakeTimers.clear();
235
448
  for (const c of this.crons)
236
449
  c.stop();
237
450
  await new Promise((ok) => (this.http ? this.http.close(() => ok()) : ok()));
451
+ if (this.inflight.size) {
452
+ let timer;
453
+ await Promise.race([Promise.allSettled([...this.inflight]), new Promise((ok) => (timer = setTimeout(ok, graceMs)))]);
454
+ clearTimeout(timer);
455
+ }
238
456
  }
239
457
  }
240
458
  function readBody(req) {
@@ -254,14 +472,4 @@ function readBody(req) {
254
472
  req.on('error', fail);
255
473
  });
256
474
  }
257
- /** Sem segredo configurado, só aceita fora de produção. */
258
- export function verifySignature(raw, header, secret) {
259
- if (!secret)
260
- return process.env.NODE_ENV !== 'production';
261
- if (typeof header !== 'string' || !header.startsWith('sha256='))
262
- return false;
263
- const expected = Buffer.from(createHmac('sha256', secret).update(raw).digest('hex'));
264
- const got = Buffer.from(header.slice('sha256='.length));
265
- return got.length === expected.length && timingSafeEqual(got, expected);
266
- }
267
475
  //# sourceMappingURL=host.js.map
package/dist/host.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,8 +6,8 @@ export { PRIORITY, inferEventKind, resolveKind } from './inbox.js';
6
6
  export type { EventKind, IncomingEvent } from './inbox.js';
7
7
  export { PolicyGate, evaluateBreaker, qualifiedToolName, sdkToolName, idempotencyKey, RUNTIME_SERVER } from './policy.js';
8
8
  export type { GateDecision, GateOptions } from './policy.js';
9
- export { LongTermStore } from './store/long-term.js';
10
- export type { ActionRow, ActionMode, ActionStatus, ItemRow, EventRow } from './store/long-term.js';
9
+ export { LongTermStore, CONVERSATION_ROUTINE } from './store/long-term.js';
10
+ export type { ActionRow, ActionMode, ActionStatus, ItemRow, EventRow, ConversationRow, ConversationStatus } from './store/long-term.js';
11
11
  export { pgSql, pgliteSql, sqlFromUrl } from './store/sql.js';
12
12
  export type { Sql, Queryable } from './store/sql.js';
13
13
  export { ShortTermMemory, stableStringify } from './short-term.js';
@@ -22,8 +22,20 @@ export type { ResolvedSkills } from './plugins.js';
22
22
  export { systemPrompt, itemPrompt, conversationPrompt, untrusted } from './prompt.js';
23
23
  export { runRound, routinesFor } from './round.js';
24
24
  export type { RoundReport, RoundDeps } from './round.js';
25
- export { AgentHost, gatewayExecutor, verifySignature } from './host.js';
26
- export type { AgentHostOptions, Asker, ToolExecutor } from './host.js';
25
+ export { AgentHost, HostError, gatewayExecutor, DEFAULT_ASK_WAIT_MS, DEFAULT_ASK_LIMITS, THREAD_ID_PATTERN, THREAD_HISTORY_LIMIT } from './host.js';
26
+ export type { AgentHostOptions, Asker, AskResult, ListenOptions, ToolExecutor } from './host.js';
27
+ export { parseEventSecrets, signEvent, verifyEventSignature, SOURCE_HEADER, SIGNATURE_HEADER, SIGNATURE_TOLERANCE_SEC, SOURCE_PATTERN, UNSIGNED_SOURCE, } from './signature.js';
28
+ export type { SignatureCheck, VerifyEventOptions } from './signature.js';
29
+ export { AGENTS_SERVICE_FQN, agentsProtoPath, agentsConnectorHandlers } from './connector.js';
30
+ export type { AgentsConnectorOptions } from './connector.js';
31
+ export { agentsCatalog, agentsCatalogPath, AGENTS_SLUG_PATTERN } from './catalog.js';
32
+ export type { AgentsCatalogOptions } from './catalog.js';
33
+ export { loadAgentEnv, agentSecretVar, GATEWAY_CALL_TIMEOUT_MS, DEFAULT_WAKE_DEBOUNCE_MS } from './env.js';
34
+ export type { AgentEnv } from './env.js';
35
+ export { gatewayWiring } from './wiring.js';
36
+ export type { Wiring } from './wiring.js';
37
+ export { startAgents } from './start.js';
38
+ export type { StartAgentsOptions, StartedAgents } from './start.js';
27
39
  export { consoleNotifier, MemoryNotifier } from './notifier.js';
28
40
  export type { Notifier, Notice, NoticeKind } from './notifier.js';
29
41
  export { loadEvalCases, runEvalCase, runEvals, subsetMatch } from './evals.js';
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ export { loadAgent, loadAgents, validateManifest, semanticProblems, ManifestErro
2
2
  export { LEVELS, effectiveLevel, breakerTrips, insideWindow, oneBelow, lower } from './levels.js';
3
3
  export { PRIORITY, inferEventKind, resolveKind } from './inbox.js';
4
4
  export { PolicyGate, evaluateBreaker, qualifiedToolName, sdkToolName, idempotencyKey, RUNTIME_SERVER } from './policy.js';
5
- export { LongTermStore } from './store/long-term.js';
5
+ export { LongTermStore, CONVERSATION_ROUTINE } from './store/long-term.js';
6
6
  export { pgSql, pgliteSql, sqlFromUrl } from './store/sql.js';
7
7
  export { ShortTermMemory, stableStringify } from './short-term.js';
8
8
  export { GatewayClient, GatewayError, ClientCredentialsTokenSource, StaticTokenSource, } from './gateway.js';
@@ -11,7 +11,15 @@ export { RuntimeTools } from './runtime-tools.js';
11
11
  export { resolveSkills } from './plugins.js';
12
12
  export { systemPrompt, itemPrompt, conversationPrompt, untrusted } from './prompt.js';
13
13
  export { runRound, routinesFor } from './round.js';
14
- export { AgentHost, gatewayExecutor, verifySignature } from './host.js';
14
+ export { AgentHost, HostError, gatewayExecutor, DEFAULT_ASK_WAIT_MS, DEFAULT_ASK_LIMITS, THREAD_ID_PATTERN, THREAD_HISTORY_LIMIT } from './host.js';
15
+ export { parseEventSecrets, signEvent, verifyEventSignature, SOURCE_HEADER, SIGNATURE_HEADER, SIGNATURE_TOLERANCE_SEC, SOURCE_PATTERN, UNSIGNED_SOURCE, } from './signature.js';
16
+ // O conector agents_<círculo>: contrato, handlers e catálogo base, versionados juntos.
17
+ export { AGENTS_SERVICE_FQN, agentsProtoPath, agentsConnectorHandlers } from './connector.js';
18
+ export { agentsCatalog, agentsCatalogPath, AGENTS_SLUG_PATTERN } from './catalog.js';
19
+ // Ambiente, ligação ao gateway e boot do processo.
20
+ export { loadAgentEnv, agentSecretVar, GATEWAY_CALL_TIMEOUT_MS, DEFAULT_WAKE_DEBOUNCE_MS } from './env.js';
21
+ export { gatewayWiring } from './wiring.js';
22
+ export { startAgents } from './start.js';
15
23
  export { consoleNotifier, MemoryNotifier } from './notifier.js';
16
24
  export { loadEvalCases, runEvalCase, runEvals, subsetMatch } from './evals.js';
17
25
  // Para servir conectores em processo (stubs locais, evals) sem depender do SDK direto.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGtH,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGlG,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGnE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG1H,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE9D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EACL,aAAa,EACb,YAAY,EACZ,4BAA4B,EAC5B,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEtF,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAGxE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGhE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG/E,uFAAuF;AACvF,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGtH,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGlG,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGnE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG1H,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE3E,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE9D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EACL,aAAa,EACb,YAAY,EACZ,4BAA4B,EAC5B,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEtF,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAGpJ,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAGxB,uFAAuF;AACvF,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAE9F,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGrF,mDAAmD;AACnD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAE3G,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGhE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG/E,uFAAuF;AACvF,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC"}
@@ -3,7 +3,7 @@
3
3
  * implementação que posta no canal do time pelo gateway (conector de chat) e avisa o
4
4
  * DRI; aqui só a interface e a versão de console.
5
5
  */
6
- export type NoticeKind = 'proposal' | 'escalation' | 'exception' | 'demotion' | 'kill-switch';
6
+ export type NoticeKind = 'proposal' | 'escalation' | 'exception' | 'demotion' | 'restore' | 'kill-switch' | 'unblock';
7
7
  export interface Notice {
8
8
  agentId: string;
9
9
  kind: NoticeKind;
package/dist/policy.js CHANGED
@@ -8,7 +8,9 @@
8
8
  * - se já foi feita (nada se repete);
9
9
  * - o que o nível da rotina permite: registrar (shadow), propor (copilot) ou executar
10
10
  * (agent, autonomous), com janela e teto por hora;
11
- * - na conversa, só leitura (com o acesso do próprio agente).
11
+ * - na conversa, só leitura (com o acesso do próprio agente);
12
+ * - bloqueio de emergência e teto de nível valem na hora, também para a rodada ou a
13
+ * conversa que já estava rodando: são relidos do Postgres a cada chamada.
12
14
  *
13
15
  * O modelo nunca recebe "permissão" para nada fora disso: o runtime liga as ferramentas
14
16
  * built-in do Claude Code desligadas e nega o resto aqui.
@@ -80,6 +82,10 @@ export class PolicyGate {
80
82
  return this.deny(`Ferramenta "${sdkName}" não está disponível para agentes.`);
81
83
  if (parsed.server === RUNTIME_SERVER)
82
84
  return { allow: true };
85
+ // Bloqueado no meio do caminho: nada mais sai, nem leitura.
86
+ if (await store.killSwitch(m.id)) {
87
+ return this.deny('Você foi bloqueado por uma pessoa (bloqueio de emergência). Não chame mais nenhuma ferramenta; encerre.');
88
+ }
83
89
  const tool = parsed.qualified;
84
90
  if (m.guardrails.forbiddenTools.includes(tool)) {
85
91
  await this.audit(tool, input, 'denied', 'proibida (segregação de funções)', toolUseId);
@@ -105,6 +111,11 @@ export class PolicyGate {
105
111
  return this.deny(`Antes de "${tool}", chame ${RUNTIME_SERVER}.justify com o motivo. Toda ação fica registrada com o motivo.`);
106
112
  }
107
113
  this.reasons.delete(tool);
114
+ // Uma pessoa pode ter limitado a rotina depois do início da rodada.
115
+ const fresh = await store.levelCaps(m.id);
116
+ this.o.caps.clear();
117
+ for (const [r, c] of fresh)
118
+ this.o.caps.set(r, c);
108
119
  let level = this.levelOf(routine);
109
120
  let note;
110
121
  const spec = m.routines[routine];