shipit-agent 2.0.7__tar.gz → 2.2.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.
- {shipit_agent-2.0.7/shipit_agent.egg-info → shipit_agent-2.2.0}/PKG-INFO +68 -1
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/README.md +67 -0
- shipit_agent-2.2.0/notebooks/openrouter_deep_test.ipynb +309 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/pyproject.toml +1 -1
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/agent.py +50 -5
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/agent_preparation.py +41 -6
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/async_runtime.py +69 -15
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/chat_session.py +7 -3
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/compaction.py +24 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/costs/tracker.py +6 -2
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deferral/__init__.py +2 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deferral/core.py +36 -10
- shipit_agent-2.2.0/shipit_agent/deferral/policy.py +64 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/hooks.py +26 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/llms/anthropic_adapter.py +41 -10
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/llms/base.py +25 -1
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/llms/litellm_adapter.py +9 -1
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/llms/openai_adapter.py +12 -0
- shipit_agent-2.2.0/shipit_agent/llms/usage.py +30 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/mcp.py +6 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/permissions.py +19 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/prompts/reminders.py +4 -2
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/routing/__init__.py +8 -2
- shipit_agent-2.2.0/shipit_agent/routing/step_router.py +248 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/runtime.py +85 -19
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/runtime_core.py +463 -28
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/runtime_narration.py +23 -1
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/skills/catalog.py +6 -1
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/skills/markdown.py +1 -1
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tool_healing.py +8 -1
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tool_runner.py +37 -3
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/base.py +31 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/helpers.py +18 -6
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/tool_search/prompt.py +3 -2
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/tool_search/tool_search_tool.py +52 -23
- {shipit_agent-2.0.7 → shipit_agent-2.2.0/shipit_agent.egg-info}/PKG-INFO +68 -1
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent.egg-info/SOURCES.txt +20 -0
- shipit_agent-2.2.0/tests/test_anthropic_stream_stop.py +149 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_bedrock_token.py +12 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_codemode_agent.py +4 -2
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_compaction_calibrated.py +17 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_decision_narration.py +26 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_deferred_tools.py +136 -0
- shipit_agent-2.2.0/tests/test_discovery_policy.py +146 -0
- shipit_agent-2.2.0/tests/test_duplicate_withholds_tool.py +109 -0
- shipit_agent-2.2.0/tests/test_forced_text_loop.py +66 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_gemma_bedrock.py +10 -0
- shipit_agent-2.2.0/tests/test_heal_json_answer.py +34 -0
- shipit_agent-2.2.0/tests/test_large_discovery_http.py +131 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_mcp_resilience.py +18 -1
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_mcp_robustness.py +23 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_native_structured_output.py +15 -6
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_plugins.py +73 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_power_features.py +151 -0
- shipit_agent-2.2.0/tests/test_progressive_agent.py +147 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_prompt_caching.py +2 -2
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_provider_runtime_contracts.py +106 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_reminders.py +24 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_retry_backoff_timeout.py +10 -1
- shipit_agent-2.2.0/tests/test_session_budget.py +119 -0
- shipit_agent-2.2.0/tests/test_skill_efficiency_boundaries.py +91 -0
- shipit_agent-2.2.0/tests/test_step_router.py +236 -0
- shipit_agent-2.2.0/tests/test_step_router_agent.py +153 -0
- shipit_agent-2.2.0/tests/test_stop_hooks.py +101 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_token_counting.py +7 -3
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_tool_healing.py +12 -0
- shipit_agent-2.2.0/tests/test_user_prompt_hooks.py +53 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_workspace.py +8 -2
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/.env.example +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/LICENSE.md +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/MANIFEST.in +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/SECURITY.md +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/TOOLS.md +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/docs.md +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/01_hello_agent.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/02_streaming_with_reasoning.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/03_provider_swap.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/04_research_agent.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/05_custom_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/06_chat_session.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/07_tool_search.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/08_structured_output.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/09_pipeline.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/10_agent_team.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/11_deep_agents.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/12_advanced_memory.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/13_parallel_tools.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/14_cost_budget.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/15_multi_turn_memory.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/16_async_agent.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/17_secure_tools.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/18_verifier_guard.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/19_gemma_on_bedrock.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/20_scheduled_jobs.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/21_growth_research_agent.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/22_super_agent.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/23_bedrock_model_switching.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/24_rag_agent_citations.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/custom_function_tool_template.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/custom_workspace_tool_template.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/reasoning_agent_template.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/examples/run_multi_tool_agent.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/01_agent_without_tools.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/02_agent_multi_tools.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/03_agent_sessions_and_history.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/04_agent_streaming_packets.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/05_agent_with_mcp.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/06_agent_connectors_gmail_and_others.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/07_agent_with_human_review.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/08_agent_with_ask_user.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/09_agent_reasoning_and_thinking.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/10_parsers_and_structured_output.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/11_pipeline_composition.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/12_agent_teams.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/13_advanced_memory.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/14_deep_agents.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/15_agent_benchmark.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/16_deep_agents_streaming.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/17_deep_agents_real_world.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/18_deep_agents_with_memory.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/19_supervisor_with_tools.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/20_goal_agent_with_tools.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/21_reflective_agent_web_research.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/22_rag_basics.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/23_rag_with_agent.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/24_rag_with_deep_agents.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/25_deep_agent_chat.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/26_agent_memory.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/27_skills_catalog_and_usage.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/28_create_and_use_custom_skills.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/29_deep_agent_with_skills.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/30_build_full_project_with_skills.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/31_cost_tracker.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/32_prebuilt_agents.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/33_ship_crew_orchestration.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/34_notifications.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/35_cost_tracking_and_budgets.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/36_skill_power_tools_and_metadata.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/37_autopilot_quickstart.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/38_autopilot_live_streaming.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/39_persistence_and_scheduler_daemon.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/40_specialists_developer_debugger_researcher.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/41_specialists_design_pm_sales_cs_marketing.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/42_power_tools_computer_use_hubspot_research.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/43_fanout_critic_artifacts.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/44_complete_tour.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/45_cost_router_async_ask_vision_sandbox.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/46_dashboard_render_tool_and_litellm.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/47_pm_pr_digest.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/48_designer_figma_review.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/49_sales_lead_enrichment.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/50_manager_sheets_kpis.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/51_support_zendesk_triage.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/52_analyst_sql_to_dashboard.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/53_finance_stripe_pdf_cashflow.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/54_structured_output_with_retry.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/55_verifier_network.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/56_episodic_memory_consolidation.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/57_time_travel_replay.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/58_computer_use_agent.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/59_browser_agent_tool.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/60_multimodal_chat.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/61_permissions_and_plan_mode.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/62_prompt_caching.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/63_claude_memory_tool.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/64_server_side_tools.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/65_citations_and_batch.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/66_interleaved_thinking.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/67_shipit_workspace.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/68_todo_tool.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/69_gemma_bedrock_agent.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/70_super_agent.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/71_full_test_drive.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/72_guardrails_and_deep_research.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/73_cli_and_power_tools.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/74_live_streaming_gemma.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/75_live_ui_and_subagents.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/76_apps_and_analysis.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/77_super_agent_live_validation.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/78_agent_mcp_token_stream_audit.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/79_observability_watcher_langfuse.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/computer_use/_computer_use.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/shipit_agent_test_drive.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/text_to_speech/_text_to_speech.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/notebooks/tool_confirmation/_tool_confirmation.ipynb +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/requirements.txt +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/setup.cfg +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit-icon.svg +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/action_detection.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/activity.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/agent_mixin.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/agents/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/agents/_specialists_patch.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/agents/definition.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/agents/registry.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/approvals/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/approvals/gate.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/approvals/models.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/approvals/queue.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/approvals/revert.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/apps.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/askuser_channel.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/autopilot/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/autopilot/artifacts.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/autopilot/budget.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/autopilot/checkpoint.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/autopilot/core.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/autopilot/critic.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/autopilot/events.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/autopilot/fanout.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/autopilot/result.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/autopilot/streaming.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/batch/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/batch/batch_runtime.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/bridge.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/builtins.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/chat_cli.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/chat_history.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/checkpoint.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/cli/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/cli/commands/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/cli/commands/browse.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/cli/commands/catalog.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/cli/commands/code.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/cli/commands/jobs.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/cli/commands/serve_cmd.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/cli/commands/simple.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/cli/llm.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/cli/tui.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/cli/ui.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/cli_autopilot.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/codemode/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/codemode/bindings.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/codemode/bridge.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/codemode/catalog.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/codemode/preamble.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/computer_use/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/computer_use/browser_session.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/computer_use/browser_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/computer_use/computer_use_agent.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/computer_use/models.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/computer_use/parser.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/config.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connections/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connections/mcp.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connections/models.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connections/registry.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/base.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/airtable/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/asana/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/brave-search/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/clickup/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/cloudflare/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/confluence/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/discord/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/fetch/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/filesystem/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/gdrive/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/github/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/gitlab/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/google-maps/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/intercom/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/jira/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/linear/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/memory/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/notion/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/paypal/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/playwright/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/postgres/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/puppeteer/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/sentry/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/slack/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/sqlite/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/square/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/stripe/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/catalog/todoist/manifest.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/manifests.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/oauth_manager.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/registry.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/connectors/tokens.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/construction.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/context_fit.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/context_tracker.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/costs/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/costs/budget.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/costs/pricing.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/adaptive_agent.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/benchmark.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/channel.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/deep_agent/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/deep_agent/delegation.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/deep_agent/factory.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/deep_agent/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/deep_agent/toolset.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/deep_agent/verification.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/goal_agent.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/persistent_agent.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/reflective_agent.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/ship_crew/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/ship_crew/agent.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/ship_crew/coordinator.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/ship_crew/crew.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/ship_crew/errors.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/ship_crew/result.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/ship_crew/task.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/deep/supervisor.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/delegation.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/discovery.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/doctor.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/exceptions.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/graph.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/guardrails.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/hitl.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/integrations/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/integrations/credentials.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/integrations/oauth.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/live.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/live_renderer.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/llms/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/llms/bedrock_token.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/llms/capabilities.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/llms/citations.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/llms/factory.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/llms/mantle.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/llms/parameters.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/llms/schema_prep.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/llms/schema_rules.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/llms/server_tools.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/llms/simple.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/llms/throttle.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/llms/tool_choice.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/llms/wire.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/lockdown.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/mcp_bridge.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/mcp_catalog.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/mcp_resilience.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/mcp_schema_cache.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/memory/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/memory/agent_memory.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/memory/consolidator.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/memory/conversation.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/memory/entity.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/memory/semantic.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/models.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/multimodal/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/multimodal/builder.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/multimodal/models.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/multimodal/parser.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/multimodal/store.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/narrate/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/narrate/grouping.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/narrate/json_stream.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/narrate/live_ui.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/narrate/renderer.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/narrate/share.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/narrate/timeline.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/narrate/tree.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/narrate/verbs.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/notifications/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/notifications/base.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/notifications/discord.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/notifications/manager.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/notifications/slack.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/notifications/telegram.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/notifications/templates.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/packets.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/parsers/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/parsers/base.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/parsers/json_parser.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/parsers/markdown_parser.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/parsers/pydantic_parser.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/parsers/regex_parser.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/parsers/streaming_json.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/pipeline/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/pipeline/pipeline.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/pipeline/step.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/plugins/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/plugins/apply.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/plugins/base.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/plugins/catalog/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/plugins/catalog/audit-log/plugin.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/plugins/catalog/audit-log/plugin.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/plugins/catalog/word-count/plugin.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/plugins/catalog/word-count/plugin.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/plugins/manifests.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/plugins/registry.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/policies.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/prefix.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/prefix_rules.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/profiles.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/prompts/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/prompts/default_agent_prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/prompts/tool_prompts.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/base.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/catalog/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/catalog/anthropic/profile.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/catalog/anthropic/provider.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/catalog/bedrock/profile.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/catalog/bedrock/provider.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/catalog/gemini/profile.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/catalog/groq/profile.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/catalog/litellm/profile.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/catalog/litellm/provider.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/catalog/ollama/profile.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/catalog/openai/profile.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/catalog/openai/provider.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/catalog/shipit/profile.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/catalog/shipit/provider.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/catalog/together/profile.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/catalog/vertex/profile.yaml +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/catalog/vertex/provider.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/profiles.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/providers/registry.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/rag/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/rag/adapters/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/rag/chunker.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/rag/embedder.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/rag/extractors.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/rag/keyword_store.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/rag/rag.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/rag/reranker.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/rag/search_pipeline.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/rag/tools.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/rag/types.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/rag/vector_store.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/reasoning.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/registry.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/replay/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/replay/differ.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/replay/models.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/replay/replayer.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/routing/cost_router.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/rules/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/rules/loader.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/rules/registry.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/rules/rule.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/runtime_state.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/schedule.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/scheduler_daemon.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/serve.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/session_facts.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/session_lock.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/session_manager.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/skills/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/skills/authoring.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/skills/loader.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/skills/registry.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/skills/skill.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/skills/tool_bundles.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/stores/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/stores/memory.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/stores/session.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/streaming.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/structured.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/structured_output.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/subagents.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/team/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/team/agent.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/team/team.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/templates.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tests/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tests/conftest.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tests/test_agent_core.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tests/test_agent_mixin.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tests/test_bridge.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tests/test_core_tools.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tests/test_graph.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tests/test_mcp_and_skills.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tests/test_parameters.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tests/test_providers.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tests/test_schema_prep.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tests/test_tools_and_connections.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/token_calibration.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/token_counting.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/toolkit/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/toolkit/contracts.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/_playwright.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/_shared.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/agent_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/apps/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/apps/apps_tools.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/artifact_builder/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/artifact_builder/artifact_builder_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/artifact_builder/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/ask_user/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/ask_user/ask_user_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/ask_user/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/ask_user_async/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/ask_user_async/ask_user_async_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/ask_user_async/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/availability.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/bash/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/bash/bash_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/bash/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/code_execution/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/code_execution/code_execution_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/code_execution/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/code_execution/sandbox.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/computer_use/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/computer_use/backends.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/computer_use/computer_use_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/computer_use/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/confirmation.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/confluence/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/confluence/confluence_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/confluence/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/connections/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/connections/connections_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/connector_base.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/contracts.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/custom_api/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/custom_api/custom_api_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/custom_api/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/dashboard_render/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/dashboard_render/dashboard_render_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/dashboard_render/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/dashboard_render/renderer.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/dashboard_render/styles.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/decision_matrix/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/decision_matrix/decision_matrix_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/decision_matrix/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/deep_research/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/deep_research/deep_research_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/describe_binding/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/describe_binding/describe_binding_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/document_builder/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/document_builder/document_builder_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/document_builder/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/document_builder/renderers.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/download_file/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/download_file/download_file_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/download_file/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/edit_file/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/edit_file/edit_file_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/edit_file/multi_edit_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/edit_file/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/evidence_synthesis/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/evidence_synthesis/evidence_synthesis_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/evidence_synthesis/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/execute_code/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/execute_code/execute_code_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/fetch_url/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/fetch_url/fetch_url_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/fetch_url/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/figma/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/figma/figma_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/figma/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/file_extract/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/file_extract/extractors.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/file_read/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/file_read/file_read_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/file_read/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/file_write/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/file_write/file_write_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/file_write/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/formatting.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/function.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/git_ops/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/git_ops/git_ops_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/github/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/github/github_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/github/pagination.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/github/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/gitlab/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/gitlab/gitlab_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/gitlab/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/give_up/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/give_up/give_up_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/glob/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/glob/glob_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/glob/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/glob_search/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/glob_search/glob_search_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/glob_search/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/gmail/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/gmail/gmail_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/gmail/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/google_calendar/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/google_calendar/google_calendar_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/google_calendar/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/google_drive/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/google_drive/google_drive_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/google_drive/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/google_sheets/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/google_sheets/google_sheets_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/google_sheets/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/grep/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/grep/grep_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/grep/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/grep_search/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/grep_search/grep_search_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/grep_search/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/hubspot/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/hubspot/hubspot_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/human_review/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/human_review/human_review_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/human_review/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/image_generate/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/image_generate/image_gen_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/image_generate/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/image_generate/providers.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/jira/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/jira/jira_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/jira/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/linear/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/linear/linear_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/linear/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/linkedin/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/linkedin/linkedin_search_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/linkedin/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/memory/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/memory/claude_memory_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/memory/memory_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/memory/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/memory/store.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/notebook_edit/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/notebook_edit/notebook_edit_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/notion/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/notion/notion_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/notion/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/open_url/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/open_url/open_url_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/open_url/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/pdf/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/pdf/pdf_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/pdf/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/planner/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/planner/planner_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/planner/present_plan_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/planner/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/playwright_browser/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/playwright_browser/playwright_browser_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/playwright_browser/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/present_file/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/present_file/present_file_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/present_file/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/prompt/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/prompt/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/prompt/prompt_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/read_file/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/read_file/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/read_file/read_file_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/recall_result/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/recall_result/recall_result_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/report_progress/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/report_progress/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/report_progress/report_progress_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/research_brief/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/research_brief/research_brief_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/salesforce/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/salesforce/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/salesforce/salesforce_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/slack/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/slack/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/slack/slack_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/sql/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/sql/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/sql/sql_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/stripe/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/stripe/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/stripe/stripe_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/sub_agent/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/sub_agent/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/sub_agent/sub_agent_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/text_to_speech/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/text_to_speech/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/text_to_speech/providers.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/text_to_speech/tts_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/thought_decomposition/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/thought_decomposition/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/thought_decomposition/thought_decomposition_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/todo/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/todo/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/todo/todo_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/tool_search/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/verifier/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/verifier/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/verifier/verifier_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/video_generate/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/video_generate/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/video_generate/providers.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/video_generate/video_gen_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/vision/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/vision/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/vision/vision_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/web_search/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/web_search/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/web_search/providers.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/web_search/web_search_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/webhook_payload.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/workspace_files/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/workspace_files/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/workspace_files/workspace_files_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/write_file/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/write_file/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/write_file/write_file_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/zendesk/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/zendesk/prompt.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools/zendesk/zendesk_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tools_compat.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tracing.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tracing_exporters/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tracing_exporters/langfuse_exporter.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tracing_exporters/langsmith_exporter.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tracing_exporters/otel_exporter.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/tracing_exporters/watcher_exporter.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/triggers.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/usage.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/verifier/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/verifier/models.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/verifier/pre_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/verifier/progress.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/verifier/verifier_network.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/verify/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/verify/gate.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/verify/ledger.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/verify/project_facts.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/verify/runtime_gate.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/workspace/__init__.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/workspace/commands.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/workspace/project_memory.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent/workspace/settings.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent.egg-info/dependency_links.txt +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent.egg-info/entry_points.txt +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent.egg-info/requires.txt +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/shipit_agent.egg-info/top_level.txt +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_activity_trace.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_agent_as_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_agent_mcp_token_stream_notebook.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_agent_scheduler.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_agent_server_cli.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_agent_structured_output.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_anthropic_power_features.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_approvals.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_apps.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_argument_gate.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_askuser_async.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_async_parity_gates.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_atomic_stores.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_autopilot.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_autopilot_artifacts.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_autopilot_bedrock_e2e.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_autopilot_critic.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_autopilot_fanout.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_autopilot_hardening.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_autopilot_long_task.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_bash_security.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_batch_runtime.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_blind_call_repair.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_browser_agent_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_chat_cli.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_chat_history.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_chat_session_and_packets.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_claude_code_parity.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_claude_memory_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_cli_doctor_and_errors.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_cli_model_defaults.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_code_execution_sandbox.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_code_execution_temp_cleanup.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_code_execution_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_codemode_bindings.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_codemode_execute.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_compaction.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_computer_use.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_computer_use_apps.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_computer_use_streaming.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_computer_use_vision.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_connection_cards.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_connection_flow.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_connections.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_connector_tools.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_connectors.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_construction_and_runner.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_context_fit.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_context_tracker.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_core_agent.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_core_runtime_fixes.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_cost_router.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_cost_router_dropin.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_cost_unknown_model.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_dashboard_render.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_deep_agent_delegation.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_deep_agent_factory.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_deep_agents.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_deep_agents_streaming.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_deep_factory_passthrough.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_deep_research_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_delegation.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_dict_message_compat.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_doctor.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_document_builder.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_download_file_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_duplicate_call_suppression.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_edit_file_encoding.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_examples_and_env.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_fanout_order.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_figma_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_file_extract.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_gap_fixes.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_git_ops_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_github_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_gitlab_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_give_up.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_google_sheets_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_guardrails.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_hitl_tui.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_image_generation.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_interactive_tools.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_json_extract.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_langfuse_exporter.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_last_step_budget.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_linkedin_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_litellm_streaming.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_llm_factory.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_lockdown.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_mcp_and_profiles.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_mcp_catalog.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_mcp_parallel_connect.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_mcp_schema_cache.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_mcp_unavailable_stub.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_media_attachments.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_memory_consolidator.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_missing_arguments.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_model_capabilities.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_modern_agent_upgrades.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_multimodal.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_narrate_grouping.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_narrate_json_stream.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_narrate_live_ui.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_narrate_renderer.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_narrate_share.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_narrate_timeline.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_narrate_tree.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_narrate_verbs.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_new_examples.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_new_tools.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_notebook_assets.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_notebook_edit_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_notifications_and_costs.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_oauth_and_tracing.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_oauth_manager.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_oauth_state.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_open_url_ssrf.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_parallel_read_safety.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_parity_upgrades.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_pdf_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_permissions.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_pipeline_and_team_streaming.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_pipeline_stream_once.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_plan_mode_workflow.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_prebuilt_agents.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_present_file.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_pricing_resolution.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_prior_turn_eviction.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_productivity_tools.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_progress_summaries_are_free.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_provider_factory_regression.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_providers.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_reannounce_damping.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_reasoning_runtime.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_release_docs_consistency.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_replay.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_result_recall.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_revert.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_rules.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_runtime_high_assurance.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_runtime_parity.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_runtime_policies.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_salesforce_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_schedule_runner.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_scheduled_agent_config.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_security_hardening.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_server_tools.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_session_eviction_persistence.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_session_facts.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_session_manager.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_ship_crew.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_skills_runtime.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_sql_security.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_sql_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_state_and_storage.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_streaming_events_contract.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_streaming_frames.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_streaming_json.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_stripe_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_structured_output.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_sub_agent_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_subagent_power.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_subagent_streaming.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_super_agent_notebook.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_templates.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_text_to_speech.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_todo_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_token_calibration.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_token_stores.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_token_streaming.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_tool_argument_guard.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_tool_availability.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_tool_choice.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_tool_confirmation.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_tool_contracts.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_tool_depth_upgrades.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_tool_input_streaming.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_tool_output_budget.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_tool_output_formatting.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_tool_output_streaming.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_tool_prompts.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_tool_schemas_bedrock_compat.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_tool_section_placement.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_tracing_exporters.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_triggers.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_v108_user_surface.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_v2_modules.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_vector_store_ids.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_verifier_network.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_verify_gate.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_verify_ledger.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_verify_on_stop_loop.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_video_generation.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_vision_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_web_and_browser_tools.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_webhook_payload_tool.py +0 -0
- {shipit_agent-2.0.7 → shipit_agent-2.2.0}/tests/test_zendesk_tool.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: shipit-agent
|
|
3
|
-
Version: 2.0
|
|
3
|
+
Version: 2.2.0
|
|
4
4
|
Summary: A clean, powerful agent runtime with tools, MCP support, profiles, and streaming events.
|
|
5
5
|
Author: Rahul Raj
|
|
6
6
|
License: MIT
|
|
@@ -251,6 +251,73 @@ Both are backwards compatible and covered by the test suite. See the
|
|
|
251
251
|
|
|
252
252
|
---
|
|
253
253
|
|
|
254
|
+
## Automatic tool discovery
|
|
255
|
+
|
|
256
|
+
Ordinary `Agent(llm=llm, tools=tools, mcps=servers)` now defaults to
|
|
257
|
+
`deferred_tools="auto"`. Catalogs that fit ten tools and approximately 4,096
|
|
258
|
+
schema tokens stay visible. Otherwise, the initial request exposes up to nine
|
|
259
|
+
working tools plus `search_tools`, within that schema budget.
|
|
260
|
+
An existing `ToolSearchTool` is reused under its configured name.
|
|
261
|
+
|
|
262
|
+
Core selection prefers a tool's numeric `discovery_priority`, then Shipit's
|
|
263
|
+
core capabilities, then registration order. Assign higher priorities to your
|
|
264
|
+
application's frequently used tools. Up to three recently discovered schemas
|
|
265
|
+
can be reused within the same session, competing for the same initial slots.
|
|
266
|
+
Changed schemas and statically denied tools are excluded from reuse; argument
|
|
267
|
+
permissions are still checked at execution. Session caches are bounded to 32
|
|
268
|
+
sessions per Agent instance and are not persisted across process restarts.
|
|
269
|
+
The model can search descriptions, names, and MCP server metadata; matching
|
|
270
|
+
tools become callable with their full schemas on the next step. Search does
|
|
271
|
+
not execute them or grant additional permissions. Loaded tools remain visible
|
|
272
|
+
for the rest of the run, so ten is an initial budget, not an execution limit.
|
|
273
|
+
|
|
274
|
+
Auto mode includes a compact capability-family index instead of listing every
|
|
275
|
+
deferred tool name. Ranking runs locally without additional LLM calls.
|
|
276
|
+
Exact-name searches load only the named tool; names can use underscores,
|
|
277
|
+
camelCase or Unicode. Newly loaded schemas append after those already shown.
|
|
278
|
+
This works through `run()`, `stream()`, and the async runtime using ordinary
|
|
279
|
+
function schemas, including providers without native tool-search support.
|
|
280
|
+
|
|
281
|
+
Use `deferred_tools=False` to keep every schema visible, `True` for the existing
|
|
282
|
+
core-only policy, or a list of names to defer specific tools. Code mode retains
|
|
283
|
+
its own discovery policy. Measure total request tokens and task completion in
|
|
284
|
+
your workload: discovery adds an LLM step, so schema savings are not a promise
|
|
285
|
+
of equal total-token savings.
|
|
286
|
+
|
|
287
|
+
See [the discovery review and offline benchmark](docs/tool-discovery-review.md)
|
|
288
|
+
for measured payload reductions and remaining tradeoffs.
|
|
289
|
+
|
|
290
|
+
Ordinary `Agent` also supports opt-in `progressive_skills=True` for metadata-first
|
|
291
|
+
skill loading and `max_task_tokens=50_000` for a soft per-run token threshold.
|
|
292
|
+
See [progressive skills, budget limits and validation](docs/progressive-agent-controls.md)
|
|
293
|
+
for setup, isolation guarantees and provider-usage caveats.
|
|
294
|
+
|
|
295
|
+
```python
|
|
296
|
+
from shipit_agent.deferral import DiscoveryPolicy
|
|
297
|
+
|
|
298
|
+
agent = Agent(
|
|
299
|
+
llm=llm, tools=tools, mcps=servers,
|
|
300
|
+
deferred_tools=DiscoveryPolicy(initial_tools=10, schema_tokens=4096, reuse_tools=3),
|
|
301
|
+
)
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
Discovery itself remains visible even if its schema exceeds a very small
|
|
305
|
+
configured budget. Definitions loaded during a run are not evicted mid-run.
|
|
306
|
+
For large structured results, tools may return
|
|
307
|
+
`ToolOutput.from_records(rows, fields=["id", "evidence"], limit=20)`.
|
|
308
|
+
The model receives an explicit page and total count; callers retain the full
|
|
309
|
+
JSON. This is context reduction, not security redaction.
|
|
310
|
+
|
|
311
|
+
Run summaries distinguish `finished` from `incomplete` provider output, expose
|
|
312
|
+
finish reasons, failed-tool counts, and recovery counts. `finished` means the
|
|
313
|
+
runtime ended normally, not that an independent grader verified the answer.
|
|
314
|
+
Provider-reported usage counters remain unchanged; cache ratios and cost
|
|
315
|
+
estimates account for whether cached tokens are included in prompt tokens.
|
|
316
|
+
|
|
317
|
+
An opt-in, billed multi-turn evaluation is available in
|
|
318
|
+
`scripts/evaluate_agent_session.py`. It uses safe fixture tools and an
|
|
319
|
+
in-process MCP server, not production data or production MCP transport.
|
|
320
|
+
|
|
254
321
|
## What's new in v1.7.0 — the working set
|
|
255
322
|
|
|
256
323
|
The biggest capability release yet: do the powerful thing without burning tokens or trust.
|
|
@@ -125,6 +125,73 @@ Both are backwards compatible and covered by the test suite. See the
|
|
|
125
125
|
|
|
126
126
|
---
|
|
127
127
|
|
|
128
|
+
## Automatic tool discovery
|
|
129
|
+
|
|
130
|
+
Ordinary `Agent(llm=llm, tools=tools, mcps=servers)` now defaults to
|
|
131
|
+
`deferred_tools="auto"`. Catalogs that fit ten tools and approximately 4,096
|
|
132
|
+
schema tokens stay visible. Otherwise, the initial request exposes up to nine
|
|
133
|
+
working tools plus `search_tools`, within that schema budget.
|
|
134
|
+
An existing `ToolSearchTool` is reused under its configured name.
|
|
135
|
+
|
|
136
|
+
Core selection prefers a tool's numeric `discovery_priority`, then Shipit's
|
|
137
|
+
core capabilities, then registration order. Assign higher priorities to your
|
|
138
|
+
application's frequently used tools. Up to three recently discovered schemas
|
|
139
|
+
can be reused within the same session, competing for the same initial slots.
|
|
140
|
+
Changed schemas and statically denied tools are excluded from reuse; argument
|
|
141
|
+
permissions are still checked at execution. Session caches are bounded to 32
|
|
142
|
+
sessions per Agent instance and are not persisted across process restarts.
|
|
143
|
+
The model can search descriptions, names, and MCP server metadata; matching
|
|
144
|
+
tools become callable with their full schemas on the next step. Search does
|
|
145
|
+
not execute them or grant additional permissions. Loaded tools remain visible
|
|
146
|
+
for the rest of the run, so ten is an initial budget, not an execution limit.
|
|
147
|
+
|
|
148
|
+
Auto mode includes a compact capability-family index instead of listing every
|
|
149
|
+
deferred tool name. Ranking runs locally without additional LLM calls.
|
|
150
|
+
Exact-name searches load only the named tool; names can use underscores,
|
|
151
|
+
camelCase or Unicode. Newly loaded schemas append after those already shown.
|
|
152
|
+
This works through `run()`, `stream()`, and the async runtime using ordinary
|
|
153
|
+
function schemas, including providers without native tool-search support.
|
|
154
|
+
|
|
155
|
+
Use `deferred_tools=False` to keep every schema visible, `True` for the existing
|
|
156
|
+
core-only policy, or a list of names to defer specific tools. Code mode retains
|
|
157
|
+
its own discovery policy. Measure total request tokens and task completion in
|
|
158
|
+
your workload: discovery adds an LLM step, so schema savings are not a promise
|
|
159
|
+
of equal total-token savings.
|
|
160
|
+
|
|
161
|
+
See [the discovery review and offline benchmark](docs/tool-discovery-review.md)
|
|
162
|
+
for measured payload reductions and remaining tradeoffs.
|
|
163
|
+
|
|
164
|
+
Ordinary `Agent` also supports opt-in `progressive_skills=True` for metadata-first
|
|
165
|
+
skill loading and `max_task_tokens=50_000` for a soft per-run token threshold.
|
|
166
|
+
See [progressive skills, budget limits and validation](docs/progressive-agent-controls.md)
|
|
167
|
+
for setup, isolation guarantees and provider-usage caveats.
|
|
168
|
+
|
|
169
|
+
```python
|
|
170
|
+
from shipit_agent.deferral import DiscoveryPolicy
|
|
171
|
+
|
|
172
|
+
agent = Agent(
|
|
173
|
+
llm=llm, tools=tools, mcps=servers,
|
|
174
|
+
deferred_tools=DiscoveryPolicy(initial_tools=10, schema_tokens=4096, reuse_tools=3),
|
|
175
|
+
)
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Discovery itself remains visible even if its schema exceeds a very small
|
|
179
|
+
configured budget. Definitions loaded during a run are not evicted mid-run.
|
|
180
|
+
For large structured results, tools may return
|
|
181
|
+
`ToolOutput.from_records(rows, fields=["id", "evidence"], limit=20)`.
|
|
182
|
+
The model receives an explicit page and total count; callers retain the full
|
|
183
|
+
JSON. This is context reduction, not security redaction.
|
|
184
|
+
|
|
185
|
+
Run summaries distinguish `finished` from `incomplete` provider output, expose
|
|
186
|
+
finish reasons, failed-tool counts, and recovery counts. `finished` means the
|
|
187
|
+
runtime ended normally, not that an independent grader verified the answer.
|
|
188
|
+
Provider-reported usage counters remain unchanged; cache ratios and cost
|
|
189
|
+
estimates account for whether cached tokens are included in prompt tokens.
|
|
190
|
+
|
|
191
|
+
An opt-in, billed multi-turn evaluation is available in
|
|
192
|
+
`scripts/evaluate_agent_session.py`. It uses safe fixture tools and an
|
|
193
|
+
in-process MCP server, not production data or production MCP transport.
|
|
194
|
+
|
|
128
195
|
## What's new in v1.7.0 — the working set
|
|
129
196
|
|
|
130
197
|
The biggest capability release yet: do the powerful thing without burning tokens or trust.
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cells": [
|
|
3
|
+
{
|
|
4
|
+
"cell_type": "markdown",
|
|
5
|
+
"metadata": {},
|
|
6
|
+
"source": [
|
|
7
|
+
"# OpenRouter deep test \u2014 `stealth/ox-alpha`\n",
|
|
8
|
+
"\n",
|
|
9
|
+
"End-to-end tests for the OpenRouter OpenAI-compatible endpoint: **text, streaming, vision, tool-calling (single + multi-arg), the shipit adapter, and a multi-agent example.**\n",
|
|
10
|
+
"\n",
|
|
11
|
+
"> Run cells top-to-bottom. The key is entered securely at runtime (never saved in the notebook).\n",
|
|
12
|
+
"> Model note: `stealth/ox-alpha` is a fast text/vision model but **does not accept video URLs** (returns 404). Images and tools work.\n"
|
|
13
|
+
]
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"cell_type": "markdown",
|
|
17
|
+
"metadata": {},
|
|
18
|
+
"source": [
|
|
19
|
+
"## 0 \u00b7 Setup\n"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"cell_type": "code",
|
|
24
|
+
"metadata": {},
|
|
25
|
+
"execution_count": null,
|
|
26
|
+
"outputs": [],
|
|
27
|
+
"source": [
|
|
28
|
+
"# pip install openai (already present in most envs)\n",
|
|
29
|
+
"import os, json, time, getpass\n",
|
|
30
|
+
"from openai import OpenAI\n",
|
|
31
|
+
"\n",
|
|
32
|
+
"# Enter your OpenRouter key securely (not stored in the notebook).\n",
|
|
33
|
+
"API_KEY = os.getenv('OPENROUTER_API_KEY') or getpass.getpass('OpenRouter API key: ')\n",
|
|
34
|
+
"MODEL = 'stealth/ox-alpha'\n",
|
|
35
|
+
"\n",
|
|
36
|
+
"client = OpenAI(base_url='https://openrouter.ai/api/v1', api_key=API_KEY,\n",
|
|
37
|
+
" timeout=120, max_retries=1)\n",
|
|
38
|
+
"HEADERS = {'HTTP-Referer': 'https://aftrdrk.dev', 'X-Title': 'OpenRouter deep test'}\n",
|
|
39
|
+
"print('client ready \u00b7', MODEL)\n"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"cell_type": "markdown",
|
|
44
|
+
"metadata": {},
|
|
45
|
+
"source": [
|
|
46
|
+
"## 1 \u00b7 Basic text + latency\n"
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"cell_type": "code",
|
|
51
|
+
"metadata": {},
|
|
52
|
+
"execution_count": null,
|
|
53
|
+
"outputs": [],
|
|
54
|
+
"source": [
|
|
55
|
+
"t0 = time.time()\n",
|
|
56
|
+
"r = client.chat.completions.create(\n",
|
|
57
|
+
" model=MODEL, extra_headers=HEADERS, max_tokens=60,\n",
|
|
58
|
+
" messages=[{'role':'user','content':'In one sentence, what is a ransomware double-extortion attack?'}])\n",
|
|
59
|
+
"print('latency: %.1fs' % (time.time()-t0))\n",
|
|
60
|
+
"print('content:', r.choices[0].message.content)\n",
|
|
61
|
+
"print('usage :', r.usage.model_dump())\n"
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"cell_type": "markdown",
|
|
66
|
+
"metadata": {},
|
|
67
|
+
"source": [
|
|
68
|
+
"## 2 \u00b7 Streaming (token-by-token)\n"
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"cell_type": "code",
|
|
73
|
+
"metadata": {},
|
|
74
|
+
"execution_count": null,
|
|
75
|
+
"outputs": [],
|
|
76
|
+
"source": [
|
|
77
|
+
"stream = client.chat.completions.create(\n",
|
|
78
|
+
" model=MODEL, extra_headers=HEADERS, max_tokens=120, stream=True,\n",
|
|
79
|
+
" messages=[{'role':'user','content':'List 3 detection tips for the Akira ransomware group, briefly.'}])\n",
|
|
80
|
+
"for chunk in stream:\n",
|
|
81
|
+
" d = chunk.choices[0].delta.content if chunk.choices else None\n",
|
|
82
|
+
" if d: print(d, end='')\n",
|
|
83
|
+
"print('\\n\\n[stream done]')\n"
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"cell_type": "markdown",
|
|
88
|
+
"metadata": {},
|
|
89
|
+
"source": [
|
|
90
|
+
"## 3 \u00b7 Vision (image)\n",
|
|
91
|
+
"`stealth/ox-alpha` can read images. It can be slow (30-90s) \u2014 be patient.\n"
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"cell_type": "code",
|
|
96
|
+
"metadata": {},
|
|
97
|
+
"execution_count": null,
|
|
98
|
+
"outputs": [],
|
|
99
|
+
"source": [
|
|
100
|
+
"t0 = time.time()\n",
|
|
101
|
+
"r = client.chat.completions.create(\n",
|
|
102
|
+
" model=MODEL, extra_headers=HEADERS, max_tokens=150,\n",
|
|
103
|
+
" messages=[{'role':'user','content':[\n",
|
|
104
|
+
" {'type':'text','text':'What is in this image? One sentence.'},\n",
|
|
105
|
+
" {'type':'image_url','image_url':{'url':'https://live.staticflickr.com/3851/14825276609_098cac593d_b.jpg'}},\n",
|
|
106
|
+
" ]}])\n",
|
|
107
|
+
"print('latency: %.1fs' % (time.time()-t0))\n",
|
|
108
|
+
"print(r.choices[0].message.content)\n"
|
|
109
|
+
]
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"cell_type": "markdown",
|
|
113
|
+
"metadata": {},
|
|
114
|
+
"source": [
|
|
115
|
+
"## 4 \u00b7 Tool calling \u2014 single tool\n",
|
|
116
|
+
"Native OpenAI function-calling. The model should return a structured `tool_call`.\n"
|
|
117
|
+
]
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"cell_type": "code",
|
|
121
|
+
"metadata": {},
|
|
122
|
+
"execution_count": null,
|
|
123
|
+
"outputs": [],
|
|
124
|
+
"source": [
|
|
125
|
+
"tools = [{'type':'function','function':{\n",
|
|
126
|
+
" 'name':'get_weather','description':'Current weather for a city',\n",
|
|
127
|
+
" 'parameters':{'type':'object','properties':{'city':{'type':'string'}},'required':['city']}}}]\n",
|
|
128
|
+
"r = client.chat.completions.create(\n",
|
|
129
|
+
" model=MODEL, extra_headers=HEADERS, tools=tools, tool_choice='auto', max_tokens=100,\n",
|
|
130
|
+
" messages=[{'role':'user','content':\"What's the weather in Berlin?\"}])\n",
|
|
131
|
+
"m = r.choices[0].message\n",
|
|
132
|
+
"print('tool_calls:', [(t.function.name, t.function.arguments) for t in (m.tool_calls or [])] or 'none')\n",
|
|
133
|
+
"print('text :', m.content)\n"
|
|
134
|
+
]
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"cell_type": "markdown",
|
|
138
|
+
"metadata": {},
|
|
139
|
+
"source": [
|
|
140
|
+
"## 5 \u00b7 Multi-argument tool (MCP-style)\n",
|
|
141
|
+
"The real agent test: can it fill several arguments in one structured call?\n"
|
|
142
|
+
]
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"cell_type": "code",
|
|
146
|
+
"metadata": {},
|
|
147
|
+
"execution_count": null,
|
|
148
|
+
"outputs": [],
|
|
149
|
+
"source": [
|
|
150
|
+
"tools = [{'type':'function','function':{\n",
|
|
151
|
+
" 'name':'query_records','description':'Query internal records with multiple filters',\n",
|
|
152
|
+
" 'parameters':{'type':'object','properties':{\n",
|
|
153
|
+
" 'domain':{'type':'string','description':'e.g. ransomlook'},\n",
|
|
154
|
+
" 'entity':{'type':'string','description':'e.g. groups'},\n",
|
|
155
|
+
" 'entity_id':{'type':'string','description':'e.g. akira'}},\n",
|
|
156
|
+
" 'required':['domain','entity','entity_id']}}}]\n",
|
|
157
|
+
"r = client.chat.completions.create(\n",
|
|
158
|
+
" model=MODEL, extra_headers=HEADERS, tools=tools, tool_choice='required', max_tokens=120,\n",
|
|
159
|
+
" messages=[{'role':'user','content':'Pull the RansomLook group profile for Akira.'}])\n",
|
|
160
|
+
"m = r.choices[0].message\n",
|
|
161
|
+
"for t in (m.tool_calls or []):\n",
|
|
162
|
+
" print(t.function.name, '->', json.loads(t.function.arguments))\n"
|
|
163
|
+
]
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"cell_type": "markdown",
|
|
167
|
+
"metadata": {},
|
|
168
|
+
"source": [
|
|
169
|
+
"## 6 \u00b7 Through the shipit adapter (`OpenAIChatLLM`)\n",
|
|
170
|
+
"Same call, but via shipit's OpenAI-compatible adapter \u2014 proving OpenRouter works inside the agent framework.\n",
|
|
171
|
+
"Requires `shipit_agent` importable (run in an env where it's installed).\n"
|
|
172
|
+
]
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"cell_type": "code",
|
|
176
|
+
"metadata": {},
|
|
177
|
+
"execution_count": null,
|
|
178
|
+
"outputs": [],
|
|
179
|
+
"source": [
|
|
180
|
+
"try:\n",
|
|
181
|
+
" from shipit_agent.llms.openai_adapter import OpenAIChatLLM\n",
|
|
182
|
+
" from shipit_agent.models import Message\n",
|
|
183
|
+
" llm = OpenAIChatLLM(model=MODEL, api_key=API_KEY,\n",
|
|
184
|
+
" base_url='https://openrouter.ai/api/v1',\n",
|
|
185
|
+
" default_headers=HEADERS)\n",
|
|
186
|
+
" resp = llm.complete(messages=[Message(role='user', content='Name one famous ransomware group in 2 words.')], tools=None)\n",
|
|
187
|
+
" print('content:', resp.content)\n",
|
|
188
|
+
" print('usage :', resp.usage) # cache_read_input_tokens surfaces here when warm\n",
|
|
189
|
+
"except ImportError as e:\n",
|
|
190
|
+
" print('shipit_agent not importable in this kernel \u2014 skip:', e)\n"
|
|
191
|
+
]
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"cell_type": "markdown",
|
|
195
|
+
"metadata": {},
|
|
196
|
+
"source": [
|
|
197
|
+
"## 7 \u00b7 Multi-agent example\n",
|
|
198
|
+
"A tiny two-agent pipeline on OpenRouter: **Researcher** proposes findings, **Critic** reviews them, **Editor** writes the final brief. Pure OpenAI-compatible calls \u2014 swap in real tools/MCP as needed.\n"
|
|
199
|
+
]
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"cell_type": "code",
|
|
203
|
+
"metadata": {},
|
|
204
|
+
"execution_count": null,
|
|
205
|
+
"outputs": [],
|
|
206
|
+
"source": [
|
|
207
|
+
"def ask(system, user, max_tokens=300):\n",
|
|
208
|
+
" r = client.chat.completions.create(\n",
|
|
209
|
+
" model=MODEL, extra_headers=HEADERS, max_tokens=max_tokens, temperature=0.3,\n",
|
|
210
|
+
" messages=[{'role':'system','content':system},{'role':'user','content':user}])\n",
|
|
211
|
+
" return r.choices[0].message.content or ''\n",
|
|
212
|
+
"\n",
|
|
213
|
+
"TOPIC = 'the Akira ransomware group and its threat to manufacturers'\n",
|
|
214
|
+
"\n",
|
|
215
|
+
"print('\u2500\u2500 RESEARCHER \u2500\u2500')\n",
|
|
216
|
+
"research = ask('You are a threat-intel researcher. Be concrete and factual.',\n",
|
|
217
|
+
" f'Give 5 key findings about {TOPIC}. Bullet points.')\n",
|
|
218
|
+
"print(research)\n",
|
|
219
|
+
"\n",
|
|
220
|
+
"print('\\n\u2500\u2500 CRITIC \u2500\u2500')\n",
|
|
221
|
+
"critique = ask('You are a skeptical reviewer. Flag anything unsupported or vague.',\n",
|
|
222
|
+
" f'Review these findings and note weaknesses:\\n{research}')\n",
|
|
223
|
+
"print(critique)\n",
|
|
224
|
+
"\n",
|
|
225
|
+
"print('\\n\u2500\u2500 EDITOR \u2500\u2500')\n",
|
|
226
|
+
"brief = ask('You are a senior analyst writing for a client board.',\n",
|
|
227
|
+
" f'Using the findings and the critique, write a tight 1-paragraph brief.\\n\\nFINDINGS:\\n{research}\\n\\nCRITIQUE:\\n{critique}')\n",
|
|
228
|
+
"print(brief)\n"
|
|
229
|
+
]
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"cell_type": "markdown",
|
|
233
|
+
"metadata": {},
|
|
234
|
+
"source": [
|
|
235
|
+
"## 8 \u00b7 Agentic tool loop (multi-turn, one agent + tools)\n",
|
|
236
|
+
"A minimal manual agent loop: the model calls a tool, we execute it, feed the result back, and it answers. This is the core of any MCP agent.\n"
|
|
237
|
+
]
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"cell_type": "code",
|
|
241
|
+
"metadata": {},
|
|
242
|
+
"execution_count": null,
|
|
243
|
+
"outputs": [],
|
|
244
|
+
"source": [
|
|
245
|
+
"def fake_lookup(domain, entity, entity_id):\n",
|
|
246
|
+
" # stand-in for a real MCP tool\n",
|
|
247
|
+
" return json.dumps({'domain':domain,'entity':entity,'id':entity_id,\n",
|
|
248
|
+
" 'first_seen':'2023-03','model':'RaaS','notable':'targets VMware ESXi'})\n",
|
|
249
|
+
"\n",
|
|
250
|
+
"tools = [{'type':'function','function':{'name':'query_records',\n",
|
|
251
|
+
" 'parameters':{'type':'object','properties':{'domain':{'type':'string'},\n",
|
|
252
|
+
" 'entity':{'type':'string'},'entity_id':{'type':'string'}},\n",
|
|
253
|
+
" 'required':['domain','entity','entity_id']},'description':'Query internal records'}}]\n",
|
|
254
|
+
"\n",
|
|
255
|
+
"msgs = [{'role':'user','content':'Look up the Akira group profile in ransomlook and summarize it.'}]\n",
|
|
256
|
+
"for step in range(4):\n",
|
|
257
|
+
" r = client.chat.completions.create(model=MODEL, extra_headers=HEADERS,\n",
|
|
258
|
+
" tools=tools, tool_choice='auto', max_tokens=300, messages=msgs)\n",
|
|
259
|
+
" m = r.choices[0].message\n",
|
|
260
|
+
" if m.tool_calls:\n",
|
|
261
|
+
" msgs.append({'role':'assistant','content':m.content or '','tool_calls':[t.model_dump() for t in m.tool_calls]})\n",
|
|
262
|
+
" for t in m.tool_calls:\n",
|
|
263
|
+
" args = json.loads(t.function.arguments)\n",
|
|
264
|
+
" result = fake_lookup(**args)\n",
|
|
265
|
+
" print(f'[tool] {t.function.name}({args}) -> {result[:60]}...')\n",
|
|
266
|
+
" msgs.append({'role':'tool','tool_call_id':t.id,'content':result})\n",
|
|
267
|
+
" else:\n",
|
|
268
|
+
" print('\\n[final answer]\\n' + (m.content or ''))\n",
|
|
269
|
+
" break\n"
|
|
270
|
+
]
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"cell_type": "markdown",
|
|
274
|
+
"metadata": {},
|
|
275
|
+
"source": [
|
|
276
|
+
"## 9 \u00b7 Latency / cache benchmark\n",
|
|
277
|
+
"Send the same large prefix 3x back-to-back and watch `cached_tokens` climb (implicit caching).\n"
|
|
278
|
+
]
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
"cell_type": "code",
|
|
282
|
+
"metadata": {},
|
|
283
|
+
"execution_count": null,
|
|
284
|
+
"outputs": [],
|
|
285
|
+
"source": [
|
|
286
|
+
"PREFIX = 'Background: ' + ('Akira is a ransomware group. ' * 300)\n",
|
|
287
|
+
"for i in range(3):\n",
|
|
288
|
+
" t0 = time.time()\n",
|
|
289
|
+
" r = client.chat.completions.create(model=MODEL, extra_headers=HEADERS, max_tokens=8,\n",
|
|
290
|
+
" messages=[{'role':'user','content':PREFIX + f'\\n\\nSay the number {i}.'}])\n",
|
|
291
|
+
" u = r.usage.model_dump(); pd = u.get('prompt_tokens_details',{})\n",
|
|
292
|
+
" print(f'call {i}: {time.time()-t0:.1f}s \u00b7 prompt={u[\"prompt_tokens\"]} \u00b7 cached={pd.get(\"cached_tokens\")}')\n"
|
|
293
|
+
]
|
|
294
|
+
}
|
|
295
|
+
],
|
|
296
|
+
"metadata": {
|
|
297
|
+
"kernelspec": {
|
|
298
|
+
"display_name": "Python 3",
|
|
299
|
+
"language": "python",
|
|
300
|
+
"name": "python3"
|
|
301
|
+
},
|
|
302
|
+
"language_info": {
|
|
303
|
+
"name": "python",
|
|
304
|
+
"version": "3.11"
|
|
305
|
+
}
|
|
306
|
+
},
|
|
307
|
+
"nbformat": 4,
|
|
308
|
+
"nbformat_minor": 5
|
|
309
|
+
}
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "shipit-agent"
|
|
7
|
-
version = "2.0
|
|
7
|
+
version = "2.2.0"
|
|
8
8
|
description = "A clean, powerful agent runtime with tools, MCP support, profiles, and streaming events."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -286,13 +286,17 @@ class Agent(AgentPreparationMixin, UpgradeMixin):
|
|
|
286
286
|
code_mode: bool = False
|
|
287
287
|
|
|
288
288
|
# ── deferred tool loading (v1.7) ──────────────────────────────────
|
|
289
|
-
#
|
|
289
|
+
# Default "auto": above ten tools, keep nine core capabilities and a
|
|
290
|
+
# discovery tool. discovery_priority on a tool overrides core ranking;
|
|
291
|
+
# ties follow registration order. False opts out. Core tools keep schemas in
|
|
290
292
|
# every request; everything else is listed by NAME only until
|
|
291
293
|
# `tool_search` (or a direct call) loads it. Cuts the fixed per-step
|
|
292
294
|
# schema cost to the working set. ``True`` defers everything outside
|
|
293
295
|
# the core set; a list of names defers exactly those. Ignored when
|
|
294
296
|
# ``code_mode`` is on (code mode collapses the catalogue its own way).
|
|
295
|
-
deferred_tools: Any =
|
|
297
|
+
deferred_tools: Any = "auto"
|
|
298
|
+
# Pass deferral.DiscoveryPolicy(...) for initial schema-token/count budgets
|
|
299
|
+
# and bounded session reuse. Auto uses 10 tools / ~4096 schema tokens.
|
|
296
300
|
|
|
297
301
|
# ── lockdown (exfiltration guard) ─────────────────────────────────
|
|
298
302
|
# Once a tool reports it returned sensitive data, the run may only make
|
|
@@ -338,6 +342,11 @@ class Agent(AgentPreparationMixin, UpgradeMixin):
|
|
|
338
342
|
skills: list[SkillLike] = field(default_factory=list) # always-on skills
|
|
339
343
|
default_skill_ids: list[str] = field(default_factory=list)
|
|
340
344
|
skill_match_limit: int = 3 # max auto-matched
|
|
345
|
+
progressive_skills: bool = False # metadata-first, model-selected loading
|
|
346
|
+
max_task_tokens: int | None = None # soft per-run stop between model steps
|
|
347
|
+
# Soft stop across every run of this agent (or one chat session), checked
|
|
348
|
+
# between steps. Clones start fresh; reset with reset_session_usage().
|
|
349
|
+
max_session_tokens: int | None = None
|
|
341
350
|
|
|
342
351
|
# ── rules (see shipit_agent/rules/) ───────────────────────────────
|
|
343
352
|
# Durable behavioural policy (AGENTS.md house-style), scoped to paths/tools
|
|
@@ -408,13 +417,32 @@ class Agent(AgentPreparationMixin, UpgradeMixin):
|
|
|
408
417
|
"""Release provider/MCP resources without blocking an event loop."""
|
|
409
418
|
await asyncio.to_thread(self.close)
|
|
410
419
|
|
|
420
|
+
@property
|
|
421
|
+
def session_token_usage(self) -> int:
|
|
422
|
+
"""Tokens spent across every run of this agent's session so far."""
|
|
423
|
+
return int(self._session_runtime_state.get("session_tokens", 0))
|
|
424
|
+
|
|
425
|
+
def reset_session_usage(self) -> None:
|
|
426
|
+
"""Start the session budget over — e.g. for a long-lived server agent
|
|
427
|
+
at the start of a new billing window."""
|
|
428
|
+
self._session_runtime_state.pop("session_tokens", None)
|
|
429
|
+
self._session_runtime_state.pop("session_usage_complete", None)
|
|
430
|
+
|
|
411
431
|
def clone(self, **changes: Any) -> "Agent":
|
|
412
432
|
"""Copy this agent with selected configuration overrides.
|
|
413
433
|
|
|
414
434
|
Mutable configuration containers are copied, while LLMs and durable
|
|
415
435
|
stores are intentionally shared unless explicitly replaced.
|
|
416
436
|
"""
|
|
417
|
-
from dataclasses import replace
|
|
437
|
+
from dataclasses import fields, replace
|
|
438
|
+
|
|
439
|
+
hooks = self.hooks
|
|
440
|
+
if hooks is not None:
|
|
441
|
+
hooks = replace(hooks, **{
|
|
442
|
+
item.name: list(getattr(hooks, item.name))
|
|
443
|
+
for item in fields(hooks)
|
|
444
|
+
if isinstance(getattr(hooks, item.name), list)
|
|
445
|
+
})
|
|
418
446
|
|
|
419
447
|
defaults = {
|
|
420
448
|
"tools": list(self.tools),
|
|
@@ -425,9 +453,16 @@ class Agent(AgentPreparationMixin, UpgradeMixin):
|
|
|
425
453
|
"skills": list(self.skills),
|
|
426
454
|
"default_skill_ids": list(self.default_skill_ids),
|
|
427
455
|
"rules": list(self.rules),
|
|
456
|
+
"hooks": hooks,
|
|
457
|
+
# Contributions are already present in tools/hooks. Re-activation
|
|
458
|
+
# would duplicate tools and mutate callbacks on every chat turn.
|
|
459
|
+
"plugins": [],
|
|
428
460
|
}
|
|
429
461
|
defaults.update(changes)
|
|
430
|
-
|
|
462
|
+
cloned = replace(self, **defaults)
|
|
463
|
+
if "plugins" not in changes:
|
|
464
|
+
cloned.plugins = list(self.plugins)
|
|
465
|
+
return cloned
|
|
431
466
|
|
|
432
467
|
def as_tool(
|
|
433
468
|
self,
|
|
@@ -472,6 +507,14 @@ class Agent(AgentPreparationMixin, UpgradeMixin):
|
|
|
472
507
|
self.memory_store = InMemoryMemoryStore()
|
|
473
508
|
if self.stream_queue_maxsize < 1:
|
|
474
509
|
raise ValueError("stream_queue_maxsize must be positive")
|
|
510
|
+
if self.max_task_tokens is not None and (
|
|
511
|
+
type(self.max_task_tokens) is not int or self.max_task_tokens < 1
|
|
512
|
+
):
|
|
513
|
+
raise ValueError("max_task_tokens must be a positive integer or None")
|
|
514
|
+
if self.max_session_tokens is not None and (
|
|
515
|
+
type(self.max_session_tokens) is not int or self.max_session_tokens < 1
|
|
516
|
+
):
|
|
517
|
+
raise ValueError("max_session_tokens must be a positive integer or None")
|
|
475
518
|
if self.stream_join_timeout < 0:
|
|
476
519
|
raise ValueError("stream_join_timeout cannot be negative")
|
|
477
520
|
|
|
@@ -861,7 +904,7 @@ class Agent(AgentPreparationMixin, UpgradeMixin):
|
|
|
861
904
|
"progress_summaries": self.progress_summaries,
|
|
862
905
|
"reminder": self.reminder,
|
|
863
906
|
"evict_prior_tool_outputs": self.evict_prior_tool_outputs,
|
|
864
|
-
"prompt": self._effective_prompt(user_prompt),
|
|
907
|
+
"prompt": self._effective_prompt(user_prompt, selected_skills=selected_skills),
|
|
865
908
|
"tools": effective_tools,
|
|
866
909
|
"mcps": self.mcps,
|
|
867
910
|
"required_tools": self.required_tools,
|
|
@@ -873,6 +916,8 @@ class Agent(AgentPreparationMixin, UpgradeMixin):
|
|
|
873
916
|
"agent_name": self.name,
|
|
874
917
|
"agent_description": self.description,
|
|
875
918
|
**self.metadata,
|
|
919
|
+
"max_task_tokens": self.max_task_tokens,
|
|
920
|
+
"max_session_tokens": self.max_session_tokens,
|
|
876
921
|
"used_skills": skill_ids,
|
|
877
922
|
"used_skill_tools": skill_tool_names,
|
|
878
923
|
"selected_skills": skill_details,
|
|
@@ -56,7 +56,7 @@ class AgentPreparationMixin:
|
|
|
56
56
|
seen: set[str] = set()
|
|
57
57
|
candidates = [*self.skills]
|
|
58
58
|
candidates.extend(self._resolve_skill_ref(i) for i in self.default_skill_ids)
|
|
59
|
-
if self.auto_use_skills and self.skill_registry is not None:
|
|
59
|
+
if self.auto_use_skills and not self.progressive_skills and self.skill_registry is not None:
|
|
60
60
|
candidates.extend(
|
|
61
61
|
find_relevant_skills(
|
|
62
62
|
self.skill_registry,
|
|
@@ -70,15 +70,34 @@ class AgentPreparationMixin:
|
|
|
70
70
|
seen.add(skill.id)
|
|
71
71
|
return selected
|
|
72
72
|
|
|
73
|
-
def _effective_prompt(
|
|
73
|
+
def _effective_prompt(
|
|
74
|
+
self, user_prompt: str, *, selected_skills: list[Skill] | None = None
|
|
75
|
+
) -> str:
|
|
74
76
|
effective = self.prompt
|
|
75
|
-
|
|
77
|
+
if selected_skills is None:
|
|
78
|
+
selected_skills = self._selected_skills(user_prompt)
|
|
79
|
+
for skill in selected_skills:
|
|
76
80
|
holder = type("PromptHolder", (), {"prompt": effective})()
|
|
77
81
|
apply_skill(holder, skill)
|
|
78
82
|
effective = holder.prompt
|
|
83
|
+
catalog = self._progressive_skill_catalog(selected_skills)
|
|
84
|
+
if catalog:
|
|
85
|
+
effective += "\n\n# Available skills\nLoad relevant instructions with load_skill before applying them. " \
|
|
86
|
+
"Skills provide guidance, not permission to access new tools or data.\n"
|
|
87
|
+
effective += "\n".join(f"- {entry.id}: {entry.description}" for entry in catalog)
|
|
79
88
|
rules = self._rules_block()
|
|
80
89
|
return f"{effective}\n\n{rules}" if rules and rules not in effective else effective
|
|
81
90
|
|
|
91
|
+
def _progressive_skill_catalog(self, selected_skills):
|
|
92
|
+
if not self.progressive_skills or self.skill_registry is None:
|
|
93
|
+
return []
|
|
94
|
+
from shipit_agent.skills.catalog import build_catalog
|
|
95
|
+
return build_catalog(
|
|
96
|
+
(skill for skill in self.skill_registry.list()
|
|
97
|
+
if skill.is_visible and skill.is_admin_enabled and skill.is_user_enabled),
|
|
98
|
+
exclude=[skill.id for skill in selected_skills],
|
|
99
|
+
)
|
|
100
|
+
|
|
82
101
|
def _rules_block(self) -> str:
|
|
83
102
|
from shipit_agent.rules import RuleSet, collect_tool_rules
|
|
84
103
|
|
|
@@ -138,13 +157,29 @@ class AgentPreparationMixin:
|
|
|
138
157
|
if self._auto_sub_agent is not None:
|
|
139
158
|
effective["sub_agent"] = self._auto_sub_agent
|
|
140
159
|
|
|
141
|
-
|
|
160
|
+
missing_skill_tools = [
|
|
161
|
+
name for name in tool_names_for_skills(selected_skills)
|
|
162
|
+
if name not in effective
|
|
163
|
+
]
|
|
164
|
+
if missing_skill_tools:
|
|
142
165
|
builtins = get_builtin_tool_map(
|
|
143
166
|
llm=self.llm, project_root=str(self.project_root)
|
|
144
167
|
)
|
|
145
|
-
for name in
|
|
168
|
+
for name in missing_skill_tools:
|
|
146
169
|
if name in builtins:
|
|
147
|
-
|
|
170
|
+
# Host-supplied tools may enforce tenant scoping or custom
|
|
171
|
+
# behavior. A skill adds missing capabilities, not overrides.
|
|
172
|
+
effective.setdefault(name, builtins[name])
|
|
173
|
+
catalog = self._progressive_skill_catalog(selected_skills)
|
|
174
|
+
if catalog:
|
|
175
|
+
from shipit_agent.skills.catalog import LoadSkillTool, SkillSession
|
|
176
|
+
if "load_skill" in effective:
|
|
177
|
+
raise ValueError("progressive_skills reserves the tool name 'load_skill'")
|
|
178
|
+
# Fresh state per run: never store mutable loading state on an
|
|
179
|
+
# Agent shared by several chats. Previous evidence stays in history;
|
|
180
|
+
# reloading remains possible after history eviction/compaction.
|
|
181
|
+
lookup = {entry.id: self.skill_registry.get(entry.id) for entry in catalog}
|
|
182
|
+
effective["load_skill"] = LoadSkillTool(lookup, SkillSession(), available_tools=[])
|
|
148
183
|
tools = list(effective.values())
|
|
149
184
|
if self.verifier is not None and hasattr(self.verifier, "wrap_tools"):
|
|
150
185
|
tools = self.verifier.wrap_tools(tools)
|