remote-webview-debugger 0.2.0 → 0.2.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/CHANGELOG.md CHANGED
@@ -4,6 +4,19 @@ English | [简体中文](CHANGELOG.zh-CN.md)
4
4
 
5
5
  The page SDK, published to npm as [`remote-webview-debugger`](https://www.npmjs.com/package/remote-webview-debugger). Tags: `sdk-vX.Y.Z`.
6
6
 
7
+ ## v0.2.1 (2026-11-04)
8
+
9
+ [compare changes](https://github.com/ZaneL1u/remote-webview-debugger/compare/sdk-v0.2.0...sdk-v0.2.1)
10
+
11
+ ### 🩹 Fixes
12
+
13
+ - the task card's current-step ripple is no longer clipped by the step list ([1b7a889](https://github.com/ZaneL1u/remote-webview-debugger/commit/1b7a889))
14
+ - a device whose first welcome was lost starts over instead of being refused forever ([d58e91f](https://github.com/ZaneL1u/remote-webview-debugger/commit/d58e91f))
15
+
16
+ ### 📖 Documentation
17
+
18
+ - SDK 0.2.0 in every language ([fe1334c](https://github.com/ZaneL1u/remote-webview-debugger/commit/fe1334c))
19
+
7
20
  ## v0.2.0 (2026-11-03)
8
21
 
9
22
  [compare changes](https://github.com/ZaneL1u/remote-webview-debugger/compare/sdk-v0.1.0...sdk-v0.2.0)
@@ -4,6 +4,19 @@
4
4
 
5
5
  页面 SDK,npm 包名 [`remote-webview-debugger`](https://www.npmjs.com/package/remote-webview-debugger)。tag 形如 `sdk-vX.Y.Z`。
6
6
 
7
+ ## v0.2.1 (2026-11-04)
8
+
9
+ [对比变更](https://github.com/ZaneL1u/remote-webview-debugger/compare/sdk-v0.2.0...sdk-v0.2.1)
10
+
11
+ ### 🩹 修复
12
+
13
+ - 任务卡当前步骤的扩散动画不再被步骤列表裁掉 ([1b7a889](https://github.com/ZaneL1u/remote-webview-debugger/commit/1b7a889))
14
+ - 首次握手的 welcome 丢失时,设备会作为新设备重新注册,不再被网关永久拒绝 ([d58e91f](https://github.com/ZaneL1u/remote-webview-debugger/commit/d58e91f))
15
+
16
+ ### 📖 文档
17
+
18
+ - 各语言文档里的 SDK 版本号更新为 0.2.0 ([fe1334c](https://github.com/ZaneL1u/remote-webview-debugger/commit/fe1334c))
19
+
7
20
  ## v0.2.0 (2026-11-03)
8
21
 
9
22
  [对比变更](https://github.com/ZaneL1u/remote-webview-debugger/compare/sdk-v0.1.0...sdk-v0.2.0)
package/README.ar.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- i18n-source: d9a31993ea867d3ef7058e7d637886f38a6ee3e1 -->
1
+ <!-- i18n-source: 9d72ce89dfa86583d406e421998986f82d9827b1 -->
2
2
  [English](README.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português (Brasil)](README.pt-BR.md) | [Русский](README.ru.md) | العربية
3
3
 
4
4
  <div dir="rtl">
@@ -10,7 +10,7 @@
10
10
  <div dir="ltr">
11
11
 
12
12
  ```html
13
- <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.1.0/dist/sdk.js"></script>
13
+ <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js"></script>
14
14
  <script>
15
15
  RemoteWebviewDebugger.run("https://rwd.example.com/v1", "rwd_pk_xxxxxxxx", {
16
16
  userId: "u-42", // اختياري
@@ -30,7 +30,7 @@
30
30
 
31
31
  | الاستخدام | المصدر |
32
32
  |---|---|
33
- | وسم `<script>` من CDN | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.1.0/dist/sdk.js` أو `https://unpkg.com/remote-webview-debugger@0.1.0/dist/sdk.js` (IIFE مصغَّر، والمتغير العام `RemoteWebviewDebugger`؛ ثبّت رقم الإصدار، وأضف `integrity` إن شئت) |
33
+ | وسم `<script>` من CDN | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js` أو `https://unpkg.com/remote-webview-debugger@0.2.1/dist/sdk.js` (IIFE مصغَّر، والمتغير العام `RemoteWebviewDebugger`؛ ثبّت رقم الإصدار، وأضف `integrity` إن شئت) |
34
34
  | أداة تجميع (bundler) | `npm install remote-webview-debugger`، ثم `import { run, status } from 'remote-webview-debugger'` (وحدة ES مع الأنواع). استورده قبل شيفرتك ليبدأ الالتقاط مبكرًا. ولا تحمّل معه نسخة `<script>` في الصفحة نفسها |
35
35
  | بوابتك | `https://<gateway>/v1/sdk.js`، وهي النسخة المضمَّنة في البوابة (ومتاحة أيضًا على عنوان معنون بالمحتوى لـ SRI تقترحه لوحة التحكم) |
36
36
  | تطبيق أصلي | ضمّن `dist/sdk.js` من الحزمة في التطبيق، أو نزّله من أحد المصادر أعلاه؛ انظر [التكامل مع التطبيقات الأصلية](../docs/native-integration.ar.md) |
@@ -78,7 +78,7 @@
78
78
 
79
79
  **التحميل.** الإنجليزية والصينية المبسطة مضمَّنتان في `sdk.js`. أما بقية الحزم فتُحمَّل عند الحاجة، في أول مرة تحتاجها الصفحة (وتعرض الواجهة لغة الاحتياط في تلك اللحظة):
80
80
 
81
- - نسخة `<script>`: من `locales/<id>.js` بجوار `sdk.js` (مسار CDN، مثل `…/remote-webview-debugger@0.1.0/dist/locales/ja.js`، أو `/v1/locales/ja.js` على بوابتك)، ومن البوابة الممرَّرة إلى `run()` إن فشل ذلك. ولتجنّب الطلب الإضافي، حمّل الحزمة بنفسك، قبل `sdk.js` أو بعده: `<script src="…/dist/locales/ja.js"></script>`.
81
+ - نسخة `<script>`: من `locales/<id>.js` بجوار `sdk.js` (مسار CDN، مثل `…/remote-webview-debugger@0.2.1/dist/locales/ja.js`، أو `/v1/locales/ja.js` على بوابتك)، ومن البوابة الممرَّرة إلى `run()` إن فشل ذلك. ولتجنّب الطلب الإضافي، حمّل الحزمة بنفسك، قبل `sdk.js` أو بعده: `<script src="…/dist/locales/ja.js"></script>`.
82
82
  - نسخة وحدة ES: استيراد ديناميكي، فتضع أداة التجميع كل لغة في جزء (chunk) مستقل. ولتجميع إحداها مسبقًا بدلًا من ذلك: `import ja from 'remote-webview-debugger/locales/ja'`، ثم `run(url, key, { locales: [ja] })`.
83
83
 
84
84
  **حزمك ونصوصك الخاصة.** الحزمة هي `{ id, name, dir?, ui?, action?, agent? }`؛ وكل ما يُترك منها يُؤخذ من لغات الاحتياط الخاصة بها:
@@ -134,7 +134,7 @@ RemoteWebviewDebugger.run(url, key, {
134
134
  ## السلوك داخل الصفحة (البروتوكول §6–§8، §11)
135
135
 
136
136
  - المستويات: تُفحص استدعاءات RPC مقابل `welcome.level` / `control.level` (`forbidden`، "Requires the … level"). الوكيل الذي بلا مستوى (من بوابة أقدم) يحصل على `interact`؛ وحين لا يكون أي وكيل مرتبطًا لا يُفرض شيء إضافي.
137
- - يُحفظ توكن الجهاز في localStorage `rwd:dtoken`، وتوكن الاستئناف في sessionStorage `rwd:resume` (مقيَّدًا بـ pageId). رمز الإغلاق 4401: إن كان التوكن قد تغيّر في الأثناء (تبويب آخر للجهاز حصل عليه للتو)، يُعاد المحاولة فورًا مرة واحدة، وإلا `rejected` وإعادة المحاولة بعد نحو 10 دقائق؛ 4409: إعادة الاتصال بـ pageId جديد؛ 4429: `quota`، وإعادة المحاولة بعد نحو 5 دقائق.
137
+ - يُحفظ توكن الجهاز في localStorage `rwd:dtoken`، وتوكن الاستئناف في sessionStorage `rwd:resume` (مقيَّدًا بـ pageId). رمز الإغلاق 4401: إن كان التوكن قد تغيّر في الأثناء (تبويب آخر للجهاز حصل عليه للتو)، يُعاد المحاولة فورًا مرة واحدة؛ وإن لم يكن هناك توكن أصلًا وكان deviceId هو الذي ولّده SDK نفسه، فقد ضاعت رسالة welcome التي تحمل التوكن، فيبدأ بعد نحو 1.5 ثانية من جديد كجهاز جديد؛ وإلا `rejected` وإعادة المحاولة بعد نحو 10 دقائق؛ 4409: إعادة الاتصال بـ pageId جديد؛ 4429: `quota`، وإعادة المحاولة بعد نحو 5 دقائق.
138
138
  - يُنتزع `rwd_invite` من شريط العنوان عند `run()` (`history.replaceState`) ويُرسل مع hello إلى أن تصل رسالة welcome.
139
139
  - `welcome.config`: `helpButton` (بعملية OR مع خيار `run()`)، و `maskSelectors`، و `maskPatterns` (اللقطة، console، عناوين URL للشبكة، قيم التخزين، ملخصات الخط الزمني)، و `confirmSelectors`، و `networkExclude` (تُضاف إلى قواعد خيار `run()`)، و `sessionLog`. يُحفظ آخر إعداد في localStorage `rwd:cfg` ويُستخدم إلى أن تصل رسالة welcome — فالمشروع الذي أوقف سجل الجلسة يبقيه موقوفًا منذ اللحظة الأولى للصفحة التالية، قبل أي welcome.
140
140
  - تنتهي اللقطات بقسم `[Overlays]` يسرد ما يطفو فوق الصفحة — الخلفية المعتمة لنافذة منبثقة، أو نافذة مشروطة (modal)، أو لوحة سفلية — مع وسمها، ومقطع نصي قصير، والنسبة التي تغطيها من منفذ العرض، ومرجع ref. الخلفية المعتمة عنصر فارغ لا عقدة له في لقطة aria، لذا تحصل على مرجع `oN` بدلًا من `eN`؛ وهذا ما يتيح للوكيل النقر عليها لإغلاق النافذة المنبثقة.
package/README.de.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- i18n-source: d9a31993ea867d3ef7058e7d637886f38a6ee3e1 -->
1
+ <!-- i18n-source: 9d72ce89dfa86583d406e421998986f82d9827b1 -->
2
2
  [English](README.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | Deutsch | [Português (Brasil)](README.pt-BR.md) | [Русский](README.ru.md) | [العربية](README.ar.md)
3
3
 
4
4
  # RWD-Seiten-SDK (`sdk/`)
@@ -6,7 +6,7 @@
6
6
  Eine JS-Datei, die eine App-WebView oder H5-Seite lädt, damit ein KI-Agent die Seite über das RWD-Gateway (`gateway/`) und MCP untersuchen und bedienen kann. Protokoll: [`docs/protocol.de.md`](../docs/protocol.de.md); Architektur: [`docs/architecture.de.md`](../docs/architecture.de.md).
7
7
 
8
8
  ```html
9
- <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.1.0/dist/sdk.js"></script>
9
+ <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js"></script>
10
10
  <script>
11
11
  RemoteWebviewDebugger.run("https://rwd.example.com/v1", "rwd_pk_xxxxxxxx", {
12
12
  userId: "u-42", // optional
@@ -24,7 +24,7 @@ Auf npm veröffentlicht als [`remote-webview-debugger`](https://www.npmjs.com/pa
24
24
 
25
25
  | Verwendung | Quelle |
26
26
  |---|---|
27
- | `<script>` von einem CDN | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.1.0/dist/sdk.js` oder `https://unpkg.com/remote-webview-debugger@0.1.0/dist/sdk.js` (minifizierte IIFE, globales `RemoteWebviewDebugger`; pinnen Sie die Version und ergänzen Sie bei Bedarf `integrity`) |
27
+ | `<script>` von einem CDN | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js` oder `https://unpkg.com/remote-webview-debugger@0.2.1/dist/sdk.js` (minifizierte IIFE, globales `RemoteWebviewDebugger`; pinnen Sie die Version und ergänzen Sie bei Bedarf `integrity`) |
28
28
  | Ein Bundler | `npm install remote-webview-debugger`, dann `import { run, status } from 'remote-webview-debugger'` (ES-Modul mit Typen). Importieren Sie es vor Ihrem eigenen Code, damit die Erfassung früh beginnt. Laden Sie auf derselben Seite nicht zusätzlich die `<script>`-Variante |
29
29
  | Ihr Gateway | `https://<gateway>/v1/sdk.js`, die im Gateway eingebettete Kopie (auch unter einer inhaltsadressierten URL für SRI, die die Konsole anbietet) |
30
30
  | Eine native App | `dist/sdk.js` aus dem Paket mitliefern oder von einer der obigen Quellen herunterladen; siehe [native Integration](../docs/native-integration.de.md) |
@@ -72,7 +72,7 @@ Eingebaut: Englisch (`en`), vereinfachtes Chinesisch (`zh`), traditionelles Chin
72
72
 
73
73
  **Laden.** Englisch und vereinfachtes Chinesisch stecken in `sdk.js`. Die übrigen Pakete werden bei Bedarf nachgeladen, wenn eine Seite sie zum ersten Mal braucht (so lange zeigt die UI die Rückfallsprache):
74
74
 
75
- - `<script>`-Build: aus `locales/<id>.js` neben `sdk.js` (der CDN-Pfad, z. B. `…/remote-webview-debugger@0.1.0/dist/locales/ja.js`, oder `/v1/locales/ja.js` Ihres Gateways), und falls das scheitert, vom an `run()` übergebenen Gateway. Um die zusätzliche Anfrage zu vermeiden, laden Sie das Paket selbst, vor oder nach `sdk.js`: `<script src="…/dist/locales/ja.js"></script>`.
75
+ - `<script>`-Build: aus `locales/<id>.js` neben `sdk.js` (der CDN-Pfad, z. B. `…/remote-webview-debugger@0.2.1/dist/locales/ja.js`, oder `/v1/locales/ja.js` Ihres Gateways), und falls das scheitert, vom an `run()` übergebenen Gateway. Um die zusätzliche Anfrage zu vermeiden, laden Sie das Paket selbst, vor oder nach `sdk.js`: `<script src="…/dist/locales/ja.js"></script>`.
76
76
  - ES-Modul-Build: ein dynamischer Import, sodass Ihr Bundler jede Sprache in einen eigenen Chunk legt. Um eine Sprache stattdessen direkt mitzubündeln: `import ja from 'remote-webview-debugger/locales/ja'`, dann `run(url, key, { locales: [ja] })`.
77
77
 
78
78
  **Eigene Pakete und Formulierungen.** Ein Paket ist `{ id, name, dir?, ui?, action?, agent? }`; alles Fehlende kommt aus seinen Rückfallsprachen:
@@ -124,7 +124,7 @@ Farben sind `r, g, b`-Tripel, damit die durchscheinenden Abstufungen mitgehen (d
124
124
  ## Verhalten in der Seite (Protokoll §6–§8, §11)
125
125
 
126
126
  - Stufen: RPCs werden gegen `welcome.level` / `control.level` geprüft (`forbidden`, „Erfordert die Zugriffsstufe …“). Ein Agent ohne Stufe (ein älteres Gateway) bekommt `interact`; ohne verbundenen Agent wird nichts zusätzlich erzwungen.
127
- - Das Geräte-Token liegt in localStorage `rwd:dtoken`, das Resume-Token in sessionStorage `rwd:resume` (an die pageId gebunden). Close-Code 4401: Hat sich das Token inzwischen geändert (ein anderer Tab des Geräts hat es gerade bekommen), sofort einmal erneut versuchen, sonst `rejected` und nach etwa 10 Minuten erneut versuchen; 4409: mit einer neuen pageId neu verbinden; 4429: `quota`, nach etwa 5 Minuten erneut versuchen.
127
+ - Das Geräte-Token liegt in localStorage `rwd:dtoken`, das Resume-Token in sessionStorage `rwd:resume` (an die pageId gebunden). Close-Code 4401: Hat sich das Token inzwischen geändert (ein anderer Tab des Geräts hat es gerade bekommen), sofort einmal erneut versuchen; gibt es gar kein Token und ist die deviceId die eigene des SDK, ist das welcome mit dem Token verloren gegangen, also nach etwa 1,5 s als neues Gerät von vorn beginnen; sonst `rejected` und nach etwa 10 Minuten erneut versuchen; 4409: mit einer neuen pageId neu verbinden; 4429: `quota`, nach etwa 5 Minuten erneut versuchen.
128
128
  - `rwd_invite` in der Adresszeile wird bei `run()` entfernt (`history.replaceState`) und mit dem hello gesendet, bis ein welcome eintrifft.
129
129
  - `welcome.config`: `helpButton` (ODER-verknüpft mit der `run()`-Option), `maskSelectors`, `maskPatterns` (Snapshot, Console, Netzwerk-URLs, Storage-Werte, Zusammenfassungen der Zeitleiste), `confirmSelectors`, `networkExclude` (zu den Regeln der `run()`-Option hinzugefügt), `sessionLog`. Die letzte Konfiguration wird in localStorage `rwd:cfg` gespeichert und verwendet, bis das welcome eintrifft – ein Projekt, das das Sitzungsprotokoll abgeschaltet hat, hält es also schon ab dem ersten Moment der nächsten Seite aus, noch vor jedem welcome.
130
130
  - Snapshots enden mit einem Abschnitt `[Overlays]`, der auflistet, was über der Seite schwebt – der Hintergrund eines Popups, ein Modal, ein Bottom Sheet –, jeweils mit Tag, einem kurzen Textausschnitt, dem Anteil des Viewports, den es bedeckt, und einer ref. Ein Hintergrund ist ein leeres Element, für das der ARIA-Snapshot keinen Knoten hat; er bekommt deshalb eine `oN`-ref statt `eN`. Genau dadurch kann ein Agent ihn antippen, um das Popup zu schließen.
package/README.es.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- i18n-source: d9a31993ea867d3ef7058e7d637886f38a6ee3e1 -->
1
+ <!-- i18n-source: 9d72ce89dfa86583d406e421998986f82d9827b1 -->
2
2
  [English](README.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | Español | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português (Brasil)](README.pt-BR.md) | [Русский](README.ru.md) | [العربية](README.ar.md)
3
3
 
4
4
  # SDK de página de RWD (`sdk/`)
@@ -6,7 +6,7 @@
6
6
  Un único archivo JS que carga una WebView de app o una página H5 para que un agente de IA pueda inspeccionar y manejar la página a través del gateway de RWD (`gateway/`) y MCP. Protocolo: [`docs/protocol.es.md`](../docs/protocol.es.md); arquitectura: [`docs/architecture.es.md`](../docs/architecture.es.md).
7
7
 
8
8
  ```html
9
- <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.1.0/dist/sdk.js"></script>
9
+ <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js"></script>
10
10
  <script>
11
11
  RemoteWebviewDebugger.run("https://rwd.example.com/v1", "rwd_pk_xxxxxxxx", {
12
12
  userId: "u-42", // opcional
@@ -24,7 +24,7 @@ Publicado en npm como [`remote-webview-debugger`](https://www.npmjs.com/package/
24
24
 
25
25
  | Uso | Dónde |
26
26
  |---|---|
27
- | `<script>` desde un CDN | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.1.0/dist/sdk.js` o `https://unpkg.com/remote-webview-debugger@0.1.0/dist/sdk.js` (IIFE minificado, global `RemoteWebviewDebugger`; fija la versión y, si quieres, añade `integrity`) |
27
+ | `<script>` desde un CDN | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js` o `https://unpkg.com/remote-webview-debugger@0.2.1/dist/sdk.js` (IIFE minificado, global `RemoteWebviewDebugger`; fija la versión y, si quieres, añade `integrity`) |
28
28
  | Un bundler | `npm install remote-webview-debugger` y luego `import { run, status } from 'remote-webview-debugger'` (módulo ES con tipos). Impórtalo antes que tu propio código para que la captura empiece pronto. No cargues además la versión `<script>` en la misma página |
29
29
  | Tu gateway | `https://<gateway>/v1/sdk.js`, la copia que integra el gateway (también disponible en una URL direccionada por contenido para SRI, que ofrece la consola web) |
30
30
  | Una app nativa | Empaqueta `dist/sdk.js` del paquete o descárgalo de uno de los anteriores; consulta [integración nativa](../docs/native-integration.es.md) |
@@ -72,7 +72,7 @@ Integrados: inglés (`en`), chino simplificado (`zh`), chino tradicional (`zh-TW
72
72
 
73
73
  **Carga.** El inglés y el chino simplificado van dentro de `sdk.js`. Los demás paquetes se cargan bajo demanda, la primera vez que una página los necesita (durante ese instante, la interfaz muestra el idioma alternativo):
74
74
 
75
- - Versión `<script>`: desde `locales/<id>.js` junto a `sdk.js` (la ruta del CDN, p. ej. `…/remote-webview-debugger@0.1.0/dist/locales/ja.js`, o `/v1/locales/ja.js` de tu gateway) y, si eso falla, desde el gateway que se pasa a `run()`. Para evitar la solicitud adicional, carga tú mismo el paquete, antes o después de `sdk.js`: `<script src="…/dist/locales/ja.js"></script>`.
75
+ - Versión `<script>`: desde `locales/<id>.js` junto a `sdk.js` (la ruta del CDN, p. ej. `…/remote-webview-debugger@0.2.1/dist/locales/ja.js`, o `/v1/locales/ja.js` de tu gateway) y, si eso falla, desde el gateway que se pasa a `run()`. Para evitar la solicitud adicional, carga tú mismo el paquete, antes o después de `sdk.js`: `<script src="…/dist/locales/ja.js"></script>`.
76
76
  - Versión de módulo ES: un import dinámico, así que tu bundler pone cada idioma en su propio chunk. Para empaquetar uno desde el principio: `import ja from 'remote-webview-debugger/locales/ja'` y luego `run(url, key, { locales: [ja] })`.
77
77
 
78
78
  **Tus propios paquetes y textos.** Un paquete es `{ id, name, dir?, ui?, action?, agent? }`; lo que falte se toma de sus idiomas alternativos:
@@ -124,7 +124,7 @@ Los colores son tripletes `r, g, b` para que los tonos translúcidos los sigan (
124
124
  ## Comportamiento en la página (protocolo §6–§8, §11)
125
125
 
126
126
  - Niveles: las RPC se comprueban contra `welcome.level` / `control.level` (`forbidden`, "Requires the … level"). Un agente sin nivel (un gateway antiguo) recibe `interact`; sin ningún agente conectado no se impone nada adicional.
127
- - El token de dispositivo se guarda en localStorage `rwd:dtoken` y el token de reanudación en sessionStorage `rwd:resume` (ligado al pageId). Código de cierre 4401: si el token cambió entretanto (otra pestaña del dispositivo acaba de recibirlo), reintenta una vez de inmediato; si no, `rejected` y reintenta al cabo de unos 10 minutos; 4409: vuelve a conectar con un pageId nuevo; 4429: `quota`, reintenta al cabo de unos 5 minutos.
127
+ - El token de dispositivo se guarda en localStorage `rwd:dtoken` y el token de reanudación en sessionStorage `rwd:resume` (ligado al pageId). Código de cierre 4401: si el token cambió entretanto (otra pestaña del dispositivo acaba de recibirlo), reintenta una vez de inmediato; si no hay ningún token y el deviceId es el propio del SDK, se perdió el welcome con el token, así que al cabo de unos 1,5 s empieza de nuevo como un dispositivo nuevo; si no, `rejected` y reintenta al cabo de unos 10 minutos; 4409: vuelve a conectar con un pageId nuevo; 4429: `quota`, reintenta al cabo de unos 5 minutos.
128
128
  - `rwd_invite` en la barra de direcciones se retira en `run()` (`history.replaceState`) y se envía con el hello hasta que llega un welcome.
129
129
  - `welcome.config`: `helpButton` (combinado con OR con la opción de `run()`), `maskSelectors`, `maskPatterns` (instantánea, console, URLs de red, valores de almacenamiento, resúmenes de la línea de tiempo), `confirmSelectors`, `networkExclude` (se suma a las reglas de la opción de `run()`), `sessionLog`. La última configuración se guarda en localStorage `rwd:cfg` y se usa hasta que llega el welcome; así, un proyecto que desactivó el registro de sesión lo mantiene desactivado desde el primer momento de la siguiente página, antes de cualquier welcome.
130
130
  - Las instantáneas terminan con una sección `[Overlays]` que enumera lo que flota sobre la página (el fondo de una ventana emergente, un modal, una hoja inferior) con su etiqueta, un fragmento corto de texto, cuánto del viewport cubre y una ref. Un fondo es un elemento vacío para el que el aria snapshot no tiene nodo, así que recibe una ref `oN` en lugar de `eN`; eso es lo que permite al agente tocarlo para cerrar la ventana emergente.
package/README.fr.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- i18n-source: d9a31993ea867d3ef7058e7d637886f38a6ee3e1 -->
1
+ <!-- i18n-source: 9d72ce89dfa86583d406e421998986f82d9827b1 -->
2
2
  [English](README.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | Français | [Deutsch](README.de.md) | [Português (Brasil)](README.pt-BR.md) | [Русский](README.ru.md) | [العربية](README.ar.md)
3
3
 
4
4
  # SDK de page RWD (`sdk/`)
@@ -6,7 +6,7 @@
6
6
  Un fichier JS qu'une WebView d'application ou une page H5 charge, pour qu'un agent IA puisse inspecter et piloter la page via la passerelle RWD (`gateway/`) et MCP. Protocole : [`docs/protocol.fr.md`](../docs/protocol.fr.md) ; architecture : [`docs/architecture.fr.md`](../docs/architecture.fr.md).
7
7
 
8
8
  ```html
9
- <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.1.0/dist/sdk.js"></script>
9
+ <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js"></script>
10
10
  <script>
11
11
  RemoteWebviewDebugger.run("https://rwd.example.com/v1", "rwd_pk_xxxxxxxx", {
12
12
  userId: "u-42", // facultatif
@@ -24,7 +24,7 @@ Publié sur npm sous le nom [`remote-webview-debugger`](https://www.npmjs.com/pa
24
24
 
25
25
  | Usage | Source |
26
26
  |---|---|
27
- | `<script>` depuis un CDN | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.1.0/dist/sdk.js` ou `https://unpkg.com/remote-webview-debugger@0.1.0/dist/sdk.js` (IIFE minifiée, global `RemoteWebviewDebugger` ; épinglez la version, et ajoutez `integrity` si vous le souhaitez) |
27
+ | `<script>` depuis un CDN | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js` ou `https://unpkg.com/remote-webview-debugger@0.2.1/dist/sdk.js` (IIFE minifiée, global `RemoteWebviewDebugger` ; épinglez la version, et ajoutez `integrity` si vous le souhaitez) |
28
28
  | Un bundler | `npm install remote-webview-debugger`, puis `import { run, status } from 'remote-webview-debugger'` (module ES avec types). Importez-le avant votre propre code pour que la capture démarre tôt. Ne chargez pas en plus la version `<script>` sur la même page |
29
29
  | Votre passerelle | `https://<gateway>/v1/sdk.js`, la copie qu'embarque la passerelle (également disponible à une URL adressée par contenu pour SRI, proposée par la console web) |
30
30
  | Une application native | Embarquez `dist/sdk.js` du paquet, ou téléchargez-le depuis l'une des sources ci-dessus ; voir [l'intégration native](../docs/native-integration.fr.md) |
@@ -72,7 +72,7 @@ Intégrées : anglais (`en`), chinois simplifié (`zh`), chinois traditionnel (
72
72
 
73
73
  **Chargement.** L'anglais et le chinois simplifié sont inclus dans `sdk.js`. Les autres packs se chargent à la demande, la première fois qu'une page en a besoin (l'interface affiche la langue de repli pendant ce court instant) :
74
74
 
75
- - Version `<script>` : depuis `locales/<id>.js` à côté de `sdk.js` (le chemin du CDN, par exemple `…/remote-webview-debugger@0.1.0/dist/locales/ja.js`, ou `/v1/locales/ja.js` sur votre passerelle), puis depuis la passerelle passée à `run()` en cas d'échec. Pour éviter la requête supplémentaire, chargez vous-même le pack, avant ou après `sdk.js` : `<script src="…/dist/locales/ja.js"></script>`.
75
+ - Version `<script>` : depuis `locales/<id>.js` à côté de `sdk.js` (le chemin du CDN, par exemple `…/remote-webview-debugger@0.2.1/dist/locales/ja.js`, ou `/v1/locales/ja.js` sur votre passerelle), puis depuis la passerelle passée à `run()` en cas d'échec. Pour éviter la requête supplémentaire, chargez vous-même le pack, avant ou après `sdk.js` : `<script src="…/dist/locales/ja.js"></script>`.
76
76
  - Version module ES : un import dynamique, si bien que votre bundler place chaque langue dans son propre chunk. Pour en intégrer une d'emblée au bundle : `import ja from 'remote-webview-debugger/locales/ja'`, puis `run(url, key, { locales: [ja] })`.
77
77
 
78
78
  **Vos propres packs et formulations.** Un pack est `{ id, name, dir?, ui?, action?, agent? }` ; tout ce qui est omis provient de ses langues de repli :
@@ -124,7 +124,7 @@ Les couleurs sont des triplets `r, g, b` pour que les nuances translucides suive
124
124
  ## Comportement dans la page (protocole §6–§8, §11)
125
125
 
126
126
  - Niveaux : les RPC sont vérifiés par rapport à `welcome.level` / `control.level` (`forbidden`, « Requires the … level »). Un agent sans niveau (passerelle plus ancienne) reçoit `interact` ; sans agent rattaché, rien de plus n'est imposé.
127
- - Le jeton d'appareil est conservé dans le localStorage `rwd:dtoken`, le jeton de reprise dans le sessionStorage `rwd:resume` (lié au pageId). Code de fermeture 4401 : si le jeton a changé entre-temps (un autre onglet de l'appareil vient de le recevoir), réessayer une fois immédiatement, sinon `rejected` et nouvel essai au bout d'environ 10 minutes ; 4409 : se reconnecter avec un nouveau pageId ; 4429 : `quota`, nouvel essai au bout d'environ 5 minutes.
127
+ - Le jeton d'appareil est conservé dans le localStorage `rwd:dtoken`, le jeton de reprise dans le sessionStorage `rwd:resume` (lié au pageId). Code de fermeture 4401 : si le jeton a changé entre-temps (un autre onglet de l'appareil vient de le recevoir), réessayer une fois immédiatement ; s'il n'y a aucun jeton et que le deviceId est celui du SDK, le welcome portant le jeton a été perdu, donc au bout d'environ 1,5 s il repart de zéro comme un nouvel appareil ; sinon `rejected` et nouvel essai au bout d'environ 10 minutes ; 4409 : se reconnecter avec un nouveau pageId ; 4429 : `quota`, nouvel essai au bout d'environ 5 minutes.
128
128
  - `rwd_invite` dans la barre d'adresse est retiré lors de `run()` (`history.replaceState`) et envoyé avec le hello jusqu'à l'arrivée d'un welcome.
129
129
  - `welcome.config` : `helpButton` (combiné par OU avec l'option de `run()`), `maskSelectors`, `maskPatterns` (instantané, console, URL réseau, valeurs du stockage, résumés de la chronologie), `confirmSelectors`, `networkExclude` (ajouté aux règles de l'option de `run()`), `sessionLog`. La dernière configuration est conservée dans le localStorage `rwd:cfg` et utilisée jusqu'à l'arrivée du welcome — ainsi, un projet qui a désactivé le journal de session le garde désactivé dès le premier instant de la page suivante, avant tout welcome.
130
130
  - Les instantanés se terminent par une section `[Overlays]` qui liste ce qui flotte au-dessus de la page — le voile d'une popup, une fenêtre modale, un panneau glissant depuis le bas — avec sa balise, un court extrait de texte, la part de la zone d'affichage qu'il couvre et une référence. Un voile est un élément vide pour lequel l'aria snapshot n'a pas de nœud : il reçoit donc une référence `oN` au lieu de `eN` ; c'est ce qui permet à un agent de le toucher pour fermer la popup.
package/README.ja.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- i18n-source: d9a31993ea867d3ef7058e7d637886f38a6ee3e1 -->
1
+ <!-- i18n-source: 9d72ce89dfa86583d406e421998986f82d9827b1 -->
2
2
  [English](README.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | 日本語 | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português (Brasil)](README.pt-BR.md) | [Русский](README.ru.md) | [العربية](README.ar.md)
3
3
 
4
4
  # RWD ページ SDK(`sdk/`)
@@ -6,7 +6,7 @@
6
6
  App WebView や H5 ページが読み込む 1 つの JS ファイルです。これにより、AI エージェントが RWD ゲートウェイ(`gateway/`)と MCP を通じてページを調べ、操作できるようになります。プロトコル:[`docs/protocol.ja.md`](../docs/protocol.ja.md)、アーキテクチャ:[`docs/architecture.ja.md`](../docs/architecture.ja.md)。
7
7
 
8
8
  ```html
9
- <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.1.0/dist/sdk.js"></script>
9
+ <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js"></script>
10
10
  <script>
11
11
  RemoteWebviewDebugger.run("https://rwd.example.com/v1", "rwd_pk_xxxxxxxx", {
12
12
  userId: "u-42", // 任意
@@ -24,7 +24,7 @@ npm に [`remote-webview-debugger`](https://www.npmjs.com/package/remote-webview
24
24
 
25
25
  | 用途 | 入手先 |
26
26
  |---|---|
27
- | CDN からの `<script>` | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.1.0/dist/sdk.js` または `https://unpkg.com/remote-webview-debugger@0.1.0/dist/sdk.js`(minify 済みの IIFE、グローバル変数 `RemoteWebviewDebugger`。バージョンを固定し、必要なら `integrity` を追加してください) |
27
+ | CDN からの `<script>` | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js` または `https://unpkg.com/remote-webview-debugger@0.2.1/dist/sdk.js`(minify 済みの IIFE、グローバル変数 `RemoteWebviewDebugger`。バージョンを固定し、必要なら `integrity` を追加してください) |
28
28
  | バンドラー | `npm install remote-webview-debugger` の後、`import { run, status } from 'remote-webview-debugger'`(型付きの ES モジュール)。取得を早く始められるよう、自分のコードより先に import してください。同じページで `<script>` 版を併せて読み込まないでください |
29
29
  | 自分のゲートウェイ | `https://<gateway>/v1/sdk.js`。ゲートウェイが埋め込んでいるコピーです(SRI 用のコンテンツアドレス方式の URL もあり、管理コンソールが提示します) |
30
30
  | ネイティブアプリ | パッケージの `dist/sdk.js` を同梱するか、上記のいずれかからダウンロードします。[ネイティブ統合](../docs/native-integration.ja.md)を参照してください |
@@ -72,7 +72,7 @@ npm に [`remote-webview-debugger`](https://www.npmjs.com/package/remote-webview
72
72
 
73
73
  **読み込み。** 英語と簡体字中国語は `sdk.js` に含まれています。その他の言語パックは、ページで初めて必要になったときにオンデマンドで読み込まれます(その間、UI はフォールバック先の言語で表示されます):
74
74
 
75
- - `<script>` 版:`sdk.js` と同じ場所にある `locales/<id>.js` から読み込みます(CDN のパス、例えば `…/remote-webview-debugger@0.1.0/dist/locales/ja.js`、または自分のゲートウェイの `/v1/locales/ja.js`)。失敗した場合は `run()` に渡したゲートウェイから読み込みます。この追加のリクエストを避けたい場合は、`sdk.js` の前でも後でもよいので言語パックを自分で読み込んでください:`<script src="…/dist/locales/ja.js"></script>`。
75
+ - `<script>` 版:`sdk.js` と同じ場所にある `locales/<id>.js` から読み込みます(CDN のパス、例えば `…/remote-webview-debugger@0.2.1/dist/locales/ja.js`、または自分のゲートウェイの `/v1/locales/ja.js`)。失敗した場合は `run()` に渡したゲートウェイから読み込みます。この追加のリクエストを避けたい場合は、`sdk.js` の前でも後でもよいので言語パックを自分で読み込んでください:`<script src="…/dist/locales/ja.js"></script>`。
76
76
  - ES モジュール版:動的 import を使うため、バンドラーは言語ごとに別のチャンクを作ります。最初からバンドルに含めたい場合は、`import ja from 'remote-webview-debugger/locales/ja'` とし、`run(url, key, { locales: [ja] })` に渡します。
77
77
 
78
78
  **独自の言語パックと文言。** 言語パックは `{ id, name, dir?, ui?, action?, agent? }` です。省略した部分はフォールバック先の言語から取られます:
@@ -124,7 +124,7 @@ UI は `#__rwd`(`<body>` の外)の Shadow DOM 内にあるため、ペー
124
124
  ## ページ内での動作(プロトコル §6–§8、§11)
125
125
 
126
126
  - レベル:RPC は `welcome.level` / `control.level` に照らしてチェックされます(`forbidden`、「… レベルが必要です」)。レベルを持たないエージェント(古いゲートウェイ)は `interact` として扱われます。エージェントが接続していないときは、追加の制限は何もかかりません。
127
- - デバイストークンは localStorage の `rwd:dtoken` に、再開トークンは sessionStorage の `rwd:resume`(pageId に紐付く)に保持されます。クローズコード 4401:その間にトークンが変わっていれば(同じデバイスの別のタブがちょうど取得した場合)すぐに一度再試行し、そうでなければ `rejected` となり約 10 分後に再試行します。4409:新しい pageId で再接続します。4429:`quota`、約 5 分後に再試行します。
127
+ - デバイストークンは localStorage の `rwd:dtoken` に、再開トークンは sessionStorage の `rwd:resume`(pageId に紐付く)に保持されます。クローズコード 4401:その間にトークンが変わっていれば(同じデバイスの別のタブがちょうど取得した場合)すぐに一度再試行し、トークンがまったくなく deviceId が SDK 自身のものなら、トークン付きの welcome が失われたので約 1.5 秒後に新しいデバイスとして最初からやり直し、それ以外は `rejected` となり約 10 分後に再試行します。4409:新しい pageId で再接続します。4429:`quota`、約 5 分後に再試行します。
128
128
  - アドレスバーの `rwd_invite` は `run()` の時点で取り除かれ(`history.replaceState`)、welcome が届くまで hello と一緒に送られます。
129
129
  - `welcome.config`:`helpButton`(`run()` のオプションと OR を取る)、`maskSelectors`、`maskPatterns`(スナップショット、console、ネットワークの URL、ストレージの値、タイムラインの要約)、`confirmSelectors`、`networkExclude`(`run()` のオプションのルールに追加)、`sessionLog`。最後の設定は localStorage の `rwd:cfg` に保持され、welcome が届くまで使われます。そのため、セッションログをオフにしたプロジェクトでは、次のページでも welcome が届く前の最初の瞬間からオフのままです。
130
130
  - スナップショットの末尾には `[Overlays]` セクションがあり、ページの上に浮かぶもの(ポップアップの背景幕、モーダル、ボトムシート)を、タグ、短いテキスト、ビューポートを覆う割合、ref とともに列挙します。背景幕は aria snapshot にノードのない空の要素なので、`eN` ではなく `oN` の ref が付きます。これにより、エージェントは背景幕をタップしてポップアップを閉じられます。
package/README.ko.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- i18n-source: d9a31993ea867d3ef7058e7d637886f38a6ee3e1 -->
1
+ <!-- i18n-source: 9d72ce89dfa86583d406e421998986f82d9827b1 -->
2
2
  [English](README.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | 한국어 | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português (Brasil)](README.pt-BR.md) | [Русский](README.ru.md) | [العربية](README.ar.md)
3
3
 
4
4
  # RWD 페이지 SDK (`sdk/`)
@@ -6,7 +6,7 @@
6
6
  앱의 WebView나 H5 페이지가 불러오는 JS 파일 하나예요. 이 파일을 넣으면 AI 에이전트가 RWD 게이트웨이(`gateway/`)와 MCP를 거쳐 페이지를 살펴보고 조작할 수 있어요. 프로토콜: [`docs/protocol.ko.md`](../docs/protocol.ko.md), 아키텍처: [`docs/architecture.ko.md`](../docs/architecture.ko.md).
7
7
 
8
8
  ```html
9
- <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.1.0/dist/sdk.js"></script>
9
+ <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js"></script>
10
10
  <script>
11
11
  RemoteWebviewDebugger.run("https://rwd.example.com/v1", "rwd_pk_xxxxxxxx", {
12
12
  userId: "u-42", // 선택
@@ -24,7 +24,7 @@ npm에 [`remote-webview-debugger`](https://www.npmjs.com/package/remote-webview-
24
24
 
25
25
  | 사용 방식 | 위치 |
26
26
  |---|---|
27
- | CDN에서 `<script>`로 | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.1.0/dist/sdk.js` 또는 `https://unpkg.com/remote-webview-debugger@0.1.0/dist/sdk.js` (압축된 IIFE, 전역 `RemoteWebviewDebugger`. 버전을 고정하고, 원하면 `integrity`도 추가하세요) |
27
+ | CDN에서 `<script>`로 | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js` 또는 `https://unpkg.com/remote-webview-debugger@0.2.1/dist/sdk.js` (압축된 IIFE, 전역 `RemoteWebviewDebugger`. 버전을 고정하고, 원하면 `integrity`도 추가하세요) |
28
28
  | 번들러 | `npm install remote-webview-debugger` 후 `import { run, status } from 'remote-webview-debugger'` (타입이 포함된 ES 모듈). 수집이 일찍 시작되도록 직접 작성한 코드보다 먼저 import하세요. 같은 페이지에서 `<script>` 버전을 함께 불러오지 마세요 |
29
29
  | 직접 운영하는 게이트웨이 | `https://<gateway>/v1/sdk.js`, 게이트웨이에 내장된 사본이에요 (SRI용 콘텐츠 주소 기반 URL도 있고, 콘솔에서 안내해요) |
30
30
  | 네이티브 앱 | 패키지의 `dist/sdk.js`를 앱에 포함하거나 위 경로 중 하나에서 내려받으세요. [네이티브 연동](../docs/native-integration.ko.md)을 참고하세요 |
@@ -72,7 +72,7 @@ npm에 [`remote-webview-debugger`](https://www.npmjs.com/package/remote-webview-
72
72
 
73
73
  **불러오기.** 영어와 중국어 간체는 `sdk.js`에 들어 있어요. 나머지 언어 팩은 페이지에서 처음 필요할 때 불러와요 (그 사이에는 UI가 대체 언어로 표시돼요):
74
74
 
75
- - `<script>` 빌드: `sdk.js` 옆의 `locales/<id>.js`에서 불러오고 (CDN 경로라면 `…/remote-webview-debugger@0.1.0/dist/locales/ja.js`, 게이트웨이라면 `/v1/locales/ja.js`), 실패하면 `run()`에 넘긴 게이트웨이에서 불러와요. 추가 요청을 피하려면 `sdk.js` 앞이나 뒤에서 언어 팩을 직접 불러오세요: `<script src="…/dist/locales/ja.js"></script>`.
75
+ - `<script>` 빌드: `sdk.js` 옆의 `locales/<id>.js`에서 불러오고 (CDN 경로라면 `…/remote-webview-debugger@0.2.1/dist/locales/ja.js`, 게이트웨이라면 `/v1/locales/ja.js`), 실패하면 `run()`에 넘긴 게이트웨이에서 불러와요. 추가 요청을 피하려면 `sdk.js` 앞이나 뒤에서 언어 팩을 직접 불러오세요: `<script src="…/dist/locales/ja.js"></script>`.
76
76
  - ES 모듈 빌드: 동적 import를 쓰므로 번들러가 언어마다 별도 청크를 만들어요. 미리 번들에 넣으려면 `import ja from 'remote-webview-debugger/locales/ja'` 후 `run(url, key, { locales: [ja] })`로 넘기세요.
77
77
 
78
78
  **직접 만든 언어 팩과 문구.** 언어 팩은 `{ id, name, dir?, ui?, action?, agent? }`예요. 빠진 부분은 대체 언어에서 가져와요:
@@ -124,7 +124,7 @@ UI는 `#__rwd`(`<body>` 바깥)의 shadow root 안에 있어서, 페이지 CSS
124
124
  ## 페이지에서의 동작 (프로토콜 §6–§8, §11)
125
125
 
126
126
  - 권한 수준: RPC는 `welcome.level` / `control.level`에 따라 검사돼요 (`forbidden`, "Requires the … level"). 권한 수준이 없는 에이전트(구버전 게이트웨이)는 `interact`로 취급하고, 접속한 에이전트가 없으면 추가로 강제하는 것은 없어요.
127
- - 기기 토큰은 localStorage `rwd:dtoken`에, 재개 토큰은 sessionStorage `rwd:resume`(pageId에 묶임)에 보관해요. 종료 코드 4401: 그 사이에 토큰이 바뀌었으면(같은 기기의 다른 탭이 방금 받아 왔으면) 바로 한 번 재시도하고, 아니면 `rejected`가 되고 약 10분 뒤에 재시도해요. 4409: 새 pageId로 다시 연결해요. 4429: `quota`가 되고 약 5분 뒤에 재시도해요.
127
+ - 기기 토큰은 localStorage `rwd:dtoken`에, 재개 토큰은 sessionStorage `rwd:resume`(pageId에 묶임)에 보관해요. 종료 코드 4401: 그 사이에 토큰이 바뀌었으면(같은 기기의 다른 탭이 방금 받아 왔으면) 바로 한 번 재시도하고, 토큰이 아예 없고 deviceId가 SDK 자체의 것이면 토큰을 실은 welcome이 유실된 것이므로 약 1.5초 뒤 새 기기로 처음부터 다시 시작하고, 그 밖에는 `rejected`가 되고 약 10분 뒤에 재시도해요. 4409: 새 pageId로 다시 연결해요. 4429: `quota`가 되고 약 5분 뒤에 재시도해요.
128
128
  - 주소창의 `rwd_invite`는 `run()` 때 제거되고(`history.replaceState`) welcome이 올 때까지 hello와 함께 전송돼요.
129
129
  - `welcome.config`: `helpButton`(`run()` 옵션과 OR), `maskSelectors`, `maskPatterns`(스냅샷, console, 네트워크 URL, 저장소 값, 타임라인 요약), `confirmSelectors`, `networkExclude`(`run()` 옵션의 규칙에 더해짐), `sessionLog`. 마지막 config는 localStorage `rwd:cfg`에 보관돼 welcome이 올 때까지 쓰여요. 그래서 세션 로그를 끈 프로젝트는 다음 페이지에서도 welcome이 오기 전 첫 순간부터 로그가 꺼져 있어요.
130
130
  - 스냅샷은 마지막에 `[Overlays]` 섹션이 붙어서 팝업의 배경, 모달, 바텀 시트처럼 페이지 위에 떠 있는 것을 나열해요. 각 항목에는 태그, 짧은 텍스트, 뷰포트를 덮는 비율, ref가 있어요. 배경은 aria 스냅샷에 노드가 없는 빈 요소라서 `eN` 대신 `oN` ref를 받아요. 덕분에 에이전트가 배경을 탭해서 팝업을 닫을 수 있어요.
package/README.md CHANGED
@@ -5,7 +5,7 @@ English | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [
5
5
  One JS file that an App WebView or H5 page loads, so an AI agent can inspect and operate the page through the RWD gateway (`gateway/`) and MCP. Protocol: [`docs/protocol.md`](../docs/protocol.md); architecture: [`docs/architecture.md`](../docs/architecture.md).
6
6
 
7
7
  ```html
8
- <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.0/dist/sdk.js"></script>
8
+ <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js"></script>
9
9
  <script>
10
10
  RemoteWebviewDebugger.run("https://rwd.example.com/v1", "rwd_pk_xxxxxxxx", {
11
11
  userId: "u-42", // optional
@@ -23,7 +23,7 @@ Published to npm as [`remote-webview-debugger`](https://www.npmjs.com/package/re
23
23
 
24
24
  | Use | Where |
25
25
  |---|---|
26
- | `<script>` from a CDN | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.0/dist/sdk.js` or `https://unpkg.com/remote-webview-debugger@0.2.0/dist/sdk.js` (minified IIFE, global `RemoteWebviewDebugger`; pin the version, and add `integrity` if you like) |
26
+ | `<script>` from a CDN | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js` or `https://unpkg.com/remote-webview-debugger@0.2.1/dist/sdk.js` (minified IIFE, global `RemoteWebviewDebugger`; pin the version, and add `integrity` if you like) |
27
27
  | A bundler | `npm install remote-webview-debugger`, then `import { run, status } from 'remote-webview-debugger'` (ES module with types). Import it before your own code so capture starts early. Don't also load the `<script>` version on the same page |
28
28
  | Your gateway | `https://<gateway>/v1/sdk.js`, the copy the gateway embeds (also at a content-addressed URL for SRI, offered by the console) |
29
29
  | A native app | Bundle `dist/sdk.js` from the package, or download it from one of the above; see [native integration](../docs/native-integration.md) |
@@ -71,7 +71,7 @@ Built in: English (`en`), Simplified Chinese (`zh`), Traditional Chinese (`zh-TW
71
71
 
72
72
  **Loading.** English and Simplified Chinese are inside `sdk.js`. The other packs load on demand, the first time a page needs them (the UI shows the fallback language for that moment):
73
73
 
74
- - `<script>` build: from `locales/<id>.js` next to `sdk.js` (the CDN path, e.g. `…/remote-webview-debugger@0.2.0/dist/locales/ja.js`, or your gateway's `/v1/locales/ja.js`), and from the gateway passed to `run()` if that fails. To avoid the extra request, load the pack yourself, before or after `sdk.js`: `<script src="…/dist/locales/ja.js"></script>`.
74
+ - `<script>` build: from `locales/<id>.js` next to `sdk.js` (the CDN path, e.g. `…/remote-webview-debugger@0.2.1/dist/locales/ja.js`, or your gateway's `/v1/locales/ja.js`), and from the gateway passed to `run()` if that fails. To avoid the extra request, load the pack yourself, before or after `sdk.js`: `<script src="…/dist/locales/ja.js"></script>`.
75
75
  - ES module build: a dynamic import, so your bundler puts each language in its own chunk. To bundle one up front instead: `import ja from 'remote-webview-debugger/locales/ja'`, then `run(url, key, { locales: [ja] })`.
76
76
 
77
77
  **Your own packs and wording.** A pack is `{ id, name, dir?, ui?, action?, agent? }`; anything left out comes from its fallback languages:
@@ -123,7 +123,7 @@ Colors are `r, g, b` triplets so that the translucent shades follow (the same co
123
123
  ## Behavior in the page (protocol §6–§8, §11)
124
124
 
125
125
  - Levels: RPCs are checked against `welcome.level` / `control.level` (`forbidden`, "Requires the … level"). An agent without a level (an older gateway) gets `interact`; with no agent attached nothing extra is enforced.
126
- - The device token is kept in localStorage `rwd:dtoken`, the resume token in sessionStorage `rwd:resume` (bound to the pageId). Close code 4401: if the token changed meanwhile (another tab of the device just got it), retry once right away, else `rejected` and retry after about 10 minutes; 4409: reconnect with a new pageId; 4429: `quota`, retry after about 5 minutes.
126
+ - The device token is kept in localStorage `rwd:dtoken`, the resume token in sessionStorage `rwd:resume` (bound to the pageId). Close code 4401: if the token changed meanwhile (another tab of the device just got it), retry once right away; if there is no token at all and the deviceId is the SDK's own, the welcome with the token was lost, so after about 1.5 s it starts over as a new device; else `rejected` and retry after about 10 minutes; 4409: reconnect with a new pageId; 4429: `quota`, retry after about 5 minutes.
127
127
  - `rwd_invite` in the address bar is taken out at `run()` (`history.replaceState`) and sent with the hello until a welcome arrives.
128
128
  - `welcome.config`: `helpButton` (OR-ed with the `run()` option), `maskSelectors`, `maskPatterns` (snapshot, console, network URLs, storage values, timeline summaries), `confirmSelectors`, `networkExclude` (added to the `run()` option's rules), `sessionLog`. The last config is kept in localStorage `rwd:cfg` and used until the welcome arrives — so a project that turned the session log off keeps it off from the first moment of the next page, before any welcome.
129
129
  - Snapshots end with an `[Overlays]` section listing what floats over the page — a popup's backdrop, a modal, a bottom sheet — with its tag, a short piece of text, how much of the viewport it covers and a ref. A backdrop is an empty element the aria snapshot has no node for, so it gets an `oN` ref instead of `eN`; that is what lets an agent tap it to close the popup.
package/README.pt-BR.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- i18n-source: d9a31993ea867d3ef7058e7d637886f38a6ee3e1 -->
1
+ <!-- i18n-source: 9d72ce89dfa86583d406e421998986f82d9827b1 -->
2
2
  [English](README.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | Português (Brasil) | [Русский](README.ru.md) | [العربية](README.ar.md)
3
3
 
4
4
  # SDK da página do RWD (`sdk/`)
@@ -6,7 +6,7 @@
6
6
  Um único arquivo JS que uma WebView de app ou uma página H5 carrega para que um agente de IA possa inspecionar e operar a página pelo gateway do RWD (`gateway/`) e pelo MCP. Protocolo: [`docs/protocol.pt-BR.md`](../docs/protocol.pt-BR.md); arquitetura: [`docs/architecture.pt-BR.md`](../docs/architecture.pt-BR.md).
7
7
 
8
8
  ```html
9
- <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.1.0/dist/sdk.js"></script>
9
+ <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js"></script>
10
10
  <script>
11
11
  RemoteWebviewDebugger.run("https://rwd.example.com/v1", "rwd_pk_xxxxxxxx", {
12
12
  userId: "u-42", // opcional
@@ -24,7 +24,7 @@ Publicado no npm como [`remote-webview-debugger`](https://www.npmjs.com/package/
24
24
 
25
25
  | Uso | Onde |
26
26
  |---|---|
27
- | `<script>` de uma CDN | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.1.0/dist/sdk.js` ou `https://unpkg.com/remote-webview-debugger@0.1.0/dist/sdk.js` (IIFE minificado, global `RemoteWebviewDebugger`; fixe a versão e, se quiser, adicione `integrity`) |
27
+ | `<script>` de uma CDN | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js` ou `https://unpkg.com/remote-webview-debugger@0.2.1/dist/sdk.js` (IIFE minificado, global `RemoteWebviewDebugger`; fixe a versão e, se quiser, adicione `integrity`) |
28
28
  | Um bundler | `npm install remote-webview-debugger` e depois `import { run, status } from 'remote-webview-debugger'` (módulo ES com tipos). Importe-o antes do seu próprio código para que a captura comece cedo. Não carregue também a versão `<script>` na mesma página |
29
29
  | O seu gateway | `https://<gateway>/v1/sdk.js`, a cópia embutida no gateway (também disponível numa URL endereçada por conteúdo para SRI, oferecida pelo console) |
30
30
  | Um app nativo | Empacote o `dist/sdk.js` do pacote ou baixe-o de uma das opções acima; veja [integração nativa](../docs/native-integration.pt-BR.md) |
@@ -72,7 +72,7 @@ Embutidos: inglês (`en`), chinês simplificado (`zh`), chinês tradicional (`zh
72
72
 
73
73
  **Carregamento.** Inglês e chinês simplificado vêm dentro do `sdk.js`. Os demais pacotes são carregados sob demanda, na primeira vez que uma página precisa deles (nesse instante, a interface mostra o idioma de fallback):
74
74
 
75
- - Build `<script>`: a partir de `locales/<id>.js` ao lado do `sdk.js` (o caminho da CDN, por exemplo `…/remote-webview-debugger@0.1.0/dist/locales/ja.js`, ou `/v1/locales/ja.js` do seu gateway) e, se isso falhar, a partir do gateway passado para `run()`. Para evitar a requisição extra, carregue você mesmo o pacote, antes ou depois do `sdk.js`: `<script src="…/dist/locales/ja.js"></script>`.
75
+ - Build `<script>`: a partir de `locales/<id>.js` ao lado do `sdk.js` (o caminho da CDN, por exemplo `…/remote-webview-debugger@0.2.1/dist/locales/ja.js`, ou `/v1/locales/ja.js` do seu gateway) e, se isso falhar, a partir do gateway passado para `run()`. Para evitar a requisição extra, carregue você mesmo o pacote, antes ou depois do `sdk.js`: `<script src="…/dist/locales/ja.js"></script>`.
76
76
  - Build de módulo ES: um import dinâmico, então o seu bundler coloca cada idioma no próprio chunk. Para incluir um idioma no bundle desde o início: `import ja from 'remote-webview-debugger/locales/ja'` e depois `run(url, key, { locales: [ja] })`.
77
77
 
78
78
  **Seus próprios pacotes e textos.** Um pacote é `{ id, name, dir?, ui?, action?, agent? }`; o que ficar de fora vem dos idiomas de fallback dele:
@@ -124,7 +124,7 @@ As cores são trios `r, g, b` para que os tons translúcidos acompanhem (a mesma
124
124
  ## Comportamento na página (protocolo §6–§8, §11)
125
125
 
126
126
  - Níveis: as RPCs são verificadas contra `welcome.level` / `control.level` (`forbidden`, "Requer o nível …"). Um agente sem nível (um gateway mais antigo) recebe `interact`; sem agente conectado, nada extra é aplicado.
127
- - O token do dispositivo fica no localStorage `rwd:dtoken`, o token de retomada no sessionStorage `rwd:resume` (vinculado ao pageId). Código de fechamento 4401: se o token mudou nesse meio-tempo (outra aba do dispositivo acabou de recebê-lo), tenta de novo uma vez na hora; senão, `rejected` e nova tentativa depois de uns 10 minutos; 4409: reconecta com um novo pageId; 4429: `quota`, nova tentativa depois de uns 5 minutos.
127
+ - O token do dispositivo fica no localStorage `rwd:dtoken`, o token de retomada no sessionStorage `rwd:resume` (vinculado ao pageId). Código de fechamento 4401: se o token mudou nesse meio-tempo (outra aba do dispositivo acabou de recebê-lo), tenta de novo uma vez na hora; se não há token nenhum e o deviceId é o próprio do SDK, o welcome com o token se perdeu, então depois de uns 1,5 s recomeça como um novo dispositivo; senão, `rejected` e nova tentativa depois de uns 10 minutos; 4409: reconecta com um novo pageId; 4429: `quota`, nova tentativa depois de uns 5 minutos.
128
128
  - `rwd_invite` na barra de endereço é retirado em `run()` (`history.replaceState`) e enviado com o hello até chegar um welcome.
129
129
  - `welcome.config`: `helpButton` (combinado com OR com a opção de `run()`), `maskSelectors`, `maskPatterns` (snapshot, console, URLs de rede, valores de armazenamento, resumos da linha do tempo), `confirmSelectors`, `networkExclude` (somado às regras da opção de `run()`), `sessionLog`. A última config é guardada no localStorage `rwd:cfg` e usada até o welcome chegar — assim, um projeto que desligou o log da sessão o mantém desligado desde o primeiro instante da próxima página, antes de qualquer welcome.
130
130
  - Os snapshots terminam com uma seção `[Overlays]` que lista o que flutua sobre a página — o fundo de um pop-up, um modal, um bottom sheet — com a tag, um trecho curto de texto, quanto da viewport cobre e uma ref. Um fundo é um elemento vazio que não tem nó no snapshot ARIA, então recebe uma ref `oN` em vez de `eN`; é isso que permite a um agente tocar nele para fechar o pop-up.
package/README.ru.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- i18n-source: d9a31993ea867d3ef7058e7d637886f38a6ee3e1 -->
1
+ <!-- i18n-source: 9d72ce89dfa86583d406e421998986f82d9827b1 -->
2
2
  [English](README.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português (Brasil)](README.pt-BR.md) | Русский | [العربية](README.ar.md)
3
3
 
4
4
  # SDK страницы RWD (`sdk/`)
@@ -6,7 +6,7 @@
6
6
  Один JS-файл, который загружает WebView приложения или H5-страница, чтобы ИИ-агент мог изучать страницу и работать с ней через шлюз RWD (`gateway/`) и MCP. Протокол: [`docs/protocol.ru.md`](../docs/protocol.ru.md); архитектура: [`docs/architecture.ru.md`](../docs/architecture.ru.md).
7
7
 
8
8
  ```html
9
- <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.1.0/dist/sdk.js"></script>
9
+ <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js"></script>
10
10
  <script>
11
11
  RemoteWebviewDebugger.run("https://rwd.example.com/v1", "rwd_pk_xxxxxxxx", {
12
12
  userId: "u-42", // необязательно
@@ -24,7 +24,7 @@
24
24
 
25
25
  | Способ | Откуда |
26
26
  |---|---|
27
- | `<script>` с CDN | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.1.0/dist/sdk.js` или `https://unpkg.com/remote-webview-debugger@0.1.0/dist/sdk.js` (минифицированный IIFE, глобальная переменная `RemoteWebviewDebugger`; закрепите версию и, если хотите, добавьте `integrity`) |
27
+ | `<script>` с CDN | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js` или `https://unpkg.com/remote-webview-debugger@0.2.1/dist/sdk.js` (минифицированный IIFE, глобальная переменная `RemoteWebviewDebugger`; закрепите версию и, если хотите, добавьте `integrity`) |
28
28
  | Сборщик | `npm install remote-webview-debugger`, затем `import { run, status } from 'remote-webview-debugger'` (ES-модуль с типами). Импортируйте его раньше своего кода, чтобы перехват начался как можно раньше. Не подключайте на той же странице ещё и версию для `<script>` |
29
29
  | Ваш шлюз | `https://<gateway>/v1/sdk.js` — копия, встроенная в шлюз (доступна также по адресу, зависящему от содержимого, для SRI; его предлагает веб-консоль) |
30
30
  | Нативное приложение | Встройте `dist/sdk.js` из пакета или скачайте его из любого из перечисленных источников; см. [интеграцию с нативным приложением](../docs/native-integration.ru.md) |
@@ -72,7 +72,7 @@
72
72
 
73
73
  **Загрузка.** Английский и упрощённый китайский входят в `sdk.js`. Остальные пакеты загружаются по требованию, когда они впервые понадобятся странице (на это время интерфейс показывает резервный язык):
74
74
 
75
- - Сборка для `<script>`: из `locales/<id>.js` рядом с `sdk.js` (путь на CDN, например `…/remote-webview-debugger@0.1.0/dist/locales/ja.js`, или `/v1/locales/ja.js` вашего шлюза), а если не получилось — со шлюза, переданного в `run()`. Чтобы избежать лишнего запроса, загрузите пакет сами, до или после `sdk.js`: `<script src="…/dist/locales/ja.js"></script>`.
75
+ - Сборка для `<script>`: из `locales/<id>.js` рядом с `sdk.js` (путь на CDN, например `…/remote-webview-debugger@0.2.1/dist/locales/ja.js`, или `/v1/locales/ja.js` вашего шлюза), а если не получилось — со шлюза, переданного в `run()`. Чтобы избежать лишнего запроса, загрузите пакет сами, до или после `sdk.js`: `<script src="…/dist/locales/ja.js"></script>`.
76
76
  - Сборка ES-модуля: динамический импорт, поэтому сборщик выносит каждый язык в отдельный чанк. Чтобы, наоборот, включить язык в бандл сразу: `import ja from 'remote-webview-debugger/locales/ja'`, затем `run(url, key, { locales: [ja] })`.
77
77
 
78
78
  **Собственные пакеты и формулировки.** Пакет — это `{ id, name, dir?, ui?, action?, agent? }`; всё, что не указано, берётся из резервных языков:
@@ -124,7 +124,7 @@ RemoteWebviewDebugger.run(url, key, {
124
124
  ## Поведение на странице (протокол §6–§8, §11)
125
125
 
126
126
  - Уровни доступа: RPC проверяются по `welcome.level` / `control.level` (`forbidden`, «Requires the … level»). Агент без уровня (от более старого шлюза) получает `interact`; если агент не подключён, никаких дополнительных проверок нет.
127
- - Токен устройства хранится в localStorage `rwd:dtoken`, токен возобновления — в sessionStorage `rwd:resume` (привязан к pageId). Код закрытия 4401: если токен тем временем изменился (его только что получила другая вкладка устройства), сразу повторить попытку один раз, иначе `rejected` и повтор примерно через 10 минут; 4409: переподключиться с новым pageId; 4429: `quota`, повтор примерно через 5 минут.
127
+ - Токен устройства хранится в localStorage `rwd:dtoken`, токен возобновления — в sessionStorage `rwd:resume` (привязан к pageId). Код закрытия 4401: если токен тем временем изменился (его только что получила другая вкладка устройства), сразу повторить попытку один раз; если токена нет вовсе, а deviceId собственный, сгенерированный SDK, значит, welcome с токеном потерялся, и примерно через 1,5 с SDK начинает заново как новое устройство; иначе `rejected` и повтор примерно через 10 минут; 4409: переподключиться с новым pageId; 4429: `quota`, повтор примерно через 5 минут.
128
128
  - `rwd_invite` из адресной строки убирается при вызове `run()` (`history.replaceState`) и отправляется в `hello`, пока не придёт `welcome`.
129
129
  - `welcome.config`: `helpButton` (объединяется через ИЛИ с параметром `run()`), `maskSelectors`, `maskPatterns` (снимок, console, URL сетевых запросов, значения хранилища, сводки хронологии), `confirmSelectors`, `networkExclude` (добавляется к правилам параметра `run()`), `sessionLog`. Последняя конфигурация хранится в localStorage `rwd:cfg` и используется, пока не придёт `welcome`, — поэтому у проекта, отключившего журнал сеанса, он остаётся выключенным с первого же момента следующей страницы, ещё до какого-либо `welcome`.
130
130
  - Снимки заканчиваются разделом `[Overlays]` со списком того, что перекрывает страницу, — подложки всплывающего окна, модального окна, нижней шторки — с тегом, коротким фрагментом текста, долей перекрытой области просмотра и ref. Подложка — это пустой элемент, для которого в aria snapshot нет узла, поэтому она получает ref вида `oN` вместо `eN`; именно это позволяет агенту нажать на неё, чтобы закрыть всплывающее окно.
package/README.zh-CN.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- i18n-source: d9a31993ea867d3ef7058e7d637886f38a6ee3e1 -->
1
+ <!-- i18n-source: 9d72ce89dfa86583d406e421998986f82d9827b1 -->
2
2
  [English](README.md) | 简体中文 | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português (Brasil)](README.pt-BR.md) | [Русский](README.ru.md) | [العربية](README.ar.md)
3
3
 
4
4
  # RWD 页面 SDK(`sdk/`)
@@ -6,7 +6,7 @@
6
6
  App WebView / H5 页面加载的一个 JS 文件,让 AI agent 通过 RWD 网关(`gateway/`)和 MCP 查看、操作页面。协议见 [`docs/protocol.zh-CN.md`](../docs/protocol.zh-CN.md),架构见 [`docs/architecture.zh-CN.md`](../docs/architecture.zh-CN.md)。
7
7
 
8
8
  ```html
9
- <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.0/dist/sdk.js"></script>
9
+ <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js"></script>
10
10
  <script>
11
11
  RemoteWebviewDebugger.run("https://rwd.example.com/v1", "rwd_pk_xxxxxxxx", {
12
12
  userId: "u-42", // 可选
@@ -24,7 +24,7 @@ npm 包名 [`remote-webview-debugger`](https://www.npmjs.com/package/remote-webv
24
24
 
25
25
  | 用法 | 地址 |
26
26
  |---|---|
27
- | CDN `<script>` | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.0/dist/sdk.js` 或 `https://unpkg.com/remote-webview-debugger@0.2.0/dist/sdk.js`(压缩后的 IIFE,全局对象 `RemoteWebviewDebugger`;请固定版本号,需要的话加上 `integrity`) |
27
+ | CDN `<script>` | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js` 或 `https://unpkg.com/remote-webview-debugger@0.2.1/dist/sdk.js`(压缩后的 IIFE,全局对象 `RemoteWebviewDebugger`;请固定版本号,需要的话加上 `integrity`) |
28
28
  | 打包工具 | `npm install remote-webview-debugger`,然后 `import { run, status } from 'remote-webview-debugger'`(ES module,带类型声明)。尽量在你自己的代码之前 import,好让记录尽早开始。同一个页面不要再加载 `<script>` 版本 |
29
29
  | 你的网关 | `https://<网关>/v1/sdk.js`,网关内嵌的那一份(控制台还提供带 SRI 的按内容寻址地址) |
30
30
  | 原生 App | 把包里的 `dist/sdk.js` 打包进 App,或从以上任一地址下载,见[原生接入](../docs/native-integration.zh-CN.md) |
@@ -72,7 +72,7 @@ npm 包名 [`remote-webview-debugger`](https://www.npmjs.com/package/remote-webv
72
72
 
73
73
  **怎么加载。** 英文和简体中文打包在 `sdk.js` 里。其他语言包在页面第一次用到时按需加载(加载完成前界面先用回退语言):
74
74
 
75
- - `<script>` 版:从 `sdk.js` 同目录下的 `locales/<id>.js` 加载(CDN 路径如 `…/remote-webview-debugger@0.2.0/dist/locales/ja.js`,或你的网关的 `/v1/locales/ja.js`),失败时再从传给 `run()` 的网关加载。想省掉这次请求,可以自己在 `sdk.js` 之前或之后引入:`<script src="…/dist/locales/ja.js"></script>`。
75
+ - `<script>` 版:从 `sdk.js` 同目录下的 `locales/<id>.js` 加载(CDN 路径如 `…/remote-webview-debugger@0.2.1/dist/locales/ja.js`,或你的网关的 `/v1/locales/ja.js`),失败时再从传给 `run()` 的网关加载。想省掉这次请求,可以自己在 `sdk.js` 之前或之后引入:`<script src="…/dist/locales/ja.js"></script>`。
76
76
  - ES module 版:用动态 import,打包工具会把每种语言拆成单独的 chunk。想直接打进主包:`import ja from 'remote-webview-debugger/locales/ja'`,再 `run(url, key, { locales: [ja] })`。
77
77
 
78
78
  **自定义语言包和文案。** 语言包是 `{ id, name, dir?, ui?, action?, agent? }`,没写的文案从回退语言里取:
@@ -124,7 +124,7 @@ RemoteWebviewDebugger.run(url, key, {
124
124
  ## 页面内的行为(协议 §6–§8、§11)
125
125
 
126
126
  - 权限级别:按 `welcome.level` / `control.level` 拦截 RPC(`forbidden`「需要 … 权限」);有 agent 但网关没给级别时按 `interact`,没有 agent 时不额外限制。
127
- - 设备令牌存 localStorage `rwd:dtoken`,resume 存 sessionStorage `rwd:resume`(绑定 pageId)。关闭码 4401:令牌在此期间变了(同设备另一个标签页刚拿到)就立即重试一次,否则 `rejected`,约 10 分钟后再试;4409:换新 pageId 重连;4429:`quota`,约 5 分钟后再试。
127
+ - 设备令牌存 localStorage `rwd:dtoken`,resume 存 sessionStorage `rwd:resume`(绑定 pageId)。关闭码 4401:令牌在此期间变了(同设备另一个标签页刚拿到)就立即重试一次;如果根本没有令牌且 deviceId 是 SDK 自己生成的,说明带令牌的 welcome 丢了,约 1.5 秒后作为新设备从头开始;否则 `rejected`,约 10 分钟后再试;4409:换新 pageId 重连;4429:`quota`,约 5 分钟后再试。
128
128
  - 地址栏 `rwd_invite` 在 `run()` 时移出(`history.replaceState`),随 hello 发送直到收到 welcome。
129
129
  - `welcome.config`:`helpButton`(与 `run()` 的选项取或)、`maskSelectors`、`maskPatterns`(快照、console、网络 URL、存储值、时间线摘要)、`confirmSelectors`、`networkExclude`(与 `run()` 选项里的规则合并)、`sessionLog`;上一次的配置记在 localStorage `rwd:cfg`,welcome 之前先用——所以项目关掉了会话日志,下一个页面从第一刻起就不会记录,不用等 welcome。
130
130
  - 快照末尾会附一段 `[浮层]` 清单,列出盖在页面上的东西——弹窗遮罩、模态框、底部弹出层——带上标签、一小段文字、覆盖视口的比例和 ref。遮罩往往是个空元素,无障碍快照里没有它的节点,所以给的是 `oN` 而不是 `eN` 形式的 ref;agent 正是靠它点遮罩关掉弹窗。
package/README.zh-TW.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- i18n-source: d9a31993ea867d3ef7058e7d637886f38a6ee3e1 -->
1
+ <!-- i18n-source: 9d72ce89dfa86583d406e421998986f82d9827b1 -->
2
2
  [English](README.md) | [简体中文](README.zh-CN.md) | 繁體中文 | [日本語](README.ja.md) | [한국어](README.ko.md) | [Español](README.es.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | [Português (Brasil)](README.pt-BR.md) | [Русский](README.ru.md) | [العربية](README.ar.md)
3
3
 
4
4
  # RWD 頁面 SDK(`sdk/`)
@@ -6,7 +6,7 @@
6
6
  由 App WebView 或 H5 頁面載入的單一 JS 檔案,讓 AI agent 透過 RWD 閘道(`gateway/`)和 MCP 檢視並操作頁面。協定請見 [`docs/protocol.zh-TW.md`](../docs/protocol.zh-TW.md);架構請見 [`docs/architecture.zh-TW.md`](../docs/architecture.zh-TW.md)。
7
7
 
8
8
  ```html
9
- <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.1.0/dist/sdk.js"></script>
9
+ <script src="https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js"></script>
10
10
  <script>
11
11
  RemoteWebviewDebugger.run("https://rwd.example.com/v1", "rwd_pk_xxxxxxxx", {
12
12
  userId: "u-42", // 選用
@@ -24,7 +24,7 @@
24
24
 
25
25
  | 用法 | 來源 |
26
26
  |---|---|
27
- | 從 CDN 以 `<script>` 載入 | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.1.0/dist/sdk.js` 或 `https://unpkg.com/remote-webview-debugger@0.1.0/dist/sdk.js`(壓縮過的 IIFE,全域物件 `RemoteWebviewDebugger`;請固定版本號,需要的話再加上 `integrity`) |
27
+ | 從 CDN 以 `<script>` 載入 | `https://cdn.jsdelivr.net/npm/remote-webview-debugger@0.2.1/dist/sdk.js` 或 `https://unpkg.com/remote-webview-debugger@0.2.1/dist/sdk.js`(壓縮過的 IIFE,全域物件 `RemoteWebviewDebugger`;請固定版本號,需要的話再加上 `integrity`) |
28
28
  | 打包工具 | `npm install remote-webview-debugger`,然後 `import { run, status } from 'remote-webview-debugger'`(附型別定義的 ES module)。請在你自己的程式碼之前 import,讓記錄盡早開始。同一個頁面不要再載入 `<script>` 版本 |
29
29
  | 你的閘道 | `https://<閘道>/v1/sdk.js`,即閘道內嵌的那一份(主控台另外提供依內容定址、可搭配 SRI 的網址) |
30
30
  | 原生 App | 把套件中的 `dist/sdk.js` 打包進 App,或從上述任一來源下載;請見[原生整合](../docs/native-integration.zh-TW.md) |
@@ -72,7 +72,7 @@
72
72
 
73
73
  **如何載入。** 英文和簡體中文包含在 `sdk.js` 裡。其他語言包會在頁面第一次需要時才載入(在那一刻,介面先顯示遞補語言):
74
74
 
75
- - `<script>` 版本:從 `sdk.js` 同一目錄下的 `locales/<id>.js` 載入(CDN 路徑如 `…/remote-webview-debugger@0.1.0/dist/locales/ja.js`,或你的閘道的 `/v1/locales/ja.js`),失敗時再從傳給 `run()` 的閘道載入。想省下這次請求,可以自己在 `sdk.js` 之前或之後載入語言包:`<script src="…/dist/locales/ja.js"></script>`。
75
+ - `<script>` 版本:從 `sdk.js` 同一目錄下的 `locales/<id>.js` 載入(CDN 路徑如 `…/remote-webview-debugger@0.2.1/dist/locales/ja.js`,或你的閘道的 `/v1/locales/ja.js`),失敗時再從傳給 `run()` 的閘道載入。想省下這次請求,可以自己在 `sdk.js` 之前或之後載入語言包:`<script src="…/dist/locales/ja.js"></script>`。
76
76
  - ES module 版本:使用動態 import,所以打包工具會把每種語言拆成獨立的 chunk。若要一開始就打包進去:`import ja from 'remote-webview-debugger/locales/ja'`,然後 `run(url, key, { locales: [ja] })`。
77
77
 
78
78
  **自訂語言包和文字。** 語言包的格式是 `{ id, name, dir?, ui?, action?, agent? }`;沒寫的部分取自它的遞補語言:
@@ -124,7 +124,7 @@ RemoteWebviewDebugger.run(url, key, {
124
124
  ## 頁面內的行為(協定 §6–§8、§11)
125
125
 
126
126
  - 等級:RPC 會依 `welcome.level` / `control.level` 檢查(`forbidden`,「需要 … 等級」)。沒有等級的 agent(較舊的閘道)以 `interact` 處理;沒有 agent 連線時,不額外施加限制。
127
- - 裝置權杖存在 localStorage `rwd:dtoken`,恢復權杖存在 sessionStorage `rwd:resume`(綁定 pageId)。關閉碼 4401:若權杖在此期間已改變(同一台裝置的另一個分頁剛取得它),立即重試一次,否則進入 `rejected`,約 10 分鐘後再試;4409:換新的 pageId 重新連線;4429:`quota`,約 5 分鐘後再試。
127
+ - 裝置權杖存在 localStorage `rwd:dtoken`,恢復權杖存在 sessionStorage `rwd:resume`(綁定 pageId)。關閉碼 4401:若權杖在此期間已改變(同一台裝置的另一個分頁剛取得它),立即重試一次;若根本沒有權杖且 deviceId 是 SDK 自己產生的,表示帶有權杖的 welcome 遺失了,約 1.5 秒後會以新裝置的身分從頭開始;否則進入 `rejected`,約 10 分鐘後再試;4409:換新的 pageId 重新連線;4429:`quota`,約 5 分鐘後再試。
128
128
  - 網址列中的 `rwd_invite` 會在 `run()` 時移除(`history.replaceState`),並隨 hello 一起送出,直到收到 welcome。
129
129
  - `welcome.config`:`helpButton`(與 `run()` 選項取 OR)、`maskSelectors`、`maskPatterns`(快照、console、網路 URL、儲存空間的值、時間軸摘要)、`confirmSelectors`、`networkExclude`(與 `run()` 選項中的規則合併)、`sessionLog`。最近一次的設定會存在 localStorage `rwd:cfg`,在收到 welcome 之前先沿用——所以關閉了工作階段記錄的專案,下一個頁面從第一刻起就不會記錄,不必等 welcome。
130
130
  - 快照最後會附上一段 `[Overlays]`,列出浮在頁面上的東西——彈出視窗的遮罩、強制回應視窗、底部滑出面板——包含它的標籤、一小段文字、覆蓋了多少可視區域,以及一個 ref。遮罩是 aria snapshot 中沒有對應節點的空元素,所以它拿到的是 `oN` 而不是 `eN` 形式的 ref;agent 正是靠它點擊遮罩來關閉彈出視窗。