soliplex 0.82.2__tar.gz → 0.82.4__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 (106) hide show
  1. {soliplex-0.82.2/src/soliplex.egg-info → soliplex-0.82.4}/PKG-INFO +1 -1
  2. {soliplex-0.82.2 → soliplex-0.82.4}/pyproject.toml +1 -1
  3. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/authsystem.py +1 -1
  4. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/views/authn.py +34 -10
  5. {soliplex-0.82.2 → soliplex-0.82.4/src/soliplex.egg-info}/PKG-INFO +1 -1
  6. {soliplex-0.82.2 → soliplex-0.82.4}/LICENSE +0 -0
  7. {soliplex-0.82.2 → soliplex-0.82.4}/MANIFEST.in +0 -0
  8. {soliplex-0.82.2 → soliplex-0.82.4}/README.md +0 -0
  9. {soliplex-0.82.2 → soliplex-0.82.4}/example/skills/bare-bones/SKILL.md +0 -0
  10. {soliplex-0.82.2 → soliplex-0.82.4}/example/skills/stanzas/SKILL.md +0 -0
  11. {soliplex-0.82.2 → soliplex-0.82.4}/setup.cfg +0 -0
  12. {soliplex-0.82.2 → soliplex-0.82.4}/skills/soliplex-docs/SKILL.md +0 -0
  13. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/agents.py +0 -0
  14. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/agui/__init__.py +0 -0
  15. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/agui/parser.py +0 -0
  16. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/agui/persistence.py +0 -0
  17. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/agui/schema.py +0 -0
  18. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/agui/util.py +0 -0
  19. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/alembic_migrations/__init__.py +0 -0
  20. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/alembic_migrations/env.py +0 -0
  21. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/alembic_migrations/versions/216d48e1e2e5_soliplex_v0_53.py +0 -0
  22. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/alembic_migrations/versions/4b63e5f3f39e_soliplex_v0_51_1.py +0 -0
  23. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/alembic_migrations/versions/63edaa5987f6_soliplex_v0_67.py +0 -0
  24. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/alembic_migrations/versions/a1c7d3e90b42_soliplex_v0_80.py +0 -0
  25. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/alembic_migrations/versions/b7e2f41c9d05_soliplex_v0_82.py +0 -0
  26. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/alembic_migrations/versions/d5009d4f9874_soliplex_v0_44.py +0 -0
  27. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/authn.py +0 -0
  28. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/authz/__init__.py +0 -0
  29. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/authz/persistence.py +0 -0
  30. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/authz/schema.py +0 -0
  31. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/capabilities/filesystem.py +0 -0
  32. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/capabilities/rag_audit.py +0 -0
  33. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/cli/admin_users.py +0 -0
  34. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/cli/ask.py +0 -0
  35. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/cli/audit.py +0 -0
  36. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/cli/cli_util.py +0 -0
  37. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/cli/database.py +0 -0
  38. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/cli/main.py +0 -0
  39. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/cli/ollama.py +0 -0
  40. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/cli/room_authz.py +0 -0
  41. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/cli/serve.py +0 -0
  42. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/cli/types.py +0 -0
  43. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/completions.py +0 -0
  44. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/__init__.py +0 -0
  45. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/_utils.py +0 -0
  46. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/agents.py +0 -0
  47. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/agui.py +0 -0
  48. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/completions.py +0 -0
  49. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/exceptions.py +0 -0
  50. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/installation.py +0 -0
  51. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/interpolation.py +0 -0
  52. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/logfire.py +0 -0
  53. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/meta.py +0 -0
  54. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/middleware.py +0 -0
  55. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/quizzes.py +0 -0
  56. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/rag.py +0 -0
  57. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/rooms.py +0 -0
  58. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/routing.py +0 -0
  59. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/secrets.py +0 -0
  60. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/skills.py +0 -0
  61. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/config/tools.py +0 -0
  62. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/examples.py +0 -0
  63. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/installation.py +0 -0
  64. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/log_ingest.py +0 -0
  65. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/loggers.py +0 -0
  66. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/main.py +0 -0
  67. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/mcp_auth.py +0 -0
  68. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/mcp_client.py +0 -0
  69. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/mcp_server.py +0 -0
  70. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/models.py +0 -0
  71. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/ollama.py +0 -0
  72. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/quizzes.py +0 -0
  73. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/rag_audit.py +0 -0
  74. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/sandbox_audit.py +0 -0
  75. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/secrets.py +0 -0
  76. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/skills/bwrap_sandbox/SKILL.md +0 -0
  77. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/skills/bwrap_sandbox/__init__.py +0 -0
  78. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/titles.py +0 -0
  79. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/tools/__init__.py +0 -0
  80. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/tools/agui_run_feedback.py +0 -0
  81. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/tools/file_uploads.py +0 -0
  82. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/tools/rag.py +0 -0
  83. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/tui/cli.py +0 -0
  84. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/tui/main.py +0 -0
  85. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/tui/rest_api.py +0 -0
  86. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/tui/serve.py +0 -0
  87. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/util.py +0 -0
  88. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/views/__init__.py +0 -0
  89. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/views/agui.py +0 -0
  90. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/views/authz.py +0 -0
  91. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/views/completions.py +0 -0
  92. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/views/installation.py +0 -0
  93. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/views/log_ingest.py +0 -0
  94. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/views/quizzes.py +0 -0
  95. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/views/room_file_uploads.py +0 -0
  96. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/views/rooms.py +0 -0
  97. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/views/sandbox_workdirs.py +0 -0
  98. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/views/stats.py +0 -0
  99. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/views/streaming.py +0 -0
  100. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/views/templates/consent.html.mako +0 -0
  101. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex/views/thread_file_uploads.py +0 -0
  102. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex.egg-info/SOURCES.txt +0 -0
  103. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex.egg-info/dependency_links.txt +0 -0
  104. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex.egg-info/entry_points.txt +0 -0
  105. {soliplex-0.82.2 → soliplex-0.82.4}/src/soliplex.egg-info/requires.txt +0 -0
  106. {soliplex-0.82.2 → soliplex-0.82.4}/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.82.2
