codee-agent 0.1.0__py3-none-any.whl

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 (69) hide show
  1. codee/.gitignore +2 -0
  2. codee/__init__.py +0 -0
  3. codee/admin.py +1672 -0
  4. codee/admin_api.py +61 -0
  5. codee/admin_cli.py +86 -0
  6. codee/admin_service.py +1005 -0
  7. codee/executor.py +381 -0
  8. codee/init_cli.py +82 -0
  9. codee/lib/__init__.py +0 -0
  10. codee/lib/cron_describe.py +33 -0
  11. codee/lib/runs_db.py +195 -0
  12. codee/lib/test_runs_db.py +199 -0
  13. codee/lib/test_trigger_cron_skills.py +485 -0
  14. codee/lib/test_trigger_issue_skills.py +93 -0
  15. codee/lib/trigger_aws_sqs_skills.py +224 -0
  16. codee/lib/trigger_cron_skills.py +364 -0
  17. codee/lib/trigger_email_skills.py +225 -0
  18. codee/lib/trigger_issue_skills.py +107 -0
  19. codee/mail_server.py +45 -0
  20. codee/start_cli.py +98 -0
  21. codee/templates/AGENTS.md +42 -0
  22. codee/templates/CLAUDE.md +1 -0
  23. codee/templates/skills/aws-sqs-alarm-response/SKILL.md +23 -0
  24. codee/templates/skills/cron-research-5xx-errors/SKILL.md +17 -0
  25. codee/templates/skills/story-code-reviewer/SKILL.md +29 -0
  26. codee/templates/skills/story-developer/SKILL.md +26 -0
  27. codee/templates/skills/story-planner/SKILL.md +35 -0
  28. codee/templates/skills/story-planner/assets/readme-template.md +43 -0
  29. codee/templates/skills/story-qa/SKILL.md +28 -0
  30. codee/templates/skills/task-developer/SKILL.md +25 -0
  31. codee/templates/skills/task-qa/SKILL.md +26 -0
  32. codee/test_admin_api.py +64 -0
  33. codee/test_admin_cli.py +63 -0
  34. codee/test_admin_service.py +897 -0
  35. codee/test_executor.py +190 -0
  36. codee/test_init_cli.py +131 -0
  37. codee/test_memory_index.py +31 -0
  38. codee/test_start_cli.py +164 -0
  39. codee/workflow_graph.py +83 -0
  40. codee_admin/__init__.py +1 -0
  41. codee_admin/codee_admin.py +4 -0
  42. codee_agent-0.1.0.dist-info/METADATA +66 -0
  43. codee_agent-0.1.0.dist-info/RECORD +69 -0
  44. codee_agent-0.1.0.dist-info/WHEEL +4 -0
  45. codee_agent-0.1.0.dist-info/entry_points.txt +6 -0
  46. codee_agent-0.1.0.dist-info/licenses/LICENSE +21 -0
  47. codee_agent_abstract/__init__.py +0 -0
  48. codee_agent_abstract/provider.py +56 -0
  49. codee_agent_claude_code/__init__.py +0 -0
  50. codee_agent_claude_code/provider.py +90 -0
  51. codee_agent_github_copilot/__init__.py +0 -0
  52. codee_agent_github_copilot/provider.py +253 -0
  53. codee_agent_github_copilot/test.py +176 -0
  54. codee_database/__init__.py +0 -0
  55. codee_database/database.py +13 -0
  56. codee_database/oauth_tokens.py +148 -0
  57. codee_main_context/__init__.py +0 -0
  58. codee_main_context/context.py +127 -0
  59. codee_main_context/logging.py +111 -0
  60. codee_main_context/test_logging.py +90 -0
  61. codee_tasks_abstract/__init__.py +0 -0
  62. codee_tasks_abstract/provider.py +58 -0
  63. codee_tasks_azure_devops/__init__.py +0 -0
  64. codee_tasks_azure_devops/oauth.py +346 -0
  65. codee_tasks_azure_devops/provider.py +207 -0
  66. codee_tasks_azure_devops/test.py +462 -0
  67. codee_tasks_jira/__init__.py +0 -0
  68. codee_tasks_jira/provider.py +162 -0
  69. codee_tasks_jira/test.py +75 -0
@@ -0,0 +1,75 @@
1
+ import unittest
2
+ from unittest.mock import patch
3
+
4
+ from codee_tasks_jira.provider import JiraTasksProvider
5
+
6
+
7
+ def _issue(parent_labels: list[str] | None = None) -> dict:
8
+ issue = {"key": "CORE-1", "fields": {
9
+ "summary": "A task",
10
+ "status": {"name": "Ready"},
11
+ "issuetype": {"name": "Task"},
12
+ "priority": {"name": "High"},
13
+ "labels": [],
14
+ }}
15
+ if parent_labels is not None:
16
+ issue["fields"]["parent"] = {
17
+ "key": "CORE-9",
18
+ "fields": {"summary": "A story",
19
+ "status": {"name": "In Progress"},
20
+ "issuetype": {"name": "Story"},
21
+ "labels": parent_labels},
22
+ }
23
+ return issue
24
+
25
+
26
+ class JiraParentStoryTest(unittest.TestCase):
27
+ def setUp(self) -> None:
28
+ self.provider = JiraTasksProvider.__new__(JiraTasksProvider)
29
+
30
+ def test_parent_with_the_label_is_a_codee_story(self) -> None:
31
+ task = self.provider._to_task(_issue(["CodeeStory", "backend"]))
32
+
33
+ self.assertTrue(task.is_parent_codee_story)
34
+
35
+ def test_parent_without_the_label_is_not(self) -> None:
36
+ task = self.provider._to_task(_issue(["backend"]))
37
+
38
+ self.assertFalse(task.is_parent_codee_story)
39
+
40
+ def test_a_task_with_no_parent_is_not(self) -> None:
41
+ task = self.provider._to_task(_issue())
42
+
43
+ self.assertFalse(task.is_parent_codee_story)
44
+
45
+ def test_labels_missing_from_the_parent_are_fetched_once(self) -> None:
46
+ parent = _issue([])
47
+ del parent["fields"]["parent"]["fields"]["labels"]
48
+ task = self.provider._to_task(parent)
49
+
50
+ with patch.object(self.provider, "_fetch_issue_labels",
51
+ return_value=["CodeeStory"]) as fetch:
52
+ self.assertTrue(task.is_parent_codee_story)
53
+ self.assertTrue(task.is_parent_codee_story)
54
+
55
+ fetch.assert_called_once_with("CORE-9")
56
+
57
+
58
+ class JiraTasksProviderTest(unittest.TestCase):
59
+ def test_build_jql_uses_requested_statuses(self) -> None:
60
+ provider = JiraTasksProvider.__new__(JiraTasksProvider)
61
+ provider._project = "CORE"
62
+ provider._assignee_email = "agent@example.com"
63
+
64
+ jql = provider._build_jql(["Custom Ready", 'Needs "review"'])
65
+
66
+ self.assertIn('status in ("Custom Ready", "Needs \\"review\\"")', jql)
67
+ self.assertNotIn("[AI]", jql)
68
+
69
+
70
+ def main():
71
+ print("OK")
72
+
73
+
74
+ if __name__ == "__main__":
75
+ unittest.main()