@getpaseo/server 0.1.74 → 0.1.76
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/dist/scripts/supervisor-entrypoint.js +2 -21
- package/dist/scripts/supervisor-entrypoint.js.map +1 -1
- package/dist/scripts/supervisor-log-config.js +31 -0
- package/dist/scripts/supervisor-log-config.js.map +1 -0
- package/dist/server/client/daemon-client.d.ts +13 -2
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +36 -0
- package/dist/server/client/daemon-client.js.map +1 -1
- package/dist/server/server/agent/agent-manager.d.ts +5 -1
- package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
- package/dist/server/server/agent/agent-manager.js +152 -22
- package/dist/server/server/agent/agent-manager.js.map +1 -1
- package/dist/server/server/agent/agent-prompt.d.ts.map +1 -1
- package/dist/server/server/agent/agent-prompt.js +27 -0
- package/dist/server/server/agent/agent-prompt.js.map +1 -1
- package/dist/server/server/agent/agent-sdk-types.d.ts +5 -0
- package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
- package/dist/server/server/agent/agent-sdk-types.js +10 -0
- package/dist/server/server/agent/agent-sdk-types.js.map +1 -1
- package/dist/server/server/agent/foreground-run-state.d.ts +1 -1
- package/dist/server/server/agent/foreground-run-state.d.ts.map +1 -1
- package/dist/server/server/agent/foreground-run-state.js +2 -4
- package/dist/server/server/agent/foreground-run-state.js.map +1 -1
- package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-server.js +74 -3
- package/dist/server/server/agent/mcp-server.js.map +1 -1
- package/dist/server/server/agent/provider-history-timestamps.d.ts +2 -0
- package/dist/server/server/agent/provider-history-timestamps.d.ts.map +1 -0
- package/dist/server/server/agent/provider-history-timestamps.js +16 -0
- package/dist/server/server/agent/provider-history-timestamps.js.map +1 -0
- package/dist/server/server/agent/provider-manifest.d.ts +1 -1
- package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
- package/dist/server/server/agent/provider-manifest.js +17 -3
- package/dist/server/server/agent/provider-manifest.js.map +1 -1
- package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
- package/dist/server/server/agent/provider-registry.js +66 -32
- package/dist/server/server/agent/provider-registry.js.map +1 -1
- package/dist/server/server/agent/provider-snapshot-manager.d.ts +2 -6
- package/dist/server/server/agent/provider-snapshot-manager.d.ts.map +1 -1
- package/dist/server/server/agent/provider-snapshot-manager.js +43 -32
- package/dist/server/server/agent/provider-snapshot-manager.js.map +1 -1
- package/dist/server/server/agent/providers/acp-agent.d.ts +42 -2
- package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/acp-agent.js +182 -28
- package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
- package/dist/server/server/agent/providers/claude/agent.d.ts +1 -1
- package/dist/server/server/agent/providers/claude/agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude/agent.js +191 -62
- package/dist/server/server/agent/providers/claude/agent.js.map +1 -1
- package/dist/server/server/agent/providers/claude/models.d.ts +2 -0
- package/dist/server/server/agent/providers/claude/models.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude/models.js +78 -0
- package/dist/server/server/agent/providers/claude/models.js.map +1 -1
- package/dist/server/server/agent/providers/codex/app-server-transport.d.ts +8 -1
- package/dist/server/server/agent/providers/codex/app-server-transport.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex/app-server-transport.js +32 -1
- package/dist/server/server/agent/providers/codex/app-server-transport.js.map +1 -1
- package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex/tool-call-mapper.js +36 -7
- package/dist/server/server/agent/providers/codex/tool-call-mapper.js.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +28 -4
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.js +487 -80
- package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
- package/dist/server/server/agent/providers/copilot-acp-agent.d.ts +10 -1
- package/dist/server/server/agent/providers/copilot-acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/copilot-acp-agent.js +114 -7
- package/dist/server/server/agent/providers/copilot-acp-agent.js.map +1 -1
- package/dist/server/server/agent/providers/cursor-acp-agent.d.ts +21 -0
- package/dist/server/server/agent/providers/cursor-acp-agent.d.ts.map +1 -0
- package/dist/server/server/agent/providers/cursor-acp-agent.js +85 -0
- package/dist/server/server/agent/providers/cursor-acp-agent.js.map +1 -0
- package/dist/server/server/agent/providers/generic-acp-agent.d.ts +13 -0
- package/dist/server/server/agent/providers/generic-acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/generic-acp-agent.js +209 -2
- package/dist/server/server/agent/providers/generic-acp-agent.js.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.d.ts +7 -7
- package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.js +121 -109
- package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
- package/dist/server/server/agent/providers/pi-direct-agent.d.ts +2 -2
- package/dist/server/server/agent/providers/pi-direct-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/pi-direct-agent.js +16 -15
- package/dist/server/server/agent/providers/pi-direct-agent.js.map +1 -1
- package/dist/server/server/agent/providers/pi-session-recovery-policy.d.ts +22 -0
- package/dist/server/server/agent/providers/pi-session-recovery-policy.d.ts.map +1 -0
- package/dist/server/server/agent/providers/pi-session-recovery-policy.js +51 -0
- package/dist/server/server/agent/providers/pi-session-recovery-policy.js.map +1 -0
- package/dist/server/server/agent/providers/provider-runner.d.ts +1 -1
- package/dist/server/server/agent/providers/provider-runner.d.ts.map +1 -1
- package/dist/server/server/agent/providers/provider-runner.js +2 -1
- package/dist/server/server/agent/providers/provider-runner.js.map +1 -1
- package/dist/server/server/agent/providers/test-utils/session-stream-adapter.d.ts +1 -1
- package/dist/server/server/agent/providers/test-utils/session-stream-adapter.d.ts.map +1 -1
- package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js +2 -1
- package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js.map +1 -1
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
- package/dist/server/server/agent/stt-manager.d.ts +5 -1
- package/dist/server/server/agent/stt-manager.d.ts.map +1 -1
- package/dist/server/server/agent/stt-manager.js +3 -2
- package/dist/server/server/agent/stt-manager.js.map +1 -1
- package/dist/server/server/agent/timeline-projection.d.ts.map +1 -1
- package/dist/server/server/agent/timeline-projection.js +9 -0
- package/dist/server/server/agent/timeline-projection.js.map +1 -1
- package/dist/server/server/auto-archive-on-merge/archive-if-safe.d.ts +40 -0
- package/dist/server/server/auto-archive-on-merge/archive-if-safe.d.ts.map +1 -0
- package/dist/server/server/auto-archive-on-merge/archive-if-safe.js +80 -0
- package/dist/server/server/auto-archive-on-merge/archive-if-safe.js.map +1 -0
- package/dist/server/server/auto-archive-on-merge/index.d.ts +8 -0
- package/dist/server/server/auto-archive-on-merge/index.d.ts.map +1 -0
- package/dist/server/server/auto-archive-on-merge/index.js +15 -0
- package/dist/server/server/auto-archive-on-merge/index.js.map +1 -0
- package/dist/server/server/bootstrap.d.ts +6 -0
- package/dist/server/server/bootstrap.d.ts.map +1 -1
- package/dist/server/server/bootstrap.js +74 -38
- package/dist/server/server/bootstrap.js.map +1 -1
- package/dist/server/server/checkout/status-projection.d.ts.map +1 -1
- package/dist/server/server/checkout/status-projection.js +5 -1
- package/dist/server/server/checkout/status-projection.js.map +1 -1
- package/dist/server/server/config.d.ts.map +1 -1
- package/dist/server/server/config.js +3 -1
- package/dist/server/server/config.js.map +1 -1
- package/dist/server/server/daemon-config-store.js +1 -0
- package/dist/server/server/daemon-config-store.js.map +1 -1
- package/dist/server/server/dictation/dictation-stream-manager.d.ts +2 -0
- package/dist/server/server/dictation/dictation-stream-manager.d.ts.map +1 -1
- package/dist/server/server/dictation/dictation-stream-manager.js +2 -1
- package/dist/server/server/dictation/dictation-stream-manager.js.map +1 -1
- package/dist/server/server/logger.js +1 -1
- package/dist/server/server/logger.js.map +1 -1
- package/dist/server/server/loop/rpc-schemas.d.ts +96 -96
- package/dist/server/server/loop-service.d.ts +18 -18
- package/dist/server/server/paseo-worktree-service.d.ts +3 -1
- package/dist/server/server/paseo-worktree-service.d.ts.map +1 -1
- package/dist/server/server/paseo-worktree-service.js +55 -18
- package/dist/server/server/paseo-worktree-service.js.map +1 -1
- package/dist/server/server/persisted-config.d.ts +25 -0
- package/dist/server/server/persisted-config.d.ts.map +1 -1
- package/dist/server/server/persisted-config.js +3 -0
- package/dist/server/server/persisted-config.js.map +1 -1
- package/dist/server/server/relay-transport.d.ts +2 -1
- package/dist/server/server/relay-transport.d.ts.map +1 -1
- package/dist/server/server/relay-transport.js +26 -4
- package/dist/server/server/relay-transport.js.map +1 -1
- package/dist/server/server/schedule/service.d.ts.map +1 -1
- package/dist/server/server/schedule/service.js +14 -1
- package/dist/server/server/schedule/service.js.map +1 -1
- package/dist/server/server/session.d.ts +9 -0
- package/dist/server/server/session.d.ts.map +1 -1
- package/dist/server/server/session.js +281 -50
- package/dist/server/server/session.js.map +1 -1
- package/dist/server/server/speech/providers/local/config.d.ts +5 -0
- package/dist/server/server/speech/providers/local/config.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/config.js +35 -0
- package/dist/server/server/speech/providers/local/config.js.map +1 -1
- package/dist/server/server/speech/speech-config-resolver.d.ts.map +1 -1
- package/dist/server/server/speech/speech-config-resolver.js +1 -0
- package/dist/server/server/speech/speech-config-resolver.js.map +1 -1
- package/dist/server/server/speech/speech-runtime.d.ts +2 -0
- package/dist/server/server/speech/speech-runtime.d.ts.map +1 -1
- package/dist/server/server/speech/speech-runtime.js +2 -0
- package/dist/server/server/speech/speech-runtime.js.map +1 -1
- package/dist/server/server/voice/voice-turn-controller.d.ts +1 -0
- package/dist/server/server/voice/voice-turn-controller.d.ts.map +1 -1
- package/dist/server/server/voice/voice-turn-controller.js +1 -1
- package/dist/server/server/voice/voice-turn-controller.js.map +1 -1
- package/dist/server/server/websocket-server.d.ts.map +1 -1
- package/dist/server/server/websocket-server.js +7 -0
- package/dist/server/server/websocket-server.js.map +1 -1
- package/dist/server/server/workspace-git-service.d.ts +6 -1
- package/dist/server/server/workspace-git-service.d.ts.map +1 -1
- package/dist/server/server/workspace-git-service.js +27 -4
- package/dist/server/server/workspace-git-service.js.map +1 -1
- package/dist/server/server/workspace-reconciliation-service.d.ts +4 -2
- package/dist/server/server/workspace-reconciliation-service.d.ts.map +1 -1
- package/dist/server/server/workspace-reconciliation-service.js +112 -14
- package/dist/server/server/workspace-reconciliation-service.js.map +1 -1
- package/dist/server/server/workspace-registry.d.ts +6 -1
- package/dist/server/server/workspace-registry.d.ts.map +1 -1
- package/dist/server/server/workspace-registry.js +11 -0
- package/dist/server/server/workspace-registry.js.map +1 -1
- package/dist/server/server/worktree-session.d.ts.map +1 -1
- package/dist/server/server/worktree-session.js +1 -0
- package/dist/server/server/worktree-session.js.map +1 -1
- package/dist/server/services/github-service.d.ts +46 -0
- package/dist/server/services/github-service.d.ts.map +1 -1
- package/dist/server/services/github-service.js +274 -5
- package/dist/server/services/github-service.js.map +1 -1
- package/dist/server/shared/messages.d.ts +3427 -290
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +93 -3
- package/dist/server/shared/messages.js.map +1 -1
- package/dist/server/shared/terminal-input-mode.d.ts +26 -0
- package/dist/server/shared/terminal-input-mode.d.ts.map +1 -0
- package/dist/server/shared/terminal-input-mode.js +151 -0
- package/dist/server/shared/terminal-input-mode.js.map +1 -0
- package/dist/server/terminal/terminal-session-controller.d.ts.map +1 -1
- package/dist/server/terminal/terminal-session-controller.js +12 -2
- package/dist/server/terminal/terminal-session-controller.js.map +1 -1
- package/dist/server/terminal/terminal.d.ts +1 -0
- package/dist/server/terminal/terminal.d.ts.map +1 -1
- package/dist/server/terminal/terminal.js +16 -3
- package/dist/server/terminal/terminal.js.map +1 -1
- package/dist/server/terminal/worker-terminal-manager.d.ts.map +1 -1
- package/dist/server/terminal/worker-terminal-manager.js +8 -0
- package/dist/server/terminal/worker-terminal-manager.js.map +1 -1
- package/dist/server/utils/checkout-git.d.ts +4 -1
- package/dist/server/utils/checkout-git.d.ts.map +1 -1
- package/dist/server/utils/checkout-git.js +85 -29
- package/dist/server/utils/checkout-git.js.map +1 -1
- package/dist/server/utils/directory-suggestions.d.ts.map +1 -1
- package/dist/server/utils/directory-suggestions.js +51 -14
- package/dist/server/utils/directory-suggestions.js.map +1 -1
- package/dist/server/utils/executable.d.ts.map +1 -1
- package/dist/server/utils/executable.js +6 -3
- package/dist/server/utils/executable.js.map +1 -1
- package/dist/server/utils/run-git-command.d.ts +2 -0
- package/dist/server/utils/run-git-command.d.ts.map +1 -1
- package/dist/server/utils/run-git-command.js +41 -1
- package/dist/server/utils/run-git-command.js.map +1 -1
- package/dist/server/utils/worktree.js +1 -1
- package/dist/server/utils/worktree.js.map +1 -1
- package/dist/src/server/agent/agent-sdk-types.js +10 -0
- package/dist/src/server/agent/agent-sdk-types.js.map +1 -1
- package/dist/src/server/agent/provider-manifest.js +17 -3
- package/dist/src/server/agent/provider-manifest.js.map +1 -1
- package/dist/src/server/persisted-config.js +3 -0
- package/dist/src/server/persisted-config.js.map +1 -1
- package/dist/src/shared/messages.js +93 -3
- package/dist/src/shared/messages.js.map +1 -1
- package/dist/src/utils/executable.js +6 -3
- package/dist/src/utils/executable.js.map +1 -1
- package/package.json +3 -3
|
@@ -38,9 +38,10 @@ import { buildStoredAgentPayload, resolveEffectiveThinkingOptionId, resolveStore
|
|
|
38
38
|
import { appendTimelineItemIfAgentKnown, emitLiveTimelineItemIfAgentKnown, } from "./agent/timeline-append.js";
|
|
39
39
|
import { projectTimelineRows, selectTimelineWindowByProjectedLimit, } from "./agent/timeline-projection.js";
|
|
40
40
|
import { DEFAULT_STRUCTURED_GENERATION_PROVIDERS, StructuredAgentFallbackError, StructuredAgentResponseError, generateStructuredAgentResponseWithFallback, } from "./agent/agent-response-loop.js";
|
|
41
|
+
import { getAgentStreamEventTurnId, } from "./agent/agent-sdk-types.js";
|
|
41
42
|
import { ImportSessionsRequestError, importProviderSession, listImportableProviderSessions, normalizeImportAgentRequest, } from "./agent/import-sessions.js";
|
|
42
43
|
import { checkoutLiteFromGitSnapshot, normalizeWorkspaceId as normalizePersistedWorkspaceId, deriveProjectGroupingName, classifyDirectoryForProjectMembership, deriveWorkspaceDisplayName, } from "./workspace-registry-model.js";
|
|
43
|
-
import { createPersistedProjectRecord, createPersistedWorkspaceRecord, } from "./workspace-registry.js";
|
|
44
|
+
import { createPersistedProjectRecord, createPersistedWorkspaceRecord, resolveProjectDisplayName, } from "./workspace-registry.js";
|
|
44
45
|
import { buildVoiceModeSystemPrompt, stripVoiceModeSystemPrompt, wrapSpokenInput, } from "./voice-config.js";
|
|
45
46
|
import { isVoicePermissionAllowed } from "./voice-permission-policy.js";
|
|
46
47
|
import { listDirectoryEntries, readExplorerFile, readExplorerFileBytes, getDownloadableFileInfo, } from "./file-explorer/service.js";
|
|
@@ -59,7 +60,7 @@ import { resolveClientMessageId } from "./client-message-id.js";
|
|
|
59
60
|
import { ChatServiceError, parseMentionAgentIds, } from "./chat/chat-service.js";
|
|
60
61
|
import { notifyChatMentions, prepareChatMentionFanout } from "./chat/chat-mentions.js";
|
|
61
62
|
import { execCommand } from "../utils/spawn.js";
|
|
62
|
-
import { createGitHubService, } from "../services/github-service.js";
|
|
63
|
+
import { assertPullRequestAutoMergeDisableReady, assertPullRequestAutoMergeEnableReady, createGitHubService, } from "../services/github-service.js";
|
|
63
64
|
import { summarizeFetchWorkspacesEntries, WorkspaceDirectory, } from "./workspace-directory.js";
|
|
64
65
|
import { attemptFirstAgentBranchAutoName, createPaseoWorktree, } from "./paseo-worktree-service.js";
|
|
65
66
|
import { generateBranchNameFromFirstAgentContext } from "./worktree-branch-name-generator.js";
|
|
@@ -322,7 +323,7 @@ export class Session {
|
|
|
322
323
|
}
|
|
323
324
|
},
|
|
324
325
|
});
|
|
325
|
-
const { clientId, appVersion, clientCapabilities, onMessage, onBinaryMessage, onLifecycleIntent, logger, downloadTokenStore, pushTokenStore, paseoHome, agentManager, agentStorage, projectRegistry, workspaceRegistry, chatService, scheduleService, loopService, checkoutDiffManager, github, workspaceGitService, daemonConfigStore, mcpBaseUrl, stt, tts, terminalManager, providerSnapshotManager, scriptRouteStore, scriptRuntimeStore, workspaceSetupSnapshots, onBranchChanged, getDaemonTcpPort, getDaemonTcpHost, resolveScriptHealth, voice, voiceBridge, dictation, agentProviderRuntimeSettings, providerOverrides, isDev, } = options;
|
|
326
|
+
const { clientId, appVersion, clientCapabilities, onMessage, onBinaryMessage, onLifecycleIntent, logger, downloadTokenStore, pushTokenStore, paseoHome, agentManager, agentStorage, projectRegistry, workspaceRegistry, chatService, scheduleService, loopService, checkoutDiffManager, github, workspaceGitService, daemonConfigStore, mcpBaseUrl, stt, sttLanguage, tts, terminalManager, providerSnapshotManager, scriptRouteStore, scriptRuntimeStore, workspaceSetupSnapshots, onBranchChanged, getDaemonTcpPort, getDaemonTcpHost, resolveScriptHealth, voice, voiceBridge, dictation, agentProviderRuntimeSettings, providerOverrides, isDev, } = options;
|
|
326
327
|
this.clientId = clientId;
|
|
327
328
|
this.appVersion = appVersion ?? null;
|
|
328
329
|
this.clientCapabilities = parseClientCapabilities(clientCapabilities);
|
|
@@ -367,6 +368,7 @@ export class Session {
|
|
|
367
368
|
this.getDaemonTcpPort = getDaemonTcpPort ?? null;
|
|
368
369
|
this.getDaemonTcpHost = getDaemonTcpHost ?? null;
|
|
369
370
|
this.resolveScriptHealth = resolveScriptHealth ?? null;
|
|
371
|
+
this.sttLanguage = sttLanguage ?? "en";
|
|
370
372
|
this.subscribeToOptionalManagers();
|
|
371
373
|
this.bindVoiceBridges({ voice, voiceBridge, dictation });
|
|
372
374
|
this.agentProviderRuntimeSettings = agentProviderRuntimeSettings;
|
|
@@ -381,11 +383,11 @@ export class Session {
|
|
|
381
383
|
isProviderVisibleToClient: (provider) => this.isProviderVisibleToClient(provider),
|
|
382
384
|
buildWorkspaceDescriptor: (input) => this.buildWorkspaceDescriptor(input),
|
|
383
385
|
});
|
|
384
|
-
this.initializePerSessionManagers({ tts, stt, dictation });
|
|
386
|
+
this.initializePerSessionManagers({ tts, stt, sttLanguage, dictation });
|
|
385
387
|
// Initialize agent MCP client asynchronously
|
|
386
388
|
void this.initializeAgentMcp();
|
|
387
389
|
this.subscribeToAgentEvents();
|
|
388
|
-
this.sessionLogger.trace("
|
|
390
|
+
this.sessionLogger.trace({}, "agent.session.lifecycle.created");
|
|
389
391
|
}
|
|
390
392
|
updateAppVersion(appVersion) {
|
|
391
393
|
if (appVersion && appVersion !== this.appVersion) {
|
|
@@ -477,12 +479,17 @@ export class Session {
|
|
|
477
479
|
async interruptAgentIfRunning(agentId) {
|
|
478
480
|
const snapshot = this.agentManager.getAgent(agentId);
|
|
479
481
|
if (!snapshot) {
|
|
480
|
-
this.sessionLogger.trace({ agentId }, "
|
|
482
|
+
this.sessionLogger.trace({ agentId }, "agent.session.interrupt.not_found");
|
|
481
483
|
throw new Error(`Agent ${agentId} not found`);
|
|
482
484
|
}
|
|
483
485
|
const hasInFlightRun = this.agentManager.hasInFlightRun(agentId);
|
|
484
486
|
if (!hasInFlightRun) {
|
|
485
|
-
this.sessionLogger.trace({
|
|
487
|
+
this.sessionLogger.trace({
|
|
488
|
+
agentId,
|
|
489
|
+
provider: snapshot.provider,
|
|
490
|
+
lifecycle: snapshot.lifecycle,
|
|
491
|
+
hasInFlightRun,
|
|
492
|
+
}, "agent.session.interrupt.skip_not_running");
|
|
486
493
|
return;
|
|
487
494
|
}
|
|
488
495
|
this.sessionLogger.debug({ agentId, lifecycle: snapshot.lifecycle, hasInFlightRun }, "interruptAgentIfRunning: interrupting");
|
|
@@ -507,14 +514,14 @@ export class Session {
|
|
|
507
514
|
agentId,
|
|
508
515
|
promptType: typeof prompt === "string" ? "string" : "structured",
|
|
509
516
|
hasRunOptions: Boolean(runOptions),
|
|
510
|
-
}, "
|
|
517
|
+
}, "agent.session.start_stream.request");
|
|
511
518
|
let iterator;
|
|
512
519
|
try {
|
|
513
520
|
const shouldReplace = this.agentManager.hasInFlightRun(agentId);
|
|
514
521
|
iterator = shouldReplace
|
|
515
522
|
? this.agentManager.replaceAgentRun(agentId, prompt, runOptions)
|
|
516
523
|
: this.agentManager.streamAgent(agentId, prompt, runOptions);
|
|
517
|
-
this.sessionLogger.trace({ agentId, shouldReplace }, "
|
|
524
|
+
this.sessionLogger.trace({ agentId, shouldReplace }, "agent.session.start_stream.iterator_returned");
|
|
518
525
|
}
|
|
519
526
|
catch (error) {
|
|
520
527
|
this.handleAgentRunError(agentId, error, "Failed to start agent run");
|
|
@@ -525,10 +532,10 @@ export class Session {
|
|
|
525
532
|
for await (const _ of iterator) {
|
|
526
533
|
// Events are forwarded via the session's AgentManager subscription.
|
|
527
534
|
}
|
|
528
|
-
this.sessionLogger.trace({ agentId }, "
|
|
535
|
+
this.sessionLogger.trace({ agentId }, "agent.session.iterator.drained");
|
|
529
536
|
}
|
|
530
537
|
catch (error) {
|
|
531
|
-
this.sessionLogger.trace({ agentId, err: error }, "
|
|
538
|
+
this.sessionLogger.trace({ agentId, err: error }, "agent.session.iterator.error");
|
|
532
539
|
this.handleAgentRunError(agentId, error, "Agent stream failed");
|
|
533
540
|
}
|
|
534
541
|
})();
|
|
@@ -562,7 +569,7 @@ export class Session {
|
|
|
562
569
|
});
|
|
563
570
|
this.agentTools = (await this.agentMcpClient.tools());
|
|
564
571
|
const agentToolCount = Object.keys(this.agentTools ?? {}).length;
|
|
565
|
-
this.sessionLogger.trace({ agentToolCount },
|
|
572
|
+
this.sessionLogger.trace({ agentToolCount }, "agent.session.mcp_init");
|
|
566
573
|
}
|
|
567
574
|
catch (error) {
|
|
568
575
|
this.sessionLogger.error({ err: error }, "Failed to initialize Agent MCP");
|
|
@@ -602,14 +609,17 @@ export class Session {
|
|
|
602
609
|
this.getSpeechReadiness = dictation?.getSpeechReadiness;
|
|
603
610
|
}
|
|
604
611
|
initializePerSessionManagers(params) {
|
|
605
|
-
const { tts, stt, dictation } = params;
|
|
612
|
+
const { tts, stt, sttLanguage, dictation } = params;
|
|
606
613
|
this.ttsManager = new TTSManager(this.sessionId, this.sessionLogger, tts);
|
|
607
|
-
this.sttManager = new STTManager(this.sessionId, this.sessionLogger, stt
|
|
614
|
+
this.sttManager = new STTManager(this.sessionId, this.sessionLogger, stt, {
|
|
615
|
+
language: sttLanguage,
|
|
616
|
+
});
|
|
608
617
|
this.dictationStreamManager = new DictationStreamManager({
|
|
609
618
|
logger: this.sessionLogger,
|
|
610
619
|
sessionId: this.sessionId,
|
|
611
620
|
emit: (msg) => this.handleDictationManagerMessage(msg),
|
|
612
621
|
stt: dictation?.stt ?? null,
|
|
622
|
+
language: dictation?.sttLanguage,
|
|
613
623
|
finalTimeoutMs: dictation?.finalTimeoutMs,
|
|
614
624
|
});
|
|
615
625
|
}
|
|
@@ -619,6 +629,13 @@ export class Session {
|
|
|
619
629
|
}
|
|
620
630
|
this.unsubscribeAgentEvents = this.agentManager.subscribe((event) => {
|
|
621
631
|
if (event.type === "agent_state") {
|
|
632
|
+
this.sessionLogger.trace({
|
|
633
|
+
agentId: event.agent.id,
|
|
634
|
+
provider: event.agent.provider,
|
|
635
|
+
providerSessionId: event.agent.persistence?.sessionId ?? undefined,
|
|
636
|
+
turnId: event.agent.activeForegroundTurnId ?? undefined,
|
|
637
|
+
lifecycle: event.agent.lifecycle,
|
|
638
|
+
}, "agent.session.forward_update");
|
|
622
639
|
void this.forwardAgentUpdate(event.agent);
|
|
623
640
|
return;
|
|
624
641
|
}
|
|
@@ -642,35 +659,24 @@ export class Session {
|
|
|
642
659
|
// Reduce bandwidth/CPU on mobile: only forward high-frequency agent stream events
|
|
643
660
|
// for the focused agent, with a short grace window while backgrounded.
|
|
644
661
|
// History catch-up is handled via pull-based `fetch_agent_timeline_request`.
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
if (!activity.focusedAgentId) {
|
|
648
|
-
return;
|
|
649
|
-
}
|
|
650
|
-
if (activity.focusedAgentId !== event.agentId) {
|
|
651
|
-
return;
|
|
652
|
-
}
|
|
653
|
-
if (!activity.appVisible) {
|
|
654
|
-
const hiddenForMs = Date.now() - activity.appVisibilityChangedAt.getTime();
|
|
655
|
-
if (hiddenForMs >= this.MOBILE_BACKGROUND_STREAM_GRACE_MS) {
|
|
656
|
-
return;
|
|
657
|
-
}
|
|
658
|
-
}
|
|
662
|
+
if (this.shouldSkipAgentStreamForward(event.agentId)) {
|
|
663
|
+
return;
|
|
659
664
|
}
|
|
660
665
|
const serializedEvent = serializeAgentStreamEvent(event.event);
|
|
661
666
|
if (!serializedEvent) {
|
|
662
667
|
return;
|
|
663
668
|
}
|
|
664
|
-
|
|
669
|
+
this.sessionLogger.trace({
|
|
665
670
|
agentId: event.agentId,
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
+
provider: event.event.provider,
|
|
672
|
+
turnId: getAgentStreamEventTurnId(event.event),
|
|
673
|
+
seq: event.seq,
|
|
674
|
+
epoch: event.epoch,
|
|
675
|
+
event: event.event,
|
|
676
|
+
}, "agent.session.forward_stream");
|
|
671
677
|
this.emit({
|
|
672
678
|
type: "agent_stream",
|
|
673
|
-
payload,
|
|
679
|
+
payload: this.buildAgentStreamPayload(event, serializedEvent),
|
|
674
680
|
});
|
|
675
681
|
if (event.event.type === "permission_requested") {
|
|
676
682
|
this.emit({
|
|
@@ -694,6 +700,29 @@ export class Session {
|
|
|
694
700
|
// Title updates may be applied asynchronously after agent creation.
|
|
695
701
|
}, { replayState: false });
|
|
696
702
|
}
|
|
703
|
+
shouldSkipAgentStreamForward(agentId) {
|
|
704
|
+
const activity = this.clientActivity;
|
|
705
|
+
if (activity?.deviceType !== "mobile") {
|
|
706
|
+
return false;
|
|
707
|
+
}
|
|
708
|
+
if (!activity.focusedAgentId || activity.focusedAgentId !== agentId) {
|
|
709
|
+
return true;
|
|
710
|
+
}
|
|
711
|
+
if (activity.appVisible) {
|
|
712
|
+
return false;
|
|
713
|
+
}
|
|
714
|
+
const hiddenForMs = Date.now() - activity.appVisibilityChangedAt.getTime();
|
|
715
|
+
return hiddenForMs >= this.MOBILE_BACKGROUND_STREAM_GRACE_MS;
|
|
716
|
+
}
|
|
717
|
+
buildAgentStreamPayload(event, serializedEvent) {
|
|
718
|
+
return {
|
|
719
|
+
agentId: event.agentId,
|
|
720
|
+
event: serializedEvent,
|
|
721
|
+
timestamp: event.timestamp ?? new Date().toISOString(),
|
|
722
|
+
...(typeof event.seq === "number" ? { seq: event.seq } : {}),
|
|
723
|
+
...(typeof event.epoch === "string" ? { epoch: event.epoch } : {}),
|
|
724
|
+
};
|
|
725
|
+
}
|
|
697
726
|
async buildAgentPayload(agent) {
|
|
698
727
|
const storedRecord = await this.agentStorage.get(agent.id);
|
|
699
728
|
const title = storedRecord?.title ?? storedRecord?.config?.title ?? null;
|
|
@@ -858,7 +887,7 @@ export class Session {
|
|
|
858
887
|
const checkout = buildWorkspaceCheckout(workspace, project);
|
|
859
888
|
return {
|
|
860
889
|
projectKey: project.projectId,
|
|
861
|
-
projectName: project
|
|
890
|
+
projectName: resolveProjectDisplayName(project),
|
|
862
891
|
checkout,
|
|
863
892
|
};
|
|
864
893
|
}
|
|
@@ -933,7 +962,10 @@ export class Session {
|
|
|
933
962
|
this.peakInflightRequests = this.inflightRequests;
|
|
934
963
|
}
|
|
935
964
|
try {
|
|
936
|
-
this.sessionLogger.trace({
|
|
965
|
+
this.sessionLogger.trace({
|
|
966
|
+
messageType: msg.type,
|
|
967
|
+
payloadBytes: JSON.stringify(msg).length,
|
|
968
|
+
}, "agent.session.inbound");
|
|
937
969
|
try {
|
|
938
970
|
await this.dispatchInboundMessage(msg);
|
|
939
971
|
}
|
|
@@ -1069,6 +1101,8 @@ export class Session {
|
|
|
1069
1101
|
return this.handleCloseItemsRequest(msg);
|
|
1070
1102
|
case "update_agent_request":
|
|
1071
1103
|
return this.handleUpdateAgentRequest(msg.agentId, msg.name, msg.labels, msg.requestId);
|
|
1104
|
+
case "project.rename.request":
|
|
1105
|
+
return this.handleProjectRenameRequest(msg.projectId, msg.customName, msg.requestId);
|
|
1072
1106
|
case "send_agent_message_request":
|
|
1073
1107
|
return this.handleSendAgentMessageRequest(msg);
|
|
1074
1108
|
case "wait_for_finish_request":
|
|
@@ -1247,6 +1281,8 @@ export class Session {
|
|
|
1247
1281
|
return this.handleCheckoutPrCreateRequest(msg);
|
|
1248
1282
|
case "checkout_pr_merge_request":
|
|
1249
1283
|
return this.handleCheckoutPrMergeRequest(msg);
|
|
1284
|
+
case "checkout.github.set_auto_merge.request":
|
|
1285
|
+
return this.handleCheckoutGithubSetAutoMergeRequest(msg);
|
|
1250
1286
|
case "checkout_pr_status_request":
|
|
1251
1287
|
return this.handleCheckoutPrStatusRequest(msg);
|
|
1252
1288
|
case "pull_request_timeline_request":
|
|
@@ -1641,6 +1677,75 @@ export class Session {
|
|
|
1641
1677
|
});
|
|
1642
1678
|
}
|
|
1643
1679
|
}
|
|
1680
|
+
async handleProjectRenameRequest(projectId, customName, requestId) {
|
|
1681
|
+
this.sessionLogger.info({ projectId, requestId, hasCustomName: typeof customName === "string" }, "session: project.rename.request");
|
|
1682
|
+
try {
|
|
1683
|
+
const existing = await this.projectRegistry.get(projectId);
|
|
1684
|
+
if (!existing) {
|
|
1685
|
+
this.emit({
|
|
1686
|
+
type: "project.rename.response",
|
|
1687
|
+
payload: {
|
|
1688
|
+
requestId,
|
|
1689
|
+
projectId,
|
|
1690
|
+
accepted: false,
|
|
1691
|
+
customName: null,
|
|
1692
|
+
error: "Project not found",
|
|
1693
|
+
},
|
|
1694
|
+
});
|
|
1695
|
+
return;
|
|
1696
|
+
}
|
|
1697
|
+
const trimmed = customName?.trim() ?? "";
|
|
1698
|
+
const nextCustomName = trimmed.length === 0 ? null : trimmed;
|
|
1699
|
+
await this.projectRegistry.upsert({
|
|
1700
|
+
...existing,
|
|
1701
|
+
customName: nextCustomName,
|
|
1702
|
+
updatedAt: new Date().toISOString(),
|
|
1703
|
+
});
|
|
1704
|
+
this.emit({
|
|
1705
|
+
type: "project.rename.response",
|
|
1706
|
+
payload: {
|
|
1707
|
+
requestId,
|
|
1708
|
+
projectId,
|
|
1709
|
+
accepted: true,
|
|
1710
|
+
customName: nextCustomName,
|
|
1711
|
+
error: null,
|
|
1712
|
+
},
|
|
1713
|
+
});
|
|
1714
|
+
// Re-emit descriptors for every workspace under this project so the new
|
|
1715
|
+
// resolved name lands in the UI immediately.
|
|
1716
|
+
const workspaces = await this.workspaceRegistry.list();
|
|
1717
|
+
const affectedWorkspaceIds = workspaces
|
|
1718
|
+
.filter((workspace) => workspace.projectId === projectId)
|
|
1719
|
+
.map((workspace) => workspace.workspaceId);
|
|
1720
|
+
if (affectedWorkspaceIds.length > 0) {
|
|
1721
|
+
await this.emitWorkspaceUpdatesForWorkspaceIds(affectedWorkspaceIds, {
|
|
1722
|
+
skipReconcile: true,
|
|
1723
|
+
});
|
|
1724
|
+
}
|
|
1725
|
+
}
|
|
1726
|
+
catch (error) {
|
|
1727
|
+
this.sessionLogger.error({ err: error, projectId, requestId }, "session: project.rename.request error");
|
|
1728
|
+
this.emit({
|
|
1729
|
+
type: "activity_log",
|
|
1730
|
+
payload: {
|
|
1731
|
+
id: uuidv4(),
|
|
1732
|
+
timestamp: new Date(),
|
|
1733
|
+
type: "error",
|
|
1734
|
+
content: `Failed to rename project: ${getErrorMessage(error)}`,
|
|
1735
|
+
},
|
|
1736
|
+
});
|
|
1737
|
+
this.emit({
|
|
1738
|
+
type: "project.rename.response",
|
|
1739
|
+
payload: {
|
|
1740
|
+
requestId,
|
|
1741
|
+
projectId,
|
|
1742
|
+
accepted: false,
|
|
1743
|
+
customName: null,
|
|
1744
|
+
error: getErrorMessageOr(error, "Failed to rename project"),
|
|
1745
|
+
},
|
|
1746
|
+
});
|
|
1747
|
+
}
|
|
1748
|
+
}
|
|
1644
1749
|
toVoiceFeatureUnavailableContext(state) {
|
|
1645
1750
|
return {
|
|
1646
1751
|
reasonCode: state.reasonCode,
|
|
@@ -1857,6 +1962,7 @@ export class Session {
|
|
|
1857
1962
|
logger: this.sessionLogger.child({ component: "voice-turn-controller" }),
|
|
1858
1963
|
turnDetection,
|
|
1859
1964
|
stt,
|
|
1965
|
+
sttLanguage: this.sttLanguage,
|
|
1860
1966
|
callbacks: {
|
|
1861
1967
|
onSpeechStarted: async () => {
|
|
1862
1968
|
this.sessionLogger.debug("Voice VAD speech_started");
|
|
@@ -2079,6 +2185,17 @@ export class Session {
|
|
|
2079
2185
|
const { handle, overrides, requestId } = msg;
|
|
2080
2186
|
if (!handle) {
|
|
2081
2187
|
this.sessionLogger.warn("Resume request missing persistence handle");
|
|
2188
|
+
if (requestId) {
|
|
2189
|
+
this.emit({
|
|
2190
|
+
type: "rpc_error",
|
|
2191
|
+
payload: {
|
|
2192
|
+
requestId,
|
|
2193
|
+
requestType: msg.type,
|
|
2194
|
+
error: "Unable to resume agent: missing persistence handle",
|
|
2195
|
+
code: "agent_resume_failed",
|
|
2196
|
+
},
|
|
2197
|
+
});
|
|
2198
|
+
}
|
|
2082
2199
|
this.emit({
|
|
2083
2200
|
type: "activity_log",
|
|
2084
2201
|
payload: {
|
|
@@ -2113,14 +2230,26 @@ export class Session {
|
|
|
2113
2230
|
}
|
|
2114
2231
|
}
|
|
2115
2232
|
catch (error) {
|
|
2233
|
+
const message = getErrorMessage(error);
|
|
2116
2234
|
this.sessionLogger.error({ err: error }, "Failed to resume agent");
|
|
2235
|
+
if (requestId) {
|
|
2236
|
+
this.emit({
|
|
2237
|
+
type: "rpc_error",
|
|
2238
|
+
payload: {
|
|
2239
|
+
requestId,
|
|
2240
|
+
requestType: msg.type,
|
|
2241
|
+
error: message,
|
|
2242
|
+
code: "agent_resume_failed",
|
|
2243
|
+
},
|
|
2244
|
+
});
|
|
2245
|
+
}
|
|
2117
2246
|
this.emit({
|
|
2118
2247
|
type: "activity_log",
|
|
2119
2248
|
payload: {
|
|
2120
2249
|
id: uuidv4(),
|
|
2121
2250
|
timestamp: new Date(),
|
|
2122
2251
|
type: "error",
|
|
2123
|
-
content: `Failed to resume agent: ${
|
|
2252
|
+
content: `Failed to resume agent: ${message}`,
|
|
2124
2253
|
},
|
|
2125
2254
|
});
|
|
2126
2255
|
}
|
|
@@ -2228,14 +2357,26 @@ export class Session {
|
|
|
2228
2357
|
}
|
|
2229
2358
|
}
|
|
2230
2359
|
catch (error) {
|
|
2360
|
+
const message = getErrorMessage(error);
|
|
2231
2361
|
this.sessionLogger.error({ err: error, agentId }, `Failed to refresh agent ${agentId}`);
|
|
2362
|
+
if (requestId) {
|
|
2363
|
+
this.emit({
|
|
2364
|
+
type: "rpc_error",
|
|
2365
|
+
payload: {
|
|
2366
|
+
requestId,
|
|
2367
|
+
requestType: msg.type,
|
|
2368
|
+
error: message,
|
|
2369
|
+
code: "agent_refresh_failed",
|
|
2370
|
+
},
|
|
2371
|
+
});
|
|
2372
|
+
}
|
|
2232
2373
|
this.emit({
|
|
2233
2374
|
type: "activity_log",
|
|
2234
2375
|
payload: {
|
|
2235
2376
|
id: uuidv4(),
|
|
2236
2377
|
timestamp: new Date(),
|
|
2237
2378
|
type: "error",
|
|
2238
|
-
content: `Failed to refresh agent: ${
|
|
2379
|
+
content: `Failed to refresh agent: ${message}`,
|
|
2239
2380
|
},
|
|
2240
2381
|
});
|
|
2241
2382
|
}
|
|
@@ -3791,15 +3932,17 @@ export class Session {
|
|
|
3791
3932
|
async handleCheckoutPrMergeRequest(msg) {
|
|
3792
3933
|
const { cwd, requestId } = msg;
|
|
3793
3934
|
try {
|
|
3794
|
-
const
|
|
3795
|
-
|
|
3796
|
-
|
|
3797
|
-
|
|
3798
|
-
}
|
|
3935
|
+
const pullRequest = await this.resolveCurrentPullRequest(cwd, "merge", {
|
|
3936
|
+
force: true,
|
|
3937
|
+
includeGitHub: true,
|
|
3938
|
+
reason: "merge-pr-validation",
|
|
3939
|
+
});
|
|
3940
|
+
this.assertCurrentPullRequestHasGithubMergeFacts(pullRequest);
|
|
3799
3941
|
await this.github.mergePullRequest({
|
|
3800
3942
|
cwd,
|
|
3801
|
-
prNumber,
|
|
3943
|
+
prNumber: pullRequest.number,
|
|
3802
3944
|
mergeMethod: msg.mergeMethod,
|
|
3945
|
+
status: pullRequest,
|
|
3803
3946
|
});
|
|
3804
3947
|
await this.notifyGitMutation(cwd, "merge-pr", { invalidateGithub: true });
|
|
3805
3948
|
this.emit({
|
|
@@ -3824,6 +3967,81 @@ export class Session {
|
|
|
3824
3967
|
});
|
|
3825
3968
|
}
|
|
3826
3969
|
}
|
|
3970
|
+
assertCurrentPullRequestHasGithubMergeFacts(pullRequest) {
|
|
3971
|
+
if (!pullRequest.github) {
|
|
3972
|
+
throw new Error("GitHub merge facts are unavailable for this pull request");
|
|
3973
|
+
}
|
|
3974
|
+
}
|
|
3975
|
+
async handleCheckoutGithubSetAutoMergeRequest(msg) {
|
|
3976
|
+
const { cwd, requestId } = msg;
|
|
3977
|
+
try {
|
|
3978
|
+
const pullRequest = await this.resolveCurrentPullRequest(cwd, "auto-merge", {
|
|
3979
|
+
force: true,
|
|
3980
|
+
includeGitHub: true,
|
|
3981
|
+
reason: "auto-merge-validation",
|
|
3982
|
+
});
|
|
3983
|
+
if (msg.enabled) {
|
|
3984
|
+
const mergeMethod = msg.mergeMethod;
|
|
3985
|
+
if (!mergeMethod) {
|
|
3986
|
+
throw new Error("mergeMethod is required when enabling auto-merge");
|
|
3987
|
+
}
|
|
3988
|
+
assertPullRequestAutoMergeEnableReady({
|
|
3989
|
+
mergeMethod,
|
|
3990
|
+
status: pullRequest,
|
|
3991
|
+
});
|
|
3992
|
+
await this.github.enablePullRequestAutoMerge({
|
|
3993
|
+
cwd,
|
|
3994
|
+
prNumber: pullRequest.number,
|
|
3995
|
+
mergeMethod,
|
|
3996
|
+
status: pullRequest,
|
|
3997
|
+
});
|
|
3998
|
+
}
|
|
3999
|
+
else {
|
|
4000
|
+
if (msg.mergeMethod) {
|
|
4001
|
+
throw new Error("mergeMethod is not allowed when disabling auto-merge");
|
|
4002
|
+
}
|
|
4003
|
+
assertPullRequestAutoMergeDisableReady({ status: pullRequest });
|
|
4004
|
+
await this.github.disablePullRequestAutoMerge({
|
|
4005
|
+
cwd,
|
|
4006
|
+
prNumber: pullRequest.number,
|
|
4007
|
+
status: pullRequest,
|
|
4008
|
+
});
|
|
4009
|
+
}
|
|
4010
|
+
await this.notifyGitMutation(cwd, msg.enabled ? "enable-pr-auto-merge" : "disable-pr-auto-merge", {
|
|
4011
|
+
invalidateGithub: true,
|
|
4012
|
+
});
|
|
4013
|
+
this.emit({
|
|
4014
|
+
type: "checkout.github.set_auto_merge.response",
|
|
4015
|
+
payload: {
|
|
4016
|
+
cwd,
|
|
4017
|
+
enabled: msg.enabled,
|
|
4018
|
+
success: true,
|
|
4019
|
+
error: null,
|
|
4020
|
+
requestId,
|
|
4021
|
+
},
|
|
4022
|
+
});
|
|
4023
|
+
}
|
|
4024
|
+
catch (error) {
|
|
4025
|
+
this.emit({
|
|
4026
|
+
type: "checkout.github.set_auto_merge.response",
|
|
4027
|
+
payload: {
|
|
4028
|
+
cwd,
|
|
4029
|
+
enabled: msg.enabled,
|
|
4030
|
+
success: false,
|
|
4031
|
+
error: toCheckoutError(error),
|
|
4032
|
+
requestId,
|
|
4033
|
+
},
|
|
4034
|
+
});
|
|
4035
|
+
}
|
|
4036
|
+
}
|
|
4037
|
+
async resolveCurrentPullRequest(cwd, operation, options) {
|
|
4038
|
+
const snapshot = await this.workspaceGitService.getSnapshot(cwd, options);
|
|
4039
|
+
const pullRequest = snapshot.github.pullRequest;
|
|
4040
|
+
if (!pullRequest || typeof pullRequest.number !== "number") {
|
|
4041
|
+
throw new Error(`Unable to determine GitHub pull request number for ${operation}`);
|
|
4042
|
+
}
|
|
4043
|
+
return { ...pullRequest, number: pullRequest.number };
|
|
4044
|
+
}
|
|
3827
4045
|
async handleCheckoutPrStatusRequest(msg) {
|
|
3828
4046
|
const { cwd, requestId } = msg;
|
|
3829
4047
|
try {
|
|
@@ -4361,7 +4579,10 @@ export class Session {
|
|
|
4361
4579
|
return {
|
|
4362
4580
|
id: workspace.workspaceId,
|
|
4363
4581
|
projectId: workspace.projectId,
|
|
4364
|
-
projectDisplayName: resolvedProjectRecord
|
|
4582
|
+
projectDisplayName: resolvedProjectRecord
|
|
4583
|
+
? resolveProjectDisplayName(resolvedProjectRecord)
|
|
4584
|
+
: workspace.projectId,
|
|
4585
|
+
projectCustomName: resolvedProjectRecord?.customName ?? null,
|
|
4365
4586
|
projectRootPath: resolvedProjectRecord?.rootPath ?? workspace.cwd,
|
|
4366
4587
|
workspaceDirectory: workspace.cwd,
|
|
4367
4588
|
projectKind: (resolvedProjectRecord?.kind ?? "directory") === "git" ? "git" : "non_git",
|
|
@@ -4432,7 +4653,10 @@ export class Session {
|
|
|
4432
4653
|
return {
|
|
4433
4654
|
id: result.workspace.workspaceId,
|
|
4434
4655
|
projectId: result.workspace.projectId,
|
|
4435
|
-
projectDisplayName: projectRecord
|
|
4656
|
+
projectDisplayName: projectRecord
|
|
4657
|
+
? resolveProjectDisplayName(projectRecord)
|
|
4658
|
+
: result.workspace.projectId,
|
|
4659
|
+
projectCustomName: projectRecord?.customName ?? null,
|
|
4436
4660
|
projectRootPath: projectRecord?.rootPath ?? result.repoRoot,
|
|
4437
4661
|
workspaceDirectory: result.workspace.cwd,
|
|
4438
4662
|
projectKind: "git",
|
|
@@ -5459,7 +5683,11 @@ export class Session {
|
|
|
5459
5683
|
try {
|
|
5460
5684
|
const agentId = resolved.agentId;
|
|
5461
5685
|
const prompt = this.buildAgentPrompt(msg.text, msg.images, msg.attachments);
|
|
5462
|
-
this.sessionLogger.trace({
|
|
5686
|
+
this.sessionLogger.trace({
|
|
5687
|
+
agentId,
|
|
5688
|
+
messageId: msg.messageId,
|
|
5689
|
+
textPrefix: msg.text.slice(0, 80),
|
|
5690
|
+
}, "agent.session.send_agent_message");
|
|
5463
5691
|
let dispatchResult;
|
|
5464
5692
|
try {
|
|
5465
5693
|
dispatchResult = await sendPromptToAgent({
|
|
@@ -6082,7 +6310,10 @@ export class Session {
|
|
|
6082
6310
|
* Emit a message to the client
|
|
6083
6311
|
*/
|
|
6084
6312
|
emit(msg) {
|
|
6085
|
-
this.sessionLogger.trace({
|
|
6313
|
+
this.sessionLogger.trace({
|
|
6314
|
+
messageType: msg.type,
|
|
6315
|
+
payloadBytes: JSON.stringify(msg).length,
|
|
6316
|
+
}, "agent.session.outbound");
|
|
6086
6317
|
if (msg.type === "audio_output" &&
|
|
6087
6318
|
(process.env.TTS_DEBUG_AUDIO_DIR || isPaseoDictationDebugEnabled()) &&
|
|
6088
6319
|
msg.payload.groupId &&
|
|
@@ -6137,7 +6368,7 @@ export class Session {
|
|
|
6137
6368
|
* Clean up session resources
|
|
6138
6369
|
*/
|
|
6139
6370
|
async cleanup() {
|
|
6140
|
-
this.sessionLogger.trace(
|
|
6371
|
+
this.sessionLogger.trace({}, "agent.session.lifecycle.cleanup");
|
|
6141
6372
|
if (this.unsubscribeAgentEvents) {
|
|
6142
6373
|
this.unsubscribeAgentEvents();
|
|
6143
6374
|
this.unsubscribeAgentEvents = null;
|