unique-sdk 2026.26.0.dev13__tar.gz → 2026.26.0.dev15__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 (85) hide show
  1. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/PKG-INFO +1 -1
  2. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/pyproject.toml +1 -1
  3. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_dynamic_frontend.py +2 -0
  4. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/commands/dynamic_frontend.py +18 -3
  5. unique_sdk-2026.26.0.dev15/unique_sdk/cli/skills/unique-cli-dynamic-frontend/SKILL.md +127 -0
  6. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/README.md +0 -0
  7. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/__init__.py +0 -0
  8. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/_api_requestor.py +0 -0
  9. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/_api_resource.py +0 -0
  10. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/_api_version.py +0 -0
  11. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/_error.py +0 -0
  12. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/_http_client.py +0 -0
  13. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/_list_object.py +0 -0
  14. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/_object_classes.py +0 -0
  15. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/_request_options.py +0 -0
  16. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/_unique_object.py +0 -0
  17. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/_unique_ql.py +0 -0
  18. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/_unique_response.py +0 -0
  19. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/_util.py +0 -0
  20. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/_version.py +0 -0
  21. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/_webhook.py +0 -0
  22. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/__init__.py +0 -0
  23. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_acronyms.py +0 -0
  24. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_agentic_table.py +0 -0
  25. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_analytics_order.py +0 -0
  26. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_benchmarking.py +0 -0
  27. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_briefing.py +0 -0
  28. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_chat_completion.py +0 -0
  29. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_content.py +0 -0
  30. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_elicitation.py +0 -0
  31. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_embedding.py +0 -0
  32. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_event.py +0 -0
  33. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_folder.py +0 -0
  34. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_group.py +0 -0
  35. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_integrated.py +0 -0
  36. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_llm_models.py +0 -0
  37. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_mcp.py +0 -0
  38. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_message.py +0 -0
  39. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_message_assessment.py +0 -0
  40. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_message_execution.py +0 -0
  41. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_message_log.py +0 -0
  42. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_message_tool.py +0 -0
  43. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_module.py +0 -0
  44. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_scheduled_task.py +0 -0
  45. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_search.py +0 -0
  46. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_search_string.py +0 -0
  47. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_short_term_memory.py +0 -0
  48. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_space.py +0 -0
  49. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_user.py +0 -0
  50. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/api_resources/_web_search.py +0 -0
  51. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/__init__.py +0 -0
  52. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/__main__.py +0 -0
  53. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/cli.py +0 -0
  54. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/commands/__init__.py +0 -0
  55. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/commands/_citation_manifest.py +0 -0
  56. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/commands/cite_file.py +0 -0
  57. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/commands/elicitation.py +0 -0
  58. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/commands/files.py +0 -0
  59. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/commands/folders.py +0 -0
  60. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/commands/mcp.py +0 -0
  61. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/commands/navigation.py +0 -0
  62. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/commands/read.py +0 -0
  63. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/commands/scheduled_tasks.py +0 -0
  64. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/commands/search.py +0 -0
  65. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/commands/subagent.py +0 -0
  66. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/commands/web_search.py +0 -0
  67. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/commands/web_search_config.py +0 -0
  68. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/config.py +0 -0
  69. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/formatting.py +0 -0
  70. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/shell.py +0 -0
  71. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/skills/unique-cli-elicitation/SKILL.md +0 -0
  72. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/skills/unique-cli-file-management/SKILL.md +0 -0
  73. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/skills/unique-cli-mcp/SKILL.md +0 -0
  74. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/skills/unique-cli-scheduled-tasks/SKILL.md +0 -0
  75. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/skills/unique-cli-search/SKILL.md +0 -0
  76. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/skills/unique-cli-subagent/SKILL.md +0 -0
  77. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/skills/unique-cli-web-search/SKILL.md +0 -0
  78. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/cli/state.py +0 -0
  79. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/utils/analytics_order_run.py +0 -0
  80. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/utils/benchmarking_run.py +0 -0
  81. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/utils/chat_history.py +0 -0
  82. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/utils/chat_in_space.py +0 -0
  83. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/utils/file_io.py +0 -0
  84. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/unique_sdk/utils/sources.py +0 -0
  85. {unique_sdk-2026.26.0.dev13 → unique_sdk-2026.26.0.dev15}/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.26.0.dev13
