@mindexec/cli 0.2.0

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 (232) hide show
  1. package/README.md +275 -0
  2. package/codex-runtime.js +960 -0
  3. package/launch-bridge.cjs +162 -0
  4. package/package.json +61 -0
  5. package/port-guard.cjs +232 -0
  6. package/scripts/setup-tree-sitter-grammars.mjs +59 -0
  7. package/server.js +8422 -0
  8. package/start-bridge.bat +32 -0
  9. package/start-bridge.sh +81 -0
  10. package/tree-sitter-grammars/README.md +18 -0
  11. package/tree-sitter-grammars/tree-sitter-c_sharp.wasm +0 -0
  12. package/tree-sitter-grammars/tree-sitter-go.wasm +0 -0
  13. package/tree-sitter-grammars/tree-sitter-java.wasm +0 -0
  14. package/tree-sitter-grammars/tree-sitter-javascript.wasm +0 -0
  15. package/tree-sitter-grammars/tree-sitter-python.wasm +0 -0
  16. package/tree-sitter-grammars/tree-sitter-rust.wasm +0 -0
  17. package/tree-sitter-grammars/tree-sitter-tsx.wasm +0 -0
  18. package/tree-sitter-grammars/tree-sitter-typescript.wasm +0 -0
  19. package/wwwroot/MindExecution.Web.styles.css +3 -0
  20. package/wwwroot/_content/MindExecution.Plugins.Admin/css/admin-dashboard.css +546 -0
  21. package/wwwroot/_content/MindExecution.Plugins.Directory/MindExecution.Plugins.Directory.u7utcng611.bundle.scp.css +7 -0
  22. package/wwwroot/_content/MindExecution.Plugins.Directory/background.png +0 -0
  23. package/wwwroot/_content/MindExecution.Plugins.Directory/directory-manager.js +202 -0
  24. package/wwwroot/_content/MindExecution.Plugins.Directory/exampleJsInterop.js +6 -0
  25. package/wwwroot/_content/MindExecution.Plugins.YouTube/css/youtube-search.css +251 -0
  26. package/wwwroot/_content/MindExecution.Shared/MindExecution.Shared.wsano1j4wp.bundle.scp.css +4 -0
  27. package/wwwroot/_content/MindExecution.Shared/css/admin-dashboard.css +559 -0
  28. package/wwwroot/_content/MindExecution.Shared/css/app.css +1 -0
  29. package/wwwroot/_content/MindExecution.Shared/css/mind-map-overrides.css +2936 -0
  30. package/wwwroot/_content/MindExecution.Shared/fonts/NotoSansKR-Bold.ttf +0 -0
  31. package/wwwroot/_content/MindExecution.Shared/fonts/NotoSansKR-Regular.ttf +0 -0
  32. package/wwwroot/_content/MindExecution.Shared/js/agent-visualization.js +359 -0
  33. package/wwwroot/_content/MindExecution.Shared/js/background-themes.js +1721 -0
  34. package/wwwroot/_content/MindExecution.Shared/js/code-master.js +8316 -0
  35. package/wwwroot/_content/MindExecution.Shared/js/file-system-helper.js +639 -0
  36. package/wwwroot/_content/MindExecution.Shared/js/helpers/InfiniteGridHelper.js +109 -0
  37. package/wwwroot/_content/MindExecution.Shared/js/marked.min.js +69 -0
  38. package/wwwroot/_content/MindExecution.Shared/js/mind-map-core.js +7982 -0
  39. package/wwwroot/_content/MindExecution.Shared/js/mind-map-core.js.backup +1059 -0
  40. package/wwwroot/_content/MindExecution.Shared/js/mind-map-css3d-manager.js +15803 -0
  41. package/wwwroot/_content/MindExecution.Shared/js/mind-map-dev-guards.js +325 -0
  42. package/wwwroot/_content/MindExecution.Shared/js/mind-map-dnd.js +1430 -0
  43. package/wwwroot/_content/MindExecution.Shared/js/mind-map-dnd.js.bak +434 -0
  44. package/wwwroot/_content/MindExecution.Shared/js/mind-map-glow-shader.js +260 -0
  45. package/wwwroot/_content/MindExecution.Shared/js/mind-map-interactions.js +7640 -0
  46. package/wwwroot/_content/MindExecution.Shared/js/mind-map-lod-plan-worker.js +160 -0
  47. package/wwwroot/_content/MindExecution.Shared/js/mind-map-lod-renderer.js +9923 -0
  48. package/wwwroot/_content/MindExecution.Shared/js/mind-map-logic-workers.js +977 -0
  49. package/wwwroot/_content/MindExecution.Shared/js/mind-map-menu-manager.js +1431 -0
  50. package/wwwroot/_content/MindExecution.Shared/js/mind-map-multi-select.js +1716 -0
  51. package/wwwroot/_content/MindExecution.Shared/js/mind-map-node-search-worker.js +553 -0
  52. package/wwwroot/_content/MindExecution.Shared/js/mind-map-nodes.js +4541 -0
  53. package/wwwroot/_content/MindExecution.Shared/js/mind-map-object-manager.js +489 -0
  54. package/wwwroot/_content/MindExecution.Shared/js/mind-map-object-manager.js.backup +372 -0
  55. package/wwwroot/_content/MindExecution.Shared/js/mind-map-pipeline.js +2075 -0
  56. package/wwwroot/_content/MindExecution.Shared/js/mind-map-text-lod-system.js +646 -0
  57. package/wwwroot/_content/MindExecution.Shared/js/mind-map-text-overlay-v2.js +4323 -0
  58. package/wwwroot/_content/MindExecution.Shared/js/mind-map-texture-factory.js +2260 -0
  59. package/wwwroot/_content/MindExecution.Shared/js/mind-map-texture-factory.js.backup +1258 -0
  60. package/wwwroot/_content/MindExecution.Shared/js/mind-map-visibility-worker.js +890 -0
  61. package/wwwroot/_content/MindExecution.Shared/js/mindmap-toolbar.js +594 -0
  62. package/wwwroot/_content/MindExecution.Shared/js/native-drop-handler.js +170 -0
  63. package/wwwroot/_content/MindExecution.Shared/js/plan-master.js +788 -0
  64. package/wwwroot/_content/MindExecution.Shared/js/renderers/CSS3DRenderer.js +50 -0
  65. package/wwwroot/_content/MindExecution.Shared/js/texture-worker-manager.js +188 -0
  66. package/wwwroot/_content/MindExecution.Shared/js/texture-worker.js +208 -0
  67. package/wwwroot/_content/MindExecution.Shared/js/three.min.js +6 -0
  68. package/wwwroot/_content/MindExecution.Shared/js/titlebar-handler.js +191 -0
  69. package/wwwroot/_content/MindExecution.Shared/js/token-manager.js +37 -0
  70. package/wwwroot/_content/MindExecution.Shared/js/token-worker.js +28 -0
  71. package/wwwroot/_content/MindExecution.Shared/js/troika-bundle.js +5626 -0
  72. package/wwwroot/_content/MindExecution.Shared/js/troika-bundle.js.map +7 -0
  73. package/wwwroot/_content/MindExecution.Shared/lib/font-awesome/css/all.min.css +9 -0
  74. package/wwwroot/_content/MindExecution.Shared/lib/font-awesome/webfonts/fa-brands-400.ttf +0 -0
  75. package/wwwroot/_content/MindExecution.Shared/lib/font-awesome/webfonts/fa-brands-400.woff2 +0 -0
  76. package/wwwroot/_content/MindExecution.Shared/lib/font-awesome/webfonts/fa-regular-400.ttf +0 -0
  77. package/wwwroot/_content/MindExecution.Shared/lib/font-awesome/webfonts/fa-regular-400.woff2 +0 -0
  78. package/wwwroot/_content/MindExecution.Shared/lib/font-awesome/webfonts/fa-solid-900.ttf +0 -0
  79. package/wwwroot/_content/MindExecution.Shared/lib/font-awesome/webfonts/fa-solid-900.woff2 +0 -0
  80. package/wwwroot/_content/MindExecution.Shared/models/all-MiniLM-L6-v2-quantized.onnx +0 -0
  81. package/wwwroot/_content/MindExecution.Shared/models/vocab.txt +30522 -0
  82. package/wwwroot/_framework/Google.Protobuf.9h59ukbel7.dll +0 -0
  83. package/wwwroot/_framework/Markdig.d1j7v41cl1.dll +0 -0
  84. package/wwwroot/_framework/MessagePack.Annotations.l6qv48kgpt.dll +0 -0
  85. package/wwwroot/_framework/MessagePack.eqoptzx9d5.dll +0 -0
  86. package/wwwroot/_framework/Microsoft.AspNetCore.Authorization.k7dsih5y5g.dll +0 -0
  87. package/wwwroot/_framework/Microsoft.AspNetCore.Components.6nyje9sa0g.dll +0 -0
  88. package/wwwroot/_framework/Microsoft.AspNetCore.Components.Authorization.iycd6unprw.dll +0 -0
  89. package/wwwroot/_framework/Microsoft.AspNetCore.Components.Web.487u3twia4.dll +0 -0
  90. package/wwwroot/_framework/Microsoft.AspNetCore.Components.WebAssembly.d0gcnmlxxz.dll +0 -0
  91. package/wwwroot/_framework/Microsoft.AspNetCore.Metadata.h4yevl9adi.dll +0 -0
  92. package/wwwroot/_framework/Microsoft.CSharp.qrvp77qmhs.dll +0 -0
  93. package/wwwroot/_framework/Microsoft.Data.Sqlite.jdlxgv2jtg.dll +0 -0
  94. package/wwwroot/_framework/Microsoft.EntityFrameworkCore.4gjazp7kjf.dll +0 -0
  95. package/wwwroot/_framework/Microsoft.EntityFrameworkCore.Abstractions.gocudnvz7b.dll +0 -0
  96. package/wwwroot/_framework/Microsoft.EntityFrameworkCore.Relational.lt4rsvinuo.dll +0 -0
  97. package/wwwroot/_framework/Microsoft.EntityFrameworkCore.Sqlite.69luj0fa9r.dll +0 -0
  98. package/wwwroot/_framework/Microsoft.Extensions.Caching.Abstractions.364t4jh3zz.dll +0 -0
  99. package/wwwroot/_framework/Microsoft.Extensions.Caching.Memory.izlxhpzosu.dll +0 -0
  100. package/wwwroot/_framework/Microsoft.Extensions.Configuration.8zq7hh41o7.dll +0 -0
  101. package/wwwroot/_framework/Microsoft.Extensions.Configuration.Abstractions.8if74zs6ea.dll +0 -0
  102. package/wwwroot/_framework/Microsoft.Extensions.Configuration.Json.duvlngw8i0.dll +0 -0
  103. package/wwwroot/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.t2hh9kvx0o.dll +0 -0
  104. package/wwwroot/_framework/Microsoft.Extensions.DependencyInjection.n4tg99oy8l.dll +0 -0
  105. package/wwwroot/_framework/Microsoft.Extensions.DependencyModel.h0d06ixk3e.dll +0 -0
  106. package/wwwroot/_framework/Microsoft.Extensions.Logging.Abstractions.rl32bkx2sd.dll +0 -0
  107. package/wwwroot/_framework/Microsoft.Extensions.Logging.dlht1xei0t.dll +0 -0
  108. package/wwwroot/_framework/Microsoft.Extensions.Options.qeunebioml.dll +0 -0
  109. package/wwwroot/_framework/Microsoft.Extensions.Primitives.18cr6vnuuz.dll +0 -0
  110. package/wwwroot/_framework/Microsoft.IO.RecyclableMemoryStream.r915vovvw4.dll +0 -0
  111. package/wwwroot/_framework/Microsoft.IdentityModel.Abstractions.1ejljk3erv.dll +0 -0
  112. package/wwwroot/_framework/Microsoft.IdentityModel.JsonWebTokens.1596zr8gne.dll +0 -0
  113. package/wwwroot/_framework/Microsoft.IdentityModel.Logging.229uyvpgio.dll +0 -0
  114. package/wwwroot/_framework/Microsoft.IdentityModel.Tokens.9sibtajc9f.dll +0 -0
  115. package/wwwroot/_framework/Microsoft.JSInterop.17lq4j1j7g.dll +0 -0
  116. package/wwwroot/_framework/Microsoft.JSInterop.WebAssembly.ryia5gxiad.dll +0 -0
  117. package/wwwroot/_framework/Microsoft.ML.OnnxRuntime.w9deo1m5ss.dll +0 -0
  118. package/wwwroot/_framework/Microsoft.ML.Tokenizers.cm2vuv2z61.dll +0 -0
  119. package/wwwroot/_framework/Microsoft.NET.StringTools.3qbrf4v2ki.dll +0 -0
  120. package/wwwroot/_framework/MimeMapping.og9ys58ylm.dll +0 -0
  121. package/wwwroot/_framework/MindExecution.Core.1q1trifbuu.dll +0 -0
  122. package/wwwroot/_framework/MindExecution.Kernel.gwwc40sc45.dll +0 -0
  123. package/wwwroot/_framework/MindExecution.Plugins.Admin.0jgrn1sckv.dll +0 -0
  124. package/wwwroot/_framework/MindExecution.Plugins.Business.13mme2qcag.dll +0 -0
  125. package/wwwroot/_framework/MindExecution.Plugins.Concept.dfp2mdt45q.dll +0 -0
  126. package/wwwroot/_framework/MindExecution.Plugins.Directory.3w4t6n3se0.dll +0 -0
  127. package/wwwroot/_framework/MindExecution.Plugins.PlanMaster.s0qpntz420.dll +0 -0
  128. package/wwwroot/_framework/MindExecution.Plugins.YouTube.iu11fq8d16.dll +0 -0
  129. package/wwwroot/_framework/MindExecution.Shared.7j27dcqnrc.dll +0 -0
  130. package/wwwroot/_framework/MindExecution.Web.pq1ty8ov2v.dll +0 -0
  131. package/wwwroot/_framework/Newtonsoft.Json.a56zs13vug.dll +0 -0
  132. package/wwwroot/_framework/SQLitePCLRaw.batteries_v2.rrd1nzawpp.dll +0 -0
  133. package/wwwroot/_framework/SQLitePCLRaw.core.1dxloztpfz.dll +0 -0
  134. package/wwwroot/_framework/SQLitePCLRaw.provider.e_sqlite3.oekyzl53i1.dll +0 -0
  135. package/wwwroot/_framework/Supabase.Core.s1pkj4aj0l.dll +0 -0
  136. package/wwwroot/_framework/Supabase.Functions.qz4nu782sg.dll +0 -0
  137. package/wwwroot/_framework/Supabase.Gotrue.twah27pkik.dll +0 -0
  138. package/wwwroot/_framework/Supabase.Postgrest.gmuuv369ih.dll +0 -0
  139. package/wwwroot/_framework/Supabase.Realtime.ox3kchdy3w.dll +0 -0
  140. package/wwwroot/_framework/Supabase.Storage.fnjnepaowr.dll +0 -0
  141. package/wwwroot/_framework/Supabase.azmaw5pgcz.dll +0 -0
  142. package/wwwroot/_framework/System.Collections.Concurrent.y1zmvuyipi.dll +0 -0
  143. package/wwwroot/_framework/System.Collections.Immutable.ug3j698qms.dll +0 -0
  144. package/wwwroot/_framework/System.Collections.NonGeneric.h66hj3863h.dll +0 -0
  145. package/wwwroot/_framework/System.Collections.Specialized.umr3y27ntj.dll +0 -0
  146. package/wwwroot/_framework/System.Collections.x53e19vfsj.dll +0 -0
  147. package/wwwroot/_framework/System.ComponentModel.Annotations.tz6gnt4ebt.dll +0 -0
  148. package/wwwroot/_framework/System.ComponentModel.Primitives.j7tiphu4rg.dll +0 -0
  149. package/wwwroot/_framework/System.ComponentModel.TypeConverter.ujlztox1gx.dll +0 -0
  150. package/wwwroot/_framework/System.ComponentModel.x9xz0ojfb6.dll +0 -0
  151. package/wwwroot/_framework/System.Console.ijzpqmj7ne.dll +0 -0
  152. package/wwwroot/_framework/System.Data.Common.1r0sqffq1p.dll +0 -0
  153. package/wwwroot/_framework/System.Diagnostics.DiagnosticSource.9upoqwq09o.dll +0 -0
  154. package/wwwroot/_framework/System.Diagnostics.Process.m99azzntjm.dll +0 -0
  155. package/wwwroot/_framework/System.Diagnostics.TraceSource.pl7wv26myr.dll +0 -0
  156. package/wwwroot/_framework/System.Diagnostics.Tracing.crlhfx6tut.dll +0 -0
  157. package/wwwroot/_framework/System.Drawing.Primitives.22e4y9ikq9.dll +0 -0
  158. package/wwwroot/_framework/System.Drawing.mi7d8hwowb.dll +0 -0
  159. package/wwwroot/_framework/System.Formats.Asn1.jx23sjiqnn.dll +0 -0
  160. package/wwwroot/_framework/System.IO.Compression.6fyoii3uej.dll +0 -0
  161. package/wwwroot/_framework/System.IO.Pipelines.vg77t4cd4d.dll +0 -0
  162. package/wwwroot/_framework/System.IdentityModel.Tokens.Jwt.t67es60z5b.dll +0 -0
  163. package/wwwroot/_framework/System.Linq.1bkoxlqgmq.dll +0 -0
  164. package/wwwroot/_framework/System.Linq.Expressions.24xqiypwdt.dll +0 -0
  165. package/wwwroot/_framework/System.Linq.Queryable.hvd01d6rsa.dll +0 -0
  166. package/wwwroot/_framework/System.Memory.8dx3lwgym4.dll +0 -0
  167. package/wwwroot/_framework/System.Net.Http.Json.3mhdm9l1rf.dll +0 -0
  168. package/wwwroot/_framework/System.Net.Http.eitrz660my.dll +0 -0
  169. package/wwwroot/_framework/System.Net.NetworkInformation.3pkuofcv9r.dll +0 -0
  170. package/wwwroot/_framework/System.Net.Ping.8clj5pklrp.dll +0 -0
  171. package/wwwroot/_framework/System.Net.Primitives.qrp4wcjz1p.dll +0 -0
  172. package/wwwroot/_framework/System.Net.WebSockets.Client.2u6pv01g69.dll +0 -0
  173. package/wwwroot/_framework/System.Net.WebSockets.qp6u31zvm5.dll +0 -0
  174. package/wwwroot/_framework/System.Numerics.Tensors.0c7z4mt3on.dll +0 -0
  175. package/wwwroot/_framework/System.Numerics.Vectors.kc7ufp2j4l.dll +0 -0
  176. package/wwwroot/_framework/System.ObjectModel.qv82fot1ib.dll +0 -0
  177. package/wwwroot/_framework/System.Private.CoreLib.rkafq04oma.dll +0 -0
  178. package/wwwroot/_framework/System.Private.Uri.t9542hmr6j.dll +0 -0
  179. package/wwwroot/_framework/System.Private.Xml.Linq.n8n3ptrbwu.dll +0 -0
  180. package/wwwroot/_framework/System.Private.Xml.rxd3tytisn.dll +0 -0
  181. package/wwwroot/_framework/System.Reactive.t3fuon548l.dll +0 -0
  182. package/wwwroot/_framework/System.Reflection.Emit.9tjhp6y0j3.dll +0 -0
  183. package/wwwroot/_framework/System.Reflection.Emit.ILGeneration.stxyk8zoo1.dll +0 -0
  184. package/wwwroot/_framework/System.Reflection.Emit.Lightweight.6xrd5v8vg0.dll +0 -0
  185. package/wwwroot/_framework/System.Reflection.Primitives.wgn8fpwwvv.dll +0 -0
  186. package/wwwroot/_framework/System.Runtime.InteropServices.JavaScript.sliym526xh.dll +0 -0
  187. package/wwwroot/_framework/System.Runtime.InteropServices.RuntimeInformation.oji7zut14z.dll +0 -0
  188. package/wwwroot/_framework/System.Runtime.InteropServices.te07xr2we9.dll +0 -0
  189. package/wwwroot/_framework/System.Runtime.Intrinsics.507y4h8nzq.dll +0 -0
  190. package/wwwroot/_framework/System.Runtime.Loader.v7gk4bse0k.dll +0 -0
  191. package/wwwroot/_framework/System.Runtime.Numerics.eqy5xjv3nd.dll +0 -0
  192. package/wwwroot/_framework/System.Runtime.Serialization.Formatters.zpkrub8lab.dll +0 -0
  193. package/wwwroot/_framework/System.Runtime.Serialization.Primitives.vhkpnbxjip.dll +0 -0
  194. package/wwwroot/_framework/System.Runtime.jn319d5nyg.dll +0 -0
  195. package/wwwroot/_framework/System.Security.Claims.0ztig1q9vo.dll +0 -0
  196. package/wwwroot/_framework/System.Security.Cryptography.vttizqc9ho.dll +0 -0
  197. package/wwwroot/_framework/System.Text.Encoding.Extensions.utdd47ny8f.dll +0 -0
  198. package/wwwroot/_framework/System.Text.Encodings.Web.wah8r1zoe0.dll +0 -0
  199. package/wwwroot/_framework/System.Text.Json.kxlfxj0wrs.dll +0 -0
  200. package/wwwroot/_framework/System.Text.RegularExpressions.dbqn58klox.dll +0 -0
  201. package/wwwroot/_framework/System.Threading.42ao9vi047.dll +0 -0
  202. package/wwwroot/_framework/System.Threading.Channels.hfa7j0uv2w.dll +0 -0
  203. package/wwwroot/_framework/System.Threading.Thread.caul0pdqul.dll +0 -0
  204. package/wwwroot/_framework/System.Transactions.Local.fimi2hamzo.dll +0 -0
  205. package/wwwroot/_framework/System.Web.HttpUtility.gq8yz50p2e.dll +0 -0
  206. package/wwwroot/_framework/System.Xml.Linq.kitin4zjoj.dll +0 -0
  207. package/wwwroot/_framework/System.Xml.ReaderWriter.kzvw3qgxb0.dll +0 -0
  208. package/wwwroot/_framework/System.Xml.XDocument.c539ki6cuq.dll +0 -0
  209. package/wwwroot/_framework/System.m05i39uvk9.dll +0 -0
  210. package/wwwroot/_framework/Websocket.Client.vapounvmnl.dll +0 -0
  211. package/wwwroot/_framework/blazor.boot.json +305 -0
  212. package/wwwroot/_framework/blazor.webassembly.js +1 -0
  213. package/wwwroot/_framework/dotnet.js +4 -0
  214. package/wwwroot/_framework/dotnet.native.vz0adxojrz.wasm +0 -0
  215. package/wwwroot/_framework/dotnet.native.xsn1d6x2kd.js +16 -0
  216. package/wwwroot/_framework/dotnet.runtime.dstopyvqzi.js +4 -0
  217. package/wwwroot/_framework/icudt_CJK.tjcz0u77k5.dat +0 -0
  218. package/wwwroot/_framework/icudt_EFIGS.tptq2av103.dat +0 -0
  219. package/wwwroot/_framework/icudt_no_CJK.lfu7j35m59.dat +0 -0
  220. package/wwwroot/_framework/netstandard.0xet7jg7ky.dll +0 -0
  221. package/wwwroot/_headers +40 -0
  222. package/wwwroot/_redirects +1 -0
  223. package/wwwroot/appsettings.json +71 -0
  224. package/wwwroot/icon-192.png +0 -0
  225. package/wwwroot/icon-512.png +0 -0
  226. package/wwwroot/index.html +710 -0
  227. package/wwwroot/js/marketing-tool.js +180 -0
  228. package/wwwroot/manifest.webmanifest +22 -0
  229. package/wwwroot/robots.txt +4 -0
  230. package/wwwroot/service-worker-assets.js +857 -0
  231. package/wwwroot/service-worker.js +33 -0
  232. package/wwwroot/sitemap.xml +27 -0
