codee-agent 0.1.0__tar.gz → 0.1.1__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 (68) hide show
  1. {codee_agent-0.1.0 → codee_agent-0.1.1}/PKG-INFO +1 -1
  2. {codee_agent-0.1.0 → codee_agent-0.1.1}/pyproject.toml +1 -1
  3. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/test_trigger_cron_skills.py +32 -0
  4. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/trigger_aws_sqs_skills.py +27 -1
  5. {codee_agent-0.1.0 → codee_agent-0.1.1}/LICENSE +0 -0
  6. {codee_agent-0.1.0 → codee_agent-0.1.1}/README.md +0 -0
  7. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/.gitignore +0 -0
  8. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/__init__.py +0 -0
  9. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/admin.py +0 -0
  10. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/admin_api.py +0 -0
  11. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/admin_cli.py +0 -0
  12. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/admin_service.py +0 -0
  13. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/executor.py +0 -0
  14. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/init_cli.py +0 -0
  15. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/__init__.py +0 -0
  16. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/cron_describe.py +0 -0
  17. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/runs_db.py +0 -0
  18. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/test_runs_db.py +0 -0
  19. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/test_trigger_issue_skills.py +0 -0
  20. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/trigger_cron_skills.py +0 -0
  21. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/trigger_email_skills.py +0 -0
  22. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/trigger_issue_skills.py +0 -0
  23. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/mail_server.py +0 -0
  24. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/start_cli.py +0 -0
  25. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/AGENTS.md +0 -0
  26. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/CLAUDE.md +0 -0
  27. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/aws-sqs-alarm-response/SKILL.md +0 -0
  28. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/cron-research-5xx-errors/SKILL.md +0 -0
  29. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/story-code-reviewer/SKILL.md +0 -0
  30. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/story-developer/SKILL.md +0 -0
  31. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/story-planner/SKILL.md +0 -0
  32. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/story-planner/assets/readme-template.md +0 -0
  33. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/story-qa/SKILL.md +0 -0
  34. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/task-developer/SKILL.md +0 -0
  35. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/task-qa/SKILL.md +0 -0
  36. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/test_admin_api.py +0 -0
  37. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/test_admin_cli.py +0 -0
  38. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/test_admin_service.py +0 -0
  39. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/test_executor.py +0 -0
  40. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/test_init_cli.py +0 -0
  41. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/test_memory_index.py +0 -0
  42. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/test_start_cli.py +0 -0
  43. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/workflow_graph.py +0 -0
  44. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_admin/__init__.py +0 -0
  45. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_admin/codee_admin.py +0 -0
  46. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_agent_abstract/__init__.py +0 -0
  47. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_agent_abstract/provider.py +0 -0
  48. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_agent_claude_code/__init__.py +0 -0
  49. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_agent_claude_code/provider.py +0 -0
  50. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_agent_github_copilot/__init__.py +0 -0
  51. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_agent_github_copilot/provider.py +0 -0
  52. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_agent_github_copilot/test.py +0 -0
  53. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_database/__init__.py +0 -0
  54. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_database/database.py +0 -0
  55. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_database/oauth_tokens.py +0 -0
  56. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_main_context/__init__.py +0 -0
  57. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_main_context/context.py +0 -0
  58. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_main_context/logging.py +0 -0
  59. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_main_context/test_logging.py +0 -0
  60. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_tasks_abstract/__init__.py +0 -0
  61. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_tasks_abstract/provider.py +0 -0
  62. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_tasks_azure_devops/__init__.py +0 -0
  63. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_tasks_azure_devops/oauth.py +0 -0
  64. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_tasks_azure_devops/provider.py +0 -0
  65. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_tasks_azure_devops/test.py +0 -0
  66. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_tasks_jira/__init__.py +0 -0
  67. {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_tasks_jira/provider.py +0 -0
  68. {codee_agent-0.1.0 → codee_agent-0.1.1}/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.1.0
3
+ Version: 0.1.1
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.1.0"
3
+ version = "0.1.1"
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"
@@ -6,11 +6,13 @@ import unittest
6
6
  import sys
7
7
  from datetime import datetime, timedelta
8
8
  from pathlib import Path
9
+ from unittest.mock import patch
9
10
 
10
11
  sys.path.insert(0, str(Path(__file__).parent))
11
12
 
12
13
  from codee_main_context.context import CodeeMainContext
13
14
 
15
+ from codee.lib import trigger_aws_sqs_skills as trigger_aws_sqs_skills_module
14
16
  from codee.lib.trigger_aws_sqs_skills import (
15
17
  AwsSqsMessage,
16
18
  find_aws_sqs_triggered_skills,
@@ -480,6 +482,36 @@ class CronSkillTests(unittest.TestCase):
480
482
  self.assertTrue(calls[0][1])
481
483
  self.assertEqual(sqs_source.deleted, [message])
482
484
 
485
+ def test_reconcile_survives_unconfigured_aws_client(self):
486
+ def run_claude(user_message: str, session_id: str, model: str = "") -> str:
487
+ raise AssertionError("should not run without an SQS client")
488
+
489
+ with tempfile.TemporaryDirectory() as temp_dir:
490
+ root = Path(temp_dir)
491
+ skills_dir = root / "skills"
492
+ skill_dir = skills_dir / "sqs-check"
493
+ skill_dir.mkdir(parents=True)
494
+ (skill_dir / "SKILL.md").write_text(
495
+ "---\n"
496
+ "name: SQS Check\n"
497
+ "disable-model-invocation: true\n"
498
+ "x-codee-trigger: aws-sqs\n"
499
+ "x-codee-aws-sqs-queue: codee-queue\n"
500
+ "---\n\n"
501
+ "Process this content: {CONTENT}\n"
502
+ )
503
+
504
+ with patch.object(
505
+ trigger_aws_sqs_skills_module,
506
+ "Boto3AwsSqsMessageSource",
507
+ side_effect=Exception("You must specify a region."),
508
+ ):
509
+ trigger_aws_sqs_skills(
510
+ run_claude,
511
+ skills_dir=skills_dir,
512
+ main_context=_ctx(root),
513
+ )
514
+
483
515
 
484
516
  if __name__ == "__main__":
485
517
  unittest.main()
@@ -53,7 +53,9 @@ def trigger_aws_sqs_skills(
53
53
  return
54
54
 
55
55
  if sqs_message_source is None:
56
- sqs_message_source = Boto3AwsSqsMessageSource()
56
+ sqs_message_source = _build_boto3_message_source()
57
+ if sqs_message_source is None:
58
+ return
57
59
 
58
60
  for skill in skills:
59
61
  try:
@@ -131,6 +133,30 @@ def find_aws_sqs_triggered_skills(skills_dir: Path = SKILLS_DIR) -> list[AwsSqsT
131
133
  return skills
132
134
 
133
135
 
136
+ def _build_boto3_message_source() -> "Boto3AwsSqsMessageSource | None":
137
+ """Build the SQS client, or return None when AWS isn't configured.
138
+
139
+ boto3 raises (NoRegionError, missing credentials, boto3 not installed) at
140
+ client construction. That must not abort the executor tick -- the rest of
141
+ run_once() still has cron skills, email skills and tasks to process -- so we
142
+ report it once per process and let SQS triggers stay idle.
143
+ """
144
+ global _boto3_unavailable_reported
145
+ try:
146
+ return Boto3AwsSqsMessageSource()
147
+ except Exception as exc:
148
+ if not _boto3_unavailable_reported:
149
+ _boto3_unavailable_reported = True
150
+ print(
151
+ f"[aws_sqs_skills] AWS SQS client unavailable ({exc}); SQS triggers "
152
+ "stay idle until AWS is configured (e.g. AWS_DEFAULT_REGION)."
153
+ )
154
+ return None
155
+
156
+
157
+ _boto3_unavailable_reported = False
158
+
159
+
134
160
  class Boto3AwsSqsMessageSource:
135
161
  def __init__(self, *, visibility_timeout: int = 7200) -> None:
136
162
  import boto3
File without changes
File without changes