@t4h/agent-runtime 0.3.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 +18 -5
- package/dist/env.d.ts +10 -5
- package/dist/env.js +16 -21
- package/dist/env.js.map +1 -1
- package/dist/gateway.d.ts +17 -7
- package/dist/gateway.js +13 -3
- package/dist/gateway.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/manifest.d.ts +1 -1
- package/dist/manifest.js.map +1 -1
- package/dist/model-auth.d.ts +3 -2
- package/dist/model-auth.js +23 -29
- package/dist/model-auth.js.map +1 -1
- package/dist/wiring.d.ts +3 -3
- package/dist/wiring.js +7 -10
- package/dist/wiring.js.map +1 -1
- package/package.json +1 -1
- package/schema/agent.schema.json +1 -2
package/README.md
CHANGED
|
@@ -78,13 +78,26 @@ 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
|
-
| `
|
|
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
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` / `https://api.anthropic.com` |
|
|
84
|
+
| `ANTHROPIC_IDENTITY_SOURCE` / `ANTHROPIC_KEYCLOAK_SCOPE` / `ANTHROPIC_OIDC_AUDIENCE` | | `keycloak` (`github-actions` no Actions) / `aud-claude-console-agents` / `https://api.anthropic.com` |
|
|
85
85
|
| `AGENTS_ASK_WAIT_MS` | | 20000, abaixo de `PROVIDER_CALL_TIMEOUT_MS` (30000) |
|
|
86
86
|
| `PORT`, `GATEWAY_JWKS_URL`, `GATEWAY_ISSUER`, `SERVICE_AUDIENCE`, mTLS | como em `loadProviderEnv()` | sem passaporte: sem conector |
|
|
87
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
|
+
|
|
88
101
|
## Credencial do modelo sem API key (0.3)
|
|
89
102
|
|
|
90
103
|
Com os IDs de Workload Identity Federation da Anthropic no ambiente, o runtime troca um JWT
|
|
@@ -92,9 +105,9 @@ por um token curto da API e o entrega ao Claude Code de cada execução
|
|
|
92
105
|
(`ANTHROPIC_AUTH_TOKEN`). A troca é feita uma vez, no runtime, e não em cada processo: o JWT
|
|
93
106
|
tem `jti` de uso único, e cada troca pede um JWT novo.
|
|
94
107
|
|
|
95
|
-
- **Aplicação (`keycloak`):** o client do
|
|
96
|
-
`client_credentials` no escopo `aud-claude-console`.
|
|
97
|
-
|
|
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.
|
|
98
111
|
- **CI dos evals (`github-actions`):** o token OIDC do job (`permissions: id-token: write`),
|
|
99
112
|
sem segredo no repositório. É o padrão quando `ACTIONS_ID_TOKEN_REQUEST_URL` existe.
|
|
100
113
|
- `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, profile ou Bedrock/Vertex continuam valendo
|
package/dist/env.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
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,
|
|
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
|
*/
|
|
@@ -31,8 +31,15 @@ export interface AgentEnv {
|
|
|
31
31
|
/** Só fora de produção: token fixo no lugar do client_credentials. */
|
|
32
32
|
devToken?: string;
|
|
33
33
|
keycloakIssuer?: string;
|
|
34
|
-
/**
|
|
35
|
-
|
|
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
|
+
};
|
|
36
43
|
};
|
|
37
44
|
/** Ambiente do conector gRPC (`loadProviderEnv`). Ausente fora de produção sem passaporte configurado. */
|
|
38
45
|
connector?: ProviderEnv;
|
|
@@ -50,8 +57,6 @@ export interface AgentEnv {
|
|
|
50
57
|
/** Padrão do gateway para cortar a chamada ao provider (`PROVIDER_CALL_TIMEOUT_MS`). */
|
|
51
58
|
export declare const GATEWAY_CALL_TIMEOUT_MS = 30000;
|
|
52
59
|
export declare const DEFAULT_WAKE_DEBOUNCE_MS = 10000;
|
|
53
|
-
/** `AGENT_<ID>_CLIENT_SECRET`: hífen vira `_`, tudo em maiúsculas. */
|
|
54
|
-
export declare function agentSecretVar(agentId: string): string;
|
|
55
60
|
/**
|
|
56
61
|
* Lê e valida o ambiente para estes agentes. Junta todos os problemas numa mensagem só
|
|
57
62
|
* (quem sobe o processo corrige tudo de uma vez) e lança.
|
package/dist/env.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
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,
|
|
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
|
*/
|
|
@@ -14,8 +14,8 @@ import { parseEventSecrets } from './signature.js';
|
|
|
14
14
|
/** Padrão do gateway para cortar a chamada ao provider (`PROVIDER_CALL_TIMEOUT_MS`). */
|
|
15
15
|
export const GATEWAY_CALL_TIMEOUT_MS = 30_000;
|
|
16
16
|
export const DEFAULT_WAKE_DEBOUNCE_MS = 10_000;
|
|
17
|
-
/**
|
|
18
|
-
|
|
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) {
|
|
19
19
|
return `AGENT_${agentId.toUpperCase().replace(/-/g, '_')}_CLIENT_SECRET`;
|
|
20
20
|
}
|
|
21
21
|
function intEnv(name, fallback, env, problems, min = 0) {
|
|
@@ -65,40 +65,35 @@ export function loadAgentEnv(agents, env = process.env) {
|
|
|
65
65
|
if (askWaitMs >= gatewayTimeout) {
|
|
66
66
|
problems.push(`AGENTS_ASK_WAIT_MS (${askWaitMs}) tem de ficar abaixo do timeout do gateway para o provider (${gatewayTimeout} ms)`);
|
|
67
67
|
}
|
|
68
|
-
// ── gateway (
|
|
68
|
+
// ── gateway (o client do círculo; cada agente nomeado no header) ────────────────
|
|
69
69
|
const gatewayUrl = optionalEnv('GATEWAY_URL', env);
|
|
70
70
|
const devToken = optionalEnv('GATEWAY_DEV_TOKEN', env);
|
|
71
71
|
const keycloakIssuer = optionalEnv('KEYCLOAK_ISSUER', env);
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if (value)
|
|
78
|
-
clientSecrets.set(a.manifest.id, value);
|
|
79
|
-
else
|
|
80
|
-
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`);
|
|
81
77
|
}
|
|
78
|
+
const missingClient = [!keycloakIssuer && 'KEYCLOAK_ISSUER', !clientId && 'AGENTS_CLIENT_ID', !clientSecret && 'AGENTS_CLIENT_SECRET'].filter(Boolean);
|
|
82
79
|
let gateway;
|
|
83
80
|
if (isProduction) {
|
|
84
81
|
if (!gatewayUrl)
|
|
85
82
|
problems.push('GATEWAY_URL é obrigatório em produção');
|
|
86
83
|
if (devToken)
|
|
87
|
-
problems.push('GATEWAY_DEV_TOKEN é proibido em produção:
|
|
88
|
-
if (
|
|
89
|
-
problems.push('
|
|
90
|
-
if (missingSecrets.length)
|
|
91
|
-
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)`);
|
|
92
87
|
}
|
|
93
|
-
else if (gatewayUrl && !devToken &&
|
|
94
|
-
problems.push(`com GATEWAY_URL, defina GATEWAY_DEV_TOKEN ou
|
|
88
|
+
else if (gatewayUrl && !devToken && missingClient.length) {
|
|
89
|
+
problems.push(`com GATEWAY_URL, defina GATEWAY_DEV_TOKEN ou ${missingClient.join(', ')}`);
|
|
95
90
|
}
|
|
96
91
|
if (gatewayUrl) {
|
|
97
92
|
gateway = {
|
|
98
93
|
url: gatewayUrl,
|
|
99
94
|
...(devToken && !isProduction ? { devToken } : {}),
|
|
100
95
|
...(keycloakIssuer ? { keycloakIssuer } : {}),
|
|
101
|
-
|
|
96
|
+
...(clientId && clientSecret ? { client: { id: clientId, secret: clientSecret } } : {}),
|
|
102
97
|
};
|
|
103
98
|
}
|
|
104
99
|
// ── modelo ──────────────────────────────────────────────────────────────────────
|
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,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,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
|
|
2
|
+
* O agente usa os sistemas só pelo MCP Gateway, com a própria identidade.
|
|
3
3
|
*
|
|
4
|
-
* O agente é um colaborador virtual:
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
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
|
}
|
|
@@ -45,13 +50,18 @@ export declare class GatewayError extends Error {
|
|
|
45
50
|
}
|
|
46
51
|
/** Cliente JSON-RPC do `POST /mcp/:subservice` (o gateway é stateless, sem sessão). */
|
|
47
52
|
export declare class GatewayClient {
|
|
53
|
+
/** `agentId`: o agente em nome de quem o client do círculo age (header `X-T4H-Agent`). */
|
|
48
54
|
private readonly cfg;
|
|
49
55
|
private readonly fetchImpl;
|
|
50
56
|
private seq;
|
|
51
|
-
constructor(
|
|
57
|
+
constructor(
|
|
58
|
+
/** `agentId`: o agente em nome de quem o client do círculo age (header `X-T4H-Agent`). */
|
|
59
|
+
cfg: {
|
|
52
60
|
url: string;
|
|
53
61
|
tokens: TokenSource;
|
|
62
|
+
agentId?: string;
|
|
54
63
|
}, fetchImpl?: typeof fetch);
|
|
64
|
+
private agentHeader;
|
|
55
65
|
endpoint(subservice: string): string;
|
|
56
66
|
/** Config de MCP remoto para o Claude Agent SDK, um por conector, com o token do agente. */
|
|
57
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;
|
|
@@ -54,22 +59,27 @@ export class GatewayClient {
|
|
|
54
59
|
cfg;
|
|
55
60
|
fetchImpl;
|
|
56
61
|
seq = 0;
|
|
57
|
-
constructor(
|
|
62
|
+
constructor(
|
|
63
|
+
/** `agentId`: o agente em nome de quem o client do círculo age (header `X-T4H-Agent`). */
|
|
64
|
+
cfg, fetchImpl = fetch) {
|
|
58
65
|
this.cfg = cfg;
|
|
59
66
|
this.fetchImpl = fetchImpl;
|
|
60
67
|
}
|
|
68
|
+
agentHeader() {
|
|
69
|
+
return this.cfg.agentId ? { [AGENT_HEADER]: this.cfg.agentId } : {};
|
|
70
|
+
}
|
|
61
71
|
endpoint(subservice) {
|
|
62
72
|
return `${this.cfg.url.replace(/\/$/, '')}/mcp/${subservice}`;
|
|
63
73
|
}
|
|
64
74
|
/** Config de MCP remoto para o Claude Agent SDK, um por conector, com o token do agente. */
|
|
65
75
|
async mcpServers(subservices, tokens = this.cfg.tokens) {
|
|
66
76
|
const token = await tokens.token();
|
|
67
|
-
return Object.fromEntries(subservices.map((s) => [s, { type: 'http', url: this.endpoint(s), headers: { authorization: `Bearer ${token}
|
|
77
|
+
return Object.fromEntries(subservices.map((s) => [s, { type: 'http', url: this.endpoint(s), headers: { authorization: `Bearer ${token}`, ...this.agentHeader() }, alwaysLoad: true }]));
|
|
68
78
|
}
|
|
69
79
|
async rpc(subservice, method, params, tokens = this.cfg.tokens) {
|
|
70
80
|
const res = await this.fetchImpl(this.endpoint(subservice), {
|
|
71
81
|
method: 'POST',
|
|
72
|
-
headers: { 'content-type': 'application/json', authorization: `Bearer ${await tokens.token()}
|
|
82
|
+
headers: { 'content-type': 'application/json', authorization: `Bearer ${await tokens.token()}`, ...this.agentHeader() },
|
|
73
83
|
body: JSON.stringify({ jsonrpc: '2.0', id: ++this.seq, method, params }),
|
|
74
84
|
});
|
|
75
85
|
if (res.status === 401 || res.status === 403)
|
package/dist/gateway.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"
|
|
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,
|
|
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';
|
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,7 +17,7 @@ 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,
|
|
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';
|
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,
|
|
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"}
|
package/dist/manifest.d.ts
CHANGED
|
@@ -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';
|
package/dist/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,GAAG,EAAoB,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAc,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,cAAc,EAAkB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/model-auth.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { type TokenSource } from './gateway.js';
|
|
2
2
|
import type { LoadedAgent } from './manifest.js';
|
|
3
3
|
export declare const ANTHROPIC_BASE_URL = "https://api.anthropic.com";
|
|
4
|
-
/** Escopo do Keycloak que põe `aud: claude-console` no token
|
|
5
|
-
export declare const DEFAULT_KEYCLOAK_SCOPE = "aud-claude-console";
|
|
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
6
|
/** Audience do token OIDC do GitHub Actions (padrão da Anthropic para esse provedor). */
|
|
7
7
|
export declare const DEFAULT_GITHUB_AUDIENCE = "https://api.anthropic.com";
|
|
8
8
|
export interface FederationIds {
|
|
@@ -24,6 +24,7 @@ export type ModelAuthConfig =
|
|
|
24
24
|
baseUrl: string;
|
|
25
25
|
keycloak: {
|
|
26
26
|
issuer?: string;
|
|
27
|
+
clientId?: string;
|
|
27
28
|
scope: string;
|
|
28
29
|
};
|
|
29
30
|
} | {
|
package/dist/model-auth.js
CHANGED
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
* token curto da API (`sk-ant-oat01-…`) e o entrega ao Claude Code de cada execução como
|
|
6
6
|
* `ANTHROPIC_AUTH_TOKEN`. Dois provedores:
|
|
7
7
|
*
|
|
8
|
-
* - `keycloak` (a aplicação): o client do
|
|
9
|
-
* client_credentials no escopo `aud-claude-console
|
|
10
|
-
*
|
|
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.
|
|
11
12
|
* - `github-actions` (CI dos evals): o token OIDC do job, sem segredo guardado no repo.
|
|
12
13
|
*
|
|
13
14
|
* A troca é feita aqui, uma vez, e não em cada processo do Claude Code: o JWT tem `jti` de
|
|
@@ -19,11 +20,10 @@
|
|
|
19
20
|
* o Claude Code resolve sozinho.
|
|
20
21
|
*/
|
|
21
22
|
import { optionalEnv } from '@t4h/mcp-provider-sdk';
|
|
22
|
-
import { agentSecretVar } from './env.js';
|
|
23
23
|
import { ClientCredentialsTokenSource } from './gateway.js';
|
|
24
24
|
export const ANTHROPIC_BASE_URL = 'https://api.anthropic.com';
|
|
25
|
-
/** Escopo do Keycloak que põe `aud: claude-console` no token
|
|
26
|
-
export const DEFAULT_KEYCLOAK_SCOPE = 'aud-claude-console';
|
|
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
27
|
/** Audience do token OIDC do GitHub Actions (padrão da Anthropic para esse provedor). */
|
|
28
28
|
export const DEFAULT_GITHUB_AUDIENCE = 'https://api.anthropic.com';
|
|
29
29
|
/** Variáveis que não podem chegar ao Claude Code junto com o token trocado aqui. */
|
|
@@ -98,15 +98,21 @@ export function readModelAuth(env = process.env) {
|
|
|
98
98
|
}
|
|
99
99
|
if (identity === 'keycloak') {
|
|
100
100
|
const issuer = optionalEnv('KEYCLOAK_ISSUER', env);
|
|
101
|
-
|
|
102
|
-
|
|
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(', ')}`);
|
|
103
105
|
return {
|
|
104
106
|
config: {
|
|
105
107
|
mode: 'federation',
|
|
106
108
|
identity,
|
|
107
109
|
ids: fed,
|
|
108
110
|
baseUrl,
|
|
109
|
-
keycloak: {
|
|
111
|
+
keycloak: {
|
|
112
|
+
...(issuer ? { issuer } : {}),
|
|
113
|
+
...(clientId ? { clientId } : {}),
|
|
114
|
+
scope: optionalEnv('ANTHROPIC_KEYCLOAK_SCOPE', env) ?? DEFAULT_KEYCLOAK_SCOPE,
|
|
115
|
+
},
|
|
110
116
|
},
|
|
111
117
|
problems,
|
|
112
118
|
};
|
|
@@ -196,26 +202,14 @@ export function modelAuthFromEnv(env = process.env, fetchImpl = fetch) {
|
|
|
196
202
|
const shared = new AnthropicFederationTokenSource({ ids: config.ids, baseUrl: config.baseUrl, label: 'GitHub Actions' }, githubActionsIdentity(config.audience, env, fetchImpl), fetchImpl);
|
|
197
203
|
return { env: async () => ({ ANTHROPIC_AUTH_TOKEN: await shared.token() }) };
|
|
198
204
|
}
|
|
199
|
-
// Keycloak:
|
|
200
|
-
const { issuer, scope } = config.keycloak;
|
|
201
|
-
const
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
const secret = optionalEnv(agentSecretVar(id), env);
|
|
208
|
-
if (!issuer || !secret)
|
|
209
|
-
throw new Error(`${id}: a federação do modelo pelo Keycloak precisa de KEYCLOAK_ISSUER e ${agentSecretVar(id)}`);
|
|
210
|
-
const clientId = agent.manifest.identity.clientId ?? `agent-${id}`;
|
|
211
|
-
// Sem cache: cada troca na Anthropic precisa de um JWT com `jti` novo.
|
|
212
|
-
const keycloak = new ClientCredentialsTokenSource({ issuer, clientId, clientSecret: secret, scope, cache: false }, fetchImpl);
|
|
213
|
-
source = new AnthropicFederationTokenSource({ ids: config.ids, baseUrl: config.baseUrl, label: clientId }, () => keycloak.token(), fetchImpl);
|
|
214
|
-
perAgent.set(id, source);
|
|
215
|
-
}
|
|
216
|
-
return { ANTHROPIC_AUTH_TOKEN: await source.token() };
|
|
217
|
-
},
|
|
218
|
-
};
|
|
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() }) };
|
|
219
213
|
}
|
|
220
214
|
/**
|
|
221
215
|
* Ambiente do processo do Claude Code: o do host, sem o que faria sombra ao token trocado
|
package/dist/model-auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-auth.js","sourceRoot":"","sources":["../src/model-auth.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"model-auth.js","sourceRoot":"","sources":["../src/model-auth.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,
|
|
3
|
-
*
|
|
4
|
-
*
|
|
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
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
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)
|
package/dist/wiring.js.map
CHANGED
|
@@ -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,
|
|
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.
|
|
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": {
|
package/schema/agent.schema.json
CHANGED
|
@@ -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-" },
|