dsh-comfyui-rp 0.2.5 → 0.2.6

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/README.md CHANGED
@@ -56,6 +56,8 @@ dsh plugin --profile web add git+https://github.com/bmhty123/dsh-comfyui-rp.git
56
56
  - **临时手动出一张**:悬浮球 → 铅笔菜单 →「请求生成」,读来源会话的最新正文。
57
57
  - **只重做一张**:图片框 → 重新生成 →「仅此图」;整套重来选「全部」。
58
58
  - **找图**:图库 → 当前会话 / 全部 / 收藏夹 / 回收站。
59
+ - **一键找菜单**:在图片上单击一下,四角按钮和铅笔菜单一起亮出来,5 秒没操作自动收回;再点铅笔就能收起。
60
+ - **调图片框大小**:鼠标滚轮,或触屏双指捏合(以两指中点为中心放大缩小)。
59
61
  - **会话没更新**:概览右上「检测」,或设置里会话旁的「刷新」。
60
62
  - **清理跟图定位**:图片框 → 更多 →「清空定位」,只清当前会话,之后按比例重新分配。
61
63
 
package/docs/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # 更新记录
2
2
 
3
+ ## 0.2.6
4
+
5
+ - **单击图片框亮出所有菜单**:在图片上单击一下,四角按钮(固定左侧 / 悬浮左侧 / 右侧栏看图 / 收起)和左下角铅笔展开的那排菜单会一起出现,不用先把鼠标挪到角上。
6
+ - 亮起来之后,框里只要还有操作(移动、点击、滚轮、捏合、点菜单)就一直续着;**5 秒没有操作自动收回**,回到原来的「鼠标靠近角落才出现」。
7
+ - 手动再点一下铅笔把菜单关掉会立刻收回,不用等 5 秒。
8
+ - 双击收起图片框不会先闪一层菜单(第二下点击会撤掉待亮的菜单)。
9
+ - **支持双指捏合缩放**:触屏 / 触控板上两指捏合可以放大缩小图片框(之前只认滚轮)。
10
+ - 以两指中点为中心缩放,捏合时两指一起移动就跟着平移。
11
+ - 缩放范围和滚轮完全一致(不会小于 280×360,也不会超出视口);停靠在左侧时捏合调的是停靠宽度。
12
+ - 两根手指都在图片框里才接管,框外双指缩放还是缩放页面。
13
+ - 捏合期间不会误拖动图片框,捏合结束才写本地存储。
14
+
3
15
  ## 0.2.5
4
16
 
5
17
  - **修「只收到时间戳、正文没跟着来」**:自动投递前先等目标会话空闲(最多 15 秒)。有些宿主(例如带自动续写的 Tavern)会让会话一直有事在跑,这时 `queue` 投递的正文会被排到下一轮,而当前这一轮模型只看到时间上下文注入的那三行。
