@mindexec/cli 0.2.474 → 0.2.475

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 (25) hide show
  1. package/electron/source-smoke.mjs +1 -0
  2. package/package.json +1 -1
  3. package/remote-fast/osx-arm64/mindexec-remote-fast.dll +0 -0
  4. package/remote-fast/osx-x64/mindexec-remote-fast.dll +0 -0
  5. package/remote-fast/win-x64/mindexec-remote-fast.dll +0 -0
  6. package/wwwroot/_content/MindExecution.Shared/css/mind-map-overrides.css +63 -0
  7. package/wwwroot/_content/MindExecution.Shared/js/background-themes.js +5 -1
  8. package/wwwroot/_content/MindExecution.Shared/js/mind-map-core.js +20 -6
  9. package/wwwroot/_content/MindExecution.Shared/js/mind-map-interactions.js +14 -3
  10. package/wwwroot/_content/MindExecution.Shared/js/mind-map-nodes.js +3 -18
  11. package/wwwroot/_content/MindExecution.Shared/js/mind-map-object-manager.js +3 -4
  12. package/wwwroot/_framework/{MindExecution.Core.p242wvzbdm.dll → MindExecution.Core.5oz806gln6.dll} +0 -0
  13. package/wwwroot/_framework/{MindExecution.Kernel.fygh6o7ah1.dll → MindExecution.Kernel.jfsc26t6jl.dll} +0 -0
  14. package/wwwroot/_framework/{MindExecution.Plugins.Admin.slf5qsn9pe.dll → MindExecution.Plugins.Admin.4f1hhljks9.dll} +0 -0
  15. package/wwwroot/_framework/{MindExecution.Plugins.Business.hmmh2iarjz.dll → MindExecution.Plugins.Business.320s5nhcal.dll} +0 -0
  16. package/wwwroot/_framework/{MindExecution.Plugins.Concept.mxak1yilgh.dll → MindExecution.Plugins.Concept.mdxge25pcc.dll} +0 -0
  17. package/wwwroot/_framework/{MindExecution.Plugins.Directory.h0k33bgkfw.dll → MindExecution.Plugins.Directory.j0im38uwcb.dll} +0 -0
  18. package/wwwroot/_framework/{MindExecution.Plugins.PlanMaster.ijbnd3xmt7.dll → MindExecution.Plugins.PlanMaster.agi5e28akr.dll} +0 -0
  19. package/wwwroot/_framework/{MindExecution.Plugins.YouTube.aa5i2z7lvo.dll → MindExecution.Plugins.YouTube.dhjioxusa0.dll} +0 -0
  20. package/wwwroot/_framework/{MindExecution.Shared.jk6h3848ht.dll → MindExecution.Shared.2v0z3krjjz.dll} +0 -0
  21. package/wwwroot/_framework/{MindExecution.Web.s2oqn7b07d.dll → MindExecution.Web.cn6dtudfnb.dll} +0 -0
  22. package/wwwroot/_framework/blazor.boot.json +21 -21
  23. package/wwwroot/index.html +2 -2
  24. package/wwwroot/service-worker-assets.js +29 -29
  25. package/wwwroot/service-worker.js +1 -1
@@ -15,6 +15,7 @@ const serverSource = fs.readFileSync(path.join(packageRoot, 'server.js'), 'utf8'
15
15
 
16
16
  assert.equal(packageJson.build?.appId, 'com.mindexec.desktop', 'Stable desktop appId is required.');
17
17
  assert.equal(packageJson.build?.productName, 'MindExec', 'Desktop product name changed unexpectedly.');
18
+ assert.match(mainSource, /title:\s*'MindExec'/, 'The Electron window title must use the MindExec app brand.');
18
19
  assert.equal(packageJson.build?.extraMetadata?.main, 'electron/main.cjs', 'Packaged Electron entry point is missing.');
19
20
  assert.equal(packageJson.build?.asar, false, 'Bundled runtime executables require an unpacked app directory.');
20
21
  assert.ok(packageJson.files?.includes('electron/'), 'The npm package must include the Electron source contract.');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindexec/cli",
3
- "version": "0.2.474",
3
+ "version": "0.2.475",
4
4
  "description": "MindExec local runtime and bridge CLI",
5
5
  "main": "server.js",
6
6
  "type": "module",
@@ -3772,3 +3772,66 @@ html body .css3d-resolution-wrapper:not(.lod-low) > .map-node-code:focus-within
3772
3772
  0 0 18px 0 rgba(var(--mind-node-selection-glow-rgb), 0.24),
3773
3773
  0 0 32px 0 rgba(var(--mind-node-selection-glow-soft-rgb), 0.16) !important;
3774
3774
  }
