theme-customize.json 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. {
  2. "version": "3.16",
  3. "name": "ThemeCustomize",
  4. "description": "Customize project theme: regenerate .vth theme tokens and cascade-update all components that use theme references.",
  5. "sectionMerge": true,
  6. "registry": {
  7. "params": [
  8. "themeRequest(STRING)",
  9. "currentMeta(OBJECT)"
  10. ],
  11. "services": [],
  12. "apis": [],
  13. "components": [],
  14. "vars": [
  15. "$currentTheme(STRING)",
  16. "$newTheme(STRING)",
  17. "$affectedComponents(OBJECT)",
  18. "$updatedFiles(OBJECT)"
  19. ],
  20. "files": {
  21. "inputs": [
  22. ".vl-code/ProjectMeta.json",
  23. "Theme/*"
  24. ],
  25. "artifacts": [
  26. "Theme/*",
  27. "ExtComponents/*",
  28. "Sections/*"
  29. ]
  30. },
  31. "docs": {
  32. "1": "VL Syntax Rules",
  33. "101": "Agent-GenTheme-Prompt"
  34. }
  35. },
  36. "steps": [
  37. {
  38. "id": "LLM_010_AnalyzeTheme",
  39. "meta": {
  40. "title": "1. Analyze current theme and plan changes"
  41. },
  42. "in": {
  43. "docs": [
  44. "1"
  45. ],
  46. "max_tokens": 32768,
  47. "messages": [
  48. {
  49. "role": "user",
  50. "content": "Current ProjectMeta:"
  51. },
  52. {
  53. "role": "user",
  54. "content": "=currentMeta"
  55. },
  56. {
  57. "role": "user",
  58. "content": "Theme customization request:"
  59. },
  60. {
  61. "role": "user",
  62. "content": "=themeRequest"
  63. },
  64. {
  65. "role": "user",
  66. "content": "Analyze the current theme and plan the changes. Return JSON with: tokenChanges([{token, oldValue, newValue}]), affectedFiles([{file, reason}]), summary(STRING)."
  67. }
  68. ],
  69. "output_config": {
  70. "format": {
  71. "type": "json_object"
  72. }
  73. }
  74. },
  75. "out": {
  76. "$affectedComponents": "=_result.affectedFiles"
  77. },
  78. "next": "LLM_020_GenTheme"
  79. },
  80. {
  81. "id": "LLM_020_GenTheme",
  82. "meta": {
  83. "title": "2. Regenerate theme file"
  84. },
  85. "in": {
  86. "docs": [
  87. "1",
  88. "101"
  89. ],
  90. "max_tokens": 32768,
  91. "stream": true,
  92. "readFiles": [
  93. "=currentMeta.theme.file || currentMeta.config.themeFile || 'Theme/Theme.vth'"
  94. ],
  95. "messages": [
  96. {
  97. "role": "user",
  98. "content": "Current ProjectMeta:"
  99. },
  100. {
  101. "role": "user",
  102. "content": "=currentMeta"
  103. },
  104. {
  105. "role": "user",
  106. "content": "Theme customization request:"
  107. },
  108. {
  109. "role": "user",
  110. "content": "=themeRequest"
  111. },
  112. {
  113. "role": "user",
  114. "content": "Current theme file path:"
  115. },
  116. {
  117. "role": "user",
  118. "content": "=currentMeta.theme.file || currentMeta.config.themeFile || 'Theme/Theme.vth'"
  119. },
  120. {
  121. "role": "user",
  122. "content": "Generate the COMPLETE updated .vth theme file with the requested changes applied. Preserve unaffected tokens and structure.\n\nIMPORTANT: The file MUST start with '// VL_VERSION:3.7' as the first non-empty line."
  123. }
  124. ]
  125. },
  126. "out": {
  127. "$newTheme": "=_result",
  128. "/{currentMeta.theme.file || currentMeta.config.themeFile || 'Theme/Theme.vth'}": "=_result"
  129. },
  130. "next": "Branch_NeedCascade"
  131. },
  132. {
  133. "id": "Branch_NeedCascade",
  134. "meta": {
  135. "title": "3. Check if cascade updates needed"
  136. },
  137. "cases": [
  138. {
  139. "condition": "=$affectedComponents.length > 0",
  140. "next": "Loop_UpdateFiles"
  141. }
  142. ],
  143. "default": "Stop_Done"
  144. },
  145. {
  146. "id": "Loop_UpdateFiles",
  147. "meta": {
  148. "title": "3a. Cascade-update affected files"
  149. },
  150. "source": "=$affectedComponents",
  151. "children": [
  152. "LLM_030_UpdateFile"
  153. ],
  154. "next": "Stop_Done"
  155. },
  156. {
  157. "id": "LLM_030_UpdateFile",
  158. "meta": {
  159. "title": "Update: =_item.file"
  160. },
  161. "in": {
  162. "docs": [
  163. "1"
  164. ],
  165. "max_tokens": 32768,
  166. "stream": true,
  167. "readFiles": [
  168. "=_item.file"
  169. ],
  170. "messages": [
  171. {
  172. "role": "user",
  173. "content": "New Theme:"
  174. },
  175. {
  176. "role": "user",
  177. "content": "=$newTheme"
  178. },
  179. {
  180. "role": "user",
  181. "content": "Update this file to use the new theme tokens. Use sectionMerge semantics: preserve all unaffected logic/layout and only modify the theme-related parts that need changing."
  182. },
  183. {
  184. "role": "user",
  185. "content": "File: =_item.file"
  186. },
  187. {
  188. "role": "user",
  189. "content": "Reason: =_item.reason"
  190. },
  191. {
  192. "role": "user",
  193. "content": "Output the COMPLETE updated file. Preserve the existing file shape and start VL source files with '// VL_VERSION:3.7'."
  194. }
  195. ]
  196. },
  197. "out": {
  198. "/{_item.file}": "=_result"
  199. },
  200. "onError": "skip"
  201. },
  202. {
  203. "id": "Stop_Done",
  204. "meta": {
  205. "title": "Done — Theme customized"
  206. }
  207. }
  208. ]
  209. }