9-file-codegen.json 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860
  1. {
  2. "version": "3.16",
  3. "name": "VL_FullStack_CodeGen_9Files",
  4. "description": "Full-stack code generation using 9 auxiliary files, default Theme/Theme.vth, and fully parallel VL file generation.",
  5. "_source": "DocCenter paths: 91-107 (agent prompts), 109 (9-file aux spec), 1 (VL 3.7 syntax)",
  6. "registry": {
  7. "params": [
  8. "userRequest(STRING)",
  9. "userRequirement(STRING)",
  10. "targetLang(STRING)"
  11. ],
  12. "services": [],
  13. "apis": [],
  14. "components": [
  15. "ClearExisting"
  16. ],
  17. "vars": [
  18. "$intentSpec(OBJECT)",
  19. "$intentSpecStr(STRING)",
  20. "$domainSchema(OBJECT)",
  21. "$domainSchemaStr(STRING)",
  22. "$serviceContractMap(OBJECT)",
  23. "$serviceContractMapStr(STRING)",
  24. "$uiContractMap(OBJECT)",
  25. "$uiContractMapStr(STRING)",
  26. "$moduleManifest(OBJECT)",
  27. "$moduleManifestStr(STRING)",
  28. "$dependencyGraph(OBJECT)",
  29. "$qualityGateSpec(OBJECT)",
  30. "$specValidation(OBJECT)",
  31. "$executionPlan(OBJECT)",
  32. "$vdbCode(STRING)",
  33. "$vthCode(STRING)",
  34. "$codeValidation(OBJECT)",
  35. "$repairPlan(OBJECT)",
  36. "$runState(OBJECT)"
  37. ],
  38. "files": {
  39. "inputs": [],
  40. "artifacts": [
  41. "Process/Specs/*",
  42. "Process/Run/*",
  43. "Database/*",
  44. "Theme/*",
  45. "Services/*",
  46. "Sections/*",
  47. "ExtComponents/*",
  48. "Apps/*"
  49. ]
  50. },
  51. "docs": {
  52. "1": "VL 3.7 Syntax Specification",
  53. "91": "Agent-100-IntentSpec-Prompt",
  54. "92": "Agent-200-DomainSchema-Prompt",
  55. "93": "Agent-300-ServiceContractMap-Prompt",
  56. "94": "Agent-400-UIContractMap-Prompt",
  57. "95": "Agent-500-ModuleManifest-Prompt",
  58. "96": "Agent-600-DependencyGraph-Prompt",
  59. "97": "Agent-700-QualityGateSpec-Prompt",
  60. "98": "Agent-800-ExecutionPlan-Prompt",
  61. "99": "Agent-900-RepairSpecs-Prompt",
  62. "100": "Agent-GenDatabase-Prompt",
  63. "101": "Agent-GenTheme-Prompt",
  64. "102": "Agent-GenServiceDomain-Prompt",
  65. "103": "Agent-GenComponent-Prompt",
  66. "104": "Agent-GenSection-Prompt",
  67. "105": "Agent-GenApp-Prompt",
  68. "106": "Agent-RepairPlan-Prompt",
  69. "107": "Agent-RepairVLFile-Prompt",
  70. "109": "VL-Aux-9File-Spec"
  71. }
  72. },
  73. "steps": [
  74. {
  75. "id": "Component_ClearExisting",
  76. "meta": {
  77. "title": "0. Clear existing VL files before regeneration"
  78. },
  79. "in": {},
  80. "out": {},
  81. "next": "Set_InitRunState"
  82. },
  83. {
  84. "id": "Set_InitRunState",
  85. "target": "$runState",
  86. "value": "={\"phase\":\"init\",\"status\":\"running\"}",
  87. "next": "LLM_GenIntentSpec",
  88. "meta": {
  89. "title": "Initialize RunState"
  90. }
  91. },
  92. {
  93. "id": "LLM_GenIntentSpec",
  94. "meta": {
  95. "title": "Agent-100 Generate IntentSpec"
  96. },
  97. "in": {
  98. "stream": true,
  99. "docs": [
  100. "1",
  101. "109",
  102. "91"
  103. ],
  104. "max_tokens": 16000,
  105. "messages": [
  106. {
  107. "role": "user",
  108. "content": "User Requirement:"
  109. },
  110. {
  111. "role": "user",
  112. "content": "=userRequest || userRequirement"
  113. },
  114. {
  115. "role": "user",
  116. "content": "Target Language:"
  117. },
  118. {
  119. "role": "user",
  120. "content": "=targetLang || 'zh-CN'"
  121. },
  122. {
  123. "role": "user",
  124. "content": "Generate Process/Specs/IntentSpec.json. Follow the spec precisely. Output ONLY valid JSON."
  125. }
  126. ],
  127. "output_config": {
  128. "format": {
  129. "type": "json_object"
  130. }
  131. }
  132. },
  133. "out": {
  134. "$intentSpec": "=_result",
  135. "$intentSpecStr": "=_result",
  136. "/Process/Specs/IntentSpec.json": "=_result"
  137. },
  138. "next": "LLM_GenDomainSchema"
  139. },
  140. {
  141. "id": "LLM_GenDomainSchema",
  142. "meta": {
  143. "title": "Agent-200 Generate DomainSchema"
  144. },
  145. "in": {
  146. "stream": true,
  147. "docs": [
  148. "1",
  149. "109",
  150. "92"
  151. ],
  152. "max_tokens": 16000,
  153. "messages": [
  154. {
  155. "role": "user",
  156. "content": "IntentSpec:"
  157. },
  158. {
  159. "role": "user",
  160. "content": "=$intentSpecStr"
  161. },
  162. {
  163. "role": "user",
  164. "content": "Generate Process/Specs/DomainSchema.json. Use exact VL types and canonical valueDomains. Output ONLY valid JSON."
  165. }
  166. ],
  167. "output_config": {
  168. "format": {
  169. "type": "json_object"
  170. }
  171. }
  172. },
  173. "out": {
  174. "$domainSchema": "=_result",
  175. "$domainSchemaStr": "=_result",
  176. "/Process/Specs/DomainSchema.json": "=_result"
  177. },
  178. "next": "Set_FanoutContractDesign"
  179. },
  180. {
  181. "id": "Set_FanoutContractDesign",
  182. "target": "$runState.phase",
  183. "value": "\"contract_design\"",
  184. "children": [
  185. "LLM_GenServiceContractMap",
  186. "LLM_GenQualityGateSpec"
  187. ],
  188. "next": "LLM_GenUIContractMap",
  189. "meta": {
  190. "title": "Parallel: ServiceContractMap + QualityGateSpec"
  191. }
  192. },
  193. {
  194. "id": "LLM_GenServiceContractMap",
  195. "meta": {
  196. "title": "Agent-300 ServiceContractMap"
  197. },
  198. "in": {
  199. "stream": true,
  200. "docs": [
  201. "1",
  202. "109",
  203. "93"
  204. ],
  205. "max_tokens": 16000,
  206. "messages": [
  207. {
  208. "role": "user",
  209. "content": "IntentSpec:"
  210. },
  211. {
  212. "role": "user",
  213. "content": "=$intentSpecStr"
  214. },
  215. {
  216. "role": "user",
  217. "content": "DomainSchema:"
  218. },
  219. {
  220. "role": "user",
  221. "content": "=$domainSchemaStr"
  222. },
  223. {
  224. "role": "user",
  225. "content": "Generate Process/Specs/ServiceContractMap.json. Keep strict DomainId.ServiceName format. Output ONLY valid JSON."
  226. }
  227. ],
  228. "output_config": {
  229. "format": {
  230. "type": "json_object"
  231. }
  232. }
  233. },
  234. "out": {
  235. "$serviceContractMap": "=_result",
  236. "$serviceContractMapStr": "=_result",
  237. "/Process/Specs/ServiceContractMap.json": "=_result"
  238. },
  239. "next": "RETURN"
  240. },
  241. {
  242. "id": "LLM_GenQualityGateSpec",
  243. "meta": {
  244. "title": "Agent-700 QualityGateSpec"
  245. },
  246. "in": {
  247. "stream": true,
  248. "docs": [
  249. "1",
  250. "109",
  251. "97"
  252. ],
  253. "max_tokens": 8192,
  254. "messages": [
  255. {
  256. "role": "user",
  257. "content": "IntentSpec:"
  258. },
  259. {
  260. "role": "user",
  261. "content": "=$intentSpecStr"
  262. },
  263. {
  264. "role": "user",
  265. "content": "DomainSchema:"
  266. },
  267. {
  268. "role": "user",
  269. "content": "=$domainSchemaStr"
  270. },
  271. {
  272. "role": "user",
  273. "content": "Generate Process/Specs/QualityGateSpec.json. Include spec integrity and VL code safety gate rules. Output ONLY valid JSON."
  274. }
  275. ],
  276. "output_config": {
  277. "format": {
  278. "type": "json_object"
  279. }
  280. }
  281. },
  282. "out": {
  283. "$qualityGateSpec": "=_result",
  284. "/Process/Specs/QualityGateSpec.json": "=_result"
  285. },
  286. "next": "RETURN"
  287. },
  288. {
  289. "id": "LLM_GenUIContractMap",
  290. "meta": {
  291. "title": "Agent-400 UIContractMap"
  292. },
  293. "in": {
  294. "stream": true,
  295. "docs": [
  296. "1",
  297. "109",
  298. "94"
  299. ],
  300. "max_tokens": 16000,
  301. "messages": [
  302. {
  303. "role": "user",
  304. "content": "IntentSpec:"
  305. },
  306. {
  307. "role": "user",
  308. "content": "=$intentSpecStr"
  309. },
  310. {
  311. "role": "user",
  312. "content": "DomainSchema:"
  313. },
  314. {
  315. "role": "user",
  316. "content": "=$domainSchemaStr"
  317. },
  318. {
  319. "role": "user",
  320. "content": "ServiceContractMap:"
  321. },
  322. {
  323. "role": "user",
  324. "content": "=$serviceContractMapStr"
  325. },
  326. {
  327. "role": "user",
  328. "content": "Generate Process/Specs/UIContractMap.json. Enforce section cohesion, event wiring completeness, and app/section/component boundaries. Output ONLY valid JSON."
  329. }
  330. ],
  331. "output_config": {
  332. "format": {
  333. "type": "json_object"
  334. }
  335. }
  336. },
  337. "out": {
  338. "$uiContractMap": "=_result",
  339. "$uiContractMapStr": "=_result",
  340. "/Process/Specs/UIContractMap.json": "=_result"
  341. },
  342. "next": "Set_FanoutManifestGraph"
  343. },
  344. {
  345. "id": "Set_FanoutManifestGraph",
  346. "target": "$runState.phase",
  347. "value": "\"manifest_graph\"",
  348. "children": [
  349. "LLM_GenModuleManifest",
  350. "LLM_GenDependencyGraph"
  351. ],
  352. "next": "Set_320_SkipSpecValidation",
  353. "meta": {
  354. "title": "Parallel: ModuleManifest + DependencyGraph"
  355. }
  356. },
  357. {
  358. "id": "LLM_GenModuleManifest",
  359. "meta": {
  360. "title": "Agent-500 ModuleManifest"
  361. },
  362. "in": {
  363. "stream": true,
  364. "docs": [
  365. "1",
  366. "109",
  367. "95"
  368. ],
  369. "max_tokens": 8192,
  370. "messages": [
  371. {
  372. "role": "user",
  373. "content": "IntentSpec:"
  374. },
  375. {
  376. "role": "user",
  377. "content": "=$intentSpecStr"
  378. },
  379. {
  380. "role": "user",
  381. "content": "ServiceContractMap:"
  382. },
  383. {
  384. "role": "user",
  385. "content": "=$serviceContractMapStr"
  386. },
  387. {
  388. "role": "user",
  389. "content": "UIContractMap:"
  390. },
  391. {
  392. "role": "user",
  393. "content": "=$uiContractMapStr"
  394. },
  395. {
  396. "role": "user",
  397. "content": "Generate Process/Specs/ModuleManifest.json. REQUIRED top-level fields: databaseFile({path,name}), themeFile({path,name}), serviceFiles([{path,name,domainId}]), componentFiles([{path,name,componentId}]), sectionFiles([{path,name,sectionId}]), appFiles([{path,name,appId}]). CRITICAL naming rules: databaseFile.path MUST be Database/<ProjectName>.vdb and themeFile.path MUST be Theme/Theme.vth. Every service/component/section/app file must use its exact final path. Paths must be relative. Output ONLY valid JSON."
  398. }
  399. ],
  400. "output_config": {
  401. "format": {
  402. "type": "json_object"
  403. }
  404. }
  405. },
  406. "out": {
  407. "$moduleManifest": "=_result",
  408. "$moduleManifestStr": "=_result",
  409. "/Process/Specs/ModuleManifest.json": "=_result"
  410. },
  411. "next": "RETURN"
  412. },
  413. {
  414. "id": "LLM_GenDependencyGraph",
  415. "meta": {
  416. "title": "Agent-600 DependencyGraph"
  417. },
  418. "in": {
  419. "stream": true,
  420. "docs": [
  421. "109",
  422. "96"
  423. ],
  424. "max_tokens": 8192,
  425. "messages": [
  426. {
  427. "role": "user",
  428. "content": "ServiceContractMap:"
  429. },
  430. {
  431. "role": "user",
  432. "content": "=$serviceContractMapStr"
  433. },
  434. {
  435. "role": "user",
  436. "content": "UIContractMap:"
  437. },
  438. {
  439. "role": "user",
  440. "content": "=$uiContractMapStr"
  441. },
  442. {
  443. "role": "user",
  444. "content": "Generate Process/Specs/DependencyGraph.json. Build accurate module/service/state dependency edges. Output ONLY valid JSON."
  445. }
  446. ],
  447. "output_config": {
  448. "format": {
  449. "type": "json_object"
  450. }
  451. }
  452. },
  453. "out": {
  454. "$dependencyGraph": "=_result",
  455. "/Process/Specs/DependencyGraph.json": "=_result"
  456. },
  457. "next": "RETURN"
  458. },
  459. {
  460. "id": "Set_320_SkipSpecValidation",
  461. "meta": {
  462. "title": "Skip spec validation (generation-only mode)"
  463. },
  464. "target": "$specValidation",
  465. "value": "={\"success\":true,\"skipped\":true,\"reason\":\"validation disabled\"}",
  466. "next": "LLM_BuildExecutionPlan"
  467. },
  468. {
  469. "id": "LLM_BuildExecutionPlan",
  470. "meta": {
  471. "title": "Build ExecutionPlan"
  472. },
  473. "in": {
  474. "stream": true,
  475. "docs": [
  476. "109",
  477. "98"
  478. ],
  479. "max_tokens": 8192,
  480. "messages": [
  481. {
  482. "role": "user",
  483. "content": "ModuleManifest:"
  484. },
  485. {
  486. "role": "user",
  487. "content": "=$moduleManifestStr"
  488. },
  489. {
  490. "role": "user",
  491. "content": "DependencyGraph:"
  492. },
  493. {
  494. "role": "user",
  495. "content": "=$dependencyGraph"
  496. },
  497. {
  498. "role": "user",
  499. "content": "QualityGateSpec:"
  500. },
  501. {
  502. "role": "user",
  503. "content": "=$qualityGateSpec"
  504. },
  505. {
  506. "role": "user",
  507. "content": "Generate Process/Run/ExecutionPlan.json. Build DAG tasks and parallel groups from module dependencies. Output ONLY valid JSON."
  508. }
  509. ],
  510. "output_config": {
  511. "format": {
  512. "type": "json_object"
  513. }
  514. }
  515. },
  516. "out": {
  517. "$executionPlan": "=_result",
  518. "/Process/Run/ExecutionPlan.json": "=_result"
  519. },
  520. "next": "Set_GenerationStart"
  521. },
  522. {
  523. "id": "Set_GenerationStart",
  524. "target": "$runState.phase",
  525. "value": "\"generation\"",
  526. "children": [
  527. "LLM_GenDatabase",
  528. "SeedTheme_GenTheme",
  529. "Loop_GenServiceDomains",
  530. "Loop_GenComponents",
  531. "Loop_GenSections",
  532. "Loop_GenApps"
  533. ],
  534. "next": "Set_560_SkipCodeValidation",
  535. "meta": {
  536. "title": "Code Generation Fanout (parallel)"
  537. }
  538. },
  539. {
  540. "id": "LLM_GenDatabase",
  541. "meta": {
  542. "title": "Generate .vdb Database"
  543. },
  544. "in": {
  545. "stream": true,
  546. "docs": [
  547. "1",
  548. "109",
  549. "100"
  550. ],
  551. "max_tokens": 16000,
  552. "messages": [
  553. {
  554. "role": "user",
  555. "content": "DomainSchema:"
  556. },
  557. {
  558. "role": "user",
  559. "content": "=$domainSchemaStr"
  560. },
  561. {
  562. "role": "user",
  563. "content": "ModuleManifest database file:"
  564. },
  565. {
  566. "role": "user",
  567. "content": "=$moduleManifest.databaseFile"
  568. },
  569. {
  570. "role": "user",
  571. "content": "Generate complete VL .vdb source code. Output ONLY VL source code, no markdown fences."
  572. }
  573. ]
  574. },
  575. "out": {
  576. "$vdbCode": "=_result",
  577. "/{$moduleManifest.databaseFile.path}": "=_result"
  578. },
  579. "onError": "skip",
  580. "next": "RETURN"
  581. },
  582. {
  583. "id": "SeedTheme_GenTheme",
  584. "meta": {
  585. "title": "Seed default Theme/Theme.vth"
  586. },
  587. "in": {
  588. "path": "Theme/Theme.vth"
  589. },
  590. "out": {
  591. "$vthCode": "=_result",
  592. "/{$moduleManifest.themeFile.path || 'Theme/Theme.vth'}": "=_result"
  593. },
  594. "next": "RETURN"
  595. },
  596. {
  597. "id": "Loop_GenServiceDomains",
  598. "meta": {
  599. "title": "Generate all .vs (parallel)"
  600. },
  601. "mode": "parallel",
  602. "source": "=$moduleManifest.serviceFiles",
  603. "children": [
  604. "LLM_GenServiceDomainFile"
  605. ],
  606. "next": "RETURN"
  607. },
  608. {
  609. "id": "LLM_GenServiceDomainFile",
  610. "meta": {
  611. "title": "Generate .vs Service"
  612. },
  613. "in": {
  614. "stream": true,
  615. "docs": [
  616. "1",
  617. "109",
  618. "102"
  619. ],
  620. "max_tokens": 16000,
  621. "messages": [
  622. {
  623. "role": "user",
  624. "content": "Target file:"
  625. },
  626. {
  627. "role": "user",
  628. "content": "=_item"
  629. },
  630. {
  631. "role": "user",
  632. "content": "ServiceContractMap:"
  633. },
  634. {
  635. "role": "user",
  636. "content": "=$serviceContractMapStr"
  637. },
  638. {
  639. "role": "user",
  640. "content": "DomainSchema:"
  641. },
  642. {
  643. "role": "user",
  644. "content": "=$domainSchemaStr"
  645. },
  646. {
  647. "role": "user",
  648. "content": "Generate complete VL .vs source code for this service domain. Output ONLY VL source code, no markdown fences."
  649. }
  650. ]
  651. },
  652. "out": {
  653. "/{_item.path}": "=_result"
  654. },
  655. "onError": "skip",
  656. "next": "RETURN"
  657. },
  658. {
  659. "id": "Loop_GenComponents",
  660. "meta": {
  661. "title": "Generate all .cp (parallel)"
  662. },
  663. "mode": "parallel",
  664. "source": "=$moduleManifest.componentFiles",
  665. "children": [
  666. "LLM_GenComponentFile"
  667. ],
  668. "next": "RETURN"
  669. },
  670. {
  671. "id": "LLM_GenComponentFile",
  672. "meta": {
  673. "title": "Generate .cp Component"
  674. },
  675. "in": {
  676. "stream": true,
  677. "docs": [
  678. "1",
  679. "109",
  680. "103"
  681. ],
  682. "max_tokens": 16000,
  683. "messages": [
  684. {
  685. "role": "user",
  686. "content": "Target file:"
  687. },
  688. {
  689. "role": "user",
  690. "content": "=_item"
  691. },
  692. {
  693. "role": "user",
  694. "content": "UIContractMap:"
  695. },
  696. {
  697. "role": "user",
  698. "content": "=$uiContractMapStr"
  699. },
  700. {
  701. "role": "user",
  702. "content": "IntentSpec:"
  703. },
  704. {
  705. "role": "user",
  706. "content": "=$intentSpecStr"
  707. },
  708. {
  709. "role": "user",
  710. "content": "Generate complete VL .cp source code. Pure UI only, no service calls. Output ONLY VL source code, no markdown fences."
  711. }
  712. ]
  713. },
  714. "out": {
  715. "/{_item.path}": "=_result"
  716. },
  717. "onError": "skip",
  718. "next": "RETURN"
  719. },
  720. {
  721. "id": "Loop_GenSections",
  722. "meta": {
  723. "title": "Generate all .sc (parallel)"
  724. },
  725. "mode": "parallel",
  726. "source": "=$moduleManifest.sectionFiles",
  727. "children": [
  728. "LLM_GenSectionFile"
  729. ],
  730. "next": "RETURN"
  731. },
  732. {
  733. "id": "LLM_GenSectionFile",
  734. "meta": {
  735. "title": "Generate .sc Section"
  736. },
  737. "in": {
  738. "stream": true,
  739. "docs": [
  740. "1",
  741. "109",
  742. "104"
  743. ],
  744. "max_tokens": 16000,
  745. "messages": [
  746. {
  747. "role": "user",
  748. "content": "Target file:"
  749. },
  750. {
  751. "role": "user",
  752. "content": "=_item"
  753. },
  754. {
  755. "role": "user",
  756. "content": "UIContractMap:"
  757. },
  758. {
  759. "role": "user",
  760. "content": "=$uiContractMapStr"
  761. },
  762. {
  763. "role": "user",
  764. "content": "ServiceContractMap:"
  765. },
  766. {
  767. "role": "user",
  768. "content": "=$serviceContractMapStr"
  769. },
  770. {
  771. "role": "user",
  772. "content": "DomainSchema:"
  773. },
  774. {
  775. "role": "user",
  776. "content": "=$domainSchemaStr"
  777. },
  778. {
  779. "role": "user",
  780. "content": "Generate complete VL .sc source code. Section handles business logic and service calls. Output ONLY VL source code, no markdown fences."
  781. }
  782. ]
  783. },
  784. "out": {
  785. "/{_item.path}": "=_result"
  786. },
  787. "onError": "skip",
  788. "next": "RETURN"
  789. },
  790. {
  791. "id": "Loop_GenApps",
  792. "meta": {
  793. "title": "Generate all .vx (parallel)"
  794. },
  795. "mode": "parallel",
  796. "source": "=$moduleManifest.appFiles",
  797. "children": [
  798. "LLM_GenAppFile"
  799. ],
  800. "next": "RETURN"
  801. },
  802. {
  803. "id": "LLM_GenAppFile",
  804. "meta": {
  805. "title": "Generate .vx App"
  806. },
  807. "in": {
  808. "stream": true,
  809. "docs": [
  810. "1",
  811. "109",
  812. "105"
  813. ],
  814. "max_tokens": 16000,
  815. "messages": [
  816. {
  817. "role": "user",
  818. "content": "Target file:"
  819. },
  820. {
  821. "role": "user",
  822. "content": "=_item"
  823. },
  824. {
  825. "role": "user",
  826. "content": "UIContractMap:"
  827. },
  828. {
  829. "role": "user",
  830. "content": "=$uiContractMapStr"
  831. },
  832. {
  833. "role": "user",
  834. "content": "Generate complete VL .vx source code. App controls routing, section orchestration, and app-level state/event wiring. Output ONLY VL source code, no markdown fences."
  835. }
  836. ]
  837. },
  838. "out": {
  839. "/{_item.path}": "=_result"
  840. },
  841. "onError": "skip",
  842. "next": "RETURN"
  843. },
  844. {
  845. "id": "Set_560_SkipCodeValidation",
  846. "meta": {
  847. "title": "Skip generated-code validation (generation-only mode)"
  848. },
  849. "target": "$codeValidation",
  850. "value": "={\"success\":true,\"skipped\":true,\"reason\":\"validation disabled\"}",
  851. "next": "Stop_Success"
  852. },
  853. {
  854. "id": "Stop_Success",
  855. "meta": {
  856. "title": "Code Generation Complete"
  857. }
  858. }
  859. ]
  860. }