clawd-code-sdk 0.4.0__tar.gz → 0.4.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 (70) hide show
  1. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/PKG-INFO +1 -1
  2. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/pyproject.toml +1 -1
  3. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/__init__.py +15 -3
  4. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/client.py +2 -4
  5. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/__init__.py +14 -2
  6. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/messages.py +115 -1
  7. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/query.py +2 -2
  8. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/.gitignore +0 -0
  9. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/LICENSE +0 -0
  10. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/README.md +0 -0
  11. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/_bundled/.gitignore +0 -0
  12. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/_errors.py +0 -0
  13. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/_internal/__init__.py +0 -0
  14. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/_internal/message_parser.py +0 -0
  15. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/_internal/query.py +0 -0
  16. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/_internal/transport/__init__.py +0 -0
  17. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/_internal/transport/subprocess_cli.py +0 -0
  18. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/_version.py +0 -0
  19. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/anthropic_types.py +0 -0
  20. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/list_sessions.py +0 -0
  21. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/mcp_utils.py +0 -0
  22. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/agents.py +0 -0
  23. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/base.py +0 -0
  24. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/content_blocks.py +0 -0
  25. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/control.py +0 -0
  26. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/hooks.py +0 -0
  27. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/input_types.py +0 -0
  28. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/mcp.py +0 -0
  29. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/options.py +0 -0
  30. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/output_types.py +0 -0
  31. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/permissions.py +0 -0
  32. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/sandbox.py +0 -0
  33. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/models/server_info.py +0 -0
  34. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/py.typed +0 -0
  35. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/session.py +0 -0
  36. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/storage/ARCHITECTURE.md +0 -0
  37. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/storage/__init__.py +0 -0
  38. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/storage/helpers.py +0 -0
  39. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/storage/models.py +0 -0
  40. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/storage/replay.py +0 -0
  41. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/src/clawd_code_sdk/usage.py +0 -0
  42. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/__init__.py +0 -0
  43. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/conftest.py +0 -0
  44. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/__init__.py +0 -0
  45. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_agents_and_settings.py +0 -0
  46. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_dynamic_control.py +0 -0
  47. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_hook_events.py +0 -0
  48. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_hooks.py +0 -0
  49. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_include_partial_messages.py +0 -0
  50. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_mcp_tools.py +0 -0
  51. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_sdk_mcp_tools.py +0 -0
  52. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_slash_commands.py +0 -0
  53. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_stderr_callback.py +0 -0
  54. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_structured_output.py +0 -0
  55. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_subagent_invocation.py +0 -0
  56. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/e2e/test_tool_permissions.py +0 -0
  57. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/mcp_server.py +0 -0
  58. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/mock_claude_server.py +0 -0
  59. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_changelog.py +0 -0
  60. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_client.py +0 -0
  61. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_errors.py +0 -0
  62. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_image.png +0 -0
  63. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_integration.py +0 -0
  64. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_message_parser.py +0 -0
  65. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_sdk_mcp_integration.py +0 -0
  66. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_session.py +0 -0
  67. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_streaming_client.py +0 -0
  68. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_subprocess_buffering.py +0 -0
  69. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_tool_callbacks.py +0 -0
  70. {clawd_code_sdk-0.4.0 → clawd_code_sdk-0.4.1}/tests/test_transport.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clawd-code-sdk
3
- Version: 0.4.0
3
+ Version: 0.4.1
4
4
  Summary: Python SDK for Claude Code
5
5
  Project-URL: Documentation, https://github.com/phil65/claude-agent-sdk-python
6
6
  Project-URL: Homepage, https://github.com/phil65/claude-agent-sdk-python
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "clawd-code-sdk"
3
- version = "0.4.0"
3
+ version = "0.4.1"
4
4
  description = "Python SDK for Claude Code"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13"
