@t4h/agent-runtime 0.2.0 → 0.4.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 CHANGED
@@ -78,12 +78,42 @@ depois, de qualquer réplica, e só para quem perguntou.
78
78
  | `EVENTS_HMAC_SECRETS` | `fonte=segredo,…`, ao menos uma | sem: aceita sem assinatura |
79
79
  | `EVENTS_PORT` / `EVENTS_WAKE_DEBOUNCE_MS` | | 8080 / 10000 |
80
80
  | `GATEWAY_URL`, `KEYCLOAK_ISSUER` | obrigatórios | sem `GATEWAY_URL`: `wiring` local |
81
- | `AGENT_<ID>_CLIENT_SECRET` | um por agente (hífen vira `_`) | |
81
+ | `AGENTS_CLIENT_ID`, `AGENTS_CLIENT_SECRET` | obrigatórios: o client do círculo no Keycloak, um para todos os agentes | |
82
82
  | `GATEWAY_DEV_TOKEN` | proibido | token fixo no lugar do Keycloak |
83
- | `ANTHROPIC_API_KEY` | obrigatório (ou `CLAUDE_CODE_USE_BEDROCK`/`_VERTEX`) | |
83
+ | `ANTHROPIC_ORGANIZATION_ID`, `ANTHROPIC_FEDERATION_RULE_ID`, `ANTHROPIC_SERVICE_ACCOUNT_ID` (`ANTHROPIC_WORKSPACE_ID`) | credencial do modelo por federação (ou `ANTHROPIC_API_KEY`) | no GitHub Actions, a identidade é o OIDC do job |
84
+ | `ANTHROPIC_IDENTITY_SOURCE` / `ANTHROPIC_KEYCLOAK_SCOPE` / `ANTHROPIC_OIDC_AUDIENCE` | | `keycloak` (`github-actions` no Actions) / `aud-claude-console-agents` / `https://api.anthropic.com` |
84
85
  | `AGENTS_ASK_WAIT_MS` | | 20000, abaixo de `PROVIDER_CALL_TIMEOUT_MS` (30000) |
85
86
  | `PORT`, `GATEWAY_JWKS_URL`, `GATEWAY_ISSUER`, `SERVICE_AUDIENCE`, mTLS | como em `loadProviderEnv()` | sem passaporte: sem conector |
86
87
 
