moai-adk 0.35.1__py3-none-any.whl
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.
Potentially problematic release.
This version of moai-adk might be problematic. Click here for more details.
- moai_adk/__init__.py +10 -0
- moai_adk/__main__.py +199 -0
- moai_adk/cli/__init__.py +6 -0
- moai_adk/cli/commands/__init__.py +17 -0
- moai_adk/cli/commands/analyze.py +116 -0
- moai_adk/cli/commands/doctor.py +272 -0
- moai_adk/cli/commands/init.py +372 -0
- moai_adk/cli/commands/language.py +248 -0
- moai_adk/cli/commands/status.py +104 -0
- moai_adk/cli/commands/update.py +2686 -0
- moai_adk/cli/main.py +13 -0
- moai_adk/cli/prompts/__init__.py +5 -0
- moai_adk/cli/prompts/init_prompts.py +219 -0
- moai_adk/cli/spec_status.py +263 -0
- moai_adk/cli/ui/__init__.py +44 -0
- moai_adk/cli/ui/progress.py +422 -0
- moai_adk/cli/ui/prompts.py +389 -0
- moai_adk/cli/ui/theme.py +129 -0
- moai_adk/cli/worktree/__init__.py +27 -0
- moai_adk/cli/worktree/__main__.py +31 -0
- moai_adk/cli/worktree/cli.py +683 -0
- moai_adk/cli/worktree/exceptions.py +89 -0
- moai_adk/cli/worktree/manager.py +493 -0
- moai_adk/cli/worktree/models.py +65 -0
- moai_adk/cli/worktree/registry.py +422 -0
- moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
- moai_adk/core/__init__.py +1 -0
- moai_adk/core/analysis/__init__.py +9 -0
- moai_adk/core/analysis/session_analyzer.py +400 -0
- moai_adk/core/claude_integration.py +393 -0
- moai_adk/core/command_helpers.py +270 -0
- moai_adk/core/comprehensive_monitoring_system.py +1183 -0
- moai_adk/core/config/__init__.py +19 -0
- moai_adk/core/config/auto_spec_config.py +340 -0
- moai_adk/core/config/migration.py +244 -0
- moai_adk/core/config/unified.py +436 -0
- moai_adk/core/context_manager.py +273 -0
- moai_adk/core/diagnostics/__init__.py +19 -0
- moai_adk/core/diagnostics/slash_commands.py +159 -0
- moai_adk/core/enterprise_features.py +1404 -0
- moai_adk/core/error_recovery_system.py +1902 -0
- moai_adk/core/event_driven_hook_system.py +1371 -0
- moai_adk/core/git/__init__.py +31 -0
- moai_adk/core/git/branch.py +25 -0
- moai_adk/core/git/branch_manager.py +129 -0
- moai_adk/core/git/checkpoint.py +134 -0
- moai_adk/core/git/commit.py +67 -0
- moai_adk/core/git/conflict_detector.py +413 -0
- moai_adk/core/git/event_detector.py +79 -0
- moai_adk/core/git/manager.py +216 -0
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
- moai_adk/core/input_validation_middleware.py +1006 -0
- moai_adk/core/integration/__init__.py +22 -0
- moai_adk/core/integration/engine.py +157 -0
- moai_adk/core/integration/integration_tester.py +226 -0
- moai_adk/core/integration/models.py +88 -0
- moai_adk/core/integration/utils.py +211 -0
- moai_adk/core/issue_creator.py +305 -0
- moai_adk/core/jit_context_loader.py +956 -0
- moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
- moai_adk/core/language_config.py +202 -0
- moai_adk/core/language_config_resolver.py +572 -0
- moai_adk/core/language_validator.py +543 -0
- moai_adk/core/mcp/setup.py +116 -0
- moai_adk/core/merge/__init__.py +9 -0
- moai_adk/core/merge/analyzer.py +605 -0
- moai_adk/core/migration/__init__.py +18 -0
- moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
- moai_adk/core/migration/backup_manager.py +277 -0
- moai_adk/core/migration/custom_element_scanner.py +358 -0
- moai_adk/core/migration/file_migrator.py +209 -0
- moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
- moai_adk/core/migration/selective_restorer.py +470 -0
- moai_adk/core/migration/template_utils.py +74 -0
- moai_adk/core/migration/user_selection_ui.py +338 -0
- moai_adk/core/migration/version_detector.py +139 -0
- moai_adk/core/migration/version_migrator.py +228 -0
- moai_adk/core/performance/__init__.py +6 -0
- moai_adk/core/performance/cache_system.py +316 -0
- moai_adk/core/performance/parallel_processor.py +116 -0
- moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
- moai_adk/core/project/__init__.py +1 -0
- moai_adk/core/project/backup_utils.py +70 -0
- moai_adk/core/project/checker.py +300 -0
- moai_adk/core/project/detector.py +293 -0
- moai_adk/core/project/initializer.py +387 -0
- moai_adk/core/project/phase_executor.py +716 -0
- moai_adk/core/project/validator.py +139 -0
- moai_adk/core/quality/__init__.py +6 -0
- moai_adk/core/quality/trust_checker.py +377 -0
- moai_adk/core/quality/validators/__init__.py +6 -0
- moai_adk/core/quality/validators/base_validator.py +19 -0
- moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
- moai_adk/core/robust_json_parser.py +611 -0
- moai_adk/core/rollback_manager.py +918 -0
- moai_adk/core/session_manager.py +651 -0
- moai_adk/core/skill_loading_system.py +579 -0
- moai_adk/core/spec/confidence_scoring.py +680 -0
- moai_adk/core/spec/ears_template_engine.py +1247 -0
- moai_adk/core/spec/quality_validator.py +687 -0
- moai_adk/core/spec_status_manager.py +478 -0
- moai_adk/core/template/__init__.py +7 -0
- moai_adk/core/template/backup.py +174 -0
- moai_adk/core/template/config.py +191 -0
- moai_adk/core/template/languages.py +43 -0
- moai_adk/core/template/merger.py +233 -0
- moai_adk/core/template/processor.py +1200 -0
- moai_adk/core/template_engine.py +310 -0
- moai_adk/core/template_variable_synchronizer.py +417 -0
- moai_adk/core/unified_permission_manager.py +745 -0
- moai_adk/core/user_behavior_analytics.py +851 -0
- moai_adk/core/version_sync.py +429 -0
- moai_adk/foundation/__init__.py +56 -0
- moai_adk/foundation/backend.py +1027 -0
- moai_adk/foundation/database.py +1115 -0
- moai_adk/foundation/devops.py +1585 -0
- moai_adk/foundation/ears.py +431 -0
- moai_adk/foundation/frontend.py +870 -0
- moai_adk/foundation/git/commit_templates.py +557 -0
- moai_adk/foundation/git.py +376 -0
- moai_adk/foundation/langs.py +484 -0
- moai_adk/foundation/ml_ops.py +1162 -0
- moai_adk/foundation/testing.py +1524 -0
- moai_adk/foundation/trust/trust_principles.py +676 -0
- moai_adk/foundation/trust/validation_checklist.py +1573 -0
- moai_adk/project/__init__.py +0 -0
- moai_adk/project/configuration.py +1084 -0
- moai_adk/project/documentation.py +566 -0
- moai_adk/project/schema.py +447 -0
- moai_adk/statusline/__init__.py +38 -0
- moai_adk/statusline/alfred_detector.py +105 -0
- moai_adk/statusline/config.py +376 -0
- moai_adk/statusline/enhanced_output_style_detector.py +372 -0
- moai_adk/statusline/git_collector.py +190 -0
- moai_adk/statusline/main.py +322 -0
- moai_adk/statusline/metrics_tracker.py +78 -0
- moai_adk/statusline/renderer.py +343 -0
- moai_adk/statusline/update_checker.py +129 -0
- moai_adk/statusline/version_reader.py +741 -0
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +714 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
- moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
- moai_adk/templates/.claude/agents/moai/builder-plugin.md +637 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
- moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
- moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
- moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
- moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
- moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +513 -0
- moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
- moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
- moai_adk/templates/.claude/agents/moai/manager-git.md +1060 -0
- moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
- moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
- moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
- moai_adk/templates/.claude/commands/moai/0-project.md +1386 -0
- moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
- moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
- moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
- moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
- moai_adk/templates/.claude/hooks/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
- moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
- moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
- moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
- moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1083 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
- moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
- moai_adk/templates/.claude/settings.json +172 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +307 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +320 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +323 -0
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
- moai_adk/templates/.claude/skills/moai-domain-database/reference.md +545 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +492 -0
- moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
- moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +649 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +478 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +376 -0
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +385 -0
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +382 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +644 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +481 -0
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +579 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +687 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +372 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +368 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
- moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +402 -0
- moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +291 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +474 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/migration.md +341 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +463 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/validation.md +373 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/SKILL.md +275 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/adaptive-mfa.md +233 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/akamai-integration.md +215 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/application-credentials.md +280 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-log-events.md +225 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-overview.md +140 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/bot-detection.md +144 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/breached-password-detection.md +187 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/brute-force-protection.md +189 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/certifications.md +282 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/compliance-overview.md +263 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/continuous-session-protection.md +307 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/customize-mfa.md +178 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/dpop-implementation.md +283 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/fapi-implementation.md +259 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/gdpr-compliance.md +313 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/guardian-configuration.md +269 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/highly-regulated-identity.md +272 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/jwt-fundamentals.md +248 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mdl-verification.md +211 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-api-management.md +278 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-factors.md +226 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-overview.md +174 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mtls-sender-constraining.md +316 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/ropg-flow-mfa.md +217 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-center.md +325 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-guidance.md +277 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/state-parameters.md +178 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/step-up-authentication.md +251 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/suspicious-ip-throttling.md +240 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/tenant-access-control.md +180 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/webauthn-fido.md +235 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1434 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +411 -0
- moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
- moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
- moai_adk/templates/.git-hooks/pre-commit +128 -0
- moai_adk/templates/.git-hooks/pre-push +365 -0
- moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
- moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
- moai_adk/templates/.github/workflows/spec-issue-sync.yml +337 -0
- moai_adk/templates/.gitignore +222 -0
- moai_adk/templates/.mcp.json +13 -0
- moai_adk/templates/.moai/config/config.yaml +58 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +174 -0
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +107 -0
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +79 -0
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +632 -0
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +182 -0
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +96 -0
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
- moai_adk/templates/.moai/config/sections/language.yaml +11 -0
- moai_adk/templates/.moai/config/sections/project.yaml +13 -0
- moai_adk/templates/.moai/config/sections/quality.yaml +17 -0
- moai_adk/templates/.moai/config/sections/system.yaml +24 -0
- moai_adk/templates/.moai/config/sections/user.yaml +5 -0
- moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
- moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
- moai_adk/templates/CLAUDE.md +642 -0
- moai_adk/utils/__init__.py +30 -0
- moai_adk/utils/banner.py +38 -0
- moai_adk/utils/common.py +294 -0
- moai_adk/utils/link_validator.py +241 -0
- moai_adk/utils/logger.py +147 -0
- moai_adk/utils/safe_file_reader.py +206 -0
- moai_adk/utils/timeout.py +160 -0
- moai_adk/utils/toon_utils.py +256 -0
- moai_adk/version.py +22 -0
- moai_adk-0.35.1.dist-info/METADATA +3018 -0
- moai_adk-0.35.1.dist-info/RECORD +502 -0
- moai_adk-0.35.1.dist-info/WHEEL +4 -0
- moai_adk-0.35.1.dist-info/entry_points.txt +3 -0
- moai_adk-0.35.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,1048 @@
|
|
|
1
|
+
# Context & Session Management Examples
|
|
2
|
+
|
|
3
|
+
Multishot prompting examples demonstrating practical context management patterns covering 200K token budget optimization, session persistence, multi-agent handoffs, and progressive disclosure.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Example 1: Token Budget Monitoring and Management
|
|
8
|
+
|
|
9
|
+
**Scenario**: Implement real-time token budget monitoring with automatic actions.
|
|
10
|
+
|
|
11
|
+
**Input**:
|
|
12
|
+
```python
|
|
13
|
+
# Need: Token budget management that:
|
|
14
|
+
# - Tracks usage against 200K limit
|
|
15
|
+
# - Warns at critical thresholds
|
|
16
|
+
# - Triggers automatic compression
|
|
17
|
+
# - Prevents context overflow
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Output**:
|
|
21
|
+
```python
|
|
22
|
+
from dataclasses import dataclass
|
|
23
|
+
from typing import Optional, Callable
|
|
24
|
+
from datetime import datetime
|
|
25
|
+
import logging
|
|
26
|
+
|
|
27
|
+
logger = logging.getLogger(__name__)
|
|
28
|
+
|
|
29
|
+
@dataclass
|
|
30
|
+
class TokenBudgetState:
|
|
31
|
+
total_budget: int = 200000
|
|
32
|
+
used_tokens: int = 0
|
|
33
|
+
system_reserved: int = 15000 # System prompt, instructions
|
|
34
|
+
emergency_reserve: int = 55000 # Last 27.5% for recovery
|
|
35
|
+
|
|
36
|
+
@property
|
|
37
|
+
def available(self) -> int:
|
|
38
|
+
return self.total_budget - self.used_tokens
|
|
39
|
+
|
|
40
|
+
@property
|
|
41
|
+
def usage_percent(self) -> float:
|
|
42
|
+
return (self.used_tokens / self.total_budget) * 100
|
|
43
|
+
|
|
44
|
+
@property
|
|
45
|
+
def is_critical(self) -> bool:
|
|
46
|
+
return self.usage_percent >= 85
|
|
47
|
+
|
|
48
|
+
@property
|
|
49
|
+
def is_warning(self) -> bool:
|
|
50
|
+
return self.usage_percent >= 75
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class TokenBudgetManager:
|
|
54
|
+
"""Manages 200K token budget with automatic optimization."""
|
|
55
|
+
|
|
56
|
+
# Budget allocation (recommended breakdown)
|
|
57
|
+
ALLOCATION = {
|
|
58
|
+
"system": 15000, # 7.5% - System prompt, instructions
|
|
59
|
+
"conversation": 80000, # 40% - Active conversation
|
|
60
|
+
"reference": 50000, # 25% - Reference context
|
|
61
|
+
"reserve": 55000 # 27.5% - Emergency reserve
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
THRESHOLDS = {
|
|
65
|
+
"normal": 60,
|
|
66
|
+
"warning": 75,
|
|
67
|
+
"critical": 85,
|
|
68
|
+
"emergency": 95
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
def __init__(self):
|
|
72
|
+
self.state = TokenBudgetState()
|
|
73
|
+
self.callbacks: dict[str, Callable] = {}
|
|
74
|
+
self.checkpoints: list[dict] = []
|
|
75
|
+
|
|
76
|
+
def register_callback(self, event: str, callback: Callable):
|
|
77
|
+
"""Register callback for budget events."""
|
|
78
|
+
self.callbacks[event] = callback
|
|
79
|
+
|
|
80
|
+
def update_usage(self, tokens_used: int, source: str = "unknown"):
|
|
81
|
+
"""Update token usage and trigger appropriate actions."""
|
|
82
|
+
self.state.used_tokens = tokens_used
|
|
83
|
+
|
|
84
|
+
logger.info(
|
|
85
|
+
f"Token update: {tokens_used:,}/{self.state.total_budget:,} "
|
|
86
|
+
f"({self.state.usage_percent:.1f}%) from {source}"
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
# Check thresholds and trigger actions
|
|
90
|
+
if self.state.usage_percent >= self.THRESHOLDS["emergency"]:
|
|
91
|
+
self._handle_emergency()
|
|
92
|
+
elif self.state.usage_percent >= self.THRESHOLDS["critical"]:
|
|
93
|
+
self._handle_critical()
|
|
94
|
+
elif self.state.usage_percent >= self.THRESHOLDS["warning"]:
|
|
95
|
+
self._handle_warning()
|
|
96
|
+
|
|
97
|
+
def _handle_warning(self):
|
|
98
|
+
"""Handle warning threshold (75%)."""
|
|
99
|
+
logger.warning(
|
|
100
|
+
f"Token usage at {self.state.usage_percent:.1f}% - "
|
|
101
|
+
"Starting context optimization"
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
# Defer non-critical context
|
|
105
|
+
if "on_warning" in self.callbacks:
|
|
106
|
+
self.callbacks["on_warning"](self.state)
|
|
107
|
+
|
|
108
|
+
def _handle_critical(self):
|
|
109
|
+
"""Handle critical threshold (85%)."""
|
|
110
|
+
logger.error(
|
|
111
|
+
f"Token usage CRITICAL at {self.state.usage_percent:.1f}% - "
|
|
112
|
+
"Triggering context compression"
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
# Create checkpoint before compression
|
|
116
|
+
self.create_checkpoint("pre_compression")
|
|
117
|
+
|
|
118
|
+
if "on_critical" in self.callbacks:
|
|
119
|
+
self.callbacks["on_critical"](self.state)
|
|
120
|
+
|
|
121
|
+
def _handle_emergency(self):
|
|
122
|
+
"""Handle emergency threshold (95%)."""
|
|
123
|
+
logger.critical(
|
|
124
|
+
f"Token usage EMERGENCY at {self.state.usage_percent:.1f}% - "
|
|
125
|
+
"Forcing context clear"
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
# Force immediate action
|
|
129
|
+
if "on_emergency" in self.callbacks:
|
|
130
|
+
self.callbacks["on_emergency"](self.state)
|
|
131
|
+
|
|
132
|
+
def create_checkpoint(self, name: str):
|
|
133
|
+
"""Create a checkpoint for potential recovery."""
|
|
134
|
+
checkpoint = {
|
|
135
|
+
"name": name,
|
|
136
|
+
"timestamp": datetime.utcnow().isoformat(),
|
|
137
|
+
"tokens_used": self.state.used_tokens,
|
|
138
|
+
"usage_percent": self.state.usage_percent
|
|
139
|
+
}
|
|
140
|
+
self.checkpoints.append(checkpoint)
|
|
141
|
+
logger.info(f"Checkpoint created: {name}")
|
|
142
|
+
return checkpoint
|
|
143
|
+
|
|
144
|
+
def get_optimization_suggestions(self) -> list[str]:
|
|
145
|
+
"""Get suggestions for reducing token usage."""
|
|
146
|
+
suggestions = []
|
|
147
|
+
|
|
148
|
+
if self.state.usage_percent > 50:
|
|
149
|
+
suggestions.append("Consider using /clear to reset context")
|
|
150
|
+
|
|
151
|
+
if self.state.usage_percent > 60:
|
|
152
|
+
suggestions.append("Defer non-critical reference documentation")
|
|
153
|
+
|
|
154
|
+
if self.state.usage_percent > 75:
|
|
155
|
+
suggestions.append("Apply progressive summarization to conversation")
|
|
156
|
+
|
|
157
|
+
if self.state.usage_percent > 85:
|
|
158
|
+
suggestions.append("URGENT: Execute context compression immediately")
|
|
159
|
+
|
|
160
|
+
return suggestions
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
# Usage example
|
|
164
|
+
manager = TokenBudgetManager()
|
|
165
|
+
|
|
166
|
+
def on_warning(state: TokenBudgetState):
|
|
167
|
+
print(f"Warning: {state.available:,} tokens remaining")
|
|
168
|
+
|
|
169
|
+
def on_critical(state: TokenBudgetState):
|
|
170
|
+
print("Critical: Compressing context...")
|
|
171
|
+
# Execute compression logic
|
|
172
|
+
|
|
173
|
+
def on_emergency(state: TokenBudgetState):
|
|
174
|
+
print("Emergency: Forcing /clear command")
|
|
175
|
+
# Execute /clear
|
|
176
|
+
|
|
177
|
+
manager.register_callback("on_warning", on_warning)
|
|
178
|
+
manager.register_callback("on_critical", on_critical)
|
|
179
|
+
manager.register_callback("on_emergency", on_emergency)
|
|
180
|
+
|
|
181
|
+
# Simulate usage updates
|
|
182
|
+
manager.update_usage(120000, source="conversation") # 60% - normal
|
|
183
|
+
manager.update_usage(155000, source="file_loading") # 77.5% - warning triggered
|
|
184
|
+
manager.update_usage(175000, source="agent_output") # 87.5% - critical triggered
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**Explanation**: This pattern implements comprehensive token budget monitoring with threshold-based callbacks, checkpointing, and optimization suggestions.
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Example 2: Session State Persistence
|
|
192
|
+
|
|
193
|
+
**Scenario**: Implement session state persistence for resumable workflows.
|
|
194
|
+
|
|
195
|
+
**Input**:
|
|
196
|
+
```python
|
|
197
|
+
# Need: Session management that:
|
|
198
|
+
# - Persists state across interruptions
|
|
199
|
+
# - Supports workflow resumption
|
|
200
|
+
# - Tracks SPEC progress
|
|
201
|
+
# - Handles model switches
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**Output**:
|
|
205
|
+
```python
|
|
206
|
+
import json
|
|
207
|
+
from pathlib import Path
|
|
208
|
+
from dataclasses import dataclass, asdict, field
|
|
209
|
+
from datetime import datetime
|
|
210
|
+
from typing import Optional, List, Dict, Any
|
|
211
|
+
from enum import Enum
|
|
212
|
+
|
|
213
|
+
class SessionPhase(Enum):
|
|
214
|
+
INIT = "initialization"
|
|
215
|
+
PLANNING = "planning"
|
|
216
|
+
IMPLEMENTATION = "implementation"
|
|
217
|
+
TESTING = "testing"
|
|
218
|
+
DOCUMENTATION = "documentation"
|
|
219
|
+
REVIEW = "review"
|
|
220
|
+
COMPLETED = "completed"
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
@dataclass
|
|
224
|
+
class WorkState:
|
|
225
|
+
current_spec: Optional[str] = None
|
|
226
|
+
phase: SessionPhase = SessionPhase.INIT
|
|
227
|
+
completed_steps: List[str] = field(default_factory=list)
|
|
228
|
+
pending_steps: List[str] = field(default_factory=list)
|
|
229
|
+
artifacts: Dict[str, str] = field(default_factory=dict)
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
@dataclass
|
|
233
|
+
class ContextWindow:
|
|
234
|
+
total: int = 200000
|
|
235
|
+
used: int = 0
|
|
236
|
+
available: int = 200000
|
|
237
|
+
position_percent: float = 0.0
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
@dataclass
|
|
241
|
+
class SessionState:
|
|
242
|
+
session_id: str
|
|
243
|
+
model: str
|
|
244
|
+
created_at: str
|
|
245
|
+
last_updated: str
|
|
246
|
+
context_window: ContextWindow
|
|
247
|
+
work_state: WorkState
|
|
248
|
+
user_context: Dict[str, Any] = field(default_factory=dict)
|
|
249
|
+
persistence: Dict[str, Any] = field(default_factory=dict)
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
class SessionManager:
|
|
253
|
+
"""Manages session state with persistence and recovery."""
|
|
254
|
+
|
|
255
|
+
def __init__(self, storage_path: str = ".moai/sessions"):
|
|
256
|
+
self.storage_path = Path(storage_path)
|
|
257
|
+
self.storage_path.mkdir(parents=True, exist_ok=True)
|
|
258
|
+
self.current_session: Optional[SessionState] = None
|
|
259
|
+
|
|
260
|
+
def create_session(
|
|
261
|
+
self,
|
|
262
|
+
model: str = "claude-sonnet-4-5-20250929",
|
|
263
|
+
user_context: Optional[Dict] = None
|
|
264
|
+
) -> SessionState:
|
|
265
|
+
"""Create a new session."""
|
|
266
|
+
import uuid
|
|
267
|
+
|
|
268
|
+
session_id = f"sess_{uuid.uuid4().hex[:12]}"
|
|
269
|
+
now = datetime.utcnow().isoformat()
|
|
270
|
+
|
|
271
|
+
session = SessionState(
|
|
272
|
+
session_id=session_id,
|
|
273
|
+
model=model,
|
|
274
|
+
created_at=now,
|
|
275
|
+
last_updated=now,
|
|
276
|
+
context_window=ContextWindow(),
|
|
277
|
+
work_state=WorkState(),
|
|
278
|
+
user_context=user_context or {},
|
|
279
|
+
persistence={
|
|
280
|
+
"auto_save": True,
|
|
281
|
+
"save_interval_seconds": 60,
|
|
282
|
+
"context_preservation": "critical_only"
|
|
283
|
+
}
|
|
284
|
+
)
|
|
285
|
+
|
|
286
|
+
self.current_session = session
|
|
287
|
+
self._save_session(session)
|
|
288
|
+
return session
|
|
289
|
+
|
|
290
|
+
def load_session(self, session_id: str) -> Optional[SessionState]:
|
|
291
|
+
"""Load an existing session."""
|
|
292
|
+
file_path = self.storage_path / f"{session_id}.json"
|
|
293
|
+
|
|
294
|
+
if not file_path.exists():
|
|
295
|
+
return None
|
|
296
|
+
|
|
297
|
+
with open(file_path, 'r') as f:
|
|
298
|
+
data = json.load(f)
|
|
299
|
+
|
|
300
|
+
# Reconstruct dataclasses
|
|
301
|
+
session = SessionState(
|
|
302
|
+
session_id=data["session_id"],
|
|
303
|
+
model=data["model"],
|
|
304
|
+
created_at=data["created_at"],
|
|
305
|
+
last_updated=data["last_updated"],
|
|
306
|
+
context_window=ContextWindow(**data["context_window"]),
|
|
307
|
+
work_state=WorkState(
|
|
308
|
+
current_spec=data["work_state"]["current_spec"],
|
|
309
|
+
phase=SessionPhase(data["work_state"]["phase"]),
|
|
310
|
+
completed_steps=data["work_state"]["completed_steps"],
|
|
311
|
+
pending_steps=data["work_state"]["pending_steps"],
|
|
312
|
+
artifacts=data["work_state"]["artifacts"]
|
|
313
|
+
),
|
|
314
|
+
user_context=data.get("user_context", {}),
|
|
315
|
+
persistence=data.get("persistence", {})
|
|
316
|
+
)
|
|
317
|
+
|
|
318
|
+
self.current_session = session
|
|
319
|
+
return session
|
|
320
|
+
|
|
321
|
+
def update_work_state(
|
|
322
|
+
self,
|
|
323
|
+
spec_id: Optional[str] = None,
|
|
324
|
+
phase: Optional[SessionPhase] = None,
|
|
325
|
+
completed_step: Optional[str] = None,
|
|
326
|
+
artifact: Optional[tuple[str, str]] = None
|
|
327
|
+
):
|
|
328
|
+
"""Update work state with automatic persistence."""
|
|
329
|
+
if not self.current_session:
|
|
330
|
+
raise ValueError("No active session")
|
|
331
|
+
|
|
332
|
+
work = self.current_session.work_state
|
|
333
|
+
|
|
334
|
+
if spec_id:
|
|
335
|
+
work.current_spec = spec_id
|
|
336
|
+
if phase:
|
|
337
|
+
work.phase = phase
|
|
338
|
+
if completed_step:
|
|
339
|
+
work.completed_steps.append(completed_step)
|
|
340
|
+
if completed_step in work.pending_steps:
|
|
341
|
+
work.pending_steps.remove(completed_step)
|
|
342
|
+
if artifact:
|
|
343
|
+
work.artifacts[artifact[0]] = artifact[1]
|
|
344
|
+
|
|
345
|
+
self.current_session.last_updated = datetime.utcnow().isoformat()
|
|
346
|
+
self._save_session(self.current_session)
|
|
347
|
+
|
|
348
|
+
def update_context_usage(self, tokens_used: int):
|
|
349
|
+
"""Update context window usage."""
|
|
350
|
+
if not self.current_session:
|
|
351
|
+
return
|
|
352
|
+
|
|
353
|
+
ctx = self.current_session.context_window
|
|
354
|
+
ctx.used = tokens_used
|
|
355
|
+
ctx.available = ctx.total - tokens_used
|
|
356
|
+
ctx.position_percent = (tokens_used / ctx.total) * 100
|
|
357
|
+
|
|
358
|
+
self.current_session.last_updated = datetime.utcnow().isoformat()
|
|
359
|
+
self._save_session(self.current_session)
|
|
360
|
+
|
|
361
|
+
def get_resumption_context(self) -> Dict[str, Any]:
|
|
362
|
+
"""Get context for resuming interrupted work."""
|
|
363
|
+
if not self.current_session:
|
|
364
|
+
return {}
|
|
365
|
+
|
|
366
|
+
return {
|
|
367
|
+
"spec_id": self.current_session.work_state.current_spec,
|
|
368
|
+
"phase": self.current_session.work_state.phase.value,
|
|
369
|
+
"completed": self.current_session.work_state.completed_steps,
|
|
370
|
+
"pending": self.current_session.work_state.pending_steps,
|
|
371
|
+
"last_update": self.current_session.last_updated,
|
|
372
|
+
"context_usage": self.current_session.context_window.position_percent
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
def prepare_for_clear(self) -> Dict[str, Any]:
|
|
376
|
+
"""Prepare essential context before /clear."""
|
|
377
|
+
if not self.current_session:
|
|
378
|
+
return {}
|
|
379
|
+
|
|
380
|
+
# Save current state
|
|
381
|
+
self._save_session(self.current_session)
|
|
382
|
+
|
|
383
|
+
# Return minimal context to reload after clear
|
|
384
|
+
return {
|
|
385
|
+
"session_id": self.current_session.session_id,
|
|
386
|
+
"spec_id": self.current_session.work_state.current_spec,
|
|
387
|
+
"phase": self.current_session.work_state.phase.value,
|
|
388
|
+
"reload_files": [
|
|
389
|
+
"CLAUDE.md",
|
|
390
|
+
f".moai/specs/{self.current_session.work_state.current_spec}.md"
|
|
391
|
+
]
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
def _save_session(self, session: SessionState):
|
|
395
|
+
"""Save session to storage."""
|
|
396
|
+
file_path = self.storage_path / f"{session.session_id}.json"
|
|
397
|
+
|
|
398
|
+
# Convert to dict with enum handling
|
|
399
|
+
data = {
|
|
400
|
+
"session_id": session.session_id,
|
|
401
|
+
"model": session.model,
|
|
402
|
+
"created_at": session.created_at,
|
|
403
|
+
"last_updated": session.last_updated,
|
|
404
|
+
"context_window": asdict(session.context_window),
|
|
405
|
+
"work_state": {
|
|
406
|
+
**asdict(session.work_state),
|
|
407
|
+
"phase": session.work_state.phase.value
|
|
408
|
+
},
|
|
409
|
+
"user_context": session.user_context,
|
|
410
|
+
"persistence": session.persistence
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
with open(file_path, 'w') as f:
|
|
414
|
+
json.dump(data, f, indent=2)
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
# Usage example
|
|
418
|
+
manager = SessionManager()
|
|
419
|
+
|
|
420
|
+
# Create new session
|
|
421
|
+
session = manager.create_session(
|
|
422
|
+
model="claude-sonnet-4-5-20250929",
|
|
423
|
+
user_context={"language": "ko", "user_name": "Developer"}
|
|
424
|
+
)
|
|
425
|
+
print(f"Created session: {session.session_id}")
|
|
426
|
+
|
|
427
|
+
# Update work progress
|
|
428
|
+
manager.update_work_state(
|
|
429
|
+
spec_id="SPEC-001",
|
|
430
|
+
phase=SessionPhase.IMPLEMENTATION
|
|
431
|
+
)
|
|
432
|
+
manager.update_work_state(completed_step="spec_complete")
|
|
433
|
+
manager.update_work_state(completed_step="architecture_defined")
|
|
434
|
+
manager.update_work_state(artifact=("api_schema", "schemas/user.json"))
|
|
435
|
+
|
|
436
|
+
# Before /clear
|
|
437
|
+
clear_context = manager.prepare_for_clear()
|
|
438
|
+
print(f"Context to reload after clear: {clear_context}")
|
|
439
|
+
|
|
440
|
+
# After interruption - resume
|
|
441
|
+
# resumed = manager.load_session(session.session_id)
|
|
442
|
+
# print(f"Resumed at phase: {resumed.work_state.phase.value}")
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
**Explanation**: This pattern provides comprehensive session state management with persistence, work progress tracking, and seamless resumption after interruptions or /clear commands.
|
|
446
|
+
|
|
447
|
+
---
|
|
448
|
+
|
|
449
|
+
## Example 3: Multi-Agent Handoff Protocol
|
|
450
|
+
|
|
451
|
+
**Scenario**: Implement efficient context handoff between agents.
|
|
452
|
+
|
|
453
|
+
**Input**:
|
|
454
|
+
```python
|
|
455
|
+
# Need: Multi-agent handoff that:
|
|
456
|
+
# - Minimizes token overhead
|
|
457
|
+
# - Validates handoff integrity
|
|
458
|
+
# - Supports context compression
|
|
459
|
+
# - Handles agent compatibility
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
**Output**:
|
|
463
|
+
```python
|
|
464
|
+
from dataclasses import dataclass, field
|
|
465
|
+
from typing import Dict, Any, List, Optional
|
|
466
|
+
from datetime import datetime
|
|
467
|
+
from enum import Enum
|
|
468
|
+
import hashlib
|
|
469
|
+
|
|
470
|
+
class AgentType(Enum):
|
|
471
|
+
SPEC_BUILDER = "spec-builder"
|
|
472
|
+
TDD_IMPLEMENTER = "tdd-implementer"
|
|
473
|
+
BACKEND_EXPERT = "backend-expert"
|
|
474
|
+
FRONTEND_EXPERT = "frontend-expert"
|
|
475
|
+
DOCS_MANAGER = "docs-manager"
|
|
476
|
+
QUALITY_GATE = "quality-gate"
|
|
477
|
+
|
|
478
|
+
|
|
479
|
+
# Agent compatibility matrix
|
|
480
|
+
AGENT_COMPATIBILITY = {
|
|
481
|
+
AgentType.SPEC_BUILDER: [
|
|
482
|
+
AgentType.TDD_IMPLEMENTER,
|
|
483
|
+
AgentType.BACKEND_EXPERT,
|
|
484
|
+
AgentType.FRONTEND_EXPERT
|
|
485
|
+
],
|
|
486
|
+
AgentType.TDD_IMPLEMENTER: [
|
|
487
|
+
AgentType.QUALITY_GATE,
|
|
488
|
+
AgentType.DOCS_MANAGER
|
|
489
|
+
],
|
|
490
|
+
AgentType.BACKEND_EXPERT: [
|
|
491
|
+
AgentType.FRONTEND_EXPERT,
|
|
492
|
+
AgentType.QUALITY_GATE,
|
|
493
|
+
AgentType.DOCS_MANAGER
|
|
494
|
+
],
|
|
495
|
+
AgentType.FRONTEND_EXPERT: [
|
|
496
|
+
AgentType.QUALITY_GATE,
|
|
497
|
+
AgentType.DOCS_MANAGER
|
|
498
|
+
],
|
|
499
|
+
AgentType.QUALITY_GATE: [
|
|
500
|
+
AgentType.DOCS_MANAGER
|
|
501
|
+
]
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
|
|
505
|
+
@dataclass
|
|
506
|
+
class SessionContext:
|
|
507
|
+
session_id: str
|
|
508
|
+
model: str
|
|
509
|
+
context_position: float
|
|
510
|
+
available_tokens: int
|
|
511
|
+
user_language: str = "en"
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
@dataclass
|
|
515
|
+
class TaskContext:
|
|
516
|
+
spec_id: str
|
|
517
|
+
current_phase: str
|
|
518
|
+
completed_steps: List[str]
|
|
519
|
+
next_step: str
|
|
520
|
+
key_artifacts: Dict[str, str] = field(default_factory=dict)
|
|
521
|
+
|
|
522
|
+
|
|
523
|
+
@dataclass
|
|
524
|
+
class RecoveryInfo:
|
|
525
|
+
last_checkpoint: str
|
|
526
|
+
recovery_tokens_reserved: int
|
|
527
|
+
session_fork_available: bool = True
|
|
528
|
+
|
|
529
|
+
|
|
530
|
+
@dataclass
|
|
531
|
+
class HandoffPackage:
|
|
532
|
+
handoff_id: str
|
|
533
|
+
from_agent: AgentType
|
|
534
|
+
to_agent: AgentType
|
|
535
|
+
session_context: SessionContext
|
|
536
|
+
task_context: TaskContext
|
|
537
|
+
recovery_info: RecoveryInfo
|
|
538
|
+
created_at: str = field(default_factory=lambda: datetime.utcnow().isoformat())
|
|
539
|
+
checksum: str = ""
|
|
540
|
+
|
|
541
|
+
def __post_init__(self):
|
|
542
|
+
if not self.checksum:
|
|
543
|
+
self.checksum = self._calculate_checksum()
|
|
544
|
+
|
|
545
|
+
def _calculate_checksum(self) -> str:
|
|
546
|
+
"""Calculate checksum for integrity verification."""
|
|
547
|
+
content = f"{self.handoff_id}{self.from_agent.value}{self.to_agent.value}"
|
|
548
|
+
content += f"{self.task_context.spec_id}{self.created_at}"
|
|
549
|
+
return hashlib.sha256(content.encode()).hexdigest()[:16]
|
|
550
|
+
|
|
551
|
+
|
|
552
|
+
class HandoffError(Exception):
|
|
553
|
+
"""Base exception for handoff errors."""
|
|
554
|
+
pass
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
class AgentCompatibilityError(HandoffError):
|
|
558
|
+
"""Raised when agents cannot cooperate."""
|
|
559
|
+
pass
|
|
560
|
+
|
|
561
|
+
|
|
562
|
+
class TokenBudgetError(HandoffError):
|
|
563
|
+
"""Raised when token budget is insufficient."""
|
|
564
|
+
pass
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
class IntegrityError(HandoffError):
|
|
568
|
+
"""Raised when handoff integrity check fails."""
|
|
569
|
+
pass
|
|
570
|
+
|
|
571
|
+
|
|
572
|
+
class HandoffManager:
|
|
573
|
+
"""Manages multi-agent handoff with validation."""
|
|
574
|
+
|
|
575
|
+
MINIMUM_SAFE_TOKENS = 30000
|
|
576
|
+
|
|
577
|
+
def __init__(self):
|
|
578
|
+
self.handoff_history: List[HandoffPackage] = []
|
|
579
|
+
|
|
580
|
+
def can_agents_cooperate(
|
|
581
|
+
self,
|
|
582
|
+
from_agent: AgentType,
|
|
583
|
+
to_agent: AgentType
|
|
584
|
+
) -> bool:
|
|
585
|
+
"""Check if agents can cooperate based on compatibility matrix."""
|
|
586
|
+
compatible = AGENT_COMPATIBILITY.get(from_agent, [])
|
|
587
|
+
return to_agent in compatible
|
|
588
|
+
|
|
589
|
+
def create_handoff(
|
|
590
|
+
self,
|
|
591
|
+
from_agent: AgentType,
|
|
592
|
+
to_agent: AgentType,
|
|
593
|
+
session_context: SessionContext,
|
|
594
|
+
task_context: TaskContext,
|
|
595
|
+
recovery_info: RecoveryInfo
|
|
596
|
+
) -> HandoffPackage:
|
|
597
|
+
"""Create a validated handoff package."""
|
|
598
|
+
import uuid
|
|
599
|
+
|
|
600
|
+
# Validate compatibility
|
|
601
|
+
if not self.can_agents_cooperate(from_agent, to_agent):
|
|
602
|
+
raise AgentCompatibilityError(
|
|
603
|
+
f"Agent {from_agent.value} cannot hand off to {to_agent.value}"
|
|
604
|
+
)
|
|
605
|
+
|
|
606
|
+
# Validate token budget
|
|
607
|
+
if session_context.available_tokens < self.MINIMUM_SAFE_TOKENS:
|
|
608
|
+
raise TokenBudgetError(
|
|
609
|
+
f"Insufficient tokens: {session_context.available_tokens} < "
|
|
610
|
+
f"{self.MINIMUM_SAFE_TOKENS} required"
|
|
611
|
+
)
|
|
612
|
+
|
|
613
|
+
handoff = HandoffPackage(
|
|
614
|
+
handoff_id=f"hoff_{uuid.uuid4().hex[:8]}",
|
|
615
|
+
from_agent=from_agent,
|
|
616
|
+
to_agent=to_agent,
|
|
617
|
+
session_context=session_context,
|
|
618
|
+
task_context=task_context,
|
|
619
|
+
recovery_info=recovery_info
|
|
620
|
+
)
|
|
621
|
+
|
|
622
|
+
self.handoff_history.append(handoff)
|
|
623
|
+
return handoff
|
|
624
|
+
|
|
625
|
+
def validate_handoff(self, package: HandoffPackage) -> bool:
|
|
626
|
+
"""Validate handoff package integrity."""
|
|
627
|
+
# Verify checksum
|
|
628
|
+
expected_checksum = package._calculate_checksum()
|
|
629
|
+
if package.checksum != expected_checksum:
|
|
630
|
+
raise IntegrityError("Handoff checksum mismatch")
|
|
631
|
+
|
|
632
|
+
# Verify agent compatibility
|
|
633
|
+
if not self.can_agents_cooperate(package.from_agent, package.to_agent):
|
|
634
|
+
raise AgentCompatibilityError("Agents cannot cooperate")
|
|
635
|
+
|
|
636
|
+
# Verify token budget
|
|
637
|
+
if package.session_context.available_tokens < self.MINIMUM_SAFE_TOKENS:
|
|
638
|
+
# Trigger compression instead of failing
|
|
639
|
+
return self._trigger_context_compression(package)
|
|
640
|
+
|
|
641
|
+
return True
|
|
642
|
+
|
|
643
|
+
def _trigger_context_compression(self, package: HandoffPackage) -> bool:
|
|
644
|
+
"""Compress context when token budget is low."""
|
|
645
|
+
print(f"Compressing context for handoff {package.handoff_id}")
|
|
646
|
+
|
|
647
|
+
# Apply progressive summarization
|
|
648
|
+
# In practice, this would compress task_context.key_artifacts
|
|
649
|
+
|
|
650
|
+
return True
|
|
651
|
+
|
|
652
|
+
def extract_minimal_context(
|
|
653
|
+
self,
|
|
654
|
+
full_context: Dict[str, Any]
|
|
655
|
+
) -> Dict[str, Any]:
|
|
656
|
+
"""Extract only critical context for handoff."""
|
|
657
|
+
priority_fields = [
|
|
658
|
+
"spec_id",
|
|
659
|
+
"current_phase",
|
|
660
|
+
"next_step",
|
|
661
|
+
"critical_decisions",
|
|
662
|
+
"blocking_issues"
|
|
663
|
+
]
|
|
664
|
+
|
|
665
|
+
return {k: v for k, v in full_context.items() if k in priority_fields}
|
|
666
|
+
|
|
667
|
+
def get_handoff_summary(self) -> Dict[str, Any]:
|
|
668
|
+
"""Get summary of all handoffs in session."""
|
|
669
|
+
return {
|
|
670
|
+
"total_handoffs": len(self.handoff_history),
|
|
671
|
+
"handoffs": [
|
|
672
|
+
{
|
|
673
|
+
"id": h.handoff_id,
|
|
674
|
+
"from": h.from_agent.value,
|
|
675
|
+
"to": h.to_agent.value,
|
|
676
|
+
"spec": h.task_context.spec_id,
|
|
677
|
+
"timestamp": h.created_at
|
|
678
|
+
}
|
|
679
|
+
for h in self.handoff_history
|
|
680
|
+
]
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
|
|
684
|
+
# Usage example
|
|
685
|
+
manager = HandoffManager()
|
|
686
|
+
|
|
687
|
+
# Create handoff from spec-builder to tdd-implementer
|
|
688
|
+
session_ctx = SessionContext(
|
|
689
|
+
session_id="sess_abc123",
|
|
690
|
+
model="claude-sonnet-4-5-20250929",
|
|
691
|
+
context_position=42.5,
|
|
692
|
+
available_tokens=115000,
|
|
693
|
+
user_language="ko"
|
|
694
|
+
)
|
|
695
|
+
|
|
696
|
+
task_ctx = TaskContext(
|
|
697
|
+
spec_id="SPEC-001",
|
|
698
|
+
current_phase="planning_complete",
|
|
699
|
+
completed_steps=["requirement_analysis", "spec_creation", "architecture_design"],
|
|
700
|
+
next_step="write_tests",
|
|
701
|
+
key_artifacts={
|
|
702
|
+
"spec_document": ".moai/specs/SPEC-001.md",
|
|
703
|
+
"architecture": ".moai/architecture/SPEC-001.mermaid"
|
|
704
|
+
}
|
|
705
|
+
)
|
|
706
|
+
|
|
707
|
+
recovery = RecoveryInfo(
|
|
708
|
+
last_checkpoint=datetime.utcnow().isoformat(),
|
|
709
|
+
recovery_tokens_reserved=55000,
|
|
710
|
+
session_fork_available=True
|
|
711
|
+
)
|
|
712
|
+
|
|
713
|
+
try:
|
|
714
|
+
handoff = manager.create_handoff(
|
|
715
|
+
from_agent=AgentType.SPEC_BUILDER,
|
|
716
|
+
to_agent=AgentType.TDD_IMPLEMENTER,
|
|
717
|
+
session_context=session_ctx,
|
|
718
|
+
task_context=task_ctx,
|
|
719
|
+
recovery_info=recovery
|
|
720
|
+
)
|
|
721
|
+
|
|
722
|
+
print(f"Handoff created: {handoff.handoff_id}")
|
|
723
|
+
print(f"Checksum: {handoff.checksum}")
|
|
724
|
+
|
|
725
|
+
# Validate before sending to next agent
|
|
726
|
+
is_valid = manager.validate_handoff(handoff)
|
|
727
|
+
print(f"Handoff valid: {is_valid}")
|
|
728
|
+
|
|
729
|
+
except HandoffError as e:
|
|
730
|
+
print(f"Handoff failed: {e}")
|
|
731
|
+
```
|
|
732
|
+
|
|
733
|
+
**Explanation**: This pattern implements robust multi-agent handoffs with compatibility checking, token budget validation, integrity verification, and context compression for efficient agent coordination.
|
|
734
|
+
|
|
735
|
+
---
|
|
736
|
+
|
|
737
|
+
## Common Patterns
|
|
738
|
+
|
|
739
|
+
### Pattern 1: Aggressive /clear Strategy
|
|
740
|
+
|
|
741
|
+
Execute /clear at strategic checkpoints:
|
|
742
|
+
|
|
743
|
+
```python
|
|
744
|
+
class ClearStrategy:
|
|
745
|
+
"""Strategy for executing /clear at optimal points."""
|
|
746
|
+
|
|
747
|
+
CLEAR_TRIGGERS = {
|
|
748
|
+
"post_spec_creation": True,
|
|
749
|
+
"token_threshold_150k": True,
|
|
750
|
+
"message_count_50": True,
|
|
751
|
+
"phase_transition": True,
|
|
752
|
+
"model_switch": True
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
def should_clear(self, context: Dict[str, Any]) -> tuple[bool, str]:
|
|
756
|
+
"""Determine if /clear should be executed."""
|
|
757
|
+
|
|
758
|
+
# Check token threshold
|
|
759
|
+
if context.get("token_usage", 0) > 150000:
|
|
760
|
+
return True, "Token threshold exceeded (>150K)"
|
|
761
|
+
|
|
762
|
+
# Check message count
|
|
763
|
+
if context.get("message_count", 0) > 50:
|
|
764
|
+
return True, "Message count exceeded (>50)"
|
|
765
|
+
|
|
766
|
+
# Check phase transition
|
|
767
|
+
if context.get("phase_changed", False):
|
|
768
|
+
return True, "Phase transition detected"
|
|
769
|
+
|
|
770
|
+
# Check post-SPEC creation
|
|
771
|
+
if context.get("spec_just_created", False):
|
|
772
|
+
return True, "SPEC creation completed"
|
|
773
|
+
|
|
774
|
+
return False, "No clear needed"
|
|
775
|
+
|
|
776
|
+
def prepare_clear_context(
|
|
777
|
+
self,
|
|
778
|
+
session: SessionState
|
|
779
|
+
) -> Dict[str, Any]:
|
|
780
|
+
"""Prepare minimal context to preserve across /clear."""
|
|
781
|
+
return {
|
|
782
|
+
"session_id": session.session_id,
|
|
783
|
+
"spec_id": session.work_state.current_spec,
|
|
784
|
+
"phase": session.work_state.phase.value,
|
|
785
|
+
"reload_sequence": [
|
|
786
|
+
"CLAUDE.md",
|
|
787
|
+
f".moai/specs/{session.work_state.current_spec}.md",
|
|
788
|
+
"src/main.py" # Current working file
|
|
789
|
+
],
|
|
790
|
+
"preserved_decisions": session.work_state.artifacts.get("decisions", [])
|
|
791
|
+
}
|
|
792
|
+
```
|
|
793
|
+
|
|
794
|
+
### Pattern 2: Progressive Summarization
|
|
795
|
+
|
|
796
|
+
Compress context while preserving key information:
|
|
797
|
+
|
|
798
|
+
```python
|
|
799
|
+
class ProgressiveSummarizer:
|
|
800
|
+
"""Compress context progressively to save tokens."""
|
|
801
|
+
|
|
802
|
+
def summarize_conversation(
|
|
803
|
+
self,
|
|
804
|
+
messages: List[Dict],
|
|
805
|
+
target_ratio: float = 0.3
|
|
806
|
+
) -> str:
|
|
807
|
+
"""Summarize conversation to target ratio."""
|
|
808
|
+
|
|
809
|
+
# Extract key information
|
|
810
|
+
decisions = self._extract_decisions(messages)
|
|
811
|
+
code_changes = self._extract_code_changes(messages)
|
|
812
|
+
issues = self._extract_issues(messages)
|
|
813
|
+
|
|
814
|
+
# Create compressed summary
|
|
815
|
+
summary = f"""
|
|
816
|
+
## Conversation Summary
|
|
817
|
+
|
|
818
|
+
### Key Decisions
|
|
819
|
+
{self._format_list(decisions)}
|
|
820
|
+
|
|
821
|
+
### Code Changes
|
|
822
|
+
{self._format_list(code_changes)}
|
|
823
|
+
|
|
824
|
+
### Open Issues
|
|
825
|
+
{self._format_list(issues)}
|
|
826
|
+
|
|
827
|
+
### Reference
|
|
828
|
+
Original conversation: {len(messages)} messages
|
|
829
|
+
Compression ratio: {target_ratio * 100:.0f}%
|
|
830
|
+
"""
|
|
831
|
+
return summary
|
|
832
|
+
|
|
833
|
+
def _extract_decisions(self, messages: List[Dict]) -> List[str]:
|
|
834
|
+
"""Extract decision points from conversation."""
|
|
835
|
+
decisions = []
|
|
836
|
+
decision_markers = ["decided", "agreed", "will use", "chosen"]
|
|
837
|
+
|
|
838
|
+
for msg in messages:
|
|
839
|
+
content = msg.get("content", "").lower()
|
|
840
|
+
if any(marker in content for marker in decision_markers):
|
|
841
|
+
decisions.append(self._extract_sentence(msg["content"]))
|
|
842
|
+
|
|
843
|
+
return decisions[:5] # Top 5 decisions
|
|
844
|
+
|
|
845
|
+
def _extract_code_changes(self, messages: List[Dict]) -> List[str]:
|
|
846
|
+
"""Extract code change summaries."""
|
|
847
|
+
changes = []
|
|
848
|
+
for msg in messages:
|
|
849
|
+
if "```" in msg.get("content", ""):
|
|
850
|
+
# Has code block - likely a change
|
|
851
|
+
changes.append(f"Modified: {msg.get('file', 'unknown')}")
|
|
852
|
+
return changes
|
|
853
|
+
|
|
854
|
+
def _extract_issues(self, messages: List[Dict]) -> List[str]:
|
|
855
|
+
"""Extract open issues."""
|
|
856
|
+
issues = []
|
|
857
|
+
issue_markers = ["todo", "fixme", "issue", "problem", "bug"]
|
|
858
|
+
|
|
859
|
+
for msg in messages:
|
|
860
|
+
content = msg.get("content", "").lower()
|
|
861
|
+
if any(marker in content for marker in issue_markers):
|
|
862
|
+
issues.append(self._extract_sentence(msg["content"]))
|
|
863
|
+
|
|
864
|
+
return issues
|
|
865
|
+
|
|
866
|
+
def _extract_sentence(self, text: str) -> str:
|
|
867
|
+
"""Extract first meaningful sentence."""
|
|
868
|
+
sentences = text.split('.')
|
|
869
|
+
return sentences[0][:100] if sentences else text[:100]
|
|
870
|
+
|
|
871
|
+
def _format_list(self, items: List[str]) -> str:
|
|
872
|
+
"""Format items as bullet list."""
|
|
873
|
+
if not items:
|
|
874
|
+
return "- None"
|
|
875
|
+
return "\n".join(f"- {item}" for item in items)
|
|
876
|
+
```
|
|
877
|
+
|
|
878
|
+
### Pattern 3: Context Tag References
|
|
879
|
+
|
|
880
|
+
Use efficient references instead of inline content:
|
|
881
|
+
|
|
882
|
+
```python
|
|
883
|
+
class ContextTagManager:
|
|
884
|
+
"""Manage context with efficient tag references."""
|
|
885
|
+
|
|
886
|
+
def __init__(self):
|
|
887
|
+
self.tags: Dict[str, str] = {}
|
|
888
|
+
|
|
889
|
+
def register_tag(self, tag_id: str, content: str) -> str:
|
|
890
|
+
"""Register content with a tag reference."""
|
|
891
|
+
self.tags[tag_id] = content
|
|
892
|
+
return f"@{tag_id}"
|
|
893
|
+
|
|
894
|
+
def resolve_tag(self, tag_ref: str) -> Optional[str]:
|
|
895
|
+
"""Resolve a tag reference to content."""
|
|
896
|
+
if tag_ref.startswith("@"):
|
|
897
|
+
tag_id = tag_ref[1:]
|
|
898
|
+
return self.tags.get(tag_id)
|
|
899
|
+
return None
|
|
900
|
+
|
|
901
|
+
def create_minimal_reference(
|
|
902
|
+
self,
|
|
903
|
+
full_context: Dict[str, Any]
|
|
904
|
+
) -> Dict[str, str]:
|
|
905
|
+
"""Create minimal references to full context."""
|
|
906
|
+
references = {}
|
|
907
|
+
|
|
908
|
+
for key, value in full_context.items():
|
|
909
|
+
if isinstance(value, str) and len(value) > 200:
|
|
910
|
+
# Store full content, return reference
|
|
911
|
+
tag_id = f"{key.upper()}-001"
|
|
912
|
+
self.register_tag(tag_id, value)
|
|
913
|
+
references[key] = f"@{tag_id}"
|
|
914
|
+
else:
|
|
915
|
+
references[key] = value
|
|
916
|
+
|
|
917
|
+
return references
|
|
918
|
+
|
|
919
|
+
|
|
920
|
+
# Usage
|
|
921
|
+
tag_manager = ContextTagManager()
|
|
922
|
+
|
|
923
|
+
# Instead of inline content (high token cost)
|
|
924
|
+
# "The user configuration from the previous 20 messages..."
|
|
925
|
+
|
|
926
|
+
# Use efficient reference (low token cost)
|
|
927
|
+
tag_manager.register_tag("CONFIG-001", full_config_content)
|
|
928
|
+
reference = "@CONFIG-001" # 10 tokens vs 500+ tokens
|
|
929
|
+
```
|
|
930
|
+
|
|
931
|
+
---
|
|
932
|
+
|
|
933
|
+
## Anti-Patterns (Patterns to Avoid)
|
|
934
|
+
|
|
935
|
+
### Anti-Pattern 1: Ignoring Token Warnings
|
|
936
|
+
|
|
937
|
+
**Problem**: Continuing work without addressing token warnings.
|
|
938
|
+
|
|
939
|
+
```python
|
|
940
|
+
# Incorrect approach
|
|
941
|
+
if token_usage > 150000:
|
|
942
|
+
print("Warning: High token usage")
|
|
943
|
+
# Continue working anyway - leads to context overflow
|
|
944
|
+
continue_work()
|
|
945
|
+
```
|
|
946
|
+
|
|
947
|
+
**Solution**: Take immediate action on warnings.
|
|
948
|
+
|
|
949
|
+
```python
|
|
950
|
+
# Correct approach
|
|
951
|
+
if token_usage > 150000:
|
|
952
|
+
logger.warning("Token warning triggered")
|
|
953
|
+
# Create checkpoint and clear
|
|
954
|
+
checkpoint = save_current_state()
|
|
955
|
+
execute_clear()
|
|
956
|
+
restore_essential_context(checkpoint)
|
|
957
|
+
```
|
|
958
|
+
|
|
959
|
+
### Anti-Pattern 2: Full Context in Handoffs
|
|
960
|
+
|
|
961
|
+
**Problem**: Passing complete context between agents wastes tokens.
|
|
962
|
+
|
|
963
|
+
```python
|
|
964
|
+
# Incorrect approach
|
|
965
|
+
handoff = {
|
|
966
|
+
"full_conversation": all_messages, # 50K tokens
|
|
967
|
+
"all_files_content": file_contents, # 100K tokens
|
|
968
|
+
"complete_history": history # 30K tokens
|
|
969
|
+
}
|
|
970
|
+
```
|
|
971
|
+
|
|
972
|
+
**Solution**: Pass only critical context.
|
|
973
|
+
|
|
974
|
+
```python
|
|
975
|
+
# Correct approach
|
|
976
|
+
handoff = {
|
|
977
|
+
"spec_id": "SPEC-001",
|
|
978
|
+
"current_phase": "implementation",
|
|
979
|
+
"next_step": "write_tests",
|
|
980
|
+
"key_decisions": ["Use JWT", "PostgreSQL"],
|
|
981
|
+
"file_references": ["@API-SCHEMA", "@DB-MODEL"]
|
|
982
|
+
}
|
|
983
|
+
```
|
|
984
|
+
|
|
985
|
+
### Anti-Pattern 3: No Session Persistence
|
|
986
|
+
|
|
987
|
+
**Problem**: Losing work progress on interruption.
|
|
988
|
+
|
|
989
|
+
```python
|
|
990
|
+
# Incorrect approach
|
|
991
|
+
# No state saved - all progress lost on /clear or interruption
|
|
992
|
+
work_in_progress = process_spec(spec_id)
|
|
993
|
+
# Connection lost - work lost
|
|
994
|
+
```
|
|
995
|
+
|
|
996
|
+
**Solution**: Persist state continuously.
|
|
997
|
+
|
|
998
|
+
```python
|
|
999
|
+
# Correct approach
|
|
1000
|
+
session = SessionManager()
|
|
1001
|
+
session.create_checkpoint("pre_processing")
|
|
1002
|
+
|
|
1003
|
+
work_in_progress = process_spec(spec_id)
|
|
1004
|
+
session.update_work_state(completed_step="processing_done")
|
|
1005
|
+
session.save() # State preserved
|
|
1006
|
+
|
|
1007
|
+
# After interruption
|
|
1008
|
+
resumed = session.load_session(session_id)
|
|
1009
|
+
# Continue from checkpoint
|
|
1010
|
+
```
|
|
1011
|
+
|
|
1012
|
+
---
|
|
1013
|
+
|
|
1014
|
+
## Workflow Integration
|
|
1015
|
+
|
|
1016
|
+
### SPEC-First Workflow with Context Management
|
|
1017
|
+
|
|
1018
|
+
```python
|
|
1019
|
+
# Complete workflow with context optimization
|
|
1020
|
+
|
|
1021
|
+
# Phase 1: Planning (uses ~40K tokens)
|
|
1022
|
+
analysis = Task(subagent_type="spec-builder", prompt="Analyze: user auth")
|
|
1023
|
+
session.update_work_state(phase=SessionPhase.PLANNING)
|
|
1024
|
+
|
|
1025
|
+
# Mandatory /clear after planning (saves 45-50K tokens)
|
|
1026
|
+
clear_context = session.prepare_for_clear()
|
|
1027
|
+
execute_clear()
|
|
1028
|
+
restore_from_checkpoint(clear_context)
|
|
1029
|
+
|
|
1030
|
+
# Phase 2: Implementation (fresh 200K budget)
|
|
1031
|
+
implementation = Task(
|
|
1032
|
+
subagent_type="tdd-implementer",
|
|
1033
|
+
prompt=f"Implement: {clear_context['spec_id']}"
|
|
1034
|
+
)
|
|
1035
|
+
session.update_work_state(phase=SessionPhase.IMPLEMENTATION)
|
|
1036
|
+
|
|
1037
|
+
# Monitor and clear if needed
|
|
1038
|
+
if token_usage > 150000:
|
|
1039
|
+
clear_and_resume()
|
|
1040
|
+
|
|
1041
|
+
# Phase 3: Documentation
|
|
1042
|
+
docs = Task(subagent_type="docs-manager", prompt="Generate docs")
|
|
1043
|
+
session.update_work_state(phase=SessionPhase.DOCUMENTATION)
|
|
1044
|
+
```
|
|
1045
|
+
|
|
1046
|
+
---
|
|
1047
|
+
|
|
1048
|
+
*For detailed implementation patterns and module references, see the `modules/` directory.*
|