Skip to content

Commit 82050fc

Browse files
committed
Merge branch 'main' into read-document-fallback
2 parents 1edaf25 + 90d54f3 commit 82050fc

File tree

15 files changed

+217
-54
lines changed

15 files changed

+217
-54
lines changed

core/config/profile/doLoadConfig.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,12 @@ export default async function doLoadConfig(options: {
348348
}
349349
});
350350

351-
if (newConfig.allowAnonymousTelemetry !== false) {
351+
// VS Code has an IDE telemetry setting
352+
// Since it's a security concern we use OR behavior on false
353+
if (
354+
newConfig.allowAnonymousTelemetry !== false &&
355+
ideInfo.ideType === "vscode"
356+
) {
352357
if ((await ide.isTelemetryEnabled()) === false) {
353358
newConfig.allowAnonymousTelemetry = false;
354359
}

core/config/yaml/loadYaml.ts

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import {
99
ModelRole,
1010
PackageIdentifier,
1111
RegistryClient,
12-
TEMPLATE_VAR_REGEX,
1312
unrollAssistant,
1413
validateConfigYaml,
1514
} from "@continuedev/config-yaml";
@@ -237,22 +236,6 @@ export async function configYamlToContinueConfig(options: {
237236
sourceFile: doc.sourceFile,
238237
}));
239238

240-
config.mcpServers?.forEach((mcpServer) => {
241-
if ("args" in mcpServer) {
242-
const mcpArgVariables =
243-
mcpServer.args?.filter((arg) => TEMPLATE_VAR_REGEX.test(arg)) ?? [];
244-
245-
if (mcpArgVariables.length === 0) {
246-
return;
247-
}
248-
249-
localErrors.push({
250-
fatal: false,
251-
message: `MCP server "${mcpServer.name}" has unsubstituted variables in args: ${mcpArgVariables.join(", ")}. Please refer to https://docs.continue.dev/hub/secrets/secret-types for managing hub secrets.`,
252-
});
253-
}
254-
});
255-
256239
// Prompt files -
257240
try {
258241
const promptFiles = await getAllPromptFiles(ide, undefined, true);

core/context/mcp/MCPConnection.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
22
import { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
33
import { fileURLToPath } from "url";
44

5+
import {
6+
decodeSecretLocation,
7+
getTemplateVariables,
8+
} from "@continuedev/config-yaml";
59
import {
610
SSEClientTransport,
711
SseError,
@@ -163,6 +167,24 @@ class MCPConnection {
163167
}
164168
}
165169

170+
const vars = getTemplateVariables(JSON.stringify(this.options));
171+
const unrendered = vars.map((v) => {
172+
const stripped = v.replace("secrets.", "");
173+
try {
174+
return decodeSecretLocation(stripped).secretName;
175+
} catch {
176+
return stripped;
177+
}
178+
});
179+
180+
if (unrendered.length > 0) {
181+
this.errors.push(
182+
`${this.options.name} MCP Server has unresolved secrets: ${unrendered.join(", ")}.
183+
For personal use you can set the secret in the hub at https://hub.continue.dev/settings/secrets.
184+
Org-level secrets can only be used for MCP by Background Agents (https://docs.continue.dev/hub/agents/overview) when \"Include in Env\" is enabled.`,
185+
);
186+
}
187+
166188
this.connectionPromise = Promise.race([
167189
// If aborted by a refresh or other, cancel and don't do anything
168190
new Promise((resolve) => {

docs/mission-control/index.mdx

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,44 @@ Mission Control is where developers and teams use Continue to power everyday cod
2323
</Card>
2424
</CardGroup>
2525

26+
## Inbox: One Place to Triage, Assign, and Take Action
27+
28+
<Info>
29+
The Inbox is your team's central queue for all AI-powered Tasks, agent activity, and first-class integrations like Sentry and Snyk. It gives developers a shared place to review work, delegate responsibility, and launch follow-up Tasks—all without leaving Mission Control.
30+
</Info>
31+
32+
<CardGroup cols={4}>
33+
<Card title="Unified View" icon="list">
34+
See every incoming Task, Sentry alert, Snyk vulnerability, and workflow output in one place.
35+
</Card>
36+
37+
<Card title="Powerful Filtering" icon="filter">
38+
Slice the Inbox by Agent, repository, integration, creator, status, or time to surface what matters now.
39+
</Card>
40+
41+
<Card title="Clear Ownership" icon="user-check">
42+
Assign Sessions to teammates so responsibilities are explicit and reviews move forward.
43+
</Card>
44+
45+
<Card title="Take Action Fast" icon="zap">
46+
Launch follow-up Tasks, investigate errors, or generate fixes directly from the Inbox—no context switching.
47+
</Card>
48+
</CardGroup>
49+
50+
### First-Class Integration Tabs
51+
52+
Some signals deserve their own dedicated view. When you connect integrations:
53+
54+
<AccordionGroup>
55+
<Accordion title="Sentry">
56+
See error events organized by project with occurrences, first/last seen timestamps, and one-click **Solve** actions that launch an Agent to investigate or generate a fix.
57+
</Accordion>
58+
59+
<Accordion title="Snyk">
60+
Review high-severity vulnerabilities, check CVSS scores, and trigger Agents to patch or upgrade dependencies.
61+
</Accordion>
62+
</AccordionGroup>
63+
2664
## Monitoring & Insights
2765

2866
<Info>

docs/mission-control/tasks.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ description: "A Task is a unit of work shared between you and an agent. You trig
1212
- An agent's capabilities (model, rules, tools, prompt)
1313
- Your codebase (repository and branch)
1414

15-
Tasks can be triggered manually, by events, or on a schedule.
15+
Tasks can be triggered manually, by events, or on a schedule, and can be assigned to anyone on your team for review.
1616

1717
</Info>
1818

extensions/cli/src/services/MCPService.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
import {
2+
decodeSecretLocation,
3+
getTemplateVariables,
4+
} from "@continuedev/config-yaml";
15
import { type AssistantConfig } from "@continuedev/sdk";
26
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
37
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
@@ -311,7 +315,24 @@ export class MCPService
311315
this.connections.set(serverName, connection);
312316
this.updateState();
313317

318+
const vars = getTemplateVariables(JSON.stringify(serverConfig));
319+
const secretVars = vars.filter((v) => v.startsWith("secrets."));
320+
const unrendered = secretVars.map((v) => {
321+
return decodeSecretLocation(v.replace("secrets.", "")).secretName;
322+
});
323+
314324
try {
325+
if (unrendered.length > 0) {
326+
const message = `${serverConfig.name} MCP Server has unresolved secrets: ${unrendered.join(", ")}
327+
For personal use you can set the secret in the hub at https://hub.continue.dev/settings/secrets or pass it to the CLI environment.
328+
Org-level secrets can only be used for MCP by Background Agents (https://docs.continue.dev/hub/agents/overview) when \"Include in Env\" is enabled for the secret.`;
329+
if (this.isHeadless) {
330+
throw new Error(message);
331+
} else {
332+
connection.warnings.push(message);
333+
}
334+
}
335+
315336
const client = await this.getConnectedClient(serverConfig, connection);
316337

317338
connection.client = client;

extensions/cli/src/systemMessage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ export async function constructSystemMessage(
171171
// Add plan mode specific instructions if in plan mode
172172
if (mode === "plan") {
173173
systemMessage +=
174-
'\n<context name="planMode">You are operating in _Plan Mode_, which means that your goal is to help the user investigate their ideas and develop a plan before taking action. You only have access to read-only tools and should not attempt to circumvent them to write / delete / create files. For example, it is not acceptable to use the Bash tool to write to files.</context>\n';
174+
'\n<context name="planMode">You are operating in _Plan Mode_, which means that your goal is to help the user investigate their ideas and develop a plan before taking action. You only have access to read-only tools and should not attempt to circumvent them to write / delete / create files. Ask the user to switch to agent mode if they want to make changes. For example, it is not acceptable to use the Bash tool to write to files.</context>\n';
175175
} else {
176176
// Check if commit signature is disabled via environment variable
177177
if (!process.env.CONTINUE_CLI_DISABLE_COMMIT_SIGNATURE) {

extensions/intellij/gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
pluginGroup=com.github.continuedev.continueintellijextension
2-
pluginVersion=1.0.52
2+
pluginVersion=1.0.55
33
platformVersion=2024.1
44
kotlin.stdlib.default.dependency=false
55
org.gradle.configuration-cache=true

extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/constants/MessageTypes.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ class MessageTypes {
44
companion object {
55
val IDE_MESSAGE_TYPES = listOf(
66
"readRangeInFile",
7-
"isTelemetryEnabled",
87
"getUniqueId",
98
"getDiff",
109
"getTerminalContents",

extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/IdeProtocolClient.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,6 @@ class IdeProtocolClient(
162162
respond(contents)
163163
}
164164

165-
"isTelemetryEnabled" -> {
166-
val isEnabled = ide.isTelemetryEnabled()
167-
respond(isEnabled)
168-
}
169-
170165
"readRangeInFile" -> {
171166
val params = gsonService.gson.fromJson(
172167
dataElement.toString(),

0 commit comments

Comments
 (0)