htmlgraph 0.23.0__tar.gz → 0.23.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.
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/PKG-INFO +1 -1
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/gemini-extension.json +1 -1
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/pyproject.toml +1 -1
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/__init__.py +1 -1
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/event_log.py +28 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/orchestrator.py +68 -4
- htmlgraph-0.23.2/src/python/htmlgraph/orchestrator-system-prompt-optimized.txt +92 -0
- htmlgraph-0.23.2/tests/test_event_log.py +498 -0
- htmlgraph-0.23.0/src/python/htmlgraph/orchestrator-system-prompt-optimized.txt +0 -47
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/.gitignore +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/README.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/agent-coordination/README.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/agent-coordination/demo.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/create_auth_track_demo.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/create_htmlgraph_dev_track.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/README.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/agents.json +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/demo.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/features/doc-api-graph.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/features/doc-api-overview.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/features/doc-api-sdk.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/features/doc-example-advanced.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/features/doc-example-basic.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/features/doc-index.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/features/doc-installation.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/features/doc-quickstart.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/handoff-demo.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/knowledge-base/README.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/knowledge-base/agents.json +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/knowledge-base/demo.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/knowledge-base/features/feat-276c615f.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/knowledge-base/features/feat-7a6f797d.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/knowledge-base/features/note-ai-agents.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/knowledge-base/features/note-graph-db.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/knowledge-base/features/note-htmlgraph.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/knowledge-base/features/note-web-standards.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/parallel_task_coordination.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/routing-demo.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/sdk_demo.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/README.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/demo.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/index.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/styles.css +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/task-001.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/task-002.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/task-003.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/task-004.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/task-005.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/task-006.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/GEMINI.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/README.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_deploy.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_end.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_feature-add.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_feature-complete.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_feature-primary.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_feature-start.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_git-commit.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_help.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_init.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_plan.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_recommend.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_serve.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_spike.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_start.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_status.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_track.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/hooks/hooks.json +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/hooks/scripts/post-tool.sh +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/hooks/scripts/session-end.sh +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/hooks/scripts/session-start.sh +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/js/htmlgraph.js +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/agent_detection.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/agent_registry.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/agents.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/analytics/__init__.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/analytics/cli.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/analytics/cross_session.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/analytics/dependency.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/analytics/work_type.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/analytics_index.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/archive/__init__.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/archive/bloom.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/archive/fts.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/archive/manager.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/archive/search.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/attribute_index.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/__init__.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/base.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/bug.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/chore.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/epic.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/feature.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/insight.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/metric.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/pattern.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/phase.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/spike.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/track.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/cli.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/__init__.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/base.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/bug.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/chore.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/epic.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/feature.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/insight.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/metric.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/pattern.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/phase.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/spike.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/todo.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/context_analytics.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/converter.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/dashboard.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/dependency_models.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/deploy.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/deployment_models.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/__init__.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/docs_version.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/metadata.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/migrations.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/template_engine.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/templates/_sections/cli_reference.md.j2 +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/templates/_sections/core_concepts.md.j2 +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/templates/_sections/sdk_basics.md.j2 +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/templates/base_agents.md.j2 +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/templates/example_user_override.md.j2 +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/version_check.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/edge_index.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/event_migration.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/exceptions.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/extensions/gemini/GEMINI.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/extensions/gemini/README.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/extensions/gemini/gemini-extension.json +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/extensions/gemini/hooks/hooks.json +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/extensions/gemini/hooks/scripts/post-tool.sh +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/extensions/gemini/hooks/scripts/session-end.sh +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/extensions/gemini/hooks/scripts/session-start.sh +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/file_watcher.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/find_api.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/git_events.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/graph.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/__init__.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/event_tracker.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/hooks-config.example.json +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/installer.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/orchestrator_reflector.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/post-checkout.sh +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/post-commit.sh +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/post-merge.sh +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/post_tool_use_failure.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/posttooluse.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/pre-commit.sh +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/pre-push.sh +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/pretooluse.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/task_enforcer.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/task_validator.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/validator.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/ids.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/index.d.ts +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/learning.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/mcp_server.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/models.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/operations/README.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/operations/__init__.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/operations/analytics.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/operations/events.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/operations/hooks.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/operations/server.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/orchestration/__init__.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/orchestration/headless_spawner.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/orchestration/model_selection.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/orchestration/task_coordination.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/orchestrator.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/orchestrator_mode.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/orchestrator_validator.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/parallel.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/parser.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/planning.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/query_builder.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/routing.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/scripts/__init__.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/scripts/deploy.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/sdk.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/server.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/services/__init__.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/services/claiming.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/session_manager.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/session_warning.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/setup.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/spike_index.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/styles.css +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/sync_docs.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/templates/AGENTS.md.template +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/templates/CLAUDE.md.template +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/templates/GEMINI.md.template +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/track_builder.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/track_manager.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/transcript.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/transcript_analytics.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/types.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/watch.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/work_type_utils.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/benchmarks/README.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/benchmarks/__init__.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/benchmarks/bench_graph.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/benchmarks/conftest.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/integration/multi_agent/README.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/integration/multi_agent/__init__.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/integration/multi_agent/test_agent_quirks.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/integration/multi_agent/test_git_continuity_spine.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/integration/test_deployment_workflow.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/integration/test_handoff_routing.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/integration/test_multi_agent_coordination.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/js/README.md +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/js/test_htmlgraph.html +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/operations/__init__.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/operations/test_hooks.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/operations/test_server.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/__init__.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_agent_detection.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_analytics.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_archive_manager.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_archive_search.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_auto_spike.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_claiming.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_cli_commands.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_collection_filter.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_cross_agent_attribution.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_cross_session_analytics.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_dashboard_ui.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_delete.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_deploy.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_drift_parent_activity.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_drift_queue_cleanup.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_edge_index.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_event_index.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_event_query.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_find_api.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_git_events.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_graph_traversal.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_handoff.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_headless_spawner.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_ids.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_install_hooks.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_lifecycle.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_mcp_server.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_mcp_stdio_transport.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_models.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_opencode_integration.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_orchestration.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_orchestrator_circuit_breaker.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_orchestrator_cli.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_orchestrator_enforce_hook.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_orchestrator_mode.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_plugin_update_preservation.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_post_tool_use_failure.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_pre_work_validation_integration.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_query_builder.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_query_cache.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_query_compilation.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_routing.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_sdk_discoverability.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_sdk_get_active_work_item.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_session_cleanup.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_session_continuity.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_session_start_info_validation.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_system_overhead_drift.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_template_system.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_todo_collection.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_track_loading.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_transcript_linking.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_update_preserves_incoming_edges.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_validate_work_hook.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_version_migration.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_work_queue.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_work_type.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/test_agent_routing.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/test_cli_output_snapshots.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/test_cli_sdk_parity.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/test_deployment_models.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/test_orchestrator_validator.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/test_sdk_operations.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/test_transaction_snapshot.py +0 -0
- {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/test_transcript.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: htmlgraph
|
|
3
|
-
Version: 0.23.
|
|
3
|
+
Version: 0.23.2
|
|
4
4
|
Summary: HTML is All You Need - Graph database on web standards
|
|
5
5
|
Project-URL: Homepage, https://github.com/Shakes-tzd/htmlgraph
|
|
6
6
|
Project-URL: Documentation, https://github.com/Shakes-tzd/htmlgraph#readme
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "htmlgraph",
|
|
3
|
-
"version": "0.23.
|
|
3
|
+
"version": "0.23.2",
|
|
4
4
|
"description": "HtmlGraph session tracking and documentation for Gemini CLI. Ensures proper activity attribution, feature awareness, and continuous work tracking.",
|
|
5
5
|
"author": "Shakes",
|
|
6
6
|
"license": "MIT",
|
|
@@ -38,6 +38,22 @@ class EventRecord:
|
|
|
38
38
|
session_status: str | None = None
|
|
39
39
|
file_paths: list[str] | None = None
|
|
40
40
|
payload: dict[str, Any] | None = None
|
|
41
|
+
# Phase 1: Enhanced Event Data Schema for multi-AI delegation tracking
|
|
42
|
+
delegated_to_ai: str | None = (
|
|
43
|
+
None # "gemini", "codex", "copilot", "claude", or None
|
|
44
|
+
)
|
|
45
|
+
task_id: str | None = None # Unique task ID for parallel tracking
|
|
46
|
+
task_status: str | None = (
|
|
47
|
+
None # "pending", "running", "completed", "failed", "timeout"
|
|
48
|
+
)
|
|
49
|
+
model_selected: str | None = None # Specific model (e.g., "gemini-2.0-flash")
|
|
50
|
+
complexity_level: str | None = None # "low", "medium", "high", "very-high"
|
|
51
|
+
budget_mode: str | None = None # "free", "balanced", "performance"
|
|
52
|
+
execution_duration_seconds: float | None = None # How long delegation took
|
|
53
|
+
tokens_estimated: int | None = None # Estimated token usage
|
|
54
|
+
tokens_actual: int | None = None # Actual token usage
|
|
55
|
+
cost_usd: float | None = None # Calculated cost
|
|
56
|
+
task_findings: str | None = None # Results from delegated task
|
|
41
57
|
|
|
42
58
|
def to_json(self) -> dict[str, Any]:
|
|
43
59
|
return {
|
|
@@ -56,6 +72,18 @@ class EventRecord:
|
|
|
56
72
|
"session_status": self.session_status,
|
|
57
73
|
"file_paths": self.file_paths or [],
|
|
58
74
|
"payload": self.payload,
|
|
75
|
+
# Delegation fields
|
|
76
|
+
"delegated_to_ai": self.delegated_to_ai,
|
|
77
|
+
"task_id": self.task_id,
|
|
78
|
+
"task_status": self.task_status,
|
|
79
|
+
"model_selected": self.model_selected,
|
|
80
|
+
"complexity_level": self.complexity_level,
|
|
81
|
+
"budget_mode": self.budget_mode,
|
|
82
|
+
"execution_duration_seconds": self.execution_duration_seconds,
|
|
83
|
+
"tokens_estimated": self.tokens_estimated,
|
|
84
|
+
"tokens_actual": self.tokens_actual,
|
|
85
|
+
"cost_usd": self.cost_usd,
|
|
86
|
+
"task_findings": self.task_findings,
|
|
59
87
|
}
|
|
60
88
|
|
|
61
89
|
|
|
@@ -107,6 +107,23 @@ def is_allowed_orchestrator_operation(tool: str, params: dict) -> tuple[bool, st
|
|
|
107
107
|
- reason_if_not: Explanation if blocked (empty if allowed)
|
|
108
108
|
- category: Operation category for logging
|
|
109
109
|
"""
|
|
110
|
+
# Get enforcement level from manager
|
|
111
|
+
try:
|
|
112
|
+
cwd = Path.cwd()
|
|
113
|
+
graph_dir = cwd / ".htmlgraph"
|
|
114
|
+
if not graph_dir.exists():
|
|
115
|
+
for parent in [cwd.parent, cwd.parent.parent, cwd.parent.parent.parent]:
|
|
116
|
+
candidate = parent / ".htmlgraph"
|
|
117
|
+
if candidate.exists():
|
|
118
|
+
graph_dir = candidate
|
|
119
|
+
break
|
|
120
|
+
manager = OrchestratorModeManager(graph_dir)
|
|
121
|
+
enforcement_level = (
|
|
122
|
+
manager.get_enforcement_level() if manager.is_enabled() else "guidance"
|
|
123
|
+
)
|
|
124
|
+
except Exception:
|
|
125
|
+
enforcement_level = "guidance"
|
|
126
|
+
|
|
110
127
|
# Use OrchestratorValidator for comprehensive validation
|
|
111
128
|
validator = OrchestratorValidator()
|
|
112
129
|
result, reason = validator.validate_tool_use(tool, params)
|
|
@@ -121,6 +138,10 @@ def is_allowed_orchestrator_operation(tool: str, params: dict) -> tuple[bool, st
|
|
|
121
138
|
if tool in ["Task", "AskUserQuestion", "TodoWrite"]:
|
|
122
139
|
return True, "", "orchestrator-core"
|
|
123
140
|
|
|
141
|
+
# FIX #2: Block Skills in strict mode (must be invoked via Task delegation)
|
|
142
|
+
if tool == "Skill" and enforcement_level == "strict":
|
|
143
|
+
return False, "Skills must be invoked via Task delegation", "skill-blocked"
|
|
144
|
+
|
|
124
145
|
# Category 2: SDK Operations - Always allowed
|
|
125
146
|
if tool == "Bash":
|
|
126
147
|
command = params.get("command", "")
|
|
@@ -141,11 +162,51 @@ def is_allowed_orchestrator_operation(tool: str, params: dict) -> tuple[bool, st
|
|
|
141
162
|
if "from htmlgraph import" in command or "import htmlgraph" in command:
|
|
142
163
|
return True, "", "sdk-inline"
|
|
143
164
|
|
|
165
|
+
# FIX #3: Check if bash command is in allowed whitelist (strict mode only)
|
|
166
|
+
# If we've gotten here, it's not a whitelisted command above
|
|
167
|
+
# Block non-whitelisted bash commands in strict mode
|
|
168
|
+
if enforcement_level == "strict":
|
|
169
|
+
# Check if it's a blocked test/build pattern (handled below)
|
|
170
|
+
blocked_patterns = [
|
|
171
|
+
r"^npm (run|test|build)",
|
|
172
|
+
r"^pytest",
|
|
173
|
+
r"^uv run pytest",
|
|
174
|
+
r"^python -m pytest",
|
|
175
|
+
r"^cargo (build|test)",
|
|
176
|
+
r"^mvn (compile|test|package)",
|
|
177
|
+
r"^make (test|build)",
|
|
178
|
+
]
|
|
179
|
+
is_blocked_pattern = any(
|
|
180
|
+
re.match(pattern, command) for pattern in blocked_patterns
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
if not is_blocked_pattern:
|
|
184
|
+
# Not a specifically blocked pattern, but also not whitelisted
|
|
185
|
+
# In strict mode, we should delegate
|
|
186
|
+
return (
|
|
187
|
+
False,
|
|
188
|
+
f"Bash command not in allowed list. Delegate to subagent.\n\n"
|
|
189
|
+
f"Command: {command[:100]}",
|
|
190
|
+
"bash-blocked",
|
|
191
|
+
)
|
|
192
|
+
|
|
144
193
|
# Category 3: Quick Lookups - Single operations only
|
|
145
194
|
if tool in ["Read", "Grep", "Glob"]:
|
|
146
195
|
# Check tool history to see if this is a single lookup or part of a sequence
|
|
147
196
|
history = load_tool_history()
|
|
148
197
|
|
|
198
|
+
# FIX #4: Check for mixed exploration pattern
|
|
199
|
+
exploration_count = sum(
|
|
200
|
+
1 for h in history[-5:] if h["tool"] in ["Read", "Grep", "Glob"]
|
|
201
|
+
)
|
|
202
|
+
if exploration_count >= 3 and enforcement_level == "strict":
|
|
203
|
+
return (
|
|
204
|
+
False,
|
|
205
|
+
"Multiple exploration calls detected. Delegate to Explorer agent.\n\n"
|
|
206
|
+
"Use Task tool with explorer subagent.",
|
|
207
|
+
"exploration-blocked",
|
|
208
|
+
)
|
|
209
|
+
|
|
149
210
|
# Look at last 3 tool calls
|
|
150
211
|
recent_same_tool = sum(1 for h in history[-3:] if h["tool"] == tool)
|
|
151
212
|
|
|
@@ -181,7 +242,7 @@ def is_allowed_orchestrator_operation(tool: str, params: dict) -> tuple[bool, st
|
|
|
181
242
|
command = params.get("command", "")
|
|
182
243
|
|
|
183
244
|
# Block compilation, testing, building (should be in subagent)
|
|
184
|
-
|
|
245
|
+
test_build_patterns: list[tuple[str, str]] = [
|
|
185
246
|
(r"^npm (run|test|build)", "npm test/build"),
|
|
186
247
|
(r"^pytest", "pytest"),
|
|
187
248
|
(r"^uv run pytest", "pytest"),
|
|
@@ -191,7 +252,7 @@ def is_allowed_orchestrator_operation(tool: str, params: dict) -> tuple[bool, st
|
|
|
191
252
|
(r"^make (test|build)", "make test/build"),
|
|
192
253
|
]
|
|
193
254
|
|
|
194
|
-
for pattern, name in
|
|
255
|
+
for pattern, name in test_build_patterns:
|
|
195
256
|
if re.match(pattern, command):
|
|
196
257
|
return (
|
|
197
258
|
False,
|
|
@@ -200,8 +261,11 @@ def is_allowed_orchestrator_operation(tool: str, params: dict) -> tuple[bool, st
|
|
|
200
261
|
"test-build-blocked",
|
|
201
262
|
)
|
|
202
263
|
|
|
203
|
-
#
|
|
204
|
-
|
|
264
|
+
# FIX #1: Remove "allowed-default" escape hatch in strict mode
|
|
265
|
+
if enforcement_level == "strict":
|
|
266
|
+
return False, "Not in allowed whitelist", "strict-blocked"
|
|
267
|
+
else:
|
|
268
|
+
return True, "Allowed in guidance mode", "guidance-allowed"
|
|
205
269
|
|
|
206
270
|
|
|
207
271
|
def create_task_suggestion(tool: str, params: dict) -> str:
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# ORCHESTRATOR SYSTEM PROMPT
|
|
2
|
+
|
|
3
|
+
**Core Principle:** Delegation > Direct Execution. Cascading failures consume exponentially more context than structured delegation.
|
|
4
|
+
|
|
5
|
+
## What is HtmlGraph?
|
|
6
|
+
|
|
7
|
+
Lightweight graph database for AI coordination and human observability. HTML files = nodes, hyperlinks = edges, CSS selectors = queries. Zero dependencies, offline-first. Use SDK for ALL operations tracking.
|
|
8
|
+
|
|
9
|
+
## Operation Backbone: HtmlGraph + Git
|
|
10
|
+
|
|
11
|
+
ALWAYS use both:
|
|
12
|
+
- **HtmlGraph SDK**: Track what you're doing (features, spikes, sessions, analytics)
|
|
13
|
+
- **Git**: Track code changes, commits, attribution
|
|
14
|
+
- Together: Complete project history + observability
|
|
15
|
+
|
|
16
|
+
## Speed & Currency
|
|
17
|
+
|
|
18
|
+
- Use WebSearch for up-to-date information (check current date/time)
|
|
19
|
+
- Use scripting (Python, Bash) for automation
|
|
20
|
+
- Prefer web lookups over assumptions for time-sensitive tasks
|
|
21
|
+
|
|
22
|
+
## Spec-Driven Development
|
|
23
|
+
|
|
24
|
+
Write specs before implementation:
|
|
25
|
+
- Use TrackBuilder for multi-feature planning
|
|
26
|
+
- Document requirements and acceptance criteria
|
|
27
|
+
- Pattern: Plan → Implement → Validate
|
|
28
|
+
|
|
29
|
+
## Testing Philosophy
|
|
30
|
+
|
|
31
|
+
- UI testing: Use browser automation tools (Chrome MCP)
|
|
32
|
+
- Test incrementally, not at the end
|
|
33
|
+
- Automated testing is non-negotiable
|
|
34
|
+
- Quality gates: ruff, mypy, pytest
|
|
35
|
+
|
|
36
|
+
## Layered Planning Model
|
|
37
|
+
|
|
38
|
+
Delegate planning based on complexity and inputs:
|
|
39
|
+
|
|
40
|
+
1. **Exploration** → Gemini (affordable, high context)
|
|
41
|
+
- Broad research, codebase exploration, options analysis
|
|
42
|
+
|
|
43
|
+
2. **Strategic Planning** → Claude Opus (concrete inputs needed)
|
|
44
|
+
- High-level architecture, elegant solutions, critical decisions
|
|
45
|
+
|
|
46
|
+
3. **Coordination** → Claude Sonnet (mid-level)
|
|
47
|
+
- Feature orchestration, multi-component decisions
|
|
48
|
+
|
|
49
|
+
4. **Execution** → Haiku (tactical)
|
|
50
|
+
- Implementation, file operations, testing
|
|
51
|
+
|
|
52
|
+
Execute directly ONLY:
|
|
53
|
+
- SDK operations (feature/spike creation)
|
|
54
|
+
- User clarification (AskUserQuestion)
|
|
55
|
+
- TodoWrite (task tracking)
|
|
56
|
+
|
|
57
|
+
## Delegate Everything Else
|
|
58
|
+
|
|
59
|
+
Git, code changes, testing, research, deployment - DELEGATE.
|
|
60
|
+
|
|
61
|
+
**Context cost:** Direct = 7+ tool calls | Delegation = 2 tool calls
|
|
62
|
+
|
|
63
|
+
## Quick Decision Tree
|
|
64
|
+
|
|
65
|
+
1. SDK/TodoWrite/User question? → Execute directly
|
|
66
|
+
2. Exploration/research? → Delegate to Gemini
|
|
67
|
+
3. Strategic planning (with inputs)? → Delegate to Opus
|
|
68
|
+
4. Everything else → DELEGATE (Sonnet/Haiku)
|
|
69
|
+
|
|
70
|
+
## Spawner Selection (Brief)
|
|
71
|
+
|
|
72
|
+
- Code work → `/multi-ai-orchestration` skill
|
|
73
|
+
- Images/analysis → spawn_gemini
|
|
74
|
+
- Git/PRs → spawn_copilot
|
|
75
|
+
- Complex reasoning → spawn_claude
|
|
76
|
+
|
|
77
|
+
For detailed spawner selection, cost analysis, and patterns:
|
|
78
|
+
→ Use `/multi-ai-orchestration` skill
|
|
79
|
+
|
|
80
|
+
## HtmlGraph Integration
|
|
81
|
+
|
|
82
|
+
```python
|
|
83
|
+
sdk = SDK(agent="orchestrator")
|
|
84
|
+
feature = sdk.features.create("Title").save()
|
|
85
|
+
Task(prompt="...", description="...")
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
For complete patterns: → Use `/orchestrator-directives` skill
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
**Key Insight:** Smart routing → fewer tool calls → better context → faster resolution.
|