roscoe 2.4.0__tar.gz → 2.4.2__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 (141) hide show
  1. {roscoe-2.4.0/roscoe.egg-info → roscoe-2.4.2}/PKG-INFO +1 -1
  2. {roscoe-2.4.0 → roscoe-2.4.2}/pyproject.toml +1 -1
  3. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/__init__.py +1 -1
  4. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/ticktick.py +54 -7
  5. {roscoe-2.4.0 → roscoe-2.4.2/roscoe.egg-info}/PKG-INFO +1 -1
  6. {roscoe-2.4.0 → roscoe-2.4.2}/LICENSE +0 -0
  7. {roscoe-2.4.0 → roscoe-2.4.2}/README.md +0 -0
  8. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/approval/__init__.py +0 -0
  9. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/approval/gate.py +0 -0
  10. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/__init__.py +0 -0
  11. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/build_command.py +0 -0
  12. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/build_ui.py +0 -0
  13. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/eval_command.py +0 -0
  14. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/eval_gui.py +0 -0
  15. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/google_auth_command.py +0 -0
  16. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/graph_command.py +0 -0
  17. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/gui_theme.py +0 -0
  18. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/init_command.py +0 -0
  19. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/main.py +0 -0
  20. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/monitor_command.py +0 -0
  21. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/monitor_gui.py +0 -0
  22. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/pricing_command.py +0 -0
  23. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/pricing_gui.py +0 -0
  24. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/run_command.py +0 -0
  25. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/run_web.py +0 -0
  26. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold/.env.example +0 -0
  27. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold/agent_config.yaml +0 -0
  28. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold/custom_ui_example.py +0 -0
  29. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold/db.py +0 -0
  30. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold/docs.md +0 -0
  31. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold/evals/test_cases.json +0 -0
  32. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold/main.py +0 -0
  33. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold/prompts/system.txt +0 -0
  34. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold/tools/my_tools.py +0 -0
  35. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold_nc/agent_config.yaml +0 -0
  36. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/scaffold_nc/workflow.yaml +0 -0
  37. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/validate_command.py +0 -0
  38. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/cli/wizard_gui.py +0 -0
  39. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/config/__init__.py +0 -0
  40. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/config/loader.py +0 -0
  41. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/__init__.py +0 -0
  42. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/_graph_base.py +0 -0
  43. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/base_connector.py +0 -0
  44. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/database.py +0 -0
  45. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/github.py +0 -0
  46. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/google_workspace.py +0 -0
  47. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/jira.py +0 -0
  48. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/notion.py +0 -0
  49. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/outlook.py +0 -0
  50. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/rest_api.py +0 -0
  51. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/servicenow.py +0 -0
  52. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/sharepoint.py +0 -0
  53. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/connectors/snowflake.py +0 -0
  54. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/core/__init__.py +0 -0
  55. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/core/agent_base.py +0 -0
  56. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/core/agent_result.py +0 -0
  57. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/core/agent_runner.py +0 -0
  58. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/core/executor.py +0 -0
  59. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/core/state.py +0 -0
  60. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/__init__.py +0 -0
  61. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/dataset.py +0 -0
  62. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/eval_runner.py +0 -0
  63. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/regression.py +0 -0
  64. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/report.py +0 -0
  65. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/scorers/__init__.py +0 -0
  66. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/scorers/_judge.py +0 -0
  67. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/scorers/base.py +0 -0
  68. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/scorers/hallucination.py +0 -0
  69. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/scorers/output_quality.py +0 -0
  70. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/evals/scorers/tool_usage.py +0 -0
  71. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/llm/__init__.py +0 -0
  72. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/llm/base_provider.py +0 -0
  73. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/llm/capability_map.py +0 -0
  74. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/llm/provider_factory.py +0 -0
  75. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/memory/__init__.py +0 -0
  76. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/memory/conversation.py +0 -0
  77. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/memory/knowledge.py +0 -0
  78. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/memory/persistent.py +0 -0
  79. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/middleware/__init__.py +0 -0
  80. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/middleware/audit_logger.py +0 -0
  81. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/middleware/cost_tracker.py +0 -0
  82. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/middleware/rate_limiter.py +0 -0
  83. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/middleware/retry.py +0 -0
  84. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/monitoring/__init__.py +0 -0
  85. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/monitoring/alerts.py +0 -0
  86. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/monitoring/dashboard.py +0 -0
  87. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/monitoring/exporters/__init__.py +0 -0
  88. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/monitoring/exporters/azure_monitor.py +0 -0
  89. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/monitoring/exporters/prometheus.py +0 -0
  90. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/monitoring/metrics.py +0 -0
  91. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/monitoring/notifier.py +0 -0
  92. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/monitoring/web.py +0 -0
  93. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/pricing.py +0 -0
  94. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/__init__.py +0 -0
  95. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/exec_assistant_agent/__init__.py +0 -0
  96. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/exec_assistant_agent/agent_config.yaml +0 -0
  97. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/exec_assistant_agent/prompts/system.txt +0 -0
  98. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/exec_assistant_agent/tools/__init__.py +0 -0
  99. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/exec_assistant_agent/tools/exec_tools.py +0 -0
  100. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/google_workspace_agent/agent_config.yaml +0 -0
  101. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/google_workspace_agent/prompts/system.txt +0 -0
  102. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/google_workspace_agent/tools/__init__.py +0 -0
  103. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/google_workspace_agent/tools/gws_tools.py +0 -0
  104. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/hr_agent/__init__.py +0 -0
  105. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/hr_agent/agent_config.yaml +0 -0
  106. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/hr_agent/prompts/system.txt +0 -0
  107. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/hr_agent/tools/__init__.py +0 -0
  108. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/hr_agent/tools/hr_tools.py +0 -0
  109. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/it_support_agent/__init__.py +0 -0
  110. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/it_support_agent/agent_config.yaml +0 -0
  111. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/it_support_agent/prompts/system.txt +0 -0
  112. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/it_support_agent/tools/__init__.py +0 -0
  113. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/it_support_agent/tools/it_tools.py +0 -0
  114. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/knowledge_base_agent/__init__.py +0 -0
  115. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/knowledge_base_agent/agent_config.yaml +0 -0
  116. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/knowledge_base_agent/prompts/system.txt +0 -0
  117. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/knowledge_base_agent/tools/__init__.py +0 -0
  118. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/knowledge_base_agent/tools/kb_tools.py +0 -0
  119. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/legal_agent/__init__.py +0 -0
  120. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/legal_agent/agent_config.yaml +0 -0
  121. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/legal_agent/prompts/system.txt +0 -0
  122. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/legal_agent/tools/__init__.py +0 -0
  123. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/templates/legal_agent/tools/legal_tools.py +0 -0
  124. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/tools/__init__.py +0 -0
  125. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/tools/decorator.py +0 -0
  126. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/workflow/__init__.py +0 -0
  127. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/workflow/diagram.py +0 -0
  128. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/workflow/executor.py +0 -0
  129. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/workflow/expressions.py +0 -0
  130. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/workflow/loader.py +0 -0
  131. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/workflow/registry.py +0 -0
  132. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/workflow/runner.py +0 -0
  133. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/workflow/schema.py +0 -0
  134. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe/workflow/validate.py +0 -0
  135. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe.egg-info/SOURCES.txt +0 -0
  136. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe.egg-info/dependency_links.txt +0 -0
  137. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe.egg-info/entry_points.txt +0 -0
  138. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe.egg-info/requires.txt +0 -0
  139. {roscoe-2.4.0 → roscoe-2.4.2}/roscoe.egg-info/top_level.txt +0 -0
  140. {roscoe-2.4.0 → roscoe-2.4.2}/setup.cfg +0 -0
  141. {roscoe-2.4.0 → roscoe-2.4.2}/tests/test_smoke.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: roscoe
