@pixel-normal-edit/mcp 2.0.10 → 2.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 (136) hide show
  1. package/clear-firebase.js +37 -0
  2. package/core/command-bus.js +6 -3
  3. package/core/server.js +98 -3
  4. package/domains/art-tree/README.md +134 -0
  5. package/domains/art-tree/REORGANIZATION_PLAN.md +168 -0
  6. package/domains/art-tree/REORGANIZATION_SUMMARY.md +260 -0
  7. package/domains/art-tree/index.js +58 -58
  8. package/domains/art-tree/lessons/3d/box-properties.js +38 -0
  9. package/domains/art-tree/lessons/3d/cone-properties.js +31 -0
  10. package/domains/art-tree/lessons/3d/cylinder-properties.js +29 -0
  11. package/domains/art-tree/lessons/3d/sphere-properties.js +25 -0
  12. package/domains/art-tree/lessons/advanced/angles.js +30 -0
  13. package/domains/art-tree/lessons/advanced/distances.js +26 -0
  14. package/domains/art-tree/lessons/advanced/shape-ratios.js +25 -0
  15. package/domains/art-tree/lessons/advanced/shape-relationships.js +28 -0
  16. package/domains/art-tree/lessons/advanced/symmetry-and-axis.js +26 -0
  17. package/domains/art-tree/{analysis_lessons.js → lessons/analysis/object-analysis.js} +5 -16
  18. package/domains/art-tree/lessons/basic/circles.js +26 -0
  19. package/domains/art-tree/lessons/basic/composition.js +34 -0
  20. package/domains/art-tree/lessons/basic/curves.js +31 -0
  21. package/domains/art-tree/lessons/basic/ellipses.js +26 -0
  22. package/domains/art-tree/lessons/basic/freehand.js +19 -0
  23. package/domains/art-tree/lessons/basic/index.js +36 -0
  24. package/domains/art-tree/lessons/basic/lines.js +38 -0
  25. package/domains/art-tree/lessons/basic/parallel-and-intersecting.js +22 -0
  26. package/domains/art-tree/lessons/basic/polygons.js +25 -0
  27. package/domains/art-tree/lessons/basic/proportions-and-angles.js +20 -0
  28. package/domains/art-tree/lessons/basic/spiral.js +21 -0
  29. package/domains/art-tree/lessons/basic/squares.js +28 -0
  30. package/domains/art-tree/lessons/basic/strokes.js +23 -0
  31. package/domains/art-tree/lessons/basic/triangles.js +30 -0
  32. package/domains/art-tree/lessons/cross-sections/bottle-sections.js +26 -0
  33. package/domains/art-tree/lessons/cross-sections/glass-sections.js +24 -0
  34. package/domains/art-tree/lessons/cross-sections/head-sections.js +17 -0
  35. package/domains/art-tree/lessons/curves/curve-properties.js +50 -0
  36. package/domains/art-tree/lessons/curves/curve-topology.js +45 -0
  37. package/domains/art-tree/lessons/curves/curve-types.js +44 -0
  38. package/domains/art-tree/lessons/ellipses/coaxial-ellipses.js +29 -0
  39. package/domains/art-tree/lessons/ellipses/ellipse-anatomy.js +26 -0
  40. package/domains/art-tree/lessons/ellipses/ellipse-orientations.js +28 -0
  41. package/domains/art-tree/lessons/ellipses/ellipse-proportions.js +27 -0
  42. package/domains/art-tree/lessons/hidden/hidden-box.js +20 -0
  43. package/domains/art-tree/lessons/hidden/hidden-cup.js +19 -0
  44. package/domains/art-tree/lessons/hidden/hidden-head.js +18 -0
  45. package/domains/art-tree/lessons/index.js +42 -0
  46. package/domains/art-tree/{layer_lessons.js → lessons/layers/layer-step.js} +5 -16
  47. package/domains/art-tree/lessons/lighting/contact-shadow.js +33 -0
  48. package/domains/art-tree/lessons/lighting/light-direction.js +30 -0
  49. package/domains/art-tree/lessons/lighting/light-zones.js +30 -0
  50. package/domains/art-tree/lessons/materials/material-glass.js +21 -0
  51. package/domains/art-tree/lessons/materials/material-shiny.js +26 -0
  52. package/domains/art-tree/lessons/materials/material-texture.js +26 -0
  53. package/domains/art-tree/lessons/perspective/1point-perspective.js +30 -0
  54. package/domains/art-tree/lessons/perspective/2point-perspective.js +30 -0
  55. package/domains/art-tree/lessons/perspective/3point-perspective.js +45 -0
  56. package/domains/art-tree/lessons/perspective/foreshortening.js +38 -0
  57. package/domains/art-tree/lessons/sky/sun-shapes.js +25 -0
  58. package/domains/art-tree/lessons/sky/sunset-colors.js +27 -0
  59. package/domains/art-tree/lessons/sky/sunset-sky.js +32 -0
  60. package/domains/art-tree/{structure_lessons.js → lessons/structure/axis-orientation.js} +3 -53
  61. package/domains/art-tree/lessons/structure/complex-structure.js +21 -0
  62. package/domains/art-tree/lessons/structure/x-yzaxes.js +28 -0
  63. package/domains/art-tree/lessons/surfaces/chair-analysis.js +17 -0
  64. package/domains/art-tree/lessons/surfaces/cup-analysis.js +18 -0
  65. package/domains/art-tree/lessons/surfaces/edge-types.js +40 -0
  66. package/domains/art-tree/lessons/surfaces/surface-types.js +42 -0
  67. package/domains/art-tree/lessons/transforms/bend.js +27 -0
  68. package/domains/art-tree/{transform_lessons_2.js → lessons/transforms/combine.js} +3 -54
  69. package/domains/art-tree/lessons/transforms/cut.js +25 -0
  70. package/domains/art-tree/lessons/transforms/hollow.js +24 -0
  71. package/domains/art-tree/lessons/transforms/rotate.js +16 -0
  72. package/domains/art-tree/lessons/transforms/squash.js +31 -0
  73. package/domains/art-tree/lessons/transforms/stretch.js +31 -0
  74. package/domains/art-tree/lessons/transforms/taper-swell.js +33 -0
  75. package/domains/art-tree/{vocab_lessons.js → lessons/vocab/vocab-house.js} +5 -16
  76. package/domains/art-tree/lib/tool-register.js +104 -0
  77. package/domains/art-tree/lib/validators.js +78 -0
  78. package/domains/art-tree/shapes/grid.js +37 -0
  79. package/domains/art-tree/shapes/polyline.js +26 -0
  80. package/domains/art-tree/{3d_tools.js → tools/3d.js} +2 -2
  81. package/domains/art-tree/{advanced_tools.js → tools/advanced.js} +2 -2
  82. package/domains/art-tree/{analysis_tools.js → tools/analysis.js} +2 -2
  83. package/domains/art-tree/{tools.js → tools/basic.js} +3 -3
  84. package/domains/art-tree/{cross_section_tools.js → tools/cross-sections.js} +2 -2
  85. package/domains/art-tree/{curve_tools.js → tools/curves.js} +2 -2
  86. package/domains/art-tree/{ellipse_tools.js → tools/ellipses.js} +2 -2
  87. package/domains/art-tree/{hidden_tools.js → tools/hidden.js} +2 -2
  88. package/domains/art-tree/tools/index.js +53 -0
  89. package/domains/art-tree/{layer_tools.js → tools/layers.js} +2 -2
  90. package/domains/art-tree/{light_tools.js → tools/lighting.js} +2 -2
  91. package/domains/art-tree/{material_tools.js → tools/materials.js} +2 -2
  92. package/domains/art-tree/{perspective_tools.js → tools/perspective.js} +2 -2
  93. package/domains/art-tree/{sky_tools.js → tools/sky.js} +2 -2
  94. package/domains/art-tree/{structure_tools.js → tools/structure.js} +2 -2
  95. package/domains/art-tree/{surface_tools.js → tools/surfaces.js} +2 -2
  96. package/domains/art-tree/{transform_tools.js → tools/transforms.js} +3 -3
  97. package/domains/art-tree/{vocab_tools.js → tools/vocab.js} +2 -2
  98. package/package.json +1 -1
  99. package/rules/README.md +358 -285
  100. package/rules/index.js +9 -9
  101. package/rules/prerequisites.js +121 -64
  102. package/rules/rules.js +76 -35
  103. package/rules/workflow.js +270 -56
  104. package/tools/canvas-tools.js +2 -2
  105. package/tools/drawing-tools.js +23 -12
  106. package/tools/workspace-tools.js +5 -4
  107. package/domains/art-tree/3d_lessons.js +0 -114
  108. package/domains/art-tree/advanced_lessons.js +0 -124
  109. package/domains/art-tree/cross_section_lessons.js +0 -65
  110. package/domains/art-tree/curve_lessons.js +0 -138
  111. package/domains/art-tree/ellipse_lessons.js +0 -105
  112. package/domains/art-tree/hidden_lessons.js +0 -55
  113. package/domains/art-tree/lessons.js +0 -305
  114. package/domains/art-tree/light_lessons.js +0 -92
  115. package/domains/art-tree/material_lessons.js +0 -71
  116. package/domains/art-tree/perspective_lessons.js +0 -138
  117. package/domains/art-tree/sky_lessons_1.js +0 -82
  118. package/domains/art-tree/surface_lessons.js +0 -112
  119. package/domains/art-tree/transform_lessons_1.js +0 -108
  120. /package/domains/art-tree/{3d_shapes.js → shapes/3d.js} +0 -0
  121. /package/domains/art-tree/{advanced_shapes.js → shapes/advanced.js} +0 -0
  122. /package/domains/art-tree/{analysis_shapes.js → shapes/analysis.js} +0 -0
  123. /package/domains/art-tree/{shapes.js → shapes/basic.js} +0 -0
  124. /package/domains/art-tree/{cross_section_shapes.js → shapes/cross-sections.js} +0 -0
  125. /package/domains/art-tree/{curve_shapes.js → shapes/curves.js} +0 -0
  126. /package/domains/art-tree/{ellipse_shapes.js → shapes/ellipses.js} +0 -0
  127. /package/domains/art-tree/{hidden_shapes.js → shapes/hidden.js} +0 -0
  128. /package/domains/art-tree/{layer_shapes.js → shapes/layers.js} +0 -0
  129. /package/domains/art-tree/{light_shapes.js → shapes/lighting.js} +0 -0
  130. /package/domains/art-tree/{material_shapes.js → shapes/materials.js} +0 -0
  131. /package/domains/art-tree/{perspective_shapes.js → shapes/perspective.js} +0 -0
  132. /package/domains/art-tree/{sky_shapes_1.js → shapes/sky.js} +0 -0
  133. /package/domains/art-tree/{structure_shapes.js → shapes/structure.js} +0 -0
  134. /package/domains/art-tree/{surface_shapes.js → shapes/surfaces.js} +0 -0
  135. /package/domains/art-tree/{transform_shapes.js → shapes/transforms.js} +0 -0
  136. /package/domains/art-tree/{vocab_shapes.js → shapes/vocab.js} +0 -0
