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.
- {codee_agent-0.1.0 → codee_agent-0.1.1}/PKG-INFO +1 -1
- {codee_agent-0.1.0 → codee_agent-0.1.1}/pyproject.toml +1 -1
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/test_trigger_cron_skills.py +32 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/trigger_aws_sqs_skills.py +27 -1
- {codee_agent-0.1.0 → codee_agent-0.1.1}/LICENSE +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/README.md +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/.gitignore +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/__init__.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/admin.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/admin_api.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/admin_cli.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/admin_service.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/executor.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/init_cli.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/__init__.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/cron_describe.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/runs_db.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/test_runs_db.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/test_trigger_issue_skills.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/trigger_cron_skills.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/trigger_email_skills.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/lib/trigger_issue_skills.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/mail_server.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/start_cli.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/AGENTS.md +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/CLAUDE.md +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/aws-sqs-alarm-response/SKILL.md +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/cron-research-5xx-errors/SKILL.md +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/story-code-reviewer/SKILL.md +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/story-developer/SKILL.md +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/story-planner/SKILL.md +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/story-planner/assets/readme-template.md +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/story-qa/SKILL.md +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/task-developer/SKILL.md +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/task-qa/SKILL.md +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/test_admin_api.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/test_admin_cli.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/test_admin_service.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/test_executor.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/test_init_cli.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/test_memory_index.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/test_start_cli.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/workflow_graph.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_admin/__init__.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_admin/codee_admin.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_agent_abstract/__init__.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_agent_abstract/provider.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_agent_claude_code/__init__.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_agent_claude_code/provider.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_agent_github_copilot/__init__.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_agent_github_copilot/provider.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_agent_github_copilot/test.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_database/__init__.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_database/database.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_database/oauth_tokens.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_main_context/__init__.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_main_context/context.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_main_context/logging.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_main_context/test_logging.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_tasks_abstract/__init__.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_tasks_abstract/provider.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_tasks_azure_devops/__init__.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_tasks_azure_devops/oauth.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_tasks_azure_devops/provider.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_tasks_azure_devops/test.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_tasks_jira/__init__.py +0 -0
- {codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee_tasks_jira/provider.py +0 -0
- {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.
|
|
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
|
|
@@ -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 =
|
|
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
|
|
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
|
{codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/aws-sqs-alarm-response/SKILL.md
RENAMED
|
File without changes
|
{codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/cron-research-5xx-errors/SKILL.md
RENAMED
|
File without changes
|
{codee_agent-0.1.0 → codee_agent-0.1.1}/src/codee/templates/skills/story-code-reviewer/SKILL.md
RENAMED
|
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
|