helixmind 0.2.26 → 0.2.27
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/cli/brain/template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/cli/brain/template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAimE3D"}
|
|
@@ -593,19 +593,144 @@ const EDGE_COLORS = {
|
|
|
593
593
|
belongs_to: '#ff6600', part_of: '#ff6600', supersedes: '#ff4444',
|
|
594
594
|
default: '#334466',
|
|
595
595
|
};
|
|
596
|
-
//
|
|
597
|
-
//
|
|
598
|
-
//
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
6: { iR: 40, oR: 470, yBase: -560, yS: 110, size: 34, pulse: 0.8, activity: 0.75, cx: 40, cz: -30 },
|
|
596
|
+
// V6: Galaxy Brain — Force-directed 3D graph like a neural galaxy
|
|
597
|
+
// Nodes positioned by connections (force layout), not by layer planes
|
|
598
|
+
// Render style per level (size, pulse, activity) but NO spatial separation
|
|
599
|
+
const LEVEL_STYLE = {
|
|
600
|
+
1: { size: 14, pulse: 2.0, activity: 1.0 },
|
|
601
|
+
2: { size: 13, pulse: 1.5, activity: 0.85 },
|
|
602
|
+
3: { size: 11, pulse: 1.0, activity: 0.7 },
|
|
603
|
+
4: { size: 10, pulse: 0.6, activity: 0.5 },
|
|
604
|
+
5: { size: 9, pulse: 0.3, activity: 0.3 },
|
|
605
|
+
6: { size: 12, pulse: 0.8, activity: 0.7 },
|
|
607
606
|
};
|
|
608
|
-
const MAX_RENDERED_EDGES =
|
|
607
|
+
const MAX_RENDERED_EDGES = 12000; // more edges visible in galaxy layout
|
|
608
|
+
|
|
609
|
+
// Force-directed layout: positions nodes based on their connections
|
|
610
|
+
function computeForceLayout(nodeList, edgeList, nodeIdxMapLocal) {
|
|
611
|
+
const N = nodeList.length;
|
|
612
|
+
if (N === 0) return [];
|
|
613
|
+
|
|
614
|
+
const pos = new Array(N);
|
|
615
|
+
// Initialize positions in a sphere with level-based shells
|
|
616
|
+
for (let i = 0; i < N; i++) {
|
|
617
|
+
const lv = nodeList[i].level || 3;
|
|
618
|
+
// L1-L5: inner to outer, L6: outer orbit
|
|
619
|
+
const shell = lv === 6 ? 1.1 : (lv * 0.18 + 0.1);
|
|
620
|
+
const R = 200 * shell;
|
|
621
|
+
// Golden angle spiral for even distribution
|
|
622
|
+
const golden = 2.399963; // Math.PI * (3 - Math.sqrt(5))
|
|
623
|
+
const theta = golden * i;
|
|
624
|
+
const phi = Math.acos(1 - 2 * (i + 0.5) / N);
|
|
625
|
+
pos[i] = {
|
|
626
|
+
x: R * Math.sin(phi) * Math.cos(theta) + (srand(i * 7) - 0.5) * 30,
|
|
627
|
+
y: R * Math.cos(phi) + (srand(i * 13) - 0.5) * 30,
|
|
628
|
+
z: R * Math.sin(phi) * Math.sin(theta) + (srand(i * 19) - 0.5) * 30
|
|
629
|
+
};
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
// Build adjacency for force computation
|
|
633
|
+
const adjList = new Array(N);
|
|
634
|
+
for (let i = 0; i < N; i++) adjList[i] = [];
|
|
635
|
+
for (const e of edgeList) {
|
|
636
|
+
const si = nodeIdxMapLocal[e.source];
|
|
637
|
+
const ti = nodeIdxMapLocal[e.target];
|
|
638
|
+
if (si !== undefined && ti !== undefined) {
|
|
639
|
+
adjList[si].push(ti);
|
|
640
|
+
adjList[ti].push(si);
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
// Force simulation: 50 iterations
|
|
645
|
+
const ITERATIONS = 50;
|
|
646
|
+
const REPULSION = 8000;
|
|
647
|
+
const ATTRACTION = 0.008;
|
|
648
|
+
const CENTERING = 0.002;
|
|
649
|
+
const DAMPING = 0.85;
|
|
650
|
+
const K_SAMPLES = Math.min(N, 25); // random sample for repulsion
|
|
651
|
+
|
|
652
|
+
const vel = new Array(N);
|
|
653
|
+
for (let i = 0; i < N; i++) vel[i] = { x: 0, y: 0, z: 0 };
|
|
654
|
+
|
|
655
|
+
for (let iter = 0; iter < ITERATIONS; iter++) {
|
|
656
|
+
const temp = 1.0 - iter / ITERATIONS; // cooling
|
|
657
|
+
const repScale = REPULSION * temp;
|
|
658
|
+
|
|
659
|
+
for (let i = 0; i < N; i++) {
|
|
660
|
+
let fx = 0, fy = 0, fz = 0;
|
|
661
|
+
|
|
662
|
+
// Repulsion: random sample K nodes
|
|
663
|
+
for (let k = 0; k < K_SAMPLES; k++) {
|
|
664
|
+
const j = Math.floor(srand(iter * 10007 + i * 997 + k * 31) * N);
|
|
665
|
+
if (j === i) continue;
|
|
666
|
+
const dx = pos[i].x - pos[j].x;
|
|
667
|
+
const dy = pos[i].y - pos[j].y;
|
|
668
|
+
const dz = pos[i].z - pos[j].z;
|
|
669
|
+
const distSq = dx * dx + dy * dy + dz * dz + 1;
|
|
670
|
+
const f = repScale / distSq;
|
|
671
|
+
const dist = Math.sqrt(distSq);
|
|
672
|
+
fx += (dx / dist) * f;
|
|
673
|
+
fy += (dy / dist) * f;
|
|
674
|
+
fz += (dz / dist) * f;
|
|
675
|
+
}
|
|
676
|
+
// Scale repulsion by N/K_SAMPLES for unbiased estimate
|
|
677
|
+
const repBias = N / K_SAMPLES;
|
|
678
|
+
fx *= repBias; fy *= repBias; fz *= repBias;
|
|
679
|
+
|
|
680
|
+
// Attraction: pull toward connected nodes
|
|
681
|
+
for (const j of adjList[i]) {
|
|
682
|
+
const dx = pos[j].x - pos[i].x;
|
|
683
|
+
const dy = pos[j].y - pos[i].y;
|
|
684
|
+
const dz = pos[j].z - pos[i].z;
|
|
685
|
+
const dist = Math.sqrt(dx * dx + dy * dy + dz * dz + 1);
|
|
686
|
+
const f = ATTRACTION * dist;
|
|
687
|
+
fx += (dx / dist) * f;
|
|
688
|
+
fy += (dy / dist) * f;
|
|
689
|
+
fz += (dz / dist) * f;
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
// Centering force
|
|
693
|
+
fx -= pos[i].x * CENTERING;
|
|
694
|
+
fy -= pos[i].y * CENTERING;
|
|
695
|
+
fz -= pos[i].z * CENTERING;
|
|
696
|
+
|
|
697
|
+
vel[i].x = (vel[i].x + fx) * DAMPING;
|
|
698
|
+
vel[i].y = (vel[i].y + fy) * DAMPING;
|
|
699
|
+
vel[i].z = (vel[i].z + fz) * DAMPING;
|
|
700
|
+
|
|
701
|
+
// Cap velocity
|
|
702
|
+
const maxV = 30 * temp + 2;
|
|
703
|
+
const vLen = Math.sqrt(vel[i].x * vel[i].x + vel[i].y * vel[i].y + vel[i].z * vel[i].z);
|
|
704
|
+
if (vLen > maxV) {
|
|
705
|
+
vel[i].x = vel[i].x / vLen * maxV;
|
|
706
|
+
vel[i].y = vel[i].y / vLen * maxV;
|
|
707
|
+
vel[i].z = vel[i].z / vLen * maxV;
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
// Apply velocities
|
|
712
|
+
for (let i = 0; i < N; i++) {
|
|
713
|
+
pos[i].x += vel[i].x;
|
|
714
|
+
pos[i].y += vel[i].y;
|
|
715
|
+
pos[i].z += vel[i].z;
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
// Scale to fit nicely (target radius ~400)
|
|
720
|
+
let maxDist = 0;
|
|
721
|
+
for (let i = 0; i < N; i++) {
|
|
722
|
+
const d = Math.sqrt(pos[i].x * pos[i].x + pos[i].y * pos[i].y + pos[i].z * pos[i].z);
|
|
723
|
+
if (d > maxDist) maxDist = d;
|
|
724
|
+
}
|
|
725
|
+
const scale = maxDist > 0 ? 400 / maxDist : 1;
|
|
726
|
+
for (let i = 0; i < N; i++) {
|
|
727
|
+
pos[i].x *= scale;
|
|
728
|
+
pos[i].y *= scale;
|
|
729
|
+
pos[i].z *= scale;
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
return pos;
|
|
733
|
+
}
|
|
609
734
|
|
|
610
735
|
function srand(s) { const x = Math.sin(s * 9301 + 49297) * 49297; return x - Math.floor(x); }
|
|
611
736
|
function escapeHtml(s) { return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'); }
|
|
@@ -618,21 +743,19 @@ document.body.prepend(renderer.domElement);
|
|
|
618
743
|
|
|
619
744
|
const scene = new THREE.Scene();
|
|
620
745
|
scene.background = new THREE.Color('#030308');
|
|
621
|
-
scene.fog = new THREE.FogExp2('#030308', 0.
|
|
746
|
+
scene.fog = new THREE.FogExp2('#030308', 0.0003);
|
|
622
747
|
|
|
623
748
|
const camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 12000);
|
|
624
|
-
camera.position.set(
|
|
749
|
+
camera.position.set(600, 350, 600);
|
|
625
750
|
|
|
626
751
|
const controls = new OrbitControls(camera, renderer.domElement);
|
|
627
752
|
controls.target.set(0, 0, 0);
|
|
628
753
|
controls.enableDamping = true;
|
|
629
754
|
controls.dampingFactor = 0.06;
|
|
630
755
|
controls.autoRotate = true;
|
|
631
|
-
controls.autoRotateSpeed = 0.
|
|
756
|
+
controls.autoRotateSpeed = 0.12;
|
|
632
757
|
controls.minDistance = 80;
|
|
633
758
|
controls.maxDistance = 4000;
|
|
634
|
-
controls.maxPolarAngle = Math.PI * 0.85;
|
|
635
|
-
controls.minPolarAngle = Math.PI * 0.15;
|
|
636
759
|
controls.update();
|
|
637
760
|
|
|
638
761
|
// =========== BACKGROUND STARS ===========
|
|
@@ -753,7 +876,6 @@ let pData = [];
|
|
|
753
876
|
let nCount = 0;
|
|
754
877
|
let eCount = 0;
|
|
755
878
|
let pCount = 0;
|
|
756
|
-
let orbitRings = [];
|
|
757
879
|
|
|
758
880
|
const PARTICLES_PER_EDGE = 3;
|
|
759
881
|
const tc = new THREE.Color();
|
|
@@ -764,8 +886,6 @@ function rebuildScene() {
|
|
|
764
886
|
if (nodeGeo) { nodeGeo.dispose(); scene.remove(nodePoints); }
|
|
765
887
|
if (edgeGeo) { edgeGeo.dispose(); scene.remove(edgeLines); }
|
|
766
888
|
if (particleGeo) { particleGeo.dispose(); scene.remove(particlePoints); }
|
|
767
|
-
orbitRings.forEach(r => { r.geometry.dispose(); r.material.dispose(); scene.remove(r); });
|
|
768
|
-
orbitRings = [];
|
|
769
889
|
|
|
770
890
|
nodes = BRAIN_DATA.nodes;
|
|
771
891
|
nCount = nodes.length;
|
|
@@ -778,30 +898,17 @@ function rebuildScene() {
|
|
|
778
898
|
byLevel[lv].push(i);
|
|
779
899
|
});
|
|
780
900
|
|
|
781
|
-
//
|
|
782
|
-
positions = new Array(nCount);
|
|
783
|
-
for (const [lv, indices] of Object.entries(byLevel)) {
|
|
784
|
-
const s = SPATIAL[lv] || SPATIAL[3];
|
|
785
|
-
const c = indices.length;
|
|
786
|
-
indices.forEach((ni, j) => {
|
|
787
|
-
const angle = (j / Math.max(c, 1)) * Math.PI * 2 + (srand(ni * 19) - 0.5) * 1.2;
|
|
788
|
-
const r = s.iR + srand(ni * 7) * (s.oR - s.iR);
|
|
789
|
-
const spiral = angle + r * 0.005 + srand(ni * 23) * 0.8;
|
|
790
|
-
const y = (s.yBase || 0) + (srand(ni * 11) - 0.5) * s.yS;
|
|
791
|
-
// Organic jitter for 3D spread
|
|
792
|
-
const jitterX = (srand(ni * 29) - 0.5) * r * 0.2;
|
|
793
|
-
const jitterZ = (srand(ni * 37) - 0.5) * r * 0.2;
|
|
794
|
-
positions[ni] = new THREE.Vector3(
|
|
795
|
-
Math.cos(spiral) * r + jitterX + (s.cx || 0),
|
|
796
|
-
y,
|
|
797
|
-
Math.sin(spiral) * r + jitterZ + (s.cz || 0)
|
|
798
|
-
);
|
|
799
|
-
});
|
|
800
|
-
}
|
|
801
|
-
|
|
802
|
-
// Build adjacency + nodeIdxMap
|
|
901
|
+
// Build nodeIdxMap first (needed for force layout)
|
|
803
902
|
nodeIdxMap = {};
|
|
804
903
|
nodes.forEach((n, i) => { nodeIdxMap[n.id] = i; });
|
|
904
|
+
|
|
905
|
+
// Force-directed 3D layout
|
|
906
|
+
const forcePos = computeForceLayout(nodes, BRAIN_DATA.edges, nodeIdxMap);
|
|
907
|
+
positions = new Array(nCount);
|
|
908
|
+
for (let i = 0; i < nCount; i++) {
|
|
909
|
+
const fp = forcePos[i] || { x: 0, y: 0, z: 0 };
|
|
910
|
+
positions[i] = new THREE.Vector3(fp.x, fp.y, fp.z);
|
|
911
|
+
}
|
|
805
912
|
adj = {};
|
|
806
913
|
nodeEdgeMap = {};
|
|
807
914
|
BRAIN_DATA.edges.forEach((e, ei) => {
|
|
@@ -829,7 +936,7 @@ function rebuildScene() {
|
|
|
829
936
|
for (let i = 0; i < nCount; i++) {
|
|
830
937
|
const p = positions[i];
|
|
831
938
|
const n = nodes[i];
|
|
832
|
-
const s =
|
|
939
|
+
const s = LEVEL_STYLE[n.level] || LEVEL_STYLE[3];
|
|
833
940
|
nPos[i * 3] = p.x; nPos[i * 3 + 1] = p.y; nPos[i * 3 + 2] = p.z;
|
|
834
941
|
tc.set(LEVEL_COLORS_HEX[n.level] || 0x00FFFF);
|
|
835
942
|
nCol[i * 3] = tc.r; nCol[i * 3 + 1] = tc.g; nCol[i * 3 + 2] = tc.b;
|
|
@@ -847,25 +954,6 @@ function rebuildScene() {
|
|
|
847
954
|
nodePoints = new THREE.Points(nodeGeo, nodeMat);
|
|
848
955
|
scene.add(nodePoints);
|
|
849
956
|
|
|
850
|
-
// ---- ORBIT RINGS (one per layer, centered at layer's spiral offset) ----
|
|
851
|
-
for (let lv = 1; lv <= 6; lv++) {
|
|
852
|
-
const s = SPATIAL[lv];
|
|
853
|
-
if (!s || !(byLevel[lv] || []).length) continue;
|
|
854
|
-
const ringRadius = s.oR * 0.85;
|
|
855
|
-
const ringGeo = new THREE.RingGeometry(ringRadius - 0.3, ringRadius + 0.3, 96);
|
|
856
|
-
const ringColor = new THREE.Color(LEVEL_COLORS_HEX[lv] || 0x00FFFF);
|
|
857
|
-
const ringMat = new THREE.MeshBasicMaterial({
|
|
858
|
-
color: ringColor, transparent: true, opacity: 0.06 + (s.activity || 0.5) * 0.06, side: THREE.DoubleSide,
|
|
859
|
-
blending: THREE.AdditiveBlending, depthWrite: false,
|
|
860
|
-
});
|
|
861
|
-
const ring = new THREE.Mesh(ringGeo, ringMat);
|
|
862
|
-
ring.rotation.x = -Math.PI / 2;
|
|
863
|
-
ring.position.set(s.cx || 0, s.yBase, s.cz || 0);
|
|
864
|
-
ring.userData.level = lv;
|
|
865
|
-
scene.add(ring);
|
|
866
|
-
orbitRings.push(ring);
|
|
867
|
-
}
|
|
868
|
-
|
|
869
957
|
// ---- EDGES (LineSegments) ----
|
|
870
958
|
// Prioritize cross-level edges (vertical) over intra-level (horizontal)
|
|
871
959
|
const allEdges = [];
|
|
@@ -893,17 +981,18 @@ function rebuildScene() {
|
|
|
893
981
|
const alphaScale = Math.min(1.0, 3000 / eCount);
|
|
894
982
|
|
|
895
983
|
for (let i = 0; i < eCount; i++) {
|
|
896
|
-
const { si, ti, weight, crossLevel } = validEdges[i];
|
|
984
|
+
const { si, ti, weight, type, crossLevel } = validEdges[i];
|
|
897
985
|
const s = positions[si], t = positions[ti];
|
|
898
986
|
const o = i * 6;
|
|
899
987
|
ePos[o] = s.x; ePos[o + 1] = s.y; ePos[o + 2] = s.z;
|
|
900
988
|
ePos[o + 3] = t.x; ePos[o + 4] = t.y; ePos[o + 5] = t.z;
|
|
901
|
-
|
|
902
|
-
|
|
989
|
+
// Color by edge type for galaxy look
|
|
990
|
+
const edgeColor = EDGE_COLORS[type] || EDGE_COLORS.default;
|
|
991
|
+
sc.set(edgeColor); dc.set(edgeColor);
|
|
903
992
|
eCol[o] = sc.r; eCol[o + 1] = sc.g; eCol[o + 2] = sc.b;
|
|
904
993
|
eCol[o + 3] = dc.r; eCol[o + 4] = dc.g; eCol[o + 5] = dc.b;
|
|
905
|
-
//
|
|
906
|
-
const baseAlpha =
|
|
994
|
+
// Galaxy: all edges visible, weighted by importance
|
|
995
|
+
const baseAlpha = 0.06 + weight * 0.14;
|
|
907
996
|
eAlpha[i * 2] = baseAlpha * alphaScale;
|
|
908
997
|
eAlpha[i * 2 + 1] = baseAlpha * alphaScale;
|
|
909
998
|
}
|
|
@@ -915,13 +1004,13 @@ function rebuildScene() {
|
|
|
915
1004
|
edgeLines = new THREE.LineSegments(edgeGeo, edgeMat);
|
|
916
1005
|
scene.add(edgeLines);
|
|
917
1006
|
|
|
918
|
-
// ---- FLOWING PARTICLES (
|
|
1007
|
+
// ---- FLOWING PARTICLES (on stronger connections) ----
|
|
919
1008
|
pData = [];
|
|
920
1009
|
const maxParticleEdges = Math.min(eCount, 2000);
|
|
921
1010
|
for (let i = 0; i < maxParticleEdges; i++) {
|
|
922
|
-
const { si, ti, weight
|
|
923
|
-
if (
|
|
924
|
-
const particleCount = weight > 0.
|
|
1011
|
+
const { si, ti, weight } = validEdges[i];
|
|
1012
|
+
if (weight < 0.4) continue; // only on stronger connections
|
|
1013
|
+
const particleCount = weight > 0.7 ? 2 : 1;
|
|
925
1014
|
for (let j = 0; j < particleCount; j++) {
|
|
926
1015
|
pData.push({
|
|
927
1016
|
edgeIdx: i, progress: srand(i * 100 + j * 31),
|
|
@@ -1071,8 +1160,8 @@ function updateHighlights() {
|
|
|
1071
1160
|
const activeEdgeTypes = getActiveEdgeTypes();
|
|
1072
1161
|
const alphaS = Math.min(1.0, 3000 / eCount);
|
|
1073
1162
|
for (let i = 0; i < eCount; i++) {
|
|
1074
|
-
const { si, ti, weight, type
|
|
1075
|
-
const baseA =
|
|
1163
|
+
const { si, ti, weight, type } = validEdges[i];
|
|
1164
|
+
const baseA = 0.06 + weight * 0.14;
|
|
1076
1165
|
let a = baseA * alphaS;
|
|
1077
1166
|
|
|
1078
1167
|
// Level toggle: hide edges connected to hidden levels
|
|
@@ -1100,11 +1189,6 @@ function updateHighlights() {
|
|
|
1100
1189
|
}
|
|
1101
1190
|
ea.needsUpdate = true;
|
|
1102
1191
|
|
|
1103
|
-
// Update orbit ring visibility
|
|
1104
|
-
orbitRings.forEach(ring => {
|
|
1105
|
-
const lv = ring.userData.level;
|
|
1106
|
-
ring.material.opacity = levelToggles[lv] === false ? 0 : 0.08;
|
|
1107
|
-
});
|
|
1108
1192
|
}
|
|
1109
1193
|
|
|
1110
1194
|
function getActiveEdgeTypes() {
|
|
@@ -1167,7 +1251,7 @@ function closeSidebar(evt) {
|
|
|
1167
1251
|
controls.autoRotate = true;
|
|
1168
1252
|
camTween = {
|
|
1169
1253
|
startPos: camera.position.clone(), startLookAt: controls.target.clone(),
|
|
1170
|
-
targetPos: new THREE.Vector3(
|
|
1254
|
+
targetPos: new THREE.Vector3(600, 350, 600), targetLookAt: new THREE.Vector3(0, 0, 0),
|
|
1171
1255
|
progress: 0
|
|
1172
1256
|
};
|
|
1173
1257
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/cli/brain/template.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,IAAiB;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAEtC,OAAO;;;;;;0CAMiC,IAAI,CAAC,IAAI,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCA2ZxB,IAAI,CAAC,IAAI,CAAC,UAAU,iBAAiB,IAAI,CAAC,IAAI,CAAC,UAAU,eAAe,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW;;wCAE3L,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;uCACpD,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAkKvE,QAAQ
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/cli/brain/template.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,IAAiB;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAEtC,OAAO;;;;;;0CAMiC,IAAI,CAAC,IAAI,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCA2ZxB,IAAI,CAAC,IAAI,CAAC,UAAU,iBAAiB,IAAI,CAAC,IAAI,CAAC,UAAU,eAAe,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW;;wCAE3L,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;uCACpD,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAkKvE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAg9BL,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAukBvE,CAAC;AACT,CAAC"}
|