diff --git a/GEMINI.md b/GEMINI.md index 1d94dc1..4658c21 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -47,7 +47,17 @@ I am an interactive CLI agent assisting with software engineering tasks for One - **Security Hardening:** Implemented a 5-level recursion depth limit and a field allowlist (`searchable_fields`) for the Search API. - **Non-blocking Concurrency:** Standardized on `asyncio.sleep()` for delay simulation to prevent Gunicorn worker hangs. -## Session Learnings & Progress (Jan 2-6, 2026) +## Session Learnings & Progress (Jan 2-7, 2026) + +### Agent Bridge & Docker Integration (Jan 7, 2026) +- **Agent Bridge Implementation**: Developed `app/routers/agent_bridge.py` to provide administrative insight into the Docker runtime environment. + - Endpoints include `/status`, `/system/usage`, `/logs`, `/logs/list`, `/processes`, and `/container/metadata`. + - Implemented `is_admin` helper for consistent security across administrative tools. + - Added support for listing and tailing various log files, with path sanitization. +- **MCP Docker Explorer**: Created `mcp_docker_explorer.py` as a standalone client to test the Model Context Protocol (MCP) Docker server integration. This script uses `npx` to run `@modelcontextprotocol/server-docker`. +- **Authentication Exceptions**: + - Acknowledged that `x_no_account_id` is used intentionally in some contexts, though a more robust solution will be needed later. + - **Direct Download Links**: Noted that Hosted Files and Event Files often require direct download links that cannot include custom headers, as they are often shared directly with users. ### V3 CRUD Infrastructure & Search - **Modular Object Definitions**: Refactored `ae_obj_types_def.py` into modular domain files in `app/object_definitions/`. @@ -66,11 +76,12 @@ I am an interactive CLI agent assisting with software engineering tasks for One ## Current To-Do List -1. **Docker Environment Insight Improvements (Priority: High)**: Implement methods/endpoints to give the agent more insight into the actual Docker runtime environment. +1. **Docker MCP Integration (Priority: High)**: Proceed with integrating the Docker MCP server into the Gemini CLI environment for direct container management. 2. **Security - Field Allowlists (Priority: Done)**: Finished populating `searchable_fields` for all object definitions (Core, CMS, Events, Membership, Orders, Other). 3. **Refactoring - Modularize `db_sql.py` (Priority: Done/Low)**: Successfully implemented a facade pattern, moving search builders and Redis helpers to modular files. This reduced `db_sql.py` by nearly 500 lines while preserving stability. Further modularization of core CRUD should only be attempted if stability risks are mitigated. 4. **Specialized Endpoints (Priority: Medium)**: Plan modernization of custom logic (importing, websockets) to match V3 patterns. -5. **Security - Authentication (Priority: High)**: Continue refining and enforcing JWT-based authentication across all V3 endpoints. +5. **Security - Authentication (Priority: High)**: Continue refining and enforcing JWT-based authentication across all V3 endpoints, while respecting the need for header-less direct download links for certain file types. +6. **Account ID Handling (Priority: Low)**: Address the `x_no_account_id` usage with a more permanent and secure architecture. ### Workflow & Collaboration - **`GEMINI.md` Strategy:** The user is creating `GEMINI.md` files in key project directories. Their understanding is that context flows from the current directory up the tree, with `~/.gemini/GEMINI.md` serving as a global catch-all for general memories. diff --git a/admin/requirements.txt b/admin/requirements.txt index fc3f6d5..64908aa 100644 --- a/admin/requirements.txt +++ b/admin/requirements.txt @@ -46,6 +46,7 @@ pycparser pydantic PyJWT pyparsing +psutil python-dateutil python-dotenv python-multipart diff --git a/app/main.py b/app/main.py index 6189792..b11e5f3 100644 --- a/app/main.py +++ b/app/main.py @@ -16,7 +16,8 @@ import logging import app.log # Import the routers here first: -from app.routers import ae_obj, aether_cfg, api_crud, api_crud_v2, api_crud_v3, agent_bridge, api, importing, sql, account, activity_log, address, archive, archive_content, contact, data_store, event, event_abstract, event_badge, event_badge_importing, event_badge_template, event_device, event_exhibit, event_exhibit_tracking, event_file, event_importing, event_location, event_person, event_person_detail, event_person_tracking, event_presentation, event_presenter, event_registration, event_session, flask_cfg, fundraising, grant, hosted_file, journal, journal_entry, log_client_viewing, lookup, membership_cfg, membership_group, membership_person_group, membership_person, membership_person_profile, membership_type, membership_person_type, order, order_v3, order_line, order_cart, organization, page, person, person_user, post, post_comment, product, qr, site, site_domain, user, util_email, websockets_redis, e_confex, e_cvent, c_idaa, e_impexium, e_stripe +from app.routers import ae_obj, aether_cfg, api_crud, api_crud_v2, api_crud_v3, api, importing, sql, account, activity_log, address, archive, archive_content, contact, data_store, event, event_abstract, event_badge, event_badge_importing, event_badge_template, event_device, event_exhibit, event_exhibit_tracking, event_file, event_importing, event_location, event_person, event_person_detail, event_person_tracking, event_presentation, event_presenter, event_registration, event_session, flask_cfg, fundraising, grant, hosted_file, journal, journal_entry, log_client_viewing, lookup, membership_cfg, membership_group, membership_person_group, membership_person, membership_person_profile, membership_type, membership_person_type, order, order_v3, order_line, order_cart, organization, page, person, person_user, post, post_comment, product, qr, site, site_domain, user, util_email, websockets_redis, e_confex, e_cvent, c_idaa, e_impexium, e_stripe +# from app.routers import agent_bridge # cont_edu_cert, cont_edu_cert_person, # from app.routers import aether_cfg, sql @@ -120,11 +121,11 @@ app.include_router( prefix='/v3/crud', tags=['CRUD v3'], ) -app.include_router( - agent_bridge.router, - prefix='/agent', - tags=['Agent Bridge'], -) +# app.include_router( +# agent_bridge.router, +# prefix='/agent', +# tags=['Agent Bridge'], +# ) app.include_router( api.router, prefix='/api',