@mindexec/cli 0.2.117 → 0.2.119

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 (19) hide show
  1. package/package.json +3 -3
  2. package/server.js +77 -0
  3. package/wwwroot/_content/MindExecution.Shared/js/mind-map-css3d-manager.js +177 -2
  4. package/wwwroot/_framework/MindExecution.Core.asayb4hw1o.dll +0 -0
  5. package/wwwroot/_framework/{MindExecution.Kernel.pbzp3jfync.dll → MindExecution.Kernel.3zom09ir6j.dll} +0 -0
  6. package/wwwroot/_framework/{MindExecution.Plugins.Admin.gxzwlji1cf.dll → MindExecution.Plugins.Admin.bk23zzy6wc.dll} +0 -0
  7. package/wwwroot/_framework/{MindExecution.Plugins.Business.vtaey8c59y.dll → MindExecution.Plugins.Business.zwcvc8wufe.dll} +0 -0
  8. package/wwwroot/_framework/{MindExecution.Plugins.Concept.85y7un1ks6.dll → MindExecution.Plugins.Concept.lxunwcdjgq.dll} +0 -0
  9. package/wwwroot/_framework/{MindExecution.Plugins.Directory.zc8ffaoknd.dll → MindExecution.Plugins.Directory.jc0g7fvyzv.dll} +0 -0
  10. package/wwwroot/_framework/{MindExecution.Plugins.PlanMaster.ylooagumgh.dll → MindExecution.Plugins.PlanMaster.2sugb66h95.dll} +0 -0
  11. package/wwwroot/_framework/{MindExecution.Plugins.YouTube.azfozpumhv.dll → MindExecution.Plugins.YouTube.vy0nsbcoo4.dll} +0 -0
  12. package/wwwroot/_framework/{MindExecution.Shared.mppf8quyau.dll → MindExecution.Shared.e8lipb57xv.dll} +0 -0
  13. package/wwwroot/_framework/MindExecution.Web.994sb3nzuy.dll +0 -0
  14. package/wwwroot/_framework/blazor.boot.json +21 -21
  15. package/wwwroot/index.html +3 -3
  16. package/wwwroot/service-worker-assets.js +24 -24
  17. package/wwwroot/service-worker.js +1 -1
  18. package/wwwroot/_framework/MindExecution.Core.fc9cjbjplq.dll +0 -0
  19. package/wwwroot/_framework/MindExecution.Web.tln762tijf.dll +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindexec/cli",
3
- "version": "0.2.117",
3
+ "version": "0.2.119",
4
4
  "description": "MindExec local runtime and bridge CLI",
5
5
  "main": "server.js",
6
6
  "type": "module",
@@ -20,7 +20,7 @@
20
20
  "scripts": {
21
21
  "start": "node launch-bridge.cjs",
22
22
  "dev": "node launch-bridge.cjs --watch",
23
- "test:syntax": "node --check server.js && node --check remote-hub.js && node --check codex-runtime.js && node --check launch-bridge.cjs && node --check port-guard.cjs && node --check scripts/setup-tree-sitter-grammars.mjs && node --check scripts/auth-session-smoke.mjs && node --check scripts/remote-hub-smoke.mjs && node --check scripts/remote-hub-scale-smoke.mjs && node --check scripts/remote-fleet-render-smoke.mjs && node --check scripts/remote-http-smoke.mjs && node --check scripts/remote-frame-ws-smoke.mjs && node --check scripts/remote-agent-ws-smoke.mjs",
23
+ "test:syntax": "node --check server.js && node --check remote-hub.js && node --check codex-runtime.js && node --check launch-bridge.cjs && node --check port-guard.cjs && node --check scripts/setup-tree-sitter-grammars.mjs && node --check scripts/auth-session-smoke.mjs && node --check scripts/remote-hub-smoke.mjs && node --check scripts/remote-hub-scale-smoke.mjs && node --check scripts/remote-fleet-render-smoke.mjs && node --check scripts/remote-http-smoke.mjs && node --check scripts/remote-frame-ws-smoke.mjs && node --check scripts/remote-agent-ws-smoke.mjs",
24
24
  "test:auth": "node scripts/auth-session-smoke.mjs",
25
25
  "test:remote": "node scripts/remote-hub-smoke.mjs",
26
26
  "test:remote:scale": "node scripts/remote-hub-scale-smoke.mjs",
@@ -47,7 +47,7 @@
47
47
  "node": ">=20"
48
48
  },
