yunti-browser-runtime 0.1.3 → 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.
@@ -2,10 +2,356 @@
2
2
 
3
3
  ## Current Phase
4
4
 
5
- Patch release `yunti-browser-runtime@0.1.3` is complete. The local loopback
6
- bridge no longer requires a token by default, the extension popup no longer
7
- shows settings as a first-run task, and the published package is verified with
8
- `npm run release:verify-published`.
5
+ Release `yunti-browser-runtime@0.2.0` is complete and verified on the official
6
+ npm registry. The current patch line is `0.2.1`, focused on making default
7
+ observe-first page actions avoid automatic Chrome debugger attachment.
8
+
9
+ Current implementation focus: `0.2.1` install/bridge recovery without default
10
+ manual page refresh. The anti-debug-sensitive default action path is already in
11
+ place: fresh-uid `yunti_click`, `yunti_hover`, `yunti_fill`, `yunti_select`,
12
+ `yunti_type_text`, and `yunti_press_key` dispatch through content script page
13
+ events instead of CDP mouse/keyboard/runtime commands. Explicit CDP, trace,
14
+ screenshot fallback, drag/upload/emulation/resize, and legacy snapshot
15
+ compatibility remain low-level/advanced paths that may show the Chrome debugger
16
+ banner.
17
+
18
+ Post-0.2 planning remains active after this patch.
19
+ P6.6.1 browser extension distribution readiness, P6.6.2 store-facing
20
+ permission/privacy copy, and P6.6.3 pre-store permission strategy decision are
21
+ complete; P6.5 optional local runtime console is complete through real-browser
22
+ validation. P6.6.4 store-candidate permission UX design is deferred to the
23
+ post-0.2 store-candidate track.
24
+
25
+ Active slice status: `0.2.1` install/bridge recovery has code and docs in
26
+ progress. The extension background scans accessible `http` / `https` tabs after
27
+ install/startup/background recovery, tab activation/update, popup refresh, and
28
+ `yunti_list_browser_targets`; it pings existing content scripts, injects the
29
+ packaged scripts when missing, and triggers registration automatically. Manual
30
+ refresh is now documented as a last resort only for pages Chrome cannot inject
31
+ into, unsupported protocols, missing permissions, or other browser-enforced
32
+ limits.
33
+
34
+ Acceptance for this slice:
35
+
36
+ - Add `scripting`-based auto injection / auto registration for existing
37
+ supported tabs.
38
+ - Trigger recovery on extension install/startup, tab activation/update, popup
39
+ refresh, and list-targets style inventory recovery where feasible.
40
+ - Keep the content-script observe/action path non-CDP by default.
41
+ - Update README, install guide, skill, Tool Guide, and usage hints so agents no
42
+ longer tell users to refresh as the default post-install step.
43
+ - Doctor/no-session guidance should prefer automatic recovery and mention manual
44
+ refresh only as a fallback.
45
+ - Verify with unit tests, release checks, and real-browser E2E if browser
46
+ behavior changes.
47
+
48
+ Latest visible 0.2.0 phase split:
49
+
50
+ - P6.1.1 completed: `yunti_observe_page` schema, tool hints, and bridge
51
+ routing.
52
+ - P6.1.2 completed: content-script DOM observer, compact text tree, field
53
+ state hints, scroll metadata, and minimum redaction.
54
+ - P6.1.3 completed: fresh observe uids feed existing click/hover/fill uid
55
+ actions while preserving the snapshot compatibility path.
56
+ - P6.1.4 completed: real-browser `observe -> click uid -> observe/verify`
57
+ closure validation passed with the local `pytest-playwright` environment
58
+ plus temporary Node Playwright 1.58.0.
59
+ - P6.2.1 completed: additive structured action result contract and main action
60
+ path coverage.
61
+ - P6.2.2 completed: `yunti_select` uid/selector/value/text semantics and
62
+ structured failure diagnostics.
63
+ - P6.2.3 completed: `yunti_fill` / `yunti_fill_form` field-state,
64
+ contenteditable, failure aggregation, and post-fill value retention
65
+ diagnostics.
66
+ - P6.2.4 completed: `yunti_scroll` uid, coordinate, no-movement, partial
67
+ movement, missing-target, and document-fallback diagnostics.
68
+ - P6.2.5 completed: async UI recovery guidance for
69
+ `yunti_wait_for -> yunti_observe_page -> fresh uid`.
70
+ - P6.2.6 completed: `yunti_wait_for` now preserves compatibility fields such
71
+ as `found`, `text`, `selector`, `condition`, `value`, and `waitedMs` while
72
+ adding `action: "wait_for"`, `target`, `ok`, `recoverable`, `nextStepHint`,
73
+ and timeout diagnostics with `code: "WAIT_TIMEOUT"` plus `recoveryHint`.
74
+ - P6.2.7 completed: structured action result coverage is now captured in
75
+ `docs/ACTION_RESULT_COVERAGE.md` and checked by
76
+ `npm run check:action-results`, which is part of `npm run release:check`.
77
+ - P6.3.1 completed: `docs/AGENT_WORKFLOW_CONTRACT.md`,
78
+ `yunti_get_tool_usage_hints` workflow hints, Tool Guide, and the packaged
79
+ skill now share the same default agent workflow contract and copyable prompt.
80
+ - P6.3.2 completed: Tool Guide, packaged skill, and `yunti_get_tool_usage_hints`
81
+ now expose minimal workflows for click, form fill, scroll-to-find, tab
82
+ switching, and async wait.
83
+ - P6.4.1 completed: strict DOM redaction now covers page title, labels, names,
84
+ visible text, placeholders, value previews, select selected value/text,
85
+ option value/text, scrollable container names, and likely email, phone,
86
+ Luhn-valid payment-card-like, and address-like content while keeping balanced
87
+ credential-like protection as the default.
88
+ - P6.4.2 completed: shared MCP redaction now sanitizes likely Bearer tokens,
89
+ JWTs, private keys, long token-like values, emails, phones, Luhn-valid
90
+ payment-card-like values, and address-like text before learning memory writes
91
+ and console diagnostic caching.
92
+ - P6.4.3 completed: raw CDP and screenshot tools now expose explicit guidance
93
+ for non-default-redaction diagnostics, sanitized-tool preference, scope
94
+ minimization, safe summarization, and CDP cleanup.
95
+ - P6.5.1 completed: optional local runtime console minimum loop. The bridge now
96
+ serves `/console`, `/console/state`, and `/console/cancel-pending`; the CLI
97
+ exposes `yunti-browser-runtime console`; state uses sanitized summaries by
98
+ default and remains protected when bridge auth is enabled.
99
+ - P6.5.2 completed: local console diagnostic polish now includes `HEAD
100
+ /console`, runtime/expected-extension/session-extension version summaries,
101
+ extension version mismatch warnings, visible warning cards, doctor console URL
102
+ output, and stronger no-page recovery guidance.
103
+ - P6.5.3 completed: real-browser console validation now checks `HEAD
104
+ /console`, `/console`, `/console/state`, runtime/extension version alignment,
105
+ connected page state, and absence of no-page or version-mismatch warnings in
106
+ the opt-in Playwright extension smoke.
107
+ - P6.6.1 completed: browser extension distribution readiness audit and public
108
+ doc links.
109
+ - P6.6.2 completed: store-facing permission and privacy copy.
110
+ - P6.6.3 completed: pre-store permission strategy decision.
111
+ - P6.6.4 deferred: store-candidate permission UX design.
112
+ - P7.1 completed: `0.2.0` npm/unpacked release closure and npm publication.
113
+
114
+ Latest detailed P6.2 status:
115
+
116
+ - Completed: action result main-path coverage, `yunti_select`
117
+ selector/value + uid/value + uid/text, select uid/selector failure
118
+ diagnostics, contenteditable fill, selector/uid fill failure diagnostics,
119
+ `yunti_fill_form` aggregation diagnostics, uid scroll, and scroll
120
+ no-movement recovery diagnostics.
121
+ - Completed: uid/selector fill diagnostics for non-editable, hidden, disabled,
122
+ or readonly targets while preserving existing successful fill/select/scroll
123
+ behavior and compatibility fields.
124
+ - Completed: uid fill post-value verification for keyboard/contenteditable
125
+ paths. When the value does not remain, `yunti_fill` returns
126
+ `VALUE_NOT_APPLIED` with length-only diagnostics and recovery guidance instead
127
+ of echoing the raw field value.
128
+ - Completed: scroll partial-movement diagnostics. When a scroll moves less than
129
+ requested, results keep `ok: true` and include `partialMovement` with
130
+ requested/actual deltas, affected axes, `edgeHint`, and
131
+ `decision: "observe-before-continuing-scroll"`.
132
+ - Completed: uid scroll missing/stale target diagnostics. When a scroll uid
133
+ cannot be resolved, `yunti_scroll` returns `scrolled: false`,
134
+ `UID_NOT_FOUND` or `UID_COORDINATES_UNAVAILABLE`, and recovery guidance to
135
+ refresh observation before retrying.
136
+ - Completed: coordinate scroll hit/fallback diagnostics. When `x` / `y` is
137
+ provided, `yunti_scroll` can report `coordinateTarget`,
138
+ `scrollContainerFound`, and `coordinateScrollFallback: "document"` so agents
139
+ can detect document fallback instead of assuming a nested panel moved.
140
+ - Completed: coordinate scroll document fallback recovery hints. Successful
141
+ document-fallback scrolls keep `ok: true` but can include
142
+ `coordinateFallbackHint` and a clearer `nextStepHint` pointing agents back to
143
+ `yunti_observe_page` and fresh `scrollableContainers[]` uids.
144
+ - Completed: wait-observe recovery guidance for async UI transitions. Tool
145
+ usage hints, Tool Guide, and the packaged skill now tell agents to use
146
+ `yunti_wait_for`, then `yunti_observe_page`, then fresh uids for async
147
+ fill/select/scroll recovery instead of reusing old targets.
148
+ - Completed: structured `yunti_wait_for` results. Successful waits now include
149
+ `action: "wait_for"`, `target`, `ok: true`, `recoverable: false`, and
150
+ `nextStepHint`; timeout waits return `found: false`, `ok: false`,
151
+ `recoverable: true`, `code: "WAIT_TIMEOUT"`, `recoveryHint`, and
152
+ `nextStepHint`.
153
+ - Latest P6.2.6 validation: `git diff --check` passed; token residue grep
154
+ returned no matches; `node --test tests/tool-handlers.test.js` passed 42
155
+ tests; `node --test tests/bridge.test.js` passed 66 tests; `YUNTI_E2E=1 npm
156
+ run test:e2e` skipped because Playwright/Chromium is not installed in the
157
+ current environment; `npm run release:check` passed with 116 node:test cases
158
+ total, 115 passing and 1 default real-browser smoke skipped, plus npm package
159
+ and extension zip content checks.
160
+ - Completed: `yunti_observe_page` field-state hints, select selected-option
161
+ hints, select `options[]` summaries, and structured disabled-option
162
+ diagnostics for `yunti_select`.
163
+ - Completed: P6.2.7 coverage audit gate. `docs/ACTION_RESULT_COVERAGE.md`
164
+ now records the 11 core action surfaces and their success paths, failure
165
+ diagnostics, preserved compatibility fields, and remaining real-browser
166
+ validation notes. `scripts/check-action-result-coverage.js` validates the
167
+ matrix and is exposed as `npm run check:action-results`.
168
+ - Latest P6.2.7 validation: `npm run check:action-results` passed with 11
169
+ coverage rows; `npm run check` passed; `git diff --check` passed; token
170
+ residue grep returned no matches; `YUNTI_E2E=1 npm run test:e2e` skipped
171
+ because Playwright/Chromium is not installed in the current environment;
172
+ `npm run release:check` passed with 116 node:test cases total, 115 passing
173
+ and 1 default real-browser smoke skipped, plus npm package contents
174
+ validation with 44 files and extension zip contents validation with 13 files.
175
+ - Completed: P6.3.1 agent workflow contract. `docs/AGENT_WORKFLOW_CONTRACT.md`
176
+ records the default browser operation loop, recovery rules, confirmation
177
+ boundary, copyable prompt, and non-goals. `yunti_get_tool_usage_hints` now
178
+ accepts `topic: "workflow"` and returns `defaultPageOperation`,
179
+ `confirmationBoundary`, and `copyableAgentPrompt`. Tool Guide and packaged
180
+ skill now include the same default page operation contract.
181
+ - Latest P6.3.1 validation: `node --test tests/bridge.test.js` passed 67
182
+ tests; `git diff --check` passed; token residue grep returned no matches;
183
+ `YUNTI_E2E=1 npm run test:e2e` skipped because Playwright/Chromium is not
184
+ installed in the current environment; `npm run release:check` passed with
185
+ 117 node:test cases total, 116 passing and 1 default real-browser smoke
186
+ skipped, plus npm package contents validation with 45 files and extension zip
187
+ contents validation with 13 files.
188
+ - Next: implement P6.3.2 minimal use cases in Tool Guide and skill, or close
189
+ P6.1.4 first if Playwright/Chromium is available for real-browser closure.
190
+ - Completed: P6.3.2 minimal use cases. Tool Guide and packaged skill now cover
191
+ Click, Fill Form, Scroll To Find, Switch Tab, and Wait For Async Result.
192
+ `yunti_get_tool_usage_hints` now returns matching `minimalUseCases` under
193
+ the `workflow` topic, and bridge tests lock the five keys plus critical
194
+ guidance such as fresh observation, field state, `scrollableContainers[]`,
195
+ `Target.activateTarget`, and `WAIT_TIMEOUT`.
196
+ - Latest P6.3.2 validation: `node --test tests/bridge.test.js` passed 68
197
+ tests; `git diff --check` passed; token residue grep returned no matches;
198
+ `YUNTI_E2E=1 npm run test:e2e` skipped because Playwright/Chromium is not
199
+ installed in the current environment; `npm run release:check` passed with
200
+ 118 node:test cases total, 117 passing and 1 default real-browser smoke
201
+ skipped, plus npm package contents validation with 45 files and extension zip
202
+ contents validation with 13 files.
203
+ - Completed: P6.4.1 DOM redaction policy deepening. `strict` mode now redacts
204
+ PII-like text surfaces in `yunti_observe_page`, including page title, labels,
205
+ names, visible text, placeholders, value previews, select selected value/text,
206
+ option value/text, scrollable container names, email, phone, Luhn-valid
207
+ payment-card-like values, and address-like text. `balanced` remains the
208
+ default credential-like protection mode; `off` remains explicit local
209
+ debugging only.
210
+ - Latest P6.4.1 validation: `node --check extension/dom-observer.js` passed;
211
+ `node --test tests/dom-observer.test.js` passed 6 tests covering strict PII
212
+ categories, select option text redaction, page title redaction, and balanced
213
+ ordinary business text behavior; `node --test tests/bridge.test.js` passed 68
214
+ tests; `git diff --check` passed; token residue grep returned no matches;
215
+ `YUNTI_E2E=1 npm run test:e2e` skipped because Playwright/Chromium is not
216
+ installed in the current environment; `npm run release:check` passed with
217
+ 119 node:test cases total, 118 passing and 1 default real-browser smoke
218
+ skipped, plus npm package contents validation with 45 files and extension zip
219
+ contents validation with 13 files.
220
+ - Completed: P6.4.2 learning memory / diagnostic artifacts secret-boundary
221
+ tightening. `mcp/redaction.js` now provides shared likely-sensitive text
222
+ sanitization for Bearer tokens, JWTs, private keys, long token-like values,
223
+ emails, phones, Luhn-valid payment-card-like values, and address-like text.
224
+ `yunti_remember_learning` sanitizes title, detail, tags, and source before
225
+ disk writes. Console diagnostics sanitize text, stackTrace, and args before
226
+ caching. Raw CDP events intentionally remain raw low-level diagnostics and
227
+ are documented as an explicit exception to clear after debugging.
228
+ - Latest P6.4.2 validation: `node --check mcp/redaction.js`,
229
+ `node --check mcp/memory.js`, and `node --check mcp/bridge-hub.js` passed;
230
+ `node --test tests/bridge.test.js` passed 70 tests, including new memory and
231
+ console redaction coverage; `git diff --check` passed; token residue grep
232
+ returned no matches; `npm run check` passed; `npm test` passed with 121
233
+ node:test cases total, 120 passing and 1 default real-browser smoke skipped;
234
+ `YUNTI_E2E=1 npm run test:e2e` skipped because Playwright/Chromium is not
235
+ installed in the current environment; `npm run release:check` passed, plus npm
236
+ package contents validation with 45 files and extension zip contents validation
237
+ with 13 files.
238
+ - Completed: P6.4.3 raw CDP / screenshot non-redaction diagnostic guidance and
239
+ cleanup boundaries. Tool descriptions, `yunti_get_tool_usage_hints`, Tool
240
+ Guide, packaged skill, and Security docs now tell agents to prefer sanitized
241
+ diagnostics, use raw CDP only for low-level debugging, filter by `method` and
242
+ `limit`, clear with `yunti_clear_cdp_events`, treat screenshots as real
243
+ visible pixels outside DOM redaction, prefer viewport screenshots when enough,
244
+ and summarize safe findings instead of storing raw payloads or images.
245
+ - Latest P6.4.3 validation: `node --check mcp/tools.js` passed;
246
+ `node --test tests/bridge.test.js` passed 71 tests, including new raw CDP and
247
+ screenshot safety-boundary usage hints coverage; `git diff --check` passed;
248
+ token residue grep returned no matches; `npm run check` passed; `npm test`
249
+ passed with 122 node:test cases total, 121 passing and 1 default real-browser
250
+ smoke skipped; `YUNTI_E2E=1 npm run test:e2e` skipped because
251
+ Playwright/Chromium is not installed in the current environment;
252
+ `npm run release:check` passed, plus npm package contents validation with 45
253
+ files and extension zip contents validation with 13 files.
254
+ - Completed: P6.1.4 real-browser closure validation. The local
255
+ `/opt/miniconda3/envs/pytest-playwright` environment provides Python
256
+ Playwright 1.58.0 and existing browser caches; the Node E2E still needs the
257
+ Node `playwright` package, so validation used temporary `npm install --no-save
258
+ --package-lock=false playwright@1.58.0` with
259
+ `PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1` and without changing package metadata.
260
+ `YUNTI_E2E=1 npm run test:e2e` then passed the real browser extension bridge
261
+ smoke with `observe -> click uid -> verify`. Final validation for this status
262
+ update: `git diff --check` passed; token residue grep returned no matches;
263
+ `npm run check` passed; `npm test` passed with 122 node:test cases total,
264
+ 121 passing and 1 default real-browser smoke skipped; `YUNTI_E2E=1 npm run
265
+ test:e2e` passed with 1 real-browser smoke test; `npm run release:check`
266
+ passed, plus npm package contents validation with 45 files and extension zip
267
+ contents validation with 13 files.
268
+ - Completed: P6.5.1 optional local runtime console minimum loop. `mcp/http-server.js`
269
+ now serves an optional `/console` page, protected `/console/state` JSON, and
270
+ protected `/console/cancel-pending` action. `BridgeHub` tracks sanitized
271
+ recent activity, summarizes connected sessions without raw secrets, exposes
272
+ pending/queued request counts, and can cancel runtime requests that are still
273
+ queued or waiting for browser results. `bin/yunti-browser-runtime.js` and
274
+ `package.json` now expose a `console` command that starts the bridge and
275
+ prints the local console URL.
276
+ - Latest P6.5.1 validation: `git diff --check` passed; token residue grep
277
+ returned no matches; `npm run check` passed; `npm test` passed with 125
278
+ node:test cases total, 124 passing and 1 default real-browser smoke skipped;
279
+ `YUNTI_E2E=1 npm run test:e2e` passed with 1 real-browser smoke test;
280
+ `npm run release:check` passed, including 11 action-result coverage rows, npm
281
+ package contents validation with 45 files, and extension zip contents
282
+ validation with 13 files.
283
+ - Completed: P6.5.2 local console diagnostic polish. Extension sessions now
284
+ report `client.extensionVersion`; console state reports runtime and expected
285
+ extension versions, session extension versions, and warning entries for no
286
+ connected pages, unknown extension version, or mismatched extension/runtime
287
+ versions. The `/console` route now supports `HEAD` for simple probes, the
288
+ console UI renders warning cards and version metadata, and `doctor` JSON plus
289
+ human summary now include the optional console URL.
290
+ - Latest P6.5.2 validation: `git diff --check` passed; token residue grep
291
+ returned no matches; `npm run check` passed; `npm test` passed with 126
292
+ node:test cases total, 125 passing and 1 default real-browser smoke skipped;
293
+ `YUNTI_E2E=1 npm run test:e2e` passed with 1 real-browser smoke test;
294
+ `npm run release:check` passed, including 11 action-result coverage rows, npm
295
+ package contents validation with 45 files, and extension zip contents
296
+ validation with 13 files.
297
+ - Completed: P6.5.3 real-browser console validation. `tests/e2e.test.js` now
298
+ verifies the optional local console against a real Playwright-loaded
299
+ extension session: `HEAD /console` returns HTML, `/console` renders the page,
300
+ `/console/state` includes runtime and expected extension versions, the
301
+ connected session reports the current extension version, and no
302
+ `NO_CONNECTED_PAGES` or `EXTENSION_VERSION_MISMATCH` warning appears after a
303
+ real page registers.
304
+ - Latest P6.5.3 validation: `git diff --check` passed; token residue grep
305
+ returned no matches; `npm run check` passed; `npm test` passed with 126
306
+ node:test cases total, 125 passing and 1 default real-browser smoke skipped;
307
+ `YUNTI_E2E=1 npm run test:e2e` passed with 1 real-browser smoke test;
308
+ `npm run release:check` passed, including 11 action-result coverage rows, npm
309
+ package contents validation with 45 files, and extension zip contents
310
+ validation with 13 files.
311
+ - Completed: P6.6.1 browser extension distribution readiness. Added
312
+ `docs/EXTENSION_DISTRIBUTION.md` with the current manifest permission audit,
313
+ Chrome Web Store / Edge Add-ons policy references, submission checklist,
314
+ privacy disclosure topics, and permission narrowing options. Linked it from
315
+ README, Security notes, and Roadmap.
316
+ - Latest P6.6.1 validation: `git diff --check` passed; token residue grep
317
+ returned no matches; `npm run check` passed; `npm test` passed with 126
318
+ node:test cases total, 125 passing and 1 default real-browser smoke skipped;
319
+ `YUNTI_E2E=1 npm run test:e2e` passed with 1 real-browser smoke in the local
320
+ `pytest-playwright` environment; `npm run release:check` passed, including
321
+ public documentation residue checks, public Markdown link checks for 15 files,
322
+ 11 action-result coverage rows, npm package contents validation with 46
323
+ files, and extension zip contents validation with 13 files.
324
+ - Completed: P6.6.2 store-facing permission and privacy copy. Added
325
+ `docs/EXTENSION_STORE_COPY.md` with draft short and long descriptions,
326
+ permission rationale, privacy-policy language, store data disclosure guidance,
327
+ reviewer notes, local bridge dependency notes, and final review checklist.
328
+ - Latest P6.6.2 validation: `git diff --check` passed; token residue grep
329
+ returned no matches; `npm run check` passed; `npm test` passed with 126
330
+ node:test cases total, 125 passing and 1 default real-browser smoke skipped;
331
+ `YUNTI_E2E=1 npm run test:e2e` passed with 1 real-browser smoke in the local
332
+ `pytest-playwright` environment; `npm run release:check` passed, including
333
+ public documentation residue checks, public Markdown link checks for 16 files,
334
+ 11 action-result coverage rows, npm package contents validation with 47
335
+ files, and extension zip contents validation with 13 files.
336
+ - Completed: P6.6.3 pre-store permission strategy decision. Added
337
+ `docs/EXTENSION_PERMISSION_STRATEGY.md`, keeping the current npm/unpacked
338
+ developer path unchanged, deciding that the current broad-permission manifest
339
+ should not be submitted to browser stores unchanged by default, and defining a
340
+ future store-candidate track for optional host access and optional network
341
+ diagnostics.
342
+ - Latest P6.6.3 validation: `git diff --check` passed; token residue grep
343
+ returned no matches; `npm run check` passed; `npm test` passed with 126
344
+ node:test cases total, 125 passing and 1 default real-browser smoke skipped;
345
+ `YUNTI_E2E=1 npm run test:e2e` passed with 1 real-browser smoke in the local
346
+ `pytest-playwright` environment; `npm run release:check` passed, including
347
+ public documentation residue checks, public Markdown link checks for 17 files,
348
+ 11 action-result coverage rows, npm package contents validation with 48
349
+ files, and extension zip contents validation with 13 files.
350
+ - P7.1 completed: package and extension versions are both `0.2.0`; metadata,
351
+ release, dry-run, publish, and post-publish verification gates passed.
352
+ `npm run release:publish` published `yunti-browser-runtime@0.2.0` to the
353
+ official npm registry, and `npm run release:verify-published` verified the
354
+ published package metadata and tarball URL.
9
355
 
