liteagents 2.6.0 → 2.8.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 +53 -0
- package/LICENSE +202 -21
- package/README.md +6 -4
- package/installer/cli.js +4 -1
- package/package.json +2 -2
- package/packages/ampcode/commands/live-canvas/README.md +38 -47
- package/packages/{claude/skills/live-canvas/templates/demo → ampcode/commands/live-canvas/dev}/post-variants.html +8 -3
- package/packages/ampcode/commands/live-canvas/templates/lab-banner.html +6 -0
- package/packages/ampcode/commands/live-canvas/templates/overlay-vanilla.js +64 -6
- package/packages/ampcode/commands/live-canvas.md +140 -161
- package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/.claude-plugin/plugin.json +1 -1
- package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/README.md +2 -2
- package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/package-lock.json +13 -13
- package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/package.json +1 -1
- package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/schema.json +1 -1
- package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/server.js +320 -27
- package/packages/claude/plugins/live-canvas-marketplace/setup.sh +83 -24
- package/packages/claude/skills/live-canvas/README.md +53 -57
- package/packages/claude/skills/live-canvas/SKILL.md +122 -158
- package/packages/{ampcode/commands/live-canvas/templates/demo → claude/skills/live-canvas/dev}/post-variants.html +8 -3
- package/packages/claude/skills/live-canvas/templates/lab-banner.html +6 -0
- package/packages/claude/skills/live-canvas/templates/overlay-vanilla.js +64 -6
- package/packages/droid/commands/live-canvas/README.md +38 -47
- package/packages/droid/commands/live-canvas/{templates/demo → dev}/post-variants.html +8 -3
- package/packages/droid/commands/live-canvas/templates/lab-banner.html +6 -0
- package/packages/droid/commands/live-canvas/templates/overlay-vanilla.js +64 -6
- package/packages/droid/commands/live-canvas.md +140 -161
- package/packages/opencode/command/live-canvas/README.md +38 -47
- package/packages/opencode/command/live-canvas/{templates/demo → dev}/post-variants.html +8 -3
- package/packages/opencode/command/live-canvas/templates/lab-banner.html +6 -0
- package/packages/opencode/command/live-canvas/templates/overlay-vanilla.js +64 -6
- package/packages/opencode/command/live-canvas.md +140 -161
- package/packages/ampcode/commands/live-canvas/templates/.claude/settings.local.json +0 -8
- package/packages/ampcode/commands/live-canvas/templates/feedback-react/FeedbackOverlay.tsx +0 -1299
- package/packages/ampcode/commands/live-canvas/templates/feedback-react/format-utils.ts +0 -283
- package/packages/ampcode/commands/live-canvas/templates/feedback-react/index.ts +0 -62
- package/packages/ampcode/commands/live-canvas/templates/feedback-react/selector-utils.ts +0 -423
- package/packages/ampcode/commands/live-canvas/templates/feedback-react/types.ts +0 -118
- package/packages/claude/skills/live-canvas/INTEGRATION_NOTES.md +0 -210
- package/packages/claude/skills/live-canvas/templates/.claude/settings.local.json +0 -8
- package/packages/claude/skills/live-canvas/templates/feedback-react/FeedbackOverlay.tsx +0 -1299
- package/packages/claude/skills/live-canvas/templates/feedback-react/format-utils.ts +0 -283
- package/packages/claude/skills/live-canvas/templates/feedback-react/index.ts +0 -62
- package/packages/claude/skills/live-canvas/templates/feedback-react/selector-utils.ts +0 -423
- package/packages/claude/skills/live-canvas/templates/feedback-react/types.ts +0 -118
- package/packages/droid/commands/live-canvas/templates/.claude/settings.local.json +0 -8
- package/packages/droid/commands/live-canvas/templates/feedback-react/FeedbackOverlay.tsx +0 -1299
- package/packages/droid/commands/live-canvas/templates/feedback-react/format-utils.ts +0 -283
- package/packages/droid/commands/live-canvas/templates/feedback-react/index.ts +0 -62
- package/packages/droid/commands/live-canvas/templates/feedback-react/selector-utils.ts +0 -423
- package/packages/droid/commands/live-canvas/templates/feedback-react/types.ts +0 -118
- package/packages/opencode/command/live-canvas/templates/.claude/settings.local.json +0 -8
- package/packages/opencode/command/live-canvas/templates/feedback-react/FeedbackOverlay.tsx +0 -1299
- package/packages/opencode/command/live-canvas/templates/feedback-react/format-utils.ts +0 -283
- package/packages/opencode/command/live-canvas/templates/feedback-react/index.ts +0 -62
- package/packages/opencode/command/live-canvas/templates/feedback-react/selector-utils.ts +0 -423
- package/packages/opencode/command/live-canvas/templates/feedback-react/types.ts +0 -118
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* Batch — saves accumulate locally; Submit All POSTs JSONL to batchEndpoint
|
|
24
24
|
* (or downloads the file if no endpoint configured)
|
|
25
25
|
*
|
|
26
|
-
* Payload schema: v1.0
|
|
26
|
+
* Payload schema: v1.0 (see live-canvas-channel/schema.json).
|
|
27
27
|
*/
|
|
28
28
|
(function () {
|
|
29
29
|
'use strict';
|
|
@@ -38,11 +38,16 @@
|
|
|
38
38
|
batchEndpoint: null,
|
|
39
39
|
active: false,
|
|
40
40
|
picking: false,
|
|
41
|
+
minimized: false, // collapsed to a single bubble?
|
|
41
42
|
comments: [], // Comment[] — only items pending batch submit
|
|
42
43
|
overall: '',
|
|
43
44
|
pinCounts: Object.create(null), // `${variant}|${selector}` → placed-pin count
|
|
44
45
|
};
|
|
45
46
|
|
|
47
|
+
// Persist collapse state across hot reloads / variant switches.
|
|
48
|
+
const MIN_KEY = 'lc-minimized';
|
|
49
|
+
try { state.minimized = sessionStorage.getItem(MIN_KEY) === '1'; } catch (_) {}
|
|
50
|
+
|
|
46
51
|
// ---------- utilities ----------
|
|
47
52
|
|
|
48
53
|
const uid = () => `c-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
|
|
@@ -134,7 +139,8 @@
|
|
|
134
139
|
const css = `
|
|
135
140
|
[${DATA_OVERLAY}] { font-family: system-ui, sans-serif; box-sizing: border-box; }
|
|
136
141
|
.${PFX}-bar { position: fixed; right: 16px; bottom: 16px; z-index: 2147483646;
|
|
137
|
-
display: flex; gap: 8px; }
|
|
142
|
+
display: flex; gap: 8px; align-items: center; }
|
|
143
|
+
.${PFX}-bar[data-hidden='1'] { display: none; }
|
|
138
144
|
.${PFX}-btn { border: 0; border-radius: 999px; padding: 10px 16px;
|
|
139
145
|
font-weight: 600; font-size: 13px; cursor: pointer;
|
|
140
146
|
box-shadow: 0 4px 12px rgba(0,0,0,.25); font-family: inherit; }
|
|
@@ -146,9 +152,22 @@
|
|
|
146
152
|
.${PFX}-submit .${PFX}-count { display: inline-block; background: #d946ef; color: #fff;
|
|
147
153
|
border-radius: 999px; min-width: 18px; padding: 0 6px; margin-left: 6px;
|
|
148
154
|
font-size: 11px; line-height: 18px; text-align: center; }
|
|
155
|
+
.${PFX}-min { width: 32px; height: 32px; padding: 0; border-radius: 50%;
|
|
156
|
+
background: #fff; color: #111; border: 1px solid #e4e4e7; font-size: 16px;
|
|
157
|
+
line-height: 1; display: flex; align-items: center; justify-content: center; }
|
|
158
|
+
.${PFX}-bubble { position: fixed; right: 16px; bottom: 16px; z-index: 2147483646;
|
|
159
|
+
width: 36px; height: 36px; border-radius: 50%; border: 0; cursor: pointer;
|
|
160
|
+
background: #111; color: #fff; font-size: 14px; font-weight: 700;
|
|
161
|
+
box-shadow: 0 4px 12px rgba(0,0,0,.25); display: none; }
|
|
162
|
+
.${PFX}-bubble[data-show='1'] { display: flex; align-items: center; justify-content: center; }
|
|
149
163
|
.${PFX}-mode { position: fixed; right: 16px; bottom: 60px; z-index: 2147483646;
|
|
150
164
|
background: rgba(0,0,0,.75); color: #fff; font-size: 11px;
|
|
151
165
|
padding: 4px 8px; border-radius: 4px; pointer-events: none; }
|
|
166
|
+
.${PFX}-mode[data-hidden='1'] { display: none; }
|
|
167
|
+
@media (max-width: 640px) {
|
|
168
|
+
.${PFX}-popup { left: 8px !important; right: 8px; width: auto !important; max-width: none; }
|
|
169
|
+
.${PFX}-submit-card { width: 100% !important; max-width: calc(100vw - 24px); }
|
|
170
|
+
}
|
|
152
171
|
.${PFX}-picking { cursor: crosshair !important; }
|
|
153
172
|
.${PFX}-hover-outline { outline: 2px solid #d946ef !important; outline-offset: 2px; }
|
|
154
173
|
.${PFX}-pin { position: absolute; z-index: 2147483645; width: 24px; height: 24px;
|
|
@@ -235,9 +254,33 @@
|
|
|
235
254
|
|
|
236
255
|
// ---------- UI ----------
|
|
237
256
|
|
|
238
|
-
let toggleBtn, submitBtn, modeBadge, toast, popupNode;
|
|
257
|
+
let toggleBtn, submitBtn, minBtn, bubbleBtn, barNode, modeBadge, toast, popupNode;
|
|
239
258
|
let hoverEl = null;
|
|
240
259
|
|
|
260
|
+
const applyMinimized = () => {
|
|
261
|
+
if (!barNode) return;
|
|
262
|
+
barNode.setAttribute('data-hidden', state.minimized ? '1' : '0');
|
|
263
|
+
modeBadge.setAttribute('data-hidden', state.minimized ? '1' : '0');
|
|
264
|
+
bubbleBtn.setAttribute('data-show', state.minimized ? '1' : '0');
|
|
265
|
+
// state.mode can flip live → batch mid-session if a push fails; refresh
|
|
266
|
+
// the badge each time we re-show it so it doesn't lie.
|
|
267
|
+
if (!state.minimized) {
|
|
268
|
+
modeBadge.textContent = `${state.mode === 'live' ? 'LIVE' : 'JSON'} mode`;
|
|
269
|
+
}
|
|
270
|
+
// Cancel an active pick when collapsing — otherwise clicks land on the page.
|
|
271
|
+
if (state.minimized && state.picking) {
|
|
272
|
+
state.picking = false;
|
|
273
|
+
setPickingCursor(false);
|
|
274
|
+
clearHover();
|
|
275
|
+
toggleBtn.setAttribute('data-active', '0');
|
|
276
|
+
toggleBtn.textContent = 'Add Feedback';
|
|
277
|
+
}
|
|
278
|
+
closePopup();
|
|
279
|
+
try { sessionStorage.setItem(MIN_KEY, state.minimized ? '1' : '0'); } catch (_) {}
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
const setMinimized = (v) => { state.minimized = !!v; applyMinimized(); };
|
|
283
|
+
|
|
241
284
|
const pendingCount = () => state.comments.filter(c => !c.delivered).length;
|
|
242
285
|
|
|
243
286
|
const refreshSubmitBtn = () => {
|
|
@@ -442,14 +485,29 @@
|
|
|
442
485
|
submitBtn = el('button', { class: `${PFX}-btn ${PFX}-submit`, on: {
|
|
443
486
|
click: openSubmitModal,
|
|
444
487
|
}});
|
|
488
|
+
minBtn = el('button', {
|
|
489
|
+
class: `${PFX}-btn ${PFX}-min`,
|
|
490
|
+
title: 'Hide overlay',
|
|
491
|
+
'aria-label': 'Hide overlay',
|
|
492
|
+
on: { click: () => setMinimized(true) },
|
|
493
|
+
}, '−');
|
|
445
494
|
refreshSubmitBtn();
|
|
446
|
-
|
|
447
|
-
|
|
495
|
+
barNode = el('div', { class: `${PFX}-bar` }, [minBtn, submitBtn, toggleBtn]);
|
|
496
|
+
bubbleBtn = el('button', {
|
|
497
|
+
class: `${PFX}-bubble`,
|
|
498
|
+
title: 'Show feedback overlay',
|
|
499
|
+
'aria-label': 'Show feedback overlay',
|
|
500
|
+
on: { click: () => setMinimized(false) },
|
|
501
|
+
}, '◐');
|
|
502
|
+
modeBadge = el('div', { class: `${PFX}-mode` }, `${state.mode === 'live' ? 'LIVE' : 'JSON'} mode`);
|
|
448
503
|
toast = el('div', { class: `${PFX}-toast` });
|
|
449
|
-
document.body.appendChild(
|
|
504
|
+
document.body.appendChild(barNode);
|
|
505
|
+
document.body.appendChild(bubbleBtn);
|
|
450
506
|
document.body.appendChild(modeBadge);
|
|
451
507
|
document.body.appendChild(toast);
|
|
452
508
|
|
|
509
|
+
applyMinimized();
|
|
510
|
+
|
|
453
511
|
document.addEventListener('mousemove', onMouseMove, true);
|
|
454
512
|
document.addEventListener('click', onClick, true);
|
|
455
513
|
};
|