Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
846 commits
Select commit Hold shift + click to select a range
89ea410
Merge pull request #141 from icanbwell/add-scripts
imranq2 Mar 27, 2026
5541580
Update AGENTS.md
imranq2 Mar 27, 2026
761dc68
Merge pull request #126 from icanbwell/sync/architecture-instructions…
imranq2 Mar 27, 2026
a4cb887
Add Okta Aiden authentication configuration for Google Drive integration
imranq2 Mar 27, 2026
66a1f4b
Update Google Drive service URL to use HTTPS
imranq2 Mar 27, 2026
deaae7f
Update Docker Compose configuration for logging and authentication
imranq2 Mar 27, 2026
38955fb
Add AuthMcpCallInterceptor for deferred authentication at tool invoca…
imranq2 Mar 30, 2026
0f1b170
Log WWW-Authenticate header from MCP tool errors and update Google Dr…
imranq2 Mar 30, 2026
35d91bc
Implement lazy loading for tools in MCP Tool Provider
imranq2 Mar 30, 2026
c67c985
Add tool definitions for Google Drive file operations in general_purp…
imranq2 Mar 30, 2026
487d4e1
Update dependencies and restore removed skill entries in general purp…
imranq2 Mar 30, 2026
c3d2060
Update docker-compose configuration and clean up general purpose JSON
imranq2 Mar 31, 2026
27c624a
Add additional Docker Compose files for MCP server and related services
imranq2 Mar 31, 2026
4bd2f93
Update Docker Compose files for Okta integration and enable local pac…
imranq2 Mar 31, 2026
a7fa357
Refactor error handling in get_tools_by_url_async to use consistent v…
imranq2 Mar 31, 2026
e05b7df
Update dependencies and refactor AuthMcpCallInterceptor for per-reque…
imranq2 Apr 1, 2026
2f2c248
Comment out local folder mounts for language model dependencies in do…
imranq2 Apr 1, 2026
a423173
Update google-genai and pydantic dependencies to latest versions
imranq2 Apr 1, 2026
4353067
Update Makefile and Pipfile for improved build process and dependency…
imranq2 Apr 1, 2026
ecd1cfd
Refactor error handling in get_tools_async to differentiate between a…
imranq2 Apr 1, 2026
cc35f45
Enhance authentication checks and logging in MCP tool provider
imranq2 Apr 1, 2026
61b5694
Add support for resolving Authorization header during tool discovery
imranq2 Apr 1, 2026
aa3b209
Update language_model_gateway/gateway/mcp/interceptors/auth.py
imranq2 Apr 1, 2026
cb2874e
Update language_model_gateway/gateway/mcp/mcp_tool_provider.py
imranq2 Apr 1, 2026
e237459
Improve authentication handling during tool discovery to allow unauth…
imranq2 Apr 1, 2026
1916b81
Merge remote-tracking branch 'origin/test-google-drive-mcp' into test…
imranq2 Apr 1, 2026
e98adde
Improve authentication handling during tool discovery to allow unauth…
imranq2 Apr 1, 2026
5fbf67e
Add support for unauthenticated tool discovery via public URL
imranq2 Apr 1, 2026
72f4c0c
Refactor type hint for discovery configuration in mcp_tool_provider.py
imranq2 Apr 1, 2026
3ea0506
Add public URL for Google Drive tool in general_purpose.json
imranq2 Apr 1, 2026
0768778
Remove unused calculator tools from general_purpose.json
imranq2 Apr 1, 2026
8e04ba8
Add lazy loading support and tool definitions to config schema
imranq2 Apr 1, 2026
6e0c02c
Update dependencies in Pipfile and Pipfile.lock to latest versions
imranq2 Apr 1, 2026
ee833e7
Remove redundant error handling for JWT authentication in MCP tool co…
imranq2 Apr 2, 2026
0f6f3f1
Add logging for tool fetching process in MCP tool provider
imranq2 Apr 2, 2026
449c8e3
Update docker-compose.yml to adjust volume mappings for language mode…
imranq2 Apr 2, 2026
3b22ab8
Add error handling for authorization failures in MCP tool calls
imranq2 Apr 2, 2026
eb0a566
Update langchain-ai-skills-framework and pydantic dependencies to lat…
imranq2 Apr 2, 2026
5fc187e
Enhance JWT authentication handling by allowing unauthenticated disco…
imranq2 Apr 2, 2026
27f07b7
Add propagation of AuthorizationNeededException in MCPToolProvider
imranq2 Apr 2, 2026
28b1d4b
Merge pull request #143 from icanbwell/test-google-drive-mcp
imranq2 Apr 2, 2026
0a1e9ac
Add MCP server configuration and update JSON schemas for integration
imranq2 Apr 2, 2026
d0226bf
Update dependencies: langchain-ai-skills-framework to 1.0.31, languag…
imranq2 Apr 2, 2026
e66ad52
Add MCP server configuration JSON and update docker-compose paths
imranq2 Apr 2, 2026
354d669
Add MCP server configuration JSON and update docker-compose paths
imranq2 Apr 2, 2026
ddb3970
Add PROMPT_LIBRARY_PATH to docker-compose configuration
imranq2 Apr 2, 2026
80cfe47
Handle exceptions when retrieving tools from MCP server to prevent cr…
imranq2 Apr 2, 2026
5182a78
Update MCP server gateway URL in docker-compose configuration
imranq2 Apr 2, 2026
968f529
Enhance error logging for MCP tool authorization failures with WWW-Au…
imranq2 Apr 2, 2026
858bd3f
Dynamically register OAuth providers from .mcp.json configuration
imranq2 Apr 3, 2026
2cbe186
Wire DcrManager and update PassThroughTokenManager for OAuth 2.1
imranq2 Apr 3, 2026
fc50c6d
Handle None issuer for dynamically registered OAuth providers
imranq2 Apr 3, 2026
7f89227
Update config_schema.json with OAuth 2.1 fields
imranq2 Apr 3, 2026
b13bffc
Update docker-compose.yml to uncomment local oidc-auth-lib path for t…
imranq2 Apr 3, 2026
c78c523
Enhance dynamic provider registration to prevent duplicate entries an…
imranq2 Apr 3, 2026
e6849c0
Add isinstance check for dcr_manager and warning log for synthetic is…
imranq2 Apr 3, 2026
79eb692
Add integration tests for PassThroughTokenManager OAuth 2.1 registration
imranq2 Apr 3, 2026
b7536b5
Update Pipfile.lock and test_pass_through_token_manager_oauth21.py fo…
imranq2 Apr 3, 2026
2ccd6bc
Refactor test_pass_through_token_manager_oauth21.py to use model_vali…
imranq2 Apr 3, 2026
d6f9715
Add pytest skip condition for test_store_and_read_memories_tool based…
imranq2 Apr 3, 2026
36f1f39
Refactor PassThroughTokenManager and related tests to use spec-based …
imranq2 Apr 3, 2026
596b8ad
Bootstrap auth providers from .mcp.json at gateway startup
imranq2 Apr 3, 2026
5696b56
Refactor authentication configuration to dynamically register OAuth p…
imranq2 Apr 3, 2026
cb86af3
Refactor authentication configuration to dynamically register OAuth p…
imranq2 Apr 3, 2026
5a8c32a
Rename ToolFriendlyNameMapper to ToolDisplayNameMapper and update ref…
imranq2 Apr 3, 2026
f43a506
Update tool_display_name_mapper references and bump dependencies in P…
imranq2 Apr 3, 2026
2353b0e
Update tool_display_name_mapper references and bump dependencies in P…
imranq2 Apr 3, 2026
f39cead
Implement McpAuthServerDiscovery for OAuth metadata retrieval and int…
imranq2 Apr 3, 2026
206d72f
Update oidcauthlib version to 3.0.4 and bump related dependencies in …
imranq2 Apr 3, 2026
9e56743
Refactor import paths to use languagemodelcommon module and update re…
imranq2 Apr 3, 2026
4546fb7
Refactor import paths to use languagemodelcommon module and update re…
imranq2 Apr 4, 2026
bd61a89
Update language-model-common to version 1.0.35, add pydantic.mypy plu…
imranq2 Apr 4, 2026
a94fdde
Rename tool_friendly_name_mapper to tool_display_name_mapper for cons…
imranq2 Apr 4, 2026
3d5aba5
Add test for concurrent DCR registration to ensure single execution
imranq2 Apr 5, 2026
874e781
Add support for tool discovery in MCP integration and update configur…
imranq2 Apr 5, 2026
e481240
Enable tool discovery in MCP integration and update docker-compose fo…
imranq2 Apr 5, 2026
77a3642
Refactor imports in langchain_chat_completions_provider and update la…
imranq2 Apr 5, 2026
d5592c5
Enhance MCP integration by improving tool discovery logic and adding …
imranq2 Apr 5, 2026
e0406e8
Update Makefile to enhance OpenAI connection configuration and improv…
imranq2 Apr 5, 2026
f536255
Refactor tool catalog discovery to remove unnecessary headers and aut…
imranq2 Apr 5, 2026
41e7b8b
Add ToolDiscoveryMiddleware for enhanced tool category discovery in a…
imranq2 Apr 5, 2026
575a6a2
Enhance MCP tool loading by integrating headers into tool resolver fo…
imranq2 Apr 5, 2026
1d10209
Refactor tool discovery condition to simplify logic in chat completio…
imranq2 Apr 5, 2026
1c0b2d8
Refactor exception handling in chat completion manager to utilize Exc…
imranq2 Apr 5, 2026
e5350a3
Remove hardcoded URLs for Google Drive in general purpose configurati…
imranq2 Apr 5, 2026
992b877
Refactor Google Drive configuration by removing unnecessary authentic…
imranq2 Apr 5, 2026
bf189d6
Refactor Makefile to streamline service startup commands, improving r…
imranq2 Apr 5, 2026
cb99e7f
Refactor OpenAI response streaming to improve SSE parsing and error h…
imranq2 Apr 5, 2026
e1dfdd1
Enhance status emission in language model gateway by introducing dedi…
imranq2 Apr 5, 2026
87205c5
Enhance LangChain Pipe to support multiple API modes (Chat Completion…
imranq2 Apr 6, 2026
dafa704
Enhance usage tracking in Responses API by aggregating usage statisti…
imranq2 Apr 6, 2026
188e091
Enhance status updates in tool execution by refining messages for fun…
imranq2 Apr 6, 2026
3a664e9
Refactor streaming response handling by removing unused method and en…
imranq2 Apr 6, 2026
006f6bd
Enhance DCR client name resolution in tests by adding cases for expli…
imranq2 Apr 6, 2026
96fbf82
Enhance MCP configuration by adding display names for services and in…
imranq2 Apr 6, 2026
397abf4
Refactor language model gateway pipe for improved readability by cons…
imranq2 Apr 6, 2026
0dcd858
Enhance model factory error handling and extend thinking configuratio…
imranq2 Apr 6, 2026
5cbd2f4
Enhance response building process by updating task message and refini…
imranq2 Apr 6, 2026
e87a3c8
Refactor import statements to use the updated model factory path, ens…
imranq2 Apr 6, 2026
0e56b0c
Update docker-compose and Pipfile for improved configuration and depe…
imranq2 Apr 6, 2026
68f4078
Add new MCP server configurations for Atlassian, FHIR, GitHub, and Gr…
imranq2 Apr 6, 2026
c9d0f86
Add general purpose guidelines for text generation and markdown forma…
imranq2 Apr 6, 2026
279b662
Redact sensitive API keys in debug log for improved security
imranq2 Apr 6, 2026
8c7da99
Update dependencies and improve token access handling in various comp…
imranq2 Apr 6, 2026
72f6275
Enhance loading status messages by implementing cycling phrases for i…
imranq2 Apr 6, 2026
24a8b69
Enhance docker-compose configuration by adding AIDEN_OAUTH_CLIENT_NAM…
imranq2 Apr 6, 2026
e1394e8
Enhance thinking task status updates to include elapsed time and toke…
imranq2 Apr 6, 2026
eefad16
Enhance logging and usage tracking in language model gateway
imranq2 Apr 6, 2026
78062a0
Refactor event emitter parameter naming and streamline completion eve…
imranq2 Apr 6, 2026
a8d9e97
Enhance logging in language model gateway to include metadata informa…
imranq2 Apr 6, 2026
8367048
Enhance URL validation in auth_manager and well_known_configuration_c…
imranq2 Apr 6, 2026
6016a63
Enhance docker-compose configuration to allow HTTP URLs for local OID…
imranq2 Apr 6, 2026
48115bc
Update dependencies in Pipfile and Pipfile.lock; modify docker-compos…
imranq2 Apr 7, 2026
94462e8
Enhance MCP JSON configuration by adding OAuth scopes and default val…
imranq2 Apr 7, 2026
4db6e4a
Merge pull request #146 from icanbwell/support-mcp-json
imranq2 Apr 7, 2026
23b9075
Support GitHub paths for model and prompt configurations in docker-co…
imranq2 Apr 7, 2026
88073f5
Update cache timeout configuration for GitHub directory handling
imranq2 Apr 7, 2026
220bbb2
Implement GitHubConfigRepoManager for downloading and caching GitHub …
imranq2 Apr 7, 2026
a2be3cc
Update GitHub cache folder paths and add .gitignore entries for cache
imranq2 Apr 7, 2026
28a0eda
Update .gitignore and Dockerfile to include github_config_cache direc…
imranq2 Apr 7, 2026
93b2975
Update language_model_gateway/gateway/api.py
imranq2 Apr 7, 2026
abd3dfa
Update .gitignore and Dockerfile to include github_config_cache direc…
imranq2 Apr 7, 2026
a9e822e
Merge remote-tracking branch 'origin/support-github-for-configs' into…
imranq2 Apr 7, 2026
65e3462
Update language-model-common to version 2.0.4 and jwcrypto to version…
imranq2 Apr 7, 2026
813346d
Update docker-compose.yml to support GitHub configuration repository
imranq2 Apr 7, 2026
d252af9
Update docker-compose.yml to support GitHub configuration repository
imranq2 Apr 7, 2026
4750778
Reduce CONFIG_CACHE_TIMEOUT_SECONDS to 10 and update comments for loc…
imranq2 Apr 7, 2026
ba29ab9
Reduce CONFIG_CACHE_TIMEOUT_SECONDS to 10 and update comments for loc…
imranq2 Apr 7, 2026
6680ae8
Uncomment GITHUB_CACHE_FOLDER in docker-compose.yml for GitHub config…
imranq2 Apr 7, 2026
a57d8da
Improve error logging during application initialization and shutdown …
imranq2 Apr 7, 2026
7ad5776
Update volume paths in docker-compose.yml for local config caching
imranq2 Apr 7, 2026
ac59240
Update docker-compose.yml to correct paths for mounted configurations
imranq2 Apr 7, 2026
c7ccb7e
Fix volume paths in docker-compose.yml for consistency with directory…
imranq2 Apr 7, 2026
552a706
Update language-model-common and other dependencies to latest versions
imranq2 Apr 8, 2026
7bea5b1
Implement auto-registration of MCP OAuth providers in GatewayTokenSto…
imranq2 Apr 8, 2026
d7050dd
Update language-model-common and other dependencies to latest versions
imranq2 Apr 8, 2026
7ee7d95
Update language-model-common and other dependencies to latest versions
imranq2 Apr 8, 2026
e7e2a39
Add DCR support to GatewayTokenStorageAuthManager for dynamic client …
imranq2 Apr 8, 2026
f29b1c0
Integrate OAuthProviderRegistrar for improved OAuth provider registra…
imranq2 Apr 9, 2026
ef3a260
Fix logging message formatting in gateway_token_storage_auth_manager …
imranq2 Apr 9, 2026
d145840
Refactor KeyCloakHelper to support asynchronous token retrieval and u…
imranq2 Apr 9, 2026
85be8e9
Update docker-compose and Pipfile for local package support and depen…
imranq2 Apr 9, 2026
c87d1c5
Comment out local folder mounts in docker-compose.yml for clarity
imranq2 Apr 9, 2026
a5d47ce
Merge pull request #147 from icanbwell/support-github-for-configs
imranq2 Apr 9, 2026
e305215
Enhance exception logging in chat completion router for improved clar…
imranq2 Apr 10, 2026
750d6ab
Refactor error handling in search_tools_tool to improve logging clarity
imranq2 Apr 10, 2026
7a840ad
Refactor error handling in search_tools_tool to improve logging clarity
imranq2 Apr 10, 2026
b714be9
Update dependencies for langchain-ai-skills-framework and language-mo…
imranq2 Apr 10, 2026
5861a7e
Refactor import statements in test files for consistency and clarity
imranq2 Apr 10, 2026
364b176
Refactor tool provider and language model gateway: remove unused tool…
imranq2 Apr 12, 2026
b8392a2
Add MCP Apps support for interactive HTML UIs in tools
imranq2 Apr 12, 2026
d91a6f9
Sync shared skills from GitHub/filesystem into MongoDB during applica…
imranq2 Apr 12, 2026
e801c8d
Update dependencies in Pipfile and Pipfile.lock for compatibility
imranq2 Apr 12, 2026
2416dcc
Add session pool management for MCP connections in tool loading
imranq2 Apr 12, 2026
1794d02
Update dependencies for langchain-ai-skills-framework and language-mo…
imranq2 Apr 12, 2026
c180cd3
Uncomment configuration volume mounts in docker-compose.yml for local…
imranq2 Apr 13, 2026
247a28e
Fix test fixtures to use NullUserSkillStore and proper fixture depend…
imranq2 Apr 13, 2026
d974507
Update dependencies in Pipfile and Pipfile.lock to latest versions
imranq2 Apr 13, 2026
605040a
Increase LLM call timeout to 10 minutes and change log level to INFO …
imranq2 Apr 13, 2026
2d01557
Increase timeout settings in docker-compose.yml and update config vol…
imranq2 Apr 13, 2026
22f3b44
Update Dockerfile to configure Gunicorn with timeout and keep-alive s…
imranq2 Apr 13, 2026
d64fe3c
Update MCP server configurations with new descriptions and consolidat…
imranq2 Apr 13, 2026
0a429e1
Update Dockerfile to configure Uvicorn workers and improve logging
imranq2 Apr 14, 2026
54828f7
Implement file locking to serialize concurrent downloads in GitHub di…
imranq2 Apr 14, 2026
12b2758
Ensure skills directory exists before initialization in API
imranq2 Apr 14, 2026
ba34d73
Update Docker actions to latest versions in publish workflow
imranq2 Apr 14, 2026
cd4dadd
Update allowed-tools format in SKILL.md for FHIR query builder
imranq2 Apr 14, 2026
333025a
Update language-model-common to version 2.0.16 and docstring-parser t…
imranq2 Apr 14, 2026
d18e40f
Update dependencies in Pipfile and Pipfile.lock to latest versions
imranq2 Apr 14, 2026
79686fe
Migrate from Pipenv to uv for dependency management and update Docker…
imranq2 Apr 15, 2026
545d8ec
Add max file size limit for large file check in pre-commit configuration
imranq2 Apr 15, 2026
2901ab7
Merge pull request #150 from icanbwell/save-skills-to-db
imranq2 Apr 15, 2026
fa14857
Merge branch 'main' into switch-to-uv
imranq2 Apr 15, 2026
3ffcacd
Update dependencies to latest versions for langchain-ai-skills-framew…
imranq2 Apr 15, 2026
55a4752
Remove unnecessary debugging commands from Dockerfile
imranq2 Apr 15, 2026
baf8d94
Update Dockerfile
imranq2 Apr 15, 2026
04b9c2b
Merge remote-tracking branch 'origin/switch-to-uv' into switch-to-uv
imranq2 Apr 15, 2026
8f377a6
Update pre-commit.Dockerfile
imranq2 Apr 15, 2026
8644ce9
Remove unnecessary debugging commands from Dockerfile
imranq2 Apr 15, 2026
d22a80d
Merge remote-tracking branch 'origin/switch-to-uv' into switch-to-uv
imranq2 Apr 15, 2026
ef650e7
Add skills documentation and update general purpose configuration
imranq2 Apr 16, 2026
1547d24
Add skills documentation and update general purpose roles
imranq2 Apr 16, 2026
335c384
Update dependencies to latest versions for improved stability and fea…
imranq2 Apr 16, 2026
bb328f3
Refactor environment variable usage across multiple tools and service…
imranq2 Apr 17, 2026
c3dccd2
Update dependencies: bump versions for oidcauthlib, langchain-ai-skil…
imranq2 Apr 17, 2026
63dd57d
Update Dockerfile to pin uv version to 0.11.6 for consistency and rel…
imranq2 Apr 18, 2026
80210ce
Update dependencies in pyproject.toml and uv.lock for version consist…
imranq2 Apr 19, 2026
a5c014c
Refactor Dockerfile to streamline production and development stages, …
imranq2 Apr 19, 2026
d1d2282
Update GITHUB_CACHE_FOLDER path in docker-compose.yml to include proc…
imranq2 Apr 19, 2026
8d701a8
Merge pull request #153 from icanbwell/switch-to-uv
imranq2 Apr 19, 2026
5662e20
Update dependencies in pyproject.toml and modify docker-compose.yml f…
imranq2 Apr 20, 2026
3c53b13
Update oidcauthlib dependency to version 3.0.10 for improved function…
imranq2 Apr 20, 2026
588a2ef
Enhance skill loading mechanism with optional include/exclude lists f…
imranq2 Apr 20, 2026
e6a7b87
Enhance plugin discovery by implementing marketplace.json support and…
imranq2 Apr 20, 2026
b0c1997
Update package versions for cachetools, langchain-openai, oidcauthlib…
imranq2 Apr 20, 2026
05253f1
Add PluginMcpServerEntry support and refactor MarketplaceDirectoryLoa…
imranq2 Apr 20, 2026
dbbcc6b
Add PluginMcpServerEntry support and refactor MarketplaceDirectoryLoa…
imranq2 Apr 20, 2026
7ce6c80
Implement SnapshotCacheStore for MongoDB-backed caching of skill snap…
imranq2 Apr 20, 2026
85bbc70
Refactor snapshot caching to use BaseStore instead of SnapshotCacheSt…
imranq2 Apr 20, 2026
5528b36
Refactor marketplace plugin manager and snapshot serializer for impro…
imranq2 Apr 20, 2026
0379626
Update dependencies for langchain-ai-skills-framework and language-mo…
imranq2 Apr 20, 2026
8188ea0
Implement ResilientCacheStore for improved snapshot caching with auto…
imranq2 Apr 21, 2026
644e2af
Refactor snapshot cache implementation to support multiple backend ty…
imranq2 Apr 21, 2026
2f83c65
Update dependencies and refactor snapshot cache initialization
imranq2 Apr 21, 2026
9861893
Update dependencies and refactor snapshot cache initialization
imranq2 Apr 21, 2026
f46895d
Update docker-compose.yml and pyproject.toml for caching configuratio…
imranq2 Apr 21, 2026
70279dd
Update dependencies to latest versions in pyproject.toml and uv.lock
imranq2 Apr 21, 2026
fae565d
Refactor chat completion manager to improve error handling message co…
imranq2 Apr 21, 2026
6ed58a6
Update language-model-common and langchain-openai dependencies to lat…
imranq2 Apr 21, 2026
c1cc4e4
Comment out local dependencies in docker-compose.yml for cleaner conf…
imranq2 Apr 21, 2026
76e6d1d
Implement ValidatingMongoDBStore for fail-fast MongoDB connection val…
imranq2 Apr 21, 2026
4b41e3f
Add config refresh interval and implement background config refresh loop
imranq2 Apr 21, 2026
009feef
Update caching logic in api.py to use async refresh methods and enhan…
imranq2 Apr 21, 2026
8afd1dd
Add PluginDefinition model and update marketplace loader for plugin s…
imranq2 Apr 22, 2026
cb805ce
Refactor skill management to use PluginSkillStore and update related …
imranq2 Apr 22, 2026
a538224
Rename skill markdown files and update .gitignore and pre-commit conf…
imranq2 Apr 22, 2026
11cd15b
Update dependencies in pyproject.toml and uv.lock for compatibility a…
imranq2 Apr 22, 2026
ba2a037
Rename skill-related files and update references to marketplace for c…
imranq2 Apr 22, 2026
215a36d
Refactor skill loading to remove unnecessary logging and adjust worke…
imranq2 Apr 22, 2026
6b9c35f
Update docker-compose.yml to exclude 'software-developers' from plugi…
imranq2 Apr 22, 2026
52dfc56
Update docker-compose.yml to exclude 'software-developers' from plugi…
imranq2 Apr 22, 2026
b457d8f
Add marketplace-git-cache to .gitignore for improved cache management
imranq2 Apr 22, 2026
f5e6470
Add marketplace cache folder configuration to docker-compose
imranq2 Apr 22, 2026
7798091
Enhance skill synchronization logging and improve plugin definition h…
imranq2 Apr 22, 2026
ef22db9
Update docker-compose.yml to change PLUGINS_COLLECTION default from '…
imranq2 Apr 22, 2026
3b295b5
Update dependencies to latest versions for improved compatibility and…
imranq2 Apr 22, 2026
2557d0b
Update dependencies to latest versions for improved compatibility and…
imranq2 Apr 22, 2026
2f7a7ae
Update docker-compose configuration for GitHub plugin marketplace int…
imranq2 Apr 22, 2026
3bcf66a
Update docker-compose configuration to adjust GitHub cache folder set…
imranq2 Apr 22, 2026
675ec57
Refactor docker-compose.yml to improve clarity of GitHub configuratio…
imranq2 Apr 22, 2026
1d02fe8
Add has_plugins method to check for existing plugins and update start…
imranq2 Apr 23, 2026
9f69687
Add PLUGINS_MARKETPLACE environment variable to docker-compose for pl…
imranq2 Apr 23, 2026
874629c
Update dependencies in docker-compose and pyproject.toml for langchai…
imranq2 Apr 23, 2026
5c56ddd
Bump langchain-ai-skills-framework and langchain-openai versions to 1…
imranq2 Apr 23, 2026
ded6e67
Update language_model_gateway/gateway/api.py
imranq2 Apr 23, 2026
f492b3b
Update langchain-ai-skills-framework and langchain-openai to latest v…
imranq2 Apr 23, 2026
d1a2cd8
Merge pull request #158 from icanbwell/support-plugins-marketplace
imranq2 Apr 23, 2026
35469eb
Add GitHubMarketplacePublisher for skill publishing and enhance envir…
imranq2 Apr 23, 2026
a0865d7
Update docker-compose.yml to clarify marketplace publishing configura…
imranq2 Apr 23, 2026
0b278f2
Add MCP configuration for Google Drive skills server and update depen…
imranq2 Apr 23, 2026
6d3166d
Add MCP configuration for Google Drive skills server and update depen…
imranq2 Apr 23, 2026
e33390e
Add MCP configuration for Google Drive skills server and update depen…
imranq2 Apr 23, 2026
d959926
Add OAuth support to plugin configuration and serialization
imranq2 Apr 23, 2026
2ecf628
Enhance SKILL.md documentation with detailed tool usage and saving in…
imranq2 Apr 23, 2026
6c318ba
Add marketplace and validation scripts for skill management
imranq2 Apr 23, 2026
273e3f9
Rename bwell-skill-creator to bwell-skill-library and update descript…
imranq2 Apr 23, 2026
31dab04
Register MCP display names from tools and update docker-compose for l…
imranq2 Apr 24, 2026
9a4aa1c
Add FHIR query builder skill and prompt writer skill with validation …
imranq2 Apr 24, 2026
e891bd9
Add initial SKILL.md and plugin.json for patient portal finder and JF…
imranq2 Apr 24, 2026
d5e9df2
Update marketplace configuration in MCP server gateway
imranq2 Apr 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 4 additions & 1 deletion .aikido
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,7 @@ rules:
exclude:
paths:
- docker-compose-openwebui.yml
- docker-compose-keycloak.yml
- docker-compose-keycloak.yml
- Makefile
- docker-compose-mcp-fhir-agent.yml
- docker-compose.yml
6 changes: 6 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,9 @@
.pytest_cache
tmp
Makefile

caches
image_generation
__pycache__
language-model-gateway-configs
outputs
9 changes: 8 additions & 1 deletion docker.env.example → .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,11 @@ DATABRICKS_HOST=
DATABRICKS_SQL_WAREHOUSE_ID=
GOOGLE_CREDENTIALS_JSON=
AUTH_CLIENT_ID=
AUTH_CLIENT_SECRET=
AUTH_CLIENT_SECRET=

# Whether to run tests with real LLM
RUN_TESTS_WITH_REAL_LLM=

# mongo
PROD_MONGO_DB_PASSWORD=
CLIENT_SANDBOX_MONGO_DB_PASSWORD=
129 changes: 129 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
# Language Model Gateway – Copilot Code Review Instructions

## Objectives
- Keep every change aligned with the OpenAI-compatible FastAPI gateway, LangChain/LangGraph providers, and MCP bridge that back OpenWebUI and downstream agents.
- Preserve strict typing (per `setup.cfg` mypy settings), absolute imports, Ruff/formatting/security hooks, and Pipenv lock integrity.
- Guard OAuth/OIDC, AWS credentials, and user content flowing through RequestScopeMiddleware, TokenStorageAuthManager, and MCP tool traffic; never leak tokens or PII.
- Maintain the Docker Compose + Makefile workflows that spin up Keycloak, Mongo, OpenWebUI, optional MCP stacks, and observability services.
- Deliver prioritized, actionable PR feedback that makes it easy for contributors to fix blocking issues first.

## Repository Context Summary
- Stack: Python 3.12, FastAPI, LangChain/LangGraph, GraphQL, Docker Compose, Keycloak (OIDC), MongoDB (token cache), PostgreSQL (OpenWebUI), AWS (S3/Bedrock via `AwsClientFactory`), httpx, OpenTelemetry, and Pipenv.
- Entry surface: `language_model_gateway/gateway/api.py` configures FastAPI, routers under `gateway/routers/`, middleware (`FastApiLoggingMiddleware`, `RequestScopeMiddleware`), static assets, and health endpoints.
- Business layers: managers in `gateway/managers/`, providers in `gateway/providers/`, converters/streaming helpers, MCP tooling (`gateway/mcp/**`), and tool implementations in `gateway/tools/`.
- DI/IoC: `LanguageModelGatewayContainerFactory.create_container()` registers services (Auth, TokenExchange, Tool/MCP providers, LangChain providers, persistence, caching) via `oidcauthlib.container.SimpleContainer`; `ContainerRegistry` + `Inject(...)` supply dependencies to routers, managers, and background jobs.
- AuthN/AuthZ: `oidcauthlib` (AuthRouter, AuthManager, TokenReader), `TokenStorageAuthManager`, `TokenExchangeManager`, `ToolAuthManager`, and `TokenReducer` cooperate to handle on-behalf-of flows, OpenWebUI headers, and tool-scoped tokens.
- Config & env: use `language_model_gateway/configs/config_reader` + `ConfigExpiringCache` and `LanguageModelGatewayEnvironmentVariables` instead of ad-hoc `os.environ` access.
- Tests live in `tests/` (unit/functional) with dockerized execution; fixture data sits in repo (see `openwebui-config`, `language-model-gateway-configs`, etc.).
- Docker Compose files control the gateway, databases, Keycloak, MCP servers, observability (`docker-compose-otel.yml`), and OpenWebUI variants.

## Code Style and Quality Rules
- Absolute imports only (e.g., `from language_model_gateway.gateway.managers.chat_completion_manager import ChatCompletionManager`). No relative imports.
- Full type annotations for functions, class attributes, TypedDicts, and literals; prefer `Annotated[...]` for FastAPI dependencies. Avoid `Any` unless unavoidable and documented.
- `make run-pre-commit` must stay green (Ruff, formatting, mypy, security checks). When touching dependencies, update both `Pipfile` and `Pipfile.lock` via the documented make targets.
- Leverage existing abstractions:
- Resolve services via `Inject(...)`/`Depends(...)` backed by `LanguageModelGatewayContainerFactory`; never instantiate managers/providers manually in routers or tools.
- Reuse `LanguageModelGatewayEnvironmentVariables`, `ConfigReader`, `TokenReducer`, `LangGraphStreamingManager`, and `ModelFactory` rather than re-reading env vars or duplicating config parsing.
- MCP tooling: new remote tools must be registered through `MCPToolProvider`, include tracing/truncation interceptors, and respect `ToolAuthManager` token requirements. Local LangChain tools belong under `gateway/tools/` and should inherit existing base classes when possible.
- Logging: import `SRC_LOG_LEVELS`, call `logging.getLogger(__name__)`, and use `logger.exception("<message>")` inside `except` blocks to capture stack traces. Never log Authorization headers, JWTs, S3 paths with PHI, or OpenWebUI user details.
- Observability: when adding spans, obtain a tracer via `get_tracer("language_model_gateway.<module_path>")`, reuse existing span names where possible, and avoid placing secrets/PII in span attributes.

## Review Focus Areas
1. **Security & Privacy (blocking):** Keycloak/OIDC flows, PKCE helpers, RequestScopeMiddleware, TokenStorageAuthManager, TokenExchangeManager, and MCP tool auth must remain correct. No secrets in code. HTTPS for remote calls. Auth headers must never be logged or echoed back.
2. **Architectural Consistency (blocking):** Changes must fit the FastAPI router → manager → provider layering, DI patterns, and config/cache helpers. Chat completions must flow through `ChatCompletionManager`, LangChain/LangGraph providers, and `ToolProvider`/`MCPToolProvider`. New tools must wire through the DI container.
3. **Type Safety & Linting (blocking):** Full typing, no silent ignores, mypy per `setup.cfg`, Ruff, formatting, and security hooks must pass. Keep `Annotated` dependencies accurate.
4. **Tests & Reliability (blocking):** Add/extend tests under `tests/` for new routers, managers, providers, tools, or auth flows. Ensure they run via Docker (`make tests`). Favor dependency injection and fixtures over monkey patching.
5. **Performance & Resource Use (non-blocking unless severe):** Respect `TokenReducer` strategies, streaming constraints, MCP call timeouts, and `CONFIG_CACHE_TIMEOUT_SECONDS`. Avoid redundant external calls or large payloads (S3, Jira, Confluence, GitHub, Databricks).
6. **Documentation & DX (non-blocking but encouraged):** Update `README.md`, `add_new_agent.md`, or config docs when workflows/env vars change. Provide examples for new tools or endpoints.

## Blocking Issues (Must Fix Before Merge)
- Relative imports or direct instantiation that bypasses the DI container or `Inject(...)` dependencies.
- Missing/incorrect type annotations, `Any` leaks, or mypy/Ruff/pre-commit failures.
- Skipping `AuthManager`/`TokenReader`/`TokenExchangeManager` when handling user or tool tokens, or logging/returning tokens and PII.
- New routers/managers/providers not registered through `LanguageModelGatewayContainerFactory` or not resolved via `ContainerRegistry`.
- MCP tools that omit tracing/truncation interceptors, do not obtain tokens from `ToolAuthManager`, or ignore auth requirements defined in `AgentConfig`.
- Config or env access that bypasses `LanguageModelGatewayEnvironmentVariables`/`ConfigReader`, leading to inconsistent behavior across workers.
- Tests that cannot run with `make tests` or that rely on local resources outside the Compose stack.
- Dependency updates without synchronized `Pipfile`/`Pipfile.lock` changes.
- Run `make run-pre-commit` after a change to ensure the code passes linter.
- Don't put code in __init__.py files.

## Non-Blocking Suggestions (Nice to Have)
- Refactor duplicated logic in routers/managers/providers into shared helpers.
- Expand logging granularity using `SRC_LOG_LEVELS` categories (HTTP, MCP, LLM, etc.) when it aids debugging.
- Add lightweight smoke tests or fixtures for new external integrations (e.g., Confluence, Jira, GitHub, Databricks).
- Improve LangChain/LangGraph observability (span attributes, meaningful log context) without leaking sensitive data.
- Enhance docs with diagrams or flow descriptions for complex agent/tool additions.

## Security and Privacy Guidelines
- Always validate and refresh tokens through `TokenReader`/`AuthManager`; never trust headers blindly. Use RequestScopeMiddleware for per-request context.
- For PKCE/browser flows, use `AuthRouter` (from oidcauthlib). For service-to-service flows, rely on `TokenExchangeManager` and `ToolAuthManager` with least-privilege scopes.
- When bridging to AWS (Bedrock, S3), honor `AWS_CREDENTIALS_PROFILE`, use `AwsClientFactory`, and never hardcode credentials.
- Sanitize data returned from Jira, Confluence, Databricks, GitHub, or MCP servers before logging or exposing to clients. Strip PHI/PII and redact secrets.
- Use HTTPS endpoints for remote services and verify certificates (see `make create-certs` for local TLS). Do not downgrade to HTTP except for the documented local dev hosts.
- Ensure cached tokens (`ConfigExpiringCache`, Mongo, persistence) honor TTLs and are invalidated on logout/refresh endpoints.

## Performance Guidelines
- Use `TokenReducer` strategies (`TOKEN_TRUNCATION_STRATEGY`) for large model inputs/outputs. Avoid manual truncation that conflicts with the configured strategy.
- Prefer streaming via `LangGraphStreamingManager` when responses may be large; fall back to buffered responses only when necessary.
- Reuse HTTP clients from `HttpClientFactory`/`LoggingTransport` and respect timeouts defined in `LanguageModelGatewayEnvironmentVariables`.
- Batched config reads should go through `ConfigReader` with caching, rather than re-reading YAML/GraphQL files per request.
- Be mindful of MCP tool fan-out; set appropriate tool lists/timeouts in `AgentConfig` to avoid thrashing remote servers.

## Testing Guidelines
- Run `make tests` (dockerized pytest) before submitting. Use `make tests-integration` when real LLM or external integrations are required (guard with env vars such as `RUN_TESTS_WITH_REAL_LLM`).
- Favor dependency injection and fixtures over monkey patching; leverage `oidcauthlib` container overrides or helper factories for mocks.
- Use `respx`/`httpx.MockTransport` for HTTP mocking, and provide deterministic data for GitHub/Jira/Confluence/Databricks helpers.
- Cover new FastAPI routes with request/response tests (can use `TestClient` inside dockerized pytest). Include negative cases for auth failures and token refresh paths.
- When adding MCP tools or interceptors, include async tests using the existing LangChain MCP adapters and stubbed servers where feasible.

## Dependencies and Build
- Pipenv is the source of truth. Update dependencies via `make Pipfile.lock`/`make update`, commit both `Pipfile` and `Pipfile.lock`, and rebuild containers if base images change.
- Use the provided Make targets: `make devsetup`, `make build`, `make up`, `make down`, `make up-open-webui`, `make up-open-webui-auth`, `make up-mcp-server-gateway`, etc. Never hand-edit Compose-managed resources without updating the relevant YAML.
- Pre-commit hooks live in `pre-commit-hook`; run `make setup-pre-commit` before committing and ensure `make run-pre-commit` passes locally and in CI.
- For images pulled from ECR (e.g., MCP server gateway), authenticate via `aws sso login` + `aws ecr get-login-password` as documented in `README.md`.

## Documentation and Examples
- Update `README.md`, `add_new_agent.md`, `openwebui-config/functions/readme.md`, or related docs whenever you add env vars, Make targets, OAuth steps, or tool workflows.
- Provide docstrings for routers, managers, tools, and MCP interceptors describing expected inputs/outputs and auth assumptions.
- When adding MCP agents or LangChain tools, include usage guidance (sample payloads, OpenWebUI instructions, or GraphQL queries) right in the docstrings plus any relevant docs folder.
- Keep `.env.example` synchronized with new environment variables and describe whether they are required or optional.

## Integration Points
- **OpenAI-compatible APIs:** `/api/v1/chat/completions`, `/api/v1/responses`, `/api/v1/images/*`, `/models`, `/refresh`, plus legacy `/graphql`. Ensure responses match OpenAI schemas in `gateway/schema/openai`.
- **Auth:** `/auth/*` routes from `AuthRouter`, PKCE login via `/auth/login`, refresh via `/refresh`, and OpenWebUI headers (`x-openwebui-user-*`).
- **OpenWebUI:** `make up-open-webui` (no auth) or `make up-open-webui-auth` (Keycloak/OIDC + SSL). Requires `/etc/hosts` entry for `keycloak` and certificates from `make create-certs`.
- **MCP:** Remote tools fetched through `MCPToolProvider` + LangChain MCP adapters; additional MCP stacks available via `docker-compose-mcp-*.yml` and `make up-mcp-*` targets.
- **External services:** AWS (Bedrock, S3), Jira/Confluence, GitHub, Databricks, ScrapingBee, Google Search. All integrations must go through the respective helper/factory to inherit auth, logging, and retry policies.

## Quick Start and Common Commands
- Initial setup: copy `.env.example` → `.env`, set `AWS_CREDENTIALS_PROFILE`, then run:
```sh
make devsetup
```
- Bring the core stack up/down:
```sh
make down
make up
```
- Launch OpenWebUI variants:
```sh
make up-open-webui # no auth
make up-open-webui-auth # Keycloak + SSL + observability
```
- Run quality gates:
```sh
make run-pre-commit
make tests
```
- When working with MCP add-ons or observability: `make up-mcp-server-gateway`, `make up-mcp-fhir-agent`, `make up-mcp-inspector`, `make up-open-webui-ssl`, `make up-open-webui-auth` (also brings up Jaeger/otel).

## Enforcement Checklist for Reviewers
- Imports are absolute and modules resolve via the DI container; no manual singletons.
- Functions/classes are fully typed, and mypy/Ruff/pre-commit pass.
- Auth flows use `AuthManager`, `TokenReader`, `TokenExchangeManager`, and `ToolAuthManager` correctly; no secrets/PII in logs, spans, or responses.
- FastAPI routers call managers/providers rather than duplicating business logic; new services are registered in `LanguageModelGatewayContainerFactory`.
- MCP/LangChain tools honor tracing + truncation interceptors, token requirements, and config-driven URLs/timeouts.
- Tests cover new behavior and run with `make tests`; no reliance on undeclared local services.
- Docs/env samples updated for new endpoints, env vars, or workflows.
- Docker/Make targets remain usable; Compose files stay in sync with textual instructions.
9 changes: 7 additions & 2 deletions .github/workflows/build_and_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@ on:
pull_request:
branches: [ main ]

# Prevent duplicate runs on the same ref and cancel in-progress on PR updates to save CI minutes
concurrency:
group: build-and-test-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
build_and_test:
# The type of runner that the job will run on
Expand All @@ -29,9 +34,9 @@ jobs:
# id: login-ecr
# uses: aws-actions/amazon-ecr-login@v2

- name: create docker.env
- name: create .env
run: |
touch ${{ github.workspace }}/docker.env
touch ${{ github.workspace }}/.env

- name: pre-commit
run: make run-pre-commit && make clean-pre-commit
Expand Down
85 changes: 58 additions & 27 deletions .github/workflows/docker-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,45 +8,76 @@ on:
env:
IMAGE_NAME: language_model_gateway
REPOSITORY_URL: icanbwell

jobs:
push:
build-amd64:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

# - name: AWS Credentials
# uses: aws-actions/configure-aws-credentials@v4
# with:
# aws-region: us-east-1
#
# - name: Login to Amazon ECR
# id: login-ecr
# uses: aws-actions/amazon-ecr-login@v2

- uses: actions/checkout@v5
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Install QEMU
uses: docker/setup-qemu-action@v3
uses: docker/setup-buildx-action@v4
- name: Build and push amd64 Docker image
uses: docker/build-push-action@v7
with:
platforms: linux/amd64,linux/arm64

- name: Build and push Docker image
uses: docker/build-push-action@v6
context: .
file: Dockerfile
platforms: linux/amd64
target: production
push: true
tags: |
${{ env.REPOSITORY_URL }}/${{ env.IMAGE_NAME }}:${{ github.event.release.tag_name }}-amd64
${{ env.REPOSITORY_URL }}/${{ env.IMAGE_NAME }}:latest-amd64
build-arm64:
runs-on: ubuntu-24.04-arm
steps:
- uses: actions/checkout@v5
- name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Build and push arm64 Docker image
uses: docker/build-push-action@v7
with:
context: .
file: Dockerfile
platforms: linux/amd64,linux/arm64
platforms: linux/arm64
target: production
push: true
tags: |
${{ env.REPOSITORY_URL }}/${{ env.IMAGE_NAME }}:${{ github.event.release.tag_name }}
${{ env.REPOSITORY_URL }}/${{ env.IMAGE_NAME }}:latest
${{ env.REPOSITORY_URL }}/${{ env.IMAGE_NAME }}:${{ github.event.release.tag_name }}-arm64
${{ env.REPOSITORY_URL }}/${{ env.IMAGE_NAME }}:latest-arm64

manifest:
needs: [build-amd64, build-arm64]
runs-on: ubuntu-latest
steps:
- name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Set manifest tag variable
run: |
if [ -n "${{ github.event.release.tag_name }}" ]; then
echo "TAG=${{ github.event.release.tag_name }}" >> $GITHUB_ENV
else
echo "TAG=${{ github.sha }}" >> $GITHUB_ENV
fi
- name: Create and push multi-arch manifest
run: |
docker buildx imagetools create -t ${{ env.REPOSITORY_URL }}/${{ env.IMAGE_NAME }}:$TAG \
${{ env.REPOSITORY_URL }}/${{ env.IMAGE_NAME }}:$TAG-amd64 \
${{ env.REPOSITORY_URL }}/${{ env.IMAGE_NAME }}:$TAG-arm64

docker buildx imagetools create -t ${{ env.REPOSITORY_URL }}/${{ env.IMAGE_NAME }}:latest \
${{ env.REPOSITORY_URL }}/${{ env.IMAGE_NAME }}:latest-amd64 \
${{ env.REPOSITORY_URL }}/${{ env.IMAGE_NAME }}:latest-arm64
16 changes: 16 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -136,9 +136,25 @@ dmypy.json
/data/
/tests_integration/index/
/openwebui/
/.env
/docker.env
/**/temp/
/image_generation/*.png
/certs/*
/letsencrypt/*
/keycloak-config/public_key.json

/caches/*
!/caches/**/readme.md

/outputs/*
!/outputs/**/readme.md

/dependency_graph*.*
/.skills-git-cache/

/github_config_cache/*

/.marketplace-git-cache/*
/github_config_cache.old/*
/github_config_cache.ts
Loading
Loading