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