wisp-agents 0.4.0 → 0.6.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 +29 -1
- package/README.md +72 -9
- package/bin/wisp.js +182 -69
- package/package.json +15 -4
- package/server/adapters/antigravity.js +155 -0
- package/server/adapters/index.js +6 -2
- package/server/client.js +177 -0
- package/server/index.js +130 -3
- package/server/mcp-wisp.js +164 -0
- package/server/openapi.js +184 -0
- package/server/render.js +100 -0
- package/server/runner.js +2 -0
- package/server/telemetry.js +132 -0
- package/skills/wisp/SKILL.md +55 -0
- package/web/js/app.js +43 -5
- package/web/logos/antigravity-color.svg +1 -0
package/web/js/app.js
CHANGED
|
@@ -67,6 +67,7 @@ const HARNESS_LOGO = {
|
|
|
67
67
|
codex: { file: 'codex-color' },
|
|
68
68
|
opencode: { file: 'opencode', mono: true },
|
|
69
69
|
cursor: { file: 'cursor', mono: true },
|
|
70
|
+
antigravity: { file: 'antigravity-color' },
|
|
70
71
|
};
|
|
71
72
|
function harnessLogo(agent) {
|
|
72
73
|
const l = HARNESS_LOGO[agent];
|
|
@@ -1270,13 +1271,14 @@ function runnerPicker(anchor, { agent, model, effort, savedModel, savedEffort },
|
|
|
1270
1271
|
.map((e) => `<button role="radio" aria-checked="${e === current}" class="${e === current ? 'on' : ''}" data-e="${esc(e)}" title="${e ? `${esc(effortLabel(e))} reasoning effort` : 'Whatever the harness is set to'}">${esc(e ? effortLabel(e) : 'Default')}</button>`)
|
|
1271
1272
|
.join('')}</span>`;
|
|
1272
1273
|
};
|
|
1274
|
+
const markInUse = (id) => {
|
|
1275
|
+
$$('.pk-dot', node).forEach((d) => d.remove());
|
|
1276
|
+
sideRows.find((b) => b.dataset.id === id)?.insertAdjacentHTML('beforeend', '<span class="pk-dot" title="In use"></span>');
|
|
1277
|
+
};
|
|
1273
1278
|
const chooseEffort = (e) => {
|
|
1274
1279
|
const m = modelOf(focusAgent);
|
|
1275
1280
|
if (focusAgent === agent && e === effort) return;
|
|
1276
|
-
if (focusAgent !== agent)
|
|
1277
|
-
$$('.pk-dot', node).forEach((d) => d.remove());
|
|
1278
|
-
sideRows.find((b) => b.dataset.id === focusAgent)?.insertAdjacentHTML('beforeend', '<span class="pk-dot" title="In use"></span>');
|
|
1279
|
-
}
|
|
1281
|
+
if (focusAgent !== agent) markInUse(focusAgent);
|
|
1280
1282
|
agent = focusAgent;
|
|
1281
1283
|
model = m;
|
|
1282
1284
|
effort = e;
|
|
@@ -1336,6 +1338,17 @@ function runnerPicker(anchor, { agent, model, effort, savedModel, savedEffort },
|
|
|
1336
1338
|
if (focus) sideRows.find((b) => b.dataset.id === id)?.focus();
|
|
1337
1339
|
};
|
|
1338
1340
|
|
|
1341
|
+
// Picking a harness applies it straight away with the model and level it shows as selected.
|
|
1342
|
+
const useAgent = (id) => {
|
|
1343
|
+
preview(id);
|
|
1344
|
+
if (id === agent) return;
|
|
1345
|
+
markInUse(id);
|
|
1346
|
+
agent = id;
|
|
1347
|
+
model = savedModel(id);
|
|
1348
|
+
effort = savedEffort(id, model);
|
|
1349
|
+
pick(agent, model, effort);
|
|
1350
|
+
};
|
|
1351
|
+
|
|
1339
1352
|
const close = () => {
|
|
1340
1353
|
node.remove();
|
|
1341
1354
|
anchor.classList.remove('open');
|
|
@@ -1390,6 +1403,7 @@ function runnerPicker(anchor, { agent, model, effort, savedModel, savedEffort },
|
|
|
1390
1403
|
preview(focusAgent, { focus: true });
|
|
1391
1404
|
} else if ((e.key === 'ArrowRight' || e.key === 'Enter') && inSide) {
|
|
1392
1405
|
e.preventDefault();
|
|
1406
|
+
if (e.key === 'Enter') useAgent(focusAgent);
|
|
1393
1407
|
focusModels();
|
|
1394
1408
|
} else if (e.key === 'Enter' && document.activeElement === input && rows()[0]) {
|
|
1395
1409
|
e.preventDefault();
|
|
@@ -1398,7 +1412,7 @@ function runnerPicker(anchor, { agent, model, effort, savedModel, savedEffort },
|
|
|
1398
1412
|
input.focus(); // type-to-search from anywhere in the picker
|
|
1399
1413
|
}
|
|
1400
1414
|
};
|
|
1401
|
-
sideRows.forEach((b) => (b.onclick = () =>
|
|
1415
|
+
sideRows.forEach((b) => (b.onclick = () => useAgent(b.dataset.id)));
|
|
1402
1416
|
list.onclick = (e) => {
|
|
1403
1417
|
const b = e.target.closest('.pk-m');
|
|
1404
1418
|
if (b) choose(b.dataset.id);
|
|
@@ -1701,6 +1715,7 @@ function openSettings() {
|
|
|
1701
1715
|
<label class="custom-term" ${d.terminal === 'custom' ? '' : 'hidden'}><span>Terminal command</span>
|
|
1702
1716
|
<input name="terminalCommand" value="${esc(d.terminalCommand || '')}" placeholder="alacritty --working-directory {cwd} -e {cmd}" spellcheck="false"></label>
|
|
1703
1717
|
<div class="setting"><span>Desktop notifications</span><span class="notif-hint muted xs"></span><button class="switch" id="notif" role="switch"></button></div>
|
|
1718
|
+
<div class="setting"><span>Anonymous usage stats</span><span class="tele-hint muted xs"></span><button class="switch" id="tele" role="switch"></button></div>
|
|
1704
1719
|
<div class="agents">${S.agents
|
|
1705
1720
|
.map((a) => `<div class="agent-row"><span class="dot ${a.available ? 'ok' : 'bad'}"></span><b>${esc(a.name)}</b><span class="muted">${esc(a.available ? a.version : a.error || 'not found')}</span></div>`)
|
|
1706
1721
|
.join('')}<p class="muted xs">Pick the agent next to the model in the launcher. Others plug in via <code>server/adapters</code>.</p></div>
|
|
@@ -1733,6 +1748,28 @@ function openSettings() {
|
|
|
1733
1748
|
paint();
|
|
1734
1749
|
};
|
|
1735
1750
|
paint();
|
|
1751
|
+
// Agent, model, status, timings and scrubbed errors only; never prompts, paths or code.
|
|
1752
|
+
const tele = $('#tele', node);
|
|
1753
|
+
const paintTele = () => {
|
|
1754
|
+
const t = S.config.telemetry || {};
|
|
1755
|
+
tele.setAttribute('aria-checked', !!t.enabled);
|
|
1756
|
+
tele.disabled = !t.available;
|
|
1757
|
+
$('.tele-hint', node).textContent = !t.available ? 'Off (DO_NOT_TRACK, WISP_TELEMETRY=0 or CI)' : 'No prompts, paths or code';
|
|
1758
|
+
};
|
|
1759
|
+
tele.onclick = async () => {
|
|
1760
|
+
await api('/config', { method: 'PATCH', body: { defaults: { telemetry: S.config.telemetry?.enabled ? 'off' : 'on' } } });
|
|
1761
|
+
await loadConfig();
|
|
1762
|
+
paintTele();
|
|
1763
|
+
};
|
|
1764
|
+
paintTele();
|
|
1765
|
+
}
|
|
1766
|
+
|
|
1767
|
+
// Say once that anonymous stats are on, with a way out.
|
|
1768
|
+
function telemetryNotice() {
|
|
1769
|
+
if (!S.config.telemetry?.enabled || S.config.defaults.telemetryNotice === 'seen') return;
|
|
1770
|
+
S.config.defaults.telemetryNotice = 'seen';
|
|
1771
|
+
api('/config', { method: 'PATCH', body: { defaults: { telemetryNotice: 'seen' } } }).catch(() => {});
|
|
1772
|
+
toast('wisp sends anonymous usage stats and error reports. No prompts, paths or code.', { timeout: 10_000, action: { label: 'Settings', run: openSettings } });
|
|
1736
1773
|
}
|
|
1737
1774
|
|
|
1738
1775
|
function shortcuts() {
|
|
@@ -2041,4 +2078,5 @@ window.addEventListener('focus', () => {
|
|
|
2041
2078
|
connect();
|
|
2042
2079
|
route();
|
|
2043
2080
|
$('#prompt')?.focus();
|
|
2081
|
+
telemetryNotice();
|
|
2044
2082
|
})();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Antigravity</title><mask height="23" id="lobe-icons-antigravity-0-_R_0_" maskUnits="userSpaceOnUse" width="24" x="0" y="1"><path d="M21.751 22.607c1.34 1.005 3.35.335 1.508-1.508C17.73 15.74 18.904 1 12.037 1 5.17 1 6.342 15.74.815 21.1c-2.01 2.009.167 2.511 1.507 1.506 5.192-3.517 4.857-9.714 9.715-9.714 4.857 0 4.522 6.197 9.714 9.715z" fill="#fff"></path></mask><g mask="url(#lobe-icons-antigravity-0-_R_0_)"><g filter="url(#lobe-icons-antigravity-1-_R_0_)"><path d="M-1.018-3.992c-.408 3.591 2.686 6.89 6.91 7.37 4.225.48 7.98-2.043 8.387-5.633.408-3.59-2.686-6.89-6.91-7.37-4.225-.479-7.98 2.043-8.387 5.633z" fill="#FFE432"></path></g><g filter="url(#lobe-icons-antigravity-2-_R_0_)"><path d="M15.269 7.747c1.058 4.557 5.691 7.374 10.348 6.293 4.657-1.082 7.575-5.653 6.516-10.21-1.058-4.556-5.691-7.374-10.348-6.292-4.657 1.082-7.575 5.653-6.516 10.21z" fill="#FC413D"></path></g><g filter="url(#lobe-icons-antigravity-3-_R_0_)"><path d="M-12.443 10.804c1.338 4.703 7.36 7.11 13.453 5.378 6.092-1.733 9.947-6.95 8.61-11.652C8.282-.173 2.26-2.58-3.833-.848-9.925.884-13.78 6.1-12.443 10.804z" fill="#00B95C"></path></g><g filter="url(#lobe-icons-antigravity-4-_R_0_)"><path d="M-12.443 10.804c1.338 4.703 7.36 7.11 13.453 5.378 6.092-1.733 9.947-6.95 8.61-11.652C8.282-.173 2.26-2.58-3.833-.848-9.925.884-13.78 6.1-12.443 10.804z" fill="#00B95C"></path></g><g filter="url(#lobe-icons-antigravity-5-_R_0_)"><path d="M-7.608 14.703c3.352 3.424 9.126 3.208 12.896-.483 3.77-3.69 4.108-9.459.756-12.883C2.69-2.087-3.083-1.871-6.853 1.82c-3.77 3.69-4.108 9.458-.755 12.883z" fill="#00B95C"></path></g><g filter="url(#lobe-icons-antigravity-6-_R_0_)"><path d="M9.932 27.617c1.04 4.482 5.384 7.303 9.7 6.3 4.316-1.002 6.971-5.448 5.93-9.93-1.04-4.483-5.384-7.304-9.7-6.301-4.316 1.002-6.971 5.448-5.93 9.93z" fill="#3186FF"></path></g><g filter="url(#lobe-icons-antigravity-7-_R_0_)"><path d="M2.572-8.185C.392-3.329 2.778 2.472 7.9 4.771c5.122 2.3 11.042.227 13.222-4.63 2.18-4.855-.205-10.656-5.327-12.955-5.122-2.3-11.042-.227-13.222 4.63z" fill="#FBBC04"></path></g><g filter="url(#lobe-icons-antigravity-8-_R_0_)"><path d="M-3.267 38.686c-5.277-2.072 3.742-19.117 5.984-24.83 2.243-5.712 8.34-8.664 13.616-6.592 5.278 2.071 11.533 13.482 9.29 19.195-2.242 5.713-23.613 14.298-28.89 12.227z" fill="#3186FF"></path></g><g filter="url(#lobe-icons-antigravity-9-_R_0_)"><path d="M28.71 17.471c-1.413 1.649-5.1.808-8.236-1.878-3.135-2.687-4.531-6.201-3.118-7.85 1.412-1.649 5.1-.808 8.235 1.878s4.532 6.2 3.119 7.85z" fill="#749BFF"></path></g><g filter="url(#lobe-icons-antigravity-10-_R_0_)"><path d="M18.163 9.077c5.81 3.93 12.502 4.19 14.946.577 2.443-3.612-.287-9.727-6.098-13.658-5.81-3.931-12.502-4.19-14.946-.577-2.443 3.612.287 9.727 6.098 13.658z" fill="#FC413D"></path></g><g filter="url(#lobe-icons-antigravity-11-_R_0_)"><path d="M-.915 2.684c-1.44 3.473-.97 6.967 1.05 7.804 2.02.837 4.824-1.3 6.264-4.772 1.44-3.473.97-6.967-1.05-7.804-2.02-.837-4.824 1.3-6.264 4.772z" fill="#FFEE48"></path></g></g><defs><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="17.587" id="lobe-icons-antigravity-1-_R_0_" width="19.838" x="-3.288" y="-11.917"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="1.117"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="38.565" id="lobe-icons-antigravity-2-_R_0_" width="38.9" x="4.251" y="-13.493"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="5.4"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="36.517" id="lobe-icons-antigravity-3-_R_0_" width="40.955" x="-21.889" y="-10.592"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="4.591"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="36.517" id="lobe-icons-antigravity-4-_R_0_" width="40.955" x="-21.889" y="-10.592"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="4.591"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="36.595" id="lobe-icons-antigravity-5-_R_0_" width="36.632" x="-19.099" y="-10.278"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="4.591"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="34.087" id="lobe-icons-antigravity-6-_R_0_" width="33.533" x=".981" y="8.758"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="4.363"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="35.276" id="lobe-icons-antigravity-7-_R_0_" width="35.978" x="-6.143" y="-21.659"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="3.954"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="46.523" id="lobe-icons-antigravity-8-_R_0_" width="45.114" x="-11.96" y="-.46"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="3.531"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="24.054" id="lobe-icons-antigravity-9-_R_0_" width="25.094" x="10.485" y=".58"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="3.159"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="30.007" id="lobe-icons-antigravity-10-_R_0_" width="33.508" x="5.833" y="-12.467"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="2.669"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="26.151" id="lobe-icons-antigravity-11-_R_0_" width="22.194" x="-8.355" y="-8.876"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="3.303"></feGaussianBlur></filter></defs></svg>
|