3
+ Version: 2026.26.0.dev15
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.26.0.dev13"
3
+ version = "2026.26.0.dev15"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -16,6 +16,8 @@ class DynamicFrontend(APIResource["DynamicFrontend"]):
16
16
  spaceId: str
17
17
  name: str
18
18
  contentId: str
19
+ url: str | None
20
+ configUrl: str | None
19
21
  status: dict[str, object] | None
20
22
 
21
23
  class CreateParams(RequestOptions):
@@ -36,12 +36,15 @@ def _format_space(space: object) -> str:
36
36
  content_id = getattr(space, "contentId", "")
37
37
  status = getattr(space, "status", None)
38
38
  phase = ""
39
- url = ""
39
+ url = str(getattr(space, "url", "") or "")
40
+ config_url = str(getattr(space, "configUrl", "") or "")
40
41
  if isinstance(status, dict):
41
42
  phase = str(status.get("phase") or "")
42
- url = str(status.get("url") or "")
43
+ url = url or str(status.get("url") or "")
43
44
  return "\t".join(
44
- part for part in [str(space_id), str(name), str(content_id), phase, url] if part
45
+ part
46
+ for part in [str(space_id), str(name), str(content_id), phase, url, config_url]
47
+ if part
45
48
  )
46
49
 
47
50
 
