soliplex 0.77__tar.gz → 0.77.2__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.
- {soliplex-0.77/src/soliplex.egg-info → soliplex-0.77.2}/PKG-INFO +2 -2
- {soliplex-0.77 → soliplex-0.77.2}/pyproject.toml +2 -2
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/config/rooms.py +20 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/loggers.py +2 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/models.py +10 -2
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/views/authz.py +22 -0
- {soliplex-0.77 → soliplex-0.77.2/src/soliplex.egg-info}/PKG-INFO +2 -2
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex.egg-info/requires.txt +1 -1
- {soliplex-0.77 → soliplex-0.77.2}/LICENSE +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/MANIFEST.in +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/README.md +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/example/skills/bare-bones/SKILL.md +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/example/skills/stanzas/SKILL.md +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/setup.cfg +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/skills/soliplex-docs/SKILL.md +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/agents.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/agui/__init__.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/agui/parser.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/agui/persistence.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/agui/schema.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/agui/util.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/authn.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/authz/__init__.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/authz/persistence.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/authz/schema.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/capabilities/filesystem.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/capabilities/rag_audit.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/cli/admin_users.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/cli/ask.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/cli/audit.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/cli/cli_util.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/cli/main.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/cli/ollama.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/cli/room_authz.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/cli/serve.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/cli/types.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/completions.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/config/__init__.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/config/_utils.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/config/agents.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/config/agui.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/config/authsystem.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/config/completions.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/config/exceptions.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/config/installation.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/config/logfire.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/config/meta.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/config/middleware.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/config/quizzes.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/config/rag.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/config/routing.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/config/secrets.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/config/skills.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/config/tools.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/examples.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/installation.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/log_ingest.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/main.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/mcp_auth.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/mcp_client.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/mcp_server.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/ollama.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/quizzes.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/rag_audit.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/sandbox_audit.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/secrets.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/skills/bwrap_sandbox/SKILL.md +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/skills/bwrap_sandbox/__init__.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/titles.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/tools/__init__.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/tools/agui_run_feedback.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/tools/file_uploads.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/tools/rag.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/tui/cli.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/tui/main.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/tui/rest_api.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/tui/serve.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/util.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/views/__init__.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/views/agui.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/views/authn.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/views/completions.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/views/installation.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/views/log_ingest.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/views/quizzes.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/views/room_file_uploads.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/views/rooms.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/views/sandbox_workdirs.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/views/stats.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/views/streaming.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex/views/thread_file_uploads.py +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex.egg-info/SOURCES.txt +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex.egg-info/dependency_links.txt +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex.egg-info/entry_points.txt +0 -0
- {soliplex-0.77 → soliplex-0.77.2}/src/soliplex.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: soliplex
|
|
3
|
-
Version: 0.77
|
|
3
|
+
Version: 0.77.2
|
|
4
4
|
Summary: An AI-powered Retrieval-Augmented Generation (RAG) system with a modern web interface.
|
|
5
5
|
Author-email: Enfold <info@enfoldsystems.net>
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -13,7 +13,7 @@ Requires-Dist: aiohttp<3.15,>=3.14.2
|
|
|
13
13
|
Requires-Dist: aiosqlite
|
|
14
14
|
Requires-Dist: alembic<1.19,>=1.18.4
|
|
15
15
|
Requires-Dist: authlib
|
|
16
|
-
Requires-Dist: bubble-sandbox<0.
|
|
16
|
+
Requires-Dist: bubble-sandbox<0.13,>=0.12.0
|
|
17
17
|
Requires-Dist: cryptography>=50.0.0
|
|
18
18
|
Requires-Dist: fastapi
|
|
19
19
|
Requires-Dist: fastmcp<3.4,>=3.3.0
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "soliplex"
|
|
7
|
-
version = "0.77"
|
|
7
|
+
version = "0.77.2"
|
|
8
8
|
description = "An AI-powered Retrieval-Augmented Generation (RAG) system with a modern web interface."
|
|
9
9
|
authors = [{ name = "Enfold", email = "info@enfoldsystems.net" }]
|
|
10
10
|
readme = "README.md"
|
|
@@ -19,7 +19,7 @@ dependencies = [
|
|
|
19
19
|
"aiosqlite",
|
|
20
20
|
"alembic >= 1.18.4, < 1.19",
|
|
21
21
|
"authlib",
|
|
22
|
-
"bubble-sandbox >= 0.
|
|
22
|
+
"bubble-sandbox >= 0.12.0, < 0.13",
|
|
23
23
|
"cryptography >= 50.0.0", # PYSEC-2026-3552
|
|
24
24
|
"fastapi",
|
|
25
25
|
"fastmcp >= 3.3.0, < 3.4",
|
|
@@ -217,6 +217,26 @@ class RoomConfig:
|
|
|
217
217
|
"""Does the room have the sandbox skill?"""
|
|
218
218
|
return self.skills.has_sandbox if self.skills is not None else False
|
|
219
219
|
|
|
220
|
+
@property
|
|
221
|
+
def has_thread_uploads(self) -> bool:
|
|
222
|
+
"""Can files be uploaded to threads in this room at all?"""
|
|
223
|
+
upload_path = getattr(
|
|
224
|
+
self._installation_config,
|
|
225
|
+
"threads_upload_path",
|
|
226
|
+
None,
|
|
227
|
+
)
|
|
228
|
+
return self.has_sandbox and upload_path is not None
|
|
229
|
+
|
|
230
|
+
@property
|
|
231
|
+
def has_room_uploads(self) -> bool:
|
|
232
|
+
"""Can files be uploaded to this room at all?"""
|
|
233
|
+
upload_path = getattr(
|
|
234
|
+
self._installation_config,
|
|
235
|
+
"rooms_upload_path",
|
|
236
|
+
None,
|
|
237
|
+
)
|
|
238
|
+
return self.has_sandbox and upload_path is not None
|
|
239
|
+
|
|
220
240
|
@property
|
|
221
241
|
def agui_feature_names(self) -> tuple[str]:
|
|
222
242
|
agent_features = set(self.agent_config.agui_feature_names)
|
|
@@ -55,6 +55,7 @@ AUTHZ_GET_ROOM_POLICY = "get room policy"
|
|
|
55
55
|
AUTHZ_POST_ROOM_POLICY = "post room policy"
|
|
56
56
|
AUTHZ_DELETE_ROOM_POLICY = "delete room policy"
|
|
57
57
|
AUTHZ_GET_INSTALLATION_AUTHZ = "get installation authz"
|
|
58
|
+
AUTHZ_GET_USER_AUTHZ = "get user authz"
|
|
58
59
|
|
|
59
60
|
INST_GET_INSTALLATION = "get installation"
|
|
60
61
|
INST_GET_INSTALLATION_VERSIONS = "get installation versions"
|
|
@@ -114,6 +115,7 @@ AUDIT_ACTION_UPDATE = "update"
|
|
|
114
115
|
AUDIT_ACTION_DELETE = "delete"
|
|
115
116
|
AUDIT_RESOURCE_ROOM_POLICY = "room-policy"
|
|
116
117
|
AUDIT_RESOURCE_INSTALLATION_AUTHZ = "installation-authz"
|
|
118
|
+
AUDIT_RESOURCE_USER_AUTHZ = "user-authz"
|
|
117
119
|
AUDIT_RESOURCE_INSTALLATION = "installation"
|
|
118
120
|
AUDIT_RESOURCE_INSTALLATION_VERSIONS = "installation-versions"
|
|
119
121
|
AUDIT_RESOURCE_INSTALLATION_PROVIDERS = "installation-providers"
|
|
@@ -262,6 +262,8 @@ class Room(pydantic.BaseModel):
|
|
|
262
262
|
agent: Agent
|
|
263
263
|
agui_feature_names: list[str]
|
|
264
264
|
allow_mcp: bool
|
|
265
|
+
has_thread_uploads: bool
|
|
266
|
+
has_room_uploads: bool
|
|
265
267
|
|
|
266
268
|
@classmethod
|
|
267
269
|
def from_config(cls, room_config: config_rooms.RoomConfig):
|
|
@@ -300,9 +302,11 @@ class Room(pydantic.BaseModel):
|
|
|
300
302
|
quizzes={
|
|
301
303
|
quiz.id: Quiz.from_config(quiz) for quiz in room_config.quizzes
|
|
302
304
|
},
|
|
303
|
-
allow_mcp=room_config.allow_mcp,
|
|
304
|
-
agui_feature_names=list(room_config.agui_feature_names),
|
|
305
305
|
agent=agent,
|
|
306
|
+
agui_feature_names=list(room_config.agui_feature_names),
|
|
307
|
+
allow_mcp=room_config.allow_mcp,
|
|
308
|
+
has_thread_uploads=room_config.has_thread_uploads,
|
|
309
|
+
has_room_uploads=room_config.has_room_uploads,
|
|
306
310
|
)
|
|
307
311
|
|
|
308
312
|
|
|
@@ -923,6 +927,10 @@ class InstallationAuthorization(pydantic.BaseModel):
|
|
|
923
927
|
room_policies: RoomPolicyMap = pydantic.Field(default_factory=dict)
|
|
924
928
|
|
|
925
929
|
|
|
930
|
+
class UserAuthorization(pydantic.BaseModel):
|
|
931
|
+
is_admin_user: bool
|
|
932
|
+
|
|
933
|
+
|
|
926
934
|
# ----------------------------------------------------------------------------
|
|
927
935
|
# 'ask_with_rich_citations' tool models
|
|
928
936
|
# ----------------------------------------------------------------------------
|
|
@@ -170,3 +170,25 @@ async def get_installation_authz(
|
|
|
170
170
|
for room_id, room_policy in room_policies.items()
|
|
171
171
|
},
|
|
172
172
|
)
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
@util.logfire_span("GET /v1/user/authz")
|
|
176
|
+
@router.get(
|
|
177
|
+
"/v1/user/authz",
|
|
178
|
+
summary="Get authorization info for the user",
|
|
179
|
+
)
|
|
180
|
+
async def get_user_authz(
|
|
181
|
+
the_installation: installation.Installation = depend_the_installation,
|
|
182
|
+
the_admin_users: authz.AdminUserPolicy = depend_the_admin_users,
|
|
183
|
+
the_user_claims: authn.UserClaims = depend_the_user_claims,
|
|
184
|
+
the_authz_logger: loggers.LogWrapper = depend_the_authz_logger,
|
|
185
|
+
) -> models.UserAuthorization:
|
|
186
|
+
the_authz_logger.debug(loggers.AUTHZ_GET_USER_AUTHZ)
|
|
187
|
+
|
|
188
|
+
is_admin_user = await the_admin_users.check_admin_access(
|
|
189
|
+
the_user_claims,
|
|
190
|
+
resource=loggers.AUDIT_RESOURCE_USER_AUTHZ,
|
|
191
|
+
action=loggers.AUDIT_ACTION_READ,
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
return models.UserAuthorization(is_admin_user=is_admin_user)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: soliplex
|
|
3
|
-
Version: 0.77
|
|
3
|
+
Version: 0.77.2
|
|
4
4
|
Summary: An AI-powered Retrieval-Augmented Generation (RAG) system with a modern web interface.
|
|
5
5
|
Author-email: Enfold <info@enfoldsystems.net>
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -13,7 +13,7 @@ Requires-Dist: aiohttp<3.15,>=3.14.2
|
|
|
13
13
|
Requires-Dist: aiosqlite
|
|
14
14
|
Requires-Dist: alembic<1.19,>=1.18.4
|
|
15
15
|
Requires-Dist: authlib
|
|
16
|
-
Requires-Dist: bubble-sandbox<0.
|
|
16
|
+
Requires-Dist: bubble-sandbox<0.13,>=0.12.0
|
|
17
17
|
Requires-Dist: cryptography>=50.0.0
|
|
18
18
|
Requires-Dist: fastapi
|
|
19
19
|
Requires-Dist: fastmcp<3.4,>=3.3.0
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|