tracer-sh 0.3.4 → 0.3.6
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 +76 -81
- package/package.json +1 -1
- package/packages/server/dist/{chunk-XFJVNMJI.js → chunk-LDYGR5S3.js} +5 -5
- package/packages/server/dist/{domain-knowledge-6MEHHDWL.js → domain-knowledge-KF3XTKCK.js} +1 -1
- package/packages/server/dist/index.js +118 -42
- package/packages/web/dist/assets/{SearchableSelect-CN8LoaWs.js → SearchableSelect-VoTpUxSB.js} +1 -1
- package/packages/web/dist/assets/{Settings-CFRIDe39.js → Settings-CgEySEhC.js} +1 -1
- package/packages/web/dist/assets/{highlighted-body-OFNGDK62-BfZzzZ78.js → highlighted-body-OFNGDK62-GpbSyT-_.js} +1 -1
- package/packages/web/dist/assets/{index-CDazY975.js → index-BsLO7f3R.js} +9 -9
- package/packages/web/dist/assets/{mermaid-GHXKKRXX-BsXccgqR.js → mermaid-GHXKKRXX-CiyDBVIR.js} +3 -3
- package/packages/web/dist/index.html +1 -1
package/README.md
CHANGED
|
@@ -10,14 +10,32 @@ During an incident, most time goes to switching between observability tools
|
|
|
10
10
|
and gathering context — not fixing the problem. Tracer connects your providers
|
|
11
11
|
to a single AI chat interface so you find the root cause in one place.
|
|
12
12
|
|
|
13
|
+
## How it works
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
┌─────────┐ your API keys ┌──────────────────┐
|
|
17
|
+
│ │ ◄──────────────────────────►│ Observability │
|
|
18
|
+
│ Tracer │ │ Providers │
|
|
19
|
+
│ local │ your API keys ├──────────────────┤
|
|
20
|
+
│ │ ◄──────────────────────────►│ LLM Providers │
|
|
21
|
+
└─────────┘ └──────────────────┘
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Everything runs on your machine. Your data stays local in an encrypted SQLite
|
|
25
|
+
database. Tracer talks directly to your provider and LLM APIs using your own
|
|
26
|
+
API keys — no intermediary servers, no telemetry, no data leaves your machine
|
|
27
|
+
except the API calls you control.
|
|
28
|
+
|
|
13
29
|
## Debug
|
|
14
30
|
|
|
15
|
-
Chat with an AI agent that queries your providers in real
|
|
31
|
+
Chat with an AI agent that queries your providers in real time and finds root
|
|
32
|
+
causes — all from a single conversation.
|
|
16
33
|
|
|
17
|
-
- Natural language investigation
|
|
34
|
+
- Natural language investigation across all connected providers
|
|
18
35
|
- Live query execution with inline charts
|
|
36
|
+
- Attach evidence to any message — screenshots, log files, code, PDFs — via paperclip, drag-and-drop, or paste
|
|
19
37
|
- Post-mortem reports — download as Markdown to share
|
|
20
|
-
- Share investigations as PNG — drop the exported image
|
|
38
|
+
- Share investigations as PNG — drop the exported image onto the sidebar to re-open the full analysis
|
|
21
39
|
- Agent memory across sessions
|
|
22
40
|
- Session history and cost tracking
|
|
23
41
|
|
|
@@ -25,65 +43,26 @@ Chat with an AI agent that queries your providers in real-time and finds root ca
|
|
|
25
43
|
|
|
26
44
|
## Settings
|
|
27
45
|
|
|
28
|
-
Configure providers, LLM credentials,
|
|
46
|
+
Configure providers, LLM credentials, integrations, and agent behavior. Each
|
|
47
|
+
provider setup includes connectivity tests and guidance on creating
|
|
48
|
+
least-privilege API keys.
|
|
29
49
|
|
|
30
|
-
- Anthropic (Claude)
|
|
50
|
+
- LLM backends: Anthropic (Claude), Google (Gemini via AI Studio or Vertex AI)
|
|
31
51
|
- Data provider setup with connectivity tests
|
|
52
|
+
- Jira integration
|
|
32
53
|
- Thinking budgets and step limits
|
|
33
54
|
- Agent memory management
|
|
34
55
|
|
|
35
56
|