@@ -93,9 +96,21 @@ def cmd_dynamic_frontend_deploy(
93
96
 
94
97
  space_id_value = getattr(space, "spaceId", None) or getattr(space, "id", "")
95
98
  name_value = getattr(space, "name", name or "")
99
+ url_value = getattr(space, "url", None)
100
+ config_url_value = getattr(space, "configUrl", None)
101
+ url_line = (
102
+ f"\nURL: {url_value}" if isinstance(url_value, str) and url_value else ""
103
+ )
104
+ config_url_line = (
105
+ f"\nConfig URL: {config_url_value}"
106
+ if isinstance(config_url_value, str) and config_url_value
107
+ else ""
108
+ )
96
109
  return (
97
110
  f'{action} Dynamic Frontend space "{name_value}" ({space_id_value})\n'
98
111
  f"Content: {resolved_content_id}"
112
+ f"{url_line}"
113
+ f"{config_url_line}"
99
114
  )
100
115
  except (ValueError, unique_sdk.APIError, OSError) as e:
101
116
  return f"dynamic-frontend deploy: {e}"
@@ -0,0 +1,127 @@
1
+ ---
2
+ name: unique-cli-dynamic-frontend
3
+ description: >-
4
+ Create, update, and list Unique Dynamic Frontend Spaces using the
5
+ `unique-cli dynamic-frontend` command. Use when deploying a generated
6
+ Dynamic Frontend ZIP, updating an existing Dynamic Frontend Space bundle,
7
+ listing manageable Dynamic Frontend Spaces, or when the user mentions
8
+ Dynamic Frontend Space deployment through the CLI.
9
+ ---
10
+
11
+ # Unique CLI -- Dynamic Frontend Spaces
12
+
13
+ Use `unique-cli dynamic-frontend` to create or update Dynamic Frontend Spaces
14
+ from upload-ready ZIP bundles or existing Knowledge Base content IDs.
15
+
16
+ The CLI is installed via `pip install unique-sdk` and uses the same
17
+ `UNIQUE_USER_ID`, `UNIQUE_COMPANY_ID`, `UNIQUE_API_KEY`, `UNIQUE_APP_ID`, and
18
+ `UNIQUE_API_BASE` environment variables as the rest of `unique-cli`.
19
+
20
+ ## Create a New Space
21
+
22
+ To upload a ZIP and create a new Dynamic Frontend Space:
23
+
24
+ ```bash
25
+ unique-cli cd /Apps
26
+ unique-cli dynamic-frontend deploy \
27
+ --file ./revenue-dashboard.zip \
28
+ --name "Revenue Dashboard"
29
+ ```
30
+
31
+ To create from an already uploaded KB content ID:
32
+
33
+ ```bash
34
+ unique-cli dynamic-frontend deploy \
35
+ --content-id cont_abc123 \
36
+ --name "Revenue Dashboard"
37
+ ```
38
+
39
+ The command prints the created `spaceId`, `contentId`, and **two** URLs when the
40
+ API returns them — the user-facing view `URL` (jump into the Space in the chat
41
+ app) and the `Config URL` (configure and share the Space in the admin app):
42
+
43
+ ```text
44
+ Created Dynamic Frontend space "Revenue Dashboard" (space_abc123)
45
+ Content: cont_abc123
46
+ URL: https://next.qa.unique.app/chat/space/space_abc123
47
+ Config URL: https://next.qa.unique.app/admin/dynamic-frontend-space/space_abc123
48
+ ```
49
+
50
+ If the installed SDK/CLI version does not print one of these URLs yet, construct
51
+ it from the known frontend base URLs and `spaceId`:
52
+
53
+ ```text
54
+ # View URL (chat app)
55
+ <chat-frontend-url>/space/<spaceId>
56
+ # Config/share URL (admin app)
57
+ <admin-frontend-url>/dynamic-frontend-space/<spaceId>
58
+ ```
59
+
60
+ On QA, those are:
61
+
62
+ ```text
63
+ https://next.qa.unique.app/chat/space/<spaceId>
64
+ https://next.qa.unique.app/admin/dynamic-frontend-space/<spaceId>
65
+ ```
66
+
67
+ ## Update an Existing Space
68
+
69
+ Use `--space-id` to update an existing Dynamic Frontend Space instead of
70
+ creating a new one.
71
+
72
+ Upload a new ZIP and point the existing Space at it:
73
+
74
+ ```bash
75
+ unique-cli cd /Apps
76
+ unique-cli dynamic-frontend deploy \
77
+ --space-id space_abc123 \
78
+ --file ./revenue-dashboard-1.0.1.zip
79
+ ```
80
+
81
+ Update from an already uploaded KB content ID:
82
+
83
+ ```bash
84
+ unique-cli dynamic-frontend deploy \
85
+ --space-id space_abc123 \
86
+ --content-id cont_newbundle123
87
+ ```
88
+
89
+ Rename while updating the bundle:
90
+
91
+ ```bash
92
+ unique-cli dynamic-frontend deploy \
93
+ --space-id space_abc123 \
94
+ --file ./revenue-dashboard-1.0.1.zip \
95
+ --name "Revenue Dashboard"
96
+ ```
97
+
98
+ The update command prints the same `spaceId`, `contentId`, view `URL`, and
99
+ `Config URL` fields as create.
100
+
101
+ ## List Spaces
102
+
103
+ List Dynamic Frontend Spaces the current user can manage:
104
+
105
+ ```bash
106
+ unique-cli dynamic-frontend list
107
+ ```
108
+
109
+ Use JSON output for scripts:
110
+
111
+ ```bash
112
+ unique-cli dynamic-frontend list --json
113
+ unique-cli dynamic-frontend deploy --space-id space_abc123 --file ./app.zip --json
114
+ ```
115
+
116
+ ## Rules
117
+
118
+ - For `--file`, first `unique-cli cd` into the KB folder where the ZIP should be
119
+ uploaded; uploading to root is rejected.
120
+ - Use `--space-id` for updates. Without `--space-id`, `deploy` creates a new
121
+ Dynamic Frontend Space and requires `--name`.
122
+ - `--file` and `--content-id` are mutually exclusive.
123
+ - After create or update, return the CLI output to the user, especially both the
124
+ view `URL` (jump to the Space) and the `Config URL` (configure/share the Space).
125
+ - Never report the BYOC iframe runtime URL
126
+ (`https://byoc.../serve/df-assistant-...`) as the Space URL; it is an
127
+ internal iframe launch URL, not the navigation link users need.