fg-tracker-mcp 0.9.0 → 0.10.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/CHANGELOG.md +27 -1
- package/README.md +14 -9
- package/dist/cli.js +1 -0
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +4 -0
- package/dist/database.js +1 -1
- package/dist/database.js.map +1 -1
- package/dist/docs.js +18 -18
- package/dist/docs.js.map +1 -1
- package/dist/format.d.ts +43 -1
- package/dist/format.js +81 -6
- package/dist/format.js.map +1 -1
- package/dist/guide.js +8 -8
- package/dist/guide.js.map +1 -1
- package/dist/infra/handover.js +3 -1
- package/dist/infra/handover.js.map +1 -1
- package/dist/infra/instrument.js +4 -4
- package/dist/infra/instrument.js.map +1 -1
- package/dist/infra/tools.js +4 -4
- package/dist/infra/tools.js.map +1 -1
- package/dist/loadtest/tools.js +3 -3
- package/dist/loadtest/tools.js.map +1 -1
- package/dist/server.d.ts +11 -1
- package/dist/server.js +441 -98
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
# Changelog — fg-tracker-mcp
|
|
2
2
|
|
|
3
|
+
## 0.10.0
|
|
4
|
+
|
|
5
|
+
Reúne o que entrou na `main` desde a 0.9.1 (PRs #11, #12, #13, #15) e a renomeação para FG Tracker. Requer a API com filtros de issues por cursor (PR #12), raízes `custom` (PR #15) e ambientes de monitores e releases (PR #14); com uma API anterior, os parâmetros novos são ignorados ou geram aviso, e as ferramentas antigas continuam funcionando.
|
|
6
|
+
|
|
7
|
+
- **Ferramentas renomeadas de `track_*` para `tracker_*`** (`tracker_status`, `tracker_list_projects`…), seguindo o nome do produto, **FG Tracker**. Os nomes antigos continuam registrados como aliases obsoletos (mesmo schema e handler; a descrição aponta o nome novo): a versão seguinte os desliga por padrão e a 1.0 os remove. `FG_TRACKER_LEGACY_TOOL_NAMES=0` deixa só os nomes novos. Atualize permissões salvas (ex.: `mcp__fg-tracker__track_status` → `mcp__fg-tracker__tracker_status`).
|
|
8
|
+
- Textos, instruções do servidor, prompts e quickstart passam a dizer **FG Tracker**.
|
|
9
|
+
- **Limites de saída explícitos**: a lista principal de logs, traces, endpoints, releases, checks de um monitor e spans de um trace respeita `limit` até `FG_TRACKER_MAX_ITEMS` (default 200, teto 1000). Em logs e traces o `limit` é reduzido na requisição, para o `nextCursor` continuar válido. `tracker_list_projects` e `tracker_list_monitors` não têm `limit`: são cortadas em `FG_TRACKER_MAX_ITEMS` e trazem `total`, `returned` e `truncated`. Arrays internos continuam cortados em 25, agora com `<campo>Omitted`.
|
|
10
|
+
- **Mudanças de formato no JSON** (valem também para os aliases `track_*`):
|
|
11
|
+
- `tracker_list_projects` e `tracker_list_monitors`: `{ total, returned, truncated, items }` (antes, o array direto);
|
|
12
|
+
- `tracker_list_issues`: `{ items, nextCursor, total, counts, limit }` (antes, o array direto), também com uma API que ainda devolve array;
|
|
13
|
+
- `tracker_list_monitors`: cada item deixa de trazer `recent` (os últimos checks) e passa a trazer `lastTraceId`, `lastTraceAt` e `lastRelease`; o histórico de checks fica em `tracker_get_monitor`;
|
|
14
|
+
- `tracker_get_trace`: sai `spansOmitted` e entra `spanPage` (`total`, `matched`, `offset`, `returned`, `nextSpanOffset`), com os spans da página pedida.
|
|
15
|
+
- `tracker_get_trace`: paginação de spans (`spanOffset`/`spanLimit`, 80 por página) e filtros `kind`, `service`, `name`.
|
|
16
|
+
- `tracker_get_monitor` (novo): histórico de checks com `traceId` e `release`; `tracker_list_monitors` mostra id, ambiente e o último trace e aceita `environment`.
|
|
17
|
+
- `tracker_list_traces` aceita `release`, `userId`, `rootKind`, `service` e `env`; `tracker_search_logs` aceita `env` e `requestId`; `tracker_list_releases` aceita `limit` e `environment`.
|
|
18
|
+
- `tracker_get_overview` aceita `service`/`env` e resume os jobs (raízes `custom`); `tracker_list_endpoints` aceita `rootKind`/`service`/`env`.
|
|
19
|
+
- `tracker_list_issues`: `sort`, `type[]`, `severity[]`, `q`, `release`, `limit` (até 200) e `cursor`, com total, contagem por status, `nextCursor` e severidade máxima × última.
|
|
20
|
+
- `tracker_traffic_summary` explica janela vazia (rollup pendente, dados antes da janela ou nenhum pageview); `tracker_status` mostra a validade do token sem exibi-lo.
|
|
21
|
+
- README: configuração com o token pessoal de leitura `fgt_…` (PR #13; não cai com logout). As ferramentas que escrevem (criar projeto, registrar release, infraestrutura, testes de carga) continuam exigindo o token de sessão.
|
|
22
|
+
- `infra_plan_handover` e `infra_open_handover_pr`: a seção do README passa a se chamar "Infraestrutura controlada pelo FG Tracker"; um repositório já transferido, com o título antigo ("pelo FG Track"), não ganha uma segunda.
|
|
23
|
+
- O servidor anuncia a versão do pacote (a 0.9.1 anunciava 0.9.0).
|
|
24
|
+
|
|
25
|
+
## 0.9.1 — 2026-10-01
|
|
26
|
+
|
|
27
|
+
- Atualiza para **FG Track** os nomes de produto exibidos por ferramentas e documentação; nomes das ferramentas e transporte MCP permanecem compatíveis.
|
|
28
|
+
|
|
3
29
|
## 0.9.0 — 2026-09-15
|
|
4
30
|
|
|
5
31
|
- **Domínios permitidos** (CONTRATO.md §25): tool `track_update_allowed_origins { projectId, origins }` substitui a lista de origens de navegador aceitas no CORS de `POST /v1/ingest` (`PATCH /v1/projects/:id` com `allowedOrigins`; owner/admin). A descrição orienta o agente a ler a lista atual com `track_list_projects` e confirmar com o usuário antes de salvar.
|
|
@@ -20,7 +46,7 @@
|
|
|
20
46
|
## 0.5.0 — 2026-09-15
|
|
21
47
|
|
|
22
48
|
- **Infraestrutura AWS** (CONTRATO.md §27.9): tools `infra_connect_account`, `infra_verify_connection`, `infra_discover` (inventário com credenciais locais, somente leitura → snapshot), `infra_analyze_iac` (CDK/SAM/Serverless/Terraform/CI), `infra_assign_resources`, `infra_instrument`, `infra_validate`, `infra_get_diagram`, `infra_plan_handover`, `infra_open_handover_pr` (lock, guard do CI, patch e comandos git/gh — nunca executa push) e `infra_complete_handover`.
|
|
23
|
-
- Prompt `connect-infrastructure` com o roteiro e as regras de segurança (nenhuma mudança na AWS pelo agente; aprovação humana no FG
|
|
49
|
+
- Prompt `connect-infrastructure` com o roteiro e as regras de segurança (nenhuma mudança na AWS pelo agente; aprovação humana no FG Track).
|
|
24
50
|
- Quickstart ganha a seção "Infraestrutura (AWS)". Dependências `@aws-sdk/client-*` e `@aws-sdk/credential-providers`.
|
|
25
51
|
|
|
26
52
|
## 0.4.0 — 2026-09-15
|
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ Claude Code:
|
|
|
9
9
|
```bash
|
|
10
10
|
claude mcp add fg-tracker \
|
|
11
11
|
-e FG_TRACKER_URL=http://localhost:4050 \
|
|
12
|
-
-e FG_TRACKER_TOKEN
|
|
12
|
+
-e FG_TRACKER_TOKEN=fgt_<seu_token_de_leitura> \
|
|
13
13
|
-- npx -y fg-tracker-mcp
|
|
14
14
|
```
|
|
15
15
|
|
|
@@ -23,13 +23,15 @@ Cursor / Windsurf / Claude Desktop (JSON):
|
|
|
23
23
|
"args": ["-y", "fg-tracker-mcp"],
|
|
24
24
|
"env": {
|
|
25
25
|
"FG_TRACKER_URL": "http://localhost:4050",
|
|
26
|
-
"FG_TRACKER_TOKEN": "<
|
|
26
|
+
"FG_TRACKER_TOKEN": "fgt_<seu_token_de_leitura>"
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
+
Gere o token em **Conectar → Usar MCP → Gerar token de leitura para o MCP** (ou em **Conta → Tokens de acesso**). Ele só lê; para o agente criar projetos, registrar releases, mexer em infraestrutura ou iniciar testes de carga, use a configuração com a sessão. Detalhes em `docs/mcp.md` → Token de leitura.
|
|
34
|
+
|
|
33
35
|
Em produção, `FG_TRACKER_URL` é a URL da API mostrada no painel em **Conectar**. O endereço de produção da API é `https://tracker-api.fortground.com.br` (o antigo `track-api.fortground.com.br` continua respondendo).
|
|
34
36
|
|
|
35
37
|
## Variáveis de ambiente
|
|
@@ -37,19 +39,22 @@ Em produção, `FG_TRACKER_URL` é a URL da API mostrada no painel em **Conectar
|
|
|
37
39
|
| variável | default | uso |
|
|
38
40
|
|---|---|---|
|
|
39
41
|
| `FG_TRACKER_URL` | `http://localhost:4050` | URL base da API |
|
|
40
|
-
| `FG_TRACKER_TOKEN` | — | token de
|
|
42
|
+
| `FG_TRACKER_TOKEN` | — | `Authorization: Bearer`: token pessoal de leitura `fgt_…` (painel → Conta → Tokens de acesso; não cai com logout) ou token de sessão, necessário só para as tools que escrevem — projetos, métricas, traces, issues, logs |
|
|
41
43
|
| `FG_TRACKER_API_KEY` | — | chave de projeto (`x-fg-tracker-key`) — opcional, só ingestão |
|
|
42
44
|
| `FG_TRACKER_TIMEOUT_MS` | `15000` | timeout das chamadas HTTP |
|
|
45
|
+
| `FG_TRACKER_MAX_ITEMS` | `200` | teto de itens da lista principal de cada tool (1 a 1000) |
|
|
43
46
|
|
|
44
47
|
Os nomes antigos `STREAD_TRACK_*` continuam lidos quando o nome novo está ausente.
|
|
45
48
|
|
|
46
49
|
## Tools, prompt e resource
|
|
47
50
|
|
|
48
|
-
Tools `
|
|
51
|
+
Tools `tracker_*` (até a 0.9, `track_*`), prompt `instrument-project` e resource `fg-tracker://docs/quickstart`. Os nomes `track_*` continuam registrados como aliases obsoletos (a versão seguinte os desliga por padrão e a 1.0 os remove); `FG_TRACKER_LEGACY_TOOL_NAMES=0` deixa só os nomes novos.
|
|
49
52
|
|
|
50
53
|
Infraestrutura AWS (0.6.0): tools `infra_*` e prompt `connect-infrastructure` — detectar contas/ambientes/regiões nas credenciais locais, conectar cada ambiente, descobrir recursos com credenciais locais (somente leitura), analisar o IaC, instrumentar, validar e gerar o PR de transferência de controle. Nenhuma tool altera recursos na AWS. Detalhes em `docs/mcp.md` → Infraestrutura.
|
|
51
54
|
|
|
52
|
-
|
|
55
|
+
Limites e navegação: as listas respeitam `limit` até `FG_TRACKER_MAX_ITEMS` e preservam o `nextCursor` da API; só arrays internos são cortados em 25 (com `<campo>Omitted`). `tracker_get_trace` pagina os spans (`spanOffset`, `spanLimit`) e filtra por `kind`, `service` e `name`; `tracker_get_monitor { projectId, monitorId | slug }` traz o histórico de checks com `traceId` e `release`; `tracker_list_traces` aceita `release`/`userId` e `tracker_search_logs` aceita `env`/`requestId`; `tracker_status` mostra quando o token expira. Detalhes em `docs/mcp.md` → Limites de saída.
|
|
56
|
+
|
|
57
|
+
Domínios permitidos (0.9.0): `tracker_update_allowed_origins { projectId, origins }` substitui as origens de navegador aceitas no CORS da ingestão (`PATCH /v1/projects/:id { allowedOrigins }`); `tracker_list_projects` mostra a lista atual — leia antes e confirme com o usuário.
|
|
53
58
|
|
|
54
59
|
Simulação de ambiente (0.8.0): prompt `create-load-test` e tools `loadtest_*` (CONTRATO.md §28.8):
|
|
55
60
|
|
|
@@ -74,13 +79,13 @@ O pacote foi renomeado de `stread-track-mcp` (última versão no npm: 0.2.0) par
|
|
|
74
79
|
| nome do servidor MCP `stread-track` | `fg-tracker` | renomeie a entrada na config do cliente quando quiser |
|
|
75
80
|
| resource `stread-track://docs/quickstart` | `fg-tracker://docs/quickstart` | a URI antiga continua registrada (mesmo conteúdo) |
|
|
76
81
|
| header `x-stread-track-key` | `x-fg-tracker-key` | a API aceita os dois |
|
|
77
|
-
|
|
|
82
|
+
| prompt `instrument-project` | inalterado | — |
|
|
78
83
|
|
|
79
84
|
Na config do cliente: troque `"stread-track": { "command": "npx", "args": ["-y", "stread-track-mcp"] }` por `"fg-tracker": { "command": "npx", "args": ["-y", "fg-tracker-mcp"] }` e renomeie as variáveis de `env`.
|
|
80
85
|
|
|
81
86
|
## Database detection (0.2.0)
|
|
82
87
|
|
|
83
|
-
`
|
|
88
|
+
`tracker_detect_databases { projectPath, serviceName }` inspects local Node project
|
|
84
89
|
manifests and imports without opening .env/credential files, following symlinks,
|
|
85
90
|
executing project scripts or reading dependencies. It returns candidate engines,
|
|
86
91
|
driver adapters, source references and an implementation guide. Multiple databases
|
|
@@ -88,8 +93,8 @@ are reported separately; a dependency alone is not proof of production use.
|
|
|
88
93
|
|
|
89
94
|
The coding agent must verify client creation sites, apply the appropriate SDK
|
|
90
95
|
adapter, preserve transactions/pool settings, and validate real `db.query` spans
|
|
91
|
-
under an HTTP request with `
|
|
92
|
-
`
|
|
96
|
+
under an HTTP request with `tracker_get_trace`. Detect before requesting
|
|
97
|
+
`tracker_instrumentation_guide { framework, databaseDriver, projectId }`.
|
|
93
98
|
|
|
94
99
|
Native adapters: pg and Postgres.js (including Drizzle). Generic adapters cover
|
|
95
100
|
synchronous, Promise and error-first callback operations; explicit completion
|
package/dist/cli.js
CHANGED
|
@@ -20,6 +20,7 @@ if (argv.includes('--help') || argv.includes('-h')) {
|
|
|
20
20
|
' FG_TRACKER_TOKEN token de sessão (Authorization: Bearer) — projetos, métricas, logs',
|
|
21
21
|
' FG_TRACKER_API_KEY chave de projeto (x-fg-tracker-key) — opcional, só ingestão',
|
|
22
22
|
' FG_TRACKER_TIMEOUT_MS timeout das chamadas HTTP (default 15000)',
|
|
23
|
+
' FG_TRACKER_LEGACY_TOOL_NAMES=0 não registra os aliases obsoletos track_* das ferramentas tracker_*',
|
|
23
24
|
' (os nomes antigos STREAD_TRACK_* ainda são lidos como fallback; serão removidos na 1.0)',
|
|
24
25
|
'',
|
|
25
26
|
'Instalação no Claude Code:',
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;GAIG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAExE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;QACE,GAAG,WAAW,QAAQ,cAAc,uCAAuC;QAC3E,EAAE;QACF,uFAAuF;QACvF,+BAA+B;QAC/B,EAAE;QACF,wBAAwB;QACxB,qEAAqE;QACrE,6FAA6F;QAC7F,sFAAsF;QACtF,oEAAoE;QACpE,2FAA2F;QAC3F,EAAE;QACF,4BAA4B;QAC5B,sHAAsH;QACtH,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AACD,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,cAAc,IAAI,CAAC,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;AAC/B,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AACvC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AAExC,mEAAmE;AACnE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;AAC5D,IAAI,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;IACxC,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,uEAAuE,CAAC,CAAC;AACrH,CAAC;AACD,OAAO,CAAC,KAAK,CAAC,wBAAwB,MAAM,CAAC,OAAO,YAAY,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,aAAa,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;AAEhJ,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAEhC,MAAM,QAAQ,GAAG,GAAS,EAAE;IAC1B,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC;AACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;GAIG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAExE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;QACE,GAAG,WAAW,QAAQ,cAAc,uCAAuC;QAC3E,EAAE;QACF,uFAAuF;QACvF,+BAA+B;QAC/B,EAAE;QACF,wBAAwB;QACxB,qEAAqE;QACrE,6FAA6F;QAC7F,sFAAsF;QACtF,oEAAoE;QACpE,uGAAuG;QACvG,2FAA2F;QAC3F,EAAE;QACF,4BAA4B;QAC5B,sHAAsH;QACtH,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AACD,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,cAAc,IAAI,CAAC,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;AAC/B,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AACvC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AAExC,mEAAmE;AACnE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;AAC5D,IAAI,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;IACxC,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,uEAAuE,CAAC,CAAC;AACrH,CAAC;AACD,OAAO,CAAC,KAAK,CAAC,wBAAwB,MAAM,CAAC,OAAO,YAAY,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,aAAa,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;AAEhJ,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAEhC,MAAM,QAAQ,GAAG,GAAS,EAAE;IAC1B,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC;AACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC"}
|
package/dist/client.d.ts
CHANGED
|
@@ -77,6 +77,10 @@ export interface TracesResponse {
|
|
|
77
77
|
items: Array<{
|
|
78
78
|
traceId: string;
|
|
79
79
|
name: string;
|
|
80
|
+
/** Kind, serviço e ambiente da raiz que representa o trace (APIs anteriores não mandam). */
|
|
81
|
+
kind?: string;
|
|
82
|
+
service?: string | null;
|
|
83
|
+
environment?: string | null;
|
|
80
84
|
method: string | null;
|
|
81
85
|
statusCode: number | null;
|
|
82
86
|
startedAt: string;
|
package/dist/database.js
CHANGED
|
@@ -114,6 +114,6 @@ export function databaseGuide(driver, serviceName) {
|
|
|
114
114
|
snippet = `const result = tracker.traceDatabaseSync(\n { system: '${system}', operation: 'query', statement: 'select * from tracks where id = ?' },\n () => statement.get(id),\n);`;
|
|
115
115
|
else
|
|
116
116
|
snippet = `const result = await tracker.traceDatabase(\n { system: '${system}', operation: 'repository.operation' },\n () => clientOperation(), // await the real operation; consume cursor/stream here if applicable\n);\n// For callback drivers: await a Promise settled by the operation's final callback.\n// For sync drivers: traceDatabaseSync preserves a synchronous result and throws.`;
|
|
117
|
-
return `# Database instrumentation: ${driver}\n\nInstall fg-tracker-sdk@^0.4.0 (formerly stread-track-sdk). Reuse the request tracker (${serviceName}); do not create a second tracker for the database.\n\n\`\`\`ts\n${snippet}\n\`\`\`\n\nUse the existing connection settings, pool sizes and transaction boundaries. Generic adapters support any engine when the operation completion is supplied explicitly; they do not auto-understand every driver. Bind values, result rows, documents, connection strings and credentials must never be exported. SQL spans use normalized statements; non-SQL operations use static names. Do not instrument both ORM and driver for the same operation.\n\nImplement these changes at the actual client/repository initialization sites, not merely in an unused example file. Run a real request, use
|
|
117
|
+
return `# Database instrumentation: ${driver}\n\nInstall fg-tracker-sdk@^0.4.0 (formerly stread-track-sdk). Reuse the request tracker (${serviceName}); do not create a second tracker for the database.\n\n\`\`\`ts\n${snippet}\n\`\`\`\n\nUse the existing connection settings, pool sizes and transaction boundaries. Generic adapters support any engine when the operation completion is supplied explicitly; they do not auto-understand every driver. Bind values, result rows, documents, connection strings and credentials must never be exported. SQL spans use normalized statements; non-SQL operations use static names. Do not instrument both ORM and driver for the same operation.\n\nImplement these changes at the actual client/repository initialization sites, not merely in an unused example file. Run a real request, use tracker_get_trace and verify db.query spans share its traceId and have parentSpanId. Verify rollback, errors and parallel requests. Logs-only frontends must not create a tracker. Confirm completion only after the runtime exports the linked query spans.\n`;
|
|
118
118
|
}
|
|
119
119
|
//# sourceMappingURL=database.js.map
|
package/dist/database.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
|
package/dist/docs.js
CHANGED
|
@@ -11,8 +11,8 @@ export function quickstartMarkdown(endpoint) {
|
|
|
11
11
|
APM leve para Node: traces (Express/NestJS/Next.js/Fastify), queries pg, chamadas HTTP de saída, logs e detecção automática de **N+1**, **loops**, **endpoints lentos** e **erros**. API em \`${endpoint}\` (Swagger em \`${endpoint}/docs\`).
|
|
12
12
|
|
|
13
13
|
## 1. Projeto e chave
|
|
14
|
-
- \`
|
|
15
|
-
- \`
|
|
14
|
+
- \`tracker_list_projects\` lista os projetos do usuário do token; \`tracker_create_project { name }\` cria um e devolve \`apiKey\` (\`stk_...\`).
|
|
15
|
+
- \`tracker_update_allowed_origins { projectId, origins }\` substitui os domínios permitidos (CORS do SDK de navegador); leia a lista atual em \`tracker_list_projects\` e confirme com o usuário antes.
|
|
16
16
|
- A chave vai no header \`x-fg-tracker-key\` da ingestão e em \`FG_TRACKER_KEY\` no app instrumentado.
|
|
17
17
|
|
|
18
18
|
## 2. SDK (\`fg-tracker-sdk\`)
|
|
@@ -26,7 +26,7 @@ const tracker = createTracker({
|
|
|
26
26
|
});
|
|
27
27
|
app.use(tracker.express()); // Express / NestJS — PRIMEIRO middleware (continua traceparent, lê req.user.id)
|
|
28
28
|
app.use(routes); app.use(tracker.expressErrorHandler()); // exceção real no span → issues por causa, não por status
|
|
29
|
-
tracker.instrumentPg(pool); // pg only; use
|
|
29
|
+
tracker.instrumentPg(pool); // pg only; use tracker_detect_databases for other drivers // pg.Pool → spans db.query
|
|
30
30
|
const fetchTracked = tracker.wrapFetch(); // fetch → spans http.client
|
|
31
31
|
export const GET = tracker.wrapNextRoute(async (req) => Response.json({ ok: true })); // Next.js
|
|
32
32
|
await tracker.span('custom', 'send-email', async (span) => { /* ... */ });
|
|
@@ -35,7 +35,7 @@ await tracker.checkIn('backup-diario', () => runBackup(), { intervalSeconds: 864
|
|
|
35
35
|
await tracker.shutdown(); // no SIGTERM
|
|
36
36
|
\`\`\`
|
|
37
37
|
No deploy: \`npx fg-tracker-release --service minha-app --previous-sha $PREV\` registra a release com commits/arquivos (commits suspeitos nas issues, comparação de latência entre versões).
|
|
38
|
-
Use \`
|
|
38
|
+
Use \`tracker_instrumentation_guide { framework, projectId }\` para o passo a passo completo por framework com a chave real.
|
|
39
39
|
|
|
40
40
|
## 3. Logs
|
|
41
41
|
\`\`\`ts
|
|
@@ -64,13 +64,13 @@ curl -X POST ${endpoint}/v1/logs -H 'content-type: application/json' -H 'x-fg-tr
|
|
|
64
64
|
Kinds de span: \`http.server\` (raiz por request), \`db.query\` (nome = SQL normalizado), \`http.client\`, \`custom\`.
|
|
65
65
|
|
|
66
66
|
## 5. Verificar e explorar
|
|
67
|
-
- \`
|
|
68
|
-
- \`
|
|
69
|
-
- \`
|
|
70
|
-
- \`
|
|
71
|
-
- \`
|
|
72
|
-
- \`
|
|
73
|
-
- \`
|
|
67
|
+
- \`tracker_verify_ingest { projectId }\` — confirma spans/logs recentes.
|
|
68
|
+
- \`tracker_get_overview { projectId, range }\` — requests, erro, p50/p95/p99, apdex, top lentos.
|
|
69
|
+
- \`tracker_list_endpoints\`, \`tracker_list_issues\`, \`tracker_list_traces\` → \`tracker_get_trace { traceId }\` (waterfall, 80 spans por página: \`spanOffset\`, filtros \`kind\`/\`service\`/\`name\`).
|
|
70
|
+
- \`tracker_search_logs { projectId, q, service, level, env, requestId, range }\` — sintaxe: texto livre, \`"frase"\`, \`key=value\`, \`~substring\`.
|
|
71
|
+
- \`tracker_get_issue { projectId, issueId }\` — ocorrências, usuários afetados, releases, regressões e commits/PRs suspeitos.
|
|
72
|
+
- \`tracker_list_releases { projectId, version? }\`, \`tracker_register_release\`, \`tracker_endpoint_history { projectId, name, days }\` — saúde por deploy e latência por rota ao longo do tempo.
|
|
73
|
+
- \`tracker_list_providers { projectId, range }\` (chamadas de saída por host) e \`tracker_list_monitors { projectId }\` (uptime e jobs) → \`tracker_get_monitor { projectId, monitorId }\` (histórico de checks com o trace de cada execução).
|
|
74
74
|
|
|
75
75
|
## 6. Detectores (rodam na ingestão)
|
|
76
76
|
| tipo | regra |
|
|
@@ -108,20 +108,20 @@ ${fw} ${proj}
|
|
|
108
108
|
|
|
109
109
|
1. **Detectar framework e logger.** Leia \`package.json\` (dependências: express, @nestjs/core, next, fastify; pino, winston; pg, drizzle-orm, kysely, knex) e o ponto de entrada (\`src/main.ts\`, \`src/index.ts\`, \`app/\`). Anote: framework HTTP, logger, os drivers e os pontos de criação dos clientes, gerenciador de pacotes (lockfile) e como o app é iniciado.
|
|
110
110
|
|
|
111
|
-
2. **Detectar bancos.** Chame \`
|
|
111
|
+
2. **Detectar bancos.** Chame \`tracker_detect_databases { projectPath, serviceName }\`. Confirme os imports e pontos de criação retornados; siga o adapter de cada driver ativo. Não suponha pg.Pool para Postgres.js, Prisma ou outro driver.
|
|
112
112
|
|
|
113
|
-
2b. **Checar o FG Tracker.** Chame \`
|
|
113
|
+
2b. **Checar o FG Tracker.** Chame \`tracker_status\`. Se a API estiver fora do ar ou faltar \`FG_TRACKER_TOKEN\`, pare e explique ao usuário o que configurar.
|
|
114
114
|
|
|
115
|
-
3. **Escolher ou criar o projeto.** Chame \`
|
|
115
|
+
3. **Escolher ou criar o projeto.** Chame \`tracker_list_projects\`. Se já existe um projeto com o nome esperado, use-o; senão \`tracker_create_project { name }\`. Guarde \`projectId\` e \`apiKey\`. Nunca imprima a chave em commits/logs — só em \`.env\` (confira que \`.env\` está no \`.gitignore\`; adicione a variável em \`.env.example\` sem o valor).
|
|
116
116
|
|
|
117
|
-
4. **Obter o guia.** Chame \`
|
|
117
|
+
4. **Obter o guia.** Chame \`tracker_instrumentation_guide { framework, projectId }\` para o framework detectado. Se o app tem pino ou winston, chame também com \`framework: "pino"\` ou \`"winston"\`.
|
|
118
118
|
|
|
119
119
|
5. **Instalar o SDK.** \`pnpm add fg-tracker-sdk\` (ou npm/yarn conforme o lockfile). Se o projeto já usa \`stread-track-sdk\`, troque pelo \`fg-tracker-sdk\` (mesma API).
|
|
120
120
|
|
|
121
121
|
6. **Aplicar a instrumentação** seguindo o guia, com edits mínimos e idiomáticos ao projeto:
|
|
122
122
|
- criar o tracker (um por processo) com \`apiKey\` de \`process.env.FG_TRACKER_KEY\` e \`endpoint\` de \`FG_TRACKER_URL\`;
|
|
123
123
|
- registrar \`tracker.express()\` como PRIMEIRO middleware (Express/Nest), \`wrapNextRoute\` nos route handlers (Next) ou o hook \`onRequest\` (Fastify);
|
|
124
|
-
- aplicar o adapter retornado por \`
|
|
124
|
+
- aplicar o adapter retornado por \`tracker_detect_databases\` ao cliente real antes de passá-lo ao ORM; para drivers desconhecidos envolver a conclusão da operação com \`traceDatabase\` ou \`traceDatabaseSync\`;
|
|
125
125
|
- \`tracker.wrapFetch()\` para chamadas HTTP de saída relevantes;
|
|
126
126
|
- transport de logs (pino/winston/nest) com \`createLogShipper\`;
|
|
127
127
|
- \`tracker.shutdown()\` no encerramento (SIGTERM / \`onApplicationShutdown\` / \`onClose\`).
|
|
@@ -130,11 +130,11 @@ ${fw} ${proj}
|
|
|
130
130
|
|
|
131
131
|
8. **Rodar e gerar tráfego.** Inicie o app, faça algumas requisições reais (curl nas rotas principais, inclusive uma que consulte o banco) e aguarde ~3 s.
|
|
132
132
|
|
|
133
|
-
9. **Verificar.** Chame \`
|
|
133
|
+
9. **Verificar.** Chame \`tracker_verify_ingest { projectId }\`. Se chegaram spans (e logs, quando configurados), mostre um resumo com \`tracker_get_overview { projectId, range: "15m" }\` e \`tracker_list_issues\`.
|
|
134
134
|
|
|
135
135
|
10. **Corrigir.** Se nada chegou: confira a chave (o SDK loga "4xx" uma vez quando ela é inválida), a ordem do middleware, se o tracker foi criado antes do app subir, se o processo consegue alcançar ${endpoint} (\`curl ${endpoint}/v1/health\`) e se há \`enabled: false\`. Ajuste e repita o passo 8.
|
|
136
136
|
|
|
137
|
-
Ao final, liste os arquivos alterados, as variáveis adicionadas e o resultado de \`
|
|
137
|
+
Ao final, liste os arquivos alterados, as variáveis adicionadas e o resultado de \`tracker_verify_ingest\`.`;
|
|
138
138
|
}
|
|
139
139
|
// Database driver detection must precede selection of an integration adapter.
|
|
140
140
|
//# sourceMappingURL=docs.js.map
|
package/dist/docs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,8BAA8B,CAAC;AAC7D,iGAAiG;AACjG,MAAM,CAAC,MAAM,qBAAqB,GAAG,gCAAgC,CAAC;AAEtE,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,OAAO;;gMAEuL,QAAQ,oBAAoB,QAAQ;;;;;;;;;;;oDAWhL,QAAQ;;;;;;;;;;;;;;;;;;;;;wDAqBJ,QAAQ;;;;;;;;;eASjD,QAAQ;;;;;;;;eAQR,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCtB,CAAC;AACF,CAAC;AAOD,MAAM,UAAU,uBAAuB,CAAC,IAA0B,EAAE,QAAgB;IAClF,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,mCAAmC,IAAI,CAAC,SAAS,8CAA8C,CAAC,CAAC,CAAC,2CAA2C,CAAC;IAC1K,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW;QAC3B,CAAC,CAAC,qCAAqC,IAAI,CAAC,WAAW,mBAAmB;QAC1E,CAAC,CAAC,0GAA0G,CAAC;IAE/G,OAAO,qEAAqE,QAAQ;;EAEpF,EAAE,IAAI,IAAI;;;;;;;;;;;;;;;;;;;;;;;;wFAwB4E,QAAQ;;;;;;yMAMyG,QAAQ,YAAY,QAAQ;;
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,8BAA8B,CAAC;AAC7D,iGAAiG;AACjG,MAAM,CAAC,MAAM,qBAAqB,GAAG,gCAAgC,CAAC;AAEtE,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,OAAO;;gMAEuL,QAAQ,oBAAoB,QAAQ;;;;;;;;;;;oDAWhL,QAAQ;;;;;;;;;;;;;;;;;;;;;wDAqBJ,QAAQ;;;;;;;;;eASjD,QAAQ;;;;;;;;eAQR,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCtB,CAAC;AACF,CAAC;AAOD,MAAM,UAAU,uBAAuB,CAAC,IAA0B,EAAE,QAAgB;IAClF,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,mCAAmC,IAAI,CAAC,SAAS,8CAA8C,CAAC,CAAC,CAAC,2CAA2C,CAAC;IAC1K,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW;QAC3B,CAAC,CAAC,qCAAqC,IAAI,CAAC,WAAW,mBAAmB;QAC1E,CAAC,CAAC,0GAA0G,CAAC;IAE/G,OAAO,qEAAqE,QAAQ;;EAEpF,EAAE,IAAI,IAAI;;;;;;;;;;;;;;;;;;;;;;;;wFAwB4E,QAAQ;;;;;;yMAMyG,QAAQ,YAAY,QAAQ;;4GAEzH,CAAC;AAC7G,CAAC;AAED,8EAA8E"}
|
package/dist/format.d.ts
CHANGED
|
@@ -7,8 +7,15 @@ export interface ToolText {
|
|
|
7
7
|
isError?: boolean;
|
|
8
8
|
}
|
|
9
9
|
export declare const MAX_SERIES_POINTS = 48;
|
|
10
|
+
/** Arrays internos (amostras, ocorrências, checks dentro de um objeto). */
|
|
10
11
|
export declare const MAX_LIST_ITEMS = 25;
|
|
11
12
|
export declare const MAX_TRACE_SPANS = 80;
|
|
13
|
+
/** Default de FG_TRACKER_MAX_ITEMS: teto da lista principal de uma ferramenta. */
|
|
14
|
+
export declare const DEFAULT_MAX_ITEMS = 200;
|
|
15
|
+
/** Maior valor aceito em FG_TRACKER_MAX_ITEMS e nos `limit` sem teto próprio da API. */
|
|
16
|
+
export declare const MAX_ITEMS_CEILING = 1000;
|
|
17
|
+
/** Linhas de prévia no texto de uma lista longa; o JSON que segue traz todos os itens. */
|
|
18
|
+
export declare const PREVIEW_LINES = 25;
|
|
12
19
|
export declare function text(value: string): ToolText;
|
|
13
20
|
export declare function json(value: unknown, preface?: string): ToolText;
|
|
14
21
|
export declare function errorResult(err: unknown): ToolText;
|
|
@@ -20,8 +27,43 @@ export declare function truncateList<T>(list: T[], max?: number): {
|
|
|
20
27
|
items: T[];
|
|
21
28
|
truncated: number;
|
|
22
29
|
};
|
|
23
|
-
|
|
30
|
+
export interface MaxItemsSetting {
|
|
31
|
+
value: number;
|
|
32
|
+
/** Presente quando FG_TRACKER_MAX_ITEMS foi ignorado ou reduzido. */
|
|
33
|
+
warning?: string;
|
|
34
|
+
}
|
|
35
|
+
/** Teto da lista principal: FG_TRACKER_MAX_ITEMS (inteiro de 1 a 1000, default 200). */
|
|
36
|
+
export declare function maxItemsFromEnv(env?: NodeJS.ProcessEnv): MaxItemsSetting;
|
|
37
|
+
/** Limite efetivo da lista principal: o `limit` pedido, até `maxItems`. */
|
|
38
|
+
export declare function clampLimit(requested: number, maxItems: number): {
|
|
39
|
+
limit: number;
|
|
40
|
+
capped: boolean;
|
|
41
|
+
};
|
|
42
|
+
/** Aviso para quando `clampLimit` reduziu o pedido. */
|
|
43
|
+
export declare function cappedNote(requested: number, limit: number): string;
|
|
44
|
+
export interface ListPage {
|
|
45
|
+
total: number;
|
|
46
|
+
returned: number;
|
|
47
|
+
truncated: boolean;
|
|
48
|
+
items: unknown[];
|
|
49
|
+
}
|
|
50
|
+
/** Prévia em texto de uma lista: até PREVIEW_LINES linhas e, se cortou, onde está o resto. */
|
|
51
|
+
export declare function preview(lines: string[]): string;
|
|
52
|
+
/**
|
|
53
|
+
* Lista principal de uma API sem paginação: os primeiros `limit` itens (cada um
|
|
54
|
+
* compactado) e quanto ficou de fora. Não há cursor: para ver o resto, aumente
|
|
55
|
+
* `limit` ou filtre.
|
|
56
|
+
*/
|
|
57
|
+
export declare function listPage(list: unknown[], limit: number): ListPage;
|
|
58
|
+
/**
|
|
59
|
+
* Compacta recursivamente: `series` viram amostras e arrays internos de um objeto
|
|
60
|
+
* ficam com até 25 itens (`<campo>Omitted` diz quantos saíram). Um array passado
|
|
61
|
+
* direto também é cortado em 25; a lista principal de uma ferramenta deve ser
|
|
62
|
+
* limitada antes (API ou `listPage`) e compactada item a item.
|
|
63
|
+
*/
|
|
24
64
|
export declare function compact(value: unknown, depth?: number): unknown;
|
|
25
65
|
export declare function ms(value: number | null | undefined): string;
|
|
26
66
|
export declare function pct(value: number | null | undefined): string;
|
|
67
|
+
/** Tempo até `iso` ("em 3.5 d"); no passado vira `ago`. */
|
|
68
|
+
export declare function until(iso: string, now?: number): string;
|
|
27
69
|
export declare function ago(iso: string, now?: number): string;
|
package/dist/format.js
CHANGED
|
@@ -1,17 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Helpers de saída: compactação de payloads grandes
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Helpers de saída: compactação de payloads grandes e conversão para o formato
|
|
3
|
+
* de resultado do MCP. Regras (docs/mcp.md, "Limites de saída"):
|
|
4
|
+
* - lista principal de uma ferramenta: respeita `limit` até FG_TRACKER_MAX_ITEMS
|
|
5
|
+
* (default 200, teto 1000), cortada na API (cursor) ou por `listPage`, sempre
|
|
6
|
+
* com metadados de truncamento;
|
|
7
|
+
* - arrays internos de um objeto: ≤ 25 itens, com `<campo>Omitted`;
|
|
8
|
+
* - séries ≤ 48 pontos; traces ≤ 80 spans por página (tracker_get_trace pagina).
|
|
5
9
|
*/
|
|
6
|
-
import { TrackApiError } from './client.js';
|
|
10
|
+
import { TrackApiError, readEnv } from './client.js';
|
|
7
11
|
export const MAX_SERIES_POINTS = 48;
|
|
12
|
+
/** Arrays internos (amostras, ocorrências, checks dentro de um objeto). */
|
|
8
13
|
export const MAX_LIST_ITEMS = 25;
|
|
9
14
|
export const MAX_TRACE_SPANS = 80;
|
|
15
|
+
/** Default de FG_TRACKER_MAX_ITEMS: teto da lista principal de uma ferramenta. */
|
|
16
|
+
export const DEFAULT_MAX_ITEMS = 200;
|
|
17
|
+
/** Maior valor aceito em FG_TRACKER_MAX_ITEMS e nos `limit` sem teto próprio da API. */
|
|
18
|
+
export const MAX_ITEMS_CEILING = 1000;
|
|
19
|
+
/** Linhas de prévia no texto de uma lista longa; o JSON que segue traz todos os itens. */
|
|
20
|
+
export const PREVIEW_LINES = 25;
|
|
21
|
+
/** Acima disso o JSON sai sem indentação: a mesma lista ocupa bem menos da saída do cliente MCP. */
|
|
22
|
+
const PRETTY_JSON_MAX_CHARS = 20_000;
|
|
10
23
|
export function text(value) {
|
|
11
24
|
return { content: [{ type: 'text', text: value }] };
|
|
12
25
|
}
|
|
13
26
|
export function json(value, preface) {
|
|
14
|
-
const
|
|
27
|
+
const pretty = JSON.stringify(value, null, 2);
|
|
28
|
+
const body = pretty !== undefined && pretty.length > PRETTY_JSON_MAX_CHARS ? JSON.stringify(value) : pretty;
|
|
15
29
|
return text(preface ? `${preface}\n\n${body}` : body);
|
|
16
30
|
}
|
|
17
31
|
export function errorResult(err) {
|
|
@@ -45,7 +59,48 @@ export function truncateList(list, max = MAX_LIST_ITEMS) {
|
|
|
45
59
|
return { items: list, truncated: 0 };
|
|
46
60
|
return { items: list.slice(0, max), truncated: list.length - max };
|
|
47
61
|
}
|
|
48
|
-
/**
|
|
62
|
+
/** Teto da lista principal: FG_TRACKER_MAX_ITEMS (inteiro de 1 a 1000, default 200). */
|
|
63
|
+
export function maxItemsFromEnv(env = process.env) {
|
|
64
|
+
const raw = readEnv('MAX_ITEMS', env);
|
|
65
|
+
if (raw === undefined)
|
|
66
|
+
return { value: DEFAULT_MAX_ITEMS };
|
|
67
|
+
const parsed = Number(raw);
|
|
68
|
+
if (!/^\d+$/.test(raw) || !Number.isSafeInteger(parsed) || parsed < 1) {
|
|
69
|
+
return { value: DEFAULT_MAX_ITEMS, warning: `FG_TRACKER_MAX_ITEMS="${raw.slice(0, 20)}" é inválido (use um inteiro de 1 a ${MAX_ITEMS_CEILING}); usando ${DEFAULT_MAX_ITEMS}.` };
|
|
70
|
+
}
|
|
71
|
+
if (parsed > MAX_ITEMS_CEILING)
|
|
72
|
+
return { value: MAX_ITEMS_CEILING, warning: `FG_TRACKER_MAX_ITEMS=${parsed} passa do teto; usando ${MAX_ITEMS_CEILING}.` };
|
|
73
|
+
return { value: parsed };
|
|
74
|
+
}
|
|
75
|
+
/** Limite efetivo da lista principal: o `limit` pedido, até `maxItems`. */
|
|
76
|
+
export function clampLimit(requested, maxItems) {
|
|
77
|
+
return requested > maxItems ? { limit: maxItems, capped: true } : { limit: requested, capped: false };
|
|
78
|
+
}
|
|
79
|
+
/** Aviso para quando `clampLimit` reduziu o pedido. */
|
|
80
|
+
export function cappedNote(requested, limit) {
|
|
81
|
+
return requested > limit ? ` limit ${requested} reduzido para ${limit} por FG_TRACKER_MAX_ITEMS.` : '';
|
|
82
|
+
}
|
|
83
|
+
/** Prévia em texto de uma lista: até PREVIEW_LINES linhas e, se cortou, onde está o resto. */
|
|
84
|
+
export function preview(lines) {
|
|
85
|
+
if (lines.length <= PREVIEW_LINES)
|
|
86
|
+
return lines.join('\n');
|
|
87
|
+
return [...lines.slice(0, PREVIEW_LINES), `… prévia de ${PREVIEW_LINES} de ${lines.length}; todos os ${lines.length} estão no JSON abaixo.`].join('\n');
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Lista principal de uma API sem paginação: os primeiros `limit` itens (cada um
|
|
91
|
+
* compactado) e quanto ficou de fora. Não há cursor: para ver o resto, aumente
|
|
92
|
+
* `limit` ou filtre.
|
|
93
|
+
*/
|
|
94
|
+
export function listPage(list, limit) {
|
|
95
|
+
const items = list.slice(0, limit).map((item) => compact(item));
|
|
96
|
+
return { total: list.length, returned: items.length, truncated: items.length < list.length, items };
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Compacta recursivamente: `series` viram amostras e arrays internos de um objeto
|
|
100
|
+
* ficam com até 25 itens (`<campo>Omitted` diz quantos saíram). Um array passado
|
|
101
|
+
* direto também é cortado em 25; a lista principal de uma ferramenta deve ser
|
|
102
|
+
* limitada antes (API ou `listPage`) e compactada item a item.
|
|
103
|
+
*/
|
|
49
104
|
export function compact(value, depth = 0) {
|
|
50
105
|
if (Array.isArray(value)) {
|
|
51
106
|
const { items, truncated } = truncateList(value);
|
|
@@ -69,6 +124,12 @@ export function compact(value, depth = 0) {
|
|
|
69
124
|
else if (k === 'sparkline' && Array.isArray(v)) {
|
|
70
125
|
out[k] = v; // 24 pontos, já pequeno
|
|
71
126
|
}
|
|
127
|
+
else if (Array.isArray(v)) {
|
|
128
|
+
const { items, truncated } = truncateList(v);
|
|
129
|
+
out[k] = items.map((item) => compact(item, depth + 1));
|
|
130
|
+
if (truncated > 0)
|
|
131
|
+
out[`${k}Omitted`] = truncated;
|
|
132
|
+
}
|
|
72
133
|
else {
|
|
73
134
|
out[k] = compact(v, depth + 1);
|
|
74
135
|
}
|
|
@@ -87,6 +148,20 @@ export function pct(value) {
|
|
|
87
148
|
return '—';
|
|
88
149
|
return `${(value * 100).toFixed(2)}%`;
|
|
89
150
|
}
|
|
151
|
+
/** Tempo até `iso` ("em 3.5 d"); no passado vira `ago`. */
|
|
152
|
+
export function until(iso, now = Date.now()) {
|
|
153
|
+
const t = Date.parse(iso);
|
|
154
|
+
if (Number.isNaN(t))
|
|
155
|
+
return iso;
|
|
156
|
+
if (t <= now)
|
|
157
|
+
return ago(iso, now);
|
|
158
|
+
const s = Math.round((t - now) / 1000);
|
|
159
|
+
if (s < 3600)
|
|
160
|
+
return `em ${Math.max(1, Math.round(s / 60))} min`;
|
|
161
|
+
if (s < 86400)
|
|
162
|
+
return `em ${(s / 3600).toFixed(1)} h`;
|
|
163
|
+
return `em ${(s / 86400).toFixed(1)} d`;
|
|
164
|
+
}
|
|
90
165
|
export function ago(iso, now = Date.now()) {
|
|
91
166
|
const t = Date.parse(iso);
|
|
92
167
|
if (Number.isNaN(t))
|
package/dist/format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
|
package/dist/guide.js
CHANGED
|
@@ -32,7 +32,7 @@ function header(input, title) {
|
|
|
32
32
|
lines.push(`Projeto: **${input.projectName}** (\`${input.projectId}\`). A chave abaixo é a chave real deste projeto — trate como segredo.`);
|
|
33
33
|
}
|
|
34
34
|
else {
|
|
35
|
-
lines.push(`Nenhum projeto informado: o código usa o placeholder \`${PLACEHOLDER_KEY}\`. Crie um projeto com \`
|
|
35
|
+
lines.push(`Nenhum projeto informado: o código usa o placeholder \`${PLACEHOLDER_KEY}\`. Crie um projeto com \`tracker_create_project { name }\` (ou use \`tracker_list_projects\`) e chame este guia de novo com \`projectId\` para receber a chave real.`);
|
|
36
36
|
}
|
|
37
37
|
lines.push('', `API do FG Tracker: \`${input.endpoint}\`.`, '');
|
|
38
38
|
return lines.join('\n');
|
|
@@ -153,9 +153,9 @@ function logsSection(input, service, logger) {
|
|
|
153
153
|
else if (logger === 'winston')
|
|
154
154
|
parts.push(winston);
|
|
155
155
|
else if (logger === 'nest')
|
|
156
|
-
parts.push(nest, '', 'Se o app usa pino ou winston, chame `
|
|
156
|
+
parts.push(nest, '', 'Se o app usa pino ou winston, chame `tracker_instrumentation_guide { framework: "pino" | "winston" }` para o transport correspondente.');
|
|
157
157
|
else
|
|
158
|
-
parts.push(raw, '', 'Com pino ou winston, chame `
|
|
158
|
+
parts.push(raw, '', 'Com pino ou winston, chame `tracker_instrumentation_guide { framework: "pino" | "winston" }` para o transport pronto.');
|
|
159
159
|
parts.push('', 'Contrato (§11): o shipper envia lotes para `POST /v1/logs` com o header `x-fg-tracker-key`; níveis `trace|debug|info|warn|error|fatal`; `traceId`/`spanId` são preenchidos automaticamente quando o log acontece dentro de um request instrumentado pelo tracker. Se os exports `fg-tracker-sdk/pino` e `fg-tracker-sdk/winston` ainda não existirem na versão instalada do SDK, envie os logs direto para `POST /v1/logs` (veja o resource `fg-tracker://docs/quickstart`).');
|
|
160
160
|
return parts.join('\n');
|
|
161
161
|
}
|
|
@@ -167,14 +167,14 @@ function verifySection(input) {
|
|
|
167
167
|
'2. Aguarde ~3 s (flush a cada 2 s).',
|
|
168
168
|
];
|
|
169
169
|
if (input.projectId) {
|
|
170
|
-
lines.push(`3. Chame \`
|
|
170
|
+
lines.push(`3. Chame \`tracker_verify_ingest { projectId: "${input.projectId}" }\` — deve reportar spans (e logs) recentes.`);
|
|
171
171
|
}
|
|
172
172
|
else {
|
|
173
|
-
lines.push('3. Chame `
|
|
173
|
+
lines.push('3. Chame `tracker_verify_ingest { projectId }` — deve reportar spans (e logs) recentes.');
|
|
174
174
|
}
|
|
175
175
|
lines.push('4. Se nada chegou: confira `FG_TRACKER_KEY` (4xx no envio = chave inválida, o SDK loga uma vez), se a API responde em `' +
|
|
176
176
|
input.endpoint +
|
|
177
|
-
'/v1/health`, e se `app.use(tracker.express())` é o PRIMEIRO middleware.', '', 'Depois, `
|
|
177
|
+
'/v1/health`, e se `app.use(tracker.express())` é o PRIMEIRO middleware.', '', 'Depois, `tracker_get_overview`, `tracker_list_endpoints` e `tracker_list_issues` mostram o que foi coletado.');
|
|
178
178
|
return lines.join('\n');
|
|
179
179
|
}
|
|
180
180
|
export function buildGuide(input) {
|
|
@@ -459,7 +459,7 @@ export function buildGuide(input) {
|
|
|
459
459
|
'## 4. Correlação com traces',
|
|
460
460
|
'Se o processo também usa o tracker (`createTracker` + `tracker.express()`), cada log emitido durante um request ganha `traceId`/`spanId` e aparece com link para o trace no console. Sem tracker, os logs chegam normalmente, só sem correlação.',
|
|
461
461
|
'',
|
|
462
|
-
'## 5. Sintaxe de busca (`
|
|
462
|
+
'## 5. Sintaxe de busca (`tracker_search_logs` e página /logs)',
|
|
463
463
|
'- texto livre → busca full-text (`websearch_to_tsquery`); `"frase exata"` entre aspas;',
|
|
464
464
|
'- `key=value` → filtra `context->>key`;',
|
|
465
465
|
'- `~trecho` → ILIKE (substring, via trigram).',
|
|
@@ -480,7 +480,7 @@ export function buildGuide(input) {
|
|
|
480
480
|
'## 4. Correlação com traces',
|
|
481
481
|
'Se o processo também usa o tracker (`createTracker` + `tracker.express()`), cada log emitido durante um request ganha `traceId`/`spanId`. Chame `logShipper.flush()` (ou `tracker.shutdown()` + `logShipper.shutdown()`) no encerramento para não perder o último lote.',
|
|
482
482
|
'',
|
|
483
|
-
'## 5. Sintaxe de busca (`
|
|
483
|
+
'## 5. Sintaxe de busca (`tracker_search_logs` e página /logs)',
|
|
484
484
|
'- texto livre → full-text; `"frase exata"` entre aspas; `key=value` → `context->>key`; `~trecho` → substring.',
|
|
485
485
|
'',
|
|
486
486
|
verifySection(input),
|