unique-sdk 2026.30.0.dev2__tar.gz → 2026.30.0.dev4__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 (88) hide show
  1. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/PKG-INFO +1 -1
  2. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/pyproject.toml +1 -1
  3. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/commands/search.py +9 -2
  4. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/skills/unique-cli-search/SKILL.md +1 -37
  5. unique_sdk-2026.30.0.dev4/unique_sdk/cli/skills/unique-cli-uploaded-search/SKILL.md +113 -0
  6. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/state.py +10 -0
  7. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/README.md +0 -0
  8. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/__init__.py +0 -0
  9. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/_api_requestor.py +0 -0
  10. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/_api_resource.py +0 -0
  11. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/_api_version.py +0 -0
  12. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/_error.py +0 -0
  13. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/_http_client.py +0 -0
  14. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/_list_object.py +0 -0
  15. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/_object_classes.py +0 -0
  16. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/_request_options.py +0 -0
  17. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/_unique_object.py +0 -0
  18. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/_unique_ql.py +0 -0
  19. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/_unique_response.py +0 -0
  20. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/_util.py +0 -0
  21. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/_version.py +0 -0
  22. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/_webhook.py +0 -0
  23. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/__init__.py +0 -0
  24. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_acronyms.py +0 -0
  25. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_agentic_table.py +0 -0
  26. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_analytics_order.py +0 -0
  27. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_benchmarking.py +0 -0
  28. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_briefing.py +0 -0
  29. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_chat_completion.py +0 -0
  30. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_content.py +0 -0
  31. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_dynamic_frontend.py +0 -0
  32. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_elicitation.py +0 -0
  33. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_embedding.py +0 -0
  34. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_event.py +0 -0
  35. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_folder.py +0 -0
  36. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_group.py +0 -0
  37. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_integrated.py +0 -0
  38. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_llm_models.py +0 -0
  39. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_mcp.py +0 -0
  40. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_message.py +0 -0
  41. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_message_assessment.py +0 -0
  42. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_message_execution.py +0 -0
  43. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_message_log.py +0 -0
  44. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_message_tool.py +0 -0
  45. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_module.py +0 -0
  46. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_scheduled_task.py +0 -0
  47. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_search.py +0 -0
  48. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_search_string.py +0 -0
  49. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_short_term_memory.py +0 -0
  50. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_space.py +0 -0
  51. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_user.py +0 -0
  52. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/api_resources/_web_search.py +0 -0
  53. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/__init__.py +0 -0
  54. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/__main__.py +0 -0
  55. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/cli.py +0 -0
  56. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/commands/__init__.py +0 -0
  57. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/commands/_citation_manifest.py +0 -0
  58. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/commands/browser.py +0 -0
  59. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/commands/cite_file.py +0 -0
  60. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/commands/dynamic_frontend.py +0 -0
  61. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/commands/elicitation.py +0 -0
  62. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/commands/files.py +0 -0
  63. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/commands/folders.py +0 -0
  64. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/commands/mcp.py +0 -0
  65. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/commands/navigation.py +0 -0
  66. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/commands/read.py +0 -0
  67. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/commands/scheduled_tasks.py +0 -0
  68. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/commands/subagent.py +0 -0
  69. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/commands/web_search.py +0 -0
  70. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/commands/web_search_config.py +0 -0
  71. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/config.py +0 -0
  72. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/formatting.py +0 -0
  73. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/metadata_filter.py +0 -0
  74. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/shell.py +0 -0
  75. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/skills/unique-cli-dynamic-frontend/SKILL.md +0 -0
  76. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/skills/unique-cli-elicitation/SKILL.md +0 -0
  77. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/skills/unique-cli-file-management/SKILL.md +0 -0
  78. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/skills/unique-cli-mcp/SKILL.md +0 -0
  79. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/skills/unique-cli-scheduled-tasks/SKILL.md +0 -0
  80. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/skills/unique-cli-subagent/SKILL.md +0 -0
  81. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/cli/skills/unique-cli-web-search/SKILL.md +0 -0
  82. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/utils/analytics_order_run.py +0 -0
  83. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/utils/benchmarking_run.py +0 -0
  84. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/utils/chat_history.py +0 -0
  85. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/utils/chat_in_space.py +0 -0
  86. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/utils/file_io.py +0 -0
  87. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/unique_sdk/utils/sources.py +0 -0
  88. {unique_sdk-2026.30.0.dev2 → unique_sdk-2026.30.0.dev4}/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.30.0.dev2
3
+ Version: 2026.30.0.dev4
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.30.0.dev2"
3
+ version = "2026.30.0.dev4"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -261,9 +261,16 @@ def cmd_search(
261
261
  "searchString": query,
262
262
  "searchType": "COMBINED",
263
263
  "limit": limit,
264
+ # An unscoped search must send an explicit ``scopeIds: null``,
265
+ # never omit the key. An absent key reaches node-ingestion as
266
+ # ``undefined`` and is destructure-defaulted to ``[]``, which
267
+ # getScopes treats as "restrict to zero scopes" — an entire-KB
268
+ # search then returns nothing on companies without file-based
269
+ # access. A JSON ``null`` bypasses both the default and the
270
+ # truthy check, matching what unique_toolkit's
271
+ # search_content_chunks sends. See UN-22753.
272
+ "scopeIds": scope_ids or None,
264
273
  }
