emdash-core 0.1.50__tar.gz → 0.1.57__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.
- {emdash_core-0.1.50 → emdash_core-0.1.57}/PKG-INFO +2 -1
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/prompts/workflow.py +41 -27
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/runner/agent_runner.py +21 -12
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/agent.py +5 -1
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/utils/image.py +33 -11
- {emdash_core-0.1.50 → emdash_core-0.1.57}/pyproject.toml +4 -1
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/agents.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/background.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/code_reviewer.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/compaction.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/context_manager.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/events.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/handlers.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/hooks.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/inprocess_subagent.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/mcp/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/mcp/client.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/mcp/config.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/mcp/manager.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/mcp/tool_factory.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/prompts/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/prompts/main_agent.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/prompts/plan_mode.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/prompts/subagents.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/providers/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/providers/base.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/providers/factory.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/providers/models.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/providers/openai_provider.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/providers/transformers_provider.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/research/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/research/agent.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/research/controller.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/research/critic.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/research/macros.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/research/planner.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/research/researcher.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/research/state.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/research/synthesizer.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/reviewer_profile.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/rules.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/runner/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/runner/context.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/runner/factory.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/runner/plan.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/runner/sdk_runner.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/runner/utils.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/session.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/skills.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/spec_schema.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/specification.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/subagent.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/subagent_prompts.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/toolkit.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/toolkits/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/toolkits/base.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/toolkits/explore.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/toolkits/plan.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/tools/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/tools/analytics.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/tools/base.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/tools/coding.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/tools/github_mcp.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/tools/history.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/tools/lsp.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/tools/modes.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/tools/plan.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/tools/plan_write.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/tools/search.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/tools/skill.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/tools/spec.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/tools/task.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/tools/task_output.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/tools/tasks.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/tools/traversal.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/tools/web.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/verifier/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/verifier/manager.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/verifier/models.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/worktree.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/analytics/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/analytics/engine.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/agents.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/analyze.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/auth.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/context.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/db.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/embed.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/feature.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/health.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/index.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/plan.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/projectmd.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/query.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/research.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/review.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/router.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/rules.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/search.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/skills.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/spec.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/tasks.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/api/team.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/auth/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/auth/github.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/checkpoint/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/checkpoint/cli.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/checkpoint/git_operations.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/checkpoint/manager.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/checkpoint/models.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/checkpoint/storage.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/config.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/context/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/context/longevity.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/context/models.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/context/providers/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/context/providers/base.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/context/providers/explored_areas.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/context/providers/touched_areas.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/context/registry.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/context/reranker.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/context/service.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/context/session.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/context/simple_reranker.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/context/tool_relevance.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/core/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/core/config.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/core/exceptions.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/core/models.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/core/review_config.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/embeddings/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/embeddings/indexer.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/embeddings/models.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/embeddings/providers/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/embeddings/providers/base.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/embeddings/providers/fireworks.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/embeddings/providers/openai.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/embeddings/registry.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/embeddings/service.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/graph/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/graph/builder.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/graph/connection.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/graph/schema.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/graph/writer.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/change_detector.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/git/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/git/commit_analyzer.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/github/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/github/pr_fetcher.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/github/task_extractor.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/orchestrator.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/parsers/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/parsers/base_parser.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/parsers/call_graph_builder.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/parsers/class_extractor.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/parsers/function_extractor.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/parsers/import_analyzer.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/parsers/python_parser.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/parsers/registry.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/parsers/ts_ast_parser.js +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/parsers/typescript_parser.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/repository.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/models/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/models/agent.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/models/index.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/models/query.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/planning/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/planning/agent_api.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/planning/context_builder.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/planning/feature_context.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/planning/feature_expander.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/planning/llm_explainer.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/planning/similarity.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/planning/team_focus.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/server.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/skills/frontend-design/SKILL.md +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/sse/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/sse/stream.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/templates/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/templates/defaults/agent-builder.md.template +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/templates/defaults/focus.md.template +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/templates/defaults/pr-review-enhanced.md.template +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/templates/defaults/pr-review.md.template +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/templates/defaults/project.md.template +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/templates/defaults/research_critic.md.template +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/templates/defaults/research_planner.md.template +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/templates/defaults/research_synthesizer.md.template +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/templates/defaults/reviewer.md.template +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/templates/defaults/spec.md.template +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/templates/defaults/tasks.md.template +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/templates/loader.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/utils/__init__.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/utils/git.py +0 -0
- {emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/utils/logger.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: emdash-core
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.57
|
|
4
4
|
Summary: EmDash Core - FastAPI server for code intelligence
|
|
5
5
|
Author: Em Dash Team
|
|
6
6
|
Requires-Python: >=3.10,<4.0
|
|
@@ -27,6 +27,7 @@ Requires-Dist: openai (>=1.0.0)
|
|
|
27
27
|
Requires-Dist: pydantic (>=2.5.0,<3.0.0)
|
|
28
28
|
Requires-Dist: pydantic-settings (>=2.0.0,<3.0.0)
|
|
29
29
|
Requires-Dist: pygithub (>=2.1.1,<3.0.0)
|
|
30
|
+
Requires-Dist: pyobjc-framework-Cocoa (>=9.0) ; sys_platform == "darwin"
|
|
30
31
|
Requires-Dist: pypng (>=0.0.21,<0.0.22)
|
|
31
32
|
Requires-Dist: python-dotenv (>=1.0.0,<2.0.0)
|
|
32
33
|
Requires-Dist: python-louvain (>=0.16,<0.17)
|
|
@@ -48,35 +48,38 @@ After receiving the plan:
|
|
|
48
48
|
- "Fix this typo" → just fix it
|
|
49
49
|
- "Add a log statement here" → just add it
|
|
50
50
|
|
|
51
|
-
### 1.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
51
|
+
### 1. Know What To Do → Plan-First, Execute
|
|
52
|
+
|
|
53
|
+
When you understand the task and know how to approach it:
|
|
54
|
+
1. State a brief plan (3-5 steps)
|
|
55
|
+
2. Execute directly - don't explore "just in case"
|
|
56
|
+
3. Read only the files your plan requires
|
|
57
|
+
|
|
58
|
+
Examples:
|
|
59
|
+
- "Add logout button to settings" → You know where settings is, just do it
|
|
60
|
+
- "Fix the typo in README" → Just fix it
|
|
61
|
+
- "Update the API endpoint" → Read it, update it, done
|
|
62
|
+
|
|
63
|
+
### 2. Don't Know What To Do → Explore First
|
|
64
|
+
|
|
65
|
+
When you're genuinely uncertain about the codebase or approach:
|
|
66
|
+
- **Spawn Explore agent** for open-ended research across multiple files
|
|
67
|
+
- **Ask ONE clarifying question** if you need user input (not multiple)
|
|
68
|
+
|
|
69
|
+
Examples:
|
|
70
|
+
- "Where are errors handled?" → Explore agent (could be many places)
|
|
71
|
+
- "How does authentication work?" → Explore agent (multiple files)
|
|
72
|
+
- "What framework should I use?" → Ask user (decision needed)
|
|
73
|
+
|
|
74
|
+
### 3. Direct Tools vs Explore Agent
|
|
75
|
+
|
|
76
|
+
**Use direct tools** when you know what to look for:
|
|
72
77
|
- "Read the router" → `glob("**/router*")` then `read_file`
|
|
73
|
-
- "
|
|
74
|
-
- "Find the UserService class" → `grep("class UserService")`
|
|
78
|
+
- "Find UserService class" → `grep("class UserService")`
|
|
75
79
|
|
|
76
|
-
**
|
|
77
|
-
- "
|
|
78
|
-
- "How does
|
|
79
|
-
- "What is the codebase structure?" → broad exploration
|
|
80
|
+
**Spawn Explore agent** when you need broad exploration:
|
|
81
|
+
- "What is the codebase structure?"
|
|
82
|
+
- "How does X integrate with Y?"
|
|
80
83
|
|
|
81
84
|
### 4. Parallel Tool Execution
|
|
82
85
|
|
|
@@ -338,6 +341,17 @@ Do this in ONE message:
|
|
|
338
341
|
→ All three run concurrently, results return together
|
|
339
342
|
"""
|
|
340
343
|
|
|
344
|
+
# Plan-First rule to prevent over-exploration
|
|
345
|
+
PLAN_FIRST_RULE = """
|
|
346
|
+
## Plan-First Reminder
|
|
347
|
+
|
|
348
|
+
**Know what to do?** → State a 3-5 step plan, then execute. Don't explore beyond your plan.
|
|
349
|
+
|
|
350
|
+
**Don't know?** → Spawn Explore agent or ask ONE clarifying question.
|
|
351
|
+
|
|
352
|
+
Trust user context - if they say "the file" or "this", they know which one.
|
|
353
|
+
"""
|
|
354
|
+
|
|
341
355
|
# Efficiency rules for sub-agents with limited turns
|
|
342
356
|
EFFICIENCY_RULES = """
|
|
343
357
|
## Efficiency Rules
|
|
@@ -310,24 +310,27 @@ class AgentRunner(PlanMixin):
|
|
|
310
310
|
from ..tools.modes import ModeState
|
|
311
311
|
ModeState.get_instance().reset_cycle()
|
|
312
312
|
|
|
313
|
-
# Build user message
|
|
313
|
+
# Build user message content
|
|
314
314
|
if context:
|
|
315
|
-
|
|
316
|
-
"role": "user",
|
|
317
|
-
"content": f"Context:\n{context}\n\nQuestion: {query}",
|
|
318
|
-
}
|
|
315
|
+
text_content = f"Context:\n{context}\n\nQuestion: {query}"
|
|
319
316
|
else:
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
317
|
+
text_content = query
|
|
318
|
+
|
|
319
|
+
# Format content with images if provided
|
|
320
|
+
if images:
|
|
321
|
+
content = self.provider.format_content_with_images(text_content, images)
|
|
322
|
+
else:
|
|
323
|
+
content = text_content
|
|
324
|
+
|
|
325
|
+
user_message = {
|
|
326
|
+
"role": "user",
|
|
327
|
+
"content": content,
|
|
328
|
+
}
|
|
324
329
|
|
|
325
330
|
# Save user message to history BEFORE running (so it's preserved even if interrupted)
|
|
326
331
|
self._messages.append(user_message)
|
|
327
332
|
messages = list(self._messages) # Copy for the loop
|
|
328
333
|
|
|
329
|
-
# TODO: Handle images if provided
|
|
330
|
-
|
|
331
334
|
# Get tool schemas
|
|
332
335
|
tools = self.toolkit.get_all_schemas()
|
|
333
336
|
|
|
@@ -793,10 +796,16 @@ DO NOT output more text. Use a tool NOW.""",
|
|
|
793
796
|
# Store query for reranking context frame
|
|
794
797
|
self._current_query = message
|
|
795
798
|
|
|
799
|
+
# Format content with images if provided
|
|
800
|
+
if images:
|
|
801
|
+
content = self.provider.format_content_with_images(message, images)
|
|
802
|
+
else:
|
|
803
|
+
content = message
|
|
804
|
+
|
|
796
805
|
# Add new user message to history
|
|
797
806
|
self._messages.append({
|
|
798
807
|
"role": "user",
|
|
799
|
-
"content":
|
|
808
|
+
"content": content,
|
|
800
809
|
})
|
|
801
810
|
|
|
802
811
|
# Get tool schemas
|
|
@@ -251,9 +251,13 @@ def _run_agent_sync(
|
|
|
251
251
|
# Convert image data if provided
|
|
252
252
|
agent_images = None
|
|
253
253
|
if images:
|
|
254
|
+
import base64
|
|
254
255
|
from ..agent.providers.base import ImageContent
|
|
255
256
|
agent_images = [
|
|
256
|
-
ImageContent(
|
|
257
|
+
ImageContent(
|
|
258
|
+
image_data=base64.b64decode(img.data),
|
|
259
|
+
format=img.format
|
|
260
|
+
)
|
|
257
261
|
for img in images
|
|
258
262
|
]
|
|
259
263
|
|
|
@@ -110,7 +110,11 @@ def _check_macos_clipboard() -> bool:
|
|
|
110
110
|
|
|
111
111
|
try:
|
|
112
112
|
pasteboard = AppKit.NSPasteboard.generalPasteboard()
|
|
113
|
-
|
|
113
|
+
# Check for PNG or TIFF (macOS screenshots use TIFF)
|
|
114
|
+
return bool(
|
|
115
|
+
pasteboard.dataForType_("public.png") or
|
|
116
|
+
pasteboard.dataForType_("public.tiff")
|
|
117
|
+
)
|
|
114
118
|
except Exception:
|
|
115
119
|
return False
|
|
116
120
|
|
|
@@ -253,6 +257,8 @@ def _dib_to_png(dib_data: bytes) -> bytes:
|
|
|
253
257
|
|
|
254
258
|
def _read_macos_clipboard() -> Optional[bytes]:
|
|
255
259
|
"""Read image from macOS clipboard."""
|
|
260
|
+
import tempfile
|
|
261
|
+
|
|
256
262
|
AppKit = _import_mac_clipboard()
|
|
257
263
|
if AppKit is None:
|
|
258
264
|
raise ClipboardImageError(
|
|
@@ -268,19 +274,35 @@ def _read_macos_clipboard() -> Optional[bytes]:
|
|
|
268
274
|
if data:
|
|
269
275
|
return bytes(data)
|
|
270
276
|
|
|
271
|
-
# Try TIFF and convert (macOS
|
|
277
|
+
# Try TIFF and convert (macOS screenshots use TIFF internally)
|
|
272
278
|
data = pasteboard.dataForType_("public.tiff")
|
|
273
279
|
if data:
|
|
274
|
-
# Use sips command-line tool to convert TIFF to PNG
|
|
280
|
+
# Use sips command-line tool to convert TIFF to PNG (via temp files)
|
|
275
281
|
try:
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
282
|
+
with tempfile.NamedTemporaryFile(suffix='.tiff', delete=False) as tiff_file:
|
|
283
|
+
tiff_path = tiff_file.name
|
|
284
|
+
tiff_file.write(bytes(data))
|
|
285
|
+
|
|
286
|
+
png_path = tiff_path.replace('.tiff', '.png')
|
|
287
|
+
try:
|
|
288
|
+
proc = subprocess.run(
|
|
289
|
+
["sips", "-s", "format", "png", tiff_path, "--out", png_path],
|
|
290
|
+
capture_output=True,
|
|
291
|
+
timeout=5
|
|
292
|
+
)
|
|
293
|
+
if proc.returncode == 0:
|
|
294
|
+
with open(png_path, 'rb') as f:
|
|
295
|
+
return f.read()
|
|
296
|
+
finally:
|
|
297
|
+
# Clean up temp files
|
|
298
|
+
try:
|
|
299
|
+
os.unlink(tiff_path)
|
|
300
|
+
except OSError:
|
|
301
|
+
pass
|
|
302
|
+
try:
|
|
303
|
+
os.unlink(png_path)
|
|
304
|
+
except OSError:
|
|
305
|
+
pass
|
|
284
306
|
except (subprocess.TimeoutExpired, FileNotFoundError):
|
|
285
307
|
pass
|
|
286
308
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "emdash-core"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.57"
|
|
4
4
|
description = "EmDash Core - FastAPI server for code intelligence"
|
|
5
5
|
authors = ["Em Dash Team"]
|
|
6
6
|
packages = [{include = "emdash_core"}]
|
|
@@ -54,6 +54,9 @@ tqdm = "^4.66.1"
|
|
|
54
54
|
pypng = "^0.0.21"
|
|
55
55
|
pyyaml = "^6.0"
|
|
56
56
|
|
|
57
|
+
# Clipboard (macOS only)
|
|
58
|
+
pyobjc-framework-Cocoa = {version = ">=9.0", markers = "sys_platform == 'darwin'"}
|
|
59
|
+
|
|
57
60
|
[tool.poetry.extras]
|
|
58
61
|
graph = ["kuzu", "cmake"]
|
|
59
62
|
|
|
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
|
{emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/agent/providers/transformers_provider.py
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
|
|
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
|
|
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
|
{emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/parsers/call_graph_builder.py
RENAMED
|
File without changes
|
|
File without changes
|
{emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/parsers/function_extractor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/ingestion/parsers/typescript_parser.py
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
|
{emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/templates/defaults/agent-builder.md.template
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/templates/defaults/pr-review.md.template
RENAMED
|
File without changes
|
{emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/templates/defaults/project.md.template
RENAMED
|
File without changes
|
{emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/templates/defaults/research_critic.md.template
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{emdash_core-0.1.50 → emdash_core-0.1.57}/emdash_core/templates/defaults/reviewer.md.template
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|