49
49
  "dependencies": {
50
- "@mindexec/remote": "^0.1.17",
50
+ "@mindexec/remote": "^0.1.17",
51
51
  "@openai/codex-sdk": "^0.137.0",
52
52
  "chokidar": "^3.6.0",
53
53
  "cors": "^2.8.5",
package/server.js CHANGED
@@ -2906,7 +2906,11 @@ const REMOTE_AGENT_STDIO_TAIL_CHARS = 12000;
2906
2906
  const REMOTE_AGENT_EARLY_EXIT_MS = 1200;
2907
2907
  const REMOTE_AGENT_READY_TIMEOUT_MS = 5000;
2908
2908
  const REMOTE_AGENT_DEFAULT_ENGINE = 'auto';
2909
+ const REMOTE_AGENT_SYNC_REPORT_LOG_REPEAT_MS = 30000;
2909
2910
  let remoteAgentState = createRemoteAgentIdleState();
2911
+ let remoteAgentSyncReportState = null;
2912
+ let remoteAgentSyncReportLogKey = '';
2913
+ let remoteAgentSyncReportLogAt = 0;
2910
2914
 
2911
2915
  function createRemoteAgentIdleState(overrides = {}) {
2912
2916
  return {
@@ -2940,6 +2944,7 @@ function serializeRemoteAgentState() {
2940
2944
  const { proc, ...publicState } = remoteAgentState;
2941
2945
  return {
2942
2946
  ...publicState,
2947
+ registrySync: remoteAgentSyncReportState,
2943
2948
  running: remoteAgentState.status === 'running'
2944
2949
  && !!remoteAgentState.proc
2945
2950
  && remoteAgentState.proc.exitCode === null
@@ -2947,6 +2952,71 @@ function serializeRemoteAgentState() {
2947
2952
  };
2948
2953
  }
2949
2954
 
2955
+ function createRemoteAgentSyncReport(body = {}) {
2956
+ const normalizeList = value => Array.isArray(value)
2957
+ ? value.map(item => safeRemoteAgentField(item, 160)).filter(Boolean).slice(0, 12)
2958
+ : [];
2959
+ return {
2960
+ ok: body.ok === true || body.Ok === true,
2961
+ attempted: body.attempted === true || body.Attempted === true,
2962
+ connected: body.connected === true || body.Connected === true,
2963
+ disconnected: body.disconnected === true || body.Disconnected === true,
2964
+ skipped: body.skipped === true || body.Skipped === true,
2965
+ reason: safeRemoteAgentField(body.reason || body.Reason, 160),
2966
+ error: safeRemoteAgentField(body.error || body.Error, 240),
2967
+ trigger: safeRemoteAgentField(body.trigger || body.Trigger, 80),
2968
+ authenticated: body.authenticated === true || body.Authenticated === true,
2969
+ localHostTargetActive: body.localHostTargetActive === true || body.LocalHostTargetActive === true,
2970
+ localHostTargetLeaseId: safeRemoteAgentField(body.localHostTargetLeaseId || body.LocalHostTargetLeaseId, 128),
2971
+ localHostTargetNodeId: safeRemoteAgentField(body.localHostTargetNodeId || body.LocalHostTargetNodeId, 128),
2972
+ targetActive: body.targetActive === true || body.TargetActive === true,
2973
+ targetEndpoint: normalizeRemoteManagerEndpoint(body.targetEndpoint || body.TargetEndpoint),
2974
+ targetEndpointCandidates: normalizeList(body.targetEndpointCandidates || body.TargetEndpointCandidates),
2975
+ targetLeaseId: safeRemoteAgentField(body.targetLeaseId || body.TargetLeaseId, 128),
2976
+ targetNodeId: safeRemoteAgentField(body.targetNodeId || body.TargetNodeId, 128),
2977
+ targetExpiresAt: safeRemoteAgentField(body.targetExpiresAt || body.TargetExpiresAt, 80),
2978
+ updatedAt: new Date().toISOString()
2979
+ };
2980
+ }
2981
+
2982
+ function rememberRemoteAgentSyncReport(report) {
2983
+ remoteAgentSyncReportState = report;
2984
+ const reason = report.reason || report.error || (report.ok ? 'ok' : 'failed');
2985
+ const status = report.connected
2986
+ ? 'connected'
2987
+ : report.disconnected
2988
+ ? 'disconnected'
2989
+ : report.attempted
2990
+ ? 'attempted'
2991
+ : report.skipped
2992
+ ? 'skipped'
2993
+ : report.ok
2994
+ ? 'ok'
2995
+ : 'failed';
2996
+ const key = [
2997
+ status,
2998
+ reason,
2999
+ report.targetEndpoint || '',
3000
+ report.targetLeaseId || '',
3001
+ report.localHostTargetActive ? 'local-host' : ''
3002
+ ].join('|');
3003
+ const now = Date.now();
3004
+ if (reason === 'throttled') {
3005
+ return;
3006
+ }
3007
+ if (key === remoteAgentSyncReportLogKey
3008
+ && now - remoteAgentSyncReportLogAt < REMOTE_AGENT_SYNC_REPORT_LOG_REPEAT_MS) {
3009
+ return;
3010
+ }
3011
+
3012
+ remoteAgentSyncReportLogKey = key;
3013
+ remoteAgentSyncReportLogAt = now;
3014
+ logEvent(
3015
+ 'remote',
3016
+ `registry sync ${status} ${formatKeyValue('reason', reason)} ${formatKeyValue('target', report.targetEndpoint || '-')} ${formatKeyValue('auth', report.authenticated ? 'yes' : 'no')}`,
3017
+ 'remote');
3018
+ }
3019
+
2950
3020
  function appendRemoteAgentOutput(stream, chunk, stateConnectionKey = '') {
2951
3021
  if (stateConnectionKey && remoteAgentState.connectionKey !== stateConnectionKey) {
2952
3022
  return;
@@ -8066,6 +8136,13 @@ app.get('/api/remote/agent/status', (req, res) => {
8066
8136
  res.json(serializeRemoteAgentState());
8067
8137
  });
8068
8138
 
8139
+ app.post('/api/remote/agent/sync-report', (req, res) => {
8140
+ res.setHeader('Cache-Control', 'no-store');
8141
+ const report = createRemoteAgentSyncReport(req.body || {});
8142
+ rememberRemoteAgentSyncReport(report);
8143
+ res.json({ ok: true, report });
8144
+ });
8145
+
8069
8146
  app.post('/api/remote/agent/connect', async (req, res) => {
8070
8147
  res.setHeader('Cache-Control', 'no-store');
8071
8148
  try {
@@ -12221,11 +12221,119 @@
12221
12221
  }
12222
12222
  }
12223
12223
 
12224
+ function isTemplateCardCanvasControlTarget(target) {
12225
+ return !!target?.closest?.([
12226
+ 'button',
12227
+ 'a',
12228
+ 'input',
12229
+ 'textarea',
12230
+ 'select',
12231
+ '[contenteditable="true"]',
12232
+ '[data-template-card-interactive="true"]',
12233
+ '[data-template-card-action]',
12234
+ '[data-template-option-id]',
12235
+ '[data-remote-fleet-action]',
12236
+ '[data-remote-fleet-control-popup]',
12237
+ '[data-remote-fleet-task-input]',
12238
+ '[data-remote-fleet-ai-toggle]',
12239
+ '[data-remote-fleet-search]',
12240
+ '.csv-table-scroll',
12241
+ '.csv-table-header-button',
12242
+ '.csv-table-cell'
12243
+ ].join(', '));
12244
+ }
12245
+
12246
+ function routeTemplateCardWheelToCanvas(event) {
12247
+ if (!_module || !event) {
12248
+ return false;
12249
+ }
12250
+
12251
+ if (typeof window.MindMapInteractions?.routeCanvasWheelEvent === 'function') {
12252
+ window.MindMapInteractions.routeCanvasWheelEvent(_module, event);
12253
+ return true;
12254
+ }
12255
+
12256
+ if (window.MindMapInteractions?.shouldTreatWheelAsZoom?.(_module, event) === true) {
12257
+ window.MindMapInteractions?.routeWheelEventToZoom?.(_module, event);
12258
+ } else {
12259
+ window.MindMapInteractions?.routeCtrlWheelEventToVerticalScroll?.(_module, event);
12260
+ }
12261
+ return true;
12262
+ }
12263
+
12264
+ function bindTemplateCardCanvasNavigation(container, nodeModel) {
12265
+ const card = container?.classList?.contains?.('map-node-template-card')
12266
+ ? container
12267
+ : container?.querySelector?.('.map-node-template-card');
12268
+ if (!card || typeof card.addEventListener !== 'function') {
12269
+ return;
12270
+ }
12271
+
12272
+ if (card._templateCardCanvasNavigationModule === _module
12273
+ && card._templateCardWheelNavigationHandler
12274
+ && card._templateCardPanNavigationHandler) {
12275
+ return;
12276
+ }
12277
+
12278
+ if (card._templateCardWheelNavigationHandler) {
12279
+ card.removeEventListener('wheel', card._templateCardWheelNavigationHandler, true);
12280
+ }
12281
+ if (card._templateCardPanNavigationHandler) {
12282
+ card.removeEventListener('mousedown', card._templateCardPanNavigationHandler, true);
12283
+ }
12284
+
12285
+ const nodeId = String(getNodeId(nodeModel) || card.dataset?.nodeId || '').trim();
12286
+ const isRemoteFleetCard = isRemoteFleetMonitorNode(nodeModel);
12287
+
12288
+ const wheelHandler = event => {
12289
+ routeTemplateCardWheelToCanvas(event);
12290
+ };
12291
+
12292
+ const panHandler = event => {
12293
+ const button = Number(event?.button);
12294
+ if (button === 1 || button === 2) {
12295
+ const started = window.MindMapInteractions?.beginPanFromMouseEvent?.(
12296
+ _module,
12297
+ event,
12298
+ card
12299
+ ) === true;
12300
+ if (started) {
12301
+ event.stopImmediatePropagation?.();
12302
+ }
12303
+ return;
12304
+ }
12305
+
12306
+ if (button !== 0 || isRemoteFleetCard || !nodeId || isTemplateCardCanvasControlTarget(event.target)) {
12307
+ return;
12308
+ }
12309
+
12310
+ const started = window.MindMapInteractions?.startNodeDragFromDom?.(
12311
+ _module,
12312
+ event,
12313
+ nodeId,
12314
+ { source: 'template-card' }
12315
+ ) === true;
12316
+ if (started) {
12317
+ event.stopImmediatePropagation?.();
12318
+ }
12319
+ };
12320
+
12321
+ card._templateCardCanvasNavigationModule = _module;
12322
+ card._templateCardWheelNavigationHandler = wheelHandler;
12323
+ card._templateCardPanNavigationHandler = panHandler;
12324
+ card.addEventListener('wheel', wheelHandler, { passive: false, capture: true });
12325
+ card.addEventListener('mousedown', panHandler, { passive: false, capture: true });
12326
+ }
12327
+
12224
12328
  function bindTemplateLauncherNodeEvents(container, nodeModel) {
12225
12329
  const card = container?.classList?.contains?.('map-node-template-card')
12226
12330
  ? container
12227
12331
  : container?.querySelector?.('.map-node-template-card');
12228
- if (!card || card.dataset.templateCardEventsBound === 'true') return;
12332
+ if (!card) return;
12333
+
12334
+ bindTemplateCardCanvasNavigation(card, nodeModel);
12335
+
12336
+ if (card.dataset.templateCardEventsBound === 'true') return;
12229
12337
 
12230
12338
  card.dataset.templateCardEventsBound = 'true';
12231
12339
  card._templateCardConfig = getTemplateCardConfig(nodeModel);
@@ -13359,6 +13467,8 @@
13359
13467
  const REMOTE_FLEET_TASK_FOLLOW_REFRESH_MS = 2000;
13360
13468
  const REMOTE_FLEET_TASK_FOLLOW_MAX_TICKS = 60;
13361
13469
  const REMOTE_FLEET_HOST_LEASE_REFRESH_MS = 10000;
13470
+ const REMOTE_FLEET_AUTO_HOST_STORAGE_KEY = 'MindExec.RemoteFleet.AutoHost';
13471
+ const REMOTE_FLEET_AUTO_HOST_NODE_STORAGE_KEY = 'MindExec.RemoteFleet.AutoHostNodeId';
13362
13472
  const remoteFleetHostLeaseTimers = new Map();
13363
13473
  const remoteFleetLocalHostTargets = new Map();
13364
13474
  const remoteFleetBinaryFrameSessions = new Map();
@@ -13445,6 +13555,31 @@
13445
13555
  return result?.active === false || result?.Active === false;
13446
13556
  }
13447
13557
 
13558
+ function isRemoteFleetAutoHostEnabled(nodeId) {
13559
+ try {
13560
+ const enabled = String(localStorage.getItem(REMOTE_FLEET_AUTO_HOST_STORAGE_KEY) || '').trim().toLowerCase();
13561
+ if (enabled !== 'true') return false;
13562
+ const storedNodeId = String(localStorage.getItem(REMOTE_FLEET_AUTO_HOST_NODE_STORAGE_KEY) || '').trim();
13563
+ return !storedNodeId || storedNodeId === String(nodeId || '').trim();
13564
+ } catch {
13565
+ return false;
13566
+ }
13567
+ }
13568
+
13569
+ function rememberRemoteFleetAutoHostPreference(nodeId, enabled) {
13570
+ try {
13571
+ if (enabled === true) {
13572
+ localStorage.setItem(REMOTE_FLEET_AUTO_HOST_STORAGE_KEY, 'true');
13573
+ localStorage.setItem(REMOTE_FLEET_AUTO_HOST_NODE_STORAGE_KEY, String(nodeId || '').trim());
13574
+ } else {
13575
+ localStorage.removeItem(REMOTE_FLEET_AUTO_HOST_STORAGE_KEY);
13576
+ localStorage.removeItem(REMOTE_FLEET_AUTO_HOST_NODE_STORAGE_KEY);
13577
+ }
13578
+ } catch {
13579
+ // localStorage may be unavailable in restricted browser modes.
13580
+ }
13581
+ }
13582
+
13448
13583
  function rememberRemoteFleetLocalHostTarget(nodeId, enabled, result) {
13449
13584
  const id = String(nodeId || '').trim();
13450
13585
  if (!id) return;
@@ -16229,6 +16364,15 @@
16229
16364
  if (bodyView._remoteFleetNodeSelectionBound !== true) {
16230
16365
  bodyView._remoteFleetNodeSelectionBound = true;
16231
16366
  bodyView.addEventListener('mousedown', event => {
16367
+ if (event.button === 1 || event.button === 2) {
16368
+ window.MindMapInteractions?.beginPanFromMouseEvent?.(_module, event, bodyView);
16369
+ return;
16370
+ }
16371
+
16372
+ if (event.button !== 0) {
16373
+ return;
16374
+ }
16375
+
16232
16376
  const controlTarget = event.target?.closest?.('button, input, textarea, select, [contenteditable="true"]');
16233
16377
  if (controlTarget) {
16234
16378
  return;
@@ -17270,7 +17414,16 @@
17270
17414
  });
17271
17415
  getDeviceCards().forEach(card => {
17272
17416
  ['mousedown', 'mouseup', 'dblclick'].forEach(eventName => {
17273
- card.addEventListener(eventName, event => event.stopPropagation());
17417
+ card.addEventListener(eventName, event => {
17418
+ if (event.button === 1 || event.button === 2) {
17419
+ if (eventName === 'mousedown') {
17420
+ window.MindMapInteractions?.beginPanFromMouseEvent?.(_module, event, card);
17421
+ }
17422
+ return;
17423
+ }
17424
+
17425
+ event.stopPropagation();
17426
+ });
17274
17427
  });
17275
17428
  card.addEventListener('dblclick', event => {
17276
17429
  event.preventDefault();
@@ -17371,6 +17524,7 @@
17371
17524
  const setRemoteFleetHostTarget = async (enabled, options = {}) => {
17372
17525
  const quiet = options?.quiet === true;
17373
17526
  const renew = options?.renew === true || quiet;
17527
+ const syncNodeState = quiet !== true || options?.sync === true;
17374
17528
  const activeButton = enabled ? hostButton : null;
17375
17529
  if (!quiet && activeButton) {
17376
17530
  activeButton.disabled = true;
@@ -17389,10 +17543,16 @@
17389
17543
  error: result?.error || result?.Error || ''
17390
17544
  });
17391
17545
  rememberRemoteFleetLocalHostTarget(nodeId, enabled === true, result);
17546
+ if (isRemoteFleetResultSuccess(result)) {
17547
+ rememberRemoteFleetAutoHostPreference(nodeId, enabled === true && isRemoteFleetResultActive(result));
17548
+ }
17392
17549
  if (quiet) {
17393
17550
  if (!isRemoteFleetResultSuccess(result) || !isRemoteFleetResultActive(result)) {
17394
17551
  stopRemoteFleetHostLeaseTimer(nodeId);
17395
17552
  }
17553
+ if (syncNodeState) {
17554
+ await syncRemoteFleetNodeStateFromResult(result);
17555
+ }
17396
17556
  return result;
17397
17557
  }
17398
17558
  await syncRemoteFleetNodeStateFromResult(result);
@@ -17577,6 +17737,17 @@
17577
17737
 
17578
17738
  if (isHostingTarget) {
17579
17739
  startRemoteFleetHostLeaseTimer(nodeId, () => setRemoteFleetHostTarget(true, { quiet: true, renew: true }));
17740
+ } else if (isRemoteFleetAutoHostEnabled(nodeId) && bodyView._remoteFleetAutoHostRestoreStarted !== true) {
17741
+ bodyView._remoteFleetAutoHostRestoreStarted = true;
17742
+ setTimeout(() => {
17743
+ if (!document.body.contains(bodyView)) return;
17744
+ setRemoteFleetHostTarget(true, { quiet: true, renew: true, sync: true }).catch(error => {
17745
+ window.RuntimeTrace?.emit?.('remote.hostTarget.autoRestoreFailed', {
17746
+ nodeId,
17747
+ error: error?.message || String(error || '')
17748
+ });
17749
+ });
17750
+ }, 250);
17580
17751
  }
17581
17752
 
17582
17753
  const hasVisibleLiveTarget = getVisibleLiveFrameDeviceIds().length > 0
@@ -20837,6 +21008,9 @@
20837
21008
  && !isRemoteFleetMonitorNode(nodeModel)) {
20838
21009
  bindTemplateLauncherNodeEvents(clonedElement, nodeModel);
20839
21010
  }
21011
+ if (String(nodeModel.contentType ?? nodeModel.ContentType ?? '').toLowerCase() === 'templatelauncher') {
21012
+ bindTemplateCardCanvasNavigation(clonedElement, nodeModel);
21013
+ }
20840
21014
  wrapper.appendChild(clonedElement);
20841
21015
  if (String(nodeModel.contentType ?? nodeModel.ContentType ?? '').toLowerCase() !== 'templatelauncher'
20842
21016
  || isRemoteFleetMonitorNode(nodeModel)) {
@@ -21070,6 +21244,7 @@
21070
21244
 
21071
21245
  const bodyView = card.querySelector('.template-card__remote-fleet-body');
21072
21246
  renderRemoteFleetMonitor(bodyView, nodeModel);
21247
+ bindTemplateCardCanvasNavigation(card, nodeModel);
21073
21248
  return;
21074
21249
  }
21075
21250
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "mainAssemblyName": "MindExecution.Web",
3
3
  "resources": {
4
- "hash": "sha256-JxTp+hXYDhd47gICFMzpCDWm8b4z1JGet67SEEI1F3c=",
4
+ "hash": "sha256-Sm5LEcaIEbOQMLRdM7FmN29gN1AP1yTcQOVH+E/ZgGY=",
5
5
  "fingerprinting": {
6
6
  "Google.Protobuf.9h59ukbel7.dll": "Google.Protobuf.dll",
7
7
  "Markdig.d1j7v41cl1.dll": "Markdig.dll",
@@ -123,16 +123,16 @@
123
123
  "System.brmz7yk5qh.dll": "System.dll",
124
124
  "netstandard.yvr3prsx0x.dll": "netstandard.dll",
125
125
  "System.Private.CoreLib.c1dbswx1b2.dll": "System.Private.CoreLib.dll",
126
- "MindExecution.Core.fc9cjbjplq.dll": "MindExecution.Core.dll",
127
- "MindExecution.Kernel.pbzp3jfync.dll": "MindExecution.Kernel.dll",
128
- "MindExecution.Plugins.Admin.gxzwlji1cf.dll": "MindExecution.Plugins.Admin.dll",
129
- "MindExecution.Plugins.Business.vtaey8c59y.dll": "MindExecution.Plugins.Business.dll",
130
- "MindExecution.Plugins.Concept.85y7un1ks6.dll": "MindExecution.Plugins.Concept.dll",
131
- "MindExecution.Plugins.Directory.zc8ffaoknd.dll": "MindExecution.Plugins.Directory.dll",
132
- "MindExecution.Plugins.PlanMaster.ylooagumgh.dll": "MindExecution.Plugins.PlanMaster.dll",
133
- "MindExecution.Plugins.YouTube.azfozpumhv.dll": "MindExecution.Plugins.YouTube.dll",
134
- "MindExecution.Shared.mppf8quyau.dll": "MindExecution.Shared.dll",
135
- "MindExecution.Web.tln762tijf.dll": "MindExecution.Web.dll",
126
+ "MindExecution.Core.asayb4hw1o.dll": "MindExecution.Core.dll",
127
+ "MindExecution.Kernel.3zom09ir6j.dll": "MindExecution.Kernel.dll",
128
+ "MindExecution.Plugins.Admin.bk23zzy6wc.dll": "MindExecution.Plugins.Admin.dll",
129
+ "MindExecution.Plugins.Business.zwcvc8wufe.dll": "MindExecution.Plugins.Business.dll",
130
+ "MindExecution.Plugins.Concept.lxunwcdjgq.dll": "MindExecution.Plugins.Concept.dll",
131
+ "MindExecution.Plugins.Directory.jc0g7fvyzv.dll": "MindExecution.Plugins.Directory.dll",
132
+ "MindExecution.Plugins.PlanMaster.2sugb66h95.dll": "MindExecution.Plugins.PlanMaster.dll",
133
+ "MindExecution.Plugins.YouTube.vy0nsbcoo4.dll": "MindExecution.Plugins.YouTube.dll",
134
+ "MindExecution.Shared.e8lipb57xv.dll": "MindExecution.Shared.dll",
135
+ "MindExecution.Web.994sb3nzuy.dll": "MindExecution.Web.dll",
136
136
  "dotnet.js": "dotnet.js",
137
137
  "dotnet.native.qc8g39g30v.js": "dotnet.native.js",
138
138
  "dotnet.native.boem75ye5i.wasm": "dotnet.native.wasm",
@@ -278,18 +278,18 @@
278
278
  "System.Xml.XDocument.sn51jas17n.dll": "sha256-GNI2kFgFmPTwzuzwUn8gxK+AzGLUWRJFdg9JzIbrybQ=",
279
279
  "System.brmz7yk5qh.dll": "sha256-CfM2miyj1KHApFmqMdLYWio3S/jrdON2pW9Xr2nTwlo=",
280
280
  "netstandard.yvr3prsx0x.dll": "sha256-EksNn8Luo4bOWqJ6X7dIe9qG9oOqwOVzjH2xYyMNi+E=",
281
- "MindExecution.Core.fc9cjbjplq.dll": "sha256-TymUFwryFLdbCYy2U5qdgE2ZV1yHaLR9bgyrmx6Tcp0=",
282
- "MindExecution.Kernel.pbzp3jfync.dll": "sha256-Ff6WHyLD39V0fEjUiQlxX9Y+edssyTH+7T4zfBdj3s0=",
283
- "MindExecution.Plugins.Concept.85y7un1ks6.dll": "sha256-ZK10a6NfAZTCKX0BpiH6e+pBatMwTeXMCtA79A+zGQg=",
284
- "MindExecution.Plugins.PlanMaster.ylooagumgh.dll": "sha256-aoNSkErjCAqRgET/An00bm2GP3Jsnnu4hz8e/jpaLcI=",
285
- "MindExecution.Shared.mppf8quyau.dll": "sha256-FsB415v0PlO8/788VKC99rE/BhViR61KcM9+Crxo9Ok=",
286
- "MindExecution.Web.tln762tijf.dll": "sha256-vy73kyPmRU7hqhUFOFs9fdsn5AWmO7cNTRDoWigkc2M="
281
+ "MindExecution.Core.asayb4hw1o.dll": "sha256-5gla4JTR/zbvkGpneSt6S7ItE51+MjWgjW6L+B6Yevk=",
282
+ "MindExecution.Kernel.3zom09ir6j.dll": "sha256-78vR2SNkF9FwdQv0fEItSyz4HzgyzwGUROJAnpripPA=",
283
+ "MindExecution.Plugins.Concept.lxunwcdjgq.dll": "sha256-WVyvjaxW6UoGQvGW0icChLsXwYVCcdn0BLTftzlkCKc=",
284
+ "MindExecution.Plugins.PlanMaster.2sugb66h95.dll": "sha256-Lp0AieRHDo2H4Yl0Il1pPruy9nFUHJsX9t1AblXGD6Y=",
285
+ "MindExecution.Shared.e8lipb57xv.dll": "sha256-Au9QMwnm9MaP2+xzdldeQYtj4tRXzwOBWYOxmYR8spM=",
286
+ "MindExecution.Web.994sb3nzuy.dll": "sha256-jQshtLmhEC4xenzdD9PqHjaCuKvJf/frzaKBi2weDAg="
287
287
  },
288
288
  "lazyAssembly": {
289
- "MindExecution.Plugins.Admin.gxzwlji1cf.dll": "sha256-5D5B2ZuUMj46zBMgH2dRA7CbQf++uukMPrEliFLuZWs=",
290
- "MindExecution.Plugins.Business.vtaey8c59y.dll": "sha256-rU9MzRRmHuj0/IluV1dvE6x3aRCK/DA4DWKy1DO4VVg=",
291
- "MindExecution.Plugins.Directory.zc8ffaoknd.dll": "sha256-Ey/HajaVuBxB/Ou4qsM70nhAZBoODeCENzG1J/uEsxs=",
292
- "MindExecution.Plugins.YouTube.azfozpumhv.dll": "sha256-GjL5SM7+D8SKJBE528Y5Py29kQrTXPmG5OFr6+E0L4s="
289
+ "MindExecution.Plugins.Admin.bk23zzy6wc.dll": "sha256-uz7Nz0OZ8BBESp2Nr9YocyzV0dUrn7szPuD4/m/RWL8=",
290
+ "MindExecution.Plugins.Business.zwcvc8wufe.dll": "sha256-3YDsB2/uNI+feWqJk+cesLHgNt8s2/8hXxGPO6CRZZE=",
291
+ "MindExecution.Plugins.Directory.jc0g7fvyzv.dll": "sha256-PSe7135JPpTBmu4j+rGLF0Dc/6w/wDJNPi8zlfTmSMk=",
292
+ "MindExecution.Plugins.YouTube.vy0nsbcoo4.dll": "sha256-p8w1TI9Ri41EAG/j0MJCiuEcJdr4x/Hr5Spd2oluZjM="
293
293
  }
294
294
  },
295
295
  "cacheBootResources": true,
@@ -7,8 +7,8 @@
7
7
  <title>MindExec | Run your ideas as AI task graphs</title>
8
8
  <meta name="description" content="MindExec is an AI execution canvas for solo builders, researchers, developers, and creators. Start with free browser tools, then move serious work into saved MindCanvas projects." />
9
9
  <base href="/" />
10
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260616-remote-ws-control-frames-v573" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260616-remote-ws-control-frames-v573" />
10
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260616-template-mdm-input-routing-v574" />
11
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260616-template-mdm-input-routing-v574" />
12
12
  <!-- ?쇄뼹??Font Awesome (local) ?쇄뼹??-->
13
13
  <link rel="stylesheet" href="_content/MindExecution.Shared/lib/font-awesome/css/all.min.css" />
14
14
  <!-- ?꿎뼯??-->
@@ -579,7 +579,7 @@
579
579
  }
580
580
 
581
581
  const base = '_content/MindExecution.Shared/js/';
582
- const scriptVersion = '20260616-remote-ws-control-frames-v573';
582
+ const scriptVersion = '20260616-template-mdm-input-routing-v574';
583
583
  const scriptUrl = (script) => `${base}${script}?v=${scriptVersion}`;
584
584
  console.log(`[Script Loader] Shared JS version: ${scriptVersion}`);
585
585
  const criticalScripts = [
@@ -1,5 +1,5 @@
1
1
  self.assetsManifest = {
2
- "version": "pV7f33KI",
2
+ "version": "j2+Rgs1I",
3
3
  "assets": [
4
4
  {
5
5
  "hash": "sha256-+CSYMcqLNTsq3VnH11jgYyOCCdxvHzL74CBmo4sCmMU=",
@@ -86,7 +86,7 @@
86
86
  "url": "_content/MindExecution.Shared/js/mind-map-core.js.backup"
87
87
  },
88
88
  {
89
- "hash": "sha256-8uQGgnoT3SXKM89hTz49ThSpGgT88GRP7ipe8xlR3z0=",
89
+ "hash": "sha256-x6IqfFnk+HJevHd67L05oQLv68rKhUOs+PFwvnpYjp4=",
90
90
  "url": "_content/MindExecution.Shared/js/mind-map-css3d-manager.js"
91
91
  },
92
92
  {
@@ -410,44 +410,44 @@
410
410
  "url": "_framework/MimeMapping.og9ys58ylm.dll"
411
411
  },
412
412
  {
413
- "hash": "sha256-TymUFwryFLdbCYy2U5qdgE2ZV1yHaLR9bgyrmx6Tcp0=",
414
- "url": "_framework/MindExecution.Core.fc9cjbjplq.dll"
413
+ "hash": "sha256-5gla4JTR/zbvkGpneSt6S7ItE51+MjWgjW6L+B6Yevk=",
414
+ "url": "_framework/MindExecution.Core.asayb4hw1o.dll"
415
415
  },
416
416
  {
417
- "hash": "sha256-Ff6WHyLD39V0fEjUiQlxX9Y+edssyTH+7T4zfBdj3s0=",
418
- "url": "_framework/MindExecution.Kernel.pbzp3jfync.dll"
417
+ "hash": "sha256-78vR2SNkF9FwdQv0fEItSyz4HzgyzwGUROJAnpripPA=",
418
+ "url": "_framework/MindExecution.Kernel.3zom09ir6j.dll"
419
419
  },
420
420
  {
421
- "hash": "sha256-5D5B2ZuUMj46zBMgH2dRA7CbQf++uukMPrEliFLuZWs=",
422
- "url": "_framework/MindExecution.Plugins.Admin.gxzwlji1cf.dll"
421
+ "hash": "sha256-uz7Nz0OZ8BBESp2Nr9YocyzV0dUrn7szPuD4/m/RWL8=",
422
+ "url": "_framework/MindExecution.Plugins.Admin.bk23zzy6wc.dll"
423
423
  },
424
424
  {
425
- "hash": "sha256-rU9MzRRmHuj0/IluV1dvE6x3aRCK/DA4DWKy1DO4VVg=",
426
- "url": "_framework/MindExecution.Plugins.Business.vtaey8c59y.dll"
425
+ "hash": "sha256-3YDsB2/uNI+feWqJk+cesLHgNt8s2/8hXxGPO6CRZZE=",
426
+ "url": "_framework/MindExecution.Plugins.Business.zwcvc8wufe.dll"
427
427
  },
428
428
  {
429
- "hash": "sha256-ZK10a6NfAZTCKX0BpiH6e+pBatMwTeXMCtA79A+zGQg=",
430
- "url": "_framework/MindExecution.Plugins.Concept.85y7un1ks6.dll"
429
+ "hash": "sha256-WVyvjaxW6UoGQvGW0icChLsXwYVCcdn0BLTftzlkCKc=",
430
+ "url": "_framework/MindExecution.Plugins.Concept.lxunwcdjgq.dll"
431
431
  },
432
432
  {
433
- "hash": "sha256-Ey/HajaVuBxB/Ou4qsM70nhAZBoODeCENzG1J/uEsxs=",
434
- "url": "_framework/MindExecution.Plugins.Directory.zc8ffaoknd.dll"
433
+ "hash": "sha256-PSe7135JPpTBmu4j+rGLF0Dc/6w/wDJNPi8zlfTmSMk=",
434
+ "url": "_framework/MindExecution.Plugins.Directory.jc0g7fvyzv.dll"
435
435
  },
436
436
  {
437
- "hash": "sha256-aoNSkErjCAqRgET/An00bm2GP3Jsnnu4hz8e/jpaLcI=",
438
- "url": "_framework/MindExecution.Plugins.PlanMaster.ylooagumgh.dll"
437
+ "hash": "sha256-Lp0AieRHDo2H4Yl0Il1pPruy9nFUHJsX9t1AblXGD6Y=",
438
+ "url": "_framework/MindExecution.Plugins.PlanMaster.2sugb66h95.dll"
439
439
  },
440
440
  {
441
- "hash": "sha256-GjL5SM7+D8SKJBE528Y5Py29kQrTXPmG5OFr6+E0L4s=",
442
- "url": "_framework/MindExecution.Plugins.YouTube.azfozpumhv.dll"
441
+ "hash": "sha256-p8w1TI9Ri41EAG/j0MJCiuEcJdr4x/Hr5Spd2oluZjM=",
442
+ "url": "_framework/MindExecution.Plugins.YouTube.vy0nsbcoo4.dll"
443
443
  },
444
444
  {
445
- "hash": "sha256-FsB415v0PlO8/788VKC99rE/BhViR61KcM9+Crxo9Ok=",
446
- "url": "_framework/MindExecution.Shared.mppf8quyau.dll"
445
+ "hash": "sha256-Au9QMwnm9MaP2+xzdldeQYtj4tRXzwOBWYOxmYR8spM=",
446
+ "url": "_framework/MindExecution.Shared.e8lipb57xv.dll"
447
447
  },
448
448
  {
449
- "hash": "sha256-vy73kyPmRU7hqhUFOFs9fdsn5AWmO7cNTRDoWigkc2M=",
450
- "url": "_framework/MindExecution.Web.tln762tijf.dll"
449
+ "hash": "sha256-jQshtLmhEC4xenzdD9PqHjaCuKvJf/frzaKBi2weDAg=",
450
+ "url": "_framework/MindExecution.Web.994sb3nzuy.dll"
451
451
  },
452
452
  {
453
453
  "hash": "sha256-IsZJ91/OW+fHzNqIgEc7Y072ns8z9dGritiSyvR9Wgc=",
@@ -770,7 +770,7 @@
770
770
  "url": "_framework/Websocket.Client.vapounvmnl.dll"
771
771
  },
772
772
  {
773
- "hash": "sha256-HDeRZ1juous1GiTsZw+QLukbDxOOYjh72G4Dta2w5Fc=",
773
+ "hash": "sha256-XSS0rv+S2JAW90BVDbFUd23REh87EAC1P5aFjXSMAGo=",
774
774
  "url": "_framework/blazor.boot.json"
775
775
  },
776
776
  {
@@ -834,7 +834,7 @@
834
834
  "url": "image-manifest.json"
835
835
  },
836
836
  {
837
- "hash": "sha256-VJOyHChPIe+gqQk3r5g4qTjsKYTrLXoP6I5L+o4ZYzE=",
837
+ "hash": "sha256-A1rOSgC5wEjKNEOppREqJ/PkL33qbguPos0pVcG6L/4=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: pV7f33KI */
1
+ /* Manifest version: j2+Rgs1I */
2
2
  // Hosted deployments should prefer the network over stale offline caches.
3
3
  // This service worker immediately clears old Blazor offline caches and unregisters itself.
4
4