3
- Version: 2.4.0
3
+ Version: 2.4.2
4
4
  Summary: roscoe — Ready-to-run Orchestration SDK: Configurable, Observable, Extensible.
5
5
  Author-email: rhealaloo <rhealaloo@gmail.com>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "roscoe"
7
- version = "2.4.0"
7
+ version = "2.4.2"
8
8
  description = "roscoe — Ready-to-run Orchestration SDK: Configurable, Observable, Extensible."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -13,6 +13,6 @@ os.environ.setdefault("USE_TORCH", "0")
13
13
  from roscoe.core.agent_result import AgentResult
14
14
  from roscoe.core.agent_runner import AgentRunner
15
15
 
16
- __version__ = "2.4.0"
16
+ __version__ = "2.4.2"
17
17
 
18
18
  __all__ = ["AgentRunner", "AgentResult", "__version__"]
@@ -32,7 +32,8 @@ _PRIORITIES = {"none": 0, "low": 1, "medium": 3, "high": 5}
32
32
 
33
33
 
34
34
  class TickTickConnector(BaseConnector):
35
- """Tools: list_projects, list_project_tasks, get_task, create_task, complete_task."""
35
+ """Tools: list_projects, list_project_tasks, get_task, create_task,
36
+ create_tasks_batch, complete_task."""
36
37
 
