unique-sdk 2026.38.0.dev4__tar.gz → 2026.40.0.dev0__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.dev4 → unique_sdk-2026.40.0.dev0}/PKG-INFO +1 -1
  2. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/pyproject.toml +1 -1
  3. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/skills/unique-cli-elicitation/SKILL.md +11 -2
  4. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/README.md +0 -0
  5. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/__init__.py +0 -0
  6. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/_api_requestor.py +0 -0
  7. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/_api_resource.py +0 -0
  8. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/_api_version.py +0 -0
  9. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/_error.py +0 -0
  10. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/_http_client.py +0 -0
  11. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/_list_object.py +0 -0
  12. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/_object_classes.py +0 -0
  13. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/_request_options.py +0 -0
  14. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/_unique_object.py +0 -0
  15. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/_unique_ql.py +0 -0
  16. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/_unique_response.py +0 -0
  17. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/_util.py +0 -0
  18. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/_version.py +0 -0
  19. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/_webhook.py +0 -0
  20. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/__init__.py +0 -0
  21. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_acronyms.py +0 -0
  22. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_agentic_table.py +0 -0
  23. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_analytics_order.py +0 -0
  24. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_benchmarking.py +0 -0
  25. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_briefing.py +0 -0
  26. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_chat_completion.py +0 -0
  27. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_content.py +0 -0
  28. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_elicitation.py +0 -0
  29. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_embedding.py +0 -0
  30. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_event.py +0 -0
  31. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_folder.py +0 -0
  32. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_group.py +0 -0
  33. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_integrated.py +0 -0
  34. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_llm_models.py +0 -0
  35. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_mcp.py +0 -0
  36. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_message.py +0 -0
  37. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_message_assessment.py +0 -0
  38. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_message_execution.py +0 -0
  39. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_message_log.py +0 -0
  40. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_message_tool.py +0 -0
  41. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_module.py +0 -0
  42. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_scheduled_task.py +0 -0
  43. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_search.py +0 -0
  44. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_search_string.py +0 -0
  45. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_short_term_memory.py +0 -0
  46. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_space.py +0 -0
  47. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_user.py +0 -0
  48. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/api_resources/_web_search.py +0 -0
  49. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/__init__.py +0 -0
  50. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/__main__.py +0 -0
  51. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/cli.py +0 -0
  52. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/commands/__init__.py +0 -0
  53. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/commands/_citation_manifest.py +0 -0
  54. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/commands/agentic_table.py +0 -0
  55. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/commands/agentic_table_write.py +0 -0
  56. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/commands/browser.py +0 -0
  57. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/commands/cite_file.py +0 -0
  58. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/commands/elicitation.py +0 -0
  59. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/commands/files.py +0 -0
  60. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/commands/folders.py +0 -0
  61. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/commands/mcp.py +0 -0
  62. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/commands/navigation.py +0 -0
  63. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/commands/read.py +0 -0
  64. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/commands/scheduled_tasks.py +0 -0
  65. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/commands/search.py +0 -0
  66. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/commands/subagent.py +0 -0
  67. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/commands/web_search.py +0 -0
  68. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/commands/web_search_config.py +0 -0
  69. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/config.py +0 -0
  70. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/formatting.py +0 -0
  71. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/identity.py +0 -0
  72. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/metadata_filter.py +0 -0
  73. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/shell.py +0 -0
  74. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/skills/unique-cli-agentic-table/SKILL.md +0 -0
  75. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/skills/unique-cli-file-management/SKILL.md +0 -0
  76. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/skills/unique-cli-mcp/SKILL.md +0 -0
  77. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/skills/unique-cli-scheduled-tasks/SKILL.md +0 -0
  78. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/skills/unique-cli-search/SKILL.md +0 -0
  79. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/skills/unique-cli-subagent/SKILL.md +0 -0
  80. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/skills/unique-cli-uploaded-search/SKILL.md +0 -0
  81. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/skills/unique-cli-web-search/SKILL.md +0 -0
  82. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/cli/state.py +0 -0
  83. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/utils/analytics_order_run.py +0 -0
  84. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/utils/benchmarking_run.py +0 -0
  85. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/utils/chat_history.py +0 -0
  86. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/utils/chat_in_space.py +0 -0
  87. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/utils/file_io.py +0 -0
  88. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/unique_sdk/utils/sources.py +0 -0
  89. {unique_sdk-2026.38.0.dev4 → unique_sdk-2026.40.0.dev0}/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.dev4
