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.
Files changed (86) hide show
  1. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/PKG-INFO +1 -1
  2. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/pyproject.toml +1 -1
  3. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_dynamic_frontend.py +19 -0
  4. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/cli.py +25 -1
  5. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/dynamic_frontend.py +35 -1
  6. unique_sdk-2026.26.0.dev16/unique_sdk/cli/skills/unique-cli-dynamic-frontend/SKILL.md +151 -0
  7. unique_sdk-2026.26.0.dev14/unique_sdk/cli/skills/unique-cli-dynamic-frontend/SKILL.md +0 -105
  8. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/README.md +0 -0
  9. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/__init__.py +0 -0
  10. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_api_requestor.py +0 -0
  11. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_api_resource.py +0 -0
  12. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_api_version.py +0 -0
  13. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_error.py +0 -0
  14. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_http_client.py +0 -0
  15. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_list_object.py +0 -0
  16. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_object_classes.py +0 -0
  17. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_request_options.py +0 -0
  18. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_unique_object.py +0 -0
  19. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_unique_ql.py +0 -0
  20. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_unique_response.py +0 -0
  21. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_util.py +0 -0
  22. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_version.py +0 -0
  23. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/_webhook.py +0 -0
  24. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/__init__.py +0 -0
  25. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_acronyms.py +0 -0
  26. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_agentic_table.py +0 -0
  27. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_analytics_order.py +0 -0
  28. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_benchmarking.py +0 -0
  29. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_briefing.py +0 -0
  30. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_chat_completion.py +0 -0
  31. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_content.py +0 -0
  32. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_elicitation.py +0 -0
  33. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_embedding.py +0 -0
  34. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_event.py +0 -0
  35. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_folder.py +0 -0
  36. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_group.py +0 -0
  37. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_integrated.py +0 -0
  38. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_llm_models.py +0 -0
  39. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_mcp.py +0 -0
  40. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_message.py +0 -0
  41. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_message_assessment.py +0 -0
  42. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_message_execution.py +0 -0
  43. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_message_log.py +0 -0
  44. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_message_tool.py +0 -0
  45. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_module.py +0 -0
  46. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_scheduled_task.py +0 -0
  47. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_search.py +0 -0
  48. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_search_string.py +0 -0
  49. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_short_term_memory.py +0 -0
  50. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_space.py +0 -0
  51. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_user.py +0 -0
  52. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/api_resources/_web_search.py +0 -0
  53. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/__init__.py +0 -0
  54. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/__main__.py +0 -0
  55. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/__init__.py +0 -0
  56. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/_citation_manifest.py +0 -0
  57. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/cite_file.py +0 -0
  58. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/elicitation.py +0 -0
  59. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/files.py +0 -0
  60. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/folders.py +0 -0
  61. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/mcp.py +0 -0
  62. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/navigation.py +0 -0
  63. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/read.py +0 -0
  64. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/scheduled_tasks.py +0 -0
  65. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/search.py +0 -0
  66. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/subagent.py +0 -0
  67. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/web_search.py +0 -0
  68. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/commands/web_search_config.py +0 -0
  69. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/config.py +0 -0
  70. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/formatting.py +0 -0
  71. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/shell.py +0 -0
  72. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/skills/unique-cli-elicitation/SKILL.md +0 -0
  73. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/skills/unique-cli-file-management/SKILL.md +0 -0
  74. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/skills/unique-cli-mcp/SKILL.md +0 -0
  75. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/skills/unique-cli-scheduled-tasks/SKILL.md +0 -0
  76. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/skills/unique-cli-search/SKILL.md +0 -0
  77. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/skills/unique-cli-subagent/SKILL.md +0 -0
  78. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/skills/unique-cli-web-search/SKILL.md +0 -0
  79. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/cli/state.py +0 -0
  80. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/utils/analytics_order_run.py +0 -0
  81. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/utils/benchmarking_run.py +0 -0
  82. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/utils/chat_history.py +0 -0
  83. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/utils/chat_in_space.py +0 -0
  84. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/utils/file_io.py +0 -0
  85. {unique_sdk-2026.26.0.dev14 → unique_sdk-2026.26.0.dev16}/unique_sdk/utils/sources.py +0 -0
  86. {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.dev14
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>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "unique_sdk"
3
- version = "2026.26.0.dev14"
3
+ version = "2026.26.0.dev16"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -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 list Dynamic Frontend spaces."""
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 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
 
@@ -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`.