@fugood/bricks-project 2.25.0-beta.6 → 2.25.0-beta.60

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 (176) hide show
  1. package/compile/action-name-map.ts +64 -0
  2. package/compile/config-diff.ts +155 -0
  3. package/compile/index.ts +668 -352
  4. package/compile/util.ts +134 -10
  5. package/package.json +8 -3
  6. package/package.json.bak +8 -3
  7. package/skills/bricks-ctor/SKILL.md +23 -17
  8. package/skills/bricks-ctor/{rules → references}/animation.md +3 -2
  9. package/skills/bricks-ctor/{rules → references}/architecture-patterns.md +19 -0
  10. package/skills/bricks-ctor/{rules → references}/automations.md +11 -0
  11. package/skills/bricks-ctor/references/buttress.md +245 -0
  12. package/skills/bricks-ctor/references/data-calculation.md +252 -0
  13. package/skills/bricks-ctor/{rules → references}/media-flow.md +7 -0
  14. package/skills/bricks-ctor/references/simulator.md +132 -0
  15. package/skills/bricks-ctor/references/source-editing-tools.md +81 -0
  16. package/skills/bricks-ctor/references/verification-toolchain.md +200 -0
  17. package/skills/bricks-design/SKILL.md +150 -45
  18. package/skills/bricks-design/references/architecture-truths.md +132 -0
  19. package/skills/bricks-design/references/avoiding-complexity.md +91 -0
  20. package/skills/bricks-design/references/design-critique.md +195 -0
  21. package/skills/bricks-design/references/design-languages.md +265 -0
  22. package/skills/bricks-design/references/performance.md +116 -0
  23. package/skills/bricks-design/references/presentation-and-slideshow.md +137 -0
  24. package/skills/bricks-design/references/translating-inputs.md +152 -0
  25. package/skills/bricks-design/references/variations-and-tweaks.md +124 -0
  26. package/skills/bricks-design/references/when-the-brief-is-branded.md +284 -0
  27. package/skills/bricks-design/references/when-the-brief-is-vague.md +85 -0
  28. package/skills/bricks-design/references/workflow.md +134 -0
  29. package/skills/bricks-ux/SKILL.md +114 -0
  30. package/skills/bricks-ux/references/accessibility.md +162 -0
  31. package/skills/bricks-ux/references/flow-states.md +175 -0
  32. package/skills/bricks-ux/references/interaction-archetypes.md +189 -0
  33. package/skills/bricks-ux/references/monitoring-screens.md +153 -0
  34. package/skills/bricks-ux/references/pressable-composition.md +126 -0
  35. package/skills/bricks-ux/references/user-journey.md +168 -0
  36. package/skills/bricks-ux/references/ux-critique.md +256 -0
  37. package/tools/_cli-error.ts +17 -0
  38. package/tools/_edits-log.ts +41 -0
  39. package/tools/_git-author.ts +10 -2
  40. package/tools/_last-pushed-commit.ts +28 -0
  41. package/tools/_mcp-config.ts +42 -0
  42. package/tools/_shell.ts +8 -1
  43. package/tools/deploy.ts +17 -6
  44. package/tools/mcp-env.ts +13 -0
  45. package/tools/mcp-server.ts +8 -0
  46. package/tools/mcp-tools/_editing-helpers.ts +98 -0
  47. package/tools/mcp-tools/_verify.ts +50 -0
  48. package/tools/mcp-tools/compile.ts +21 -9
  49. package/tools/mcp-tools/data-calc-editing.ts +1311 -0
  50. package/tools/mcp-tools/entry-editing.ts +2297 -0
  51. package/tools/mcp-tools/huggingface.ts +23 -13
  52. package/tools/mcp-tools/icons.ts +23 -7
  53. package/tools/mcp-tools/media.ts +4 -1
  54. package/tools/postinstall.ts +95 -38
  55. package/tools/pull.ts +100 -23
  56. package/tools/push-config.ts +114 -0
  57. package/tools/{preview-main.mjs → simulator-main.mjs} +207 -12
  58. package/tools/simulator-preload.cjs +16 -0
  59. package/tools/{preview.ts → simulator.ts} +4 -4
  60. package/types/{animation.ts → animation.d.ts} +24 -8
  61. package/types/{automation.ts → automation.d.ts} +16 -20
  62. package/types/{brick-base.ts → brick-base.d.ts} +1 -1
  63. package/types/bricks/{Camera.ts → Camera.d.ts} +8 -8
  64. package/types/bricks/{Chart.ts → Chart.d.ts} +4 -4
  65. package/types/bricks/{GenerativeMedia.ts → GenerativeMedia.d.ts} +15 -15
  66. package/types/bricks/{Icon.ts → Icon.d.ts} +7 -7
  67. package/types/bricks/{Image.ts → Image.d.ts} +21 -9
  68. package/types/bricks/{Items.ts → Items.d.ts} +11 -7
  69. package/types/bricks/{Lottie.ts → Lottie.d.ts} +10 -10
  70. package/types/bricks/{Maps.ts → Maps.d.ts} +11 -11
  71. package/types/bricks/{QrCode.ts → QrCode.d.ts} +7 -7
  72. package/types/bricks/{Rect.ts → Rect.d.ts} +7 -7
  73. package/types/bricks/{RichText.ts → RichText.d.ts} +12 -9
  74. package/types/bricks/{Rive.ts → Rive.d.ts} +9 -9
  75. package/types/bricks/Scene3D.d.ts +676 -0
  76. package/types/bricks/{Sketch.ts → Sketch.d.ts} +10 -8
  77. package/types/bricks/{Slideshow.ts → Slideshow.d.ts} +7 -7
  78. package/types/bricks/{Svg.ts → Svg.d.ts} +7 -7
  79. package/types/bricks/{Text.ts → Text.d.ts} +9 -9
  80. package/types/bricks/{TextInput.ts → TextInput.d.ts} +10 -10
  81. package/types/bricks/{Video.ts → Video.d.ts} +80 -13
  82. package/types/bricks/{VideoStreaming.ts → VideoStreaming.d.ts} +10 -10
  83. package/types/bricks/{WebRtcStream.ts → WebRtcStream.d.ts} +1 -1
  84. package/types/bricks/{WebView.ts → WebView.d.ts} +4 -4
  85. package/types/bricks/{index.ts → index.d.ts} +1 -0
  86. package/types/{common.ts → common.d.ts} +3 -6
  87. package/types/data-calc-command/base.d.ts +57 -0
  88. package/types/data-calc-command/collection.d.ts +418 -0
  89. package/types/data-calc-command/color.d.ts +432 -0
  90. package/types/data-calc-command/constant.d.ts +50 -0
  91. package/types/data-calc-command/datetime.d.ts +147 -0
  92. package/types/data-calc-command/file.d.ts +129 -0
  93. package/types/data-calc-command/index.d.ts +13 -0
  94. package/types/data-calc-command/iteratee.d.ts +23 -0
  95. package/types/data-calc-command/logictype.d.ts +190 -0
  96. package/types/data-calc-command/math.d.ts +275 -0
  97. package/types/data-calc-command/object.d.ts +119 -0
  98. package/types/data-calc-command/sandbox.d.ts +66 -0
  99. package/types/data-calc-command/string.d.ts +407 -0
  100. package/types/{data-calc.ts → data-calc.d.ts} +1 -0
  101. package/types/{data.ts → data.d.ts} +4 -2
  102. package/types/generators/{Assistant.ts → Assistant.d.ts} +19 -0
  103. package/types/generators/{HttpServer.ts → HttpServer.d.ts} +56 -2
  104. package/types/generators/{LlmGgml.ts → LlmGgml.d.ts} +43 -1
  105. package/types/generators/{LlmMlx.ts → LlmMlx.d.ts} +1 -0
  106. package/types/generators/{RerankerGgml.ts → RerankerGgml.d.ts} +5 -1
  107. package/types/generators/{SoundRecorder.ts → SoundRecorder.d.ts} +10 -1
  108. package/types/generators/{SpeechToTextGgml.ts → SpeechToTextGgml.d.ts} +6 -1
  109. package/types/generators/{SttAppleBuiltin.ts → SttAppleBuiltin.d.ts} +27 -4
  110. package/types/generators/{ThermalPrinter.ts → ThermalPrinter.d.ts} +9 -7
  111. package/types/generators/{Tick.ts → Tick.d.ts} +1 -1
  112. package/types/generators/{VadGgml.ts → VadGgml.d.ts} +12 -2
  113. package/types/{subspace.ts → subspace.d.ts} +1 -1
  114. package/utils/calc.ts +5 -1
  115. package/utils/data.ts +5 -7
  116. package/utils/event-props.ts +27 -1
  117. package/utils/id.ts +109 -56
  118. package/skills/bricks-ctor/rules/buttress.md +0 -156
  119. package/skills/bricks-ctor/rules/data-calculation.md +0 -209
  120. package/skills/bricks-design/LICENSE.txt +0 -180
  121. package/types/data-calc-command.ts +0 -7005
  122. /package/skills/bricks-ctor/{rules → references}/local-sync.md +0 -0
  123. /package/skills/bricks-ctor/{rules → references}/remote-data-bank.md +0 -0
  124. /package/skills/bricks-ctor/{rules → references}/standby-transition.md +0 -0
  125. /package/types/{canvas.ts → canvas.d.ts} +0 -0
  126. /package/types/{data-calc-script.ts → data-calc-script.d.ts} +0 -0
  127. /package/types/generators/{AlarmClock.ts → AlarmClock.d.ts} +0 -0
  128. /package/types/generators/{BleCentral.ts → BleCentral.d.ts} +0 -0
  129. /package/types/generators/{BlePeripheral.ts → BlePeripheral.d.ts} +0 -0
  130. /package/types/generators/{CanvasMap.ts → CanvasMap.d.ts} +0 -0
  131. /package/types/generators/{CastlesPay.ts → CastlesPay.d.ts} +0 -0
  132. /package/types/generators/{DataBank.ts → DataBank.d.ts} +0 -0
  133. /package/types/generators/{File.ts → File.d.ts} +0 -0
  134. /package/types/generators/{GraphQl.ts → GraphQl.d.ts} +0 -0
  135. /package/types/generators/{Http.ts → Http.d.ts} +0 -0
  136. /package/types/generators/{Information.ts → Information.d.ts} +0 -0
  137. /package/types/generators/{Intent.ts → Intent.d.ts} +0 -0
  138. /package/types/generators/{Iterator.ts → Iterator.d.ts} +0 -0
  139. /package/types/generators/{Keyboard.ts → Keyboard.d.ts} +0 -0
  140. /package/types/generators/{LlmAnthropicCompat.ts → LlmAnthropicCompat.d.ts} +0 -0
  141. /package/types/generators/{LlmAppleBuiltin.ts → LlmAppleBuiltin.d.ts} +0 -0
  142. /package/types/generators/{LlmMediaTekNeuroPilot.ts → LlmMediaTekNeuroPilot.d.ts} +0 -0
  143. /package/types/generators/{LlmOnnx.ts → LlmOnnx.d.ts} +0 -0
  144. /package/types/generators/{LlmOpenAiCompat.ts → LlmOpenAiCompat.d.ts} +0 -0
  145. /package/types/generators/{LlmQualcommAiEngine.ts → LlmQualcommAiEngine.d.ts} +0 -0
  146. /package/types/generators/{Mcp.ts → Mcp.d.ts} +0 -0
  147. /package/types/generators/{McpServer.ts → McpServer.d.ts} +0 -0
  148. /package/types/generators/{MediaFlow.ts → MediaFlow.d.ts} +0 -0
  149. /package/types/generators/{MqttBroker.ts → MqttBroker.d.ts} +0 -0
  150. /package/types/generators/{MqttClient.ts → MqttClient.d.ts} +0 -0
  151. /package/types/generators/{Question.ts → Question.d.ts} +0 -0
  152. /package/types/generators/{RealtimeTranscription.ts → RealtimeTranscription.d.ts} +0 -0
  153. /package/types/generators/{SerialPort.ts → SerialPort.d.ts} +0 -0
  154. /package/types/generators/{SoundPlayer.ts → SoundPlayer.d.ts} +0 -0
  155. /package/types/generators/{SpeechToTextOnnx.ts → SpeechToTextOnnx.d.ts} +0 -0
  156. /package/types/generators/{SpeechToTextPlatform.ts → SpeechToTextPlatform.d.ts} +0 -0
  157. /package/types/generators/{SqLite.ts → SqLite.d.ts} +0 -0
  158. /package/types/generators/{Step.ts → Step.d.ts} +0 -0
  159. /package/types/generators/{Tcp.ts → Tcp.d.ts} +0 -0
  160. /package/types/generators/{TcpServer.ts → TcpServer.d.ts} +0 -0
  161. /package/types/generators/{TextToSpeechAppleBuiltin.ts → TextToSpeechAppleBuiltin.d.ts} +0 -0
  162. /package/types/generators/{TextToSpeechGgml.ts → TextToSpeechGgml.d.ts} +0 -0
  163. /package/types/generators/{TextToSpeechOnnx.ts → TextToSpeechOnnx.d.ts} +0 -0
  164. /package/types/generators/{TextToSpeechOpenAiLike.ts → TextToSpeechOpenAiLike.d.ts} +0 -0
  165. /package/types/generators/{Udp.ts → Udp.d.ts} +0 -0
  166. /package/types/generators/{VadOnnx.ts → VadOnnx.d.ts} +0 -0
  167. /package/types/generators/{VadTraditional.ts → VadTraditional.d.ts} +0 -0
  168. /package/types/generators/{VectorStore.ts → VectorStore.d.ts} +0 -0
  169. /package/types/generators/{Watchdog.ts → Watchdog.d.ts} +0 -0
  170. /package/types/generators/{WebCrawler.ts → WebCrawler.d.ts} +0 -0
  171. /package/types/generators/{WebRtc.ts → WebRtc.d.ts} +0 -0
  172. /package/types/generators/{WebSocket.ts → WebSocket.d.ts} +0 -0
  173. /package/types/generators/{index.ts → index.d.ts} +0 -0
  174. /package/types/{index.ts → index.d.ts} +0 -0
  175. /package/types/{switch.ts → switch.d.ts} +0 -0
  176. /package/types/{system.ts → system.d.ts} +0 -0
