@mindexec/cli 0.2.429 → 0.2.431

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.
Files changed (75) hide show
  1. package/package.json +7 -7
  2. package/remote-fast/osx-arm64/mindexec-remote-fast.dll +0 -0
  3. package/remote-fast/osx-x64/mindexec-remote-fast.dll +0 -0
  4. package/remote-fast/win-x64/mindexec-remote-fast.dll +0 -0
  5. package/scripts/npm-fresh-install-smoke.mjs +216 -0
  6. package/wwwroot/_content/MindExecution.Shared/css/app.css +1 -1
  7. package/wwwroot/_content/MindExecution.Shared/js/mind-map-css3d-manager.js +280 -39
  8. package/wwwroot/_content/MindExecution.Shared/js/mind-map-interactions.js +37 -9
  9. package/wwwroot/_content/MindExecution.Shared/js/mind-map-menu-manager.js +20 -1
  10. package/wwwroot/_content/MindExecution.Shared/js/mind-map-nodes.js +129 -1
  11. package/wwwroot/_framework/MessagePack.7vlan1azj0.dll +0 -0
  12. package/wwwroot/_framework/{MessagePack.Annotations.l6qv48kgpt.dll → MessagePack.Annotations.py0sy1kn1f.dll} +0 -0
  13. package/wwwroot/_framework/{Microsoft.AspNetCore.Authorization.k7dsih5y5g.dll → Microsoft.AspNetCore.Authorization.htf46vkphd.dll} +0 -0
  14. package/wwwroot/_framework/Microsoft.AspNetCore.Components.933rwrwkzt.dll +0 -0
  15. package/wwwroot/_framework/{Microsoft.AspNetCore.Components.Authorization.iycd6unprw.dll → Microsoft.AspNetCore.Components.Authorization.tt4qeyggd5.dll} +0 -0
  16. package/wwwroot/_framework/{Microsoft.AspNetCore.Components.Web.487u3twia4.dll → Microsoft.AspNetCore.Components.Web.2s8gqxkpdl.dll} +0 -0
  17. package/wwwroot/_framework/{Microsoft.AspNetCore.Components.WebAssembly.d0gcnmlxxz.dll → Microsoft.AspNetCore.Components.WebAssembly.sarmn45nm8.dll} +0 -0
  18. package/wwwroot/_framework/{Microsoft.AspNetCore.Metadata.h4yevl9adi.dll → Microsoft.AspNetCore.Metadata.6782hrb6zt.dll} +0 -0
  19. package/wwwroot/_framework/Microsoft.Data.Sqlite.0gpx20ox73.dll +0 -0
  20. package/wwwroot/_framework/{Microsoft.EntityFrameworkCore.Abstractions.gocudnvz7b.dll → Microsoft.EntityFrameworkCore.Abstractions.8kg0ha5f3s.dll} +0 -0
  21. package/wwwroot/_framework/Microsoft.EntityFrameworkCore.Relational.iuncmsap8z.dll +0 -0
  22. package/wwwroot/_framework/Microsoft.EntityFrameworkCore.Sqlite.vsalww6xiy.dll +0 -0
  23. package/wwwroot/_framework/Microsoft.EntityFrameworkCore.xmbscya80j.dll +0 -0
  24. package/wwwroot/_framework/{Microsoft.Extensions.Caching.Abstractions.364t4jh3zz.dll → Microsoft.Extensions.Caching.Abstractions.6w6jliyj60.dll} +0 -0
  25. package/wwwroot/_framework/{Microsoft.Extensions.Caching.Memory.izlxhpzosu.dll → Microsoft.Extensions.Caching.Memory.puhvxafgju.dll} +0 -0
  26. package/wwwroot/_framework/{Microsoft.Extensions.Configuration.Json.duvlngw8i0.dll → Microsoft.Extensions.Configuration.Json.7fo28u9lzj.dll} +0 -0
  27. package/wwwroot/_framework/{Microsoft.Extensions.Configuration.8zq7hh41o7.dll → Microsoft.Extensions.Configuration.rczgmasvw2.dll} +0 -0
  28. package/wwwroot/_framework/{Microsoft.Extensions.DependencyInjection.n4tg99oy8l.dll → Microsoft.Extensions.DependencyInjection.8i0jefgzgz.dll} +0 -0
  29. package/wwwroot/_framework/{Microsoft.Extensions.DependencyInjection.Abstractions.t2hh9kvx0o.dll → Microsoft.Extensions.DependencyInjection.Abstractions.bmy2ykf9d2.dll} +0 -0
  30. package/wwwroot/_framework/{Microsoft.Extensions.DependencyModel.h0d06ixk3e.dll → Microsoft.Extensions.DependencyModel.y69407g5h0.dll} +0 -0
  31. package/wwwroot/_framework/{Microsoft.Extensions.Logging.Abstractions.rl32bkx2sd.dll → Microsoft.Extensions.Logging.Abstractions.xn41li608u.dll} +0 -0
  32. package/wwwroot/_framework/{Microsoft.Extensions.Logging.dlht1xei0t.dll → Microsoft.Extensions.Logging.sayb2u55jg.dll} +0 -0
  33. package/wwwroot/_framework/{Microsoft.Extensions.Options.qeunebioml.dll → Microsoft.Extensions.Options.iffq34v2x9.dll} +0 -0
  34. package/wwwroot/_framework/{Microsoft.JSInterop.WebAssembly.ryia5gxiad.dll → Microsoft.JSInterop.WebAssembly.rlz6wrl50x.dll} +0 -0
  35. package/wwwroot/_framework/{Microsoft.JSInterop.ew9vz9o332.dll → Microsoft.JSInterop.k3pogql4x4.dll} +0 -0
  36. package/wwwroot/_framework/{MindExecution.Core.fi1okngj1v.dll → MindExecution.Core.808jj176e1.dll} +0 -0
  37. package/wwwroot/_framework/{MindExecution.Kernel.88cfrq3n6f.dll → MindExecution.Kernel.75hxk08tt0.dll} +0 -0
  38. package/wwwroot/_framework/{MindExecution.Plugins.Admin.j8r53ny1yk.dll → MindExecution.Plugins.Admin.0zkmk8wahq.dll} +0 -0
  39. package/wwwroot/_framework/{MindExecution.Plugins.Business.dxnr51rpko.dll → MindExecution.Plugins.Business.vyw3769hrw.dll} +0 -0
  40. package/wwwroot/_framework/{MindExecution.Plugins.Concept.5wy4pksmui.dll → MindExecution.Plugins.Concept.hdpod01n2v.dll} +0 -0
  41. package/wwwroot/_framework/{MindExecution.Plugins.Directory.8on0qz60kp.dll → MindExecution.Plugins.Directory.jtw9q1dm9n.dll} +0 -0
  42. package/wwwroot/_framework/{MindExecution.Plugins.PlanMaster.0fb3d2by4x.dll → MindExecution.Plugins.PlanMaster.bcxkqs35nn.dll} +0 -0
  43. package/wwwroot/_framework/{MindExecution.Plugins.YouTube.8k0sthce42.dll → MindExecution.Plugins.YouTube.gg4bv7zo0e.dll} +0 -0
  44. package/wwwroot/_framework/{MindExecution.Shared.5azabuayvq.dll → MindExecution.Shared.acb35gyigd.dll} +0 -0
  45. package/wwwroot/_framework/{MindExecution.Web.d8y80arq4m.dll → MindExecution.Web.6grqlsq22z.dll} +0 -0
  46. package/wwwroot/_framework/SQLitePCLRaw.batteries_v2.sfbkwlzomg.dll +0 -0
  47. package/wwwroot/_framework/SQLitePCLRaw.core.uwwith8gy4.dll +0 -0
  48. package/wwwroot/_framework/SQLitePCLRaw.provider.e_sqlite3.48c2jqzyip.dll +0 -0
  49. package/wwwroot/_framework/{System.Memory.1k78n7wdxb.dll → System.Memory.l1cfybi1j0.dll} +0 -0
  50. package/wwwroot/_framework/{System.Numerics.Tensors.0c7z4mt3on.dll → System.Numerics.Tensors.dsa4b5t80k.dll} +0 -0
  51. package/wwwroot/_framework/System.Private.CoreLib.g6ztz7cmo2.dll +0 -0
  52. package/wwwroot/_framework/System.Runtime.v0r22684n1.dll +0 -0
  53. package/wwwroot/_framework/blazor.boot.json +91 -93
  54. package/wwwroot/_framework/blazor.webassembly.js +1 -1
  55. package/wwwroot/_framework/dotnet.native.566r55w3xu.js +16 -0
  56. package/wwwroot/_framework/dotnet.native.x6q5aixc38.wasm +0 -0
  57. package/wwwroot/_framework/netstandard.b50t77veor.dll +0 -0
  58. package/wwwroot/index.html +2 -2
  59. package/wwwroot/service-worker-assets.js +101 -105
  60. package/wwwroot/service-worker.js +1 -1
  61. package/wwwroot/_framework/MessagePack.eqoptzx9d5.dll +0 -0
  62. package/wwwroot/_framework/Microsoft.AspNetCore.Components.6nyje9sa0g.dll +0 -0
  63. package/wwwroot/_framework/Microsoft.Data.Sqlite.jdlxgv2jtg.dll +0 -0
  64. package/wwwroot/_framework/Microsoft.EntityFrameworkCore.4gjazp7kjf.dll +0 -0
  65. package/wwwroot/_framework/Microsoft.EntityFrameworkCore.Relational.lt4rsvinuo.dll +0 -0
  66. package/wwwroot/_framework/Microsoft.EntityFrameworkCore.Sqlite.69luj0fa9r.dll +0 -0
  67. package/wwwroot/_framework/SQLitePCLRaw.batteries_v2.rrd1nzawpp.dll +0 -0
  68. package/wwwroot/_framework/SQLitePCLRaw.core.1dxloztpfz.dll +0 -0
  69. package/wwwroot/_framework/SQLitePCLRaw.provider.e_sqlite3.oekyzl53i1.dll +0 -0
  70. package/wwwroot/_framework/System.Private.CoreLib.c1dbswx1b2.dll +0 -0
  71. package/wwwroot/_framework/System.Runtime.InteropServices.RuntimeInformation.l5rk496q70.dll +0 -0
  72. package/wwwroot/_framework/System.Runtime.h9cduidfkh.dll +0 -0
  73. package/wwwroot/_framework/dotnet.native.boem75ye5i.wasm +0 -0
  74. package/wwwroot/_framework/dotnet.native.qc8g39g30v.js +0 -16
  75. package/wwwroot/_framework/netstandard.yvr3prsx0x.dll +0 -0