265
- if scope_ids:
266
- search_params["scopeIds"] = scope_ids
267
274
  if metadata_filter:
268
275
  search_params["metaDataFilter"] = metadata_filter
269
276
 
@@ -7,10 +7,7 @@ description: >-
7
7
  platform. Use whenever the user asks to find, search, or query documents
8
8
  or content on Unique, including filtering by folder or metadata.
9
9
  Also covers `unique-cli read <cont_id>` for reading the full indexed text
10
- of a document when its content ID is already known, and
11
- `unique-cli uploaded-search "<query>"` for searching documents uploaded for
12
- the current task/row, which are NOT in the knowledge-base scope and never
13
- appear in `unique-cli search`.
10
+ of a document when its content ID is already known.
14
11
  NOTE: This search uses combined vector + full-text indexing. Excel
15
12
  (.xlsx/.xls), CSV (.csv), and image files are NOT full-text indexed,
16
13
  so they will not appear in search results. To locate these file types,
@@ -95,43 +92,10 @@ unique-cli search "audit" -m department=Legal -m year=2025
95
92
  unique-cli search "regulatory" -f /Legal -m year=2025 -l 50
96
93
  ```
97
94
 
98
- ## Searching Uploaded Documents (`uploaded-search`)
99
-
100
- Documents **uploaded for the current task** (e.g. an Agentic Table row's
101
- attached files) are **not** part of the knowledge-base folder scope. They will
102
- **never** appear in `unique-cli search` results, no matter the folder or
103
- metadata filters — uploaded files are scoped to the chat, not to a KB folder.
104
- Use `uploaded-search` to retrieve them:
105
-
106
- ```bash
107
- # Search the documents uploaded for this row/task
108
- unique-cli uploaded-search "target asset classes and investment strategy"
109
-
110
- # Limit results
111
- unique-cli uploaded-search "fee structure" --limit 50
112
- ```
113
-
114
- When to use which:
115
-
116
- | You want to search… | Command |
117
- |---------------------|---------|
118
- | The knowledge base (folders the task scope grants) | `unique-cli search "<query>"` |
119
- | Documents uploaded for **this** row/task | `unique-cli uploaded-search "<query>"` |
120
-
121
- `uploaded-search` returns the same `<sourceN>...</sourceN>` blocks as `search`
122
- and shares the **same per-turn citation manifest**, so `[sourceN]` numbering is
123
- continuous across both commands within a turn — cite an uploaded-document fact
124
- exactly the same way (`[sourceN]`). If no documents were uploaded for the task,
125
- the command reports that and you should fall back to `unique-cli search`.
126
-
127
- > **Note:** there is no `--folder`/`--metadata` for `uploaded-search` — the set
128
- > of uploaded documents is fixed by what was attached to the task.
129
-
130
95
  ## Command Reference
131
96
 
132
97
  ```
133
98
  unique-cli search <query> [--folder <path|scope_id>] [--metadata <key=value>]... [--limit <N>]
