create-leafmesh 2.1.1__tar.gz → 2.2.4__tar.gz

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 (480) hide show
  1. {create_leafmesh-2.1.1 → create_leafmesh-2.2.4}/PKG-INFO +2 -1
  2. {create_leafmesh-2.1.1 → create_leafmesh-2.2.4}/create_leafmesh/__init__.py +1 -1
  3. create_leafmesh-2.2.4/create_leafmesh/cli.py +559 -0
  4. create_leafmesh-2.2.4/create_leafmesh/create.py +403 -0
  5. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/README.md +24 -0
  6. create_leafmesh-2.2.4/create_leafmesh/templates/_inspire/_REFERENCE_ONLY.md +48 -0
  7. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/agency/greeter_agent.py +14 -2
  8. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/agency/processor_agent.py +33 -3
  9. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/agency/researcher_agent.py +15 -0
  10. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/configs/config.yaml +176 -22
  11. create_leafmesh-2.2.4/create_leafmesh/templates/_inspire/skills/data-handling/SKILL.md +39 -0
  12. create_leafmesh-2.2.4/create_leafmesh/templates/_inspire/skills/data-handling/examples.json +49 -0
  13. create_leafmesh-2.2.4/create_leafmesh/templates/_inspire/skills/tone-rules.md +39 -0
  14. create_leafmesh-2.2.4/create_leafmesh/templates/_registry.yaml +390 -0
  15. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/Dockerfile +9 -0
  16. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/README.md +11 -0
  17. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/_prompts.json +53 -0
  18. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/agency/__init__.py +1 -0
  19. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/agency/_shared/__init__.py +1 -0
  20. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/agency/_shared/audit_logger.py +47 -0
  21. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/agency/compliance_reviewer_agent.py +48 -0
  22. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/agency/past_proposal_retriever_agent.py +30 -0
  23. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/agency/pricing_configurator_agent.py +32 -0
  24. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/agency/rfp_ingester_agent.py +31 -0
  25. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/agency/section_drafter_agent.py +24 -0
  26. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/agency/win_loss_analyzer_agent.py +39 -0
  27. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/configs/config.yaml +471 -0
  28. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/docker-compose.yml +27 -0
  29. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/dockerignore +13 -0
  30. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/env +12 -0
  31. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/gitignore +15 -0
  32. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/main.py +45 -0
  33. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/pytest.ini +5 -0
  34. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/requirements-dev.txt +3 -0
  35. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/requirements.txt +3 -0
  36. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/tests/__init__.py +0 -0
  37. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/tests/conftest.py +20 -0
  38. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/tests/test_agent_logic.py +62 -0
  39. create_leafmesh-2.2.4/create_leafmesh/templates/bd-proposals/tests/test_config_shape.py +38 -0
  40. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/Dockerfile +9 -0
  41. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/README.md +12 -0
  42. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/_prompts.json +53 -0
  43. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/agency/__init__.py +1 -0
  44. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/agency/_shared/__init__.py +1 -0
  45. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/agency/_shared/audit_logger.py +47 -0
  46. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/agency/allocation_planner_agent.py +32 -0
  47. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/agency/capacity_forecaster_agent.py +27 -0
  48. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/agency/career_path_recommender_agent.py +54 -0
  49. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/agency/idle_detector_agent.py +19 -0
  50. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/agency/reskilling_recommender_agent.py +20 -0
  51. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/agency/skills_matcher_agent.py +44 -0
  52. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/agency/weekly_bench_sweep_agent.py +14 -0
  53. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/configs/config.yaml +441 -0
  54. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/docker-compose.yml +27 -0
  55. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/dockerignore +13 -0
  56. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/env +13 -0
  57. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/gitignore +15 -0
  58. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/main.py +45 -0
  59. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/pytest.ini +5 -0
  60. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/requirements-dev.txt +3 -0
  61. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/requirements.txt +3 -0
  62. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/tests/__init__.py +0 -0
  63. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/tests/conftest.py +20 -0
  64. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/tests/test_agent_logic.py +31 -0
  65. create_leafmesh-2.2.4/create_leafmesh/templates/bench-management/tests/test_config_shape.py +43 -0
  66. {create_leafmesh-2.1.1 → create_leafmesh-2.2.4}/create_leafmesh/templates/claude_skills/leafmesh/SKILL.md +510 -5
  67. {create_leafmesh-2.1.1 → create_leafmesh-2.2.4}/create_leafmesh/templates/claude_skills/leafmesh/agent-config-fields.md +283 -3
  68. {create_leafmesh-2.1.1 → create_leafmesh-2.2.4}/create_leafmesh/templates/claude_skills/leafmesh/examples.md +217 -0
  69. {create_leafmesh-2.1.1 → create_leafmesh-2.2.4}/create_leafmesh/templates/claude_skills/leafmesh/reference.md +105 -14
  70. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/Dockerfile +17 -0
  71. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/README.md +188 -0
  72. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/_prompts.json +53 -0
  73. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/agency/__init__.py +6 -0
  74. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/agency/_shared/__init__.py +1 -0
  75. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/agency/_shared/audit_logger.py +72 -0
  76. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/agency/exec_alignment_agent.py +69 -0
  77. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/agency/health_score_agent.py +85 -0
  78. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/agency/health_score_explainer_agent.py +50 -0
  79. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/agency/health_sweep_orchestrator_agent.py +38 -0
  80. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/agency/playbook_trigger_agent.py +86 -0
  81. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/agency/qbr_drafter_agent.py +57 -0
  82. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/agency/renewal_forecaster_agent.py +79 -0
  83. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/agency/renewal_window_monitor_agent.py +44 -0
  84. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/agency/risk_detector_agent.py +110 -0
  85. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/agency/save_play_agent.py +74 -0
  86. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/configs/config.yaml +1115 -0
  87. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/docker-compose.yml +34 -0
  88. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/dockerignore +14 -0
  89. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/env +17 -0
  90. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/gitignore +15 -0
  91. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/main.py +116 -0
  92. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/pytest.ini +6 -0
  93. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/requirements-dev.txt +4 -0
  94. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/requirements.txt +4 -0
  95. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/tests/__init__.py +0 -0
  96. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/tests/conftest.py +29 -0
  97. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/tests/test_agent_logic.py +220 -0
  98. create_leafmesh-2.2.4/create_leafmesh/templates/customer-success/tests/test_config_shape.py +160 -0
  99. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/Dockerfile +9 -0
  100. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/README.md +52 -0
  101. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/_prompts.json +53 -0
  102. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/agency/__init__.py +1 -0
  103. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/agency/_shared/__init__.py +1 -0
  104. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/agency/_shared/audit_logger.py +53 -0
  105. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/agency/kb_gap_filler_agent.py +46 -0
  106. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/agency/knowledge_agent.py +47 -0
  107. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/agency/qa_agent.py +74 -0
  108. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/agency/response_agent.py +41 -0
  109. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/agency/sentiment_agent.py +48 -0
  110. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/agency/sla_watchdog_agent.py +24 -0
  111. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/agency/ticket_intake_agent.py +49 -0
  112. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/agency/triage_agent.py +82 -0
  113. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/configs/config.yaml +748 -0
  114. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/docker-compose.yml +34 -0
  115. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/dockerignore +13 -0
  116. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/env +12 -0
  117. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/gitignore +15 -0
  118. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/main.py +58 -0
  119. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/pytest.ini +5 -0
  120. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/requirements-dev.txt +3 -0
  121. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/requirements.txt +3 -0
  122. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/tests/__init__.py +0 -0
  123. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/tests/conftest.py +28 -0
  124. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/tests/test_agent_logic.py +124 -0
  125. create_leafmesh-2.2.4/create_leafmesh/templates/customer-support/tests/test_config_shape.py +96 -0
  126. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/Dockerfile +9 -0
  127. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/README.md +47 -0
  128. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/_prompts.json +53 -0
  129. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/agency/__init__.py +1 -0
  130. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/agency/_shared/__init__.py +1 -0
  131. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/agency/_shared/audit_logger.py +53 -0
  132. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/agency/code_reviewer_agent.py +71 -0
  133. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/agency/junior_engineer_agent.py +50 -0
  134. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/agency/oncall_alert_triager_agent.py +44 -0
  135. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/agency/refactor_agent.py +33 -0
  136. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/agency/security_scanner_agent.py +34 -0
  137. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/agency/spec_agent.py +59 -0
  138. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/agency/test_engineer_agent.py +47 -0
  139. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/configs/config.yaml +628 -0
  140. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/docker-compose.yml +34 -0
  141. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/dockerignore +13 -0
  142. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/env +13 -0
  143. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/gitignore +15 -0
  144. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/main.py +58 -0
  145. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/pytest.ini +5 -0
  146. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/requirements-dev.txt +3 -0
  147. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/requirements.txt +3 -0
  148. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/tests/__init__.py +0 -0
  149. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/tests/conftest.py +28 -0
  150. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/tests/test_agent_logic.py +92 -0
  151. create_leafmesh-2.2.4/create_leafmesh/templates/engineering-sdlc/tests/test_config_shape.py +70 -0
  152. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/Dockerfile +17 -0
  153. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/README.md +188 -0
  154. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/_prompts.json +53 -0
  155. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/agency/__init__.py +10 -0
  156. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/agency/_shared/__init__.py +14 -0
  157. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/agency/_shared/audit_logger.py +91 -0
  158. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/agency/_shared/erp_poster.py +61 -0
  159. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/agency/approval_router_agent.py +83 -0
  160. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/agency/close_cycle_orchestrator_agent.py +46 -0
  161. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/agency/erp_poster_agent.py +32 -0
  162. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/agency/exception_drafter_agent.py +56 -0
  163. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/agency/extraction_agent.py +80 -0
  164. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/agency/fraud_check_agent.py +81 -0
  165. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/agency/gl_coding_agent.py +53 -0
  166. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/agency/invoice_intake_agent.py +75 -0
  167. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/agency/po_match_agent.py +73 -0
  168. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/agency/reconciliation_agent.py +59 -0
  169. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/agency/vendor_query_handler_agent.py +77 -0
  170. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/configs/config.yaml +1035 -0
  171. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/docker-compose.yml +34 -0
  172. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/dockerignore +14 -0
  173. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/env +37 -0
  174. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/gitignore +15 -0
  175. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/main.py +152 -0
  176. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/pytest.ini +6 -0
  177. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/requirements-dev.txt +6 -0
  178. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/requirements.txt +7 -0
  179. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/tests/__init__.py +0 -0
  180. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/tests/conftest.py +31 -0
  181. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/tests/test_agent_logic.py +171 -0
  182. create_leafmesh-2.2.4/create_leafmesh/templates/finance-ops/tests/test_config_shape.py +192 -0
  183. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/Dockerfile +9 -0
  184. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/README.md +11 -0
  185. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/_prompts.json +53 -0
  186. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/agency/__init__.py +1 -0
  187. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/agency/_shared/__init__.py +1 -0
  188. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/agency/_shared/audit_logger.py +47 -0
  189. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/agency/commitment_utilisation_agent.py +35 -0
  190. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/agency/cost_anomaly_agent.py +46 -0
  191. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/agency/cost_tuner_agent.py +20 -0
  192. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/agency/iac_drift_agent.py +21 -0
  193. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/agency/reserved_capacity_planner_agent.py +18 -0
  194. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/agency/right_sizer_agent.py +33 -0
  195. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/configs/config.yaml +390 -0
  196. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/docker-compose.yml +27 -0
  197. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/dockerignore +13 -0
  198. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/env +12 -0
  199. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/gitignore +15 -0
  200. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/main.py +45 -0
  201. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/pytest.ini +5 -0
  202. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/requirements-dev.txt +3 -0
  203. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/requirements.txt +3 -0
  204. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/tests/__init__.py +0 -0
  205. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/tests/conftest.py +20 -0
  206. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/tests/test_agent_logic.py +51 -0
  207. create_leafmesh-2.2.4/create_leafmesh/templates/infra-cost-ops/tests/test_config_shape.py +40 -0
  208. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/Dockerfile +17 -0
  209. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/README.md +188 -0
  210. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/_prompts.json +53 -0
  211. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/agency/__init__.py +1 -0
  212. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/agency/_shared/__init__.py +1 -0
  213. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/agency/_shared/audit_logger.py +72 -0
  214. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/agency/attribution_agent.py +55 -0
  215. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/agency/audience_intelligence_agent.py +48 -0
  216. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/agency/brief_intake_agent.py +42 -0
  217. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/agency/campaign_orchestrator_agent.py +39 -0
  218. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/agency/campaign_strategist_agent.py +62 -0
  219. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/agency/competitor_intel_agent.py +54 -0
  220. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/agency/compliance_reviewer_agent.py +73 -0
  221. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/agency/copywriter_agent.py +52 -0
  222. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/agency/crisis_responder_agent.py +76 -0
  223. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/agency/marketing_audit_logger_agent.py +71 -0
  224. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/agency/performance_analyzer_agent.py +52 -0
  225. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/agency/publisher_agent.py +57 -0
  226. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/agency/visual_briefer_agent.py +44 -0
  227. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/configs/config.yaml +629 -0
  228. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/docker-compose.yml +34 -0
  229. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/dockerignore +14 -0
  230. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/env +17 -0
  231. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/gitignore +15 -0
  232. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/main.py +116 -0
  233. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/pytest.ini +6 -0
  234. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/requirements-dev.txt +4 -0
  235. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/requirements.txt +4 -0
  236. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/tests/__init__.py +0 -0
  237. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/tests/conftest.py +29 -0
  238. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/tests/test_agent_logic.py +173 -0
  239. create_leafmesh-2.2.4/create_leafmesh/templates/marketing-ops/tests/test_config_shape.py +150 -0
  240. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/Dockerfile +9 -0
  241. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/README.md +17 -0
  242. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/_prompts.json +53 -0
  243. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/agency/__init__.py +1 -0
  244. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/agency/_shared/__init__.py +1 -0
  245. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/agency/_shared/audit_logger.py +53 -0
  246. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/agency/condition_sensor_agent.py +27 -0
  247. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/agency/dispatcher_agent.py +20 -0
  248. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/agency/failure_predictor_agent.py +55 -0
  249. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/agency/parts_requestor_agent.py +22 -0
  250. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/agency/recurrence_watchdog_agent.py +15 -0
  251. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/agency/spare_parts_forecaster_agent.py +40 -0
  252. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/agency/work_order_scheduler_agent.py +42 -0
  253. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/configs/config.yaml +415 -0
  254. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/docker-compose.yml +34 -0
  255. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/dockerignore +13 -0
  256. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/env +12 -0
  257. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/gitignore +15 -0
  258. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/main.py +57 -0
  259. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/pytest.ini +5 -0
  260. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/requirements-dev.txt +3 -0
  261. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/requirements.txt +3 -0
  262. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/tests/__init__.py +0 -0
  263. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/tests/conftest.py +22 -0
  264. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/tests/test_agent_logic.py +41 -0
  265. create_leafmesh-2.2.4/create_leafmesh/templates/predictive-maintenance/tests/test_config_shape.py +41 -0
  266. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/Dockerfile +9 -0
  267. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/README.md +34 -0
  268. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/_prompts.json +53 -0
  269. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/agency/__init__.py +1 -0
  270. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/agency/_shared/__init__.py +1 -0
  271. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/agency/_shared/audit_logger.py +53 -0
  272. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/agency/capacity_model_agent.py +36 -0
  273. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/agency/constraint_flagger_agent.py +54 -0
  274. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/agency/demand_sensor_agent.py +33 -0
  275. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/agency/release_agent.py +22 -0
  276. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/agency/rolling_reopt_orchestrator_agent.py +16 -0
  277. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/agency/scheduler_agent.py +56 -0
  278. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/agency/supplier_signal_agent.py +49 -0
  279. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/configs/config.yaml +496 -0
  280. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/docker-compose.yml +34 -0
  281. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/dockerignore +13 -0
  282. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/env +12 -0
  283. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/gitignore +15 -0
  284. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/main.py +57 -0
  285. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/pytest.ini +5 -0
  286. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/requirements-dev.txt +3 -0
  287. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/requirements.txt +3 -0
  288. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/tests/__init__.py +0 -0
  289. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/tests/conftest.py +28 -0
  290. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/tests/test_agent_logic.py +45 -0
  291. create_leafmesh-2.2.4/create_leafmesh/templates/production-planning/tests/test_config_shape.py +57 -0
  292. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/Dockerfile +9 -0
  293. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/README.md +10 -0
  294. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/_prompts.json +53 -0
  295. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/agency/__init__.py +1 -0
  296. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/agency/_shared/__init__.py +1 -0
  297. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/agency/_shared/audit_logger.py +52 -0
  298. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/agency/batch_traceability_agent.py +54 -0
  299. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/agency/corrective_action_drafter_agent.py +32 -0
  300. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/agency/defect_detector_agent.py +61 -0
  301. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/agency/inspection_intake_agent.py +32 -0
  302. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/agency/root_cause_analyzer_agent.py +48 -0
  303. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/agency/spc_monitor_agent.py +16 -0
  304. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/configs/config.yaml +438 -0
  305. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/docker-compose.yml +34 -0
  306. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/dockerignore +13 -0
  307. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/env +12 -0
  308. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/gitignore +15 -0
  309. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/main.py +45 -0
  310. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/pytest.ini +5 -0
  311. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/requirements-dev.txt +3 -0
  312. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/requirements.txt +3 -0
  313. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/tests/__init__.py +0 -0
  314. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/tests/conftest.py +22 -0
  315. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/tests/test_agent_logic.py +56 -0
  316. create_leafmesh-2.2.4/create_leafmesh/templates/quality-yield/tests/test_config_shape.py +46 -0
  317. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/Dockerfile +9 -0
  318. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/README.md +11 -0
  319. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/_prompts.json +53 -0
  320. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/agency/__init__.py +1 -0
  321. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/agency/_shared/__init__.py +1 -0
  322. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/agency/_shared/audit_logger.py +47 -0
  323. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/agency/approval_router_agent.py +39 -0
  324. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/agency/bundle_recommender_agent.py +44 -0
  325. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/agency/competitor_watch_agent.py +11 -0
  326. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/agency/cost_calculator_agent.py +33 -0
  327. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/agency/discount_policy_agent.py +51 -0
  328. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/agency/quote_drafter_agent.py +24 -0
  329. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/agency/rfq_ingester_agent.py +28 -0
  330. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/configs/config.yaml +471 -0
  331. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/docker-compose.yml +27 -0
  332. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/dockerignore +13 -0
  333. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/env +16 -0
  334. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/gitignore +15 -0
  335. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/main.py +45 -0
  336. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/pytest.ini +5 -0
  337. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/requirements-dev.txt +3 -0
  338. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/requirements.txt +3 -0
  339. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/tests/__init__.py +0 -0
  340. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/tests/conftest.py +20 -0
  341. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/tests/test_agent_logic.py +42 -0
  342. create_leafmesh-2.2.4/create_leafmesh/templates/quote-to-cash/tests/test_config_shape.py +44 -0
  343. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/Dockerfile +9 -0
  344. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/README.md +11 -0
  345. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/_prompts.json +53 -0
  346. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/agency/__init__.py +1 -0
  347. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/agency/_shared/__init__.py +1 -0
  348. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/agency/_shared/audit_logger.py +47 -0
  349. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/agency/offer_drafter_agent.py +32 -0
  350. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/agency/outreach_drafter_agent.py +24 -0
  351. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/agency/pipeline_health_agent.py +14 -0
  352. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/agency/rejection_letter_drafter_agent.py +55 -0
  353. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/agency/req_intake_agent.py +28 -0
  354. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/agency/resume_screener_agent.py +43 -0
  355. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/agency/scheduling_agent.py +14 -0
  356. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/agency/sourcing_agent.py +14 -0
  357. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/configs/config.yaml +496 -0
  358. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/docker-compose.yml +27 -0
  359. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/dockerignore +13 -0
  360. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/env +12 -0
  361. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/gitignore +15 -0
  362. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/main.py +45 -0
  363. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/pytest.ini +5 -0
  364. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/requirements-dev.txt +3 -0
  365. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/requirements.txt +3 -0
  366. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/tests/__init__.py +0 -0
  367. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/tests/conftest.py +20 -0
  368. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/tests/test_agent_logic.py +21 -0
  369. create_leafmesh-2.2.4/create_leafmesh/templates/recruiting-ops/tests/test_config_shape.py +41 -0
  370. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/Dockerfile +9 -0
  371. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/README.md +12 -0
  372. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/_prompts.json +53 -0
  373. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/agency/__init__.py +1 -0
  374. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/agency/_shared/__init__.py +1 -0
  375. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/agency/_shared/audit_logger.py +52 -0
  376. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/agency/lead_intake_agent.py +45 -0
  377. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/agency/lead_revival_agent.py +45 -0
  378. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/agency/lead_scorer_agent.py +65 -0
  379. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/agency/personalisation_agent.py +36 -0
  380. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/agency/pipeline_health_agent.py +18 -0
  381. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/agency/sequence_orchestrator_agent.py +54 -0
  382. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/configs/config.yaml +452 -0
  383. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/docker-compose.yml +34 -0
  384. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/dockerignore +13 -0
  385. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/env +12 -0
  386. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/gitignore +15 -0
  387. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/main.py +45 -0
  388. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/pytest.ini +5 -0
  389. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/requirements-dev.txt +3 -0
  390. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/requirements.txt +3 -0
  391. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/tests/__init__.py +0 -0
  392. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/tests/conftest.py +20 -0
  393. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/tests/test_agent_logic.py +58 -0
  394. create_leafmesh-2.2.4/create_leafmesh/templates/sales-orchestration/tests/test_config_shape.py +40 -0
  395. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/Dockerfile +12 -0
  396. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/README.md +59 -0
  397. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/_prompts.json +53 -0
  398. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/agency/__init__.py +1 -0
  399. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/agency/_shared/__init__.py +1 -0
  400. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/agency/_shared/audit_logger.py +53 -0
  401. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/agency/analysis_agent.py +70 -0
  402. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/agency/brief_intake_agent.py +49 -0
  403. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/agency/citation_agent.py +63 -0
  404. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/agency/context_agent.py +44 -0
  405. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/agency/delivery_router_agent.py +42 -0
  406. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/agency/draft_agent.py +60 -0
  407. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/agency/engagement_status_drafter_agent.py +52 -0
  408. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/agency/qa_agent.py +67 -0
  409. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/agency/research_agent.py +54 -0
  410. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/agency/status_sweep_orchestrator_agent.py +31 -0
  411. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/configs/config.yaml +1065 -0
  412. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/docker-compose.yml +34 -0
  413. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/dockerignore +14 -0
  414. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/env +16 -0
  415. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/gitignore +15 -0
  416. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/main.py +67 -0
  417. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/pytest.ini +6 -0
  418. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/requirements-dev.txt +4 -0
  419. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/requirements.txt +3 -0
  420. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/tests/__init__.py +0 -0
  421. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/tests/conftest.py +28 -0
  422. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/tests/test_agent_logic.py +152 -0
  423. create_leafmesh-2.2.4/create_leafmesh/templates/services-delivery/tests/test_config_shape.py +137 -0
  424. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/Dockerfile +9 -0
  425. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/README.md +37 -0
  426. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/_prompts.json +53 -0
  427. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/agency/__init__.py +1 -0
  428. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/agency/_shared/__init__.py +1 -0
  429. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/agency/_shared/audit_logger.py +53 -0
  430. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/agency/allocation_agent.py +40 -0
  431. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/agency/carrier_selector_agent.py +66 -0
  432. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/agency/cycle_count_orchestrator_agent.py +22 -0
  433. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/agency/exception_agent.py +62 -0
  434. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/agency/humanoid_status_agent.py +24 -0
  435. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/agency/inspection_humanoid.py +19 -0
  436. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/agency/inventory_agent.py +29 -0
  437. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/agency/loader_humanoid.py +21 -0
  438. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/agency/packer_humanoid.py +20 -0
  439. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/agency/picker_humanoid.py +26 -0
  440. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/agency/returns_handler_agent.py +18 -0
  441. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/agency/routing_agent.py +24 -0
  442. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/configs/config.yaml +519 -0
  443. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/docker-compose.yml +34 -0
  444. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/dockerignore +13 -0
  445. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/env +12 -0
  446. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/gitignore +15 -0
  447. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/main.py +57 -0
  448. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/pytest.ini +5 -0
  449. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/requirements-dev.txt +3 -0
  450. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/requirements.txt +3 -0
  451. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/tests/__init__.py +0 -0
  452. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/tests/conftest.py +28 -0
  453. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/tests/test_agent_logic.py +32 -0
  454. create_leafmesh-2.2.4/create_leafmesh/templates/warehouse-supply-chain/tests/test_config_shape.py +53 -0
  455. {create_leafmesh-2.1.1 → create_leafmesh-2.2.4}/create_leafmesh.egg-info/PKG-INFO +2 -1
  456. create_leafmesh-2.2.4/create_leafmesh.egg-info/SOURCES.txt +475 -0
  457. create_leafmesh-2.2.4/create_leafmesh.egg-info/requires.txt +1 -0
  458. {create_leafmesh-2.1.1 → create_leafmesh-2.2.4}/pyproject.toml +4 -2
  459. create_leafmesh-2.1.1/create_leafmesh/cli.py +0 -252
  460. create_leafmesh-2.1.1/create_leafmesh/create.py +0 -106
  461. create_leafmesh-2.1.1/create_leafmesh.egg-info/SOURCES.txt +0 -33
  462. {create_leafmesh-2.1.1 → create_leafmesh-2.2.4}/README.md +0 -0
  463. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/Dockerfile +0 -0
  464. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/agency/__init__.py +0 -0
  465. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/agency/advisor_agent.py +0 -0
  466. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/agency/external_agents.py +0 -0
  467. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/agency/fallback_researcher_agent.py +0 -0
  468. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/agency/scheduler_agent.py +0 -0
  469. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/agency/tools.py +0 -0
  470. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/docker-compose.yml +0 -0
  471. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/dockerignore +0 -0
  472. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/env +0 -0
  473. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/gitignore +0 -0
  474. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/hitl_stub_receiver.py +0 -0
  475. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/main.py +0 -0
  476. {create_leafmesh-2.1.1/create_leafmesh/templates → create_leafmesh-2.2.4/create_leafmesh/templates/_inspire}/requirements.txt +0 -0
  477. {create_leafmesh-2.1.1 → create_leafmesh-2.2.4}/create_leafmesh.egg-info/dependency_links.txt +0 -0
  478. {create_leafmesh-2.1.1 → create_leafmesh-2.2.4}/create_leafmesh.egg-info/entry_points.txt +0 -0
  479. {create_leafmesh-2.1.1 → create_leafmesh-2.2.4}/create_leafmesh.egg-info/top_level.txt +0 -0
  480. {create_leafmesh-2.1.1 → create_leafmesh-2.2.4}/setup.cfg +0 -0
