-
Notifications
You must be signed in to change notification settings - Fork 94
LCORE-1839: E2E for HITL #2115
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
LCORE-1839: E2E for HITL #2115
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,34 @@ | ||
| name: Lightspeed Core Service (LCS) | ||
| service: | ||
| host: 0.0.0.0 | ||
| port: 8080 | ||
| auth_enabled: false | ||
| workers: 1 | ||
| color_log: true | ||
| access_log: true | ||
| llama_stack: | ||
| # Library mode - embeds llama-stack as library | ||
| use_as_library_client: true | ||
| library_client_config_path: run.yaml | ||
| user_data_collection: | ||
| feedback_enabled: true | ||
| feedback_storage: "/tmp/data/feedback" | ||
| transcripts_enabled: true | ||
| transcripts_storage: "/tmp/data/transcripts" | ||
| conversation_cache: | ||
| type: "sqlite" | ||
| sqlite: | ||
| db_path: "/tmp/data/conversation-cache.db" | ||
| authentication: | ||
| module: "noop-with-token" | ||
| inference: | ||
| default_provider: openai | ||
| default_model: gpt-4o-mini | ||
| approvals: | ||
| approval_timeout_seconds: 60 | ||
| approval_retention_seconds: 5 | ||
| mcp_servers: | ||
| - name: "mcp-approval-always" | ||
| provider_id: "model-context-protocol" | ||
| url: "http://mock-mcp:3000" | ||
| require_approval: "always" | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,34 @@ | ||
| name: Lightspeed Core Service (LCS) | ||
| service: | ||
| host: 0.0.0.0 | ||
| port: 8080 | ||
| auth_enabled: false | ||
| workers: 1 | ||
| color_log: true | ||
| access_log: true | ||
| llama_stack: | ||
| # Library mode - embeds llama-stack as library | ||
| use_as_library_client: true | ||
| library_client_config_path: run.yaml | ||
| user_data_collection: | ||
| feedback_enabled: true | ||
| feedback_storage: "/tmp/data/feedback" | ||
| transcripts_enabled: true | ||
| transcripts_storage: "/tmp/data/transcripts" | ||
| conversation_cache: | ||
| type: "sqlite" | ||
| sqlite: | ||
| db_path: "/tmp/data/conversation-cache.db" | ||
| authentication: | ||
| module: "noop-with-token" | ||
| inference: | ||
| default_provider: openai | ||
| default_model: gpt-4o-mini | ||
| approvals: | ||
| approval_timeout_seconds: 5 | ||
| approval_retention_seconds: 5 | ||
| mcp_servers: | ||
| - name: "mcp-approval-always" | ||
| provider_id: "model-context-protocol" | ||
| url: "http://mock-mcp:3000" | ||
| require_approval: "always" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,46 @@ | ||
| name: Lightspeed Core Service (LCS) | ||
| service: | ||
| host: 0.0.0.0 | ||
| port: 8080 | ||
| auth_enabled: false | ||
| workers: 1 | ||
| color_log: true | ||
| access_log: true | ||
| llama_stack: | ||
| # Library mode - embeds llama-stack as library | ||
| use_as_library_client: true | ||
| library_client_config_path: run.yaml | ||
| user_data_collection: | ||
| feedback_enabled: true | ||
| feedback_storage: "/tmp/data/feedback" | ||
| transcripts_enabled: true | ||
| transcripts_storage: "/tmp/data/transcripts" | ||
| conversation_cache: | ||
| type: "sqlite" | ||
| sqlite: | ||
| db_path: "/tmp/data/conversation-cache.db" | ||
| authentication: | ||
| module: "noop-with-token" | ||
| inference: | ||
| default_provider: openai | ||
| default_model: gpt-4o-mini | ||
| approvals: | ||
| approval_timeout_seconds: 60 | ||
| approval_retention_days: 7 | ||
| mcp_servers: | ||
| - name: "mcp-approval-always" | ||
| provider_id: "model-context-protocol" | ||
| url: "http://mock-mcp:3000" | ||
| require_approval: "always" | ||
| - name: "mcp-approval-never" | ||
| provider_id: "model-context-protocol" | ||
| url: "http://mock-mcp:3000" | ||
| require_approval: "never" | ||
| - name: "mcp-approval-granular" | ||
| provider_id: "model-context-protocol" | ||
| url: "http://mock-mcp:3000" | ||
| require_approval: | ||
| always: | ||
| - "<PLACEHOLDER>" | ||
| never: | ||
| - "<PLACEHOLDER>" | ||
|
Comment on lines
+42
to
+46
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
# Check for granular approval scenarios in the feature file
rg -n 'granular' tests/e2e/features/approvals.feature
# Check what tools the mock MCP server exposes
rg -rn 'mock-mcp' tests/e2e/ --type yaml | head -20Repository: lightspeed-core/lightspeed-stack Length of output: 3150 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo '--- approvals.feature granular section ---'
sed -n '60,115p' tests/e2e/features/approvals.feature
echo
echo '--- mcp-related config files mentioning tool names or placeholders ---'
rg -n '<PLACEHOLDER>|tool|tools|mcp-approval-granular|mock-mcp' tests/e2e/configuration tests/e2e/features -g '*.yaml' -g '*.feature' -g '*.json' -g '*.ts' -g '*.js' | sed -n '1,220p'Repository: lightspeed-core/lightspeed-stack Length of output: 29040 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo '--- server-mode approvals config around granular section ---'
sed -n '30,55p' tests/e2e/configuration/server-mode/lightspeed-stack-mcp-approvals.yaml
echo
echo '--- all occurrences of mcp-approval-granular ---'
rg -n 'mcp-approval-granular' tests/e2e -g '*.yaml' -g '*.feature' -g '*.ts' -g '*.js' | sed -n '1,120p'
echo
echo '--- mock MCP server tool definitions ---'
rg -n 'mock-mcp|tool.*name|name: ".*approval|always|never|granular|approval' tests/e2e -g '*.yaml' -g '*.ts' -g '*.js' | sed -n '1,220p'Repository: lightspeed-core/lightspeed-stack Length of output: 9553 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo '--- mock mcp files ---'
fd -a 'mock-mcp|mcp' tests/e2e -t f | sed -n '1,200p'
echo
echo '--- search for tool definitions and approval-granular identifiers ---'
rg -n 'tool|tools|name: "mcp-approval-granular"|list_tools|call_tool|approval' tests/e2e -g '*.ts' -g '*.js' -g '*.yaml' -g '*.json' | sed -n '1,240p'Repository: lightspeed-core/lightspeed-stack Length of output: 9816 Replace the granular approval placeholders with real tool identifiers. 🤖 Prompt for AI Agents |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,35 @@ | ||
| name: Lightspeed Core Service (LCS) | ||
| service: | ||
| host: 0.0.0.0 | ||
| port: 8080 | ||
| auth_enabled: false | ||
| workers: 1 | ||
| color_log: true | ||
| access_log: true | ||
| llama_stack: | ||
| # Server mode - connects to separate llama-stack service | ||
| use_as_library_client: false | ||
| url: http://${env.E2E_LLAMA_HOSTNAME}:8321 | ||
| api_key: xyzzy | ||
| user_data_collection: | ||
| feedback_enabled: true | ||
| feedback_storage: "/tmp/data/feedback" | ||
| transcripts_enabled: true | ||
| transcripts_storage: "/tmp/data/transcripts" | ||
| conversation_cache: | ||
| type: "sqlite" | ||
| sqlite: | ||
| db_path: "/tmp/data/conversation-cache.db" | ||
| authentication: | ||
| module: "noop-with-token" | ||
| inference: | ||
| default_provider: openai | ||
| default_model: gpt-4o-mini | ||
| approvals: | ||
| approval_timeout_seconds: 60 | ||
| approval_retention_seconds: 5 | ||
| mcp_servers: | ||
| - name: "mcp-approval-always" | ||
| provider_id: "model-context-protocol" | ||
| url: "http://mock-mcp:3000" | ||
| require_approval: "always" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,35 @@ | ||
| name: Lightspeed Core Service (LCS) | ||
| service: | ||
| host: 0.0.0.0 | ||
| port: 8080 | ||
| auth_enabled: false | ||
| workers: 1 | ||
| color_log: true | ||
| access_log: true | ||
| llama_stack: | ||
| # Server mode - connects to separate llama-stack service | ||
| use_as_library_client: false | ||
| url: http://${env.E2E_LLAMA_HOSTNAME}:8321 | ||
| api_key: xyzzy | ||
| user_data_collection: | ||
| feedback_enabled: true | ||
| feedback_storage: "/tmp/data/feedback" | ||
| transcripts_enabled: true | ||
| transcripts_storage: "/tmp/data/transcripts" | ||
| conversation_cache: | ||
| type: "sqlite" | ||
| sqlite: | ||
| db_path: "/tmp/data/conversation-cache.db" | ||
| authentication: | ||
| module: "noop-with-token" | ||
| inference: | ||
| default_provider: openai | ||
| default_model: gpt-4o-mini | ||
| approvals: | ||
| approval_timeout_seconds: 5 | ||
| approval_retention_seconds: 5 | ||
| mcp_servers: | ||
| - name: "mcp-approval-always" | ||
| provider_id: "model-context-protocol" | ||
| url: "http://mock-mcp:3000" | ||
| require_approval: "always" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,47 @@ | ||
| name: Lightspeed Core Service (LCS) | ||
| service: | ||
| host: 0.0.0.0 | ||
| port: 8080 | ||
| auth_enabled: false | ||
| workers: 1 | ||
| color_log: true | ||
| access_log: true | ||
| llama_stack: | ||
| # Server mode - connects to separate llama-stack service | ||
| use_as_library_client: false | ||
| url: http://${env.E2E_LLAMA_HOSTNAME}:8321 | ||
| api_key: xyzzy | ||
| user_data_collection: | ||
| feedback_enabled: true | ||
| feedback_storage: "/tmp/data/feedback" | ||
| transcripts_enabled: true | ||
| transcripts_storage: "/tmp/data/transcripts" | ||
| conversation_cache: | ||
| type: "sqlite" | ||
| sqlite: | ||
| db_path: "/tmp/data/conversation-cache.db" | ||
| authentication: | ||
| module: "noop-with-token" | ||
| inference: | ||
| default_provider: openai | ||
| default_model: gpt-4o-mini | ||
| approvals: | ||
| approval_timeout_seconds: 60 | ||
| approval_retention_days: 7 | ||
| mcp_servers: | ||
| - name: "mcp-approval-always" | ||
| provider_id: "model-context-protocol" | ||
| url: "http://mock-mcp:3000" | ||
| require_approval: "always" | ||
| - name: "mcp-approval-never" | ||
| provider_id: "model-context-protocol" | ||
| url: "http://mock-mcp:3000" | ||
| require_approval: "never" | ||
| - name: "mcp-approval-granular" | ||
| provider_id: "model-context-protocol" | ||
| url: "http://mock-mcp:3000" | ||
| require_approval: | ||
| always: | ||
| - "<PLACEHOLDER>" | ||
| never: | ||
| - "<PLACEHOLDER>" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🗄️ Data Integrity & Integration | 🔴 Critical | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
Repository: lightspeed-core/lightspeed-stack
Length of output: 1925
approval_retention_secondsis invalid here.src/models/config.pyonly definesapproval_timeout_secondsandapproval_retention_days, andConfigurationBaseforbids extra fields. This config will either fail validation at startup or fall back to the 30-day default, so the 6-second purge scenarios won’t work as written. If short-retention e2e coverage is required, add a supported seconds-based retention setting toApprovalsConfigurationinstead of using an unsupported key.🤖 Prompt for AI Agents