attocode 0.1.8__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.
- attocode-0.1.8/.attocode/.mcp.json +22 -0
- attocode-0.1.8/.attocode/mcp.json +22 -0
- attocode-0.1.8/.attocode/sessions/sessions.db +0 -0
- attocode-0.1.8/.attocode/skills/swarm-verify/SKILL.md +116 -0
- attocode-0.1.8/.attocode/swarm.hybrid.yaml.example +72 -0
- attocode-0.1.8/.attocode/swarm.yaml.example +42 -0
- attocode-0.1.8/.attocode/traces/trace-1771789500.jsonl +5688 -0
- attocode-0.1.8/.attocode/traces/trace-1772209432.jsonl +292 -0
- attocode-0.1.8/.attocode/traces/trace-1772209672.jsonl +2 -0
- attocode-0.1.8/.attocode/traces/trace-1772210064.jsonl +465 -0
- attocode-0.1.8/.attocode/traces/trace-1772210765.jsonl +2 -0
- attocode-0.1.8/.attocode/traces/trace-1772211686.jsonl +2 -0
- attocode-0.1.8/.attocode/traces/trace-1772211765.jsonl +2 -0
- attocode-0.1.8/.attocode/traces/trace-1772211773.jsonl +2 -0
- attocode-0.1.8/.attocode/traces/trace-1772211780.jsonl +2 -0
- attocode-0.1.8/.attocode/traces/trace-1772214295.jsonl +377 -0
- attocode-0.1.8/.attocode/traces/trace-1772215673.jsonl +466 -0
- attocode-0.1.8/.attocode/traces/trace-1772216663.jsonl +2 -0
- attocode-0.1.8/.attocode/traces/trace-1772265122.jsonl +2 -0
- attocode-0.1.8/.attocode/traces/trace-1772365784.jsonl +2732 -0
- attocode-0.1.8/.claude/CLAUDE.md +352 -0
- attocode-0.1.8/.claude/settings.local.json +102 -0
- attocode-0.1.8/.github/workflows/release.yml +48 -0
- attocode-0.1.8/.github/workflows/test.yml +44 -0
- attocode-0.1.8/.gitignore +45 -0
- attocode-0.1.8/.python-version +1 -0
- attocode-0.1.8/CHANGELOG.md +314 -0
- attocode-0.1.8/CONTRIBUTING.md +104 -0
- attocode-0.1.8/LICENSE +21 -0
- attocode-0.1.8/PKG-INFO +492 -0
- attocode-0.1.8/README.md +429 -0
- attocode-0.1.8/docs/ARCHITECTURE.md +127 -0
- attocode-0.1.8/docs/BUDGET.md +223 -0
- attocode-0.1.8/docs/MCP.md +59 -0
- attocode-0.1.8/docs/PROVIDERS.md +61 -0
- attocode-0.1.8/docs/SANDBOX.md +93 -0
- attocode-0.1.8/docs/TESTING.md +88 -0
- attocode-0.1.8/docs/advanced-features.md +446 -0
- attocode-0.1.8/docs/ast-and-code-intelligence.md +358 -0
- attocode-0.1.8/docs/cli-reference.md +157 -0
- attocode-0.1.8/docs/context-engineering.md +444 -0
- attocode-0.1.8/docs/contributing.md +1 -0
- attocode-0.1.8/docs/extending.md +377 -0
- attocode-0.1.8/docs/getting-started.md +173 -0
- attocode-0.1.8/docs/hybrid-swarm-operations.md +243 -0
- attocode-0.1.8/docs/index.md +60 -0
- attocode-0.1.8/docs/internals.md +321 -0
- attocode-0.1.8/docs/javascripts/mermaid-init.js +14 -0
- attocode-0.1.8/docs/provider-resilience.md +229 -0
- attocode-0.1.8/docs/recording-and-replay.md +247 -0
- attocode-0.1.8/docs/sessions-guide.md +204 -0
- attocode-0.1.8/docs/skills-and-agents.md +268 -0
- attocode-0.1.8/docs/swarm-guide.md +245 -0
- attocode-0.1.8/docs/swarm-roadmap.md +44 -0
- attocode-0.1.8/docs/tracing-guide.md +252 -0
- attocode-0.1.8/docs/troubleshooting.md +284 -0
- attocode-0.1.8/docs/tui-guide.md +242 -0
- attocode-0.1.8/eval/__init__.py +1 -0
- attocode-0.1.8/eval/harness.py +534 -0
- attocode-0.1.8/eval/metrics.py +343 -0
- attocode-0.1.8/eval/runner.py +366 -0
- attocode-0.1.8/mkdocs.yml +85 -0
- attocode-0.1.8/pyproject.toml +125 -0
- attocode-0.1.8/scripts/setup.sh +49 -0
- attocode-0.1.8/site/404.html +1177 -0
- attocode-0.1.8/site/ARCHITECTURE/index.html +1581 -0
- attocode-0.1.8/site/BUDGET/index.html +2197 -0
- attocode-0.1.8/site/MCP/index.html +1512 -0
- attocode-0.1.8/site/PROVIDERS/index.html +1526 -0
- attocode-0.1.8/site/SANDBOX/index.html +1647 -0
- attocode-0.1.8/site/TESTING/index.html +1549 -0
- attocode-0.1.8/site/advanced-features/index.html +3017 -0
- attocode-0.1.8/site/assets/images/favicon.png +0 -0
- attocode-0.1.8/site/assets/javascripts/bundle.79ae519e.min.js +16 -0
- attocode-0.1.8/site/assets/javascripts/bundle.79ae519e.min.js.map +7 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.ar.min.js +1 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.da.min.js +18 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.de.min.js +18 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.du.min.js +18 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.el.min.js +1 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.es.min.js +18 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.fi.min.js +18 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.fr.min.js +18 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.he.min.js +1 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.hi.min.js +1 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.hu.min.js +18 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.hy.min.js +1 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.it.min.js +18 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.ja.min.js +1 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.jp.min.js +1 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.kn.min.js +1 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.ko.min.js +1 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.multi.min.js +1 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.nl.min.js +18 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.no.min.js +18 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.pt.min.js +18 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.ro.min.js +18 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.ru.min.js +18 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.sa.min.js +1 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +1 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.sv.min.js +18 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.ta.min.js +1 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.te.min.js +1 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.th.min.js +1 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.tr.min.js +18 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.vi.min.js +1 -0
- attocode-0.1.8/site/assets/javascripts/lunr/min/lunr.zh.min.js +1 -0
- attocode-0.1.8/site/assets/javascripts/lunr/tinyseg.js +206 -0
- attocode-0.1.8/site/assets/javascripts/lunr/wordcut.js +6708 -0
- attocode-0.1.8/site/assets/javascripts/workers/search.2c215733.min.js +42 -0
- attocode-0.1.8/site/assets/javascripts/workers/search.2c215733.min.js.map +7 -0
- attocode-0.1.8/site/assets/stylesheets/main.484c7ddc.min.css +1 -0
- attocode-0.1.8/site/assets/stylesheets/main.484c7ddc.min.css.map +1 -0
- attocode-0.1.8/site/assets/stylesheets/palette.ab4e12ef.min.css +1 -0
- attocode-0.1.8/site/assets/stylesheets/palette.ab4e12ef.min.css.map +1 -0
- attocode-0.1.8/site/ast-and-code-intelligence/index.html +2183 -0
- attocode-0.1.8/site/cli-reference/index.html +1997 -0
- attocode-0.1.8/site/context-engineering/index.html +2674 -0
- attocode-0.1.8/site/contributing/index.html +1585 -0
- attocode-0.1.8/site/extending/index.html +2289 -0
- attocode-0.1.8/site/getting-started/index.html +1730 -0
- attocode-0.1.8/site/hybrid-swarm-operations/index.html +1679 -0
- attocode-0.1.8/site/index.html +1423 -0
- attocode-0.1.8/site/internals/index.html +2454 -0
- attocode-0.1.8/site/javascripts/mermaid-init.js +14 -0
- attocode-0.1.8/site/provider-resilience/index.html +2039 -0
- attocode-0.1.8/site/recording-and-replay/index.html +2120 -0
- attocode-0.1.8/site/search/search_index.json +1 -0
- attocode-0.1.8/site/sessions-guide/index.html +1878 -0
- attocode-0.1.8/site/sitemap.xml +103 -0
- attocode-0.1.8/site/sitemap.xml.gz +0 -0
- attocode-0.1.8/site/skills-and-agents/index.html +2087 -0
- attocode-0.1.8/site/swarm-guide/index.html +2012 -0
- attocode-0.1.8/site/swarm-roadmap/index.html +1310 -0
- attocode-0.1.8/site/tracing-guide/index.html +2077 -0
- attocode-0.1.8/site/troubleshooting/index.html +1920 -0
- attocode-0.1.8/site/tui-guide/index.html +2319 -0
- attocode-0.1.8/snapshot_report.html +1001 -0
- attocode-0.1.8/src/__init__.py +0 -0
- attocode-0.1.8/src/attocode/__init__.py +3 -0
- attocode-0.1.8/src/attocode/__main__.py +5 -0
- attocode-0.1.8/src/attocode/adapters.py +373 -0
- attocode-0.1.8/src/attocode/agent/__init__.py +26 -0
- attocode-0.1.8/src/attocode/agent/agent.py +1336 -0
- attocode-0.1.8/src/attocode/agent/builder.py +331 -0
- attocode-0.1.8/src/attocode/agent/context.py +174 -0
- attocode-0.1.8/src/attocode/agent/feature_initializer.py +551 -0
- attocode-0.1.8/src/attocode/agent/message_builder.py +101 -0
- attocode-0.1.8/src/attocode/agent/session_api.py +221 -0
- attocode-0.1.8/src/attocode/cli.py +702 -0
- attocode-0.1.8/src/attocode/code_intel/__init__.py +5 -0
- attocode-0.1.8/src/attocode/code_intel/cli.py +224 -0
- attocode-0.1.8/src/attocode/code_intel/installer.py +304 -0
- attocode-0.1.8/src/attocode/code_intel/server.py +1280 -0
- attocode-0.1.8/src/attocode/commands.py +2770 -0
- attocode-0.1.8/src/attocode/config.py +298 -0
- attocode-0.1.8/src/attocode/core/__init__.py +68 -0
- attocode-0.1.8/src/attocode/core/agent_state_machine.py +163 -0
- attocode-0.1.8/src/attocode/core/completion.py +87 -0
- attocode-0.1.8/src/attocode/core/loop.py +1197 -0
- attocode-0.1.8/src/attocode/core/response_handler.py +242 -0
- attocode-0.1.8/src/attocode/core/subagent_spawner.py +315 -0
- attocode-0.1.8/src/attocode/core/tool_executor.py +486 -0
- attocode-0.1.8/src/attocode/defaults.py +648 -0
- attocode-0.1.8/src/attocode/errors/__init__.py +126 -0
- attocode-0.1.8/src/attocode/integrations/__init__.py +4 -0
- attocode-0.1.8/src/attocode/integrations/agents/__init__.py +83 -0
- attocode-0.1.8/src/attocode/integrations/agents/async_subagent.py +202 -0
- attocode-0.1.8/src/attocode/integrations/agents/blackboard.py +600 -0
- attocode-0.1.8/src/attocode/integrations/agents/delegation.py +132 -0
- attocode-0.1.8/src/attocode/integrations/agents/registry.py +142 -0
- attocode-0.1.8/src/attocode/integrations/agents/result_synthesizer.py +1238 -0
- attocode-0.1.8/src/attocode/integrations/agents/subagent_output_store.py +160 -0
- attocode-0.1.8/src/attocode/integrations/budget/__init__.py +81 -0
- attocode-0.1.8/src/attocode/integrations/budget/budget_pool.py +277 -0
- attocode-0.1.8/src/attocode/integrations/budget/cancellation.py +80 -0
- attocode-0.1.8/src/attocode/integrations/budget/dynamic_budget.py +364 -0
- attocode-0.1.8/src/attocode/integrations/budget/economics.py +716 -0
- attocode-0.1.8/src/attocode/integrations/budget/injection_budget.py +146 -0
- attocode-0.1.8/src/attocode/integrations/budget/loop_detector.py +103 -0
- attocode-0.1.8/src/attocode/integrations/budget/phase_tracker.py +159 -0
- attocode-0.1.8/src/attocode/integrations/budget/resources.py +160 -0
- attocode-0.1.8/src/attocode/integrations/context/__init__.py +130 -0
- attocode-0.1.8/src/attocode/integrations/context/ast_client.py +119 -0
- attocode-0.1.8/src/attocode/integrations/context/ast_server.py +294 -0
- attocode-0.1.8/src/attocode/integrations/context/ast_service.py +450 -0
- attocode-0.1.8/src/attocode/integrations/context/auto_compaction.py +288 -0
- attocode-0.1.8/src/attocode/integrations/context/code_analyzer.py +537 -0
- attocode-0.1.8/src/attocode/integrations/context/code_selector.py +487 -0
- attocode-0.1.8/src/attocode/integrations/context/codebase_ast.py +876 -0
- attocode-0.1.8/src/attocode/integrations/context/codebase_context.py +1083 -0
- attocode-0.1.8/src/attocode/integrations/context/compaction.py +136 -0
- attocode-0.1.8/src/attocode/integrations/context/context_engineering.py +310 -0
- attocode-0.1.8/src/attocode/integrations/context/cross_references.py +122 -0
- attocode-0.1.8/src/attocode/integrations/context/file_cache.py +211 -0
- attocode-0.1.8/src/attocode/integrations/context/semantic_cache.py +176 -0
- attocode-0.1.8/src/attocode/integrations/lsp/__init__.py +27 -0
- attocode-0.1.8/src/attocode/integrations/lsp/client.py +746 -0
- attocode-0.1.8/src/attocode/integrations/mcp/__init__.py +54 -0
- attocode-0.1.8/src/attocode/integrations/mcp/client.py +219 -0
- attocode-0.1.8/src/attocode/integrations/mcp/client_manager.py +233 -0
- attocode-0.1.8/src/attocode/integrations/mcp/config.py +111 -0
- attocode-0.1.8/src/attocode/integrations/mcp/custom_tools.py +129 -0
- attocode-0.1.8/src/attocode/integrations/mcp/meta_tools.py +154 -0
- attocode-0.1.8/src/attocode/integrations/mcp/tool_search.py +188 -0
- attocode-0.1.8/src/attocode/integrations/mcp/tool_validator.py +117 -0
- attocode-0.1.8/src/attocode/integrations/persistence/__init__.py +39 -0
- attocode-0.1.8/src/attocode/integrations/persistence/history.py +177 -0
- attocode-0.1.8/src/attocode/integrations/persistence/store.py +1103 -0
- attocode-0.1.8/src/attocode/integrations/quality/__init__.py +65 -0
- attocode-0.1.8/src/attocode/integrations/quality/auto_checkpoint.py +135 -0
- attocode-0.1.8/src/attocode/integrations/quality/dead_letter_queue.py +193 -0
- attocode-0.1.8/src/attocode/integrations/quality/health_check.py +273 -0
- attocode-0.1.8/src/attocode/integrations/quality/learning_store.py +541 -0
- attocode-0.1.8/src/attocode/integrations/quality/self_improvement.py +243 -0
- attocode-0.1.8/src/attocode/integrations/quality/tool_recommendation.py +209 -0
- attocode-0.1.8/src/attocode/integrations/recording/__init__.py +52 -0
- attocode-0.1.8/src/attocode/integrations/recording/assembly.py +316 -0
- attocode-0.1.8/src/attocode/integrations/recording/exploration_tracker.py +304 -0
- attocode-0.1.8/src/attocode/integrations/recording/graph_types.py +346 -0
- attocode-0.1.8/src/attocode/integrations/recording/playback.py +227 -0
- attocode-0.1.8/src/attocode/integrations/recording/recorder.py +595 -0
- attocode-0.1.8/src/attocode/integrations/safety/__init__.py +35 -0
- attocode-0.1.8/src/attocode/integrations/safety/bash_policy.py +172 -0
- attocode-0.1.8/src/attocode/integrations/safety/edit_validator.py +179 -0
- attocode-0.1.8/src/attocode/integrations/safety/policy_engine.py +151 -0
- attocode-0.1.8/src/attocode/integrations/safety/sandbox/__init__.py +118 -0
- attocode-0.1.8/src/attocode/integrations/safety/sandbox/basic.py +169 -0
- attocode-0.1.8/src/attocode/integrations/safety/sandbox/docker.py +151 -0
- attocode-0.1.8/src/attocode/integrations/safety/sandbox/landlock.py +256 -0
- attocode-0.1.8/src/attocode/integrations/safety/sandbox/seatbelt.py +215 -0
- attocode-0.1.8/src/attocode/integrations/skills/__init__.py +19 -0
- attocode-0.1.8/src/attocode/integrations/skills/dependency_graph.py +167 -0
- attocode-0.1.8/src/attocode/integrations/skills/executor.py +207 -0
- attocode-0.1.8/src/attocode/integrations/skills/loader.py +170 -0
- attocode-0.1.8/src/attocode/integrations/skills/state.py +109 -0
- attocode-0.1.8/src/attocode/integrations/streaming/__init__.py +35 -0
- attocode-0.1.8/src/attocode/integrations/streaming/handler.py +378 -0
- attocode-0.1.8/src/attocode/integrations/streaming/pty_shell.py +301 -0
- attocode-0.1.8/src/attocode/integrations/swarm/__init__.py +222 -0
- attocode-0.1.8/src/attocode/integrations/swarm/cc_spawner.py +340 -0
- attocode-0.1.8/src/attocode/integrations/swarm/config_loader.py +602 -0
- attocode-0.1.8/src/attocode/integrations/swarm/critic.py +271 -0
- attocode-0.1.8/src/attocode/integrations/swarm/event_bridge.py +819 -0
- attocode-0.1.8/src/attocode/integrations/swarm/execution.py +1102 -0
- attocode-0.1.8/src/attocode/integrations/swarm/failure_classifier.py +166 -0
- attocode-0.1.8/src/attocode/integrations/swarm/helpers.py +159 -0
- attocode-0.1.8/src/attocode/integrations/swarm/lifecycle.py +748 -0
- attocode-0.1.8/src/attocode/integrations/swarm/message_bus.py +384 -0
- attocode-0.1.8/src/attocode/integrations/swarm/model_selector.py +852 -0
- attocode-0.1.8/src/attocode/integrations/swarm/orchestrator.py +806 -0
- attocode-0.1.8/src/attocode/integrations/swarm/quality_gate.py +682 -0
- attocode-0.1.8/src/attocode/integrations/swarm/recovery.py +727 -0
- attocode-0.1.8/src/attocode/integrations/swarm/request_throttle.py +200 -0
- attocode-0.1.8/src/attocode/integrations/swarm/roles.py +181 -0
- attocode-0.1.8/src/attocode/integrations/swarm/swarm_budget.py +183 -0
- attocode-0.1.8/src/attocode/integrations/swarm/swarm_state_store.py +220 -0
- attocode-0.1.8/src/attocode/integrations/swarm/task_queue.py +985 -0
- attocode-0.1.8/src/attocode/integrations/swarm/types.py +871 -0
- attocode-0.1.8/src/attocode/integrations/swarm/worker_pool.py +760 -0
- attocode-0.1.8/src/attocode/integrations/swarm/worktree_manager.py +326 -0
- attocode-0.1.8/src/attocode/integrations/tasks/__init__.py +103 -0
- attocode-0.1.8/src/attocode/integrations/tasks/decomposer.py +208 -0
- attocode-0.1.8/src/attocode/integrations/tasks/dependency_analyzer.py +234 -0
- attocode-0.1.8/src/attocode/integrations/tasks/interactive_planning.py +374 -0
- attocode-0.1.8/src/attocode/integrations/tasks/pending_plan.py +269 -0
- attocode-0.1.8/src/attocode/integrations/tasks/planning.py +203 -0
- attocode-0.1.8/src/attocode/integrations/tasks/task_manager.py +246 -0
- attocode-0.1.8/src/attocode/integrations/tasks/task_splitter.py +242 -0
- attocode-0.1.8/src/attocode/integrations/tasks/verification_gate.py +280 -0
- attocode-0.1.8/src/attocode/integrations/tasks/work_log.py +122 -0
- attocode-0.1.8/src/attocode/integrations/utilities/__init__.py +167 -0
- attocode-0.1.8/src/attocode/integrations/utilities/capabilities.py +145 -0
- attocode-0.1.8/src/attocode/integrations/utilities/complexity_classifier.py +143 -0
- attocode-0.1.8/src/attocode/integrations/utilities/diff_utils.py +83 -0
- attocode-0.1.8/src/attocode/integrations/utilities/environment_facts.py +117 -0
- attocode-0.1.8/src/attocode/integrations/utilities/execution_policy.py +247 -0
- attocode-0.1.8/src/attocode/integrations/utilities/file_change_tracker.py +303 -0
- attocode-0.1.8/src/attocode/integrations/utilities/hierarchical_config.py +228 -0
- attocode-0.1.8/src/attocode/integrations/utilities/hooks.py +155 -0
- attocode-0.1.8/src/attocode/integrations/utilities/ignore.py +64 -0
- attocode-0.1.8/src/attocode/integrations/utilities/logger.py +53 -0
- attocode-0.1.8/src/attocode/integrations/utilities/memory.py +229 -0
- attocode-0.1.8/src/attocode/integrations/utilities/mode_manager.py +300 -0
- attocode-0.1.8/src/attocode/integrations/utilities/resilience.py +460 -0
- attocode-0.1.8/src/attocode/integrations/utilities/resilient_fetch.py +252 -0
- attocode-0.1.8/src/attocode/integrations/utilities/retry.py +85 -0
- attocode-0.1.8/src/attocode/integrations/utilities/routing.py +329 -0
- attocode-0.1.8/src/attocode/integrations/utilities/rules.py +77 -0
- attocode-0.1.8/src/attocode/integrations/utilities/thinking_strategy.py +114 -0
- attocode-0.1.8/src/attocode/integrations/utilities/thread_manager.py +291 -0
- attocode-0.1.8/src/attocode/integrations/utilities/token_estimate.py +51 -0
- attocode-0.1.8/src/attocode/integrations/utilities/tool_coercion.py +169 -0
- attocode-0.1.8/src/attocode/integrations/utilities/undo.py +258 -0
- attocode-0.1.8/src/attocode/providers/__init__.py +56 -0
- attocode-0.1.8/src/attocode/providers/anthropic.py +268 -0
- attocode-0.1.8/src/attocode/providers/azure.py +292 -0
- attocode-0.1.8/src/attocode/providers/base.py +293 -0
- attocode-0.1.8/src/attocode/providers/fallback_chain.py +193 -0
- attocode-0.1.8/src/attocode/providers/mock.py +106 -0
- attocode-0.1.8/src/attocode/providers/model_cache.py +217 -0
- attocode-0.1.8/src/attocode/providers/openai.py +213 -0
- attocode-0.1.8/src/attocode/providers/openrouter.py +214 -0
- attocode-0.1.8/src/attocode/providers/registry.py +79 -0
- attocode-0.1.8/src/attocode/providers/resilient_provider.py +200 -0
- attocode-0.1.8/src/attocode/providers/zai.py +40 -0
- attocode-0.1.8/src/attocode/py.typed +0 -0
- attocode-0.1.8/src/attocode/shared/__init__.py +30 -0
- attocode-0.1.8/src/attocode/shared/budget_tracker.py +137 -0
- attocode-0.1.8/src/attocode/shared/context_engine.py +133 -0
- attocode-0.1.8/src/attocode/shared/persistence.py +148 -0
- attocode-0.1.8/src/attocode/shared/shared_context_state.py +146 -0
- attocode-0.1.8/src/attocode/shared/shared_economics_state.py +128 -0
- attocode-0.1.8/src/attocode/tools/__init__.py +15 -0
- attocode-0.1.8/src/attocode/tools/agent.py +112 -0
- attocode-0.1.8/src/attocode/tools/ast_query.py +183 -0
- attocode-0.1.8/src/attocode/tools/base.py +56 -0
- attocode-0.1.8/src/attocode/tools/bash.py +221 -0
- attocode-0.1.8/src/attocode/tools/codebase.py +510 -0
- attocode-0.1.8/src/attocode/tools/file_ops.py +242 -0
- attocode-0.1.8/src/attocode/tools/permission.py +50 -0
- attocode-0.1.8/src/attocode/tools/registry.py +108 -0
- attocode-0.1.8/src/attocode/tools/search.py +86 -0
- attocode-0.1.8/src/attocode/tools/standard.py +37 -0
- attocode-0.1.8/src/attocode/tools/tasks.py +167 -0
- attocode-0.1.8/src/attocode/tracing/__init__.py +75 -0
- attocode-0.1.8/src/attocode/tracing/analysis/__init__.py +45 -0
- attocode-0.1.8/src/attocode/tracing/analysis/inefficiency_detector.py +589 -0
- attocode-0.1.8/src/attocode/tracing/analysis/session_analyzer.py +394 -0
- attocode-0.1.8/src/attocode/tracing/analysis/token_analyzer.py +148 -0
- attocode-0.1.8/src/attocode/tracing/analysis/views.py +81 -0
- attocode-0.1.8/src/attocode/tracing/cache_boundary.py +220 -0
- attocode-0.1.8/src/attocode/tracing/collector.py +878 -0
- attocode-0.1.8/src/attocode/tracing/types.py +505 -0
- attocode-0.1.8/src/attocode/tricks/__init__.py +53 -0
- attocode-0.1.8/src/attocode/tricks/failure_evidence.py +494 -0
- attocode-0.1.8/src/attocode/tricks/json_utils.py +210 -0
- attocode-0.1.8/src/attocode/tricks/kv_cache.py +369 -0
- attocode-0.1.8/src/attocode/tricks/recitation.py +367 -0
- attocode-0.1.8/src/attocode/tricks/recursive_context.py +359 -0
- attocode-0.1.8/src/attocode/tricks/reversible_compaction.py +474 -0
- attocode-0.1.8/src/attocode/tricks/serialization_diversity.py +347 -0
- attocode-0.1.8/src/attocode/tui/__init__.py +23 -0
- attocode-0.1.8/src/attocode/tui/app.py +870 -0
- attocode-0.1.8/src/attocode/tui/bridges/__init__.py +8 -0
- attocode-0.1.8/src/attocode/tui/bridges/approval_bridge.py +132 -0
- attocode-0.1.8/src/attocode/tui/bridges/swarm_bridge.py +71 -0
- attocode-0.1.8/src/attocode/tui/dialogs/__init__.py +21 -0
- attocode-0.1.8/src/attocode/tui/dialogs/approval.py +165 -0
- attocode-0.1.8/src/attocode/tui/dialogs/budget.py +122 -0
- attocode-0.1.8/src/attocode/tui/dialogs/learning_validation.py +115 -0
- attocode-0.1.8/src/attocode/tui/dialogs/setup.py +401 -0
- attocode-0.1.8/src/attocode/tui/event_hooks.py +364 -0
- attocode-0.1.8/src/attocode/tui/events.py +189 -0
- attocode-0.1.8/src/attocode/tui/screens/__init__.py +8 -0
- attocode-0.1.8/src/attocode/tui/screens/dashboard.py +274 -0
- attocode-0.1.8/src/attocode/tui/screens/focus_screen.py +200 -0
- attocode-0.1.8/src/attocode/tui/screens/swarm_dashboard.py +373 -0
- attocode-0.1.8/src/attocode/tui/screens/swarm_monitor.py +272 -0
- attocode-0.1.8/src/attocode/tui/screens/task_detail_screen.py +57 -0
- attocode-0.1.8/src/attocode/tui/screens/timeline_screen.py +157 -0
- attocode-0.1.8/src/attocode/tui/styles/__init__.py +1 -0
- attocode-0.1.8/src/attocode/tui/styles/app.tcss +129 -0
- attocode-0.1.8/src/attocode/tui/styles/dashboard.tcss +177 -0
- attocode-0.1.8/src/attocode/tui/styles/dialogs.tcss +112 -0
- attocode-0.1.8/src/attocode/tui/styles/swarm.tcss +177 -0
- attocode-0.1.8/src/attocode/tui/styles/swarm_dashboard.tcss +280 -0
- attocode-0.1.8/src/attocode/tui/theme.py +136 -0
- attocode-0.1.8/src/attocode/tui/widgets/__init__.py +98 -0
- attocode-0.1.8/src/attocode/tui/widgets/agent_internals_panel.py +195 -0
- attocode-0.1.8/src/attocode/tui/widgets/agents_panel.py +86 -0
- attocode-0.1.8/src/attocode/tui/widgets/collapsible_diff.py +179 -0
- attocode-0.1.8/src/attocode/tui/widgets/command_palette.py +296 -0
- attocode-0.1.8/src/attocode/tui/widgets/dashboard/__init__.py +27 -0
- attocode-0.1.8/src/attocode/tui/widgets/dashboard/compare_pane.py +136 -0
- attocode-0.1.8/src/attocode/tui/widgets/dashboard/live_dashboard.py +194 -0
- attocode-0.1.8/src/attocode/tui/widgets/dashboard/session_browser.py +263 -0
- attocode-0.1.8/src/attocode/tui/widgets/dashboard/session_detail.py +402 -0
- attocode-0.1.8/src/attocode/tui/widgets/dashboard/swarm_activity_pane.py +124 -0
- attocode-0.1.8/src/attocode/tui/widgets/dashboard/viz/__init__.py +24 -0
- attocode-0.1.8/src/attocode/tui/widgets/dashboard/viz/ascii_table.py +92 -0
- attocode-0.1.8/src/attocode/tui/widgets/dashboard/viz/bar_chart.py +94 -0
- attocode-0.1.8/src/attocode/tui/widgets/dashboard/viz/percent_bar.py +82 -0
- attocode-0.1.8/src/attocode/tui/widgets/dashboard/viz/severity_badge.py +59 -0
- attocode-0.1.8/src/attocode/tui/widgets/dashboard/viz/sparkline.py +70 -0
- attocode-0.1.8/src/attocode/tui/widgets/dashboard/viz/tree_renderer.py +127 -0
- attocode-0.1.8/src/attocode/tui/widgets/debug_panel.py +226 -0
- attocode-0.1.8/src/attocode/tui/widgets/diagnostics_panel.py +175 -0
- attocode-0.1.8/src/attocode/tui/widgets/diff_view.py +365 -0
- attocode-0.1.8/src/attocode/tui/widgets/error_detail_panel.py +150 -0
- attocode-0.1.8/src/attocode/tui/widgets/file_change_summary.py +142 -0
- attocode-0.1.8/src/attocode/tui/widgets/input_area.py +152 -0
- attocode-0.1.8/src/attocode/tui/widgets/mascot.py +102 -0
- attocode-0.1.8/src/attocode/tui/widgets/message_log.py +82 -0
- attocode-0.1.8/src/attocode/tui/widgets/metrics_table.py +52 -0
- attocode-0.1.8/src/attocode/tui/widgets/plan_panel.py +77 -0
- attocode-0.1.8/src/attocode/tui/widgets/side_by_side_diff.py +165 -0
- attocode-0.1.8/src/attocode/tui/widgets/status_bar.py +342 -0
- attocode-0.1.8/src/attocode/tui/widgets/streaming_buffer.py +80 -0
- attocode-0.1.8/src/attocode/tui/widgets/swarm/__init__.py +42 -0
- attocode-0.1.8/src/attocode/tui/widgets/swarm/agent_grid.py +275 -0
- attocode-0.1.8/src/attocode/tui/widgets/swarm/ast_blackboard_pane.py +265 -0
- attocode-0.1.8/src/attocode/tui/widgets/swarm/dag_view.py +222 -0
- attocode-0.1.8/src/attocode/tui/widgets/swarm/decisions_pane.py +174 -0
- attocode-0.1.8/src/attocode/tui/widgets/swarm/detail_inspector.py +200 -0
- attocode-0.1.8/src/attocode/tui/widgets/swarm/event_timeline.py +181 -0
- attocode-0.1.8/src/attocode/tui/widgets/swarm/file_activity_map.py +80 -0
- attocode-0.1.8/src/attocode/tui/widgets/swarm/files_pane.py +174 -0
- attocode-0.1.8/src/attocode/tui/widgets/swarm/messages_log.py +94 -0
- attocode-0.1.8/src/attocode/tui/widgets/swarm/model_health_pane.py +140 -0
- attocode-0.1.8/src/attocode/tui/widgets/swarm/overview_pane.py +156 -0
- attocode-0.1.8/src/attocode/tui/widgets/swarm/quality_pane.py +203 -0
- attocode-0.1.8/src/attocode/tui/widgets/swarm/task_board.py +320 -0
- attocode-0.1.8/src/attocode/tui/widgets/swarm/tasks_pane.py +237 -0
- attocode-0.1.8/src/attocode/tui/widgets/swarm/workers_pane.py +280 -0
- attocode-0.1.8/src/attocode/tui/widgets/swarm_panel.py +153 -0
- attocode-0.1.8/src/attocode/tui/widgets/tasks_panel.py +82 -0
- attocode-0.1.8/src/attocode/tui/widgets/thinking_panel.py +67 -0
- attocode-0.1.8/src/attocode/tui/widgets/token_sparkline.py +25 -0
- attocode-0.1.8/src/attocode/tui/widgets/tool_calls.py +312 -0
- attocode-0.1.8/src/attocode/tui/widgets/transparency_panel.py +113 -0
- attocode-0.1.8/src/attocode/tui/widgets/welcome_banner.py +42 -0
- attocode-0.1.8/src/attocode/types/__init__.py +96 -0
- attocode-0.1.8/src/attocode/types/agent.py +181 -0
- attocode-0.1.8/src/attocode/types/budget.py +89 -0
- attocode-0.1.8/src/attocode/types/events.py +254 -0
- attocode-0.1.8/src/attocode/types/messages.py +210 -0
- attocode-0.1.8/src/attocode_core/__init__.py +1 -0
- attocode-0.1.8/src/attocode_core/ast_index/__init__.py +1 -0
- attocode-0.1.8/src/attocode_core/ast_index/indexer.py +109 -0
- attocode-0.1.8/src/attocode_core/dependency_graph/__init__.py +1 -0
- attocode-0.1.8/src/attocode_core/dependency_graph/graph.py +34 -0
- attocode-0.1.8/src/attocode_core/py.typed +0 -0
- attocode-0.1.8/src/attoswarm/__init__.py +7 -0
- attocode-0.1.8/src/attoswarm/__main__.py +3 -0
- attocode-0.1.8/src/attoswarm/adapters/__init__.py +1 -0
- attocode-0.1.8/src/attoswarm/adapters/aider.py +10 -0
- attocode-0.1.8/src/attoswarm/adapters/attocode.py +10 -0
- attocode-0.1.8/src/attoswarm/adapters/base.py +293 -0
- attocode-0.1.8/src/attoswarm/adapters/claude.py +10 -0
- attocode-0.1.8/src/attoswarm/adapters/codex.py +10 -0
- attocode-0.1.8/src/attoswarm/adapters/registry.py +22 -0
- attocode-0.1.8/src/attoswarm/cli.py +918 -0
- attocode-0.1.8/src/attoswarm/config/__init__.py +1 -0
- attocode-0.1.8/src/attoswarm/config/loader.py +74 -0
- attocode-0.1.8/src/attoswarm/config/schema.py +96 -0
- attocode-0.1.8/src/attoswarm/coordinator/__init__.py +1 -0
- attocode-0.1.8/src/attoswarm/coordinator/aot_graph.py +270 -0
- attocode-0.1.8/src/attoswarm/coordinator/budget.py +33 -0
- attocode-0.1.8/src/attoswarm/coordinator/event_bus.py +76 -0
- attocode-0.1.8/src/attoswarm/coordinator/loop.py +1435 -0
- attocode-0.1.8/src/attoswarm/coordinator/merge_queue.py +70 -0
- attocode-0.1.8/src/attoswarm/coordinator/orchestrator.py +505 -0
- attocode-0.1.8/src/attoswarm/coordinator/scheduler.py +67 -0
- attocode-0.1.8/src/attoswarm/coordinator/state_writer.py +101 -0
- attocode-0.1.8/src/attoswarm/coordinator/subagent_manager.py +243 -0
- attocode-0.1.8/src/attoswarm/coordinator/watchdog.py +36 -0
- attocode-0.1.8/src/attoswarm/protocol/__init__.py +1 -0
- attocode-0.1.8/src/attoswarm/protocol/io.py +38 -0
- attocode-0.1.8/src/attoswarm/protocol/locks.py +19 -0
- attocode-0.1.8/src/attoswarm/protocol/models.py +198 -0
- attocode-0.1.8/src/attoswarm/protocol/schemas/agent.inbox.schema.json +12 -0
- attocode-0.1.8/src/attoswarm/protocol/schemas/agent.outbox.schema.json +12 -0
- attocode-0.1.8/src/attoswarm/protocol/schemas/swarm.manifest.schema.json +15 -0
- attocode-0.1.8/src/attoswarm/protocol/schemas/swarm.state.schema.json +14 -0
- attocode-0.1.8/src/attoswarm/py.typed +0 -0
- attocode-0.1.8/src/attoswarm/replay/__init__.py +1 -0
- attocode-0.1.8/src/attoswarm/replay/attocode_bridge.py +20 -0
- attocode-0.1.8/src/attoswarm/tui/__init__.py +1 -0
- attocode-0.1.8/src/attoswarm/tui/app.py +370 -0
- attocode-0.1.8/src/attoswarm/tui/stores.py +545 -0
- attocode-0.1.8/src/attoswarm/tui/styles/swarm.tcss +252 -0
- attocode-0.1.8/src/attoswarm/workspace/__init__.py +1 -0
- attocode-0.1.8/src/attoswarm/workspace/file_ledger.py +373 -0
- attocode-0.1.8/src/attoswarm/workspace/reconciler.py +267 -0
- attocode-0.1.8/src/attoswarm/workspace/worktree.py +115 -0
- attocode-0.1.8/tests/__init__.py +0 -0
- attocode-0.1.8/tests/conftest.py +92 -0
- attocode-0.1.8/tests/helpers/__init__.py +8 -0
- attocode-0.1.8/tests/helpers/fixtures.py +295 -0
- attocode-0.1.8/tests/helpers/trace_verifier.py +342 -0
- attocode-0.1.8/tests/integration/__init__.py +0 -0
- attocode-0.1.8/tests/integration/test_attoswarm_live_smoke.py +92 -0
- attocode-0.1.8/tests/integration/test_attoswarm_smoke.py +143 -0
- attocode-0.1.8/tests/integration/test_single_turn.py +211 -0
- attocode-0.1.8/tests/snapshots/__init__.py +0 -0
- attocode-0.1.8/tests/unit/__init__.py +0 -0
- attocode-0.1.8/tests/unit/_write_helper.py +0 -0
- attocode-0.1.8/tests/unit/attocode_core/test_indexer.py +15 -0
- attocode-0.1.8/tests/unit/attoswarm/test_adapters_parser.py +17 -0
- attocode-0.1.8/tests/unit/attoswarm/test_aot_graph.py +174 -0
- attocode-0.1.8/tests/unit/attoswarm/test_ast_service.py +187 -0
- attocode-0.1.8/tests/unit/attoswarm/test_budget.py +13 -0
- attocode-0.1.8/tests/unit/attoswarm/test_cli.py +65 -0
- attocode-0.1.8/tests/unit/attoswarm/test_default_command.py +363 -0
- attocode-0.1.8/tests/unit/attoswarm/test_event_bus.py +56 -0
- attocode-0.1.8/tests/unit/attoswarm/test_file_ledger.py +115 -0
- attocode-0.1.8/tests/unit/attoswarm/test_merge_queue.py +12 -0
- attocode-0.1.8/tests/unit/attoswarm/test_reconciler.py +123 -0
- attocode-0.1.8/tests/unit/attoswarm/test_resume.py +37 -0
- attocode-0.1.8/tests/unit/attoswarm/test_scheduler.py +379 -0
- attocode-0.1.8/tests/unit/attoswarm/test_spawn_log_touch.py +49 -0
- attocode-0.1.8/tests/unit/attoswarm/test_stores.py +313 -0
- attocode-0.1.8/tests/unit/attoswarm/test_worktree.py +224 -0
- attocode-0.1.8/tests/unit/core/__init__.py +0 -0
- attocode-0.1.8/tests/unit/core/test_agent.py +337 -0
- attocode-0.1.8/tests/unit/core/test_agent_state_machine.py +786 -0
- attocode-0.1.8/tests/unit/core/test_completion.py +127 -0
- attocode-0.1.8/tests/unit/core/test_context.py +141 -0
- attocode-0.1.8/tests/unit/core/test_loop.py +290 -0
- attocode-0.1.8/tests/unit/core/test_response_handler.py +194 -0
- attocode-0.1.8/tests/unit/core/test_subagent_spawner.py +395 -0
- attocode-0.1.8/tests/unit/core/test_tool_executor.py +171 -0
- attocode-0.1.8/tests/unit/integrations/__init__.py +0 -0
- attocode-0.1.8/tests/unit/integrations/agents/__init__.py +0 -0
- attocode-0.1.8/tests/unit/integrations/agents/test_async_subagent.py +146 -0
- attocode-0.1.8/tests/unit/integrations/agents/test_blackboard.py +964 -0
- attocode-0.1.8/tests/unit/integrations/agents/test_delegation.py +653 -0
- attocode-0.1.8/tests/unit/integrations/budget/__init__.py +0 -0
- attocode-0.1.8/tests/unit/integrations/budget/test_budget_pool.py +622 -0
- attocode-0.1.8/tests/unit/integrations/budget/test_cancellation.py +86 -0
- attocode-0.1.8/tests/unit/integrations/budget/test_dynamic_budget.py +640 -0
- attocode-0.1.8/tests/unit/integrations/budget/test_economics.py +161 -0
- attocode-0.1.8/tests/unit/integrations/budget/test_loop_detector.py +79 -0
- attocode-0.1.8/tests/unit/integrations/budget/test_phase_tracker.py +78 -0
- attocode-0.1.8/tests/unit/integrations/budget/test_resources.py +93 -0
- attocode-0.1.8/tests/unit/integrations/context/__init__.py +0 -0
- attocode-0.1.8/tests/unit/integrations/context/test_auto_compaction.py +76 -0
- attocode-0.1.8/tests/unit/integrations/context/test_code_analyzer.py +428 -0
- attocode-0.1.8/tests/unit/integrations/context/test_codebase_ast.py +532 -0
- attocode-0.1.8/tests/unit/integrations/context/test_codebase_context.py +580 -0
- attocode-0.1.8/tests/unit/integrations/context/test_compaction.py +96 -0
- attocode-0.1.8/tests/unit/integrations/context/test_context_engineering.py +92 -0
- attocode-0.1.8/tests/unit/integrations/context/test_semantic_cache.py +148 -0
- attocode-0.1.8/tests/unit/integrations/mcp/__init__.py +0 -0
- attocode-0.1.8/tests/unit/integrations/mcp/test_client_manager.py +813 -0
- attocode-0.1.8/tests/unit/integrations/mcp/test_config.py +411 -0
- attocode-0.1.8/tests/unit/integrations/mcp/test_tool_validator.py +337 -0
- attocode-0.1.8/tests/unit/integrations/persistence/__init__.py +0 -0
- attocode-0.1.8/tests/unit/integrations/persistence/test_store.py +145 -0
- attocode-0.1.8/tests/unit/integrations/persistence/test_store_extended.py +634 -0
- attocode-0.1.8/tests/unit/integrations/quality/__init__.py +0 -0
- attocode-0.1.8/tests/unit/integrations/quality/test_auto_checkpoint.py +203 -0
- attocode-0.1.8/tests/unit/integrations/quality/test_dead_letter_queue.py +379 -0
- attocode-0.1.8/tests/unit/integrations/quality/test_health_check.py +435 -0
- attocode-0.1.8/tests/unit/integrations/recording/__init__.py +0 -0
- attocode-0.1.8/tests/unit/integrations/recording/test_graph_types.py +802 -0
- attocode-0.1.8/tests/unit/integrations/recording/test_playback.py +754 -0
- attocode-0.1.8/tests/unit/integrations/recording/test_recording.py +1009 -0
- attocode-0.1.8/tests/unit/integrations/safety/__init__.py +0 -0
- attocode-0.1.8/tests/unit/integrations/safety/test_bash_policy.py +56 -0
- attocode-0.1.8/tests/unit/integrations/safety/test_docker.py +284 -0
- attocode-0.1.8/tests/unit/integrations/safety/test_edit_validator.py +120 -0
- attocode-0.1.8/tests/unit/integrations/safety/test_landlock.py +338 -0
- attocode-0.1.8/tests/unit/integrations/safety/test_policy_engine.py +64 -0
- attocode-0.1.8/tests/unit/integrations/safety/test_sandbox.py +74 -0
- attocode-0.1.8/tests/unit/integrations/safety/test_seatbelt.py +310 -0
- attocode-0.1.8/tests/unit/integrations/skills/__init__.py +0 -0
- attocode-0.1.8/tests/unit/integrations/skills/test_dependency_graph.py +428 -0
- attocode-0.1.8/tests/unit/integrations/skills/test_state.py +328 -0
- attocode-0.1.8/tests/unit/integrations/swarm/__init__.py +0 -0
- attocode-0.1.8/tests/unit/integrations/swarm/test_cc_spawner.py +457 -0
- attocode-0.1.8/tests/unit/integrations/swarm/test_critic.py +265 -0
- attocode-0.1.8/tests/unit/integrations/swarm/test_roles.py +243 -0
- attocode-0.1.8/tests/unit/integrations/swarm/test_swarm_new.py +277 -0
- attocode-0.1.8/tests/unit/integrations/swarm/test_worktree_manager.py +321 -0
- attocode-0.1.8/tests/unit/integrations/tasks/__init__.py +0 -0
- attocode-0.1.8/tests/unit/integrations/tasks/test_decomposer.py +237 -0
- attocode-0.1.8/tests/unit/integrations/tasks/test_interactive_planning.py +926 -0
- attocode-0.1.8/tests/unit/integrations/tasks/test_task_manager.py +445 -0
- attocode-0.1.8/tests/unit/integrations/tasks/test_verification_gate.py +1296 -0
- attocode-0.1.8/tests/unit/integrations/tasks/test_work_log.py +279 -0
- attocode-0.1.8/tests/unit/integrations/test_agents.py +885 -0
- attocode-0.1.8/tests/unit/integrations/test_mcp.py +476 -0
- attocode-0.1.8/tests/unit/integrations/test_message_bus.py +154 -0
- attocode-0.1.8/tests/unit/integrations/test_quality.py +1435 -0
- attocode-0.1.8/tests/unit/integrations/test_streaming_lsp.py +2066 -0
- attocode-0.1.8/tests/unit/integrations/test_swarm_core.py +1894 -0
- attocode-0.1.8/tests/unit/integrations/test_swarm_infra.py +2524 -0
- attocode-0.1.8/tests/unit/integrations/test_swarm_types.py +2169 -0
- attocode-0.1.8/tests/unit/integrations/utilities/__init__.py +0 -0
- attocode-0.1.8/tests/unit/integrations/utilities/test_diff_utils.py +60 -0
- attocode-0.1.8/tests/unit/integrations/utilities/test_hooks.py +76 -0
- attocode-0.1.8/tests/unit/integrations/utilities/test_ignore.py +53 -0
- attocode-0.1.8/tests/unit/integrations/utilities/test_mode_manager.py +295 -0
- attocode-0.1.8/tests/unit/integrations/utilities/test_new_modules.py +608 -0
- attocode-0.1.8/tests/unit/integrations/utilities/test_resilience.py +420 -0
- attocode-0.1.8/tests/unit/integrations/utilities/test_rules.py +45 -0
- attocode-0.1.8/tests/unit/integrations/utilities/test_thread_manager.py +727 -0
- attocode-0.1.8/tests/unit/integrations/utilities/test_token_estimate.py +63 -0
- attocode-0.1.8/tests/unit/integrations/utilities/test_undo.py +340 -0
- attocode-0.1.8/tests/unit/providers/__init__.py +0 -0
- attocode-0.1.8/tests/unit/providers/test_anthropic.py +288 -0
- attocode-0.1.8/tests/unit/providers/test_azure.py +285 -0
- attocode-0.1.8/tests/unit/providers/test_fallback_chain.py +438 -0
- attocode-0.1.8/tests/unit/providers/test_mock.py +152 -0
- attocode-0.1.8/tests/unit/providers/test_model_cache.py +302 -0
- attocode-0.1.8/tests/unit/providers/test_openai.py +308 -0
- attocode-0.1.8/tests/unit/providers/test_openrouter.py +223 -0
- attocode-0.1.8/tests/unit/providers/test_registry.py +109 -0
- attocode-0.1.8/tests/unit/providers/test_resilient_provider.py +325 -0
- attocode-0.1.8/tests/unit/test_adapters.py +216 -0
- attocode-0.1.8/tests/unit/test_cli.py +179 -0
- attocode-0.1.8/tests/unit/test_code_intel.py +1191 -0
- attocode-0.1.8/tests/unit/test_defaults.py +145 -0
- attocode-0.1.8/tests/unit/test_errors.py +175 -0
- attocode-0.1.8/tests/unit/test_shared.py +271 -0
- attocode-0.1.8/tests/unit/test_trace_verifier.py +354 -0
- attocode-0.1.8/tests/unit/test_tricks.py +1203 -0
- attocode-0.1.8/tests/unit/test_types.py +399 -0
- attocode-0.1.8/tests/unit/tools/__init__.py +0 -0
- attocode-0.1.8/tests/unit/tools/test_bash.py +66 -0
- attocode-0.1.8/tests/unit/tools/test_file_ops.py +232 -0
- attocode-0.1.8/tests/unit/tools/test_registry.py +224 -0
- attocode-0.1.8/tests/unit/tools/test_search.py +111 -0
- attocode-0.1.8/tests/unit/tracing/__init__.py +0 -0
- attocode-0.1.8/tests/unit/tracing/test_analysis.py +377 -0
- attocode-0.1.8/tests/unit/tricks/__init__.py +0 -0
- attocode-0.1.8/tests/unit/tricks/test_failure_evidence.py +360 -0
- attocode-0.1.8/tests/unit/tricks/test_json_utils.py +152 -0
- attocode-0.1.8/tests/unit/tricks/test_kv_cache.py +286 -0
- attocode-0.1.8/tests/unit/tricks/test_recitation.py +296 -0
- attocode-0.1.8/tests/unit/tricks/test_reversible_compaction.py +320 -0
- attocode-0.1.8/tests/unit/tui/__init__.py +0 -0
- attocode-0.1.8/tests/unit/tui/__snapshots__/test_attoswarm_snapshots/test_snapshot_completed.raw +192 -0
- attocode-0.1.8/tests/unit/tui/__snapshots__/test_attoswarm_snapshots/test_snapshot_empty_init.raw +186 -0
- attocode-0.1.8/tests/unit/tui/__snapshots__/test_attoswarm_snapshots/test_snapshot_executing.raw +193 -0
- attocode-0.1.8/tests/unit/tui/__snapshots__/test_attoswarm_snapshots/test_snapshot_failed_with_errors.raw +193 -0
- attocode-0.1.8/tests/unit/tui/__snapshots__/test_attoswarm_snapshots/test_snapshot_many_agents.raw +234 -0
- attocode-0.1.8/tests/unit/tui/test_app.py +145 -0
- attocode-0.1.8/tests/unit/tui/test_attoswarm_snapshots.py +255 -0
- attocode-0.1.8/tests/unit/tui/test_bridges.py +153 -0
- attocode-0.1.8/tests/unit/tui/test_dashboard_panes.py +144 -0
- attocode-0.1.8/tests/unit/tui/test_dialogs.py +26 -0
- attocode-0.1.8/tests/unit/tui/test_events.py +83 -0
- attocode-0.1.8/tests/unit/tui/test_live_dashboard.py +137 -0
- attocode-0.1.8/tests/unit/tui/test_new_widgets.py +160 -0
- attocode-0.1.8/tests/unit/tui/test_swarm_panel.py +271 -0
- attocode-0.1.8/tests/unit/tui/test_theme.py +58 -0
- attocode-0.1.8/tests/unit/tui/test_viz_widgets.py +265 -0
- attocode-0.1.8/tests/unit/tui/test_widgets.py +95 -0
- attocode-0.1.8/uv.lock +2035 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mcpServers": {
|
|
3
|
+
"context7": {
|
|
4
|
+
"command": "npx",
|
|
5
|
+
"args": [
|
|
6
|
+
"-y",
|
|
7
|
+
"@upstash/context7-mcp@latest"
|
|
8
|
+
],
|
|
9
|
+
"env": {}
|
|
10
|
+
},
|
|
11
|
+
"github": {
|
|
12
|
+
"command": "npx",
|
|
13
|
+
"args": [
|
|
14
|
+
"-y",
|
|
15
|
+
"@modelcontextprotocol/server-github"
|
|
16
|
+
],
|
|
17
|
+
"env": {
|
|
18
|
+
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"servers": {
|
|
3
|
+
"context7": {
|
|
4
|
+
"command": "npx",
|
|
5
|
+
"args": [
|
|
6
|
+
"-y",
|
|
7
|
+
"@upstash/context7-mcp@latest"
|
|
8
|
+
],
|
|
9
|
+
"env": {}
|
|
10
|
+
},
|
|
11
|
+
"github": {
|
|
12
|
+
"command": "npx",
|
|
13
|
+
"args": [
|
|
14
|
+
"-y",
|
|
15
|
+
"@modelcontextprotocol/server-github"
|
|
16
|
+
],
|
|
17
|
+
"env": {
|
|
18
|
+
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# /swarm-verify — Post-Run Trace Verification
|
|
2
|
+
|
|
3
|
+
Verify the integrity of a hybrid swarm run by analysing its trace data.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
/swarm-verify <run_dir>
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Where `<run_dir>` is the path to a swarm run directory (e.g. `.agent/hybrid-swarm/run_abc123`).
|
|
12
|
+
|
|
13
|
+
## Verification Procedure
|
|
14
|
+
|
|
15
|
+
When invoked, follow these steps exactly:
|
|
16
|
+
|
|
17
|
+
### Step 1 — Load Trace Data
|
|
18
|
+
|
|
19
|
+
```python
|
|
20
|
+
from tests.helpers.trace_verifier import TraceVerifier
|
|
21
|
+
|
|
22
|
+
v = TraceVerifier("<run_dir>")
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Report file counts:
|
|
26
|
+
- Number of events in `swarm.events.jsonl`
|
|
27
|
+
- Number of task files in `tasks/`
|
|
28
|
+
- Current phase from `swarm.state.json`
|
|
29
|
+
|
|
30
|
+
### Step 2 — Check for Poisoned Prompts
|
|
31
|
+
|
|
32
|
+
```python
|
|
33
|
+
result = v.assert_no_poisoned_prompts()
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Poisoned markers: `[TASK_DONE]`, `[TASK_FAILED]`, `[HEARTBEAT]`, `[CONTROL]`, `[EXIT]`
|
|
37
|
+
|
|
38
|
+
These should never appear in raw `agent.event` messages — they indicate the agent is echoing or injecting control signals.
|
|
39
|
+
|
|
40
|
+
### Step 3 — Validate Task State Machine
|
|
41
|
+
|
|
42
|
+
```python
|
|
43
|
+
result = v.assert_correct_task_transitions()
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Every `task.transition` event must follow the canonical FSM defined in `attoswarm.coordinator.loop.TRANSITIONS`. Report any illegal transitions.
|
|
47
|
+
|
|
48
|
+
### Step 4 — Check Terminal Events
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
result = v.assert_all_tasks_have_terminal_events()
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Every task that reached `done` should have matching `agent.task.exit` and `agent.task.classified` events.
|
|
55
|
+
|
|
56
|
+
### Step 5 — Check for Stuck Agents
|
|
57
|
+
|
|
58
|
+
```python
|
|
59
|
+
result = v.assert_no_stuck_agents()
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
No heartbeat gap > 30s between consecutive `agent.event` entries for the same agent.
|
|
63
|
+
|
|
64
|
+
### Step 6 — Verify Budget Limits
|
|
65
|
+
|
|
66
|
+
```python
|
|
67
|
+
result = v.assert_budget_within_limits()
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
`tokens_used <= tokens_max` and `cost_used <= cost_max`.
|
|
71
|
+
|
|
72
|
+
### Step 7 — Check Exit Code Propagation
|
|
73
|
+
|
|
74
|
+
```python
|
|
75
|
+
result = v.assert_exit_codes_propagated()
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
No tasks left in `running` status when the assigned agent has a non-null exit code.
|
|
79
|
+
|
|
80
|
+
### Step 8 — Verify Coding Task Output
|
|
81
|
+
|
|
82
|
+
```python
|
|
83
|
+
result = v.assert_coding_tasks_produced_output()
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Implement/test/integrate tasks that reached `done` should show evidence of file operations.
|
|
87
|
+
|
|
88
|
+
### Step 9 — Run Screenshot Comparison (Optional)
|
|
89
|
+
|
|
90
|
+
If baselines exist in `tests/snapshots/test_attoswarm_snapshots/`, optionally run:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
.venv/bin/python -m pytest tests/unit/tui/test_attoswarm_snapshots.py -v
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Step 10 — Print Summary
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
print(v.summary())
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Format as a table showing each check with PASS/FAIL status and details.
|
|
103
|
+
|
|
104
|
+
## Quick Run-All
|
|
105
|
+
|
|
106
|
+
For a one-shot summary:
|
|
107
|
+
|
|
108
|
+
```python
|
|
109
|
+
from tests.helpers.trace_verifier import TraceVerifier
|
|
110
|
+
print(TraceVerifier("<run_dir>").summary())
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Exit Criteria
|
|
114
|
+
|
|
115
|
+
- All 7 checks pass: run is verified clean
|
|
116
|
+
- Any check fails: report violations and suggest remediation
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
run:
|
|
3
|
+
name: hybrid-demo
|
|
4
|
+
working_dir: .
|
|
5
|
+
run_dir: .agent/hybrid-swarm
|
|
6
|
+
poll_interval_ms: 250
|
|
7
|
+
max_runtime_seconds: 180
|
|
8
|
+
|
|
9
|
+
roles:
|
|
10
|
+
- role_id: orchestrator
|
|
11
|
+
role_type: orchestrator
|
|
12
|
+
backend: claude
|
|
13
|
+
model: claude-opus-4-6
|
|
14
|
+
count: 1
|
|
15
|
+
write_access: false
|
|
16
|
+
workspace_mode: shared_ro
|
|
17
|
+
task_kinds: [analysis, planning]
|
|
18
|
+
|
|
19
|
+
- role_id: implementer
|
|
20
|
+
role_type: worker
|
|
21
|
+
backend: codex
|
|
22
|
+
model: o3
|
|
23
|
+
count: 2
|
|
24
|
+
write_access: true
|
|
25
|
+
workspace_mode: worktree
|
|
26
|
+
task_kinds: [implement, refactor, test]
|
|
27
|
+
|
|
28
|
+
- role_id: judge
|
|
29
|
+
role_type: judge
|
|
30
|
+
backend: aider
|
|
31
|
+
model: sonnet
|
|
32
|
+
count: 2
|
|
33
|
+
write_access: false
|
|
34
|
+
workspace_mode: shared_ro
|
|
35
|
+
task_kinds: [review, judge]
|
|
36
|
+
|
|
37
|
+
- role_id: researcher
|
|
38
|
+
role_type: researcher
|
|
39
|
+
backend: attocode
|
|
40
|
+
model: claude-sonnet-4-20250514
|
|
41
|
+
count: 1
|
|
42
|
+
write_access: false
|
|
43
|
+
workspace_mode: shared_ro
|
|
44
|
+
task_kinds: [research, analysis]
|
|
45
|
+
|
|
46
|
+
- role_id: merger
|
|
47
|
+
role_type: merger
|
|
48
|
+
backend: codex
|
|
49
|
+
model: o3
|
|
50
|
+
count: 1
|
|
51
|
+
write_access: true
|
|
52
|
+
workspace_mode: worktree
|
|
53
|
+
task_kinds: [merge, synthesize]
|
|
54
|
+
|
|
55
|
+
budget:
|
|
56
|
+
max_tokens: 6000000
|
|
57
|
+
max_cost_usd: 30
|
|
58
|
+
reserve_ratio: 0.15
|
|
59
|
+
chars_per_token_fallback: 4.0
|
|
60
|
+
|
|
61
|
+
merge:
|
|
62
|
+
authority_role: merger
|
|
63
|
+
judge_roles: [judge]
|
|
64
|
+
quality_threshold: 0.75
|
|
65
|
+
judge_policy: quorum
|
|
66
|
+
auto_apply_non_conflicting: true
|
|
67
|
+
|
|
68
|
+
watchdog:
|
|
69
|
+
heartbeat_timeout_seconds: 45
|
|
70
|
+
|
|
71
|
+
retries:
|
|
72
|
+
max_task_attempts: 2
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Attocode Swarm Configuration -- 2 Claude Workers
|
|
2
|
+
# Copy to .attocode/swarm.yaml to use
|
|
3
|
+
#
|
|
4
|
+
# See docs/swarm-guide.md for a full walkthrough.
|
|
5
|
+
|
|
6
|
+
# Orchestrator model (coordinates decomposition, wave review, synthesis)
|
|
7
|
+
models:
|
|
8
|
+
orchestrator: anthropic/claude-sonnet-4-20250514
|
|
9
|
+
|
|
10
|
+
# Worker definitions
|
|
11
|
+
workers:
|
|
12
|
+
- name: coder
|
|
13
|
+
model: anthropic/claude-sonnet-4-20250514
|
|
14
|
+
capabilities: [code, test, refactor]
|
|
15
|
+
count: 1
|
|
16
|
+
|
|
17
|
+
- name: reviewer
|
|
18
|
+
model: anthropic/claude-sonnet-4-20250514
|
|
19
|
+
capabilities: [review, research]
|
|
20
|
+
count: 1
|
|
21
|
+
|
|
22
|
+
# Budget limits
|
|
23
|
+
budget:
|
|
24
|
+
totalTokens: 5000000 # 5M tokens across all workers + orchestrator
|
|
25
|
+
maxCost: 10.0 # Maximum spend in USD
|
|
26
|
+
maxConcurrency: 2 # Maximum workers running in parallel
|
|
27
|
+
|
|
28
|
+
# Quality gates (score each task output 1-5, reject below threshold)
|
|
29
|
+
quality:
|
|
30
|
+
enabled: true
|
|
31
|
+
# threshold: 3 # Minimum quality score (1-5)
|
|
32
|
+
|
|
33
|
+
# Feature flags
|
|
34
|
+
features:
|
|
35
|
+
planning: true # LLM-assisted task decomposition
|
|
36
|
+
verification: true # Run integration checks after all waves
|
|
37
|
+
|
|
38
|
+
# Retry settings
|
|
39
|
+
# retries:
|
|
40
|
+
# workerRetries: 2 # Max retries per task
|
|
41
|
+
# rateLimitRetries: 3 # Max retries on rate limit
|
|
42
|
+
# enableModelFailover: true
|