134
- unique-cli uploaded-search <query> [--limit <N>]
135
99
  ```
136
100
 
137
101
  | Option | Short | Default | Description |
@@ -0,0 +1,113 @@
1
+ ---
2
+ name: unique-cli-uploaded-search
3
+ description: >-
4
+ Search the documents uploaded for the CURRENT task/row (e.g. an Agentic
5
+ Table row's attached files) via the `unique-cli uploaded-search "<query>"`
6
+ command, with the same per-turn citation tracking as `unique-cli search`
7
+ so cited facts render as `<sup>N</sup>` footnotes and clickable reference
8
+ chips on the Unique platform. ALWAYS use this skill when the user refers to
9
+ documents they uploaded/attached to this task, or when you need facts from
10
+ the task's own attached files. These uploaded files are scoped to the chat,
11
+ NOT to a knowledge-base folder, so they will NEVER appear in
12
+ `unique-cli search` results no matter the folder or metadata filters. Use
13
+ `unique-cli search` for the knowledge base and this command for the task's
14
+ uploaded documents; the two are complementary and citation numbering is
15
+ shared across them within a turn.
16
+ ---
17
+
18
+ # Unique CLI -- Uploaded Document Search
19
+
20
+ Documents **uploaded for the current task** (for example an Agentic Table
21
+ row's attached files) are **not** part of the knowledge-base folder scope.
22
+ They are scoped to the chat, so they will **never** appear in
23
+ `unique-cli search` results — no folder or metadata filter can surface them.
24
+ Use `unique-cli uploaded-search` to retrieve them.
25
+
26
+ ## Basic Usage
27
+
28
+ ```bash
29
+ # Search the documents uploaded for this row/task
30
+ unique-cli uploaded-search "target asset classes and investment strategy"
31
+
32
+ # Limit results
33
+ unique-cli uploaded-search "fee structure" --limit 50
34
+ ```
35
+
36
+ There is **no** `--folder`/`--metadata` for `uploaded-search` — the set of
37
+ uploaded documents is fixed by what was attached to the task.
38
+
39
+ If no documents were uploaded for this task, the command reports that and you
40
+ should fall back to `unique-cli search` for the knowledge base.
41
+
42
+ ## When to use which command
43
+
44
+ | You want to search… | Command |
45
+ |---------------------|---------|
46
+ | The knowledge base (folders the task scope grants) | `unique-cli search "<query>"` |
47
+ | Documents uploaded for **this** row/task | `unique-cli uploaded-search "<query>"` |
48
+
49
+ ## Output Format
50
+
51
+ Each result is rendered as a `<sourceN>...</sourceN>` block, identical to
52
+ `unique-cli search`. `N` is **1-based** and **shared with `unique-cli search`
53
+ within the same turn** — both commands append to the same per-turn citation
54
+ manifest, so numbering stays continuous across them (a `search` call that
55
+ emitted `<source1>`–`<source3>` is followed by an `uploaded-search` call whose
56
+ first result is `<source4>`).
57
+
58
+ ```
59
+ Found 1 result(s):
60
+
61
+ <source1>
62
+ <|document|>investment-mandate.pdf</|document|>
63
+ <|page|>2</|page|>
64
+ <|info|>cont_abc123</|info|>
65
+ ...the mandate targets EMEA equities with a 5% cap per issuer...
66
+ </source1>
67
+ ```
68
+
69
+ ## Citation Rules
70
+
71
+ Cite a fact from `uploaded-search` results with `[sourceN]`, **exactly** as you
72
+ would for `unique-cli search` — the two share the same namespace and manifest.
73
+ The Unique platform converts each `[sourceN]` marker in your final answer into a
74
+ `<sup>N</sup>` footnote and a clickable reference chip.
75
+
76
+ ```
77
+ The uploaded mandate caps single-issuer exposure at 5% [source1].
78
+ ```
79
+
80
+ **Rules** (enforced by the platform's reference post-processor):
81
+
82
+ 1. **`[sourceN]` is for KB and uploaded-document results.** Web results from
83
+ `unique-cli web-search` use `[websourceN]` — never mix the two namespaces.
84
+ 2. Only cite numbers you saw in the **current** turn's `search` /
85
+ `uploaded-search` output. Numbers from previous turns are stale and will be
86
+ silently dropped.
87
+ 3. Write `source` in singular form with the number in digits: `[source1]`,
88
+ `[source2]` — not `[Source 1]` or `[source one]`.
89
+ 4. Prefer citing each fact with a single, most-relevant source.
90
+ 5. Do not invent source numbers for remembered or inferred facts.
91
+
92
+ ## Command Reference
93
+
94
+ ```
95
+ unique-cli uploaded-search <query> [--limit <N>]
96
+ ```
97
+
98
+ | Option | Short | Default | Description |
99
+ |--------|-------|---------|-------------|
100
+ | `--limit` | `-l` | 200 | Max results |
101
+
102
+ ## Prerequisites
103
+
104
+ Requires these environment variables:
105
+
106
+ ```bash
107
+ UNIQUE_USER_ID # User ID (required)
108
+ UNIQUE_COMPANY_ID # Company ID (required)
109
+ UNIQUE_API_KEY # API key — optional on localhost / secured cluster
110
+ UNIQUE_APP_ID # App ID — optional on localhost / secured cluster
111
+ ```
112
+
113
+ Install: `pip install unique-sdk`
@@ -263,6 +263,14 @@ class ShellState:
263
263
  """Return True if *content_id* is in the current workspace scope.
264
264
 
265
265
  Precedence (UN-21780):
266
+ 0. Per-row uploaded documents (``.unique-uploaded.json``) surfaced by
267
+ ``unique-cli uploaded-search`` are task inputs that live *outside* the
268
+ KB scope boundary by design, so neither the metadata filter nor the
269
+ static ``scopeIds`` path below would admit them. Exempt them for
270
+ non-destructive access so the agent can ``read``/``ls``/``cite`` a doc
271
+ it just found via uploaded-search — mirroring the chat-file exemption.
272
+ Mutating ops (``rm``/``mv``) pass ``allow_chat_files=False`` and stay
273
+ denied, so an uploaded input can't be deleted or renamed this way.
266
274
  1. A per-message UniqueQL ``metaDataFilter`` (e.g. an Agentic Table
267
275
  column's ``scope_rules``) is the authority for this turn and
268
276
  *replaces* the static ``scopeIds`` for content access. Files the
@@ -275,6 +283,8 @@ class ShellState:
275
283
  ``is_folder_target_within_workspace``).
276
284
  3. With neither configured, everything is in scope.
277
285
  """
286
+ if allow_chat_files and content_id in self.uploaded_search_content_ids:
287
+ return True
278
288
  if self.workspace_metadata_filter is not None:
279
289
  if allow_chat_files and content_id in self._chat_file_content_ids():
280
290
  return True