|
|
36
57
|
|
|
37
|
-
##
|
|
38
|
-
|
|
39
|
-
```
|
|
40
|
-
┌─────────┐ your API keys ┌──────────────────┐
|
|
41
|
-
│ │ ◄──────────────────────────►│ Observability │
|
|
42
|
-
│ Tracer │ │ Providers │
|
|
43
|
-
│ local │ your API keys ├──────────────────┤
|
|
44
|
-
│ │ ◄──────────────────────────►│ LLM Providers │
|
|
45
|
-
└─────────┘ └──────────────────┘
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
Everything runs on your machine. Your data stays local in an encrypted SQLite
|
|
49
|
-
database. Tracer talks directly to your provider and LLM APIs using your own API
|
|
50
|
-
keys — no intermediary servers, no data leaves your machine except API calls you control.
|
|
51
|
-
|
|
52
|
-
## Security
|
|
58
|
+
## Supported providers
|
|
53
59
|
|
|
54
|
-
|
|
55
|
-
integration tokens, chat history, and agent memory — sit behind several independent
|
|
56
|
-
layers, so no single failure exposes them.
|
|
57
|
-
|
|
58
|
-
- **Local-only.** Nothing leaves your machine except the provider and LLM API calls you configure. No Tracer servers, no telemetry, no sync.
|
|
59
|
-
- **Encrypted at rest.** The entire SQLite database is encrypted with SQLCipher (AES-256). On disk it is ciphertext — a stolen laptop, a copied `.db` file, or a backup is useless without the key.
|
|
60
|
-
- **Machine-bound, user-scoped key.** A random 256-bit key is generated on first run and stored in your OS keychain (macOS Keychain, Windows Credential Manager, or Linux Secret Service). It never leaves the machine and is scoped to your OS user, so another user on the same box can't read the database either.
|
|
61
|
-
- **Hardened on disk.** The data directory is created owner-only (`0700`); if no keychain is available, the fallback key file is written `0600`.
|
|
62
|
-
|
|
63
|
-
**Automatic and transparent.** New installs are encrypted from the first run. An
|
|
64
|
-
existing plaintext database is migrated on the first launch of this version — the
|
|
65
|
-
encrypted copy is verified and atomically swapped in, and no plaintext is left behind.
|
|
66
|
-
There's nothing to enable.
|
|
67
|
-
|
|
68
|
-
**CI / headless.** Where no keychain exists, supply the key yourself with
|
|
69
|
-
`TRACER_DB_KEY` — a 64-character hex string (e.g. `openssl rand -hex 32`).
|
|
70
|
-
|
|
71
|
-
**What this protects — and what it doesn't.** Encryption at rest defends the file
|
|
72
|
-
(theft, backups, copies) and blocks other users on the same machine. It does **not**
|
|
73
|
-
defend against you, the logged-in user, running code as yourself: the app must hold the
|
|
74
|
-
key at runtime to read its own data, so anyone controlling your user session can too. No
|
|
75
|
-
local-first app escapes this — it's the honest boundary of on-device encryption.
|
|
60
|
+
**Data:** New Relic (NRQL), Google Cloud (Logs, Traces, Metrics, Errors), PostHog (HogQL)
|
|
76
61
|
|
|
77
|
-
**
|
|
78
|
-
OS reinstall or keychain reset) makes the database unrecoverable. For a safety net, back
|
|
79
|
-
up the `tracer-sh` / `db-key` keychain value somewhere secure.
|
|
62
|
+
**LLM:** Anthropic (Claude), Google (Gemini — AI Studio or Vertex AI)
|
|
80
63
|
|
|
81
|
-
**
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
sqlite3 ~/.tracer/data/tracer.db '.tables' # → "Error: file is not a database"
|
|
85
|
-
head -c 16 ~/.tracer/data/tracer.db | od -c # → random bytes, not "SQLite format 3"
|
|
86
|
-
```
|
|
64
|
+
**Integrations:** Jira — the agent reads issue details and comment threads for
|
|
65
|
+
incident context, and posts comments back only when you explicitly ask.
|
|
87
66
|
|
|
88
67
|
## Install
|
|
89
68
|
|
|
@@ -95,8 +74,6 @@ Requires [Node.js 20+](https://nodejs.org/).
|
|
|
95
74
|
npx tracer-sh@latest
|
|
96
75
|
```
|
|
97
76
|
|
|
98
|
-
`npx` is ephemeral — it runs the newest published version on every launch and isn't a pinned version.
|
|
99
|
-
|
|
100
77
|
**Install a pinned copy:**
|
|
101
78
|
|
|
102
79
|
```bash
|
|
@@ -104,42 +81,69 @@ npm install -g tracer-sh
|
|
|
104
81
|
tracer-sh
|
|
105
82
|
```
|
|
106
83
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
84
|
+
Either way, Tracer stays on its installed version until you explicitly update:
|
|
85
|
+
click the version in the sidebar and hit **Update now**, or re-run the install
|
|
86
|
+
command. Note that bare `npx tracer-sh` reuses npm's cached copy and does NOT
|
|
87
|
+
check for new releases — use the in-app update or `npx tracer-sh@latest` to get
|
|
88
|
+
the newest version.
|
|
110
89
|
|
|
111
|
-
Open `http://localhost:3579`, go to **Settings** to add your API keys and
|
|
90
|
+
Open `http://localhost:3579`, go to **Settings** to add your API keys and
|
|
91
|
+
choose an LLM — done.
|
|
112
92
|
|
|
113
93
|
## Headless / CLI
|
|
114
94
|
|
|
115
|
-
Run an investigation from the terminal and get back the final analysis — so
|
|
95
|
+
Run an investigation from the terminal and get back the final analysis — so
|
|
96
|
+
other tools and agents (including Claude Code) can drive Tracer:
|
|
116
97
|
|
|
117
98
|
```bash
|
|
118
99
|
tracer-sh analyze "Why did checkout error rate spike after 14:00 UTC?"
|
|
119
100
|
```
|
|
120
101
|
|
|
121
|
-
|
|
102
|
+
- `--session <id>` — continue a prior run with full context
|
|
103
|
+
- `--provider <name>` — scope the investigation to one provider
|
|
104
|
+
- `--json` — full response envelope (session id, queries, usage)
|
|
105
|
+
- `tracer-sh --help` — usage for every subcommand
|
|
122
106
|
|
|
123
|
-
|
|
107
|
+
Requires a running server.
|
|
124
108
|
|
|
125
|
-
|
|
109
|
+
## Security
|
|
126
110
|
|
|
127
|
-
|
|
111
|
+
Your secrets — API keys, integration tokens, chat history, agent memory — sit
|
|
112
|
+
behind several independent layers:
|
|
128
113
|
|
|
129
|
-
|
|
114
|
+
- **Local-only.** No Tracer servers, no telemetry, no sync.
|
|
115
|
+
- **Encrypted at rest.** The entire SQLite database is encrypted with SQLCipher (AES-256). A stolen laptop, a copied `.db` file, or a backup is ciphertext without the key.
|
|
116
|
+
- **Machine-bound, user-scoped key.** A random 256-bit key is generated on first run and stored in your OS keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service). It never leaves the machine and other OS users can't read it.
|
|
117
|
+
- **Hardened on disk.** The data directory is owner-only (`0700`); a keychain-less fallback key file is `0600`.
|
|
118
|
+
|
|
119
|
+
Encryption is automatic — new installs are encrypted from the first run, and
|
|
120
|
+
an existing plaintext database is migrated in place on first launch. In CI or
|
|
121
|
+
headless environments without a keychain, supply the key yourself via
|
|
122
|
+
`TRACER_DB_KEY` (64-char hex, e.g. `openssl rand -hex 32`).
|
|
123
|
+
|
|
124
|
+
Two honest caveats. Encryption at rest defends the file, not your live
|
|
125
|
+
session: anyone running code as your OS user can read what the app can read —
|
|
126
|
+
that is the boundary of every local-first app. And the key lives only in your
|
|
127
|
+
keychain, so losing it (OS reinstall, keychain reset) makes the database
|
|
128
|
+
unrecoverable; back up the `tracer-sh` / `db-key` keychain value if you want
|
|
129
|
+
a safety net.
|
|
130
|
+
|
|
131
|
+
Verify it yourself:
|
|
130
132
|
|
|
131
133
|
```bash
|
|
132
|
-
|
|
134
|
+
sqlite3 ~/.tracer/data/tracer.db '.tables' # → "Error: file is not a database"
|
|
135
|
+
head -c 16 ~/.tracer/data/tracer.db | od -c # → random bytes, not "SQLite format 3"
|
|
133
136
|
```
|
|
134
137
|
|
|
135
|
-
|
|
138
|
+
## Uninstall
|
|
136
139
|
|
|
137
140
|
```bash
|
|
138
|
-
|
|
141
|
+
npm uninstall -g tracer-sh
|
|
142
|
+
rm -rf ~/.tracer # also removes settings, sessions, API keys
|
|
139
143
|
```
|
|
140
144
|
|
|
141
|
-
The database encryption key
|
|
142
|
-
account `db-key`).
|
|
145
|
+
The database encryption key lives in your OS keychain (service `tracer-sh`,
|
|
146
|
+
account `db-key`). On macOS:
|
|
143
147
|
|
|
144
148
|
```bash
|
|
145
149
|
security delete-generic-password -s tracer-sh -a db-key
|
|
@@ -156,19 +160,10 @@ security delete-generic-password -s tracer-sh -a db-key
|
|
|
156
160
|
|
|
157
161
|
## Contributing
|
|
158
162
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
**Report bugs or request features** — [open an issue](https://github.com/sholub-dev/tracer/issues). Include steps to reproduce for bugs, or a clear description for feature requests.
|
|
162
|
-
|
|
163
|
-
**Submit a code change:**
|
|
164
|
-
|
|
165
|
-
1. Fork this repo
|
|
166
|
-
2. Create a branch (`git checkout -b fix/my-fix`)
|
|
167
|
-
3. Make your changes and commit
|
|
168
|
-
4. Push to your fork (`git push origin fix/my-fix`)
|
|
169
|
-
5. Open a pull request against `master`
|
|
163
|
+
**Report bugs or request features** — [open an issue](https://github.com/sholub-dev/tracer/issues) with steps to reproduce or a clear description.
|
|
170
164
|
|
|
171
|
-
|
|
165
|
+
**Submit a code change** — fork, branch, and open a pull request against
|
|
166
|
+
`master`. All PRs require approval before merging.
|
|
172
167
|
|
|
173
168
|
## License
|
|
174
169
|
|
package/package.json
CHANGED
|
@@ -154,14 +154,14 @@ _Flag if:_ Count is more than 20% lower than the baseline.
|
|
|
154
154
|
---
|
|
155
155
|
|
|
156
156
|
### Reporting Format
|
|
157
|
-
After completing all applicable checks, report results as a table
|
|
157
|
+
After completing all applicable checks, report results as a table. (This verdict summary is the ONE permitted markdown table \u2014 each check's underlying data must still be shown via tool calls.)
|
|
158
158
|
|
|
159
159
|
| Check | Current | Baseline (1w ago) | Delta | Status |
|
|
160
160
|
|-------|---------|-------------------|-------|--------|
|
|
161
|
-
| Response Time P99 | ... | ... | +X% |
|
|
162
|
-
| Transaction Error Rate | ... | ... | +X% |
|
|
163
|
-
| External Services Errors | ... | ... | ... |
|
|
164
|
-
| Success Transactions | ... | ... | -X% |
|
|
161
|
+
| Response Time P99 | ... | ... | +X% | Pass / FLAGGED |
|
|
162
|
+
| Transaction Error Rate | ... | ... | +X% | Pass / FLAGGED |
|
|
163
|
+
| External Services Errors | ... | ... | ... | Pass / FLAGGED / N/A |
|
|
164
|
+
| Success Transactions | ... | ... | -X% | Pass / FLAGGED |
|
|
165
165
|
|
|
166
166
|
End with an overall verdict on its own line:
|
|
167
167
|
- \`Service appears healthy.\` \u2014 all checks pass
|