codee-agent 0.6.5__tar.gz → 0.6.6__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.6.5 → codee_agent-0.6.6}/PKG-INFO +1 -1
- {codee_agent-0.6.5 → codee_agent-0.6.6}/pyproject.toml +1 -1
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/admin.py +140 -5
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/admin_service.py +4 -3
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/test_admin_service.py +7 -3
- {codee_agent-0.6.5 → codee_agent-0.6.6}/LICENSE +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/README.md +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/.gitignore +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/__init__.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/admin_api.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/admin_cli.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/agent_cli.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/coding_agents.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/executor.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/init_cli.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/lib/__init__.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/lib/claude_key_rotation.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/lib/cron_describe.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/lib/mcp_config.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/lib/runs_db.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/lib/test_claude_key_rotation.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/lib/test_mcp_config.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/lib/test_runs_db.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/lib/test_trigger_cron_skills.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/lib/test_trigger_issue_skills.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/lib/trigger_aws_sqs_skills.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/lib/trigger_cron_skills.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/lib/trigger_email_skills.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/lib/trigger_issue_skills.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/mail_server.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/setup_wizard.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/start_cli.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/tasks_providers.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/AGENTS.md +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/CLAUDE.md +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/skills/aws-sqs-alarm-response/SKILL.md +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/skills/cron-research-5xx-errors/SKILL.md +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/skills/story-code-reviewer/SKILL.md +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/skills/story-developer/SKILL.md +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/skills/story-planner/SKILL.md +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/skills/story-planner/assets/readme-template.md +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/skills/story-qa/SKILL.md +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/skills/story-security-reviewer/SKILL.md +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/skills/task-code-reviewer/SKILL.md +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/skills/task-developer/SKILL.md +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/skills/task-qa/SKILL.md +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/skills/task-security-reviewer/SKILL.md +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/test_admin_api.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/test_admin_cli.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/test_agent_cli.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/test_coding_agents.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/test_executor.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/test_init_cli.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/test_memory_index.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/test_setup_wizard.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/test_start_cli.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/workflow_graph.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_admin/__init__.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_admin/codee_admin.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_agent_abstract/__init__.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_agent_abstract/provider.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_agent_claude_code/__init__.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_agent_claude_code/account.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_agent_claude_code/credentials.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_agent_claude_code/oauth.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_agent_claude_code/provider.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_agent_claude_code/test.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_agent_claude_code/usage.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_agent_codex/__init__.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_agent_codex/provider.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_agent_codex/test.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_agent_github_copilot/__init__.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_agent_github_copilot/provider.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_agent_github_copilot/test.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_database/__init__.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_database/claude_code_accounts.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_database/database.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_database/oauth_tokens.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_main_context/__init__.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_main_context/context.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_main_context/logging.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_main_context/test_context.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_main_context/test_logging.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_tasks_abstract/__init__.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_tasks_abstract/provider.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_tasks_azure_devops/__init__.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_tasks_azure_devops/oauth.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_tasks_azure_devops/provider.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_tasks_azure_devops/test.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_tasks_jira/__init__.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee_tasks_jira/provider.py +0 -0
- {codee_agent-0.6.5 → codee_agent-0.6.6}/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.6.
|
|
3
|
+
Version: 0.6.6
|
|
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,codex,automation
|
|
6
6
|
Author: Denis Kibalko
|
|
@@ -367,6 +367,10 @@ class AdminState(rx.State):
|
|
|
367
367
|
agent_test_messages: list[ConversationMessage] = []
|
|
368
368
|
agent_test_sending: bool = False
|
|
369
369
|
agent_test_generation: int = 0
|
|
370
|
+
agent_test_model: str = ""
|
|
371
|
+
agent_test_models: list[ModelOption] = []
|
|
372
|
+
agent_test_model_query: str = ""
|
|
373
|
+
agent_test_models_loading: bool = False
|
|
370
374
|
# Whether the executor runs Claude Code on the connected accounts instead
|
|
371
375
|
# of leaving ~/.claude/.credentials.json alone.
|
|
372
376
|
claude_code_rotate_keys: bool = False
|
|
@@ -475,6 +479,32 @@ class AdminState(rx.State):
|
|
|
475
479
|
return ""
|
|
476
480
|
return query
|
|
477
481
|
|
|
482
|
+
@rx.var
|
|
483
|
+
def filtered_agent_test_models(self) -> list[ModelOption]:
|
|
484
|
+
query = self.agent_test_model_query.strip().lower()
|
|
485
|
+
return [
|
|
486
|
+
model for model in self.agent_test_models
|
|
487
|
+
if not query or query in f"{model.name} {model.id}".lower()
|
|
488
|
+
]
|
|
489
|
+
|
|
490
|
+
@rx.var
|
|
491
|
+
def agent_test_model_label(self) -> str:
|
|
492
|
+
if not self.agent_test_model:
|
|
493
|
+
return "Agent default"
|
|
494
|
+
for model in self.agent_test_models:
|
|
495
|
+
if model.id == self.agent_test_model:
|
|
496
|
+
return model.name
|
|
497
|
+
return self.agent_test_model
|
|
498
|
+
|
|
499
|
+
@rx.var
|
|
500
|
+
def custom_agent_test_model_query(self) -> str:
|
|
501
|
+
query = self.agent_test_model_query.strip()
|
|
502
|
+
if not query or any(
|
|
503
|
+
model.id == query for model in self.agent_test_models
|
|
504
|
+
):
|
|
505
|
+
return ""
|
|
506
|
+
return query
|
|
507
|
+
|
|
478
508
|
@rx.var
|
|
479
509
|
def active_route(self) -> str:
|
|
480
510
|
return self.router.url.path.rstrip("/") or "/"
|
|
@@ -1527,13 +1557,17 @@ class AdminState(rx.State):
|
|
|
1527
1557
|
error = self._persist_settings()
|
|
1528
1558
|
return rx.toast.error(error) if error else rx.toast.success("Settings saved")
|
|
1529
1559
|
|
|
1530
|
-
def open_agent_test(self) ->
|
|
1560
|
+
def open_agent_test(self) -> Any:
|
|
1531
1561
|
self.agent_test_input = ""
|
|
1532
1562
|
self.agent_test_session_id = ""
|
|
1533
1563
|
self.agent_test_messages = []
|
|
1534
1564
|
self.agent_test_sending = False
|
|
1535
1565
|
self.agent_test_generation += 1
|
|
1566
|
+
self.agent_test_model = ""
|
|
1567
|
+
self.agent_test_models = []
|
|
1568
|
+
self.agent_test_model_query = ""
|
|
1536
1569
|
self.agent_test_open = True
|
|
1570
|
+
return AdminState.load_agent_test_models
|
|
1537
1571
|
|
|
1538
1572
|
def set_agent_test_open(self, open_: bool) -> None:
|
|
1539
1573
|
self.agent_test_open = open_
|
|
@@ -1544,6 +1578,28 @@ class AdminState(rx.State):
|
|
|
1544
1578
|
def set_agent_test_input(self, value: str) -> None:
|
|
1545
1579
|
self.agent_test_input = value
|
|
1546
1580
|
|
|
1581
|
+
def set_agent_test_model_query(self, value: str) -> None:
|
|
1582
|
+
self.agent_test_model_query = value
|
|
1583
|
+
|
|
1584
|
+
def choose_agent_test_model(self, model_id: str) -> None:
|
|
1585
|
+
self.agent_test_model = model_id.strip()
|
|
1586
|
+
self.agent_test_model_query = ""
|
|
1587
|
+
|
|
1588
|
+
@rx.event(background=True)
|
|
1589
|
+
async def load_agent_test_models(self) -> None:
|
|
1590
|
+
async with self:
|
|
1591
|
+
agent = self.coding_agent
|
|
1592
|
+
self.agent_test_models_loading = True
|
|
1593
|
+
try:
|
|
1594
|
+
models = await asyncio.to_thread(SERVICE.list_agent_models, agent)
|
|
1595
|
+
except Exception:
|
|
1596
|
+
models = []
|
|
1597
|
+
async with self:
|
|
1598
|
+
if self.coding_agent != agent:
|
|
1599
|
+
return
|
|
1600
|
+
self.agent_test_models = [ModelOption(**model) for model in models]
|
|
1601
|
+
self.agent_test_models_loading = False
|
|
1602
|
+
|
|
1547
1603
|
@rx.event(background=True)
|
|
1548
1604
|
async def send_agent_test_message(self) -> Any:
|
|
1549
1605
|
async with self:
|
|
@@ -1552,6 +1608,7 @@ class AdminState(rx.State):
|
|
|
1552
1608
|
return
|
|
1553
1609
|
agent = self.coding_agent
|
|
1554
1610
|
session_id = self.agent_test_session_id
|
|
1611
|
+
model = self.agent_test_model
|
|
1555
1612
|
generation = self.agent_test_generation
|
|
1556
1613
|
self.agent_test_input = ""
|
|
1557
1614
|
self.agent_test_sending = True
|
|
@@ -1565,6 +1622,7 @@ class AdminState(rx.State):
|
|
|
1565
1622
|
agent,
|
|
1566
1623
|
message,
|
|
1567
1624
|
session_id,
|
|
1625
|
+
model,
|
|
1568
1626
|
)
|
|
1569
1627
|
except Exception as error:
|
|
1570
1628
|
async with self:
|
|
@@ -2131,7 +2189,7 @@ def model_menu_item(button: rx.Component) -> rx.Component:
|
|
|
2131
2189
|
return rx.popover.close(rx.flex(button, width="100%"), width="100%")
|
|
2132
2190
|
|
|
2133
2191
|
|
|
2134
|
-
def
|
|
2192
|
+
def _model_option_row(option: ModelOption, choose_model: Any) -> rx.Component:
|
|
2135
2193
|
"""One row of the model picker: friendly name left, model code right."""
|
|
2136
2194
|
return model_menu_item(
|
|
2137
2195
|
rx.button(
|
|
@@ -2143,7 +2201,15 @@ def model_option_row(option: ModelOption) -> rx.Component:
|
|
|
2143
2201
|
align="center", spacing="2", width="100%"),
|
|
2144
2202
|
variant="ghost", color_scheme="gray", width="100%",
|
|
2145
2203
|
justify_content="start", padding="0.45rem 0.6rem",
|
|
2146
|
-
on_click=
|
|
2204
|
+
on_click=choose_model(option.id)))
|
|
2205
|
+
|
|
2206
|
+
|
|
2207
|
+
def model_option_row(option: ModelOption) -> rx.Component:
|
|
2208
|
+
return _model_option_row(option, AdminState.choose_model)
|
|
2209
|
+
|
|
2210
|
+
|
|
2211
|
+
def agent_test_model_option_row(option: ModelOption) -> rx.Component:
|
|
2212
|
+
return _model_option_row(option, AdminState.choose_agent_test_model)
|
|
2147
2213
|
|
|
2148
2214
|
|
|
2149
2215
|
def agent_picker() -> rx.Component:
|
|
@@ -3309,6 +3375,72 @@ def agent_test_dialog() -> rx.Component:
|
|
|
3309
3375
|
rx.dialog.description(
|
|
3310
3376
|
"Chat with the selected coding agent in the Codee project.",
|
|
3311
3377
|
color=MUTED),
|
|
3378
|
+
field(
|
|
3379
|
+
"Model",
|
|
3380
|
+
rx.popover.root(
|
|
3381
|
+
rx.popover.trigger(
|
|
3382
|
+
rx.button(
|
|
3383
|
+
rx.hstack(
|
|
3384
|
+
rx.text(AdminState.agent_test_model_label),
|
|
3385
|
+
rx.spacer(),
|
|
3386
|
+
rx.icon("chevrons-up-down", size=14),
|
|
3387
|
+
align="center", width="100%"),
|
|
3388
|
+
variant="surface", color_scheme="gray",
|
|
3389
|
+
width="100%", type="button")),
|
|
3390
|
+
rx.popover.content(
|
|
3391
|
+
rx.vstack(
|
|
3392
|
+
rx.input(
|
|
3393
|
+
placeholder=(
|
|
3394
|
+
"Search models, or type a model code"),
|
|
3395
|
+
value=AdminState.agent_test_model_query,
|
|
3396
|
+
on_change=AdminState.set_agent_test_model_query,
|
|
3397
|
+
auto_focus=True, width="100%"),
|
|
3398
|
+
rx.cond(
|
|
3399
|
+
AdminState.custom_agent_test_model_query != "",
|
|
3400
|
+
model_menu_item(
|
|
3401
|
+
rx.button(
|
|
3402
|
+
rx.hstack(
|
|
3403
|
+
rx.icon("plus", size=14),
|
|
3404
|
+
rx.text("Use "),
|
|
3405
|
+
rx.code(
|
|
3406
|
+
AdminState.custom_agent_test_model_query),
|
|
3407
|
+
align="center", spacing="2"),
|
|
3408
|
+
variant="soft", width="100%",
|
|
3409
|
+
justify_content="start",
|
|
3410
|
+
padding="0.45rem 0.6rem",
|
|
3411
|
+
on_click=AdminState.choose_agent_test_model(
|
|
3412
|
+
AdminState.custom_agent_test_model_query)))),
|
|
3413
|
+
rx.scroll_area(
|
|
3414
|
+
rx.vstack(
|
|
3415
|
+
model_menu_item(
|
|
3416
|
+
rx.button(
|
|
3417
|
+
"Agent default", variant="ghost",
|
|
3418
|
+
color_scheme="gray", width="100%",
|
|
3419
|
+
justify_content="start",
|
|
3420
|
+
padding="0.45rem 0.6rem",
|
|
3421
|
+
on_click=AdminState.choose_agent_test_model(""))),
|
|
3422
|
+
rx.foreach(
|
|
3423
|
+
AdminState.filtered_agent_test_models,
|
|
3424
|
+
agent_test_model_option_row),
|
|
3425
|
+
rx.cond(
|
|
3426
|
+
AdminState.agent_test_models_loading,
|
|
3427
|
+
rx.text(
|
|
3428
|
+
"Loading models from the coding agent…",
|
|
3429
|
+
color=MUTED, font_size="0.8rem",
|
|
3430
|
+
padding="0.5rem")),
|
|
3431
|
+
spacing="1", width="100%"),
|
|
3432
|
+
type="auto", scrollbars="vertical",
|
|
3433
|
+
max_height="15rem", width="100%"),
|
|
3434
|
+
spacing="2", width="100%"),
|
|
3435
|
+
width="24rem", max_width="calc(100vw - 3rem)")),
|
|
3436
|
+
rx.text(
|
|
3437
|
+
rx.cond(
|
|
3438
|
+
AdminState.agent_test_model == "",
|
|
3439
|
+
"Runs on whatever that agent defaults to.",
|
|
3440
|
+
rx.fragment("Uses ",
|
|
3441
|
+
rx.code(AdminState.agent_test_model),
|
|
3442
|
+
" for this conversation.")),
|
|
3443
|
+
color=MUTED, font_size="0.82rem")),
|
|
3312
3444
|
rx.scroll_area(
|
|
3313
3445
|
rx.vstack(
|
|
3314
3446
|
rx.cond(
|
|
@@ -3374,7 +3506,7 @@ def settings_page() -> rx.Component:
|
|
|
3374
3506
|
rx.heading("Coding agent", size="4", margin_bottom="1rem"),
|
|
3375
3507
|
rx.vstack(
|
|
3376
3508
|
field("Default agent",
|
|
3377
|
-
rx.
|
|
3509
|
+
rx.grid(
|
|
3378
3510
|
rx.select(
|
|
3379
3511
|
["claude_code", "github_copilot", "codex"],
|
|
3380
3512
|
value=AdminState.coding_agent,
|
|
@@ -3384,7 +3516,10 @@ def settings_page() -> rx.Component:
|
|
|
3384
3516
|
"Test conversation", variant="outline",
|
|
3385
3517
|
white_space="nowrap",
|
|
3386
3518
|
on_click=AdminState.open_agent_test),
|
|
3387
|
-
|
|
3519
|
+
grid_template_columns=rx.breakpoints(
|
|
3520
|
+
initial="minmax(0, 1fr)",
|
|
3521
|
+
md="minmax(0, 1fr) auto"),
|
|
3522
|
+
width="100%", gap="0.75rem")),
|
|
3388
3523
|
field("Max parallel tasks",
|
|
3389
3524
|
rx.input(value=AdminState.max_parallel_agents,
|
|
3390
3525
|
on_change=AdminState.set_max_parallel_agents,
|
|
@@ -2444,7 +2444,8 @@ class AdminService:
|
|
|
2444
2444
|
raise RuntimeError(str(exc)) from exc
|
|
2445
2445
|
|
|
2446
2446
|
def test_agent_conversation(
|
|
2447
|
-
self, agent_code: str, user_message: str, session_id: str = ""
|
|
2447
|
+
self, agent_code: str, user_message: str, session_id: str = "",
|
|
2448
|
+
model: str = "",
|
|
2448
2449
|
) -> tuple[str, str]:
|
|
2449
2450
|
"""Run one turn with the selected agent and return reply plus session id."""
|
|
2450
2451
|
selected = resolve_agent_code(agent_code)
|
|
@@ -2459,10 +2460,10 @@ class AdminService:
|
|
|
2459
2460
|
|
|
2460
2461
|
if session_id:
|
|
2461
2462
|
response = agent.continue_conversation(
|
|
2462
|
-
user_message, session_id, on_session_id=opened)
|
|
2463
|
+
user_message, session_id, model, on_session_id=opened)
|
|
2463
2464
|
else:
|
|
2464
2465
|
response = agent.run(
|
|
2465
|
-
user_message, actual_session_id, on_session_id=opened)
|
|
2466
|
+
user_message, actual_session_id, model, on_session_id=opened)
|
|
2466
2467
|
return response, actual_session_id
|
|
2467
2468
|
|
|
2468
2469
|
def setup_tasks_mcp(
|
|
@@ -182,23 +182,27 @@ class TestAgentConversationTest(unittest.TestCase):
|
|
|
182
182
|
agent.run.side_effect = run
|
|
183
183
|
|
|
184
184
|
response, session_id = self.service.test_agent_conversation(
|
|
185
|
-
"codex", "Hello")
|
|
185
|
+
"codex", "Hello", model="gpt-6-astra")
|
|
186
186
|
|
|
187
187
|
self.assertEqual(response, "Final response")
|
|
188
188
|
self.assertEqual(session_id, "agent-thread")
|
|
189
189
|
build_agent.assert_called_once_with(
|
|
190
190
|
self.service.context.settings, Path("/repo"), CodingAgent.CODEX)
|
|
191
|
+
self.assertEqual(agent.run.call_args.args[2], "gpt-6-astra")
|
|
191
192
|
|
|
192
193
|
@patch("codee.admin_service.build_coding_agent")
|
|
193
194
|
def test_later_turn_resumes_the_same_session(self, build_agent) -> None:
|
|
194
195
|
build_agent.return_value.continue_conversation.return_value = "Still here"
|
|
195
196
|
|
|
196
197
|
response, session_id = self.service.test_agent_conversation(
|
|
197
|
-
"github_copilot", "What did I ask?", "same-thread"
|
|
198
|
+
"github_copilot", "What did I ask?", "same-thread",
|
|
199
|
+
"claude-opus-5")
|
|
198
200
|
|
|
199
201
|
self.assertEqual((response, session_id), ("Still here", "same-thread"))
|
|
200
202
|
call = build_agent.return_value.continue_conversation.call_args
|
|
201
|
-
self.assertEqual(
|
|
203
|
+
self.assertEqual(
|
|
204
|
+
call.args[:3],
|
|
205
|
+
("What did I ask?", "same-thread", "claude-opus-5"))
|
|
202
206
|
|
|
203
207
|
|
|
204
208
|
class AdminServiceWorkItemsTest(unittest.TestCase):
|
|
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
|
{codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/skills/aws-sqs-alarm-response/SKILL.md
RENAMED
|
File without changes
|
{codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/skills/cron-research-5xx-errors/SKILL.md
RENAMED
|
File without changes
|
{codee_agent-0.6.5 → codee_agent-0.6.6}/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
|
{codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/skills/story-security-reviewer/SKILL.md
RENAMED
|
File without changes
|
{codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/skills/task-code-reviewer/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codee_agent-0.6.5 → codee_agent-0.6.6}/src/codee/templates/skills/task-security-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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|