clawed 2.5.0__tar.gz → 2.5.2__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 (257) hide show
  1. {clawed-2.5.0 → clawed-2.5.2}/PKG-INFO +32 -2
  2. {clawed-2.5.0 → clawed-2.5.2}/README.md +31 -1
  3. {clawed-2.5.0 → clawed-2.5.2}/clawed/__init__.py +1 -1
  4. {clawed-2.5.0 → clawed-2.5.2}/clawed/cli.py +2 -0
  5. clawed-2.5.2/clawed/commands/game.py +179 -0
  6. {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/generate.py +46 -2
  7. clawed-2.5.2/clawed/compile_game.py +453 -0
  8. {clawed-2.5.0 → clawed-2.5.2}/clawed/export_docx.py +17 -3
  9. {clawed-2.5.0 → clawed-2.5.2}/clawed/export_pptx.py +369 -118
  10. {clawed-2.5.0 → clawed-2.5.2}/clawed/model_router.py +13 -13
  11. {clawed-2.5.0 → clawed-2.5.2}/clawed/multi_agent.py +2 -2
  12. {clawed-2.5.0 → clawed-2.5.2}/clawed/slide_images.py +285 -52
  13. {clawed-2.5.0 → clawed-2.5.2}/pyproject.toml +1 -1
  14. {clawed-2.5.0 → clawed-2.5.2}/.gitignore +0 -0
  15. {clawed-2.5.0 → clawed-2.5.2}/LICENSE +0 -0
  16. {clawed-2.5.0 → clawed-2.5.2}/clawed/__main__.py +0 -0
  17. {clawed-2.5.0 → clawed-2.5.2}/clawed/_legacy_gateway.py +0 -0
  18. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent.py +0 -0
  19. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/__init__.py +0 -0
  20. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/approvals.py +0 -0
  21. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/autonomy.py +0 -0
  22. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/context.py +0 -0
  23. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/core.py +0 -0
  24. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/custom_tools.py +0 -0
  25. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/drive/__init__.py +0 -0
  26. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/drive/auth.py +0 -0
  27. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/drive/client.py +0 -0
  28. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/fake_llm.py +0 -0
  29. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/loop.py +0 -0
  30. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/memory/__init__.py +0 -0
  31. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/memory/curriculum.py +0 -0
  32. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/memory/curriculum_kb.py +0 -0
  33. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/memory/embeddings.py +0 -0
  34. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/memory/episodes.py +0 -0
  35. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/memory/identity.py +0 -0
  36. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/memory/loader.py +0 -0
  37. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/memory/preferences.py +0 -0
  38. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/planner.py +0 -0
  39. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/prompt.py +0 -0
  40. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/scheduler.py +0 -0
  41. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/__init__.py +0 -0
  42. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/base.py +0 -0
  43. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/configure_profile.py +0 -0
  44. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/curriculum_map.py +0 -0
  45. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/drive_create_doc.py +0 -0
  46. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/drive_create_slides.py +0 -0
  47. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/drive_list.py +0 -0
  48. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/drive_organize.py +0 -0
  49. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/drive_read.py +0 -0
  50. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/drive_upload.py +0 -0
  51. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/export_document.py +0 -0
  52. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/gap_analysis.py +0 -0
  53. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/generate_assessment.py +0 -0
  54. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/generate_lesson.py +0 -0
  55. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/generate_lesson_bundle.py +0 -0
  56. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/generate_materials.py +0 -0
  57. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/generate_unit.py +0 -0
  58. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/ingest_materials.py +0 -0
  59. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/parent_comm.py +0 -0
  60. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/read_heartbeat.py +0 -0
  61. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/read_workspace.py +0 -0
  62. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/request_approval.py +0 -0
  63. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/schedule_task.py +0 -0
  64. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/search_lessons.py +0 -0
  65. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/search_my_materials.py +0 -0
  66. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/search_standards.py +0 -0
  67. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/student_insights.py +0 -0
  68. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/sub_packet.py +0 -0
  69. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/switch_model.py +0 -0
  70. {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/update_soul.py +0 -0
  71. {clawed-2.5.0 → clawed-2.5.2}/clawed/analytics.py +0 -0
  72. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/__init__.py +0 -0
  73. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/deps.py +0 -0
  74. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/__init__.py +0 -0
  75. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/chat.py +0 -0
  76. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/export.py +0 -0
  77. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/feedback.py +0 -0
  78. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/gateway_chat.py +0 -0
  79. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/generate.py +0 -0
  80. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/ingest.py +0 -0
  81. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/lessons.py +0 -0
  82. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/school.py +0 -0
  83. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/settings.py +0 -0
  84. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/tools.py +0 -0
  85. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/server.py +0 -0
  86. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/static/app.js +0 -0
  87. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/static/style.css +0 -0
  88. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/static/widget.js +0 -0
  89. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/analytics.html +0 -0
  90. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/base.html +0 -0
  91. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/dashboard.html +0 -0
  92. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/generate.html +0 -0
  93. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/index.html +0 -0
  94. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/lesson.html +0 -0
  95. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/profile.html +0 -0
  96. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/settings.html +0 -0
  97. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/stats.html +0 -0
  98. {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/students.html +0 -0
  99. {clawed-2.5.0 → clawed-2.5.2}/clawed/assessment.py +0 -0
  100. {clawed-2.5.0 → clawed-2.5.2}/clawed/asset_registry.py +0 -0
  101. {clawed-2.5.0 → clawed-2.5.2}/clawed/async_utils.py +0 -0
  102. {clawed-2.5.0 → clawed-2.5.2}/clawed/auth/__init__.py +0 -0
  103. {clawed-2.5.0 → clawed-2.5.2}/clawed/auth/google_auth.py +0 -0
  104. {clawed-2.5.0 → clawed-2.5.2}/clawed/bot_state.py +0 -0
  105. {clawed-2.5.0 → clawed-2.5.2}/clawed/chat.py +0 -0
  106. {clawed-2.5.0 → clawed-2.5.2}/clawed/cli_chat.py +0 -0
  107. {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/__init__.py +0 -0
  108. {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/_helpers.py +0 -0
  109. {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/bot.py +0 -0
  110. {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/config.py +0 -0
  111. {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/config_llm.py +0 -0
  112. {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/config_profile.py +0 -0
  113. {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/export.py +0 -0
  114. {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/generate_assessment.py +0 -0
  115. {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/generate_unit.py +0 -0
  116. {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/queue.py +0 -0
  117. {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/schedule_cmd.py +0 -0
  118. {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/sub.py +0 -0
  119. {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/train.py +0 -0
  120. {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/workspace_cmd.py +0 -0
  121. {clawed-2.5.0 → clawed-2.5.2}/clawed/compile_slides.py +0 -0
  122. {clawed-2.5.0 → clawed-2.5.2}/clawed/compile_student.py +0 -0
  123. {clawed-2.5.0 → clawed-2.5.2}/clawed/compile_teacher.py +0 -0
  124. {clawed-2.5.0 → clawed-2.5.2}/clawed/config.py +0 -0
  125. {clawed-2.5.0 → clawed-2.5.2}/clawed/corpus.py +0 -0
  126. {clawed-2.5.0 → clawed-2.5.2}/clawed/curriculum_map.py +0 -0
  127. {clawed-2.5.0 → clawed-2.5.2}/clawed/database.py +0 -0
  128. {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/__init__.py +0 -0
  129. {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_assessment.json +0 -0
  130. {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_formative_assessment.json +0 -0
  131. {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_lesson_materials.json +0 -0
  132. {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_lesson_science_g6.json +0 -0
  133. {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_lesson_social_studies_g8.json +0 -0
  134. {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_master_content.json +0 -0
  135. {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_pacing_guide.json +0 -0
  136. {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_quiz.json +0 -0
  137. {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_rubric.json +0 -0
  138. {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_unit_plan.json +0 -0
  139. {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_year_map.json +0 -0
  140. {clawed-2.5.0 → clawed-2.5.2}/clawed/differentiation.py +0 -0
  141. {clawed-2.5.0 → clawed-2.5.2}/clawed/doc_export.py +0 -0
  142. {clawed-2.5.0 → clawed-2.5.2}/clawed/drive.py +0 -0
  143. {clawed-2.5.0 → clawed-2.5.2}/clawed/evaluation.py +0 -0
  144. {clawed-2.5.0 → clawed-2.5.2}/clawed/export_handout.py +0 -0
  145. {clawed-2.5.0 → clawed-2.5.2}/clawed/export_markdown.py +0 -0
  146. {clawed-2.5.0 → clawed-2.5.2}/clawed/export_pdf.py +0 -0
  147. {clawed-2.5.0 → clawed-2.5.2}/clawed/export_templates.py +0 -0
  148. {clawed-2.5.0 → clawed-2.5.2}/clawed/export_theme.py +0 -0
  149. {clawed-2.5.0 → clawed-2.5.2}/clawed/exporter.py +0 -0
  150. {clawed-2.5.0 → clawed-2.5.2}/clawed/failure_codes.py +0 -0
  151. {clawed-2.5.0 → clawed-2.5.2}/clawed/feedback.py +0 -0
  152. {clawed-2.5.0 → clawed-2.5.2}/clawed/formats/__init__.py +0 -0
  153. {clawed-2.5.0 → clawed-2.5.2}/clawed/formats/flipchart.py +0 -0
  154. {clawed-2.5.0 → clawed-2.5.2}/clawed/formats/notebook.py +0 -0
  155. {clawed-2.5.0 → clawed-2.5.2}/clawed/formats/xbk.py +0 -0
  156. {clawed-2.5.0 → clawed-2.5.2}/clawed/gateway.py +0 -0
  157. {clawed-2.5.0 → clawed-2.5.2}/clawed/gateway_response.py +0 -0
  158. {clawed-2.5.0 → clawed-2.5.2}/clawed/generation.py +0 -0
  159. {clawed-2.5.0 → clawed-2.5.2}/clawed/generation_report.py +0 -0
  160. {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/__init__.py +0 -0
  161. {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/export.py +0 -0
  162. {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/feedback.py +0 -0
  163. {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/gaps.py +0 -0
  164. {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/generate.py +0 -0
  165. {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/ingest.py +0 -0
  166. {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/misc.py +0 -0
  167. {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/onboard.py +0 -0
  168. {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/schedule.py +0 -0
  169. {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/standards.py +0 -0
  170. {clawed-2.5.0 → clawed-2.5.2}/clawed/hermes_plugin.py +0 -0
  171. {clawed-2.5.0 → clawed-2.5.2}/clawed/image_pipeline.py +0 -0
  172. {clawed-2.5.0 → clawed-2.5.2}/clawed/improver.py +0 -0
  173. {clawed-2.5.0 → clawed-2.5.2}/clawed/ingestor.py +0 -0
  174. {clawed-2.5.0 → clawed-2.5.2}/clawed/io.py +0 -0
  175. {clawed-2.5.0 → clawed-2.5.2}/clawed/lesson.py +0 -0
  176. {clawed-2.5.0 → clawed-2.5.2}/clawed/llm.py +0 -0
  177. {clawed-2.5.0 → clawed-2.5.2}/clawed/master_content.py +0 -0
  178. {clawed-2.5.0 → clawed-2.5.2}/clawed/materials.py +0 -0
  179. {clawed-2.5.0 → clawed-2.5.2}/clawed/mcp_server.py +0 -0
  180. {clawed-2.5.0 → clawed-2.5.2}/clawed/memory_engine.py +0 -0
  181. {clawed-2.5.0 → clawed-2.5.2}/clawed/models.py +0 -0
  182. {clawed-2.5.0 → clawed-2.5.2}/clawed/onboarding.py +0 -0
  183. {clawed-2.5.0 → clawed-2.5.2}/clawed/openclaw_plugin.py +0 -0
  184. {clawed-2.5.0 → clawed-2.5.2}/clawed/parent_comm.py +0 -0
  185. {clawed-2.5.0 → clawed-2.5.2}/clawed/persona.py +0 -0
  186. {clawed-2.5.0 → clawed-2.5.2}/clawed/persona_evolution.py +0 -0
  187. {clawed-2.5.0 → clawed-2.5.2}/clawed/planner.py +0 -0
  188. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/504_accommodations.txt +0 -0
  189. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/admin_lesson_plan.txt +0 -0
  190. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/assessment.txt +0 -0
  191. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/curriculum_gaps.txt +0 -0
  192. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/dbq_assessment.txt +0 -0
  193. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/differentiation.txt +0 -0
  194. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/formative_assessment.txt +0 -0
  195. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/iep_modification.txt +0 -0
  196. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/lesson_plan.txt +0 -0
  197. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/master_content.txt +0 -0
  198. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/multi_agent_researcher.txt +0 -0
  199. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/multi_agent_reviewer.txt +0 -0
  200. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/pacing_guide.txt +0 -0
  201. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/parent_note.txt +0 -0
  202. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/persona_extract.txt +0 -0
  203. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/quiz.txt +0 -0
  204. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/rubric.txt +0 -0
  205. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/student_packet.txt +0 -0
  206. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/sub_packet.txt +0 -0
  207. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/summative_assessment.txt +0 -0
  208. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/tiered_assignments.txt +0 -0
  209. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/unit_plan.txt +0 -0
  210. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/worksheet.txt +0 -0
  211. {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/year_map.txt +0 -0
  212. {clawed-2.5.0 → clawed-2.5.2}/clawed/quality.py +0 -0
  213. {clawed-2.5.0 → clawed-2.5.2}/clawed/reading_report.py +0 -0
  214. {clawed-2.5.0 → clawed-2.5.2}/clawed/router.py +0 -0
  215. {clawed-2.5.0 → clawed-2.5.2}/clawed/sanitize.py +0 -0
  216. {clawed-2.5.0 → clawed-2.5.2}/clawed/scheduler.py +0 -0
  217. {clawed-2.5.0 → clawed-2.5.2}/clawed/school.py +0 -0
  218. {clawed-2.5.0 → clawed-2.5.2}/clawed/search.py +0 -0
  219. {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/__init__.py +0 -0
  220. {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/art.py +0 -0
  221. {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/base.py +0 -0
  222. {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/computer_science.py +0 -0
  223. {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/ela.py +0 -0
  224. {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/foreign_language.py +0 -0
  225. {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/history.py +0 -0
  226. {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/library.py +0 -0
  227. {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/math.py +0 -0
  228. {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/music.py +0 -0
  229. {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/physical_education.py +0 -0
  230. {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/science.py +0 -0
  231. {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/social_studies.py +0 -0
  232. {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/special_education.py +0 -0
  233. {clawed-2.5.0 → clawed-2.5.2}/clawed/standards.py +0 -0
  234. {clawed-2.5.0 → clawed-2.5.2}/clawed/state.py +0 -0
  235. {clawed-2.5.0 → clawed-2.5.2}/clawed/state_standards.py +0 -0
  236. {clawed-2.5.0 → clawed-2.5.2}/clawed/student_bot.py +0 -0
  237. {clawed-2.5.0 → clawed-2.5.2}/clawed/student_cli.py +0 -0
  238. {clawed-2.5.0 → clawed-2.5.2}/clawed/student_telegram_bot.py +0 -0
  239. {clawed-2.5.0 → clawed-2.5.2}/clawed/sub_packet.py +0 -0
  240. {clawed-2.5.0 → clawed-2.5.2}/clawed/task_queue.py +0 -0
  241. {clawed-2.5.0 → clawed-2.5.2}/clawed/templates_lib.py +0 -0
  242. {clawed-2.5.0 → clawed-2.5.2}/clawed/tools.py +0 -0
  243. {clawed-2.5.0 → clawed-2.5.2}/clawed/transports/__init__.py +0 -0
  244. {clawed-2.5.0 → clawed-2.5.2}/clawed/transports/cli.py +0 -0
  245. {clawed-2.5.0 → clawed-2.5.2}/clawed/transports/hermes.py +0 -0
  246. {clawed-2.5.0 → clawed-2.5.2}/clawed/transports/openclaw.py +0 -0
  247. {clawed-2.5.0 → clawed-2.5.2}/clawed/transports/student_telegram.py +0 -0
  248. {clawed-2.5.0 → clawed-2.5.2}/clawed/transports/telegram.py +0 -0
  249. {clawed-2.5.0 → clawed-2.5.2}/clawed/transports/web.py +0 -0
  250. {clawed-2.5.0 → clawed-2.5.2}/clawed/tui.py +0 -0
  251. {clawed-2.5.0 → clawed-2.5.2}/clawed/tui_chat.py +0 -0
  252. {clawed-2.5.0 → clawed-2.5.2}/clawed/validation.py +0 -0
  253. {clawed-2.5.0 → clawed-2.5.2}/clawed/voice.py +0 -0
  254. {clawed-2.5.0 → clawed-2.5.2}/clawed/voice_check.py +0 -0
  255. {clawed-2.5.0 → clawed-2.5.2}/clawed/workspace.py +0 -0
  256. {clawed-2.5.0 → clawed-2.5.2}/eduagent/__init__.py +0 -0
  257. {clawed-2.5.0 → clawed-2.5.2}/eduagent/_compat.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clawed
3
- Version: 2.5.0
3
+ Version: 2.5.2
4
4
  Summary: Free AI lesson planner for teachers. Learns your teaching voice from your curriculum files and generates complete lesson packages. Open source, runs locally, no subscription.
5
5
  Project-URL: Homepage, https://sirhanmacx.github.io/Claw-ED
6
6
  Project-URL: Documentation, https://github.com/SirhanMacx/Claw-ED#readme
@@ -198,6 +198,10 @@ Your curriculum files (PDF, DOCX, PPTX, and 20+ formats)
198
198
  | `clawed bot --token TOKEN` | Connect Telegram bot |
199
199
  | `clawed serve` | Web dashboard |
200
200
  | `clawed mcp-server` | MCP server (for Claude Code integration) |
201
+ | `clawed game create "Topic" -g 8` | Generate an interactive HTML learning game |
202
+ | `clawed game create "Topic" --style "escape room"` | Game with specific style |
203
+ | `clawed game create "Topic" --students "they love Minecraft"` | Game matching student interests |
204
+ | `clawed game gallery` | View all your generated games |
201
205
  | `clawed demo` | Try it without an API key |
202
206
 
203
207
  ---
@@ -248,6 +252,20 @@ Every lesson can be automatically differentiated:
248
252
  - **504 accommodations:** Extended time, preferential seating, scribe access
249
253
  - **Gifted extensions:** Deeper inquiry, independent research, cross-topic connections
250
254
 
255
+ ### Interactive Learning Games
256
+
257
+ Every lesson can generate an interactive HTML game as an extension activity:
258
+
259
+ ```bash
260
+ clawed game create "The Missouri Compromise" -g 8 -s "US History"
261
+ clawed game create "Photosynthesis" -g 6 --students "they love Minecraft"
262
+ clawed game create "The Renaissance" -g 9 --style "escape room"
263
+ ```
264
+
265
+ Every game is unique — the AI designs the mechanic, visuals, and interaction from scratch based on the lesson content and your students' interests. No templates. Games are single-file HTML that works on phones, Chromebooks, and any browser.
266
+
267
+ Browse community games: [Game Gallery](https://sirhanmacx.github.io/Claw-ED/games)
268
+
251
269
  ### Autonomous Operation
252
270
 
253
271
  Claw-ED can work while you sleep:
@@ -350,10 +368,22 @@ lesson = await generate_lesson(
350
368
 
351
369
  ---
352
370
 
371
+ ## Community
372
+
373
+ Claw-ED is built by a teacher for teachers. Join the conversation:
374
+
375
+ - **[GitHub Discussions](https://github.com/SirhanMacx/Claw-ED/discussions)** — share how you use Claw-ED, request features, ask questions
376
+ - **[Report issues](https://github.com/SirhanMacx/Claw-ED/issues)** — bugs, feature requests, quality feedback
377
+ - **[Star the repo](https://github.com/SirhanMacx/Claw-ED)** — it helps other teachers find us
378
+
379
+ 14,000+ installs and growing. If Claw-ED saved you prep time, tell a colleague.
380
+
381
+ ---
382
+
353
383
  ## License
354
384
 
355
385
  MIT License. Free for personal and commercial use.
356
386
 
357
387
  Built by educators, for educators.
358
388
 
359
- [GitHub](https://github.com/SirhanMacx/Claw-ED) | [PyPI](https://pypi.org/project/clawed/) | [Changelog](CHANGELOG.md)
389
+ [GitHub](https://github.com/SirhanMacx/Claw-ED) | [PyPI](https://pypi.org/project/clawed/) | [Discussions](https://github.com/SirhanMacx/Claw-ED/discussions) | [Changelog](CHANGELOG.md)
@@ -122,6 +122,10 @@ Your curriculum files (PDF, DOCX, PPTX, and 20+ formats)
122
122
  | `clawed bot --token TOKEN` | Connect Telegram bot |
123
123
  | `clawed serve` | Web dashboard |
124
124
  | `clawed mcp-server` | MCP server (for Claude Code integration) |
125
+ | `clawed game create "Topic" -g 8` | Generate an interactive HTML learning game |
126
+ | `clawed game create "Topic" --style "escape room"` | Game with specific style |
127
+ | `clawed game create "Topic" --students "they love Minecraft"` | Game matching student interests |
128
+ | `clawed game gallery` | View all your generated games |
125
129
  | `clawed demo` | Try it without an API key |
126
130
 
127
131
  ---
@@ -172,6 +176,20 @@ Every lesson can be automatically differentiated:
172
176
  - **504 accommodations:** Extended time, preferential seating, scribe access
173
177
  - **Gifted extensions:** Deeper inquiry, independent research, cross-topic connections
174
178
 
179
+ ### Interactive Learning Games
180
+
181
+ Every lesson can generate an interactive HTML game as an extension activity:
182
+
183
+ ```bash
184
+ clawed game create "The Missouri Compromise" -g 8 -s "US History"
185
+ clawed game create "Photosynthesis" -g 6 --students "they love Minecraft"
186
+ clawed game create "The Renaissance" -g 9 --style "escape room"
187
+ ```
188
+
189
+ Every game is unique — the AI designs the mechanic, visuals, and interaction from scratch based on the lesson content and your students' interests. No templates. Games are single-file HTML that works on phones, Chromebooks, and any browser.
190
+
191
+ Browse community games: [Game Gallery](https://sirhanmacx.github.io/Claw-ED/games)
192
+
175
193
  ### Autonomous Operation
176
194
 
177
195
  Claw-ED can work while you sleep:
@@ -274,10 +292,22 @@ lesson = await generate_lesson(
274
292
 
275
293
  ---
276
294
 
295
+ ## Community
296
+
297
+ Claw-ED is built by a teacher for teachers. Join the conversation:
298
+
299
+ - **[GitHub Discussions](https://github.com/SirhanMacx/Claw-ED/discussions)** — share how you use Claw-ED, request features, ask questions
300
+ - **[Report issues](https://github.com/SirhanMacx/Claw-ED/issues)** — bugs, feature requests, quality feedback
301
+ - **[Star the repo](https://github.com/SirhanMacx/Claw-ED)** — it helps other teachers find us
302
+
303
+ 14,000+ installs and growing. If Claw-ED saved you prep time, tell a colleague.
304
+
305
+ ---
306
+
277
307
  ## License
278
308
 
279
309
  MIT License. Free for personal and commercial use.
280
310
 
281
311
  Built by educators, for educators.
282
312
 
283
- [GitHub](https://github.com/SirhanMacx/Claw-ED) | [PyPI](https://pypi.org/project/clawed/) | [Changelog](CHANGELOG.md)
313
+ [GitHub](https://github.com/SirhanMacx/Claw-ED) | [PyPI](https://pypi.org/project/clawed/) | [Discussions](https://github.com/SirhanMacx/Claw-ED/discussions) | [Changelog](CHANGELOG.md)
@@ -17,7 +17,7 @@ if hasattr(sys.stderr, "reconfigure"):
17
17
  except Exception:
18
18
  pass
19
19
 
20
- __version__ = "2.5.0"
20
+ __version__ = "2.5.2"
21
21
  __author__ = "Jon Maccarello & Claw-ED contributors"
22
22
  __description__ = "Personal AI teaching agent. Learns your voice, works while you sleep."
23
23
 
@@ -35,6 +35,7 @@ from clawed.commands.export import (
35
35
  _lesson_to_html,
36
36
  export_app,
37
37
  )
38
+ from clawed.commands.game import game_app
38
39
  from clawed.commands.generate import generate_app
39
40
  from clawed.commands.queue import queue_app
40
41
  from clawed.commands.schedule_cmd import schedule_app
@@ -243,6 +244,7 @@ app.add_typer(queue_app, name="queue")
243
244
  app.add_typer(workspace_app, name="workspace")
244
245
  app.add_typer(schedule_app, name="schedule")
245
246
  app.add_typer(train_app, name="train")
247
+ app.add_typer(game_app, name="game")
246
248
 
247
249
  # ── Register top-level commands from sub-modules ────────────────────────
248
250
  # Commands from generate_app, export_app, and bot_app are registered as
@@ -0,0 +1,179 @@
1
+ """Game generation command — create interactive HTML learning games."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from pathlib import Path
6
+ from typing import Optional
7
+
8
+ import typer
9
+
10
+ from clawed.commands._helpers import (
11
+ _safe_progress,
12
+ console,
13
+ load_persona_or_exit,
14
+ )
15
+ from clawed.commands._helpers import output_dir as _output_dir
16
+ from clawed.commands._helpers import (
17
+ run_async as _run_async,
18
+ )
19
+
20
+ game_app = typer.Typer()
21
+
22
+
23
+ @game_app.command("create")
24
+ def create(
25
+ topic: str = typer.Argument(
26
+ ..., help="Lesson topic (e.g. 'The Missouri Compromise')"
27
+ ),
28
+ grade: str = typer.Option("8", "--grade", "-g", help="Grade level"),
29
+ subject: str = typer.Option(
30
+ "Social Studies", "--subject", "-s", help="Subject area"
31
+ ),
32
+ style: str = typer.Option(
33
+ "",
34
+ "--style",
35
+ help="Game style hint (e.g. 'Among Us impostor', 'Minecraft building', "
36
+ "'Jeopardy', 'escape room'). Leave empty for AI to decide.",
37
+ ),
38
+ students: str = typer.Option(
39
+ "",
40
+ "--students",
41
+ help="What your students are into (e.g. 'they love Fortnite', "
42
+ "'competitive, love team challenges')",
43
+ ),
44
+ from_lesson: Optional[str] = typer.Option(
45
+ None,
46
+ "--from-lesson",
47
+ "-l",
48
+ help="Generate game from existing lesson JSON file",
49
+ ),
50
+ ):
51
+ """Generate an interactive HTML learning game.
52
+
53
+ \b
54
+ From a topic (generates lesson first, then game):
55
+ clawed game create "The Renaissance" -g 9 -s "Global History"
56
+
57
+ With student preferences:
58
+ clawed game create "Photosynthesis" -g 6 --students "they love Minecraft"
59
+
60
+ With style hint:
61
+ clawed game create "Civil War" -g 8 --style "escape room"
62
+
63
+ From an existing lesson:
64
+ clawed game create "topic" --from-lesson output/lesson_01.json
65
+ """
66
+ from clawed.compile_game import compile_game
67
+
68
+ persona = load_persona_or_exit()
69
+
70
+ if from_lesson:
71
+ # Load existing MasterContent from lesson JSON
72
+
73
+ from clawed.master_content import MasterContent
74
+
75
+ lesson_path = Path(from_lesson)
76
+ if not lesson_path.exists():
77
+ console.print(f"[red]File not found:[/red] {from_lesson}")
78
+ raise typer.Exit(1)
79
+ master = MasterContent.model_validate_json(
80
+ lesson_path.read_text(encoding="utf-8")
81
+ )
82
+ else:
83
+ # Generate a lesson first, then make the game
84
+ from clawed.lesson import generate_master_content
85
+ from clawed.models import LessonBrief, UnitPlan
86
+
87
+ unit_plan = UnitPlan(
88
+ title=f"{topic} Lesson",
89
+ subject=subject,
90
+ grade_level=grade,
91
+ topic=topic,
92
+ duration_weeks=1,
93
+ overview=f"A lesson on {topic} for grade {grade} {subject}.",
94
+ essential_questions=[
95
+ f"What are the key concepts of {topic}?"
96
+ ],
97
+ daily_lessons=[
98
+ LessonBrief(
99
+ lesson_number=1,
100
+ topic=topic,
101
+ description=f"Explore {topic}.",
102
+ lesson_type="direct_instruction",
103
+ )
104
+ ],
105
+ )
106
+
107
+ with _safe_progress(console=console) as progress:
108
+ task = progress.add_task(
109
+ "Generating lesson content...", total=None
110
+ )
111
+ master = _run_async(
112
+ generate_master_content(
113
+ lesson_number=1,
114
+ unit=unit_plan,
115
+ persona=persona,
116
+ )
117
+ )
118
+ progress.update(task, description="Lesson content ready!")
119
+
120
+ # Generate the game
121
+ out_dir = _output_dir()
122
+ with _safe_progress(console=console) as progress:
123
+ task = progress.add_task(
124
+ "Designing your game (every game is unique)...", total=None
125
+ )
126
+ game_path = _run_async(
127
+ compile_game(
128
+ master=master,
129
+ persona=persona,
130
+ output_dir=out_dir,
131
+ student_preferences=students,
132
+ game_style=style,
133
+ )
134
+ )
135
+ progress.update(task, description="Game ready!")
136
+
137
+ console.print(f"\n[green]Game created:[/green] {game_path}")
138
+ console.print(
139
+ f"[dim]Open in browser: [bold]open {game_path}[/bold][/dim]"
140
+ )
141
+
142
+ # Auto-open in browser
143
+ try:
144
+ import subprocess
145
+
146
+ subprocess.Popen(
147
+ ["open", str(game_path)],
148
+ stdout=subprocess.DEVNULL,
149
+ stderr=subprocess.DEVNULL,
150
+ )
151
+ except Exception:
152
+ pass
153
+
154
+
155
+ @game_app.command("gallery")
156
+ def gallery():
157
+ """Open the local game gallery — all games you've generated."""
158
+ out_dir = _output_dir()
159
+ games = sorted(out_dir.glob("game_*.html"))
160
+
161
+ if not games:
162
+ console.print(
163
+ "[yellow]No games generated yet.[/yellow] "
164
+ "Run [bold]clawed game create \"Topic\"[/bold] to make one."
165
+ )
166
+ raise typer.Exit(0)
167
+
168
+ console.print(f"\n[bold]Your Games ({len(games)}):[/bold]\n")
169
+ for i, g in enumerate(games, 1):
170
+ name = g.stem.replace("game_", "").replace("_", " ").title()
171
+ size = g.stat().st_size / 1024
172
+ console.print(f" {i}. {name} ({size:.0f} KB)")
173
+
174
+ console.print(
175
+ f"\n[dim]Games are in: {out_dir}[/dim]"
176
+ )
177
+ console.print(
178
+ "[dim]Open any game: [bold]open path/to/game.html[/bold][/dim]"
179
+ )
@@ -302,7 +302,14 @@ def lesson(
302
302
  True, "--multi-agent/--single-agent",
303
303
  help="Multi-agent pipeline (researcher→writer→reviewer) for higher quality. Use --single-agent for speed.",
304
304
  ),
305
- fmt: str = typer.Option("markdown", "--format", "-f", help="Export format: markdown, pptx, docx, pdf, handout"),
305
+ game: bool = typer.Option(
306
+ False, "--game/--no-game",
307
+ help="Also generate an interactive HTML learning game",
308
+ ),
309
+ fmt: str = typer.Option(
310
+ "handout", "--format", "-f",
311
+ help="Export: handout, docx, pptx, pdf, markdown",
312
+ ),
306
313
  ):
307
314
  """Generate a detailed daily lesson plan.
308
315
 
@@ -404,13 +411,14 @@ def lesson(
404
411
  from clawed.compile_teacher import compile_teacher_view
405
412
  from clawed.multi_agent import multi_agent_generate_master_content
406
413
  console.print("[dim]Using multi-agent pipeline (researcher→writer→reviewer)...[/dim]")
414
+ _ma_config = AppConfig.load()
407
415
  master = _run_async(
408
416
  multi_agent_generate_master_content(
409
417
  topic=topic,
410
418
  grade=grade,
411
419
  subject=subject,
412
420
  persona=persona,
413
- config=None,
421
+ config=_ma_config,
414
422
  unit_context=kb_prompt_section,
415
423
  )
416
424
  )
@@ -501,6 +509,42 @@ def lesson(
501
509
  )
502
510
  )
503
511
 
512
+ # Generate game if requested
513
+ if game:
514
+ try:
515
+ from clawed.compile_game import compile_game
516
+ with _safe_progress(console=console) as gprog:
517
+ gtask = gprog.add_task(
518
+ "Designing learning game...", total=None
519
+ )
520
+ game_path = _run_async(
521
+ compile_game(
522
+ master=daily if hasattr(daily, "vocabulary") else None,
523
+ persona=persona,
524
+ output_dir=_output_dir(),
525
+ )
526
+ )
527
+ gprog.update(gtask, description="Game ready!")
528
+ if game_path:
529
+ console.print(
530
+ f"[green]Game created:[/green] {game_path}\n"
531
+ f"[dim]Open: open {game_path}[/dim]"
532
+ )
533
+ except Exception as e:
534
+ console.print(
535
+ f"[yellow]Game generation failed:[/yellow] {e}"
536
+ )
537
+
538
+ # Star prompt — show once per session, not every time
539
+ import os
540
+ if not os.environ.get("_CLAWED_STAR_SHOWN"):
541
+ os.environ["_CLAWED_STAR_SHOWN"] = "1"
542
+ console.print(
543
+ "\n[dim]Claw-ED is free and open source. "
544
+ "If it saved you time, consider starring the repo:[/dim]\n"
545
+ "[dim] https://github.com/SirhanMacx/Claw-ED[/dim]\n"
546
+ )
547
+
504
548
 
505
549
  # ── Differentiation / IEP ────────────────────────────────────────────────
506
550