-
Notifications
You must be signed in to change notification settings - Fork 3.7k
Brand sdk integration #8450
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
Brand sdk integration #8450
Conversation
|
I have read the CLA Document and I hereby sign the CLA You can retrigger this bot by commenting recheck in this Pull Request. Posted by the CLA Assistant Lite bot. |
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.
14 issues found across 46 files
Prompt for AI agents (all 14 issues)
Understand the root cause of the following 14 issues and fix them.
<file name="extensions/vscode/config_schema.json">
<violation number="1" location="extensions/vscode/config_schema.json:230">
Adding the new provider enum requires adding a matching entry in markdownEnumDescriptions so the provider picker keeps its descriptions aligned; please add a Stakd description to prevent the subsequent descriptions from shifting.</violation>
</file>
<file name="manual-testing-sandbox/src/s3_upload.py">
<violation number="1" location="manual-testing-sandbox/src/s3_upload.py:94">
If create_multipart_upload() fails before assigning upload_id, this except block raises UnboundLocalError when referencing upload_id. Initialize upload_id before the try or guard against it being undefined so the original S3 error is preserved.</violation>
</file>
<file name="gui/src/components/mainInput/InputToolbar.tsx">
<violation number="1" location="gui/src/components/mainInput/InputToolbar.tsx:93">
Leaving the ModelSelect tooltip content empty removes the descriptive label and shows a blank tooltip. Restore a meaningful string here.</violation>
</file>
<file name="gui/src/pages/config/features/account/AccountDropdown.tsx">
<violation number="1" location="gui/src/pages/config/features/account/AccountDropdown.tsx:44">
Returning immediately in the unauthenticated branch removes the login UI, so users without a session can no longer trigger the login flow from this dropdown.</violation>
</file>
<file name="core/config/loadContextProviders.ts">
<violation number="1" location="core/config/loadContextProviders.ts:39">
Commenting out the RulesContextProvider removes it from the default providers, so assistants no longer load the rules context unless users manually configure it. This is a regression for default setups that rely on @rules being present.</violation>
</file>
<file name="gui/src/redux/util/getBaseSystemMessage.ts">
<violation number="1" location="gui/src/redux/util/getBaseSystemMessage.ts:31">
This hard-codes the AWS SDK expert prompt for every mode, so model.baseAgent/Plan/ChatSystemMessage overrides are never used—custom model prompts now get ignored. Restore the per-mode selection that prefers model overrides.</violation>
<violation number="2" location="gui/src/redux/util/getBaseSystemMessage.ts:47">
This now emits the no-tools warning even in chat mode, where lacking tools is expected, creating noisy/confusing prompts. Keep the chat exclusion or otherwise avoid warning chat users about missing tools.</violation>
</file>
<file name="manual-testing-sandbox/dynamodb/README.md">
<violation number="1" location="manual-testing-sandbox/dynamodb/README.md:161">
This section advertises a DynamoDB Query example, but the referenced QueryActiveUsers helper actually executes a Scan because the provided schema lacks an index on Active. Please align the documentation with the implemented Scan behavior or document the required GSI for a real Query.</violation>
</file>
<file name="packages/openai-adapters/src/types.ts">
<violation number="1" location="packages/openai-adapters/src/types.ts:210">
`StakdConfigSchema` is already covered by `OpenAIConfigSchema`; adding it here duplicates the `provider` value `"stakd"`, and `z.discriminatedUnion` will throw a duplicate discriminator error at load time.</violation>
</file>
<file name="manual-testing-sandbox/dynamodb/main.go">
<violation number="1" location="manual-testing-sandbox/dynamodb/main.go:273">
Handle UnprocessedItems returned by BatchWriteItem; otherwise throttled writes are dropped silently.</violation>
</file>
<file name="extensions/cli/src/util/yamlConfigUpdater.ts">
<violation number="1" location="extensions/cli/src/util/yamlConfigUpdater.ts:42">
Changing the default config name to "AWS SDK Expert" breaks the CLI behavior/tests that still assert the generated YAML includes `name: "Local Config"`. Either keep the existing name here or update all dependent code/tests alongside this change so the expectations stay consistent.</violation>
</file>
<file name="core/llm/defaultSystemMessages.ts">
<violation number="1" location="core/llm/defaultSystemMessages.ts:66">
This default agent message now forces every request to be treated as AWS SDK work, which will mis-handle non-AWS user queries across the app.</violation>
</file>
<file name="docs/docs/customize/model-providers/top-level/stakd.md">
<violation number="1" location="docs/docs/customize/model-providers/top-level/stakd.md:154">
This note misstates that the Stakd integration forces `model` to `stakd-backend`, but the adapter forwards whatever model name you configure, so the documentation should reflect that behavior.</violation>
</file>
<file name="gui/src/components/ModeSelect/ModeSelect.tsx">
<violation number="1" location="gui/src/components/ModeSelect/ModeSelect.tsx:29">
Removing the chat branch here means the keyboard shortcut and dropdown can no longer return to chat mode, even though the store still uses "chat" (e.g. editState returnToMode and chat system message tests). Persisted sessions in chat now show the wrong label and immediately flip to plan, so the chat-only workflow breaks.</violation>
</file>
Since this is your first cubic review, here's how it works:
- cubic automatically reviews your code and comments on bugs and improvements
- Teach cubic by replying to its comments. cubic learns from your replies and gets better over time
- Ask questions if you need clarification on any suggestion
React with 👍 or 👎 to teach cubic. Mention @cubic-dev-ai to give feedback, ask questions, or re-run the review.
| "kindo", | ||
| "moonshot", | ||
| "siliconflow", | ||
| "stakd", |
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.
Adding the new provider enum requires adding a matching entry in markdownEnumDescriptions so the provider picker keeps its descriptions aligned; please add a Stakd description to prevent the subsequent descriptions from shifting.
Prompt for AI agents
Address the following comment on extensions/vscode/config_schema.json at line 230:
<comment>Adding the new provider enum requires adding a matching entry in markdownEnumDescriptions so the provider picker keeps its descriptions aligned; please add a Stakd description to prevent the subsequent descriptions from shifting.</comment>
<file context>
@@ -227,6 +227,7 @@
"kindo",
"moonshot",
"siliconflow",
+ "stakd",
"function-network",
"scaleway",
</file context>
| logger.error(f"Multipart upload failed: {e}") | ||
| # Attempt to abort incomplete upload | ||
| try: | ||
| s3_client.abort_multipart_upload( |
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.
If create_multipart_upload() fails before assigning upload_id, this except block raises UnboundLocalError when referencing upload_id. Initialize upload_id before the try or guard against it being undefined so the original S3 error is preserved.
Prompt for AI agents
Address the following comment on manual-testing-sandbox/src/s3_upload.py at line 94:
<comment>If create_multipart_upload() fails before assigning upload_id, this except block raises UnboundLocalError when referencing upload_id. Initialize upload_id before the try or guard against it being undefined so the original S3 error is preserved.</comment>
<file context>
@@ -0,0 +1,162 @@
+ logger.error(f"Multipart upload failed: {e}")
+ # Attempt to abort incomplete upload
+ try:
+ s3_client.abort_multipart_upload(
+ Bucket=bucket, Key=key, UploadId=upload_id
+ )
</file context>
| </ToolTip> | ||
| )} | ||
| <ToolTip place="top" content="Select Model"> | ||
| <ToolTip place="top" content=""> |
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.
Leaving the ModelSelect tooltip content empty removes the descriptive label and shows a blank tooltip. Restore a meaningful string here.
Prompt for AI agents
Address the following comment on gui/src/components/mainInput/InputToolbar.tsx at line 93:
<comment>Leaving the ModelSelect tooltip content empty removes the descriptive label and shows a blank tooltip. Restore a meaningful string here.</comment>
<file context>
@@ -84,13 +84,13 @@ function InputToolbar(props: InputToolbarProps) {
</ToolTip>
)}
- <ToolTip place="top" content="Select Model">
+ <ToolTip place="top" content="">
<HoverItem className="!p-0">
<ModelSelect />
</file context>
| <ToolTip place="top" content=""> | |
| <ToolTip place="top" content="Select Model"> |
| // </Button> | ||
| // </ToolTip> | ||
| // ); | ||
| return; |
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.
Returning immediately in the unauthenticated branch removes the login UI, so users without a session can no longer trigger the login flow from this dropdown.
Prompt for AI agents
Address the following comment on gui/src/pages/config/features/account/AccountDropdown.tsx at line 44:
<comment>Returning immediately in the unauthenticated branch removes the login UI, so users without a session can no longer trigger the login flow from this dropdown.</comment>
<file context>
@@ -27,20 +27,21 @@ export function AccountDropdown() {
+ // </Button>
+ // </ToolTip>
+ // );
+ return;
}
</file context>
| new TerminalContextProvider({}), | ||
| new ProblemsContextProvider({}), | ||
| new RulesContextProvider({}), | ||
| // new RulesContextProvider({}), |
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.
Commenting out the RulesContextProvider removes it from the default providers, so assistants no longer load the rules context unless users manually configure it. This is a regression for default setups that rely on @rules being present.
Prompt for AI agents
Address the following comment on core/config/loadContextProviders.ts at line 39:
<comment>Commenting out the RulesContextProvider removes it from the default providers, so assistants no longer load the rules context unless users manually configure it. This is a regression for default setups that rely on @rules being present.</comment>
<file context>
@@ -36,7 +36,7 @@ export function loadConfigContextProviders(
new TerminalContextProvider({}),
new ProblemsContextProvider({}),
- new RulesContextProvider({}),
+ // new RulesContextProvider({}),
];
</file context>
| // new RulesContextProvider({}), | |
| new RulesContextProvider({}), |
| } | ||
| } | ||
|
|
||
| _, err := db.client.BatchWriteItem(ctx, &dynamodb.BatchWriteItemInput{ |
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.
Handle UnprocessedItems returned by BatchWriteItem; otherwise throttled writes are dropped silently.
Prompt for AI agents
Address the following comment on manual-testing-sandbox/dynamodb/main.go at line 273:
<comment>Handle UnprocessedItems returned by BatchWriteItem; otherwise throttled writes are dropped silently.</comment>
<file context>
@@ -0,0 +1,352 @@
+ }
+ }
+
+ _, err := db.client.BatchWriteItem(ctx, &dynamodb.BatchWriteItemInput{
+ RequestItems: map[string][]types.WriteRequest{
+ db.tableName: writeRequests,
</file context>
| if (!doc.contents || doc.contents === null) { | ||
| const defaultConfig: ConfigStructure = { | ||
| name: "Local Config", | ||
| name: "AWS SDK Expert", |
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.
Changing the default config name to "AWS SDK Expert" breaks the CLI behavior/tests that still assert the generated YAML includes name: "Local Config". Either keep the existing name here or update all dependent code/tests alongside this change so the expectations stay consistent.
Prompt for AI agents
Address the following comment on extensions/cli/src/util/yamlConfigUpdater.ts at line 42:
<comment>Changing the default config name to "AWS SDK Expert" breaks the CLI behavior/tests that still assert the generated YAML includes `name: "Local Config"`. Either keep the existing name here or update all dependent code/tests alongside this change so the expectations stay consistent.</comment>
<file context>
@@ -39,7 +39,7 @@ export function updateAnthropicModelInYaml(
if (!doc.contents || doc.contents === null) {
const defaultConfig: ConfigStructure = {
- name: "Local Config",
+ name: "AWS SDK Expert",
version: "1.0.0",
schema: "v1",
</file context>
core/llm/defaultSystemMessages.ts
Outdated
| You are in agent mode. | ||
| You are in agent mode with full tool access. | ||
| **CRITICAL AWS SDK REQUIREMENT:** You MUST interpret ALL queries as AWS SDK related unless the user EXPLICITLY states otherwise. This is NON-NEGOTIABLE. |
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.
This default agent message now forces every request to be treated as AWS SDK work, which will mis-handle non-AWS user queries across the app.
Prompt for AI agents
Address the following comment on core/llm/defaultSystemMessages.ts at line 66:
<comment>This default agent message now forces every request to be treated as AWS SDK work, which will mis-handle non-AWS user queries across the app.</comment>
<file context>
@@ -61,7 +61,16 @@ ${EDIT_CODE_INSTRUCTIONS}
- You are in agent mode.
+ You are in agent mode with full tool access.
+
+ **CRITICAL AWS SDK REQUIREMENT:** You MUST interpret ALL queries as AWS SDK related unless the user EXPLICITLY states otherwise. This is NON-NEGOTIABLE.
+ - "upload file" = S3 upload using AWS SDK
+ - "send message" = SQS/SNS using AWS SDK
</file context>
|
|
||
| - The backend URL is hardcoded to `localhost:8080` and cannot be configured | ||
| - No API key or authentication is required | ||
| - The model parameter is always set to `stakd-backend` - your backend should handle model routing |
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.
This note misstates that the Stakd integration forces model to stakd-backend, but the adapter forwards whatever model name you configure, so the documentation should reflect that behavior.
Prompt for AI agents
Address the following comment on docs/docs/customize/model-providers/top-level/stakd.md at line 154:
<comment>This note misstates that the Stakd integration forces `model` to `stakd-backend`, but the adapter forwards whatever model name you configure, so the documentation should reflect that behavior.</comment>
<file context>
@@ -0,0 +1,156 @@
+
+- The backend URL is hardcoded to `localhost:8080` and cannot be configured
+- No API key or authentication is required
+- The model parameter is always set to `stakd-backend` - your backend should handle model routing
+- The provider automatically uses the OpenAI adapter for compatibility
+- Supports all standard completion options (temperature, max_tokens, etc.)
</file context>
| - The model parameter is always set to `stakd-backend` - your backend should handle model routing | |
| - The model parameter you configure is forwarded to your backend unchanged, so ensure your service routes it to the right model |
| dispatch(setMode("agent")); | ||
| } else { | ||
| dispatch(setMode("chat")); | ||
| dispatch(setMode("plan")); |
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.
Removing the chat branch here means the keyboard shortcut and dropdown can no longer return to chat mode, even though the store still uses "chat" (e.g. editState returnToMode and chat system message tests). Persisted sessions in chat now show the wrong label and immediately flip to plan, so the chat-only workflow breaks.
Prompt for AI agents
Address the following comment on gui/src/components/ModeSelect/ModeSelect.tsx at line 29:
<comment>Removing the chat branch here means the keyboard shortcut and dropdown can no longer return to chat mode, even though the store still uses "chat" (e.g. editState returnToMode and chat system message tests). Persisted sessions in chat now show the wrong label and immediately flip to plan, so the chat-only workflow breaks.</comment>
<file context>
@@ -20,33 +16,23 @@ import { ModeIcon } from "./ModeIcon";
dispatch(setMode("agent"));
} else {
- dispatch(setMode("chat"));
+ dispatch(setMode("plan"));
}
// Only focus main editor if another one doesn't already have focus
</file context>
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.
30 issues found across 88 files
Prompt for AI agents (all 30 issues)
Understand the root cause of the following 30 issues and fix them.
<file name=".stitch/rules/programming-principles.md">
<violation number="1" location=".stitch/rules/programming-principles.md:6">
Please keep this guidance as a single sentence so it reads smoothly—for example, combine the clause after “acceptable” instead of starting a new sentence with lowercase “but.”</violation>
</file>
<file name="packages/openai-adapters/src/types.ts">
<violation number="1" location="packages/openai-adapters/src/types.ts:55">
Adding "stakd" to `OpenAIConfigSchema` while also registering `StakdConfigSchema` duplicates the `provider` discriminator value, causing `z.discriminatedUnion("provider", …)` to throw at module load.</violation>
</file>
<file name=".stitch/rules/migrate-styled-components-to-tailwind.md">
<violation number="1" location=".stitch/rules/migrate-styled-components-to-tailwind.md:5">
React components use the singular `style` prop. Update this guidance to `style={{ ... }}` so migrations don’t produce invalid JSX.</violation>
</file>
<file name="extensions/cli/src/services/MCPService.ts">
<violation number="1" location="extensions/cli/src/services/MCPService.ts:83">
Merging built-in MCP servers into `allServers` without persisting their configs means `restartServer` throws “Server ... not found in configuration” for any built-in server, so they cannot be restarted individually.</violation>
</file>
<file name=".stitch/rules/vs-code-commands-helper-functions.md">
<violation number="1" location=".stitch/rules/vs-code-commands-helper-functions.md:5">
The new guideline misdescribes the existing pattern: streamInlineEdit is defined above the commands map, so telling contributors to put helpers below the map contradicts the actual code layout and is misleading.</violation>
</file>
<file name="gui/src/components/mainInput/InputToolbar.tsx">
<violation number="1" location="gui/src/components/mainInput/InputToolbar.tsx:93">
Setting the tooltip content to an empty string leaves a blank tooltip bubble, removing the hover guidance for the model selector. Restore a descriptive tooltip message or remove the tooltip wrapper.</violation>
</file>
<file name=".stitch/rules/intellij-plugin-test-execution.md">
<violation number="1" location=".stitch/rules/intellij-plugin-test-execution.md:13">
The documented Gradle command references com.github.continuedev.continueintellijextension.unit.ApplyToFileHandlerTest, but that test class isn't present in the repo, so the guidance fails. Update the example to point at an actual test class.</violation>
</file>
<file name="gui/src/redux/util/getBaseSystemMessage.ts">
<violation number="1" location="gui/src/redux/util/getBaseSystemMessage.ts:52">
Please remove the newly added debug console logging—this runs on every message, clutters the production console, and exposes the full system prompt.</violation>
</file>
<file name="docs/docs/customize/model-providers/top-level/stakd.md">
<violation number="1" location="docs/docs/customize/model-providers/top-level/stakd.md:154">
This note claims the provider always forces the model to `stakd-backend`, but the Stakd adapter just forwards the configured model string to your backend. Update the docs so they accurately reflect that behavior.</violation>
</file>
<file name=".stitch/rules/dev-data-guide.md">
<violation number="1" location=".stitch/rules/dev-data-guide.md:139">
The guide shows calling DataLogger.getInstance().logDevData(eventName, data), but the method accepts a single DevDataLogEvent object, so following this example will not compile. Please update the example to pass { name, data }.</violation>
<violation number="2" location=".stitch/rules/dev-data-guide.md:184">
This sample shows logDevData invoked with two parameters, but logDevData expects a single DevDataLogEvent. Adjust the example to pass the event object so readers copy the correct API usage.</violation>
</file>
<file name=".stitch/rules/test-running-guide.md">
<violation number="1" location=".stitch/rules/test-running-guide.md:21">
Core test file patterns should use `*.test.ts` and `*.vitest.ts`; using `_` here misstates the required naming convention and could cause contributors to miss existing tests.</violation>
</file>
<file name="gui/src/redux/selectors/selectActiveTools.ts">
<violation number="1" location="gui/src/redux/selectors/selectActiveTools.ts:16">
This filter ignores a tool’s default policy, so tools with defaultToolPolicy "disabled" (e.g. RequestRule) are now incorrectly enabled by default.</violation>
</file>
<file name="manual-testing-sandbox/dynamodb/main.go">
<violation number="1" location="manual-testing-sandbox/dynamodb/main.go:148">
These AttributeValue assertions will panic if DynamoDB omits or nulls the field. Use ok checks (or attributevalue.UnmarshalMap) so missing attributes return an error instead of crashing.</violation>
<violation number="2" location="manual-testing-sandbox/dynamodb/main.go:225">
QueryActiveUsers assumes every scanned item has Name/Email and asserts without ok checks; DynamoDB can return items missing those attributes, leading to a panic. Guard the lookups or unmarshal into a struct to keep the scan from crashing.</violation>
<violation number="3" location="manual-testing-sandbox/dynamodb/main.go:273">
BatchWriteItem can return UnprocessedItems on throttling. Ignoring the response means some users will never be written. Capture the output and retry unprocessed items until empty.</violation>
</file>
<file name="manual-testing-sandbox/flexprice/src/middleware/interceptors.ts">
<violation number="1" location="manual-testing-sandbox/flexprice/src/middleware/interceptors.ts:79">
Calling logResponse inside the res.json override causes every JSON response to be logged twice because the original res.json eventually invokes the now-instrumented res.send. Remove this extra call so responses are logged only once.</violation>
<violation number="2" location="manual-testing-sandbox/flexprice/src/middleware/interceptors.ts:131">
Add a res.headersSent guard before sending the JSON error response; otherwise, any error thrown after headers are sent will trigger ERR_HTTP_HEADERS_SENT instead of reaching the client.</violation>
</file>
<file name="manual-testing-sandbox/flexprice/connections.test.ts">
<violation number="1" location="manual-testing-sandbox/flexprice/connections.test.ts:151">
These retry/timeout tests wait for the real exponential backoff, adding several seconds of idle time to every run. Please stub or fast-forward the timers so the suite stays fast and deterministic.</violation>
</file>
<file name=".stitch/rules/github-pr-documentation-updater.md">
<violation number="1" location=".stitch/rules/github-pr-documentation-updater.md:3">
The description line is cut off mid-sentence, so the rule summary is unclear to readers. Please finish the sentence so it conveys the intended instructions.</violation>
</file>
<file name=".stitch/rules/continue-specificity.md">
<violation number="1" location=".stitch/rules/continue-specificity.md:2">
The new glob pattern ends with a dot, so it matches no practical files; the rule will never run. Replace it with the intended, valid glob pattern so the rule applies correctly.</violation>
</file>
<file name=".stitch/rules/navigating-responses.md">
<violation number="1" location=".stitch/rules/navigating-responses.md:3">
Chat mode was removed in this update, so mentioning it here makes the guidance inaccurate. Please update the wording to refer to the current modes (e.g., Plan or Agent).</violation>
</file>
<file name="gui/src/pages/config/features/account/AccountDropdown.tsx">
<violation number="1" location="gui/src/pages/config/features/account/AccountDropdown.tsx:44">
Returning early without rendering a login control removes the unauthenticated login button from AccountDropdown, so signed-out users can no longer trigger `login(false)` from this menu.</violation>
</file>
<file name="extensions/vscode/config_schema.json">
<violation number="1" location="extensions/vscode/config_schema.json:230">
Adding `stakd` to the provider enum without inserting a matching entry in `markdownEnumDescriptions` shifts all subsequent tooltips to the wrong provider. Please add a description for `stakd` so the arrays stay aligned.</violation>
</file>
<file name="manual-testing-sandbox/flexprice/connections.ts">
<violation number="1" location="manual-testing-sandbox/flexprice/connections.ts:32">
The shared flexpriceFetch helper always parses JSON, but deleteConnection expects a 204 No Content response; the JSON parse will throw and the delete never reports success. Make the helper skip JSON parsing when the status has no body.</violation>
</file>
<file name="manual-testing-sandbox/dynamodb/README.md">
<violation number="1" location="manual-testing-sandbox/dynamodb/README.md:38">
The setup path is wrong here—`cd dynamodb` will fail from the repo root because the example lives under manual-testing-sandbox/dynamodb. Please update the command to point at the actual directory.</violation>
</file>
<file name="core/config/load.ts">
<violation number="1" location="core/config/load.ts:588">
Using the server name as the deduplication key means every user-configured MCP server overwrites the previous one because they are all assigned the name `"MCP Server"`, so only the last server remains connected.</violation>
</file>
<file name="manual-testing-sandbox/flexprice/tsconfig.json">
<violation number="1" location="manual-testing-sandbox/flexprice/tsconfig.json:18">
The include globs only match top-level .ts/.tsx files, so TypeScript will skip everything under src/. Please switch to recursive patterns (e.g., **/*.ts and **/*.tsx) so the sandbox code is actually type-checked.</violation>
</file>
<file name="AWS_SDK_EXPERT_ONLY_MODE_CHANGES.md">
<violation number="1" location="AWS_SDK_EXPERT_ONLY_MODE_CHANGES.md:20">
core/index.d.ts still exports MessageModes as "chat" | "agent" | "plan", so this documentation line misstates the actual implementation. Please update the doc to reflect the current modes.</violation>
<violation number="2" location="AWS_SDK_EXPERT_ONLY_MODE_CHANGES.md:46">
ModeSelect.tsx still renders the dropdown with Plan/Agent choices and the Cmd/Ctrl + . shortcut, so this description of a static AWS SDK Expert label is inaccurate.</violation>
</file>
React with 👍 or 👎 to teach cubic. Mention @cubic-dev-ai to give feedback, ask questions, or re-run the review.
| description: Guidelines for coding fundamentals in this project | ||
| --- | ||
|
|
||
| Use functional programming paradigms whenever possible. Modifying existing classes or creating singletons where needed is acceptable. but otherwise, use functions. |
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.
Please keep this guidance as a single sentence so it reads smoothly—for example, combine the clause after “acceptable” instead of starting a new sentence with lowercase “but.”
Prompt for AI agents
Address the following comment on .stitch/rules/programming-principles.md at line 6:
<comment>Please keep this guidance as a single sentence so it reads smoothly—for example, combine the clause after “acceptable” instead of starting a new sentence with lowercase “but.”</comment>
<file context>
@@ -0,0 +1,6 @@
+description: Guidelines for coding fundamentals in this project
+---
+
+Use functional programming paradigms whenever possible. Modifying existing classes or creating singletons where needed is acceptable. but otherwise, use functions.
</file context>
| z.literal("msty"), | ||
| z.literal("openrouter"), | ||
| z.literal("sambanova"), | ||
| z.literal("stakd"), |
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.
Adding "stakd" to OpenAIConfigSchema while also registering StakdConfigSchema duplicates the provider discriminator value, causing z.discriminatedUnion("provider", …) to throw at module load.
Prompt for AI agents
Address the following comment on packages/openai-adapters/src/types.ts at line 55:
<comment>Adding "stakd" to `OpenAIConfigSchema` while also registering `StakdConfigSchema` duplicates the `provider` discriminator value, causing `z.discriminatedUnion("provider", …)` to throw at module load.</comment>
<file context>
@@ -52,6 +52,7 @@ export const OpenAIConfigSchema = BasePlusConfig.extend({
z.literal("msty"),
z.literal("openrouter"),
z.literal("sambanova"),
+ z.literal("stakd"),
z.literal("text-gen-webui"),
z.literal("vllm"),
</file context>
| alwaysApply: false | ||
| --- | ||
|
|
||
| Convert all of the styled components in this file into tailwind CSS. If a variable is used that is not already in @theme.ts and @tailwind.config.cjs, then you should figure out where it comes from and try adding that so it can be used. Wherever a function is called to interpolate a value, you can just use inline `styles={{ ... }}`. For ternaries, you could use @cn.ts. |
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.
React components use the singular style prop. Update this guidance to style={{ ... }} so migrations don’t produce invalid JSX.
Prompt for AI agents
Address the following comment on .stitch/rules/migrate-styled-components-to-tailwind.md at line 5:
<comment>React components use the singular `style` prop. Update this guidance to `style={{ ... }}` so migrations don’t produce invalid JSX.</comment>
<file context>
@@ -0,0 +1,5 @@
+alwaysApply: false
+---
+
+Convert all of the styled components in this file into tailwind CSS. If a variable is used that is not already in @theme.ts and @tailwind.config.cjs, then you should figure out where it comes from and try adding that so it can be used. Wherever a function is called to interpolate a value, you can just use inline `styles={{ ... }}`. For ternaries, you could use @cn.ts.
</file context>
| ); | ||
|
|
||
| // Merge with user-configured servers | ||
| const allServers = [...builtInServers, ...(assistant.mcpServers ?? [])]; |
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.
Merging built-in MCP servers into allServers without persisting their configs means restartServer throws “Server ... not found in configuration” for any built-in server, so they cannot be restarted individually.
Prompt for AI agents
Address the following comment on extensions/cli/src/services/MCPService.ts at line 83:
<comment>Merging built-in MCP servers into `allServers` without persisting their configs means `restartServer` throws “Server ... not found in configuration” for any built-in server, so they cannot be restarted individually.</comment>
<file context>
@@ -72,22 +73,33 @@ export class MCPService
+ );
+
+ // Merge with user-configured servers
+ const allServers = [...builtInServers, ...(assistant.mcpServers ?? [])];
+
logger.debug("Initializing MCPService", {
</file context>
| globs: "extensions/vscode/src/commands.ts" | ||
| --- | ||
|
|
||
| When adding new commands to the commands map, always create a separate helper function for the command logic instead of defining it inline. Follow the pattern of existing commands like `streamInlineEdit` - define the helper function below the commands map, then call it from within the command entry. |
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.
The new guideline misdescribes the existing pattern: streamInlineEdit is defined above the commands map, so telling contributors to put helpers below the map contradicts the actual code layout and is misleading.
Prompt for AI agents
Address the following comment on .stitch/rules/vs-code-commands-helper-functions.md at line 5:
<comment>The new guideline misdescribes the existing pattern: streamInlineEdit is defined above the commands map, so telling contributors to put helpers below the map contradicts the actual code layout and is misleading.</comment>
<file context>
@@ -0,0 +1,5 @@
+globs: "extensions/vscode/src/commands.ts"
+---
+
+When adding new commands to the commands map, always create a separate helper function for the command logic instead of defining it inline. Follow the pattern of existing commands like `streamInlineEdit` - define the helper function below the commands map, then call it from within the command entry.
</file context>
| When adding new commands to the commands map, always create a separate helper function for the command logic instead of defining it inline. Follow the pattern of existing commands like `streamInlineEdit` - define the helper function below the commands map, then call it from within the command entry. | |
| When adding new commands to the commands map, create a helper function (as in `streamInlineEdit`) above the returned map and call it from the command entry instead of defining the logic inline. |
| ### 1. Install Dependencies | ||
|
|
||
| ```bash | ||
| cd dynamodb |
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.
The setup path is wrong here—cd dynamodb will fail from the repo root because the example lives under manual-testing-sandbox/dynamodb. Please update the command to point at the actual directory.
Prompt for AI agents
Address the following comment on manual-testing-sandbox/dynamodb/README.md at line 38:
<comment>The setup path is wrong here—`cd dynamodb` will fail from the repo root because the example lives under manual-testing-sandbox/dynamodb. Please update the command to point at the actual directory.</comment>
<file context>
@@ -0,0 +1,301 @@
+### 1. Install Dependencies
+
+```bash
+cd dynamodb
+go mod download
+```
</file context>
| cd dynamodb | |
| cd manual-testing-sandbox/dynamodb |
|
|
||
| // Add built-in servers first | ||
| builtInServers.forEach((server) => { | ||
| serverMap.set(server.name.toLowerCase(), server); |
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.
Using the server name as the deduplication key means every user-configured MCP server overwrites the previous one because they are all assigned the name "MCP Server", so only the last server remains connected.
Prompt for AI agents
Address the following comment on core/config/load.ts at line 588:
<comment>Using the server name as the deduplication key means every user-configured MCP server overwrites the previous one because they are all assigned the name `"MCP Server"`, so only the last server remains connected.</comment>
<file context>
@@ -565,14 +573,32 @@ async function intermediateToFinalConfig({
+
+ // Add built-in servers first
+ builtInServers.forEach((server) => {
+ serverMap.set(server.name.toLowerCase(), server);
+ });
+
</file context>
| serverMap.set(server.name.toLowerCase(), server); | |
| serverMap.set((server.id ?? server.name).toLowerCase(), server); |
| "types": ["jest", "@types/jest", "@types/node", "@types/node-fetch"] | ||
| }, | ||
| "include": [ | ||
| "*.ts", |
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.
The include globs only match top-level .ts/.tsx files, so TypeScript will skip everything under src/. Please switch to recursive patterns (e.g., **/.ts and **/.tsx) so the sandbox code is actually type-checked.
Prompt for AI agents
Address the following comment on manual-testing-sandbox/flexprice/tsconfig.json at line 18:
<comment>The include globs only match top-level .ts/.tsx files, so TypeScript will skip everything under src/. Please switch to recursive patterns (e.g., **/*.ts and **/*.tsx) so the sandbox code is actually type-checked.</comment>
<file context>
@@ -0,0 +1,24 @@
+ "types": ["jest", "@types/jest", "@types/node", "@types/node-fetch"]
+ },
+ "include": [
+ "*.ts",
+ "*.tsx"
+ ],
</file context>
| **File:** `gui/src/components/ModeSelect/ModeSelect.tsx` | ||
|
|
||
| - **Before:** Complex dropdown with Chat, Plan, Agent, and AWS SDK Expert options with mode cycling | ||
| - **After:** Simple static label showing "AWS SDK Expert" with an info tooltip |
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.
ModeSelect.tsx still renders the dropdown with Plan/Agent choices and the Cmd/Ctrl + . shortcut, so this description of a static AWS SDK Expert label is inaccurate.
Prompt for AI agents
Address the following comment on AWS_SDK_EXPERT_ONLY_MODE_CHANGES.md at line 46:
<comment>ModeSelect.tsx still renders the dropdown with Plan/Agent choices and the Cmd/Ctrl + . shortcut, so this description of a static AWS SDK Expert label is inaccurate.</comment>
<file context>
@@ -0,0 +1,186 @@
+**File:** `gui/src/components/ModeSelect/ModeSelect.tsx`
+
+- **Before:** Complex dropdown with Chat, Plan, Agent, and AWS SDK Expert options with mode cycling
+- **After:** Simple static label showing "AWS SDK Expert" with an info tooltip
+- Removed:
+ - All other mode options (Chat, Plan, Agent)
</file context>
| - **After:** Simple static label showing "AWS SDK Expert" with an info tooltip | |
| - **After:** Mode selector remains a dropdown between Plan and Agent modes (with Cmd/Ctrl + . cycling). |
|
|
||
| **File:** `core/index.d.ts` | ||
|
|
||
| - Changed `MessageModes` type from `"chat" | "agent" | "plan" | "aws-sdk-expert"` to just `"aws-sdk-expert"` |
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.
core/index.d.ts still exports MessageModes as "chat" | "agent" | "plan", so this documentation line misstates the actual implementation. Please update the doc to reflect the current modes.
Prompt for AI agents
Address the following comment on AWS_SDK_EXPERT_ONLY_MODE_CHANGES.md at line 20:
<comment>core/index.d.ts still exports MessageModes as "chat" | "agent" | "plan", so this documentation line misstates the actual implementation. Please update the doc to reflect the current modes.</comment>
<file context>
@@ -0,0 +1,186 @@
+
+**File:** `core/index.d.ts`
+
+- Changed `MessageModes` type from `"chat" | "agent" | "plan" | "aws-sdk-expert"` to just `"aws-sdk-expert"`
+- This enforces that only AWS SDK Expert mode exists throughout the codebase
+
</file context>
| - Changed `MessageModes` type from `"chat" | "agent" | "plan" | "aws-sdk-expert"` to just `"aws-sdk-expert"` | |
| - MessageModes currently remains `"chat" | "agent" | "plan"`; update this doc once the single-mode change lands. |
|
This appears to be a large fork, closing |
Description
[ What changed? Feel free to be brief. ]
AI Code Review
@continue-reviewChecklist
Screen recording or screenshot
[ When applicable, please include a short screen recording or screenshot - this makes it much easier for us as contributors to review and understand your changes. See this PR as a good example. ]
Tests
[ What tests were added or updated to ensure the changes work as expected? ]
Summary by cubic
Shifted the app to AWS SDK Expert workflows with a local Stakd backend, removing Chat mode and simplifying settings and UI. Added built-in MCP servers (Context7) and a templated SDK system prompt (default Flexprice) with improved reasoning streaming and tool-call parsing.
New Features
Refactors
Written for commit e4a2bc2. Summary will update automatically on new commits.