@@ -90,11 +90,17 @@ from .models import (
90
90
  ToolResultBlock,
91
91
  ToolUseBlock,
92
92
  UserMessage,
93
- UserPromptSubmitHookInput,
94
- UserTextPrompt,
93
+ DocumentMediaType,
94
+ ImageMediaType,
95
+ PlainTextMediaType,
96
+ UserDocumentPrompt,
97
+ UserDocumentURLPrompt,
95
98
  UserImagePrompt,
99
+ UserImageURLPrompt,
100
+ UserPlainTextDocumentPrompt,
96
101
  UserPrompt,
97
- ImageMediaType,
102
+ UserPromptSubmitHookInput,
103
+ UserTextPrompt,
98
104
  FromPR,
99
105
  NewSession,
100
106
  ResumeSession,
@@ -146,6 +152,7 @@ __all__ = [
146
152
  # Session config
147
153
  "ContinueLatest",
148
154
  "ConversationTurn",
155
+ "DocumentMediaType",
149
156
  "FromPR",
150
157
  "HookCallback",
151
158
  "HookContext",
@@ -173,6 +180,7 @@ __all__ = [
173
180
  "PermissionResultAllow",
174
181
  "PermissionResultDeny",
175
182
  "PermissionUpdate",
183
+ "PlainTextMediaType",
176
184
  "PostToolUseFailureHookInput",
177
185
  "PostToolUseFailureHookSpecificOutput",
178
186
  "PostToolUseHookInput",
@@ -221,8 +229,12 @@ __all__ = [
221
229
  "ToolUseBlock",
222
230
  # Transport
223
231
  "Transport",
232
+ "UserDocumentPrompt",
233
+ "UserDocumentURLPrompt",
224
234
  "UserImagePrompt",
235
+ "UserImageURLPrompt",
225
236
  "UserMessage",
237
+ "UserPlainTextDocumentPrompt",
226
238
  "UserPrompt",
227
239
  "UserPromptSubmitHookInput",
228
240
  "UserTextPrompt",
@@ -31,9 +31,7 @@ if TYPE_CHECKING:
31
31
  from clawd_code_sdk._internal.query import Query
32
32
  from clawd_code_sdk.models import Message, PermissionMode
33
33
  from clawd_code_sdk.models.mcp import McpServerConfig
34
- from clawd_code_sdk.models.messages import (
35
- UserImagePrompt,
36
- )
34
+ from clawd_code_sdk.models.messages import UserPrompt
37
35
  from clawd_code_sdk.models.server_info import ClaudeCodeServerInfo
38
36
 
39
37
 
@@ -164,7 +162,7 @@ class ClaudeSDKClient:
164
162
 
165
163
  async def query(
166
164
  self,
167
- *prompts: str | UserTextPrompt | UserImagePrompt,
165
+ *prompts: str | UserPrompt,
168
166
  session_id: str = "default",
169
167
  parent_tool_use_id: str | None = None,
170
168
  ) -> None:
@@ -241,10 +241,16 @@ from .messages import (
241
241
  TriggerMetadata,
242
242
  Usage,
243
243
  UserMessage,
244
+ DocumentMediaType,
245
+ ImageMediaType,
246
+ PlainTextMediaType,
247
+ UserDocumentPrompt,
248
+ UserDocumentURLPrompt,
244
249
  UserImagePrompt,
245
- UserTextPrompt,
250
+ UserImageURLPrompt,
251
+ UserPlainTextDocumentPrompt,
246
252
  UserPrompt,
247
- ImageMediaType,
253
+ UserTextPrompt,
248
254
  system_message_adapter,
249
255
  )
250
256
  from .options import ClaudeAgentOptions
@@ -318,6 +324,7 @@ __all__ = [
318
324
  "ControlErrorResponse",
319
325
  "ControlRequestUnion",
320
326
  "ControlResponse",
327
+ "DocumentMediaType",
321
328
  "EditOutput",
322
329
  "EditToolUseResult",
323
330
  "EnterPlanModeInput",
@@ -392,6 +399,7 @@ __all__ = [
392
399
  "PermissionRuleValue",
393
400
  "PermissionUpdate",
394
401
  "PermissionUpdateDestination",
402
+ "PlainTextMediaType",
395
403
  "PostToolUseFailureHookInput",
396
404
  "PostToolUseFailureHookSpecificOutput",
397
405
  "PostToolUseHookInput",
@@ -491,8 +499,12 @@ __all__ = [
491
499
  "UnsubscribeMcpResourceOutput",
492
500
  "UnsubscribePollingOutput",
493
501
  "Usage",
502
+ "UserDocumentPrompt",
503
+ "UserDocumentURLPrompt",
494
504
  "UserImagePrompt",
505
+ "UserImageURLPrompt",
495
506
  "UserMessage",
507
+ "UserPlainTextDocumentPrompt",
496
508
  "UserPrompt",
497
509
  "UserPromptSubmitHookInput",
498
510
  "UserPromptSubmitHookSpecificOutput",
@@ -59,6 +59,8 @@ Outcome = Literal["success", "error", "cancelled"]
59
59
 
60
60
 
61
61
  ImageMediaType = Literal["image/png", "image/jpeg", "image/gif", "image/webp"]
62
+ DocumentMediaType = Literal["application/pdf"]
63
+ PlainTextMediaType = Literal["text/plain"]
62
64
 
63
65
 
64
66
  @dataclass
@@ -93,7 +95,119 @@ class UserImagePrompt:
93
95
  }
94
96
 
95
97
 
96
- UserPrompt = UserTextPrompt | UserImagePrompt
98
+ @dataclass
99
+ class UserImageURLPrompt:
100
+ """A user prompt containing an image referenced by URL."""
101
+
102
+ url: str
103
+ """Public URL of the image."""
104
+
105
+ def to_content_block(self) -> dict[str, Any]:
106
+ """Return the Anthropic API content block dict."""
107
+ return {
108
+ "type": "image",
109
+ "source": {
110
+ "type": "url",
111
+ "url": self.url,
112
+ },
113
+ }
114
+
115
+
116
+ @dataclass
117
+ class UserDocumentPrompt:
118
+ """A user prompt containing a base64-encoded PDF document."""
119
+
120
+ document_data: str
121
+ """Base64-encoded PDF data."""
122
+ media_type: DocumentMediaType = "application/pdf"
123
+ """MIME type of the document."""
124
+ title: str | None = None
125
+ """Optional document title."""
126
+ context: str | None = None
127
+ """Optional context about the document."""
128
+
129
+ def to_content_block(self) -> dict[str, Any]:
130
+ """Return the Anthropic API content block dict."""
131
+ block: dict[str, Any] = {
132
+ "type": "document",
133
+ "source": {
134
+ "type": "base64",
135
+ "media_type": self.media_type,
136
+ "data": self.document_data,
137
+ },
138
+ }
139
+ if self.title is not None:
140
+ block["title"] = self.title
141
+ if self.context is not None:
142
+ block["context"] = self.context
143
+ return block
144
+
145
+
146
+ @dataclass
147
+ class UserDocumentURLPrompt:
148
+ """A user prompt containing a PDF document referenced by URL."""
149
+
150
+ url: str
151
+ """Public URL of the PDF document."""
152
+ title: str | None = None
153
+ """Optional document title."""
154
+ context: str | None = None
155
+ """Optional context about the document."""
156
+
157
+ def to_content_block(self) -> dict[str, Any]:
158
+ """Return the Anthropic API content block dict."""
159
+ block: dict[str, Any] = {
160
+ "type": "document",
161
+ "source": {
162
+ "type": "url",
163
+ "url": self.url,
164
+ },
165
+ }
166
+ if self.title is not None:
167
+ block["title"] = self.title
168
+ if self.context is not None:
169
+ block["context"] = self.context
170
+ return block
171
+
172
+
173
+ @dataclass
174
+ class UserPlainTextDocumentPrompt:
175
+ """A user prompt containing a plain text document."""
176
+
177
+ data: str
178
+ """The plain text content."""
179
+ media_type: PlainTextMediaType = "text/plain"
180
+ """MIME type (always text/plain)."""
181
+ title: str | None = None
182
+ """Optional document title."""
183
+ context: str | None = None
184
+ """Optional context about the document."""
185
+
186
+ def to_content_block(self) -> dict[str, Any]:
187
+ """Return the Anthropic API content block dict."""
188
+ block: dict[str, Any] = {
189
+ "type": "document",
190
+ "source": {
191
+ "type": "text",
192
+ "media_type": self.media_type,
193
+ "data": self.data,
194
+ },
195
+ }
196
+ if self.title is not None:
197
+ block["title"] = self.title
198
+ if self.context is not None:
199
+ block["context"] = self.context
200
+ return block
201
+
202
+
203
+ UserPrompt = (
204
+ UserTextPrompt
205
+ | UserImagePrompt
206
+ | UserImageURLPrompt
207
+ | UserDocumentPrompt
208
+ | UserDocumentURLPrompt
209
+ | UserPlainTextDocumentPrompt
210
+ )
97
211
  """Union type for all user prompt dataclasses."""
98
212
 
99
213
 
@@ -13,11 +13,11 @@ if TYPE_CHECKING:
13
13
 
14
14
  from clawd_code_sdk._internal.transport import Transport
15
15
  from clawd_code_sdk.models import Message
16
- from clawd_code_sdk.models.messages import UserImagePrompt, UserTextPrompt
16
+ from clawd_code_sdk.models.messages import UserPrompt
17
17
 
18
18
 
19
19
  async def query(
20
- *prompts: str | UserTextPrompt | UserImagePrompt,
20
+ *prompts: str | UserPrompt,
21
21
  options: ClaudeAgentOptions | None = None,
22
22
  transport: Transport | None = None,
23
23
  ) -> AsyncIterator[Message]:
File without changes
File without changes