3
+ Version: 0.82.4
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "soliplex"
7
- version = "0.82.2"
7
+ version = "0.82.4"
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"
@@ -81,7 +81,7 @@ class OIDCAuthSystemConfig:
81
81
  @property
82
82
  def oauth_client_kwargs(self) -> dict:
83
83
  """Registered kwargs for this authsystem's 'ouath' client factory"""
84
- client_kwargs = {}
84
+ client_kwargs = {"code_challenge_method": "S256"}
85
85
 
86
86
  if self.scope is not None:
87
87
  client_kwargs["scope"] = self.scope
@@ -29,9 +29,27 @@ depend_the_unauth_logger = views.depend_the_unauth_logger
29
29
  depend_the_logger = views.depend_the_logger
30
30
 
31
31
 
32
+ _DEFAULT_PORT_SUFFIXES = {"http": ":80", "https": ":443"}
33
+
34
+
35
+ def _normalize_origin(scheme: str, netloc: str) -> tuple[str, str]:
36
+ """Lower-case 'netloc', dropping any default port for 'scheme'
37
+
38
+ A proxy may forward 'Host: example.com:443', which names the same
39
+ origin as 'https://example.com'.
40
+ """
41
+ netloc = netloc.lower()
42
+ default_port_suffix = _DEFAULT_PORT_SUFFIXES.get(scheme)
43
+
44
+ if default_port_suffix is not None:
45
+ netloc = netloc.removesuffix(default_port_suffix)
46
+
47
+ return scheme, netloc
48
+
49
+
32
50
  def _scheme_netloc(url: str) -> tuple[str, str]:
33
51
  scheme, netloc = urllib_parse.urlparse(url)[:2]
34
- return scheme, netloc.lower()
52
+ return _normalize_origin(scheme, netloc)
35
53
 
36
54
 
37
55
  def _is_loopback(host: str) -> bool:
@@ -91,7 +109,7 @@ def _classify_return_to(
91
109
  return ReturnTo.MALFORMED
92
110
 
93
111
  trusted = {
94
- (request.url.scheme, request.url.netloc.lower()),
112
+ _normalize_origin(request.url.scheme, request.url.netloc),
95
113
  *(_scheme_netloc(afo) for afo in allowed_frontend_origins),
96
114
  }
97
115
 
@@ -459,7 +477,9 @@ async def get_auth_system(
459
477
  ):
460
478
  """Complete the OIDC token auth flow with the specified provider
461
479
 
462
- On success, redirect to client-specified URL.
480
+ On success, redirect to client-specified URL, passing 'token',
481
+ 'refresh_token', 'expires_in', and (when the provider returns one)
482
+ 'id_token' as callback parameters.
463
483
  """
464
484
  bound_logger = the_unauth_logger.bind(oidc_system=system)
465
485
 
@@ -504,15 +524,19 @@ async def get_auth_system(
504
524
  refresh_token = tokendict["refresh_token"]
505
525
  expires_in = tokendict["expires_in"]
506
526
 
507
- return_to = _with_callback_params(
508
- return_to,
509
- dict(
510
- token=access_token,
511
- refresh_token=refresh_token,
512
- expires_in=expires_in,
513
- ),
527
+ callback_params = dict(
528
+ token=access_token,
529
+ refresh_token=refresh_token,
530
+ expires_in=expires_in,
514
531
  )
515
532
 
533
+ # Absent unless the configured scope includes 'openid'.
534
+ id_token = tokendict.get("id_token")
535
+ if id_token is not None:
536
+ callback_params["id_token"] = id_token
537
+
538
+ return_to = _with_callback_params(return_to, callback_params)
539
+
516
540
  return responses.RedirectResponse(return_to)
517
541
 
518
542
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: soliplex
3
- Version: 0.82.2
3
+ Version: 0.82.4
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
File without changes
File without changes
File without changes
File without changes