@@ -0,0 +1,50 @@
1
+ import { sh } from '../_shell'
2
+ import { computeConfigChange, readBuildConfig, type ConfigChange } from '../../compile/config-diff'
3
+
4
+ // Result of an editing tool's compile verification, carrying the config delta the
5
+ // compile produced. Shared by entry-editing and data-calc-editing.
6
+ export type VerificationResult = {
7
+ status: 'skipped' | 'compile:ok' | 'compile:failed'
8
+ errors: string[]
9
+ configChange?: ConfigChange
10
+ }
11
+
12
+ // Strip ANSI colors from the spawned compile so the captured output stays plain text.
13
+ const noColorEnv = { FORCE_COLOR: '0', NO_COLOR: '1' }
14
+
15
+ // Recompile the project and diff the result against the prior build artifact.
16
+ export const compileAndDiff = async (projectDir: string): Promise<VerificationResult> => {
17
+ // Snapshot the prior compiled config before recompiling (the new artifact overwrites it).
18
+ const before = await readBuildConfig(projectDir)
19
+ try {
20
+ // Turn off the editing-tools audit for this spawned compile so compile() doesn't write
21
+ // a duplicate generic entry — the calling editing tool records its own richer entry.
22
+ await sh`bun compile`
23
+ .cwd(projectDir)
24
+ .env({ ...noColorEnv, BRICKS_CTOR_ENABLE_EDITING_TOOLS: '0' })
25
+ .text()
26
+ } catch (err: any) {
27
+ const stdout = err.stdout?.toString() ?? ''
28
+ const stderr = err.stderr?.toString() ?? ''
29
+ const output = [stdout, stderr, err.message].filter(Boolean).join('\n').trim()
30
+ return { status: 'compile:failed', errors: output ? [output] : ['bun compile failed'] }
31
+ }
32
+ const after = await readBuildConfig(projectDir)
33
+ return { status: 'compile:ok', errors: [], configChange: computeConfigChange(before, after) }
34
+ }
35
+
36
+ const shouldVerify = (inputVerify?: boolean) => {
37
+ if (inputVerify !== undefined) return inputVerify
38
+ const value = process.env.BRICKS_CTOR_MCP_EDIT_VERIFY ?? 'true'
39
+ return !['0', 'false', 'no', 'off'].includes(value.toLowerCase())
40
+ }
41
+
42
+ // Compile verification shared by the source-editing tools: per-call `verify` wins,
43
+ // then the BRICKS_CTOR_MCP_EDIT_VERIFY env toggle, defaulting to on.
44
+ export const verifyProject = async (
45
+ projectDir: string,
46
+ verify?: boolean,
47
+ ): Promise<VerificationResult> => {
48
+ if (!shouldVerify(verify)) return { status: 'skipped', errors: [] }
49
+ return compileAndDiff(projectDir)
50
+ }
@@ -3,24 +3,33 @@ import { readFile } from 'node:fs/promises'
3
3
  import { z } from 'zod'
