codee-agent 0.5.3__tar.gz → 0.5.4__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.
Files changed (81) hide show
  1. {codee_agent-0.5.3 → codee_agent-0.5.4}/PKG-INFO +1 -1
  2. {codee_agent-0.5.3 → codee_agent-0.5.4}/pyproject.toml +1 -1
  3. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/admin_service.py +3 -1
  4. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/test_admin_service.py +37 -0
  5. {codee_agent-0.5.3 → codee_agent-0.5.4}/LICENSE +0 -0
  6. {codee_agent-0.5.3 → codee_agent-0.5.4}/README.md +0 -0
  7. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/.gitignore +0 -0
  8. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/__init__.py +0 -0
  9. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/admin.py +0 -0
  10. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/admin_api.py +0 -0
  11. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/admin_cli.py +0 -0
  12. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/agent_cli.py +0 -0
  13. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/coding_agents.py +0 -0
  14. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/executor.py +0 -0
  15. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/init_cli.py +0 -0
  16. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/lib/__init__.py +0 -0
  17. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/lib/cron_describe.py +0 -0
  18. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/lib/mcp_config.py +0 -0
  19. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/lib/runs_db.py +0 -0
  20. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/lib/test_mcp_config.py +0 -0
  21. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/lib/test_runs_db.py +0 -0
  22. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/lib/test_trigger_cron_skills.py +0 -0
  23. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/lib/test_trigger_issue_skills.py +0 -0
  24. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/lib/trigger_aws_sqs_skills.py +0 -0
  25. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/lib/trigger_cron_skills.py +0 -0
  26. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/lib/trigger_email_skills.py +0 -0
  27. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/lib/trigger_issue_skills.py +0 -0
  28. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/mail_server.py +0 -0
  29. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/setup_wizard.py +0 -0
  30. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/start_cli.py +0 -0
  31. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/tasks_providers.py +0 -0
  32. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/templates/AGENTS.md +0 -0
  33. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/templates/CLAUDE.md +0 -0
  34. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/templates/skills/aws-sqs-alarm-response/SKILL.md +0 -0
  35. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/templates/skills/cron-research-5xx-errors/SKILL.md +0 -0
  36. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/templates/skills/story-code-reviewer/SKILL.md +0 -0
  37. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/templates/skills/story-developer/SKILL.md +0 -0
  38. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/templates/skills/story-planner/SKILL.md +0 -0
  39. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/templates/skills/story-planner/assets/readme-template.md +0 -0
  40. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/templates/skills/story-qa/SKILL.md +0 -0
  41. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/templates/skills/story-security-reviewer/SKILL.md +0 -0
  42. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/templates/skills/task-code-reviewer/SKILL.md +0 -0
  43. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/templates/skills/task-developer/SKILL.md +0 -0
  44. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/templates/skills/task-qa/SKILL.md +0 -0
  45. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/templates/skills/task-security-reviewer/SKILL.md +0 -0
  46. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/test_admin_api.py +0 -0
  47. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/test_admin_cli.py +0 -0
  48. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/test_agent_cli.py +0 -0
  49. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/test_executor.py +0 -0
  50. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/test_init_cli.py +0 -0
  51. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/test_memory_index.py +0 -0
  52. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/test_setup_wizard.py +0 -0
  53. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/test_start_cli.py +0 -0
  54. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee/workflow_graph.py +0 -0
  55. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_admin/__init__.py +0 -0
  56. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_admin/codee_admin.py +0 -0
  57. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_agent_abstract/__init__.py +0 -0
  58. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_agent_abstract/provider.py +0 -0
  59. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_agent_claude_code/__init__.py +0 -0
  60. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_agent_claude_code/provider.py +0 -0
  61. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_agent_claude_code/test.py +0 -0
  62. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_agent_github_copilot/__init__.py +0 -0
  63. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_agent_github_copilot/provider.py +0 -0
  64. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_agent_github_copilot/test.py +0 -0
  65. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_database/__init__.py +0 -0
  66. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_database/database.py +0 -0
  67. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_database/oauth_tokens.py +0 -0
  68. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_main_context/__init__.py +0 -0
  69. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_main_context/context.py +0 -0
  70. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_main_context/logging.py +0 -0
  71. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_main_context/test_context.py +0 -0
  72. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_main_context/test_logging.py +0 -0
  73. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_tasks_abstract/__init__.py +0 -0
  74. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_tasks_abstract/provider.py +0 -0
  75. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_tasks_azure_devops/__init__.py +0 -0
  76. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_tasks_azure_devops/oauth.py +0 -0
  77. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_tasks_azure_devops/provider.py +0 -0
  78. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_tasks_azure_devops/test.py +0 -0
  79. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_tasks_jira/__init__.py +0 -0
  80. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_tasks_jira/provider.py +0 -0
  81. {codee_agent-0.5.3 → codee_agent-0.5.4}/src/codee_tasks_jira/test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codee-agent