@@ -979,6 +979,16 @@
979
979
  pointer-events: none !important;
980
980
  }
981
981
 
982
+ /* Motion state is scoped to the CSS3D renderer container. Even an
983
+ explicitly interactive iframe must release hit-testing while the
984
+ canvas camera owns pan/zoom input. */
985
+ .is-panning .embed-content[data-iframe-interacting="true"] .embed-iframe-host,
986
+ .is-panning .embed-content[data-iframe-interacting="true"] .embed-iframe-host iframe,
987
+ .is-zooming .embed-content[data-iframe-interacting="true"] .embed-iframe-host,
988
+ .is-zooming .embed-content[data-iframe-interacting="true"] .embed-iframe-host iframe {
989
+ pointer-events: none !important;
990
+ }
991
+
982
992
  .ai-loading-row {
983
993
  display: flex;
984
994
  align-items: center;
@@ -1263,7 +1273,8 @@
1263
1273
  z-index: 24 !important;
1264
1274
  }
1265
1275
 
1266
- .map-node-automation-context-source .map-node-memo__automation-pins.is-context-source {
1276
+ .map-node-automation-context-source .map-node-memo__automation-pins.is-context-source,
1277
+ .map-node-automation-worker-source .map-node-memo__automation-pins.is-worker-source {
1267
1278
  opacity: 0;
1268
1279
  pointer-events: none !important;
1269
1280
  transform: var(--context-source-pin-transform, translate(0, 0)) scale(0.86);
@@ -1276,6 +1287,7 @@
1276
1287
  .css3d-resolution-wrapper.has-context-source-pins > .css3d-dynamic-node,
1277
1288
  .css3d-resolution-wrapper.has-context-source-pins > [id^="css3d-node-"],
1278
1289
  .css3d-resolution-wrapper.has-context-source-pins .map-node-automation-context-source,
1290
+ .css3d-resolution-wrapper.has-context-source-pins .map-node-automation-worker-source,
1279
1291
  .css3d-resolution-wrapper.has-context-source-pins .map-node-memo__shell {
1280
1292
  overflow: visible !important;
1281
1293
  contain: layout style !important;
@@ -1295,17 +1307,24 @@
1295
1307
  .map-node-automation-context-source.selected-media-safe .map-node-memo__automation-pins.is-context-source,
1296
1308
  .css3d-resolution-wrapper.selected .map-node-automation-context-source .map-node-memo__automation-pins.is-context-source,
1297
1309
  .css3d-resolution-wrapper.selected-media-safe .map-node-automation-context-source .map-node-memo__automation-pins.is-context-source,
1298
- .map-node-automation-context-source:focus-within .map-node-memo__automation-pins.is-context-source {
1310
+ .map-node-automation-context-source:focus-within .map-node-memo__automation-pins.is-context-source,
1311
+ .map-node-automation-worker-source.selected .map-node-memo__automation-pins.is-worker-source,
1312
+ .map-node-automation-worker-source.selected-media-safe .map-node-memo__automation-pins.is-worker-source,
1313
+ .css3d-resolution-wrapper.selected .map-node-automation-worker-source .map-node-memo__automation-pins.is-worker-source,
1314
+ .css3d-resolution-wrapper.selected-media-safe .map-node-automation-worker-source .map-node-memo__automation-pins.is-worker-source,
1315
+ .map-node-automation-worker-source:focus-within .map-node-memo__automation-pins.is-worker-source {
1299
1316
  opacity: 1;
1300
1317
  pointer-events: auto !important;
1301
1318
  transform: var(--context-source-pin-transform, translate(0, 0)) scale(1);
1302
1319
  }
1303
1320
 
1304
- .map-node-automation-context-source .map-node-memo__automation-pins.is-context-source .map-node-memo__automation-pin-label {
1321
+ .map-node-automation-context-source .map-node-memo__automation-pins.is-context-source .map-node-memo__automation-pin-label,
1322
+ .map-node-automation-worker-source .map-node-memo__automation-pins.is-worker-source .map-node-memo__automation-pin-label {
1305
1323
  display: none !important;
1306
1324
  }
1307
1325
 
1308
- .map-node-automation-context-source .map-node-memo__automation-pins.is-context-source .map-node-memo__automation-pin {
1326
+ .map-node-automation-context-source .map-node-memo__automation-pins.is-context-source .map-node-memo__automation-pin,
1327
+ .map-node-automation-worker-source .map-node-memo__automation-pins.is-worker-source .map-node-memo__automation-pin {
1309
1328
  width: 24px !important;
1310
1329
  height: 24px !important;
1311
1330
  max-width: 24px !important;
@@ -1313,7 +1332,8 @@
1313
1332
  border-radius: 999px;
1314
1333
  }
1315
1334
 
1316
- .map-node-automation-context-source .map-node-memo__automation-pins.is-context-source .map-node-memo__automation-pin-dot {
1335
+ .map-node-automation-context-source .map-node-memo__automation-pins.is-context-source .map-node-memo__automation-pin-dot,
1336
+ .map-node-automation-worker-source .map-node-memo__automation-pins.is-worker-source .map-node-memo__automation-pin-dot {
1317
1337
  width: 12px !important;
1318
1338
  height: 12px !important;
1319
1339
  min-width: 12px !important;
@@ -2217,7 +2237,7 @@
2217
2237
  const scaledHeight = worldHeight * resolutionScale;
2218
2238
  const hasContextSourcePins =
2219
2239
  wrapper.classList?.contains?.('has-context-source-pins') === true
2220
- || wrapper.querySelector?.('.map-node-automation-context-source') !== null;
2240
+ || wrapper.querySelector?.('.map-node-automation-context-source, .map-node-automation-worker-source') !== null;
2221
2241
 
2222
2242
  wrapper.style.width = `${scaledWidth}px`;
2223
2243
  wrapper.style.height = `${scaledHeight}px`;
@@ -4599,6 +4619,7 @@
4599
4619
  large: Object.freeze({ tileMinWidth: 297, tileMinHeight: 189 })
4600
4620
  });
4601
4621
  const AUTOMATION_NODE_KIND_METADATA_KEY = 'AutomationNodeKind';
4622
+ const AUTOMATION_NODE_ROLE_METADATA_KEY = 'AutomationNodeRole';
4602
4623
  const AUTOMATION_NODE_LABEL_METADATA_KEY = 'AutomationNodeLabel';
4603
4624
  const AUTOMATION_NODE_DESCRIPTION_METADATA_KEY = 'AutomationNodeDescription';
4604
4625
  const AUTOMATION_INFERRED_KIND_METADATA_KEY = 'AutomationInferredKind';
@@ -4813,6 +4834,10 @@
4813
4834
  return ['memo', 'note', 'text', 'markdown', 'code', CSV_TABLE_CONTENT_TYPE, 'embed', 'pdf', 'image', 'video'].includes(contentType);
4814
4835
  }
4815
4836
 
4837
+ function isBusinessAutomationWorkerSourceNode(nodeModel) {
4838
+ return !!nodeModel && !isBusinessAutomationNode(nodeModel) && isRemoteFleetNode(nodeModel);
4839
+ }
4840
+
4816
4841
  function isAgentStyledMemoNode(nodeModel) {
4817
4842
  const semanticType = getNodeSemanticType(nodeModel);
4818
4843
  return semanticType === 'MindCanvasAgent'
@@ -4823,13 +4848,15 @@
4823
4848
  function allowsMemoExternalChrome(nodeModel) {
4824
4849
  return isMindCanvasAgentNode(nodeModel)
4825
4850
  || isBusinessAutomationNode(nodeModel)
4826
- || isBusinessAutomationContextSourceNode(nodeModel);
4851
+ || isBusinessAutomationContextSourceNode(nodeModel)
4852
+ || isBusinessAutomationWorkerSourceNode(nodeModel);
4827
4853
  }
4828
4854
 
4829
4855
  function allowsNodeExternalChrome(nodeModel) {
4830
4856
  return isMindCanvasAgentNode(nodeModel)
4831
4857
  || isBusinessAutomationNode(nodeModel)
4832
- || isBusinessAutomationContextSourceNode(nodeModel);
4858
+ || isBusinessAutomationContextSourceNode(nodeModel)
4859
+ || isBusinessAutomationWorkerSourceNode(nodeModel);
4833
4860
  }
4834
4861
 
4835
4862
  function supportsTextOverlay(nodeModel) {
@@ -5728,10 +5755,10 @@
5728
5755
  }
5729
5756
 
5730
5757
  const overlay = overlays.get(id) || null;
5731
- if (overlay?.style.display !== 'none') {
5732
- overlay.style.display = 'none';
5733
- }
5734
5758
  if (overlay) {
5759
+ if (overlay.style.display !== 'none') {
5760
+ overlay.style.display = 'none';
5761
+ }
5735
5762
  setTextOverlaySelectablePresentation(overlay, false);
5736
5763
  }
5737
5764
  if (hasSelectableTextOverlay(module, id)) {
@@ -7506,6 +7533,19 @@
7506
7533
  return getAutomationMetadataValue(nodeModel, AUTOMATION_NODE_KIND_METADATA_KEY, 'automation');
7507
7534
  }
7508
7535
 
7536
+ function getBusinessAutomationNodeRole(nodeModel) {
7537
+ return getAutomationMetadataValue(nodeModel, AUTOMATION_NODE_ROLE_METADATA_KEY, '').toLowerCase();
7538
+ }
7539
+
7540
+ function getBusinessAutomationNodeRoleLabel(nodeModel) {
7541
+ switch (getBusinessAutomationNodeRole(nodeModel)) {
7542
+ case 'job': return 'Job';
7543
+ case 'report': return 'Report';
7544
+ case 'root': return 'AI Task';
7545
+ default: return '';
7546
+ }
7547
+ }
7548
+
7509
7549
  function getBusinessAutomationNodeLabel(nodeModel) {
7510
7550
  return getAutomationMetadataValue(
7511
7551
  nodeModel,
@@ -7904,7 +7944,9 @@
7904
7944
  function getBusinessAutomationForwardEdgeCount(nodeModel) {
7905
7945
  return readBusinessAutomationEdges(nodeModel)
7906
7946
  .filter(edge => normalizeBusinessAutomationHint(edge.targetPinId) !== 'context')
7947
+ .filter(edge => normalizeBusinessAutomationHint(edge.targetPinId) !== 'worker')
7907
7948
  .filter(edge => normalizeBusinessAutomationHint(edge.type) !== 'businesscontext')
7949
+ .filter(edge => normalizeBusinessAutomationHint(edge.type) !== 'workertarget')
7908
7950
  .length;
7909
7951
  }
7910
7952
 
@@ -9364,6 +9406,7 @@
9364
9406
  }
9365
9407
 
9366
9408
  const AUTOMATION_CONTEXT_PIN_THEME = Object.freeze({ edge: '#2563eb', soft: 'rgba(37, 99, 235, 0.16)' });
9409
+ const AUTOMATION_WORKER_PIN_THEME = Object.freeze({ edge: '#0f766e', soft: 'rgba(15, 118, 110, 0.14)' });
9367
9410
  const AUTOMATION_WORKFLOW_PIN_THEME = Object.freeze({ edge: '#f97316', soft: 'rgba(249, 115, 22, 0.14)' });
9368
9411
  const AUTOMATION_RESULT_PIN_HELP_TEXT = 'Drag to connect this result to an input pin. Click to view the result.';
9369
9412
  const BUSINESS_AUTOMATION_PIN_HIT_PADDING = 8;
@@ -9376,6 +9419,7 @@
9376
9419
  if (normalized === 'video') return { edge: '#7c3aed', soft: 'rgba(124, 58, 237, 0.12)' };
9377
9420
  if (normalized === 'searchresult') return { edge: '#d97706', soft: 'rgba(245, 158, 11, 0.14)' };
9378
9421
  if (normalized === 'businesscontext') return AUTOMATION_CONTEXT_PIN_THEME;
9422
+ if (normalized === 'workertarget') return AUTOMATION_WORKER_PIN_THEME;
9379
9423
  if (normalized === 'finaloutput') return AUTOMATION_WORKFLOW_PIN_THEME;
9380
9424
  if (normalized === 'runresult') return AUTOMATION_WORKFLOW_PIN_THEME;
9381
9425
  return AUTOMATION_WORKFLOW_PIN_THEME;
@@ -9550,12 +9594,37 @@
9550
9594
  }));
9551
9595
  }
9552
9596
 
9597
+ function getBusinessAutomationWorkerSourcePins(nodeModel) {
9598
+ if (!isBusinessAutomationWorkerSourceNode(nodeModel)) {
9599
+ return [];
9600
+ }
9601
+
9602
+ return ['top', 'right', 'bottom', 'left'].map(placement => ({
9603
+ id: `worker-${placement}`,
9604
+ label: 'Worker',
9605
+ type: 'WorkerTarget',
9606
+ direction: 'output',
9607
+ placement,
9608
+ contract: 'Use this monitor or computer as a worker target for an AI Task.'
9609
+ }));
9610
+ }
9611
+
9612
+ function getBusinessAutomationExternalSourcePins(nodeModel) {
9613
+ if (isBusinessAutomationWorkerSourceNode(nodeModel)) {
9614
+ return getBusinessAutomationWorkerSourcePins(nodeModel);
9615
+ }
9616
+
9617
+ return getBusinessAutomationContextSourcePins(nodeModel);
9618
+ }
9619
+
9553
9620
  function renderBusinessAutomationContextSourceChrome(container, nodeModel) {
9554
9621
  if (!container) {
9555
9622
  return;
9556
9623
  }
9557
9624
 
9558
9625
  const isContextSource = isBusinessAutomationContextSourceNode(nodeModel);
9626
+ const isWorkerSource = isBusinessAutomationWorkerSourceNode(nodeModel);
9627
+ const isExternalSource = isContextSource || isWorkerSource;
9559
9628
  const wrapper = container.closest?.('.css3d-resolution-wrapper') || null;
9560
9629
  const nodeId = getNodeId(nodeModel);
9561
9630
  if (nodeId && container.dataset) {
@@ -9565,13 +9634,25 @@
9565
9634
  wrapper.dataset.nodeId = nodeId;
9566
9635
  }
9567
9636
  container.classList.toggle('map-node-automation-context-source', isContextSource);
9568
- wrapper?.classList?.toggle?.('has-context-source-pins', isContextSource);
9569
- if (!isContextSource) {
9637
+ container.classList.toggle('map-node-automation-worker-source', isWorkerSource);
9638
+ wrapper?.classList?.toggle?.('has-context-source-pins', isExternalSource);
9639
+ wrapper?.classList?.toggle?.('has-automation-source-pins', isExternalSource);
9640
+ if (!isExternalSource) {
9570
9641
  delete container.dataset.automationContextSource;
9642
+ delete container.dataset.automationWorkerSource;
9571
9643
  return;
9572
9644
  }
9573
9645
 
9574
- container.dataset.automationContextSource = 'true';
9646
+ if (isContextSource) {
9647
+ container.dataset.automationContextSource = 'true';
9648
+ } else {
9649
+ delete container.dataset.automationContextSource;
9650
+ }
9651
+ if (isWorkerSource) {
9652
+ container.dataset.automationWorkerSource = 'true';
9653
+ } else {
9654
+ delete container.dataset.automationWorkerSource;
9655
+ }
9575
9656
  container.style.overflow = 'visible';
9576
9657
  container.style.contain = 'layout style';
9577
9658
  container.style.contentVisibility = 'visible';
@@ -9582,13 +9663,14 @@
9582
9663
  wrapper.style.contentVisibility = 'visible';
9583
9664
  wrapper.style.containIntrinsicSize = 'auto';
9584
9665
  }
9585
- getBusinessAutomationContextSourcePins(nodeModel).forEach(pin => {
9666
+ getBusinessAutomationExternalSourcePins(nodeModel).forEach(pin => {
9586
9667
  const outputGroup = createAutomationPinGroup([pin], 'output', {
9587
9668
  compact: true,
9588
9669
  placement: pin.placement
9589
9670
  });
9590
9671
  if (outputGroup) {
9591
- outputGroup.classList.add('is-context-source');
9672
+ outputGroup.classList.add('is-external-source');
9673
+ outputGroup.classList.add(isWorkerSource ? 'is-worker-source' : 'is-context-source');
9592
9674
  container.appendChild(outputGroup);
9593
9675
  }
9594
9676
  });
@@ -9619,7 +9701,7 @@
9619
9701
  return;
9620
9702
  }
9621
9703
 
9622
- Array.from(container.querySelectorAll('.map-node-memo__automation-pins.is-context-source'))
9704
+ Array.from(container.querySelectorAll('.map-node-memo__automation-pins.is-context-source, .map-node-memo__automation-pins.is-worker-source, .map-node-memo__automation-pins.is-external-source'))
9623
9705
  .forEach(element => element.remove());
9624
9706
  Array.from(container.querySelectorAll('.map-node-memo__automation-pins'))
9625
9707
  .filter(element => element.parentElement === container)
@@ -9658,10 +9740,12 @@
9658
9740
  }
9659
9741
 
9660
9742
  container.classList.remove('map-node-automation-context-source');
9743
+ container.classList.remove('map-node-automation-worker-source');
9661
9744
  delete container.dataset.automationContextSource;
9745
+ delete container.dataset.automationWorkerSource;
9662
9746
  container.dataset.automationKind = getBusinessAutomationNodeKind(nodeModel);
9663
9747
  container.dataset.automationLabel = getBusinessAutomationNodeLabel(nodeModel);
9664
- container.dataset.automationRole = getBusinessAutomationIntentLabel(nodeModel) || 'AI Task';
9748
+ container.dataset.automationRole = getBusinessAutomationNodeRoleLabel(nodeModel) || getBusinessAutomationIntentLabel(nodeModel) || 'AI Task';
9665
9749
  container.dataset.automationToolPolicy = getAutomationMetadataValue(nodeModel, AUTOMATION_TOOL_POLICY_METADATA_KEY, '');
9666
9750
  container.dataset.automationToolHints = getAutomationMetadataValue(nodeModel, AUTOMATION_TOOL_HINTS_METADATA_KEY, '');
9667
9751
  container.dataset.automationOutputType = getAutomationMetadataValue(nodeModel, AUTOMATION_OUTPUT_TYPE_METADATA_KEY, '');
@@ -9853,7 +9937,7 @@
9853
9937
  return null;
9854
9938
  }
9855
9939
 
9856
- const nodeEl = pin.closest('.map-node-automation, .map-node-automation-context-source, [data-node-id]');
9940
+ const nodeEl = pin.closest('.map-node-automation, .map-node-automation-context-source, .map-node-automation-worker-source, [data-node-id]');
9857
9941
  const nodeId = getBusinessAutomationNodeIdFromElement(nodeEl || pin);
9858
9942
  const pinId = String(pin.dataset?.pinId || '').trim();
9859
9943
  if (!nodeId || !pinId) {
@@ -9977,7 +10061,7 @@
9977
10061
  }
9978
10062
 
9979
10063
  const sourceType = normalizeBusinessAutomationHint(draft?.sourceType || '');
9980
- if (sourceType !== 'businesscontext') {
10064
+ if (sourceType !== 'businesscontext' && sourceType !== 'workertarget') {
9981
10065
  return null;
9982
10066
  }
9983
10067
 
@@ -9986,10 +10070,11 @@
9986
10070
  return null;
9987
10071
  }
9988
10072
 
9989
- const contextPin = targetNode.nodeEl.querySelector?.(
9990
- '.map-node-memo__automation-pin.is-input[data-pin-id="context"]'
9991
- ) || findBusinessAutomationPinElement(_module, targetNode.nodeId, 'context', 'input');
9992
- return resolveBusinessAutomationPinHit(contextPin);
10073
+ const targetPinId = sourceType === 'workertarget' ? 'worker' : 'context';
10074
+ const targetPin = targetNode.nodeEl.querySelector?.(
10075
+ `.map-node-memo__automation-pin.is-input[data-pin-id="${targetPinId}"]`
10076
+ ) || findBusinessAutomationPinElement(_module, targetNode.nodeId, targetPinId, 'input');
10077
+ return resolveBusinessAutomationPinHit(targetPin);
9993
10078
  }
9994
10079
 
9995
10080
  function handleBusinessAutomationDocumentPointerDown(event) {
@@ -10018,7 +10103,7 @@
10018
10103
  return;
10019
10104
  }
10020
10105
 
10021
- const nodeEl = pin.closest('.map-node-automation, .map-node-automation-context-source, [data-node-id]');
10106
+ const nodeEl = pin.closest('.map-node-automation, .map-node-automation-context-source, .map-node-automation-worker-source, [data-node-id]');
10022
10107
  const nodeId = getBusinessAutomationNodeIdFromElement(nodeEl || pin);
10023
10108
  const pinId = String(pin.dataset?.pinId || '').trim();
10024
10109
  const side = String(pin.dataset?.pinSide || pin.dataset?.pinDirection || '').trim().toLowerCase();
@@ -10237,7 +10322,9 @@
10237
10322
  }
10238
10323
 
10239
10324
  nodes.forEach(entry => {
10240
- if (!isBusinessAutomationNode(entry?.model) && !isBusinessAutomationContextSourceNode(entry?.model)) {
10325
+ if (!isBusinessAutomationNode(entry?.model)
10326
+ && !isBusinessAutomationContextSourceNode(entry?.model)
10327
+ && !isBusinessAutomationWorkerSourceNode(entry?.model)) {
10241
10328
  return;
10242
10329
  }
10243
10330
 
@@ -10283,7 +10370,9 @@
10283
10370
 
10284
10371
  function isBusinessAutomationRelationHighlightEligible(module, nodeId) {
10285
10372
  const entry = module?.nodeObjectsById?.get?.(String(nodeId || '').trim()) || null;
10286
- return isBusinessAutomationNode(entry?.model) || isBusinessAutomationContextSourceNode(entry?.model);
10373
+ return isBusinessAutomationNode(entry?.model)
10374
+ || isBusinessAutomationContextSourceNode(entry?.model)
10375
+ || isBusinessAutomationWorkerSourceNode(entry?.model);
10287
10376
  }
10288
10377
 
10289
10378
  function buildBusinessAutomationSelectionContextKey(context) {
@@ -10351,7 +10440,7 @@
10351
10440
  if (wrapper?.classList) {
10352
10441
  targets.push(wrapper);
10353
10442
  const inner = wrapper.querySelector?.(
10354
- '.map-node-automation, .map-node-automation-context-source, .map-node, .map-node-memo, .map-node-template-card'
10443
+ '.map-node-automation, .map-node-automation-context-source, .map-node-automation-worker-source, .map-node, .map-node-memo, .map-node-template-card'
10355
10444
  ) || null;
10356
10445
  if (inner?.classList) {
10357
10446
  targets.push(inner);
@@ -10428,6 +10517,13 @@
10428
10517
  || /->\s*BusinessContext\s*:/i.test(contract);
10429
10518
  }
10430
10519
 
10520
+ function isBusinessAutomationWorkerBindingEdge(edge) {
10521
+ const targetPinId = String(edge?.targetPinId || edge?.TargetPinId || '').trim().toLowerCase();
10522
+ const contract = String(edge?.contract || edge?.Contract || '').trim();
10523
+ return targetPinId === 'worker'
10524
+ || /->\s*WorkerTarget\s*:/i.test(contract);
10525
+ }
10526
+
10431
10527
  function cssEscapeValue(value) {
10432
10528
  const text = String(value || '');
10433
10529
  if (window.CSS?.escape) {
@@ -10454,7 +10550,7 @@
10454
10550
  height: 100%;
10455
10551
  overflow: visible;
10456
10552
  pointer-events: none;
10457
- z-index: 0;
10553
+ z-index: 1;
10458
10554
  `;
10459
10555
  visualLayer.setAttribute('aria-hidden', 'true');
10460
10556
 
@@ -10516,6 +10612,11 @@
10516
10612
  const webglRendererElement = module.renderer?.domElement || null;
10517
10613
  const cssRendererInContainer = cssRendererElement?.parentElement === container;
10518
10614
  const webglRendererInContainer = webglRendererElement?.parentElement === container;
10615
+ if (visualLayer?.isConnected) {
10616
+ visualLayer.style.zIndex = '1';
10617
+ visualLayer.style.pointerEvents = 'none';
10618
+ }
10619
+
10519
10620
  if (visualLayer?.isConnected && cssRendererInContainer && visualLayer.nextSibling !== cssRendererElement) {
10520
10621
  container.insertBefore(visualLayer, cssRendererElement);
10521
10622
  } else if (visualLayer?.isConnected
@@ -10641,7 +10742,7 @@
10641
10742
  const container = module?.container || document;
10642
10743
  const nodeSelector = side === 'input'
10643
10744
  ? `.map-node-automation[data-node-id="${cssEscapeValue(nodeId)}"]`
10644
- : `:is(.map-node-automation, .map-node-automation-context-source)[data-node-id="${cssEscapeValue(nodeId)}"]`;
10745
+ : `:is(.map-node-automation, .map-node-automation-context-source, .map-node-automation-worker-source)[data-node-id="${cssEscapeValue(nodeId)}"]`;
10645
10746
  const selector = `${nodeSelector} .map-node-memo__automation-pin.is-${cssEscapeValue(side)}[data-pin-id="${cssEscapeValue(pinId)}"]`;
10646
10747
  let candidates = Array.from(container.querySelectorAll(selector));
10647
10748
  if (candidates.length === 0 && side !== 'input') {
@@ -10671,6 +10772,10 @@
10671
10772
  }
10672
10773
 
10673
10774
  function getBusinessAutomationPinList(nodeModel, side) {
10775
+ if (side === 'output' && isBusinessAutomationWorkerSourceNode(nodeModel)) {
10776
+ return getBusinessAutomationWorkerSourcePins(nodeModel);
10777
+ }
10778
+
10674
10779
  if (side === 'output' && isBusinessAutomationContextSourceNode(nodeModel)) {
10675
10780
  return getBusinessAutomationContextSourcePins(nodeModel);
10676
10781
  }
@@ -11516,15 +11621,19 @@
11516
11621
  'Text'
11517
11622
  );
11518
11623
  const isContextEdge = isBusinessAutomationContextEdge(edge);
11624
+ const isWorkerEdge = isBusinessAutomationWorkerBindingEdge(edge);
11625
+ const isReferenceEdge = isContextEdge || isWorkerEdge;
11519
11626
  const theme = isContextEdge
11520
11627
  ? AUTOMATION_CONTEXT_PIN_THEME
11628
+ : isWorkerEdge
11629
+ ? AUTOMATION_WORKER_PIN_THEME
11521
11630
  : getAutomationPinTheme(sourceType);
11522
11631
  const pathData = buildBusinessAutomationEdgePathData(source, target);
11523
11632
  const isSelected = String(edge.id || '') === _businessAutomationSelectedEdgeId;
11524
11633
  const isRelationHighlighted = relationContext?.edgeIds?.has?.(String(edge.id || '').trim()) === true;
11525
11634
  const hitPointerEvents = _businessAutomationConnectionDraft ? 'none' : 'stroke';
11526
11635
  const item = ensureBusinessAutomationEdgeItem(renderState, edgeId);
11527
- updateBusinessAutomationEdgeItem(item, edge, pathData, source, target, theme, isContextEdge, isSelected, isRelationHighlighted, hitPointerEvents);
11636
+ updateBusinessAutomationEdgeItem(item, edge, pathData, source, target, theme, isReferenceEdge, isSelected, isRelationHighlighted, hitPointerEvents);
11528
11637
  liveEdgeIds.add(edgeId);
11529
11638
  }
11530
11639
 
@@ -11553,17 +11662,22 @@
11553
11662
  );
11554
11663
  const target = getBusinessAutomationDraftTargetPoint(module, draft, containerRect);
11555
11664
  if (source && target) {
11556
- const isContextDraft = String(draft.sourceType || '').trim().toLowerCase() === 'businesscontext';
11665
+ const draftSourceType = String(draft.sourceType || '').trim().toLowerCase();
11666
+ const isContextDraft = draftSourceType === 'businesscontext';
11667
+ const isWorkerDraft = draftSourceType === 'workertarget';
11668
+ const isReferenceDraft = isContextDraft || isWorkerDraft;
11557
11669
  const theme = isContextDraft
11558
11670
  ? AUTOMATION_CONTEXT_PIN_THEME
11671
+ : isWorkerDraft
11672
+ ? AUTOMATION_WORKER_PIN_THEME
11559
11673
  : getAutomationPinTheme(draft.sourceType || 'Text');
11560
11674
  setBusinessAutomationSvgAttributes(renderState.draftPath, {
11561
11675
  d: buildBusinessAutomationEdgePathData(source, target),
11562
11676
  class: 'mind-map-business-automation-edge-draft',
11563
11677
  stroke: theme.edge,
11564
- 'stroke-width': isContextDraft ? '2.1' : '2.4',
11565
- 'stroke-dasharray': isContextDraft ? '7 7' : '8 7',
11566
- opacity: isContextDraft ? '0.66' : '0.72'
11678
+ 'stroke-width': isReferenceDraft ? '2.1' : '2.4',
11679
+ 'stroke-dasharray': isReferenceDraft ? '7 7' : '8 7',
11680
+ opacity: isReferenceDraft ? '0.66' : '0.72'
11567
11681
  });
11568
11682
  setBusinessAutomationSvgAttributes(renderState.draftTarget, {
11569
11683
  cx: target.x.toFixed(1),
@@ -13782,6 +13896,119 @@
13782
13896
  event.stopPropagation();
13783
13897
  }
13784
13898
 
13899
+ const INLINE_EDITABLE_NODE_CANVAS_DRAG_EXCLUDED_SELECTOR = [
13900
+ 'button',
13901
+ 'a',
13902
+ 'input',
13903
+ 'textarea',
13904
+ 'select',
13905
+ '[contenteditable="true"]',
13906
+ '.node-prompt-copy-button',
13907
+ '.csv-table-header-button',
13908
+ '.resize-handle',
13909
+ '.css3d-resize-handle',
13910
+ '.map-node-memo__icon-wrap',
13911
+ '.map-node-memo__icon-button',
13912
+ '.map-node-memo__icon-popover',
13913
+ '.map-node-memo__icon-option',
13914
+ '.map-node-memo__agent-role-select',
13915
+ '.map-node-memo__agent-role-select-button',
13916
+ '.map-node-memo__agent-role-menu',
13917
+ '.map-node-memo__agent-role-option',
13918
+ '.map-node-memo__agent-action',
13919
+ '.map-node-memo__agent-actions',
13920
+ '.map-node-memo__agent-plan-panel',
13921
+ '.map-node-memo__agent-console-panel',
13922
+ '.map-node-memo__agent-console-resize',
13923
+ '.map-node-memo__agent-result-link',
13924
+ '.map-node-memo__automation-pins',
13925
+ '.map-node-memo__automation-pin',
13926
+ '.map-node-memo__automation-pin-label',
13927
+ '.map-node-memo__automation-pin-dot',
13928
+ '.map-node-memo__automation-badges',
13929
+ '.map-node-memo__automation-status',
13930
+ '.map-node-memo__automation-intent'
13931
+ ].join(', ');
13932
+
13933
+ const INLINE_EDITABLE_NODE_CANVAS_DRAG_SURFACE_SELECTOR = [
13934
+ '.node-content-wrapper',
13935
+ '.node-prompt-row',
13936
+ '.node-prompt',
13937
+ '.node-response',
13938
+ '.note-content',
13939
+ '.markdown-body',
13940
+ '.code-body',
13941
+ '.text-content',
13942
+ '.map-node-memo',
13943
+ '.map-node-memo__shell',
13944
+ '.map-node-memo__header',
13945
+ '.map-node-memo__title-wrap',
13946
+ '.map-node-memo__body-view'
13947
+ ].join(', ');
13948
+
13949
+ function bindInlineEditableNodeCanvasNavigation(container, nodeModel, source) {
13950
+ if (!(container instanceof HTMLElement) || !nodeModel) {
13951
+ return;
13952
+ }
13953
+
13954
+ const nodeId = String(getNodeId(nodeModel) || container.dataset?.nodeId || '').trim();
13955
+ if (!nodeId) {
13956
+ return;
13957
+ }
13958
+
13959
+ if (container._inlineEditableCanvasNavigationModule === _module
13960
+ && container._inlineEditableCanvasNavigationNodeId === nodeId
13961
+ && container._inlineEditableCanvasNavigationHandler) {
13962
+ return;
13963
+ }
13964
+
13965
+ if (container._inlineEditableCanvasNavigationHandler) {
13966
+ container.removeEventListener('mousedown', container._inlineEditableCanvasNavigationHandler, true);
13967
+ }
13968
+
13969
+ const handler = event => {
13970
+ if (!event || Number(event.button) !== 0 || event.defaultPrevented) {
13971
+ return;
13972
+ }
13973
+
13974
+ const target = event.target;
13975
+ if (!(target instanceof Element) || !container.contains(target)) {
13976
+ return;
13977
+ }
13978
+
13979
+ if (target.closest(INLINE_EDITABLE_NODE_CANVAS_DRAG_EXCLUDED_SELECTOR)) {
13980
+ return;
13981
+ }
13982
+
13983
+ const surface = target.closest(INLINE_EDITABLE_NODE_CANVAS_DRAG_SURFACE_SELECTOR);
13984
+ if (!surface || !container.contains(surface)) {
13985
+ return;
13986
+ }
13987
+
13988
+ const selectedNodeId = String(_module?.selectedNodeIdJs || '').trim();
13989
+ const wrapper = container.closest?.('.css3d-resolution-wrapper');
13990
+ const isSelectedDom = container.classList.contains('selected') || wrapper?.classList?.contains?.('selected') === true;
13991
+ if ((selectedNodeId !== nodeId && !isSelectedDom) || container.classList.contains('is-editing')) {
13992
+ return;
13993
+ }
13994
+
13995
+ const started = window.MindMapInteractions?.startNodeDragFromDom?.(
13996
+ _module,
13997
+ event,
13998
+ nodeId,
13999
+ { source: source || 'inline-editable-css3d' }
14000
+ ) === true;
14001
+ if (started) {
14002
+ event.stopImmediatePropagation?.();
14003
+ }
14004
+ };
14005
+
14006
+ container._inlineEditableCanvasNavigationModule = _module;
14007
+ container._inlineEditableCanvasNavigationNodeId = nodeId;
14008
+ container._inlineEditableCanvasNavigationHandler = handler;
14009
+ container.addEventListener('mousedown', handler, true);
14010
+ }
14011
+
13785
14012
  function applyMemoTheme(element, colorKey) {
13786
14013
  if (!element) return;
13787
14014
  const semanticType = String(element.dataset?.semanticType || '').trim();
@@ -20528,6 +20755,11 @@
20528
20755
  if (!container || !nodeModel) return;
20529
20756
  ensureMindCanvasAgentConsoleResize(container, nodeModel);
20530
20757
  bindMemoWheelRouting(_module, container);
20758
+ bindInlineEditableNodeCanvasNavigation(
20759
+ container,
20760
+ nodeModel,
20761
+ isBusinessAutomationNode(nodeModel) ? 'business-automation-inline-editable' : 'memo-inline-editable'
20762
+ );
20531
20763
  if (container._memoEventsBound === true) return;
20532
20764
  container._memoEventsBound = true;
20533
20765
  container.dataset.agentPendingAction = container.dataset.agentPendingAction || '';
@@ -23456,6 +23688,9 @@
23456
23688
  contentWrapper.appendChild(responseDiv);
23457
23689
  container.appendChild(contentWrapper);
23458
23690
  renderBusinessAutomationChrome(container, nodeModel);
23691
+ if (isNoteNode || isCodeNode) {
23692
+ bindInlineEditableNodeCanvasNavigation(container, nodeModel, `${contentTypeLower}-inline-editable`);
23693
+ }
23459
23694
 
23460
23695
  return container;
23461
23696
  }
@@ -24124,7 +24359,7 @@
24124
24359
  }
24125
24360
 
24126
24361
  if (isRemoteFleetNode(nodeModel)) {
24127
- el.classList.remove('node-type-memo', 'has-context-source-pins');
24362
+ el.classList.remove('node-type-memo', 'has-context-source-pins', 'has-automation-source-pins');
24128
24363
  el.classList.add('node-type-templatelauncher');
24129
24364
  el.dataset.contentType = 'templateLauncher';
24130
24365
  el.style.overflow = 'hidden';
@@ -24171,11 +24406,12 @@
24171
24406
  renderRemoteFleetMonitor(bodyView, nodeModel);
24172
24407
  }
24173
24408
  bindTemplateCardCanvasNavigation(card, nodeModel);
24409
+ renderBusinessAutomationChrome(card, nodeModel);
24174
24410
  return;
24175
24411
  }
24176
24412
 
24177
24413
  if (contentTypeLower === 'templatelauncher') {
24178
- el.classList.remove('node-type-memo', 'has-context-source-pins');
24414
+ el.classList.remove('node-type-memo', 'has-context-source-pins', 'has-automation-source-pins');
24179
24415
  el.classList.add('node-type-templatelauncher');
24180
24416
  el.dataset.contentType = 'templateLauncher';
24181
24417
  el.style.overflow = 'hidden';
@@ -24420,8 +24656,13 @@
24420
24656
  }
24421
24657
  }
24422
24658
  }
24423
-
24424
- // Hide loading indicator if present
24659
+
24660
+ if (contentTypeLower === 'note' || contentTypeLower === 'code') {
24661
+ const inlineEditableRoot = el.querySelector('.map-node-note, .map-node-code') || el.firstElementChild || el;
24662
+ bindInlineEditableNodeCanvasNavigation(inlineEditableRoot, nodeModel, `${contentTypeLower}-inline-editable`);
24663
+ }
24664
+
24665
+ // Hide loading indicator if present
24425
24666
  const loadingEl = el.querySelector(`[id^="node-loading-"]`);
24426
24667
  if (loadingEl) {
24427
24668
  renderNodeLoadingRow(loadingEl, nodeModel, contentTypeLower, isLoading, hasContent);