package/lib/client.js CHANGED
@@ -221,6 +221,71 @@ window.__ModuleLoader__.load({
221
221
 
222
222
  function clamp(v, lo, hi) { return Math.max(lo, Math.min(hi, Number(v) || 0)); }
223
223
 
224
+ /**
225
+ * 双指捏合用的框尺寸算法(纯函数,便于离线测试)。
226
+ * p: { x, y, w, h, anchorX, anchorY } —— 捏合开始时框的视口坐标 + 要钉住的点;
227
+ * factor: 两指当前距离 / 起始距离;midX/midY: 两指当前中点。
228
+ * 返回新的 { x, y, w, h, factor }:尺寸按比例缩放后被夹在「不小于 280×360(或视口更小)
229
+ * 不大于视口」之间,并保证 anchor 在框内的相对位置始终落在 mid 上。
230
+ */
231
+ function scaleFrameAround(p, factor, midX, midY, vw, vh) {
232
+ var baseW = Math.max(1, Number(p && p.w) || 1);
233
+ var baseH = Math.max(1, Number(p && p.h) || 1);
234
+ var maxW = Math.max(1, Number(vw) || 1);
235
+ var maxH = Math.max(1, Number(vh) || 1);
236
+ var minW = Math.min(280, maxW);
237
+ var minH = Math.min(360, maxH);
238
+ var maxF = Math.min(maxW / baseW, maxH / baseH);
239
+ var minF = Math.min(maxF, Math.max(minW / baseW, minH / baseH));
240
+ var lo = Math.min(minF, maxF);
241
+ var hi = Math.max(minF, maxF);
242
+ var f = Number(factor) || 1;
243
+ if (f < lo) f = lo;
244
+ if (f > hi) f = hi;
245
+ var nw = Math.max(1, baseW * f);
246
+ var nh = Math.max(1, baseH * f);
247
+ var rx = Math.max(0, Math.min(1, ((Number(p && p.anchorX) || 0) - (Number(p && p.x) || 0)) / baseW));
248
+ var ry = Math.max(0, Math.min(1, ((Number(p && p.anchorY) || 0) - (Number(p && p.y) || 0)) / baseH));
249
+ var nx = (Number(midX) || 0) - rx * nw;
250
+ var ny = (Number(midY) || 0) - ry * nh;
251
+ return {
252
+ factor: f,
253
+ w: nw,
254
+ h: nh,
255
+ x: Math.max(0, Math.min(Math.max(0, maxW - nw), nx)),
256
+ y: Math.max(0, Math.min(Math.max(0, maxH - nh), ny)),
257
+ };
258
+ }
259
+
260
+ /**
261
+ * 双指捏合的一步(纯函数,便于离线测试)。
262
+ * p 是捏合起点快照:{ dist, midX, midY, w, h, x, y, docked, dockW, dockMax }
263
+ * a / b 是当前两指的 { clientX, clientY };dockMin 是停靠最小宽度。
264
+ * 返回 null(这一步不用动)、{ docked: true, dockW } 或 { docked: false, x, y, w, h, factor }。
265
+ */
266
+ function pinchFrameStep(p, a, b, vw, vh, dockMin) {
267
+ if (!p || !p.active || !a || !b) return null;
268
+ var dx = a.clientX - b.clientX;
269
+ var dy = a.clientY - b.clientY;
270
+ var d = Math.sqrt(dx * dx + dy * dy);
271
+ if (!(d > 1)) return null;
272
+ var factor = d / Math.max(1, Number(p.dist) || 1);
273
+ if (!isFinite(factor) || factor <= 0) return null;
274
+ if (p.docked) {
275
+ // 停靠时宽度就是框宽,捏合和滚轮一样调停靠宽度。
276
+ var lo = Math.max(1, Number(dockMin) || 1);
277
+ var hi = Math.max(lo, Number(p.dockMax) || 0);
278
+ return {
279
+ docked: true,
280
+ dockW: Math.max(lo, Math.min(hi, Math.round((Number(p.dockW) || 0) * factor))),
281
+ };
282
+ }
283
+ var sc = scaleFrameAround({
284
+ x: p.x, y: p.y, w: p.w, h: p.h, anchorX: p.midX, anchorY: p.midY,
285
+ }, factor, (a.clientX + b.clientX) / 2, (a.clientY + b.clientY) / 2, vw, vh);
286
+ return { docked: false, x: sc.x, y: sc.y, w: sc.w, h: sc.h, factor: sc.factor };
287
+ }
288
+
224
289
  /**
225
290
  * 自动补图的全局状态:逻辑在 FloatBall 里跑(它一直在,负责检测纯黑图),
226
291
  * 但「停止」按钮要能出现在右侧栏面板里,所以两边共享这一份。
@@ -1375,6 +1440,8 @@ window.__ModuleLoader__.load({
1375
1440
  var [followOn, setFollowOn] = useState(function () { return prefs.follow !== false; });
1376
1441
  var [pointerFollow, setPointerFollow] = useState(function () { return prefs.pointerFollow === true; });
1377
1442
  var [dragging, setDragging] = useState(false);
1443
+ // 单击图片框临时亮起所有菜单(四角按钮 + 铅笔菜单),到点自动收回。
1444
+ var [peek, setPeek] = useState(false);
1378
1445
  var [menuClipped, setMenuClipped] = useState(false);
1379
1446
  var [subPos, setSubPos] = useState(null);
1380
1447
  var [recycleBusy, setRecycleBusy] = useState(false);
@@ -1383,6 +1450,13 @@ window.__ModuleLoader__.load({
1383
1450
  var blRef = useRef(null);
1384
1451
  var menuRef = useRef(null);
1385
1452
  var moreRef = useRef(null);
1453
+ // 单击亮菜单的计时器 / 是否处于亮菜单状态 / 这次按下是不是落在菜单按钮上。
1454
+ var peekRef = useRef(false);
1455
+ var peekTimer = useRef(null);
1456
+ var peekDelay = useRef(null);
1457
+ var uiDownRef = useRef(false);
1458
+ // 双指捏合:开始时的两指距离、中点、框尺寸都记下来,移动时按比例算绝对值,避免累积误差。
1459
+ var pinchRef = useRef({ active: false });
1386
1460
  var wheelTimer = useRef(null);
1387
1461
  var dockDrag = useRef(null);
1388
1462
  var reserveDrag = useRef(null);
@@ -1540,6 +1614,47 @@ window.__ModuleLoader__.load({
1540
1614
  var persistPrefs = function () {
1541
1615
  setPrefs(function (old) { saveFloatPrefs(old); return old; });
1542
1616
  };
1617
+
1618
+ /* ---------------------------------------------------------------
1619
+ * 单击图片框:把四角按钮和铅笔菜单一起亮出来,5 秒内框里没操作就收回。
1620
+ * 全部走 peekRef + 定时器,不依赖重渲染时序,所以连续点 / 拖 / 滚轮都不会串。
1621
+ * ------------------------------------------------------------- */
1622
+ var PEEK_MS = 5000;
1623
+ // 亮菜单稍微等一下:双击收框时不会被第一下点击先闪出一层菜单。
1624
+ var PEEK_DELAY_MS = 240;
1625
+ var clearPeekTimer = function () {
1626
+ if (peekTimer.current) { clearTimeout(peekTimer.current); peekTimer.current = null; }
1627
+ if (peekDelay.current) { clearTimeout(peekDelay.current); peekDelay.current = null; }
1628
+ };
1629
+ var endPeek = function () {
1630
+ clearPeekTimer();
1631
+ if (!peekRef.current) return;
1632
+ peekRef.current = false;
1633
+ setPeek(false);
1634
+ setMenuOpen(false);
1635
+ setSubOpen(false);
1636
+ setRegenOpen(false);
1637
+ };
1638
+ var bumpPeek = function () {
1639
+ if (!peekRef.current) return;
1640
+ clearPeekTimer();
1641
+ peekTimer.current = setTimeout(endPeek, PEEK_MS);
1642
+ };
1643
+ var startPeek = function () {
1644
+ if (peekRef.current) { bumpPeek(); return; }
1645
+ // 已经有一次点击在等:这是双击收框的前半截,直接撤掉,别让菜单闪一下。
1646
+ if (peekDelay.current) { clearPeekTimer(); return; }
1647
+ clearPeekTimer();
1648
+ peekDelay.current = setTimeout(function () {
1649
+ peekDelay.current = null;
1650
+ peekRef.current = true;
1651
+ setPeek(true);
1652
+ setMenuOpen(true);
1653
+ setSubOpen(false);
1654
+ setRegenOpen(false);
1655
+ bumpPeek();
1656
+ }, PEEK_DELAY_MS);
1657
+ };
1543
1658
  var showToast = function (text, tone) {
1544
1659
  var id = (toastSeq.current += 1);
1545
1660
  setToasts(function (old) {
@@ -3187,6 +3302,7 @@ window.__ModuleLoader__.load({
3187
3302
  if (ev.clientX < r.left || ev.clientX > r.right || ev.clientY < r.top || ev.clientY > r.bottom) return;
3188
3303
  var overDockGrip = !!(ev.target && ev.target.closest && ev.target.closest(".ac-dockgrip"));
3189
3304
  if (!overDockGrip && ev.target && ev.target.closest && ev.target.closest("[data-ui]")) return;
3305
+ bumpPeek();
3190
3306
  ev.preventDefault();
3191
3307
  var ds = dockStateRef.current;
3192
3308
  if (ds.docked) {
@@ -3250,6 +3366,115 @@ window.__ModuleLoader__.load({
3250
3366
  };
3251
3367
  }, []);
3252
3368
 
3369
+ // 双指捏合缩放:和滚轮走同一条改框尺寸的路径,只是锚点换成两指中点,
3370
+ // 顺带支持捏合时两指一起平移。挂在 window 上(和滚轮一致),
3371
+ // 切会话 / 重挂图片框都不会丢监听。
3372
+ useEffect(function () {
3373
+ if (typeof window === "undefined" || typeof window.addEventListener !== "function") return undefined;
3374
+ var dist2 = function (a, b) {
3375
+ var dx = a.clientX - b.clientX;
3376
+ var dy = a.clientY - b.clientY;
3377
+ return Math.sqrt(dx * dx + dy * dy);
3378
+ };
3379
+ var mid2 = function (a, b) {
3380
+ return { x: (a.clientX + b.clientX) / 2, y: (a.clientY + b.clientY) / 2 };
3381
+ };
3382
+ var onTouchStart = function (ev) {
3383
+ if (!openRef.current || hiddenRef.current) return;
3384
+ // 单指还是原来的拖动;只有两根手指落在框里才当成捏合。
3385
+ if (!ev.touches || ev.touches.length !== 2) return;
3386
+ var el = frameRef.current;
3387
+ if (!el || !el.getBoundingClientRect) return;
3388
+ var r = el.getBoundingClientRect();
3389
+ if (!r.width || !r.height) return;
3390
+ var a = ev.touches[0];
3391
+ var b = ev.touches[1];
3392
+ var inside = function (p) {
3393
+ return p.clientX >= r.left && p.clientX <= r.right
3394
+ && p.clientY >= r.top && p.clientY <= r.bottom;
3395
+ };
3396
+ // 两指都在框里才接管;在框外双指缩放还能正常缩页面。
3397
+ if (!inside(a) || !inside(b)) return;
3398
+ if (ev.target && ev.target.closest && ev.target.closest("[data-ui]")) return;
3399
+ var d = dist2(a, b);
3400
+ if (!(d > 8)) return;
3401
+ // 捏合一开始就掐掉单指拖动,别让框跟着其中一根手指跑。
3402
+ if (dragRaf.current) { caf(dragRaf.current); dragRaf.current = 0; }
3403
+ dragPending.current = null;
3404
+ dragRef.current = null;
3405
+ setDragging(false);
3406
+ var ds = dockStateRef.current;
3407
+ var dr = ds.dockRect;
3408
+ var dm = dr ? Math.max(DOCK_MIN, Math.min(920, dr.width - DOCK_MIN_CHAT - DOCK_GAP)) : DOCK_MIN;
3409
+ var mid = mid2(a, b);
3410
+ pinchRef.current = {
3411
+ active: true,
3412
+ dist: d,
3413
+ midX: mid.x,
3414
+ midY: mid.y,
3415
+ w: r.width,
3416
+ h: r.height,
3417
+ x: r.left,
3418
+ y: r.top,
3419
+ docked: !!ds.docked,
3420
+ dockW: Number(ds.dockW) || 0,
3421
+ dockMax: dm,
3422
+ };
3423
+ bumpPeek();
3424
+ };
3425
+ var onTouchMove = function (ev) {
3426
+ var p = pinchRef.current;
3427
+ if (!p || !p.active) return;
3428
+ if (!ev.touches || ev.touches.length !== 2) return;
3429
+ var a = ev.touches[0];
3430
+ var b = ev.touches[1];
3431
+ var s = vp();
3432
+ var step = pinchFrameStep(p, a, b, s.w, s.h, DOCK_MIN);
3433
+ if (!step) return;
3434
+ // 双指手势到这一步还没被浏览器拿走,说明它归我们,先掐掉页面缩放 / 滚动。
3435
+ ev.preventDefault();
3436
+ if (step.docked) {
3437
+ if (step.dockW !== dockStateRef.current.dockW) setFrame({ dockW: step.dockW }, false);
3438
+ } else {
3439
+ if (Math.abs(step.factor - 1) < 0.002) return;
3440
+ setFrame({
3441
+ x: step.x,
3442
+ y: step.y,
3443
+ w: step.w, h: step.h,
3444
+ // 和滚轮一致:空白框也记住这个大小,用户自己定过尺寸后切图不再回退。
3445
+ emptyW: step.w,
3446
+ emptyH: step.h,
3447
+ userSized: true,
3448
+ }, false);
3449
+ }
3450
+ bumpPeek();
3451
+ };
3452
+ var onTouchEnd = function (ev) {
3453
+ var p = pinchRef.current;
3454
+ if (!p || !p.active) return;
3455
+ if (ev.touches && ev.touches.length >= 2) return;
3456
+ pinchRef.current = { active: false };
3457
+ // 捏合收尾后浏览器常补一个 click,别让它再触发「单击亮菜单」。
3458
+ suppressClick.current = Date.now();
3459
+ persistPrefs();
3460
+ };
3461
+ try {
3462
+ window.addEventListener("touchstart", onTouchStart, { passive: false });
3463
+ window.addEventListener("touchmove", onTouchMove, { passive: false });
3464
+ window.addEventListener("touchend", onTouchEnd, { passive: false });
3465
+ window.addEventListener("touchcancel", onTouchEnd, { passive: false });
3466
+ } catch (e) { /* 老浏览器不支持 passive 选项就退化成默认 */ }
3467
+ return function () {
3468
+ pinchRef.current = { active: false };
3469
+ try {
3470
+ window.removeEventListener("touchstart", onTouchStart);
3471
+ window.removeEventListener("touchmove", onTouchMove);
3472
+ window.removeEventListener("touchend", onTouchEnd);
3473
+ window.removeEventListener("touchcancel", onTouchEnd);
3474
+ } catch (e) { /* ignore */ }
3475
+ };
3476
+ }, []);
3477
+
3253
3478
  useEffect(function () {
3254
3479
  if (!menuOpen) { setMenuClipped(false); return undefined; }
3255
3480
  var el = menuRef.current;
@@ -3298,6 +3523,7 @@ window.__ModuleLoader__.load({
3298
3523
  var ny = clamp(by + BALL_HALF - fh + COLLAPSE, 0, Math.max(0, s.h - fh));
3299
3524
  setFrame({ x: nx, y: ny, w: fw, h: fh }, true);
3300
3525
  setPref({ open: true });
3526
+ endPeek();
3301
3527
  setMenuOpen(false);
3302
3528
  setSubOpen(false);
3303
3529
  setNearAny(false);
@@ -3320,6 +3546,7 @@ window.__ModuleLoader__.load({
3320
3546
  }, true);
3321
3547
  setPref({ open: false, dock: "", reserve: "" });
3322
3548
  if (reserved) restoreReserveFrame();
3549
+ endPeek();
3323
3550
  setMenuOpen(false);
3324
3551
  setSubOpen(false);
3325
3552
  setNearAny(false);
@@ -3339,7 +3566,17 @@ window.__ModuleLoader__.load({
3339
3566
  var onFrameDown = function (e) {
3340
3567
  if (dockTimer.current) { clearTimeout(dockTimer.current); dockTimer.current = null; }
3341
3568
  if (e.button !== undefined && e.button !== 0) return;
3342
- if (e.target && e.target.closest && e.target.closest("[data-ui]")) return;
3569
+ // 捏合中的第二根手指不参与拖动;非触屏按下(说明捏合早就该结束了)顺手复位,
3570
+ // 免得一次没收尾的捏合把后面的拖动 / 单击全卡住。
3571
+ if (pinchRef.current.active) {
3572
+ if (e.pointerType === "touch" && !e.isPrimary) return;
3573
+ pinchRef.current = { active: false };
3574
+ }
3575
+ // 记下这次按下的起点是不是菜单按钮:落在菜单上就不算「单击图片框」。
3576
+ var onUi = !!(e.target && e.target.closest && e.target.closest("[data-ui]"));
3577
+ uiDownRef.current = onUi;
3578
+ bumpPeek();
3579
+ if (onUi) return;
3343
3580
  e.preventDefault();
3344
3581
  try { e.currentTarget.setPointerCapture(e.pointerId); } catch (e2) { /* ignore */ }
3345
3582
  if (dockedActive) {
@@ -3367,6 +3604,7 @@ window.__ModuleLoader__.load({
3367
3604
  var onMove = function (e) {
3368
3605
  var d = dragRef.current;
3369
3606
  if (!d) return;
3607
+ if (pinchRef.current.active) return;
3370
3608
  var dx = e.clientX - d.sx;
3371
3609
  var dy = e.clientY - d.sy;
3372
3610
  if (Math.abs(dx) > 3 || Math.abs(dy) > 3) d.moved = true;
@@ -3407,6 +3645,12 @@ window.__ModuleLoader__.load({
3407
3645
  if (!d) return;
3408
3646
  dragRef.current = null;
3409
3647
  setDragging(false);
3648
+ // 单击(按下后没拖动、不是捏合、不是点在菜单按钮上)= 短暂亮出所有菜单。
3649
+ // 放在 pointerup 上而不是 click:触屏上 pointerdown 被 preventDefault 后
3650
+ // click 不一定还来,pointerup 一定来。
3651
+ if (!d.moved && d.kind === "frame" && !uiDownRef.current && !pinchRef.current.active) {
3652
+ startPeek();
3653
+ }
3410
3654
  if (d.moved) {
3411
3655
  suppressClick.current = Date.now();
3412
3656
  persistPrefs();
@@ -3434,6 +3678,7 @@ window.__ModuleLoader__.load({
3434
3678
  }
3435
3679
  };
3436
3680
  var onFrameMove = function (e) {
3681
+ bumpPeek();
3437
3682
  if (dragRef.current) return;
3438
3683
  var r = e.currentTarget.getBoundingClientRect();
3439
3684
  var x = e.clientX - r.left;
@@ -3523,6 +3768,7 @@ window.__ModuleLoader__.load({
3523
3768
  useEffect(function () {
3524
3769
  return function () {
3525
3770
  if (dockTimer.current) { clearTimeout(dockTimer.current); dockTimer.current = null; }
3771
+ clearPeekTimer();
3526
3772
  };
3527
3773
  }, []);
3528
3774
 
@@ -4298,10 +4544,11 @@ window.__ModuleLoader__.load({
4298
4544
  setFrame({ reserveW: d.last }, true);
4299
4545
  };
4300
4546
 
4301
- var showBL = nearAny || menuOpen;
4302
- var showBR = nearAny || nearBR;
4303
- var showTR = nearAny;
4304
- var showTL = nearAny;
4547
+ // peek 期间四角一起亮:单击图片框就能看到所有入口,不用先把鼠标挪到角上。
4548
+ var showBL = nearAny || menuOpen || peek;
4549
+ var showBR = nearAny || nearBR || peek;
4550
+ var showTR = nearAny || peek;
4551
+ var showTL = nearAny || peek;
4305
4552
  var openSidebarFull = function () {
4306
4553
  var shown = view || img || null;
4307
4554
  var id = shown && shown.id ? String(shown.id) : "";
@@ -4509,7 +4756,7 @@ window.__ModuleLoader__.load({
4509
4756
  hasImage: !!img,
4510
4757
  regenOpen: regenOpen,
4511
4758
  regenText: regenText,
4512
- onToggleRegen: function () { setSubOpen(false); setRegenOpen(function (v) { return !v; }); },
4759
+ onToggleRegen: function () { setSubOpen(false); setRegenOpen(function (v) { return !v; }); bumpPeek(); },
4513
4760
  onRegenText: setRegenText,
4514
4761
  onRegenSingle: function () { runRegenFor(img, "single"); },
4515
4762
  onRegenAll: function () { runRegenFor(img, "all"); },
@@ -4532,12 +4779,15 @@ window.__ModuleLoader__.load({
4532
4779
  menuRef: menuRef,
4533
4780
  moreRef: moreRef,
4534
4781
  onToggleMenu: function () {
4535
- setMenuOpen(function (v) {
4536
- if (v) { setSubOpen(false); setRegenOpen(false); }
4537
- return !v;
4538
- });
4782
+ var next = !menuOpen;
4783
+ setSubOpen(false);
4784
+ setRegenOpen(false);
4785
+ setMenuOpen(next);
4786
+ // 手动把菜单关掉 = 立刻收手,不等 5 秒;开着就继续续命。
4787
+ if (!next) endPeek();
4788
+ else bumpPeek();
4539
4789
  },
4540
- onToggleSub: function () { setSubPos(null); setRegenOpen(false); setSubOpen(function (v) { return !v; }); },
4790
+ onToggleSub: function () { setSubPos(null); setRegenOpen(false); setSubOpen(function (v) { return !v; }); bumpPeek(); },
4541
4791
  onCapture: captureCurrent,
4542
4792
  onStop: stopJob,
4543
4793
  onContinuous: toggleContinuous,
package/lib/meta.js CHANGED
@@ -6,7 +6,7 @@
6
6
  */
7
7
  export const PACKAGE_NAME = 'dsh-comfyui-rp';
8
8
  export const PLUGIN_NAME = 'dsh-comfyui-rp';
9
- export const VERSION = '0.2.5';
9
+ export const VERSION = '0.2.6';
10
10
 
11
11
  /** 对外路由前缀。不能带尾斜杠(dsh-host-webserver 的 prefix 匹配规则)。 */
12
12
  export const ROUTE_PATH = '/__airp_comfy';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-comfyui-rp",
3
- "version": "0.2.5",
3
+ "version": "0.2.6",
4
4
  "description": "ComfyRP Bridge:装在 DSH 里的本地文生图自动化桥。捕获会话正文 → 提示词会话 → 本地 ComfyUI 出图 → 图片回到右侧栏 / 悬浮球 / 图库。不依赖外部桥进程,也不调用 LLM。",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",