3775
+
3776
+ /* Canonical selected-node chrome.
3777
+ The wrapper owns one neutral edge/glow for every node type so memo themes,
3778
+ media-safe surfaces, and ordinary cards cannot show different selection
3779
+ signatures. The direct node keeps its layout but drops selection-specific
3780
+ inner borders, outlines, filters, and shadows. */
3781
+ html body .css3d-resolution-wrapper[data-node-id]:not(.lod-low).selected,
3782
+ html body .css3d-resolution-wrapper[data-node-id]:not(.lod-low).selected-media-safe {
3783
+ outline: 2px solid var(--mind-node-selected-hard-edge, #2563eb) !important;
3784
+ outline-offset: 0 !important;
3785
+ -webkit-box-shadow:
3786
+ 0 0 0 1px rgba(var(--mind-node-selection-edge-rgb, 37, 99, 235), 0.1),
3787
+ 0 0 16px rgba(var(--mind-node-selection-glow-rgb, 59, 130, 246), 0.22),
3788
+ 0 14px 30px rgba(15, 23, 42, 0.16) !important;
3789
+ box-shadow:
3790
+ 0 0 0 1px rgba(var(--mind-node-selection-edge-rgb, 37, 99, 235), 0.1),
3791
+ 0 0 16px rgba(var(--mind-node-selection-glow-rgb, 59, 130, 246), 0.22),
3792
+ 0 14px 30px rgba(15, 23, 42, 0.16) !important;
3793
+ -webkit-filter: none !important;
3794
+ filter: none !important;
3795
+ }
3796
+
3797
+ html body .css3d-resolution-wrapper[data-node-id]:not(.lod-low).selected > [data-node-id],
3798
+ html body .css3d-resolution-wrapper[data-node-id]:not(.lod-low).selected-media-safe > [data-node-id] {
3799
+ border-color: transparent !important;
3800
+ outline: none !important;
3801
+ outline-offset: 0 !important;
3802
+ -webkit-box-shadow: none !important;
3803
+ box-shadow: none !important;
3804
+ -webkit-filter: none !important;
3805
+ filter: none !important;
3806
+ }
3807
+
3808
+ /* First-character native selection safety.
3809
+ Text begins 14px inside dynamic cards, while the normal 18px start-edge
3810
+ resize zones overlap that first glyph. Narrow only the top/left zones while
3811
+ native selection or an editor owns the node. Bottom-right resize keeps its
3812
+ full hit area. */
3813
+ html body .css3d-resolution-wrapper.is-text-selection-owner > .css3d-resize-hit-layer > .css3d-resize-handle.w,
3814
+ html body .css3d-resolution-wrapper:has(textarea:focus) > .css3d-resize-hit-layer > .css3d-resize-handle.w,
3815
+ html body .css3d-resolution-wrapper:has([contenteditable="true"]:focus) > .css3d-resize-hit-layer > .css3d-resize-handle.w {
3816
+ width: 8px !important;
3817
+ }
3818
+
3819
+ html body .css3d-resolution-wrapper.is-text-selection-owner > .css3d-resize-hit-layer > .css3d-resize-handle.n,
3820
+ html body .css3d-resolution-wrapper:has(textarea:focus) > .css3d-resize-hit-layer > .css3d-resize-handle.n,
3821
+ html body .css3d-resolution-wrapper:has([contenteditable="true"]:focus) > .css3d-resize-hit-layer > .css3d-resize-handle.n {
3822
+ height: 8px !important;
3823
+ }
3824
+
3825
+ html body .css3d-resolution-wrapper.is-text-selection-owner > .css3d-resize-hit-layer > .css3d-resize-handle.nw,
3826
+ html body .css3d-resolution-wrapper:has(textarea:focus) > .css3d-resize-hit-layer > .css3d-resize-handle.nw,
3827
+ html body .css3d-resolution-wrapper:has([contenteditable="true"]:focus) > .css3d-resize-hit-layer > .css3d-resize-handle.nw {
3828
+ width: 8px !important;
3829
+ height: 8px !important;
3830
+ }
3831
+
3832
+ html body .css3d-resolution-wrapper:has(textarea:focus) textarea:focus,
3833
+ html body .css3d-resolution-wrapper:has(input:focus) input:focus,
3834
+ html body .css3d-resolution-wrapper:has([contenteditable="true"]:focus) [contenteditable="true"]:focus {
3835
+ user-select: text !important;
3836
+ -webkit-user-select: text !important;
3837
+ }
@@ -987,7 +987,11 @@
987
987
  options.isCameraMoving === true ||
988
988
  options.isPanning === true ||
989
989
  options.isZooming === true;
990
- const simulationStepCount = isInteractiveMotionFrame ? 1 : simulationStepsPerTick;
990
+ const targetFps = Math.max(0, Number(options.targetFps || 0) || 0);
991
+ const steadySimulationStepCount = targetFps > 0
992
+ ? Math.max(1, Math.round(32 / targetFps))
993
+ : simulationStepsPerTick;
994
+ const simulationStepCount = isInteractiveMotionFrame ? 1 : steadySimulationStepCount;
991
995
 
992
996
  if (simulationReady) {
993
997
  const previousTarget = renderer.getRenderTarget ? renderer.getRenderTarget() : null;
@@ -5,7 +5,7 @@
5
5
  const DEBUG = false;
6
6
  const FPS_DEBUG = false;
7
7
  const FRAME_PERF_DEBUG = false;
8
- const MINDMAP_CORE_BUILD_ID = '20260819-grid-single-css-representation-v869';
8
+ const MINDMAP_CORE_BUILD_ID = '20260822-particle-idle-30fps-v870';
9
9
  const CanvasPhase = Object.freeze({
10
10
  Booting: 'booting',
11
11
  BoardFileLoading: 'board-file-loading',
@@ -89,6 +89,7 @@
89
89
  const CURSOR_WORLD_THICKNESS = 4;
90
90
  const RENDER_DEBUG_METRICS_CACHE_MS = 250;
91
91
  const ANIMATION_IDLE_LOW_FPS_DELAY_MS = 500;
92
+ const PARTICLE_THEME_IDLE_FRAME_DELAY_MS = 1000 / 30;
92
93
  const WHEEL_ZOOM_BURST_QUIET_FRAME_LIMIT = 12;
93
94
  const HOME_CAMERA_NORMAL_MID_Z = 8250;
94
95
  const HOME_DENSE_CLUSTER_MIN_CELL_SIZE = 1200;
@@ -6279,6 +6280,11 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
6279
6280
  this.lodRenderer?.isInLODMode === true &&
6280
6281
  (frameStart - Number(this._lastLodPanVisibilityRefreshAt || 0)) >= LOD_PAN_VISIBILITY_REFRESH_INTERVAL_MS;
6281
6282
  const shouldUseAnimation60Fps = this.useAnimation60Fps === true && !isBoardLoading;
6283
+ const isGpuParticleTheme = this.currentThemeName === 'Space3D' || this.currentThemeName === 'SpiritFlow';
6284
+ const shouldUseParticleAnimation30Fps =
6285
+ isGpuParticleTheme === true &&
6286
+ shouldUseAnimation60Fps !== true &&
6287
+ !isBoardLoading;
6282
6288
  const shouldUseAnimationLowFpsFrame =
6283
6289
  shouldUseAnimation60Fps !== true &&
6284
6290
  isIdleCadenceFrame === true &&
@@ -6944,7 +6950,6 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
6944
6950
 
6945
6951
  // 6. Theme Animation
6946
6952
  // ----------------------------------------------------------------
6947
- const isGpuParticleTheme = this.currentThemeName === 'Space3D' || this.currentThemeName === 'SpiritFlow';
6948
6953
  const shouldUseMotionGridThemeSubstitute =
6949
6954
  false &&
6950
6955
  isCameraNavigationOnlyInteractiveFrame === true &&
@@ -6983,12 +6988,15 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
6983
6988
  const themeRunner = window.MindMapThemes?.runAnimationIfNeeded;
6984
6989
  if (typeof themeRunner === 'function') {
6985
6990
  themeAnimatedThisFrame = themeRunner(this.currentThemeName, this.currentThemeObject, this.camera, {
6986
- force: forceThemeCameraUpdate,
6991
+ force: forceThemeCameraUpdate,
6987
6992
  isCameraMoving: isCameraMoving === true,
6988
6993
  isPanning: this.isPanning === true,
6989
6994
  isZooming: this.isZooming === true,
6990
6995
  isResizing: this.isWindowResizing === true,
6991
- isInteractiveFrame: isInteractiveFrame === true
6996
+ isInteractiveFrame: isInteractiveFrame === true,
6997
+ targetFps: shouldUseAnimation60Fps === true
6998
+ ? 60
6999
+ : (shouldUseParticleAnimation30Fps === true ? 30 : null)
6992
7000
  });
6993
7001
  } else {
6994
7002
  this.currentThemeObject.animate(this.camera);
@@ -7566,7 +7574,11 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
7566
7574
  shouldSyncTextOverlays !== true &&
7567
7575
  hasPendingAnimationWakeWork !== true;
7568
7576
  if (shouldParkIdleAnimationLoop) {
7569
- const idleAnimationDelayMs = this.useAnimation60Fps === true ? 0 : ANIMATION_IDLE_LOW_FPS_DELAY_MS;
7577
+ const idleAnimationDelayMs = this.useAnimation60Fps === true
7578
+ ? 0
7579
+ : (shouldUseParticleAnimation30Fps === true
7580
+ ? PARTICLE_THEME_IDLE_FRAME_DELAY_MS
7581
+ : ANIMATION_IDLE_LOW_FPS_DELAY_MS);
7570
7582
  this._lastAnimationLoopDelayMs = idleAnimationDelayMs;
7571
7583
  this._animationLoopExecuting = false;
7572
7584
  this._scheduleAnimationLoop(loop, idleAnimationDelayMs);
@@ -7579,7 +7591,9 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
7579
7591
  shouldUpdate !== true &&
7580
7592
  hasPendingAnimationWakeWork !== true;
7581
7593
  if (shouldContinueLowFpsIdleCadence) {
7582
- nextAnimationLoopDelayMs = ANIMATION_IDLE_LOW_FPS_DELAY_MS;
7594
+ nextAnimationLoopDelayMs = shouldUseParticleAnimation30Fps === true
7595
+ ? PARTICLE_THEME_IDLE_FRAME_DELAY_MS
7596
+ : ANIMATION_IDLE_LOW_FPS_DELAY_MS;
7583
7597
  this._lastAnimationLoopDelayMs = nextAnimationLoopDelayMs;
7584
7598
  this._animationLoopExecuting = false;
7585
7599
  this._scheduleAnimationLoop(loop, nextAnimationLoopDelayMs);
@@ -3094,6 +3094,7 @@ window.MindMapInteractions = (function () {
3094
3094
 
3095
3095
  // [Changed] Reduce handle logic size from 24 to 16 to match visual CSS and WebGL mesh
3096
3096
  const RESIZE_HANDLE_SIZE = 16;
3097
+ const TEXT_SELECTION_START_EDGE_RESIZE_HANDLE_SIZE = 8;
3097
3098
  const NODE_HOVER_CURSOR = 'grab';
3098
3099
 
3099
3100
  function getResizeCursorForCorner(corner) {
@@ -3263,9 +3264,19 @@ window.MindMapInteractions = (function () {
3263
3264
  }
3264
3265
  // ▲▲▲ [Fix] ▲▲▲
3265
3266
 
3266
- const inLeft = relX < handleSize;
3267
- const inRight = relX > (nodeWidth - handleSize);
3268
- const inTop = relY < handleSize;
3267
+ const hasFocusedNativeTextEditor = !!nodeElement.querySelector?.(
3268
+ 'textarea:focus, input:focus, [contenteditable="true"]:focus'
3269
+ );
3270
+ const ownsNativeTextSelection =
3271
+ nodeElement.classList?.contains?.('is-text-selection-owner') === true ||
3272
+ hasFocusedNativeTextEditor;
3273
+ const startEdgeHandleSize = ownsNativeTextSelection
3274
+ ? TEXT_SELECTION_START_EDGE_RESIZE_HANDLE_SIZE
3275
+ : handleSize;
3276
+
3277
+ const inLeft = relX < startEdgeHandleSize;
3278
+ const inRight = relX > (nodeWidth - handleSize);
3279
+ const inTop = relY < startEdgeHandleSize;
3269
3280
  const inBottom = relY > (nodeHeight - handleSize);
3270
3281
 
3271
3282
  // ★ 내부 영역 (핸들 아님)
@@ -22,19 +22,6 @@
22
22
  }
23
23
  // ▲▲▲ [Perf] ▲▲▲
24
24
 
25
- const MEMO_SELECTION_THEMES = {
26
- coral: { border: 0xf7b08d, accent: 0xff8052 },
27
- amber: { border: 0xf4d06f, accent: 0xf59e0b },
28
- sun: { border: 0xe7d668, accent: 0xca8a04 },
29
- sage: { border: 0xbed79f, accent: 0x65a30d },
30
- mint: { border: 0x8fd8c1, accent: 0x10b981 },
31
- sky: { border: 0x9dc7f7, accent: 0x3b82f6 },
32
- indigo: { border: 0xbcc2ff, accent: 0x6366f1 },
33
- violet: { border: 0xd6b8ff, accent: 0x8b5cf6 },
34
- rose: { border: 0xf5b2c2, accent: 0xf43f5e },
35
- gray: { border: 0xd1d5db, accent: 0x6b7280 },
36
- slate: { border: 0xcbd5e1, accent: 0x64748b }
37
- };
38
25
  const NODE_TEXT_SELECTION_SELECTORS = '.node-response, .code-body, .text-content, .markdown-body, .csv-table-scroll, .csv-table-cell, textarea, .map-node-memo__title, .map-node-memo__body, .map-node-memo__body-view, .map-node-memo__body-view *';
39
26
  const NODE_INTERACTIVE_CONTENT_SELECTORS = `${NODE_TEXT_SELECTION_SELECTORS}, .embed-content, .embed-card, .embed-card *, .embed-action, .embed-play-button, iframe, .map-node-memo__icon-button, .map-node-memo__icon-option, .map-node-memo__icon-popover, .map-node-memo__agent-action, .map-node-memo__agent-result-link, .map-node-memo__agent-plan-panel, .map-node-memo__agent-plan-body, .map-node-memo__agent-plan-body *, .map-node-memo__agent-console-panel, .map-node-memo__agent-console-body, .map-node-memo__agent-console-body *, .map-node-memo__agent-console-resize, .map-node-memo__agent-console-resize *`;
40
27
  const MEMO_EDIT_ONLY_SELECTORS = '.map-node-memo__title, .map-node-memo__body, .map-node-memo__icon-button, .map-node-memo__icon-option, .map-node-memo__icon-popover';
@@ -285,14 +272,12 @@
285
272
  }
286
273
 
287
274
  function getSelectionBorderColorHex(nodeModel, isSelected) {
275
+ if (isSelected) return 0x2563eb;
288
276
  if (String(nodeModel?.contentType ?? nodeModel?.ContentType ?? '').toLowerCase() !== 'memo') {
289
- return isSelected ? 0x7b7ff2 : 0x374151;
277
+ return 0x374151;
290
278
  }
291
279
 
292
- const fallbackKey = 'coral';
293
- const key = String(getNodeMetadata(nodeModel)?.memoColor || fallbackKey).toLowerCase();
294
- const theme = MEMO_SELECTION_THEMES[key] || MEMO_SELECTION_THEMES[fallbackKey];
295
- return isSelected ? theme.accent : theme.border;
280
+ return window.MindMapObjectManager?.getMemoWebglTheme?.(nodeModel)?.border ?? 0xf7b08d;
296
281
  }
297
282
 
298
283
  function cloneNodeMetadata(nodeModel) {
@@ -152,14 +152,12 @@
152
152
  const HANDLE_SIZE = 16; // Changed from 36 to 16 to match CSS handles and prevent ghost touches
153
153
  const CORNER_RADIUS = 20;
154
154
  const DEFAULT_OUTLINE_COLOR = 0x374151;
155
- const SELECTED_OUTLINE_COLOR = 0x7b7ff2;
155
+ const SELECTED_OUTLINE_COLOR = 0x2563eb;
156
156
  const memoTheme = String(nodeModel?.contentType ?? '').toLowerCase() === 'memo' ? getMemoWebglTheme(nodeModel) : null;
157
157
  const defaultBorderHex = memoTheme ? memoTheme.border : DEFAULT_OUTLINE_COLOR;
158
158
  const bodyFillHex = memoTheme ? memoTheme.fill : 0xfefefe;
159
159
  const isSelected = module.multiSelectedNodeIds.has(nodeModel.id);
160
- const selectedBorderHex = isCss3dNode
161
- ? SELECTED_OUTLINE_COLOR
162
- : (memoTheme ? memoTheme.accent : SELECTED_OUTLINE_COLOR);
160
+ const selectedBorderHex = SELECTED_OUTLINE_COLOR;
163
161
  const outlineColor = isSelected ? selectedBorderHex : defaultBorderHex;
164
162
  const OUTLINE_SHRINK = 2;
165
163
  const OUTLINE_RADIUS = Math.max(1, CORNER_RADIUS - 1);
@@ -482,6 +480,7 @@
482
480
  window.MindMapObjectManager = {
483
481
  createOrUpdateCanvasTextureNode: createOrUpdateCanvasTextureNode,
484
482
  createDeferredNodeShell: createDeferredNodeShell,
483
+ getMemoWebglTheme: getMemoWebglTheme,
485
484
  createRoundedRectFilledGeometry: createRoundedRectFilledGeometry // For scrollbar resize in pipeline
486
485
  };
487
486
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "mainAssemblyName": "MindExecution.Web",
3
3
  "resources": {
4
- "hash": "sha256-D9EahcFFgxk5/eXPM74VJn4OhgGs3BJoHsibOzLR/lk=",
4
+ "hash": "sha256-sDnKI4OUmJ72ejDB7f1Nz45Z59TiU/UmDappWg6tc/A=",
5
5
  "fingerprinting": {
6
6
  "Google.Protobuf.9h59ukbel7.dll": "Google.Protobuf.dll",
7
7
  "Markdig.d1j7v41cl1.dll": "Markdig.dll",
@@ -122,16 +122,16 @@
122
122
  "System.brmz7yk5qh.dll": "System.dll",
123
123
  "netstandard.b50t77veor.dll": "netstandard.dll",
124
124
  "System.Private.CoreLib.wflwsce1yq.dll": "System.Private.CoreLib.dll",
125
- "MindExecution.Core.p242wvzbdm.dll": "MindExecution.Core.dll",
126
- "MindExecution.Kernel.fygh6o7ah1.dll": "MindExecution.Kernel.dll",
127
- "MindExecution.Plugins.Admin.slf5qsn9pe.dll": "MindExecution.Plugins.Admin.dll",
128
- "MindExecution.Plugins.Business.hmmh2iarjz.dll": "MindExecution.Plugins.Business.dll",
129
- "MindExecution.Plugins.Concept.mxak1yilgh.dll": "MindExecution.Plugins.Concept.dll",
130
- "MindExecution.Plugins.Directory.h0k33bgkfw.dll": "MindExecution.Plugins.Directory.dll",
131
- "MindExecution.Plugins.PlanMaster.ijbnd3xmt7.dll": "MindExecution.Plugins.PlanMaster.dll",
132
- "MindExecution.Plugins.YouTube.aa5i2z7lvo.dll": "MindExecution.Plugins.YouTube.dll",
133
- "MindExecution.Shared.jk6h3848ht.dll": "MindExecution.Shared.dll",
134
- "MindExecution.Web.s2oqn7b07d.dll": "MindExecution.Web.dll",
125
+ "MindExecution.Core.5oz806gln6.dll": "MindExecution.Core.dll",
126
+ "MindExecution.Kernel.jfsc26t6jl.dll": "MindExecution.Kernel.dll",
127
+ "MindExecution.Plugins.Admin.4f1hhljks9.dll": "MindExecution.Plugins.Admin.dll",
128
+ "MindExecution.Plugins.Business.320s5nhcal.dll": "MindExecution.Plugins.Business.dll",
129
+ "MindExecution.Plugins.Concept.mdxge25pcc.dll": "MindExecution.Plugins.Concept.dll",
130
+ "MindExecution.Plugins.Directory.j0im38uwcb.dll": "MindExecution.Plugins.Directory.dll",
131
+ "MindExecution.Plugins.PlanMaster.agi5e28akr.dll": "MindExecution.Plugins.PlanMaster.dll",
132
+ "MindExecution.Plugins.YouTube.dhjioxusa0.dll": "MindExecution.Plugins.YouTube.dll",
133
+ "MindExecution.Shared.2v0z3krjjz.dll": "MindExecution.Shared.dll",
134
+ "MindExecution.Web.cn6dtudfnb.dll": "MindExecution.Web.dll",
135
135
  "dotnet.native.566r55w3xu.js": "dotnet.native.js",
136
136
  "dotnet.native.x6q5aixc38.wasm": "dotnet.native.wasm",
137
137
  "dotnet.js": "dotnet.js",
@@ -276,18 +276,18 @@
276
276
  "System.Xml.XDocument.sn51jas17n.dll": "sha256-GNI2kFgFmPTwzuzwUn8gxK+AzGLUWRJFdg9JzIbrybQ=",
277
277
  "System.brmz7yk5qh.dll": "sha256-CfM2miyj1KHApFmqMdLYWio3S/jrdON2pW9Xr2nTwlo=",
278
278
  "netstandard.b50t77veor.dll": "sha256-//jQGOXjb8ET8WtXgOJrAxLx6E7zDJ5RjRRutwkvmxo=",
279
- "MindExecution.Core.p242wvzbdm.dll": "sha256-35J/7FoILxPQctHJIIfSDpXaNJ1hRRcOKZ/yOaPupcI=",
280
- "MindExecution.Kernel.fygh6o7ah1.dll": "sha256-F4YioJkECmNVNtR0atEmyTrUhLW+jWT7MK4jsEZfh4M=",
281
- "MindExecution.Plugins.Business.hmmh2iarjz.dll": "sha256-ybbVj4ozR6BnnPorSfctSWFOTUF2Ia3WN05xk6KhoKE=",
282
- "MindExecution.Plugins.Concept.mxak1yilgh.dll": "sha256-Wj3Q0zd0N7QMWerW1nbDzJOjjNEFnwa1Q38RrgvzrRI=",
283
- "MindExecution.Plugins.PlanMaster.ijbnd3xmt7.dll": "sha256-LkOxdgVNd9shSW+6sl+XBJ2FJk8kUXXNwaxnLZSnbmI=",
284
- "MindExecution.Shared.jk6h3848ht.dll": "sha256-fYGO9haZvRyRfccPOxHv59jXkQtb1CuT8/5Vt8KQFzk=",
285
- "MindExecution.Web.s2oqn7b07d.dll": "sha256-nGDEW6izv5+xQxMuAlZMG5XFkRZNKPfUhNzeLLU5tAo="
279
+ "MindExecution.Core.5oz806gln6.dll": "sha256-lX7hqlSSiSRsuJzB7h6Up9SpU7P3aYrJzVUcRdRR+IE=",
280
+ "MindExecution.Kernel.jfsc26t6jl.dll": "sha256-74S9IXNNvnYGUwVboeyRuR6xqH/I4e2WffLD8UgpE7U=",
281
+ "MindExecution.Plugins.Business.320s5nhcal.dll": "sha256-tR/+xIus4mOecil69Maf6AGTHlumlk/dH5WZ/GEGtoU=",
282
+ "MindExecution.Plugins.Concept.mdxge25pcc.dll": "sha256-Bk0cG/bJei7/dkQaXTKuoJRwMKtRPnwB0jMS3S0fvhw=",
283
+ "MindExecution.Plugins.PlanMaster.agi5e28akr.dll": "sha256-Vv0YylupqDzMMjXQix5ftpGgiUDMu2eU5gTdlx4RE+Y=",
284
+ "MindExecution.Shared.2v0z3krjjz.dll": "sha256-HhIvs53kzsdIZmjzOS85TAGpqf02q5YkKPOBzhNDnp4=",
285
+ "MindExecution.Web.cn6dtudfnb.dll": "sha256-GJizZu6YwEC8/Eyah+zm2NKrLxiUFLhdyyaC2nulYE8="
286
286
  },
287
287
  "lazyAssembly": {
288
- "MindExecution.Plugins.Admin.slf5qsn9pe.dll": "sha256-wCfsTv1BwU3xWC3J15exqZwwFPzPUiNIfBybFvl4Z24=",
289
- "MindExecution.Plugins.Directory.h0k33bgkfw.dll": "sha256-EXcBUzXs4gVFGFA+3BMOLWJLG45syPzmnwDfHxpvfNk=",
290
- "MindExecution.Plugins.YouTube.aa5i2z7lvo.dll": "sha256-vraXBaopWjmhqEDfBA0LATY8l9htFIhgFG44sQFuQIk="
288
+ "MindExecution.Plugins.Admin.4f1hhljks9.dll": "sha256-cHb6YLLKQ2QnzRL09Eux4VNMT1JsIEp26oC268O6nQA=",
289
+ "MindExecution.Plugins.Directory.j0im38uwcb.dll": "sha256-s+f1K8cPkx8ka/lb7avZJT3loPtovkl/qXJLkY3j31M=",
290
+ "MindExecution.Plugins.YouTube.dhjioxusa0.dll": "sha256-IU/ga79SCspsZ+TeN38Y/SBfu+mzhb0jtRu4gnlj9s4="
291
291
  }
292
292
  },
293
293
  "cacheBootResources": true,
@@ -12,7 +12,7 @@
12
12
  <link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png?v=20260815-app-icon-v2" />
13
13
  <link rel="manifest" href="manifest.webmanifest?v=20260815-app-icon-v2" />
14
14
  <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260629-ai-task-flow-v863" />
15
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260629-mdm-shadow-v856" />
15
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260822-selection-unified-v857" />
16
16
  <!-- ??좎뜦堉??Font Awesome (local) ??좎뜦堉??-->
17
17
  <link rel="stylesheet" href="_content/MindExecution.Shared/lib/font-awesome/css/all.min.css" />
18
18
  <!-- ??좎뜦堉??-->
@@ -614,7 +614,7 @@
614
614
  }
615
615
 
616
616
  const base = '_content/MindExecution.Shared/js/';
617
- const scriptVersion = '20260822-selection-edge-v980';
617
+ const scriptVersion = '20260822-selection-particle-title-v981';
618
618
  const scriptUrl = (script) => `${base}${script}?v=${scriptVersion}`;
619
619
  console.log(`[Script Loader] Shared JS version: ${scriptVersion}`);
620
620
  const criticalScripts = [
@@ -1,5 +1,5 @@
1
1
  self.assetsManifest = {
2
- "version": "tzgRlqGC",
2
+ "version": "rBmrDqka",
3
3
  "assets": [
4
4
  {
5
5
  "hash": "sha256-+CSYMcqLNTsq3VnH11jgYyOCCdxvHzL74CBmo4sCmMU=",
@@ -42,7 +42,7 @@ self.assetsManifest = {
42
42
  "url": "_content/MindExecution.Shared/css/app.css"
43
43
  },
44
44
  {
45
- "hash": "sha256-SFtQK3BHjxti+90KoTO+/Xgb8zzC0Q5E7wEsb8D5SZ0=",
45
+ "hash": "sha256-/cMlL4AEpvBdXc/STLk0dU8CdumDaf3Zjs4y6WnNlkk=",
46
46
  "url": "_content/MindExecution.Shared/css/mind-map-overrides.css"
47
47
  },
48
48
  {
@@ -58,7 +58,7 @@ self.assetsManifest = {
58
58
  "url": "_content/MindExecution.Shared/js/agent-visualization.js"
59
59
  },
60
60
  {
61
- "hash": "sha256-BKeo9VOndhs0Hype7AnU8eI5UyAL7tFyxUcz9WPxzUQ=",
61
+ "hash": "sha256-N//7qFaxU/FjNZjzH3rfo+U6vTHZb7BXhx51HSNICoU=",
62
62
  "url": "_content/MindExecution.Shared/js/background-themes.js"
63
63
  },
64
64
  {
@@ -90,7 +90,7 @@ self.assetsManifest = {
90
90
  "url": "_content/MindExecution.Shared/js/mind-map-board-render-ownership.js"
91
91
  },
92
92
  {
93
- "hash": "sha256-kAkXetdqRDypZg9PkOH48rgEbUZG/bkgLWhRLGrSdcc=",
93
+ "hash": "sha256-ND0JQLzUTqTCz2C0tjAzZmUZbMlvFfVzXfgEq/rPumU=",
94
94
  "url": "_content/MindExecution.Shared/js/mind-map-core.js"
95
95
  },
96
96
  {
@@ -126,7 +126,7 @@ self.assetsManifest = {
126
126
  "url": "_content/MindExecution.Shared/js/mind-map-image-policy.js"
127
127
  },
128
128
  {
129
- "hash": "sha256-5sVcWSPLCHmnvAYLsqBwno201net5gfRYOqtQLUXQZE=",
129
+ "hash": "sha256-MNC1OM1PiIW3yCLtMScPNDgweZbm5WWwB4e61VefC/s=",
130
130
  "url": "_content/MindExecution.Shared/js/mind-map-interactions.js"
131
131
  },
132
132
  {
@@ -158,7 +158,7 @@ self.assetsManifest = {
158
158
  "url": "_content/MindExecution.Shared/js/mind-map-node-search-worker.js"
159
159
  },
160
160
  {
161
- "hash": "sha256-vyxL1oEKr8fWT1IK1wZmna9ltJsxuZFzyDoNLMpP4sg=",
161
+ "hash": "sha256-PXsPkLP/90ZPO16kreoeNdxcEty52wTtHS1njbDR1tg=",
162
162
  "url": "_content/MindExecution.Shared/js/mind-map-nodes.js"
163
163
  },
164
164
  {
@@ -166,7 +166,7 @@ self.assetsManifest = {
166
166
  "url": "_content/MindExecution.Shared/js/mind-map-normal-boundary-optimizer.js"
167
167
  },
168
168
  {
169
- "hash": "sha256-3tRw4wn9UR7qbqh0+dpuQJYrPpQQZU4tRpjHEjpkjCc=",
169
+ "hash": "sha256-Q2QLR8a8JStPEl28svp9uzcQGDJLZ6nowoSJvL2gQ9U=",
170
170
  "url": "_content/MindExecution.Shared/js/mind-map-object-manager.js"
171
171
  },
172
172
  {
@@ -446,44 +446,44 @@ self.assetsManifest = {
446
446
  "url": "_framework/MimeMapping.og9ys58ylm.dll"
447
447
  },
448
448
  {
449
- "hash": "sha256-35J/7FoILxPQctHJIIfSDpXaNJ1hRRcOKZ/yOaPupcI=",
450
- "url": "_framework/MindExecution.Core.p242wvzbdm.dll"
449
+ "hash": "sha256-lX7hqlSSiSRsuJzB7h6Up9SpU7P3aYrJzVUcRdRR+IE=",
450
+ "url": "_framework/MindExecution.Core.5oz806gln6.dll"
451
451
  },
452
452
  {
453
- "hash": "sha256-F4YioJkECmNVNtR0atEmyTrUhLW+jWT7MK4jsEZfh4M=",
454
- "url": "_framework/MindExecution.Kernel.fygh6o7ah1.dll"
453
+ "hash": "sha256-74S9IXNNvnYGUwVboeyRuR6xqH/I4e2WffLD8UgpE7U=",
454
+ "url": "_framework/MindExecution.Kernel.jfsc26t6jl.dll"
455
455
  },
456
456
  {
457
- "hash": "sha256-wCfsTv1BwU3xWC3J15exqZwwFPzPUiNIfBybFvl4Z24=",
458
- "url": "_framework/MindExecution.Plugins.Admin.slf5qsn9pe.dll"
457
+ "hash": "sha256-cHb6YLLKQ2QnzRL09Eux4VNMT1JsIEp26oC268O6nQA=",
458
+ "url": "_framework/MindExecution.Plugins.Admin.4f1hhljks9.dll"
459
459
  },
460
460
  {
461
- "hash": "sha256-ybbVj4ozR6BnnPorSfctSWFOTUF2Ia3WN05xk6KhoKE=",
462
- "url": "_framework/MindExecution.Plugins.Business.hmmh2iarjz.dll"
461
+ "hash": "sha256-tR/+xIus4mOecil69Maf6AGTHlumlk/dH5WZ/GEGtoU=",
462
+ "url": "_framework/MindExecution.Plugins.Business.320s5nhcal.dll"
463
463
  },
464
464
  {
465
- "hash": "sha256-Wj3Q0zd0N7QMWerW1nbDzJOjjNEFnwa1Q38RrgvzrRI=",
466
- "url": "_framework/MindExecution.Plugins.Concept.mxak1yilgh.dll"
465
+ "hash": "sha256-Bk0cG/bJei7/dkQaXTKuoJRwMKtRPnwB0jMS3S0fvhw=",
466
+ "url": "_framework/MindExecution.Plugins.Concept.mdxge25pcc.dll"
467
467
  },
468
468
  {
469
- "hash": "sha256-EXcBUzXs4gVFGFA+3BMOLWJLG45syPzmnwDfHxpvfNk=",
470
- "url": "_framework/MindExecution.Plugins.Directory.h0k33bgkfw.dll"
469
+ "hash": "sha256-s+f1K8cPkx8ka/lb7avZJT3loPtovkl/qXJLkY3j31M=",
470
+ "url": "_framework/MindExecution.Plugins.Directory.j0im38uwcb.dll"
471
471
  },
472
472
  {
473
- "hash": "sha256-LkOxdgVNd9shSW+6sl+XBJ2FJk8kUXXNwaxnLZSnbmI=",
474
- "url": "_framework/MindExecution.Plugins.PlanMaster.ijbnd3xmt7.dll"
473
+ "hash": "sha256-Vv0YylupqDzMMjXQix5ftpGgiUDMu2eU5gTdlx4RE+Y=",
474
+ "url": "_framework/MindExecution.Plugins.PlanMaster.agi5e28akr.dll"
475
475
  },
476
476
  {
477
- "hash": "sha256-vraXBaopWjmhqEDfBA0LATY8l9htFIhgFG44sQFuQIk=",
478
- "url": "_framework/MindExecution.Plugins.YouTube.aa5i2z7lvo.dll"
477
+ "hash": "sha256-IU/ga79SCspsZ+TeN38Y/SBfu+mzhb0jtRu4gnlj9s4=",
478
+ "url": "_framework/MindExecution.Plugins.YouTube.dhjioxusa0.dll"
479
479
  },
480
480
  {
481
- "hash": "sha256-fYGO9haZvRyRfccPOxHv59jXkQtb1CuT8/5Vt8KQFzk=",
482
- "url": "_framework/MindExecution.Shared.jk6h3848ht.dll"
481
+ "hash": "sha256-HhIvs53kzsdIZmjzOS85TAGpqf02q5YkKPOBzhNDnp4=",
482
+ "url": "_framework/MindExecution.Shared.2v0z3krjjz.dll"
483
483
  },
484
484
  {
485
- "hash": "sha256-nGDEW6izv5+xQxMuAlZMG5XFkRZNKPfUhNzeLLU5tAo=",
486
- "url": "_framework/MindExecution.Web.s2oqn7b07d.dll"
485
+ "hash": "sha256-GJizZu6YwEC8/Eyah+zm2NKrLxiUFLhdyyaC2nulYE8=",
486
+ "url": "_framework/MindExecution.Web.cn6dtudfnb.dll"
487
487
  },
488
488
  {
489
489
  "hash": "sha256-IsZJ91/OW+fHzNqIgEc7Y072ns8z9dGritiSyvR9Wgc=",
@@ -802,7 +802,7 @@ self.assetsManifest = {
802
802
  "url": "_framework/Websocket.Client.vapounvmnl.dll"
803
803
  },
804
804
  {
805
- "hash": "sha256-ZA9k0crKugzEt3MgKSNybTKuTJs1u3YQzY+g0iZ2Thw=",
805
+ "hash": "sha256-RoOqCtF/Mt8lbyMaWb/5zrdLv2xxadGnJ6hYfTEiXxk=",
806
806
  "url": "_framework/blazor.boot.json"
807
807
  },
808
808
  {
@@ -878,7 +878,7 @@ self.assetsManifest = {
878
878
  "url": "icon-512.png"
879
879
  },
880
880
  {
881
- "hash": "sha256-KiSDsi5RdSvuQ2oflFQ8RjdxuzoKDodXSOYUsPQk9RI=",
881
+ "hash": "sha256-5iVGkYozM42Y2ths+0zgMYehxk0R4xHBfFkcFiLI1JE=",
882
882
  "url": "index.html"
883
883
  },
884
884
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: tzgRlqGC */
1
+ /* Manifest version: rBmrDqka */
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