10
356
  ## Current State
11
357
 
@@ -43,7 +389,7 @@ shows settings as a first-run task, and the published package is verified with
43
389
  - `npm run release:dry-run` and `npm run release:publish` pin the official npm
44
390
  registry at `https://registry.npmjs.org/`, avoiding accidental publication to
45
391
  a locally configured mirror registry.
46
- - `yunti-browser-runtime@0.1.3` is published on the official npm registry.
392
+ - `yunti-browser-runtime@0.2.0` is published on the official npm registry.
47
393
  - Extension popup is a zero-config status panel by default; Bridge URL, page
48
394
  matching, and optional Bridge Token stay under advanced settings.
49
395
  - `npm run test:e2e` provides an opt-in real-browser Playwright smoke test for
@@ -89,6 +435,635 @@ shows settings as a first-run task, and the published package is verified with
89
435
  - Extension registers all `http` and `https` pages by default.
90
436
  - Product-specific fixed conversation, workspace, and side-panel entry points
91
437
  have been removed from the standalone extension.
438
+ - The next major execution plan is captured in `docs/NEXT_MAJOR_PLAN.md`.
439
+ - P6.1 observe/action compatibility has started: `yunti_observe_page` now has an
440
+ MCP tool schema, observe-first usage hints, bridge routing contract tests, a
441
+ content-script DOM observer, focused DOM observer tests, and an opt-in
442
+ real-browser smoke assertion. Fresh observe uids now feed the existing
443
+ click/hover/fill uid resolver while preserving the `yunti_take_snapshot`
444
+ compatibility path.
445
+ - Latest P6.1 observe/action validation: `git diff --check` passed,
446
+ `npm run release:check` passed with 69 passing node:test cases and 1 skipped
447
+ real-browser smoke by default, and `YUNTI_E2E=1 npm run test:e2e` skipped
448
+ because Playwright/Chromium is not installed in the current environment.
449
+ - Deterministic observe fixtures now cover hidden/offscreen target handling and
450
+ redaction edge modes in addition to fresh uid, text tree, scroll metadata,
451
+ balanced redaction, and stale uid replacement.
452
+ - `docs/EXECUTION_PLAN.md` now includes a P6.1 real-browser closure runbook for
453
+ the remaining `observe -> click uid -> observe/verify` validation gap.
454
+ - P6.2 preparation has started with tool usage action recovery guidance for
455
+ click/hover/fill, without changing the runtime action implementation.
456
+ - Latest P6.2 preparation validation: `git diff --check` passed,
457
+ `node --test tests/bridge.test.js` passed 63 tests, `npm run release:check`
458
+ passed with 70 passing node:test cases and 1 skipped real-browser smoke by
459
+ default, `YUNTI_E2E=1 npm run test:e2e` skipped because Playwright/Chromium is
460
+ not installed in the current environment, and the token residue grep returned
461
+ no matches.
462
+ - P6.2 action result contract guidance now distinguishes current
463
+ compatibility-shaped action returns from the additive target contract for
464
+ `action`, `target`, `ok`, `code`, `recoverable`, `nextStepHint`, and
465
+ before/after summaries.
466
+ - Latest P6.2 action result contract validation: `git diff --check` passed,
467
+ `node --test tests/bridge.test.js` passed 64 tests, `npm run release:check`
468
+ passed with 71 passing node:test cases and 1 skipped real-browser smoke by
469
+ default, `YUNTI_E2E=1 npm run test:e2e` skipped because Playwright/Chromium is
470
+ not installed in the current environment, and the token residue grep returned
471
+ no matches.
472
+ - Dispatcher-level action result shape tests now lock the current compatible
473
+ uid click, uid hover, uid fill, and content-script scroll passthrough result
474
+ fields before P6.2 adds structured action result fields.
475
+ - Latest P6.2 action result shape validation: `git diff --check` passed,
476
+ `node --test tests/tool-handlers.test.js` passed 4 tests,
477
+ `npm run release:check` passed with 72 passing node:test cases and 1 skipped
478
+ real-browser smoke by default, `YUNTI_E2E=1 npm run test:e2e` skipped because
479
+ Playwright/Chromium is not installed in the current environment, and the token
480
+ residue grep returned no matches.
481
+ - uid-based `yunti_click` now returns additive structured action result fields
482
+ (`action`, `target`, `ok`, `recoverable`, and `nextStepHint`) while preserving
483
+ the existing `clicked`, `uid`, `x/y`, and `browserSessionId` compatibility
484
+ fields.
485
+ - Latest P6.2 uid-click structured result validation: `git diff --check`
486
+ passed, `node --test tests/tool-handlers.test.js` passed 4 tests,
487
+ `npm run release:check` passed with 72 passing node:test cases and 1 skipped
488
+ real-browser smoke by default, `YUNTI_E2E=1 npm run test:e2e` skipped because
489
+ Playwright/Chromium is not installed in the current environment, and the token
490
+ residue grep returned no matches.
491
+ - uid-based `yunti_hover` now returns additive structured action result fields
492
+ (`action`, `target`, `ok`, `recoverable`, and `nextStepHint`) while preserving
493
+ the existing `hovered`, `uid`, `x/y`, and `browserSessionId` compatibility
494
+ fields.
495
+ - Latest P6.2 uid-hover structured result validation: `git diff --check`
496
+ passed, `node --test tests/tool-handlers.test.js` passed 4 tests,
497
+ `npm run release:check` passed with 72 passing node:test cases and 1 skipped
498
+ real-browser smoke by default, `YUNTI_E2E=1 npm run test:e2e` skipped because
499
+ Playwright/Chromium is not installed in the current environment, and the token
500
+ residue grep returned no matches.
501
+ - uid-based `yunti_fill` keyboard path now returns additive structured action
502
+ result fields (`action`, `target`, `ok`, `recoverable`, and `nextStepHint`)
503
+ while preserving the existing `filled`, `uid`, `method`, `value`, and
504
+ `browserSessionId` compatibility fields. Select/contenteditable/scroll
505
+ semantics are intentionally unchanged in this slice.
506
+ - Latest P6.2 uid-fill keyboard structured result validation: `git diff
507
+ --check` passed, `node --test tests/tool-handlers.test.js` passed 4 tests,
508
+ `npm run release:check` passed with 72 passing node:test cases and 1 skipped
509
+ real-browser smoke by default, npm package contents validation passed with 42
510
+ files, extension zip contents validation passed with 13 files,
511
+ `YUNTI_E2E=1 npm run test:e2e` skipped because Playwright/Chromium is not
512
+ installed in the current environment, and the token residue grep returned no
513
+ matches.
514
+ - uid-based `yunti_fill` select path now returns additive structured action
515
+ result fields (`action`, `target`, `ok`, `recoverable`, and `nextStepHint`)
516
+ while preserving the existing `filled`, `uid`, `method`, `value`, and
517
+ `browserSessionId` compatibility fields. Select value dispatch semantics are
518
+ intentionally unchanged in this slice.
519
+ - Latest P6.2 uid-fill select structured result targeted validation: `git diff
520
+ --check` passed and `node --test tests/tool-handlers.test.js` passed 5 tests.
521
+ - Latest P6.2 uid-fill select structured result full validation: `git diff
522
+ --check` passed, `npm run release:check` passed with 73 passing node:test
523
+ cases and 1 skipped real-browser smoke by default, npm package contents
524
+ validation passed with 42 files, extension zip contents validation passed with
525
+ 13 files, `YUNTI_E2E=1 npm run test:e2e` skipped because Playwright/Chromium
526
+ is not installed in the current environment, and the token residue grep
527
+ returned no matches.
528
+ - Coordinate fallback `yunti_click` now returns additive structured action
529
+ result fields (`action`, `target`, `ok`, `recoverable`, and `nextStepHint`)
530
+ while preserving the existing `clicked`, `x/y`, `method`, and
531
+ `browserSessionId` compatibility fields. Coordinate click dispatch semantics
532
+ are intentionally unchanged in this slice.
533
+ - Latest P6.2 coordinate-click structured result targeted validation: `git diff
534
+ --check` passed and `node --test tests/tool-handlers.test.js` passed 6 tests.
535
+ - Latest P6.2 coordinate-click structured result full validation: `git diff
536
+ --check` passed, `npm run release:check` passed with 74 passing node:test
537
+ cases and 1 skipped real-browser smoke by default, npm package contents
538
+ validation passed with 42 files, extension zip contents validation passed with
539
+ 13 files, `YUNTI_E2E=1 npm run test:e2e` skipped because Playwright/Chromium
540
+ is not installed in the current environment, and the token residue grep
541
+ returned no matches.
542
+ - Coordinate fallback `yunti_hover` now returns additive structured action
543
+ result fields (`action`, `target`, `ok`, `recoverable`, and `nextStepHint`)
544
+ while preserving the existing `hovered`, `x/y`, `method`, and
545
+ `browserSessionId` compatibility fields. Coordinate hover dispatch semantics
546
+ are intentionally unchanged in this slice.
547
+ - Latest P6.2 coordinate-hover structured result targeted validation: `git diff
548
+ --check` passed and `node --test tests/tool-handlers.test.js` passed 7 tests.
549
+ - Latest P6.2 coordinate-hover structured result full validation: `git diff
550
+ --check` passed, `npm run release:check` passed with 75 passing node:test
551
+ cases and 1 skipped real-browser smoke by default, npm package contents
552
+ validation passed with 42 files, extension zip contents validation passed with
553
+ 13 files, `YUNTI_E2E=1 npm run test:e2e` skipped because Playwright/Chromium
554
+ is not installed in the current environment, and the token residue grep
555
+ returned no matches.
556
+ - Selector fallback `yunti_hover` now returns additive structured action result
557
+ fields (`action`, `target`, `ok`, `recoverable`, and `nextStepHint`) while
558
+ preserving the existing `hovered`, `selector`, `x/y`, `method`, and
559
+ `browserSessionId` compatibility fields. Selector hover dispatch semantics
560
+ are intentionally unchanged in this slice.
561
+ - Latest P6.2 selector-hover structured result targeted validation: `git diff
562
+ --check` passed and `node --test tests/tool-handlers.test.js` passed 8 tests.
563
+ - Latest P6.2 selector-hover structured result full validation: `git diff
564
+ --check` passed, `npm run release:check` passed with 76 passing node:test
565
+ cases and 1 skipped real-browser smoke by default, npm package contents
566
+ validation passed with 42 files, extension zip contents validation passed with
567
+ 13 files, `YUNTI_E2E=1 npm run test:e2e` skipped because Playwright/Chromium
568
+ is not installed in the current environment, and the token residue grep
569
+ returned no matches.
570
+ - Selector fallback `yunti_click` now returns additive structured action result
571
+ fields (`action`, `target`, `ok`, `recoverable`, and `nextStepHint`) around
572
+ the existing content-script passthrough result while preserving `clicked`,
573
+ `element`, `selector`, `method`, and `browserSessionId` compatibility fields.
574
+ Selector click dispatch semantics are intentionally unchanged in this slice.
575
+ - Latest P6.2 selector-click structured result targeted validation: `git diff
576
+ --check` passed and `node --test tests/tool-handlers.test.js` passed 9 tests.
577
+ - Latest P6.2 selector-click structured result full validation: `git diff
578
+ --check` passed, `npm run release:check` passed with 77 passing node:test
579
+ cases and 1 skipped real-browser smoke by default, npm package contents
580
+ validation passed with 42 files, extension zip contents validation passed with
581
+ 13 files, `YUNTI_E2E=1 npm run test:e2e` skipped because Playwright/Chromium
582
+ is not installed in the current environment, and the token residue grep
583
+ returned no matches.
584
+ - `yunti_scroll` now returns additive structured action result fields
585
+ (`action`, `ok`, `recoverable`, `nextStepHint`, and `browserSessionId`) around
586
+ the existing content-script passthrough result while preserving `scrolled`,
587
+ `deltaX`, `deltaY`, `target`, `before`, and `after` compatibility fields.
588
+ Document/container scroll selection and `scrollBy` dispatch semantics are
589
+ intentionally unchanged in this slice.
590
+ - Latest P6.2 scroll structured result targeted validation: `git diff --check`
591
+ passed and `node --test tests/tool-handlers.test.js` passed 9 tests.
592
+ - Latest P6.2 scroll structured result full validation: `git diff --check`
593
+ passed, `npm run release:check` passed with 77 passing node:test cases and 1
594
+ skipped real-browser smoke by default, npm package contents validation passed
595
+ with 42 files, extension zip contents validation passed with 13 files,
596
+ `YUNTI_E2E=1 npm run test:e2e` skipped because Playwright/Chromium is not
597
+ installed in the current environment, and the token residue grep returned no
598
+ matches.
599
+ - Selector fallback `yunti_fill` now returns additive structured action result
600
+ fields (`action`, `target`, `ok`, `recoverable`, `nextStepHint`, `selector`,
601
+ `method`, and `browserSessionId`) around the existing content-script
602
+ passthrough result while preserving `filled`, `element`, and `valueLength`
603
+ compatibility fields. Selector fill dispatch semantics are intentionally
604
+ unchanged in this slice.
605
+ - Latest P6.2 selector-fill structured result targeted validation: `git diff
606
+ --check` passed and `node --test tests/tool-handlers.test.js` passed 10 tests.
607
+ - Latest P6.2 selector-fill structured result full validation: `git diff
608
+ --check` passed, `npm run release:check` passed with 78 passing node:test
609
+ cases and 1 skipped real-browser smoke by default, npm package contents
610
+ validation passed with 42 files, extension zip contents validation passed with
611
+ 13 files, `YUNTI_E2E=1 npm run test:e2e` skipped because Playwright/Chromium
612
+ is not installed in the current environment, and the token residue grep
613
+ returned no matches.
614
+ - `yunti_type_text` now returns additive structured action result fields
615
+ (`action`, `target`, `ok`, `recoverable`, `nextStepHint`, and
616
+ `browserSessionId`) for both uid-based CDP keyboard typing and content-script
617
+ passthrough typing, while preserving uid path compatibility fields (`typed`,
618
+ `uid`, `text`, and `method`) and content-script compatibility fields
619
+ (`typed`, `element`, `textLength`, and `mode`). Type dispatch semantics are
620
+ intentionally unchanged in this slice.
621
+ - Latest P6.2 type-text structured result targeted validation: `git diff
622
+ --check` passed and `node --test tests/tool-handlers.test.js` passed 12 tests.
623
+ - Latest P6.2 type-text structured result full validation: `git diff --check`
624
+ passed, `npm run release:check` passed with 80 passing node:test cases and 1
625
+ skipped real-browser smoke by default, npm package contents validation passed
626
+ with 42 files, extension zip contents validation passed with 13 files,
627
+ `YUNTI_E2E=1 npm run test:e2e` skipped because Playwright/Chromium is not
628
+ installed in the current environment, and the token residue grep returned no
629
+ matches.
630
+ - `yunti_press_key` now returns additive structured action result fields
631
+ (`action`, `target`, `ok`, `recoverable`, `nextStepHint`, and
632
+ `browserSessionId`) for both uid-based CDP keyboard dispatch and
633
+ content-script passthrough key press, while preserving uid path compatibility
634
+ fields (`pressed`, `uid`, and `key`) and content-script compatibility fields
635
+ (`pressed`, `key`, `element`, and `valueChanged`). Key dispatch semantics are
636
+ intentionally unchanged in this slice.
637
+ - Latest P6.2 press-key structured result targeted validation: `git diff
638
+ --check` passed and `node --test tests/tool-handlers.test.js` passed 14 tests.
639
+ - Latest P6.2 press-key structured result full validation: `git diff --check`
640
+ passed, `npm run release:check` passed with 82 passing node:test cases and 1
641
+ skipped real-browser smoke by default, npm package contents validation passed
642
+ with 42 files, extension zip contents validation passed with 13 files,
643
+ `YUNTI_E2E=1 npm run test:e2e` skipped because Playwright/Chromium is not
644
+ installed in the current environment, and the token residue grep returned no
645
+ matches.
646
+ - `yunti_upload_file` now returns additive structured action result fields
647
+ (`action`, `target`, `ok`, `recoverable`, `nextStepHint`, and
648
+ `browserSessionId`) for both uid-based and selector-based file input
649
+ resolution, while preserving compatibility fields (`uploaded`, `fileCount`,
650
+ and `filePaths`). File input resolution and `DOM.setFileInputFiles` dispatch
651
+ semantics are intentionally unchanged in this slice.
652
+ - Latest P6.2 upload-file structured result targeted validation: `git diff
653
+ --check` passed and `node --test tests/tool-handlers.test.js` passed 16 tests.
654
+ - Latest P6.2 upload-file structured result full validation: `git diff
655
+ --check` passed, `npm run release:check` passed with 84 passing node:test
656
+ cases and 1 skipped real-browser smoke by default, npm package contents
657
+ validation passed with 42 files, extension zip contents validation passed with
658
+ 13 files, `YUNTI_E2E=1 npm run test:e2e` skipped because Playwright/Chromium
659
+ is not installed in the current environment, and the token residue grep
660
+ returned no matches.
661
+ - `yunti_drag` now returns additive structured action result fields (`action`,
662
+ `target`, `ok`, `recoverable`, `nextStepHint`, and `browserSessionId`) while
663
+ preserving compatibility fields (`dragged`, `from`, `to`, and `steps`). CDP
664
+ mouse event dispatch semantics are intentionally unchanged in this slice.
665
+ - Latest P6.2 drag structured result targeted validation: `git diff --check`
666
+ passed and `node --test tests/tool-handlers.test.js` passed 17 tests.
667
+ - Latest P6.2 drag structured result full validation: `git diff --check`
668
+ passed, `npm run release:check` passed with 85 passing node:test cases and 1
669
+ skipped real-browser smoke by default, npm package contents validation passed
670
+ with 42 files, extension zip contents validation passed with 13 files,
671
+ `YUNTI_E2E=1 npm run test:e2e` skipped because Playwright/Chromium is not
672
+ installed in the current environment, and the token residue grep returned no
673
+ matches.
674
+ - P6.2 action result coverage has been audited after the drag slice. Structured
675
+ action result fields now cover the main single-action paths for click, hover,
676
+ fill, scroll, type text, press key, upload, and drag while preserving existing
677
+ compatibility fields. Remaining action result gaps are standalone
678
+ `yunti_select` content-script passthrough and aggregate `yunti_fill_form`.
679
+ These must be completed before moving into deeper fill/select/scroll
680
+ semantics.
681
+ - Latest P6.2 action result coverage checklist validation: `git diff --check`
682
+ passed, `npm run release:check` passed with 85 passing node:test cases and 1
683
+ skipped real-browser smoke by default, npm package contents validation passed
684
+ with 42 files, extension zip contents validation passed with 13 files. This
685
+ slice only updates docs and skill guidance, so `YUNTI_E2E=1 npm run test:e2e`
686
+ was not rerun; the token residue grep returned no matches.
687
+ - Standalone `yunti_select` now returns additive structured action result
688
+ fields (`action`, `target`, `ok`, `recoverable`, `nextStepHint`, and
689
+ `browserSessionId`) around the existing content-script passthrough result
690
+ while preserving compatibility fields (`selected`, `element`, and `value`).
691
+ Select value assignment and input/change event dispatch semantics are
692
+ intentionally unchanged in this slice.
693
+ - Latest P6.2 select structured result targeted validation: `git diff --check`
694
+ passed and `node --test tests/tool-handlers.test.js` passed 18 tests.
695
+ - Latest P6.2 select structured result full validation: `git diff --check`
696
+ passed; `npm run release:check` passed with 87 node:test cases total, 86
697
+ passed, and 1 real-browser smoke skipped by default; npm package contents
698
+ validation passed with 42 files; extension zip contents validation passed
699
+ with 13 files; `YUNTI_E2E=1 npm run test:e2e` was executed but skipped
700
+ because Playwright/Chromium is not installed locally; the token residue grep
701
+ returned no matches.
702
+ - Aggregate `yunti_fill_form` now returns additive structured action result
703
+ fields (`action`, `target`, `ok`, `recoverable`, `nextStepHint`, and
704
+ `browserSessionId`) around the existing aggregate summary while preserving
705
+ compatibility fields (`filled`, `failed`, and `results`). Per-field
706
+ `fillByUid` and content-script selector fill semantics are intentionally
707
+ unchanged in this slice.
708
+ - Latest P6.2 fill_form structured result targeted validation: `git diff --check`
709
+ passed and `node --test tests/tool-handlers.test.js` passed 19 tests.
710
+ - Latest P6.2 fill_form structured result full validation: `git diff --check`
711
+ passed; `npm run release:check` passed with 88 node:test cases total, 87
712
+ passed, and 1 real-browser smoke skipped by default; npm package contents
713
+ validation passed with 42 files; extension zip contents validation passed
714
+ with 13 files; `YUNTI_E2E=1 npm run test:e2e` was executed but skipped
715
+ because Playwright/Chromium is not installed locally; the token residue grep
716
+ returned no matches.
717
+ - `yunti_select` now has a P6.2 uid/visible text planning contract in schema
718
+ and usage hints. The current runtime remains selector/value compatible; uid
719
+ and visible text selection semantics are intentionally left for the next
720
+ runtime slice.
721
+ - Latest P6.2 select uid/text contract targeted validation: `git diff --check`
722
+ passed and `node --test tests/bridge.test.js` passed.
723
+ - Latest P6.2 select uid/text contract full validation: `git diff --check`
724
+ passed; `npm run release:check` passed with 89 node:test cases total, 88
725
+ passed, and 1 real-browser smoke skipped by default; npm package contents
726
+ validation passed with 42 files; extension zip contents validation passed
727
+ with 13 files. This slice only updates schema, usage hints, docs, and skill
728
+ guidance, so `YUNTI_E2E=1 npm run test:e2e` was not rerun; the token residue
729
+ grep returned no matches.
730
+ - `yunti_select` now supports the `uid + value` runtime path while preserving
731
+ selector/value compatibility. The uid path reuses the latest observe/snapshot
732
+ uid map, matches select options by option value, dispatches change/input
733
+ events, and returns structured action result fields. Visible option text
734
+ selection remains intentionally deferred to the next runtime slice.
735
+ - Latest P6.2 select uid/value runtime targeted validation: `git diff --check`
736
+ passed and `node --test tests/tool-handlers.test.js tests/bridge.test.js`
737
+ passed 85 tests.
738
+ - Latest P6.2 select uid/value runtime full validation: `git diff --check`
739
+ passed; `npm run release:check` passed with 90 node:test cases total, 89
740
+ passed, and 1 real-browser smoke skipped by default; npm package contents
741
+ validation passed with 42 files; extension zip contents validation passed
742
+ with 13 files; `YUNTI_E2E=1 npm run test:e2e` was executed but skipped
743
+ because Playwright/Chromium is not installed locally; the token residue grep
744
+ returned no matches.
745
+ - `yunti_select` now supports the `uid + visible text` runtime path while
746
+ preserving selector/value and uid/value compatibility. The text path reuses
747
+ the latest observe/snapshot uid map, matches select options by visible label,
748
+ dispatches change/input events, and returns structured action result fields.
749
+ - Latest P6.2 select uid/text runtime targeted validation: `git diff --check`
750
+ passed and `node --test tests/tool-handlers.test.js tests/bridge.test.js`
751
+ passed 86 tests.
752
+ - Latest P6.2 select uid/text runtime full validation: `git diff --check`
753
+ passed; `npm run release:check` passed with 91 node:test cases total, 90
754
+ passed, and 1 real-browser smoke skipped by default; npm package contents
755
+ validation passed with 42 files; extension zip contents validation passed
756
+ with 13 files; `YUNTI_E2E=1 npm run test:e2e` was executed but skipped
757
+ because Playwright/Chromium is not installed locally; the token residue grep
758
+ returned no matches.
759
+ - `yunti_select` uid failure paths now return structured recovery diagnostics.
760
+ Option misses return `selected: false`, `code: "OPTION_NOT_FOUND"`,
761
+ `matchMode`, `targetOption`, available option values/texts when exposed by
762
+ the page, and `recoveryHint`; non-select uid targets return `code:
763
+ "NOT_SELECT"` plus `recoveryHint.decision` pointing agents toward the actual
764
+ select element or selector/value fallback.
765
+ - Latest P6.2 select uid failure diagnostic targeted validation:
766
+ `node --test tests/tool-handlers.test.js tests/bridge.test.js` passed 93
767
+ tests.
768
+ - Latest P6.2 select uid failure diagnostic full validation: `git diff
769
+ --check` passed; `node --test tests/tool-handlers.test.js tests/bridge.test.js`
770
+ passed 93 tests; `npm run release:check` passed with 98 node:test cases
771
+ total, 97 passed, and 1 real-browser smoke skipped by default; npm package
772
+ contents validation passed with 42 files; extension zip contents validation
773
+ passed with 13 files; `YUNTI_E2E=1 npm run test:e2e` was executed but skipped
774
+ because Playwright/Chromium is not installed locally; the token residue grep
775
+ returned no matches.
776
+ - `yunti_select` selector/value failure paths now return structured recovery
777
+ diagnostics. Value mismatches return `selected: false`, `code:
778
+ "OPTION_NOT_FOUND"`, `actualValue`, `matchMode`, `targetOption`, and
779
+ `recoveryHint`; thrown selector failures return `code:
780
+ "SELECTOR_SELECT_FAILED"` plus `recoveryHint.decision` pointing agents toward
781
+ the actual select element or a fresh uid/value fallback.
782
+ - Latest P6.2 select selector failure diagnostic targeted validation:
783
+ `node --test tests/tool-handlers.test.js tests/bridge.test.js` passed 95
784
+ tests.
785
+ - Latest P6.2 select selector failure diagnostic full validation: `git diff
786
+ --check` passed; `node --test tests/tool-handlers.test.js tests/bridge.test.js`
787
+ passed 95 tests; `npm run release:check` passed with 100 node:test cases
788
+ total, 99 passed, and 1 real-browser smoke skipped by default; npm package
789
+ contents validation passed with 42 files; extension zip contents validation
790
+ passed with 13 files; `YUNTI_E2E=1 npm run test:e2e` was executed but skipped
791
+ because Playwright/Chromium is not installed locally; the token residue grep
792
+ returned no matches.
793
+ - P6.2 action path coverage was re-audited after select uid/text support.
794
+ Structured action result fields now cover the main action surfaces, and
795
+ `yunti_select` has selector/value, uid/value, and uid/text operation paths.
796
+ The next work should move into deeper fill/select/scroll semantics while
797
+ preserving selector/value compatibility, CDP fallback, diagnostics, and
798
+ existing action result fields.
799
+ - Latest P6.2 action path coverage audit validation: `git diff --check`
800
+ passed; `npm run release:check` passed with 91 node:test cases total, 90
801
+ passed, and 1 real-browser smoke skipped by default; npm package contents
802
+ validation passed with 42 files; extension zip contents validation passed
803
+ with 13 files; the token residue grep returned no matches. Real-browser E2E
804
+ was not rerun for this docs-only audit patch.
805
+ - P6.2 deeper fill semantics have started with uid-targeted contenteditable
806
+ result reporting. The runtime keeps the existing CDP keyboard input flow, but
807
+ contenteditable targets now return `method: "contenteditable"` plus
808
+ before/after text length summaries and a verification-oriented next step
809
+ hint. Selector fill and normal keyboard fill compatibility fields are
810
+ unchanged.
811
+ - Latest P6.2 contenteditable fill targeted validation:
812
+ `node --test tests/tool-handlers.test.js` passed 22 tests.
813
+ - Latest P6.2 contenteditable fill full validation: `git diff --check`
814
+ passed; `node --test tests/tool-handlers.test.js tests/bridge.test.js`
815
+ passed 87 tests; `npm run release:check` passed with 92 node:test cases
816
+ total, 91 passed, and 1 real-browser smoke skipped by default; npm package
817
+ contents validation passed with 42 files; extension zip contents validation
818
+ passed with 13 files; `YUNTI_E2E=1 npm run test:e2e` was executed but
819
+ skipped because Playwright/Chromium is not installed locally; the token
820
+ residue grep returned no matches.
821
+ - P6.2 fill failure diagnostics have started. Selector fill thrown failures and
822
+ uid select option misses now return structured `filled: false` diagnostics
823
+ with `ok: false`, `recoverable: true`, `code`, `recoveryHint`, and
824
+ `nextStepHint`, while preserving successful fill compatibility fields and
825
+ dispatch semantics. Uid select option misses include `availableValues` /
826
+ `availableTexts` when the page exposes them.
827
+ - Latest P6.2 fill failure diagnostic targeted validation:
828
+ `node --check extension/tool-handlers.js` passed; `node --test
829
+ tests/tool-handlers.test.js` passed 32 tests.
830
+ - Latest P6.2 fill failure diagnostic full validation: `git diff --check`
831
+ passed; the token residue grep returned no matches; `YUNTI_E2E=1 npm run
832
+ test:e2e` was executed but skipped because Playwright/Chromium is not
833
+ installed locally; `npm run release:check` passed with 102 node:test cases
834
+ total, 101 passed, and 1 real-browser smoke skipped by default; npm package
835
+ contents validation passed with 42 files; extension zip contents validation
836
+ passed with 13 files.
837
+ - P6.2 fill_form aggregation now preserves per-field structured fill failure
838
+ diagnostics. Aggregate results keep existing `filled`, `failed`, `results`,
839
+ `action: "fill_form"`, `target`, `ok`, `recoverable`, and `nextStepHint`
840
+ fields, while failed `results[]` items can carry `code`, `recoveryHint`,
841
+ `availableValues` / `availableTexts`, and field-level `nextStepHint` from
842
+ `yunti_fill`.
843
+ - Latest P6.2 fill_form diagnostic aggregation targeted validation:
844
+ `node --check extension/tool-handlers.js` passed; `node --test
845
+ tests/tool-handlers.test.js` passed 32 tests.
846
+ - Latest P6.2 fill_form diagnostic aggregation full validation: `git diff
847
+ --check` passed; the token residue grep returned no matches; `YUNTI_E2E=1
848
+ npm run test:e2e` was executed but skipped because Playwright/Chromium is
849
+ not installed locally; `npm run release:check` passed with 102 node:test
850
+ cases total, 101 passed, and 1 real-browser smoke skipped by default; npm
851
+ package contents validation passed with 42 files; extension zip contents
852
+ validation passed with 13 files.
853
+ - P6.2 non-editable fill diagnostics are complete. Uid fill now inspects the
854
+ resolved target before dispatching keyboard events and returns structured
855
+ `TARGET_NOT_EDITABLE` diagnostics for hidden/no-size, disabled, readonly, or
856
+ non-editable targets. Selector fill now checks editability in the content
857
+ script before mutating values. Failed results keep `filled: false`, `ok:
858
+ false`, `recoverable: true`, `code`, `recoveryHint`, and `nextStepHint`; uid
859
+ failures can also include a lightweight `element` diagnostic summary.
860
+ - Latest P6.2 non-editable fill diagnostic targeted validation:
861
+ `node --check extension/tool-handlers.js` passed; `node --check
862
+ extension/content.js` passed; `node --test tests/tool-handlers.test.js`
863
+ passed 34 tests.
864
+ - Latest P6.2 non-editable fill diagnostic full validation: `git diff
865
+ --check` passed; the token residue grep returned no matches; `YUNTI_E2E=1
866
+ npm run test:e2e` was executed but skipped because Playwright/Chromium is
867
+ not installed locally; `npm run release:check` passed with 104 node:test
868
+ cases total, 103 passed, and 1 real-browser smoke skipped by default; npm
869
+ package contents validation passed with 42 files; extension zip contents
870
+ validation passed with 13 files.
871
+ - P6.2 observe field-state hints are complete. `yunti_observe_page` element
872
+ entries can now expose `editable`, `fillable`, `readOnly`,
873
+ `fillBlockReason`, and select `options[]` summaries so agents can inspect
874
+ field state before calling `yunti_fill` or `yunti_select`. This is additive
875
+ observe metadata only; uid lifecycle, default balanced redaction, and existing
876
+ page action tools remain unchanged.
877
+ - Latest P6.2 observe field-state targeted validation:
878
+ `node --check extension/dom-observer.js` passed; `node --test
879
+ tests/dom-observer.test.js` passed 5 tests; `node --test tests/bridge.test.js`
880
+ passed 65 tests.
881
+ - Latest P6.2 observe field-state full validation: `git diff --check` passed;
882
+ the token residue grep returned no matches; `YUNTI_E2E=1 npm run test:e2e`
883
+ was executed but skipped because Playwright/Chromium is not installed
884
+ locally; `npm run release:check` passed with 105 node:test cases total, 104
885
+ passed, and 1 real-browser smoke skipped by default; npm package contents
886
+ validation passed with 42 files; extension zip contents validation passed
887
+ with 13 files.
888
+ - P6.2 observe select-state hints are complete. Select elements can now expose
889
+ `selectedIndex`, `selectedValue`, `selectedValueRedacted`, and `selectedText`
890
+ alongside `options[]`, so agents can inspect the current selection before
891
+ deciding whether to call `yunti_select`. This is additive observe metadata
892
+ only; `yunti_select` execution, uid lifecycle, and default balanced redaction
893
+ remain unchanged.
894
+ - Latest P6.2 observe select-state targeted validation:
895
+ `node --check extension/dom-observer.js` passed; `node --test
896
+ tests/dom-observer.test.js` passed 5 tests.
897
+ - P6.2 select disabled-option diagnostics are complete. Uid/value, uid/text,
898
+ and selector/value select paths now return structured `OPTION_DISABLED`
899
+ failures with `disabledValue`, `disabledText`, and recovery guidance to
900
+ choose an enabled option, wait for the field to unlock, or ask the user
901
+ before retrying. Existing successful select paths and compatibility fields
902
+ remain unchanged.
903
+ - Latest P6.2 select disabled-option targeted validation:
904
+ `node --check extension/tool-handlers.js` passed; `node --check
905
+ extension/content.js` passed; `node --test tests/tool-handlers.test.js`
906
+ passed 36 tests.
907
+ - Latest P6.2 select disabled-option full validation: `git diff --check`
908
+ passed; the token residue grep returned no matches; `YUNTI_E2E=1 npm run
909
+ test:e2e` was executed but skipped because Playwright/Chromium is not
910
+ installed locally; `npm run release:check` passed with 107 node:test cases
911
+ total, 106 passed, and 1 real-browser smoke skipped by default; npm package
912
+ contents validation passed with 42 files; extension zip contents validation
913
+ passed with 13 files.
914
+ - P6.2 deeper scroll semantics have started with fresh observed scrollable
915
+ container uids. `yunti_observe_page` scrollableContainers now feed the current
916
+ browserSessionId uid map, and `yunti_scroll` can resolve a container uid to
917
+ its center while reusing the existing coordinate/container scroll path. The
918
+ existing `target` compatibility field is preserved; uid scroll adds `uid`,
919
+ `method: "uid"`, and `scrollTarget`.
920
+ - Latest P6.2 uid scroll targeted validation:
921
+ `node --test tests/tool-handlers.test.js` passed 23 tests.
922
+ - Latest P6.2 uid scroll full validation: `git diff --check` passed;
923
+ `node --test tests/tool-handlers.test.js tests/bridge.test.js` passed 88
924
+ tests; `npm run release:check` passed with 93 node:test cases total, 92
925
+ passed, and 1 real-browser smoke skipped by default; npm package contents
926
+ validation passed with 42 files; extension zip contents validation passed
927
+ with 13 files; `YUNTI_E2E=1 npm run test:e2e` was executed but skipped
928
+ because Playwright/Chromium is not installed locally; the token residue grep
929
+ returned no matches.
930
+ - P6.2 scroll boundary diagnostics now report movement when before/after scroll
931
+ positions are comparable. A scroll that dispatches but does not move returns
932
+ `moved: false`, `code: "NO_SCROLL_MOVEMENT"`, `ok: false`, and
933
+ `recoverable: true`, while preserving existing `scrolled`, `target`, and
934
+ before/after compatibility fields.
935
+ - Latest P6.2 scroll no-movement targeted validation:
936
+ `node --test tests/tool-handlers.test.js` passed 24 tests.
937
+ - Latest P6.2 scroll no-movement full validation: `git diff --check` passed;
938
+ `node --test tests/tool-handlers.test.js tests/bridge.test.js` passed 89
939
+ tests; `npm run release:check` passed with 94 node:test cases total, 93
940
+ passed, and 1 real-browser smoke skipped by default; npm package contents
941
+ validation passed with 42 files; extension zip contents validation passed
942
+ with 13 files; `YUNTI_E2E=1 npm run test:e2e` was executed but skipped
943
+ because Playwright/Chromium is not installed locally; the token residue grep
944
+ returned no matches.
945
+ - P6.2 scroll no-movement diagnostics now include directional `edgeHint` values
946
+ when delta direction can be inferred, such as `possible-bottom-edge`,
947
+ `possible-top-edge`, `possible-right-edge`, and `possible-left-edge`. This
948
+ helps agents stop repeating the same scroll and choose a different direction,
949
+ nearby scrollable container uid, or recovery path.
950
+ - Latest P6.2 scroll edge-hint targeted validation:
951
+ `node --test tests/tool-handlers.test.js` passed 25 tests.
952
+ - Latest P6.2 scroll edge-hint full validation: `git diff --check` passed;
953
+ `node --test tests/tool-handlers.test.js tests/bridge.test.js` passed 90
954
+ tests; `npm run release:check` passed with 95 node:test cases total, 94
955
+ passed, and 1 real-browser smoke skipped by default; npm package contents
956
+ validation passed with 42 files; extension zip contents validation passed
957
+ with 13 files; `YUNTI_E2E=1 npm run test:e2e` was executed but skipped
958
+ because Playwright/Chromium is not installed locally; the token residue grep
959
+ returned no matches.
960
+ - P6.2 scroll no-movement diagnostics now include structured `recoveryHint`.
961
+ For `NO_SCROLL_MOVEMENT`, the result includes reason, nextAction,
962
+ recommendedTools, currentTarget, edgeHint, and, for fresh scrollable container
963
+ uids, lastObservedContainer scrollability and remaining-pixel metadata.
964
+ - Latest P6.2 scroll recovery-hint targeted validation:
965
+ `node --test tests/tool-handlers.test.js` passed 26 tests.
966
+ - Latest P6.2 scroll recovery-hint full validation: `git diff --check` passed;
967
+ `node --test tests/tool-handlers.test.js tests/bridge.test.js` passed 91
968
+ tests; `npm run release:check` passed with 96 node:test cases total, 95
969
+ passed, and 1 real-browser smoke skipped by default; npm package contents
970
+ validation passed with 42 files; extension zip contents validation passed
971
+ with 13 files; `YUNTI_E2E=1 npm run test:e2e` was executed but skipped
972
+ because Playwright/Chromium is not installed locally; the token residue grep
973
+ returned no matches.
974
+ - P6.2 scroll recovery guidance now includes `recoveryHint.suggestedRetry`.
975
+ When an opposite direction can be derived from `edgeHint`, the hint carries a
976
+ one-shot opposite `deltaX` / `deltaY`; uid-targeted scroll keeps the same
977
+ fresh container uid so agents can retry once, observe again, then switch
978
+ container or stop repeating if there is still no movement.
979
+ - Latest P6.2 scroll suggested-retry targeted validation:
980
+ `node --test tests/tool-handlers.test.js tests/bridge.test.js` passed 91
981
+ tests.
982
+ - Latest P6.2 scroll suggested-retry full validation: `git diff --check`
983
+ passed; `node --test tests/tool-handlers.test.js tests/bridge.test.js`
984
+ passed 91 tests; `npm run release:check` passed with 96 node:test cases
985
+ total, 95 passed, and 1 real-browser smoke skipped by default; npm package
986
+ contents validation passed with 42 files; extension zip contents validation
987
+ passed with 13 files; `YUNTI_E2E=1 npm run test:e2e` was executed but
988
+ skipped because Playwright/Chromium is not installed locally; the token
989
+ residue grep returned no matches.
990
+ - P6.2 scroll recovery guidance now includes `recoveryHint.decision`. For
991
+ `NO_SCROLL_MOVEMENT`, the decision is derived from `edgeHint` and whether the
992
+ scroll used a fresh container uid, producing machine-readable guidance such
993
+ as observing for a container, retrying the opposite direction once on the
994
+ same container, or providing a nonzero delta.
995
+ - Latest P6.2 scroll decision-hint targeted validation:
996
+ `node --test tests/tool-handlers.test.js tests/bridge.test.js` passed 91
997
+ tests.
998
+ - Latest P6.2 scroll decision-hint full validation: `git diff --check` passed;
999
+ `node --test tests/tool-handlers.test.js tests/bridge.test.js` passed 91
1000
+ tests; `npm run release:check` passed with 96 node:test cases total, 95
1001
+ passed, and 1 real-browser smoke skipped by default; npm package contents
1002
+ validation passed with 42 files; extension zip contents validation passed
1003
+ with 13 files; `YUNTI_E2E=1 npm run test:e2e` was executed but skipped
1004
+ because Playwright/Chromium is not installed locally; the token residue grep
1005
+ returned no matches.
1006
+ - P6.2 uid fill post-value verification is complete. Keyboard/contenteditable
1007
+ fill paths now perform a lightweight post-dispatch value check when possible.
1008
+ If the target value does not remain, `yunti_fill` returns structured
1009
+ `filled: false`, `ok: false`, `code: "VALUE_NOT_APPLIED"`,
1010
+ `expectedValueLength`, `actualValueLength`, `recoveryHint`, and
1011
+ `nextStepHint` diagnostics without echoing the raw field value. Existing
1012
+ successful fill/select/scroll compatibility fields are preserved.
1013
+ - Latest P6.2 uid fill post-value verification targeted validation:
1014
+ `node --check extension/tool-handlers.js` passed; `node --test
1015
+ tests/tool-handlers.test.js` passed 37 tests.
1016
+ - P6.2 scroll partial-movement diagnostics are complete. When comparable
1017
+ `before` / `after` positions show movement that is smaller than the requested
1018
+ `deltaX` / `deltaY`, `yunti_scroll` keeps the action successful but adds a
1019
+ structured `partialMovement` hint with requested/actual deltas, affected axes,
1020
+ `edgeHint`, `nextAction: "observe-again"`, and
1021
+ `decision: "observe-before-continuing-scroll"`.
1022
+ - Latest P6.2 scroll partial-movement targeted validation:
1023
+ `node --check extension/tool-handlers.js` passed; `node --test
1024
+ tests/tool-handlers.test.js` passed 38 tests.
1025
+ - P6.2 uid scroll missing/stale target diagnostics are complete. Missing,
1026
+ stale, hidden, or coordinate-unresolvable scroll uids now return structured
1027
+ `scrolled: false`, `ok: false`, `recoverable: true`, `code`, `recoveryHint`,
1028
+ and `nextStepHint` instead of only bubbling a generic dispatcher error.
1029
+ Existing successful scroll, no-movement, and partial-movement paths are
1030
+ preserved.
1031
+ - Latest P6.2 uid scroll missing-target targeted validation:
1032
+ `node --check extension/tool-handlers.js` passed; `node --test
1033
+ tests/tool-handlers.test.js` passed 39 tests.
1034
+ - P6.2 coordinate scroll hit/fallback diagnostics are complete. Coordinate
1035
+ scrolls can now report `coordinateTarget`, `scrollContainerFound`, and
1036
+ `coordinateScrollFallback: "document"` from the content script, so agents can
1037
+ distinguish nested container hits from document fallback without changing the
1038
+ existing scroll dispatch behavior.
1039
+ - P6.2 coordinate scroll document fallback recovery hints are complete. When
1040
+ handler results include `coordinateScrollFallback: "document"`, successful
1041
+ scrolls keep `ok: true` and `recoverable: false` while adding
1042
+ `coordinateFallbackHint` plus a clearer `nextStepHint` to observe again and
1043
+ choose a fresh `scrollableContainers[]` uid when a panel/sidebar was intended.
1044
+ - Latest P6.2 coordinate scroll fallback targeted validation:
1045
+ `node --test tests/tool-handlers.test.js tests/bridge.test.js
1046
+ tests/content-scroll.test.js` passed 107 tests.
1047
+ - Latest P6.2 coordinate scroll fallback full validation: `git diff --check`
1048
+ passed; the token residue grep returned no matches; `YUNTI_E2E=1 npm run
1049
+ test:e2e` was executed but skipped because Playwright/Chromium is not
1050
+ installed locally; `npm run release:check` passed with 113 node:test cases
1051
+ total, 112 passed, and 1 real-browser smoke skipped by default; npm package
1052
+ contents validation passed with 42 files; extension zip contents validation
1053
+ passed with 13 files.
1054
+ - P6.2 wait-observe recovery guidance is complete for tool guidance surfaces.
1055
+ `yunti_get_tool_usage_hints`, `docs/TOOL_GUIDE.md`, and the packaged skill now
1056
+ tell agents to recover from async rendering, validation, option population, or
1057
+ newly loaded content by calling `yunti_wait_for`, observing again, and using a
1058
+ fresh uid for fill/select/scroll continuation.
1059
+ - Latest P6.2 wait-observe guidance targeted validation: `node --test
1060
+ tests/bridge.test.js` passed 65 tests.
1061
+ - Latest P6.2 wait-observe guidance full validation: `git diff --check` passed;
1062
+ the token residue grep returned no matches; `YUNTI_E2E=1 npm run test:e2e`
1063
+ was executed but skipped because Playwright/Chromium is not installed locally;
1064
+ `npm run release:check` passed with 113 node:test cases total, 112 passed, and
1065
+ 1 real-browser smoke skipped by default; npm package contents validation
1066
+ passed with 42 files; extension zip contents validation passed with 13 files.
92
1067
 
