unique-sdk 2026.38.0.dev2__tar.gz → 2026.38.0.dev3__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 (89) hide show
  1. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/PKG-INFO +1 -1
  2. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/pyproject.toml +1 -1
  3. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/cli.py +41 -24
  4. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/commands/scheduled_tasks.py +16 -6
  5. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/README.md +0 -0
  6. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/__init__.py +0 -0
  7. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/_api_requestor.py +0 -0
  8. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/_api_resource.py +0 -0
  9. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/_api_version.py +0 -0
  10. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/_error.py +0 -0
  11. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/_http_client.py +0 -0
  12. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/_list_object.py +0 -0
  13. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/_object_classes.py +0 -0
  14. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/_request_options.py +0 -0
  15. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/_unique_object.py +0 -0
  16. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/_unique_ql.py +0 -0
  17. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/_unique_response.py +0 -0
  18. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/_util.py +0 -0
  19. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/_version.py +0 -0
  20. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/_webhook.py +0 -0
  21. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/__init__.py +0 -0
  22. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_acronyms.py +0 -0
  23. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_agentic_table.py +0 -0
  24. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_analytics_order.py +0 -0
  25. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_benchmarking.py +0 -0
  26. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_briefing.py +0 -0
  27. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_chat_completion.py +0 -0
  28. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_content.py +0 -0
  29. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_elicitation.py +0 -0
  30. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_embedding.py +0 -0
  31. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_event.py +0 -0
  32. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_folder.py +0 -0
  33. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_group.py +0 -0
  34. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_integrated.py +0 -0
  35. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_llm_models.py +0 -0
  36. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_mcp.py +0 -0
  37. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_message.py +0 -0
  38. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_message_assessment.py +0 -0
  39. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_message_execution.py +0 -0
  40. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_message_log.py +0 -0
  41. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_message_tool.py +0 -0
  42. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_module.py +0 -0
  43. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_scheduled_task.py +0 -0
  44. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_search.py +0 -0
  45. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_search_string.py +0 -0
  46. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_short_term_memory.py +0 -0
  47. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_space.py +0 -0
  48. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_user.py +0 -0
  49. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/api_resources/_web_search.py +0 -0
  50. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/__init__.py +0 -0
  51. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/__main__.py +0 -0
  52. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/commands/__init__.py +0 -0
  53. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/commands/_citation_manifest.py +0 -0
  54. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/commands/agentic_table.py +0 -0
  55. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/commands/agentic_table_write.py +0 -0
  56. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/commands/browser.py +0 -0
  57. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/commands/cite_file.py +0 -0
  58. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/commands/elicitation.py +0 -0
  59. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/commands/files.py +0 -0
  60. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/commands/folders.py +0 -0
  61. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/commands/mcp.py +0 -0
  62. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/commands/navigation.py +0 -0
  63. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/commands/read.py +0 -0
  64. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/commands/search.py +0 -0
  65. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/commands/subagent.py +0 -0
  66. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/commands/web_search.py +0 -0
  67. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/commands/web_search_config.py +0 -0
  68. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/config.py +0 -0
  69. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/formatting.py +0 -0
  70. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/identity.py +0 -0
  71. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/metadata_filter.py +0 -0
  72. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/shell.py +0 -0
  73. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/skills/unique-cli-agentic-table/SKILL.md +0 -0
  74. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/skills/unique-cli-elicitation/SKILL.md +0 -0
  75. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/skills/unique-cli-file-management/SKILL.md +0 -0
  76. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/skills/unique-cli-mcp/SKILL.md +0 -0
  77. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/skills/unique-cli-scheduled-tasks/SKILL.md +0 -0
  78. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/skills/unique-cli-search/SKILL.md +0 -0
  79. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/skills/unique-cli-subagent/SKILL.md +0 -0
  80. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/skills/unique-cli-uploaded-search/SKILL.md +0 -0
  81. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/skills/unique-cli-web-search/SKILL.md +0 -0
  82. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/cli/state.py +0 -0
  83. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/utils/analytics_order_run.py +0 -0
  84. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/utils/benchmarking_run.py +0 -0
  85. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/utils/chat_history.py +0 -0
  86. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/utils/chat_in_space.py +0 -0
  87. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/utils/file_io.py +0 -0
  88. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/utils/sources.py +0 -0
  89. {unique_sdk-2026.38.0.dev2 → unique_sdk-2026.38.0.dev3}/unique_sdk/utils/token.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: unique-sdk
3
- Version: 2026.38.0.dev2
3
+ Version: 2026.38.0.dev3
4
4
  Summary:
