tamfis-code 0.6.2__tar.gz → 0.6.3__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.
- {tamfis_code-0.6.2/tamfis_code.egg-info → tamfis_code-0.6.3}/PKG-INFO +1 -1
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/pyproject.toml +1 -1
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/__init__.py +1 -1
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/providers.py +13 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3/tamfis_code.egg-info}/PKG-INFO +1 -1
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_routing.py +15 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/MANIFEST.in +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/README.md +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/USAGE_INSTALL_RELEASE.md +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/setup.cfg +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/__main__.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/agent_definitions.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/agents.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/api_client.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/cli.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/clipboard.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/completion.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/config.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/custom_commands.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/doctor.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/enforcer.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/evidence.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/hooks.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/indexer.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/instructions.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/interactive.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/live_input.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/local_chat.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/local_tools.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/mcp.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/mcp_stdio_server.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/metrics.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/model_registry.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/openhands/__init__.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/openhands/agent.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/openhands/agent_server.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/openhands/automation.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/openhands/compat.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/openhands/conversation.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/openhands/delegation.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/openhands/events.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/openhands/leases.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/openhands/security.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/openhands/skills.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/openhands/tools.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/openhands/workspace.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/orchestrator/__init__.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/orchestrator/context.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/orchestrator/engine.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/orchestrator/planner.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/orchestrator/protocols.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/orchestrator/validator.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/project.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/provider_protocols.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/pty.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/references.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/render.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/routing.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/runner.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/runner_local.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/safety.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/screenshot.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/sessions.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/state.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/swarm.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/tasks.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/tool_policy.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code/workspace.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code.egg-info/SOURCES.txt +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code.egg-info/dependency_links.txt +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code.egg-info/entry_points.txt +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code.egg-info/requires.txt +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tamfis_code.egg-info/top_level.txt +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_agent_definitions.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_agents.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_agents_delegation.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_build_installation.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_cli_commands.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_clipboard.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_completion.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_context_rollover.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_custom_commands.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_cwd_validation.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_doctor_session_diagnostics.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_enforcer.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_fake_tool_detection.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_find_references.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_hooks.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_indexer.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_instructions.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_integration_new.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_interactive_standalone.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_live_input.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_local_pty.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_mcp.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_mcp_search_bounds.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_mcp_standalone_degradation.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_mcp_stdio_server.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_metrics.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_openhands_runtime.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_openrouter_cost_routing.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_orchestrator.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_plan_mode_gate.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_plan_steps_and_attempts.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_provider_protocols.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_reasoning_effort_capability.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_reasoning_plan.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_references.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_render_task_diagnostics.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_runner_helpers.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_runner_local.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_safety.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_safety_manifest.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_sessions.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_swarm.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_tamfis_code_api_client.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_tamfis_code_approval.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_tamfis_code_approval_flow.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_tamfis_code_config.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_tamfis_code_intent.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_tamfis_code_render.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_tamfis_code_repl_exit.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_tamfis_code_tasks.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_tamfis_code_workspace.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_version_consistency.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_workspace_discovery_gaps.py +0 -0
- {tamfis_code-0.6.2 → tamfis_code-0.6.3}/tests/test_workspace_scope.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tamfis-code
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.3
|
|
4
4
|
Summary: TamfisGPT Code -- portable subscription-backed terminal coding agent with local tools, PTY, plans, queues, and approvals
|
|
5
5
|
Project-URL: Homepage, https://github.com/tamfitronics/tamfis-code
|
|
6
6
|
Project-URL: Repository, https://github.com/tamfitronics/tamfis-code
|
|
@@ -17,7 +17,7 @@ See docs/REMOTE_AGENT_MASTER_SPEC.md, Phase 21, for the original --remote
|
|
|
17
17
|
architecture's spec.
|
|
18
18
|
"""
|
|
19
19
|
|
|
20
|
-
__version__ = "0.6.
|
|
20
|
+
__version__ = "0.6.3"
|
|
21
21
|
|
|
22
22
|
# Bumped whenever a CLI release requires a minimum backend Remote API
|
|
23
23
|
# contract version. Only meaningful for --remote; the standalone path has no
|
|
@@ -621,6 +621,17 @@ class ProviderManager:
|
|
|
621
621
|
|
|
622
622
|
status = cls.provider_error_status(exc)
|
|
623
623
|
if status is not None:
|
|
624
|
+
# NVIDIA can return HTTP 400 when a model's registered function
|
|
625
|
+
# is degraded or unavailable. This is a route/model capability
|
|
626
|
+
# failure, not a malformed user request; AUTO must continue with
|
|
627
|
+
# the next eligible provider instead of stopping the task.
|
|
628
|
+
if status == 400:
|
|
629
|
+
message = str(exc).lower()
|
|
630
|
+
if (
|
|
631
|
+
"degraded function cannot be invoked" in message
|
|
632
|
+
or "function cannot be invoked" in message
|
|
633
|
+
):
|
|
634
|
+
return True
|
|
624
635
|
return status in {
|
|
625
636
|
401,
|
|
626
637
|
402,
|
|
@@ -674,6 +685,8 @@ class ProviderManager:
|
|
|
674
685
|
# provider/model is exactly the right response -- this is an
|
|
675
686
|
# account-entitlement failure, not a bad request.
|
|
676
687
|
"not found for account",
|
|
688
|
+
"degraded function cannot be invoked",
|
|
689
|
+
"function cannot be invoked",
|
|
677
690
|
)
|
|
678
691
|
return any(marker in message for marker in retryable_markers)
|
|
679
692
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tamfis-code
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.3
|
|
4
4
|
Summary: TamfisGPT Code -- portable subscription-backed terminal coding agent with local tools, PTY, plans, queues, and approvals
|
|
5
5
|
Project-URL: Homepage, https://github.com/tamfitronics/tamfis-code
|
|
6
6
|
Project-URL: Repository, https://github.com/tamfitronics/tamfis-code
|
|
@@ -156,6 +156,21 @@ def test_generic_open_stream_failure_is_retryable():
|
|
|
156
156
|
assert ProviderManager.is_retryable_provider_error(exc)
|
|
157
157
|
|
|
158
158
|
|
|
159
|
+
def test_nvidia_degraded_function_400_is_retryable():
|
|
160
|
+
exc = RuntimeError(
|
|
161
|
+
"Error code: 400 - {'status': 400, 'title': 'Bad Request', "
|
|
162
|
+
"'detail': \"Function id 'abc': DEGRADED function cannot be invoked\"}"
|
|
163
|
+
)
|
|
164
|
+
assert ProviderManager.is_retryable_provider_error(exc)
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def test_unrelated_http_400_is_not_retryable():
|
|
168
|
+
class BadRequest(Exception):
|
|
169
|
+
status_code = 400
|
|
170
|
+
|
|
171
|
+
assert not ProviderManager.is_retryable_provider_error(BadRequest("invalid request"))
|
|
172
|
+
|
|
173
|
+
|
|
159
174
|
def test_nim_account_entitlement_404_is_retryable():
|
|
160
175
|
# Live-reported: moonshotai/kimi-k2.6 returns a real 404 with this exact
|
|
161
176
|
# shape when the account has no deployment access to that specific
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|