@@ -1,112 +0,0 @@
1
- const shapes = require('./shapes');
2
- const surfaceShapes = require('./surface_shapes');
3
-
4
- /**
5
- * Lesson: Surface Types (Flat, convex, concave)
6
- */
7
- function lessonSurfaceTypes(canvasSize = 32, color = '#2196f3') {
8
- const commands = [];
9
- const midY = Math.floor(canvasSize / 2);
10
- const qX = Math.floor(canvasSize / 4);
11
- const r = Math.floor(canvasSize * 0.15);
12
-
13
- // 1. Flat Plane
14
- const w = Math.floor(canvasSize * 0.2);
15
- commands.push(shapes.drawRectangle(qX - w/2, midY - w/2, w, w, '#4caf50', false));
16
- // Add some grid lines to show it's flat
17
- commands.push(shapes.drawLine(qX, midY - w/2, qX, midY + w/2, '#4caf50'));
18
- commands.push(shapes.drawLine(qX - w/2, midY, qX + w/2, midY, '#4caf50'));
19
-
20
- // 2. Convex Surface (e.g. Dome/Sphere)
21
- // We use an ellipse that curves outwards (downwards)
22
- commands.push(shapes.drawEllipse(qX * 2, midY, r, r, '#ff9800', false));
23
- // Cross contour curving DOWN (convex towards viewer)
24
- commands.push(shapes.drawEllipse(qX * 2, midY + Math.floor(r*0.2), r, Math.floor(r*0.3), '#ff9800', false));
25
-
26
- // 3. Concave Surface (e.g. Bowl)
27
- // Draw the top rim of a bowl
28
- commands.push(shapes.drawEllipse(qX * 3, midY, r, Math.floor(r*0.3), '#9c27b0', false));
29
- // Draw the bottom curve (the inside of the bowl)
30
- const bowlPoints = [];
31
- for(let i=0; i<=18; i++) {
32
- const a = (i/18) * Math.PI; // 0 to 180 degrees (bottom half)
33
- bowlPoints.push({ x: Math.round(qX * 3 + r * Math.cos(a)), y: Math.round(midY + r * Math.sin(a)) });
34
- }
35
- commands.push(shapes.drawPolyline(bowlPoints, '#9c27b0'));
36
-
37
- return commands;
38
- }
39
-
40
- /**
41
- * Lesson: Edge Types (Hard sharp corners vs Soft rounded edges)
42
- */
43
- function lessonEdgeTypes(canvasSize = 32, color = '#ff5722') {
44
- const commands = [];
45
- const qX1 = Math.floor(canvasSize * 0.3);
46
- const qX2 = Math.floor(canvasSize * 0.7);
47
- const midY = Math.floor(canvasSize / 2);
48
- const w = Math.floor(canvasSize * 0.25);
49
-
50
- // 1. Hard Edge (Sharp corners)
51
- commands.push(shapes.drawRectangle(qX1 - w/2, midY - w/2, w, w, '#e91e63', false));
52
-
53
- // 2. Soft Edge / Transitional
54
- // Draw a box with rounded corners (fillet)
55
- const r = Math.floor(w * 0.2); // Corner radius
56
- const rx = qX2 - w/2;
57
- const ry = midY - w/2;
58
-
59
- // Straight segments
60
- commands.push(shapes.drawLine(rx + r, ry, rx + w - r, ry, '#00bcd4')); // Top
61
- commands.push(shapes.drawLine(rx + w, ry + r, rx + w, ry + w - r, '#00bcd4')); // Right
62
- commands.push(shapes.drawLine(rx + r, ry + w, rx + w - r, ry + w, '#00bcd4')); // Bottom
63
- commands.push(shapes.drawLine(rx, ry + r, rx, ry + w - r, '#00bcd4')); // Left
64
-
65
- // Rounded corners (approximated with small circles for visual simplicity)
66
- commands.push(shapes.drawCircle(rx + r, ry + r, r, '#00bcd4', false)); // TL
67
- commands.push(shapes.drawCircle(rx + w - r, ry + r, r, '#00bcd4', false)); // TR
68
- commands.push(shapes.drawCircle(rx + w - r, ry + w - r, r, '#00bcd4', false)); // BR
69
- commands.push(shapes.drawCircle(rx + r, ry + w - r, r, '#00bcd4', false)); // BL
70
-
71
- return commands;
72
- }
73
-
74
- /**
75
- * Lesson: Cup Analysis (Analyzing surfaces of a cup)
76
- */
77
- function lessonCupAnalysis(canvasSize = 32, color = '#607d8b') {
78
- const cx = Math.floor(canvasSize / 2);
79
- const cy = Math.floor(canvasSize / 2);
80
- const r = Math.floor(canvasSize * 0.2);
81
- const h = Math.floor(canvasSize * 0.4);
82
-
83
- return surfaceShapes.drawCupAnalysis(cx, cy, r, h);
84
- }
85
-
86
- /**
87
- * Lesson: Chair Analysis (Analyzing surfaces and edges of a chair)
88
- */
89
- function lessonChairAnalysis(canvasSize = 32, color = '#795548') {
90
- const cx = Math.floor(canvasSize / 2);
91
- const cy = Math.floor(canvasSize / 2);
92
- const w = Math.floor(canvasSize * 0.3);
93
-
94
- return surfaceShapes.drawChairAnalysis(cx, cy, w);
95
- }
96
-
97
- function getSurfaceLessonCatalog() {
98
- return [
99
- { id: 'surface_types', name: 'Surface Types', description: 'Flat, Convex, Concave planes', fn: lessonSurfaceTypes },
100
- { id: 'edge_types', name: 'Edge Types', description: 'Hard vs Soft (Transitional) edges', fn: lessonEdgeTypes },
101
- { id: 'surface_cup', name: 'Cup Analysis', description: 'Real object: Convex/Concave walls, Rim, Tube handle', fn: lessonCupAnalysis },
102
- { id: 'surface_chair', name: 'Chair Analysis', description: 'Real object: Flat planes, Hard edges, Cylindrical legs', fn: lessonChairAnalysis },
103
- ];
104
- }
105
-
106
- module.exports = {
107
- lessonSurfaceTypes,
108
- lessonEdgeTypes,
109
- lessonCupAnalysis,
110
- lessonChairAnalysis,
111
- getSurfaceLessonCatalog
112
- };
@@ -1,108 +0,0 @@
1
- const shapes = require('./shapes');
2
- const transformShapes = require('./transform_shapes');
3
- const csShapes = require('./cross_section_shapes');
4
-
5
- /**
6
- * Lesson: Stretch (Elongate)
7
- * Sphere -> Egg, Box -> Bar
8
- */
9
- function lessonStretch(canvasSize = 32, color = '#2196f3') {
10
- const commands = [];
11
- const qX1 = Math.floor(canvasSize * 0.25);
12
- const qX2 = Math.floor(canvasSize * 0.75);
13
- const cy = Math.floor(canvasSize / 2);
14
- const r = Math.floor(canvasSize * 0.15);
15
-
16
- // 1. Stretch: Sphere -> Egg
17
- commands.push(shapes.drawCircle(qX1, cy, r, '#bdbdbd', false)); // Original sphere (ghost)
18
- commands.push(...transformShapes.drawEgg(qX1, cy, r, color)); // Stretched into egg
19
-
20
- // 2. Stretch: Box -> Bar (Tall)
21
- const w = Math.floor(canvasSize * 0.15);
22
- // Original box (ghost)
23
- commands.push(shapes.drawRectangle(qX2 - w/2, cy - w/2, w, w, '#bdbdbd', false));
24
- // Stretched bar
25
- commands.push(shapes.drawRectangle(qX2 - w/2, cy - w * 1.5, w, w * 3, '#9c27b0', false));
26
-
27
- return commands;
28
- }
29
-
30
- /**
31
- * Lesson: Squash (Compress)
32
- * Sphere -> Disk, Box -> Plate
33
- */
34
- function lessonSquash(canvasSize = 32, color = '#ff9800') {
35
- const commands = [];
36
- const qX1 = Math.floor(canvasSize * 0.25);
37
- const qX2 = Math.floor(canvasSize * 0.75);
38
- const cy = Math.floor(canvasSize / 2);
39
- const r = Math.floor(canvasSize * 0.15);
40
-
41
- // 1. Squash: Sphere -> Disk
42
- commands.push(shapes.drawCircle(qX1, cy, r, '#bdbdbd', false)); // Original
43
- // Squashed into a flat ellipse/disk
44
- commands.push(shapes.drawEllipse(qX1, cy, r * 1.2, Math.floor(r * 0.3), color, false));
45
-
46
- // 2. Squash: Box -> Plate
47
- const w = Math.floor(canvasSize * 0.2);
48
- commands.push(shapes.drawRectangle(qX2 - w/2, cy - w/2, w, w, '#bdbdbd', false)); // Original
49
- // Squashed into plate
50
- commands.push(shapes.drawRectangle(qX2 - w, cy - Math.floor(w*0.2), w * 2, Math.floor(w*0.4), '#4caf50', false));
51
-
52
- return commands;
53
- }
54
-
55
- /**
56
- * Lesson: Taper & Swell (Narrow or bulge)
57
- * Cylinder -> Bottle
58
- */
59
- function lessonTaperSwell(canvasSize = 32, color = '#00bcd4') {
60
- const commands = [];
61
- const cx = Math.floor(canvasSize / 2);
62
- const totalH = Math.floor(canvasSize * 0.8);
63
- const topY = Math.floor(canvasSize * 0.1);
64
- const bottomY = topY + totalH;
65
- const r = Math.floor(canvasSize * 0.25);
66
-
67
- // Original Cylinder (ghost)
68
- commands.push(shapes.drawLine(cx - r, topY, cx - r, bottomY, '#bdbdbd'));
69
- commands.push(shapes.drawLine(cx + r, topY, cx + r, bottomY, '#bdbdbd'));
70
-
71
- // Tapered and Swelled form (Bottle)
72
- const sections = [
73
- { y: topY, r: Math.floor(r * 0.3) }, // Neck (Tapered)
74
- { y: topY + Math.floor(totalH * 0.4), r: r },// Body (Swelled back to original radius)
75
- { y: bottomY, r: Math.floor(r * 0.8) } // Base (Slightly tapered)
76
- ];
77
- commands.push(...csShapes.drawLoftedForm(cx, topY, bottomY, sections, color, true));
78
-
79
- return commands;
80
- }
81
-
82
- /**
83
- * Lesson: Bend (Curved bending)
84
- * Cylinder -> Bent Tube
85
- */
86
- function lessonBend(canvasSize = 32, color = '#e91e63') {
87
- const commands = [];
88
- const cx = Math.floor(canvasSize / 2);
89
- const cy = Math.floor(canvasSize / 2);
90
- const r = Math.floor(canvasSize * 0.1);
91
- const length = Math.floor(canvasSize * 0.35);
92
-
93
- // Original straight tube (ghost, pointing right)
94
- commands.push(shapes.drawLine(cx, cy - r, cx + length * 2, cy - r, '#bdbdbd'));
95
- commands.push(shapes.drawLine(cx, cy + r, cx + length * 2, cy + r, '#bdbdbd'));
96
-
97
- // Bent tube
98
- commands.push(...transformShapes.drawBentTube(cx, cy + length, r, length, color));
99
-
100
- return commands;
101
- }
102
-
103
- module.exports = {
104
- lessonStretch,
105
- lessonSquash,
106
- lessonTaperSwell,
107
- lessonBend
108
- };
File without changes
File without changes