opendevbrowser 0.0.16 → 0.0.17
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 +51 -27
- package/dist/browser/annotation-manager.d.ts +3 -0
- package/dist/browser/annotation-manager.d.ts.map +1 -1
- package/dist/browser/browser-manager.d.ts +6 -1
- package/dist/browser/browser-manager.d.ts.map +1 -1
- package/dist/browser/canvas-client.d.ts +53 -0
- package/dist/browser/canvas-client.d.ts.map +1 -0
- package/dist/browser/canvas-code-sync-manager.d.ts +79 -0
- package/dist/browser/canvas-code-sync-manager.d.ts.map +1 -0
- package/dist/browser/canvas-manager.d.ts +94 -0
- package/dist/browser/canvas-manager.d.ts.map +1 -0
- package/dist/browser/canvas-runtime-preview-bridge.d.ts +20 -0
- package/dist/browser/canvas-runtime-preview-bridge.d.ts.map +1 -0
- package/dist/browser/canvas-session-sync-manager.d.ts +21 -0
- package/dist/browser/canvas-session-sync-manager.d.ts.map +1 -0
- package/dist/browser/manager-types.d.ts +13 -1
- package/dist/browser/manager-types.d.ts.map +1 -1
- package/dist/browser/ops-browser-manager.d.ts +11 -1
- package/dist/browser/ops-browser-manager.d.ts.map +1 -1
- package/dist/canvas/code-sync/apply-tsx.d.ts +23 -0
- package/dist/canvas/code-sync/apply-tsx.d.ts.map +1 -0
- package/dist/canvas/code-sync/graph.d.ts +5 -0
- package/dist/canvas/code-sync/graph.d.ts.map +1 -0
- package/dist/canvas/code-sync/hash.d.ts +3 -0
- package/dist/canvas/code-sync/hash.d.ts.map +1 -0
- package/dist/canvas/code-sync/import.d.ts +18 -0
- package/dist/canvas/code-sync/import.d.ts.map +1 -0
- package/dist/canvas/code-sync/manifest.d.ts +5 -0
- package/dist/canvas/code-sync/manifest.d.ts.map +1 -0
- package/dist/canvas/code-sync/tsx-adapter.d.ts +8 -0
- package/dist/canvas/code-sync/tsx-adapter.d.ts.map +1 -0
- package/dist/canvas/code-sync/types.d.ts +152 -0
- package/dist/canvas/code-sync/types.d.ts.map +1 -0
- package/dist/canvas/code-sync/write.d.ts +9 -0
- package/dist/canvas/code-sync/write.d.ts.map +1 -0
- package/dist/canvas/document-store.d.ts +81 -0
- package/dist/canvas/document-store.d.ts.map +1 -0
- package/dist/canvas/export.d.ts +12 -0
- package/dist/canvas/export.d.ts.map +1 -0
- package/dist/canvas/repo-store.d.ts +10 -0
- package/dist/canvas/repo-store.d.ts.map +1 -0
- package/dist/canvas/surface-palette.d.ts +15 -0
- package/dist/canvas/surface-palette.d.ts.map +1 -0
- package/dist/canvas/types.d.ts +255 -0
- package/dist/canvas/types.d.ts.map +1 -0
- package/dist/canvas-runtime-preview-bridge-HBEHXM4T.js +7 -0
- package/dist/canvas-runtime-preview-bridge-HBEHXM4T.js.map +1 -0
- package/dist/{chunk-ST7CO5FA.js → chunk-5J3IFL3X.js} +11577 -13539
- package/dist/chunk-5J3IFL3X.js.map +1 -0
- package/dist/chunk-D633UO34.js +8149 -0
- package/dist/chunk-D633UO34.js.map +1 -0
- package/dist/{chunk-7W3SPXIB.js → chunk-FUSXMW3G.js} +4 -1
- package/dist/chunk-TBUCZX4A.js +34 -0
- package/dist/chunk-TBUCZX4A.js.map +1 -0
- package/dist/chunk-V7KUDHDG.js +276 -0
- package/dist/chunk-V7KUDHDG.js.map +1 -0
- package/dist/chunk-Y2KL55OG.js +59 -0
- package/dist/chunk-Y2KL55OG.js.map +1 -0
- package/dist/cli/args.d.ts +3 -3
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/commands/annotate.d.ts +11 -0
- package/dist/cli/commands/annotate.d.ts.map +1 -1
- package/dist/cli/commands/canvas.d.ts +45 -0
- package/dist/cli/commands/canvas.d.ts.map +1 -0
- package/dist/cli/commands/devtools/perf.d.ts.map +1 -1
- package/dist/cli/commands/devtools/screenshot.d.ts +1 -0
- package/dist/cli/commands/devtools/screenshot.d.ts.map +1 -1
- package/dist/cli/commands/dom/attr.d.ts.map +1 -1
- package/dist/cli/commands/dom/checked.d.ts.map +1 -1
- package/dist/cli/commands/dom/enabled.d.ts.map +1 -1
- package/dist/cli/commands/dom/html.d.ts.map +1 -1
- package/dist/cli/commands/dom/text.d.ts.map +1 -1
- package/dist/cli/commands/dom/value.d.ts.map +1 -1
- package/dist/cli/commands/dom/visible.d.ts.map +1 -1
- package/dist/cli/commands/export/clone-component.d.ts +9 -0
- package/dist/cli/commands/export/clone-component.d.ts.map +1 -1
- package/dist/cli/commands/export/clone-page.d.ts +8 -0
- package/dist/cli/commands/export/clone-page.d.ts.map +1 -1
- package/dist/cli/commands/interact/check.d.ts.map +1 -1
- package/dist/cli/commands/interact/click.d.ts.map +1 -1
- package/dist/cli/commands/interact/hover.d.ts.map +1 -1
- package/dist/cli/commands/interact/press.d.ts.map +1 -1
- package/dist/cli/commands/interact/scroll-into-view.d.ts.map +1 -1
- package/dist/cli/commands/interact/scroll.d.ts.map +1 -1
- package/dist/cli/commands/interact/select.d.ts.map +1 -1
- package/dist/cli/commands/interact/type.d.ts.map +1 -1
- package/dist/cli/commands/interact/uncheck.d.ts.map +1 -1
- package/dist/cli/commands/native.d.ts +12 -1
- package/dist/cli/commands/native.d.ts.map +1 -1
- package/dist/cli/commands/nav/goto.d.ts.map +1 -1
- package/dist/cli/commands/nav/snapshot.d.ts.map +1 -1
- package/dist/cli/commands/nav/wait.d.ts.map +1 -1
- package/dist/cli/commands/serve.d.ts +5 -0
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/session/connect.d.ts.map +1 -1
- package/dist/cli/commands/status.d.ts +5 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/daemon-commands.d.ts.map +1 -1
- package/dist/cli/help.d.ts +5 -0
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/index.js +724 -163
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/remote-canvas-manager.d.ts +8 -0
- package/dist/cli/remote-canvas-manager.d.ts.map +1 -0
- package/dist/cli/remote-manager.d.ts +3 -1
- package/dist/cli/remote-manager.d.ts.map +1 -1
- package/dist/cli/remote-relay.d.ts +2 -0
- package/dist/cli/remote-relay.d.ts.map +1 -1
- package/dist/cli/utils/parse.d.ts +1 -0
- package/dist/cli/utils/parse.d.ts.map +1 -1
- package/dist/core/bootstrap.d.ts.map +1 -1
- package/dist/core/types.d.ts +2 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/fs-UMRKOBNN.js +7 -0
- package/dist/fs-UMRKOBNN.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +192 -67
- package/dist/index.js.map +1 -1
- package/dist/{macros-NUBRM44Y.js → macros-ND2M7LWU.js} +2 -2
- package/dist/opendevbrowser.d.ts.map +1 -1
- package/dist/opendevbrowser.js +192 -67
- package/dist/opendevbrowser.js.map +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/shopping/index.d.ts.map +1 -1
- package/dist/providers-G3LRHQXX.js +121 -0
- package/dist/providers-G3LRHQXX.js.map +1 -0
- package/dist/relay/protocol.d.ts +85 -3
- package/dist/relay/protocol.d.ts.map +1 -1
- package/dist/relay/relay-server.d.ts +14 -1
- package/dist/relay/relay-server.d.ts.map +1 -1
- package/dist/relay/relay-types.d.ts +3 -0
- package/dist/relay/relay-types.d.ts.map +1 -1
- package/dist/runtime-factory-BICHDPE7.js +13 -0
- package/dist/runtime-factory-BICHDPE7.js.map +1 -0
- package/dist/tools/annotate.d.ts.map +1 -1
- package/dist/tools/canvas.d.ts +4 -0
- package/dist/tools/canvas.d.ts.map +1 -0
- package/dist/tools/check.d.ts.map +1 -1
- package/dist/tools/click.d.ts.map +1 -1
- package/dist/tools/clone_component.d.ts.map +1 -1
- package/dist/tools/clone_page.d.ts.map +1 -1
- package/dist/tools/connect.d.ts.map +1 -1
- package/dist/tools/deps.d.ts +2 -0
- package/dist/tools/deps.d.ts.map +1 -1
- package/dist/tools/dom_get_html.d.ts.map +1 -1
- package/dist/tools/dom_get_text.d.ts.map +1 -1
- package/dist/tools/get_attr.d.ts.map +1 -1
- package/dist/tools/get_value.d.ts.map +1 -1
- package/dist/tools/goto.d.ts.map +1 -1
- package/dist/tools/hover.d.ts.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/is_checked.d.ts.map +1 -1
- package/dist/tools/is_enabled.d.ts.map +1 -1
- package/dist/tools/is_visible.d.ts.map +1 -1
- package/dist/tools/launch.d.ts.map +1 -1
- package/dist/tools/macro_resolve.d.ts.map +1 -1
- package/dist/tools/perf.d.ts.map +1 -1
- package/dist/tools/press.d.ts.map +1 -1
- package/dist/tools/product_video_run.d.ts.map +1 -1
- package/dist/tools/research_run.d.ts.map +1 -1
- package/dist/tools/response.d.ts +4 -1
- package/dist/tools/response.d.ts.map +1 -1
- package/dist/tools/screenshot.d.ts.map +1 -1
- package/dist/tools/scroll.d.ts.map +1 -1
- package/dist/tools/scroll_into_view.d.ts.map +1 -1
- package/dist/tools/select.d.ts.map +1 -1
- package/dist/tools/shopping_run.d.ts.map +1 -1
- package/dist/tools/snapshot.d.ts.map +1 -1
- package/dist/tools/type.d.ts.map +1 -1
- package/dist/tools/uncheck.d.ts.map +1 -1
- package/dist/tools/wait.d.ts.map +1 -1
- package/dist/tools/workflow-runtime.d.ts +1 -2
- package/dist/tools/workflow-runtime.d.ts.map +1 -1
- package/extension/canvas.html +636 -0
- package/extension/dist/annotate-content.css +15 -6
- package/extension/dist/annotate-content.js +119 -9
- package/extension/dist/annotation-payload.js +163 -0
- package/extension/dist/background.js +148 -18
- package/extension/dist/canvas/canvas-runtime.js +1061 -0
- package/extension/dist/canvas/model.js +213 -0
- package/extension/dist/canvas/viewport-fit.js +67 -0
- package/extension/dist/canvas-page.js +1801 -0
- package/extension/dist/ops/dom-bridge.js +116 -3
- package/extension/dist/ops/ops-runtime.js +508 -44
- package/extension/dist/ops/ops-session-store.js +21 -114
- package/extension/dist/ops/target-session-coordinator.js +157 -0
- package/extension/dist/popup.js +155 -31
- package/extension/dist/services/ConnectionManager.js +17 -0
- package/extension/dist/services/RelayClient.js +9 -0
- package/extension/dist/services/TabManager.js +35 -12
- package/extension/dist/types.js +2 -0
- package/extension/manifest.json +1 -1
- package/extension/popup.html +52 -0
- package/package.json +6 -4
- package/skills/AGENTS.md +5 -2
- package/skills/opendevbrowser-best-practices/SKILL.md +71 -3
- package/skills/opendevbrowser-best-practices/artifacts/canvas-governance-playbook.md +141 -0
- package/skills/opendevbrowser-best-practices/artifacts/command-channel-reference.md +113 -17
- package/skills/opendevbrowser-best-practices/assets/templates/canvas-blocker-checklist.json +70 -0
- package/skills/opendevbrowser-best-practices/assets/templates/canvas-feedback-eval.json +73 -0
- package/skills/opendevbrowser-best-practices/assets/templates/canvas-generation-plan.v1.json +67 -0
- package/skills/opendevbrowser-best-practices/assets/templates/canvas-handshake-example.json +126 -0
- package/skills/opendevbrowser-best-practices/assets/templates/robustness-checklist.json +57 -0
- package/skills/opendevbrowser-best-practices/assets/templates/surface-audit-checklist.json +7 -3
- package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +26 -0
- package/skills/opendevbrowser-best-practices/scripts/run-robustness-audit.sh +82 -1
- package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +225 -84
- package/dist/chunk-ST7CO5FA.js.map +0 -1
- /package/dist/{chunk-7W3SPXIB.js.map → chunk-FUSXMW3G.js.map} +0 -0
- /package/dist/{macros-NUBRM44Y.js.map → macros-ND2M7LWU.js.map} +0 -0
|
@@ -240,6 +240,66 @@ export class DomBridge {
|
|
|
240
240
|
}
|
|
241
241
|
return payload.value;
|
|
242
242
|
}
|
|
243
|
+
async applyRuntimePreviewBridge(tabId, bindingId, rootSelector, html) {
|
|
244
|
+
return await runInTab(tabId, (payload) => {
|
|
245
|
+
const input = payload;
|
|
246
|
+
const root = document.querySelector(input.rootSelector);
|
|
247
|
+
if (!(root instanceof HTMLElement)) {
|
|
248
|
+
return {
|
|
249
|
+
ok: false,
|
|
250
|
+
fallbackReason: "runtime_projection_unsupported",
|
|
251
|
+
message: `Runtime root not found for selector ${input.rootSelector}.`
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
const existingBindingId = root.getAttribute("data-binding-id");
|
|
255
|
+
if (existingBindingId !== input.bindingId) {
|
|
256
|
+
return {
|
|
257
|
+
ok: false,
|
|
258
|
+
fallbackReason: "runtime_instrumentation_missing",
|
|
259
|
+
message: "Runtime root is missing the expected data-binding-id instrumentation."
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
root.innerHTML = input.html;
|
|
263
|
+
const nodes = [root, ...Array.from(root.querySelectorAll("[data-node-id]"))]
|
|
264
|
+
.filter((element) => element instanceof HTMLElement && element.hasAttribute("data-node-id"))
|
|
265
|
+
.map((element) => {
|
|
266
|
+
const computed = window.getComputedStyle(element);
|
|
267
|
+
const childOrder = Array.from(element.children)
|
|
268
|
+
.map((child) => child instanceof HTMLElement ? child.getAttribute("data-node-id") ?? child.tagName.toLowerCase() : "")
|
|
269
|
+
.join("|");
|
|
270
|
+
return {
|
|
271
|
+
nodeId: element.getAttribute("data-node-id") ?? "",
|
|
272
|
+
bindingId: element.getAttribute("data-binding-id") ?? input.bindingId,
|
|
273
|
+
text: (element.innerText || "").trim(),
|
|
274
|
+
childOrderHash: childOrder,
|
|
275
|
+
attributes: {
|
|
276
|
+
"data-node-id": element.getAttribute("data-node-id") ?? "",
|
|
277
|
+
...(element.hasAttribute("data-binding-id")
|
|
278
|
+
? { "data-binding-id": element.getAttribute("data-binding-id") ?? "" }
|
|
279
|
+
: {})
|
|
280
|
+
},
|
|
281
|
+
styleProjection: {
|
|
282
|
+
color: computed.color,
|
|
283
|
+
backgroundColor: computed.backgroundColor,
|
|
284
|
+
fontSize: computed.fontSize,
|
|
285
|
+
fontWeight: computed.fontWeight,
|
|
286
|
+
borderRadius: computed.borderRadius,
|
|
287
|
+
display: computed.display
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
});
|
|
291
|
+
return {
|
|
292
|
+
ok: true,
|
|
293
|
+
artifact: {
|
|
294
|
+
projection: "bound_app_runtime",
|
|
295
|
+
rootBindingId: input.bindingId,
|
|
296
|
+
capturedAt: new Date().toISOString(),
|
|
297
|
+
hierarchyHash: nodes.map((node) => `${node.nodeId}:${node.childOrderHash}`).join("|"),
|
|
298
|
+
nodes
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
}, [{ bindingId, rootSelector, html }]);
|
|
302
|
+
}
|
|
243
303
|
}
|
|
244
304
|
const runWithElement = async (tabId, selector, action) => {
|
|
245
305
|
const result = await runInTab(tabId, (sel, act) => {
|
|
@@ -247,6 +307,60 @@ const runWithElement = async (tabId, selector, action) => {
|
|
|
247
307
|
if (!el) {
|
|
248
308
|
return { ok: false, error: "Element not found" };
|
|
249
309
|
}
|
|
310
|
+
const dispatchPointer = (target, type, buttons) => {
|
|
311
|
+
const rect = target.getBoundingClientRect();
|
|
312
|
+
const init = {
|
|
313
|
+
bubbles: true,
|
|
314
|
+
cancelable: true,
|
|
315
|
+
composed: true,
|
|
316
|
+
view: window,
|
|
317
|
+
clientX: rect.left + rect.width / 2,
|
|
318
|
+
clientY: rect.top + rect.height / 2,
|
|
319
|
+
button: 0,
|
|
320
|
+
buttons
|
|
321
|
+
};
|
|
322
|
+
if (typeof PointerEvent === "function") {
|
|
323
|
+
target.dispatchEvent(new PointerEvent(type, init));
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
target.dispatchEvent(new MouseEvent(type.replace(/^pointer/, "mouse"), init));
|
|
327
|
+
};
|
|
328
|
+
const dispatchMouse = (target, type, buttons) => {
|
|
329
|
+
const rect = target.getBoundingClientRect();
|
|
330
|
+
target.dispatchEvent(new MouseEvent(type, {
|
|
331
|
+
bubbles: true,
|
|
332
|
+
cancelable: true,
|
|
333
|
+
composed: true,
|
|
334
|
+
view: window,
|
|
335
|
+
clientX: rect.left + rect.width / 2,
|
|
336
|
+
clientY: rect.top + rect.height / 2,
|
|
337
|
+
button: 0,
|
|
338
|
+
buttons
|
|
339
|
+
}));
|
|
340
|
+
};
|
|
341
|
+
const dispatchHover = (target) => {
|
|
342
|
+
dispatchPointer(target, "pointerover", 0);
|
|
343
|
+
dispatchPointer(target, "pointerenter", 0);
|
|
344
|
+
dispatchMouse(target, "mouseover", 0);
|
|
345
|
+
dispatchMouse(target, "mouseenter", 0);
|
|
346
|
+
dispatchPointer(target, "pointermove", 0);
|
|
347
|
+
dispatchMouse(target, "mousemove", 0);
|
|
348
|
+
};
|
|
349
|
+
const dispatchClick = (target) => {
|
|
350
|
+
dispatchHover(target);
|
|
351
|
+
dispatchPointer(target, "pointerdown", 1);
|
|
352
|
+
dispatchMouse(target, "mousedown", 1);
|
|
353
|
+
if (target instanceof HTMLElement) {
|
|
354
|
+
target.focus();
|
|
355
|
+
}
|
|
356
|
+
dispatchPointer(target, "pointerup", 0);
|
|
357
|
+
dispatchMouse(target, "mouseup", 0);
|
|
358
|
+
if (target instanceof HTMLElement) {
|
|
359
|
+
target.click();
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
target.dispatchEvent(new MouseEvent("click", { bubbles: true, cancelable: true, composed: true, view: window }));
|
|
363
|
+
};
|
|
250
364
|
const action = act;
|
|
251
365
|
switch (action.type) {
|
|
252
366
|
case "outerHTML":
|
|
@@ -271,11 +385,10 @@ const runWithElement = async (tabId, selector, action) => {
|
|
|
271
385
|
}
|
|
272
386
|
return { ok: true, value: false };
|
|
273
387
|
case "click":
|
|
274
|
-
el
|
|
388
|
+
dispatchClick(el);
|
|
275
389
|
return { ok: true, value: true };
|
|
276
390
|
case "hover": {
|
|
277
|
-
|
|
278
|
-
el.dispatchEvent(event);
|
|
391
|
+
dispatchHover(el);
|
|
279
392
|
return { ok: true, value: true };
|
|
280
393
|
}
|
|
281
394
|
case "focus":
|