mitra-interactions-sdk 1.0.60-beta.23 → 1.0.60-beta.25
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 +55 -48
- package/dist/index.d.mts +216 -262
- package/dist/index.d.ts +216 -262
- package/dist/index.js +625 -776
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +625 -776
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -244,123 +244,130 @@ const result2 = await listRecordsMitra({
|
|
|
244
244
|
});
|
|
245
245
|
```
|
|
246
246
|
|
|
247
|
-
## Agent Chat (
|
|
247
|
+
## Agent Chat (copilot)
|
|
248
248
|
|
|
249
|
-
Chat com o agente de IA embarcado
|
|
249
|
+
Chat com o agente de IA embarcado. **REST-first**: credenciais e modelos vão pela **BFF no `baseURL` normal** (`/agentAiShortcut/*` — herdam `fetchWithRefresh` e CORS); chats e histórico via `{origin}/copilot/api/v1`. **Só o prompt é streaming** — um WebSocket por task em `wss://{origin}/copilot/ws/tasks/{taskId}?token=JWT`, aberto pela SDK quando a conversa começa (WS não passa por preflight de CORS).
|
|
250
250
|
|
|
251
|
-
|
|
251
|
+
Precisa de `token` e `baseURL` configurados (o login já deixa pronto). O transporte do prompt aceita `transport: 'ws' | 'http'` — `'ws'` é o default; `'http'` é reservado pra ambientes serverless e hoje lança erro claro (o backend ainda não expõe prompt por HTTP).
|
|
252
252
|
|
|
253
253
|
### Gerenciar os chats — `manageAgentChatMitra`
|
|
254
254
|
|
|
255
|
-
|
|
255
|
+
Tudo HTTP: listar (com filtros), renomear e deletar (= arquivar).
|
|
256
256
|
|
|
257
257
|
```typescript
|
|
258
258
|
import { manageAgentChatMitra } from 'mitra-interactions-sdk';
|
|
259
259
|
|
|
260
|
-
const chats
|
|
261
|
-
const
|
|
262
|
-
const
|
|
260
|
+
const chats = await manageAgentChatMitra({ action: 'list' }); // AgentChat[]
|
|
261
|
+
const doAgente = await manageAgentChatMitra({ action: 'list', agentId: 'uuid-do-agente' }); // só os chats de um agente business
|
|
262
|
+
const busca = await manageAgentChatMitra({ action: 'list', search: 'vendas', page: 0, size: 20 });
|
|
263
|
+
const renamed = await manageAgentChatMitra({ action: 'rename', taskId, name: 'Novo nome' });
|
|
264
|
+
const deleted = await manageAgentChatMitra({ action: 'delete', taskId }); // arquiva (some da lista default)
|
|
263
265
|
```
|
|
264
266
|
|
|
265
|
-
- `action: 'list'` → `AgentChat[]` — `{ id, name, agentType
|
|
266
|
-
- `action: 'rename'` → `{ taskId, name }`
|
|
267
|
-
- `action: 'delete'` → `{ taskId, deleted }`
|
|
267
|
+
- `action: 'list'` → `AgentChat[]` — `{ id, name, agentType, agentId, archived, createdAt, updatedAt }`. Filtros: `agentId?`, `archived?`, `search?`, `page?`, `size?`.
|
|
268
|
+
- `action: 'rename'` → `{ taskId, name }` (PATCH `/tasks/{id}`)
|
|
269
|
+
- `action: 'delete'` → `{ taskId, deleted }` (PATCH `/tasks/{id}/archive` — o histórico não é destruído)
|
|
268
270
|
|
|
269
271
|
### Abrir uma session — `getAgentTaskMitra`
|
|
270
272
|
|
|
271
|
-
Retorna uma `AgentTaskSession` que encapsula
|
|
273
|
+
Retorna uma `AgentTaskSession` que encapsula o ciclo de vida do chat. A task é criada via REST (`POST /tasks`) no primeiro `send()`; o WS da task conecta em seguida. Abrir a mesma `taskId` duas vezes devolve a **mesma** instância (cache).
|
|
272
274
|
|
|
273
275
|
```typescript
|
|
274
276
|
import { getAgentTaskMitra } from 'mitra-interactions-sdk';
|
|
275
277
|
|
|
276
|
-
// Chat novo — taskId é preenchido
|
|
277
|
-
const session = getAgentTaskMitra({ create: true, agentType: '
|
|
278
|
+
// Chat novo — taskId é preenchido no primeiro send() (evento taskCreated)
|
|
279
|
+
const session = getAgentTaskMitra({ create: true, agentType: 'ANTHROPIC_CLAUDE_OPUS', name: 'Meu chat' });
|
|
278
280
|
|
|
279
|
-
// Chat
|
|
280
|
-
const
|
|
281
|
+
// Chat com um agente business (system prompt + SFs do agente; token escopado)
|
|
282
|
+
const sales = getAgentTaskMitra({ create: true, agentId: 'uuid-do-agente' });
|
|
283
|
+
|
|
284
|
+
// Chat existente
|
|
285
|
+
const existing = getAgentTaskMitra({ taskId: 'uuid-da-task' });
|
|
281
286
|
await existing.loadHistory({ limit: 50 });
|
|
282
287
|
```
|
|
283
288
|
|
|
284
|
-
`getAgentTaskMitra({ create: true,
|
|
285
|
-
|
|
286
|
-
**Agente business (`agentId`)**: passe o `id` de um agente business (CRUD via `mitra-sdk`: `listAgentsMitra` e família) pra sessão subir com o system prompt do agente e um token escopado — as tools enxergam só as Server Functions daquele agente. Sem `agentId`, é o chat de desenvolvimento de sempre.
|
|
289
|
+
`getAgentTaskMitra({ create: true, agentType?, name?, agentId?, transport? })` ou `getAgentTaskMitra({ taskId, transport? })`.
|
|
287
290
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
const sales = getAgentTaskMitra({ create: true, agentId: 'uuid-do-agente' });
|
|
291
|
-
```
|
|
291
|
+
- `agentType` vem de `manageAgentCredentialMitra({ action: 'list_models' })` — ex.: `'ANTHROPIC_CLAUDE_OPUS'`, `'OPENAI_GPT5'`, `'GOOGLE_GEMINI_PRO'`. Default: `'ANTHROPIC_CLAUDE_OPUS'`.
|
|
292
|
+
- **`agentId`**: id de um agente business (CRUD via `mitra-sdk`: `listAgentsMitra` e família). A sessão sobe com o system prompt do agente e um token escopado — as tools enxergam só as Server Functions dele. Sem `agentId`, é o chat de desenvolvimento.
|
|
292
293
|
|
|
293
294
|
#### Propriedades (somente leitura)
|
|
294
295
|
|
|
295
296
|
| Propriedade | Tipo | Descrição |
|
|
296
297
|
|-------------|------|-----------|
|
|
297
298
|
| `taskId` | `string \| null` | `null` até o primeiro `send()` num chat novo |
|
|
298
|
-
| `task` | `AgentChat \| null` | Metadados do chat
|
|
299
|
+
| `task` | `AgentChat \| null` | Metadados do chat |
|
|
299
300
|
| `isNew` | `boolean` | Se foi aberto via `{ create: true }` |
|
|
300
301
|
| `status` | `AgentTaskStatus` | `opening` · `idle` · `streaming` · `cancelled` · `error` · `closed` |
|
|
301
|
-
| `history` | `AgentMessage[]` | Histórico carregado |
|
|
302
|
+
| `history` | `AgentMessage[]` | Histórico carregado (`{ id, sender, type, content, createdAt }`) |
|
|
302
303
|
| `content` | `string` | Conteúdo acumulado do turno atual |
|
|
303
304
|
| `queue` | `QueuedItem[]` | Mensagens enfileiradas (enviadas enquanto streamava) |
|
|
304
305
|
|
|
305
306
|
#### Métodos
|
|
306
307
|
|
|
307
|
-
- `send(prompt
|
|
308
|
-
- `cancel()` → `Promise<void>` —
|
|
309
|
-
- `
|
|
308
|
+
- `send(prompt)` → `void` — dispara um turno (WS `message`). Se já está streamando, **enfileira** (FIFO, máx 10).
|
|
309
|
+
- `cancel()` → `Promise<void>` — interrompe o turno atual (WS `interrupt`, safety net de 10s).
|
|
310
|
+
- `respondApproval(approved)` → `void` — responde um pedido de aprovação do agente (WS `approval_response`).
|
|
311
|
+
- `loadHistory({ limit? })` → `Promise<AgentMessage[]>` — histórico persistido via REST.
|
|
310
312
|
- `editQueueItem(id, text)` / `removeQueueItem(id)` / `clearQueue()` — manipulam a fila.
|
|
311
313
|
- `on(event, handler)` → função de unsubscribe — assina eventos da session.
|
|
312
|
-
- `close()` — encerra a session e libera os listeners.
|
|
314
|
+
- `close()` — encerra a session, fecha o WS e libera os listeners.
|
|
313
315
|
|
|
314
316
|
#### Eventos (`session.on`)
|
|
315
317
|
|
|
316
|
-
`statusChange` · `historyLoaded` · `taskCreated` · `turnStart` · `delta` · `tool` · `turnEnd` · `cancelled` · `queueChange` · `error
|
|
318
|
+
`statusChange` · `historyLoaded` · `taskCreated` · `turnStart` · `delta` (`{ delta, kind: 'text' | 'thinking' }`) · `tool` (`{ tool, toolId?, input?, content?, phase: 'call' | 'result' }`) · `turnEnd` (`{ content }`) · `cancelled` · `queueChange` · `error` (`{ code?, error }`) · `raw` (eventos não mapeados do stream, ex.: `workspace`).
|
|
317
319
|
|
|
318
320
|
```typescript
|
|
319
321
|
const session = getAgentTaskMitra({ create: true });
|
|
320
322
|
|
|
321
|
-
session.on('delta', ({ delta, kind }) => process.stdout.write(delta));
|
|
322
|
-
session.on('tool', ({ tool,
|
|
323
|
+
session.on('delta', ({ delta, kind }) => { if (kind === 'text') process.stdout.write(delta); });
|
|
324
|
+
session.on('tool', ({ tool, phase }) => console.log('🔧', phase, tool));
|
|
323
325
|
session.on('turnEnd', ({ content }) => console.log('\n✓ fim do turno'));
|
|
324
326
|
session.on('taskCreated', ({ task }) => console.log('chat criado:', task.id));
|
|
325
327
|
session.on('error', ({ error }) => console.error(error));
|
|
326
328
|
|
|
327
329
|
session.send('Analise estas vendas e gere um resumo');
|
|
328
|
-
|
|
329
|
-
// Modelo por turno (sobrescreve o default da session)
|
|
330
|
-
session.send('Refaça com mais detalhes', { modelId: 'subscription:anthropic:claude-opus-4-7' });
|
|
331
330
|
```
|
|
332
331
|
|
|
333
332
|
### Credenciais do agente — `manageAgentCredentialMitra`
|
|
334
333
|
|
|
335
|
-
Função única
|
|
334
|
+
Função única, toda HTTP **via BFF** (`/agentAiShortcut/listProviders`, `saveCredential`, `oauthStart`...). Providers: `'anthropic'`, `'openai'`, `'google'`. API key via `save`/`remove`; OAuth via `auth`/`connect`; device flow via `device_auth`/`device_poll`.
|
|
335
|
+
|
|
336
|
+
**`projectId` é obrigatório** em todas as actions (opcional na chamada se já veio do `configureSdkMitra`) — é ele que define de qual app é a credencial; o BFF resolve `projectId → appId` e cunha o token de app.
|
|
336
337
|
|
|
337
|
-
> 🔒
|
|
338
|
+
> 🔒 Tokens/keys nunca voltam crus — o backend devolve só status, e-mail da conta e a key mascarada.
|
|
338
339
|
|
|
339
340
|
```typescript
|
|
340
341
|
import { manageAgentCredentialMitra } from 'mitra-interactions-sdk';
|
|
341
342
|
|
|
342
|
-
//
|
|
343
|
+
// Status por provider (pra montar a UI de conexão)
|
|
343
344
|
const { providers } = await manageAgentCredentialMitra({ action: 'list_providers' });
|
|
345
|
+
// AgentCredentialStatus[]: { provider, connected, credentialType, accountEmail, maskedApiKey }
|
|
344
346
|
|
|
345
|
-
//
|
|
346
|
-
const {
|
|
347
|
+
// Modelos selecionáveis → use o agentType em getAgentTaskMitra
|
|
348
|
+
const { models } = await manageAgentCredentialMitra({ action: 'list_models' });
|
|
349
|
+
// AgentModel[]: { model, name, provider, agentType }
|
|
347
350
|
|
|
348
351
|
// API key
|
|
349
|
-
await manageAgentCredentialMitra({ action: '
|
|
350
|
-
await manageAgentCredentialMitra({ action: 'save', target: 'glm', key: '...' });
|
|
352
|
+
await manageAgentCredentialMitra({ action: 'save', target: 'openai', key: 'sk-...' });
|
|
351
353
|
await manageAgentCredentialMitra({ action: 'remove', target: 'anthropic' });
|
|
352
354
|
```
|
|
353
355
|
|
|
354
|
-
|
|
356
|
+
OAuth (ex.: Anthropic) — `auth` devolve o que mostrar, `connect` finaliza:
|
|
355
357
|
|
|
356
358
|
```typescript
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
await manageAgentCredentialMitra({ action: 'connect', target: '
|
|
359
|
+
const { authUrl, state } = await manageAgentCredentialMitra({ action: 'auth', target: 'anthropic' });
|
|
360
|
+
// app abre authUrl; usuário autoriza e copia o código
|
|
361
|
+
const { connected, email } = await manageAgentCredentialMitra({ action: 'connect', target: 'anthropic', code, state });
|
|
362
|
+
```
|
|
360
363
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
+
Device flow (ex.: OpenAI) — mostre `userCode` + `verificationUri` e faça polling:
|
|
365
|
+
|
|
366
|
+
```typescript
|
|
367
|
+
const { deviceAuthId, userCode, verificationUri, intervalSeconds } =
|
|
368
|
+
await manageAgentCredentialMitra({ action: 'device_auth', target: 'openai' });
|
|
369
|
+
// app mostra: "abra {verificationUri} e digite {userCode}"; depois, a cada intervalSeconds:
|
|
370
|
+
const { connected } = await manageAgentCredentialMitra({ action: 'device_poll', target: 'openai', deviceAuthId });
|
|
364
371
|
```
|
|
365
372
|
|
|
366
373
|
## Tipos TypeScript
|