@vidiemme/copilot-proxy 0.3.2 → 0.3.3
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 +86 -20
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -45,7 +45,7 @@ il pacchetto contiene i default aziendali Vidiemme, ma puo' usare un altro endpo
|
|
|
45
45
|
| JetBrains / Android Studio, Eclipse, Xcode, Visual Studio | Non supportati: nessuna intercettazione TLS / `CONNECT` implementata. |
|
|
46
46
|
| macOS | Avvio automatico tramite LaunchAgent `launchd` dell'utente. |
|
|
47
47
|
| Linux | Avvio automatico tramite servizio utente `systemd`. |
|
|
48
|
-
| Windows | Percorsi
|
|
48
|
+
| Windows | Percorsi, impostazioni editor e `COPILOT_API_URL` gestiti. `--autostart` non registra un servizio: stampa il comando da aggiungere a Esecuzione automatica. Rilevamento dei path coperto dai test, da verificare su una postazione reale. |
|
|
49
49
|
|
|
50
50
|
> Le impostazioni di override di Copilot sono opzioni di **debug non supportate**:
|
|
51
51
|
> possono cambiare con gli aggiornamenti dell'estensione. Verifica periodicamente
|
|
@@ -93,7 +93,8 @@ npx @vidiemme/copilot-proxy@latest start
|
|
|
93
93
|
|
|
94
94
|
`start` resta in primo piano: lascia il terminale aperto e usa `Ctrl+C` per fermarlo.
|
|
95
95
|
Con questa modalita' il proxy va avviato prima di usare gli editor configurati.
|
|
96
|
-
Su Windows usa questa modalita'
|
|
96
|
+
Su Windows usa questa modalita', oppure aggiungi a Esecuzione automatica il comando
|
|
97
|
+
che `setup --autostart` stampa.
|
|
97
98
|
|
|
98
99
|
### Un collector diverso da quello aziendale
|
|
99
100
|
|
|
@@ -130,6 +131,17 @@ Il token Copilot e la conversazione vanno all'upstream, **non al collector**.
|
|
|
130
131
|
Il proxy non effettua login o rinnovo delle credenziali Copilot: se ne occupa
|
|
131
132
|
il client o il proxy intermedio gia' utilizzato.
|
|
132
133
|
|
|
134
|
+
### Ciclo di vita di una richiesta
|
|
135
|
+
|
|
136
|
+

