htmlgraph 0.20.0__tar.gz → 0.20.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.20.0 → htmlgraph-0.20.2}/PKG-INFO +1 -1
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/gemini-extension.json +1 -1
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/pyproject.toml +1 -1
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/__init__.py +1 -1
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/hooks/post_tool_use_failure.py +49 -5
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/hooks/posttooluse.py +38 -17
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_post_tool_use_failure.py +10 -10
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/.gitignore +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/README.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/agent-coordination/README.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/agent-coordination/demo.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/create_auth_track_demo.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/create_htmlgraph_dev_track.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/documentation-site/README.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/documentation-site/agents.json +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/documentation-site/demo.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/documentation-site/features/doc-api-graph.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/documentation-site/features/doc-api-overview.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/documentation-site/features/doc-api-sdk.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/documentation-site/features/doc-example-advanced.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/documentation-site/features/doc-example-basic.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/documentation-site/features/doc-index.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/documentation-site/features/doc-installation.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/documentation-site/features/doc-quickstart.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/handoff-demo.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/knowledge-base/README.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/knowledge-base/agents.json +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/knowledge-base/demo.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/knowledge-base/features/feat-276c615f.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/knowledge-base/features/feat-7a6f797d.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/knowledge-base/features/note-ai-agents.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/knowledge-base/features/note-graph-db.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/knowledge-base/features/note-htmlgraph.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/knowledge-base/features/note-web-standards.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/parallel_task_coordination.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/routing-demo.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/sdk_demo.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/todo-list/README.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/todo-list/demo.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/todo-list/index.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/todo-list/styles.css +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/todo-list/task-001.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/todo-list/task-002.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/todo-list/task-003.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/todo-list/task-004.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/todo-list/task-005.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/todo-list/task-006.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/GEMINI.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/README.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/command_deploy.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/command_end.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/command_feature-add.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/command_feature-complete.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/command_feature-primary.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/command_feature-start.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/command_git-commit.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/command_help.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/command_init.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/command_plan.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/command_recommend.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/command_serve.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/command_spike.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/command_start.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/command_status.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/command_track.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/hooks/hooks.json +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/hooks/scripts/post-tool.sh +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/hooks/scripts/session-end.sh +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/hooks/scripts/session-start.sh +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/js/htmlgraph.js +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/agent_detection.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/agent_registry.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/agents.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/analytics/__init__.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/analytics/cli.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/analytics/dependency.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/analytics/work_type.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/analytics_index.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/attribute_index.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/builders/__init__.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/builders/base.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/builders/bug.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/builders/chore.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/builders/epic.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/builders/feature.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/builders/insight.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/builders/metric.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/builders/pattern.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/builders/phase.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/builders/spike.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/builders/track.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/cli.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/collections/__init__.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/collections/base.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/collections/bug.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/collections/chore.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/collections/epic.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/collections/feature.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/collections/insight.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/collections/metric.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/collections/pattern.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/collections/phase.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/collections/spike.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/collections/todo.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/context_analytics.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/converter.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/dashboard.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/dependency_models.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/deploy.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/deployment_models.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/edge_index.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/event_log.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/event_migration.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/exceptions.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/extensions/gemini/GEMINI.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/extensions/gemini/README.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/extensions/gemini/gemini-extension.json +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/extensions/gemini/hooks/hooks.json +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/extensions/gemini/hooks/scripts/post-tool.sh +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/extensions/gemini/hooks/scripts/session-end.sh +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/extensions/gemini/hooks/scripts/session-start.sh +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/file_watcher.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/find_api.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/git_events.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/graph.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/hooks/__init__.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/hooks/event_tracker.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/hooks/hooks-config.example.json +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/hooks/installer.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/hooks/orchestrator.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/hooks/orchestrator_reflector.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/hooks/post-checkout.sh +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/hooks/post-commit.sh +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/hooks/post-merge.sh +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/hooks/pre-commit.sh +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/hooks/pre-push.sh +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/hooks/pretooluse.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/hooks/task_enforcer.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/hooks/task_validator.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/hooks/validator.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/ids.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/index.d.ts +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/learning.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/mcp_server.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/models.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/orchestration.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/orchestrator.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/orchestrator_mode.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/orchestrator_validator.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/parallel.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/parser.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/planning.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/query_builder.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/routing.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/scripts/__init__.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/scripts/deploy.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/sdk.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/server.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/services/__init__.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/services/claiming.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/session_manager.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/session_warning.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/setup.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/spike_index.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/styles.css +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/sync_docs.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/templates/AGENTS.md.template +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/templates/CLAUDE.md.template +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/templates/GEMINI.md.template +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/track_builder.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/track_manager.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/transcript.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/transcript_analytics.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/types.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/watch.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/work_type_utils.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/benchmarks/README.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/benchmarks/__init__.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/benchmarks/bench_graph.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/benchmarks/conftest.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/integration/test_deployment_workflow.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/integration/test_handoff_routing.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/integration/test_multi_agent_coordination.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/js/README.md +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/js/test_htmlgraph.html +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/__init__.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_agent_detection.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_analytics.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_auto_spike.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_claiming.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_cli_commands.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_collection_filter.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_cross_agent_attribution.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_dashboard_ui.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_delete.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_deploy.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_drift_parent_activity.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_drift_queue_cleanup.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_edge_index.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_event_index.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_event_query.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_find_api.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_git_events.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_graph_traversal.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_handoff.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_ids.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_install_hooks.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_lifecycle.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_mcp_server.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_mcp_stdio_transport.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_models.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_orchestration.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_orchestrator_cli.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_orchestrator_enforce_hook.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_orchestrator_mode.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_pre_work_validation_integration.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_query_builder.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_query_cache.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_query_compilation.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_routing.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_sdk_discoverability.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_sdk_get_active_work_item.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_session_cleanup.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_session_continuity.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_session_start_info_validation.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_system_overhead_drift.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_todo_collection.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_track_loading.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_transcript_linking.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_update_preserves_incoming_edges.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_validate_work_hook.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_work_queue.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/python/test_work_type.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/test_agent_routing.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/test_deployment_models.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/test_orchestrator_validator.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/test_transaction_snapshot.py +0 -0
- {htmlgraph-0.20.0 → htmlgraph-0.20.2}/tests/test_transcript.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: htmlgraph
|
|
3
|
-
Version: 0.20.
|
|
3
|
+
Version: 0.20.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.20.
|
|
3
|
+
"version": "0.20.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",
|
|
@@ -29,19 +29,63 @@ def run(hook_input: dict[str, Any]) -> dict[str, Any]:
|
|
|
29
29
|
|
|
30
30
|
Args:
|
|
31
31
|
hook_input: Hook input containing:
|
|
32
|
-
-
|
|
33
|
-
-
|
|
32
|
+
- name: Tool name that failed
|
|
33
|
+
- result: Tool result (may contain error field)
|
|
34
34
|
- session_id: Current session ID
|
|
35
35
|
|
|
36
36
|
Returns:
|
|
37
37
|
Standard hook response: {"continue": True}
|
|
38
38
|
"""
|
|
39
39
|
try:
|
|
40
|
-
#
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
# DEBUG: Log raw hook input to understand structure
|
|
41
|
+
debug_log = Path(".htmlgraph/hook-debug.jsonl")
|
|
42
|
+
debug_log.parent.mkdir(parents=True, exist_ok=True)
|
|
43
|
+
with open(debug_log, "a") as f:
|
|
44
|
+
f.write(
|
|
45
|
+
json.dumps(
|
|
46
|
+
{
|
|
47
|
+
"raw_input": hook_input,
|
|
48
|
+
"keys": list(hook_input.keys()),
|
|
49
|
+
"ts": datetime.now().isoformat(),
|
|
50
|
+
}
|
|
51
|
+
)
|
|
52
|
+
+ "\n"
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
# Extract error information from PostToolUse hook format
|
|
56
|
+
# Official PostToolUse uses: tool_name, tool_response
|
|
57
|
+
# Custom hooks may use: name, result
|
|
58
|
+
tool_name = hook_input.get("tool_name") or hook_input.get("name", "unknown")
|
|
43
59
|
session_id = hook_input.get("session_id", "unknown")
|
|
44
60
|
|
|
61
|
+
# Error message can be in different places depending on tool
|
|
62
|
+
error_msg = "No error message"
|
|
63
|
+
|
|
64
|
+
# Check tool_response field first (official PostToolUse format)
|
|
65
|
+
# Then check result field (custom hook format)
|
|
66
|
+
result = hook_input.get("tool_response") or hook_input.get("result", {})
|
|
67
|
+
if isinstance(result, dict):
|
|
68
|
+
if "error" in result:
|
|
69
|
+
error_msg = result["error"]
|
|
70
|
+
elif "message" in result:
|
|
71
|
+
error_msg = result["message"]
|
|
72
|
+
elif isinstance(result, str):
|
|
73
|
+
# Sometimes the error is directly in the result as a string
|
|
74
|
+
error_msg = result
|
|
75
|
+
|
|
76
|
+
# Fallback: check top-level error field
|
|
77
|
+
if error_msg == "No error message" and "error" in hook_input:
|
|
78
|
+
error_msg = hook_input["error"]
|
|
79
|
+
|
|
80
|
+
# Last resort: stringify the result if it contains error indicators
|
|
81
|
+
if error_msg == "No error message" and result:
|
|
82
|
+
result_str = str(result).lower()
|
|
83
|
+
if any(
|
|
84
|
+
indicator in result_str
|
|
85
|
+
for indicator in ["error", "failed", "exception"]
|
|
86
|
+
):
|
|
87
|
+
error_msg = str(result)[:500] # Truncate to 500 chars
|
|
88
|
+
|
|
45
89
|
# Track error in file-based storage
|
|
46
90
|
error_log = Path(".htmlgraph/errors.jsonl")
|
|
47
91
|
error_log.parent.mkdir(parents=True, exist_ok=True)
|
|
@@ -119,6 +119,8 @@ async def run_error_tracking(hook_input: dict[str, Any]) -> dict[str, Any]:
|
|
|
119
119
|
"""
|
|
120
120
|
Track errors to .htmlgraph/errors.jsonl and auto-create debug spikes.
|
|
121
121
|
|
|
122
|
+
Only tracks ACTUAL errors, not responses containing the word "error".
|
|
123
|
+
|
|
122
124
|
Args:
|
|
123
125
|
hook_input: Hook input with tool execution details
|
|
124
126
|
|
|
@@ -128,23 +130,26 @@ async def run_error_tracking(hook_input: dict[str, Any]) -> dict[str, Any]:
|
|
|
128
130
|
try:
|
|
129
131
|
loop = asyncio.get_event_loop()
|
|
130
132
|
|
|
131
|
-
# Check if this is an
|
|
133
|
+
# Check if this is an ACTUAL error
|
|
132
134
|
has_error = False
|
|
133
|
-
tool_response = hook_input.get("
|
|
134
|
-
|
|
135
|
-
)
|
|
135
|
+
tool_response = hook_input.get("tool_response") or hook_input.get("result", {})
|
|
136
|
+
|
|
137
|
+
if isinstance(tool_response, dict):
|
|
138
|
+
# Bash: non-empty stderr indicates error
|
|
139
|
+
stderr = tool_response.get("stderr", "")
|
|
140
|
+
if stderr and isinstance(stderr, str) and stderr.strip():
|
|
141
|
+
has_error = True
|
|
136
142
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
143
|
+
# Explicit error field with content
|
|
144
|
+
error_field = tool_response.get("error")
|
|
145
|
+
if error_field and str(error_field).strip():
|
|
146
|
+
has_error = True
|
|
140
147
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
if any(indicator in response_text for indicator in error_indicators):
|
|
145
|
-
has_error = True
|
|
148
|
+
# success=false flag
|
|
149
|
+
if tool_response.get("success") is False:
|
|
150
|
+
has_error = True
|
|
146
151
|
|
|
147
|
-
# Only track if there's an error
|
|
152
|
+
# Only track if there's an actual error
|
|
148
153
|
if has_error:
|
|
149
154
|
return await loop.run_in_executor(
|
|
150
155
|
None,
|
|
@@ -162,6 +167,9 @@ async def suggest_debugging_resources(hook_input: dict[str, Any]) -> dict[str, A
|
|
|
162
167
|
"""
|
|
163
168
|
Suggest debugging resources based on tool results.
|
|
164
169
|
|
|
170
|
+
Only triggers on ACTUAL errors, not on responses that happen to contain
|
|
171
|
+
the word "error" in their content.
|
|
172
|
+
|
|
165
173
|
Args:
|
|
166
174
|
hook_input: Hook input with tool execution details
|
|
167
175
|
|
|
@@ -176,11 +184,24 @@ async def suggest_debugging_resources(hook_input: dict[str, Any]) -> dict[str, A
|
|
|
176
184
|
|
|
177
185
|
suggestions = []
|
|
178
186
|
|
|
179
|
-
# Check for
|
|
180
|
-
|
|
181
|
-
|
|
187
|
+
# Check for ACTUAL errors (not just text containing "error")
|
|
188
|
+
has_actual_error = False
|
|
189
|
+
|
|
190
|
+
if isinstance(tool_response, dict):
|
|
191
|
+
# Bash: non-empty stderr indicates error
|
|
192
|
+
stderr = tool_response.get("stderr", "")
|
|
193
|
+
if stderr and isinstance(stderr, str) and stderr.strip():
|
|
194
|
+
has_actual_error = True
|
|
195
|
+
|
|
196
|
+
# Explicit error field
|
|
197
|
+
if tool_response.get("error"):
|
|
198
|
+
has_actual_error = True
|
|
199
|
+
|
|
200
|
+
# success=false flag
|
|
201
|
+
if tool_response.get("success") is False:
|
|
202
|
+
has_actual_error = True
|
|
182
203
|
|
|
183
|
-
if
|
|
204
|
+
if has_actual_error:
|
|
184
205
|
suggestions.append("⚠️ Error detected in tool response")
|
|
185
206
|
suggestions.append("Debugging resources:")
|
|
186
207
|
suggestions.append(" 📚 DEBUGGING.md - Systematic debugging guide")
|
|
@@ -23,8 +23,8 @@ def mock_htmlgraph_dir(tmp_path, monkeypatch):
|
|
|
23
23
|
def test_error_logging(mock_htmlgraph_dir):
|
|
24
24
|
"""Test that errors are logged to file."""
|
|
25
25
|
hook_input = {
|
|
26
|
-
"
|
|
27
|
-
"error": "Command failed with exit code 1",
|
|
26
|
+
"name": "Bash",
|
|
27
|
+
"result": {"error": "Command failed with exit code 1"},
|
|
28
28
|
"session_id": "test-session",
|
|
29
29
|
}
|
|
30
30
|
|
|
@@ -44,10 +44,10 @@ def test_error_logging(mock_htmlgraph_dir):
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
def test_error_logging_with_name_field(mock_htmlgraph_dir):
|
|
47
|
-
"""Test that errors are logged when using
|
|
47
|
+
"""Test that errors are logged when using PostToolUse format with result.error."""
|
|
48
48
|
hook_input = {
|
|
49
49
|
"name": "Read",
|
|
50
|
-
"error": "File not found",
|
|
50
|
+
"result": {"error": "File not found"},
|
|
51
51
|
"session_id": "test-session-2",
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -245,8 +245,8 @@ def test_hook_never_blocks(mock_htmlgraph_dir):
|
|
|
245
245
|
f.write("invalid json\n")
|
|
246
246
|
|
|
247
247
|
hook_input = {
|
|
248
|
-
"
|
|
249
|
-
"error": "test error",
|
|
248
|
+
"name": "Bash",
|
|
249
|
+
"result": {"error": "test error"},
|
|
250
250
|
"session_id": "test",
|
|
251
251
|
}
|
|
252
252
|
|
|
@@ -271,8 +271,8 @@ def test_integration_with_auto_spike_creation(mock_htmlgraph_dir):
|
|
|
271
271
|
mock_sdk_class.return_value = mock_sdk
|
|
272
272
|
|
|
273
273
|
hook_input = {
|
|
274
|
-
"
|
|
275
|
-
"error": "Pattern matching failed",
|
|
274
|
+
"name": "Edit",
|
|
275
|
+
"result": {"error": "Pattern matching failed"},
|
|
276
276
|
"session_id": "integration-test",
|
|
277
277
|
}
|
|
278
278
|
|
|
@@ -291,8 +291,8 @@ def test_error_log_creates_directory(tmp_path, monkeypatch):
|
|
|
291
291
|
monkeypatch.chdir(tmp_path)
|
|
292
292
|
|
|
293
293
|
hook_input = {
|
|
294
|
-
"
|
|
295
|
-
"error": "test error",
|
|
294
|
+
"name": "Test",
|
|
295
|
+
"result": {"error": "test error"},
|
|
296
296
|
"session_id": "test",
|
|
297
297
|
}
|
|
298
298
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/documentation-site/features/doc-api-graph.html
RENAMED
|
File without changes
|
{htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/documentation-site/features/doc-api-overview.html
RENAMED
|
File without changes
|
|
File without changes
|
{htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/documentation-site/features/doc-example-advanced.html
RENAMED
|
File without changes
|
{htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/documentation-site/features/doc-example-basic.html
RENAMED
|
File without changes
|
|
File without changes
|
{htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/documentation-site/features/doc-installation.html
RENAMED
|
File without changes
|
{htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/documentation-site/features/doc-quickstart.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{htmlgraph-0.20.0 → htmlgraph-0.20.2}/examples/knowledge-base/features/note-web-standards.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/hooks/scripts/session-end.sh
RENAMED
|
File without changes
|
{htmlgraph-0.20.0 → htmlgraph-0.20.2}/packages/gemini-extension/hooks/scripts/session-start.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/extensions/gemini/gemini-extension.json
RENAMED
|
File without changes
|
{htmlgraph-0.20.0 → htmlgraph-0.20.2}/src/python/htmlgraph/extensions/gemini/hooks/hooks.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|