tokalytics 2.0.6 → 2.0.8
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 +20 -1
- package/package.json +2 -2
- package/scripts/postinstall.js +28 -1
package/README.md
CHANGED
|
@@ -39,7 +39,7 @@ npm run build # go build -o tokalytics main.go
|
|
|
39
39
|
npm run start # compila e em seguida executa ./tokalytics
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
Na primeira execução o app sobe o **servidor HTTP
|
|
42
|
+
Na primeira execução o app sobe o **servidor HTTP** (porta padrão `3456`; se estiver ocupada, usa a próxima livre) e o ícone na barra de menus. Use **«Abrir Dashboard»** no menu ou abra a URL mostrada no terminal.
|
|
43
43
|
|
|
44
44
|
### Instalação global pelo npm
|
|
45
45
|
|
|
@@ -47,12 +47,27 @@ Na primeira execução o app sobe o **servidor HTTP na porta `3456`** e o ícone
|
|
|
47
47
|
npm install -g tokalytics
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
+
Em instalação **global**, o `postinstall` tenta **abrir o Tokalytics em segundo plano** (ícone na barra). Para instalar sem iniciar: `TOKALYTICS_NO_AUTOSTART=1 npm install -g tokalytics`.
|
|
51
|
+
|
|
50
52
|
Instalação a partir do repositório (sempre o `postinstall` da branch atual):
|
|
51
53
|
|
|
52
54
|
```bash
|
|
53
55
|
npm install -g "github:kaicmurilo/Tokalytics"
|
|
54
56
|
```
|
|
55
57
|
|
|
58
|
+
### CLI: instância única e controle
|
|
59
|
+
|
|
60
|
+
O binário `tokalytics` evita subir uma **segunda** cópia: se já houver uma instância ouvindo nas portas usuais (`3456`–`3555`) e respondendo como Tokalytics, o comando apenas informa a URL e encerra.
|
|
61
|
+
|
|
62
|
+
| Flag | Efeito |
|
|
63
|
+
|------|--------|
|
|
64
|
+
| *(nenhuma)* ou `--start` | Inicia menu bar + dashboard se não houver instância; caso contrário, mensagem em stdout. |
|
|
65
|
+
| `--stop` | Encerra a instância em execução (HTTP local `POST /api/shutdown`, só loopback). |
|
|
66
|
+
| `--reload` | Dispara atualização de dados na instância ativa (`GET /api/refresh`). |
|
|
67
|
+
| `--version` / `-v` | Imprime a versão e sai. |
|
|
68
|
+
|
|
69
|
+
Estado auxiliar (PID/porta) fica em `~/.config/tokalytics/runstate.json` enquanto o app está rodando; é removido ao sair. Se a porta padrão `3456` estiver ocupada por outro programa, o Tokalytics tenta a próxima livre; use a URL indicada no log ou em **Settings** no dashboard.
|
|
70
|
+
|
|
56
71
|
## Dashboard
|
|
57
72
|
|
|
58
73
|
Interface web em abas:
|
|
@@ -67,6 +82,10 @@ Interface web em abas:
|
|
|
67
82
|
|
|
68
83
|
Há atalhos para **atualizar dados**, **compartilhar stats** (PNG) e **configurações** (cookies opcionais para APIs em nuvem).
|
|
69
84
|
|
|
85
|
+
### Aviso de nova versão
|
|
86
|
+
|
|
87
|
+
Em builds com versão **semver** (releases; não `dev`), o dashboard consulta a última release no GitHub e, se houver versão mais nova, mostra um **painel lateral** com o comando `npm install -g tokalytics` (copiar com um clique) e link para a release. O aviso pode ser fechado e não reaparece para a mesma versão alvo até limpar o `localStorage` do site. A resposta do servidor é cacheada por cerca de **1 hora**; use `GITHUB_TOKEN` no ambiente se precisar de limite maior na API do GitHub.
|
|
88
|
+
|
|
70
89
|
## Licença
|
|
71
90
|
|
|
72
91
|
MIT
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tokalytics",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.8",
|
|
4
4
|
"description": "Veja para onde vão seus tokens do Claude Code, Gemini CLI, Cursor e Codex. Reescrito em Go como Tokalytics.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"tokalytics": "bin/run.js"
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"golang",
|
|
29
29
|
"tokalytics"
|
|
30
30
|
],
|
|
31
|
-
"author": "
|
|
31
|
+
"author": "Kaic Murilo",
|
|
32
32
|
"license": "MIT",
|
|
33
33
|
"repository": {
|
|
34
34
|
"type": "git",
|
package/scripts/postinstall.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
const https = require('https');
|
|
5
5
|
const fs = require('fs');
|
|
6
6
|
const path = require('path');
|
|
7
|
+
const { spawn } = require('child_process');
|
|
7
8
|
|
|
8
9
|
const pkgPath = path.join(__dirname, '..', 'package.json');
|
|
9
10
|
const pkgVersion = (() => {
|
|
@@ -127,6 +128,26 @@ function assertReleasePayload(release) {
|
|
|
127
128
|
}
|
|
128
129
|
}
|
|
129
130
|
|
|
131
|
+
/** Só em `npm install -g` (npm_config_global). Ignora CI e TOKALYTICS_NO_AUTOSTART=1. */
|
|
132
|
+
function tryLaunchAfterGlobalInstall() {
|
|
133
|
+
if (process.env.CI === 'true') return false;
|
|
134
|
+
if (process.env.TOKALYTICS_NO_AUTOSTART === '1') return false;
|
|
135
|
+
const g = process.env.npm_config_global;
|
|
136
|
+
if (g !== 'true' && g !== '1') return false;
|
|
137
|
+
if (!fs.existsSync(BIN_PATH)) return false;
|
|
138
|
+
try {
|
|
139
|
+
const child = spawn(BIN_PATH, [], {
|
|
140
|
+
detached: true,
|
|
141
|
+
stdio: 'ignore',
|
|
142
|
+
windowsHide: true,
|
|
143
|
+
});
|
|
144
|
+
child.unref();
|
|
145
|
+
return true;
|
|
146
|
+
} catch {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
130
151
|
async function install() {
|
|
131
152
|
console.log(`Tokalytics installer v${pkgVersion}: buscando última versão...`);
|
|
132
153
|
|
|
@@ -148,7 +169,13 @@ async function install() {
|
|
|
148
169
|
fs.chmodSync(BIN_PATH, 0o755);
|
|
149
170
|
|
|
150
171
|
console.log(`Tokalytics ${version} instalado com sucesso!`);
|
|
151
|
-
|
|
172
|
+
if (tryLaunchAfterGlobalInstall()) {
|
|
173
|
+
console.log(
|
|
174
|
+
'Tokalytics iniciado em segundo plano (ícone na barra de menus / bandeja).'
|
|
175
|
+
);
|
|
176
|
+
} else {
|
|
177
|
+
console.log('Execute: tokalytics');
|
|
178
|
+
}
|
|
152
179
|
}
|
|
153
180
|
|
|
154
181
|
install().catch((err) => {
|