93
1068
  ## Decisions
94
1069
 
@@ -102,10 +1077,61 @@ shows settings as a first-run task, and the published package is verified with
102
1077
  `yunti_list_browser_targets` to refresh the route inventory.
103
1078
  - The content script must not call product-specific login APIs in the
104
1079
  standalone runtime.
1080
+ - `0.2.0` is a Yunti-first enhancement cycle aimed at becoming the most useful
1081
+ local browser automation operation layer for agents and developers.
1082
+ - Reference projects such as Playwright, Puppeteer, Selenium, CDP, browser-use,
1083
+ Page Agent, BrowserGym, and extension runtimes are sources of practical ideas,
1084
+ not product shapes to copy.
1085
+ - Page Agent has been reviewed as the concrete first reference for P6.1/P6.2:
1086
+ absorb browser-state observation, indexed interactive elements, scrollable
1087
+ metadata, action sequencing, and retry discipline; do not copy its built-in
1088
+ LLM loop or make its UI model mandatory.
1089
+ - A multi-perspective 0.2.0 review has been completed across product,
1090
+ architecture/API, Agent workflow, security/privacy, and test/release strategy.
1091
+ The resulting plan changes emphasize product success metrics, field-level
1092
+ observation contracts, uid lifecycle, P6.1 minimum redaction, deterministic
1093
+ fixtures, and observe-first skill/tool guidance.
1094
+ - Implementation should proceed step by step: first use Page Agent/browser-use
1095
+ as the concrete reference for P6.1 page observation and P6.2 indexed actions,
1096
+ then absorb Playwright/CDP/BrowserGym-style reliability and diagnostics later.
1097
+ - Each `0.2.0` implementation slice should be documented before code changes:
1098
+ user-facing capability, compatibility rule, non-goals, acceptance checks, and
1099
+ why it strengthens Yunti's own direction.
1100
+ - Yunti should not require an LLM API key, mandatory hub tab, side panel, or
1101
+ single black-box `execute_task` tool in the default path.
1102
+ - Yunti should preserve its own distinctive capabilities: fine-grained MCP
1103
+ tools, real Chrome/Edge state, CDP, screenshots, network/console diagnostics,
1104
+ tab control, local bridge routing, and zero-config local install.
1105
+ - P6.1 implementation is proceeding in small slices: schema/tool hints/bridge
1106
+ routing are complete, content-script observation MVP is underway, and fresh
1107
+ observe uids now feed existing uid-based actions without replacing the
1108
+ snapshot path.
105
1109
 
