@mindexec/cli 0.2.63 → 0.2.65

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindexec/cli",
3
- "version": "0.2.63",
3
+ "version": "0.2.65",
4
4
  "description": "MindExec local runtime and bridge CLI",
5
5
  "main": "server.js",
6
6
  "type": "module",
@@ -11602,11 +11602,25 @@
11602
11602
  prompt: String(parsed?.prompt ?? parsed?.Prompt ?? ''),
11603
11603
  iconClass: String(parsed?.iconClass ?? parsed?.IconClass ?? 'fa-solid fa-wand-magic-sparkles'),
11604
11604
  selectedOptionId: String(parsed?.selectedOptionId ?? parsed?.SelectedOptionId ?? metadata?.templateLauncherSelectedOptionId ?? metadata?.TemplateLauncherSelectedOptionId ?? options[0]?.id ?? options[0]?.Id ?? ''),
11605
+ eyebrow: String(parsed?.eyebrow ?? parsed?.Eyebrow ?? 'Template'),
11606
+ generateLabel: String(parsed?.generateLabel ?? parsed?.GenerateLabel ?? 'Generate'),
11607
+ noInputsLabel: String(parsed?.noInputsLabel ?? parsed?.NoInputsLabel ?? 'No inputs needed.'),
11608
+ generatingMessage: String(parsed?.generatingMessage ?? parsed?.GeneratingMessage ?? 'Generating nodes...'),
11609
+ generatedMessageFormat: String(parsed?.generatedMessageFormat ?? parsed?.GeneratedMessageFormat ?? 'Generated {0} nodes below.'),
11610
+ generationFailedMessage: String(parsed?.generationFailedMessage ?? parsed?.GenerationFailedMessage ?? 'Template generation failed.'),
11611
+ requiredMessageFormat: String(parsed?.requiredMessageFormat ?? parsed?.RequiredMessageFormat ?? '{0} is required.'),
11605
11612
  inputValues: { ...(parsed?.inputValues ?? parsed?.InputValues ?? {}) },
11606
11613
  options
11607
11614
  };
11608
11615
  }
11609
11616
 
11617
+ function formatTemplateCardMessage(format, ...args) {
11618
+ return String(format || '').replace(/\{(\d+)\}/g, (_, index) => {
11619
+ const value = args[Number(index)];
11620
+ return value === undefined || value === null ? '' : String(value);
11621
+ });
11622
+ }
11623
+
11610
11624
  function getTemplateOptionId(option) {
11611
11625
  return String(option?.id ?? option?.Id ?? '');
11612
11626
  }
@@ -11701,7 +11715,7 @@
11701
11715
 
11702
11716
  const inputs = getTemplateOptionInputs(selectedOption);
11703
11717
  if (inputs.length === 0) {
11704
- const empty = createTemplateCardText('div', 'template-card__empty', 'No inputs needed.');
11718
+ const empty = createTemplateCardText('div', 'template-card__empty', config.noInputsLabel);
11705
11719
  form.appendChild(empty);
11706
11720
  return;
11707
11721
  }
@@ -11782,7 +11796,7 @@
11782
11796
  const required = !!(input?.required ?? input?.Required ?? false);
11783
11797
  if (required && !String(values[key] || '').trim()) {
11784
11798
  const label = String(input?.label ?? input?.Label ?? key);
11785
- return { valid: false, message: `${label} is required.` };
11799
+ return { valid: false, message: formatTemplateCardMessage(config?.requiredMessageFormat, label) || `${label} is required.` };
11786
11800
  }
11787
11801
  }
11788
11802
  return { valid: true, values };
@@ -11839,7 +11853,7 @@
11839
11853
 
11840
11854
  generateButton.disabled = true;
11841
11855
  card.classList.add('is-generating');
11842
- setTemplateCardStatus(card, 'busy', 'Generating nodes...');
11856
+ setTemplateCardStatus(card, 'busy', card._templateCardConfig?.generatingMessage || 'Generating nodes...');
11843
11857
 