@@ -1,10 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: create-leafmesh
3
- Version: 2.1.1
3
+ Version: 2.2.4
4
4
  Summary: Project scaffolding tool for LeafMesh
5
5
  License-Expression: MIT
6
6
  Requires-Python: >=3.10
7
7
  Description-Content-Type: text/markdown
8
+ Requires-Dist: questionary<3,>=2.0
8
9
 
9
10
  # create-leafmesh
10
11
 
@@ -1,3 +1,3 @@
1
1
  """create-leafmesh — Project scaffolding tool for LeafMesh."""
2
2
 
3
- __version__ = "2.1.1"
3
+ __version__ = "2.2.4"
@@ -0,0 +1,559 @@
1
+ """CLI entry point for create-leafmesh."""
2
+
3
+ import argparse
4
+ import re
5
+ import sys
6
+ import time
7
+
8
+ from create_leafmesh import __version__
9
+ from create_leafmesh.create import (
10
+ create_project,
11
+ get_template,
12
+ get_template_prompts,
13
+ list_templates,
14
+ )
15
+
16
+ # ---------------------------------------------------------------------------
17
+ # ANSI helpers (graceful fallback on terminals that don't support color)
18
+ # ---------------------------------------------------------------------------
19
+ _CYAN = "\033[36m"
20
+ _GREEN = "\033[32m"
21
+ _WHITE = "\033[97m"
22
+ _DIM = "\033[2m"
23
+ _BOLD = "\033[1m"
24
+ _RESET = "\033[0m"
25
+
26
+ def _c(code: str, text: str) -> str:
27
+ """Wrap text in an ANSI code, reset after."""
28
+ return f"{code}{text}{_RESET}"
29
+
30
+
31
+ # ---------------------------------------------------------------------------
32
+ # ASCII art — block letters for LEAFMESH
33
+ # ---------------------------------------------------------------------------
34
+ BANNER = r"""
35
+ ██╗ ███████╗ █████╗ ███████╗███╗ ███╗███████╗███████╗██╗ ██╗
36
+ ██║ ██╔════╝██╔══██╗██╔════╝████╗ ████║██╔════╝██╔════╝██║ ██║
37
+ ██║ █████╗ ███████║█████╗ ██╔████╔██║█████╗ ███████╗███████║
38
+ ██║ ██╔══╝ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║██╔══██║
39
+ ███████╗███████╗██║ ██║██║ ██║ ╚═╝ ██║███████╗███████║██║ ██║
40
+ ╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝
41
+ """
42
+
43
+ def print_banner(version: str) -> None:
44
+ print()
45
+ print(_c(_CYAN, BANNER), end="")
46
+ pad = " " * 2
47
+ print(f"{pad} create-leafmesh {_c(_DIM, 'v' + version)} "
48
+ f"{_c(_DIM, 'Agent mesh scaffolding tool')}")
49
+ print(f"{pad} " + "-" * 55)
50
+ print()
51
+
52
+
53
+ # ---------------------------------------------------------------------------
54
+ # Step progress printer
55
+ # ---------------------------------------------------------------------------
56
+ def step(n: int, total: int, label: str, done: bool = False) -> None:
57
+ status = _c(_GREEN, "[ OK ]") if done else _c(_DIM, "[ ]")
58
+ print(f" {status} [{n}/{total}] {label}")
59
+
60
+
61
+ def step_done(n: int, total: int, label: str) -> None:
62
+ print(f"\033[1A\r {_c(_GREEN, '[ OK ]')} [{n}/{total}] {label}")
63
+
64
+
65
+ # ---------------------------------------------------------------------------
66
+ # Next-steps box
67
+ # ---------------------------------------------------------------------------
68
+ def print_success_box(project_name: str, template_slug: str, missing_keys: list[str]) -> None:
69
+ w = 58
70
+
71
+ def row(text: str = "") -> str:
72
+ return f" | {text:<{w - 4}}|"
73
+
74
+ def div() -> str:
75
+ return " +" + "-" * (w - 2) + "+"
76
+
77
+ def header(text: str) -> str:
78
+ return " | " + _c(_GREEN, _c(_BOLD, f"{text:<{w - 4}}")) + "|"
79
+
80
+ print()
81
+ print(div())
82
+ print(header(f"Project ready: {project_name}"))
83
+ print(div())
84
+ print(row())
85
+ print(row(f" template: {template_slug}"))
86
+ print(row())
87
+ print(row(f" cd {project_name}"))
88
+ print(row(f" pip install -r requirements.txt"))
89
+ if missing_keys:
90
+ print(row())
91
+ print(row(f" # Add to .env before starting:"))
92
+ for k in missing_keys:
93
+ print(row(f" # {k}=<your-key>"))
94
+ print(row())
95
+ print(row(f" See README.md for the run instructions"))
96
+ print(row(f" specific to this template."))
97
+ print(row())
98
+ print(div())
99
+ print(row(f" Docs: https://leafcraft.ai/docs"))
100
+ print(div())
101
+ print()
102
+
103
+
104
+ # ---------------------------------------------------------------------------
105
+ # Validation / prompts
106
+ # ---------------------------------------------------------------------------
107
+ def validate_project_name(name: str) -> str:
108
+ if not re.match(r"^[a-zA-Z][a-zA-Z0-9_-]*$", name):
109
+ raise argparse.ArgumentTypeError(
110
+ f"Invalid project name '{name}'. "
111
+ "Must start with a letter and contain only alphanumeric characters, "
112
+ "hyphens, or underscores."
113
+ )
114
+ return name
115
+
116
+
117
+ def prompt_project_name() -> str:
118
+ while True:
119
+ name = input(" Project name: ").strip()
120
+ if not name:
121
+ print(" Name cannot be empty.")
122
+ continue
123
+ if not re.match(r"^[a-zA-Z][a-zA-Z0-9_-]*$", name):
124
+ print(" Must start with a letter, letters/numbers/hyphens/underscores only.")
125
+ continue
126
+ return name
127
+
128
+
129
+ # ---------------------------------------------------------------------------
130
+ # Template selection
131
+ # ---------------------------------------------------------------------------
132
+ def print_template_list(include_planned: bool = True) -> None:
133
+ """Print the available templates (--list output)."""
134
+ ready = list_templates(include_planned=False)
135
+ planned = [t for t in list_templates(include_planned=True)
136
+ if t.get("status") != "ready"] if include_planned else []
137
+
138
+ print()
139
+ print(_c(_BOLD, " Available templates:"))
140
+ print()
141
+ for t in ready:
142
+ slug = t["slug"]
143
+ short = t.get("short_name", "")
144
+ one_line = t.get("one_line", "")
145
+ print(f" {_c(_BOLD, slug):<35s}")
146
+ print(f" {_c(_DIM, ' ' + short)}")
147
+ print(f" {_c(_DIM, ' ' + one_line)}")
148
+ print()
149
+
150
+ if planned:
151
+ print(_c(_DIM, " Planned (not yet available):"))
152
+ for t in planned:
153
+ slug = t["slug"]
154
+ short = t.get("short_name", "")
155
+ print(f" {_c(_DIM, slug):<35s} {_c(_DIM, short)}")
156
+ print()
157
+
158
+ print(_c(_DIM, " Use: create-leafmesh <project_name> --template <slug>"))
159
+ print()
160
+
161
+
162
+ # Display order for the grouped picker — first group at top, last at bottom.
163
+ # Templates without a recognised `category` fall into "Other" at the end.
164
+ _CATEGORY_ORDER = (
165
+ "Finance & back-office",
166
+ "Customer & growth",
167
+ "Engineering & platform",
168
+ "People operations",
169
+ "Services & delivery",
170
+ "Production & supply",
171
+ )
172
+
173
+
174
+ def _grouped_templates() -> list[tuple[str, list[dict]]]:
175
+ """Return [(category, [template, …]), …] in display order."""
176
+ ready = list_templates(include_planned=False)
177
+ grouped: dict[str, list[dict]] = {}
178
+ for t in ready:
179
+ cat = t.get("category") or "Other"
180
+ grouped.setdefault(cat, []).append(t)
181
+
182
+ display: list[tuple[str, list[dict]]] = []
183
+ seen: set[str] = set()
184
+ for cat in _CATEGORY_ORDER:
185
+ if cat in grouped:
186
+ display.append((cat, grouped[cat]))
187
+ seen.add(cat)
188
+ for cat, items in grouped.items():
189
+ if cat not in seen and cat != "Other":
190
+ display.append((cat, items))
191
+ seen.add(cat)
192
+ if "Other" in grouped:
193
+ display.append(("Other", grouped["Other"]))
194
+ return display
195
+
196
+
197
+ def _prompt_template_choice_interactive() -> str:
198
+ """Arrow-key TUI picker — cascading category → template selection.
199
+
200
+ Uses `questionary` for arrow-key navigation. Two stages:
201
+ 1. Pick a business category
202
+ 2. Pick a template within that category (with 'Back' option)
203
+
204
+ Loops until a template is chosen or user cancels.
205
+ """
206
+ import questionary
207
+ from questionary import Style
208
+
209
+ style = Style([
210
+ ("qmark", "fg:#00d7ff bold"),
211
+ ("question", "bold"),
212
+ ("answer", "fg:#5fff5f bold"),
213
+ ("pointer", "fg:#00d7ff bold"),
214
+ ("highlighted", "fg:#00d7ff bold"),
215
+ ("selected", "fg:#5fff5f"),
216
+ ("separator", "fg:#6c6c6c"),
217
+ ("instruction", "fg:#6c6c6c"),
218
+ ])
219
+
220
+ display = _grouped_templates()
221
+ if not display:
222
+ print(" No templates available. Reinstall create-leafmesh.")
223
+ sys.exit(2)
224
+
225
+ cat_to_items = dict(display)
226
+
227
+ while True:
228
+ # ── Step 1: pick a category ──────────────────────────────────
229
+ cat_choices = []
230
+ for cat, items in display:
231
+ n = len(items)
232
+ label = f"{cat} ({n} template{'s' if n != 1 else ''})"
233
+ cat_choices.append(questionary.Choice(title=label, value=cat))
234
+ cat_choices.append(questionary.Separator())
235
+ # NOTE: `value=None` causes questionary to fall back to the title
236
+ # string (treats None as "unset"), which then crashes our
237
+ # cat_to_items lookup with KeyError: 'Quit'. Use an explicit
238
+ # sentinel string instead.
239
+ cat_choices.append(questionary.Choice(title="Quit", value="__quit__"))
240
+
241
+ chosen_cat = questionary.select(
242
+ "Choose a business area:",
243
+ choices=cat_choices,
244
+ style=style,
245
+ instruction="(↑/↓ to move, Enter to select)",
246
+ use_indicator=True,
247
+ ).ask()
248
+
249
+ if chosen_cat is None or chosen_cat == "__quit__":
250
+ print("\n Cancelled.\n")
251
+ sys.exit(0)
252
+
253
+ # ── Step 2: pick a template in that category ─────────────────
254
+ items = cat_to_items[chosen_cat]
255
+ # Pad short_names so the one-liner column aligns nicely.
256
+ name_w = max((len(t.get("short_name", t["slug"])) for t in items), default=12) + 2
257
+
258
+ tpl_choices = []
259
+ for t in items:
260
+ short = t.get("short_name", t["slug"])
261
+ one = t.get("one_line", "")
262
+ label = f"{short.ljust(name_w)} — {one}"
263
+ tpl_choices.append(questionary.Choice(title=label, value=t["slug"]))
264
+ tpl_choices.append(questionary.Separator())
265
+ tpl_choices.append(questionary.Choice(title="← Back to categories",
266
+ value="__back__"))
267
+ tpl_choices.append(questionary.Choice(title="Quit", value="__quit__"))
268
+
269
+ chosen = questionary.select(
270
+ f"Template in {chosen_cat}:",
271
+ choices=tpl_choices,
272
+ style=style,
273
+ instruction="(↑/↓ to move, Enter to select)",
274
+ use_indicator=True,
275
+ ).ask()
276
+
277
+ if chosen is None or chosen == "__quit__":
278
+ print("\n Cancelled.\n")
279
+ sys.exit(0)
280
+ if chosen == "__back__":
281
+ continue
282
+ return chosen
283
+
284
+
285
+ def _prompt_template_choice_fallback() -> str:
286
+ """Numbered-list fallback for non-TTY terminals (CI, piped input)."""
287
+ display = _grouped_templates()
288
+ ready = [t for _, items in display for t in items]
289
+ if not ready:
290
+ print(" No templates available. Reinstall create-leafmesh.")
291
+ sys.exit(2)
292
+
293
+ valid_slugs = {t["slug"]: t["slug"] for t in ready}
294
+ valid_indexes: dict[str, str] = {}
295
+ idx = 1
296
+ for _cat, items in display:
297
+ for t in items:
298
+ valid_indexes[str(idx)] = t["slug"]
299
+ idx += 1
300
+
301
+ sep_w = 60
302
+ print()
303
+ print(" " + "─" * sep_w)
304
+ print(f" {'Choose a template':^{sep_w}}")
305
+ print(" " + "─" * sep_w)
306
+ longest = max(len(t.get("short_name", t["slug"])) for t in ready)
307
+ name_w = max(longest + 2, 22)
308
+ n = 1
309
+ for cat, items in display:
310
+ print()
311
+ print(f" {_c(_BOLD, cat.upper())}")
312
+ for t in items:
313
+ short = t.get("short_name", t["slug"])
314
+ one = t.get("one_line", "")
315
+ print(
316
+ f" {_c(_BOLD, str(n).rjust(2))}) "
317
+ f"{_c(_BOLD, short.ljust(name_w))}"
318
+ f"{_c(_DIM, one)}"
319
+ )
320
+ n += 1
321
+ print()
322
+ print(_c(_DIM, f" Type 1–{len(ready)}, a slug, or 'q' to quit."))
323
+ while True:
324
+ try:
325
+ raw = input(" > ").strip().lower()
326
+ except EOFError:
327
+ print()
328
+ sys.exit(0)
329
+ if not raw:
330
+ continue
331
+ if raw in ("q", "quit", "exit"):
332
+ print("\n Cancelled.\n")
333
+ sys.exit(0)
334
+ if raw in valid_indexes:
335
+ return valid_indexes[raw]
336
+ if raw in valid_slugs:
337
+ return raw
338
+ print(f" Invalid choice. Type 1–{len(ready)}, a slug, or 'q'.")
339
+
340
+
341
+ def prompt_template_choice() -> str:
342
+ """Pick the right picker for the environment.
343
+
344
+ On a real terminal: arrow-key cascading TUI (category → template).
345
+ On CI / piped input / dumb terminals: numbered-list fallback.
346
+ """
347
+ is_tty = sys.stdin.isatty() and sys.stdout.isatty()
348
+ if is_tty:
349
+ try:
350
+ return _prompt_template_choice_interactive()
351
+ except KeyboardInterrupt:
352
+ print("\n\n Cancelled.\n")
353
+ sys.exit(0)
354
+ except ImportError:
355
+ # questionary missing → fall through to text picker
356
+ pass
357
+ return _prompt_template_choice_fallback()
358
+
359
+
360
+ def prompt_env_vars(prompts: list[dict]) -> dict:
361
+ """Ask the user for each env var the template declares.
362
+
363
+ `prompts` is the list from `get_template_prompts(slug)` — each entry has
364
+ `key`, `label`, `signup_url`, `required`, `note`. Empty input skips a
365
+ field (the BRD calls this "Never block, always document").
366
+ """
367
+ w = 55
368
+ print()
369
+ print(" " + "-" * w)
370
+ print(f" {'Environment setup':^{w}}")
371
+ print(f" {'(press Enter to skip any field)':^{w}}")
372
+ print(" " + "-" * w)
373
+ print()
374
+
375
+ env_vars: dict = {}
376
+
377
+ for p in prompts:
378
+ label = p["label"]
379
+ signup = p.get("signup_url", "")
380
+ required = p.get("required", False)
381
+ note = p.get("note", "")
382
+ tag = "required" if required else "optional"
383
+
384
+ # Inline single-line prompt: note + signup on dim lines above,
385
+ # then `Label (required): ` with the cursor on the same line.
386
+ if note:
387
+ print(f" {_c(_DIM, note)}")
388
+ if signup:
389
+ print(f" {_c(_DIM, 'Sign up: ' + signup)}")
390
+ prompt_text = f" {label} {_c(_DIM, '(' + tag + ')')}: "
391
+ try:
392
+ val = input(prompt_text).strip()
393
+ except EOFError:
394
+ val = ""
395
+ if val:
396
+ env_vars[p["key"]] = val
397
+ print()
398
+
399
+ return env_vars
400
+
401
+
402
+ # ---------------------------------------------------------------------------
403
+ # Main create flow
404
+ # ---------------------------------------------------------------------------
405
+ def _run_create(
406
+ project_name: str | None,
407
+ output_dir: str,
408
+ no_git: bool,
409
+ template_slug: str | None,
410
+ ) -> int:
411
+ print_banner(__version__)
412
+
413
+ if project_name is None:
414
+ project_name = prompt_project_name()
415
+ print()
416
+ else:
417
+ try:
418
+ project_name = validate_project_name(project_name)
419
+ except argparse.ArgumentTypeError as e:
420
+ print(f" Error: {e}")
421
+ return 1
422
+
423
+ # Resolve the template — flag wins; otherwise interactive picker.
424
+ if template_slug is None:
425
+ template_slug = prompt_template_choice()
426
+ print(f" Selected: {_c(_BOLD, template_slug)}")
427
+ print()
428
+ else:
429
+ # Validate the slug
430
+ t = get_template(template_slug)
431
+ if t is None:
432
+ valid = ", ".join(x["slug"] for x in list_templates())
433
+ print(f"\n Error: Unknown template '{template_slug}'.")
434
+ print(f" Available: {valid}")
435
+ print(f" Run 'create-leafmesh --list' for descriptions.\n")
436
+ return 2
437
+ if t.get("status") != "ready":
438
+ print(f"\n Error: Template '{template_slug}' is "
439
+ f"{t.get('status', 'unknown')}, not ready.\n")
440
+ return 2
441
+
442
+ # Per-template env-var prompts — each template declares its own keys.
443
+ prompts = get_template_prompts(template_slug)
444
+ env_vars = prompt_env_vars(prompts)
445
+
446
+ # Hand off to create_project, passing our step-printer so it can report progress
447
+ print(f" Creating {_c(_BOLD, project_name + '/')} from template "
448
+ f"{_c(_BOLD, template_slug)}")
449
+ print()
450
+
451
+ result = create_project(
452
+ project_name,
453
+ output_dir,
454
+ template_slug=template_slug,
455
+ init_git=not no_git,
456
+ env_vars=env_vars,
457
+ step_fn=step,
458
+ step_done_fn=step_done,
459
+ )
460
+
461
+ if result != 0:
462
+ return result
463
+
464
+ # Success box — flag any *required* template key the user skipped.
465
+ missing = [p["key"] for p in prompts if p.get("required") and p["key"] not in env_vars]
466
+ print_success_box(project_name, template_slug, missing)
467
+
468
+ return 0
469
+
470
+
471
+ # ---------------------------------------------------------------------------
472
+ # CLI entry point
473
+ # ---------------------------------------------------------------------------
474
+ def _print_template_describe(slug: str) -> int:
475
+ """Print the full registry entry for a single template."""
476
+ t = get_template(slug)
477
+ if t is None:
478
+ valid = ", ".join(x["slug"] for x in list_templates(include_planned=True))
479
+ print(f"\n Error: Unknown template '{slug}'.")
480
+ print(f" Available: {valid}\n")
481
+ return 2
482
+
483
+ print()
484
+ print(_c(_BOLD, f" {t.get('full_name', t['slug'])}"))
485
+ print(f" {_c(_DIM, 'slug: ' + t['slug'])}")
486
+ print(f" {_c(_DIM, 'status: ' + t.get('status', '?'))}")
487
+ if t.get("one_line"):
488
+ print(f" {_c(_DIM, 'summary: ' + t['one_line'])}")
489
+ if t.get("complexity"):
490
+ print(f" {_c(_DIM, 'complexity: ' + t['complexity'])}")
491
+ if t.get("trust_lead"):
492
+ print(f" {_c(_DIM, 'trust: ' + t['trust_lead'])}")
493
+ if t.get("agent_count"):
494
+ print(f" {_c(_DIM, 'agents: ' + str(t['agent_count']))}")
495
+ if t.get("description"):
496
+ print()
497
+ print(f" {t['description']}")
498
+ print()
499
+ return 0
500
+
501
+
502
+ def main(argv: list[str] | None = None) -> int:
503
+ parser = argparse.ArgumentParser(
504
+ prog="create-leafmesh",
505
+ description="Project scaffolding tool for LeafMesh",
506
+ epilog="""
507
+ examples:
508
+ create-leafmesh my-project --template incident-triage Create with explicit template
509
+ create-leafmesh my-project Interactive picker
510
+ create-leafmesh --list Show available templates
511
+ create-leafmesh --describe payment-authorization Show template details
512
+ """,
513
+ formatter_class=argparse.RawDescriptionHelpFormatter,
514
+ )
515
+ parser.add_argument("--version", action="version", version=f"create-leafmesh {__version__}")
516
+ parser.add_argument("project_name", nargs="?", default=None, help="Project name")
517
+ parser.add_argument("-o", "--output-dir", default=".", help="Output directory (default: current)")
518
+ parser.add_argument("--no-git", action="store_true", help="Skip git init")
519
+ parser.add_argument(
520
+ "-t", "--template", default=None, metavar="SLUG",
521
+ help="Template slug (e.g. incident-triage, payment-authorization). "
522
+ "Run --list to see all options.",
523
+ )
524
+ parser.add_argument(
525
+ "--list", dest="list_templates", action="store_true",
526
+ help="List available templates and exit",
527
+ )
528
+ parser.add_argument(
529
+ "--describe", default=None, metavar="SLUG",
530
+ help="Show details for one template and exit",
531
+ )
532
+
533
+ args = parser.parse_args(argv)
534
+
535
+ # Informational flags — short-circuit before any prompting.
536
+ if args.list_templates:
537
+ print_template_list()
538
+ return 0
539
+ if args.describe:
540
+ return _print_template_describe(args.describe)
541
+
542
+ try:
543
+ return _run_create(
544
+ args.project_name,
545
+ args.output_dir,
546
+ args.no_git,
547
+ args.template,
548
+ )
549
+ except KeyboardInterrupt:
550
+ print("\n\n Cancelled.\n")
551
+ return 0
552
+
553
+
554
+ if __name__ == "__main__":
555
+ try:
556
+ sys.exit(main())
557
+ except KeyboardInterrupt:
558
+ print("\n\n Cancelled.\n")
559
+ sys.exit(0)