106
1110
  ## Open Work
107
1111
 
108
- - Follow `docs/EXECUTION_PLAN.md` when defining the next post-0.1.1 phase.
1112
+ - Follow `docs/NEXT_MAJOR_PLAN.md` for the next major cycle.
1113
+ - P6.1 real-browser closure is complete: `YUNTI_E2E=1 npm run test:e2e` passed
1114
+ locally with temporary Node Playwright 1.58.0 and the existing Playwright
1115
+ browser cache from `/opt/miniconda3/envs/pytest-playwright`.
1116
+ - Continue 0.2.0 in small compatibility-preserving slices. Current completed
1117
+ subphases are P6.2.1 action result coverage, P6.2.2 select semantics, P6.2.3
1118
+ fill/form diagnostics, P6.2.4 scroll diagnostics, P6.2.5 wait-observe
1119
+ guidance, P6.2.6 structured `yunti_wait_for` results, and P6.2.7 automated
1120
+ action result coverage audit, P6.3.1 agent workflow contract, P6.3.2 minimal
1121
+ Tool Guide use cases, P6.4.1 DOM redaction policy deepening, P6.4.2 learning
1122
+ memory / console diagnostic secret-boundary tightening, P6.4.3 raw CDP /
1123
+ screenshot non-redaction diagnostic guidance, P6.5.1 optional local runtime
1124
+ console minimum loop, P6.5.2 local console diagnostic polish, and P6.5.3
1125
+ real-browser console validation. P6.6.1 browser extension distribution
1126
+ readiness, P6.6.2 store-facing permission/privacy copy, and P6.6.3 pre-store
1127
+ permission strategy decision are complete. P6.6.4 store-candidate permission
1128
+ UX design is deferred to post-0.2. The next anchored slice should be chosen
1129
+ from post-0.2 planning, with browser-store permission UX still available as a
1130
+ separate store-candidate track.
1131
+ - For the next coding slice, update all affected guidance surfaces in one
1132
+ commit: `mcp/tools.js`, `docs/TOOL_GUIDE.md`,
1133
+ `skills/yunti-browser-runtime/SKILL.md`, `docs/EXECUTION_PLAN.md`, and this
1134
+ status file.
109
1135
  - P4.1 release-readiness docs and permission review is complete.
110
1136
  - P4.2 Agent integration examples are complete.
111
1137
  - P4.3 npm publishing URL confirmation is complete with the GitHub repository
@@ -262,7 +1288,11 @@ shows settings as a first-run task, and the published package is verified with
262
1288
  shows connection status plus refresh, optional Bridge URL/page match/token
263
1289
  controls are hidden under advanced settings, and docs explain that the MCP
264
1290
  server starts the local bridge automatically.
265
- - Latest P5.3 validation: pending for `yunti-browser-runtime@0.1.3`.
1291
+ - Latest P5.3 validation: `npm run release:check` passed; `npm run
1292
+ release:publish` published `yunti-browser-runtime@0.1.3`; a first
1293
+ `npm run release:verify-published` hit npm registry lag, then a retry passed
1294
+ and `npm view yunti-browser-runtime version dist-tags.latest` returned
1295
+ `0.1.3`.
266
1296
 
267
1297
  ## Known Risks
268
1298