11844
11858
  try {
11845
11859
  const result = await invokeDotNetAsync(
@@ -11849,9 +11863,13 @@
11849
11863
  validation.values || {});
11850
11864
 
11851
11865
  if (result?.success) {
11852
- setTemplateCardStatus(card, 'success', `Generated ${result.generatedCount || 0} nodes below.`);
11866
+ setTemplateCardStatus(
11867
+ card,
11868
+ 'success',
11869
+ formatTemplateCardMessage(card._templateCardConfig?.generatedMessageFormat, result.generatedCount || 0)
11870
+ || `Generated ${result.generatedCount || 0} nodes below.`);
11853
11871
  } else {
11854
- setTemplateCardStatus(card, 'error', result?.message || 'Template generation failed.');
11872
+ setTemplateCardStatus(card, 'error', result?.message || card._templateCardConfig?.generationFailedMessage || 'Template generation failed.');
11855
11873
  }
11856
11874
  } finally {
11857
11875
  card.classList.remove('is-generating');
@@ -11897,7 +11915,7 @@
11897
11915
 
11898
11916
  const titleBlock = document.createElement('div');
11899
11917
  titleBlock.className = 'template-card__title-block';
11900
- titleBlock.appendChild(createTemplateCardText('div', 'template-card__eyebrow', 'Template'));
11918
+ titleBlock.appendChild(createTemplateCardText('div', 'template-card__eyebrow', config.eyebrow));
11901
11919
  titleBlock.appendChild(createTemplateCardText('div', 'template-card__title', config.title));
11902
11920
  if (config.description) {
11903
11921
  titleBlock.appendChild(createTemplateCardText('div', 'template-card__summary', config.description));
@@ -11945,7 +11963,7 @@
11945
11963
  generateButton.className = 'template-card__generate';
11946
11964
  generateButton.dataset.templateCardAction = 'generate';
11947
11965
  generateButton.dataset.templateCardInteractive = 'true';
11948
- generateButton.innerHTML = '<i class="fa-solid fa-layer-group" aria-hidden="true"></i><span>Generate</span>';
11966
+ generateButton.innerHTML = `<i class="fa-solid fa-layer-group" aria-hidden="true"></i><span>${escapeHtml(config.generateLabel)}</span>`;
11949
11967
  footer.appendChild(generateButton);
11950
11968
  shell.appendChild(footer);
11951
11969
 
@@ -19996,6 +20014,43 @@
19996
20014
  return;
19997
20015
  }
19998
20016
 
20017
+ if (contentTypeLower === 'templatelauncher') {
20018
+ el.classList.remove('node-type-memo', 'has-context-source-pins');
20019
+ el.classList.add('node-type-templatelauncher');
20020
+ el.dataset.contentType = 'templateLauncher';
20021
+ el.style.overflow = 'hidden';
20022
+
20023
+ const card = createTemplateLauncherNodeElement(nodeModel);
20024
+ card.id = `css3d-node-${nodeId}`;
20025
+ card.style.display = '';
20026
+ card.style.position = 'absolute';
20027
+ card.style.left = '0px';
20028
+ card.style.top = '0px';
20029
+ card.style.width = `${worldWidth}px`;
20030
+ card.style.height = `${worldHeight}px`;
20031
+ card.style.minWidth = `${worldWidth}px`;
20032
+ card.style.minHeight = `${worldHeight}px`;
20033
+ card.style.maxWidth = `${worldWidth}px`;
20034
+ card.style.maxHeight = `${worldHeight}px`;
20035
+ card.style.transform = `scale(${resolutionScale})`;
20036
+ card.style.transformOrigin = '0 0';
20037
+ card.style.transition = 'none';
20038
+ card.style.webkitTransition = 'none';
20039
+
20040
+ const existingCard = el.querySelector('.map-node-template-card:not(.map-node-remote-fleet)');
20041
+ const firstChild = el.firstElementChild;
20042
+ if (existingCard && existingCard.parentElement === el) {
20043
+ el.replaceChild(card, existingCard);
20044
+ } else if (firstChild) {
20045
+ el.replaceChild(card, firstChild);
20046
+ } else {
20047
+ el.prepend(card);
20048
+ }
20049
+
20050
+ bindTemplateLauncherNodeEvents(card, nodeModel);
20051
+ return;
20052
+ }
20053
+
19999
20054
  if (contentTypeLower === 'memo') {
20000
20055
  const memoEl = el.querySelector('.map-node-memo');
20001
20056
  if (!memoEl) return;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "mainAssemblyName": "MindExecution.Web",
3
3
  "resources": {
4
- "hash": "sha256-DEdKpFPqCw2cggR4vToM2aR3LfgOWp5n21c9JCI4ECg=",
4
+ "hash": "sha256-gFXJ411uc0ulk+btpOhzvPtS1ybBzSCaYlZnHV5Ed3Y=",
5
5
  "fingerprinting": {
6
6
  "Google.Protobuf.9h59ukbel7.dll": "Google.Protobuf.dll",
7
7
  "Markdig.d1j7v41cl1.dll": "Markdig.dll",
@@ -127,12 +127,12 @@
127
127
  "MindExecution.Kernel.mdo1lzjvvp.dll": "MindExecution.Kernel.dll",
128
128
  "MindExecution.Plugins.Admin.5fctwf65dx.dll": "MindExecution.Plugins.Admin.dll",
129
129
  "MindExecution.Plugins.Business.nwivpk9djf.dll": "MindExecution.Plugins.Business.dll",
130
- "MindExecution.Plugins.Concept.534qqcyz9t.dll": "MindExecution.Plugins.Concept.dll",
130
+ "MindExecution.Plugins.Concept.jjjsx1ujjm.dll": "MindExecution.Plugins.Concept.dll",
131
131
  "MindExecution.Plugins.Directory.jnzcrwl049.dll": "MindExecution.Plugins.Directory.dll",
132
- "MindExecution.Plugins.PlanMaster.ai927abc9x.dll": "MindExecution.Plugins.PlanMaster.dll",
133
- "MindExecution.Plugins.YouTube.vzg69kgq5f.dll": "MindExecution.Plugins.YouTube.dll",
134
- "MindExecution.Shared.cb2yfmz6vm.dll": "MindExecution.Shared.dll",
135
- "MindExecution.Web.ntfmnoqoc7.dll": "MindExecution.Web.dll",
132
+ "MindExecution.Plugins.PlanMaster.t6u3gwa6jf.dll": "MindExecution.Plugins.PlanMaster.dll",
133
+ "MindExecution.Plugins.YouTube.hxkc26ek45.dll": "MindExecution.Plugins.YouTube.dll",
134
+ "MindExecution.Shared.k1xor8y53x.dll": "MindExecution.Shared.dll",
135
+ "MindExecution.Web.mvnmxmgslk.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",
@@ -280,16 +280,16 @@
280
280
  "netstandard.yvr3prsx0x.dll": "sha256-EksNn8Luo4bOWqJ6X7dIe9qG9oOqwOVzjH2xYyMNi+E=",
281
281
  "MindExecution.Core.csfu1xtj3l.dll": "sha256-lP9GUQU4xFLsUU4IOwpUjt09mQO5M/bgLAAS8UnjLMs=",
282
282
  "MindExecution.Kernel.mdo1lzjvvp.dll": "sha256-Vj21M+Th5MKfLG5Hvg6/uwlDDdwAJwzeIxfWsK9gYhM=",
283
- "MindExecution.Plugins.Concept.534qqcyz9t.dll": "sha256-MYHcp834CpcpNJOIr/uCfze0F1CSAVKeRMRu0vfBcbs=",
284
- "MindExecution.Plugins.PlanMaster.ai927abc9x.dll": "sha256-ohtNJp7HWpgQ7d7REcjRS+J8zKtpbcQTbUevCl/3I+g=",
285
- "MindExecution.Shared.cb2yfmz6vm.dll": "sha256-OHc+Ko8pUAMG6iO0QBHmQsbkdmEm7TJjGKltwSJ90sc=",
286
- "MindExecution.Web.ntfmnoqoc7.dll": "sha256-m3BiMAPCBvgXbDGC1jUTWkq6L1ymKJDdj6o1OhTTvV0="
283
+ "MindExecution.Plugins.Concept.jjjsx1ujjm.dll": "sha256-71a6ljOewT1EmKYpuEFxFM9a0x6hMnp+Aie5C1ttDTM=",
284
+ "MindExecution.Plugins.PlanMaster.t6u3gwa6jf.dll": "sha256-lWvs4bV97JwegCbbRpWlS4PvNsUmysf+D7M+bpzi/aU=",
285
+ "MindExecution.Shared.k1xor8y53x.dll": "sha256-uMcW3a+gS3HarNky01b9Z4oN5/bGBvKyo/Hml7GUOo8=",
286
+ "MindExecution.Web.mvnmxmgslk.dll": "sha256-ngTT+RqO4VTyzrAcT7Y/zRqTl1uq/PEG99rW1c8mUFs="
287
287
  },
288
288
  "lazyAssembly": {
289
289
  "MindExecution.Plugins.Admin.5fctwf65dx.dll": "sha256-37+Egd35menNv18hEZ64qjiu0x1r+wFOuO5zDiOGfug=",
290
290
  "MindExecution.Plugins.Business.nwivpk9djf.dll": "sha256-iTV0NyCB7fnU+l8brClBd+KYnBDw628yHCwoRrQdTWE=",
291
291
  "MindExecution.Plugins.Directory.jnzcrwl049.dll": "sha256-fwo2q8bt+WNuVUMnJCOcfLAy151cjLZCQa0Z+iKdsRs=",
292
- "MindExecution.Plugins.YouTube.vzg69kgq5f.dll": "sha256-i5QEjpNV1VhwBM9+MHkJOb3I7VKurQIwj5u5RjjmTS8="
292
+ "MindExecution.Plugins.YouTube.hxkc26ek45.dll": "sha256-9e7zzeGpu4AAqyeXGv6KTVx+IEZiz+i6MAANdSiyRoc="
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=20260614-auth-session-bridge-v523" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260614-auth-session-bridge-v523" />
10
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260614-template-language-v525" />
11
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260614-template-language-v525" />
12
12
  <!-- ?쇄뼹??Font Awesome (local) ?쇄뼹??-->
13
13
  <link rel="stylesheet" href="_content/MindExecution.Shared/lib/font-awesome/css/all.min.css" />
14
14
  <!-- ?꿎뼯??-->
@@ -558,7 +558,7 @@
558
558
  }
559
559
 
560
560
  const base = '_content/MindExecution.Shared/js/';
561
- const scriptVersion = '20260614-auth-session-bridge-v523';
561
+ const scriptVersion = '20260614-template-language-v525';
562
562
  const scriptUrl = (script) => `${base}${script}?v=${scriptVersion}`;
563
563
  console.log(`[Script Loader] Shared JS version: ${scriptVersion}`);
564
564
  const criticalScripts = [
@@ -1,5 +1,5 @@
1
1
  self.assetsManifest = {
2
- "version": "MaoYZUwn",
2
+ "version": "7wBYvnwB",
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-7c4d6Olun819rHgdthAFWTuNFTPa5UQWKKbh+pm+y+s=",
89
+ "hash": "sha256-zyFZF5acISTtKzhs2Y2vrhI/4eBB3lAKL6yiuYlV9dk=",
90
90
  "url": "_content/MindExecution.Shared/js/mind-map-css3d-manager.js"
91
91
  },
92
92
  {
@@ -426,28 +426,28 @@
426
426
  "url": "_framework/MindExecution.Plugins.Business.nwivpk9djf.dll"
427
427
  },
428
428
  {
429
- "hash": "sha256-MYHcp834CpcpNJOIr/uCfze0F1CSAVKeRMRu0vfBcbs=",
430
- "url": "_framework/MindExecution.Plugins.Concept.534qqcyz9t.dll"
429
+ "hash": "sha256-71a6ljOewT1EmKYpuEFxFM9a0x6hMnp+Aie5C1ttDTM=",
430
+ "url": "_framework/MindExecution.Plugins.Concept.jjjsx1ujjm.dll"
431
431
  },
432
432
  {
433
433
  "hash": "sha256-fwo2q8bt+WNuVUMnJCOcfLAy151cjLZCQa0Z+iKdsRs=",
434
434
  "url": "_framework/MindExecution.Plugins.Directory.jnzcrwl049.dll"
435
435
  },
436
436
  {
437
- "hash": "sha256-ohtNJp7HWpgQ7d7REcjRS+J8zKtpbcQTbUevCl/3I+g=",
438
- "url": "_framework/MindExecution.Plugins.PlanMaster.ai927abc9x.dll"
437
+ "hash": "sha256-lWvs4bV97JwegCbbRpWlS4PvNsUmysf+D7M+bpzi/aU=",
438
+ "url": "_framework/MindExecution.Plugins.PlanMaster.t6u3gwa6jf.dll"
439
439
  },
440
440
  {
441
- "hash": "sha256-i5QEjpNV1VhwBM9+MHkJOb3I7VKurQIwj5u5RjjmTS8=",
442
- "url": "_framework/MindExecution.Plugins.YouTube.vzg69kgq5f.dll"
441
+ "hash": "sha256-9e7zzeGpu4AAqyeXGv6KTVx+IEZiz+i6MAANdSiyRoc=",
442
+ "url": "_framework/MindExecution.Plugins.YouTube.hxkc26ek45.dll"
443
443
  },
444
444
  {
445
- "hash": "sha256-OHc+Ko8pUAMG6iO0QBHmQsbkdmEm7TJjGKltwSJ90sc=",
446
- "url": "_framework/MindExecution.Shared.cb2yfmz6vm.dll"
445
+ "hash": "sha256-uMcW3a+gS3HarNky01b9Z4oN5/bGBvKyo/Hml7GUOo8=",
446
+ "url": "_framework/MindExecution.Shared.k1xor8y53x.dll"
447
447
  },
448
448
  {
449
- "hash": "sha256-m3BiMAPCBvgXbDGC1jUTWkq6L1ymKJDdj6o1OhTTvV0=",
450
- "url": "_framework/MindExecution.Web.ntfmnoqoc7.dll"
449
+ "hash": "sha256-ngTT+RqO4VTyzrAcT7Y/zRqTl1uq/PEG99rW1c8mUFs=",
450
+ "url": "_framework/MindExecution.Web.mvnmxmgslk.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-C9U0hqL311CdQnDPHbNn7xyO+Hj8osHwet8quJLg0Kk=",
773
+ "hash": "sha256-dlj+wBRal8MJO6G6RwRwWZrZWvu/tZMY93dKAwPr+vY=",
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-Zot1drKyqUZ1W2NObM2fhTWZ812SCh1ua60kqJshoq0=",
837
+ "hash": "sha256-j08hDzbc23Il4jfszavpovgQwdsCFD8mzi8zw6dhN94=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: MaoYZUwn */
1
+ /* Manifest version: 7wBYvnwB */
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