e10-ebuilder-prototype 0.5.4 → 0.5.7
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 +56 -14
- package/dist/archive.d.ts +1 -1
- package/dist/archive.js +3 -0
- package/dist/capture.js +27 -1
- package/dist/common.d.ts +2 -1
- package/dist/common.js +24 -4
- package/dist/form-behavior-runtime.d.mts +1 -0
- package/dist/form-behavior-runtime.mjs +681 -0
- package/dist/form-behavior.d.ts +11 -0
- package/dist/form-behavior.js +169 -0
- package/dist/form-context.d.ts +4 -0
- package/dist/form-context.js +7 -5
- package/dist/form-generation.d.ts +24 -0
- package/dist/form-generation.js +367 -0
- package/dist/form-guidance.d.ts +3 -0
- package/dist/form-guidance.js +28 -0
- package/dist/form-runtime.mjs +11 -2
- package/dist/host-ledger.d.ts +23 -0
- package/dist/host-ledger.js +183 -0
- package/dist/host-watch.d.ts +102 -0
- package/dist/host-watch.js +112 -0
- package/dist/html-handoff.d.ts +1 -0
- package/dist/html-handoff.js +30 -2
- package/dist/html-inspect.d.ts +4 -1
- package/dist/html-inspect.js +48 -50
- package/dist/html-interact.d.ts +36 -0
- package/dist/html-interact.js +216 -0
- package/dist/html-review-budget.d.ts +9 -0
- package/dist/html-review-budget.js +47 -0
- package/dist/html.d.ts +86 -2
- package/dist/html.js +185 -26
- package/dist/index.js +166 -44
- package/dist/model.d.ts +2 -1
- package/dist/offline-render.d.ts +11 -0
- package/dist/offline-render.js +71 -0
- package/dist/offline-store.mjs +10 -0
- package/dist/runtime-support.d.mts +34 -0
- package/dist/runtime-support.mjs +67 -0
- package/dist/site.js +66 -51
- package/dist/store.d.ts +1 -0
- package/dist/store.js +23 -6
- package/dist/templates/form-guide.md +6 -20
- package/dist/templates/form-task-core.md +82 -0
- package/dist/templates/index.html +5 -3
- package/dist/templates/workflow-guide.md +4 -2
- package/dist/vendor/environment-auth.d.ts +1 -0
- package/dist/vendor/environment-auth.js +4 -4
- package/docs/PROTOCOL.md +378 -23
- package/package.json +1 -1
package/docs/PROTOCOL.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Contract
|
|
1
|
+
# Contract v14 — e10-ebuilder-prototype 0.5.7
|
|
2
2
|
|
|
3
3
|
Product, npm package, CLI and Skill share this name. Node >=22.5, TypeScript/ESM,
|
|
4
4
|
pinned playwright-core and installed Chrome. No LLM calls in CLI: host AI generates
|
|
@@ -37,11 +37,33 @@ parentKey-childMenuId); objId, underlying formId and listId are not interchangea
|
|
|
37
37
|
## Commands and state
|
|
38
38
|
|
|
39
39
|
Commands: init, next, discover, collect, capture, run, retry, status, pack, doctor;
|
|
40
|
-
html next|inspect|ready|accept|fail|retry; auth set|status|profile list|current|use NAME.
|
|
40
|
+
html next|watch|inspect|interact|ready|accept|fail|retry; auth set|status|profile list|current|use NAME.
|
|
41
41
|
Auth set supports --base-url, --eteamsid-stdin and --eteamsid. JSON returns one final
|
|
42
42
|
object; progress uses stderr. Normal operations expose next, errors expose fix.
|
|
43
43
|
Exit 0 = normal/DONE, 2 = PARTIAL, 1 = blocking error.
|
|
44
44
|
|
|
45
|
+
The user obtains and supplies ETEAMSID; the tool only validates, encrypts/stores and
|
|
46
|
+
injects that supplied session into owned browser contexts and source requests. A newly
|
|
47
|
+
supplied value is imported directly without asking again. Missing/invalid/expired
|
|
48
|
+
authentication without a replacement stops source work and asks the user for a new
|
|
49
|
+
ETEAMSID for the target environment. The host ends the turn and waits for that input;
|
|
50
|
+
it must not retry with the old credential, request/use account passwords, invoke login
|
|
51
|
+
bridge Skills, or open a browser to obtain a new session/extract cookies. Auth set validates the new
|
|
52
|
+
user-supplied value via stdin before saving it; failed validation returns to the same
|
|
53
|
+
waiting boundary. Resume in the original directory, using sourceRecovery for failed
|
|
54
|
+
sources. Never echo credentials. Missing local auth, WAITING_AUTH reports and
|
|
55
|
+
E10_LOGIN_REQUIRED errors include this recovery instruction in fix. auth status --local
|
|
56
|
+
only checks stored configuration; it does not prove live server authentication. Offline
|
|
57
|
+
HTML generation and packaging retain their existing auth-free behavior.
|
|
58
|
+
|
|
59
|
+
Reports include effectiveSettings and, for failed sources, an executable sourceRecovery
|
|
60
|
+
descriptor with failure stage/attempt duration. run/capture resume pending work only;
|
|
61
|
+
retry explicitly retries failed sources. Resume flags must match persisted settings,
|
|
62
|
+
otherwise SETTINGS_MISMATCH reports both effective and requested settings before mutation.
|
|
63
|
+
html inspect alone permits an independent viewport width. No silently ignored settings.
|
|
64
|
+
The host may use one explicit source retry, then retain failures and continue supported
|
|
65
|
+
generation as PARTIAL; the CLI does not automatically extend deadlines or retry timeouts.
|
|
66
|
+
|
|
45
67
|
NEW -> WAITING_AUTH or DISCOVER -> COLLECT -> CAPTURE -> HTML -> PACKAGE -> DONE/PARTIAL.
|
|
46
68
|
run discovers, collects form configs, captures pages and then hands off to the host.
|
|
47
69
|
After accepted HTML, run/pack creates the offline application. HTML/pack do not read
|
|
@@ -115,9 +137,32 @@ chains are interpreted by host AI as local mock behavior, not executed on the se
|
|
|
115
137
|
Reference failures become explicit warnings; primary metadata failures fail collection;
|
|
116
138
|
auth loss always aborts the phase, retaining interrupted receipts for resume.
|
|
117
139
|
|
|
140
|
+
Host collection reports count each form warning category by distinct menu ID from current
|
|
141
|
+
CLI output/private inputs, preserving different menus on the same object. Screenshot
|
|
142
|
+
warnings count page IDs instead; page counts cannot be presented as menu counts. Counts and
|
|
143
|
+
affected identity lists must agree; names label those IDs, including duplicate names.
|
|
144
|
+
Truncated output or prior prose is not a counting source.
|
|
145
|
+
Distinguish core collection success, layout/mode-button reference availability, screenshot
|
|
146
|
+
success, generated HTML and packaging. Review both formWarnings and warnedPages; selected
|
|
147
|
+
highlights cannot be presented as an exhaustive warning inventory. A shared deployment
|
|
148
|
+
probe warning repeated across menus is not evidence of repeated requests, lost configs,
|
|
149
|
+
or a particular HTTP/auth/network cause. no-accessible-record does not prove an empty
|
|
150
|
+
database or export failure; an absent temporary-record option is not a diagnosed cause.
|
|
151
|
+
State actual fallback impacts, preserve empty versus unavailable button scopes, and
|
|
152
|
+
disclose other observed gaps such as first-level-only choices and page resource errors.
|
|
153
|
+
Nonblocking reference fallbacks continue without an unsolicited authorization/pause step.
|
|
154
|
+
User-requested temporary-reference recollection must honor existing authorization, the
|
|
155
|
+
new-directory rule for an already collected read-only task, and uncertain cleanup gates;
|
|
156
|
+
never promise in-place source replacement or guaranteed reference retrieval. Skill ships
|
|
157
|
+
positive/negative reporting examples; these are guidance, not new collector capabilities
|
|
158
|
+
or proof of host-model compliance.
|
|
159
|
+
|
|
118
160
|
## Page capture
|
|
119
161
|
|
|
120
|
-
|
|
162
|
+
CLI defaults: concurrency 6 (1..8 override); the WorkBuddy Skill explicitly passes
|
|
163
|
+
--concurrency 8 on new run/init tasks unless the user specifies another value. Existing
|
|
164
|
+
tasks retain persisted settings; never append the new default to resume commands.
|
|
165
|
+
Capture viewport defaults: PC 1440x900, mobile 390x844,
|
|
121
166
|
CSS pixel scale 1, initial navigation/rendering deadline 10 seconds, 1 additional retry for non-timeout errors; timeouts fail immediately, stabilization
|
|
122
167
|
window 800ms, page height limit 50000px, pixel limit 60M. No timeout is treated as ready.
|
|
123
168
|
Readiness uses either page entrance/configuration or meaningful content bound to the requested
|
|
@@ -146,6 +191,11 @@ it never appears as a verified page PNG. Credentials/headers/bodies are not diag
|
|
|
146
191
|
PNG bytes are committed only after post-capture integrity checks. Close each page
|
|
147
192
|
in finally with bounded cleanup. Batch cleanup failures cannot yield DONE.
|
|
148
193
|
|
|
194
|
+
Owned short-lived macOS Chrome disables only the updater's MacAppCodeSignClone
|
|
195
|
+
feature, preserving pinned Playwright disabled-feature defaults. This avoids creating
|
|
196
|
+
and deleting random signed application clones outside the task's own browser directory.
|
|
197
|
+
No WorkBuddy safety setting, signing verification or browser installation is changed.
|
|
198
|
+
|
|
149
199
|
Loading timeout is 10000ms by default; readiness proceeds immediately when observed signals stabilize.
|
|
150
200
|
Timeouts are final for that run. After initial readiness, each scroll readiness wait has a fresh 10000ms budget.
|
|
151
201
|
PNG encoding/validation has a separate 10000ms limit; an attempt has a loading-budget + 130s hard cap;
|
|
@@ -157,25 +207,95 @@ resource cleanup and optional diagnostics are outside the loading deadline.
|
|
|
157
207
|
html next is a short locked transaction after all source jobs are terminal. It returns
|
|
158
208
|
up to settings.concurrency jobs total (default 6), including resumed running tokens.
|
|
159
209
|
Each job has kind, pageId, token, name, outputPath, reviewDirectory and prompt.
|
|
160
|
-
New jobs use prompt version
|
|
161
|
-
runtimePath and form-input digest, plus contextPath (bounded lossless
|
|
162
|
-
configuration fragments, grouped into bounded entries arrays and reused by verified digest; schema 4 limits each file to 18K characters and each encoded line to 1800 characters), guidePath (
|
|
210
|
+
New jobs use prompt version 17. Page jobs use screenshotPath and PNG digest. Form jobs use sourcePath,
|
|
211
|
+
runtimePath and form-input digest, plus generationPath (digest-verified generation view) and contextPath (bounded lossless
|
|
212
|
+
configuration fragments, grouped into bounded entries arrays and reused by verified digest; schema 4 limits each file to 18K characters and each encoded line to 1800 characters), guidePath (compact common rules plus only the current menu kind), referenceGuidePath (full manual, optional targeted lookup), navigationPath (published
|
|
163
213
|
route mapping), and relatedPath (verified objects and metadata fragment paths for explicit relations). Form pageId is the menu key.
|
|
214
|
+
Generation view schema 1 retains every option-extracted configuration property, including
|
|
215
|
+
unknown fields, conditions, full action chains, mode differences and empty/unavailable
|
|
216
|
+
statuses. JSON Pointer references reuse exact subtrees; bases use shallow set overrides and
|
|
217
|
+
explicit removed keys, with literal escaping. Before writing, expansion must deeply equal
|
|
218
|
+
the input with only reference HTML replaced by a structural view. Original schema-4 source
|
|
219
|
+
fragments remain available for targeted fallback. Generation fragments are <=18K characters
|
|
220
|
+
and <=1800 encoded characters per line. The directory identifies field groups, relations
|
|
221
|
+
and configuration sections; it is not a replacement for reading all current-menu fragments.
|
|
222
|
+
Related metadata is read only for explicit references; all required target fields still seed
|
|
223
|
+
shared storage. Runtime examples supplement the compact guide, never authorize buttons.
|
|
224
|
+
|
|
225
|
+
parse5 extracts reference-HTML parent/order, field IDs and main/detail bindings, known static
|
|
226
|
+
labels, layout classes and selected inline layout/visibility styles without record text,
|
|
227
|
+
scripts or resources. Visibility hints are lexical clues, not computed CSS or permission
|
|
228
|
+
proof. Ambiguous bindings, unknown headings/widgets and absent field evidence retain original
|
|
229
|
+
character offsets for targeted fallback. Full raw HTML remains private and is never executed.
|
|
230
|
+
The generation view is not an independent form renderer; host AI still interprets business
|
|
231
|
+
configuration and composes HTML. The fixed basic executor below owns its supported transactions. Smaller input is not proof of generation speed or functional fidelity.
|
|
232
|
+
|
|
164
233
|
The coordinator tracks live tokens and serializes queue mutations; workers generate
|
|
165
|
-
HTML and call only their token-scoped html inspect/ready for local visual QA. Jobs include an
|
|
234
|
+
HTML and call only their token-scoped html inspect/interact/ready for local visual QA. Jobs include an
|
|
166
235
|
inspection command/args descriptor; full images stay in the corresponding worker context.
|
|
167
236
|
The coordinator reads the receipt and concise findings before acceptance. Host parallel capability governs actual AI parallelism;
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
237
|
+
other hosts may process sequentially when unavailable, but WorkBuddy must pause until its
|
|
238
|
+
agent-team prerequisite passes. No model subprocess/API. Worker models follow explicit
|
|
239
|
+
user selection or host configuration; they need not match the coordinator. When the user
|
|
240
|
+
has not selected a worker model, the native Agent call may omit model and use host defaults.
|
|
241
|
+
No coordinator-model lookup or model-matching pause is required. html next no longer emits
|
|
242
|
+
host.modelPolicy or host.modelArgument. A coordinator model change does not cancel healthy
|
|
243
|
+
workers; replacement of any writer still requires confirmed termination. Quota exhaustion
|
|
244
|
+
retains the existing stop-and-report behavior; no model pool or automatic rotation is added.
|
|
245
|
+
Receive each completed job independently
|
|
173
246
|
and refill immediately, without waiting for a whole foreground batch. When idle, yield the
|
|
174
247
|
host turn and resume on native inbox notifications; do not loop wait/sleep/TaskOutput, which
|
|
175
248
|
triggers WorkBuddy loop protection. A yielded turn does not mean the application is complete.
|
|
176
249
|
|
|
250
|
+
bootstrap status, doctor and html next expose host.background from inherited host flags:
|
|
251
|
+
enabled/disabled/unknown. Also expose normalized agentTeams (enabled/disabled/unknown),
|
|
252
|
+
backgroundTasks (allowed/disabled/unknown), evidenceSource=inherited-host-environment and
|
|
253
|
+
evidenceScope=current-session. These describe inherited session flags, not UI settings
|
|
254
|
+
or an API query of current preferences; never echo raw environment values. A disabled
|
|
255
|
+
team/background flag takes precedence. WorkBuddy
|
|
256
|
+
requires enabled before installation, auth mutation, task creation, source work, generation
|
|
257
|
+
or packaging. bootstrap status keeps ready for runtime installation and adds taskReady;
|
|
258
|
+
blocked status/ensure/run return exit 1 and one stdout JSON with blocked=true,
|
|
259
|
+
state=WAITING_HOST, error.code=HOST_BACKGROUND_DISABLED or HOST_BACKGROUND_UNVERIFIED,
|
|
260
|
+
userMessage, fix, next=enable-agent-teams and host. WAITING_HOST is a command-level
|
|
261
|
+
prerequisite result, not a persisted task-state transition. No install lock, task/token
|
|
262
|
+
mutation or source request occurs. Already-installed runtimes still enforce the gate.
|
|
263
|
+
The wrapper requires enabled even when flags are absent. Direct CLI mutations apply the
|
|
264
|
+
same gate when either WorkBuddy capability flag is present; ordinary other-host CLI use
|
|
265
|
+
without those flags retains its existing behavior. Help/version, doctor, task status/next,
|
|
266
|
+
auth status/profile list/current and html watch remain available for diagnosis.
|
|
267
|
+
|
|
268
|
+
WorkBuddy must show userMessage verbatim in its user-visible reply and end the turn,
|
|
269
|
+
not merely leave it in tool output or offer serial fallback. The message explains that
|
|
270
|
+
application prototypes require concurrent page generation/review; serial processing would
|
|
271
|
+
make the overall task take much longer, so agent teams are required before continuing.
|
|
272
|
+
Do not invent a duration estimate or guaranteed speedup. It directs the user to
|
|
273
|
+
avatar → 设置 → 智能体 → 智能体团队管理: click 取消禁用 when shown; 禁用 means already
|
|
274
|
+
enabled and must not be clicked. Fully restart WorkBuddy, return to the same task and
|
|
275
|
+
reply 继续. Recheck status after that response before resuming with existing artifacts;
|
|
276
|
+
the user's statement alone is not a passing check. Unknown means unverified, not disabled.
|
|
277
|
+
For a disabled team flag, say the current session reports teams have not taken effect;
|
|
278
|
+
for an explicit background-disable flag, say this session reports background tasks
|
|
279
|
+
unavailable, even when its team flag is enabled. Do not tell the user that their UI
|
|
280
|
+
setting is off. If the UI is enabled but restart still leaves the session blocked,
|
|
281
|
+
explain a possible host settings/session mismatch and direct a WorkBuddy issue report
|
|
282
|
+
instead of repeating the same toggle/restart loop. Preferences alone cannot override
|
|
283
|
+
a disabled session flag. The CLI does not inspect or modify private host configuration.
|
|
284
|
+
Never alter host settings, forge flags or use a child-shell export to bypass this check.
|
|
285
|
+
The CLI owns deterministic gating/copy; the host owns rendering the message to the user.
|
|
286
|
+
|
|
287
|
+
Enabled is a preflight signal, not proof of live workers: the first actual native Agent
|
|
288
|
+
must return a background task ID immediately and later deliver independent completion.
|
|
289
|
+
If it returns synchronously or reports teams disabled, stop new dispatch and show the
|
|
290
|
+
same recovery instructions; no separate probe Agent or serial fallback. Preserve existing
|
|
291
|
+
worker identities and confirm execution termination before any later replacement.
|
|
292
|
+
|
|
177
293
|
html next --brief writes each full prompt to the token-owned promptPath and omits prompt
|
|
178
|
-
text from the response; workers read their own prompt.
|
|
294
|
+
text from the response; workers read their own prompt. With durable registration or legacy host-active-tokens,
|
|
295
|
+
already dispatched jobs return only kind/pageId/token/name/resumed and do not regenerate
|
|
296
|
+
prompts or configuration views. Dispatchable jobs retain full descriptions and promptPath.
|
|
297
|
+
Without a host token snapshot, brief retains its previous description shape.
|
|
298
|
+
Full descriptions include allocatedAt, elapsedMs,
|
|
179
299
|
hasDraft and host scheduling guidance. These describe reservations, not evidence of live AI.
|
|
180
300
|
html accept|fail --refill [--brief] returns nextHtml in the same locked transaction, avoiding
|
|
181
301
|
an extra host round trip. The completed receipt is committed before refill and remains valid
|
|
@@ -184,10 +304,22 @@ failure permits one recovery after the old writer exits; persistent failures rel
|
|
|
184
304
|
with html fail. Host guidance reports no progress at 3 minutes and requests cancellation at
|
|
185
305
|
5 minutes; retry requires confirmed termination, never elapsed time alone.
|
|
186
306
|
|
|
307
|
+
`html inspect` records distinct rendered source revisions in the token's private
|
|
308
|
+
review-history.json. Both viewports, unchanged cache reuse and damaged-image repairs share
|
|
309
|
+
a revision. The standard budget is the first version plus two correction versions. Further
|
|
310
|
+
new versions require --repair-reason (1..500 characters), explaining a concrete missing
|
|
311
|
+
module, business or runtime error; the reason is durable. This enforces explicit exceptions,
|
|
312
|
+
not the truth of a host's reason. It never auto-accepts, weakens ready checks, locks the whole
|
|
313
|
+
queue or limits another token. Corrupt history fails explicitly; never delete it to reset a
|
|
314
|
+
budget. Workers use one applicable primary interaction path plus fixes' affected paths;
|
|
315
|
+
no ad-hoc VM/stub-DOM frameworks, tool exploration or cosmetic measurement loops. Actual
|
|
316
|
+
untested interactions are recorded as untested, not silently dropped from implementation.
|
|
317
|
+
|
|
187
318
|
`html ready --kind KIND --page-id ID --token TOKEN --summary TEXT` records the worker's
|
|
188
319
|
explicit visual-review handoff privately. It requires current successful inspections and
|
|
189
320
|
intact screenshots (page source width; forms 1440 and 390), and a nonempty <=4000-character
|
|
190
|
-
summary. It does not accept or allocate queue jobs. After ready, the worker stops writing
|
|
321
|
+
summary. It does not accept or allocate queue jobs. After ready, the worker stops writing,
|
|
322
|
+
returns its final response and exits without an early SendMessage completion.
|
|
191
323
|
`html next --accept-ready --brief` reconciles all durable handoffs under the coordinator's
|
|
192
324
|
queue lock, rechecks token/source/HTML/inspection/image digests, accepts valid results and
|
|
193
325
|
refills in one transaction. It returns accepted summaries and rejected diagnostics. Repeated
|
|
@@ -197,6 +329,61 @@ from stranding completed jobs. Host notes remain attestations, not independent v
|
|
|
197
329
|
interaction proof. Native notifications wake the coordinator; they are not the source of
|
|
198
330
|
truth for reviewed artifact completion. The CLI still contains no model calls.
|
|
199
331
|
|
|
332
|
+
New WorkBuddy tasks initialize durable identities with `html next --host-events '[]'`.
|
|
333
|
+
The coordinator sends only incremental events, batched with the next reconciliation:
|
|
334
|
+
`{event:"started",taskId,token}` after native dispatch; and
|
|
335
|
+
`{event:"terminal",taskId,token,outcome:"completed"|"failed"|"cancelled",executionEnded:true}`
|
|
336
|
+
only after verified native execution/retry termination. CLI atomically stores one private
|
|
337
|
+
host-workers.json under the existing coordinator lock. No database, scheduler service,
|
|
338
|
+
model calls or host-private-log dependency. Omitted events and empty arrays never release
|
|
339
|
+
slots; unknown states stay active. Identities and duplicate notifications are checked,
|
|
340
|
+
wrong-token exits and second writers are rejected, replay is idempotent. A repeated started
|
|
341
|
+
event cannot resurrect a terminal worker. `host.workers` provides the current taskId mapping.
|
|
342
|
+
Ready/accept does not release native capacity. Confirmed termination without valid ready
|
|
343
|
+
is returned as host.terminalWithoutHandoff, never automatically redispatched using the old
|
|
344
|
+
token. Retry/pack is blocked while a corresponding/all registered native worker remains active.
|
|
345
|
+
Registration must complete before another allocation/host yield; the CLI cannot observe a
|
|
346
|
+
spawn the host never registers. Native lifecycle evidence remains a host attestation.
|
|
347
|
+
|
|
348
|
+
Legacy tasks/other hosts can still use `--host-active-tokens` snapshots on next/refill.
|
|
349
|
+
Once durable registration is enabled, snapshots cannot overwrite it. Do not switch a running
|
|
350
|
+
legacy task without accounting for all existing workers. Allocation counts the union of
|
|
351
|
+
native-active and reserved CLI tokens; dispatchTokens excludes all already registered tokens.
|
|
352
|
+
Only dispatch the returned dispatchTokens. An accepted but exiting worker still occupies
|
|
353
|
+
capacity; when HTML is done and workers remain, next=host-wait. No timeout alone releases slots.
|
|
354
|
+
|
|
355
|
+
host.activeCount means dispatched without confirmed exit, not independently verified running.
|
|
356
|
+
host.slots reports local HTML state, handoff presence and last local artifact activity;
|
|
357
|
+
host.reconcile identifies terminal/reviewed HTML whose native exit remains unconfirmed,
|
|
358
|
+
unknown tokens, or no observed local progress for three/five minutes. These are hints for
|
|
359
|
+
native inspection, not success, timeout failure or authorization to reclaim a slot.
|
|
360
|
+
The coordinator checks each listed native task once on that wakeup, reconciles confirmed
|
|
361
|
+
exits, and refills once. Report deliveredAwaitingExit and unresolved states separately;
|
|
362
|
+
never turn the supplied active array into a claim that every worker is actually generating.
|
|
363
|
+
WorkBuddy can mark a task cancelled while an underlying retry still runs: require confirmed
|
|
364
|
+
execution/retry termination before replacement; unknown states remain reserved and explicit.
|
|
365
|
+
|
|
366
|
+
html watch --host-active-tokens JSON [--after-state DIGEST --watch-ms 60000] is a bounded
|
|
367
|
+
read-only command outside the queue lock. It reads only this task's local receipts and
|
|
368
|
+
draft metadata, never authentication, browser state or private host logs. It emits a wakeup
|
|
369
|
+
hint on changed handoff/HTML/stall state, or at a 1..60000ms deadline. Routine draft writes
|
|
370
|
+
alone do not wake the model; expired checks never accept, fail, cancel or release workers.
|
|
371
|
+
An after-state digest acknowledges already observed evidence and avoids immediate repeat
|
|
372
|
+
wakeups. next returns a host.watch descriptor for the current/dispatchable tokens.
|
|
373
|
+
The coordinator keeps at most one native background Bash watch, verifies its actual
|
|
374
|
+
background task identity and completion notification capability, and replaces its token
|
|
375
|
+
argument with the workers actually launched if any spawn failed. A stale watch result
|
|
376
|
+
only triggers reconciliation of the current mapping; it cannot overwrite that mapping.
|
|
377
|
+
On a wakeup the host checks only reconcile entries still unresolved in the current mapping
|
|
378
|
+
(batch if supported), then refills once. A deadline with no suspect entries quietly rearms
|
|
379
|
+
the bounded check; it does not query every normally progressing worker or print a report.
|
|
380
|
+
Only rearm while workers remain. No foreground wait/poll loop
|
|
381
|
+
or model watchdog Agent. If background Bash cannot independently notify, disclose this
|
|
382
|
+
limitation instead of claiming guaranteed automatic wakeup. Final cleanup stops only the
|
|
383
|
+
coordinator's own remaining watch. A native status marked cancelled without reliable
|
|
384
|
+
underlying-execution evidence remains an explicit host blocker, not an inferred release.
|
|
385
|
+
|
|
386
|
+
|
|
200
387
|
html accept --kind page|form --page-id ID --token TOKEN reads the fixed draft path.
|
|
201
388
|
Kind defaults to page for compatibility. Validate membership, source digest, token,
|
|
202
389
|
UTF-8, document structure, body and common static external resources. Form inspection and acceptance
|
|
@@ -220,6 +407,10 @@ preview file. Form initialization failure preserves a failed receipt and screens
|
|
|
220
407
|
including any script errors, instead of discarding them behind a readiness timeout.
|
|
221
408
|
These diagnostics never approve a failed form or replace the required ready signal.
|
|
222
409
|
Inspection returns a full screenshot and up to three long-page sections, plus a private digest receipt.
|
|
410
|
+
For form jobs, CLI inspect without --width checks both required widths (1440 and 390)
|
|
411
|
+
in one command, sharing one owned Chrome while retaining separate contexts and receipts.
|
|
412
|
+
An explicit width still checks one viewport. Fully reusable results do not start Chrome.
|
|
413
|
+
Both widths must describe the same HTML digest. Inspection still locks only this token.
|
|
223
414
|
Same input/HTML/runtime/viewport and intact screenshot digests reuse the result. Changed
|
|
224
415
|
sources or screenshots rerender. It is not a visual score or full interaction audit. Default
|
|
225
416
|
width matches the page PNG or 1440 for forms; --width 390 checks narrow forms. Rendering
|
|
@@ -242,7 +433,7 @@ Status reports pageHtml, collection, formHtml and aggregate html. Pending includ
|
|
|
242
433
|
## Fixed offline shell and shared form data
|
|
243
434
|
|
|
244
435
|
CLI owns the business-blue shell, failure/legacy placeholders and fixed E10FormStore
|
|
245
|
-
transport; host
|
|
436
|
+
transport and a bounded E10FormUI executor; host composes business HTML. Full field/control, list-mode, CRUD, detail, comment/log
|
|
246
437
|
and action-chain expectations ship in templates/form-guide.md, ported from the supplied package. No Preview/Design/Settings top action row.
|
|
247
438
|
Index uses compact neutral blue-gray office styling, with explicit group chevrons,
|
|
248
439
|
progressive indentation and guide lines at every depth, plus active ancestor emphasis.
|
|
@@ -269,11 +460,40 @@ Fields bind to field IDs. Generated menus use returned shared records instead of
|
|
|
269
460
|
private copies; unrelated applications/objects remain isolated. Storage availability is
|
|
270
461
|
browser dependent; in-memory fallback lasts the current session only.
|
|
271
462
|
|
|
463
|
+
The original supplied prototype/layout-shell/button-isolation guides define the form
|
|
464
|
+
feature scope. Moving operations to fixed code does not add business features, populate
|
|
465
|
+
unconfigured buttons, or remove original requirements. Capability availability is not
|
|
466
|
+
permission. Common fields (text, numbers, dates, choices, local entity selection),
|
|
467
|
+
filter/sort/pagination, main/detail drafts and configured add/view/edit/save/save-and-new/
|
|
468
|
+
cancel/delete have CLI-owned implementations through E10FormUI. AI supplies layout and
|
|
469
|
+
source-bound condition/action decisions; validation rejects unknown fields, wrong modes,
|
|
470
|
+
unsupported operators/actions and unresolved conditions before mutation. Empty/unavailable
|
|
471
|
+
button scopes remain empty/unavailable. No universal permissions/EB rule interpreter.
|
|
472
|
+
|
|
473
|
+
UI contract derives from this menu's source, has distinct main/detail field keys and exact
|
|
474
|
+
mode/button source pointers. job.behaviorPath is an optional diagnostic copy, not another
|
|
475
|
+
mandatory full-config read. E10FormUI.contract is injected in the offline document. Numeric
|
|
476
|
+
strings preserve decimal and large-ID precision. Draft setters cannot mutate committed
|
|
477
|
+
records; failed validation/cancellation does not save or log changes. A compare-and-save
|
|
478
|
+
checks the previous object state before one local commit; stale snapshots fail retaining
|
|
479
|
+
the draft. This prevents overwrite in the active shell; it is not a multi-browser
|
|
480
|
+
collaboration guarantee. Parent acknowledgement timeouts do not replay writes locally.
|
|
481
|
+
|
|
482
|
+
The fixed executor covers a subset of the original guide; other original controls/actions
|
|
483
|
+
retain their existing prototype/simulation requirements and must be disclosed, not silently
|
|
484
|
+
reclassified as generic working controls. Files/images/signatures, computed/remote fields,
|
|
485
|
+
workflow references and multi-step business chains are not claimed as newly implemented
|
|
486
|
+
by this basic executor. Capability limitations do not authorize deleting those original
|
|
487
|
+
features from a generated page. CLI render success is not complete interaction verification.
|
|
488
|
+
Same-file host Write/Edit calls are sequential; inspect never rewrites the source draft.
|
|
489
|
+
|
|
272
490
|
Form initialization must set window.__E10_FORM_READY__=true after data/rendering. Pack
|
|
273
|
-
renders generated form HTML
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
491
|
+
renders the exact generated form HTML by file URL at 1440x900, using the same offline loader
|
|
492
|
+
as inspect with a fresh isolated context per form. Both preserve localStorage origin behavior,
|
|
493
|
+
block external resources, and report initialization/script errors before PNG. Rendering failures mark that HTML failed and block the pack attempt, allowing html
|
|
494
|
+
retry or subsequent explicit PARTIAL packaging. Private pack-diagnostics retain stage, bounded JS errors and browser source locations; errors
|
|
495
|
+
point to focused repair with the existing draft, never a generic full-regeneration instruction.
|
|
496
|
+
Owned Pages, contexts and Chrome close in finally; cleanup failures cannot yield DONE.
|
|
277
497
|
|
|
278
498
|
## Delivery and privacy
|
|
279
499
|
|
|
@@ -289,10 +509,31 @@ Exclude credentials, form-input JSON, layout references, real reference record I
|
|
|
289
509
|
tokens and task state. Manifest carries hashes and specific warnings, not private configs.
|
|
290
510
|
DONE covers supported targets; unsupported skipped menu types still require disclosure.
|
|
291
511
|
|
|
512
|
+
## CLI command loading
|
|
513
|
+
|
|
514
|
+
Each invocation remains a short-lived Node process. The entry eagerly loads only built-in
|
|
515
|
+
utilities, common error/output support, host capability checks and host argument parsing.
|
|
516
|
+
Auth, task storage, source collection, HTML queue/review and packaging modules load on the
|
|
517
|
+
selected execution branch. Host-active-token parsing is shared with the lightweight host
|
|
518
|
+
ledger so html watch does not load HTML generation/validation. Keep the html module's
|
|
519
|
+
existing parser export for callers.
|
|
520
|
+
|
|
521
|
+
playwright-core loads only inside launchChrome, including actual doctor, capture and
|
|
522
|
+
uncached offline rendering. Valid inspection-cache reuse, queue operations, ready/accept,
|
|
523
|
+
status, auth and a blocked host do not initialize the browser library. Commands still
|
|
524
|
+
perform all original receipt/hash, authentication, cleanup and state checks; imports are
|
|
525
|
+
not a substitute for verification. Bootstrap retains per-command runtime file hashes and
|
|
526
|
+
pinned dependency checks, and only installs when ensure finds no valid runtime. No daemon,
|
|
527
|
+
model subprocess, browser reuse across commands or omitted integrity checks is introduced.
|
|
528
|
+
Performance claims distinguish local process startup from WorkBuddy tool/sandbox latency,
|
|
529
|
+
network, capture/render and AI generation time.
|
|
530
|
+
|
|
292
531
|
## Runtime distribution
|
|
293
532
|
|
|
294
|
-
|
|
295
|
-
|
|
533
|
+
Publish npm packages to https://registry.npmjs.org/. Skill product.json selects
|
|
534
|
+
https://registry.npmmirror.com for installation, matching the WorkBuddy ui-code-agent
|
|
535
|
+
distribution. Wait for the pinned version to be available in the mirror before delivery.
|
|
536
|
+
Dependencies retain their pinned versions and integrity checks; no
|
|
296
537
|
internal registry is required for installation. Publishing requires explicit user
|
|
297
538
|
authorization and remains separate from local package creation and verification.
|
|
298
539
|
|
|
@@ -347,7 +588,7 @@ scoped preset buttons, preset and warnings. Successful receipts have kind=workfl
|
|
|
347
588
|
objectIds instead of objId. These dependencies join the relatedPath/runtime allowlist but
|
|
348
589
|
never produce additional navigation. Dependency locations are explicit in relatedPath.
|
|
349
590
|
|
|
350
|
-
Workflow host jobs use promptVersion=
|
|
591
|
+
Workflow host jobs use promptVersion=12, workflow guidePath plus compact layoutGuidePath, and inject
|
|
351
592
|
canonical form and workflow runtimes. Presets are prototype-workflow-preset/mockOnly, not
|
|
352
593
|
claims of source-button permissions. Newflow uses grouped cards; other categories use fixed
|
|
353
594
|
columns/tabs/filters, not custom form fields. Host generates DOM and controls; CLI performs
|
|
@@ -379,7 +620,8 @@ verifies initialization/rendering for workflows using __E10_FORM_READY__ just li
|
|
|
379
620
|
|
|
380
621
|
## Bootstrap progress (0.5.4)
|
|
381
622
|
|
|
382
|
-
Skill first calls read-only status
|
|
623
|
+
Skill first calls read-only status and handles the host blocker before any setup. Only
|
|
624
|
+
after host.background=enabled and blocked=false, if runtime is not ready, explain once before ensure: “首次使用需要初始化工作环境,大概需要几分钟,完成后自动继续。”
|
|
383
625
|
Do not expose dependency names in this notice or repeat it during normal ready reuse. Run ensure directly with a 600000ms host command budget, without tail/pipelines.
|
|
384
626
|
Bootstrap emits structured stderr preparation/install/verification/ready progress and a
|
|
385
627
|
15s installation heartbeat; stdout remains one JSON result with elapsedMs on installation.
|
|
@@ -401,3 +643,116 @@ truncation without requiring a model to transcribe large region dictionaries.
|
|
|
401
643
|
Relation initializers must contain complete target field data: load(initial) persists
|
|
402
644
|
the first seed, so a name-only relationship seed can corrupt subsequent menu displays.
|
|
403
645
|
Generation guidance states this rule; storage does not claim semantic completeness checks.
|
|
646
|
+
|
|
647
|
+
|
|
648
|
+
## Task-specific form guidance (prompt 10)
|
|
649
|
+
|
|
650
|
+
Required guidance consists of compact shared rendering/data/button/review rules and
|
|
651
|
+
only the current menu kind's configuration semantics. Traditional lists and NLists
|
|
652
|
+
retain their complete corresponding field descriptions, without source API collection
|
|
653
|
+
steps. Layouts omit both list manuals. Workflow jobs retain the workflow guide and
|
|
654
|
+
a compact associated-form contract. The full original manual remains available at
|
|
655
|
+
referenceGuidePath for targeted lookup, not mandatory full reading. Source configs,
|
|
656
|
+
context fragments, fields, buttons, options, queue concurrency and inspection are
|
|
657
|
+
unchanged. This reduces required guidance, not a claim about total model tokens or latency.
|
|
658
|
+
|
|
659
|
+
|
|
660
|
+
## WorkBuddy anomaly recovery (2026-09-17)
|
|
661
|
+
|
|
662
|
+
Job prompt v15 is generated after detecting the existing regular draft. Recovery begins
|
|
663
|
+
with Read of that draft, preserves completed content and uses bounded edits; only a new
|
|
664
|
+
file begins with a skeleton. Retry still copies a source-verified previous draft to a new
|
|
665
|
+
token and requires confirmed termination of the previous writer. No change to model page
|
|
666
|
+
generation responsibilities, field scope, or visual/functional quality is authorized.
|
|
667
|
+
|
|
668
|
+
Each dispatchable job includes a short `dispatch` native Agent argument object, with
|
|
669
|
+
`run_in_background:true`, `subagent_type:general-purpose`, readable `name:页面-名称` / `name:表单-名称`,
|
|
670
|
+
description and promptPath instruction. Model is omitted. New WorkBuddy starts submit
|
|
671
|
+
`{"event":"started","receipt":"<unaltered native Spawned successfully. content>"}`
|
|
672
|
+
through --host-events. CLI resolves the persisted dispatchName to token and takes taskId from the same receipt
|
|
673
|
+
regardless of parallel response ordering; missing, ambiguous or synchronous receipts are rejected.
|
|
674
|
+
Legacy explicit taskId/token starts remain supported. Terminal events may omit token;
|
|
675
|
+
CLI resolves the existing taskId, retaining executionEnded:true and outcome requirements.
|
|
676
|
+
An explicit mismatched token is still rejected. Receipts are host-supplied evidence, not
|
|
677
|
+
cryptographically authenticated native state. This does not repair WorkBuddy's acceptance
|
|
678
|
+
of truncated Agent arguments or independently process delayed host notifications.
|
|
679
|
+
File silence at three/five minutes prompts native-state reconciliation; it does not
|
|
680
|
+
prove a stalled model request and never automatically cancels or frees a writer.
|
|
681
|
+
|
|
682
|
+
`html interact --dir DIR --kind page|form --page-id ID --token TOKEN --steps FILE
|
|
683
|
+
[--width 390]` executes a <=64KB JSON plan with 1..40 steps, ending in an assertion.
|
|
684
|
+
Actions: click/fill/select/press/check/uncheck/reload/assert. Actions target a CSS selector;
|
|
685
|
+
fill/select/press use value. Assert checks visible/hidden/text/value/count; the latter
|
|
686
|
+
three use expected (text is exact innerText). Native dialogs default to dismiss, with
|
|
687
|
+
explicit dialog:accept supported per action. No arbitrary script, dependency installation
|
|
688
|
+
or HTTP server. Canonical prepared HTML and runtimes run in a private offline file context
|
|
689
|
+
with fresh local storage, 30s operation bound plus bounded startup/cleanup. Navigation
|
|
690
|
+
away, new windows, blocked resources, runtime errors and failed assertions fail the check.
|
|
691
|
+
Token-private locking permits parallel workers; source/draft digest is rechecked after
|
|
692
|
+
execution. review/interaction.json records exact steps, per-step results and a final
|
|
693
|
+
screenshot. It proves only those paths. An existing failed/stale interaction receipt blocks
|
|
694
|
+
ready/accept-ready; ready pins its digest. Missing interaction evidence is not proof of
|
|
695
|
+
interaction correctness and remains compatible with previous tasks. No original source
|
|
696
|
+
or completed task is changed during local acceptance fixtures.
|
|
697
|
+
|
|
698
|
+
html ready returns next=finish-worker and an explicit final-reply instruction; it no longer
|
|
699
|
+
returns notify-coordinator, which conflicted with the native-terminal handoff protocol.
|
|
700
|
+
The coordinator must not broadcast to finished generation teammates, as messages can
|
|
701
|
+
reactivate them after a recorded terminal state. This remains a host lifecycle limitation.
|
|
702
|
+
|
|
703
|
+
## Readable worker names and cleanup failures (2026-09-17)
|
|
704
|
+
|
|
705
|
+
New allocations persist dispatchName in HtmlResult before dispatch. Names use 页面-名称
|
|
706
|
+
or 表单-名称; whitespace/path/control punctuation is replaced by hyphens and the label
|
|
707
|
+
is bounded to 60 Unicode characters. Duplicate labels append the item ID; retries append
|
|
708
|
+
重试N; remaining collisions receive a sequence suffix. Names never replace token identity.
|
|
709
|
+
Resume preserves the persisted name; previously allocated jobs keep e10-<token>.
|
|
710
|
+
Original native rename notes are checked and mapped to the requested name, while the
|
|
711
|
+
ledger retains the actual nativeName. Unknown/ambiguous names and explicit token mismatches
|
|
712
|
+
are rejected. Older explicit taskId/token and e10-token receipts remain supported.
|
|
713
|
+
|
|
714
|
+
CLI emits the final output only after lock release, so release failures cannot follow an
|
|
715
|
+
already-emitted success JSON. SAFE_DELETE_BULK_CONFIRM_REQUIRED / SAFE_DELETE_BULK_REJECTED
|
|
716
|
+
are explicit error codes with stop/reconcile guidance, not generic retry instructions.
|
|
717
|
+
The original host guard marker is emitted unescaped on stderr. Structured stdout keeps
|
|
718
|
+
the code and diagnostic details but does not duplicate the raw marker inside JSON strings:
|
|
719
|
+
WorkBuddy parses the first marker in combined stdout/stderr as an unescaped JSON payload.
|
|
720
|
+
This preserves its normal approval path; it does not grant permission or change guard scope.
|
|
721
|
+
Lock cleanup failure reports operationCompleted plus any original operationError and
|
|
722
|
+
cleanupError; true means the action returned, not that the whole command succeeded.
|
|
723
|
+
Atomic JSON writes remove temporary files only on failure, retaining both errors if
|
|
724
|
+
cleanup also fails. Removing nonexistent temporary files did not count toward the host
|
|
725
|
+
bulk guard; this change does not eliminate real lock cleanup confirmations.
|
|
726
|
+
|
|
727
|
+
Workers/coordinators stop automatic retries on these host guard errors, preserve existing
|
|
728
|
+
work, and use the host's normal approval flow before reconciliation. Never manually
|
|
729
|
+
remove lock directories, change deletion mechanisms or security settings to bypass the
|
|
730
|
+
block. Keep required interaction coverage; static assertions cannot replace the requested
|
|
731
|
+
save/cancel path. The CLI does not change WorkBuddy approval scope or suppress prompts.
|
|
732
|
+
|
|
733
|
+
|
|
734
|
+
## Lightweight worker and coordinator guidance (0.5.7, prompt 17)
|
|
735
|
+
|
|
736
|
+
Keep page generation responsibilities, Skill concurrency eight, host-default/auto models,
|
|
737
|
+
existing validation and deletion behavior. Prefer same-turn independent dispatch calls,
|
|
738
|
+
batched immediate registration, then terminal reconciliation/refill before progress prose.
|
|
739
|
+
Preserve jobs/dispatch/watch output instead of stripping and fetching it again. Watch rearming
|
|
740
|
+
retains the latest after-state digest and uses background notifications, not foreground polling.
|
|
741
|
+
Every submitted terminal must have the matching native identity's notification/status evidence;
|
|
742
|
+
a different task's completion, ready or watch completion never proves that worker exited.
|
|
743
|
+
These are host instructions, not a deterministic scheduler or independently verified lifecycle.
|
|
744
|
+
|
|
745
|
+
Workers do not create/claim shared task-list items or browse sibling tokens. Missing private
|
|
746
|
+
review directories are normal. After ready they return a concise final answer without further
|
|
747
|
+
tool calls. Normal delivery uses pack results; detailed timing audits are only done on request.
|
|
748
|
+
Reports distinguish native Started/Ended, ledger registration/release, HTML acceptance and host
|
|
749
|
+
reclamation, calculate durations from timestamps and disclose early release as an anomaly.
|
|
750
|
+
|
|
751
|
+
Interaction plans remain strict objects with steps arrays; count expected is an integer 0..10000,
|
|
752
|
+
text/value expected and fill/select/press value are strings. Invalid plans return the same code
|
|
753
|
+
plus details.field, one-based details.step where applicable, and the expected format. The parser
|
|
754
|
+
does not coerce strings to numbers or run the browser for malformed input. Fix the plan alone
|
|
755
|
+
when the HTML did not change. All-row claims require all-row assertions, not first/last samples.
|
|
756
|
+
Form query validation keeps its current accepted inputs and bounds but names the failing
|
|
757
|
+
filters/sort/pageSize/page field. The compact guide documents arrays, pageSize 1..500 and using
|
|
758
|
+
orderedIds plus snapshot records for full filtered totals, without expanding business features.
|
package/package.json
CHANGED