agenttelemetry-app 2.1.0__tar.gz → 2.2.0__tar.gz
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.
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/MANIFEST.in +5 -10
- {agenttelemetry_app-2.1.0/agenttelemetry_app.egg-info → agenttelemetry_app-2.2.0}/PKG-INFO +61 -53
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/README.md +60 -52
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/__init__.py +1 -1
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/accounts.py +1 -1
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0/agenttelemetry_app.egg-info}/PKG-INFO +61 -53
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/agenttelemetry_app.egg-info/SOURCES.txt +9 -19
- agenttelemetry_app-2.2.0/antigravity.py +1291 -0
- agenttelemetry_app-2.2.0/cursor_data.py +966 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/dashboard.py +798 -138
- agenttelemetry_app-2.2.0/docs/antigravity.md +79 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/docs/python-package.md +2 -4
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/editor_snapshot.py +135 -5
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/index.html +0 -14
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/native_activity.py +56 -1
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/parser.py +1471 -240
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/pyproject.toml +3 -3
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/session_names.py +19 -2
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/session_timeline.py +358 -3
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/setup.py +2 -7
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/app.css +5 -43
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/core.js +86 -6
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/maintenance.js +8 -1
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/timeline.js +52 -9
- agenttelemetry_app-2.2.0/static/tool-icons/LICENSE.antigravity.txt +17 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/tool-icons/README.md +3 -1
- agenttelemetry_app-2.2.0/static/tool-icons/antigravity.svg +3 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/views.js +301 -715
- agenttelemetry_app-2.1.0/docs/mcp.md +0 -83
- agenttelemetry_app-2.1.0/mcp_access.py +0 -338
- agenttelemetry_app-2.1.0/mcp_backend.py +0 -549
- agenttelemetry_app-2.1.0/mcp_protocol.py +0 -97
- agenttelemetry_app-2.1.0/mcp_server.py +0 -678
- agenttelemetry_app-2.1.0/mcp_tools.py +0 -234
- agenttelemetry_app-2.1.0/static/insights.js +0 -115
- agenttelemetry_app-2.1.0/static/mcp.js +0 -281
- agenttelemetry_app-2.1.0/telemetry_insights.py +0 -1754
- agenttelemetry_app-2.1.0/telemetry_query.py +0 -1359
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/LICENSE +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/__main__.py +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/agenttelemetry_app.egg-info/dependency_links.txt +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/agenttelemetry_app.egg-info/entry_points.txt +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/agenttelemetry_app.egg-info/top_level.txt +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/chart.umd.min.js +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/cli.py +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/diagnostics.py +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/docs/native-activity.md +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/docs/release-notes.md +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/ledger_backups.py +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/local_servers.py +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/local_servers_windows.py +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/manifest.json +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/native.py +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/release_notes.py +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/setup.cfg +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/apple-touch-icon.png +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/charts.js +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/icon-192.png +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/icon-512.png +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/release-notes.js +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/tool-icons/LICENSE.hermes.txt +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/tool-icons/LICENSE.openclaw.txt +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/tool-icons/LICENSE.simple-icons.txt +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/tool-icons/claude.svg +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/tool-icons/copilot.svg +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/tool-icons/cursor.svg +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/tool-icons/hermes.svg +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/tool-icons/openai.svg +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/tool-icons/openclaw.svg +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/static/tool-icons/opencode.svg +0 -0
- {agenttelemetry_app-2.1.0 → agenttelemetry_app-2.2.0}/sw.js +0 -0
|
@@ -14,41 +14,36 @@ include native_activity.py
|
|
|
14
14
|
include local_servers.py
|
|
15
15
|
include local_servers_windows.py
|
|
16
16
|
include parser.py
|
|
17
|
+
include antigravity.py
|
|
18
|
+
include cursor_data.py
|
|
17
19
|
include release_notes.py
|
|
18
20
|
include native.py
|
|
19
21
|
include accounts.py
|
|
20
22
|
include session_names.py
|
|
21
|
-
include mcp_access.py
|
|
22
|
-
include mcp_backend.py
|
|
23
|
-
include mcp_protocol.py
|
|
24
|
-
include mcp_server.py
|
|
25
|
-
include mcp_tools.py
|
|
26
|
-
include telemetry_query.py
|
|
27
|
-
include telemetry_insights.py
|
|
28
23
|
include index.html
|
|
29
24
|
include chart.umd.min.js
|
|
30
25
|
include manifest.json
|
|
31
26
|
include sw.js
|
|
32
27
|
include docs/python-package.md
|
|
33
|
-
include docs/mcp.md
|
|
34
28
|
include docs/release-notes.md
|
|
35
29
|
include docs/native-activity.md
|
|
30
|
+
include docs/antigravity.md
|
|
36
31
|
include static/app.css
|
|
37
32
|
include static/apple-touch-icon.png
|
|
38
33
|
include static/charts.js
|
|
39
34
|
include static/core.js
|
|
40
35
|
include static/icon-192.png
|
|
41
36
|
include static/icon-512.png
|
|
42
|
-
include static/insights.js
|
|
43
37
|
include static/maintenance.js
|
|
44
38
|
include static/release-notes.js
|
|
45
|
-
include static/mcp.js
|
|
46
39
|
include static/timeline.js
|
|
47
40
|
include static/tool-icons/LICENSE.hermes.txt
|
|
41
|
+
include static/tool-icons/LICENSE.antigravity.txt
|
|
48
42
|
include static/tool-icons/LICENSE.openclaw.txt
|
|
49
43
|
include static/tool-icons/LICENSE.simple-icons.txt
|
|
50
44
|
include static/tool-icons/README.md
|
|
51
45
|
include static/tool-icons/claude.svg
|
|
46
|
+
include static/tool-icons/antigravity.svg
|
|
52
47
|
include static/tool-icons/copilot.svg
|
|
53
48
|
include static/tool-icons/cursor.svg
|
|
54
49
|
include static/tool-icons/hermes.svg
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agenttelemetry-app
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.2.0
|
|
4
4
|
Summary: A private, local dashboard for AI coding agent usage
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Project-URL: Homepage, https://github.com/uttamdeb/agent-telemetry
|
|
@@ -29,26 +29,33 @@ logs your tools already write to your own machine and serves a clean, interactiv
|
|
|
29
29
|
dashboard — estimated spend, tokens, active time, cache efficiency, an **Anthropic vs OpenAI
|
|
30
30
|
vs Google** provider comparison, an activity calendar, and breakdowns by **model, provider,
|
|
31
31
|
day, hour, weekday, tool, IDE, project and session** — plus how much **disk** all these logs
|
|
32
|
-
eat
|
|
32
|
+
eat.
|
|
33
33
|
|
|
34
34
|
By default, log inventory, usage and the cache stay on this machine. Separate actions can
|
|
35
|
-
share selected exports with [paired devices](#your-devices-optional),
|
|
36
|
-
|
|
37
|
-
its model provider), contact a provider after a confirmed **Read once** account lookup, or
|
|
35
|
+
share selected exports with [paired devices](#your-devices-optional), contact a provider
|
|
36
|
+
after a confirmed **Read once** account lookup, or
|
|
38
37
|
fetch GitHub update and release-note metadata after you click **Check for updates** or
|
|
39
38
|
**Load notes**. Cached release notes can be shown offline after an upgrade. No account or API key is needed
|
|
40
39
|
for the dashboard; it has no runtime dependencies beyond Python's standard library and a
|
|
41
40
|
vendored copy of Chart.js.
|
|
42
41
|
|
|
43
|
-
Covers **Claude Code · Claude Desktop · Codex · GitHub Copilot · Cursor · OpenCode · Hermes Agent · OpenClaw**.
|
|
42
|
+
Covers **Claude Code · Claude Desktop · Codex · GitHub Copilot · Cursor · Antigravity · OpenCode · Hermes Agent · OpenClaw**.
|
|
43
|
+
|
|
44
|
+
**Get AgentTelemetry:** [Desktop apps for macOS and Windows](#download-the-app) ·
|
|
45
|
+
[VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=agenttelemetry-team.agenttelemetry) ·
|
|
46
|
+
[Open VSX](https://open-vsx.org/extension/agenttelemetry-team/agenttelemetry) (Cursor and compatible editors) ·
|
|
47
|
+
[Browser dashboard (Python or source)](#quick-start) ·
|
|
48
|
+
[Product page](https://agenttelemetry-app.vercel.app/)
|
|
44
49
|
|
|
45
50
|
## Download the app
|
|
46
51
|
|
|
47
|
-
|
|
52
|
+
Choose the installer for your platform from the release's **Assets** section.
|
|
53
|
+
|
|
54
|
+
| Platform | Release downloads |
|
|
48
55
|
| --- | --- |
|
|
49
|
-
| macOS 13+ · Apple Silicon | **[
|
|
50
|
-
| macOS 13+ · Intel | **[
|
|
51
|
-
| Windows 10/11 · x64 | **[
|
|
56
|
+
| macOS 13+ · Apple Silicon | **[Find the Apple Silicon DMG](https://github.com/uttamdeb/agent-telemetry/releases/latest)** |
|
|
57
|
+
| macOS 13+ · Intel | **[Find the Intel DMG](https://github.com/uttamdeb/agent-telemetry/releases/latest)** |
|
|
58
|
+
| Windows 10/11 · x64 | **[Find the Windows EXE installer](https://github.com/uttamdeb/agent-telemetry/releases/latest)** |
|
|
52
59
|
|
|
53
60
|
**Python is bundled — no terminal setup needed.** macOS: open the DMG, drag the app to
|
|
54
61
|
Applications and open it. Windows: run the installer and open AgentTelemetry from Start.
|
|
@@ -61,10 +68,11 @@ starting monitoring. On macOS, opening the app manually also lets you import fir
|
|
|
61
68
|
|
|
62
69
|
These builds are unsigned/unnotarized. macOS may require **System Settings → Privacy &
|
|
63
70
|
Security → Open Anyway**; Windows SmartScreen may require **More info → Run anyway**.
|
|
71
|
+
[Product and install page](https://agenttelemetry-app.vercel.app/) ·
|
|
64
72
|
[All releases](https://github.com/uttamdeb/agent-telemetry/releases) ·
|
|
65
|
-
[What's new in 2.
|
|
66
|
-
[SHA-256 checksums](https://github.com/uttamdeb/agent-telemetry/releases/
|
|
67
|
-
[PyPI package 2.
|
|
73
|
+
[What's new in 2.2.0](docs/releases/v2.2.0.md) ·
|
|
74
|
+
[SHA-256 checksums in release assets](https://github.com/uttamdeb/agent-telemetry/releases/latest) ·
|
|
75
|
+
[PyPI package 2.2.0](https://pypi.org/project/agenttelemetry-app/2.2.0/)
|
|
68
76
|
|
|
69
77
|
---
|
|
70
78
|
|
|
@@ -166,12 +174,14 @@ estimated from tokens or combined across devices. Session details show recorded
|
|
|
166
174
|
creator/account IDs with their attribution limits. Account metadata is private to the
|
|
167
175
|
source device. See [setup, research and limitations](docs/account-limits.md).
|
|
168
176
|
|
|
169
|
-
## Local servers (macOS)
|
|
177
|
+
## Local servers (macOS and Windows)
|
|
170
178
|
|
|
171
|
-
The **Local servers** tab
|
|
172
|
-
and save an explicit launch command for Start and Restart.
|
|
173
|
-
|
|
174
|
-
|
|
179
|
+
The **Local servers** dashboard tab can list local project listeners, pin them,
|
|
180
|
+
and save an explicit launch command for Start and Restart. macOS can also show pinned
|
|
181
|
+
controls in the menu bar; the Windows tray opens the dashboard controls. Process actions
|
|
182
|
+
ask for confirmation. Lifecycle controls are supported on macOS and Windows; Linux does
|
|
183
|
+
not yet support this feature. Windows asks for a working folder and uses ownership-checked
|
|
184
|
+
process controls. Commands stay on this machine and are never included in device sharing.
|
|
175
185
|
Running a saved command gives it your account's file and network access.
|
|
176
186
|
See [behavior, privacy and limitations](docs/local-servers.md).
|
|
177
187
|
|
|
@@ -238,25 +248,15 @@ retain one serialized snapshot per display tick, in memory only; the ledger is u
|
|
|
238
248
|
as all writes. `POST /api/shutdown` additionally requires the owning Windows client's
|
|
239
249
|
per-process control token; a normal standalone dashboard cannot be stopped by that route.
|
|
240
250
|
|
|
241
|
-
## Local MCP access (optional)
|
|
242
|
-
|
|
243
|
-
AgentTelemetry provides eight read-only MCP tools for usage, comparisons, supported insights,
|
|
244
|
-
session summaries and timelines, data health, the telemetry catalog and saved subscription
|
|
245
|
-
limits. MCP access is off by default. Enable it in Settings and confirm each scope. The local
|
|
246
|
-
bridge requires an already-running dashboard and returns data only when the configured MCP
|
|
247
|
-
client requests it. A cloud-backed client may send tool results to its provider; review that
|
|
248
|
-
client's data-handling settings before enabling access. Project/device names and usage from
|
|
249
|
-
connected devices require their own opt-in scopes. The MCP bridge never refreshes accounts,
|
|
250
|
-
returns prompt text, or edits client configuration. See [MCP tools, setup and privacy
|
|
251
|
-
limits](docs/mcp.md).
|
|
252
|
-
|
|
253
|
-
The MCP bridge ships with the **2.1.0** application and Python package. It is not a separate
|
|
254
|
-
marketplace listing; install/update AgentTelemetry, then use the [MCP setup guide](docs/mcp.md).
|
|
255
|
-
|
|
256
251
|
> `--rebuild` deletes the cache, and with it every session whose log has since been deleted
|
|
257
252
|
> from disk (see [Storage](#storage--what-these-logs-cost-you-in-disk)). Copy
|
|
258
253
|
> `.usage_cache.json` somewhere safe first if you've cleaned up old logs.
|
|
259
254
|
|
|
255
|
+
Deleting a session inside a tool doesn't remove it from your totals either. If OpenCode,
|
|
256
|
+
Hermes or OpenClaw delete a session from their database, the dashboard keeps the usage it
|
|
257
|
+
already counted and marks that session as deleted. The same applies to turns you undo in
|
|
258
|
+
OpenCode and to a Claude or Copilot log that gets shorter.
|
|
259
|
+
|
|
260
260
|
**Requirements:** Python 3.8+ on **macOS, Linux or Windows**. On Windows run
|
|
261
261
|
`python dashboard.py` (or `run.cmd`); on macOS/Linux `python3 dashboard.py` (or `./run.sh`).
|
|
262
262
|
|
|
@@ -280,21 +280,33 @@ instead of cloning, delete `.usage_cache.json` first — that file is your perso
|
|
|
280
280
|
|
|
281
281
|
## Data sources
|
|
282
282
|
|
|
283
|
+
**AgentTelemetry Pulsar** is the engine that reads these sources. It finds each tool's
|
|
284
|
+
local logs, picks the usage signal out of them and turns every tool's format into the one
|
|
285
|
+
shared usage shape the dashboard shows. It runs on your machine, and its code lives in
|
|
286
|
+
`parser.py`.
|
|
287
|
+
|
|
283
288
|
| Tool | Where it reads | Tokens |
|
|
284
289
|
|---|---|---|
|
|
285
290
|
| **Claude Code** | `~/.claude/projects/**/*.jsonl` | exact (in/out/cache read+write, 5m/1h tiers) |
|
|
286
291
|
| **Claude Desktop** (agent mode) | `Claude/local-agent-mode-sessions/**` under App Support / `%APPDATA%` / `~/.config` | exact |
|
|
287
|
-
| **Codex** | `~/.codex/sessions/**`, `~/.codex/archived_sessions/**` | exact (in/cached/out/reasoning); subagents are identified and labelled |
|
|
292
|
+
| **Codex** | `~/.codex/sessions/**`, `~/.codex/archived_sessions/**` (plain `*.jsonl` and the zstd-compressed `*.jsonl.zst` Codex swaps in for idle threads) | exact (in/cached/out/reasoning); subagents are identified and labelled. Compressed rollouts are read with Python 3.14+ or the `zstd` command; without either they are counted as unread (never dropped) and the sidebar says how many |
|
|
288
293
|
| **GitHub Copilot** | VS Code-family `chatSessions/*.{json,jsonl}`; SDK/CLI `~/.copilot/session-state/*/events.jsonl`, enriched from VS Code `agentSessionData/*/session.db` | recorded request/turn tokens where available; SDK shutdown totals where safely dated. SDK gaps show a warning tooltip and unavailable/partial usage; older non-SDK chats retain text estimates. Premium multipliers are separate from estimated dollars. |
|
|
289
|
-
| **Cursor** (native AI) | `Cursor/User/globalStorage/state.vscdb` under App Support / `%APPDATA%` / `~/.config` | partial
|
|
294
|
+
| **Cursor** (native AI) | `Cursor/User/globalStorage/state.vscdb` under App Support / `%APPDATA%` / `~/.config` | recorded, partial or unavailable per session/model: explicit message input/output tokens, models, tools and AI-line stats where the local records expose them |
|
|
295
|
+
| **Google Antigravity** | `~/.gemini/antigravity/conversations/*.db`, `~/.gemini/antigravity-ide/conversations/*.db`, `~/.gemini/antigravity-cli/conversations/*.db` | recorded SQLite usage with per-field availability; standalone legacy `.pb` files are unsupported |
|
|
290
296
|
| **OpenCode** | `~/.local/share/opencode/opencode.db`, `%LOCALAPPDATA%\opencode\opencode.db`, `~/.opencode/opencode.db` (or `$OPENCODE_DATA_DIR`) | V1/V2 SQLite; exact (in/out/reasoning/cache), prompts and tools; cost is read from OpenCode's own per-message value |
|
|
291
297
|
| **Hermes Agent** | `~/.hermes/state.db` (or `$HERMES_HOME`, `%LOCALAPPDATA%\hermes`) | exact (in/out/cache/reasoning, per model) |
|
|
292
298
|
| **OpenClaw** | `~/.openclaw/agents/<agent>/agent/openclaw-agent.sqlite` (or `$OPENCLAW_STATE_DIR`; also the older `~/.clawdbot`, `~/.moltbot`) and the older per-session `sessions/*.jsonl` | exact (in/out/cache read/cache write/reasoning, per response); its own logged cost is used only for a model with no verified price. Large events are stored zstd-compressed: read with the `zstd` command or Python 3.14+ |
|
|
293
299
|
|
|
294
300
|
A tool you don't use simply contributes nothing. **Attribution is by tool, not by model** —
|
|
295
|
-
a Claude or GPT model used *inside* Copilot/Cursor/OpenCode/Hermes/OpenClaw counts under that tool, and the
|
|
301
|
+
a Claude, Gemini, or GPT model used *inside* Copilot/Cursor/Antigravity/OpenCode/Hermes/OpenClaw counts under that tool, and the
|
|
296
302
|
Models table lists each `model × tool` row separately.
|
|
297
303
|
|
|
304
|
+
Antigravity's supported SQLite schema, duplicate-row handling, recorded checkpoint detail,
|
|
305
|
+
and format limits are documented in [Google Antigravity support](docs/antigravity.md).
|
|
306
|
+
|
|
307
|
+
Cursor's local conversation metadata is documented in [Cursor support](docs/cursor.md),
|
|
308
|
+
including its model/token coverage states, workspace associations, subagents, and limits.
|
|
309
|
+
|
|
298
310
|
Copilot's newer SDK-based agent sessions use a different store from older Copilot Chat.
|
|
299
311
|
AgentTelemetry joins their event history to VS Code's saved per-turn usage using native
|
|
300
312
|
session and event IDs. Custom endpoint models, including Cloudflare GLM 5.3, still count
|
|
@@ -386,14 +398,6 @@ a display-name override. See [subagent name behavior](docs/subagent-sessions.md)
|
|
|
386
398
|
Tool/provider icons are bundled locally, including the OpenAI mark for Codex; no remote
|
|
387
399
|
logo requests occur. Their sources and licenses are in `static/tool-icons/README.md`.
|
|
388
400
|
|
|
389
|
-
**Optimize** — suggestions derived from your own logs, ranked by what they'd save: sessions
|
|
390
|
-
re-reading a very large context, thinking share, tool-heavy sessions that never delegated,
|
|
391
|
-
cache written but never read, a costly model doing light work, what each **Skill** costs,
|
|
392
|
-
edits that needed a retry, oversized **CLAUDE.md / AGENTS.md**, sessions that open heavier
|
|
393
|
-
than your leanest ones, wasted file reads, installed skills and agents you never use, and
|
|
394
|
-
MCP servers you never call, barely use, or load everywhere but use in one project. Nothing is shown unless
|
|
395
|
-
your data supports it, and because the estimates overlap they are never summed.
|
|
396
|
-
|
|
397
401
|
**Storage** — see below.
|
|
398
402
|
|
|
399
403
|
**Keyboard** — `1`/`7`/`3`/`9`/`a` ranges, `m` month-to-date, `,` / `.` previous / next
|
|
@@ -484,17 +488,21 @@ dollars**, so cost is always derived. Rates live in `parser.py → PRICING` as
|
|
|
484
488
|
above 100K. The threshold includes cached input and applies to each request.
|
|
485
489
|
Available Claude logs backfill this pricing detail on a normal restart; token and
|
|
486
490
|
message counts stay unchanged. Older archives/peers and other tools without that
|
|
487
|
-
detail use the short-prompt rate.
|
|
488
|
-
the higher tier when the target request size is unknown.
|
|
491
|
+
detail use the short-prompt rate.
|
|
489
492
|
- **Price changes are date-aware.** When a vendor cuts a price (OpenAI's GPT-5.6 cuts of
|
|
490
493
|
2026-07-30 and 2026-08-21), usage from before the change keeps the rate it had then —
|
|
491
494
|
see `parser.py → PRICE_HISTORY`.
|
|
492
495
|
- **These are API-equivalent values.** If you're on a subscription (Claude Max/Pro, Codex,
|
|
493
496
|
Copilot), you don't pay per token — the $ is "what this would cost at API rates."
|
|
494
|
-
- **Cursor**
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
497
|
+
- **Cursor** exposes explicit input/output token receipts for some messages; missing and
|
|
498
|
+
placeholder values are unavailable, and usage coverage can be partial. Cache and reasoning
|
|
499
|
+
values remain unavailable unless recorded. Overview shows observed Cursor prompts, replies,
|
|
500
|
+
and tool calls separately when they have no token/cost coverage. It does not estimate tokens
|
|
501
|
+
from text or context meters, infer subscription charges, or count metadata as tokens. The
|
|
502
|
+
**Exact tokens only** filter omits Cursor because local token coverage is incomplete. See
|
|
503
|
+
[Cursor support](docs/cursor.md). **Older Copilot chats** may have no token data; current
|
|
504
|
+
Copilot builds log real per-request tokens. Copilot's honest metric is **request count** and
|
|
505
|
+
its **premium-request** total (both shown); Cursor also exposes **AI lines kept**.
|
|
498
506
|
- **Billing details that change the price are applied**: prompt-cache writes at their own
|
|
499
507
|
rate (Claude and GPT-5.6/GPT-6), Claude fast mode, US-only inference (1.1x) and web
|
|
500
508
|
searches ($10/1K). A forked or subagent Codex thread's replay of its parent is skipped,
|
|
@@ -539,7 +547,7 @@ and extend this from that file).
|
|
|
539
547
|
|
|
540
548
|
## Files
|
|
541
549
|
|
|
542
|
-
`dashboard.py` (server + cache + cost + `/api/storage`) · `parser.py` (log parsers + pricing) ·
|
|
550
|
+
`dashboard.py` (server + cache + cost + `/api/storage`) · `parser.py` (AgentTelemetry Pulsar: log parsers + pricing) ·
|
|
543
551
|
`index.html` (shell) · `static/app.css` · `static/core.js` · `static/charts.js` ·
|
|
544
552
|
`static/views.js` · `chart.umd.min.js` (vendored Chart.js) · `AGENTS.md` · `run.sh`.
|
|
545
553
|
|
|
@@ -571,8 +579,8 @@ What sharing sends: session titles (often the start of a prompt), project and br
|
|
|
571
579
|
log file paths, models, token counts, costs and times. Full prompts, replies and file
|
|
572
580
|
contents are never sent. Sharing opens one read-only port (7879) that answers only to the
|
|
573
581
|
pairing code. The dashboard itself stays on `127.0.0.1`. The connection is **not
|
|
574
|
-
encrypted**, so share only on a network you trust. The
|
|
575
|
-
(instruction files, installed skills, MCP servers)
|
|
582
|
+
encrypted**, so share only on a network you trust. The Storage tab and setup inventories
|
|
583
|
+
(instruction files, installed skills, MCP servers) still describe only
|
|
576
584
|
the computer you're looking at. `.peers.json` and `.peers/` are gitignored.
|
|
577
585
|
|
|
578
586
|
**If it can't connect**, the error says which of these it is:
|
|
@@ -5,26 +5,33 @@ logs your tools already write to your own machine and serves a clean, interactiv
|
|
|
5
5
|
dashboard — estimated spend, tokens, active time, cache efficiency, an **Anthropic vs OpenAI
|
|
6
6
|
vs Google** provider comparison, an activity calendar, and breakdowns by **model, provider,
|
|
7
7
|
day, hour, weekday, tool, IDE, project and session** — plus how much **disk** all these logs
|
|
8
|
-
eat
|
|
8
|
+
eat.
|
|
9
9
|
|
|
10
10
|
By default, log inventory, usage and the cache stay on this machine. Separate actions can
|
|
11
|
-
share selected exports with [paired devices](#your-devices-optional),
|
|
12
|
-
|
|
13
|
-
its model provider), contact a provider after a confirmed **Read once** account lookup, or
|
|
11
|
+
share selected exports with [paired devices](#your-devices-optional), contact a provider
|
|
12
|
+
after a confirmed **Read once** account lookup, or
|
|
14
13
|
fetch GitHub update and release-note metadata after you click **Check for updates** or
|
|
15
14
|
**Load notes**. Cached release notes can be shown offline after an upgrade. No account or API key is needed
|
|
16
15
|
for the dashboard; it has no runtime dependencies beyond Python's standard library and a
|
|
17
16
|
vendored copy of Chart.js.
|
|
18
17
|
|
|
19
|
-
Covers **Claude Code · Claude Desktop · Codex · GitHub Copilot · Cursor · OpenCode · Hermes Agent · OpenClaw**.
|
|
18
|
+
Covers **Claude Code · Claude Desktop · Codex · GitHub Copilot · Cursor · Antigravity · OpenCode · Hermes Agent · OpenClaw**.
|
|
19
|
+
|
|
20
|
+
**Get AgentTelemetry:** [Desktop apps for macOS and Windows](#download-the-app) ·
|
|
21
|
+
[VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=agenttelemetry-team.agenttelemetry) ·
|
|
22
|
+
[Open VSX](https://open-vsx.org/extension/agenttelemetry-team/agenttelemetry) (Cursor and compatible editors) ·
|
|
23
|
+
[Browser dashboard (Python or source)](#quick-start) ·
|
|
24
|
+
[Product page](https://agenttelemetry-app.vercel.app/)
|
|
20
25
|
|
|
21
26
|
## Download the app
|
|
22
27
|
|
|
23
|
-
|
|
28
|
+
Choose the installer for your platform from the release's **Assets** section.
|
|
29
|
+
|
|
30
|
+
| Platform | Release downloads |
|
|
24
31
|
| --- | --- |
|
|
25
|
-
| macOS 13+ · Apple Silicon | **[
|
|
26
|
-
| macOS 13+ · Intel | **[
|
|
27
|
-
| Windows 10/11 · x64 | **[
|
|
32
|
+
| macOS 13+ · Apple Silicon | **[Find the Apple Silicon DMG](https://github.com/uttamdeb/agent-telemetry/releases/latest)** |
|
|
33
|
+
| macOS 13+ · Intel | **[Find the Intel DMG](https://github.com/uttamdeb/agent-telemetry/releases/latest)** |
|
|
34
|
+
| Windows 10/11 · x64 | **[Find the Windows EXE installer](https://github.com/uttamdeb/agent-telemetry/releases/latest)** |
|
|
28
35
|
|
|
29
36
|
**Python is bundled — no terminal setup needed.** macOS: open the DMG, drag the app to
|
|
30
37
|
Applications and open it. Windows: run the installer and open AgentTelemetry from Start.
|
|
@@ -37,10 +44,11 @@ starting monitoring. On macOS, opening the app manually also lets you import fir
|
|
|
37
44
|
|
|
38
45
|
These builds are unsigned/unnotarized. macOS may require **System Settings → Privacy &
|
|
39
46
|
Security → Open Anyway**; Windows SmartScreen may require **More info → Run anyway**.
|
|
47
|
+
[Product and install page](https://agenttelemetry-app.vercel.app/) ·
|
|
40
48
|
[All releases](https://github.com/uttamdeb/agent-telemetry/releases) ·
|
|
41
|
-
[What's new in 2.
|
|
42
|
-
[SHA-256 checksums](https://github.com/uttamdeb/agent-telemetry/releases/
|
|
43
|
-
[PyPI package 2.
|
|
49
|
+
[What's new in 2.2.0](docs/releases/v2.2.0.md) ·
|
|
50
|
+
[SHA-256 checksums in release assets](https://github.com/uttamdeb/agent-telemetry/releases/latest) ·
|
|
51
|
+
[PyPI package 2.2.0](https://pypi.org/project/agenttelemetry-app/2.2.0/)
|
|
44
52
|
|
|
45
53
|
---
|
|
46
54
|
|
|
@@ -142,12 +150,14 @@ estimated from tokens or combined across devices. Session details show recorded
|
|
|
142
150
|
creator/account IDs with their attribution limits. Account metadata is private to the
|
|
143
151
|
source device. See [setup, research and limitations](docs/account-limits.md).
|
|
144
152
|
|
|
145
|
-
## Local servers (macOS)
|
|
153
|
+
## Local servers (macOS and Windows)
|
|
146
154
|
|
|
147
|
-
The **Local servers** tab
|
|
148
|
-
and save an explicit launch command for Start and Restart.
|
|
149
|
-
|
|
150
|
-
|
|
155
|
+
The **Local servers** dashboard tab can list local project listeners, pin them,
|
|
156
|
+
and save an explicit launch command for Start and Restart. macOS can also show pinned
|
|
157
|
+
controls in the menu bar; the Windows tray opens the dashboard controls. Process actions
|
|
158
|
+
ask for confirmation. Lifecycle controls are supported on macOS and Windows; Linux does
|
|
159
|
+
not yet support this feature. Windows asks for a working folder and uses ownership-checked
|
|
160
|
+
process controls. Commands stay on this machine and are never included in device sharing.
|
|
151
161
|
Running a saved command gives it your account's file and network access.
|
|
152
162
|
See [behavior, privacy and limitations](docs/local-servers.md).
|
|
153
163
|
|
|
@@ -214,25 +224,15 @@ retain one serialized snapshot per display tick, in memory only; the ledger is u
|
|
|
214
224
|
as all writes. `POST /api/shutdown` additionally requires the owning Windows client's
|
|
215
225
|
per-process control token; a normal standalone dashboard cannot be stopped by that route.
|
|
216
226
|
|
|
217
|
-
## Local MCP access (optional)
|
|
218
|
-
|
|
219
|
-
AgentTelemetry provides eight read-only MCP tools for usage, comparisons, supported insights,
|
|
220
|
-
session summaries and timelines, data health, the telemetry catalog and saved subscription
|
|
221
|
-
limits. MCP access is off by default. Enable it in Settings and confirm each scope. The local
|
|
222
|
-
bridge requires an already-running dashboard and returns data only when the configured MCP
|
|
223
|
-
client requests it. A cloud-backed client may send tool results to its provider; review that
|
|
224
|
-
client's data-handling settings before enabling access. Project/device names and usage from
|
|
225
|
-
connected devices require their own opt-in scopes. The MCP bridge never refreshes accounts,
|
|
226
|
-
returns prompt text, or edits client configuration. See [MCP tools, setup and privacy
|
|
227
|
-
limits](docs/mcp.md).
|
|
228
|
-
|
|
229
|
-
The MCP bridge ships with the **2.1.0** application and Python package. It is not a separate
|
|
230
|
-
marketplace listing; install/update AgentTelemetry, then use the [MCP setup guide](docs/mcp.md).
|
|
231
|
-
|
|
232
227
|
> `--rebuild` deletes the cache, and with it every session whose log has since been deleted
|
|
233
228
|
> from disk (see [Storage](#storage--what-these-logs-cost-you-in-disk)). Copy
|
|
234
229
|
> `.usage_cache.json` somewhere safe first if you've cleaned up old logs.
|
|
235
230
|
|
|
231
|
+
Deleting a session inside a tool doesn't remove it from your totals either. If OpenCode,
|
|
232
|
+
Hermes or OpenClaw delete a session from their database, the dashboard keeps the usage it
|
|
233
|
+
already counted and marks that session as deleted. The same applies to turns you undo in
|
|
234
|
+
OpenCode and to a Claude or Copilot log that gets shorter.
|
|
235
|
+
|
|
236
236
|
**Requirements:** Python 3.8+ on **macOS, Linux or Windows**. On Windows run
|
|
237
237
|
`python dashboard.py` (or `run.cmd`); on macOS/Linux `python3 dashboard.py` (or `./run.sh`).
|
|
238
238
|
|
|
@@ -256,21 +256,33 @@ instead of cloning, delete `.usage_cache.json` first — that file is your perso
|
|
|
256
256
|
|
|
257
257
|
## Data sources
|
|
258
258
|
|
|
259
|
+
**AgentTelemetry Pulsar** is the engine that reads these sources. It finds each tool's
|
|
260
|
+
local logs, picks the usage signal out of them and turns every tool's format into the one
|
|
261
|
+
shared usage shape the dashboard shows. It runs on your machine, and its code lives in
|
|
262
|
+
`parser.py`.
|
|
263
|
+
|
|
259
264
|
| Tool | Where it reads | Tokens |
|
|
260
265
|
|---|---|---|
|
|
261
266
|
| **Claude Code** | `~/.claude/projects/**/*.jsonl` | exact (in/out/cache read+write, 5m/1h tiers) |
|
|
262
267
|
| **Claude Desktop** (agent mode) | `Claude/local-agent-mode-sessions/**` under App Support / `%APPDATA%` / `~/.config` | exact |
|
|
263
|
-
| **Codex** | `~/.codex/sessions/**`, `~/.codex/archived_sessions/**` | exact (in/cached/out/reasoning); subagents are identified and labelled |
|
|
268
|
+
| **Codex** | `~/.codex/sessions/**`, `~/.codex/archived_sessions/**` (plain `*.jsonl` and the zstd-compressed `*.jsonl.zst` Codex swaps in for idle threads) | exact (in/cached/out/reasoning); subagents are identified and labelled. Compressed rollouts are read with Python 3.14+ or the `zstd` command; without either they are counted as unread (never dropped) and the sidebar says how many |
|
|
264
269
|
| **GitHub Copilot** | VS Code-family `chatSessions/*.{json,jsonl}`; SDK/CLI `~/.copilot/session-state/*/events.jsonl`, enriched from VS Code `agentSessionData/*/session.db` | recorded request/turn tokens where available; SDK shutdown totals where safely dated. SDK gaps show a warning tooltip and unavailable/partial usage; older non-SDK chats retain text estimates. Premium multipliers are separate from estimated dollars. |
|
|
265
|
-
| **Cursor** (native AI) | `Cursor/User/globalStorage/state.vscdb` under App Support / `%APPDATA%` / `~/.config` | partial
|
|
270
|
+
| **Cursor** (native AI) | `Cursor/User/globalStorage/state.vscdb` under App Support / `%APPDATA%` / `~/.config` | recorded, partial or unavailable per session/model: explicit message input/output tokens, models, tools and AI-line stats where the local records expose them |
|
|
271
|
+
| **Google Antigravity** | `~/.gemini/antigravity/conversations/*.db`, `~/.gemini/antigravity-ide/conversations/*.db`, `~/.gemini/antigravity-cli/conversations/*.db` | recorded SQLite usage with per-field availability; standalone legacy `.pb` files are unsupported |
|
|
266
272
|
| **OpenCode** | `~/.local/share/opencode/opencode.db`, `%LOCALAPPDATA%\opencode\opencode.db`, `~/.opencode/opencode.db` (or `$OPENCODE_DATA_DIR`) | V1/V2 SQLite; exact (in/out/reasoning/cache), prompts and tools; cost is read from OpenCode's own per-message value |
|
|
267
273
|
| **Hermes Agent** | `~/.hermes/state.db` (or `$HERMES_HOME`, `%LOCALAPPDATA%\hermes`) | exact (in/out/cache/reasoning, per model) |
|
|
268
274
|
| **OpenClaw** | `~/.openclaw/agents/<agent>/agent/openclaw-agent.sqlite` (or `$OPENCLAW_STATE_DIR`; also the older `~/.clawdbot`, `~/.moltbot`) and the older per-session `sessions/*.jsonl` | exact (in/out/cache read/cache write/reasoning, per response); its own logged cost is used only for a model with no verified price. Large events are stored zstd-compressed: read with the `zstd` command or Python 3.14+ |
|
|
269
275
|
|
|
270
276
|
A tool you don't use simply contributes nothing. **Attribution is by tool, not by model** —
|
|
271
|
-
a Claude or GPT model used *inside* Copilot/Cursor/OpenCode/Hermes/OpenClaw counts under that tool, and the
|
|
277
|
+
a Claude, Gemini, or GPT model used *inside* Copilot/Cursor/Antigravity/OpenCode/Hermes/OpenClaw counts under that tool, and the
|
|
272
278
|
Models table lists each `model × tool` row separately.
|
|
273
279
|
|
|
280
|
+
Antigravity's supported SQLite schema, duplicate-row handling, recorded checkpoint detail,
|
|
281
|
+
and format limits are documented in [Google Antigravity support](docs/antigravity.md).
|
|
282
|
+
|
|
283
|
+
Cursor's local conversation metadata is documented in [Cursor support](docs/cursor.md),
|
|
284
|
+
including its model/token coverage states, workspace associations, subagents, and limits.
|
|
285
|
+
|
|
274
286
|
Copilot's newer SDK-based agent sessions use a different store from older Copilot Chat.
|
|
275
287
|
AgentTelemetry joins their event history to VS Code's saved per-turn usage using native
|
|
276
288
|
session and event IDs. Custom endpoint models, including Cloudflare GLM 5.3, still count
|
|
@@ -362,14 +374,6 @@ a display-name override. See [subagent name behavior](docs/subagent-sessions.md)
|
|
|
362
374
|
Tool/provider icons are bundled locally, including the OpenAI mark for Codex; no remote
|
|
363
375
|
logo requests occur. Their sources and licenses are in `static/tool-icons/README.md`.
|
|
364
376
|
|
|
365
|
-
**Optimize** — suggestions derived from your own logs, ranked by what they'd save: sessions
|
|
366
|
-
re-reading a very large context, thinking share, tool-heavy sessions that never delegated,
|
|
367
|
-
cache written but never read, a costly model doing light work, what each **Skill** costs,
|
|
368
|
-
edits that needed a retry, oversized **CLAUDE.md / AGENTS.md**, sessions that open heavier
|
|
369
|
-
than your leanest ones, wasted file reads, installed skills and agents you never use, and
|
|
370
|
-
MCP servers you never call, barely use, or load everywhere but use in one project. Nothing is shown unless
|
|
371
|
-
your data supports it, and because the estimates overlap they are never summed.
|
|
372
|
-
|
|
373
377
|
**Storage** — see below.
|
|
374
378
|
|
|
375
379
|
**Keyboard** — `1`/`7`/`3`/`9`/`a` ranges, `m` month-to-date, `,` / `.` previous / next
|
|
@@ -460,17 +464,21 @@ dollars**, so cost is always derived. Rates live in `parser.py → PRICING` as
|
|
|
460
464
|
above 100K. The threshold includes cached input and applies to each request.
|
|
461
465
|
Available Claude logs backfill this pricing detail on a normal restart; token and
|
|
462
466
|
message counts stay unchanged. Older archives/peers and other tools without that
|
|
463
|
-
detail use the short-prompt rate.
|
|
464
|
-
the higher tier when the target request size is unknown.
|
|
467
|
+
detail use the short-prompt rate.
|
|
465
468
|
- **Price changes are date-aware.** When a vendor cuts a price (OpenAI's GPT-5.6 cuts of
|
|
466
469
|
2026-07-30 and 2026-08-21), usage from before the change keeps the rate it had then —
|
|
467
470
|
see `parser.py → PRICE_HISTORY`.
|
|
468
471
|
- **These are API-equivalent values.** If you're on a subscription (Claude Max/Pro, Codex,
|
|
469
472
|
Copilot), you don't pay per token — the $ is "what this would cost at API rates."
|
|
470
|
-
- **Cursor**
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
473
|
+
- **Cursor** exposes explicit input/output token receipts for some messages; missing and
|
|
474
|
+
placeholder values are unavailable, and usage coverage can be partial. Cache and reasoning
|
|
475
|
+
values remain unavailable unless recorded. Overview shows observed Cursor prompts, replies,
|
|
476
|
+
and tool calls separately when they have no token/cost coverage. It does not estimate tokens
|
|
477
|
+
from text or context meters, infer subscription charges, or count metadata as tokens. The
|
|
478
|
+
**Exact tokens only** filter omits Cursor because local token coverage is incomplete. See
|
|
479
|
+
[Cursor support](docs/cursor.md). **Older Copilot chats** may have no token data; current
|
|
480
|
+
Copilot builds log real per-request tokens. Copilot's honest metric is **request count** and
|
|
481
|
+
its **premium-request** total (both shown); Cursor also exposes **AI lines kept**.
|
|
474
482
|
- **Billing details that change the price are applied**: prompt-cache writes at their own
|
|
475
483
|
rate (Claude and GPT-5.6/GPT-6), Claude fast mode, US-only inference (1.1x) and web
|
|
476
484
|
searches ($10/1K). A forked or subagent Codex thread's replay of its parent is skipped,
|
|
@@ -515,7 +523,7 @@ and extend this from that file).
|
|
|
515
523
|
|
|
516
524
|
## Files
|
|
517
525
|
|
|
518
|
-
`dashboard.py` (server + cache + cost + `/api/storage`) · `parser.py` (log parsers + pricing) ·
|
|
526
|
+
`dashboard.py` (server + cache + cost + `/api/storage`) · `parser.py` (AgentTelemetry Pulsar: log parsers + pricing) ·
|
|
519
527
|
`index.html` (shell) · `static/app.css` · `static/core.js` · `static/charts.js` ·
|
|
520
528
|
`static/views.js` · `chart.umd.min.js` (vendored Chart.js) · `AGENTS.md` · `run.sh`.
|
|
521
529
|
|
|
@@ -547,8 +555,8 @@ What sharing sends: session titles (often the start of a prompt), project and br
|
|
|
547
555
|
log file paths, models, token counts, costs and times. Full prompts, replies and file
|
|
548
556
|
contents are never sent. Sharing opens one read-only port (7879) that answers only to the
|
|
549
557
|
pairing code. The dashboard itself stays on `127.0.0.1`. The connection is **not
|
|
550
|
-
encrypted**, so share only on a network you trust. The
|
|
551
|
-
(instruction files, installed skills, MCP servers)
|
|
558
|
+
encrypted**, so share only on a network you trust. The Storage tab and setup inventories
|
|
559
|
+
(instruction files, installed skills, MCP servers) still describe only
|
|
552
560
|
the computer you're looking at. `.peers.json` and `.peers/` are gitignored.
|
|
553
561
|
|
|
554
562
|
**If it can't connect**, the error says which of these it is:
|
|
@@ -183,7 +183,7 @@ def _codex_read():
|
|
|
183
183
|
if not isinstance(result, dict): raise ValueError("Codex returned an unsupported account response.")
|
|
184
184
|
return result
|
|
185
185
|
try:
|
|
186
|
-
request(1, "initialize", {"clientInfo": {"name": "agent_telemetry", "title": "AgentTelemetry", "version": "2.
|
|
186
|
+
request(1, "initialize", {"clientInfo": {"name": "agent_telemetry", "title": "AgentTelemetry", "version": "2.2.0"}})
|
|
187
187
|
process.stdin.write('{"method":"initialized","params":{}}\n'); process.stdin.flush()
|
|
188
188
|
before = request(2, "account/read", {"refreshToken": False}).get("account")
|
|
189
189
|
limits = request(3, "account/rateLimits/read", {}) if isinstance(before, dict) and before.get("type") == "chatgpt" else {}
|