@zihin/agent-client 0.1.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 +156 -0
- package/dist/agents.d.ts +21 -0
- package/dist/agents.js +52 -0
- package/dist/agents.js.map +1 -0
- package/dist/client.d.ts +43 -0
- package/dist/client.js +75 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +35 -0
- package/dist/errors.js +89 -0
- package/dist/errors.js.map +1 -0
- package/dist/http.d.ts +98 -0
- package/dist/http.js +281 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/internal.d.ts +13 -0
- package/dist/internal.js +40 -0
- package/dist/internal.js.map +1 -0
- package/dist/invoke.d.ts +18 -0
- package/dist/invoke.js +233 -0
- package/dist/invoke.js.map +1 -0
- package/dist/security.d.ts +82 -0
- package/dist/security.js +251 -0
- package/dist/security.js.map +1 -0
- package/dist/sse.d.ts +27 -0
- package/dist/sse.js +138 -0
- package/dist/sse.js.map +1 -0
- package/dist/triggers.d.ts +43 -0
- package/dist/triggers.js +241 -0
- package/dist/triggers.js.map +1 -0
- package/dist/types.d.ts +268 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/package.json +46 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tipos do contrato externo Zihin — fonte de verdade verificada contra o BE
|
|
3
|
+
* (zihin-agent-builder/server-llm, 2026-06-28).
|
|
4
|
+
*
|
|
5
|
+
* @module types
|
|
6
|
+
*/
|
|
7
|
+
import type { ZihinAgentError } from './errors';
|
|
8
|
+
export interface ZihinClientConfig {
|
|
9
|
+
/** API key `zhn_live_*` (tenant embutido). Para triggers/telemetria use role admin/editor. */
|
|
10
|
+
apiKey: string;
|
|
11
|
+
/** Base URL. Default: https://llm.zihin.ai */
|
|
12
|
+
baseUrl?: string;
|
|
13
|
+
/** Timeout por request (ms). Default: 120000 (= limite do /stream no BE). */
|
|
14
|
+
timeoutMs?: number;
|
|
15
|
+
/** Máximo de retentativas em 5xx/429/erro de rede. Default: 2. */
|
|
16
|
+
maxRetries?: number;
|
|
17
|
+
/** Permite base URL fora da whitelist Zihin (default false → SSRF guard). */
|
|
18
|
+
allowCustomBaseUrl?: boolean;
|
|
19
|
+
/** Permite http:// (apenas dev/local). Default false. */
|
|
20
|
+
allowHttp?: boolean;
|
|
21
|
+
/** Teto de bytes por evento/linha SSE (anti-DoS de memória). Default: 1MB. */
|
|
22
|
+
maxStreamEventBytes?: number;
|
|
23
|
+
/** Teto de bytes do stream inteiro (anti-DoS de memória). Default: 64MB. */
|
|
24
|
+
maxStreamTotalBytes?: number;
|
|
25
|
+
/**
|
|
26
|
+
* Implementação de `fetch` a usar. Default: `globalThis.fetch`. Injete em runtimes onde o
|
|
27
|
+
* fetch não é global (Node <18 com polyfill, testes, proxies).
|
|
28
|
+
*/
|
|
29
|
+
fetch?: typeof fetch;
|
|
30
|
+
/**
|
|
31
|
+
* Observabilidade (opt-in, sem console): chamado antes de cada retentativa.
|
|
32
|
+
* Para logar backoff/timeouts/falhas transitórias em produção externa.
|
|
33
|
+
*/
|
|
34
|
+
onRetry?: (info: RetryInfo) => void;
|
|
35
|
+
/** Observabilidade: chamado quando uma operação falha em definitivo (após retries). */
|
|
36
|
+
onError?: (error: ZihinAgentError) => void;
|
|
37
|
+
}
|
|
38
|
+
export interface RetryInfo {
|
|
39
|
+
/** "POST llm.zihin.ai/api/v2/agents/abc/stream". */
|
|
40
|
+
endpoint: string;
|
|
41
|
+
/** Número da tentativa que acabou de falhar (1 = primeira). */
|
|
42
|
+
attempt: number;
|
|
43
|
+
/** Atraso até a próxima tentativa, em ms. */
|
|
44
|
+
delayMs: number;
|
|
45
|
+
/** Motivo do retry. */
|
|
46
|
+
reason: 'status' | 'network';
|
|
47
|
+
/** Status HTTP, quando `reason === 'status'`. */
|
|
48
|
+
status?: number;
|
|
49
|
+
}
|
|
50
|
+
export type AttachmentType = 'image' | 'audio' | 'document';
|
|
51
|
+
export interface Attachment {
|
|
52
|
+
url: string;
|
|
53
|
+
type: AttachmentType;
|
|
54
|
+
}
|
|
55
|
+
export interface InvokeOptions {
|
|
56
|
+
temperature?: number;
|
|
57
|
+
maxTokens?: number;
|
|
58
|
+
/** Timeout específico desta chamada (ms); sobrepõe o do cliente. */
|
|
59
|
+
timeoutMs?: number;
|
|
60
|
+
/** Just-in-time tool loading (Sprint 33). */
|
|
61
|
+
jitMode?: boolean;
|
|
62
|
+
}
|
|
63
|
+
export interface InvokeAgentParams {
|
|
64
|
+
/** UUID do agente (path :agent_id). */
|
|
65
|
+
agentId: string;
|
|
66
|
+
/** Mensagem ao agente. `message` OU `attachments` é obrigatório. */
|
|
67
|
+
message?: string;
|
|
68
|
+
/** Anexos multimodais. `message` OU `attachments` é obrigatório. */
|
|
69
|
+
attachments?: Attachment[];
|
|
70
|
+
/** Continuidade de conversa (Supabase agent_sessions). */
|
|
71
|
+
sessionId?: string;
|
|
72
|
+
options?: InvokeOptions;
|
|
73
|
+
metadata?: {
|
|
74
|
+
traceId?: string;
|
|
75
|
+
correlationId?: string;
|
|
76
|
+
[k: string]: unknown;
|
|
77
|
+
};
|
|
78
|
+
/** Cancelamento externo. */
|
|
79
|
+
signal?: AbortSignal;
|
|
80
|
+
/**
|
|
81
|
+
* Retém todos os eventos SSE brutos em `AgentResult.raw`. Default: false (economiza memória
|
|
82
|
+
* em runs longos). `streamAgent` sempre entrega os chunks ao vivo, independente disto.
|
|
83
|
+
*/
|
|
84
|
+
includeRaw?: boolean;
|
|
85
|
+
}
|
|
86
|
+
export interface Usage {
|
|
87
|
+
inputTokens?: number;
|
|
88
|
+
outputTokens?: number;
|
|
89
|
+
totalTokens?: number;
|
|
90
|
+
costUsd?: number;
|
|
91
|
+
}
|
|
92
|
+
export interface Source {
|
|
93
|
+
title?: string;
|
|
94
|
+
url?: string;
|
|
95
|
+
[k: string]: unknown;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Resultado final de `invokeAgent`: consolida o evento SSE `response`
|
|
99
|
+
* (content/sources/session_id/blocks) com o evento `metrics` (usage/model).
|
|
100
|
+
*/
|
|
101
|
+
export interface AgentResult {
|
|
102
|
+
content: string;
|
|
103
|
+
sessionId?: string;
|
|
104
|
+
model?: string;
|
|
105
|
+
usage?: Usage;
|
|
106
|
+
sources?: Source[];
|
|
107
|
+
/** Cards/blocos estruturados (SPEC B). */
|
|
108
|
+
blocks?: Array<{
|
|
109
|
+
type: string;
|
|
110
|
+
[k: string]: unknown;
|
|
111
|
+
}>;
|
|
112
|
+
iterations?: number;
|
|
113
|
+
executionTimeMs?: number;
|
|
114
|
+
/** Eventos SSE brutos coletados (para depuração / casos avançados). */
|
|
115
|
+
raw: AgentStreamChunk[];
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Chunk normalizado emitido por `streamAgent`. Mapeia os tipos de evento SSE do BE:
|
|
119
|
+
* metadata, status, attachments, phase, thinking, tool, action_proposed, token,
|
|
120
|
+
* warning, response, metrics.
|
|
121
|
+
*/
|
|
122
|
+
export type AgentStreamChunk = {
|
|
123
|
+
type: 'metadata';
|
|
124
|
+
requestId?: string;
|
|
125
|
+
agentId?: string;
|
|
126
|
+
sessionId?: string;
|
|
127
|
+
data: unknown;
|
|
128
|
+
} | {
|
|
129
|
+
type: 'status';
|
|
130
|
+
phase?: string;
|
|
131
|
+
data: unknown;
|
|
132
|
+
} | {
|
|
133
|
+
type: 'attachments';
|
|
134
|
+
data: unknown;
|
|
135
|
+
} | {
|
|
136
|
+
type: 'phase';
|
|
137
|
+
phase?: string;
|
|
138
|
+
data: unknown;
|
|
139
|
+
} | {
|
|
140
|
+
type: 'thinking';
|
|
141
|
+
thought?: string;
|
|
142
|
+
data: unknown;
|
|
143
|
+
} | {
|
|
144
|
+
type: 'tool';
|
|
145
|
+
tool?: string;
|
|
146
|
+
callId?: string;
|
|
147
|
+
success?: boolean;
|
|
148
|
+
data: unknown;
|
|
149
|
+
} | {
|
|
150
|
+
type: 'action_proposed';
|
|
151
|
+
data: unknown;
|
|
152
|
+
} | {
|
|
153
|
+
type: 'token';
|
|
154
|
+
content: string;
|
|
155
|
+
data: unknown;
|
|
156
|
+
} | {
|
|
157
|
+
type: 'warning';
|
|
158
|
+
message?: string;
|
|
159
|
+
data: unknown;
|
|
160
|
+
} | {
|
|
161
|
+
type: 'response';
|
|
162
|
+
content: string;
|
|
163
|
+
sessionId?: string;
|
|
164
|
+
sources?: Source[];
|
|
165
|
+
blocks?: Array<{
|
|
166
|
+
type: string;
|
|
167
|
+
[k: string]: unknown;
|
|
168
|
+
}>;
|
|
169
|
+
data: unknown;
|
|
170
|
+
} | {
|
|
171
|
+
type: 'metrics';
|
|
172
|
+
usage?: Usage;
|
|
173
|
+
model?: string;
|
|
174
|
+
iterations?: number;
|
|
175
|
+
executionTimeMs?: number;
|
|
176
|
+
data: unknown;
|
|
177
|
+
} | {
|
|
178
|
+
type: 'unknown';
|
|
179
|
+
event: string;
|
|
180
|
+
data: unknown;
|
|
181
|
+
};
|
|
182
|
+
export type TriggerMode = 'sync' | 'async';
|
|
183
|
+
export interface CreateTriggerParams {
|
|
184
|
+
agentId: string;
|
|
185
|
+
/** Nome legível do trigger. */
|
|
186
|
+
name: string;
|
|
187
|
+
/** `async` → 202 + callback; `sync` → 200 + JSON na hora. Default: async. */
|
|
188
|
+
mode?: TriggerMode;
|
|
189
|
+
/** URL que o BE chama com o resultado (obrigatório no modo async). */
|
|
190
|
+
callbackUrl?: string;
|
|
191
|
+
/** Método HTTP do callback. Default: POST. */
|
|
192
|
+
callbackMethod?: 'POST' | 'PUT';
|
|
193
|
+
/** Campo do payload de disparo de onde sai a mensagem do agente. Default: "message". */
|
|
194
|
+
queryField?: string;
|
|
195
|
+
/** Auth de disparo aceita. Default: api_key. */
|
|
196
|
+
dispatchAuth?: 'api_key' | 'signature' | 'none';
|
|
197
|
+
signal?: AbortSignal;
|
|
198
|
+
}
|
|
199
|
+
export interface TriggerRef {
|
|
200
|
+
triggerId: string;
|
|
201
|
+
/** URL completa de disparo: POST {webhookUrl}. */
|
|
202
|
+
webhookUrl: string;
|
|
203
|
+
}
|
|
204
|
+
/** Resultado de findOrCreateTrigger: o ref + se foi recém-criado ou reaproveitado. */
|
|
205
|
+
export interface FindOrCreateResult extends TriggerRef {
|
|
206
|
+
created: boolean;
|
|
207
|
+
}
|
|
208
|
+
/** Trigger como listado/obtido do BE. */
|
|
209
|
+
export interface TriggerInfo {
|
|
210
|
+
id: string;
|
|
211
|
+
agentId?: string;
|
|
212
|
+
name?: string;
|
|
213
|
+
description?: string;
|
|
214
|
+
triggerType?: string;
|
|
215
|
+
enabled?: boolean;
|
|
216
|
+
triggerCount?: number;
|
|
217
|
+
lastError?: string;
|
|
218
|
+
/** Presente para triggers do tipo webhook. */
|
|
219
|
+
webhookUrl?: string;
|
|
220
|
+
}
|
|
221
|
+
export interface ListTriggersParams {
|
|
222
|
+
/** Filtra por agente. */
|
|
223
|
+
agentId?: string;
|
|
224
|
+
/** Filtra por tipo (webhook | db_event | email | schedule). */
|
|
225
|
+
triggerType?: string;
|
|
226
|
+
/** Apenas habilitados. */
|
|
227
|
+
enabledOnly?: boolean;
|
|
228
|
+
signal?: AbortSignal;
|
|
229
|
+
}
|
|
230
|
+
export interface GetTriggerParams {
|
|
231
|
+
triggerId: string;
|
|
232
|
+
signal?: AbortSignal;
|
|
233
|
+
}
|
|
234
|
+
export interface DeleteTriggerParams {
|
|
235
|
+
triggerId: string;
|
|
236
|
+
signal?: AbortSignal;
|
|
237
|
+
}
|
|
238
|
+
export interface DispatchAgentParams {
|
|
239
|
+
triggerId: string;
|
|
240
|
+
/** Payload entregue ao trigger (a mensagem sai do `queryField` configurado). */
|
|
241
|
+
payload: Record<string, unknown>;
|
|
242
|
+
signal?: AbortSignal;
|
|
243
|
+
}
|
|
244
|
+
export interface DispatchResult {
|
|
245
|
+
/** true quando o BE retorna 202 (async) ou 200 (sync). */
|
|
246
|
+
accepted: boolean;
|
|
247
|
+
triggerId?: string;
|
|
248
|
+
executionId?: string;
|
|
249
|
+
/** Presente quando o trigger é `sync`: resposta imediata do agente. */
|
|
250
|
+
agentResponse?: string;
|
|
251
|
+
usage?: Usage;
|
|
252
|
+
raw: unknown;
|
|
253
|
+
}
|
|
254
|
+
export interface ExecutionStatus {
|
|
255
|
+
executionId: string;
|
|
256
|
+
status: string;
|
|
257
|
+
startedAt?: string;
|
|
258
|
+
finishedAt?: string;
|
|
259
|
+
executionTimeMs?: number;
|
|
260
|
+
usage?: Usage;
|
|
261
|
+
result?: string;
|
|
262
|
+
raw: unknown;
|
|
263
|
+
}
|
|
264
|
+
export interface GetExecutionParams {
|
|
265
|
+
triggerId: string;
|
|
266
|
+
executionId: string;
|
|
267
|
+
signal?: AbortSignal;
|
|
268
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tipos do contrato externo Zihin — fonte de verdade verificada contra o BE
|
|
4
|
+
* (zihin-agent-builder/server-llm, 2026-06-28).
|
|
5
|
+
*
|
|
6
|
+
* @module types
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zihin/agent-client",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Núcleo de invocação de agentes Zihin.ai — padrão único para n8n, Paperclip e integrações futuras. Stream direto (SSE bufferizado) + triggers assíncronos com callback.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"zihin",
|
|
7
|
+
"agent",
|
|
8
|
+
"ai",
|
|
9
|
+
"llm",
|
|
10
|
+
"sse",
|
|
11
|
+
"agent-client"
|
|
12
|
+
],
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"homepage": "https://zihin.ai",
|
|
15
|
+
"author": {
|
|
16
|
+
"name": "Zihin AI Inc.",
|
|
17
|
+
"email": "support@zihin.ai"
|
|
18
|
+
},
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "git+https://github.com/zihin-ai/zihin-integrations.git",
|
|
22
|
+
"directory": "packages/agent-client"
|
|
23
|
+
},
|
|
24
|
+
"main": "dist/index.js",
|
|
25
|
+
"types": "dist/index.d.ts",
|
|
26
|
+
"files": [
|
|
27
|
+
"dist"
|
|
28
|
+
],
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=18"
|
|
31
|
+
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public"
|
|
34
|
+
},
|
|
35
|
+
"scripts": {
|
|
36
|
+
"build": "tsc -p tsconfig.json",
|
|
37
|
+
"dev": "tsc -p tsconfig.json --watch",
|
|
38
|
+
"test": "node test/smoke.js",
|
|
39
|
+
"clean": "rm -rf dist",
|
|
40
|
+
"prepublishOnly": "npm run build && npm test"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@types/node": ">=18",
|
|
44
|
+
"typescript": "^5.4.0"
|
|
45
|
+
}
|
|
46
|
+
}
|