4
4
  import { sh } from '../_shell'
5
5
 
6
+ // Disable ANSI color codes from spawned tools so MCP text output stays readable
7
+ // (the host renders raw text; escape sequences leak into the result otherwise).
8
+ const noColorEnv = { FORCE_COLOR: '0', NO_COLOR: '1' }
9
+
6
10
  export function register(server: McpServer, projectDir: string) {
7
11
  const { dirname } = import.meta
8
12
 
13
+ // `bun compile` records the resulting config delta to `.bricks/edits.jsonl` itself
14
+ // (see compile() in compile/index.ts), so the spawned output below already reflects it.
9
15
  server.tool('compile', {}, async () => {
10
- let log = ''
16
+ let log = 'Type checking & Compiling...\n'
11
17
  try {
12
- log += 'Type checking & Compiling...'
13
- log += await sh`bun compile`.cwd(projectDir).text()
14
- } catch (err) {
15
- log += `${err.stdout.toString()}\n${err.stderr.toString()}`
18
+ log += await sh`bun compile`.cwd(projectDir).env(noColorEnv).text()
19
+ } catch (err: any) {
20
+ const stdout = err.stdout?.toString() ?? ''
21
+ const stderr = err.stderr?.toString() ?? ''
22
+ log += [stdout, stderr].filter(Boolean).join('\n')
16
23
  }
17
24
  return {
18
25
  content: [{ type: 'text', text: log }],
19
26
  }
20
27
  })
21
28
 
29
+ if (process.env.BRICKS_CTOR_MCP_DISABLE_PREVIEW === '1') return
30
+
22
31
  server.tool(
23
- 'preview',
32
+ 'simulator',
24
33
  {
25
34
  delay: z
26
35
  .number()
@@ -61,11 +70,14 @@ export function register(server: McpServer, projectDir: string) {
61
70
  ]
62
71
  if (testId) args.push('--test-id', testId)
63
72
  if (testTitleLike) args.push('--test-title-like', testTitleLike)
64
- log = await sh`bunx --bun electron ${toolsDir}/preview-main.mjs ${args}`
73
+ log = await sh`bunx --bun electron ${toolsDir}/simulator-main.mjs ${args}`
65
74
  .cwd(projectDir)
75
+ .env(noColorEnv)
66
76
  .text()
67
- } catch (err) {
68
- log = `${err.stdout.toString()}\n${err.stderr.toString()}`
77
+ } catch (err: any) {
78
+ const stdout = err.stdout?.toString() ?? ''
79
+ const stderr = err.stderr?.toString() ?? ''
80
+ log = [stdout, stderr].filter(Boolean).join('\n')
69
81
  error = true
70
82
  }
71
83
  let screenshotBase64: string | null = null