unique-sdk 2026.26.0.dev14__tar.gz → 2026.26.0.dev16__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.
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/PKG-INFO +1 -1
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/pyproject.toml +1 -1
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_dynamic_frontend.py +19 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/cli.py +25 -1
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/dynamic_frontend.py +35 -1
- unique_sdk-2026.26.0.dev16/unique_sdk/cli/skills/unique-cli-dynamic-frontend/SKILL.md +151 -0
- unique_sdk-2026.26.0.dev14/unique_sdk/cli/skills/unique-cli-dynamic-frontend/SKILL.md +0 -105
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/README.md +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/__init__.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_api_requestor.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_api_resource.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_api_version.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_error.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_http_client.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_list_object.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_object_classes.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_request_options.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_unique_object.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_unique_ql.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_unique_response.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_util.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_version.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_webhook.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/__init__.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_acronyms.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_agentic_table.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_analytics_order.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_benchmarking.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_briefing.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_chat_completion.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_content.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_elicitation.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_embedding.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_event.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_folder.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_group.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_integrated.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_llm_models.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_mcp.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_message.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_message_assessment.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_message_execution.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_message_log.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_message_tool.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_module.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_scheduled_task.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_search.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_search_string.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_short_term_memory.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_space.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_user.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_web_search.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/__init__.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/__main__.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/__init__.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/_citation_manifest.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/cite_file.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/elicitation.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/files.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/folders.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/mcp.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/navigation.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/read.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/scheduled_tasks.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/search.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/subagent.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/web_search.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/web_search_config.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/config.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/formatting.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/shell.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/skills/unique-cli-elicitation/SKILL.md +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/skills/unique-cli-file-management/SKILL.md +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/skills/unique-cli-mcp/SKILL.md +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/skills/unique-cli-scheduled-tasks/SKILL.md +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/skills/unique-cli-search/SKILL.md +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/skills/unique-cli-subagent/SKILL.md +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/skills/unique-cli-web-search/SKILL.md +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/state.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/utils/analytics_order_run.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/utils/benchmarking_run.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/utils/chat_history.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/utils/chat_in_space.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/utils/file_io.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/utils/sources.py +0 -0
- {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/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.
|
|
3
|
+
Version: 2026.26.0.dev16
|
|
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>
|
|
@@ -17,6 +17,7 @@ class DynamicFrontend(APIResource["DynamicFrontend"]):
|
|
|
17
17
|
name: str
|
|
18
18
|
contentId: str
|
|
19
19
|
url: str | None
|
|
20
|
+
configUrl: str | None
|
|
20
21
|
status: dict[str, object] | None
|
|
21
22
|
|
|
22
23
|
class CreateParams(RequestOptions):
|
|
@@ -64,6 +65,24 @@ class DynamicFrontend(APIResource["DynamicFrontend"]):
|
|
|
64
65
|
),
|
|
65
66
|
)
|
|
66
67
|
|
|
68
|
+
@classmethod
|
|
69
|
+
def delete(
|
|
70
|
+
cls,
|
|
71
|
+
space_id: str,
|
|
72
|
+
user_id: str,
|
|
73
|
+
company_id: str,
|
|
74
|
+
) -> "DynamicFrontend":
|
|
75
|
+
"""Delete a deployed Dynamic Frontend space."""
|
|
76
|
+
return cast(
|
|
77
|
+
DynamicFrontend,
|
|
78
|
+
cls._static_request(
|
|
79
|
+
"delete",
|
|
80
|
+
f"/dynamic-frontend/{space_id}",
|
|
81
|
+
user_id,
|
|
82
|
+
company_id,
|
|
83
|
+
),
|
|
84
|
+
)
|
|
85
|
+
|
|
67
86
|
@classmethod
|
|
68
87
|
def list(
|
|
69
88
|
cls,
|
|
@@ -9,6 +9,7 @@ import click
|
|
|
9
9
|
from unique_sdk.cli import __version__
|
|
10
10
|
from unique_sdk.cli.commands.cite_file import cmd_cite_file
|
|
11
11
|
from unique_sdk.cli.commands.dynamic_frontend import (
|
|
12
|
+
cmd_dynamic_frontend_delete,
|
|
12
13
|
cmd_dynamic_frontend_deploy,
|
|
13
14
|
cmd_dynamic_frontend_list,
|
|
14
15
|
)
|
|
@@ -480,7 +481,7 @@ def read_cmd(
|
|
|
480
481
|
|
|
481
482
|
@main.group(name="dynamic-frontend")
|
|
482
483
|
def dynamic_frontend() -> None:
|
|
483
|
-
"""Deploy and
|
|
484
|
+
"""Deploy, list, and delete Dynamic Frontend spaces."""
|
|
484
485
|
|
|
485
486
|
|
|
486
487
|
@dynamic_frontend.command(name="deploy")
|
|
@@ -550,6 +551,29 @@ def dynamic_frontend_list(ctx: click.Context, output_json: bool) -> None:
|
|
|
550
551
|
ctx.exit(1)
|
|
551
552
|
|
|
552
553
|
|
|
554
|
+
@dynamic_frontend.command(name="delete")
|
|
555
|
+
@click.argument("space_id")
|
|
556
|
+
@click.option(
|
|
557
|
+
"--json", "output_json", is_flag=True, default=False, help="Print raw JSON."
|
|
558
|
+
)
|
|
559
|
+
@click.pass_context
|
|
560
|
+
def dynamic_frontend_delete(
|
|
561
|
+
ctx: click.Context, space_id: str, output_json: bool
|
|
562
|
+
) -> None:
|
|
563
|
+
"""Delete a deployed Dynamic Frontend space by its space id.
|
|
564
|
+
|
|
565
|
+
\b
|
|
566
|
+
Example:
|
|
567
|
+
unique-cli dynamic-frontend delete assistant_123
|
|
568
|
+
"""
|
|
569
|
+
output = cmd_dynamic_frontend_delete(
|
|
570
|
+
LazyState.get(ctx), space_id, output_json=output_json
|
|
571
|
+
)
|
|
572
|
+
click.echo(output)
|
|
573
|
+
if output.startswith(_DYNAMIC_FRONTEND_ERROR_PREFIX):
|
|
574
|
+
ctx.exit(1)
|
|
575
|
+
|
|
576
|
+
|
|
553
577
|
@main.command()
|
|
554
578
|
@click.argument("name_or_id")
|
|
555
579
|
@click.pass_context
|
|
@@ -37,11 +37,14 @@ def _format_space(space: object) -> str:
|
|
|
37
37
|
status = getattr(space, "status", None)
|
|
38
38
|
phase = ""
|
|
39
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
43
|
url = url or str(status.get("url") or "")
|
|
43
44
|
return "\t".join(
|
|
44
|
-
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
|
|
|
@@ -94,18 +97,49 @@ def cmd_dynamic_frontend_deploy(
|
|
|
94
97
|
space_id_value = getattr(space, "spaceId", None) or getattr(space, "id", "")
|
|
95
98
|
name_value = getattr(space, "name", name or "")
|
|
96
99
|
url_value = getattr(space, "url", None)
|
|
100
|
+
config_url_value = getattr(space, "configUrl", None)
|
|
97
101
|
url_line = (
|
|
98
102
|
f"\nURL: {url_value}" if isinstance(url_value, str) and url_value else ""
|
|
99
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
|
+
)
|
|
100
109
|
return (
|
|
101
110
|
f'{action} Dynamic Frontend space "{name_value}" ({space_id_value})\n'
|
|
102
111
|
f"Content: {resolved_content_id}"
|
|
103
112
|
f"{url_line}"
|
|
113
|
+
f"{config_url_line}"
|
|
104
114
|
)
|
|
105
115
|
except (ValueError, unique_sdk.APIError, OSError) as e:
|
|
106
116
|
return f"dynamic-frontend deploy: {e}"
|
|
107
117
|
|
|
108
118
|
|
|
119
|
+
def cmd_dynamic_frontend_delete(
|
|
120
|
+
state: ShellState,
|
|
121
|
+
space_id: str,
|
|
122
|
+
*,
|
|
123
|
+
output_json: bool = False,
|
|
124
|
+
) -> str:
|
|
125
|
+
try:
|
|
126
|
+
if not space_id:
|
|
127
|
+
return "dynamic-frontend delete: provide a space id."
|
|
128
|
+
result = unique_sdk.DynamicFrontend.delete(
|
|
129
|
+
space_id,
|
|
130
|
+
user_id=state.config.user_id,
|
|
131
|
+
company_id=state.config.company_id,
|
|
132
|
+
)
|
|
133
|
+
if output_json:
|
|
134
|
+
return json.dumps(dict(result), indent=2, default=str)
|
|
135
|
+
deleted_id = (
|
|
136
|
+
getattr(result, "spaceId", None) or getattr(result, "id", None) or space_id
|
|
137
|
+
)
|
|
138
|
+
return f"Deleted Dynamic Frontend space {deleted_id}"
|
|
139
|
+
except (ValueError, unique_sdk.APIError) as e:
|
|
140
|
+
return f"dynamic-frontend delete: {e}"
|
|
141
|
+
|
|
142
|
+
|
|
109
143
|
def cmd_dynamic_frontend_list(state: ShellState, *, output_json: bool = False) -> str:
|
|
110
144
|
try:
|
|
111
145
|
spaces = unique_sdk.DynamicFrontend.list(
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: unique-cli-dynamic-frontend
|
|
3
|
+
description: >-
|
|
4
|
+
Create, update, list, and delete 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, deleting a deployed Dynamic
|
|
8
|
+
Frontend Space, or when the user mentions Dynamic Frontend Space deployment
|
|
9
|
+
through the CLI.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Unique CLI -- Dynamic Frontend Spaces
|
|
13
|
+
|
|
14
|
+
Use `unique-cli dynamic-frontend` to create, update, list, and delete Dynamic
|
|
15
|
+
Frontend Spaces from upload-ready ZIP bundles or existing Knowledge Base
|
|
16
|
+
content IDs.
|
|
17
|
+
|
|
18
|
+
The CLI is installed via `pip install unique-sdk` and uses the same
|
|
19
|
+
`UNIQUE_USER_ID`, `UNIQUE_COMPANY_ID`, `UNIQUE_API_KEY`, `UNIQUE_APP_ID`, and
|
|
20
|
+
`UNIQUE_API_BASE` environment variables as the rest of `unique-cli`.
|
|
21
|
+
|
|
22
|
+
## Create a New Space
|
|
23
|
+
|
|
24
|
+
To upload a ZIP and create a new Dynamic Frontend Space:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
unique-cli cd /Apps
|
|
28
|
+
unique-cli dynamic-frontend deploy \
|
|
29
|
+
--file ./revenue-dashboard.zip \
|
|
30
|
+
--name "Revenue Dashboard"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
To create from an already uploaded KB content ID:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
unique-cli dynamic-frontend deploy \
|
|
37
|
+
--content-id cont_abc123 \
|
|
38
|
+
--name "Revenue Dashboard"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
The command prints the created `spaceId`, `contentId`, and **two** URLs when the
|
|
42
|
+
API returns them — the user-facing view `URL` (jump into the Space in the chat
|
|
43
|
+
app) and the `Config URL` (configure and share the Space in the admin app):
|
|
44
|
+
|
|
45
|
+
```text
|
|
46
|
+
Created Dynamic Frontend space "Revenue Dashboard" (space_abc123)
|
|
47
|
+
Content: cont_abc123
|
|
48
|
+
URL: https://next.qa.unique.app/chat/space/space_abc123
|
|
49
|
+
Config URL: https://next.qa.unique.app/admin/dynamic-frontend-space/space_abc123
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
If the installed SDK/CLI version does not print one of these URLs yet, construct
|
|
53
|
+
it from the known frontend base URLs and `spaceId`:
|
|
54
|
+
|
|
55
|
+
```text
|
|
56
|
+
# View URL (chat app)
|
|
57
|
+
<chat-frontend-url>/space/<spaceId>
|
|
58
|
+
# Config/share URL (admin app)
|
|
59
|
+
<admin-frontend-url>/dynamic-frontend-space/<spaceId>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
On QA, those are:
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
https://next.qa.unique.app/chat/space/<spaceId>
|
|
66
|
+
https://next.qa.unique.app/admin/dynamic-frontend-space/<spaceId>
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Update an Existing Space
|
|
70
|
+
|
|
71
|
+
Use `--space-id` to update an existing Dynamic Frontend Space instead of
|
|
72
|
+
creating a new one.
|
|
73
|
+
|
|
74
|
+
Upload a new ZIP and point the existing Space at it:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
unique-cli cd /Apps
|
|
78
|
+
unique-cli dynamic-frontend deploy \
|
|
79
|
+
--space-id space_abc123 \
|
|
80
|
+
--file ./revenue-dashboard-1.0.1.zip
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Update from an already uploaded KB content ID:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
unique-cli dynamic-frontend deploy \
|
|
87
|
+
--space-id space_abc123 \
|
|
88
|
+
--content-id cont_newbundle123
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Rename while updating the bundle:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
unique-cli dynamic-frontend deploy \
|
|
95
|
+
--space-id space_abc123 \
|
|
96
|
+
--file ./revenue-dashboard-1.0.1.zip \
|
|
97
|
+
--name "Revenue Dashboard"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
The update command prints the same `spaceId`, `contentId`, view `URL`, and
|
|
101
|
+
`Config URL` fields as create.
|
|
102
|
+
|
|
103
|
+
## Delete a Space
|
|
104
|
+
|
|
105
|
+
Remove a deployed Dynamic Frontend Space by its space id. This deletes the
|
|
106
|
+
backing BYOC app and the owning space (and its access grants):
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
unique-cli dynamic-frontend delete space_abc123
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
The command prints a confirmation:
|
|
113
|
+
|
|
114
|
+
```text
|
|
115
|
+
Deleted Dynamic Frontend space space_abc123
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Deletion is permanent and requires manage access on the space (or a
|
|
119
|
+
company-wide space-admin role). Always confirm the correct `spaceId` with the
|
|
120
|
+
user before deleting — there is no undo.
|
|
121
|
+
|
|
122
|
+
## List Spaces
|
|
123
|
+
|
|
124
|
+
List Dynamic Frontend Spaces the current user can manage:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
unique-cli dynamic-frontend list
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Use JSON output for scripts:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
unique-cli dynamic-frontend list --json
|
|
134
|
+
unique-cli dynamic-frontend deploy --space-id space_abc123 --file ./app.zip --json
|
|
135
|
+
unique-cli dynamic-frontend delete space_abc123 --json
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Rules
|
|
139
|
+
|
|
140
|
+
- For `--file`, first `unique-cli cd` into the KB folder where the ZIP should be
|
|
141
|
+
uploaded; uploading to root is rejected.
|
|
142
|
+
- Use `--space-id` for updates. Without `--space-id`, `deploy` creates a new
|
|
143
|
+
Dynamic Frontend Space and requires `--name`.
|
|
144
|
+
- `--file` and `--content-id` are mutually exclusive.
|
|
145
|
+
- `delete` is permanent and has no undo — confirm the `spaceId` with the user
|
|
146
|
+
first, and never guess which space to delete.
|
|
147
|
+
- After create or update, return the CLI output to the user, especially both the
|
|
148
|
+
view `URL` (jump to the Space) and the `Config URL` (configure/share the Space).
|
|
149
|
+
- Never report the BYOC iframe runtime URL
|
|
150
|
+
(`https://byoc.../serve/df-assistant-...`) as the Space URL; it is an
|
|
151
|
+
internal iframe launch URL, not the navigation link users need.
|
|
@@ -1,105 +0,0 @@
|
|
|
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 direct `URL` when the
|
|
40
|
-
API returns it:
|
|
41
|
-
|
|
42
|
-
```text
|
|
43
|
-
Created Dynamic Frontend space "Revenue Dashboard" (space_abc123)
|
|
44
|
-
Content: cont_abc123
|
|
45
|
-
URL: https://chat.example.com/space/space_abc123
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## Update an Existing Space
|
|
49
|
-
|
|
50
|
-
Use `--space-id` to update an existing Dynamic Frontend Space instead of
|
|
51
|
-
creating a new one.
|
|
52
|
-
|
|
53
|
-
Upload a new ZIP and point the existing Space at it:
|
|
54
|
-
|
|
55
|
-
```bash
|
|
56
|
-
unique-cli cd /Apps
|
|
57
|
-
unique-cli dynamic-frontend deploy \
|
|
58
|
-
--space-id space_abc123 \
|
|
59
|
-
--file ./revenue-dashboard-1.0.1.zip
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
Update from an already uploaded KB content ID:
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
unique-cli dynamic-frontend deploy \
|
|
66
|
-
--space-id space_abc123 \
|
|
67
|
-
--content-id cont_newbundle123
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
Rename while updating the bundle:
|
|
71
|
-
|
|
72
|
-
```bash
|
|
73
|
-
unique-cli dynamic-frontend deploy \
|
|
74
|
-
--space-id space_abc123 \
|
|
75
|
-
--file ./revenue-dashboard-1.0.1.zip \
|
|
76
|
-
--name "Revenue Dashboard"
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
The update command prints the same `spaceId`, `contentId`, and direct `URL`
|
|
80
|
-
fields as create.
|
|
81
|
-
|
|
82
|
-
## List Spaces
|
|
83
|
-
|
|
84
|
-
List Dynamic Frontend Spaces the current user can manage:
|
|
85
|
-
|
|
86
|
-
```bash
|
|
87
|
-
unique-cli dynamic-frontend list
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
Use JSON output for scripts:
|
|
91
|
-
|
|
92
|
-
```bash
|
|
93
|
-
unique-cli dynamic-frontend list --json
|
|
94
|
-
unique-cli dynamic-frontend deploy --space-id space_abc123 --file ./app.zip --json
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
## Rules
|
|
98
|
-
|
|
99
|
-
- For `--file`, first `unique-cli cd` into the KB folder where the ZIP should be
|
|
100
|
-
uploaded; uploading to root is rejected.
|
|
101
|
-
- Use `--space-id` for updates. Without `--space-id`, `deploy` creates a new
|
|
102
|
-
Dynamic Frontend Space and requires `--name`.
|
|
103
|
-
- `--file` and `--content-id` are mutually exclusive.
|
|
104
|
-
- After create or update, return the CLI output to the user, especially the
|
|
105
|
-
direct `URL`.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/__init__.py
RENAMED
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_acronyms.py
RENAMED
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_agentic_table.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_benchmarking.py
RENAMED
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_briefing.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_content.py
RENAMED
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_elicitation.py
RENAMED
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_embedding.py
RENAMED
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_event.py
RENAMED
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_folder.py
RENAMED
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_group.py
RENAMED
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_integrated.py
RENAMED
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_llm_models.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_message.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_message_log.py
RENAMED
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_message_tool.py
RENAMED
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_module.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_search.py
RENAMED
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_search_string.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_space.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_web_search.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/cite_file.py
RENAMED
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/elicitation.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/folders.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/navigation.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/scheduled_tasks.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/subagent.py
RENAMED
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/web_search.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/utils/analytics_order_run.py
RENAMED
|
File without changes
|
{unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/utils/benchmarking_run.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|