codee-agent 0.5.3__tar.gz → 0.5.5__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.5}/PKG-INFO +1 -1
  2. {codee_agent-0.5.3 → codee_agent-0.5.5}/pyproject.toml +1 -1
  3. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/admin_service.py +3 -1
  4. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/test_admin_service.py +38 -1
  5. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_tasks_azure_devops/provider.py +4 -2
  6. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_tasks_azure_devops/test.py +1 -1
  7. {codee_agent-0.5.3 → codee_agent-0.5.5}/LICENSE +0 -0
  8. {codee_agent-0.5.3 → codee_agent-0.5.5}/README.md +0 -0
  9. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/.gitignore +0 -0
  10. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/__init__.py +0 -0
  11. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/admin.py +0 -0
  12. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/admin_api.py +0 -0
  13. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/admin_cli.py +0 -0
  14. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/agent_cli.py +0 -0
  15. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/coding_agents.py +0 -0
  16. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/executor.py +0 -0
  17. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/init_cli.py +0 -0
  18. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/lib/__init__.py +0 -0
  19. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/lib/cron_describe.py +0 -0
  20. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/lib/mcp_config.py +0 -0
  21. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/lib/runs_db.py +0 -0
  22. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/lib/test_mcp_config.py +0 -0
  23. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/lib/test_runs_db.py +0 -0
  24. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/lib/test_trigger_cron_skills.py +0 -0
  25. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/lib/test_trigger_issue_skills.py +0 -0
  26. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/lib/trigger_aws_sqs_skills.py +0 -0
  27. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/lib/trigger_cron_skills.py +0 -0
  28. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/lib/trigger_email_skills.py +0 -0
  29. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/lib/trigger_issue_skills.py +0 -0
  30. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/mail_server.py +0 -0
  31. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/setup_wizard.py +0 -0
  32. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/start_cli.py +0 -0
  33. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/tasks_providers.py +0 -0
  34. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/templates/AGENTS.md +0 -0
  35. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/templates/CLAUDE.md +0 -0
  36. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/templates/skills/aws-sqs-alarm-response/SKILL.md +0 -0
  37. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/templates/skills/cron-research-5xx-errors/SKILL.md +0 -0
  38. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/templates/skills/story-code-reviewer/SKILL.md +0 -0
  39. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/templates/skills/story-developer/SKILL.md +0 -0
  40. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/templates/skills/story-planner/SKILL.md +0 -0
  41. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/templates/skills/story-planner/assets/readme-template.md +0 -0
  42. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/templates/skills/story-qa/SKILL.md +0 -0
  43. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/templates/skills/story-security-reviewer/SKILL.md +0 -0
  44. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/templates/skills/task-code-reviewer/SKILL.md +0 -0
  45. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/templates/skills/task-developer/SKILL.md +0 -0
  46. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/templates/skills/task-qa/SKILL.md +0 -0
  47. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/templates/skills/task-security-reviewer/SKILL.md +0 -0
  48. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/test_admin_api.py +0 -0
  49. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/test_admin_cli.py +0 -0
  50. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/test_agent_cli.py +0 -0
  51. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/test_executor.py +0 -0
  52. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/test_init_cli.py +0 -0
  53. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/test_memory_index.py +0 -0
  54. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/test_setup_wizard.py +0 -0
  55. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/test_start_cli.py +0 -0
  56. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee/workflow_graph.py +0 -0
  57. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_admin/__init__.py +0 -0
  58. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_admin/codee_admin.py +0 -0
  59. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_agent_abstract/__init__.py +0 -0
  60. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_agent_abstract/provider.py +0 -0
  61. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_agent_claude_code/__init__.py +0 -0
  62. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_agent_claude_code/provider.py +0 -0
  63. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_agent_claude_code/test.py +0 -0
  64. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_agent_github_copilot/__init__.py +0 -0
  65. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_agent_github_copilot/provider.py +0 -0
  66. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_agent_github_copilot/test.py +0 -0
  67. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_database/__init__.py +0 -0
  68. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_database/database.py +0 -0
  69. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_database/oauth_tokens.py +0 -0
  70. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_main_context/__init__.py +0 -0
  71. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_main_context/context.py +0 -0
  72. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_main_context/logging.py +0 -0
  73. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_main_context/test_context.py +0 -0
  74. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_main_context/test_logging.py +0 -0
  75. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_tasks_abstract/__init__.py +0 -0
  76. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_tasks_abstract/provider.py +0 -0
  77. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_tasks_azure_devops/__init__.py +0 -0
  78. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_tasks_azure_devops/oauth.py +0 -0
  79. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_tasks_jira/__init__.py +0 -0
  80. {codee_agent-0.5.3 → codee_agent-0.5.5}/src/codee_tasks_jira/provider.py +0 -0
  81. {codee_agent-0.5.3 → codee_agent-0.5.5}/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.5
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.5"
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))
@@ -1682,7 +1719,7 @@ class SetupTasksMcpTest(unittest.TestCase):
1682
1719
  config = self._config(root)
1683
1720
  self.assertEqual(config["mcpServers"]["ado"], {
1684
1721
  "command": "npx",
1685
- "args": ["-y", "@azure-devops/mcp", "acme",
1722
+ "args": ["-y", "@azure-devops/mcp@2.8.0", "acme",
1686
1723
  "--authentication", "azcli"],
1687
1724
  })
1688
1725
  self.assertEqual(config["servers"]["ado"]["type"], "stdio")
@@ -44,8 +44,10 @@ _FIELDS = [
44
44
  _PRIORITY_NAMES = {1: "Highest", 2: "High", 3: "Medium", 4: "Low"}
45
45
 
46
46
  # Microsoft's own Azure DevOps MCP server, run from npm through `npx` so
47
- # nothing has to be installed alongside it.
48
- MCP_SERVER_PACKAGE = "@azure-devops/mcp"
47
+ # nothing has to be installed alongside it. Version 2.8.0 keeps work item
48
+ # creation compatible with coding agents that stringify the consolidated
49
+ # write tool's fields parameter introduced in 2.9.0.
50
+ MCP_SERVER_PACKAGE = "@azure-devops/mcp@2.8.0"
49
51
 
50
52
  # Ceiling the WIQL query is capped at, matching the JIRA provider's page size.
51
53
  _MAX_TASKS = 50
@@ -629,7 +629,7 @@ class AzureDevOpsMcpTest(unittest.TestCase):
629
629
 
630
630
  self.assertEqual(server.name, "ado")
631
631
  self.assertEqual(server.command, "npx")
632
- self.assertEqual(server.args, ["-y", "@azure-devops/mcp", "acme",
632
+ self.assertEqual(server.args, ["-y", "@azure-devops/mcp@2.8.0", "acme",
633
633
  "--authentication", "azcli"])
634
634
  # It signs in through `az login`, so it carries no credentials of ours.
635
635
  self.assertEqual(server.env, {})
File without changes
File without changes