88
+ ## Agentes como principais do gateway (0.4)
89
+
90
+ Um client do Keycloak por **círculo**, não por agente. O runtime pega um token para o
91
+ repositório inteiro (`AGENTS_CLIENT_ID`/`AGENTS_CLIENT_SECRET`) e nomeia o agente em cada
92
+ chamada no header `X-T4H-Agent: <id>`. No gateway, cada agente é um principal registrado
93
+ (`agent_register`), com e-mail, roles (`agent_set_roles`) e grants diretos próprios, e o
94
+ acesso dele é limitado às roles do client do círculo, o teto. O gateway recusa o header
95
+ vindo de outro client e recusa o client do círculo sem o header.
96
+
97
+ Da 0.3 para a 0.4: `AGENT_<ID>_CLIENT_SECRET` e `identity.clientId` saíram (o boot recusa o
98
+ segredo antigo); o escopo padrão da federação virou `aud-claude-console-agents`. Precisa do
99
+ gateway com principais de agente.
100
+
101
+ ## Credencial do modelo sem API key (0.3)
102
+
103
+ Com os IDs de Workload Identity Federation da Anthropic no ambiente, o runtime troca um JWT
104
+ por um token curto da API e o entrega ao Claude Code de cada execução
105
+ (`ANTHROPIC_AUTH_TOKEN`). A troca é feita uma vez, no runtime, e não em cada processo: o JWT
106
+ tem `jti` de uso único, e cada troca pede um JWT novo.
107
+
108
+ - **Aplicação (`keycloak`):** o client do círculo (`AGENTS_CLIENT_ID`) faz
109
+ `client_credentials` no escopo `aud-claude-console-agents`. É a mesma identidade com que
110
+ os agentes usam o gateway; o custo por agente fica no runtime.
111
+ - **CI dos evals (`github-actions`):** o token OIDC do job (`permissions: id-token: write`),
112
+ sem segredo no repositório. É o padrão quando `ACTIONS_ID_TOKEN_REQUEST_URL` existe.
113
+ - `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, profile ou Bedrock/Vertex continuam valendo
114
+ (o Claude Code resolve sozinho). Uma API key junto com os IDs da federação falha no boot,
115
+ porque a key venceria em silêncio.
116
+
87
117
  ## Da 0.1 para a 0.2
88
118
 
89
119
  - O conector (proto, handlers, catálogo) e o wiring do gateway saíram do template e
package/dist/brain.d.ts CHANGED
@@ -14,6 +14,7 @@
14
14
  */
15
15
  import { type McpServerConfig } from '@anthropic-ai/claude-agent-sdk';
16
16
  import type { LoadedAgent } from './manifest.js';
17
+ import { type ModelAuth } from './model-auth.js';
17
18
  import type { PolicyGate } from './policy.js';
18
19
  import type { ResolvedSkills } from './plugins.js';
19
20
  import type { RuntimeTools } from './runtime-tools.js';
@@ -41,8 +42,15 @@ export interface Brain {
41
42
  }
42
43
  export declare class ClaudeBrain implements Brain {
43
44
  private readonly opts;
45
+ private readonly modelAuth;
46
+ /**
47
+ * `modelAuth`: de onde vem a credencial do modelo. Padrão: do ambiente
48
+ * (`modelAuthFromEnv`), o que cobre a federação pelo Keycloak na aplicação e pelo OIDC do
49
+ * GitHub nos evals da CI. `null`: deixa o Claude Code resolver sozinho.
50
+ */
44
51
  constructor(opts?: {
45
52
  debug?: boolean;
53
+ modelAuth?: ModelAuth | null;
46
54
  });
47
55
  run(task: BrainTask): Promise<BrainResult>;
48
56
  }
package/dist/brain.js CHANGED
@@ -13,13 +13,21 @@
13
13
  * Os testes usam um Brain roteirizado que chama o mesmo portão, sem modelo.
14
14
  */
15
15
  import { query } from '@anthropic-ai/claude-agent-sdk';
16
+ import { childEnv, modelAuthFromEnv } from './model-auth.js';
16
17
  function isErrorResponse(r) {
17
18
  return typeof r === 'object' && r !== null && r.isError === true;
18
19
  }
19
20
  export class ClaudeBrain {
20
21
  opts;
22
+ modelAuth;
23
+ /**
24
+ * `modelAuth`: de onde vem a credencial do modelo. Padrão: do ambiente
25
+ * (`modelAuthFromEnv`), o que cobre a federação pelo Keycloak na aplicação e pelo OIDC do
26
+ * GitHub nos evals da CI. `null`: deixa o Claude Code resolver sozinho.
27
+ */
21
28
  constructor(opts = {}) {
22
29
  this.opts = opts;
30
+ this.modelAuth = opts.modelAuth === undefined ? modelAuthFromEnv() : (opts.modelAuth ?? undefined);
23
31
  }
24
32
  async run(task) {
25
33
  const { gate } = task;
@@ -53,6 +61,8 @@ export class ClaudeBrain {
53
61
  return d.allow ? { behavior: 'allow', updatedInput: input } : { behavior: 'deny', message: d.message };
54
62
  };
55
63
  const m = task.agent.manifest;
64
+ // Token curto do modelo, trocado pelo runtime (federação); sem ele, o Claude Code resolve.
65
+ const auth = this.modelAuth ? await this.modelAuth.env(task.agent) : undefined;
56
66
  let text = '';
57
67
  let costUsd = 0;
58
68
  let turns = 0;
@@ -80,6 +90,7 @@ export class ClaudeBrain {
80
90
  ...(task.budgetUsd ? { maxBudgetUsd: task.budgetUsd } : {}),
81
91
  persistSession: false,
82
92
  abortController,
93
+ ...(auth ? { env: childEnv(process.env, auth) } : {}),
83
94
  ...(this.opts.debug ? { stderr: (s) => process.stderr.write(s) } : {}),
84
95
  },
85
96
  });
package/dist/brain.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"brain.js","sourceRoot":"","sources":["../src/brain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brain.js","sourceRoot":"","sources":["../src/brain.ts"],"names":[],"mappings":"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"}
package/dist/env.d.ts CHANGED
@@ -4,12 +4,13 @@
4
4
  * na primeira rodada.
5
5
  *
6
6
  * Em produção (`NODE_ENV=production`) não há atalho: Postgres de verdade, eventos
7
- * assinados, identidade própria de cada agente no Keycloak, chave do modelo e o conector
7
+ * assinados, o client do círculo no Keycloak, credencial do modelo e o conector
8
8
  * com mTLS. Fora de produção, o que faltar cai no modo local (PGlite, eventos sem
9
9
  * assinatura, sem conector, `wiring` de stub no lugar do gateway).
10
10
  */
11
11
  import { type ProviderEnv } from '@t4h/mcp-provider-sdk';
12
12
  import type { LoadedAgent } from './manifest.js';
13
+ import { type ModelAuthConfig } from './model-auth.js';
13
14
  export interface AgentEnv {
14
15
  nodeEnv: string;
15
16
  isProduction: boolean;
@@ -30,8 +31,15 @@ export interface AgentEnv {
30
31
  /** Só fora de produção: token fixo no lugar do client_credentials. */
31
32
  devToken?: string;
32
33
  keycloakIssuer?: string;
33
- /** `AGENT_<ID>_CLIENT_SECRET` de cada agente, pelo id do agente. */
34
- clientSecrets: Map<string, string>;
34
+ /**
35
+ * O client do círculo no Keycloak (`AGENTS_CLIENT_ID`/`AGENTS_CLIENT_SECRET`): um para
36
+ * todos os agentes do repositório. Cada agente é nomeado no header `X-T4H-Agent` e é
37
+ * um principal registrado no gateway, com e-mail, roles e grants próprios.
38
+ */
39
+ client?: {
40
+ id: string;
41
+ secret: string;
42
+ };
35
43
  };
36
44
  /** Ambiente do conector gRPC (`loadProviderEnv`). Ausente fora de produção sem passaporte configurado. */
37
45
  connector?: ProviderEnv;
@@ -40,6 +48,8 @@ export interface AgentEnv {
40
48
  * chamada (`requireCallBinding` do SDK de providers). Desligado por padrão, como no SDK.
41
49
  */
42
50
  requireCallBinding: boolean;
51
+ /** Credencial do modelo: nativa do Claude Code ou federação feita pelo runtime. */
52
+ model: ModelAuthConfig;
43
53
  /** Quanto `agent_ask` espera a resposta antes de devolver `running`. */
44
54
  askWaitMs: number;
45
55
  debug: boolean;
@@ -47,8 +57,6 @@ export interface AgentEnv {
47
57
  /** Padrão do gateway para cortar a chamada ao provider (`PROVIDER_CALL_TIMEOUT_MS`). */
48
58
  export declare const GATEWAY_CALL_TIMEOUT_MS = 30000;
49
59
  export declare const DEFAULT_WAKE_DEBOUNCE_MS = 10000;
50
- /** `AGENT_<ID>_CLIENT_SECRET`: hífen vira `_`, tudo em maiúsculas. */
51
- export declare function agentSecretVar(agentId: string): string;
52
60
  /**
53
61
  * Lê e valida o ambiente para estes agentes. Junta todos os problemas numa mensagem só
54
62
  * (quem sobe o processo corrige tudo de uma vez) e lança.
package/dist/env.js CHANGED
@@ -4,17 +4,18 @@
4
4
  * na primeira rodada.
5
5
  *
6
6
  * Em produção (`NODE_ENV=production`) não há atalho: Postgres de verdade, eventos
7
- * assinados, identidade própria de cada agente no Keycloak, chave do modelo e o conector
7
+ * assinados, o client do círculo no Keycloak, credencial do modelo e o conector
8
8
  * com mTLS. Fora de produção, o que faltar cai no modo local (PGlite, eventos sem
9
9
  * assinatura, sem conector, `wiring` de stub no lugar do gateway).
10
10
  */
11
11
  import { loadProviderEnv, optionalEnv } from '@t4h/mcp-provider-sdk';
12
+ import { readModelAuth } from './model-auth.js';
12
13
  import { parseEventSecrets } from './signature.js';
13
14
  /** Padrão do gateway para cortar a chamada ao provider (`PROVIDER_CALL_TIMEOUT_MS`). */
14
15
  export const GATEWAY_CALL_TIMEOUT_MS = 30_000;
15
16
  export const DEFAULT_WAKE_DEBOUNCE_MS = 10_000;
16
- /** `AGENT_<ID>_CLIENT_SECRET`: hífen vira `_`, tudo em maiúsculas. */
17
- export function agentSecretVar(agentId) {
17
+ /** O nome da 0.3 (um client por agente), recusado no boot para não ser ignorado em silêncio. */
18
+ function legacyAgentSecretVar(agentId) {
18
19
  return `AGENT_${agentId.toUpperCase().replace(/-/g, '_')}_CLIENT_SECRET`;
19
20
  }
20
21
  function intEnv(name, fallback, env, problems, min = 0) {
@@ -64,46 +65,43 @@ export function loadAgentEnv(agents, env = process.env) {
64
65
  if (askWaitMs >= gatewayTimeout) {
65
66
  problems.push(`AGENTS_ASK_WAIT_MS (${askWaitMs}) tem de ficar abaixo do timeout do gateway para o provider (${gatewayTimeout} ms)`);
66
67
  }
67
- // ── gateway (identidade de cada agente) ─────────────────────────────────────────
68
+ // ── gateway (o client do círculo; cada agente nomeado no header) ────────────────
68
69
  const gatewayUrl = optionalEnv('GATEWAY_URL', env);
69
70
  const devToken = optionalEnv('GATEWAY_DEV_TOKEN', env);
70
71
  const keycloakIssuer = optionalEnv('KEYCLOAK_ISSUER', env);
71
- const clientSecrets = new Map();
72
- const missingSecrets = [];
73
- for (const a of agents) {
74
- const name = agentSecretVar(a.manifest.id);
75
- const value = optionalEnv(name, env);
76
- if (value)
77
- clientSecrets.set(a.manifest.id, value);
78
- else
79
- missingSecrets.push(name);
72
+ const clientId = optionalEnv('AGENTS_CLIENT_ID', env);
73
+ const clientSecret = optionalEnv('AGENTS_CLIENT_SECRET', env);
74
+ const legacy = agents.map((a) => legacyAgentSecretVar(a.manifest.id)).filter((k) => optionalEnv(k, env));
75
+ if (legacy.length) {
76
+ problems.push(`${legacy.join(', ')} não existe mais: um client por círculo (AGENTS_CLIENT_ID e AGENTS_CLIENT_SECRET), e cada agente registrado no gateway`);
80
77
  }
78
+ const missingClient = [!keycloakIssuer && 'KEYCLOAK_ISSUER', !clientId && 'AGENTS_CLIENT_ID', !clientSecret && 'AGENTS_CLIENT_SECRET'].filter(Boolean);
81
79
  let gateway;
82
80
  if (isProduction) {
83
81
  if (!gatewayUrl)
84
82
  problems.push('GATEWAY_URL é obrigatório em produção');
85
83
  if (devToken)
86
- problems.push('GATEWAY_DEV_TOKEN é proibido em produção: cada agente usa a própria identidade');
87
- if (!keycloakIssuer)
88
- problems.push('KEYCLOAK_ISSUER é obrigatório em produção');
89
- if (missingSecrets.length)
90
- problems.push(`falta o segredo do client de cada agente: ${missingSecrets.join(', ')}`);
84
+ problems.push('GATEWAY_DEV_TOKEN é proibido em produção: os agentes usam o client do círculo');
85
+ if (missingClient.length)
86
+ problems.push(`${missingClient.join(', ')} obrigatório em produção (o client do círculo no Keycloak)`);
91
87
  }
92
- else if (gatewayUrl && !devToken && (!keycloakIssuer || missingSecrets.length)) {
93
- problems.push(`com GATEWAY_URL, defina GATEWAY_DEV_TOKEN ou KEYCLOAK_ISSUER e ${missingSecrets.join(', ') || 'os segredos dos agentes'}`);
88
+ else if (gatewayUrl && !devToken && missingClient.length) {
89
+ problems.push(`com GATEWAY_URL, defina GATEWAY_DEV_TOKEN ou ${missingClient.join(', ')}`);
94
90
  }
95
91
  if (gatewayUrl) {
96
92
  gateway = {
97
93
  url: gatewayUrl,
98
94
  ...(devToken && !isProduction ? { devToken } : {}),
99
95
  ...(keycloakIssuer ? { keycloakIssuer } : {}),
100
- clientSecrets,
96
+ ...(clientId && clientSecret ? { client: { id: clientId, secret: clientSecret } } : {}),
101
97
  };
102
98
  }
103
99
  // ── modelo ──────────────────────────────────────────────────────────────────────
104
- const hasModel = Boolean(optionalEnv('ANTHROPIC_API_KEY', env) || optionalEnv('CLAUDE_CODE_USE_BEDROCK', env) || optionalEnv('CLAUDE_CODE_USE_VERTEX', env));
105
- if (isProduction && !hasModel)
106
- problems.push('ANTHROPIC_API_KEY (ou CLAUDE_CODE_USE_BEDROCK / CLAUDE_CODE_USE_VERTEX) é obrigatório em produção');
100
+ const model = readModelAuth(env);
101
+ problems.push(...model.problems);
102
+ if (isProduction && model.config.mode === 'none' && !model.problems.length) {
103
+ problems.push('credencial do modelo é obrigatória em produção: federação (ANTHROPIC_ORGANIZATION_ID, ANTHROPIC_FEDERATION_RULE_ID, ANTHROPIC_SERVICE_ACCOUNT_ID) ou ANTHROPIC_API_KEY');
104
+ }
107
105
  // ── conector gRPC ───────────────────────────────────────────────────────────────
108
106
  // Em produção, sempre (e o SDK já exige mTLS). Fora dela, só se o passaporte estiver
109
107
  // configurado; configurado pela metade, falha como em produção.
@@ -127,6 +125,7 @@ export function loadAgentEnv(agents, env = process.env) {
127
125
  ...(gateway ? { gateway } : {}),
128
126
  ...(connector ? { connector } : {}),
129
127
  requireCallBinding: optionalEnv('PROVIDER_REQUIRE_CALL_BINDING', env) === '1',
128
+ model: model.config,
130
129
  askWaitMs,
131
130
  debug: optionalEnv('AGENT_DEBUG', env) === '1',
132
131
  };
package/dist/env.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAoB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAqCnD,wFAAwF;AACxF,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAC9C,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAE/C,sEAAsE;AACtE,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,SAAS,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,gBAAgB,CAAC;AAC3E,CAAC;AAED,SAAS,MAAM,CAAC,IAAY,EAAE,QAAgB,EAAE,GAAsB,EAAE,QAAkB,EAAE,GAAG,GAAG,CAAC;IACjG,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACnC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACvC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,GAAG,iCAAiC,GAAG,EAAE,CAAC,CAAC;QACrE,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAqB,EAAE,MAAyB,OAAO,CAAC,GAAG;IACtF,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;IAC9C,MAAM,YAAY,GAAG,OAAO,KAAK,YAAY,CAAC;IAC9C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,mFAAmF;IACnF,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,IAAI,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACnF,IAAI,YAAY,IAAI,CAAC,UAAU;QAAE,QAAQ,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;SACvH,IAAI,WAAW,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IAE7I,mFAAmF;IACnF,IAAI,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,GAAG,iBAAiB,CAAC,WAAW,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,QAAQ,CAAC,IAAI,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,0EAA0E;IAC1E,IAAI,WAAW,CAAC,oBAAoB,EAAE,GAAG,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;IAC3I,IAAI,YAAY,IAAI,CAAC,OAAO,CAAC,IAAI;QAAE,QAAQ,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IACzH,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,MAAM,CAAC,yBAAyB,EAAE,wBAAwB,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAElG,mFAAmF;IACnF,MAAM,cAAc,GAAG,MAAM,CAAC,0BAA0B,EAAE,uBAAuB,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACrG,MAAM,SAAS,GAAG,MAAM,CAAC,oBAAoB,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACzE,IAAI,SAAS,IAAI,cAAc,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,SAAS,gEAAgE,cAAc,MAAM,CAAC,CAAC;IACtI,CAAC;IAED,mFAAmF;IACnF,MAAM,UAAU,GAAG,WAAW,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,WAAW,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,cAAc,GAAG,WAAW,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChD,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,KAAK;YAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;;YAC9C,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,OAA4B,CAAC;IACjC,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC,UAAU;YAAE,QAAQ,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACxE,IAAI,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAC;QAC9G,IAAI,CAAC,cAAc;YAAE,QAAQ,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAChF,IAAI,cAAc,CAAC,MAAM;YAAE,QAAQ,CAAC,IAAI,CAAC,6CAA6C,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrH,CAAC;SAAM,IAAI,UAAU,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QACjF,QAAQ,CAAC,IAAI,CAAC,kEAAkE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,yBAAyB,EAAE,CAAC,CAAC;IAC5I,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,GAAG;YACR,GAAG,EAAE,UAAU;YACf,GAAG,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,aAAa;SACd,CAAC;IACJ,CAAC;IAED,mFAAmF;IACnF,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,mBAAmB,EAAE,GAAG,CAAC,IAAI,WAAW,CAAC,yBAAyB,EAAE,GAAG,CAAC,IAAI,WAAW,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7J,IAAI,YAAY,IAAI,CAAC,QAAQ;QAAE,QAAQ,CAAC,IAAI,CAAC,mGAAmG,CAAC,CAAC;IAElJ,mFAAmF;IACnF,qFAAqF;IACrF,gEAAgE;IAChE,IAAI,SAAkC,CAAC;IACvC,IAAI,YAAY,IAAI,WAAW,CAAC,kBAAkB,EAAE,GAAG,CAAC,IAAI,WAAW,CAAC,wBAAwB,EAAE,GAAG,CAAC,EAAE,CAAC;QACvG,IAAI,CAAC;YACH,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,QAAQ,CAAC,IAAI,CAAC,aAAc,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,oBAAoB,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,UAAU,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC5G,CAAC;IAED,OAAO;QACL,OAAO;QACP,YAAY;QACZ,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE;QACvF,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,kBAAkB,EAAE,WAAW,CAAC,+BAA+B,EAAE,GAAG,CAAC,KAAK,GAAG;QAC7E,SAAS;QACT,KAAK,EAAE,WAAW,CAAC,aAAa,EAAE,GAAG,CAAC,KAAK,GAAG;KAC/C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"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"}
package/dist/gateway.d.ts CHANGED
@@ -1,13 +1,18 @@
1
1
  /**
2
- * O agente usa os sistemas da T4H só pelo MCP Gateway, com a própria identidade.
2
+ * O agente usa os sistemas só pelo MCP Gateway, com a própria identidade.
3
3
  *
4
- * O agente é um colaborador virtual: identidade e permissões próprias. Para os sistemas, é
5
- * mais um e-mail: um client do Keycloak com service account (client_credentials) cujo
6
- * usuário tem o e-mail de agente, criado por Segurança. O gateway já decide tudo pelo
7
- * e-mail e pelos papéis do token; os grants do agente são pedidos e liberados como os de
8
- * uma pessoa. Nada disso é configurado aqui.
4
+ * O agente é um colaborador virtual: um principal registrado no gateway, com e-mail,
5
+ * roles e grants próprios. Quem se autentica no Keycloak é o client do círculo
6
+ * (client_credentials), um para todos os agentes do repositório, e cada chamada nomeia o
7
+ * agente no header `X-T4H-Agent`. O gateway audita no nome do agente e limita os grants
8
+ * dele ao teto do círculo (as roles do client). Nada disso é configurado aqui.
9
9
  */
10
10
  import type { McpHttpServerConfig } from '@anthropic-ai/claude-agent-sdk';
11
+ /**
12
+ * Header em que o client do círculo nomeia o agente que age. O gateway só aceita o header
13
+ * do client registrado como host daquele agente, e a chamada sai no nome do agente.
14
+ */
15
+ export declare const AGENT_HEADER = "x-t4h-agent";
11
16
  export interface TokenSource {
12
17
  token(): Promise<string>;
13
18
  }
@@ -19,14 +24,18 @@ export declare class StaticTokenSource implements TokenSource {
19
24
  }
20
25
  /** Token curto do Keycloak, renovado um minuto antes de vencer. */
21
26
  export declare class ClientCredentialsTokenSource implements TokenSource {
27
+ /** `cache: false`: um token novo a cada chamada (para quem precisa de `jti` novo). */
22
28
  private readonly cfg;
23
29
  private readonly fetchImpl;
24
30
  private cached?;
25
- constructor(cfg: {
31
+ constructor(
32
+ /** `cache: false`: um token novo a cada chamada (para quem precisa de `jti` novo). */
33
+ cfg: {
26
34
  issuer: string;
27
35
  clientId: string;
28
36
  clientSecret: string;
29
37
  scope?: string;
38
+ cache?: boolean;
30
39
  }, fetchImpl?: typeof fetch);
31
40
  token(): Promise<string>;
32
41
  }
@@ -41,13 +50,18 @@ export declare class GatewayError extends Error {
41
50
  }
42
51
  /** Cliente JSON-RPC do `POST /mcp/:subservice` (o gateway é stateless, sem sessão). */
43
52
  export declare class GatewayClient {
53
+ /** `agentId`: o agente em nome de quem o client do círculo age (header `X-T4H-Agent`). */
44
54
  private readonly cfg;
45
55
  private readonly fetchImpl;
46
56
  private seq;
47
- constructor(cfg: {
57
+ constructor(
58
+ /** `agentId`: o agente em nome de quem o client do círculo age (header `X-T4H-Agent`). */
59
+ cfg: {
48
60
  url: string;
49
61
  tokens: TokenSource;
62
+ agentId?: string;
50
63
  }, fetchImpl?: typeof fetch);
64
+ private agentHeader;
51
65
  endpoint(subservice: string): string;
52
66
  /** Config de MCP remoto para o Claude Agent SDK, um por conector, com o token do agente. */
53
67
  mcpServers(subservices: string[], tokens?: TokenSource): Promise<Record<string, McpHttpServerConfig>>;
package/dist/gateway.js CHANGED
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Header em que o client do círculo nomeia o agente que age. O gateway só aceita o header
3
+ * do client registrado como host daquele agente, e a chamada sai no nome do agente.
4
+ */
5
+ export const AGENT_HEADER = 'x-t4h-agent';
1
6
  /** Fallback de desenvolvimento: o gateway em modo dev aceita HS256 com DEV_JWT_SECRET. */
2
7
  export class StaticTokenSource {
3
8
  value;
@@ -13,13 +18,15 @@ export class ClientCredentialsTokenSource {
13
18
  cfg;
14
19
  fetchImpl;
15
20
  cached;
16
- constructor(cfg, fetchImpl = fetch) {
21
+ constructor(
22
+ /** `cache: false`: um token novo a cada chamada (para quem precisa de `jti` novo). */
23
+ cfg, fetchImpl = fetch) {
17
24
  this.cfg = cfg;
18
25
  this.fetchImpl = fetchImpl;
19
26
  }
20
27
  async token() {
21
28
  const now = Date.now();
22
- if (this.cached && this.cached.exp - 60_000 > now)
29
+ if (this.cfg.cache !== false && this.cached && this.cached.exp - 60_000 > now)
23
30
  return this.cached.value;
24
31
  const body = new URLSearchParams({
25
32
  grant_type: 'client_credentials',
@@ -52,22 +59,27 @@ export class GatewayClient {
52
59
  cfg;
53
60
  fetchImpl;
54
61
  seq = 0;
55
- constructor(cfg, fetchImpl = fetch) {
62
+ constructor(
63
+ /** `agentId`: o agente em nome de quem o client do círculo age (header `X-T4H-Agent`). */
64
+ cfg, fetchImpl = fetch) {
56
65
  this.cfg = cfg;
57
66
  this.fetchImpl = fetchImpl;
58
67
  }
68
+ agentHeader() {
69
+ return this.cfg.agentId ? { [AGENT_HEADER]: this.cfg.agentId } : {};
70
+ }
59
71
  endpoint(subservice) {
60
72
  return `${this.cfg.url.replace(/\/$/, '')}/mcp/${subservice}`;
61
73
  }
62
74
  /** Config de MCP remoto para o Claude Agent SDK, um por conector, com o token do agente. */
63
75
  async mcpServers(subservices, tokens = this.cfg.tokens) {
64
76
  const token = await tokens.token();
65
- return Object.fromEntries(subservices.map((s) => [s, { type: 'http', url: this.endpoint(s), headers: { authorization: `Bearer ${token}` }, alwaysLoad: true }]));
77
+ return Object.fromEntries(subservices.map((s) => [s, { type: 'http', url: this.endpoint(s), headers: { authorization: `Bearer ${token}`, ...this.agentHeader() }, alwaysLoad: true }]));
66
78
  }
67
79
  async rpc(subservice, method, params, tokens = this.cfg.tokens) {
68
80
  const res = await this.fetchImpl(this.endpoint(subservice), {
69
81
  method: 'POST',
70
- headers: { 'content-type': 'application/json', authorization: `Bearer ${await tokens.token()}` },
82
+ headers: { 'content-type': 'application/json', authorization: `Bearer ${await tokens.token()}`, ...this.agentHeader() },
71
83
  body: JSON.stringify({ jsonrpc: '2.0', id: ++this.seq, method, params }),
72
84
  });
73
85
  if (res.status === 401 || res.status === 403)
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -11,7 +11,7 @@ export type { ActionRow, ActionMode, ActionStatus, ItemRow, EventRow, Conversati
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';
14
- export { GatewayClient, GatewayError, ClientCredentialsTokenSource, StaticTokenSource, } from './gateway.js';
14
+ export { GatewayClient, GatewayError, AGENT_HEADER, ClientCredentialsTokenSource, StaticTokenSource, } from './gateway.js';
15
15
  export type { TokenSource, GatewayTool } from './gateway.js';
16
16
  export { ClaudeBrain } from './brain.js';
17
17
  export type { Brain, BrainTask, BrainResult } from './brain.js';
@@ -30,7 +30,7 @@ export { AGENTS_SERVICE_FQN, agentsProtoPath, agentsConnectorHandlers } from './
30
30
  export type { AgentsConnectorOptions } from './connector.js';
31
31
  export { agentsCatalog, agentsCatalogPath, AGENTS_SLUG_PATTERN } from './catalog.js';
32
32
  export type { AgentsCatalogOptions } from './catalog.js';
33
- export { loadAgentEnv, agentSecretVar, GATEWAY_CALL_TIMEOUT_MS, DEFAULT_WAKE_DEBOUNCE_MS } from './env.js';
33
+ export { loadAgentEnv, GATEWAY_CALL_TIMEOUT_MS, DEFAULT_WAKE_DEBOUNCE_MS } from './env.js';
34
34
  export type { AgentEnv } from './env.js';
35
35
  export { gatewayWiring } from './wiring.js';
36
36
  export type { Wiring } from './wiring.js';
@@ -42,3 +42,5 @@ export { loadEvalCases, runEvalCase, runEvals, subsetMatch } from './evals.js';
42
42
  export type { EvalCase, EvalResult } from './evals.js';
43
43
  export { createSdkMcpServer, tool } from '@anthropic-ai/claude-agent-sdk';
44
44
  export type { McpServerConfig } from '@anthropic-ai/claude-agent-sdk';
45
+ export { AnthropicFederationTokenSource, githubActionsIdentity, modelAuthFromEnv, readModelAuth, childEnv, DEFAULT_KEYCLOAK_SCOPE, DEFAULT_GITHUB_AUDIENCE, } from './model-auth.js';
46
+ export type { ModelAuth, ModelAuthConfig, FederationIds } from './model-auth.js';
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ export { PolicyGate, evaluateBreaker, qualifiedToolName, sdkToolName, idempotenc
5
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
- export { GatewayClient, GatewayError, ClientCredentialsTokenSource, StaticTokenSource, } from './gateway.js';
8
+ export { GatewayClient, GatewayError, AGENT_HEADER, ClientCredentialsTokenSource, StaticTokenSource, } from './gateway.js';
9
9
  export { ClaudeBrain } from './brain.js';
10
10
  export { RuntimeTools } from './runtime-tools.js';
11
11
  export { resolveSkills } from './plugins.js';
@@ -17,11 +17,12 @@ export { parseEventSecrets, signEvent, verifyEventSignature, SOURCE_HEADER, SIGN
17
17
  export { AGENTS_SERVICE_FQN, agentsProtoPath, agentsConnectorHandlers } from './connector.js';
18
18
  export { agentsCatalog, agentsCatalogPath, AGENTS_SLUG_PATTERN } from './catalog.js';
19
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';
20
+ export { loadAgentEnv, GATEWAY_CALL_TIMEOUT_MS, DEFAULT_WAKE_DEBOUNCE_MS } from './env.js';
21
21
  export { gatewayWiring } from './wiring.js';
22
22
  export { startAgents } from './start.js';
23
23
  export { consoleNotifier, MemoryNotifier } from './notifier.js';
24
24
  export { loadEvalCases, runEvalCase, runEvals, subsetMatch } from './evals.js';
25
25
  // Para servir conectores em processo (stubs locais, evals) sem depender do SDK direto.
26
26
  export { createSdkMcpServer, tool } from '@anthropic-ai/claude-agent-sdk';
27
+ export { AnthropicFederationTokenSource, githubActionsIdentity, modelAuthFromEnv, readModelAuth, childEnv, DEFAULT_KEYCLOAK_SCOPE, DEFAULT_GITHUB_AUDIENCE, } from './model-auth.js';
27
28
  //# sourceMappingURL=index.js.map
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,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"}
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,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,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAE3F,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;AAG1E,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC"}
@@ -30,9 +30,9 @@ export interface AgentManifest {
30
30
  leader?: string;
31
31
  channel?: string;
32
32
  };
33
+ /** O e-mail com que o agente está registrado no gateway (`agent_register`). */
33
34
  identity: {
34
35
  email: string;
35
- clientId?: string;
36
36
  };
37
37
  model: string;
38
38
  effort: 'low' | 'medium' | 'high' | 'xhigh' | 'max';
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import { type TokenSource } from './gateway.js';
2
+ import type { LoadedAgent } from './manifest.js';
3
+ export declare const ANTHROPIC_BASE_URL = "https://api.anthropic.com";
4
+ /** Escopo do Keycloak que põe `aud: claude-console` no token do client do círculo. */
5
+ export declare const DEFAULT_KEYCLOAK_SCOPE = "aud-claude-console-agents";
6
+ /** Audience do token OIDC do GitHub Actions (padrão da Anthropic para esse provedor). */
7
+ export declare const DEFAULT_GITHUB_AUDIENCE = "https://api.anthropic.com";
8
+ export interface FederationIds {
9
+ organizationId: string;
10
+ federationRuleId: string;
11
+ serviceAccountId: string;
12
+ /** Obrigatório quando a regra vale para mais de um workspace. */
13
+ workspaceId?: string;
14
+ }
15
+ export type ModelAuthConfig =
16
+ /** O Claude Code resolve sozinho (API key, token, profile, federação por arquivo, nuvem). */
17
+ {
18
+ mode: 'native';
19
+ source: string;
20
+ } | {
21
+ mode: 'federation';
22
+ identity: 'keycloak';
23
+ ids: FederationIds;
24
+ baseUrl: string;
25
+ keycloak: {
26
+ issuer?: string;
27
+ clientId?: string;
28
+ scope: string;
29
+ };
30
+ } | {
31
+ mode: 'federation';
32
+ identity: 'github-actions';
33
+ ids: FederationIds;
34
+ baseUrl: string;
35
+ audience: string;
36
+ }
37
+ /** Nada configurado: só vale fora de produção (login local do Claude Code). */
38
+ | {
39
+ mode: 'none';
40
+ };
41
+ /**
42
+ * Lê a configuração da credencial do modelo. Devolve também os problemas, para o
43
+ * `loadAgentEnv` juntar com os outros e falhar no boot.
44
+ */
45
+ export declare function readModelAuth(env?: NodeJS.ProcessEnv): {
46
+ config: ModelAuthConfig;
47
+ problems: string[];
48
+ };
49
+ /** Um JWT novo do GitHub Actions a cada chamada (o do job vale ~5 min e tem `jti`). */
50
+ export declare function githubActionsIdentity(audience: string, env?: NodeJS.ProcessEnv, fetchImpl?: typeof fetch): () => Promise<string>;
51
+ /**
52
+ * Token da API da Claude por federação, guardado até 2 min antes de vencer. Cada troca
53
+ * pede um JWT novo a `identity` e nunca repete um que já foi apresentado.
54
+ */
55
+ export declare class AnthropicFederationTokenSource implements TokenSource {
56
+ private readonly cfg;
57
+ private readonly identity;
58
+ private readonly fetchImpl;
59
+ private readonly now;
60
+ private cached?;
61
+ private inflight?;
62
+ constructor(cfg: {
63
+ ids: FederationIds;
64
+ baseUrl?: string;
65
+ label: string;
66
+ }, identity: () => Promise<string>, fetchImpl?: typeof fetch, now?: () => number);
67
+ token(): Promise<string>;
68
+ private exchange;
69
+ }
70
+ /** O que o `ClaudeBrain` pede antes de cada execução: variáveis a mais para o Claude Code. */
71
+ export interface ModelAuth {
72
+ env(agent: LoadedAgent): Promise<Record<string, string>>;
73
+ }
74
+ /**
75
+ * Credencial do modelo a partir do ambiente. `undefined` quando o Claude Code resolve
76
+ * sozinho (ou, fora de produção, com o login local dele). Lança se a configuração for
77
+ * inválida; o `loadAgentEnv` já pegou isso no boot.
78
+ */
79
+ export declare function modelAuthFromEnv(env?: NodeJS.ProcessEnv, fetchImpl?: typeof fetch): ModelAuth | undefined;
80
+ /**
81
+ * Ambiente do processo do Claude Code: o do host, sem o que faria sombra ao token trocado
82
+ * aqui, mais as variáveis da credencial.
83
+ */
84
+ export declare function childEnv(base: NodeJS.ProcessEnv, extra: Record<string, string>): Record<string, string>;
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Credencial do modelo sem API key: Workload Identity Federation da Anthropic.
3
+ *
4
+ * O runtime troca um JWT de um provedor de identidade em que a Anthropic confia por um
5
+ * token curto da API (`sk-ant-oat01-…`) e o entrega ao Claude Code de cada execução como
6
+ * `ANTHROPIC_AUTH_TOKEN`. Dois provedores:
7
+ *
8
+ * - `keycloak` (a aplicação): o client do círculo (`AGENTS_CLIENT_ID`) faz
9
+ * client_credentials no escopo `aud-claude-console-agents`, que só põe a audience
10
+ * `claude-console` para quem tem a role `claude-console/agent`. É a mesma identidade com
11
+ * que os agentes usam o gateway; o custo por agente fica no runtime.
12
+ * - `github-actions` (CI dos evals): o token OIDC do job, sem segredo guardado no repo.
13
+ *
14
+ * A troca é feita aqui, uma vez, e não em cada processo do Claude Code: o JWT tem `jti` de
15
+ * uso único na Anthropic, e cada processo apresentando o mesmo JWT seria recusado como
16
+ * replay. Cada troca pede um JWT novo ao provedor.
17
+ *
18
+ * Com `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, `ANTHROPIC_PROFILE`,
19
+ * `ANTHROPIC_IDENTITY_TOKEN[_FILE]` ou Bedrock/Vertex no ambiente, o runtime não interfere:
20
+ * o Claude Code resolve sozinho.
21
+ */
22
+ import { optionalEnv } from '@t4h/mcp-provider-sdk';
23
+ import { ClientCredentialsTokenSource } from './gateway.js';
24
+ export const ANTHROPIC_BASE_URL = 'https://api.anthropic.com';
25
+ /** Escopo do Keycloak que põe `aud: claude-console` no token do client do círculo. */
26
+ export const DEFAULT_KEYCLOAK_SCOPE = 'aud-claude-console-agents';
27
+ /** Audience do token OIDC do GitHub Actions (padrão da Anthropic para esse provedor). */
28
+ export const DEFAULT_GITHUB_AUDIENCE = 'https://api.anthropic.com';
29
+ /** Variáveis que não podem chegar ao Claude Code junto com o token trocado aqui. */
30
+ const SHADOWING_VARS = [
31
+ 'ANTHROPIC_API_KEY',
32
+ 'ANTHROPIC_PROFILE',
33
+ 'ANTHROPIC_FEDERATION_RULE_ID',
34
+ 'ANTHROPIC_ORGANIZATION_ID',
35
+ 'ANTHROPIC_SERVICE_ACCOUNT_ID',
36
+ 'ANTHROPIC_WORKSPACE_ID',
37
+ 'ANTHROPIC_IDENTITY_TOKEN',
38
+ 'ANTHROPIC_IDENTITY_TOKEN_FILE',
39
+ ];
40
+ const NATIVE = [
41
+ 'ANTHROPIC_API_KEY',
42
+ 'ANTHROPIC_AUTH_TOKEN',
43
+ 'ANTHROPIC_PROFILE',
44
+ 'ANTHROPIC_IDENTITY_TOKEN_FILE',
45
+ 'ANTHROPIC_IDENTITY_TOKEN',
46
+ 'CLAUDE_CODE_USE_BEDROCK',
47
+ 'CLAUDE_CODE_USE_VERTEX',
48
+ ];
49
+ /**
50
+ * Lê a configuração da credencial do modelo. Devolve também os problemas, para o
51
+ * `loadAgentEnv` juntar com os outros e falhar no boot.
52
+ */
53
+ export function readModelAuth(env = process.env) {
54
+ const problems = [];
55
+ const ids = {
56
+ organizationId: optionalEnv('ANTHROPIC_ORGANIZATION_ID', env),
57
+ federationRuleId: optionalEnv('ANTHROPIC_FEDERATION_RULE_ID', env),
58
+ serviceAccountId: optionalEnv('ANTHROPIC_SERVICE_ACCOUNT_ID', env),
59
+ };
60
+ const anyId = Object.values(ids).some(Boolean);
61
+ const native = NATIVE.find((k) => optionalEnv(k, env));
62
+ // Com a variável nativa, o Claude Code usa ela e ignora a federação em silêncio.
63
+ if (native && anyId && !native.startsWith('ANTHROPIC_IDENTITY_TOKEN')) {
64
+ problems.push(`${native} e a federação (ANTHROPIC_FEDERATION_RULE_ID…) ao mesmo tempo: ${native} venceria em silêncio; deixe só um`);
65
+ }
66
+ if (native)
67
+ return { config: { mode: 'native', source: native }, problems };
68
+ if (!anyId)
69
+ return { config: { mode: 'none' }, problems };
70
+ const missing = Object.entries({
71
+ ANTHROPIC_ORGANIZATION_ID: ids.organizationId,
72
+ ANTHROPIC_FEDERATION_RULE_ID: ids.federationRuleId,
73
+ ANTHROPIC_SERVICE_ACCOUNT_ID: ids.serviceAccountId,
74
+ })
75
+ .filter(([, v]) => !v)
76
+ .map(([k]) => k);
77
+ if (missing.length) {
78
+ problems.push(`federação do modelo pela metade: falta ${missing.join(', ')}`);
79
+ return { config: { mode: 'none' }, problems };
80
+ }
81
+ const fed = {
82
+ organizationId: ids.organizationId,
83
+ federationRuleId: ids.federationRuleId,
84
+ serviceAccountId: ids.serviceAccountId,
85
+ ...(optionalEnv('ANTHROPIC_WORKSPACE_ID', env) ? { workspaceId: optionalEnv('ANTHROPIC_WORKSPACE_ID', env) } : {}),
86
+ };
87
+ const baseUrl = (optionalEnv('ANTHROPIC_BASE_URL', env) ?? ANTHROPIC_BASE_URL).replace(/\/$/, '');
88
+ const inActions = Boolean(optionalEnv('ACTIONS_ID_TOKEN_REQUEST_URL', env));
89
+ const identity = optionalEnv('ANTHROPIC_IDENTITY_SOURCE', env) ?? (inActions ? 'github-actions' : 'keycloak');
90
+ if (identity === 'github-actions') {
91
+ if (!inActions || !optionalEnv('ACTIONS_ID_TOKEN_REQUEST_TOKEN', env)) {
92
+ problems.push('ANTHROPIC_IDENTITY_SOURCE=github-actions sem o token OIDC do job: dê `permissions: id-token: write` ao job');
93
+ }
94
+ return {
95
+ config: { mode: 'federation', identity, ids: fed, baseUrl, audience: optionalEnv('ANTHROPIC_OIDC_AUDIENCE', env) ?? DEFAULT_GITHUB_AUDIENCE },
96
+ problems,
97
+ };
98
+ }
99
+ if (identity === 'keycloak') {
100
+ const issuer = optionalEnv('KEYCLOAK_ISSUER', env);
101
+ const clientId = optionalEnv('AGENTS_CLIENT_ID', env);
102
+ const missing = [!issuer && 'KEYCLOAK_ISSUER', !clientId && 'AGENTS_CLIENT_ID', !optionalEnv('AGENTS_CLIENT_SECRET', env) && 'AGENTS_CLIENT_SECRET'].filter(Boolean);
103
+ if (missing.length)
104
+ problems.push(`federação do modelo pelo Keycloak sem ${missing.join(', ')}`);
105
+ return {
106
+ config: {
107
+ mode: 'federation',
108
+ identity,
109
+ ids: fed,
110
+ baseUrl,
111
+ keycloak: {
112
+ ...(issuer ? { issuer } : {}),
113
+ ...(clientId ? { clientId } : {}),
114
+ scope: optionalEnv('ANTHROPIC_KEYCLOAK_SCOPE', env) ?? DEFAULT_KEYCLOAK_SCOPE,
115
+ },
116
+ },
117
+ problems,
118
+ };
119
+ }
120
+ problems.push(`ANTHROPIC_IDENTITY_SOURCE="${identity}" inválido: use keycloak ou github-actions`);
121
+ return { config: { mode: 'none' }, problems };
122
+ }
123
+ /** Um JWT novo do GitHub Actions a cada chamada (o do job vale ~5 min e tem `jti`). */
124
+ export function githubActionsIdentity(audience, env = process.env, fetchImpl = fetch) {
125
+ return async () => {
126
+ const url = optionalEnv('ACTIONS_ID_TOKEN_REQUEST_URL', env);
127
+ const bearer = optionalEnv('ACTIONS_ID_TOKEN_REQUEST_TOKEN', env);
128
+ if (!url || !bearer)
129
+ throw new Error('sem o token OIDC do GitHub Actions: o job precisa de `permissions: id-token: write`');
130
+ const res = await fetchImpl(`${url}&audience=${encodeURIComponent(audience)}`, { headers: { authorization: `Bearer ${bearer}` } });
131
+ if (!res.ok)
132
+ throw new Error(`GitHub recusou o token OIDC: HTTP ${res.status}`);
133
+ const { value } = (await res.json());
134
+ if (!value)
135
+ throw new Error('GitHub devolveu o token OIDC vazio');
136
+ return value;
137
+ };
138
+ }
139
+ /**
140
+ * Token da API da Claude por federação, guardado até 2 min antes de vencer. Cada troca
141
+ * pede um JWT novo a `identity` e nunca repete um que já foi apresentado.
142
+ */
143
+ export class AnthropicFederationTokenSource {
144
+ cfg;
145
+ identity;
146
+ fetchImpl;
147
+ now;
148
+ cached;
149
+ inflight;
150
+ constructor(cfg, identity, fetchImpl = fetch, now = Date.now) {
151
+ this.cfg = cfg;
152
+ this.identity = identity;
153
+ this.fetchImpl = fetchImpl;
154
+ this.now = now;
155
+ }
156
+ token() {
157
+ if (this.cached && this.cached.exp - 120_000 > this.now())
158
+ return Promise.resolve(this.cached.value);
159
+ // Duas execuções ao mesmo tempo esperam a mesma troca, em vez de gastar dois JWT.
160
+ this.inflight ??= this.exchange().finally(() => (this.inflight = undefined));
161
+ return this.inflight;
162
+ }
163
+ async exchange() {
164
+ const { ids } = this.cfg;
165
+ const started = this.now();
166
+ const res = await this.fetchImpl(`${(this.cfg.baseUrl ?? ANTHROPIC_BASE_URL).replace(/\/$/, '')}/v1/oauth/token`, {
167
+ method: 'POST',
168
+ headers: { 'content-type': 'application/json' },
169
+ body: JSON.stringify({
170
+ grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',
171
+ assertion: await this.identity(),
172
+ federation_rule_id: ids.federationRuleId,
173
+ organization_id: ids.organizationId,
174
+ service_account_id: ids.serviceAccountId,
175
+ ...(ids.workspaceId ? { workspace_id: ids.workspaceId } : {}),
176
+ }),
177
+ });
178
+ if (!res.ok) {
179
+ // O 401 da Anthropic é opaco de propósito; o motivo fica no histórico de autenticação do Console.
180
+ const requestId = res.headers.get('request-id');
181
+ throw new Error(`Anthropic recusou a federação de ${this.cfg.label}: HTTP ${res.status}${requestId ? ` (request-id ${requestId})` : ''}`);
182
+ }
183
+ const json = (await res.json());
184
+ if (!json.access_token || !json.expires_in)
185
+ throw new Error(`Anthropic devolveu a federação de ${this.cfg.label} sem token`);
186
+ this.cached = { value: json.access_token, exp: started + json.expires_in * 1000 };
187
+ return json.access_token;
188
+ }
189
+ }
190
+ /**
191
+ * Credencial do modelo a partir do ambiente. `undefined` quando o Claude Code resolve
192
+ * sozinho (ou, fora de produção, com o login local dele). Lança se a configuração for
193
+ * inválida; o `loadAgentEnv` já pegou isso no boot.
194
+ */
195
+ export function modelAuthFromEnv(env = process.env, fetchImpl = fetch) {
196
+ const { config, problems } = readModelAuth(env);
197
+ if (problems.length)
198
+ throw new Error(`credencial do modelo: ${problems.join('; ')}`);
199
+ if (config.mode !== 'federation')
200
+ return undefined;
201
+ if (config.identity === 'github-actions') {
202
+ const shared = new AnthropicFederationTokenSource({ ids: config.ids, baseUrl: config.baseUrl, label: 'GitHub Actions' }, githubActionsIdentity(config.audience, env, fetchImpl), fetchImpl);
203
+ return { env: async () => ({ ANTHROPIC_AUTH_TOKEN: await shared.token() }) };
204
+ }
205
+ // Keycloak: o client do círculo, o mesmo dos agentes no gateway. Um token para todos.
206
+ const { issuer, clientId, scope } = config.keycloak;
207
+ const clientSecret = optionalEnv('AGENTS_CLIENT_SECRET', env);
208
+ // `readModelAuth` já recusou a configuração incompleta.
209
+ const keycloak = new ClientCredentialsTokenSource({ issuer: issuer, clientId: clientId, clientSecret: clientSecret, scope, cache: false }, fetchImpl);
210
+ // Sem cache no Keycloak: cada troca na Anthropic precisa de um JWT com `jti` novo.
211
+ const shared = new AnthropicFederationTokenSource({ ids: config.ids, baseUrl: config.baseUrl, label: clientId }, () => keycloak.token(), fetchImpl);
212
+ return { env: async () => ({ ANTHROPIC_AUTH_TOKEN: await shared.token() }) };
213
+ }
214
+ /**
215
+ * Ambiente do processo do Claude Code: o do host, sem o que faria sombra ao token trocado
216
+ * aqui, mais as variáveis da credencial.
217
+ */
218
+ export function childEnv(base, extra) {
219
+ const out = {};
220
+ for (const [k, v] of Object.entries(base))
221
+ if (v !== undefined && !SHADOWING_VARS.includes(k))
222
+ out[k] = v;
223
+ return { ...out, ...extra };
224
+ }
225
+ //# sourceMappingURL=model-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-auth.js","sourceRoot":"","sources":["../src/model-auth.ts"],"names":[],"mappings":"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"}
package/dist/start.js CHANGED
@@ -13,6 +13,7 @@
13
13
  */