|
|
137
|
+
|
|
138
|
+
[Sorgente HTML del diagramma](https://github.com/vidiemme/copilot-usage/blob/main/packages/client/docs/diagrams/lifecycle.html)
|
|
139
|
+
|
|
140
|
+
La risposta arriva al client **mentre** passa: il parser legge una copia dello stream e non
|
|
141
|
+
lo rallenta. L'evento nasce solo a fine stream, e solo se la risposta conteneva contatori.
|
|
142
|
+
Il formato dell'evento e le risposte del collector sono specificati nel
|
|
143
|
+
[contratto](https://github.com/vidiemme/copilot-usage/tree/main/packages/shared#readme).
|
|
144
|
+
|
|
133
145
|
### Protocolli e contatori
|
|
134
146
|
|
|
135
147
|
| Formato di risposta | Origine dei contatori |
|
|
@@ -155,7 +167,10 @@ puo' essere parziale.
|
|
|
155
167
|
|
|
156
168
|
[Sorgente HTML del diagramma](https://github.com/vidiemme/copilot-usage/blob/main/packages/client/docs/diagrams/attribution.html)
|
|
157
169
|
|
|
158
|
-
|
|
170
|
+
### Progetto
|
|
171
|
+
|
|
172
|
+
Il progetto viene risolto con questa precedenza. I segnali 1-4 sono espliciti e vincono
|
|
173
|
+
sempre; il rilevamento dai path parte solo se nessuno di loro e' presente.
|
|
159
174
|
|
|
160
175
|
| Priorita' | Segnale | `projectSource` |
|
|
161
176
|
| --- | --- | --- |
|
|
@@ -189,15 +204,42 @@ In loro assenza la chiave e' il developer: in quel caso progetti paralleli
|
|
|
189
204
|
possono condividere il fallback. Il rilevamento ispeziona al massimo i primi
|
|
190
205
|
4 MiB del corpo della richiesta.
|
|
191
206
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
207
|
+
### Developer
|
|
208
|
+
|
|
209
|
+

|
|
210
|
+
|
|
211
|
+
[Sorgente HTML del diagramma](https://github.com/vidiemme/copilot-usage/blob/main/packages/client/docs/diagrams/identity.html)
|
|
212
|
+
|
|
213
|
+
| Priorita' | Segnale | `developerSource` |
|
|
214
|
+
| --- | --- | --- |
|
|
215
|
+
| 1 | Prefisso URL `/u/<developer>` | `path` |
|
|
216
|
+
| 2 | Header `X-Developer-Id` | `header` |
|
|
217
|
+
| 3 | Mappa statica `ATTRIBUTION_TOKENS` | `token` |
|
|
218
|
+
| 4 | Pseudonimo del token upstream | `pseudonym` |
|
|
219
|
+
| 5 | Nessun segnale: `unknown` | `fallback` |
|
|
220
|
+
|
|
221
|
+
Lo pseudonimo e' un hash SHA-256 con salt, troncato a 16 caratteri esadecimali, del
|
|
222
|
+
**campo stabile** del token Copilot: il primo presente fra `u`, `tid`, `oid` e `sid`. Il
|
|
223
|
+
token ruota ogni pochi minuti e l'hash dell'intero token creerebbe una persona nuova a ogni
|
|
224
|
+
rotazione. Un token che non e' nel formato `chiave=valore;...` viene usato per intero.
|
|
225
|
+
|
|
226
|
+
Il salt e' una costante del pacchetto e deve restare uguale su tutte le postazioni: e' cio'
|
|
227
|
+
che rende confrontabile la stessa persona fra macchine. Cambiarlo interrompe la continuita'
|
|
228
|
+
degli ID.
|
|
229
|
+
|
|
230
|
+
Nome ed email confermati al setup non entrano nell'evento: viaggiano negli header
|
|
231
|
+
`X-Developer-Name` e `X-Developer-Email` di ogni batch, e il collector non li usa se un
|
|
232
|
+
amministratore ha gia' assegnato un nome dalla dashboard.
|
|
198
233
|
|
|
199
234
|
## Configurare editor, CLI e harness
|
|
200
235
|
|
|
236
|
+

|
|
237
|
+
|
|
238
|
+
[Sorgente HTML del diagramma](https://github.com/vidiemme/copilot-usage/blob/main/packages/client/docs/diagrams/routing.html)
|
|
239
|
+
|
|
240
|
+
Ogni famiglia di client ha un meccanismo diverso per cambiare l'URL di Copilot, e ignora
|
|
241
|
+
quello degli altri. `setup --vscode` copre le prime due righe; le altre si configurano a mano.
|
|
242
|
+
|
|
201
243
|
### VS Code e derivati
|
|
202
244
|
|
|
203
245
|
`setup --vscode` imposta queste due chiavi nelle **impostazioni utente**:
|
|
@@ -259,18 +301,38 @@ un client Anthropic richiede un upstream che esponga Messages, o un traduttore.
|
|
|
259
301
|
|
|
260
302
|
### Harness con proxy intermedio
|
|
261
303
|
|
|
262
|
-
Se usi Claude Code, Codex o altri harness tramite un traduttore/provider Copilot
|
|
263
|
-
|
|
304
|
+
Se usi Claude Code, Codex o altri harness tramite un traduttore/provider Copilot
|
|
305
|
+
(`copilot-api`, LiteLLM, ...), metti `copilot-proxy` **per ultimo**, subito prima di Copilot:
|
|
264
306
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
307
|
+

|
|
308
|
+
|
|
309
|
+
[Sorgente HTML del diagramma](https://github.com/vidiemme/copilot-usage/blob/main/packages/client/docs/diagrams/harness.html)
|
|
268
310
|
|
|
269
|
-
Nel proxy intermedio cambia l'URL del provider Copilot in `http://127.0.0.1:8787
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
311
|
+
1. Nel proxy intermedio cambia l'URL del provider Copilot in `http://127.0.0.1:8787`,
|
|
312
|
+
senza path aggiuntivi. Il nome dell'opzione dipende dallo strumento (`baseURL`,
|
|
313
|
+
`api_base`, ...).
|
|
314
|
+
2. Lascia `UPSTREAM_BASE_URL` del proxy di misura al suo default Copilot. Se il proxy
|
|
315
|
+
intermedio usava un host del piano (per esempio `api.business.githubcopilot.com`),
|
|
316
|
+
metti quello in `UPSTREAM_BASE_URL`.
|
|
317
|
+
3. Il proxy intermedio continua a gestire login, rinnovo token e traduzione;
|
|
318
|
+
`copilot-proxy` inoltra `Authorization` senza toccarlo.
|
|
319
|
+
|
|
320
|
+
In questa posizione il proxy vede richieste gia' in formato Copilot con il token vero: lo
|
|
321
|
+
pseudonimo coincide con quello del traffico VS Code della stessa persona e il modello
|
|
322
|
+
registrato e' quello fatturato. Il progetto si ricava dai path citati nei messaggi, finche'
|
|
323
|
+
il proxy intermedio ne conserva il contenuto; altrimenti dichiaralo con
|
|
324
|
+
`http://127.0.0.1:8787/p/<progetto>`. Nel reporting il traffico si distingue per
|
|
325
|
+
`clientName`, che e' lo user-agent del proxy intermedio.
|
|
326
|
+
|
|
327
|
+
**Ripiego**, se il proxy intermedio non permette di cambiare l'URL di Copilot: una seconda
|
|
328
|
+
istanza di `copilot-proxy` prima di lui, con `UPSTREAM_BASE_URL` puntato al proxy
|
|
329
|
+
intermedio, una porta (`--port`) e una cartella (`COPILOT_PROXY_HOME`) proprie, avviata con
|
|
330
|
+
`start` perche' l'avvio automatico gestisce una sola istanza. L'harness manda una chiave
|
|
331
|
+
fittizia, quindi il developer va dichiarato nell'URL (`http://127.0.0.1:8788/u/mario.rossi`);
|
|
332
|
+
se il proxy intermedio rimappa i modelli, controlla `/_usage/unknown-models` sul collector.
|
|
333
|
+
|
|
334
|
+
Se `copilot-proxy` non e' nella catena, quel consumo non viene misurato e si vede solo come
|
|
335
|
+
differenza fra la fattura GitHub e il costo misurato.
|
|
274
336
|
|
|
275
337
|
`copilot-proxy` e' un **reverse proxy HTTP**, non un forward proxy generico:
|
|
276
338
|
impostare soltanto `HTTP_PROXY` / `HTTPS_PROXY` non garantisce il funzionamento.
|
|
@@ -376,6 +438,10 @@ interna, non un sistema di attribuzione non ripudiabile o una fattura ufficiale.
|
|
|
376
438
|
|
|
377
439
|
### Collector non disponibile
|
|
378
440
|
|
|
441
|
+

|
|
442
|
+
|
|
443
|
+
[Sorgente HTML del diagramma](https://github.com/vidiemme/copilot-usage/blob/main/packages/client/docs/diagrams/delivery.html)
|
|
444
|
+
|
|
379
445
|
La disponibilita' del collector non blocca le richieste Copilot. Errori di rete,
|
|
380
446
|
timeout, errori server e HTTP `401`, `403`, `408`, `429` fanno conservare gli eventi
|
|
381
447
|
in uno spool JSONL locale, ritentato ai flush successivi e al riavvio.
|
|
@@ -489,7 +555,7 @@ il proxy lasciando gli editor configurati: Copilot non raggiungerebbe l'upstream
|
|
|
489
555
|
|
|
490
556
|
- [Codice sorgente e documentazione del progetto](https://github.com/vidiemme/copilot-usage)
|
|
491
557
|
- [Segnalazioni e richieste](https://github.com/vidiemme/copilot-usage/issues)
|
|
492
|
-
- [Contratto degli eventi](https://github.com/vidiemme/copilot-usage/tree/main/packages/shared)
|
|
558
|
+
- [Contratto degli eventi: protocollo, campi e risposte](https://github.com/vidiemme/copilot-usage/tree/main/packages/shared#readme)
|
|
493
559
|
- [Licenza MIT](https://github.com/vidiemme/copilot-usage/blob/main/packages/client/LICENSE)
|
|
494
560
|
|
|
495
561
|
I diagrammi sono creati con `diagram-design`, con palette ispirata a
|