3
+ Version: 2026.40.0.dev0
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.dev4"
3
+ version = "2026.40.0.dev0"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -251,6 +251,13 @@ unique-cli elicit ask "Permanently delete /Archive/2024 and everything inside it
251
251
 
252
252
  Proceed **only** if the `Status:` is `ACCEPTED`. Treat `DECLINED`, `REJECTED`, `CANCELLED`, or `EXPIRED` all as "do not proceed" -- tell the user you stopped and return control. Put everything the user needs to decide into the message text, since the form has no fields.
253
253
 
254
+ Confirm on a form with fields is the same consent. If you still need inputs
255
+ (e.g. which folder to delete), ask for them and state the consequence in the
256
+ same `elicit ask` message, then act on `ACCEPTED` -- do not add a checkbox for
257
+ the consent. Only split into a second, empty-schema confirmation when the
258
+ consequence depends on the answers and the user should see it before you act
259
+ (e.g. "Archive/2024 holds 1,234 files, 3 shared with other teams").
260
+
254
261
  ### Structured form (multiple fields)
255
262
 
256
263
  ```bash
@@ -262,7 +269,7 @@ unique-cli elicit ask "Please provide report settings" \
262
269
  "quarter": {"type": "string", "enum": ["Q1", "Q2", "Q3", "Q4"]},
263
270
  "year": {"type": "integer", "minimum": 2000, "maximum": 2100},
264
271
  "recipients":{"type": "array", "items": {"type": "string", "format": "email"}},
265
- "include_appendix": {"type": "boolean"}
272
+ "include_appendix": {"type": "boolean", "title": "Include appendix"}
266
273
  },
267
274
  "required": ["quarter", "year"]
268
275
  }'
@@ -382,7 +389,9 @@ esac
382
389
 
383
390
  - Always set `"required"` for fields you actually need -- this guarantees the user cannot submit an empty form.
384
391
  - Use `enum` for closed choices so the UI can render a selector.
385
- - For pure yes/no confirmations use an **empty-properties schema** (`{"type": "object", "properties": {}}`) and gate on `Status: ACCEPTED` — never add a boolean `confirm` field (the Confirm button and the checkbox are two separate signals that can disagree). Reserve `"type": "boolean"` for genuine data fields where `false` is a valid answer the user can still submit with Confirm (e.g. `include_appendix`).
392
+ - The Confirm button is the consent, on any form. Never add a boolean `confirm` or `acknowledge` field (the button and the checkbox are two separate signals that can disagree); put the consequence in the message text instead. When there is nothing else to ask, use an **empty-properties schema** (`{"type": "object", "properties": {}}`) and gate on `Status: ACCEPTED`. Reserve `"type": "boolean"` for genuine data fields where `false` is a valid answer the user can still submit with Confirm (e.g. `include_appendix`).
393
+ - `"required"` on a boolean means "must be answered", not "must be ticked". An unchecked box is a valid `false` and the form submits with it; there is no way to force a checkbox on.
394
+ - Always give booleans a `"title"`. The checkbox label and its required marker come from `title`; with only a `description` the box renders unlabelled.
386
395
  - Add short `description` strings -- they are shown as help text next to each field.
387
396
  - Keep schemas small. Ask at most 5 questions in a single elicitation; if you need more, split the flow so the user is not confused by an oversized form.
388
397