14
14
  import { createProviderServer, loadProviderContract } from '@t4h/mcp-provider-sdk';
15
15
  import { ClaudeBrain } from './brain.js';
16
+ import { modelAuthFromEnv } from './model-auth.js';
16
17
  import { agentsConnectorHandlers, agentsProtoPath, AGENTS_SERVICE_FQN } from './connector.js';
17
18
  import { loadAgentEnv } from './env.js';
18
19
  import { AgentHost } from './host.js';
@@ -38,7 +39,7 @@ export async function startAgents(opts) {
38
39
  const host = new AgentHost({
39
40
  agents,
40
41
  store,
41
- brain: opts.brain ?? new ClaudeBrain({ debug: env.debug }),
42
+ brain: opts.brain ?? new ClaudeBrain({ debug: env.debug, modelAuth: modelAuthFromEnv(opts.env ?? process.env) ?? null }),
42
43
  notifier: opts.notifier ?? consoleNotifier,
43
44
  ...(opts.pluginsDir ? { pluginsDir: opts.pluginsDir } : {}),
44
45
  askWaitMs: env.askWaitMs,
package/dist/start.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"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"}
package/dist/wiring.d.ts CHANGED
@@ -1,7 +1,7 @@
1
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.
2
+ * Liga os agentes ao gateway: um `GatewayClient` por agente, todos com o token do client
3
+ * do círculo e cada um com o próprio `X-T4H-Agent`. É o que o gateway audita: a chamada
4
+ * sai no nome do agente, nunca do client do círculo (que sem o header é recusado).
5
5
  */
6
6
  import type { AgentEnv } from './env.js';
7
7
  import { type AgentHostOptions } from './host.js';
package/dist/wiring.js CHANGED
@@ -1,23 +1,20 @@
1
1
  import { ClientCredentialsTokenSource, GatewayClient, StaticTokenSource } from './gateway.js';
2
2
  import { gatewayExecutor } from './host.js';
3
- function tokensFor(agent, gw) {
3
+ function circleTokens(gw) {
4
4
  // `loadAgentEnv` já recusa o token fixo em produção.
5
5
  if (gw.devToken)
6
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
- });
7
+ if (!gw.keycloakIssuer || !gw.client)
8
+ throw new Error('defina KEYCLOAK_ISSUER, AGENTS_CLIENT_ID e AGENTS_CLIENT_SECRET (o client do círculo)');
9
+ return new ClientCredentialsTokenSource({ issuer: gw.keycloakIssuer, clientId: gw.client.id, clientSecret: gw.client.secret });
15
10
  }
16
11
  export function gatewayWiring(agents, env) {
17
12
  const gw = env.gateway;
18
13
  if (!gw)
19
14
  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) })]));
