aru-code 0.59.0__tar.gz → 0.61.0__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.
- {aru_code-0.59.0/aru_code.egg-info → aru_code-0.61.0}/PKG-INFO +1 -1
- aru_code-0.61.0/aru/__init__.py +1 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/agents/base.py +60 -5
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/agents/planner.py +4 -3
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/auth.py +3 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/cli.py +18 -13
- aru_code-0.61.0/aru/codex_oauth.py +588 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/commands.py +118 -3
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/context.py +2 -2
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/history_blocks.py +66 -5
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/memory/extractor.py +2 -2
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/permissions.py +12 -4
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/providers.py +225 -1
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/runner.py +84 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/session.py +15 -1
- aru_code-0.61.0/aru/state.py +181 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/delegate.py +10 -1
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/file_ops.py +46 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/registry.py +12 -2
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/tasklist.py +17 -2
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/app.py +35 -43
- {aru_code-0.59.0 → aru_code-0.61.0/aru_code.egg-info}/PKG-INFO +1 -1
- {aru_code-0.59.0 → aru_code-0.61.0}/aru_code.egg-info/SOURCES.txt +5 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/pyproject.toml +1 -1
- aru_code-0.61.0/tests/test_codex_oauth.py +406 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_confabulation_regression.py +74 -13
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_connect_command.py +3 -1
- aru_code-0.61.0/tests/test_connect_oauth.py +387 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_runner_recovery.py +11 -1
- aru_code-0.61.0/tests/test_state_recent_models.py +239 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_slash_model.py +3 -3
- aru_code-0.59.0/aru/__init__.py +0 -1
- {aru_code-0.59.0 → aru_code-0.61.0}/LICENSE +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/README.md +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/_debug/__init__.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/_debug/analyze_trace.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/_debug/loop_tracer.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/agent_factory.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/agents/__init__.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/agents/catalog.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/cache_patch.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/checkpoints.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/config.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/display.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/doom_loop.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/events.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/format/__init__.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/format/manager.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/format/runner.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/lsp/__init__.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/lsp/client.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/lsp/manager.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/lsp/protocol.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/memory/__init__.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/memory/loader.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/memory/store.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/plugin_cache.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/plugins/__init__.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/plugins/custom_tools.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/plugins/hooks.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/plugins/manager.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/plugins/tool_api.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/runtime.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/select.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/sinks.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/streaming.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tool_policy.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/__init__.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/_diff.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/_shared.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/apply_patch.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/apply_patch_prompt.txt +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/ast_tools.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/codebase.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/delegate_prompt.txt +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/gitignore.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/lsp.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/mcp_client.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/memory_tool.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/plan_mode.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/ranker.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/search.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/shell.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/skill.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/web.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tools/worktree.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/__init__.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/log_bridge.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/notifications.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/sanitize.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/screens/__init__.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/screens/choice.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/screens/confirm.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/screens/keymap.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/screens/search.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/screens/session_picker.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/screens/text_input.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/sinks.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/slash_bridge.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/themes.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/ui.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/widgets/__init__.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/widgets/chat.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/widgets/completer.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/widgets/context_pane.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/widgets/file_link.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/widgets/header.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/widgets/inline_choice.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/widgets/loaded_pane.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/widgets/prompt_area.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/widgets/prompt_queue.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/widgets/status.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/widgets/subagent_panel.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/widgets/tasklist_panel.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/widgets/thinking.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/tui/widgets/tools.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru/ui.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru_code.egg-info/dependency_links.txt +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru_code.egg-info/entry_points.txt +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru_code.egg-info/requires.txt +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/aru_code.egg-info/top_level.txt +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/setup.cfg +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_agents_base.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_agents_md_coverage.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_apply_patch.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_async_tool_permission.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_auth_store.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_cache_patch_metrics.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_cache_patch_stop_reason.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_catalog.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_chat_scrollable.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_checkpoints.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_cli.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_cli_advanced.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_cli_base.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_cli_new.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_cli_session.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_cli_shell.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_codebase.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_config.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_context.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_context_pane.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_cwd_awareness.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_delegate.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_doom_loop.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_events_backward_compat.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_events_schema.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_fork_ctx_concurrency.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_format.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_gitignore.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_guardrails_scenarios.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_invoke_skill.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_invoked_skills.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_loaded_pane_path.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_lsp.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_lsp_rename.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_main.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_markdown_to_text.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_mcp_client.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_mcp_health.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_memory.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_memory_tool.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_microcompact.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_permission_timeout_suspension.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_permissions.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_plan_mode_refactor.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_plugin_cache.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_plugin_errors.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_plugin_hooks_v2.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_plugins.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_providers.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_ranker.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_reasoning.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_runner_interrupt.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_runtime.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_select.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_session_free_cost.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_skill_disallowed_tools.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_status_breakdown.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_status_cost.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_streaming_sink.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_subagent_tool_events.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tasklist.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_thread_tool_timeout.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tool_policy.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_truncation_marker.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_app_boot.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_bindings.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_bus_flow.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_chat.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_chat_adversarial.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_completer.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_completer_dynamic.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_connect_wiring.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_copy.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_error_display.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_file_link.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_input_behaviour.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_layer12_recovery.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_layer13_recovery.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_mention_expand.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_modals.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_mode_cycle.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_native_selection.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_permission_flow.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_plan_task_render.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_prompt_queue.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_shell_bang.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_sidebar_toggle.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_slash_bridge.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_snapshot_smoke.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_subagent_panel.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_theme.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_thinking_and_boot.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_tui_widgets_visual.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_ui_adapter.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_worktree.py +0 -0
- {aru_code-0.59.0 → aru_code-0.61.0}/tests/test_worktree_session_restore.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.61.0"
|
|
@@ -3,6 +3,33 @@
|
|
|
3
3
|
# Common rules shared across all agents (planner, executor, general).
|
|
4
4
|
# Each agent appends its role-specific instructions to this base.
|
|
5
5
|
BASE_INSTRUCTIONS = """\
|
|
6
|
+
## Autonomy and Persistence
|
|
7
|
+
|
|
8
|
+
Persist until the task is fully handled end-to-end within the current turn whenever feasible: \
|
|
9
|
+
do not stop at analysis or partial fixes; carry changes through implementation, verification, \
|
|
10
|
+
and a clear explanation of outcomes unless the user explicitly pauses or redirects you. \
|
|
11
|
+
Assume the user wants you to make code changes or run tools to solve the problem — \
|
|
12
|
+
it is bad to output your proposed solution in a message and stop; go ahead and actually \
|
|
13
|
+
implement the change. If you encounter challenges or blockers, attempt to resolve them yourself.
|
|
14
|
+
|
|
15
|
+
## Task execution
|
|
16
|
+
|
|
17
|
+
You are a coding agent. Please keep going until the query is completely resolved, before \
|
|
18
|
+
ending your turn and yielding back to the user. Only terminate your turn when you are sure \
|
|
19
|
+
that the problem is solved. Autonomously resolve the query to the best of your ability, \
|
|
20
|
+
using the tools available to you, before coming back to the user. Do NOT guess or make up \
|
|
21
|
+
an answer.
|
|
22
|
+
|
|
23
|
+
If a review, test run, plan step, or check surfaces concrete follow-up work that is clearly \
|
|
24
|
+
in scope, resolve it in the same turn. "More work I identified" is NOT a blocker — it is the \
|
|
25
|
+
next thing to do. The turn ends only when (a) the task is completely resolved and verified, \
|
|
26
|
+
(b) you hit a real blocker that needs information only the user has, or (c) the plan / task \
|
|
27
|
+
list is exhausted with every item terminal (completed / skipped / failed).
|
|
28
|
+
|
|
29
|
+
End your turn by reporting what you DID, not by previewing what should happen next. Phrases \
|
|
30
|
+
like "Próximo passo objetivo é…", "Next step is…", "I will now…" are forbidden as turn-end \
|
|
31
|
+
content — if you write them you must execute them in the same turn.
|
|
32
|
+
|
|
6
33
|
## Output rules — CRITICAL for token efficiency
|
|
7
34
|
|
|
8
35
|
Minimize output tokens. Your responses should be fewer than 4 lines unless the user \
|
|
@@ -144,7 +171,10 @@ You are a software engineer agent. Your job is to implement code changes.
|
|
|
144
171
|
You MUST call `create_task_list` as your FIRST action before any other tool call. \
|
|
145
172
|
Define 1-10 concrete subtasks for the current step. Then execute them in order, \
|
|
146
173
|
calling `update_task` to mark each as "completed" or "failed" as you go. \
|
|
147
|
-
When all subtasks
|
|
174
|
+
When all subtasks finish, output a brief summary of what changed. The turn ends \
|
|
175
|
+
only when the macro plan / multi-task workflow is also exhausted; if there are \
|
|
176
|
+
more plan steps or skill-driven tasks pending, continue executing them in the \
|
|
177
|
+
same turn — finishing a subtask list is not finishing the user's request.
|
|
148
178
|
|
|
149
179
|
## Subtask granularity — CRITICAL
|
|
150
180
|
Each subtask should touch at most **3-4 files**. If the step involves many files, \
|
|
@@ -212,8 +242,10 @@ response. Read-only fan-out has no write-path hazards.
|
|
|
212
242
|
When given a plan, execute it step by step. When given a direct task, figure out what needs to be done and do it.
|
|
213
243
|
**ZERO narration between tool calls.** No "Now I have enough context...", \
|
|
214
244
|
"Let me check...", "Now I understand...", "I need to...". Just call the next tool silently. \
|
|
215
|
-
|
|
216
|
-
|
|
245
|
+
Output text only when (a) the user's full request is resolved — including all macro plan \
|
|
246
|
+
steps and skill-driven tasks — or (b) you hit a blocker that needs user input. Completing \
|
|
247
|
+
a single subtask list or a single delegated task is NOT a turn boundary; continue with the \
|
|
248
|
+
next pending item in the same turn.
|
|
217
249
|
|
|
218
250
|
**Never retry failed shell commands with alternative syntax.** If a command fails, diagnose \
|
|
219
251
|
the error — do not try `cmd /c`, absolute paths, or other wrappers hoping one works.
|
|
@@ -352,6 +384,23 @@ those tools — finish the plan and call exit_plan_mode instead.
|
|
|
352
384
|
For simple tasks (1-2 file changes) where the user did NOT ask for a plan, \
|
|
353
385
|
execute directly without entering plan mode.
|
|
354
386
|
|
|
387
|
+
## Subtask lists vs the user's request — CRITICAL
|
|
388
|
+
|
|
389
|
+
`create_task_list` / `update_task` track subtasks for ONE unit of work — \
|
|
390
|
+
typically a single plan step, a single delegated task, or a single Task in a \
|
|
391
|
+
multi-task skill workflow (e.g. /subagent-driven-development). Finishing a \
|
|
392
|
+
subtask list is NOT finishing the user's request. When the `update_task` \
|
|
393
|
+
tool_result says "All subtasks finished. Output a brief summary", that summary \
|
|
394
|
+
is the summary of THAT unit only — not the whole turn.
|
|
395
|
+
|
|
396
|
+
Before yielding, check: is there a pending plan step? A skill workflow that \
|
|
397
|
+
declares more Tasks (Task 1..N)? A check that surfaced more work? If yes, \
|
|
398
|
+
keep going in the same turn — call `create_task_list` again for the next \
|
|
399
|
+
unit, or dispatch the next subagent, or call `update_plan_step` and move on. \
|
|
400
|
+
Phrases like "Se quiser, continuo direto para a Task N", "Próximo passo \
|
|
401
|
+
objetivo é…", "Next step is…" are forbidden as turn-end content. The turn \
|
|
402
|
+
ends only when the user's full request is exhausted.
|
|
403
|
+
|
|
355
404
|
## Plan execution
|
|
356
405
|
|
|
357
406
|
When you see a `<system-reminder>` listing PLAN ACTIVE steps, work through them in order:
|
|
@@ -384,8 +433,14 @@ Safe parallel-write pattern (only when ALL three hold):
|
|
|
384
433
|
2. The tasks touch disjoint file sets.
|
|
385
434
|
3. No task's output is another task's input inside the same batch.
|
|
386
435
|
|
|
387
|
-
If any of the three fails, run tasks sequentially — one
|
|
388
|
-
|
|
436
|
+
If any of the three fails, run tasks sequentially — dispatch one \
|
|
437
|
+
`delegate_task` per assistant response (so the next one only starts after the \
|
|
438
|
+
previous returns), but keep doing this within the same turn until the multi-task \
|
|
439
|
+
plan/skill workflow is exhausted. "Sequential" means "not in parallel"; it does \
|
|
440
|
+
NOT mean "one task per turn" — finishing a single delegated task and then \
|
|
441
|
+
yielding to the user defeats skills like /subagent-driven-development that \
|
|
442
|
+
dispatch a fresh implementer per task. After each subagent returns, immediately \
|
|
443
|
+
dispatch the next pending task in the same turn. Parallel fan-out \
|
|
389
444
|
for read-only research (explorer) follows the Delegation strategy rules above; \
|
|
390
445
|
it does not carry these write-path hazards.\
|
|
391
446
|
"""
|
|
@@ -42,9 +42,10 @@ async def review_plan(request: str, plan: str) -> str:
|
|
|
42
42
|
)
|
|
43
43
|
prompt = f"## User Request\n{request}\n\n## Generated Plan\n{plan}"
|
|
44
44
|
try:
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
from aru.runner import arun_text_only
|
|
46
|
+
content = await arun_text_only(reviewer, prompt)
|
|
47
|
+
if content and content.strip():
|
|
48
|
+
return content.strip()
|
|
48
49
|
except Exception:
|
|
49
50
|
pass
|
|
50
51
|
return plan
|
|
@@ -13,6 +13,9 @@ Schema (``info``) — a tagged union on ``type`` so future auth methods
|
|
|
13
13
|
"provider_type": "openai", "default_model": "...", # custom provider
|
|
14
14
|
"context_limit": 128000}
|
|
15
15
|
{"type": "local", "base_url": "http://..."} # keyless (e.g. Ollama)
|
|
16
|
+
{"type": "oauth", "refresh": "...", # ChatGPT (Codex) — wired
|
|
17
|
+
"access": "...", "expires": 1735689600000, # by /connect → "ChatGPT
|
|
18
|
+
"accountId": "acc-..."} # Pro/Plus (browser)"
|
|
16
19
|
|
|
17
20
|
Consumption lives in :func:`aru.providers.apply_stored_credentials`, which
|
|
18
21
|
layers these onto the in-memory provider registry at startup (and again
|
|
@@ -179,23 +179,27 @@ async def run_oneshot(prompt: str, print_only: bool = False, skip_permissions: b
|
|
|
179
179
|
from aru.tools.skill import _update_invoke_skill_docstring
|
|
180
180
|
_update_invoke_skill_docstring(config.skills)
|
|
181
181
|
session = Session()
|
|
182
|
+
# Same precedence as run_tui: aru.json default_model wins, otherwise
|
|
183
|
+
# fall back to the most-recent /connect or /model selection persisted
|
|
184
|
+
# in ~/.aru/state.json. Built-in default kicks in only when neither
|
|
185
|
+
# source provides a usable ref.
|
|
182
186
|
if config.default_model:
|
|
183
187
|
session.model_ref = config.default_model
|
|
188
|
+
else:
|
|
189
|
+
try:
|
|
190
|
+
from aru import state as _state
|
|
191
|
+
last = _state.get_last_model()
|
|
192
|
+
except Exception:
|
|
193
|
+
last = None
|
|
194
|
+
if last:
|
|
195
|
+
session.model_ref = last
|
|
184
196
|
|
|
185
197
|
ctx.session = session
|
|
186
198
|
ctx.model_id = session.model_id
|
|
187
199
|
small_ref = config.model_aliases.get("small") if config else None
|
|
188
200
|
if not small_ref:
|
|
189
|
-
from aru.providers import
|
|
190
|
-
|
|
191
|
-
_small_defaults = {
|
|
192
|
-
"anthropic": "anthropic/claude-haiku-4-5",
|
|
193
|
-
"openai": "openai/gpt-4o-mini",
|
|
194
|
-
"groq": "groq/llama-3.1-8b-instant",
|
|
195
|
-
"deepseek": "deepseek/deepseek-chat",
|
|
196
|
-
"ollama": "ollama/llama3.1",
|
|
197
|
-
}
|
|
198
|
-
small_ref = _small_defaults.get(provider_key, session.model_ref)
|
|
201
|
+
from aru.providers import default_small_model_ref
|
|
202
|
+
small_ref = default_small_model_ref(session.model_ref)
|
|
199
203
|
ctx.small_model_ref = small_ref
|
|
200
204
|
|
|
201
205
|
extra_instructions = config.get_extra_instructions()
|
|
@@ -213,10 +217,11 @@ async def run_oneshot(prompt: str, print_only: bool = False, skip_permissions: b
|
|
|
213
217
|
instructions=build_instructions("general", extra_instructions),
|
|
214
218
|
markdown=True,
|
|
215
219
|
)
|
|
216
|
-
|
|
217
|
-
|
|
220
|
+
from aru.runner import arun_text_only
|
|
221
|
+
content = await arun_text_only(agent, prompt)
|
|
222
|
+
if content:
|
|
218
223
|
# Print raw text to stdout for piping
|
|
219
|
-
print(
|
|
224
|
+
print(content)
|
|
220
225
|
else:
|
|
221
226
|
# Full mode with tools
|
|
222
227
|
from aru.runner import build_env_context
|