koneck 2.44.0 → 2.45.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/dist/browser.d.ts +43 -2
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +126 -12
- package/dist/browser.js.map +1 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +23 -9
- package/dist/engine.js.map +1 -1
- package/dist/tools.d.ts +2 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +48 -16
- package/dist/tools.js.map +1 -1
- package/dist/web/api.d.ts.map +1 -1
- package/dist/web/api.js +26 -4
- package/dist/web/api.js.map +1 -1
- package/dist/web/ui-client.d.ts.map +1 -1
- package/dist/web/ui-client.js +77 -2
- package/dist/web/ui-client.js.map +1 -1
- package/dist/web/ui-css.d.ts.map +1 -1
- package/dist/web/ui-css.js +11 -0
- package/dist/web/ui-css.js.map +1 -1
- package/dist/web/ui.d.ts.map +1 -1
- package/dist/web/ui.js +5 -1
- package/dist/web/ui.js.map +1 -1
- package/package.json +1 -1
package/dist/web/ui-client.js
CHANGED
|
@@ -2697,6 +2697,10 @@ function drawPreview(data) {
|
|
|
2697
2697
|
}
|
|
2698
2698
|
$('pvurl').value = data.url || $('pvurl').value;
|
|
2699
2699
|
$('pvinfo').textContent = data.title || '';
|
|
2700
|
+
// Shown as unusable rather than silently doing nothing, which is the difference between a
|
|
2701
|
+
// control that is off and one that is broken.
|
|
2702
|
+
$('pvback').disabled = !(data.nav && data.nav.back);
|
|
2703
|
+
$('pvfwd').disabled = !(data.nav && data.nav.forward);
|
|
2700
2704
|
if (!data.shot) {
|
|
2701
2705
|
host.appendChild(el('div', 'pvnone', 'The browser is open but produced no picture.'));
|
|
2702
2706
|
return;
|
|
@@ -2718,8 +2722,21 @@ function drawPreview(data) {
|
|
|
2718
2722
|
host.appendChild(img);
|
|
2719
2723
|
const hint = el('div', 'pvhint',
|
|
2720
2724
|
'Click the page to click it for real. ' + (data.controls || []).length
|
|
2721
|
-
+ ' interactive elements.
|
|
2725
|
+
+ ' interactive elements.');
|
|
2722
2726
|
host.appendChild(hint);
|
|
2727
|
+
// The same numbered elements the agent is given, clickable — so a person can drive the flow the
|
|
2728
|
+
// agent is stuck on without hunting for the pixel.
|
|
2729
|
+
if ((data.controls || []).length) {
|
|
2730
|
+
const row = el('div', 'pvctl');
|
|
2731
|
+
for (const c of data.controls.slice(0, 18)) {
|
|
2732
|
+
const b = el('button', 'pvchip', c.ref + '. ' + (c.label || c.tag));
|
|
2733
|
+
b.type = 'button';
|
|
2734
|
+
b.title = c.selector;
|
|
2735
|
+
b.onclick = () => void browserDo({ action: 'click', ref: c.ref });
|
|
2736
|
+
row.appendChild(b);
|
|
2737
|
+
}
|
|
2738
|
+
host.appendChild(row);
|
|
2739
|
+
}
|
|
2723
2740
|
const row = el('div', 'pvhint');
|
|
2724
2741
|
for (const [label, by] of [['scroll up', -600], ['scroll down', 600]]) {
|
|
2725
2742
|
const b = el('button', 'pvbtn', label);
|
|
@@ -2753,6 +2770,8 @@ $('pvurl').addEventListener('keydown', (ev) => {
|
|
|
2753
2770
|
if (ev.key === 'Enter') { ev.preventDefault(); $('pvgo').onclick(); }
|
|
2754
2771
|
});
|
|
2755
2772
|
$('pvrefresh').onclick = () => void browserDo({ action: 'read' });
|
|
2773
|
+
$('pvback').onclick = () => void browserDo({ action: 'back' });
|
|
2774
|
+
$('pvfwd').onclick = () => void browserDo({ action: 'forward' });
|
|
2756
2775
|
$('pvclose').onclick = async () => {
|
|
2757
2776
|
try { await api('/api/browser', { method: 'POST', body: JSON.stringify({ action: 'close' }) }); }
|
|
2758
2777
|
catch (e) {}
|
|
@@ -2797,6 +2816,15 @@ const follow = {
|
|
|
2797
2816
|
/** How many output lines a command keeps in view. Beyond this the head is dropped. */
|
|
2798
2817
|
const WATCH_OUTPUT_LINES = 400;
|
|
2799
2818
|
|
|
2819
|
+
/** A url, short enough for a chip: the path, or the host when there is no path. */
|
|
2820
|
+
function shortUrl(url) {
|
|
2821
|
+
try {
|
|
2822
|
+
const u = new URL(url);
|
|
2823
|
+
const tail = (u.pathname || '/').replace(/\/$/, '');
|
|
2824
|
+
return tail ? tail.split('/').pop() || tail : u.host;
|
|
2825
|
+
} catch (e) { return String(url).slice(0, 20); }
|
|
2826
|
+
}
|
|
2827
|
+
|
|
2800
2828
|
/** What a tool is doing, as a word. The verb is the most informative thing in the header. */
|
|
2801
2829
|
function verbFor(name) {
|
|
2802
2830
|
const n = String(name || '');
|
|
@@ -2829,9 +2857,22 @@ function toolWrites(name) {
|
|
|
2829
2857
|
* wrong file.
|
|
2830
2858
|
*/
|
|
2831
2859
|
function targetOf(e) {
|
|
2832
|
-
const out = { path: null, lines: [], needle: null, command: null };
|
|
2860
|
+
const out = { path: null, lines: [], needle: null, command: null, url: null };
|
|
2833
2861
|
let parsed = null;
|
|
2834
2862
|
try { parsed = e.args ? JSON.parse(e.args) : null; } catch (err) { parsed = null; }
|
|
2863
|
+
/*
|
|
2864
|
+
* A browser call is about a page, not a file.
|
|
2865
|
+
*
|
|
2866
|
+
* Its arguments are JSON with no spaces in them, so the last-resort "the detail line looks like a
|
|
2867
|
+
* path" rule swallowed the whole thing and the panel tried to open
|
|
2868
|
+
* {"url":"http://localhost:3000/","action":"open"} as a file — answering "not a readable file
|
|
2869
|
+
* inside this workspace" while the agent was busy driving a browser, and filling the trail with
|
|
2870
|
+
* chips called ","action":"open"}.
|
|
2871
|
+
*/
|
|
2872
|
+
if (e.name === 'browser') {
|
|
2873
|
+
out.url = parsed && typeof parsed.url === 'string' ? parsed.url : '';
|
|
2874
|
+
return out;
|
|
2875
|
+
}
|
|
2835
2876
|
if (parsed) {
|
|
2836
2877
|
for (const key of ['path', 'file', 'file_path', 'filename']) {
|
|
2837
2878
|
if (typeof parsed[key] === 'string' && parsed[key].trim()) { out.path = parsed[key].trim(); break; }
|
|
@@ -2922,6 +2963,12 @@ function drawTrail(activeLabel) {
|
|
|
2922
2963
|
// A trail you can walk back along. Revisiting stops the panel following, because otherwise
|
|
2923
2964
|
// the next tool call would yank it away from whatever you went back to look at.
|
|
2924
2965
|
chip.onclick = () => {
|
|
2966
|
+
if (t.kind === 'page') {
|
|
2967
|
+
setPanelMode('page');
|
|
2968
|
+
if (t.url) { $('pvurl').value = t.url; void browserDo({ action: 'open', url: t.url }); }
|
|
2969
|
+
drawTrail(t.label);
|
|
2970
|
+
return;
|
|
2971
|
+
}
|
|
2925
2972
|
if (t.kind === 'term') { drawTerm(t.verb, t.command || t.label, t.lines || []); drawTrail(t.label); return; }
|
|
2926
2973
|
follow.path = t.path;
|
|
2927
2974
|
follow.attention = t.lines || [];
|
|
@@ -2943,6 +2990,34 @@ function watchTool(e, done) {
|
|
|
2943
2990
|
const t = targetOf(e);
|
|
2944
2991
|
const verb = verbFor(e.name);
|
|
2945
2992
|
|
|
2993
|
+
/*
|
|
2994
|
+
* The browser sends the panel to the page, without being asked.
|
|
2995
|
+
*
|
|
2996
|
+
* Watching an agent use a browser and being shown a file error instead is the whole feature
|
|
2997
|
+
* failing at the last step: the page was there, one click away, in a mode nobody had reason to
|
|
2998
|
+
* think of switching to. If it is driving a browser, the thing to look at is the browser.
|
|
2999
|
+
*/
|
|
3000
|
+
if (e.name === 'browser') {
|
|
3001
|
+
$('watch').hidden = false;
|
|
3002
|
+
if (t.url) $('pvurl').value = t.url;
|
|
3003
|
+
watchHead(verb, t.url || 'the page');
|
|
3004
|
+
trailPush({ label: t.url ? shortUrl(t.url) : 'page', verb, kind: 'page',
|
|
3005
|
+
url: t.url || '', ok: done ? e.ok !== false : undefined });
|
|
3006
|
+
if (follow.mode !== 'page') setPanelMode('page');
|
|
3007
|
+
/*
|
|
3008
|
+
* Once the call has finished, ask the browser what it is showing rather than reading cached
|
|
3009
|
+
* state.
|
|
3010
|
+
*
|
|
3011
|
+
* Switching to page mode does a read-only fetch, which can land before the agent's navigation
|
|
3012
|
+
* has settled — so the panel showed "not open yet" for a page that was already loading. On
|
|
3013
|
+
* completion the browser is definitely where the agent left it, and a read returns the page
|
|
3014
|
+
* with its numbered elements, which is what makes the panel usable rather than decorative.
|
|
3015
|
+
*/
|
|
3016
|
+
if (done) void browserDo({ action: 'read' });
|
|
3017
|
+
else void loadPreview();
|
|
3018
|
+
return;
|
|
3019
|
+
}
|
|
3020
|
+
|
|
2946
3021
|
if (t.command) {
|
|
2947
3022
|
// A command is not a file, and its output IS the thing to watch.
|
|
2948
3023
|
follow.kind = 'term';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-client.js","sourceRoot":"","sources":["../../src/web/ui-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,MAAM,CAAC,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"ui-client.js","sourceRoot":"","sources":["../../src/web/ui-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAw4GlB,CAAC;AACF,CAAC"}
|
package/dist/web/ui-css.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-css.d.ts","sourceRoot":"","sources":["../../src/web/ui-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"ui-css.d.ts","sourceRoot":"","sources":["../../src/web/ui-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA21B3C"}
|
package/dist/web/ui-css.js
CHANGED
|
@@ -714,6 +714,11 @@ body[data-tint="soft"]{filter:contrast(.92) brightness(1.04)}
|
|
|
714
714
|
border-bottom:1px solid var(--line);flex:0 0 auto}
|
|
715
715
|
.pvbar input{flex:1;min-width:0;padding:8px 11px;border-radius:8px;border:1px solid var(--line);
|
|
716
716
|
background:var(--panel-2);font-family:var(--mono);font-size:12.5px}
|
|
717
|
+
.pvbar .pvnav{flex:0 0 auto;width:28px;height:28px;border-radius:7px;border:1px solid var(--line);
|
|
718
|
+
background:transparent;color:var(--muted);cursor:pointer;font-size:15px;line-height:1;
|
|
719
|
+
display:flex;align-items:center;justify-content:center}
|
|
720
|
+
.pvbar .pvnav:hover:not(:disabled){color:var(--ink);border-color:var(--cyan)}
|
|
721
|
+
.pvbar .pvnav:disabled{opacity:.35;cursor:default}
|
|
717
722
|
.pvbar .pvgo{padding:8px 15px;border-radius:8px;border:1px solid var(--cyan);color:var(--cyan);
|
|
718
723
|
background:transparent;cursor:pointer;font-size:12.5px}
|
|
719
724
|
.pvbar .pvbtn{padding:8px 12px;border-radius:8px;border:1px solid var(--line);color:var(--muted);
|
|
@@ -727,6 +732,12 @@ body[data-tint="soft"]{filter:contrast(.92) brightness(1.04)}
|
|
|
727
732
|
.pvshot{max-width:100%;border:1px solid var(--line);border-radius:8px;cursor:crosshair;
|
|
728
733
|
background:#fff;box-shadow:var(--shadow)}
|
|
729
734
|
.pvhint{margin-top:11px;font-size:11.5px;color:var(--dim);text-align:center;line-height:1.6}
|
|
735
|
+
/* The same numbered elements the agent is given, so a person can drive the flow it is stuck on. */
|
|
736
|
+
.pvctl{display:flex;flex-wrap:wrap;gap:5px;justify-content:center;margin-top:9px;max-width:100%}
|
|
737
|
+
.pvchip{padding:3px 9px;border-radius:999px;border:1px solid var(--line);background:var(--panel);
|
|
738
|
+
color:var(--muted);font-size:11px;cursor:pointer;max-width:190px;overflow:hidden;
|
|
739
|
+
text-overflow:ellipsis;white-space:nowrap}
|
|
740
|
+
.pvchip:hover{border-color:var(--cyan);color:var(--cyan)}
|
|
730
741
|
.pvnone{padding:40px 20px;color:var(--dim);font-size:13px;text-align:center;line-height:1.7;
|
|
731
742
|
max-width:520px}
|
|
732
743
|
|
package/dist/web/ui-css.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-css.js","sourceRoot":"","sources":["../../src/web/ui-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,GAAG,CAAC,OAAe;IACjC,OAAO;;;;;;;;;;;;;;;gBAeO,OAAO
|
|
1
|
+
{"version":3,"file":"ui-css.js","sourceRoot":"","sources":["../../src/web/ui-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,GAAG,CAAC,OAAe;IACjC,OAAO;;;;;;;;;;;;;;;gBAeO,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA00BtB,CAAC;AACF,CAAC"}
|
package/dist/web/ui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,wBAAgB,IAAI,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,wBAAgB,IAAI,IAAI,MAAM,CA+R7B"}
|
package/dist/web/ui.js
CHANGED
|
@@ -97,9 +97,13 @@ export function page() {
|
|
|
97
97
|
</div>
|
|
98
98
|
<!-- Shown only in page mode: the same browser the agent drives. -->
|
|
99
99
|
<div class="pvbar" id="pvbar" hidden>
|
|
100
|
+
<!-- A browser without a back button is not one anybody would recognise. -->
|
|
101
|
+
<button class="pvnav" id="pvback" title="Back" aria-label="Back">‹</button>
|
|
102
|
+
<button class="pvnav" id="pvfwd" title="Forward" aria-label="Forward">›</button>
|
|
103
|
+
<button class="pvnav" id="pvrefresh" title="Read the page again"
|
|
104
|
+
aria-label="Reload">↻</button>
|
|
100
105
|
<input id="pvurl" placeholder="http://localhost:3000" autocomplete="off" spellcheck="false">
|
|
101
106
|
<button class="pvgo" id="pvgo">Open</button>
|
|
102
|
-
<button class="pvbtn" id="pvrefresh" title="Read the page again">↻</button>
|
|
103
107
|
<button class="pvbtn" id="pvclose" title="Shut the browser down">×</button>
|
|
104
108
|
</div>
|
|
105
109
|
<div class="wbody" id="wbody"></div>
|
package/dist/web/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,UAAU,IAAI;IAClB,OAAO;;;;;;;SAOA,GAAG,CAAC,SAAS,CAAC
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,UAAU,IAAI;IAClB,OAAO;;;;;;;SAOA,GAAG,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAmRF,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;EAC7C,YAAY,EAAE;;eAED,CAAC;AAChB,CAAC"}
|