15
+ // Um token para o círculo inteiro (renovado num lugar só); o agente vai no header.
16
+ const tokens = circleTokens(gw);
17
+ const clients = new Map(agents.map((a) => [a.manifest.id, new GatewayClient({ url: gw.url, tokens, agentId: a.manifest.id })]));
21
18
  const client = (a) => {
22
19
  const c = clients.get(a.manifest.id);
23
20
  if (!c)
@@ -1 +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"}
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,YAAY,CAAC,EAAoC;IACxD,qDAAqD;IACrD,IAAI,EAAE,CAAC,QAAQ;QAAE,OAAO,IAAI,iBAAiB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC3D,IAAI,CAAC,EAAE,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;IAC/I,OAAO,IAAI,4BAA4B,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,cAAc,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AACjI,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,mFAAmF;IACnF,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;IAChC,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,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChI,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,6 +1,6 @@
1
1
  {
2
2
  "name": "@t4h/agent-runtime",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
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": {
@@ -49,8 +49,7 @@
49
49
  "additionalProperties": false,
50
50
  "required": ["email"],
51
51
  "properties": {
52
- "email": { "type": "string", "pattern": "^[^@\\s]+@[^@\\s]+$" },
53
- "clientId": { "type": "string", "description": "Client do Keycloak usado no client_credentials. Padrão: agent-<id>." }
52
+ "email": { "type": "string", "pattern": "^[^@\\s]+@[^@\\s]+$", "description": "O e-mail com que o agente está registrado no gateway (agent_register)." }
54
53
  }
55
54
  },
56
55
  "model": { "type": "string", "pattern": "^claude-" },