@t4h/agent-runtime 0.1.1 → 0.3.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/README.md +94 -5
- package/catalog/agents.catalog.yaml +123 -0
- package/dist/brain.d.ts +8 -0
- package/dist/brain.js +11 -0
- package/dist/brain.js.map +1 -1
- package/dist/catalog.d.ts +13 -0
- package/dist/catalog.js +39 -0
- package/dist/catalog.js.map +1 -0
- package/dist/cli.js +33 -8
- package/dist/cli.js.map +1 -1
- package/dist/connector.d.ts +13 -0
- package/dist/connector.js +208 -0
- package/dist/connector.js.map +1 -0
- package/dist/env.d.ts +59 -0
- package/dist/env.js +138 -0
- package/dist/env.js.map +1 -0
- package/dist/evals.js +1 -1
- package/dist/gateway.d.ts +5 -1
- package/dist/gateway.js +4 -2
- package/dist/gateway.js.map +1 -1
- package/dist/host.d.ts +111 -13
- package/dist/host.js +251 -43
- package/dist/host.js.map +1 -1
- package/dist/index.d.ts +18 -4
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/model-auth.d.ts +83 -0
- package/dist/model-auth.js +231 -0
- package/dist/model-auth.js.map +1 -0
- package/dist/notifier.d.ts +1 -1
- package/dist/policy.js +12 -1
- package/dist/policy.js.map +1 -1
- package/dist/prompt.d.ts +8 -0
- package/dist/prompt.js +10 -3
- package/dist/prompt.js.map +1 -1
- package/dist/round.js +2 -1
- package/dist/round.js.map +1 -1
- package/dist/runtime-tools.d.ts +1 -1
- package/dist/runtime-tools.js +3 -3
- package/dist/runtime-tools.js.map +1 -1
- package/dist/signature.d.ts +34 -0
- package/dist/signature.js +87 -0
- package/dist/signature.js.map +1 -0
- package/dist/start.d.ts +31 -0
- package/dist/start.js +110 -0
- package/dist/start.js.map +1 -0
- package/dist/store/long-term.d.ts +63 -3
- package/dist/store/long-term.js +71 -11
- package/dist/store/long-term.js.map +1 -1
- package/dist/store/migrations.d.ts +1 -1
- package/dist/store/migrations.js +24 -0
- package/dist/store/migrations.js.map +1 -1
- package/dist/wiring.d.ts +11 -0
- package/dist/wiring.js +32 -0
- package/dist/wiring.js.map +1 -0
- package/package.json +13 -6
- package/proto/t4h/agents/v1/agents.proto +176 -0
package/dist/store/long-term.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { PRIORITY } from '../inbox.js';
|
|
2
2
|
import { MIGRATIONS } from './migrations.js';
|
|
3
|
+
/** Rotina com que o host registra cada conversa: guarda quem perguntou o quê. */
|
|
4
|
+
export const CONVERSATION_ROUTINE = '_conversation';
|
|
3
5
|
const num = (v) => Number(v);
|
|
6
|
+
const conv = (r) => ({ ...r, cost_usd: r.cost_usd === null ? null : num(r.cost_usd) });
|
|
4
7
|
export class LongTermStore {
|
|
5
8
|
sql;
|
|
6
9
|
constructor(sql) {
|
|
@@ -13,11 +16,16 @@ export class LongTermStore {
|
|
|
13
16
|
return this.sql.close();
|
|
14
17
|
}
|
|
15
18
|
// ── caixa de entrada ────────────────────────────────────────────────────────────
|
|
16
|
-
/**
|
|
17
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Grava o evento e junta no item aberto do mesmo assunto. Repetido não entra. Com
|
|
21
|
+
* `source` (a fonte do webhook), o id na origem vira `<fonte>:<id>`: duas fontes podem
|
|
22
|
+
* usar o mesmo id sem uma descartar o evento da outra.
|
|
23
|
+
*/
|
|
24
|
+
async enqueue(agentId, ev, kind, source) {
|
|
25
|
+
const sourceId = ev.id ? (source ? `${source}:${ev.id}` : ev.id) : null;
|
|
18
26
|
return this.sql.transaction(async (tx) => {
|
|
19
|
-
if (
|
|
20
|
-
const seen = await tx.query('SELECT 1 FROM agent_event WHERE agent_id = $1 AND source_id = $2', [agentId,
|
|
27
|
+
if (sourceId) {
|
|
28
|
+
const seen = await tx.query('SELECT 1 FROM agent_event WHERE agent_id = $1 AND source_id = $2', [agentId, sourceId]);
|
|
21
29
|
if (seen.length)
|
|
22
30
|
return { itemId: null, duplicate: true };
|
|
23
31
|
}
|
|
@@ -31,10 +39,10 @@ export class LongTermStore {
|
|
|
31
39
|
not_before = CASE WHEN agent_item.status = 'waiting' THEN now() ELSE agent_item.not_before END,
|
|
32
40
|
updated_at = now()
|
|
33
41
|
RETURNING id`, [agentId, ev.subject, PRIORITY[kind]]);
|
|
34
|
-
const inserted = await tx.query(`INSERT INTO agent_event (agent_id, source_id, type, kind, subject, payload, item_id)
|
|
35
|
-
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
|
42
|
+
const inserted = await tx.query(`INSERT INTO agent_event (agent_id, source_id, source, type, kind, subject, payload, item_id)
|
|
43
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
|
|
36
44
|
ON CONFLICT (agent_id, source_id) WHERE source_id IS NOT NULL DO NOTHING
|
|
37
|
-
RETURNING id`, [agentId,
|
|
45
|
+
RETURNING id`, [agentId, sourceId, source ?? null, ev.type, kind, ev.subject, JSON.stringify(ev.payload ?? {}), item.id]);
|
|
38
46
|
if (!inserted.length)
|
|
39
47
|
return { itemId: null, duplicate: true };
|
|
40
48
|
return { itemId: num(item.id), duplicate: false };
|
|
@@ -43,18 +51,24 @@ export class LongTermStore {
|
|
|
43
51
|
/**
|
|
44
52
|
* Pega o próximo lote na ordem de prioridade. `SKIP LOCKED` deixa duas réplicas
|
|
45
53
|
* dividirem a fila sem pegar o mesmo item; o lock da rodada já evita isso no caso comum.
|
|
54
|
+
*
|
|
55
|
+
* Item `working` há mais de `staleAfterSec` também entra: a rodada que o pegou não
|
|
56
|
+
* terminou (a réplica caiu, o deploy derrubou o processo) e ninguém mais vai fechá-lo.
|
|
57
|
+
* Quem chama passa o mesmo prazo do lock da rodada, que já venceu nesse caso.
|
|
46
58
|
*/
|
|
47
|
-
async leaseBatch(agentId, limit) {
|
|
59
|
+
async leaseBatch(agentId, limit, staleAfterSec) {
|
|
48
60
|
const items = await this.sql.query(`WITH picked AS (
|
|
49
61
|
SELECT id, status AS prev_status FROM agent_item
|
|
50
|
-
WHERE agent_id = $1
|
|
62
|
+
WHERE agent_id = $1
|
|
63
|
+
AND ((status IN ('queued', 'waiting') AND not_before <= now())
|
|
64
|
+
OR ($3::int IS NOT NULL AND status = 'working' AND updated_at < now() - make_interval(secs => $3::int)))
|
|
51
65
|
ORDER BY priority, created_at
|
|
52
66
|
LIMIT $2
|
|
53
67
|
FOR UPDATE SKIP LOCKED
|
|
54
68
|
)
|
|
55
69
|
UPDATE agent_item i SET status = 'working', updated_at = now()
|
|
56
70
|
FROM picked WHERE i.id = picked.id
|
|
57
|
-
RETURNING i.id, i.agent_id, i.subject, i.priority, i.status, i.attempts, picked.prev_status`, [agentId, limit]);
|
|
71
|
+
RETURNING i.id, i.agent_id, i.subject, i.priority, i.status, i.attempts, picked.prev_status`, [agentId, limit, staleAfterSec ?? null]);
|
|
58
72
|
if (!items.length)
|
|
59
73
|
return [];
|
|
60
74
|
const events = await this.sql.query(`SELECT id, item_id, type, kind, subject, payload, received_at FROM agent_event
|
|
@@ -168,13 +182,15 @@ export class LongTermStore {
|
|
|
168
182
|
ORDER BY created_at DESC, id DESC LIMIT $3`, [agentId, routine, n]);
|
|
169
183
|
return rows.map((r) => r.status);
|
|
170
184
|
}
|
|
185
|
+
/** `excludeRoutine`: deixa de fora uma rotina (ex.: `_conversation`, que guarda quem perguntou o quê). */
|
|
171
186
|
async history(agentId, opts = {}) {
|
|
172
187
|
const rows = await this.sql.query(`SELECT a.*, i.subject FROM agent_action a LEFT JOIN agent_item i ON i.id = a.item_id
|
|
173
188
|
WHERE a.agent_id = $1
|
|
174
189
|
AND ($2::text IS NULL OR i.subject = $2)
|
|
175
190
|
AND ($3::text IS NULL OR a.status = $3)
|
|
176
191
|
AND ($4::text IS NULL OR a.mode = $4)
|
|
177
|
-
|
|
192
|
+
AND ($6::text IS NULL OR a.routine <> $6)
|
|
193
|
+
ORDER BY a.created_at DESC, a.id DESC LIMIT $5`, [agentId, opts.subject ?? null, opts.status ?? null, opts.mode ?? null, opts.limit ?? 50, opts.excludeRoutine ?? null]);
|
|
178
194
|
return rows.map((r) => ({ ...r, id: num(r.id) }));
|
|
179
195
|
}
|
|
180
196
|
// ── nível ───────────────────────────────────────────────────────────────────────
|
|
@@ -190,6 +206,50 @@ export class LongTermStore {
|
|
|
190
206
|
async clearLevelCap(agentId, routine) {
|
|
191
207
|
await this.sql.query('DELETE FROM agent_routine_state WHERE agent_id = $1 AND routine = $2', [agentId, routine]);
|
|
192
208
|
}
|
|
209
|
+
// ── conversa ────────────────────────────────────────────────────────────────────
|
|
210
|
+
async startConversation(c) {
|
|
211
|
+
await this.sql.query(`INSERT INTO agent_conversation (id, agent_id, asker, asker_kind, thread_id, message, status)
|
|
212
|
+
VALUES ($1, $2, $3, $4, $5, $6, 'running')`, [c.id, c.agentId, c.asker, c.askerKind, c.threadId, c.message]);
|
|
213
|
+
}
|
|
214
|
+
/** Fecha a conversa. Só uma `running`: a que já foi dada como interrompida fica assim. */
|
|
215
|
+
async finishConversation(id, r) {
|
|
216
|
+
await this.sql.query(`UPDATE agent_conversation SET status = $2, answer = $3, error = $4, cost_usd = $5, finished_at = now()
|
|
217
|
+
WHERE id = $1 AND status = 'running'`, [id, r.status, r.answer ?? null, r.error?.slice(0, 2000) ?? null, r.costUsd ?? null]);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* As últimas trocas terminadas de um fio, mais antiga primeiro. Só as do mesmo agente e
|
|
221
|
+
* de quem pergunta: o fio de uma pessoa nunca aparece para outra.
|
|
222
|
+
*/
|
|
223
|
+
async threadHistory(agentId, threadId, asker, limit) {
|
|
224
|
+
const rows = await this.sql.query(`SELECT message, answer FROM (
|
|
225
|
+
SELECT message, answer, created_at FROM agent_conversation
|
|
226
|
+
WHERE agent_id = $1 AND thread_id = $2 AND lower(asker) = lower($3) AND status = 'done'
|
|
227
|
+
ORDER BY created_at DESC LIMIT $4
|
|
228
|
+
) t ORDER BY created_at`, [agentId, threadId, asker, limit]);
|
|
229
|
+
return rows;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Conversas ainda rodando com este agente (de todas as réplicas), no total e de quem
|
|
233
|
+
* pergunta. A `running` mais velha que `staleAfterSec` não conta: a réplica caiu.
|
|
234
|
+
*/
|
|
235
|
+
async runningConversations(agentId, asker, staleAfterSec) {
|
|
236
|
+
const [r] = await this.sql.query(`SELECT count(*)::int AS total, (count(*) FILTER (WHERE lower(asker) = lower($2)))::int AS mine
|
|
237
|
+
FROM agent_conversation
|
|
238
|
+
WHERE agent_id = $1 AND status = 'running' AND created_at >= now() - make_interval(secs => $3)`, [agentId, asker, staleAfterSec]);
|
|
239
|
+
return { total: r?.total ?? 0, mine: r?.mine ?? 0 };
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Lê a conversa. A `running` mais velha que `staleAfterSec` vira erro: a réplica que
|
|
243
|
+
* rodava caiu no meio, e ninguém mais vai fechar essa linha.
|
|
244
|
+
*/
|
|
245
|
+
async getConversation(id, staleAfterSec) {
|
|
246
|
+
if (staleAfterSec !== undefined) {
|
|
247
|
+
await this.sql.query(`UPDATE agent_conversation SET status = 'error', error = 'conversa interrompida: o processo que respondia parou; pergunte de novo', finished_at = now()
|
|
248
|
+
WHERE id = $1 AND status = 'running' AND created_at < now() - make_interval(secs => $2)`, [id, staleAfterSec]);
|
|
249
|
+
}
|
|
250
|
+
const [r] = await this.sql.query('SELECT * FROM agent_conversation WHERE id = $1', [id]);
|
|
251
|
+
return r ? conv(r) : undefined;
|
|
252
|
+
}
|
|
193
253
|
// ── bloqueio de emergência ──────────────────────────────────────────────────────
|
|
194
254
|
async killSwitch(agentId) {
|
|
195
255
|
const [r] = await this.sql.query('SELECT reason, set_by FROM agent_kill_switch WHERE agent_id = $1', [agentId]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"long-term.js","sourceRoot":"","sources":["../../src/store/long-term.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"long-term.js","sourceRoot":"","sources":["../../src/store/long-term.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
* Tabelas da memória de longo prazo. Um banco por repositório de círculo; toda linha
|
|
3
3
|
* leva o agent_id. Idempotente: roda no boot.
|
|
4
4
|
*/
|
|
5
|
-
export declare const MIGRATIONS = "\nCREATE TABLE IF NOT EXISTS agent_item (\n id BIGSERIAL PRIMARY KEY,\n agent_id TEXT NOT NULL,\n subject TEXT NOT NULL,\n priority INT NOT NULL,\n -- queued: na fila | working: numa rodada | waiting: esperando resposta (not_before = prazo)\n -- done: fechado | exception: falhou demais e foi para o DRI\n status TEXT NOT NULL,\n attempts INT NOT NULL DEFAULT 0,\n not_before TIMESTAMPTZ NOT NULL DEFAULT now(),\n summary TEXT,\n last_error TEXT,\n created_at TIMESTAMPTZ NOT NULL DEFAULT now(),\n updated_at TIMESTAMPTZ NOT NULL DEFAULT now()\n);\n-- Um item aberto por assunto: \u00E9 isso que junta eventos do mesmo chamado num item s\u00F3.\nCREATE UNIQUE INDEX IF NOT EXISTS agent_item_open_subject\n ON agent_item (agent_id, subject) WHERE status IN ('queued', 'working', 'waiting');\nCREATE INDEX IF NOT EXISTS agent_item_queue ON agent_item (agent_id, status, priority, not_before);\n\nCREATE TABLE IF NOT EXISTS agent_event (\n id BIGSERIAL PRIMARY KEY,\n agent_id TEXT NOT NULL,\n source_id TEXT,\n type TEXT NOT NULL,\n kind TEXT NOT NULL,\n subject TEXT NOT NULL,\n payload JSONB NOT NULL DEFAULT '{}',\n item_id BIGINT REFERENCES agent_item(id),\n received_at TIMESTAMPTZ NOT NULL DEFAULT now(),\n processed_at TIMESTAMPTZ\n);\nCREATE UNIQUE INDEX IF NOT EXISTS agent_event_dedup ON agent_event (agent_id, source_id) WHERE source_id IS NOT NULL;\nCREATE INDEX IF NOT EXISTS agent_event_item ON agent_event (item_id) WHERE processed_at IS NULL;\n\nCREATE TABLE IF NOT EXISTS agent_action (\n id BIGSERIAL PRIMARY KEY,\n agent_id TEXT NOT NULL,\n item_id BIGINT,\n routine TEXT NOT NULL,\n tool TEXT NOT NULL,\n input JSONB NOT NULL DEFAULT '{}',\n reason TEXT,\n -- executed: rodou | proposed: espera uma pessoa | shadow: s\u00F3 registro | denied: barrado\n mode TEXT NOT NULL,\n -- pending | ok | error | approved | rejected | corrected\n status TEXT NOT NULL,\n level TEXT NOT NULL,\n idempotency_key TEXT NOT NULL,\n tool_use_id TEXT,\n result JSONB,\n decided_by TEXT,\n decided_at TIMESTAMPTZ,\n note TEXT,\n created_at TIMESTAMPTZ NOT NULL DEFAULT now()\n);\n-- Nada se repete: a mesma a\u00E7\u00E3o no mesmo item e rotina s\u00F3 existe uma vez enquanto viva.\nCREATE UNIQUE INDEX IF NOT EXISTS agent_action_once\n ON agent_action (agent_id, idempotency_key)\n WHERE mode IN ('executed', 'proposed') AND status IN ('pending', 'ok', 'approved');\nCREATE INDEX IF NOT EXISTS agent_action_routine ON agent_action (agent_id, routine, created_at DESC);\n\n-- Teto de n\u00EDvel gravado pelo disjuntor (ou por uma pessoa num incidente).\nCREATE TABLE IF NOT EXISTS agent_routine_state (\n agent_id TEXT NOT NULL,\n routine TEXT NOT NULL,\n level_cap TEXT NOT NULL,\n reason TEXT NOT NULL,\n changed_at TIMESTAMPTZ NOT NULL DEFAULT now(),\n PRIMARY KEY (agent_id, routine)\n);\n\n-- Uma rodada por vez por agente, entre r\u00E9plicas.\nCREATE TABLE IF NOT EXISTS agent_lock (\n agent_id TEXT PRIMARY KEY,\n holder TEXT NOT NULL,\n until TIMESTAMPTZ NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS agent_round (\n id BIGSERIAL PRIMARY KEY,\n agent_id TEXT NOT NULL,\n started_at TIMESTAMPTZ NOT NULL DEFAULT now(),\n finished_at TIMESTAMPTZ,\n items INT NOT NULL DEFAULT 0,\n cost_usd NUMERIC(12, 6) NOT NULL DEFAULT 0,\n error TEXT\n);\n\n-- Bloqueio de emerg\u00EAncia: para tudo na hora, sem deploy. O gateway tamb\u00E9m precisa barrar\n-- a identidade; isto aqui \u00E9 o lado do runtime.\nCREATE TABLE IF NOT EXISTS agent_kill_switch (\n agent_id TEXT PRIMARY KEY,\n reason TEXT NOT NULL,\n set_by TEXT NOT NULL,\n set_at TIMESTAMPTZ NOT NULL DEFAULT now()\n);\n";
|
|
5
|
+
export declare const MIGRATIONS = "\nCREATE TABLE IF NOT EXISTS agent_item (\n id BIGSERIAL PRIMARY KEY,\n agent_id TEXT NOT NULL,\n subject TEXT NOT NULL,\n priority INT NOT NULL,\n -- queued: na fila | working: numa rodada | waiting: esperando resposta (not_before = prazo)\n -- done: fechado | exception: falhou demais e foi para o DRI\n status TEXT NOT NULL,\n attempts INT NOT NULL DEFAULT 0,\n not_before TIMESTAMPTZ NOT NULL DEFAULT now(),\n summary TEXT,\n last_error TEXT,\n created_at TIMESTAMPTZ NOT NULL DEFAULT now(),\n updated_at TIMESTAMPTZ NOT NULL DEFAULT now()\n);\n-- Um item aberto por assunto: \u00E9 isso que junta eventos do mesmo chamado num item s\u00F3.\nCREATE UNIQUE INDEX IF NOT EXISTS agent_item_open_subject\n ON agent_item (agent_id, subject) WHERE status IN ('queued', 'working', 'waiting');\nCREATE INDEX IF NOT EXISTS agent_item_queue ON agent_item (agent_id, status, priority, not_before);\n\nCREATE TABLE IF NOT EXISTS agent_event (\n id BIGSERIAL PRIMARY KEY,\n agent_id TEXT NOT NULL,\n source_id TEXT,\n type TEXT NOT NULL,\n kind TEXT NOT NULL,\n subject TEXT NOT NULL,\n payload JSONB NOT NULL DEFAULT '{}',\n item_id BIGINT REFERENCES agent_item(id),\n received_at TIMESTAMPTZ NOT NULL DEFAULT now(),\n processed_at TIMESTAMPTZ\n);\nCREATE UNIQUE INDEX IF NOT EXISTS agent_event_dedup ON agent_event (agent_id, source_id) WHERE source_id IS NOT NULL;\nCREATE INDEX IF NOT EXISTS agent_event_item ON agent_event (item_id) WHERE processed_at IS NULL;\n\nCREATE TABLE IF NOT EXISTS agent_action (\n id BIGSERIAL PRIMARY KEY,\n agent_id TEXT NOT NULL,\n item_id BIGINT,\n routine TEXT NOT NULL,\n tool TEXT NOT NULL,\n input JSONB NOT NULL DEFAULT '{}',\n reason TEXT,\n -- executed: rodou | proposed: espera uma pessoa | shadow: s\u00F3 registro | denied: barrado\n mode TEXT NOT NULL,\n -- pending | ok | error | approved | rejected | corrected\n status TEXT NOT NULL,\n level TEXT NOT NULL,\n idempotency_key TEXT NOT NULL,\n tool_use_id TEXT,\n result JSONB,\n decided_by TEXT,\n decided_at TIMESTAMPTZ,\n note TEXT,\n created_at TIMESTAMPTZ NOT NULL DEFAULT now()\n);\n-- Nada se repete: a mesma a\u00E7\u00E3o no mesmo item e rotina s\u00F3 existe uma vez enquanto viva.\nCREATE UNIQUE INDEX IF NOT EXISTS agent_action_once\n ON agent_action (agent_id, idempotency_key)\n WHERE mode IN ('executed', 'proposed') AND status IN ('pending', 'ok', 'approved');\nCREATE INDEX IF NOT EXISTS agent_action_routine ON agent_action (agent_id, routine, created_at DESC);\n\n-- Teto de n\u00EDvel gravado pelo disjuntor (ou por uma pessoa num incidente).\nCREATE TABLE IF NOT EXISTS agent_routine_state (\n agent_id TEXT NOT NULL,\n routine TEXT NOT NULL,\n level_cap TEXT NOT NULL,\n reason TEXT NOT NULL,\n changed_at TIMESTAMPTZ NOT NULL DEFAULT now(),\n PRIMARY KEY (agent_id, routine)\n);\n\n-- Uma rodada por vez por agente, entre r\u00E9plicas.\nCREATE TABLE IF NOT EXISTS agent_lock (\n agent_id TEXT PRIMARY KEY,\n holder TEXT NOT NULL,\n until TIMESTAMPTZ NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS agent_round (\n id BIGSERIAL PRIMARY KEY,\n agent_id TEXT NOT NULL,\n started_at TIMESTAMPTZ NOT NULL DEFAULT now(),\n finished_at TIMESTAMPTZ,\n items INT NOT NULL DEFAULT 0,\n cost_usd NUMERIC(12, 6) NOT NULL DEFAULT 0,\n error TEXT\n);\n\n-- Bloqueio de emerg\u00EAncia: para tudo na hora, sem deploy. O gateway tamb\u00E9m precisa barrar\n-- a identidade; isto aqui \u00E9 o lado do runtime.\nCREATE TABLE IF NOT EXISTS agent_kill_switch (\n agent_id TEXT PRIMARY KEY,\n reason TEXT NOT NULL,\n set_by TEXT NOT NULL,\n set_at TIMESTAMPTZ NOT NULL DEFAULT now()\n);\n\n-- De onde veio o evento (fonte do webhook). O source_id j\u00E1 vem prefixado com ela.\nALTER TABLE agent_event ADD COLUMN IF NOT EXISTS source TEXT;\n\n-- Conversa direta pelo conector. Roda em segundo plano: o gateway corta a chamada ao\n-- provider antes de uma resposta longa do modelo, ent\u00E3o quem perguntou busca a resposta\n-- pelo id, de qualquer r\u00E9plica.\nCREATE TABLE IF NOT EXISTS agent_conversation (\n id TEXT PRIMARY KEY,\n agent_id TEXT NOT NULL,\n asker TEXT NOT NULL,\n asker_kind TEXT NOT NULL,\n thread_id TEXT NOT NULL,\n message TEXT NOT NULL,\n -- running | done | error\n status TEXT NOT NULL,\n answer TEXT,\n error TEXT,\n cost_usd NUMERIC(12, 6),\n created_at TIMESTAMPTZ NOT NULL DEFAULT now(),\n finished_at TIMESTAMPTZ\n);\nCREATE INDEX IF NOT EXISTS agent_conversation_agent ON agent_conversation (agent_id, created_at DESC);\nCREATE INDEX IF NOT EXISTS agent_conversation_thread ON agent_conversation (agent_id, thread_id, created_at DESC);\n";
|
package/dist/store/migrations.js
CHANGED
|
@@ -100,5 +100,29 @@ CREATE TABLE IF NOT EXISTS agent_kill_switch (
|
|
|
100
100
|
set_by TEXT NOT NULL,
|
|
101
101
|
set_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
102
102
|
);
|
|
103
|
+
|
|
104
|
+
-- De onde veio o evento (fonte do webhook). O source_id já vem prefixado com ela.
|
|
105
|
+
ALTER TABLE agent_event ADD COLUMN IF NOT EXISTS source TEXT;
|
|
106
|
+
|
|
107
|
+
-- Conversa direta pelo conector. Roda em segundo plano: o gateway corta a chamada ao
|
|
108
|
+
-- provider antes de uma resposta longa do modelo, então quem perguntou busca a resposta
|
|
109
|
+
-- pelo id, de qualquer réplica.
|
|
110
|
+
CREATE TABLE IF NOT EXISTS agent_conversation (
|
|
111
|
+
id TEXT PRIMARY KEY,
|
|
112
|
+
agent_id TEXT NOT NULL,
|
|
113
|
+
asker TEXT NOT NULL,
|
|
114
|
+
asker_kind TEXT NOT NULL,
|
|
115
|
+
thread_id TEXT NOT NULL,
|
|
116
|
+
message TEXT NOT NULL,
|
|
117
|
+
-- running | done | error
|
|
118
|
+
status TEXT NOT NULL,
|
|
119
|
+
answer TEXT,
|
|
120
|
+
error TEXT,
|
|
121
|
+
cost_usd NUMERIC(12, 6),
|
|
122
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
123
|
+
finished_at TIMESTAMPTZ
|
|
124
|
+
);
|
|
125
|
+
CREATE INDEX IF NOT EXISTS agent_conversation_agent ON agent_conversation (agent_id, created_at DESC);
|
|
126
|
+
CREATE INDEX IF NOT EXISTS agent_conversation_thread ON agent_conversation (agent_id, thread_id, created_at DESC);
|
|
103
127
|
`;
|
|
104
128
|
//# sourceMappingURL=migrations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/store/migrations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/store/migrations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0HnC,CAAC"}
|
package/dist/wiring.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Liga os agentes ao gateway: um `GatewayClient` por agente, cada um com a própria
|
|
3
|
+
* identidade. É o que o gateway audita: a chamada sai no nome do agente, nunca de uma
|
|
4
|
+
* conta compartilhada.
|
|
5
|
+
*/
|
|
6
|
+
import type { AgentEnv } from './env.js';
|
|
7
|
+
import { type AgentHostOptions } from './host.js';
|
|
8
|
+
import type { LoadedAgent } from './manifest.js';
|
|
9
|
+
/** O que o host precisa do mundo: conectores para o modelo e quem executa ação aprovada. */
|
|
10
|
+
export type Wiring = Pick<AgentHostOptions, 'servers' | 'executor'>;
|
|
11
|
+
export declare function gatewayWiring(agents: LoadedAgent[], env: Pick<AgentEnv, 'gateway'>): Wiring;
|
package/dist/wiring.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ClientCredentialsTokenSource, GatewayClient, StaticTokenSource } from './gateway.js';
|
|
2
|
+
import { gatewayExecutor } from './host.js';
|
|
3
|
+
function tokensFor(agent, gw) {
|
|
4
|
+
// `loadAgentEnv` já recusa o token fixo em produção.
|
|
5
|
+
if (gw.devToken)
|
|
6
|
+
return new StaticTokenSource(gw.devToken);
|
|
7
|
+
const secret = gw.clientSecrets.get(agent.manifest.id);
|
|
8
|
+
if (!gw.keycloakIssuer || !secret)
|
|
9
|
+
throw new Error(`${agent.manifest.id}: defina KEYCLOAK_ISSUER e o segredo do client do agente`);
|
|
10
|
+
return new ClientCredentialsTokenSource({
|
|
11
|
+
issuer: gw.keycloakIssuer,
|
|
12
|
+
clientId: agent.manifest.identity.clientId ?? `agent-${agent.manifest.id}`,
|
|
13
|
+
clientSecret: secret,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export function gatewayWiring(agents, env) {
|
|
17
|
+
const gw = env.gateway;
|
|
18
|
+
if (!gw)
|
|
19
|
+
throw new Error('sem GATEWAY_URL: defina o gateway ou passe um wiring local');
|
|
20
|
+
const clients = new Map(agents.map((a) => [a.manifest.id, new GatewayClient({ url: gw.url, tokens: tokensFor(a, gw) })]));
|
|
21
|
+
const client = (a) => {
|
|
22
|
+
const c = clients.get(a.manifest.id);
|
|
23
|
+
if (!c)
|
|
24
|
+
throw new Error(`${a.manifest.id} não foi ligado ao gateway`);
|
|
25
|
+
return c;
|
|
26
|
+
};
|
|
27
|
+
return {
|
|
28
|
+
servers: (a) => client(a).mcpServers(a.manifest.gateway.subservices),
|
|
29
|
+
executor: { call: (a, tool, input) => gatewayExecutor(client(a)).call(a, tool, input) },
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=wiring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiring.js","sourceRoot":"","sources":["../src/wiring.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,4BAA4B,EAAE,aAAa,EAAE,iBAAiB,EAAoB,MAAM,cAAc,CAAC;AAChH,OAAO,EAAE,eAAe,EAAyB,MAAM,WAAW,CAAC;AAMnE,SAAS,SAAS,CAAC,KAAkB,EAAE,EAAoC;IACzE,qDAAqD;IACrD,IAAI,EAAE,CAAC,QAAQ;QAAE,OAAO,IAAI,iBAAiB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,cAAc,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,0DAA0D,CAAC,CAAC;IACnI,OAAO,IAAI,4BAA4B,CAAC;QACtC,MAAM,EAAE,EAAE,CAAC,cAAc;QACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,IAAI,SAAS,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE;QAC1E,YAAY,EAAE,MAAM;KACrB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAqB,EAAE,GAA8B;IACjF,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IACvF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,aAAa,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1H,MAAM,MAAM,GAAG,CAAC,CAAc,EAAE,EAAE;QAChC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,4BAA4B,CAAC,CAAC;QACtE,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IACF,OAAO;QACL,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC;QACpE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE;KACxF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@t4h/agent-runtime",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Runtime dos colaboradores digitais (agentes de IA) da Tech for Humans: manifesto agent.yaml, caixa de entrada de eventos, rodadas, níveis de autonomia por rotina com disjuntor, memória curta (SQLite) e longa (Postgres),
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Runtime dos colaboradores digitais (agentes de IA) da Tech for Humans: manifesto agent.yaml, caixa de entrada de eventos, rodadas, níveis de autonomia por rotina com disjuntor, memória curta (SQLite) e longa (Postgres), acesso aos sistemas pelo Enterprise MCP Gateway com a identidade própria do agente, o conector agents_<círculo> e o boot do processo (startAgents).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": ">=24"
|
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
"types": "./dist/index.d.ts",
|
|
14
14
|
"import": "./dist/index.js"
|
|
15
15
|
},
|
|
16
|
-
"./schema/agent.schema.json": "./schema/agent.schema.json"
|
|
16
|
+
"./schema/agent.schema.json": "./schema/agent.schema.json",
|
|
17
|
+
"./proto/t4h/agents/v1/agents.proto": "./proto/t4h/agents/v1/agents.proto",
|
|
18
|
+
"./catalog/agents.catalog.yaml": "./catalog/agents.catalog.yaml"
|
|
17
19
|
},
|
|
18
20
|
"bin": {
|
|
19
21
|
"t4h-agent": "bin/t4h-agent.mjs"
|
|
@@ -21,11 +23,15 @@
|
|
|
21
23
|
"files": [
|
|
22
24
|
"dist",
|
|
23
25
|
"schema",
|
|
24
|
-
"bin"
|
|
26
|
+
"bin",
|
|
27
|
+
"proto",
|
|
28
|
+
"catalog"
|
|
25
29
|
],
|
|
26
30
|
"dependencies": {
|
|
27
31
|
"@anthropic-ai/claude-agent-sdk": "0.3.310",
|
|
28
32
|
"@electric-sql/pglite": "^0.5.11",
|
|
33
|
+
"@grpc/grpc-js": "^1.14.6",
|
|
34
|
+
"@t4h/mcp-provider-sdk": "^1.4.1",
|
|
29
35
|
"ajv": "^8.20.0",
|
|
30
36
|
"croner": "^10.0.1",
|
|
31
37
|
"pg": "^8.23.1",
|
|
@@ -33,11 +39,12 @@
|
|
|
33
39
|
"zod": "^4.1.0"
|
|
34
40
|
},
|
|
35
41
|
"devDependencies": {
|
|
42
|
+
"@t4h/mcp-contract": "^5.4.1",
|
|
36
43
|
"@types/node": "^24.19.2",
|
|
37
44
|
"@types/pg": "^8.15.0",
|
|
45
|
+
"tsx": "^4.19.2",
|
|
38
46
|
"typescript": "^5.7.2",
|
|
39
|
-
"vitest": "^3.2.7"
|
|
40
|
-
"tsx": "^4.19.2"
|
|
47
|
+
"vitest": "^3.2.7"
|
|
41
48
|
},
|
|
42
49
|
"publishConfig": {
|
|
43
50
|
"access": "public"
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
// O conector de agentes de um círculo (`agents_<círculo>` no gateway). É por ele que uma
|
|
2
|
+
// pessoa conversa com um agente pelo Claude, pergunta por que ele fez algo, aprova uma
|
|
3
|
+
// proposta, corrige uma ação e, se for de Segurança ou o DRI, bloqueia o agente ou limita
|
|
4
|
+
// o nível de uma rotina. O gateway puxa este contrato por reflection, como o de qualquer
|
|
5
|
+
// provider; o catálogo base que aponta para estas RPCs mora em
|
|
6
|
+
// `catalog/agents.catalog.yaml`, versionado junto.
|
|
7
|
+
//
|
|
8
|
+
// Toda resposta é projetada pela FieldMask que o gateway manda (campos de topo). Nomes em
|
|
9
|
+
// snake_case (keepCase) para bater com os segmentos <field_data> das URNs
|
|
10
|
+
// `agents_<círculo>:<tabela>:<campo>`. As tabelas (resourceTable no catálogo):
|
|
11
|
+
// agente ListAgents, AskAgent, GetAnswer quem pode ver e conversar com os agentes
|
|
12
|
+
// acao ExplainActions, CorrectAction quem audita e corrige
|
|
13
|
+
// proposta ListProposals, DecideProposal quem aprova (líder do time, DRI)
|
|
14
|
+
// controle SetBlocked, CapRoutine só Segurança e o DRI
|
|
15
|
+
|
|
16
|
+
syntax = "proto3";
|
|
17
|
+
|
|
18
|
+
package t4h.agents.v1;
|
|
19
|
+
|
|
20
|
+
import "google/protobuf/field_mask.proto";
|
|
21
|
+
|
|
22
|
+
service AgentsService {
|
|
23
|
+
rpc ListAgents (ListAgentsRequest) returns (ListAgentsResponse);
|
|
24
|
+
rpc AskAgent (AskAgentRequest) returns (AskAgentResponse);
|
|
25
|
+
rpc GetAnswer (GetAnswerRequest) returns (GetAnswerResponse);
|
|
26
|
+
rpc ExplainActions (ExplainActionsRequest) returns (ExplainActionsResponse);
|
|
27
|
+
rpc ListProposals (ListProposalsRequest) returns (ListProposalsResponse);
|
|
28
|
+
rpc DecideProposal (DecideProposalRequest) returns (DecideProposalResponse);
|
|
29
|
+
rpc CorrectAction (CorrectActionRequest) returns (CorrectActionResponse);
|
|
30
|
+
rpc SetBlocked (SetBlockedRequest) returns (SetBlockedResponse);
|
|
31
|
+
rpc CapRoutine (CapRoutineRequest) returns (CapRoutineResponse);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
message Routine {
|
|
35
|
+
string name = 1;
|
|
36
|
+
string does = 2;
|
|
37
|
+
string level = 3; // nível que vale agora (manifesto ∩ teto)
|
|
38
|
+
string target = 4;
|
|
39
|
+
string capped_reason = 5;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
message Agent {
|
|
43
|
+
string id = 1;
|
|
44
|
+
string name = 2;
|
|
45
|
+
string description = 3;
|
|
46
|
+
string stage = 4;
|
|
47
|
+
string dri = 5;
|
|
48
|
+
string team = 6;
|
|
49
|
+
repeated Routine routines = 7;
|
|
50
|
+
bool blocked = 8;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
message Action {
|
|
54
|
+
uint64 id = 1;
|
|
55
|
+
string subject = 2;
|
|
56
|
+
string routine = 3;
|
|
57
|
+
string tool = 4;
|
|
58
|
+
string mode = 5; // executed | proposed | shadow | denied
|
|
59
|
+
string status = 6;
|
|
60
|
+
string level = 7;
|
|
61
|
+
string reason = 8;
|
|
62
|
+
string input_json = 9;
|
|
63
|
+
string note = 10;
|
|
64
|
+
string created_at = 11;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// ── agente ──────────────────────────────────────────────────────────────────────────
|
|
68
|
+
|
|
69
|
+
message ListAgentsRequest {
|
|
70
|
+
google.protobuf.FieldMask field_mask = 1;
|
|
71
|
+
}
|
|
72
|
+
message ListAgentsResponse {
|
|
73
|
+
repeated Agent agents = 1;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// A conversa roda em segundo plano: o gateway corta a chamada ao provider em ~30 s, e uma
|
|
77
|
+
// resposta do modelo pode passar disso. AskAgent espera um pouco; se não deu tempo, volta
|
|
78
|
+
// `running` com o ask_id, e GetAnswer busca a resposta depois.
|
|
79
|
+
message AskAgentRequest {
|
|
80
|
+
string agent_id = 1;
|
|
81
|
+
string message = 2;
|
|
82
|
+
string thread_id = 3; // opcional: junta perguntas da mesma conversa
|
|
83
|
+
google.protobuf.FieldMask field_mask = 4;
|
|
84
|
+
}
|
|
85
|
+
message AskAgentResponse {
|
|
86
|
+
string agent_id = 1;
|
|
87
|
+
string ask_id = 2;
|
|
88
|
+
string status = 3; // running | done | error
|
|
89
|
+
string answer = 4;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
message GetAnswerRequest {
|
|
93
|
+
string ask_id = 1;
|
|
94
|
+
google.protobuf.FieldMask field_mask = 2;
|
|
95
|
+
}
|
|
96
|
+
message GetAnswerResponse {
|
|
97
|
+
string ask_id = 1;
|
|
98
|
+
string agent_id = 2;
|
|
99
|
+
string status = 3; // running | done | error
|
|
100
|
+
string answer = 4;
|
|
101
|
+
string error = 5;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// ── acao ────────────────────────────────────────────────────────────────────────────
|
|
105
|
+
|
|
106
|
+
message ExplainActionsRequest {
|
|
107
|
+
string agent_id = 1;
|
|
108
|
+
string subject = 2; // opcional: só um assunto (ex.: ticket:123)
|
|
109
|
+
uint32 limit = 3;
|
|
110
|
+
google.protobuf.FieldMask field_mask = 4;
|
|
111
|
+
}
|
|
112
|
+
message ExplainActionsResponse {
|
|
113
|
+
repeated Action actions = 1;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
message CorrectActionRequest {
|
|
117
|
+
uint64 action_id = 1;
|
|
118
|
+
string note = 2; // o que estava errado e o certo; vira aprendizado
|
|
119
|
+
google.protobuf.FieldMask field_mask = 3;
|
|
120
|
+
}
|
|
121
|
+
message CorrectActionResponse {
|
|
122
|
+
uint64 action_id = 1;
|
|
123
|
+
string status = 2;
|
|
124
|
+
string routine_level = 3;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// ── proposta ────────────────────────────────────────────────────────────────────────
|
|
128
|
+
|
|
129
|
+
message ListProposalsRequest {
|
|
130
|
+
string agent_id = 1;
|
|
131
|
+
google.protobuf.FieldMask field_mask = 2;
|
|
132
|
+
}
|
|
133
|
+
message ListProposalsResponse {
|
|
134
|
+
repeated Action proposals = 1;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
message DecideProposalRequest {
|
|
138
|
+
uint64 action_id = 1;
|
|
139
|
+
bool approve = 2;
|
|
140
|
+
string note = 3;
|
|
141
|
+
google.protobuf.FieldMask field_mask = 4;
|
|
142
|
+
}
|
|
143
|
+
message DecideProposalResponse {
|
|
144
|
+
uint64 action_id = 1;
|
|
145
|
+
string status = 2;
|
|
146
|
+
string result_json = 3;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// ── controle ────────────────────────────────────────────────────────────────────────
|
|
150
|
+
|
|
151
|
+
// Bloqueio de emergência: para tudo na hora, sem deploy. Avisa o DRI e Segurança.
|
|
152
|
+
message SetBlockedRequest {
|
|
153
|
+
string agent_id = 1;
|
|
154
|
+
bool blocked = 2;
|
|
155
|
+
string reason = 3; // obrigatório ao bloquear
|
|
156
|
+
google.protobuf.FieldMask field_mask = 4;
|
|
157
|
+
}
|
|
158
|
+
message SetBlockedResponse {
|
|
159
|
+
string agent_id = 1;
|
|
160
|
+
bool blocked = 2;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Teto de nível de uma rotina, por decisão de pessoa. `level` vazio tira o teto e volta a
|
|
164
|
+
// valer o nível do manifesto. Avisa o DRI e Segurança.
|
|
165
|
+
message CapRoutineRequest {
|
|
166
|
+
string agent_id = 1;
|
|
167
|
+
string routine = 2;
|
|
168
|
+
string level = 3; // shadow | copilot | agent | vazio (restaura)
|
|
169
|
+
string reason = 4; // obrigatório ao limitar
|
|
170
|
+
google.protobuf.FieldMask field_mask = 5;
|
|
171
|
+
}
|
|
172
|
+
message CapRoutineResponse {
|
|
173
|
+
string agent_id = 1;
|
|
174
|
+
string routine = 2;
|
|
175
|
+
string level = 3; // nível que vale agora
|
|
176
|
+
}
|