@oh-my-pi/pi-coding-agent 14.9.9 → 15.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +123 -0
- package/examples/extensions/plan-mode.ts +0 -1
- package/package.json +9 -9
- package/scripts/build-binary.ts +5 -0
- package/scripts/format-prompts.ts +1 -1
- package/src/autoresearch/helpers.ts +17 -0
- package/src/autoresearch/tools/log-experiment.ts +9 -17
- package/src/autoresearch/tools/run-experiment.ts +2 -17
- package/src/capability/skill.ts +7 -0
- package/src/cli/args.ts +2 -2
- package/src/cli/list-models.ts +1 -1
- package/src/cli/shell-cli.ts +3 -13
- package/src/cli/update-cli.ts +1 -1
- package/src/cli.ts +11 -29
- package/src/commands/acp.ts +24 -0
- package/src/commands/launch.ts +6 -4
- package/src/commit/agentic/prompts/system.md +1 -1
- package/src/commit/agentic/tools/propose-changelog.ts +8 -1
- package/src/commit/analysis/conventional.ts +8 -66
- package/src/commit/map-reduce/reduce-phase.ts +6 -65
- package/src/commit/pipeline.ts +2 -2
- package/src/commit/shared-llm.ts +89 -0
- package/src/config/config-file.ts +210 -0
- package/src/config/model-equivalence.ts +8 -11
- package/src/config/model-registry.ts +13 -2
- package/src/config/model-resolver.ts +31 -4
- package/src/config/settings-schema.ts +102 -1
- package/src/config/settings.ts +1 -1
- package/src/config.ts +3 -219
- package/src/edit/index.ts +22 -1
- package/src/edit/modes/patch.ts +10 -0
- package/src/edit/modes/replace.ts +3 -0
- package/src/edit/renderer.ts +17 -1
- package/src/eval/js/context-manager.ts +1 -1
- package/src/eval/js/executor.ts +3 -0
- package/src/eval/js/shared/rewrite-imports.ts +122 -50
- package/src/eval/js/shared/runtime.ts +31 -4
- package/src/eval/js/tool-bridge.ts +43 -21
- package/src/eval/py/executor.ts +5 -0
- package/src/exa/factory.ts +2 -2
- package/src/exa/mcp-client.ts +74 -1
- package/src/exec/bash-executor.ts +5 -1
- package/src/export/html/template.generated.ts +1 -1
- package/src/export/html/template.js +0 -11
- package/src/extensibility/extensions/runner.ts +55 -2
- package/src/extensibility/extensions/types.ts +98 -221
- package/src/extensibility/hooks/types.ts +89 -314
- package/src/extensibility/shared-events.ts +343 -0
- package/src/extensibility/skills.ts +42 -1
- package/src/goals/index.ts +3 -0
- package/src/goals/runtime.ts +500 -0
- package/src/goals/state.ts +37 -0
- package/src/goals/tools/goal-tool.ts +237 -0
- package/src/hashline/anchors.ts +2 -2
- package/src/hindsight/mental-models.ts +1 -1
- package/src/internal-urls/agent-protocol.ts +1 -20
- package/src/internal-urls/artifact-protocol.ts +1 -19
- package/src/internal-urls/docs-index.generated.ts +9 -10
- package/src/internal-urls/index.ts +1 -0
- package/src/internal-urls/issue-pr-protocol.ts +577 -0
- package/src/internal-urls/registry-helpers.ts +25 -0
- package/src/internal-urls/router.ts +6 -3
- package/src/internal-urls/types.ts +22 -1
- package/src/main.ts +24 -11
- package/src/mcp/oauth-flow.ts +20 -0
- package/src/modes/acp/acp-agent.ts +412 -71
- package/src/modes/acp/acp-client-bridge.ts +152 -0
- package/src/modes/acp/acp-event-mapper.ts +180 -15
- package/src/modes/acp/terminal-auth.ts +37 -0
- package/src/modes/components/assistant-message.ts +14 -8
- package/src/modes/components/bash-execution.ts +24 -63
- package/src/modes/components/custom-message.ts +14 -40
- package/src/modes/components/eval-execution.ts +27 -57
- package/src/modes/components/execution-shared.ts +102 -0
- package/src/modes/components/hook-message.ts +17 -49
- package/src/modes/components/mcp-add-wizard.ts +26 -5
- package/src/modes/components/message-frame.ts +88 -0
- package/src/modes/components/model-selector.ts +1 -1
- package/src/modes/components/read-tool-group.ts +29 -1
- package/src/modes/components/session-observer-overlay.ts +6 -2
- package/src/modes/components/session-selector.ts +1 -1
- package/src/modes/components/status-line/segments.ts +55 -4
- package/src/modes/components/status-line/types.ts +4 -0
- package/src/modes/components/status-line.ts +28 -10
- package/src/modes/components/tool-execution.ts +7 -8
- package/src/modes/controllers/command-controller-shared.ts +108 -0
- package/src/modes/controllers/command-controller.ts +27 -10
- package/src/modes/controllers/event-controller.ts +60 -18
- package/src/modes/controllers/extension-ui-controller.ts +8 -2
- package/src/modes/controllers/input-controller.ts +85 -39
- package/src/modes/controllers/mcp-command-controller.ts +56 -61
- package/src/modes/controllers/ssh-command-controller.ts +18 -57
- package/src/modes/interactive-mode.ts +675 -39
- package/src/modes/print-mode.ts +16 -86
- package/src/modes/rpc/rpc-mode.ts +30 -88
- package/src/modes/runtime-init.ts +115 -0
- package/src/modes/theme/defaults/dark-poimandres.json +2 -0
- package/src/modes/theme/defaults/light-poimandres.json +2 -0
- package/src/modes/theme/theme.ts +18 -6
- package/src/modes/types.ts +20 -5
- package/src/modes/utils/context-usage.ts +13 -13
- package/src/modes/utils/ui-helpers.ts +25 -6
- package/src/plan-mode/approved-plan.ts +35 -1
- package/src/prompts/agents/designer.md +5 -5
- package/src/prompts/agents/explore.md +7 -7
- package/src/prompts/agents/init.md +9 -9
- package/src/prompts/agents/librarian.md +14 -14
- package/src/prompts/agents/plan.md +4 -4
- package/src/prompts/agents/reviewer.md +5 -5
- package/src/prompts/agents/task.md +10 -10
- package/src/prompts/commands/orchestrate.md +2 -2
- package/src/prompts/compaction/branch-summary.md +3 -3
- package/src/prompts/compaction/compaction-short-summary.md +7 -7
- package/src/prompts/compaction/compaction-summary-context.md +1 -1
- package/src/prompts/compaction/compaction-summary.md +5 -5
- package/src/prompts/compaction/compaction-turn-prefix.md +3 -3
- package/src/prompts/compaction/compaction-update-summary.md +11 -11
- package/src/prompts/goals/goal-budget-limit.md +16 -0
- package/src/prompts/goals/goal-continuation.md +28 -0
- package/src/prompts/goals/goal-mode-active.md +23 -0
- package/src/prompts/memories/consolidation.md +2 -2
- package/src/prompts/memories/read-path.md +1 -1
- package/src/prompts/memories/stage_one_input.md +1 -1
- package/src/prompts/memories/stage_one_system.md +5 -5
- package/src/prompts/review-request.md +4 -4
- package/src/prompts/system/agent-creation-architect.md +17 -17
- package/src/prompts/system/agent-creation-user.md +2 -2
- package/src/prompts/system/commit-message-system.md +2 -2
- package/src/prompts/system/custom-system-prompt.md +2 -2
- package/src/prompts/system/eager-todo.md +6 -6
- package/src/prompts/system/handoff-document.md +1 -1
- package/src/prompts/system/plan-mode-active.md +25 -24
- package/src/prompts/system/plan-mode-approved.md +4 -4
- package/src/prompts/system/plan-mode-compact-instructions.md +16 -0
- package/src/prompts/system/plan-mode-reference.md +2 -2
- package/src/prompts/system/plan-mode-subagent.md +8 -8
- package/src/prompts/system/plan-mode-tool-decision-reminder.md +3 -3
- package/src/prompts/system/project-prompt.md +4 -4
- package/src/prompts/system/subagent-system-prompt.md +7 -7
- package/src/prompts/system/subagent-yield-reminder.md +4 -4
- package/src/prompts/system/system-prompt.md +72 -71
- package/src/prompts/system/ttsr-interrupt.md +1 -1
- package/src/prompts/tools/apply-patch.md +1 -1
- package/src/prompts/tools/ast-edit.md +3 -3
- package/src/prompts/tools/ast-grep.md +3 -3
- package/src/prompts/tools/bash.md +6 -0
- package/src/prompts/tools/browser.md +3 -3
- package/src/prompts/tools/checkpoint.md +3 -3
- package/src/prompts/tools/find.md +3 -3
- package/src/prompts/tools/github.md +2 -5
- package/src/prompts/tools/goal.md +13 -0
- package/src/prompts/tools/hashline.md +104 -116
- package/src/prompts/tools/image-gen.md +3 -3
- package/src/prompts/tools/irc.md +1 -1
- package/src/prompts/tools/lsp.md +2 -2
- package/src/prompts/tools/patch.md +6 -6
- package/src/prompts/tools/read.md +8 -7
- package/src/prompts/tools/replace.md +5 -5
- package/src/prompts/tools/resolve.md +6 -5
- package/src/prompts/tools/retain.md +1 -1
- package/src/prompts/tools/rewind.md +2 -2
- package/src/prompts/tools/search.md +2 -2
- package/src/prompts/tools/ssh.md +2 -2
- package/src/prompts/tools/task.md +12 -6
- package/src/prompts/tools/web-search.md +2 -2
- package/src/prompts/tools/write.md +3 -3
- package/src/sdk.ts +81 -17
- package/src/session/agent-session.ts +656 -125
- package/src/session/blob-store.ts +36 -3
- package/src/session/client-bridge.ts +81 -0
- package/src/session/compaction/errors.ts +31 -0
- package/src/session/compaction/index.ts +1 -0
- package/src/session/messages.ts +67 -2
- package/src/session/session-manager.ts +131 -12
- package/src/session/session-storage.ts +33 -15
- package/src/session/streaming-output.ts +309 -13
- package/src/slash-commands/acp-builtins.ts +46 -0
- package/src/slash-commands/builtin-registry.ts +717 -116
- package/src/slash-commands/helpers/context-report.ts +39 -0
- package/src/slash-commands/helpers/format.ts +23 -0
- package/src/slash-commands/helpers/marketplace-manager.ts +25 -0
- package/src/slash-commands/helpers/mcp.ts +532 -0
- package/src/slash-commands/helpers/parse.ts +85 -0
- package/src/slash-commands/helpers/ssh.ts +193 -0
- package/src/slash-commands/helpers/todo.ts +279 -0
- package/src/slash-commands/helpers/usage-report.ts +91 -0
- package/src/slash-commands/types.ts +126 -0
- package/src/ssh/ssh-executor.ts +5 -0
- package/src/system-prompt.ts +4 -2
- package/src/task/executor.ts +27 -10
- package/src/task/index.ts +20 -1
- package/src/task/render.ts +27 -18
- package/src/task/types.ts +4 -0
- package/src/tools/ast-edit.ts +21 -120
- package/src/tools/ast-grep.ts +21 -119
- package/src/tools/bash-interactive.ts +9 -1
- package/src/tools/bash.ts +203 -6
- package/src/tools/browser/attach.ts +3 -3
- package/src/tools/browser/launch.ts +81 -18
- package/src/tools/browser/registry.ts +1 -5
- package/src/tools/browser/tab-supervisor.ts +51 -14
- package/src/tools/conflict-detect.ts +21 -10
- package/src/tools/eval.ts +3 -1
- package/src/tools/fetch.ts +15 -4
- package/src/tools/find.ts +39 -39
- package/src/tools/gh-renderer.ts +0 -12
- package/src/tools/gh.ts +689 -182
- package/src/tools/github-cache.ts +548 -0
- package/src/tools/index.ts +25 -11
- package/src/tools/inspect-image.ts +3 -10
- package/src/tools/output-meta.ts +176 -37
- package/src/tools/path-utils.ts +125 -2
- package/src/tools/read.ts +605 -239
- package/src/tools/render-utils.ts +92 -0
- package/src/tools/renderers.ts +2 -0
- package/src/tools/resolve.ts +72 -44
- package/src/tools/search.ts +120 -186
- package/src/tools/write.ts +67 -10
- package/src/tui/code-cell.ts +70 -2
- package/src/utils/file-mentions.ts +1 -1
- package/src/utils/image-loading.ts +7 -3
- package/src/utils/image-resize.ts +32 -43
- package/src/vim/parser.ts +0 -17
- package/src/vim/render.ts +1 -1
- package/src/vim/types.ts +1 -1
- package/src/web/search/providers/gemini.ts +35 -95
- package/src/prompts/tools/exit-plan-mode.md +0 -6
- package/src/tools/exit-plan-mode.ts +0 -97
- package/src/utils/fuzzy.ts +0 -108
- package/src/utils/image-convert.ts +0 -27
package/src/sdk.ts
CHANGED
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
INTENT_FIELD,
|
|
7
7
|
type ThinkingLevel,
|
|
8
8
|
} from "@oh-my-pi/pi-agent-core";
|
|
9
|
-
import type { Message, Model, SimpleStreamOptions } from "@oh-my-pi/pi-ai";
|
|
9
|
+
import type { CredentialDisabledEvent, Message, Model, SimpleStreamOptions } from "@oh-my-pi/pi-ai";
|
|
10
10
|
import {
|
|
11
11
|
getOpenAICodexTransportDetails,
|
|
12
12
|
prewarmOpenAICodexResponses,
|
|
@@ -29,7 +29,13 @@ import { createAutoresearchExtension } from "./autoresearch";
|
|
|
29
29
|
import { loadCapability } from "./capability";
|
|
30
30
|
import { type Rule, ruleCapability, setActiveRules } from "./capability/rule";
|
|
31
31
|
import { ModelRegistry } from "./config/model-registry";
|
|
32
|
-
import {
|
|
32
|
+
import {
|
|
33
|
+
formatModelString,
|
|
34
|
+
parseModelPattern,
|
|
35
|
+
parseModelString,
|
|
36
|
+
resolveAllowedModels,
|
|
37
|
+
resolveModelRoleValue,
|
|
38
|
+
} from "./config/model-resolver";
|
|
33
39
|
import { loadPromptTemplates as loadPromptTemplatesInternal, type PromptTemplate } from "./config/prompt-templates";
|
|
34
40
|
import { Settings, type SkillsSettings } from "./config/settings";
|
|
35
41
|
import { CursorExecHandlers } from "./cursor";
|
|
@@ -670,10 +676,32 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
670
676
|
registerSshCleanup();
|
|
671
677
|
registerPythonCleanup();
|
|
672
678
|
|
|
673
|
-
//
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
679
|
+
// Pin authStorage to modelRegistry.authStorage: ModelRegistry.getApiKey() routes refresh
|
|
680
|
+
// failures through that instance, so any divergent storage handed to the bridge / mcpManager
|
|
681
|
+
// / session would silently miss credential_disabled events.
|
|
682
|
+
const modelRegistry =
|
|
683
|
+
options.modelRegistry ??
|
|
684
|
+
new ModelRegistry(options.authStorage ?? (await logger.time("discoverModels", discoverAuthStorage, agentDir)));
|
|
685
|
+
const authStorage = modelRegistry.authStorage;
|
|
686
|
+
if (options.authStorage && options.authStorage !== authStorage) {
|
|
687
|
+
throw new Error(
|
|
688
|
+
"options.authStorage and options.modelRegistry.authStorage must be the same instance when both are provided",
|
|
689
|
+
);
|
|
690
|
+
}
|
|
691
|
+
// Subscribe before any getApiKey() call so startup model probes can't fire a
|
|
692
|
+
// credential_disabled event past us. An embedder's constructor handler makes the
|
|
693
|
+
// listener set non-empty from construction, which defeats AuthStorage's no-listener
|
|
694
|
+
// buffer — so we can't rely on it to catch startup events for the extension runner.
|
|
695
|
+
const startupCredentialDisabledEvents: CredentialDisabledEvent[] = [];
|
|
696
|
+
let credentialDisabledTarget: ExtensionRunner | undefined;
|
|
697
|
+
let unsubscribeCredentialDisabled: (() => void) | undefined = authStorage.onCredentialDisabled(event => {
|
|
698
|
+
if (credentialDisabledTarget) {
|
|
699
|
+
// Discard return: any handler error is routed through runner.onError listeners.
|
|
700
|
+
void credentialDisabledTarget.emitCredentialDisabled(event);
|
|
701
|
+
} else {
|
|
702
|
+
startupCredentialDisabledEvents.push(event);
|
|
703
|
+
}
|
|
704
|
+
});
|
|
677
705
|
const settings = options.settings ?? (await logger.time("settings", Settings.init, { cwd, agentDir }));
|
|
678
706
|
logger.time("initializeWithSettings", initializeWithSettings, settings);
|
|
679
707
|
if (!options.modelRegistry) {
|
|
@@ -778,8 +806,11 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
778
806
|
const modelMatchPreferences = {
|
|
779
807
|
usageOrder: settings.getStorage()?.getModelUsageOrder(),
|
|
780
808
|
};
|
|
809
|
+
const allowedModels = await logger.time("resolveAllowedModels", () =>
|
|
810
|
+
resolveAllowedModels(modelRegistry, settings, modelMatchPreferences),
|
|
811
|
+
);
|
|
781
812
|
const defaultRoleSpec = logger.time("resolveDefaultModelRole", () =>
|
|
782
|
-
resolveModelRoleValue(settings.getModelRole("default"),
|
|
813
|
+
resolveModelRoleValue(settings.getModelRole("default"), allowedModels, {
|
|
783
814
|
settings,
|
|
784
815
|
matchPreferences: modelMatchPreferences,
|
|
785
816
|
modelRegistry,
|
|
@@ -1013,7 +1044,10 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1013
1044
|
getSessionSpawns: () => options.spawns ?? "*",
|
|
1014
1045
|
getModelString: () => (hasExplicitModel && model ? formatModelString(model) : undefined),
|
|
1015
1046
|
getActiveModelString,
|
|
1016
|
-
getPlanModeState: () => session
|
|
1047
|
+
getPlanModeState: () => session?.getPlanModeState(),
|
|
1048
|
+
getGoalModeState: () => session?.getGoalModeState(),
|
|
1049
|
+
getGoalRuntime: () => session?.goalRuntime,
|
|
1050
|
+
getClientBridge: () => session?.clientBridge,
|
|
1017
1051
|
getCompactContext: () => session.formatCompactContext(),
|
|
1018
1052
|
getTodoPhases: () => session.getTodoPhases(),
|
|
1019
1053
|
setTodoPhases: phases => session.setTodoPhases(phases),
|
|
@@ -1046,6 +1080,8 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1046
1080
|
timestamp: Date.now(),
|
|
1047
1081
|
}),
|
|
1048
1082
|
peekQueueInvoker: () => session.peekQueueInvoker(),
|
|
1083
|
+
peekStandingResolveHandler: () => session.peekStandingResolveHandler(),
|
|
1084
|
+
setStandingResolveHandler: handler => session.setStandingResolveHandler(handler),
|
|
1049
1085
|
allocateOutputArtifact: async toolType => {
|
|
1050
1086
|
try {
|
|
1051
1087
|
return await sessionManager.allocateArtifactPath(toolType);
|
|
@@ -1236,11 +1272,14 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1236
1272
|
}
|
|
1237
1273
|
}
|
|
1238
1274
|
|
|
1239
|
-
// Fall back to first available model with a valid API key
|
|
1240
|
-
//
|
|
1275
|
+
// Fall back to first available model with a valid API key, honoring the
|
|
1276
|
+
// path-scoped `enabledModels` allow-list when configured. Skip when the
|
|
1277
|
+
// user explicitly requested a model via --model that wasn't found.
|
|
1241
1278
|
if (!model && !options.modelPattern) {
|
|
1242
|
-
|
|
1243
|
-
|
|
1279
|
+
// Re-resolve the allowed set: extension factories above may have
|
|
1280
|
+
// registered providers/models that weren't visible at startup.
|
|
1281
|
+
const fallbackCandidates = await resolveAllowedModels(modelRegistry, settings, modelMatchPreferences);
|
|
1282
|
+
for (const candidate of fallbackCandidates) {
|
|
1244
1283
|
if (await hasModelApiKey(candidate)) {
|
|
1245
1284
|
model = candidate;
|
|
1246
1285
|
break;
|
|
@@ -1251,8 +1290,11 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1251
1290
|
modelFallbackMessage += `. Using ${model.provider}/${model.id}`;
|
|
1252
1291
|
}
|
|
1253
1292
|
} else {
|
|
1293
|
+
const patterns = settings.get("enabledModels");
|
|
1254
1294
|
modelFallbackMessage =
|
|
1255
|
-
|
|
1295
|
+
patterns && patterns.length > 0
|
|
1296
|
+
? `No model available matching enabledModels (${patterns.join(", ")}) with usable credentials. Configure auth for an allowed provider or adjust enabledModels.`
|
|
1297
|
+
: "No models available. Use /login or set an API key environment variable. Then use /model to select a model.";
|
|
1256
1298
|
}
|
|
1257
1299
|
}
|
|
1258
1300
|
|
|
@@ -1277,6 +1319,20 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1277
1319
|
);
|
|
1278
1320
|
}
|
|
1279
1321
|
|
|
1322
|
+
if (extensionRunner) {
|
|
1323
|
+
credentialDisabledTarget = extensionRunner;
|
|
1324
|
+
for (const event of startupCredentialDisabledEvents.splice(0)) {
|
|
1325
|
+
// Discard return: any handler error is routed through runner.onError listeners.
|
|
1326
|
+
void extensionRunner.emitCredentialDisabled(event);
|
|
1327
|
+
}
|
|
1328
|
+
} else {
|
|
1329
|
+
// No runner to forward to; release our subscription. The embedder's own
|
|
1330
|
+
// onCredentialDisabled (if any) keeps firing through its own subscription.
|
|
1331
|
+
startupCredentialDisabledEvents.length = 0;
|
|
1332
|
+
unsubscribeCredentialDisabled?.();
|
|
1333
|
+
unsubscribeCredentialDisabled = undefined;
|
|
1334
|
+
}
|
|
1335
|
+
|
|
1280
1336
|
const getSessionContext = () => ({
|
|
1281
1337
|
sessionManager,
|
|
1282
1338
|
modelRegistry,
|
|
@@ -1325,6 +1381,12 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1325
1381
|
for (const tool of builtinTools) {
|
|
1326
1382
|
toolRegistry.set(tool.name, tool);
|
|
1327
1383
|
}
|
|
1384
|
+
if (!toolRegistry.has("goal") && settings.get("goal.enabled")) {
|
|
1385
|
+
const goalTool = await logger.time("createTools:goal:session", HIDDEN_TOOLS.goal, toolSession);
|
|
1386
|
+
if (goalTool) {
|
|
1387
|
+
toolRegistry.set(goalTool.name, wrapToolWithMetaNotice(goalTool));
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1328
1390
|
for (const tool of wrappedExtensionTools) {
|
|
1329
1391
|
toolRegistry.set(tool.name, tool);
|
|
1330
1392
|
}
|
|
@@ -1451,7 +1513,6 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1451
1513
|
(options.toolNames ? [...new Set(options.toolNames.map(name => name.toLowerCase()))] : undefined) ??
|
|
1452
1514
|
toolNamesFromRegistry;
|
|
1453
1515
|
const normalizedRequested = requestedToolNames.filter(name => toolRegistry.has(name));
|
|
1454
|
-
const includeExitPlanMode = requestedToolNames.includes("exit_plan_mode");
|
|
1455
1516
|
// Effective discovery mode: tools.discoveryMode takes precedence; mcp.discoveryMode is back-compat alias.
|
|
1456
1517
|
const toolsDiscoveryModeSetting = settings.get("tools.discoveryMode");
|
|
1457
1518
|
const effectiveDiscoveryMode: "off" | "mcp-only" | "all" =
|
|
@@ -1464,9 +1525,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1464
1525
|
const defaultInactiveToolNames = new Set(
|
|
1465
1526
|
registeredTools.filter(tool => tool.definition.defaultInactive).map(tool => tool.definition.name),
|
|
1466
1527
|
);
|
|
1467
|
-
const requestedActiveToolNames =
|
|
1468
|
-
? normalizedRequested
|
|
1469
|
-
: normalizedRequested.filter(name => name !== "exit_plan_mode");
|
|
1528
|
+
const requestedActiveToolNames = normalizedRequested.filter(name => name !== "goal");
|
|
1470
1529
|
const initialRequestedActiveToolNames = options.toolNames
|
|
1471
1530
|
? requestedActiveToolNames
|
|
1472
1531
|
: requestedActiveToolNames.filter(name => !defaultInactiveToolNames.has(name));
|
|
@@ -1766,6 +1825,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1766
1825
|
await originalDispose();
|
|
1767
1826
|
} finally {
|
|
1768
1827
|
agentRegistry.unregister(resolvedAgentId);
|
|
1828
|
+
unsubscribeCredentialDisabled?.();
|
|
1769
1829
|
}
|
|
1770
1830
|
};
|
|
1771
1831
|
}
|
|
@@ -1901,6 +1961,10 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1901
1961
|
eventBus,
|
|
1902
1962
|
};
|
|
1903
1963
|
} catch (error) {
|
|
1964
|
+
// Release the subscription if the throw happened after install but before the
|
|
1965
|
+
// dispose-wrap took ownership. Idempotent with dispose() — Set.delete is a no-op
|
|
1966
|
+
// for already-removed listeners.
|
|
1967
|
+
unsubscribeCredentialDisabled?.();
|
|
1904
1968
|
try {
|
|
1905
1969
|
if (hasSession) {
|
|
1906
1970
|
await session.dispose();
|