@@ -0,0 +1,710 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="utf-8" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>MindExec | Run your ideas as AI task graphs</title>
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
+ <base href="/" />
10
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260610-video-dnd-v454" />
11
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260610-video-dnd-v454" />
12
+ <!-- ?쇄뼹??Font Awesome (local) ?쇄뼹??-->
13
+ <link rel="stylesheet" href="_content/MindExecution.Shared/lib/font-awesome/css/all.min.css" />
14
+ <!-- ?꿎뼯??-->
15
+ <style>
16
+ #app {
17
+ min-height: 100vh;
18
+ }
19
+
20
+ .app-static-fallback {
21
+ width: min(960px, calc(100% - 32px));
22
+ margin: 0 auto;
23
+ padding: 56px 0 48px;
24
+ color: #0f172a;
25
+ line-height: 1.7;
26
+ }
27
+
28
+ .app-static-fallback__eyebrow {
29
+ display: inline-flex;
30
+ padding: 6px 10px;
31
+ border-radius: 999px;
32
+ background: rgba(255, 255, 255, 0.84);
33
+ border: 1px solid rgba(148, 163, 184, 0.25);
34
+ font-size: 12px;
35
+ font-weight: 700;
36
+ color: #334155;
37
+ }
38
+
39
+ .app-static-fallback h1 {
40
+ margin: 16px 0 0;
41
+ font-size: clamp(30px, 4vw, 48px);
42
+ line-height: 1.05;
43
+ font-weight: 800;
44
+ }
45
+
46
+ .app-static-fallback p {
47
+ max-width: 760px;
48
+ margin: 16px 0 0;
49
+ color: #475569;
50
+ }
51
+
52
+ .app-static-fallback a {
53
+ color: #0f172a;
54
+ font-weight: 700;
55
+ }
56
+
57
+ #blazor-error-ui {
58
+ display: none;
59
+ }
60
+
61
+ #blazor-error-ui.is-visible {
62
+ position: fixed;
63
+ right: 20px;
64
+ bottom: 20px;
65
+ z-index: 9999;
66
+ display: flex;
67
+ align-items: center;
68
+ gap: 12px;
69
+ max-width: 420px;
70
+ padding: 14px 16px;
71
+ border-radius: 14px;
72
+ background: rgba(15, 23, 42, 0.96);
73
+ color: #fff;
74
+ box-shadow: 0 18px 48px rgba(15, 23, 42, 0.28);
75
+ }
76
+
77
+ .blazor-error-ui__message {
78
+ flex: 1;
79
+ font-size: 14px;
80
+ line-height: 1.6;
81
+ }
82
+
83
+ #blazor-error-ui .reload,
84
+ #blazor-error-ui .dismiss {
85
+ color: #fff;
86
+ font-size: 13px;
87
+ font-weight: 700;
88
+ text-decoration: none;
89
+ cursor: pointer;
90
+ }
91
+ </style>
92
+ </head>
93
+
94
+ <body>
95
+ <div id="app-container">
96
+ <div id="app">
97
+ <article class="app-static-fallback" id="app-static-fallback">
98
+ <div class="app-static-fallback__eyebrow">MindExec</div>
99
+ <h1>MindExec</h1>
100
+ <p>Run your ideas as AI task graphs. MindExec starts with free browser tools for markdown previews, README checks, notes, and clipboard capture. When the work becomes worth saving, move it into MindCanvas for persistent projects, AI-assisted organization, and visual workflows.</p>
101
+ <p><a href="/mindcanvas">Open MindCanvas</a> | <a href="/pricing">See pricing</a> | <a href="/tools">Browse free tools</a></p>
102
+ <noscript>
103
+ <p>JavaScript is required for the interactive tool experience.</p>
104
+ </noscript>
105
+ </article>
106
+ </div>
107
+ </div>
108
+
109
+ <div id="three-js-container"
110
+ style="display: none; position: fixed; top:0; left:0; width:100%; height:100%; z-index:999; background-color: rgba(0,0,0,0.5);">
111
+ </div>
112
+
113
+ <!-- Selection rectangle overlay -->
114
+ <div id="selection-rectangle"
115
+ style="position: fixed; border:2px solid #1173d4; background-color: rgba(17, 115, 212, 0.15); pointer-events: none; display: none; z-index:100;">
116
+ </div>
117
+
118
+ <div id="blazor-error-ui" role="alert" aria-live="assertive">
119
+ <div class="blazor-error-ui__message"></div>
120
+ <a href="." class="reload">Reload</a>
121
+ <span class="dismiss">Dismiss</span>
122
+ </div>
123
+
124
+ <!-- Aggressively remove any existing service workers and caches so hosted deploys pick up new JS immediately -->
125
+ <script>
126
+ window.__swCleanup = (async () => {
127
+ try {
128
+ let hadAnything = false;
129
+ if ('serviceWorker' in navigator) {
130
+ const regs = await navigator.serviceWorker.getRegistrations();
131
+ hadAnything = hadAnything || regs.length > 0;
132
+ await Promise.allSettled(regs.map(r => r.unregister()));
133
+ }
134
+ if (window.caches) {
135
+ const keys = await caches.keys();
136
+ hadAnything = hadAnything || keys.length > 0;
137
+ await Promise.allSettled(keys.map(k => caches.delete(k)));
138
+ }
139
+ return hadAnything;
140
+ } catch (e) {
141
+ console.debug('SW cleanup skipped:', e);
142
+ return false;
143
+ }
144
+ })();
145
+ </script>
146
+
147
+ <!-- Blazor WASM loader (autostart disabled; we'll start after our scripts load) -->
148
+ <script src="_framework/blazor.webassembly.js" autostart="false"></script>
149
+
150
+ <!-- Global helpers and libraries -->
151
+ <script src="js/marketing-tool.js"></script>
152
+ <script>
153
+ window.showBlazorBootError = function (message) {
154
+ const errorUi = document.getElementById('blazor-error-ui');
155
+ if (!errorUi) return;
156
+
157
+ const messageElement = errorUi.querySelector('.blazor-error-ui__message');
158
+ if (messageElement) {
159
+ messageElement.textContent = message || 'This page could not finish loading.';
160
+ }
161
+
162
+ errorUi.classList.add('is-visible');
163
+ errorUi.removeAttribute('hidden');
164
+ };
165
+
166
+ window.hideBlazorBootError = function () {
167
+ const errorUi = document.getElementById('blazor-error-ui');
168
+ if (!errorUi) return;
169
+ errorUi.classList.remove('is-visible');
170
+ };
171
+
172
+ document.addEventListener('click', (event) => {
173
+ const target = event.target;
174
+ if (target instanceof HTMLElement && target.classList.contains('dismiss')) {
175
+ window.hideBlazorBootError();
176
+ }
177
+ });
178
+
179
+ // Global textarea handlers
180
+ function adjustTextareaHeight(element) {
181
+ if (!element) return;
182
+
183
+ // ?쇄뼹??[Change] Add jitter-prevention logic ?쇄뼹??
184
+ // Compare the previous text length. When content grows, skip the 'auto' reset.
185
+ // Only reset to 'auto' when shrinking (during deletion).
186
+ const currentLength = element.value.length;
187
+ const prevLength = parseInt(element.dataset.prevLength || '0');
188
+
189
+ if (currentLength < prevLength) {
190
+ element.style.height = 'auto'; // reset height when deleting to allow shrink
191
+ }
192
+
193
+ element.dataset.prevLength = currentLength; // store current length
194
+ // ?꿎뼯??[Change] ?꿎뼯??
195
+
196
+ const computedStyles = window.getComputedStyle(element);
197
+ const lineHeight = parseFloat(computedStyles.lineHeight || '24') || 24;
198
+ const paddingTop = parseFloat(computedStyles.paddingTop || '0') || 0;
199
+ const paddingBottom = parseFloat(computedStyles.paddingBottom || '0') || 0;
200
+ const verticalPadding = paddingTop + paddingBottom;
201
+ const maxLines = 6; // limit to 6 lines
202
+ const maxHeight = (lineHeight * maxLines) + verticalPadding;
203
+ const minHeightPx = Math.max(lineHeight + verticalPadding, 42);
204
+
205
+ const newHeight = Math.min(element.scrollHeight, maxHeight);
206
+
207
+ // Even if content didn't shrink, apply if scrollHeight grew
208
+ element.style.height = Math.max(newHeight, minHeightPx) + 'px';
209
+ element.style.overflowY = 'hidden';
210
+ }
211
+ function resetTextareaHeight(element) {
212
+ if (!element) return;
213
+ const computedStyles = window.getComputedStyle(element);
214
+ const lineHeight = parseFloat(computedStyles.lineHeight || '24') || 24;
215
+ const paddingTop = parseFloat(computedStyles.paddingTop || '0') || 0;
216
+ const paddingBottom = parseFloat(computedStyles.paddingBottom || '0') || 0;
217
+ const minHeightPx = Math.max(lineHeight + paddingTop + paddingBottom, 42);
218
+ element.style.height = minHeightPx + 'px';
219
+ element.style.overflowY = 'hidden';
220
+ }
221
+ function attachTextareaHandlers(element, dotNetRef) {
222
+ if (!element) return;
223
+
224
+ if (element.__mindexecEnterHandler) {
225
+ element.removeEventListener('keydown', element.__mindexecEnterHandler);
226
+ }
227
+
228
+ const handleKeyDown = (e) => {
229
+ if (e.key === 'Enter') {
230
+ if (e.shiftKey) {
231
+ return;
232
+ } else {
233
+ e.preventDefault();
234
+ if (dotNetRef && dotNetRef.invokeMethodAsync) {
235
+ dotNetRef.invokeMethodAsync('OnEnterPressed');
236
+ }
237
+ }
238
+ }
239
+ };
240
+
241
+ element.__mindexecEnterHandler = handleKeyDown;
242
+ element.addEventListener('keydown', handleKeyDown);
243
+ }
244
+ function blurElement(element) {
245
+ if (element) element.blur();
246
+ if (document && document.body) document.body.focus();
247
+ }
248
+
249
+ function focusGlobalTextarea() {
250
+ const textarea = document.getElementById('global-input-textarea');
251
+ if (textarea) {
252
+ textarea.focus();
253
+ textarea.setSelectionRange(textarea.value.length, textarea.value.length);
254
+ }
255
+ }
256
+
257
+ window.adjustTextareaHeight = adjustTextareaHeight;
258
+ window.resetTextareaHeight = resetTextareaHeight;
259
+ window.attachTextareaHandlers = attachTextareaHandlers;
260
+ window.blurElement = blurElement;
261
+ window.focusGlobalTextarea = focusGlobalTextarea;
262
+
263
+ // Prevent default page-level DnD behavior
264
+ document.addEventListener('dragover', (e) => {
265
+ e.preventDefault();
266
+ // ?쇄뼹??[Change] Remove/avoid stopPropagation (do not disrupt event flow) ?쇄뼹??
267
+ // e.stopPropagation();
268
+ // ?꿎뼯??[Change] ?꿎뼯??
269
+
270
+ // ?쇄뼹??[Change] Default is 'none', but only apply when not handled by children ?쇄뼹??
271
+ // (If MindMapDnD handles it, this code won't run or will be ignored)
272
+ // e.dataTransfer.dropEffect = 'none';
273
+ }, false);
274
+
275
+ document.addEventListener('dragleave', (e) => {
276
+ e.preventDefault();
277
+ // e.stopPropagation(); // removed
278
+ }, false);
279
+
280
+ document.addEventListener('drop', (e) => {
281
+ e.preventDefault();
282
+ // e.stopPropagation(); // removed
283
+ }, false);
284
+ </script>
285
+
286
+ <!-- Paddle.js -->
287
+ <script src="https://cdn.paddle.com/paddle/v2/paddle.js"></script>
288
+
289
+ <!-- App scripts and libs REQUIRED before Blazor starts -->
290
+ <script>
291
+ window.mindExecutionStartupTiming = window.mindExecutionStartupTiming || (() => {
292
+ const perf = window.performance;
293
+ const now = () => perf && typeof perf.now === 'function'
294
+ ? perf.now()
295
+ : Date.now();
296
+ const marks = new Map();
297
+ const pageStart = now();
298
+ marks.set('page-start', pageStart);
299
+
300
+ function toDuration(value) {
301
+ return `${Math.round(value)}ms`;
302
+ }
303
+
304
+ function formatDetails(details) {
305
+ if (!details || typeof details !== 'object') {
306
+ return '';
307
+ }
308
+
309
+ const parts = Object.entries(details)
310
+ .filter(([, value]) => value !== undefined && value !== null && value !== '')
311
+ .map(([key, value]) => `${key}=${typeof value === 'number' ? Math.round(value) : value}`);
312
+
313
+ return parts.length > 0 ? ` | ${parts.join(', ')}` : '';
314
+ }
315
+
316
+ function elapsedSince(markName, currentNow) {
317
+ const startedAt = marks.get(markName);
318
+ return typeof startedAt === 'number' ? currentNow - startedAt : null;
319
+ }
320
+
321
+ return {
322
+ mark(stage, details) {
323
+ const currentNow = now();
324
+ marks.set(stage, currentNow);
325
+ const pageElapsed = elapsedSince('page-start', currentNow) ?? 0;
326
+ try {
327
+ window.dispatchEvent(new CustomEvent(`startup-timing:${stage}`, {
328
+ detail: {
329
+ stage,
330
+ elapsedMs: Math.round(pageElapsed),
331
+ details: details || null
332
+ }
333
+ }));
334
+ } catch { }
335
+ console.log(`[Startup Timing] ${stage}: ${toDuration(pageElapsed)} since page start${formatDetails(details)}`);
336
+ return Math.round(pageElapsed);
337
+ },
338
+ logMindCanvasReady(details) {
339
+ const currentNow = now();
340
+ marks.set('mindcanvas-ready', currentNow);
341
+
342
+ const segments = [];
343
+ const pageElapsed = elapsedSince('page-start', currentNow);
344
+ const scriptLoaderElapsed = elapsedSince('script-loader-start', currentNow);
345
+ const blazorElapsed = elapsedSince('blazor-start', currentNow);
346
+ const bootstrapElapsed = elapsedSince('mindcanvas-bootstrap-start', currentNow);
347
+ const boardElapsed = elapsedSince('mindcanvas-board-load-start', currentNow);
348
+
349
+ if (pageElapsed !== null) segments.push(`page=${toDuration(pageElapsed)}`);
350
+ if (scriptLoaderElapsed !== null) segments.push(`scriptLoader=${toDuration(scriptLoaderElapsed)}`);
351
+ if (blazorElapsed !== null) segments.push(`blazor=${toDuration(blazorElapsed)}`);
352
+ if (bootstrapElapsed !== null) segments.push(`bootstrap=${toDuration(bootstrapElapsed)}`);
353
+ if (boardElapsed !== null) segments.push(`board=${toDuration(boardElapsed)}`);
354
+
355
+ try {
356
+ window.dispatchEvent(new CustomEvent('startup-timing:mindcanvas-ready', {
357
+ detail: {
358
+ stage: 'mindcanvas-ready',
359
+ elapsedMs: Math.round(pageElapsed ?? 0),
360
+ details: details || null
361
+ }
362
+ }));
363
+ } catch { }
364
+
365
+ console.log(`[Startup Timing] MindCanvas ready: ${segments.join(' | ')}${formatDetails(details)}`);
366
+ return Math.round(pageElapsed ?? 0);
367
+ }
368
+ };
369
+ })();
370
+ window.mindExecutionStartupTiming.mark('index-html-ready', {
371
+ route: window.location.pathname || '/'
372
+ });
373
+
374
+ window.__marketingToolHosts = [
375
+ 'mdview.pages.dev', 'mdview.mindexec.io', 'markdown-viewer.pages.dev', 'markdown-viewer.mindexec.io',
376
+ 'bulkmd.pages.dev', 'bulkmd.mindexec.io', 'bulk-markdown-viewer.pages.dev', 'bulk-markdown-viewer.mindexec.io',
377
+ 'mdoutln.pages.dev', 'mdoutln.mindexec.io', 'markdown-outline.pages.dev', 'markdown-outline.mindexec.io',
378
+ 'mdtable.pages.dev', 'mdtable.mindexec.io', 'markdown-table-formatter.pages.dev', 'markdown-table-formatter.mindexec.io',
379
+ 'readme.pages.dev', 'readme.mindexec.io', 'readme-previewer.pages.dev', 'readme-previewer.mindexec.io',
380
+ 'md2html.pages.dev', 'md2html.mindexec.io', 'markdown-to-html.pages.dev', 'markdown-to-html.mindexec.io',
381
+ 'mdcheck.pages.dev', 'mdcheck.mindexec.io', 'markdown-link-checker.pages.dev', 'markdown-link-checker.mindexec.io',
382
+ 'quickpad.pages.dev', 'quickpad.mindexec.io', 'browser-notepad.pages.dev', 'browser-notepad.mindexec.io',
383
+ 'clipbrd.pages.dev', 'clipbrd.mindexec.io', 'clipboard-board.pages.dev', 'clipboard-board.mindexec.io'
384
+ ];
385
+
386
+ window.__matchesMarketingToolHost = function (configuredHost, runtimeHost) {
387
+ if (!configuredHost || !runtimeHost) {
388
+ return false;
389
+ }
390
+
391
+ const normalizedConfiguredHost = configuredHost.toLowerCase();
392
+ const normalizedRuntimeHost = runtimeHost.toLowerCase();
393
+ if (normalizedConfiguredHost === normalizedRuntimeHost) {
394
+ return true;
395
+ }
396
+
397
+ if (!normalizedConfiguredHost.endsWith('.pages.dev') || !normalizedRuntimeHost.endsWith('.pages.dev')) {
398
+ return false;
399
+ }
400
+
401
+ const configuredPrefix = normalizedConfiguredHost.slice(0, -'.pages.dev'.length);
402
+ const runtimePrefix = normalizedRuntimeHost.slice(0, -'.pages.dev'.length);
403
+ return runtimePrefix === configuredPrefix || runtimePrefix.startsWith(`${configuredPrefix}-`);
404
+ };
405
+
406
+ window.__isMarketingToolHost = window.__marketingToolHosts.some(host =>
407
+ window.__matchesMarketingToolHost(host, location.host || '')
408
+ );
409
+ </script>
410
+ <!-- ?쇄뼹??[Upgrade] Three.js r168 via ESM ?쇄뼹??-->
411
+ <script type="importmap">
412
+ {
413
+ "imports": {
414
+ "three": "https://cdn.jsdelivr.net/npm/three@0.168.0/build/three.module.js"
415
+ }
416
+ }
417
+ </script>
418
+ <script type="module">
419
+ if (!window.__isMarketingToolHost) {
420
+ const THREE = await import('three');
421
+
422
+ window.THREE = THREE;
423
+ globalThis.THREE = THREE;
424
+ console.log('[Three.js] r' + THREE.REVISION + ' loaded (ESM ??global)');
425
+
426
+ window.THREE_LOADED = true;
427
+ window.dispatchEvent(new Event('three-loaded'));
428
+ } else {
429
+ console.log('[Script Loader] Marketing tool host detected. Skipping Three.js preload.');
430
+ }
431
+ </script>
432
+ <!-- Wait for THREE then load dependent scripts -->
433
+ <script>
434
+ function loadScript(src, options = {}) {
435
+ const SCRIPT_LOAD_TIMEOUT_MS = 15000;
436
+ const SCRIPT_LOAD_SLOW_MS = 3000;
437
+ window.__mindExecutionScriptLoaderState = window.__mindExecutionScriptLoaderState || {
438
+ pending: {},
439
+ completed: [],
440
+ lastError: null
441
+ };
442
+
443
+ const label = options.label || src;
444
+ const startAt = performance.now();
445
+ window.__mindExecutionScriptLoaderState.pending[label] = {
446
+ src,
447
+ label,
448
+ startedAt: startAt
449
+ };
450
+
451
+ return new Promise((resolve, reject) => {
452
+ const s = document.createElement('script');
453
+ s.src = src;
454
+ if (options.ordered === true) {
455
+ // Ordered dynamic scripts still fetch in parallel, but execute in append order.
456
+ s.async = false;
457
+ }
458
+ if (options.fetchPriority) {
459
+ s.fetchPriority = options.fetchPriority;
460
+ }
461
+ let finished = false;
462
+ const complete = (kind, error = null) => {
463
+ if (finished) return;
464
+ finished = true;
465
+ clearTimeout(timeoutHandle);
466
+
467
+ const elapsedMs = Math.max(0, performance.now() - startAt);
468
+ delete window.__mindExecutionScriptLoaderState.pending[label];
469
+
470
+ if (kind === 'load') {
471
+ window.__mindExecutionScriptLoaderState.completed.push({
472
+ label,
473
+ elapsedMs: Math.round(elapsedMs),
474
+ loadedAt: Date.now()
475
+ });
476
+ if (elapsedMs >= SCRIPT_LOAD_SLOW_MS) {
477
+ console.warn(`[Script Loader] Slow script load: ${label} (${elapsedMs.toFixed(0)}ms)`);
478
+ }
479
+ resolve();
480
+ return;
481
+ }
482
+
483
+ const pendingLabels = Object.keys(window.__mindExecutionScriptLoaderState.pending || {});
484
+ const failure = error instanceof Error
485
+ ? error
486
+ : new Error(String(error || `Failed to load script: ${label}`));
487
+ window.__mindExecutionScriptLoaderState.lastError = {
488
+ label,
489
+ src,
490
+ kind,
491
+ elapsedMs: Math.round(elapsedMs),
492
+ pending: pendingLabels,
493
+ message: failure.message
494
+ };
495
+ reject(failure);
496
+ };
497
+
498
+ const timeoutHandle = setTimeout(() => {
499
+ const pendingLabels = Object.keys(window.__mindExecutionScriptLoaderState.pending || {});
500
+ complete('timeout', new Error(`[Script Loader] Timeout waiting for ${label} after ${SCRIPT_LOAD_TIMEOUT_MS}ms | pending=${pendingLabels.join(', ') || '-'}`));
501
+ }, options.timeoutMs || SCRIPT_LOAD_TIMEOUT_MS);
502
+
503
+ s.onload = () => complete('load');
504
+ s.onerror = () => complete('error', new Error(`[Script Loader] Failed to load ${label}`));
505
+ document.head.appendChild(s);
506
+ });
507
+ }
508
+
509
+ function loadScriptBatchOrdered(scripts, scriptUrl, onLoaded) {
510
+ const scriptPromises = [];
511
+
512
+ for (const script of scripts) {
513
+ const promise = loadScript(scriptUrl(script), {
514
+ ordered: true,
515
+ fetchPriority: 'high',
516
+ label: script
517
+ }).then(() => {
518
+ onLoaded?.(script);
519
+ });
520
+
521
+ scriptPromises.push(promise);
522
+ }
523
+
524
+ return Promise.all(scriptPromises);
525
+ }
526
+
527
+ async function loadDependentScripts() {
528
+ window.mindExecutionStartupTiming?.mark('script-loader-start', {
529
+ route: window.location.pathname || '/'
530
+ });
531
+
532
+ if (window.__isMarketingToolHost) {
533
+ console.log('[Script Loader] Marketing tool host detected. Skipping MindMap script bundle.');
534
+
535
+ try {
536
+ if (window.__swCleanup) {
537
+ const cleaned = await window.__swCleanup;
538
+ const flag = '__swCleanedOnce';
539
+ if (cleaned && !sessionStorage.getItem(flag)) {
540
+ sessionStorage.setItem(flag, '1');
541
+ location.reload();
542
+ return;
543
+ }
544
+ }
545
+ } catch { }
546
+
547
+ if (window.Blazor && Blazor.start) {
548
+ window.mindExecutionStartupTiming?.mark('blazor-start', { marketingToolHost: true });
549
+ await Blazor.start();
550
+ }
551
+
552
+ return;
553
+ }
554
+
555
+ // Wait for THREE to be available
556
+ if (!window.THREE_LOADED) {
557
+ await new Promise(r => window.addEventListener('three-loaded', r, { once: true }));
558
+ }
559
+
560
+ const base = '_content/MindExecution.Shared/js/';
561
+ const scriptVersion = '20260610-video-dnd-v454';
562
+ const scriptUrl = (script) => `${base}${script}?v=${scriptVersion}`;
563
+ console.log(`[Script Loader] Shared JS version: ${scriptVersion}`);
564
+ const criticalScripts = [
565
+ 'mind-map-dev-guards.js',
566
+ 'renderers/CSS3DRenderer.js',
567
+ 'helpers/InfiniteGridHelper.js',
568
+ 'marked.min.js',
569
+ 'background-themes.js',
570
+ 'mind-map-logic-workers.js',
571
+ // Troika removed
572
+ 'texture-worker-manager.js', // ??Web Worker ?띿뒪泥??앹꽦
573
+ 'mind-map-texture-factory.js',
574
+ 'mind-map-glow-shader.js', // ??SDF Glow (no textures, GPU only)
575
+ 'mind-map-css3d-manager.js',
576
+ 'mind-map-text-overlay-v2.js',
577
+ 'mind-map-object-manager.js',
578
+ 'mind-map-pipeline.js',
579
+ 'mind-map-nodes.js',
580
+ 'mind-map-menu-manager.js',
581
+ 'mind-map-multi-select.js',
582
+ 'mind-map-interactions.js',
583
+ 'mind-map-dnd.js',
584
+ 'mind-map-lod-renderer.js',
585
+ 'mind-map-text-lod-system.js', // ??Text LOD ?쒖뒪??(?숈쟻 ?띿뒪泥??덉쭏)
586
+ 'mind-map-core.js',
587
+ 'mindmap-toolbar.js',
588
+ 'token-manager.js',
589
+ 'file-system-helper.js'
590
+ ];
591
+ const routePath = (location.pathname || '/').toLowerCase();
592
+ const routeCriticalScripts = [];
593
+ if (routePath === '/code' || routePath === '/agent') {
594
+ routeCriticalScripts.push('code-master.js', 'agent-visualization.js');
595
+ }
596
+ if (routePath === '/planmaster' || routePath === '/planagent') {
597
+ routeCriticalScripts.push('plan-master.js');
598
+ }
599
+ const deferredScripts = ['plan-master.js', 'code-master.js', 'agent-visualization.js']
600
+ .filter(script => !routeCriticalScripts.includes(script));
601
+
602
+ function queueAgentSettings(globalName, pendingKey) {
603
+ if (window[globalName]) return;
604
+ window[globalName] = {
605
+ applySettings(settings) {
606
+ window[pendingKey] = Object.assign({}, window[pendingKey] || {}, settings || {});
607
+ }
608
+ };
609
+ }
610
+
611
+ function flushQueuedAgentSettings(script) {
612
+ const mappings = {
613
+ 'plan-master.js': ['planAgent', '__pendingPlanAgentSettings'],
614
+ 'code-master.js': ['codeAgent', '__pendingCodeAgentSettings']
615
+ };
616
+ const mapping = mappings[script];
617
+ if (!mapping) return;
618
+
619
+ const [globalName, pendingKey] = mapping;
620
+ const pending = window[pendingKey];
621
+ if (pending && window[globalName]?.applySettings) {
622
+ window[pendingKey] = null;
623
+ window[globalName].applySettings(pending);
624
+ }
625
+ }
626
+
627
+ queueAgentSettings('planAgent', '__pendingPlanAgentSettings');
628
+ queueAgentSettings('codeAgent', '__pendingCodeAgentSettings');
629
+
630
+ await loadScriptBatchOrdered(
631
+ [...criticalScripts, ...routeCriticalScripts],
632
+ scriptUrl,
633
+ flushQueuedAgentSettings
634
+ );
635
+
636
+ window.MindCanvasBuildInfo?.setRuntime?.('scriptVersion', scriptVersion);
637
+ window.MindCanvasBuildInfo?.validateRequiredParts?.(['devGuards', 'core', 'lodRenderer']);
638
+
639
+ console.log('[Script Loader] Critical scripts loaded, starting Blazor...');
640
+ window.mindExecutionStartupTiming?.mark('critical-scripts-loaded', {
641
+ criticalCount: criticalScripts.length + routeCriticalScripts.length
642
+ });
643
+
644
+ // SW cleanup
645
+ try {
646
+ if (window.__swCleanup) {
647
+ const cleaned = await window.__swCleanup;
648
+ const flag = '__swCleanedOnce';
649
+ if (cleaned && !sessionStorage.getItem(flag)) {
650
+ sessionStorage.setItem(flag, '1');
651
+ location.reload();
652
+ return;
653
+ }
654
+ }
655
+ } catch { }
656
+
657
+ // Start Blazor
658
+ if (window.Blazor && Blazor.start) {
659
+ window.mindExecutionStartupTiming?.mark('blazor-start', { marketingToolHost: false });
660
+ await Blazor.start();
661
+ }
662
+
663
+ const scheduleDeferredScripts = window.requestIdleCallback
664
+ ? ((callback) => window.requestIdleCallback(callback, { timeout: 1500 }))
665
+ : ((callback) => setTimeout(callback, 0));
666
+
667
+ const loadDeferredScriptsNow = () => {
668
+ scheduleDeferredScripts(() => {
669
+ (async () => {
670
+ await loadScriptBatchOrdered(
671
+ deferredScripts,
672
+ scriptUrl,
673
+ flushQueuedAgentSettings
674
+ );
675
+ console.log('[Script Loader] Deferred scripts loaded.');
676
+ window.mindExecutionStartupTiming?.mark('deferred-scripts-loaded', {
677
+ deferredCount: deferredScripts.length
678
+ });
679
+ })().catch(e => console.error('[Script Loader] Deferred load failed:', e));
680
+ });
681
+ };
682
+
683
+ if (routePath === '/mindcanvas' && deferredScripts.length > 0) {
684
+ let deferredStarted = false;
685
+ const startDeferredAfterMindCanvasReady = () => {
686
+ if (deferredStarted) return;
687
+ deferredStarted = true;
688
+ loadDeferredScriptsNow();
689
+ };
690
+
691
+ window.addEventListener('startup-timing:mindcanvas-ready', startDeferredAfterMindCanvasReady, { once: true });
692
+ setTimeout(startDeferredAfterMindCanvasReady, 20000);
693
+ } else {
694
+ loadDeferredScriptsNow();
695
+ }
696
+ }
697
+
698
+ // Start loading
699
+ loadDependentScripts().catch(e => {
700
+ console.error('[Script Loader] Failed:', e);
701
+ window.showBlazorBootError('The page could not finish loading. Reload and try again.');
702
+ });
703
+ </script>
704
+ <!-- ?꿎뼯??[Upgrade] ?꿎뼯??-->
705
+ </body>
706
+
707
+ </html>
708
+
709
+
710
+