3
- Version: 0.5.3
3
+ Version: 0.5.4
4
4
  Summary: A virtual co-worker that picks up Jira and Azure DevOps tasks and solves them with coding agents.
5
5
  Keywords: ai,agent,jira,azure-devops,claude-code,github-copilot,automation
6
6
  Author: Denis Kibalko
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "codee-agent"
3
- version = "0.5.3"
3
+ version = "0.5.4"
4
4
  description = "A virtual co-worker that picks up Jira and Azure DevOps tasks and solves them with coding agents."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -1397,7 +1397,9 @@ class AdminService:
1397
1397
  "fill in every field above.")
1398
1398
  try:
1399
1399
  agent = self._build_coding_agent()
1400
- response = agent.run(_mcp_check_prompt(server_name, steps), session_id)
1400
+ response = agent.run(
1401
+ _mcp_check_prompt(server_name, steps), session_id,
1402
+ agent.best_model())
1401
1403
  except Exception as exc:
1402
1404
  return _check(MCP_CHECK, False, f"The coding agent failed: {exc}")
1403
1405
  return _mcp_check_result(server_name, response)
@@ -1436,6 +1436,7 @@ class VerifyTasksMcpCheckTest(unittest.TestCase):
1436
1436
  "jira", self.JIRA_CREDENTIALS))
1437
1437
  self.assertEqual([check["name"] for check in checks],
1438
1438
  [TASKS_CHECK, MCP_CHECK])
1439
+ self.agent = agent
1439
1440
  self.prompt = agent.run.call_args.args[0] if agent.run.called else ""
1440
1441
  return checks[1]
1441
1442
 
@@ -1462,6 +1463,42 @@ class VerifyTasksMcpCheckTest(unittest.TestCase):
1462
1463
  self.assertIn("CORE-42", check["message"])
1463
1464
  self.assertIn("Done", check["message"])
1464
1465
 
1466
+ def test_azure_devops_mcp_check_uses_the_agents_best_model(self) -> None:
1467
+ class AzureProvider:
1468
+ MCP_SERVER_NAME = "ado"
1469
+
1470
+ def mcp_check_steps(self, summary: str) -> list[str]:
1471
+ return [f"Create {summary}"]
1472
+
1473
+ with tempfile.TemporaryDirectory() as temporary_directory:
1474
+ service = self._service(Path(temporary_directory))
1475
+ agent = Mock(**{
1476
+ "best_model.return_value": "claude-opus-5",
1477
+ "run.return_value": '{"ok": true, "task": "42"}',
1478
+ })
1479
+
1480
+ with patch.object(service, "tasks_mcp_configured",
1481
+ return_value=True), \
1482
+ patch.object(AdminService, "_build_coding_agent",
1483
+ return_value=agent):
1484
+ check = service._check_tasks_mcp(
1485
+ "azure_devops", AzureProvider(), blocked=False)
1486
+
1487
+ self.assertTrue(check["ok"], check["message"])
1488
+ agent.best_model.assert_called_once_with()
1489
+ self.assertEqual(agent.run.call_args.args[2], "claude-opus-5")
1490
+
1491
+ def test_jira_mcp_check_uses_the_agents_best_model(self) -> None:
1492
+ with tempfile.TemporaryDirectory() as temporary_directory:
1493
+ service = self._service(Path(temporary_directory))
1494
+
1495
+ self._run(service, '{"ok": true, "task": "CORE-1"}')
1496
+
1497
+ self.agent.best_model.assert_called_once_with()
1498
+ self.assertEqual(
1499
+ self.agent.run.call_args.args[2],
1500
+ self.agent.best_model.return_value)
1501
+
1465
1502
  def test_the_prompt_forbids_every_route_other_than_mcp(self) -> None:
1466
1503
  with tempfile.TemporaryDirectory() as temporary_directory:
1467
1504
  service = self._service(Path(temporary_directory))
File without changes
File without changes