5
5
  Author: Martin Fadler, Konstantin Krauss, Andreas Hauri
6
6
  Author-email: Martin Fadler <martin.fadler@unique.ch>, Konstantin Krauss <konstantin@unique.ch>, Andreas Hauri <andreas@unique.ch>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "unique_sdk"
3
- version = "2026.38.0.dev2"
3
+ version = "2026.38.0.dev3"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -65,12 +65,16 @@ from unique_sdk.cli.commands.read import (
65
65
  is_error_output as _is_read_error_output,
66
66
  )
67
67
  from unique_sdk.cli.commands.scheduled_tasks import (
68
+ SCHEDULE_ERROR_PREFIX,
68
69
  cmd_schedule_create,
69
70
  cmd_schedule_delete,
70
71
  cmd_schedule_get,
71
72
  cmd_schedule_list,
72
73
  cmd_schedule_update,
73
74
  )
75
+ from unique_sdk.cli.commands.scheduled_tasks import (
76
+ is_error_output as _is_schedule_error_output,
77
+ )
74
78
  from unique_sdk.cli.commands.search import (
75
79
  cmd_search,
76
80
  cmd_uploaded_search,
@@ -973,7 +977,10 @@ def schedule_list(ctx: click.Context) -> None:
973
977
  Examples:
974
978
  unique-cli schedule list
975
979
  """
976
- click.echo(cmd_schedule_list(LazyState.get(ctx)))
980
+ output = cmd_schedule_list(LazyState.get(ctx))
981
+ click.echo(output)
982
+ if _is_schedule_error_output(output):
983
+ ctx.exit(1)
977
984
 
978
985
 
979
986
  @schedule.command(name="get")
@@ -989,7 +996,10 @@ def schedule_get(ctx: click.Context, task_id: str) -> None:
989
996
  Examples:
990
997
  unique-cli schedule get clx3ghi4f0003mnopqr345678
991
998
  """
992
- click.echo(cmd_schedule_get(LazyState.get(ctx), task_id))
999
+ output = cmd_schedule_get(LazyState.get(ctx), task_id)
1000
+ click.echo(output)
1001
+ if _is_schedule_error_output(output):
1002
+ ctx.exit(1)
993
1003
 
994
1004
 
995
1005
  @schedule.command(name="create")
@@ -1053,16 +1063,17 @@ def schedule_create(
1053
1063
  unique-cli schedule create \\
1054
1064
  -c "*/15 * * * *" -a clx1abc -p "Check inbox" --disabled
1055
1065
  """
1056
- click.echo(
1057
- cmd_schedule_create(
1058
- LazyState.get(ctx),
1059
- cron=cron,
1060
- assistant_id=assistant_id,
1061
- prompt=prompt,
1062
- chat_id=chat_id,
1063
- enabled=not disabled,
1064
- )
1066
+ output = cmd_schedule_create(
1067
+ LazyState.get(ctx),
1068
+ cron=cron,
1069
+ assistant_id=assistant_id,
1070
+ prompt=prompt,
1071
+ chat_id=chat_id,
1072
+ enabled=not disabled,
1065
1073
  )
1074
+ click.echo(output)
1075
+ if _is_schedule_error_output(output):
1076
+ ctx.exit(1)
1066
1077
 
1067
1078
 
1068
1079
  @schedule.command(name="update")
@@ -1100,8 +1111,10 @@ def schedule_update(
1100
1111
  unique-cli schedule update clx3ghi4f --chat-id none
1101
1112
  """
1102
1113
  if enable and disable:
1103
- click.echo("schedule: cannot use --enable and --disable together")
1104
- return
1114
+ click.echo(
1115
+ f"{SCHEDULE_ERROR_PREFIX} cannot use --enable and --disable together"
1116
+ )
1117
+ ctx.exit(1)
1105
1118
 
1106
1119
  enabled: bool | None = None
1107
1120
  if enable:
@@ -1113,17 +1126,18 @@ def schedule_update(
1113
1126
  if chat_id and chat_id.lower() == "none":
1114
1127
  resolved_chat_id = ""
1115
1128
 
1116
- click.echo(
1117
- cmd_schedule_update(
1118
- LazyState.get(ctx),
1119
- task_id,
1120
- cron=cron,
1121
- assistant_id=assistant_id,
1122
- prompt=prompt,
1123
- chat_id=resolved_chat_id,
1124
- enabled=enabled,
1125
- )
1129
+ output = cmd_schedule_update(
1130
+ LazyState.get(ctx),
1131
+ task_id,
1132
+ cron=cron,
1133
+ assistant_id=assistant_id,
1134
+ prompt=prompt,
1135
+ chat_id=resolved_chat_id,
1136
+ enabled=enabled,
1126
1137
  )
1138
+ click.echo(output)
1139
+ if _is_schedule_error_output(output):
1140
+ ctx.exit(1)
1127
1141
 
1128
1142
 
1129
1143
  @schedule.command(name="delete")
@@ -1140,7 +1154,10 @@ def schedule_delete(ctx: click.Context, task_id: str) -> None:
1140
1154
  Examples:
1141
1155
  unique-cli schedule delete clx3ghi4f0003mnopqr345678
1142
1156
  """
1143
- click.echo(cmd_schedule_delete(LazyState.get(ctx), task_id))
1157
+ output = cmd_schedule_delete(LazyState.get(ctx), task_id)
1158
+ click.echo(output)
1159
+ if _is_schedule_error_output(output):
1160
+ ctx.exit(1)
1144
1161
 
1145
1162
 
1146
1163
  # -- Elicitations ----------------------------------------------------------
@@ -8,6 +8,13 @@ import unique_sdk
8
8
  from unique_sdk.cli.formatting import format_scheduled_task, format_scheduled_tasks
9
9
  from unique_sdk.cli.state import ShellState
10
10
 
11
+ SCHEDULE_ERROR_PREFIX = "schedule:"
12
+
13
+
14
+ def is_error_output(output: str) -> bool:
15
+ """Return True if `output` is a schedule command error message."""
16
+ return output.startswith(SCHEDULE_ERROR_PREFIX)
17
+
11
18
 
12
19
  def cmd_schedule_list(state: ShellState) -> str:
13
20
  """List all scheduled tasks for the authenticated user."""
@@ -18,7 +25,7 @@ def cmd_schedule_list(state: ShellState) -> str:
18
25
  )
19
26
  return format_scheduled_tasks(tasks)
20
27
  except unique_sdk.APIError as e:
21
- return f"schedule: {e}"
28
+ return f"{SCHEDULE_ERROR_PREFIX} {e}"
22
29
 
23
30
 
24
31
  def cmd_schedule_get(state: ShellState, task_id: str) -> str:
@@ -31,7 +38,7 @@ def cmd_schedule_get(state: ShellState, task_id: str) -> str:
31
38
  )
32
39
  return format_scheduled_task(task)
33
40
  except unique_sdk.APIError as e:
34
- return f"schedule: {e}"
41
+ return f"{SCHEDULE_ERROR_PREFIX} {e}"
35
42
 
36
43
 
37
44
  def cmd_schedule_create(
@@ -62,7 +69,7 @@ def cmd_schedule_create(
62
69
  task_id = getattr(task, "id", "?")
63
70
  return f"Created scheduled task {task_id}\n\n{format_scheduled_task(task)}"
64
71
  except unique_sdk.APIError as e:
65
- return f"schedule: {e}"
72
+ return f"{SCHEDULE_ERROR_PREFIX} {e}"
66
73
 
67
74
 
68
75
  def cmd_schedule_update(
@@ -90,7 +97,10 @@ def cmd_schedule_update(
90
97
  params["enabled"] = enabled
91
98
 
92
99
  if not params:
93
- return "schedule: nothing to update (provide at least one option)"
100
+ return (
101
+ f"{SCHEDULE_ERROR_PREFIX} nothing to update "
102
+ "(provide at least one option)"
103
+ )
94
104
 
95
105
  task = unique_sdk.ScheduledTask.modify(
96
106
  user_id=state.config.user_id,
@@ -100,7 +110,7 @@ def cmd_schedule_update(
100
110
  )
101
111
  return f"Updated scheduled task {task_id}\n\n{format_scheduled_task(task)}"
102
112
  except unique_sdk.APIError as e:
103
- return f"schedule: {e}"
113
+ return f"{SCHEDULE_ERROR_PREFIX} {e}"
104
114
 
105
115
 
106
116
  def cmd_schedule_delete(state: ShellState, task_id: str) -> str:
@@ -114,4 +124,4 @@ def cmd_schedule_delete(state: ShellState, task_id: str) -> str:
114
124
  deleted_id = result.get("id", task_id) if hasattr(result, "get") else task_id
115
125
  return f"Deleted scheduled task {deleted_id}"
116
126
  except unique_sdk.APIError as e:
117
- return f"schedule: {e}"
127
+ return f"{SCHEDULE_ERROR_PREFIX} {e}"