tracksiy 0.0.0-stage → 0.1.1
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/LICENSE +21 -0
- package/README.md +183 -2
- package/dist/tracksiy.mjs +3096 -0
- package/package.json +40 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Lutfios
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,184 @@
|
|
|
1
|
-
#
|
|
1
|
+
# tracksiy
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The command line and MCP server for [Tracksiy](https://tracksiy.com): error tracking, uptime monitoring, alerting, releases and source maps, for every app of an organization, from one token.
|
|
4
|
+
|
|
5
|
+
It is built for **agents first**. Everything a person would click in a dashboard is one command with a stable JSON answer. That covers integrating a new app, finding what broke, proving someone gets alerted, and uploading source maps from a deploy.
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npx tracksiy --help
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
No install, no runtime dependencies, Node.js 20 or newer.
|
|
12
|
+
|
|
13
|
+
## Start
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
export TRACKSIY_TOKEN=... # Dashboard > Profile > Auth tokens, or `tracksiy tokens create`
|
|
17
|
+
npx tracksiy auth status # who am I, which organizations and projects
|
|
18
|
+
npx tracksiy overview # the whole fleet: new issues, trends, silent apps, monitors down
|
|
19
|
+
npx tracksiy issues list --since 24h
|
|
20
|
+
npx tracksiy issues view 4812 # stack frames, latest event, tags: enough to fix it
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Integrating an app, from inside its directory:
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
npx tracksiy init --write-env # detect the stack, create the project and keys, write .tracksiy.json
|
|
27
|
+
# install the SDK as the printed guide says, deploy, trigger one error, then:
|
|
28
|
+
npx tracksiy projects verify --wait 120
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## For agents
|
|
32
|
+
|
|
33
|
+
- **JSON whenever stdout is not a terminal.** One line: `{"ok":true,"data":...}`, or `{"ok":false,"error":{"code","message","hint"}}`. The `hint` says what to do next.
|
|
34
|
+
- **Stable exit codes:**
|
|
35
|
+
|
|
36
|
+
| Code | Meaning |
|
|
37
|
+
| --- | --- |
|
|
38
|
+
| 0 | ok |
|
|
39
|
+
| 2 | usage error, nothing sent |
|
|
40
|
+
| 3 | auth |
|
|
41
|
+
| 4 | not found |
|
|
42
|
+
| 5 | rejected as invalid |
|
|
43
|
+
| 6 | rate limited |
|
|
44
|
+
| 7 | network |
|
|
45
|
+
| 8 | server error |
|
|
46
|
+
| 9 | server older than the CLI |
|
|
47
|
+
| 10 | the check ran and did not pass (`health`, `projects verify`, `alerts test`) |
|
|
48
|
+
|
|
49
|
+
- **`--select a,b.c`** keeps only the fields you need, so results stay small. Dot paths reach into lists: `--select issues.id,issues.title`.
|
|
50
|
+
- **`tracksiy describe`** prints every command, flag, exit code and error code as JSON. `tracksiy <command> --help` is the same thing, readable.
|
|
51
|
+
- **Never prompts.** Writes are idempotent declarations, so re-running them is safe. Destructive commands need `--yes`. Bulk changes are dry runs unless `--apply`.
|
|
52
|
+
- **Typos are caught before anything is sent**, with a suggestion: `Unknown flag --staus. Did you mean --status?`
|
|
53
|
+
- **Organization and project resolve themselves**, in this order: `--org`/`--project`, then `TRACKSIY_ORG`/`TRACKSIY_PROJECT`, then `.tracksiy.json` (searched upward from the working directory), then the only one the token can see.
|
|
54
|
+
|
|
55
|
+
## MCP server
|
|
56
|
+
|
|
57
|
+
`tracksiy mcp` serves every command as an MCP tool over stdio, with the same validation, the same errors and a `select` argument on every tool.
|
|
58
|
+
|
|
59
|
+
Claude Code:
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
claude mcp add tracksiy -e TRACKSIY_TOKEN=<token> -- npx -y tracksiy mcp
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Claude Desktop, Cursor, Windsurf and most other clients:
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"mcpServers": {
|
|
70
|
+
"tracksiy": {
|
|
71
|
+
"command": "npx",
|
|
72
|
+
"args": ["-y", "tracksiy", "mcp"],
|
|
73
|
+
"env": { "TRACKSIY_TOKEN": "<token>", "TRACKSIY_ORG": "<org>" }
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Tool names are the command path joined with underscores: `issues_list`, `alerts_set`, `sourcemaps_upload`. Read-only, destructive and idempotent tools are annotated as such.
|
|
80
|
+
|
|
81
|
+
## In CI
|
|
82
|
+
|
|
83
|
+
Upload source maps after the build and declare the release from the deploy step. A token with only `project:releases` on one project is enough:
|
|
84
|
+
|
|
85
|
+
```sh
|
|
86
|
+
npx tracksiy sourcemaps upload dist --inject --project shop
|
|
87
|
+
npx tracksiy releases declare "shop@$GIT_SHA" --ref "$GIT_SHA" --released --project shop
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
`--inject` stamps each built file and its map with a debug ID, so errors map to the exact build no matter what URL the file was served from. Only chunks the server does not already have are sent.
|
|
91
|
+
|
|
92
|
+
Android (ProGuard / R8):
|
|
93
|
+
|
|
94
|
+
```sh
|
|
95
|
+
npx tracksiy proguard upload app/build/outputs/mapping/release/mapping.txt --uuid "$MAPPING_UUID" --project shop-android
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Talking to the Tracksiy team
|
|
99
|
+
|
|
100
|
+
If Tracksiy itself gets in your agent's way, open a ticket. That covers a bug, a missing capability, an error it cannot interpret, or being blocked. Tickets go through [PeerPacket](https://peerpacket.com) (the `pp` CLI), in the `tracksiy-support` channel, for `tracksiy-agent`, who answers on the ticket and closes it:
|
|
101
|
+
|
|
102
|
+
```sh
|
|
103
|
+
npm install -g peerpacket
|
|
104
|
+
pp join tracksiy-support
|
|
105
|
+
pp ticket new tracksiy-support "sourcemaps upload: 400 on a map with ?v=" --to tracksiy-agent --label bug -f report.md
|
|
106
|
+
pp tickets tracksiy-support # answers waiting for you
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Labels: `bug`, `feature`, `question`, `blocker`. `npx tracksiy support` prints the same, as JSON for an agent.
|
|
110
|
+
|
|
111
|
+
## Commands
|
|
112
|
+
|
|
113
|
+
<!-- commands:start -->
|
|
114
|
+
| Command | What it does | Effect | MCP tool |
|
|
115
|
+
| --- | --- | --- | --- |
|
|
116
|
+
| `init` | Integrate the app in this directory, without a browser: detect the stack, create the project and its keys, write .tracksiy.json, and print the exact next steps. | write | `init` |
|
|
117
|
+
| `auth login` | Check a token against the server and save it for this server (file mode 0600). | write | - |
|
|
118
|
+
| `auth status` | Which server, which token (and where each came from), which organizations and defaults are in effect. | read | `auth_status` |
|
|
119
|
+
| `auth logout` | Forget the saved token for this server. Does not revoke it (use `tokens delete`). | write | - |
|
|
120
|
+
| `orgs list` | Organizations this token can see, each with the projects it may reach. | read | `orgs_list` |
|
|
121
|
+
| `projects list` | Projects of the organization that this token may reach. | read | `projects_list` |
|
|
122
|
+
| `overview` | The whole fleet in one call: per-project issues, volume trend, silence, monitors and alert coverage. | read | `overview` |
|
|
123
|
+
| `changes` | What changed since a point in time: new issues, monitors going down or up, new releases. | read | `changes` |
|
|
124
|
+
| `health` | Can the platform itself be believed right now? Exit code 10 when any check fails. | read | `health` |
|
|
125
|
+
| `monitors list` | Every monitor of the organization with its state, including monitors no project owns. | read | `monitors_list` |
|
|
126
|
+
| `monitors declare` | Declare monitors for a project up front, idempotently: heartbeats for jobs, HTTP checks, TLS, ingest silence. | write | `monitors_declare` |
|
|
127
|
+
| `monitors delete <slug>` | Remove one of a project's monitors by the slug it was declared with. | **destructive** | `monitors_delete` |
|
|
128
|
+
| `performance` | Is this project slow, and did it get slower? Transactions compared with the previous window, plus uptime. | read | `performance` |
|
|
129
|
+
| `issues list` | Recent issues of a project, newest activity first, with the frames that matter inlined. | read | `issues_list` |
|
|
130
|
+
| `issues view <id>` | One issue in enough depth to act on: latest event, stack frames, tags, recent volume. | read | `issues_view` |
|
|
131
|
+
| `issues resolve <ids...>` | Mark issues resolved. A new event on a resolved issue reopens it as a regression. | write | `issues_resolve` |
|
|
132
|
+
| `issues ignore <ids...>` | Mark issues ignored: they stop alerting until unignored. | write | `issues_ignore` |
|
|
133
|
+
| `issues unresolve <ids...>` | Reopen issues. | write | `issues_unresolve` |
|
|
134
|
+
| `issues bulk-status` | Change the status of every issue matching a filter. Dry run unless --apply. | write | `issues_bulk_status` |
|
|
135
|
+
| `projects create <name>` | Everything a new app needs in one idempotent call: the project, an ingest key per surface, an upload token, and the next steps. | write | `projects_create` |
|
|
136
|
+
| `projects verify` | Did the integration actually work? Checks events, releases, environments, source maps, privacy and alerting. Exit 10 if not. | read | `projects_verify` |
|
|
137
|
+
| `onboarding` | What to know before integrating an app. No token needed. | read | `onboarding` |
|
|
138
|
+
| `alerts get` | Who is told when this project breaks, and whether that can actually happen. | read | `alerts_get` |
|
|
139
|
+
| `alerts set` | Declare the project's alerting idempotently. Then prove it with `alerts test`. | write | `alerts_set` |
|
|
140
|
+
| `alerts test` | Send a test message through every recipient and report each delivery. Exit code 10 if any failed. | write | `alerts_test` |
|
|
141
|
+
| `alerts coverage` | For the whole organization: which projects can alert, which cannot, and through what. | read | `alerts_coverage` |
|
|
142
|
+
| `alerts defaults` | Apply one alerting declaration to many projects at once (by default only where none exists). | write | `alerts_defaults` |
|
|
143
|
+
| `alerts settings` | When digest-mode recipients are told, and whether the last digests went out. | read | `alerts_settings` |
|
|
144
|
+
| `alerts settings set` | Declare the digest hours and timezone. | write | `alerts_settings_set` |
|
|
145
|
+
| `keys list` | Every ingest key of the project: its surface, whether ingest accepts it, its rate limit and volume. | read | `keys_list` |
|
|
146
|
+
| `keys set <name>` | Declare one ingest key's state: active or not, and its rate limit. | write | `keys_set` |
|
|
147
|
+
| `keys rotate <name>` | Replace an ingest key with a new one of the same name and limit; the old one stops being accepted. | **destructive** | `keys_rotate` |
|
|
148
|
+
| `releases list` | What did the last deploys break? Recent releases with their events, issues and the issues they introduced. | read | `releases_list` |
|
|
149
|
+
| `releases health` | Is the app crashing for its users, and did the last release make it worse? Crash-free sessions and users per release. | read | `releases_health` |
|
|
150
|
+
| `releases declare <version>` | Create or update a release idempotently: its commit, URL, and when it was released. Run it from the deploy. | write | `releases_declare` |
|
|
151
|
+
| `sourcemaps inject <paths...>` | Stamp built JavaScript and its source maps with a debug ID, so errors map to the exact build. Run after the build, before deploying. | write | `sourcemaps_inject` |
|
|
152
|
+
| `sourcemaps upload <paths...>` | Upload built JavaScript and source maps so stack traces show original files and lines. Only missing bytes are sent. | write | `sourcemaps_upload` |
|
|
153
|
+
| `proguard upload <mapping>` | Upload an Android ProGuard/R8 mapping so obfuscated stack traces are readable. | write | `proguard_upload` |
|
|
154
|
+
| `artifacts list` | What is actually stored for a project: source files, source maps and ProGuard mappings. Use it to prove an upload landed. | read | `artifacts_list` |
|
|
155
|
+
| `tokens list` | Your tokens, newest first, without their values. | read | `tokens_list` |
|
|
156
|
+
| `tokens self` | Describe the token making this call: scopes, projects, expiry. | read | `tokens_self` |
|
|
157
|
+
| `tokens create` | Mint a token for the same user, never broader than the one making the call. | write | `tokens_create` |
|
|
158
|
+
| `tokens update <id>` | Change a token's label, scopes, projects or lifetime (never broader than the caller). | write | `tokens_update` |
|
|
159
|
+
| `tokens delete <id>` | Revoke a token immediately. | **destructive** | `tokens_delete` |
|
|
160
|
+
| `tokens rotate` | Replace the token making this call; the old one keeps working for a grace period. | **destructive** | `tokens_rotate` |
|
|
161
|
+
| `support` | How to tell the Tracksiy team what got in your way: a bug, a missing capability, an error you cannot interpret, or a blocker. | read | `support` |
|
|
162
|
+
| `api <method> <path>` | Call any endpoint directly, for what no command covers yet. Paths are relative to /api/agent/v1/ unless they start with /. | write | `api` |
|
|
163
|
+
| `describe [command...]` | Machine-readable description of every command, flag, exit code and error code. Start here if you are an agent. | read | - |
|
|
164
|
+
| `mcp` | Run as an MCP server on stdio: every command becomes a tool for Claude, Cursor or any MCP client. | read | - |
|
|
165
|
+
<!-- commands:end -->
|
|
166
|
+
|
|
167
|
+
## Configuration
|
|
168
|
+
|
|
169
|
+
| Variable | Meaning |
|
|
170
|
+
| --- | --- |
|
|
171
|
+
| `TRACKSIY_TOKEN` | API token. Prefer it over `--token`, which shows up in process lists. |
|
|
172
|
+
| `TRACKSIY_URL` | Server root, for self-hosted installs. Default `https://tracksiy.com`. |
|
|
173
|
+
| `TRACKSIY_ORG`, `TRACKSIY_PROJECT` | Defaults. `TRACKSIY_PROJECT` may be `org/project`. |
|
|
174
|
+
| `TRACKSIY_FORMAT` | `json` or `text`. |
|
|
175
|
+
| `TRACKSIY_TIMEOUT` | Seconds per request, default 30. |
|
|
176
|
+
| `TRACKSIY_CONFIG` | Where `auth login` saves tokens. Default `~/.config/tracksiy/config.json`, mode 0600. |
|
|
177
|
+
|
|
178
|
+
Saved tokens are kept per server, so a token is never sent to a different `--url`. The CLI also refuses to send a token over plain HTTP to anything but a loopback address.
|
|
179
|
+
|
|
180
|
+
`.tracksiy.json`, written by `tracksiy init`, holds `{"org": "...", "project": "..."}` and never a secret. Commit it.
|
|
181
|
+
|
|
182
|
+
## License
|
|
183
|
+
|
|
184
|
+
MIT
|