wisp-agents 0.15.0 → 0.16.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/CHANGELOG.md +39 -1
- package/README.md +28 -12
- package/bin/wisp.js +3 -2
- package/package.json +3 -3
- package/server/adapters/antigravity.js +2 -2
- package/server/adapters/claude.js +31 -50
- package/server/adapters/codex.js +2 -2
- package/server/adapters/common.js +14 -34
- package/server/adapters/cursor.js +2 -2
- package/server/adapters/grok.js +2 -2
- package/server/adapters/index.js +16 -1
- package/server/adapters/opencode.js +47 -6
- package/server/checkpoint.js +12 -68
- package/server/client.js +5 -3
- package/server/git.js +9 -4
- package/server/handoff.js +70 -0
- package/server/http/respond.js +59 -0
- package/server/http/router.js +64 -0
- package/server/http/static.js +36 -0
- package/server/index.js +138 -1216
- package/server/machines/bootstrap.js +56 -0
- package/server/machines/hosts.js +127 -0
- package/server/machines.js +7 -179
- package/server/mcp-wisp.js +17 -5
- package/server/openapi.js +33 -2
- package/server/paths.js +32 -0
- package/server/preferences.js +2 -6
- package/server/proc.js +54 -0
- package/server/recipes.js +2 -4
- package/server/remote.js +14 -14
- package/server/router.js +7 -3
- package/server/routes/auto.js +29 -0
- package/server/routes/automations.js +92 -0
- package/server/routes/internal.js +56 -0
- package/server/routes/machines.js +43 -0
- package/server/routes/meta.js +76 -0
- package/server/routes/proxy.js +47 -0
- package/server/routes/sessions.js +339 -0
- package/server/routes/settings.js +144 -0
- package/server/routes/ship.js +61 -0
- package/server/routes/uploads.js +19 -0
- package/server/runner.js +87 -36
- package/server/services/auto.js +67 -0
- package/server/services/feedback.js +53 -0
- package/server/services/install.js +69 -0
- package/server/services/launch.js +127 -0
- package/server/services/phone.js +65 -0
- package/server/services/ship.js +82 -0
- package/server/services/telemetry.js +34 -0
- package/server/services/uploads.js +59 -0
- package/server/services/webhooks.js +28 -0
- package/server/store.js +5 -3
- package/server/subagents.js +5 -4
- package/server/telemetry.js +1 -1
- package/server/terminal.js +2 -1
- package/server/triggers.js +4 -6
- package/server/update.js +4 -3
- package/server/util.js +42 -0
- package/server/welcome.js +1 -1
- package/web/css/auto.css +29 -0
- package/web/css/automations.css +71 -0
- package/web/css/base.css +83 -0
- package/web/css/blocks.css +461 -0
- package/web/css/composer.css +62 -0
- package/web/css/feed.css +208 -0
- package/web/css/launcher.css +204 -0
- package/web/css/layout.css +61 -0
- package/web/css/machines.css +125 -0
- package/web/css/modals.css +176 -0
- package/web/css/palette.css +79 -0
- package/web/css/responsive.css +35 -0
- package/web/css/ship.css +95 -0
- package/web/css/subagents.css +130 -0
- package/web/css/tokens.css +115 -0
- package/web/index.html +16 -1
- package/web/js/app.js +28 -5237
- package/web/js/core/api.js +25 -0
- package/web/js/core/bus.js +28 -0
- package/web/js/core/dom.js +7 -0
- package/web/js/core/format.js +27 -0
- package/web/js/core/state.js +43 -0
- package/web/js/features/actions.js +339 -0
- package/web/js/features/attachments.js +115 -0
- package/web/js/features/auto.js +54 -0
- package/web/js/features/automations.js +305 -0
- package/web/js/features/commands.js +123 -0
- package/web/js/features/compare.js +104 -0
- package/web/js/features/composer.js +311 -0
- package/web/js/features/feed.js +400 -0
- package/web/js/features/feedback.js +127 -0
- package/web/js/features/keys.js +83 -0
- package/web/js/features/launcher.js +559 -0
- package/web/js/features/live.js +91 -0
- package/web/js/features/machines.js +313 -0
- package/web/js/features/memory.js +154 -0
- package/web/js/features/notify.js +36 -0
- package/web/js/features/phone.js +124 -0
- package/web/js/features/places.js +38 -0
- package/web/js/features/projects.js +284 -0
- package/web/js/features/runner-picker.js +233 -0
- package/web/js/features/runners.js +161 -0
- package/web/js/features/scroll.js +75 -0
- package/web/js/features/settings.js +390 -0
- package/web/js/features/setup.js +94 -0
- package/web/js/features/ship.js +122 -0
- package/web/js/features/team.js +386 -0
- package/web/js/features/turns.js +401 -0
- package/web/js/features/update.js +48 -0
- package/web/js/features/usage.js +75 -0
- package/web/js/ui/kbd.js +46 -0
- package/web/js/ui/overlay.js +38 -0
- package/web/js/ui/popover.js +52 -0
- package/web/js/ui/toast.js +23 -0
- package/web/css/app.css +0 -1910
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Menus and popovers floating over the page. A mousedown anywhere else closes them; the button
|
|
2
|
+
// that opened one (`anchor`) doesn't count, so clicking it again can toggle. Escape closes the
|
|
3
|
+
// newest one, wherever focus is, and puts focus back on its anchor. Callers build and position
|
|
4
|
+
// the node; this appends it and owns closing.
|
|
5
|
+
//
|
|
6
|
+
// anchor the button that opened it
|
|
7
|
+
// keep selector for other floating parts (a picker it opened) whose clicks keep it open
|
|
8
|
+
// capture watch for outside clicks in the capture phase
|
|
9
|
+
// onClose runs once it's gone
|
|
10
|
+
//
|
|
11
|
+
// Returns close, which is also set as node.close.
|
|
12
|
+
|
|
13
|
+
const stack = []; // open popovers, newest last
|
|
14
|
+
|
|
15
|
+
document.addEventListener(
|
|
16
|
+
'keydown',
|
|
17
|
+
(e) => {
|
|
18
|
+
if (e.key !== 'Escape' || !stack.length) return;
|
|
19
|
+
// Only the newest: a picker opened from the subagents popover closes alone. Nothing behind it
|
|
20
|
+
// (the page's own Escape, which collapses the focused card) sees the key.
|
|
21
|
+
e.preventDefault();
|
|
22
|
+
e.stopImmediatePropagation();
|
|
23
|
+
const top = stack.at(-1);
|
|
24
|
+
top.close();
|
|
25
|
+
top.anchor?.focus();
|
|
26
|
+
},
|
|
27
|
+
true,
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
export function popover(node, { anchor, keep, capture = false, onClose } = {}) {
|
|
31
|
+
let open = true;
|
|
32
|
+
const outside = (e) => {
|
|
33
|
+
if (node.contains(e.target) || anchor?.contains(e.target) || (keep && e.target.closest?.(keep))) return;
|
|
34
|
+
close();
|
|
35
|
+
};
|
|
36
|
+
const entry = { close, anchor };
|
|
37
|
+
function close() {
|
|
38
|
+
if (!open) return;
|
|
39
|
+
open = false;
|
|
40
|
+
clearTimeout(arm);
|
|
41
|
+
stack.splice(stack.indexOf(entry), 1);
|
|
42
|
+
node.remove();
|
|
43
|
+
document.removeEventListener('mousedown', outside, capture);
|
|
44
|
+
onClose?.();
|
|
45
|
+
}
|
|
46
|
+
// Not yet: the mousedown that opened it is still going on.
|
|
47
|
+
const arm = setTimeout(() => document.addEventListener('mousedown', outside, capture));
|
|
48
|
+
stack.push(entry);
|
|
49
|
+
node.close = close;
|
|
50
|
+
document.body.append(node);
|
|
51
|
+
return close;
|
|
52
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { $, el } from '../core/dom.js';
|
|
2
|
+
import { esc } from '../md.js';
|
|
3
|
+
|
|
4
|
+
export function toast(html, { tone = '', action, timeout = 4200 } = {}) {
|
|
5
|
+
const t = el(`<div class="toast ${tone}"><span>${html}</span>${action ? `<button class="link">${esc(action.label)}</button>` : ''}</div>`);
|
|
6
|
+
if (action) t.querySelector('button').onclick = () => (action.run(), t.remove());
|
|
7
|
+
$('#toasts').append(t);
|
|
8
|
+
setTimeout(() => t.classList.add('out'), timeout);
|
|
9
|
+
setTimeout(() => t.remove(), timeout + 400);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// An error (usually the server refusing something) as a red toast.
|
|
13
|
+
export const toastError = (err, opts) => toast(esc(err.message), { tone: 'bad', ...opts });
|
|
14
|
+
|
|
15
|
+
// Run an action that talks to the server; a failure shows as a red toast instead of throwing.
|
|
16
|
+
// Resolves to what `fn` returns, or undefined when it failed.
|
|
17
|
+
export async function tryApi(fn, opts) {
|
|
18
|
+
try {
|
|
19
|
+
return await fn();
|
|
20
|
+
} catch (err) {
|
|
21
|
+
toastError(err, opts);
|
|
22
|
+
}
|
|
23
|
+
}
|