comfyui-mcp 0.52.33 → 0.52.35
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.
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* #1877 — panel_create_group
|
|
3
|
-
*
|
|
2
|
+
* #1877 / #1921 — panel_create_group auto-bounds from live `pos`/`size` can
|
|
3
|
+
* miss a requested node whose origin is already inside the box.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
5
|
+
* #1877: a collapsed node often has `size[1] === 0` (title-chip only), so the
|
|
6
|
+
* box is ~100px tall around the origin. Membership then tests the CENTRE of a
|
|
7
|
+
* boundingRect rebuilt with the panel's `finiteExtent` fallback (0 is not a
|
|
8
|
+
* usable height, so the body becomes 100px plus a 30px title). That centre
|
|
9
|
+
* sits a few pixels below the box, so the group is empty even though the
|
|
10
|
+
* node's coordinates are inside.
|
|
11
|
+
*
|
|
12
|
+
* #1921: SaveImage / other DOM-preview nodes start compact (`size[1] === 58`)
|
|
13
|
+
* and rehydrate to ~326px after the image widget mounts (save/reopen). The
|
|
14
|
+
* compact auto-box still reports them as members; after rehydrate their centre
|
|
15
|
+
* drops below the persisted bottom and they fall out.
|
|
11
16
|
*
|
|
12
17
|
* These helpers expand a created group's bounds just enough to contain every
|
|
13
18
|
* membership-plausible centre of a requested node whose origin is already in
|
|
14
|
-
* the box —
|
|
19
|
+
* the box — including the stable full-height centre of a DOM-preview node —
|
|
20
|
+
* then the caller writes those bounds with graph_edit_group.
|
|
15
21
|
*
|
|
16
22
|
* Constants match comfyui-mcp-panel `web/js/lib/group-geometry.js`
|
|
17
23
|
* (`COLLAPSED_TITLE_HEIGHT`, `COLLAPSED_PILL_WIDTH`, `finiteExtent` fallbacks)
|
|
@@ -21,6 +27,18 @@ export const NODE_TITLE_HEIGHT = 30;
|
|
|
21
27
|
export const COLLAPSED_PILL_WIDTH = 80;
|
|
22
28
|
export const DEFAULT_NODE_WIDTH = 200;
|
|
23
29
|
export const DEFAULT_NODE_BODY_HEIGHT = 100;
|
|
30
|
+
/** Compact SaveImage body is ~58px; after the image-preview DOM widget mounts it is 326px (#1921). */
|
|
31
|
+
export const DOM_PREVIEW_NODE_MIN_BODY_HEIGHT = 326;
|
|
32
|
+
/** Node types whose LiteGraph size grows when a DOM/preview widget rehydrates. */
|
|
33
|
+
export const DOM_PREVIEW_NODE_TYPES = new Set([
|
|
34
|
+
"SaveImage",
|
|
35
|
+
"PreviewImage",
|
|
36
|
+
"LoadImage",
|
|
37
|
+
"LoadImageMask",
|
|
38
|
+
"SaveVideo",
|
|
39
|
+
"VHS_LoadVideo",
|
|
40
|
+
"VHS_VideoCombine",
|
|
41
|
+
]);
|
|
24
42
|
function finiteExtent(value, fallback) {
|
|
25
43
|
const n = Number(value);
|
|
26
44
|
return Number.isFinite(n) && n > 0 ? n : fallback;
|
|
@@ -38,9 +56,12 @@ export function nodePosInsideGroupBounds(pos, bounds) {
|
|
|
38
56
|
// top-left origin sitting on or inside the box, not a centre test.
|
|
39
57
|
return x >= gx && x <= gx + gw && y >= gy && y <= gy + gh;
|
|
40
58
|
}
|
|
59
|
+
export function isDomPreviewNodeType(type) {
|
|
60
|
+
return typeof type === "string" && DOM_PREVIEW_NODE_TYPES.has(type);
|
|
61
|
+
}
|
|
41
62
|
/**
|
|
42
63
|
* Centres LiteGraph / the panel might use for containsCentre, given only the
|
|
43
|
-
* geometry panel_query_graph actually returns (pos, size, collapsed, full_height).
|
|
64
|
+
* geometry panel_query_graph actually returns (pos, size, type, collapsed, full_height).
|
|
44
65
|
*/
|
|
45
66
|
export function membershipCandidateCenters(node) {
|
|
46
67
|
const x = node.pos[0];
|
|
@@ -49,7 +70,7 @@ export function membershipCandidateCenters(node) {
|
|
|
49
70
|
const fullW = finiteExtent(node.size[0], DEFAULT_NODE_WIDTH);
|
|
50
71
|
const fullH = finiteExtent(node.size[1], DEFAULT_NODE_BODY_HEIGHT);
|
|
51
72
|
const chipH = finiteExtent(node.full_height, NODE_TITLE_HEIGHT);
|
|
52
|
-
|
|
73
|
+
const points = [
|
|
53
74
|
// Collapsed title-chip (syncNodeArea without forceCollapsed).
|
|
54
75
|
{ x: x + pillW / 2, y: y - NODE_TITLE_HEIGHT + chipH / 2 },
|
|
55
76
|
// forceCollapsed wantedNodeArea: size[1]===0 falls back to DEFAULT_NODE_BODY_HEIGHT.
|
|
@@ -57,6 +78,15 @@ export function membershipCandidateCenters(node) {
|
|
|
57
78
|
// Raw pos + stored size (degenerate when size[1] is 0 — origin itself).
|
|
58
79
|
{ x: x + fullW / 2, y: y + (node.size[1] > 0 ? node.size[1] : 0) / 2 },
|
|
59
80
|
];
|
|
81
|
+
// #1921 — expanded DOM-preview body after widget rehydrate. Collapsed chips stay chips.
|
|
82
|
+
if (!node.collapsed && isDomPreviewNodeType(node.type)) {
|
|
83
|
+
const previewH = Math.max(fullH, DOM_PREVIEW_NODE_MIN_BODY_HEIGHT);
|
|
84
|
+
if (previewH > fullH) {
|
|
85
|
+
points.push({ x: x + fullW / 2, y: y + previewH / 2 });
|
|
86
|
+
points.push({ x: x + fullW / 2, y: y - NODE_TITLE_HEIGHT + (previewH + NODE_TITLE_HEIGHT) / 2 });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return points;
|
|
60
90
|
}
|
|
61
91
|
/** Grow `bounds` so every point is a containsCentre member (max edge exclusive). */
|
|
62
92
|
export function expandBoundsToContainCenters(bounds, points) {
|
|
@@ -159,6 +189,8 @@ export function parseDetailNodesFromQueryText(text) {
|
|
|
159
189
|
if (![x, y, w, h].every(Number.isFinite))
|
|
160
190
|
continue;
|
|
161
191
|
const geom = { id, pos: [x, y], size: [w, h] };
|
|
192
|
+
if (typeof row.type === "string" && row.type)
|
|
193
|
+
geom.type = row.type;
|
|
162
194
|
if (row.collapsed === true)
|
|
163
195
|
geom.collapsed = true;
|
|
164
196
|
if (typeof row.full_height === "number" && Number.isFinite(row.full_height)) {
|
|
@@ -199,9 +231,10 @@ function quadsEqual(a, b) {
|
|
|
199
231
|
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];
|
|
200
232
|
}
|
|
201
233
|
/**
|
|
202
|
-
* After graph_create_group,
|
|
203
|
-
* inside
|
|
204
|
-
*
|
|
234
|
+
* After graph_create_group, query the requested nodes and expand the box so
|
|
235
|
+
* every origin-inside node stays a containsCentre member — including collapsed
|
|
236
|
+
* fallback centres (#1877) and DOM-preview full height after rehydrate (#1921).
|
|
237
|
+
* Never throws: a failed repair returns the original create result.
|
|
205
238
|
*/
|
|
206
239
|
export async function includeRequestedCreateGroupMembers(created, requestedIds, call) {
|
|
207
240
|
try {
|
|
@@ -219,23 +252,16 @@ export async function includeRequestedCreateGroupMembers(created, requestedIds,
|
|
|
219
252
|
const bounds = finiteQuad(group.bounding);
|
|
220
253
|
if (!bounds)
|
|
221
254
|
return created;
|
|
222
|
-
const live = asIdList(group.node_ids);
|
|
223
|
-
const reportedMissing = asIdList(group.missing_node_ids);
|
|
224
|
-
const missing = reportedMissing.length
|
|
225
|
-
? reportedMissing.filter((id) => requested.some((r) => idKey(r) === idKey(id)))
|
|
226
|
-
: classifyRequestedMembership(requested, live).missing;
|
|
227
|
-
if (!missing.length)
|
|
228
|
-
return created;
|
|
229
255
|
const query = await call({
|
|
230
256
|
cmd: "graph_query",
|
|
231
|
-
ids:
|
|
257
|
+
ids: requested,
|
|
232
258
|
fields: "detail",
|
|
233
|
-
limit: Math.min(Math.max(
|
|
259
|
+
limit: Math.min(Math.max(requested.length, 1), 200),
|
|
234
260
|
}, 8000);
|
|
235
261
|
if (query.isError)
|
|
236
262
|
return created;
|
|
237
263
|
const qPayload = parseToolJson(query);
|
|
238
|
-
const nodes = parseDetailNodesFromQueryText(qPayload?.text).filter((n) =>
|
|
264
|
+
const nodes = parseDetailNodesFromQueryText(qPayload?.text).filter((n) => requested.some((id) => idKey(id) === idKey(n.id)));
|
|
239
265
|
const repairable = nodes.filter((n) => nodePosInsideGroupBounds(n.pos, bounds));
|
|
240
266
|
if (!repairable.length)
|
|
241
267
|
return created;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-group-membership.js","sourceRoot":"","sources":["../../src/orchestrator/create-group-membership.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AACvC,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAY5C,SAAS,YAAY,CAAC,KAAc,EAAE,QAAgB;IACpD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpD,CAAC;AAED,SAAS,UAAU,CAAC,CAAU;IAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,CAAC,GAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,GAAqB,EAAE,MAAiB;IAC/E,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC;IAChC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;IACnB,uEAAuE;IACvE,mEAAmE;IACnE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAqB;IAC9D,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAChE,OAAO;QACL,8DAA8D;QAC9D,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,iBAAiB,GAAG,KAAK,GAAG,CAAC,EAAE;QAC1D,qFAAqF;QACrF,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,iBAAiB,GAAG,CAAC,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE;QAChF,wEAAwE;QACxE,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;KACvE,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,4BAA4B,CAAC,MAAiB,EAAE,MAAuC;IACrG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;IAC1B,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACf,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QAC7D,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;YAAE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;YAAE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,MAAiB,EAAE,KAAwB;IACxF,MAAM,MAAM,GAAoC,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC;YAAE,SAAS;QACvD,MAAM,CAAC,IAAI,CAAC,GAAG,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,4BAA4B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC/E,CAAC;AAED,SAAS,KAAK,CAAC,EAAW;IACxB,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,SAAiC,EACjC,OAA+B;IAE/B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,CAAU;IAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,aAAa,CAAC,GAAmB;IACxC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC;IAC9D,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;QAC3C,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACnE,CAAC,CAAE,MAAkC;YACrC,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAA2B,GAAM,EAAE,OAAgB;IACrE,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,GAAG,CAAC;IAChD,OAAO;QACL,GAAG,GAAG;QACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACtG,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAgC;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAgC,CAAC;IACzG,IAAI,UAAU,IAAI,OAAO,IAAI,UAAU,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,IAAa;IACzD,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACjC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAA4B,CAAC;YACrD,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;YAClB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ;gBAAE,SAAS;YAC/D,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;YACpB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS;YAC/F,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACnD,MAAM,IAAI,GAAoB,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAChE,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI;gBAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YAClD,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC5E,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;YACrC,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,OAAe;IACpD,OAAO,CACL,wEAAwE;QACxE,iBAAiB,KAAK,gDAAgD;QACtE,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,OAAO,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,wEAAwE;QACxE,oFAAoF,CACrF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,KAA8B,EAC9B,SAAiC;IAEjC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,2BAA2B,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxE,MAAM,GAAG,GAA4B,EAAE,GAAG,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC;IACjF,OAAO,GAAG,CAAC,cAAc,CAAC;IAC1B,OAAO,GAAG,CAAC,gBAAgB,CAAC;IAC5B,OAAO,GAAG,CAAC,OAAO,CAAC;IACnB,IAAI,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,MAAM;YAAE,GAAG,CAAC,cAAc,GAAG,KAAK,CAAC;QAC7C,IAAI,OAAO,CAAC,MAAM;YAAE,GAAG,CAAC,gBAAgB,GAAG,OAAO,CAAC;QACnD,GAAG,CAAC,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,CAAY,EAAE,CAAY;IAC5C,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,CAAC;AAOD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,OAAU,EACV,YAAqB,EACrB,IAAU;IAEV,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,OAAO;YAAE,OAAO,OAAO,CAAC;QACpC,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC;QACtC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO;YAAE,OAAO,OAAO,CAAC;QAC7B,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,OAAO,OAAO,CAAC;QAC3B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC;QAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM;YACpC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/E,CAAC,CAAC,2BAA2B,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC;QAEpC,MAAM,KAAK,GAAG,MAAM,IAAI,CACtB;YACE,GAAG,EAAE,aAAa;YAClB,GAAG,EAAE,OAAO;YACZ,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC;SAClD,EACD,IAAI,CACL,CAAC;QACF,IAAI,KAAK,CAAC,OAAO;YAAE,OAAO,OAAO,CAAC;QAClC,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,6BAA6B,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACvE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAChD,CAAC;QACF,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC;QAEvC,MAAM,QAAQ,GAAG,8BAA8B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACpE,IAAI,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;YAAE,OAAO,OAAO,CAAC;QAEjD,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC;QAC/E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;QACnG,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,OAAO,CAAC;QACnC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ;YAAE,OAAO,OAAO,CAAC;QAC9B,MAAM,WAAW,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW;YAAE,OAAO,OAAO,CAAC;QACjC,OAAO,WAAW,CAAC,OAAO,EAAE,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"create-group-membership.js","sourceRoot":"","sources":["../../src/orchestrator/create-group-membership.ts"],"names":[],"mappings":"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"}
|
|
@@ -68,6 +68,75 @@ function journalTabFor(ctx) {
|
|
|
68
68
|
const b = ctx.bridge;
|
|
69
69
|
return b.resolveSharedTabId?.(ctx.tabId) ?? ctx.tabId;
|
|
70
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* #1917 — the CANONICAL tab id a SCOPE-addressed session's commands are dispatched
|
|
73
|
+
* to right now: the in-flight turn's routing pin, resolved onward through any
|
|
74
|
+
* same-socket migration alias, else the active-tab fallback when no turn is
|
|
75
|
+
* pinned. Undefined when nothing resolves — and, deliberately, for a REAL-TAB ctx,
|
|
76
|
+
* which routes by its own id and has no second selector to disagree with.
|
|
77
|
+
*
|
|
78
|
+
* Canonical on purpose: `resolveSharedTabId` answers with `conn.tabId`, the same
|
|
79
|
+
* value `resolveActiveScopeTab` answers with, so the two can be compared for
|
|
80
|
+
* "different TAB" rather than "different id string". A pin naming a retired
|
|
81
|
+
* `wf:<route>:<path>` id that still reaches the same live socket resolves to that
|
|
82
|
+
* socket's current canonical id and is therefore NOT a disagreement.
|
|
83
|
+
*
|
|
84
|
+
* Never throws: an unresolvable pin is the bridge's own loud failure at dispatch
|
|
85
|
+
* time, and a reporting helper must not turn it into a different one here.
|
|
86
|
+
*/
|
|
87
|
+
function scopeRoutedTabId(ctx) {
|
|
88
|
+
if (!isScopeAddress(ctx.tabId))
|
|
89
|
+
return undefined;
|
|
90
|
+
const b = ctx.bridge;
|
|
91
|
+
if (typeof b.resolveSharedTabId !== "function")
|
|
92
|
+
return undefined;
|
|
93
|
+
try {
|
|
94
|
+
return b.resolveSharedTabId(ctx.tabId);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* #1917 — the two selectors a `mode:"current"` session routes by, WHEN THEY
|
|
102
|
+
* DISAGREE: the tab this conversation's in-flight turn pin is holding every graph
|
|
103
|
+
* command on, and the tab "current" would otherwise resolve to. Undefined when
|
|
104
|
+
* they agree, when either cannot be resolved, or for a real-tab ctx — i.e. the
|
|
105
|
+
* disclosure is made only on the evidence that supports it.
|
|
106
|
+
*
|
|
107
|
+
* Both sides are CANONICAL connection ids (`resolveSharedTabId` and
|
|
108
|
+
* `resolveActiveScopeTab` both answer with `conn.tabId`), so a pin that merely
|
|
109
|
+
* names a RETIRED per-workflow route id but still reaches the same live socket is
|
|
110
|
+
* NOT a split — otherwise this would fire on every healthy single-tab session that
|
|
111
|
+
* has run a `panel_open_workflow` (#640).
|
|
112
|
+
*
|
|
113
|
+
* An AMBIGUOUS pin (`null` from the resolver, a mixed-origin batch) resolves to
|
|
114
|
+
* undefined here and is deliberately not reported as a split: routing is refused
|
|
115
|
+
* outright on that shape, which is a different reply with a different remedy.
|
|
116
|
+
*/
|
|
117
|
+
function turnPinRoutesElsewhereFor(ctx) {
|
|
118
|
+
if (!isScopeAddress(ctx.tabId))
|
|
119
|
+
return undefined;
|
|
120
|
+
const routedTab = scopeRoutedTabId(ctx);
|
|
121
|
+
const activeScopeTab = typeof ctx.bridge.resolveActiveScopeTab === "function"
|
|
122
|
+
? ctx.bridge.resolveActiveScopeTab()
|
|
123
|
+
: undefined;
|
|
124
|
+
if (typeof routedTab !== "string" || typeof activeScopeTab !== "string")
|
|
125
|
+
return undefined;
|
|
126
|
+
return routedTab === activeScopeTab ? undefined : { routedTab, activeScopeTab };
|
|
127
|
+
}
|
|
128
|
+
/** #1917 — the split verdict, MACHINE-READABLE, so an agent never has to read
|
|
129
|
+
* "the two selectors disagree" out of prose. Shared by the tool that SETS the
|
|
130
|
+
* target and the tool that REPORTS it, so the two can never drift apart. */
|
|
131
|
+
function turnRoutingSplitFieldsFor(split) {
|
|
132
|
+
return split
|
|
133
|
+
? {
|
|
134
|
+
turn_routing: "pinned_elsewhere",
|
|
135
|
+
turn_routing_tab: split.routedTab,
|
|
136
|
+
current_would_route_to: split.activeScopeTab,
|
|
137
|
+
}
|
|
138
|
+
: {};
|
|
139
|
+
}
|
|
71
140
|
/** #704 — the CONVERSATION a ticket belongs to: the backend-qualified agent key
|
|
72
141
|
* (`orchestrator::<backend>`) this tool session is bound to. The tab a run was
|
|
73
142
|
* routed to is only its address and it churns across a panel reconnect (a new
|
|
@@ -614,10 +683,14 @@ export const __panelToolsTestHooks = {
|
|
|
614
683
|
setRetrySettleMs(ms) {
|
|
615
684
|
retrySettleMsOverride = ms;
|
|
616
685
|
},
|
|
617
|
-
/** Inject fast reconnect-wait timing so #400/#402 tests don't wait the real ~
|
|
686
|
+
/** Inject fast reconnect-wait timing so #400/#402 tests don't wait the real ~35s. */
|
|
618
687
|
setReconnectWaitTiming(timing) {
|
|
619
688
|
reconnectWaitTimingOverride = timing;
|
|
620
689
|
},
|
|
690
|
+
/** The reconnect wait the tools actually use (env/default, or the test override). */
|
|
691
|
+
getReconnectWaitTiming() {
|
|
692
|
+
return reconnectWaitTiming();
|
|
693
|
+
},
|
|
621
694
|
/** Shrink the #1175 late-acknowledgement grace so a reconcile test doesn't wait 10s. */
|
|
622
695
|
setRunLateAckGraceMs(ms) {
|
|
623
696
|
runLateAckGraceMsOverride = ms;
|
|
@@ -1059,11 +1132,16 @@ let reconnectWaitTimingOverride = null;
|
|
|
1059
1132
|
/** Hard ceiling on the reconnect wait so an oversized env value can never make a
|
|
1060
1133
|
* tool block near/over the outer MCP tools/call deadline (~300s). */
|
|
1061
1134
|
const RECONNECT_WAIT_MAX_MS = 60_000;
|
|
1135
|
+
/** Default seconds to wait for a tab re-hello after restart/reload.
|
|
1136
|
+
* 20s lost to ComfyUI Desktop recoveries of 26–28s after the server was already
|
|
1137
|
+
* healthy (panel#654): `panel_graph_outline` reported Connected: none and only a
|
|
1138
|
+
* hard refresh restored the tab. 35s covers those recoveries; the 60s ceiling stays. */
|
|
1139
|
+
const RECONNECT_WAIT_DEFAULT_S = 35;
|
|
1062
1140
|
function reconnectWaitTiming() {
|
|
1063
1141
|
if (reconnectWaitTimingOverride)
|
|
1064
1142
|
return reconnectWaitTimingOverride;
|
|
1065
1143
|
return {
|
|
1066
|
-
budgetMs: Math.min(RECONNECT_WAIT_MAX_MS, Math.round(parsePositiveNumberEnv("COMFYUI_PANEL_RECONNECT_WAIT_S",
|
|
1144
|
+
budgetMs: Math.min(RECONNECT_WAIT_MAX_MS, Math.round(parsePositiveNumberEnv("COMFYUI_PANEL_RECONNECT_WAIT_S", RECONNECT_WAIT_DEFAULT_S) * 1000)),
|
|
1067
1145
|
intervalMs: Math.round(parsePositiveNumberEnv("COMFYUI_PANEL_RECONNECT_POLL_S", 0.5) * 1000),
|
|
1068
1146
|
};
|
|
1069
1147
|
}
|
|
@@ -12130,7 +12208,38 @@ export function buildPanelToolDefs() {
|
|
|
12130
12208
|
def("panel_list_workflows", "List the user's OPEN workflow tabs and which one is active (path, filename, modified, persisted). Use this to know what's open before switching/renaming/closing. Read-only.", {}, async (_args, ctx) => ctx.call({ cmd: "workflow_list" })),
|
|
12131
12209
|
def("panel_get_workflow_target", "Read which workflow this agent is bound to edit. mode 'current' means graph tools follow whatever tab the user is viewing; mode 'pinned' means edits are bound to the pinned workflow (which was the active canvas at pin time) — if the user later switches to another tab, your next graph call FAILS LOUDLY rather than silently editing the wrong graph. Call this when unsure which workflow your panel_* edits will affect.", {}, async (_args, ctx) => {
|
|
12132
12210
|
const target = ctx.workflowTarget?.get(ctx.tabId) ?? { mode: "current" };
|
|
12133
|
-
|
|
12211
|
+
// #1917 — this tool's whole job is to answer "which workflow will my
|
|
12212
|
+
// panel_* edits affect?", and its own description answers `current` with
|
|
12213
|
+
// "graph tools follow whatever tab the user is viewing". That is the SAME
|
|
12214
|
+
// routing claim panel_set_workflow_target was making, so it is false in the
|
|
12215
|
+
// same state: when this conversation's in-flight turn pin is holding every
|
|
12216
|
+
// graph command on a different tab, the tab the user is viewing is NOT where
|
|
12217
|
+
// the edits land. An agent that is unsure enough to call this is exactly the
|
|
12218
|
+
// caller that must not be told the reassuring half.
|
|
12219
|
+
//
|
|
12220
|
+
// Only for `current`. A PIN makes no claim this could contradict — it travels
|
|
12221
|
+
// on graph commands as a GUARD and a mismatch fails loudly (#1912), so a
|
|
12222
|
+
// pinned session is left to that reply.
|
|
12223
|
+
const split = target.mode === "pinned" ? undefined : turnPinRoutesElsewhereFor(ctx);
|
|
12224
|
+
if (!split)
|
|
12225
|
+
return ok(target);
|
|
12226
|
+
return ok({
|
|
12227
|
+
...target,
|
|
12228
|
+
...turnRoutingSplitFieldsFor(split),
|
|
12229
|
+
note: `mode:"current" is the workflow TARGET, but it is NOT where graph commands ` +
|
|
12230
|
+
`are going right now. This conversation's IN-FLIGHT TURN is pinned to tab ` +
|
|
12231
|
+
`${shortTabId(split.routedTab)}, so every graph command — READS AND ` +
|
|
12232
|
+
`MUTATIONS ALIKE — is dispatched there, not to ` +
|
|
12233
|
+
`${shortTabId(split.activeScopeTab)}, which is the tab "current" would ` +
|
|
12234
|
+
`resolve to. TWO SELECTORS NAME DIFFERENT TABS. A pin that still reaches a ` +
|
|
12235
|
+
`live tab of this conversation is never displaced, however explicit the ` +
|
|
12236
|
+
`request (#884), so calling panel_set_workflow_target({mode:"current"}) ` +
|
|
12237
|
+
`will NOT move it. Work on tab ${shortTabId(split.routedTab)} (read it ` +
|
|
12238
|
+
`first with panel_graph_outline) if that is the workflow you mean; ` +
|
|
12239
|
+
`otherwise ask the user to send a message from the tab they want — the ` +
|
|
12240
|
+
`turn pin is released at the end of this turn and the next message's ` +
|
|
12241
|
+
`origin establishes routing.`,
|
|
12242
|
+
});
|
|
12134
12243
|
}),
|
|
12135
12244
|
def("panel_set_workflow_target", "Pin the agent to a specific open workflow tab (it must be the ACTIVE/in-view workflow at pin time), or release the pin to follow the user's current tab. The panel can only read or edit the workflow currently in view, so pinning to a background tab is REJECTED at pin time — to work on a different open workflow, switch to it first with panel_open_workflow (that makes it active), then pin. Pinning does NOT change the user's view; it binds your panel_* graph edits to that workflow and makes a later mismatch (e.g. the user switches away) fail loudly instead of silently editing the wrong graph. Set mode:'pinned' with path from panel_list_workflows; set mode:'current' (or omit path) to follow the active tab again. mode:'current' is ALSO the explicit RECOVERY signal: if your panel_* calls started failing with `no connected tab`, or with a `workflow instance mismatch` / out-of-sync-graph error, after ComfyUI reconnected, the panel reloaded, or the workflow on the canvas was switched or replaced, call this with mode:'current'. It rebinds this session onto the tab that's live now AND re-derives the workflow-instance fence your graph commands are stamped with from the panel's live active canvas — that second half is what clears an instance mismatch. It reports whether that actually worked: `graph_binding:\"bound\"` means graph tools are usable again, `\"reads_only\"` means reads work but mutations stay refused, `\"unverified\"` means the fence is set but readiness could not be confirmed (treat the next graph call as the test), and it FAILS (rather than reporting a hollow success) when the binding could not be restored, naming what to do instead.", {
|
|
12136
12245
|
mode: z
|
|
@@ -12423,6 +12532,45 @@ export function buildPanelToolDefs() {
|
|
|
12423
12532
|
// made only on the evidence that supports it; without that evidence the reply
|
|
12424
12533
|
// says what IS true (the pin is set and acts as a GUARD) and hands back the
|
|
12425
12534
|
// cheap read that settles it.
|
|
12535
|
+
//
|
|
12536
|
+
// #1917 — the SAME rule for the `mode:"current"` arm, which panel#1529's fix
|
|
12537
|
+
// deliberately did not take. "Following the user's current workflow tab." is
|
|
12538
|
+
// also a claim about ROUTING, and it was likewise unconditional. It is FALSE
|
|
12539
|
+
// whenever this conversation's in-flight turn pin is holding routing on a
|
|
12540
|
+
// different tab: `rebindToActiveTab` short-circuits for a scope ctx whose pin
|
|
12541
|
+
// still reaches a live tab (#884 — a live pin is never displaced) and returns
|
|
12542
|
+
// `{rebound:false}` with no `repinRefusal` at all, so nothing in the reply
|
|
12543
|
+
// mentioned the pin. Measured on clean main over a real bridge: with the pin
|
|
12544
|
+
// on the tab showing Basic_V37 and the active-scope resolution naming the tab
|
|
12545
|
+
// showing PHOTO, this call answered «Following the user's current workflow
|
|
12546
|
+
// tab.» with `graph_binding:"bound"`, and the next `panel_graph_outline` AND
|
|
12547
|
+
// the next `panel_remove_node` were both dispatched to Basic_V37.
|
|
12548
|
+
//
|
|
12549
|
+
// The pin is NOT moved to make the sentence true — that is #884's P0, and
|
|
12550
|
+
// widening "displace" from dead-or-ambiguous to dead-or-ambiguous-or-different
|
|
12551
|
+
// would re-aim an in-flight conversation's mutations at a tab it never
|
|
12552
|
+
// addressed. What changes is the CLAIM: when two selectors name different
|
|
12553
|
+
// tabs, say so and name both, rather than silently reporting one of them.
|
|
12554
|
+
// Compared as CANONICAL connection ids on both sides — see
|
|
12555
|
+
// turnPinRoutesElsewhereFor.
|
|
12556
|
+
//
|
|
12557
|
+
// `!currentModeTurnRepinned` is REDUNDANT on every ordinary path and is kept
|
|
12558
|
+
// deliberately: a repin moves the pin ONTO the active tab, so the equality
|
|
12559
|
+
// check inside the helper already returns undefined. It earns its place only
|
|
12560
|
+
// in the race where the active tab changes between the repin and this line —
|
|
12561
|
+
// there the helper WOULD report a split, and the note attached to it says
|
|
12562
|
+
// "that pin was NOT displaced", which had just stopped being true. Suppressing
|
|
12563
|
+
// it there keeps `turn_routing:"repinned"` and `"pinned_elsewhere"` mutually
|
|
12564
|
+
// exclusive and keeps the reply from contradicting itself. Staging that race
|
|
12565
|
+
// deterministically is not worth a test, so a mutation dropping this condition
|
|
12566
|
+
// survives the suite; that is a known and accepted gap, not an oversight.
|
|
12567
|
+
const turnPinRoutesElsewhere = mode === "current" && !currentModeTurnRepinned
|
|
12568
|
+
? turnPinRoutesElsewhereFor(ctx)
|
|
12569
|
+
: undefined;
|
|
12570
|
+
// panel#1529's `pin_verified_active` rule, applied to the routing half: the
|
|
12571
|
+
// same verdict the note carries, MACHINE-READABLE, so an agent never has to
|
|
12572
|
+
// read "the two selectors disagree" out of prose.
|
|
12573
|
+
const turnRoutingSplitFields = turnRoutingSplitFieldsFor(turnPinRoutesElsewhere);
|
|
12426
12574
|
const hint = target.mode === "pinned"
|
|
12427
12575
|
? pinVerifiedActive
|
|
12428
12576
|
? `Pinned to "${target.filename ?? target.path}". Graph tools will target that workflow without switching the user's view.`
|
|
@@ -12433,7 +12581,24 @@ export function buildPanelToolDefs() {
|
|
|
12433
12581
|
// be a confident wrong diagnosis; what is true in all three is that the
|
|
12434
12582
|
// check did not happen.
|
|
12435
12583
|
: `Pinned to "${target.filename ?? target.path}" — but NOT CONFIRMED: the live canvas could not be read back to check this pin against it, so this call does NOT establish that graph tools will reach that workflow. The pin travels on graph commands as a GUARD: if the active canvas is a different workflow, the next graph call FAILS with a workflow mismatch rather than editing it. Settle it with one cheap read — panel_graph_outline — before relying on this.`
|
|
12436
|
-
:
|
|
12584
|
+
: turnPinRoutesElsewhere
|
|
12585
|
+
? `The workflow target is now mode:"current" — but graph tools will NOT ` +
|
|
12586
|
+
`follow the tab this session would otherwise resolve to. This ` +
|
|
12587
|
+
`conversation's IN-FLIGHT TURN is pinned to tab ` +
|
|
12588
|
+
`${shortTabId(turnPinRoutesElsewhere.routedTab)}, and that pin was NOT ` +
|
|
12589
|
+
`displaced: a pin that still reaches a live tab of this conversation is ` +
|
|
12590
|
+
`never displaced, however explicit the request (#884). So every graph ` +
|
|
12591
|
+
`command — READS AND MUTATIONS ALIKE — is dispatched to ` +
|
|
12592
|
+
`${shortTabId(turnPinRoutesElsewhere.routedTab)}, not to ` +
|
|
12593
|
+
`${shortTabId(turnPinRoutesElsewhere.activeScopeTab)}, which is where ` +
|
|
12594
|
+
`"current" would resolve. TWO SELECTORS NAME DIFFERENT TABS and this ` +
|
|
12595
|
+
`call moved neither, so do not read it as "graph tools now follow the ` +
|
|
12596
|
+
`user's current tab". WHAT TO DO: read the pinned tab first ` +
|
|
12597
|
+
`(panel_graph_outline) and work there if that is the workflow you mean; ` +
|
|
12598
|
+
`otherwise ask the user to send a message from the tab they want — the ` +
|
|
12599
|
+
`turn pin is released at the end of this turn and the next message's ` +
|
|
12600
|
+
`origin establishes routing. Retrying this tool will not move it.`
|
|
12601
|
+
: "Following the user's current workflow tab.";
|
|
12437
12602
|
// #803 — this used to END here for every mode:"current" call, with the
|
|
12438
12603
|
// unconditional "Following the user's current workflow tab." Reporters followed
|
|
12439
12604
|
// that as the documented recovery, read it as success, and stayed wedged. The
|
|
@@ -12646,6 +12811,7 @@ CHECKED FOR YOU: the graph read this message prescribes was just run, and it ` +
|
|
|
12646
12811
|
graph_binding: "bound",
|
|
12647
12812
|
...(fenceRebind ? { graph_binding_status: fenceRebind.status } : {}),
|
|
12648
12813
|
...(currentModeTurnRepinned ? { turn_routing: "repinned" } : {}),
|
|
12814
|
+
...turnRoutingSplitFields,
|
|
12649
12815
|
note: hint +
|
|
12650
12816
|
rebindNote +
|
|
12651
12817
|
` The graph binding was NOT re-derived (the panel's active reply could ` +
|
|
@@ -12691,6 +12857,7 @@ CHECKED FOR YOU: the graph read this message prescribes was just run, and it ` +
|
|
|
12691
12857
|
...(typeof scopeRepin === "string" || currentModeTurnRepinned
|
|
12692
12858
|
? { turn_routing: "repinned" }
|
|
12693
12859
|
: {}),
|
|
12860
|
+
...turnRoutingSplitFields,
|
|
12694
12861
|
note: hint + rebindNote + (fence?.note ?? "") + scopeRepinNote,
|
|
12695
12862
|
});
|
|
12696
12863
|
}),
|
|
@@ -12812,6 +12979,8 @@ CHECKED FOR YOU: the graph read this message prescribes was just run, and it ` +
|
|
|
12812
12979
|
},
|
|
12813
12980
|
// #1877 — a collapsed node can sit inside the auto-fit box and still be
|
|
12814
12981
|
// reported missing (size[1]===0 vs membership's 100px body fallback).
|
|
12982
|
+
// #1921 — SaveImage/preview nodes grow after DOM rehydration; expand
|
|
12983
|
+
// auto-bounds to the stable full height before persisting.
|
|
12815
12984
|
async (args, ctx) => includeRequestedCreateGroupMembers(await ctx.call({
|
|
12816
12985
|
cmd: "graph_create_group",
|
|
12817
12986
|
title: args.title,
|