37
38
  def _base_url(self) -> str:
38
39
  return self.config.get("base_url", _BASE)
@@ -68,19 +69,15 @@ class TickTickConnector(BaseConnector):
68
69
  """Retrieve one TickTick task by id."""
69
70
  return self._request("GET", f"/project/{project_id}/task/{task_id}")
70
71
 
71
- def create_task(
72
+ def _create_one(
72
73
  title: str,
73
74
  content: str = "",
74
75
  project_id: str | None = None,
75
76
  due_date: str | None = None,
76
77
  priority: str = "none",
77
78
  is_all_day: bool = True,
79
+ checklist: list[str] | None = None,
78
80
  ) -> Any:
79
- """Create a TickTick task.
80
-
81
- due_date is ISO 8601 with an offset, e.g. '2026-08-03T09:00:00+0000'.
82
- priority is one of: none, low, medium, high.
83
- """
84
81
  if priority not in _PRIORITIES:
85
82
  raise ValueError(
86
83
  f"Unknown priority '{priority}'. Use one of: {', '.join(_PRIORITIES)}."
@@ -95,8 +92,55 @@ class TickTickConnector(BaseConnector):
95
92
  if due_date:
96
93
  payload["dueDate"] = due_date
97
94
  payload["isAllDay"] = is_all_day
95
+ if checklist:
96
+ payload["kind"] = "CHECKLIST"
97
+ payload["items"] = [{"title": item, "status": 0} for item in checklist]
98
98
  return self._request("POST", "/task", json=payload)
99
99
 
100
+ def create_task(
101
+ title: str,
102
+ content: str = "",
103
+ project_id: str | None = None,
104
+ due_date: str | None = None,
105
+ priority: str = "none",
106
+ is_all_day: bool = True,
107
+ checklist: list[str] | None = None,
108
+ ) -> Any:
109
+ """Create a TickTick task.
110
+
111
+ due_date is ISO 8601 with an offset, e.g. '2026-08-03T09:00:00+0000'.
112
+ priority is one of: none, low, medium, high.
113
+ checklist, if given, adds real checkable sub-items (TickTick's native
114
+ checklist) instead of plain text in content.
115
+ """
116
+ return _create_one(
117
+ title, content, project_id, due_date, priority, is_all_day, checklist
118
+ )
119
+
120
+ def create_tasks_batch(tasks: list[dict[str, Any]]) -> Any:
121
+ """Create several TickTick tasks in one call.
122
+
123
+ Each item in `tasks` takes the same fields as create_task: title
124
+ (required), content, project_id, due_date, priority (none/low/
125
+ medium/high), checklist (list of strings, becomes native checkable
126
+ sub-items). One tool call for the whole batch, so a workflow can
127
+ gate it behind a single `requires_approval` instead of one pause
128
+ per task.
129
+ """
130
+ created = [
131
+ _create_one(
132
+ title=t["title"],
133
+ content=t.get("content", ""),
134
+ project_id=t.get("project_id"),
135
+ due_date=t.get("due_date"),
136
+ priority=t.get("priority", "none"),
137
+ is_all_day=t.get("is_all_day", True),
138
+ checklist=t.get("checklist"),
139
+ )
140
+ for t in tasks
141
+ ]
142
+ return {"created": len(created), "tasks": created}
143
+
100
144
  def complete_task(project_id: str, task_id: str) -> Any:
101
145
  """Mark a TickTick task as complete."""
102
146
  return self._request(
@@ -110,5 +154,8 @@ class TickTickConnector(BaseConnector):
110
154
  ),
111
155
  StructuredTool.from_function(get_task, description=get_task.__doc__),
112
156
  StructuredTool.from_function(create_task, description=create_task.__doc__),
157
+ StructuredTool.from_function(
158
+ create_tasks_batch, description=create_tasks_batch.__doc__
159
+ ),
113
160
  StructuredTool.from_function(complete_task, description=complete_task.__doc__),
114
161
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: roscoe
3
- Version: 2.4.0
3
+ Version: 2.4.2
4
4
  Summary: roscoe — Ready-to-run Orchestration SDK: Configurable, Observable, Extensible.
5
5
  Author-email: rhealaloo <rhealaloo@gmail.com>
6
6
  License-Expression: MIT
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