@overcrow/mcp 0.1.2 → 0.1.4
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 +7 -7
- package/dist/bootstrap/pin.json +42 -42
- package/dist/content/docs/en/cli.md +32 -31
- package/dist/content/docs/en/dev-channel.md +5 -5
- package/dist/content/docs/en/elements.md +5 -5
- package/dist/content/docs/en/forms.md +32 -30
- package/dist/content/docs/en/guide.md +16 -16
- package/dist/content/docs/en/index.md +12 -12
- package/dist/content/docs/en/limits.md +5 -4
- package/dist/content/docs/en/logic.md +30 -28
- package/dist/content/docs/en/manifest.md +35 -33
- package/dist/content/docs/en/mcp.md +13 -13
- package/dist/content/docs/en/package.md +7 -7
- package/dist/content/docs/en/publish-keys.md +6 -5
- package/dist/content/docs/en/publishing.md +9 -8
- package/dist/content/docs/en/reference.md +5 -5
- package/dist/content/docs/en/result-shapes.md +3 -3
- package/dist/content/docs/en/sdk.md +11 -11
- package/dist/content/docs/en/security.md +30 -30
- package/dist/content/docs/en/service-reference.md +2 -2
- package/dist/content/docs/en/services.md +33 -32
- package/dist/content/docs/en/style-properties.md +2 -2
- package/dist/content/docs/en/style.md +19 -18
- package/dist/content/docs/en/testing.md +36 -35
- package/dist/content/docs/en/view.md +13 -12
- package/dist/content/docs/en/widget-statistics.md +18 -17
- package/dist/content/docs/en/widgets.md +1 -1
- package/dist/content/docs/fr/cli.md +33 -29
- package/dist/content/docs/fr/dev-channel.md +8 -8
- package/dist/content/docs/fr/elements.md +5 -5
- package/dist/content/docs/fr/forms.md +35 -34
- package/dist/content/docs/fr/guide.md +13 -12
- package/dist/content/docs/fr/index.md +15 -15
- package/dist/content/docs/fr/limits.md +5 -5
- package/dist/content/docs/fr/logic.md +42 -37
- package/dist/content/docs/fr/manifest.md +40 -39
- package/dist/content/docs/fr/mcp.md +21 -19
- package/dist/content/docs/fr/package.md +8 -7
- package/dist/content/docs/fr/publish-keys.md +6 -5
- package/dist/content/docs/fr/publishing.md +8 -8
- package/dist/content/docs/fr/reference.md +6 -6
- package/dist/content/docs/fr/result-shapes.md +4 -3
- package/dist/content/docs/fr/sdk.md +12 -11
- package/dist/content/docs/fr/security.md +41 -39
- package/dist/content/docs/fr/service-reference.md +2 -2
- package/dist/content/docs/fr/services.md +34 -33
- package/dist/content/docs/fr/style-properties.md +2 -2
- package/dist/content/docs/fr/style.md +25 -22
- package/dist/content/docs/fr/testing.md +43 -43
- package/dist/content/docs/fr/view.md +17 -16
- package/dist/content/docs/fr/widget-statistics.md +20 -20
- package/dist/content/docs/fr/widgets.md +1 -1
- package/dist/content/examples/clock/README.md +3 -3
- package/dist/content/examples/fps/README.md +3 -3
- package/dist/content/examples/media/README.md +2 -2
- package/dist/content/examples/notes/README.md +1 -1
- package/dist/content/examples/performance/README.md +2 -2
- package/dist/content/examples/playervox-journal/README.md +5 -5
- package/dist/content/examples/playervox-rating/README.md +3 -3
- package/dist/content/examples/playervox-reviews/README.md +3 -3
- package/dist/content/examples/playervox-score/README.md +3 -3
- package/dist/content/examples/session/README.md +3 -3
- package/dist/content/examples/stopwatch/README.md +3 -3
- package/dist/content/examples/twitch-chat/README.md +4 -4
- package/dist/content/examples/warframe-market/README.md +2 -2
- package/dist/content/reference/errors.json +16 -16
- package/dist/prompts.js +2 -2
- package/dist/resources.js +1 -1
- package/dist/version.js +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
|
@@ -25,15 +25,15 @@ Chaque widget tourne derrière deux barrières.
|
|
|
25
25
|
capability, un Job Object par widget, et des mitigations de processus
|
|
26
26
|
qui interdisent le code dynamique et le système de fenêtres.
|
|
27
27
|
|
|
28
|
-
OverCrow dessine tout lui-même : la VM envoie une description de
|
|
29
|
-
jamais de pixels, et n’exécute jamais de code dans le processus
|
|
30
|
-
Le survol, le focus, l’état pressé et les transitions sont
|
|
31
|
-
OverCrow : un widget n’observe pas les mouvements du pointeur
|
|
32
|
-
demandés par un événement.
|
|
33
|
-
|
|
34
|
-
Un dépassement de budget n’arrête que ce widget. OverCrow affiche
|
|
35
|
-
erreur fixe dans son cadre et le relance après 1, 5 puis 15 secondes,
|
|
36
|
-
fois au plus ; une erreur de paquet ou de protocole attend que
|
|
28
|
+
PlayerVox OverCrow dessine tout lui-même : la VM envoie une description de
|
|
29
|
+
la vue, jamais de pixels, et n’exécute jamais de code dans le processus
|
|
30
|
+
d’OverCrow. Le survol, le focus, l’état pressé et les transitions sont
|
|
31
|
+
résolus par OverCrow : un widget n’observe pas les mouvements du pointeur
|
|
32
|
+
qu’il n’a pas demandés par un événement.
|
|
33
|
+
|
|
34
|
+
Un dépassement de budget n’arrête que ce widget. PlayerVox OverCrow affiche
|
|
35
|
+
une erreur fixe dans son cadre et le relance après 1, 5 puis 15 secondes,
|
|
36
|
+
trois fois au plus ; une erreur de paquet ou de protocole attend que
|
|
37
37
|
l’utilisateur le réactive. Les chiffres figurent dans les
|
|
38
38
|
[limites](limits.md#logique).
|
|
39
39
|
|
|
@@ -44,24 +44,26 @@ déclaration n’accorde rien à elle seule. À l’installation du widget, le
|
|
|
44
44
|
Centre de contrôle propose chaque permission cochée, et l’utilisateur peut
|
|
45
45
|
en décocher. Ensuite, l’utilisateur autorise ou retire chaque permission
|
|
46
46
|
dans le Centre de contrôle ; en retirer une redémarre le widget sans elle.
|
|
47
|
-
OverCrow vérifie de nouveau la permission à chaque appel
|
|
47
|
+
PlayerVox OverCrow vérifie de nouveau la permission à chaque appel
|
|
48
48
|
d’un service.
|
|
49
49
|
|
|
50
50
|
Quatre permissions ouvrent les services généraux : `network` (des routes
|
|
51
|
-
HTTPS exactes, par le broker
|
|
52
|
-
pour ce seul widget), `clipboardWrite` (l’écriture de texte,
|
|
53
|
-
action de l’utilisateur) et `gameEvents` (des événements de jeu
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
OverCrow
|
|
51
|
+
HTTPS exactes, par le broker de PlayerVox OverCrow), `storage` (un stockage
|
|
52
|
+
clé-valeur pour ce seul widget), `clipboardWrite` (l’écriture de texte,
|
|
53
|
+
pendant une action de l’utilisateur) et `gameEvents` (des événements de jeu
|
|
54
|
+
nommés).
|
|
55
|
+
|
|
56
|
+
Les capabilities donnent accès à des données et à des actions de
|
|
57
|
+
PlayerVox OverCrow et des comptes de l’utilisateur. Une capability
|
|
58
|
+
**sensible** révèle des données personnelles ou le jeu en cours : un widget
|
|
59
|
+
qui en déclare une ne peut pas déclarer aussi `network` ni `clipboardWrite`,
|
|
60
|
+
et son stockage ne dure que le temps de son processus, pour que ces données
|
|
61
|
+
ne puissent pas quitter la machine par le widget.
|
|
62
|
+
|
|
63
|
+
Les connexions aux comptes (PlayerVox, Twitch) appartiennent à
|
|
64
|
+
PlayerVox OverCrow : la connexion, les codes et les jetons sont affichés et
|
|
65
|
+
conservés par OverCrow, et un widget ne reçoit que les données que décrit sa
|
|
66
|
+
capability.
|
|
65
67
|
|
|
66
68
|
Chaque permission, chaque capability et les services qu’elle ouvre sont
|
|
67
69
|
décrits dans [services et permissions](services.md). Déclarez le strict
|
|
@@ -79,17 +81,17 @@ appelés que pendant que la logique traite une vraie action de l’utilisateur
|
|
|
79
81
|
dans le widget : un clic, une touche, une modification, la validation d’un
|
|
80
82
|
formulaire. Un appel depuis un minuteur, une réponse de service ou une
|
|
81
83
|
ligne du menu d’options est refusé avec `gesture_required`. Les widgets ne
|
|
82
|
-
reçoivent d’entrées qu’en mode interactif
|
|
83
|
-
clics les traversent. Supprimer une note ou une session du
|
|
84
|
-
aussi une confirmation à l’utilisateur, dans une boîte de
|
|
85
|
-
par OverCrow. Voir
|
|
84
|
+
reçoivent d’entrées qu’en mode interactif de PlayerVox OverCrow ; en mode
|
|
85
|
+
passif, les clics les traversent. Supprimer une note ou une session du
|
|
86
|
+
journal demande aussi une confirmation à l’utilisateur, dans une boîte de
|
|
87
|
+
dialogue dessinée par OverCrow. Voir
|
|
86
88
|
[les appels qui demandent une action de l’utilisateur](services.md#les-appels-qui-demandent-une-action-de-lutilisateur).
|
|
87
89
|
|
|
88
90
|
Ce que l’utilisateur écrit dans ses notes, dans un avis PlayerVox et dans
|
|
89
91
|
le chat ne passe jamais par votre logique : un `form` doté d’un `intent` envoie les
|
|
90
|
-
valeurs de ses propres champs de texte et curseurs,
|
|
91
|
-
modifie et valide lui-même. Votre logique peut les lire, pas les
|
|
92
|
-
Voir
|
|
92
|
+
valeurs de ses propres champs de texte et curseurs, que PlayerVox OverCrow
|
|
93
|
+
remplit, modifie et valide lui-même. Votre logique peut les lire, pas les
|
|
94
|
+
écrire. Voir
|
|
93
95
|
[les formulaires qui écrivent des données de l’utilisateur](forms.md#les-formulaires-qui-écrivent-des-données-de-lutilisateur).
|
|
94
96
|
|
|
95
97
|
## Ce qu’un widget ne peut pas faire
|
|
@@ -100,10 +102,10 @@ Voir
|
|
|
100
102
|
l’exécution ou télécharger du code : le seul code est le `logic.js` relu
|
|
101
103
|
du paquet.
|
|
102
104
|
- Voir les autres widgets, leur état, leur stockage ou leurs permissions,
|
|
103
|
-
ni la mémoire, la fenêtre ou les entrées du jeu. OverCrow ne
|
|
104
|
-
jamais dans le jeu.
|
|
105
|
+
ni la mémoire, la fenêtre ou les entrées du jeu. PlayerVox OverCrow ne
|
|
106
|
+
s’injecte jamais dans le jeu.
|
|
105
107
|
- Dessiner hors de son cadre, couvrir ou imiter le cadre, les menus ou les
|
|
106
|
-
confirmations
|
|
108
|
+
confirmations de PlayerVox OverCrow.
|
|
107
109
|
- Lire des jetons de compte, des cookies ou des identifiants.
|
|
108
110
|
- Lire le presse-papiers.
|
|
109
111
|
- Écrire des journaux en production : la sortie de `log.*` n’apparaît que
|
|
@@ -114,13 +116,13 @@ Voir
|
|
|
114
116
|
## Ce qu’OverCrow vérifie
|
|
115
117
|
|
|
116
118
|
Chaque paquet est vérifié lors de son admission au catalogue, puis chaque
|
|
117
|
-
fois
|
|
118
|
-
fichiers et la vue compilée doivent concorder, sinon le widget ne
|
|
119
|
-
pas. Voir [le paquet](package.md#comment-overcrow-vérifie-un-paquet)
|
|
120
|
-
[publication et revue](publishing.md).
|
|
119
|
+
fois que PlayerVox OverCrow le démarre : le catalogue signé, le registre de
|
|
120
|
+
ses fichiers et la vue compilée doivent concorder, sinon le widget ne
|
|
121
|
+
démarre pas. Voir [le paquet](package.md#comment-overcrow-vérifie-un-paquet)
|
|
122
|
+
et [publication et revue](publishing.md).
|
|
121
123
|
|
|
122
124
|
Une version du catalogue peut être suspendue ou révoquée après sa
|
|
123
|
-
publication : OverCrow arrête alors la copie installée. Voir
|
|
125
|
+
publication : PlayerVox OverCrow arrête alors la copie installée. Voir
|
|
124
126
|
[statuts des versions](publishing.md#statuts-des-versions).
|
|
125
127
|
|
|
126
128
|
## Signaler une vulnérabilité
|
|
@@ -231,7 +231,7 @@ mise à jour.
|
|
|
231
231
|
|
|
232
232
|
### `notes.delete`
|
|
233
233
|
|
|
234
|
-
- **Nature** : appel, à réponse unique ; l’utilisateur le confirme d’abord, dans une boîte de dialogue dessinée par OverCrow
|
|
234
|
+
- **Nature** : appel, à réponse unique ; l’utilisateur le confirme d’abord, dans une boîte de dialogue dessinée par PlayerVox OverCrow
|
|
235
235
|
- **Exige** : capability `notes.write`
|
|
236
236
|
- **Quand l’appeler** : Seulement pendant une action de l’utilisateur
|
|
237
237
|
- **Paramètres** : `note` : texte ≤ 128 octets
|
|
@@ -294,7 +294,7 @@ mise à jour.
|
|
|
294
294
|
|
|
295
295
|
### `journal.delete`
|
|
296
296
|
|
|
297
|
-
- **Nature** : appel, à réponse unique ; l’utilisateur le confirme d’abord, dans une boîte de dialogue dessinée par OverCrow
|
|
297
|
+
- **Nature** : appel, à réponse unique ; l’utilisateur le confirme d’abord, dans une boîte de dialogue dessinée par PlayerVox OverCrow
|
|
298
298
|
- **Exige** : capability `journal.delete`
|
|
299
299
|
- **Quand l’appeler** : Seulement pendant une action de l’utilisateur
|
|
300
300
|
- **Paramètres** : `session` : texte ≤ 128 octets
|
|
@@ -30,7 +30,7 @@ du [manifeste](manifest.md#permissions) :
|
|
|
30
30
|
- quatre **permissions** pour les services généraux : `network`, `storage`,
|
|
31
31
|
`clipboardWrite` et `gameEvents` ;
|
|
32
32
|
- des **capabilities**, listées sous `permissions.capabilities`, pour les
|
|
33
|
-
données et les actions
|
|
33
|
+
données et les actions de PlayerVox OverCrow lui-même et des comptes de
|
|
34
34
|
l’utilisateur : la fréquence d’images, le lecteur multimédia, les notes de
|
|
35
35
|
l’utilisateur, la note qu’il donne à un jeu sur PlayerVox, le chat
|
|
36
36
|
Twitch…
|
|
@@ -93,8 +93,8 @@ async function readStored(key: string): Promise<JsonValue | undefined> {
|
|
|
93
93
|
}
|
|
94
94
|
```
|
|
95
95
|
|
|
96
|
-
**Un abonnement** prend un écouteur. OverCrow l’appelle aussitôt
|
|
97
|
-
valeur courante, puis à chaque nouvelle valeur, jusqu’à ce que vous
|
|
96
|
+
**Un abonnement** prend un écouteur. PlayerVox OverCrow l’appelle aussitôt
|
|
97
|
+
avec la valeur courante, puis à chaque nouvelle valeur, jusqu’à ce que vous
|
|
98
98
|
l’annuliez avec `cancel()` ou qu’il se termine par un échec. L’écouteur
|
|
99
99
|
vient en dernier ; un service qui a des paramètres les prend en premier.
|
|
100
100
|
|
|
@@ -127,9 +127,9 @@ Les services sont regroupés dans des espaces de noms du SDK : `storage`,
|
|
|
127
127
|
`journal`, `twitch`). Chaque service figure, avec ses paramètres et son
|
|
128
128
|
résultat, dans la [référence des services](service-reference.md).
|
|
129
129
|
|
|
130
|
-
OverCrow vérifie chaque appel à son arrivée, dans cet ordre : la
|
|
131
|
-
ou la capability, les paramètres, l’action de l’utilisateur quand
|
|
132
|
-
service en demande une, puis le compte quand il en faut un. Les types du
|
|
130
|
+
PlayerVox OverCrow vérifie chaque appel à son arrivée, dans cet ordre : la
|
|
131
|
+
permission ou la capability, les paramètres, l’action de l’utilisateur quand
|
|
132
|
+
le service en demande une, puis le compte quand il en faut un. Les types du
|
|
133
133
|
SDK vous aident à appeler correctement un service ; ce ne sont pas eux qui
|
|
134
134
|
font respecter les règles.
|
|
135
135
|
|
|
@@ -166,20 +166,20 @@ dernière mise à jour.
|
|
|
166
166
|
| `gesture_required` | Le service ne peut être appelé que pendant une action de l’utilisateur, et cet appel n’a pas eu lieu pendant le traitement d’une telle action, ou cette action a déjà autorisé un autre appel. |
|
|
167
167
|
| `not_connected` | Le service a besoin du compte PlayerVox ou Twitch de l’utilisateur, qui n’est pas connecté pour le moment. |
|
|
168
168
|
| `stale_context` | Ce sur quoi portait l’appel a changé avant la réponse : un autre jeu, un autre compte, un autre lecteur multimédia, un objet supprimé entre-temps. Relisez l’état courant. |
|
|
169
|
-
| `unavailable` | La source
|
|
169
|
+
| `unavailable` | La source de PlayerVox OverCrow pour ces données a échoué, ou ne peut pas agir pour l’instant. Un abonnement qui se termine ainsi peut être relancé plus tard. |
|
|
170
170
|
| `busy` | Trop d’opérations sont en cours : une confirmation est déjà ouverte, une file ou le budget des réponses réseau est plein, ou le fournisseur demande d’attendre. Réessayez plus tard. |
|
|
171
171
|
| `cancelled` | L’utilisateur a refusé la confirmation, ou a quitté le mode interactif pendant qu’elle était ouverte. |
|
|
172
172
|
| `quota_exceeded` | Un quota est atteint : le stockage, les minuteurs, les notes, les chaînes favorites. |
|
|
173
173
|
| `unsupported` | La cible ne sait pas le faire : un lecteur multimédia qui ne propose pas la commande, par exemple. |
|
|
174
|
-
| `url_invalid` | `http.fetch` : l’URL n’est pas une URL HTTPS absolue
|
|
174
|
+
| `url_invalid` | `http.fetch` : l’URL n’est pas une URL HTTPS absolue que PlayerVox OverCrow accepte. |
|
|
175
175
|
| `resolve_failed` | `http.fetch` : le nom d’hôte n’a pas pu être résolu. |
|
|
176
176
|
| `address_denied` | `http.fetch` : le nom d’hôte se résout en une adresse locale, privée ou non publique. |
|
|
177
|
-
| `too_many_addresses` | `http.fetch` : le nom d’hôte se résout en plus d’adresses
|
|
177
|
+
| `too_many_addresses` | `http.fetch` : le nom d’hôte se résout en plus d’adresses que PlayerVox OverCrow n’en accepte. |
|
|
178
178
|
| `peer_mismatch` | `http.fetch` : le serveur qui a répondu n’est pas à l’une des adresses résolues et vérifiées. |
|
|
179
|
-
| `redirect_denied` | `http.fetch` : le serveur a répondu par une redirection. OverCrow n’en suit aucune : déclarez et demandez l’URL finale. |
|
|
180
|
-
| `encoding_denied` | `http.fetch` : la réponse est compressée ou encodée d’une façon
|
|
181
|
-
| `content_type_denied` | `http.fetch` : le type de média de la réponse n’est pas de ceux
|
|
182
|
-
| `response_metadata_limit` | `http.fetch` : la ligne d’état ou les en-têtes de la réponse sont mal formés ou dépassent les limites
|
|
179
|
+
| `redirect_denied` | `http.fetch` : le serveur a répondu par une redirection. PlayerVox OverCrow n’en suit aucune : déclarez et demandez l’URL finale. |
|
|
180
|
+
| `encoding_denied` | `http.fetch` : la réponse est compressée ou encodée d’une façon que PlayerVox OverCrow n’accepte pas, ou son corps ne se décode pas comme `as` le demande (JSON ou texte invalide). |
|
|
181
|
+
| `content_type_denied` | `http.fetch` : le type de média de la réponse n’est pas de ceux que PlayerVox OverCrow accepte pour cette requête. |
|
|
182
|
+
| `response_metadata_limit` | `http.fetch` : la ligne d’état ou les en-têtes de la réponse sont mal formés ou dépassent les limites de PlayerVox OverCrow. |
|
|
183
183
|
| `request_body_limit` | `http.fetch` : le corps de la requête dépasse 256 Kio. |
|
|
184
184
|
| `response_body_limit` | `http.fetch` : le corps de la réponse dépasse la limite de la règle réseau (`maxResponseBytes`, ou 1 Mio sans lui et pour `as: "image"`). |
|
|
185
185
|
| `image_invalid` | `http.fetch` avec `as: "image"` : la réponse n’est pas une image PNG, JPEG ou WebP dans les limites des images. |
|
|
@@ -193,8 +193,8 @@ Trois habitudes couvrent la plupart des cas :
|
|
|
193
193
|
logique ; l’utilisateur voit « Prévisions indisponibles », pas
|
|
194
194
|
`transport_failed`.
|
|
195
195
|
- **Réabonnez-vous quand un abonnement s’est terminé.** Une source
|
|
196
|
-
|
|
197
|
-
lecteur multimédia, par exemple) : l’abonnement se termine avec
|
|
196
|
+
de PlayerVox OverCrow peut échouer pendant que le widget tourne (la
|
|
197
|
+
session du lecteur multimédia, par exemple) : l’abonnement se termine avec
|
|
198
198
|
`unavailable`. Réabonnez-vous quelques secondes plus tard avec
|
|
199
199
|
`timers.after` ; OverCrow relance la source pour le nouvel abonnement. Le
|
|
200
200
|
widget Média attend cinq secondes :
|
|
@@ -241,11 +241,12 @@ est refusé avec `gesture_required`.
|
|
|
241
241
|
- Une action de l’utilisateur autorise un seul appel protégé. Appelez le
|
|
242
242
|
service directement dans le gestionnaire, pas après un `await` sur autre
|
|
243
243
|
chose.
|
|
244
|
-
- Les widgets ne reçoivent d’entrées qu’en mode interactif
|
|
245
|
-
appel protégé ne peut donc avoir lieu que dans ce
|
|
244
|
+
- Les widgets ne reçoivent d’entrées qu’en mode interactif de
|
|
245
|
+
PlayerVox OverCrow : un appel protégé ne peut donc avoir lieu que dans ce
|
|
246
|
+
mode.
|
|
246
247
|
- `notes.delete` et `journal.delete` demandent en plus une confirmation à
|
|
247
|
-
l’utilisateur, dans une boîte de dialogue dessinée par OverCrow
|
|
248
|
-
confirmation refusée donne `cancelled`.
|
|
248
|
+
l’utilisateur, dans une boîte de dialogue dessinée par PlayerVox OverCrow
|
|
249
|
+
; une confirmation refusée donne `cancelled`.
|
|
249
250
|
|
|
250
251
|
Les tableaux ci-dessous indiquent, pour chaque service, quand l’appeler.
|
|
251
252
|
|
|
@@ -338,8 +339,8 @@ Chaque paramètre de chemin ou de requête porte une contrainte :
|
|
|
338
339
|
| `string` | `{ maxLength }` | Paramètres de requête seulement ; tout texte sans caractère de contrôle ; `maxLength` de 1 à 256 octets. |
|
|
339
340
|
<!-- /generated:parameter-constraints -->
|
|
340
341
|
|
|
341
|
-
La requête sort par le broker
|
|
342
|
-
Le broker :
|
|
342
|
+
La requête sort par le broker de PlayerVox OverCrow, jamais du processus du
|
|
343
|
+
widget. Le broker :
|
|
343
344
|
|
|
344
345
|
- refuse toute URL qu’aucune règle n’autorise (`permission_denied`), avant
|
|
345
346
|
toute requête DNS ;
|
|
@@ -376,8 +377,8 @@ aussitôt avec `busy`.
|
|
|
376
377
|
|
|
377
378
|
### Stockage
|
|
378
379
|
|
|
379
|
-
`storage` est un stockage clé-valeur
|
|
380
|
-
widget : `storage.get({ key })`, `storage.set({ key, value })`,
|
|
380
|
+
`storage` est un stockage clé-valeur que PlayerVox OverCrow tient pour votre
|
|
381
|
+
seul widget : `storage.get({ key })`, `storage.set({ key, value })`,
|
|
381
382
|
`storage.remove({ key })` et `storage.keys()`. Une valeur est n’importe
|
|
382
383
|
quelle valeur JSON. Il n’y a aucun accès aux fichiers.
|
|
383
384
|
|
|
@@ -418,8 +419,8 @@ le presse-papiers.
|
|
|
418
419
|
```
|
|
419
420
|
|
|
420
421
|
Le texte que l’utilisateur sélectionne dans un élément `text` doté de
|
|
421
|
-
l’attribut `selectable` est copié par OverCrow lui-même, sans
|
|
422
|
-
permission.
|
|
422
|
+
l’attribut `selectable` est copié par PlayerVox OverCrow lui-même, sans
|
|
423
|
+
aucune permission.
|
|
423
424
|
|
|
424
425
|
### Événements de jeu
|
|
425
426
|
|
|
@@ -431,8 +432,8 @@ que l’un d’eux se produit.
|
|
|
431
432
|
## Capabilities
|
|
432
433
|
|
|
433
434
|
Une capability donne accès à des données ou à des actions que détient
|
|
434
|
-
OverCrow : les ressources qu’utilise le jeu, le lecteur
|
|
435
|
-
notes de l’utilisateur, ses comptes PlayerVox et Twitch.
|
|
435
|
+
PlayerVox OverCrow : les ressources qu’utilise le jeu, le lecteur
|
|
436
|
+
multimédia, les notes de l’utilisateur, ses comptes PlayerVox et Twitch.
|
|
436
437
|
|
|
437
438
|
<!-- generated:capability-list -->
|
|
438
439
|
| Capability | Sensible | Compte | Signification |
|
|
@@ -513,12 +514,12 @@ capability sensible, faites deux widgets.
|
|
|
513
514
|
### Comptes
|
|
514
515
|
|
|
515
516
|
Certaines capabilities ont besoin du compte PlayerVox ou Twitch de
|
|
516
|
-
l’utilisateur. La connexion appartient à OverCrow : c’est lui qui
|
|
517
|
-
l’écran de connexion, conserve les jetons et affiche son propre
|
|
518
|
-
par-dessus le widget tant que le compte est déconnecté. Un widget ne
|
|
519
|
-
jamais un jeton ; il ne reçoit que les données que décrit sa
|
|
520
|
-
ses appels échouent avec `not_connected` tant que le compte
|
|
521
|
-
connecté.
|
|
517
|
+
l’utilisateur. La connexion appartient à PlayerVox OverCrow : c’est lui qui
|
|
518
|
+
dessine l’écran de connexion, conserve les jetons et affiche son propre
|
|
519
|
+
panneau par-dessus le widget tant que le compte est déconnecté. Un widget ne
|
|
520
|
+
voit jamais un jeton ; il ne reçoit que les données que décrit sa
|
|
521
|
+
capability, et ses appels échouent avec `not_connected` tant que le compte
|
|
522
|
+
n’est pas connecté.
|
|
522
523
|
|
|
523
524
|
### Des données qui changent
|
|
524
525
|
|
|
@@ -268,5 +268,5 @@ Lucide 1.34.0, 1777 icônes.
|
|
|
268
268
|
Tout autre nom est refusé. Le type `IconName` du SDK les liste tous : un nom
|
|
269
269
|
erroné dans la logique est donc une erreur TypeScript. Au sein de l’API v1,
|
|
270
270
|
le jeu d’icônes peut grandir, mais il ne perd ni ne renomme jamais une
|
|
271
|
-
icône. OverCrow dessine les icônes lui-même : un widget n’embarque
|
|
272
|
-
police d’icônes.
|
|
271
|
+
icône. PlayerVox OverCrow dessine les icônes lui-même : un widget n’embarque
|
|
272
|
+
aucune police d’icônes.
|
|
@@ -82,11 +82,11 @@ une espace (descendant) ou par `>` (enfant).
|
|
|
82
82
|
}
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
-
Les états sont résolus par OverCrow, pas par votre logique :
|
|
86
|
-
`:active` suivent le pointeur, `:focus` le focus clavier,
|
|
87
|
-
l’attribut `disabled`, et `:checked` l’état d’un `toggle` ou
|
|
88
|
-
`checkbox`. OverCrow ne signale pas au widget les mouvements du
|
|
89
|
-
un effet de survol ne lui coûte rien.
|
|
85
|
+
Les états sont résolus par PlayerVox OverCrow, pas par votre logique :
|
|
86
|
+
`:hover` et `:active` suivent le pointeur, `:focus` le focus clavier,
|
|
87
|
+
`:disabled` l’attribut `disabled`, et `:checked` l’état d’un `toggle` ou
|
|
88
|
+
d’une `checkbox`. OverCrow ne signale pas au widget les mouvements du
|
|
89
|
+
pointeur : un effet de survol ne lui coûte rien.
|
|
90
90
|
|
|
91
91
|
Quand deux règles définissent la même propriété, le sélecteur le plus
|
|
92
92
|
spécifique l’emporte : les classes et les états comptent d’abord, puis les
|
|
@@ -140,7 +140,8 @@ rebours place le temps au milieu de son anneau :
|
|
|
140
140
|
}
|
|
141
141
|
```
|
|
142
142
|
|
|
143
|
-
Un widget ne peut pas dessiner hors de son cadre : OverCrow le
|
|
143
|
+
Un widget ne peut pas dessiner hors de son cadre : PlayerVox OverCrow le
|
|
144
|
+
rogne.
|
|
144
145
|
|
|
145
146
|
## Valeurs
|
|
146
147
|
|
|
@@ -151,18 +152,19 @@ forme `#rrggbb`, `#rrggbbaa` ou `rgb(r g b / a)`, les durées en `ms` ou en
|
|
|
151
152
|
`var(--name)`. La notation exacte de chaque sorte de valeur figure dans
|
|
152
153
|
[valeurs](style-properties.md#valeurs).
|
|
153
154
|
|
|
154
|
-
Les longueurs sont des pixels logiques : OverCrow les multiplie
|
|
155
|
-
l’échelle du contenu de l’utilisateur (de 50 % à 175 %) et par la
|
|
156
|
-
l’écran. `12px` a donc la même taille physique sur tous les
|
|
157
|
-
propriétés raccourcies se développent comme en CSS : une à
|
|
158
|
-
pour les côtés et les coins, une ou deux pour les
|
|
155
|
+
Les longueurs sont des pixels logiques : PlayerVox OverCrow les multiplie
|
|
156
|
+
par l’échelle du contenu de l’utilisateur (de 50 % à 175 %) et par la
|
|
157
|
+
densité de l’écran. `12px` a donc la même taille physique sur tous les
|
|
158
|
+
écrans. Les propriétés raccourcies se développent comme en CSS : une à
|
|
159
|
+
quatre valeurs pour les côtés et les coins, une ou deux pour les
|
|
160
|
+
espacements.
|
|
159
161
|
|
|
160
162
|
## Tokens du design system
|
|
161
163
|
|
|
162
|
-
Un token est une valeur du design system
|
|
163
|
-
Les tokens de couleur changent avec le thème de
|
|
164
|
-
sombre : un widget stylé avec des tokens suit le
|
|
165
|
-
Préférez-les aux couleurs littérales.
|
|
164
|
+
Un token est une valeur du design system de PlayerVox OverCrow, écrite
|
|
165
|
+
`var(--name)`. Les tokens de couleur changent avec le thème de
|
|
166
|
+
l’utilisateur, clair ou sombre : un widget stylé avec des tokens suit le
|
|
167
|
+
thème sans aucun code. Préférez-les aux couleurs littérales.
|
|
166
168
|
|
|
167
169
|
<!-- source: docs/content/examples/countdown/style.ocss -->
|
|
168
170
|
```css
|
|
@@ -185,8 +187,9 @@ pas déclarer ses propres propriétés personnalisées. Tous les tokens sont
|
|
|
185
187
|
listés dans
|
|
186
188
|
[tokens du design system](style-properties.md#tokens-du-design-system).
|
|
187
189
|
|
|
188
|
-
OverCrow dessine le panneau derrière le widget
|
|
189
|
-
son cadre et son ombre : partez d’un fond
|
|
190
|
+
PlayerVox OverCrow dessine le panneau derrière le widget
|
|
191
|
+
(`--color-surface-panel`), son cadre et son ombre : partez d’un fond
|
|
192
|
+
transparent.
|
|
190
193
|
|
|
191
194
|
## Texte
|
|
192
195
|
|
|
@@ -196,8 +199,8 @@ sur un conteneur pour styler ce qu’il contient.
|
|
|
196
199
|
|
|
197
200
|
- Il existe trois familles de police : `ui` (Noto Sans, la valeur par
|
|
198
201
|
défaut), `mono` (Noto Sans Mono, pour les valeurs) et `display` (Space
|
|
199
|
-
Grotesk, pour les grades et les scores). OverCrow les embarque ;
|
|
200
|
-
polices du système ne sont jamais utilisées : un widget a donc le même
|
|
202
|
+
Grotesk, pour les grades et les scores). PlayerVox OverCrow les embarque ;
|
|
203
|
+
les polices du système ne sont jamais utilisées : un widget a donc le même
|
|
201
204
|
aspect sur toutes les machines.
|
|
202
205
|
- `font-variant-numeric: tabular-nums` donne la même largeur à tous les
|
|
203
206
|
chiffres : un nombre qui change ne déplace pas ses voisins.
|
|
@@ -237,9 +240,9 @@ un bloc `@keyframes` de la même feuille.
|
|
|
237
240
|
Seules les propriétés qui modifient le dessin, et non la mise en page,
|
|
238
241
|
peuvent être animées : `opacity`, `color`, `background-color`,
|
|
239
242
|
`border-color` et `transform`. Un bloc `@keyframes` ne contient que
|
|
240
|
-
celles-là. OverCrow exécute l’animation lui-même : aucun minuteur
|
|
241
|
-
code du widget ne tourne pendant qu’elle joue, et rien n’est
|
|
242
|
-
rien ne change. Un widget masqué ne s’anime pas.
|
|
243
|
+
celles-là. PlayerVox OverCrow exécute l’animation lui-même : aucun minuteur
|
|
244
|
+
ni aucun code du widget ne tourne pendant qu’elle joue, et rien n’est
|
|
245
|
+
redessiné quand rien ne change. Un widget masqué ne s’anime pas.
|
|
243
246
|
|
|
244
247
|
`@keyframes` est la seule règle @. Son nom est un identifiant qui n’est pas
|
|
245
248
|
un mot-clé d’animation, unique dans la feuille.
|
|
@@ -6,10 +6,10 @@ bureau, sans jeu et sans compte :
|
|
|
6
6
|
- **Les tests unitaires de la logique**, dans Node.js, avec
|
|
7
7
|
`@overcrow/sdk/testing` : rapides, pour les fonctions de `logic.ts`.
|
|
8
8
|
- **Les scénarios**, joués par `overcrow-widget test` dans le **runtime
|
|
9
|
-
headless**
|
|
10
|
-
et le vrai moteur de rendu, les vérifications d’OverCrow
|
|
11
|
-
services simulés, un temps virtuel et des images de
|
|
12
|
-
passe là est ce que l’overlay affiche.
|
|
9
|
+
headless** de PlayerVox OverCrow : la vraie VM, le vrai style, la vraie
|
|
10
|
+
mise en page et le vrai moteur de rendu, les vérifications d’OverCrow
|
|
11
|
+
lui-même, des services simulés, un temps virtuel et des images de
|
|
12
|
+
référence. Ce qui passe là est ce que l’overlay affiche.
|
|
13
13
|
|
|
14
14
|
<!-- source: templates/counter/tests/example.scenario.json -->
|
|
15
15
|
```json
|
|
@@ -37,11 +37,11 @@ image.
|
|
|
37
37
|
projet créé par `overcrow-widget init`, sinon
|
|
38
38
|
`npm install --save-dev --save-exact @overcrow/sdk@1.0.0`.
|
|
39
39
|
|
|
40
|
-
`installRuntime()` met en place une doublure
|
|
41
|
-
logique : les appels de service renvoient des promesses que
|
|
42
|
-
résout ou rejette, les abonnements reçoivent les valeurs que vous
|
|
43
|
-
les minuteurs se déclenchent quand vous avancez le temps, et
|
|
44
|
-
est virtuel.
|
|
40
|
+
`installRuntime()` met en place une doublure de PlayerVox OverCrow avant
|
|
41
|
+
l’import de la logique : les appels de service renvoient des promesses que
|
|
42
|
+
votre test résout ou rejette, les abonnements reçoivent les valeurs que vous
|
|
43
|
+
poussez, les minuteurs se déclenchent quand vous avancez le temps, et
|
|
44
|
+
`Date.now()` est virtuel.
|
|
45
45
|
|
|
46
46
|
<!-- source: widgets/clock/tests/logic.test.mjs -->
|
|
47
47
|
```js
|
|
@@ -77,7 +77,7 @@ test("one timer at the next local minute, then each minute", () => {
|
|
|
77
77
|
| --- | --- |
|
|
78
78
|
| `installRuntime({ now, host })` | Installe la doublure ; `Date.now()` renvoie le temps virtuel. Une seule à la fois. |
|
|
79
79
|
| `now`, `advance(ms)` | Le temps virtuel ; `advance` déclenche, dans l’ordre, les minuteurs arrivés à échéance (un minuteur répétitif se réarme) et renvoie leur nombre. |
|
|
80
|
-
| `setHost(changes)` | Modifie `host` comme le fait OverCrow : `region`, `locale`, `options`… |
|
|
80
|
+
| `setHost(changes)` | Modifie `host` comme le fait PlayerVox OverCrow : `region`, `locale`, `options`… |
|
|
81
81
|
| `calls`, `lastCall(service)` | Chaque appel de service, avec `resolve(value)` et `reject(code)`. |
|
|
82
82
|
| `push(service, value)`, `fail(service, code)` | La prochaine mise à jour, ou l’échec final, des abonnements à un service. |
|
|
83
83
|
| `menu(row)` | Choisit une ligne `action` du menu d’options. |
|
|
@@ -85,10 +85,10 @@ test("one timer at the next local minute, then each minute", () => {
|
|
|
85
85
|
| `uninstall()` | Retire la doublure et restaure `Date.now`. |
|
|
86
86
|
|
|
87
87
|
La doublure n’exécute que votre logique : elle n’applique pas les règles
|
|
88
|
-
|
|
89
|
-
de l’utilisateur) et ne rend rien. Les scénarios, eux, le font. Les
|
|
90
|
-
de référence compilent leur `logic.ts` avec un petit chargeur avant
|
|
91
|
-
l’importer :
|
|
88
|
+
de PlayerVox OverCrow (les autorisations accordées, les comptes, la règle de
|
|
89
|
+
l’action de l’utilisateur) et ne rend rien. Les scénarios, eux, le font. Les
|
|
90
|
+
widgets de référence compilent leur `logic.ts` avec un petit chargeur avant
|
|
91
|
+
de l’importer :
|
|
92
92
|
|
|
93
93
|
<!-- source: widgets/clock/tests/load-logic.mjs -->
|
|
94
94
|
```js
|
|
@@ -149,13 +149,13 @@ Tout est facultatif.
|
|
|
149
149
|
| `size` | la taille préférée du manifeste | `{ width, height }` du cadre, en pixels logiques ; le `fit` du manifeste s’applique quand même. |
|
|
150
150
|
| `mode` | `passive` | `interactive` donne les entrées au widget. |
|
|
151
151
|
| `visible` | `true` | Masqué, le widget ne reçoit aucun déclenchement de minuteur. |
|
|
152
|
-
| `frame` | `false` | `true` capture le cadre
|
|
152
|
+
| `frame` | `false` | `true` capture le cadre de PlayerVox OverCrow autour du contenu. |
|
|
153
153
|
| `background` | la couleur de panneau du thème | `#rrggbb` derrière le widget. |
|
|
154
154
|
| `region` | `us`, ordre de date de la langue | `{ numberFormat, dateOrder }`. |
|
|
155
155
|
| `zone` | UTC | `{ offsetMinutes, transitions: [{ at, offsetMinutes }] }` : le décalage UTC de l’utilisateur, et les instants où il change. |
|
|
156
156
|
| `startAt` | 2026-01-01T00:00:00Z | Le temps virtuel auquel le widget démarre, en millisecondes Unix. |
|
|
157
157
|
| `options` | les valeurs par défaut des lignes | Les valeurs des lignes du menu d’options. |
|
|
158
|
-
| `grants` | `"declared"` | Ou la liste exacte de ce que l’utilisateur a accordé (`storage`, `network`, `fps.read`…) : OverCrow refuse le reste. |
|
|
158
|
+
| `grants` | `"declared"` | Ou la liste exacte de ce que l’utilisateur a accordé (`storage`, `network`, `fps.read`…) : PlayerVox OverCrow refuse le reste. |
|
|
159
159
|
| `accounts` | connectés | `{ playervox, twitch }`, chacun valant `connected`, `disconnected`, `pending`, `expired` ou `offline`. |
|
|
160
160
|
| `features` | toutes | Les sources de données de la machine, pour `requires`. |
|
|
161
161
|
| `storage` | vide | Le stockage du widget avant son démarrage. |
|
|
@@ -180,15 +180,15 @@ Tout est facultatif.
|
|
|
180
180
|
},
|
|
181
181
|
```
|
|
182
182
|
|
|
183
|
-
Avec un compte qui n’est pas `connected`, OverCrow dessine son
|
|
184
|
-
panneau de compte par-dessus le widget, comme il le fait pour
|
|
183
|
+
Avec un compte qui n’est pas `connected`, PlayerVox OverCrow dessine son
|
|
184
|
+
propre panneau de compte par-dessus le widget, comme il le fait pour
|
|
185
185
|
l’utilisateur ; capturez-le avec `frame`.
|
|
186
186
|
|
|
187
187
|
### `fixtures`
|
|
188
188
|
|
|
189
189
|
Les fixtures remplacent la provenance des données, jamais les vérifications
|
|
190
|
-
|
|
191
|
-
l’overlay : autorisations accordées, paramètres, règle de l’action de
|
|
190
|
+
de PlayerVox OverCrow. Un appel franchit d’abord les mêmes contrôles que
|
|
191
|
+
dans l’overlay : autorisations accordées, paramètres, règle de l’action de
|
|
192
192
|
l’utilisateur et compte. C’est seulement ensuite qu’une fixture lui répond.
|
|
193
193
|
Chaque valeur doit avoir la forme du [résultat](result-shapes.md) du
|
|
194
194
|
service : une valeur qui ne l’a pas est une erreur du scénario, pas du
|
|
@@ -199,7 +199,7 @@ widget.
|
|
|
199
199
|
| `subscriptions` | La valeur d’un abonnement à son démarrage ; les étapes `publish` envoient les suivantes. |
|
|
200
200
|
| `calls` | Les réponses aux appels d’un service, dans l’ordre : `{ "value": … }` ou `{ "error": code }`. Un appel au-delà est une erreur du scénario. |
|
|
201
201
|
| `http` | Les réponses aux requêtes `http.fetch`, chacune utilisée une fois : `{ "request": { method, url }, "response": { status, contentType, body } }` (ou `bodyBase64`), ou `{ "request": …, "error": code }`. Les règles réseau du manifeste s’appliquent d’abord, et les limites de réponse s’appliquent comme dans l’overlay. |
|
|
202
|
-
| `confirmations` | `accept` ou `cancel`, dans l’ordre, pour la confirmation par OverCrow de `notes.delete` et `journal.delete`. |
|
|
202
|
+
| `confirmations` | `accept` ou `cancel`, dans l’ordre, pour la confirmation par PlayerVox OverCrow de `notes.delete` et `journal.delete`. |
|
|
203
203
|
| `intents` | La réponse à chaque [intent d’écriture](forms.md#les-formulaires-qui-écrivent-des-données-de-lutilisateur) envoyé, dans l’ordre : `"accepted"`, `{ "error": code }` ou `"pending"`. |
|
|
204
204
|
|
|
205
205
|
<!-- source: widgets/stopwatch/tests/errors.scenario.json -->
|
|
@@ -275,7 +275,7 @@ widget.
|
|
|
275
275
|
]
|
|
276
276
|
```
|
|
277
277
|
|
|
278
|
-
Les codes
|
|
278
|
+
Les codes que PlayerVox OverCrow attribue lui-même (`permission_denied`,
|
|
279
279
|
`gesture_required`, `not_connected`, `invalid_request`) ne peuvent pas
|
|
280
280
|
s’écrire dans une fixture : obtenez-les par la voie réelle, avec `grants`,
|
|
281
281
|
`accounts`, un appel hors d’une action de l’utilisateur ou des paramètres
|
|
@@ -284,11 +284,11 @@ d’OverCrow et n’ont besoin d’aucune fixture.
|
|
|
284
284
|
|
|
285
285
|
### `assets`
|
|
286
286
|
|
|
287
|
-
Des images qu’une fixture remet au widget, comme OverCrow lui
|
|
288
|
-
pochette d’un média ou une emote du chat :
|
|
289
|
-
plus, chacune étant un PNG ou un JPEG du
|
|
290
|
-
Là où un résultat contient un identifiant
|
|
291
|
-
`"fixture:<name>"`.
|
|
287
|
+
Des images qu’une fixture remet au widget, comme PlayerVox OverCrow lui
|
|
288
|
+
remet la pochette d’un média ou une emote du chat :
|
|
289
|
+
`{ "<name>": "<path>" }`, 8 au plus, chacune étant un PNG ou un JPEG du
|
|
290
|
+
projet (`tests/assets/cover.png`). Là où un résultat contient un identifiant
|
|
291
|
+
d’image, la fixture écrit `"fixture:<name>"`.
|
|
292
292
|
|
|
293
293
|
### `steps`
|
|
294
294
|
|
|
@@ -324,7 +324,7 @@ qu’il a reçu et plus rien n’est en cours. Il n’y a aucune attente réelle
|
|
|
324
324
|
| `state` | `starting`, `running`, `restarting`, `failed`, `refused` ou `stopped`. |
|
|
325
325
|
| `fault` | La dernière faute de la VM du widget, ou `none`. |
|
|
326
326
|
| `clipboard` | Le dernier texte que le widget a écrit dans le presse-papiers. |
|
|
327
|
-
| `intents` | Exactement ces intents d’écriture ont été envoyés depuis la vérification `intents` précédente, dans l’ordre : `{ intent, fields?, outcome? }`. `fields` contient les valeurs exactes que le formulaire
|
|
327
|
+
| `intents` | Exactement ces intents d’écriture ont été envoyés depuis la vérification `intents` précédente, dans l’ordre : `{ intent, fields?, outcome? }`. `fields` contient les valeurs exactes que le formulaire de PlayerVox OverCrow a envoyées. |
|
|
328
328
|
|
|
329
329
|
<!-- source: templates/chart/tests/example.scenario.json -->
|
|
330
330
|
```json
|
|
@@ -378,8 +378,8 @@ mêmes octets, sous Linux comme sous Windows.
|
|
|
378
378
|
- Le temps est virtuel : `Date.now()` et `new Date()` renvoient le temps du
|
|
379
379
|
scénario, et les minuteurs se déclenchent quand le scénario l’avance.
|
|
380
380
|
- `Math.random()` est initialisé avec une graine fixe.
|
|
381
|
-
- Le texte utilise les polices fournies avec OverCrow, jamais
|
|
382
|
-
système.
|
|
381
|
+
- Le texte utilise les polices fournies avec PlayerVox OverCrow, jamais
|
|
382
|
+
celles du système.
|
|
383
383
|
- Le rendu ne dépend pas de la carte graphique.
|
|
384
384
|
|
|
385
385
|
Cela ne vaut que pour le runtime de test : dans l’overlay, le temps et le
|
|
@@ -387,23 +387,23 @@ hasard sont réels.
|
|
|
387
387
|
|
|
388
388
|
## Le runtime headless
|
|
389
389
|
|
|
390
|
-
`overcrow-widget-headless` est le code
|
|
391
|
-
il valide le paquet comme le fait l’overlay et exécute la logique
|
|
392
|
-
dans le même sandbox. `overcrow-widget test` exécute la version
|
|
393
|
-
épingle, 0.7.
|
|
394
|
-
sandbox du système d’exploitation, le runtime refuse de s’exécuter et le
|
|
390
|
+
`overcrow-widget-headless` est le code de PlayerVox OverCrow lui-même, sans
|
|
391
|
+
fenêtre : il valide le paquet comme le fait l’overlay et exécute la logique
|
|
392
|
+
du widget dans le même sandbox. `overcrow-widget test` exécute la version
|
|
393
|
+
que la CLI épingle, 0.7.2-beta.1, et affiche sa version et son SHA-256. Sans
|
|
394
|
+
le sandbox du système d’exploitation, le runtime refuse de s’exécuter et le
|
|
395
395
|
dit ; la commande de test se termine alors avec le code 2.
|
|
396
396
|
|
|
397
397
|
La première fois que `test` a besoin du runtime, il le télécharge : dans
|
|
398
|
-
le ZIP des outils créateurs de votre plateforme, dans la release
|
|
399
|
-
qui l’a publié, il ne garde que le runtime, et seulement
|
|
400
|
-
est celui que la CLI épingle. Le ZIP n’est pas conservé. Le
|
|
401
|
-
ensuite dans le cache de la CLI :
|
|
398
|
+
le ZIP des outils créateurs de votre plateforme, dans la release
|
|
399
|
+
PlayerVox OverCrow qui l’a publié, il ne garde que le runtime, et seulement
|
|
400
|
+
si son SHA-256 est celui que la CLI épingle. Le ZIP n’est pas conservé. Le
|
|
401
|
+
runtime reste ensuite dans le cache de la CLI :
|
|
402
402
|
|
|
403
403
|
| Plateforme | Chemin |
|
|
404
404
|
| --- | --- |
|
|
405
|
-
| Linux | `~/.cache/overcrow-widget/runtime/0.7.
|
|
406
|
-
| Windows | `%LOCALAPPDATA%\overcrow-widget\runtime\0.7.
|
|
405
|
+
| Linux | `~/.cache/overcrow-widget/runtime/0.7.2-beta.1/` (`$XDG_CACHE_HOME` au lieu de `~/.cache` s’il est défini) |
|
|
406
|
+
| Windows | `%LOCALAPPDATA%\overcrow-widget\runtime\0.7.2-beta.1\` |
|
|
407
407
|
|
|
408
408
|
Pour travailler hors ligne, placez-y vous-même le runtime du ZIP des
|
|
409
409
|
outils créateurs (exécutable sous Linux) : `test` le trouve et ne
|
|
@@ -413,5 +413,5 @@ défini dans `HTTPS_PROXY` est utilisé.
|
|
|
413
413
|
La CLI vérifie son SHA-256 avant chaque exécution. Si un téléchargement
|
|
414
414
|
échoue, rien n’est conservé et `test` propose de réessayer ou de passer
|
|
415
415
|
`--runtime`. `--runtime <path>` exécute un autre runtime à la place, par
|
|
416
|
-
exemple compilé depuis OverCrow ; la sortie dit alors que ce n’est
|
|
417
|
-
runtime épinglé.
|
|
416
|
+
exemple compilé depuis PlayerVox OverCrow ; la sortie dit alors que ce n’est
|
|
417
|
+
pas le runtime épinglé.
|