@floless/app 0.16.2 → 0.18.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/floless-server.cjs +512 -310
- package/dist/skills/floless-app-bridge/SKILL.md +27 -1
- package/dist/skills/floless-app-rebake/SKILL.md +77 -0
- package/dist/skills/floless-app-routines/SKILL.md +1 -1
- package/dist/skills/floless-app-ui/SKILL.md +1 -1
- package/dist/skills/floless-app-workflows/SKILL.md +8 -2
- package/dist/skills/floless-app-workflows/references/exec-contract.md +10 -1
- package/dist/skills/floless-app-workflows/references/visual-inputs.md +94 -0
- package/dist/web/app.css +90 -5
- package/dist/web/app.js +51 -5
- package/dist/web/aware.js +330 -54
- package/dist/web/index.html +11 -1
- package/dist/web/panels.js +5 -3
- package/package.json +1 -1
package/dist/web/index.html
CHANGED
|
@@ -95,6 +95,12 @@
|
|
|
95
95
|
<span class="role" id="center-panel-role">transparency layer · read-mostly</span>
|
|
96
96
|
</span>
|
|
97
97
|
</div>
|
|
98
|
+
<div class="canvas-drop-target" id="canvas-drop-target" aria-hidden="true">
|
|
99
|
+
<div class="canvas-drop-icon" aria-hidden="true">⤓</div>
|
|
100
|
+
<div class="canvas-drop-label">Drop a .flo file to import</div>
|
|
101
|
+
<div class="canvas-drop-sub">The workflow installs and is added to your picker</div>
|
|
102
|
+
</div>
|
|
103
|
+
<input type="file" id="import-file" accept=".flo,.app,.flow,.aware" hidden>
|
|
98
104
|
<div class="find-overlay" id="find-overlay">
|
|
99
105
|
<input type="text" id="find-input" placeholder="Find agent…">
|
|
100
106
|
<span class="find-count" id="find-count"></span>
|
|
@@ -229,6 +235,10 @@
|
|
|
229
235
|
<span class="menu-label">Save inputs</span>
|
|
230
236
|
<span class="menu-kbd">Ctrl+S</span>
|
|
231
237
|
</button>
|
|
238
|
+
<button class="menu-item" data-action="import" role="menuitem">
|
|
239
|
+
<span class="menu-icon" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M12 3v12m0 0-4-4m4 4 4-4"/><path d="M3 17v2a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-2"/></svg></span>
|
|
240
|
+
<span class="menu-label">Import workflow…</span>
|
|
241
|
+
</button>
|
|
232
242
|
<div class="menu-divider"></div>
|
|
233
243
|
<button class="menu-item" data-action="find" role="menuitem">
|
|
234
244
|
<span class="menu-icon" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg></span>
|
|
@@ -347,7 +357,7 @@
|
|
|
347
357
|
|
|
348
358
|
<div class="modal-backdrop" id="add-fav-modal">
|
|
349
359
|
<div class="modal">
|
|
350
|
-
<div class="modal-title">Save as Template</div>
|
|
360
|
+
<div class="modal-title" id="add-fav-title">Save as Template</div>
|
|
351
361
|
<div class="modal-sub" id="add-fav-sub">Save this node as a reusable Template — usable in any workflow.</div>
|
|
352
362
|
<div class="modal-field">
|
|
353
363
|
<label for="fav-name">Name</label>
|
package/dist/web/panels.js
CHANGED
|
@@ -421,7 +421,9 @@
|
|
|
421
421
|
if (btn) { btn.disabled = true; btn.textContent = 'Queueing…'; }
|
|
422
422
|
try {
|
|
423
423
|
const { request } = await api('/api/extensions/customize', { method: 'POST', body: JSON.stringify({ instruction }) });
|
|
424
|
-
|
|
424
|
+
// Copy the MARKED form so a pasted ui-customize request is recognized, not run verbatim (#73).
|
|
425
|
+
const line = bridge.markedInstruction ? bridge.markedInstruction(request)
|
|
426
|
+
: bridge.instructionFor ? bridge.instructionFor(request) : instruction;
|
|
425
427
|
const copied = bridge.copyToClipboard ? await bridge.copyToClipboard(line) : false;
|
|
426
428
|
showToast(copied ? 'Queued for your terminal AI · copied to clipboard' : 'Queued for your terminal AI', 'ok');
|
|
427
429
|
if (input) input.value = '';
|
|
@@ -544,14 +546,14 @@
|
|
|
544
546
|
setTimeout(() => $cancel.focus(), 0);
|
|
545
547
|
const done = (result) => {
|
|
546
548
|
$resetModal.classList.remove('show');
|
|
547
|
-
$confirm.onclick = $cancel.onclick = $resetModal.onclick = null;
|
|
549
|
+
$confirm.onclick = $cancel.onclick = $resetModal.onclick = $resetModal.onmousedown = null;
|
|
548
550
|
document.removeEventListener('keydown', onKey, true);
|
|
549
551
|
resolve(result);
|
|
550
552
|
};
|
|
551
553
|
const onKey = (e) => { if (e.key === 'Escape') { e.preventDefault(); done(false); } };
|
|
552
554
|
$confirm.onclick = () => done(true);
|
|
553
555
|
$cancel.onclick = () => done(false);
|
|
554
|
-
$resetModal
|
|
556
|
+
onBackdropDismiss($resetModal, () => done(false));
|
|
555
557
|
document.addEventListener('keydown', onKey, true);
|
|
556
558
|
});
|
|
557
559
|
}
|