superqode 0.1.5__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 (288) hide show
  1. superqode/__init__.py +33 -0
  2. superqode/acp/__init__.py +23 -0
  3. superqode/acp/client.py +913 -0
  4. superqode/acp/permission_screen.py +457 -0
  5. superqode/acp/types.py +480 -0
  6. superqode/acp_discovery.py +856 -0
  7. superqode/agent/__init__.py +22 -0
  8. superqode/agent/edit_strategies.py +334 -0
  9. superqode/agent/loop.py +892 -0
  10. superqode/agent/qe_report_templates.py +39 -0
  11. superqode/agent/system_prompts.py +353 -0
  12. superqode/agent_output.py +721 -0
  13. superqode/agent_stream.py +953 -0
  14. superqode/agents/__init__.py +59 -0
  15. superqode/agents/acp_registry.py +305 -0
  16. superqode/agents/client.py +249 -0
  17. superqode/agents/data/augmentcode.com.toml +51 -0
  18. superqode/agents/data/cagent.dev.toml +51 -0
  19. superqode/agents/data/claude.com.toml +60 -0
  20. superqode/agents/data/codeassistant.dev.toml +51 -0
  21. superqode/agents/data/codex.openai.com.toml +57 -0
  22. superqode/agents/data/fastagent.ai.toml +66 -0
  23. superqode/agents/data/geminicli.com.toml +77 -0
  24. superqode/agents/data/goose.block.xyz.toml +54 -0
  25. superqode/agents/data/junie.jetbrains.com.toml +56 -0
  26. superqode/agents/data/kimi.moonshot.cn.toml +57 -0
  27. superqode/agents/data/llmlingagent.dev.toml +51 -0
  28. superqode/agents/data/molt.bot.toml +49 -0
  29. superqode/agents/data/opencode.ai.toml +60 -0
  30. superqode/agents/data/stakpak.dev.toml +51 -0
  31. superqode/agents/data/vtcode.dev.toml +51 -0
  32. superqode/agents/discovery.py +266 -0
  33. superqode/agents/messaging.py +160 -0
  34. superqode/agents/persona.py +166 -0
  35. superqode/agents/registry.py +421 -0
  36. superqode/agents/schema.py +72 -0
  37. superqode/agents/unified.py +367 -0
  38. superqode/app/__init__.py +111 -0
  39. superqode/app/constants.py +314 -0
  40. superqode/app/css.py +366 -0
  41. superqode/app/models.py +118 -0
  42. superqode/app/suggester.py +125 -0
  43. superqode/app/widgets.py +1591 -0
  44. superqode/app_enhanced.py +399 -0
  45. superqode/app_main.py +17187 -0
  46. superqode/approval.py +312 -0
  47. superqode/atomic.py +296 -0
  48. superqode/commands/__init__.py +1 -0
  49. superqode/commands/acp.py +965 -0
  50. superqode/commands/agents.py +180 -0
  51. superqode/commands/auth.py +278 -0
  52. superqode/commands/config.py +374 -0
  53. superqode/commands/init.py +826 -0
  54. superqode/commands/providers.py +819 -0
  55. superqode/commands/qe.py +1145 -0
  56. superqode/commands/roles.py +380 -0
  57. superqode/commands/serve.py +172 -0
  58. superqode/commands/suggestions.py +127 -0
  59. superqode/commands/superqe.py +460 -0
  60. superqode/config/__init__.py +51 -0
  61. superqode/config/loader.py +812 -0
  62. superqode/config/schema.py +498 -0
  63. superqode/core/__init__.py +111 -0
  64. superqode/core/roles.py +281 -0
  65. superqode/danger.py +386 -0
  66. superqode/data/superqode-template.yaml +1522 -0
  67. superqode/design_system.py +1080 -0
  68. superqode/dialogs/__init__.py +6 -0
  69. superqode/dialogs/base.py +39 -0
  70. superqode/dialogs/model.py +130 -0
  71. superqode/dialogs/provider.py +870 -0
  72. superqode/diff_view.py +919 -0
  73. superqode/enterprise.py +21 -0
  74. superqode/evaluation/__init__.py +25 -0
  75. superqode/evaluation/adapters.py +93 -0
  76. superqode/evaluation/behaviors.py +89 -0
  77. superqode/evaluation/engine.py +209 -0
  78. superqode/evaluation/scenarios.py +96 -0
  79. superqode/execution/__init__.py +36 -0
  80. superqode/execution/linter.py +538 -0
  81. superqode/execution/modes.py +347 -0
  82. superqode/execution/resolver.py +283 -0
  83. superqode/execution/runner.py +642 -0
  84. superqode/file_explorer.py +811 -0
  85. superqode/file_viewer.py +471 -0
  86. superqode/flash.py +183 -0
  87. superqode/guidance/__init__.py +58 -0
  88. superqode/guidance/config.py +203 -0
  89. superqode/guidance/prompts.py +71 -0
  90. superqode/harness/__init__.py +54 -0
  91. superqode/harness/accelerator.py +291 -0
  92. superqode/harness/config.py +319 -0
  93. superqode/harness/validator.py +147 -0
  94. superqode/history.py +279 -0
  95. superqode/integrations/superopt_runner.py +124 -0
  96. superqode/logging/__init__.py +49 -0
  97. superqode/logging/adapters.py +219 -0
  98. superqode/logging/formatter.py +923 -0
  99. superqode/logging/integration.py +341 -0
  100. superqode/logging/sinks.py +170 -0
  101. superqode/logging/unified_log.py +417 -0
  102. superqode/lsp/__init__.py +26 -0
  103. superqode/lsp/client.py +544 -0
  104. superqode/main.py +1069 -0
  105. superqode/mcp/__init__.py +89 -0
  106. superqode/mcp/auth_storage.py +380 -0
  107. superqode/mcp/client.py +1236 -0
  108. superqode/mcp/config.py +319 -0
  109. superqode/mcp/integration.py +337 -0
  110. superqode/mcp/oauth.py +436 -0
  111. superqode/mcp/oauth_callback.py +385 -0
  112. superqode/mcp/types.py +290 -0
  113. superqode/memory/__init__.py +31 -0
  114. superqode/memory/feedback.py +342 -0
  115. superqode/memory/store.py +522 -0
  116. superqode/notifications.py +369 -0
  117. superqode/optimization/__init__.py +5 -0
  118. superqode/optimization/config.py +33 -0
  119. superqode/permissions/__init__.py +25 -0
  120. superqode/permissions/rules.py +488 -0
  121. superqode/plan.py +323 -0
  122. superqode/providers/__init__.py +33 -0
  123. superqode/providers/gateway/__init__.py +165 -0
  124. superqode/providers/gateway/base.py +228 -0
  125. superqode/providers/gateway/litellm_gateway.py +1170 -0
  126. superqode/providers/gateway/openresponses_gateway.py +436 -0
  127. superqode/providers/health.py +297 -0
  128. superqode/providers/huggingface/__init__.py +74 -0
  129. superqode/providers/huggingface/downloader.py +472 -0
  130. superqode/providers/huggingface/endpoints.py +442 -0
  131. superqode/providers/huggingface/hub.py +531 -0
  132. superqode/providers/huggingface/inference.py +394 -0
  133. superqode/providers/huggingface/transformers_runner.py +516 -0
  134. superqode/providers/local/__init__.py +100 -0
  135. superqode/providers/local/base.py +438 -0
  136. superqode/providers/local/discovery.py +418 -0
  137. superqode/providers/local/lmstudio.py +256 -0
  138. superqode/providers/local/mlx.py +457 -0
  139. superqode/providers/local/ollama.py +486 -0
  140. superqode/providers/local/sglang.py +268 -0
  141. superqode/providers/local/tgi.py +260 -0
  142. superqode/providers/local/tool_support.py +477 -0
  143. superqode/providers/local/vllm.py +258 -0
  144. superqode/providers/manager.py +1338 -0
  145. superqode/providers/models.py +1016 -0
  146. superqode/providers/models_dev.py +578 -0
  147. superqode/providers/openresponses/__init__.py +87 -0
  148. superqode/providers/openresponses/converters/__init__.py +17 -0
  149. superqode/providers/openresponses/converters/messages.py +343 -0
  150. superqode/providers/openresponses/converters/tools.py +268 -0
  151. superqode/providers/openresponses/schema/__init__.py +56 -0
  152. superqode/providers/openresponses/schema/models.py +585 -0
  153. superqode/providers/openresponses/streaming/__init__.py +5 -0
  154. superqode/providers/openresponses/streaming/parser.py +338 -0
  155. superqode/providers/openresponses/tools/__init__.py +21 -0
  156. superqode/providers/openresponses/tools/apply_patch.py +352 -0
  157. superqode/providers/openresponses/tools/code_interpreter.py +290 -0
  158. superqode/providers/openresponses/tools/file_search.py +333 -0
  159. superqode/providers/openresponses/tools/mcp_adapter.py +252 -0
  160. superqode/providers/registry.py +716 -0
  161. superqode/providers/usage.py +332 -0
  162. superqode/pure_mode.py +384 -0
  163. superqode/qr/__init__.py +23 -0
  164. superqode/qr/dashboard.py +781 -0
  165. superqode/qr/generator.py +1018 -0
  166. superqode/qr/templates.py +135 -0
  167. superqode/safety/__init__.py +41 -0
  168. superqode/safety/sandbox.py +413 -0
  169. superqode/safety/warnings.py +256 -0
  170. superqode/server/__init__.py +33 -0
  171. superqode/server/lsp_server.py +775 -0
  172. superqode/server/web.py +250 -0
  173. superqode/session/__init__.py +25 -0
  174. superqode/session/persistence.py +580 -0
  175. superqode/session/sharing.py +477 -0
  176. superqode/session.py +475 -0
  177. superqode/sidebar.py +2991 -0
  178. superqode/stream_view.py +648 -0
  179. superqode/styles/__init__.py +3 -0
  180. superqode/superqe/__init__.py +184 -0
  181. superqode/superqe/acp_runner.py +1064 -0
  182. superqode/superqe/constitution/__init__.py +62 -0
  183. superqode/superqe/constitution/evaluator.py +308 -0
  184. superqode/superqe/constitution/loader.py +432 -0
  185. superqode/superqe/constitution/schema.py +250 -0
  186. superqode/superqe/events.py +591 -0
  187. superqode/superqe/frameworks/__init__.py +65 -0
  188. superqode/superqe/frameworks/base.py +234 -0
  189. superqode/superqe/frameworks/e2e.py +263 -0
  190. superqode/superqe/frameworks/executor.py +237 -0
  191. superqode/superqe/frameworks/javascript.py +409 -0
  192. superqode/superqe/frameworks/python.py +373 -0
  193. superqode/superqe/frameworks/registry.py +92 -0
  194. superqode/superqe/mcp_tools/__init__.py +47 -0
  195. superqode/superqe/mcp_tools/core_tools.py +418 -0
  196. superqode/superqe/mcp_tools/registry.py +230 -0
  197. superqode/superqe/mcp_tools/testing_tools.py +167 -0
  198. superqode/superqe/noise.py +89 -0
  199. superqode/superqe/orchestrator.py +778 -0
  200. superqode/superqe/roles.py +609 -0
  201. superqode/superqe/session.py +713 -0
  202. superqode/superqe/skills/__init__.py +57 -0
  203. superqode/superqe/skills/base.py +106 -0
  204. superqode/superqe/skills/core_skills.py +899 -0
  205. superqode/superqe/skills/registry.py +90 -0
  206. superqode/superqe/verifier.py +101 -0
  207. superqode/superqe_cli.py +76 -0
  208. superqode/tool_call.py +358 -0
  209. superqode/tools/__init__.py +93 -0
  210. superqode/tools/agent_tools.py +496 -0
  211. superqode/tools/base.py +324 -0
  212. superqode/tools/batch_tool.py +133 -0
  213. superqode/tools/diagnostics.py +311 -0
  214. superqode/tools/edit_tools.py +653 -0
  215. superqode/tools/enhanced_base.py +515 -0
  216. superqode/tools/file_tools.py +269 -0
  217. superqode/tools/file_tracking.py +45 -0
  218. superqode/tools/lsp_tools.py +610 -0
  219. superqode/tools/network_tools.py +350 -0
  220. superqode/tools/permissions.py +400 -0
  221. superqode/tools/question_tool.py +324 -0
  222. superqode/tools/search_tools.py +598 -0
  223. superqode/tools/shell_tools.py +259 -0
  224. superqode/tools/todo_tools.py +121 -0
  225. superqode/tools/validation.py +80 -0
  226. superqode/tools/web_tools.py +639 -0
  227. superqode/tui.py +1152 -0
  228. superqode/tui_integration.py +875 -0
  229. superqode/tui_widgets/__init__.py +27 -0
  230. superqode/tui_widgets/widgets/__init__.py +18 -0
  231. superqode/tui_widgets/widgets/progress.py +185 -0
  232. superqode/tui_widgets/widgets/tool_display.py +188 -0
  233. superqode/undo_manager.py +574 -0
  234. superqode/utils/__init__.py +5 -0
  235. superqode/utils/error_handling.py +323 -0
  236. superqode/utils/fuzzy.py +257 -0
  237. superqode/widgets/__init__.py +477 -0
  238. superqode/widgets/agent_collab.py +390 -0
  239. superqode/widgets/agent_store.py +936 -0
  240. superqode/widgets/agent_switcher.py +395 -0
  241. superqode/widgets/animation_manager.py +284 -0
  242. superqode/widgets/code_context.py +356 -0
  243. superqode/widgets/command_palette.py +412 -0
  244. superqode/widgets/connection_status.py +537 -0
  245. superqode/widgets/conversation_history.py +470 -0
  246. superqode/widgets/diff_indicator.py +155 -0
  247. superqode/widgets/enhanced_status_bar.py +385 -0
  248. superqode/widgets/enhanced_toast.py +476 -0
  249. superqode/widgets/file_browser.py +809 -0
  250. superqode/widgets/file_reference.py +585 -0
  251. superqode/widgets/issue_timeline.py +340 -0
  252. superqode/widgets/leader_key.py +264 -0
  253. superqode/widgets/mode_switcher.py +445 -0
  254. superqode/widgets/model_picker.py +234 -0
  255. superqode/widgets/permission_preview.py +1205 -0
  256. superqode/widgets/prompt.py +358 -0
  257. superqode/widgets/provider_connect.py +725 -0
  258. superqode/widgets/pty_shell.py +587 -0
  259. superqode/widgets/qe_dashboard.py +321 -0
  260. superqode/widgets/resizable_sidebar.py +377 -0
  261. superqode/widgets/response_changes.py +218 -0
  262. superqode/widgets/response_display.py +528 -0
  263. superqode/widgets/rich_tool_display.py +613 -0
  264. superqode/widgets/sidebar_panels.py +1180 -0
  265. superqode/widgets/slash_complete.py +356 -0
  266. superqode/widgets/split_view.py +612 -0
  267. superqode/widgets/status_bar.py +273 -0
  268. superqode/widgets/superqode_display.py +786 -0
  269. superqode/widgets/thinking_display.py +815 -0
  270. superqode/widgets/throbber.py +87 -0
  271. superqode/widgets/toast.py +206 -0
  272. superqode/widgets/unified_output.py +1073 -0
  273. superqode/workspace/__init__.py +75 -0
  274. superqode/workspace/artifacts.py +472 -0
  275. superqode/workspace/coordinator.py +353 -0
  276. superqode/workspace/diff_tracker.py +429 -0
  277. superqode/workspace/git_guard.py +373 -0
  278. superqode/workspace/git_snapshot.py +526 -0
  279. superqode/workspace/manager.py +750 -0
  280. superqode/workspace/snapshot.py +357 -0
  281. superqode/workspace/watcher.py +535 -0
  282. superqode/workspace/worktree.py +440 -0
  283. superqode-0.1.5.dist-info/METADATA +204 -0
  284. superqode-0.1.5.dist-info/RECORD +288 -0
  285. superqode-0.1.5.dist-info/WHEEL +5 -0
  286. superqode-0.1.5.dist-info/entry_points.txt +3 -0
  287. superqode-0.1.5.dist-info/licenses/LICENSE +648 -0
  288. superqode-0.1.5.dist-info/top_level.txt +1 -0
