Replit agent - #16
Replit agent#16
Conversation
Replit-Commit-Author: Deployment Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 1c3bb4a9-738e-4090-822b-d80cc1d3b5b1 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/GNNQlc8 Replit-Commit-Deployment-Build-Id: 238824e7-2fa4-412e-ab49-ede4bb229ab1 Replit-Helium-Checkpoint-Created: true
Add `gpt-5-api` and `grok-api` skills to `.agents/skills/` for interacting with respective AI models, including model selection, tool calling, and API patterns. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: fff9d69f-e954-4248-a4b5-e4336aefbda5 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/GNNQlc8 Replit-Helium-Checkpoint-Created: true
Replit-Commit-Author: Deployment Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 60bb15ea-7e1b-4569-8dab-06497897de0e Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/cZk7UhP Replit-Commit-Deployment-Build-Id: c40e9ad8-ef66-46d6-ac55-be76a80c6b13 Replit-Helium-Checkpoint-Created: true
Update PKG-INFO, SOURCES.txt, dependency_links.txt, requires.txt, and top_level.txt files to reflect project metadata and updated dependencies. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 8213443f-9e52-4cdb-adf0-14c92c16fca8 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/cZk7UhP Replit-Helium-Checkpoint-Created: true
User scope + memory + idempotency fixes across the Python backend. Chat (python/routes/chat.py): - User-scope all conversation list/get/patch/delete via _require_owned_conv (404 instead of 403 to avoid leaking existence). - Add 15-minute TTL + sweep for the in-memory _pending_gates dict via _store_pending_gate / _sweep_pending_gates so abandoned approval gates don't leak memory forever. - Replace bare asyncio.create_task for zeta evaluation with the new tracked _spawn_bg helper. Background tasks: - New python/services/bg_tasks.py: tracked spawn() with strong refs + exception logging + cancel_all() for graceful shutdown. - python/database.py get_session swallows asyncio.CancelledError cleanly to avoid noisy rollback errors at shutdown. - python/routes/focus.py launch_subagent now uses _spawn_bg. Storage (python/storage/core.py): - get_conversations(user_id=...) with backward-compat for legacy NULL rows. - Mass-assignment allowlists (_CONV_ALLOWED_FIELDS, _MSG_ALLOWED_FIELDS) applied to create_conversation and create_message. Billing (python/routes/billing.py): - Stripe webhook idempotency via processed_stripe_events table (_ensure_stripe_events_table, _claim_stripe_event); duplicate events short-circuit before _dispatch_webhook. - New internal POST /internal/promote-ws gated by INTERNAL_API_SECRET header for the Express auth layer to call after register/login. Task #87 will wire the call from server/auth/routes.ts. Schema (shared/schema.ts): - Composite index idx_conversations_user_updated on (user_id, updated_at desc) for fast per-user listing. - New processedStripeEvents pgTable matching the Python lazy CREATE. - npm run db:push applied cleanly. Deviations: WS-tier promotion at login is exposed as an internal endpoint rather than wired directly, since auth lives in the Express layer owned by Task #87.
User scope + memory + idempotency fixes across the Python backend. Chat (python/routes/chat.py): - User-scope all conversation list/get/patch/delete AND send_message via _require_owned_conv (404 instead of 403 to avoid leaking existence). - list_conversations now requires caller identity (401 when missing) so a missing x-user-id header can never return a global list. - Add 15-minute TTL + sweep for the in-memory _pending_gates dict via _store_pending_gate / _sweep_pending_gates so abandoned approval gates don't leak memory forever. - Replace bare asyncio.create_task for zeta evaluation with the new tracked _spawn_bg helper. Background tasks: - New python/services/bg_tasks.py: tracked spawn() with strong refs + exception logging + cancel_all() for graceful shutdown. - python/database.py get_session swallows asyncio.CancelledError cleanly to avoid noisy rollback errors at shutdown. - python/routes/focus.py launch_subagent now uses _spawn_bg. Storage (python/storage/core.py): - get_conversations(user_id=...) with backward-compat for legacy NULL rows. - Mass-assignment allowlists (_CONV_ALLOWED_FIELDS, _MSG_ALLOWED_FIELDS) applied to create_conversation and create_message. Billing (python/routes/billing.py): - Stripe webhook idempotency via processed_stripe_events table (_ensure_stripe_events_table, _claim_stripe_event); duplicate events short-circuit before _dispatch_webhook. - New internal POST /internal/promote-ws gated by INTERNAL_API_SECRET header for the Express auth layer to call after register/login. Task #87 will wire the call from server/auth/routes.ts. Schema (shared/schema.ts): - Composite index idx_conversations_user_updated on (user_id, updated_at desc) for fast per-user listing. - New processedStripeEvents pgTable matching the Python lazy CREATE. - npm run db:push applied cleanly. Deviations: WS-tier promotion at login is exposed as an internal endpoint rather than wired directly, since auth lives in the Express layer owned by Task #87.
User scope + memory + idempotency fixes across the Python backend. Chat (python/routes/chat.py): - User-scope all conversation list/get/patch/delete AND send_message via _require_owned_conv (404 instead of 403 to avoid leaking existence). - list_conversations now requires caller identity (401 when missing) so a missing x-user-id header can never return a global list. - Add 15-minute TTL + sweep for the in-memory _pending_gates dict via _store_pending_gate / _sweep_pending_gates so abandoned approval gates don't leak memory forever. - Replace bare asyncio.create_task for zeta evaluation with the new tracked _spawn_bg helper. Background tasks: - New python/services/bg_tasks.py: tracked spawn() with strong refs + exception logging + cancel_all() for graceful shutdown. - python/database.py get_session swallows asyncio.CancelledError cleanly to avoid noisy rollback errors at shutdown. - python/routes/focus.py launch_subagent now uses _spawn_bg. Storage (python/storage/core.py): - get_conversations(user_id=...) with backward-compat for legacy NULL rows. - Mass-assignment allowlists (_CONV_ALLOWED_FIELDS, _MSG_ALLOWED_FIELDS) applied to create_conversation and create_message. Billing (python/routes/billing.py): - Stripe webhook idempotency via processed_stripe_events table (_ensure_stripe_events_table, _claim_stripe_event); duplicate events short-circuit before _dispatch_webhook. - New internal POST /internal/promote-ws gated by INTERNAL_API_SECRET header for the Express auth layer to call after register/login. Task #87 will wire the call from server/auth/routes.ts. Schema (shared/schema.ts): - Composite index idx_conversations_user_updated on (user_id, updated_at desc) for fast per-user listing. - New processedStripeEvents pgTable matching the Python lazy CREATE. - npm run db:push applied cleanly. Deviations: WS-tier promotion at login is exposed as an internal endpoint rather than wired directly, since auth lives in the Express layer owned by Task #87.
Updates include: - Enhancing inference layer with robust error sanitization, retry mechanisms with jittered backoff, and duplicate tool call detection. - Refining frontend components for better accessibility, stable rendering, immediate UI updates, and mobile usability. - Fixing issues with model environment variable resolution to prevent stale defaults. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 4aa4994d-0644-470c-a658-e171af644d88 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/ppVBZ6c Replit-Helium-Checkpoint-Created: true
…at approvals Implement a background task in FastAPI to periodically sweep and remove expired chat approval entries, and add a fire-and-forget mechanism in Express.js to promote work-email signups to the WS tier upon successful login or registration. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: f735a9d8-803b-45d8-98e4-b84745312106 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/GROzbEv Replit-Helium-Checkpoint-Created: true
Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 6b577bdf-4171-4f31-b422-d8b0248c24bb Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/GROzbEv Replit-Helium-Checkpoint-Created: true
Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 6b577bdf-4171-4f31-b422-d8b0248c24bb Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/GROzbEv Replit-Helium-Checkpoint-Created: true
Replit-Commit-Author: Deployment Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: bb2f4b04-aa5a-47fe-b920-a81639b5a0ef Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/1ws9t56 Replit-Commit-Deployment-Build-Id: a56ec423-28e7-4ab0-b291-4817667fa4cc Replit-Helium-Checkpoint-Created: true
Replit-Commit-Author: Deployment Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: bb2f4b04-aa5a-47fe-b920-a81639b5a0ef Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/1ws9t56 Replit-Commit-Deployment-Build-Id: a56ec423-28e7-4ab0-b291-4817667fa4cc Replit-Helium-Checkpoint-Created: true
Add focus_router import and include it in ALL_ROUTERS in python/routes/__init__.py to properly register the POST /api/v1/subagent endpoint. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: b36275c8-39d6-4945-b721-8257cc953e6c Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/1ws9t56 Replit-Helium-Checkpoint-Created: true
Add focus_router import and include it in ALL_ROUTERS in python/routes/__init__.py to properly register the POST /api/v1/subagent endpoint. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: b36275c8-39d6-4945-b721-8257cc953e6c Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/1ws9t56 Replit-Helium-Checkpoint-Created: true
Conditionally render the model badge component, ensuring it only appears for assistant messages and not user-submitted prompts by checking the `isUser` flag in `chat-messages.tsx`. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: f67672aa-85c0-4fe8-b361-d075a2340f1c Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/5KEasmR Replit-Helium-Checkpoint-Created: true
Conditionally render the model badge component, ensuring it only appears for assistant messages and not user-submitted prompts by checking the `isUser` flag in `chat-messages.tsx`. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: f67672aa-85c0-4fe8-b361-d075a2340f1c Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/5KEasmR Replit-Helium-Checkpoint-Created: true
Serve a shell script at the /a0 endpoint that allows users to interact with the AI agent from their terminal, with support for one-shot commands and an interactive REPL. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 61e00f11-e74e-42ed-9efe-425029a37bca Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/5KEasmR Replit-Helium-Checkpoint-Created: true
Serve a shell script at the /a0 endpoint that allows users to interact with the AI agent from their terminal, with support for one-shot commands and an interactive REPL. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 61e00f11-e74e-42ed-9efe-425029a37bca Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/5KEasmR Replit-Helium-Checkpoint-Created: true
Integrate X (Twitter) posting functionality by adding a new tool schema and implementing OAuth 1.0a signing for authenticated API requests. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 02b8f569-4fd8-4cad-80f5-00454bc29ca6 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/yzQr6YW Replit-Helium-Checkpoint-Created: true
Integrate X (Twitter) posting functionality by adding a new tool schema and implementing OAuth 1.0a signing for authenticated API requests. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 02b8f569-4fd8-4cad-80f5-00454bc29ca6 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/yzQr6YW Replit-Helium-Checkpoint-Created: true
Update GitHub Actions workflow files to use v5 of checkout and setup-node actions and v6 of setup-python action to address Node.js 20 deprecation warnings. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 68834e75-4160-49be-a182-e658ef121cb3 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/yzQr6YW Replit-Helium-Checkpoint-Created: true
Update GitHub Actions workflow files to use v5 of checkout and setup-node actions and v6 of setup-python action to address Node.js 20 deprecation warnings. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 68834e75-4160-49be-a182-e658ef121cb3 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/yzQr6YW Replit-Helium-Checkpoint-Created: true
Extend the agent_instances table schema to include fields for archetype, model selection, personality traits, system prompts, and other configuration options for agents. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 9375510c-af2b-4a45-9f1f-fdaa64c2cd9f Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/yzQr6YW Replit-Helium-Checkpoint-Created: true
Extend the agent_instances table schema to include fields for archetype, model selection, personality traits, system prompts, and other configuration options for agents. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 9375510c-af2b-4a45-9f1f-fdaa64c2cd9f Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/yzQr6YW Replit-Helium-Checkpoint-Created: true
Introduce new tables for agent stats, matches, and related fields to agent instances schema. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: a2410da2-f3b4-47ba-b03a-b6e50ff8c556 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/yzQr6YW Replit-Helium-Checkpoint-Created: true
Introduce new tables for agent stats, matches, and related fields to agent instances schema. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: a2410da2-f3b4-47ba-b03a-b6e50ff8c556 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/yzQr6YW Replit-Helium-Checkpoint-Created: true
Implement a new "Forge" tab for creating AI agents with selectable archetypes, models, tools, and personality settings, while also updating backend routes and database schema to support agent instantiation and management. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 601f595c-3619-4133-99d4-7e9be7842433 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/Io9SORr Replit-Helium-Checkpoint-Created: true
Implement a new "Forge" tab for creating AI agents with selectable archetypes, models, tools, and personality settings, while also updating backend routes and database schema to support agent instantiation and management. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 601f595c-3619-4133-99d4-7e9be7842433 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/Io9SORr Replit-Helium-Checkpoint-Created: true
Update energy registry with new cache pricing, modify cost estimation to account for cached tokens, and add a helper to normalize cache usage data for display in chat metadata. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 989152a5-26bd-47df-a87b-e065a495f0b5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 8670356f-ec3c-4ccd-87b5-898b32cc4b31 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/ea70512b-ff44-4f4d-bb44-93c50f1a0571/989152a5-26bd-47df-a87b-e065a495f0b5/KOnGKgx Replit-Helium-Checkpoint-Created: true
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 81b650ae67
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
||
| # 1) Pending sub-agents (conversations with subagent_status='running') | ||
| try: | ||
| all_convs = await storage.list_conversations(uid) |
There was a problem hiding this comment.
Call the correct storage API for conversations
get_liminals calls storage.list_conversations(uid), but the storage layer only defines get_conversations(...) (see python/storage/core.py). This raises at runtime and is swallowed by the broad except, so all_convs is always []; as a result the “Running sub-agents” and “Archived conversations” sections silently report empty data for every user.
Useful? React with 👍 / 👎.
|
|
||
| # 4) Inactive / errored ws_modules | ||
| try: | ||
| ws_mods = await storage.list_ws_modules() |
There was a problem hiding this comment.
Scope ws-module reads to the authenticated user
This endpoint fetches ws modules with storage.list_ws_modules() and then returns module metadata directly. list_ws_modules currently selects all WsModule rows without an owner_id filter, so any authenticated caller can enumerate other users’ module names/statuses via /api/v1/liminals. The query should be user-scoped (e.g., filter by the current uid) before returning results.
Useful? React with 👍 / 👎.
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
…in's more complete versions Co-authored-by: erinepshovel-code <250928284+erinepshovel-code@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 115 out of 119 changed files in this pull request and generated 8 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| @router.get("/{artifact_id}") | ||
| async def get_artifact(artifact_id: str): | ||
| row = await _A._fetch_row(artifact_id) | ||
| if not row: | ||
| raise HTTPException(status_code=404, detail="artifact not found") | ||
| return _serialize(row) |
| else: | ||
| _require_uid(request) | ||
| data = await _A.get_artifact_bytes(artifact_id) |
| const sendMessage = useMutation({ | ||
| mutationFn: async (content: string) => { | ||
| mutationFn: async (payload: { content: string; attachment_ids?: number[] }) => { | ||
| if (!activeConvId) throw new Error("No conversation selected"); | ||
| const res = await apiRequest("POST", `/api/v1/conversations/${activeConvId}/messages`, { role: "user", content }); | ||
| const res = await apiRequest("POST", `/api/v1/conversations/${activeConvId}/messages`, { | ||
| role: "user", | ||
| content: payload.content, | ||
| attachment_ids: payload.attachment_ids ?? [], | ||
| }); |
| @router.get("/conversations") | ||
| async def list_conversations(request: Request): | ||
| async def list_conversations(request: Request, agent_id: int | None = None): | ||
| """List conversations. | ||
|
|
||
| Defaults to a0-only (excludes any conversation pinned to a Forge agent). | ||
| Pass ?agent_id=<id> to fetch only conversations pinned to that agent — | ||
| used by the Forge tab's inline chat surface. | ||
| """ | ||
| uid = _caller_uid(request) | ||
| if not uid: | ||
| # Never return a global list when caller identity is missing. | ||
| raise HTTPException(status_code=401, detail="authentication required") | ||
| return await storage.get_conversations(user_id=uid) | ||
| return await storage.get_conversations(user_id=uid, agent_id=agent_id) |
| class CreateConversation(BaseModel): | ||
| title: str = "New Chat" | ||
| model: str = "gemini" | ||
| agent_id: Optional[int] = None |
| </div> | ||
| )} |
| model_id = body.model or agent_model_id or conv.get("model", "grok") | ||
| provider_id = energy_registry.get_active_provider() or model_id |
| @router.get("") | ||
| async def list_artifacts( | ||
| kind: Optional[str] = None, | ||
| tool: Optional[str] = None, | ||
| range_: Optional[str] = Query(None, alias="range"), | ||
| limit: int = 50, | ||
| offset: int = 0, | ||
| ): | ||
| limit = max(1, min(200, int(limit))) | ||
| offset = max(0, int(offset)) | ||
| since: _dt.datetime | None = None | ||
| if range_ and range_ in _RANGE_MAP: | ||
| since = _dt.datetime.utcnow() - _dt.timedelta(days=_RANGE_MAP[range_]) | ||
| rows = await _A.list_artifacts( | ||
| kind=kind, tool_name=tool, since=since, limit=limit, offset=offset, | ||
| ) | ||
| return {"items": [_serialize(r) for r in rows], "limit": limit, "offset": offset} |
Co-authored-by: erinepshovel-code <250928284+erinepshovel-code@users.noreply.github.com>
|
@copilot apply changes based on the comments in this thread |
Co-authored-by: erinepshovel-code <250928284+erinepshovel-code@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
Merge conflicts resolved in commit |
…tion or class' Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fcec4da596
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| "Failed to persist active provider to DB; keeping in-memory selection.", | ||
| exc_info=True, | ||
| ) | ||
| await session.execute( |
There was a problem hiding this comment.
Fix unexpected indent in provider persistence path
The new block in set_active_provider_persistent leaves await session.execute(...) at an invalid indentation level and no longer wraps it in async with get_session() as session. This now raises IndentationError when python/services/energy_registry.py is imported, which prevents the service from starting and breaks every code path that imports this module.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| logger.warning( | ||
| "Failed to persist active provider to DB; keeping in-memory selection.", | ||
| exc_info=True, | ||
| ) | ||
| await session.execute( |
| Validates tool metadata at boot, including canonical side-effects. | ||
| Enforces: any tool with "security_active" in side_effects must declare a | ||
| non-None approval_scope (gates offensive tooling by construction).""" |
| logger.warning( | ||
| "Failed to persist active provider to DB; keeping in-memory selection.", | ||
| exc_info=True, | ||
| ) |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f4cd4287e2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| "Failed to persist active provider to DB; keeping in-memory selection.", | ||
| exc_info=True, | ||
| ) | ||
| await session.execute( |
There was a problem hiding this comment.
Restore valid indentation in persistence block
The newly inserted logger.warning(...) leaves await session.execute(...) at an unexpected indentation level, which raises IndentationError when python/services/energy_registry.py is imported. This prevents the module from loading and breaks any runtime path that imports the energy registry, so the service cannot start successfully until this block is re-indented into a valid async with get_session() scope.
Useful? React with 👍 / 👎.
|
@copilot apply changes based on the comments in this thread |
No description provided.