@mindexec/cli 0.2.176 → 0.2.177
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 +1 -1
- package/server.js +74 -14
- package/wwwroot/_framework/MindExecution.Core.y2ui6ei1zp.dll +0 -0
- package/wwwroot/_framework/{MindExecution.Kernel.cmj7iee8oy.dll → MindExecution.Kernel.48nxdn0o27.dll} +0 -0
- package/wwwroot/_framework/MindExecution.Plugins.Admin.kylq0fxv8c.dll +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Business.a3bmsg1dnh.dll → MindExecution.Plugins.Business.cuw84oaz3q.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Concept.f3d7tsclst.dll → MindExecution.Plugins.Concept.u70zp9qbvo.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Directory.m7ysyihlbt.dll → MindExecution.Plugins.Directory.fy4gkll08b.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.PlanMaster.mww9fvjh3i.dll → MindExecution.Plugins.PlanMaster.cbsobbckk1.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.YouTube.u159gfop7k.dll → MindExecution.Plugins.YouTube.vlwj5eytol.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Shared.3jnqi404jm.dll → MindExecution.Shared.bi3agtnwsf.dll} +0 -0
- package/wwwroot/_framework/MindExecution.Web.nev8fm9057.dll +0 -0
- package/wwwroot/_framework/blazor.boot.json +21 -21
- package/wwwroot/index.html +55 -55
- package/wwwroot/service-worker-assets.js +23 -23
- package/wwwroot/service-worker.js +1 -1
- package/wwwroot/_framework/MindExecution.Core.2ftvuvqu67.dll +0 -0
- package/wwwroot/_framework/MindExecution.Plugins.Admin.5yrzrhtmmm.dll +0 -0
- package/wwwroot/_framework/MindExecution.Web.5n9ivfb5ug.dll +0 -0
package/package.json
CHANGED
package/server.js
CHANGED
|
@@ -3382,6 +3382,9 @@ const REMOTE_HOST_TARGET_RENEW_MS = Math.max(
|
|
|
3382
3382
|
Number(process.env.MINDEXEC_REMOTE_HOST_TARGET_RENEW_MS || 25000) || 25000));
|
|
3383
3383
|
const REMOTE_HOST_TARGET_RENEW_LOG_REPEAT_MS = 60000;
|
|
3384
3384
|
const REMOTE_HOST_TARGET_WAKE_RENEW_MS = Math.max(3000, Number(process.env.MINDEXEC_REMOTE_HOST_TARGET_WAKE_RENEW_MS || 5000) || 5000);
|
|
3385
|
+
const REMOTE_HOST_TARGET_EXPIRED_REVIVE_MS = Math.max(
|
|
3386
|
+
REMOTE_HOST_TARGET_LEASE_MS * 2,
|
|
3387
|
+
Number(process.env.MINDEXEC_REMOTE_HOST_TARGET_EXPIRED_REVIVE_MS || (12 * 60 * 60 * 1000)) || (12 * 60 * 60 * 1000));
|
|
3385
3388
|
const REMOTE_SYSTEM_RESUME_CHECK_MS = Math.max(1000, Number(process.env.MINDEXEC_REMOTE_RESUME_CHECK_MS || 5000) || 5000);
|
|
3386
3389
|
const REMOTE_SYSTEM_RESUME_DRIFT_MS = Math.max(
|
|
3387
3390
|
REMOTE_SYSTEM_RESUME_CHECK_MS + 5000,
|
|
@@ -5882,6 +5885,32 @@ function stopRemoteHostTargetRenew(reason = 'stopped') {
|
|
|
5882
5885
|
});
|
|
5883
5886
|
}
|
|
5884
5887
|
|
|
5888
|
+
function getRecoverableRemoteHostTargetNodeId(reason = 'renew') {
|
|
5889
|
+
const nodeId = safeRemoteAgentField(remoteHostTargetRenewState.nodeId, 128);
|
|
5890
|
+
if (!nodeId) {
|
|
5891
|
+
return '';
|
|
5892
|
+
}
|
|
5893
|
+
|
|
5894
|
+
const stateReason = String(remoteHostTargetRenewState.reason || '').trim().toLowerCase();
|
|
5895
|
+
if (/^(host-target-cleared|host-target-inactive|host-target-superseded|local-host-superseded|bridge-shutdown|disabled)$/i.test(stateReason)) {
|
|
5896
|
+
return '';
|
|
5897
|
+
}
|
|
5898
|
+
|
|
5899
|
+
const lastSuccessMs = Date.parse(remoteHostTargetRenewState.lastSuccessAt || '') || 0;
|
|
5900
|
+
const lastAttemptMs = Date.parse(remoteHostTargetRenewState.lastAttemptAt || '') || 0;
|
|
5901
|
+
const expiresMs = Date.parse(remoteHostTargetRenewState.expiresAt || '') || 0;
|
|
5902
|
+
const anchorMs = Math.max(lastSuccessMs, lastAttemptMs, expiresMs);
|
|
5903
|
+
if (!anchorMs || Date.now() - anchorMs > REMOTE_HOST_TARGET_EXPIRED_REVIVE_MS) {
|
|
5904
|
+
return '';
|
|
5905
|
+
}
|
|
5906
|
+
|
|
5907
|
+
logEvent(
|
|
5908
|
+
'remote',
|
|
5909
|
+
`host target revive candidate ${formatKeyValue('reason', reason)} ${formatKeyValue('node', nodeId)}`,
|
|
5910
|
+
'remote');
|
|
5911
|
+
return nodeId;
|
|
5912
|
+
}
|
|
5913
|
+
|
|
5885
5914
|
function disconnectRemoteHubDevicesForResume(reason = 'system-resume') {
|
|
5886
5915
|
const devices = remoteHub.listDevices();
|
|
5887
5916
|
let disconnected = 0;
|
|
@@ -5907,6 +5936,8 @@ async function reconcileRemoteAfterSystemResume(trigger = 'timer-drift', driftMs
|
|
|
5907
5936
|
try {
|
|
5908
5937
|
const localHub = remoteHub.getStatus({ includeSecrets: true });
|
|
5909
5938
|
const isLocalHost = localHub?.hostTargetActive === true && !!localHub.hostTargetNodeId;
|
|
5939
|
+
const recoverableHostNodeId = isLocalHost ? '' : getRecoverableRemoteHostTargetNodeId('system-resume');
|
|
5940
|
+
const shouldRenewLocalHost = isLocalHost || !!recoverableHostNodeId;
|
|
5910
5941
|
const wasRegistryAgentRunning = isRemoteAgentRegistryOwned();
|
|
5911
5942
|
const disconnectedDevices = isLocalHost
|
|
5912
5943
|
? disconnectRemoteHubDevicesForResume('system-resume')
|
|
@@ -5919,14 +5950,14 @@ async function reconcileRemoteAfterSystemResume(trigger = 'timer-drift', driftMs
|
|
|
5919
5950
|
lastDetectedAt: new Date().toISOString(),
|
|
5920
5951
|
lastError: '',
|
|
5921
5952
|
driftMs: Math.round(Number(driftMs) || 0),
|
|
5922
|
-
localHost:
|
|
5953
|
+
localHost: shouldRenewLocalHost,
|
|
5923
5954
|
registryAgentRestarted: wasRegistryAgentRunning,
|
|
5924
5955
|
disconnectedDevices
|
|
5925
5956
|
});
|
|
5926
5957
|
|
|
5927
5958
|
logEvent(
|
|
5928
5959
|
'remote',
|
|
5929
|
-
`system resume detected ${formatKeyValue('trigger', trigger)} ${formatKeyValue('driftMs', Math.round(Number(driftMs) || 0))} ${formatKeyValue('host',
|
|
5960
|
+
`system resume detected ${formatKeyValue('trigger', trigger)} ${formatKeyValue('driftMs', Math.round(Number(driftMs) || 0))} ${formatKeyValue('host', shouldRenewLocalHost ? 'yes' : 'no')} ${formatKeyValue('agent', wasRegistryAgentRunning ? 'registry' : '-')}`,
|
|
5930
5961
|
'remote');
|
|
5931
5962
|
|
|
5932
5963
|
closeRemoteRegistryRealtime('system-resume');
|
|
@@ -5935,16 +5966,16 @@ async function reconcileRemoteAfterSystemResume(trigger = 'timer-drift', driftMs
|
|
|
5935
5966
|
await stopRemoteAgentConnection('system-resume-reconnect', { suppressRetry: false });
|
|
5936
5967
|
}
|
|
5937
5968
|
|
|
5938
|
-
if (
|
|
5969
|
+
if (shouldRenewLocalHost) {
|
|
5939
5970
|
updateRemoteHostTargetRenewState({
|
|
5940
5971
|
status: 'waking',
|
|
5941
5972
|
reason: 'system-resume',
|
|
5942
|
-
nodeId: localHub.hostTargetNodeId,
|
|
5943
|
-
leaseId: localHub.hostTargetLeaseId,
|
|
5944
|
-
hostInstanceId: localHub.hostTargetHostInstanceId || localHub.hostInstanceId,
|
|
5945
|
-
endpoint: localHub.hostTargetEndpoint,
|
|
5946
|
-
endpointCandidates: localHub.hostTargetEndpointCandidates || [],
|
|
5947
|
-
expiresAt: localHub.hostTargetExpiresAt,
|
|
5973
|
+
nodeId: localHub.hostTargetNodeId || recoverableHostNodeId,
|
|
5974
|
+
leaseId: localHub.hostTargetLeaseId || remoteHostTargetRenewState.leaseId,
|
|
5975
|
+
hostInstanceId: localHub.hostTargetHostInstanceId || localHub.hostInstanceId || remoteHostTargetRenewState.hostInstanceId,
|
|
5976
|
+
endpoint: localHub.hostTargetEndpoint || remoteHostTargetRenewState.endpoint,
|
|
5977
|
+
endpointCandidates: localHub.hostTargetEndpointCandidates || remoteHostTargetRenewState.endpointCandidates || [],
|
|
5978
|
+
expiresAt: localHub.hostTargetExpiresAt || remoteHostTargetRenewState.expiresAt,
|
|
5948
5979
|
lastError: ''
|
|
5949
5980
|
});
|
|
5950
5981
|
await runRemoteHostTargetRenewOnce('system-resume', { takeover: false });
|
|
@@ -5968,7 +5999,7 @@ async function reconcileRemoteAfterSystemResume(trigger = 'timer-drift', driftMs
|
|
|
5968
5999
|
emitBridgeEvent('RemoteSystemResumeReconciled', {
|
|
5969
6000
|
trigger,
|
|
5970
6001
|
driftMs: Math.round(Number(driftMs) || 0),
|
|
5971
|
-
localHost:
|
|
6002
|
+
localHost: shouldRenewLocalHost,
|
|
5972
6003
|
registryAgentRestarted: wasRegistryAgentRunning,
|
|
5973
6004
|
disconnectedDevices
|
|
5974
6005
|
});
|
|
@@ -6031,20 +6062,49 @@ async function runRemoteHostTargetRenewOnce(trigger = 'timer', options = {}) {
|
|
|
6031
6062
|
try {
|
|
6032
6063
|
const currentHub = remoteHub.getStatus({ includeSecrets: true });
|
|
6033
6064
|
if (currentHub?.hostTargetActive !== true || !currentHub.hostTargetNodeId) {
|
|
6034
|
-
|
|
6035
|
-
|
|
6065
|
+
const recoverableNodeId = getRecoverableRemoteHostTargetNodeId(trigger);
|
|
6066
|
+
if (!recoverableNodeId) {
|
|
6067
|
+
stopRemoteHostTargetRenew('no-local-host-target');
|
|
6068
|
+
return serializeRemoteHostTargetRenewState();
|
|
6069
|
+
}
|
|
6070
|
+
|
|
6071
|
+
updateRemoteHostTargetRenewState({
|
|
6072
|
+
status: 'reviving',
|
|
6073
|
+
reason: 'expired-local-host-target',
|
|
6074
|
+
nodeId: recoverableNodeId,
|
|
6075
|
+
lastAttemptAt: attemptedAt,
|
|
6076
|
+
lastError: ''
|
|
6077
|
+
});
|
|
6078
|
+
logRemoteHostTargetRenew('reviving', 'expired-local-host-target', remoteHostTargetRenewState.endpoint);
|
|
6079
|
+
const revived = remoteHub.setHostTarget({
|
|
6080
|
+
enabled: true,
|
|
6081
|
+
nodeId: recoverableNodeId,
|
|
6082
|
+
leaseMs: REMOTE_HOST_TARGET_LEASE_MS
|
|
6083
|
+
});
|
|
6084
|
+
if (revived?.ok !== true || revived?.active !== true) {
|
|
6085
|
+
updateRemoteHostTargetRenewState({
|
|
6086
|
+
status: 'error',
|
|
6087
|
+
reason: revived?.error || 'expired-local-host-revive-failed',
|
|
6088
|
+
nodeId: recoverableNodeId,
|
|
6089
|
+
lastAttemptAt: attemptedAt,
|
|
6090
|
+
lastError: revived?.error || 'expired-local-host-revive-failed'
|
|
6091
|
+
});
|
|
6092
|
+
scheduleRemoteHostTargetRenew(REMOTE_REGISTRY_FOLLOWER_FAST_RETRY_MS, 'revive-failed');
|
|
6093
|
+
return serializeRemoteHostTargetRenewState();
|
|
6094
|
+
}
|
|
6036
6095
|
}
|
|
6037
6096
|
|
|
6097
|
+
const hostStatus = remoteHub.getStatus({ includeSecrets: true });
|
|
6038
6098
|
const renewed = remoteHub.setHostTarget({
|
|
6039
6099
|
enabled: true,
|
|
6040
|
-
nodeId:
|
|
6100
|
+
nodeId: hostStatus.hostTargetNodeId,
|
|
6041
6101
|
leaseMs: REMOTE_HOST_TARGET_LEASE_MS
|
|
6042
6102
|
});
|
|
6043
6103
|
if (renewed?.ok !== true || renewed?.active !== true) {
|
|
6044
6104
|
updateRemoteHostTargetRenewState({
|
|
6045
6105
|
status: 'error',
|
|
6046
6106
|
reason: renewed?.error || 'local-host-renew-failed',
|
|
6047
|
-
nodeId:
|
|
6107
|
+
nodeId: hostStatus.hostTargetNodeId,
|
|
6048
6108
|
lastAttemptAt: attemptedAt,
|
|
6049
6109
|
lastError: renewed?.error || 'local-host-renew-failed'
|
|
6050
6110
|
});
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mainAssemblyName": "MindExecution.Web",
|
|
3
3
|
"resources": {
|
|
4
|
-
"hash": "sha256-
|
|
4
|
+
"hash": "sha256-J42cMyhEPDUI5FMrpZaxLnKM8dAvsG124jdCZIbo40o=",
|
|
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.
|
|
127
|
-
"MindExecution.Kernel.
|
|
128
|
-
"MindExecution.Plugins.Admin.
|
|
129
|
-
"MindExecution.Plugins.Business.
|
|
130
|
-
"MindExecution.Plugins.Concept.
|
|
131
|
-
"MindExecution.Plugins.Directory.
|
|
132
|
-
"MindExecution.Plugins.PlanMaster.
|
|
133
|
-
"MindExecution.Plugins.YouTube.
|
|
134
|
-
"MindExecution.Shared.
|
|
135
|
-
"MindExecution.Web.
|
|
126
|
+
"MindExecution.Core.y2ui6ei1zp.dll": "MindExecution.Core.dll",
|
|
127
|
+
"MindExecution.Kernel.48nxdn0o27.dll": "MindExecution.Kernel.dll",
|
|
128
|
+
"MindExecution.Plugins.Admin.kylq0fxv8c.dll": "MindExecution.Plugins.Admin.dll",
|
|
129
|
+
"MindExecution.Plugins.Business.cuw84oaz3q.dll": "MindExecution.Plugins.Business.dll",
|
|
130
|
+
"MindExecution.Plugins.Concept.u70zp9qbvo.dll": "MindExecution.Plugins.Concept.dll",
|
|
131
|
+
"MindExecution.Plugins.Directory.fy4gkll08b.dll": "MindExecution.Plugins.Directory.dll",
|
|
132
|
+
"MindExecution.Plugins.PlanMaster.cbsobbckk1.dll": "MindExecution.Plugins.PlanMaster.dll",
|
|
133
|
+
"MindExecution.Plugins.YouTube.vlwj5eytol.dll": "MindExecution.Plugins.YouTube.dll",
|
|
134
|
+
"MindExecution.Shared.bi3agtnwsf.dll": "MindExecution.Shared.dll",
|
|
135
|
+
"MindExecution.Web.nev8fm9057.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.
|
|
282
|
-
"MindExecution.Kernel.
|
|
283
|
-
"MindExecution.Plugins.Business.
|
|
284
|
-
"MindExecution.Plugins.Concept.
|
|
285
|
-
"MindExecution.Plugins.PlanMaster.
|
|
286
|
-
"MindExecution.Shared.
|
|
287
|
-
"MindExecution.Web.
|
|
281
|
+
"MindExecution.Core.y2ui6ei1zp.dll": "sha256-NnnP6h5xkSHjajgJ4B7IkMS/JYM03vzr+7Yc0jZdS60=",
|
|
282
|
+
"MindExecution.Kernel.48nxdn0o27.dll": "sha256-LCMiilpVJwnGj5g7tZgvDhrsAe99THu52bOhpDgF7nA=",
|
|
283
|
+
"MindExecution.Plugins.Business.cuw84oaz3q.dll": "sha256-vGMvEiUSNaG7Ct1Av7BHo87QEibrshiN5Y1/YvbTnhs=",
|
|
284
|
+
"MindExecution.Plugins.Concept.u70zp9qbvo.dll": "sha256-2shsnRsIbEhl8nk8mJIzUgV/oXmvxNKoe/xcxaZ3s0c=",
|
|
285
|
+
"MindExecution.Plugins.PlanMaster.cbsobbckk1.dll": "sha256-WFyqQ9i6a7lHkp1gJEF8/ZYcRaGkqf64FmlLPD3AJZ8=",
|
|
286
|
+
"MindExecution.Shared.bi3agtnwsf.dll": "sha256-vbsv8/SRhBHipHJYwc1X4lnat8FSgTR2OIP+Nfdx/4Q=",
|
|
287
|
+
"MindExecution.Web.nev8fm9057.dll": "sha256-AZhG5e+nE5LC2BKQHBTDdqUUdHddruUQp4hR/WvOKUo="
|
|
288
288
|
},
|
|
289
289
|
"lazyAssembly": {
|
|
290
|
-
"MindExecution.Plugins.Admin.
|
|
291
|
-
"MindExecution.Plugins.Directory.
|
|
292
|
-
"MindExecution.Plugins.YouTube.
|
|
290
|
+
"MindExecution.Plugins.Admin.kylq0fxv8c.dll": "sha256-VKLartecp6S319WtR/dhvYXB4gCAkjaYx/mnIYe2VmY=",
|
|
291
|
+
"MindExecution.Plugins.Directory.fy4gkll08b.dll": "sha256-F9XrCtJY1RA/29pTV8bUURp/Ak1q/XJ739eFXJfVHwo=",
|
|
292
|
+
"MindExecution.Plugins.YouTube.vlwj5eytol.dll": "sha256-06gMhnZ17M8Hsao/Tyc7+iSn/dD2T1K1i2y03WLkGoI="
|
|
293
293
|
}
|
|
294
294
|
},
|
|
295
295
|
"cacheBootResources": true,
|
package/wwwroot/index.html
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
<!DOCTYPE html>
|
|
2
2
|
<html lang="en">
|
|
3
3
|
|
|
4
4
|
<head>
|
|
5
5
|
<meta charset="utf-8" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
-
<title>MindExec | Business Execution OS for solo builders</title>
|
|
8
|
-
<meta name="description" content="MindExec is an AI business execution OS for solo builders who want to turn notes, research, assets, and repeatable execution Skills into revenue-producing work." />
|
|
9
|
-
<base href="/" />
|
|
10
|
-
<link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260617-
|
|
11
|
-
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260617-
|
|
12
|
-
<!--
|
|
7
|
+
<title>MindExec | Business Execution OS for solo builders</title>
|
|
8
|
+
<meta name="description" content="MindExec is an AI business execution OS for solo builders who want to turn notes, research, assets, and repeatable execution Skills into revenue-producing work." />
|
|
9
|
+
<base href="/" />
|
|
10
|
+
<link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260617-smart-managed-margin-v606" />
|
|
11
|
+
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260617-smart-managed-margin-v606" />
|
|
12
|
+
<!-- ?�▼??Font Awesome (local) ?�▼??-->
|
|
13
13
|
<link rel="stylesheet" href="_content/MindExecution.Shared/lib/font-awesome/css/all.min.css" />
|
|
14
|
-
<!--
|
|
14
|
+
<!-- ?�▲??-->
|
|
15
15
|
<style>
|
|
16
16
|
#app {
|
|
17
17
|
min-height: 100vh;
|
|
@@ -95,10 +95,10 @@
|
|
|
95
95
|
<div id="app-container">
|
|
96
96
|
<div id="app">
|
|
97
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>Turn ideas into revenue execution. MindExec is a Business Execution OS that moves serious work into MindCanvas, where context, AI Tasks, execution Skills, media, and results stay connected.</p>
|
|
101
|
-
<p><a href="/mindcanvas">Open MindCanvas</a> | <a href="/pricing">See pricing</a> | <a href="/tools">Browse free tools</a></p>
|
|
98
|
+
<div class="app-static-fallback__eyebrow">MindExec</div>
|
|
99
|
+
<h1>MindExec</h1>
|
|
100
|
+
<p>Turn ideas into revenue execution. MindExec is a Business Execution OS that moves serious work into MindCanvas, where context, AI Tasks, execution Skills, media, and results stay connected.</p>
|
|
101
|
+
<p><a href="/mindcanvas">Open MindCanvas</a> | <a href="/pricing">See pricing</a> | <a href="/tools">Browse free tools</a></p>
|
|
102
102
|
<noscript>
|
|
103
103
|
<p>JavaScript is required for the interactive tool experience.</p>
|
|
104
104
|
</noscript>
|
|
@@ -180,7 +180,7 @@
|
|
|
180
180
|
function adjustTextareaHeight(element) {
|
|
181
181
|
if (!element) return;
|
|
182
182
|
|
|
183
|
-
//
|
|
183
|
+
// ?�▼??[Change] Add jitter-prevention logic ?�▼??
|
|
184
184
|
// Compare the previous text length. When content grows, skip the 'auto' reset.
|
|
185
185
|
// Only reset to 'auto' when shrinking (during deletion).
|
|
186
186
|
const currentLength = element.value.length;
|
|
@@ -191,7 +191,7 @@
|
|
|
191
191
|
}
|
|
192
192
|
|
|
193
193
|
element.dataset.prevLength = currentLength; // store current length
|
|
194
|
-
//
|
|
194
|
+
// ?�▲??[Change] ?�▲??
|
|
195
195
|
|
|
196
196
|
const computedStyles = window.getComputedStyle(element);
|
|
197
197
|
const lineHeight = parseFloat(computedStyles.lineHeight || '24') || 24;
|
|
@@ -225,39 +225,39 @@
|
|
|
225
225
|
element.removeEventListener('keydown', element.__mindexecEnterHandler);
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
-
const handleKeyDown = (e) => {
|
|
229
|
-
if (e.key === 'Enter') {
|
|
230
|
-
if (e.shiftKey) {
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
if (e.repeat || e.isComposing || e.keyCode === 229) {
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
e.preventDefault();
|
|
239
|
-
const now = performance.now();
|
|
240
|
-
if (element.__mindexecLastEnterAt && now - element.__mindexecLastEnterAt < 650) {
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
const promptSnapshot = element.value || '';
|
|
245
|
-
if (!promptSnapshot.trim()) {
|
|
246
|
-
return;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
element.__mindexecLastEnterAt = now;
|
|
250
|
-
const submitId = `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
|
|
251
|
-
element.value = '';
|
|
252
|
-
element.dispatchEvent(new Event('input', { bubbles: true }));
|
|
253
|
-
resetTextareaHeight(element);
|
|
254
|
-
|
|
255
|
-
if (dotNetRef && dotNetRef.invokeMethodAsync) {
|
|
256
|
-
dotNetRef.invokeMethodAsync('OnGlobalInputEnterPressed', promptSnapshot, submitId)
|
|
257
|
-
.catch((err) => console.warn('[GlobalInput] Enter submit failed:', err));
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
};
|
|
228
|
+
const handleKeyDown = (e) => {
|
|
229
|
+
if (e.key === 'Enter') {
|
|
230
|
+
if (e.shiftKey) {
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
if (e.repeat || e.isComposing || e.keyCode === 229) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
e.preventDefault();
|
|
239
|
+
const now = performance.now();
|
|
240
|
+
if (element.__mindexecLastEnterAt && now - element.__mindexecLastEnterAt < 650) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
const promptSnapshot = element.value || '';
|
|
245
|
+
if (!promptSnapshot.trim()) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
element.__mindexecLastEnterAt = now;
|
|
250
|
+
const submitId = `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
|
|
251
|
+
element.value = '';
|
|
252
|
+
element.dispatchEvent(new Event('input', { bubbles: true }));
|
|
253
|
+
resetTextareaHeight(element);
|
|
254
|
+
|
|
255
|
+
if (dotNetRef && dotNetRef.invokeMethodAsync) {
|
|
256
|
+
dotNetRef.invokeMethodAsync('OnGlobalInputEnterPressed', promptSnapshot, submitId)
|
|
257
|
+
.catch((err) => console.warn('[GlobalInput] Enter submit failed:', err));
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
261
|
|
|
262
262
|
element.__mindexecEnterHandler = handleKeyDown;
|
|
263
263
|
element.addEventListener('keydown', handleKeyDown);
|
|
@@ -284,11 +284,11 @@
|
|
|
284
284
|
// Prevent default page-level DnD behavior
|
|
285
285
|
document.addEventListener('dragover', (e) => {
|
|
286
286
|
e.preventDefault();
|
|
287
|
-
//
|
|
287
|
+
// ?�▼??[Change] Remove/avoid stopPropagation (do not disrupt event flow) ?�▼??
|
|
288
288
|
// e.stopPropagation();
|
|
289
|
-
//
|
|
289
|
+
// ?�▲??[Change] ?�▲??
|
|
290
290
|
|
|
291
|
-
//
|
|
291
|
+
// ?�▼??[Change] Default is 'none', but only apply when not handled by children ?�▼??
|
|
292
292
|
// (If MindMapDnD handles it, this code won't run or will be ignored)
|
|
293
293
|
// e.dataTransfer.dropEffect = 'none';
|
|
294
294
|
}, false);
|
|
@@ -428,7 +428,7 @@
|
|
|
428
428
|
window.__matchesMarketingToolHost(host, location.host || '')
|
|
429
429
|
);
|
|
430
430
|
</script>
|
|
431
|
-
<!--
|
|
431
|
+
<!-- ?�▼??[Upgrade] Three.js r168 via ESM ?�▼??-->
|
|
432
432
|
<script type="importmap">
|
|
433
433
|
{
|
|
434
434
|
"imports": {
|
|
@@ -579,7 +579,7 @@
|
|
|
579
579
|
}
|
|
580
580
|
|
|
581
581
|
const base = '_content/MindExecution.Shared/js/';
|
|
582
|
-
const scriptVersion = '20260617-
|
|
582
|
+
const scriptVersion = '20260617-smart-managed-margin-v606';
|
|
583
583
|
const scriptUrl = (script) => `${base}${script}?v=${scriptVersion}`;
|
|
584
584
|
console.log(`[Script Loader] Shared JS version: ${scriptVersion}`);
|
|
585
585
|
const criticalScripts = [
|
|
@@ -590,7 +590,7 @@
|
|
|
590
590
|
'background-themes.js',
|
|
591
591
|
'mind-map-logic-workers.js',
|
|
592
592
|
// Troika removed
|
|
593
|
-
'texture-worker-manager.js', // ??Web Worker
|
|
593
|
+
'texture-worker-manager.js', // ??Web Worker ?�스�??�성
|
|
594
594
|
'mind-map-texture-factory.js',
|
|
595
595
|
'mind-map-glow-shader.js', // ??SDF Glow (no textures, GPU only)
|
|
596
596
|
'mind-map-css3d-manager.js',
|
|
@@ -603,7 +603,7 @@
|
|
|
603
603
|
'mind-map-interactions.js',
|
|
604
604
|
'mind-map-dnd.js',
|
|
605
605
|
'mind-map-lod-renderer.js',
|
|
606
|
-
'mind-map-text-lod-system.js', // ??Text LOD
|
|
606
|
+
'mind-map-text-lod-system.js', // ??Text LOD ?�스??(?�적 ?�스�??�질)
|
|
607
607
|
'mind-map-core.js',
|
|
608
608
|
'mindmap-toolbar.js',
|
|
609
609
|
'token-manager.js',
|
|
@@ -722,7 +722,7 @@
|
|
|
722
722
|
window.showBlazorBootError('The page could not finish loading. Reload and try again.');
|
|
723
723
|
});
|
|
724
724
|
</script>
|
|
725
|
-
<!--
|
|
725
|
+
<!-- ?�▲??[Upgrade] ?�▲??-->
|
|
726
726
|
</body>
|
|
727
727
|
|
|
728
728
|
</html>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
self.assetsManifest = {
|
|
2
|
-
"version": "
|
|
2
|
+
"version": "TyBXbpiz",
|
|
3
3
|
"assets": [
|
|
4
4
|
{
|
|
5
5
|
"hash": "sha256-+CSYMcqLNTsq3VnH11jgYyOCCdxvHzL74CBmo4sCmMU=",
|
|
@@ -410,44 +410,44 @@
|
|
|
410
410
|
"url": "_framework/MimeMapping.og9ys58ylm.dll"
|
|
411
411
|
},
|
|
412
412
|
{
|
|
413
|
-
"hash": "sha256-
|
|
414
|
-
"url": "_framework/MindExecution.Core.
|
|
413
|
+
"hash": "sha256-NnnP6h5xkSHjajgJ4B7IkMS/JYM03vzr+7Yc0jZdS60=",
|
|
414
|
+
"url": "_framework/MindExecution.Core.y2ui6ei1zp.dll"
|
|
415
415
|
},
|
|
416
416
|
{
|
|
417
|
-
"hash": "sha256-
|
|
418
|
-
"url": "_framework/MindExecution.Kernel.
|
|
417
|
+
"hash": "sha256-LCMiilpVJwnGj5g7tZgvDhrsAe99THu52bOhpDgF7nA=",
|
|
418
|
+
"url": "_framework/MindExecution.Kernel.48nxdn0o27.dll"
|
|
419
419
|
},
|
|
420
420
|
{
|
|
421
|
-
"hash": "sha256-
|
|
422
|
-
"url": "_framework/MindExecution.Plugins.Admin.
|
|
421
|
+
"hash": "sha256-VKLartecp6S319WtR/dhvYXB4gCAkjaYx/mnIYe2VmY=",
|
|
422
|
+
"url": "_framework/MindExecution.Plugins.Admin.kylq0fxv8c.dll"
|
|
423
423
|
},
|
|
424
424
|
{
|
|
425
|
-
"hash": "sha256-
|
|
426
|
-
"url": "_framework/MindExecution.Plugins.Business.
|
|
425
|
+
"hash": "sha256-vGMvEiUSNaG7Ct1Av7BHo87QEibrshiN5Y1/YvbTnhs=",
|
|
426
|
+
"url": "_framework/MindExecution.Plugins.Business.cuw84oaz3q.dll"
|
|
427
427
|
},
|
|
428
428
|
{
|
|
429
|
-
"hash": "sha256-
|
|
430
|
-
"url": "_framework/MindExecution.Plugins.Concept.
|
|
429
|
+
"hash": "sha256-2shsnRsIbEhl8nk8mJIzUgV/oXmvxNKoe/xcxaZ3s0c=",
|
|
430
|
+
"url": "_framework/MindExecution.Plugins.Concept.u70zp9qbvo.dll"
|
|
431
431
|
},
|
|
432
432
|
{
|
|
433
|
-
"hash": "sha256-
|
|
434
|
-
"url": "_framework/MindExecution.Plugins.Directory.
|
|
433
|
+
"hash": "sha256-F9XrCtJY1RA/29pTV8bUURp/Ak1q/XJ739eFXJfVHwo=",
|
|
434
|
+
"url": "_framework/MindExecution.Plugins.Directory.fy4gkll08b.dll"
|
|
435
435
|
},
|
|
436
436
|
{
|
|
437
|
-
"hash": "sha256-
|
|
438
|
-
"url": "_framework/MindExecution.Plugins.PlanMaster.
|
|
437
|
+
"hash": "sha256-WFyqQ9i6a7lHkp1gJEF8/ZYcRaGkqf64FmlLPD3AJZ8=",
|
|
438
|
+
"url": "_framework/MindExecution.Plugins.PlanMaster.cbsobbckk1.dll"
|
|
439
439
|
},
|
|
440
440
|
{
|
|
441
|
-
"hash": "sha256-
|
|
442
|
-
"url": "_framework/MindExecution.Plugins.YouTube.
|
|
441
|
+
"hash": "sha256-06gMhnZ17M8Hsao/Tyc7+iSn/dD2T1K1i2y03WLkGoI=",
|
|
442
|
+
"url": "_framework/MindExecution.Plugins.YouTube.vlwj5eytol.dll"
|
|
443
443
|
},
|
|
444
444
|
{
|
|
445
|
-
"hash": "sha256-
|
|
446
|
-
"url": "_framework/MindExecution.Shared.
|
|
445
|
+
"hash": "sha256-vbsv8/SRhBHipHJYwc1X4lnat8FSgTR2OIP+Nfdx/4Q=",
|
|
446
|
+
"url": "_framework/MindExecution.Shared.bi3agtnwsf.dll"
|
|
447
447
|
},
|
|
448
448
|
{
|
|
449
|
-
"hash": "sha256-
|
|
450
|
-
"url": "_framework/MindExecution.Web.
|
|
449
|
+
"hash": "sha256-AZhG5e+nE5LC2BKQHBTDdqUUdHddruUQp4hR/WvOKUo=",
|
|
450
|
+
"url": "_framework/MindExecution.Web.nev8fm9057.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-
|
|
773
|
+
"hash": "sha256-VzTy0MB++MzxH8769g4kft9KyFol6O8mnCgOtY9xtn0=",
|
|
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-
|
|
837
|
+
"hash": "sha256-zsAmcmUA5PZaoEXBiRqzPPmopDpFc+Hkz2Lq+vMpk3U=",
|
|
838
838
|
"url": "index.html"
|
|
839
839
|
},
|
|
840
840
|
{
|
|
Binary file
|
|
Binary file
|
|
Binary file
|