superqode/acp/types.py ADDED
@@ -0,0 +1,480 @@
1
+ """
2
+ ACP Protocol Types for SuperQode.
3
+
4
+ Based on https://agentclientprotocol.com/protocol/schema
5
+ """
6
+
7
+ from typing import TypedDict, Literal, Any, List, Dict, Optional, Union
8
+
9
+ try:
10
+ from typing import Required
11
+ except ImportError:
12
+ # Python < 3.12 compatibility
13
+ from typing_extensions import Required
14
+
15
+
16
+ # Client Capabilities
17
+ class FileSystemCapability(TypedDict, total=False):
18
+ readTextFile: bool
19
+ writeTextFile: bool
20
+
21
+
22
+ class ClientCapabilities(TypedDict, total=False):
23
+ fs: FileSystemCapability
24
+ terminal: bool
25
+
26
+
27
+ class Implementation(TypedDict, total=False):
28
+ name: str
29
+ title: Optional[str]
30
+ version: str
31
+
32
+
33
+ # Agent Capabilities
34
+ class PromptCapabilities(TypedDict, total=False):
35
+ audio: bool
36
+ embeddedContent: bool
37
+ image: bool
38
+
39
+
40
+ class AgentCapabilities(TypedDict, total=False):
41
+ loadSession: bool
42
+ promptCapabilities: PromptCapabilities
43
+
44
+
45
+ # Content Types
46
+ class TextContent(TypedDict, total=False):
47
+ type: str
48
+ text: str
49
+
50
+
51
+ class ImageContent(TypedDict, total=False):
52
+ type: str
53
+ data: str
54
+ mimeType: str
55
+
56
+
57
+ ContentBlock = Union[TextContent, ImageContent, Dict[str, Any]]
58
+
59
+
60
+ # Tool Call Types
61
+ ToolKind = Literal[
62
+ "read", "edit", "delete", "move", "search", "execute", "think", "fetch", "switch_mode", "other"
63
+ ]
64
+
65
+ ToolCallStatus = Literal["pending", "in_progress", "completed", "failed"]
66
+
67
+
68
+ class ToolCallLocation(TypedDict, total=False):
69
+ line: Optional[int]
70
+ path: str
71
+
72
+
73
+ class ToolCallContentDiff(TypedDict, total=False):
74
+ newText: str
75
+ oldText: Optional[str]
76
+ path: str
77
+ type: str
78
+
79
+
80
+ class ToolCallContentTerminal(TypedDict, total=False):
81
+ terminalId: str
82
+ type: str
83
+
84
+
85
+ ToolCallContent = Union[ToolCallContentDiff, ToolCallContentTerminal, Dict[str, Any]]
86
+
87
+
88
+ class ToolCall(TypedDict, total=False):
89
+ _meta: dict
90
+ content: List[ToolCallContent]
91
+ kind: str
92
+ locations: List[ToolCallLocation]
93
+ rawInput: dict
94
+ rawOutput: dict
95
+ sessionUpdate: str
96
+ status: str
97
+ title: str
98
+ toolCallId: str
99
+
100
+
101
+ class ToolCallUpdate(TypedDict, total=False):
102
+ _meta: dict
103
+ content: Optional[List[ToolCallContent]]
104
+ kind: Optional[str]
105
+ locations: Optional[list]
106
+ rawInput: dict
107
+ rawOutput: dict
108
+ sessionUpdate: str
109
+ status: Optional[str]
110
+ title: Optional[str]
111
+ toolCallId: str
112
+
113
+
114
+ # Permission Types
115
+ PermissionOptionKind = Literal["allow_once", "allow_always", "reject_once", "reject_always"]
116
+
117
+
118
+ class PermissionOption(TypedDict, total=False):
119
+ _meta: dict
120
+ kind: str
121
+ name: str
122
+ optionId: str
123
+
124
+
125
+ class PermissionRequest(TypedDict, total=False):
126
+ sessionId: str
127
+ options: List[PermissionOption]
128
+ toolCall: ToolCall
129
+
130
+
131
+ # Session Updates
132
+ class AgentMessageChunk(TypedDict, total=False):
133
+ content: ContentBlock
134
+ sessionUpdate: str
135
+
136
+
137
+ class AgentThoughtChunk(TypedDict, total=False):
138
+ content: ContentBlock
139
+ sessionUpdate: str
140
+
141
+
142
+ class PlanEntry(TypedDict, total=False):
143
+ content: str
144
+ priority: str
145
+ status: str
146
+
147
+
148
+ class Plan(TypedDict, total=False):
149
+ entries: List[PlanEntry]
150
+ sessionUpdate: str
151
+
152
+
153
+ SessionUpdate = Union[
154
+ AgentMessageChunk, AgentThoughtChunk, ToolCall, ToolCallUpdate, Plan, Dict[str, Any]
155
+ ]
156
+
157
+
158
+ # Response Types
159
+ class InitializeResponse(TypedDict, total=False):
160
+ agentCapabilities: AgentCapabilities
161
+ protocolVersion: int
162
+
163
+
164
+ class SessionMode(TypedDict, total=False):
165
+ id: str
166
+ name: str
167
+ description: Optional[str]
168
+
169
+
170
+ class SessionModeState(TypedDict, total=False):
171
+ availableModes: List[SessionMode]
172
+ currentModeId: str
173
+
174
+
175
+ class NewSessionResponse(TypedDict, total=False):
176
+ sessionId: str
177
+ modes: Optional[SessionModeState]
178
+
179
+
180
+ class SessionPromptResponse(TypedDict, total=False):
181
+ stopReason: str
182
+
183
+
184
+ class RequestPermissionResponse(TypedDict, total=False):
185
+ outcome: Dict[str, Any]
186
+
187
+
188
+ # Terminal Types
189
+ class EnvVariable(TypedDict, total=False):
190
+ name: str
191
+ value: str
192
+
193
+
194
+ class CreateTerminalResponse(TypedDict, total=False):
195
+ terminalId: str
196
+
197
+
198
+ class TerminalOutputResponse(TypedDict, total=False):
199
+ output: str
200
+ truncated: bool
201
+ exitStatus: Optional[dict]
202
+
203
+
204
+ class WaitForTerminalExitResponse(TypedDict, total=False):
205
+ exitCode: Optional[int]
206
+ signal: Optional[str]
207
+
208
+
209
+ # ============================================================================
210
+ # Authentication Types (ACP Protocol Completeness)
211
+ # ============================================================================
212
+
213
+
214
+ class AuthMethod(TypedDict, total=False):
215
+ """Authentication method supported by the agent."""
216
+
217
+ type: str # "api_key", "oauth2", "bearer", etc.
218
+ name: str
219
+ description: Optional[str]
220
+ required: bool
221
+ config: Optional[Dict[str, Any]]
222
+
223
+
224
+ class AuthMethodsResponse(TypedDict, total=False):
225
+ """Response containing available authentication methods."""
226
+
227
+ authMethods: List[AuthMethod]
228
+
229
+
230
+ class AuthConfig(TypedDict, total=False):
231
+ """Authentication configuration."""
232
+
233
+ type: str
234
+ credentials: Dict[str, Any]
235
+
236
+
237
+ # ============================================================================
238
+ # Mode and Model Types (ACP Protocol Completeness)
239
+ # ============================================================================
240
+
241
+
242
+ class AvailableMode(TypedDict, total=False):
243
+ """An available mode that the agent can operate in."""
244
+
245
+ slug: str
246
+ name: str
247
+ description: Optional[str]
248
+ icon: Optional[str]
249
+
250
+
251
+ class AvailableModel(TypedDict, total=False):
252
+ """An available model that the agent can use."""
253
+
254
+ id: str
255
+ name: str
256
+ provider: Optional[str]
257
+ description: Optional[str]
258
+ capabilities: Optional[List[str]]
259
+ context_window: Optional[int]
260
+ max_output_tokens: Optional[int]
261
+
262
+
263
+ class ModesResponse(TypedDict, total=False):
264
+ """Response containing available modes."""
265
+
266
+ modes: List[AvailableMode]
267
+ currentMode: Optional[str]
268
+
269
+
270
+ class ModelsResponse(TypedDict, total=False):
271
+ """Response containing available models."""
272
+
273
+ models: List[AvailableModel]
274
+ currentModel: Optional[str]
275
+
276
+
277
+ class SetModeRequest(TypedDict, total=False):
278
+ """Request to set the current mode."""
279
+
280
+ sessionId: str
281
+ modeSlug: str
282
+
283
+
284
+ class SetModelRequest(TypedDict, total=False):
285
+ """Request to set the current model."""
286
+
287
+ sessionId: str
288
+ modelId: str
289
+
290
+
291
+ # ============================================================================
292
+ # Slash Command Types (ACP Protocol Completeness)
293
+ # ============================================================================
294
+
295
+
296
+ class CommandArg(TypedDict, total=False):
297
+ """Argument for a slash command."""
298
+
299
+ name: str
300
+ description: Optional[str]
301
+ required: bool
302
+ type: str # "string", "number", "boolean", "file", etc.
303
+ default: Optional[Any]
304
+ choices: Optional[List[str]]
305
+
306
+
307
+ class SlashCommand(TypedDict, total=False):
308
+ """A slash command available in the agent."""
309
+
310
+ name: str
311
+ description: str
312
+ args: Optional[List[CommandArg]]
313
+ category: Optional[str]
314
+ aliases: Optional[List[str]]
315
+
316
+
317
+ class AvailableCommandsUpdate(TypedDict, total=False):
318
+ """Update containing available commands."""
319
+
320
+ commands: List[SlashCommand]
321
+ sessionUpdate: str # "available_commands"
322
+
323
+
324
+ class AvailableCommandsResponse(TypedDict, total=False):
325
+ """Response containing available commands."""
326
+
327
+ commands: List[SlashCommand]
328
+
329
+
330
+ # ============================================================================
331
+ # Batch Request Types (ACP Protocol Completeness)
332
+ # ============================================================================
333
+
334
+
335
+ class BatchRequestItem(TypedDict, total=False):
336
+ """A single request in a batch."""
337
+
338
+ id: str
339
+ method: str
340
+ params: Dict[str, Any]
341
+
342
+
343
+ class BatchRequest(TypedDict, total=False):
344
+ """A batch of requests to execute."""
345
+
346
+ requests: List[BatchRequestItem]
347
+
348
+
349
+ class BatchResponseItem(TypedDict, total=False):
350
+ """A single response in a batch."""
351
+
352
+ id: str
353
+ result: Optional[Dict[str, Any]]
354
+ error: Optional[Dict[str, Any]]
355
+
356
+
357
+ class BatchResponse(TypedDict, total=False):
358
+ """Response containing batch results."""
359
+
360
+ responses: List[BatchResponseItem]
361
+
362
+
363
+ # ============================================================================
364
+ # Extended Session Types (ACP Protocol Completeness)
365
+ # ============================================================================
366
+
367
+
368
+ class SessionConfig(TypedDict, total=False):
369
+ """Configuration for a session."""
370
+
371
+ cwd: str
372
+ env: Optional[Dict[str, str]]
373
+ mcpServers: Optional[List[Dict[str, Any]]]
374
+ mode: Optional[str]
375
+ model: Optional[str]
376
+ systemPrompt: Optional[str]
377
+ maxTurns: Optional[int]
378
+ autoApprove: Optional[List[str]]
379
+
380
+
381
+ class LoadSessionRequest(TypedDict, total=False):
382
+ """Request to load an existing session."""
383
+
384
+ sessionId: str
385
+ sessionPath: Optional[str]
386
+
387
+
388
+ class LoadSessionResponse(TypedDict, total=False):
389
+ """Response from loading a session."""
390
+
391
+ sessionId: str
392
+ history: List[Dict[str, Any]]
393
+ modes: Optional[SessionModeState]
394
+
395
+
396
+ class SessionInfo(TypedDict, total=False):
397
+ """Information about a session."""
398
+
399
+ sessionId: str
400
+ created: str
401
+ lastActive: str
402
+ cwd: str
403
+ mode: Optional[str]
404
+ model: Optional[str]
405
+ messageCount: int
406
+
407
+
408
+ class ListSessionsResponse(TypedDict, total=False):
409
+ """Response containing list of sessions."""
410
+
411
+ sessions: List[SessionInfo]
412
+
413
+
414
+ # ============================================================================
415
+ # Context Types (ACP Protocol Completeness)
416
+ # ============================================================================
417
+
418
+
419
+ class FileContext(TypedDict, total=False):
420
+ """File context to include in a prompt."""
421
+
422
+ path: str
423
+ content: Optional[str]
424
+ startLine: Optional[int]
425
+ endLine: Optional[int]
426
+
427
+
428
+ class URLContext(TypedDict, total=False):
429
+ """URL context to include in a prompt."""
430
+
431
+ url: str
432
+ content: Optional[str]
433
+ fetchedAt: Optional[str]
434
+
435
+
436
+ class ContextItem(TypedDict, total=False):
437
+ """A context item for the prompt."""
438
+
439
+ type: str # "file", "url", "text", "image"
440
+ file: Optional[FileContext]
441
+ url: Optional[URLContext]
442
+ text: Optional[str]
443
+ image: Optional[ImageContent]
444
+
445
+
446
+ class PromptWithContext(TypedDict, total=False):
447
+ """A prompt with additional context."""
448
+
449
+ prompt: List[ContentBlock]
450
+ context: Optional[List[ContextItem]]
451
+ sessionId: str
452
+
453
+
454
+ # ============================================================================
455
+ # Capability Extensions (ACP Protocol Completeness)
456
+ # ============================================================================
457
+
458
+
459
+ class ExtendedAgentCapabilities(TypedDict, total=False):
460
+ """Extended agent capabilities."""
461
+
462
+ loadSession: bool
463
+ promptCapabilities: PromptCapabilities
464
+ modes: bool
465
+ models: bool
466
+ commands: bool
467
+ batch: bool
468
+ streaming: bool
469
+ cancellation: bool
470
+
471
+
472
+ class ExtendedClientCapabilities(TypedDict, total=False):
473
+ """Extended client capabilities."""
474
+
475
+ fs: FileSystemCapability
476
+ terminal: bool
477
+ browser: bool # Can open URLs in browser
478
+ notifications: bool # Can show notifications
479
+ clipboard: bool # Can access clipboard
480
+ ui: bool # Has UI for interactive prompts