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.
- {clawed-2.5.0 → clawed-2.5.2}/PKG-INFO +32 -2
- {clawed-2.5.0 → clawed-2.5.2}/README.md +31 -1
- {clawed-2.5.0 → clawed-2.5.2}/clawed/__init__.py +1 -1
- {clawed-2.5.0 → clawed-2.5.2}/clawed/cli.py +2 -0
- clawed-2.5.2/clawed/commands/game.py +179 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/generate.py +46 -2
- clawed-2.5.2/clawed/compile_game.py +453 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/export_docx.py +17 -3
- {clawed-2.5.0 → clawed-2.5.2}/clawed/export_pptx.py +369 -118
- {clawed-2.5.0 → clawed-2.5.2}/clawed/model_router.py +13 -13
- {clawed-2.5.0 → clawed-2.5.2}/clawed/multi_agent.py +2 -2
- {clawed-2.5.0 → clawed-2.5.2}/clawed/slide_images.py +285 -52
- {clawed-2.5.0 → clawed-2.5.2}/pyproject.toml +1 -1
- {clawed-2.5.0 → clawed-2.5.2}/.gitignore +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/LICENSE +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/__main__.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/_legacy_gateway.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/__init__.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/approvals.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/autonomy.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/context.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/core.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/custom_tools.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/drive/__init__.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/drive/auth.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/drive/client.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/fake_llm.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/loop.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/memory/__init__.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/memory/curriculum.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/memory/curriculum_kb.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/memory/embeddings.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/memory/episodes.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/memory/identity.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/memory/loader.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/memory/preferences.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/planner.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/prompt.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/scheduler.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/__init__.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/base.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/configure_profile.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/curriculum_map.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/drive_create_doc.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/drive_create_slides.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/drive_list.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/drive_organize.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/drive_read.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/drive_upload.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/export_document.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/gap_analysis.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/generate_assessment.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/generate_lesson.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/generate_lesson_bundle.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/generate_materials.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/generate_unit.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/ingest_materials.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/parent_comm.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/read_heartbeat.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/read_workspace.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/request_approval.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/schedule_task.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/search_lessons.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/search_my_materials.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/search_standards.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/student_insights.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/sub_packet.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/switch_model.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/agent_core/tools/update_soul.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/analytics.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/__init__.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/deps.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/__init__.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/chat.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/export.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/feedback.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/gateway_chat.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/generate.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/ingest.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/lessons.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/school.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/settings.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/routes/tools.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/server.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/static/app.js +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/static/style.css +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/static/widget.js +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/analytics.html +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/base.html +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/dashboard.html +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/generate.html +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/index.html +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/lesson.html +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/profile.html +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/settings.html +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/stats.html +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/api/templates/students.html +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/assessment.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/asset_registry.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/async_utils.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/auth/__init__.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/auth/google_auth.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/bot_state.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/chat.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/cli_chat.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/__init__.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/_helpers.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/bot.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/config.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/config_llm.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/config_profile.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/export.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/generate_assessment.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/generate_unit.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/queue.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/schedule_cmd.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/sub.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/train.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/commands/workspace_cmd.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/compile_slides.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/compile_student.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/compile_teacher.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/config.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/corpus.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/curriculum_map.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/database.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/__init__.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_assessment.json +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_formative_assessment.json +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_lesson_materials.json +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_lesson_science_g6.json +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_lesson_social_studies_g8.json +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_master_content.json +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_pacing_guide.json +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_quiz.json +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_rubric.json +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_unit_plan.json +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/demo/demo_year_map.json +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/differentiation.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/doc_export.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/drive.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/evaluation.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/export_handout.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/export_markdown.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/export_pdf.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/export_templates.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/export_theme.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/exporter.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/failure_codes.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/feedback.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/formats/__init__.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/formats/flipchart.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/formats/notebook.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/formats/xbk.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/gateway.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/gateway_response.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/generation.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/generation_report.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/__init__.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/export.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/feedback.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/gaps.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/generate.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/ingest.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/misc.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/onboard.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/schedule.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/handlers/standards.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/hermes_plugin.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/image_pipeline.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/improver.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/ingestor.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/io.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/lesson.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/llm.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/master_content.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/materials.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/mcp_server.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/memory_engine.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/models.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/onboarding.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/openclaw_plugin.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/parent_comm.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/persona.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/persona_evolution.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/planner.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/504_accommodations.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/admin_lesson_plan.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/assessment.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/curriculum_gaps.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/dbq_assessment.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/differentiation.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/formative_assessment.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/iep_modification.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/lesson_plan.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/master_content.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/multi_agent_researcher.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/multi_agent_reviewer.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/pacing_guide.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/parent_note.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/persona_extract.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/quiz.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/rubric.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/student_packet.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/sub_packet.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/summative_assessment.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/tiered_assignments.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/unit_plan.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/worksheet.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/prompts/year_map.txt +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/quality.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/reading_report.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/router.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/sanitize.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/scheduler.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/school.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/search.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/__init__.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/art.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/base.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/computer_science.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/ela.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/foreign_language.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/history.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/library.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/math.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/music.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/physical_education.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/science.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/social_studies.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/skills/special_education.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/standards.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/state.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/state_standards.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/student_bot.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/student_cli.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/student_telegram_bot.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/sub_packet.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/task_queue.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/templates_lib.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/tools.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/transports/__init__.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/transports/cli.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/transports/hermes.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/transports/openclaw.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/transports/student_telegram.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/transports/telegram.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/transports/web.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/tui.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/tui_chat.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/validation.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/voice.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/voice_check.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/clawed/workspace.py +0 -0
- {clawed-2.5.0 → clawed-2.5.2}/eduagent/__init__.py +0 -0
- {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.
|
|
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.
|
|
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
|
-
|
|
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=
|
|
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
|
|