@getpaseo/server 0.1.69 → 0.1.70
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/server/client/daemon-client-runtime-metrics.js.map +1 -1
- package/dist/server/client/daemon-client-websocket-transport.js.map +1 -1
- package/dist/server/client/daemon-client.d.ts +33 -0
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +37 -1
- package/dist/server/client/daemon-client.js.map +1 -1
- package/dist/server/server/agent/agent-manager.d.ts +8 -0
- package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
- package/dist/server/server/agent/agent-manager.js +54 -5
- package/dist/server/server/agent/agent-manager.js.map +1 -1
- package/dist/server/server/agent/agent-response-loop.js.map +1 -1
- package/dist/server/server/agent/agent-sdk-types.d.ts +15 -2
- package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
- package/dist/server/server/agent/agent-stream-coalescer.d.ts +1 -1
- package/dist/server/server/agent/agent-stream-coalescer.d.ts.map +1 -1
- package/dist/server/server/agent/agent-timeline-store.js +1 -1
- package/dist/server/server/agent/agent-timeline-store.js.map +1 -1
- package/dist/server/server/agent/create-agent-mode.d.ts +14 -0
- package/dist/server/server/agent/create-agent-mode.d.ts.map +1 -0
- package/dist/server/server/agent/create-agent-mode.js +23 -0
- package/dist/server/server/agent/create-agent-mode.js.map +1 -0
- package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-server.js +36 -12
- package/dist/server/server/agent/mcp-server.js.map +1 -1
- package/dist/server/server/agent/mcp-shared.d.ts +6 -2
- package/dist/server/server/agent/mcp-shared.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-shared.js +12 -5
- package/dist/server/server/agent/mcp-shared.js.map +1 -1
- package/dist/server/server/agent/pcm16-resampler.js.map +1 -1
- package/dist/server/server/agent/prompt-attachments.d.ts.map +1 -1
- package/dist/server/server/agent/prompt-attachments.js +2 -0
- package/dist/server/server/agent/prompt-attachments.js.map +1 -1
- package/dist/server/server/agent/provider-launch-config.js.map +1 -1
- package/dist/server/server/agent/provider-manifest.d.ts +4 -1
- package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
- package/dist/server/server/agent/provider-manifest.js +11 -0
- 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 +8 -3
- package/dist/server/server/agent/provider-registry.js.map +1 -1
- package/dist/server/server/agent/provider-snapshot-manager.js.map +1 -1
- package/dist/server/server/agent/providers/acp-agent.d.ts +2 -1
- package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/acp-agent.js +35 -17
- package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
- package/dist/server/server/agent/providers/{claude-agent.d.ts → claude/agent.d.ts} +9 -6
- package/dist/server/server/agent/providers/claude/agent.d.ts.map +1 -0
- package/dist/server/server/agent/providers/{claude-agent.js → claude/agent.js} +170 -152
- package/dist/server/server/agent/providers/claude/agent.js.map +1 -0
- package/dist/server/server/agent/providers/claude/{claude-models.d.ts → models.d.ts} +1 -1
- package/dist/server/server/agent/providers/claude/models.d.ts.map +1 -0
- package/dist/server/server/agent/providers/claude/{claude-models.js → models.js} +8 -1
- package/dist/server/server/agent/providers/claude/models.js.map +1 -0
- package/dist/server/server/agent/providers/claude/query.d.ts +14 -0
- package/dist/server/server/agent/providers/claude/query.d.ts.map +1 -0
- package/dist/server/server/agent/providers/claude/query.js +84 -0
- package/dist/server/server/agent/providers/claude/query.js.map +1 -0
- package/dist/server/server/agent/providers/claude/tool-call-mapper.js.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +11 -2
- 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 +408 -91
- package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
- package/dist/server/server/agent/providers/diagnostic-utils.d.ts.map +1 -1
- package/dist/server/server/agent/providers/diagnostic-utils.js +4 -0
- package/dist/server/server/agent/providers/diagnostic-utils.js.map +1 -1
- package/dist/server/server/agent/providers/generic-acp-agent.d.ts +1 -1
- package/dist/server/server/agent/providers/generic-acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/generic-acp-agent.js +0 -3
- package/dist/server/server/agent/providers/generic-acp-agent.js.map +1 -1
- package/dist/server/server/agent/providers/mock-load-test-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/mock-load-test-agent.js +6 -2
- package/dist/server/server/agent/providers/mock-load-test-agent.js.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.js +32 -27
- package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
- package/dist/server/server/agent/providers/provider-image-output.d.ts +20 -0
- package/dist/server/server/agent/providers/provider-image-output.d.ts.map +1 -0
- package/dist/server/server/agent/providers/provider-image-output.js +51 -0
- package/dist/server/server/agent/providers/provider-image-output.js.map +1 -0
- package/dist/server/server/agent/providers/provider-runner.d.ts +3 -3
- package/dist/server/server/agent/providers/provider-runner.d.ts.map +1 -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 +7 -7
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
- package/dist/server/server/agent/providers/tool-call-detail-primitives.js +12 -18
- package/dist/server/server/agent/providers/tool-call-detail-primitives.js.map +1 -1
- package/dist/server/server/agent/stt-manager.d.ts +1 -0
- package/dist/server/server/agent/stt-manager.d.ts.map +1 -1
- package/dist/server/server/agent/stt-manager.js +3 -0
- package/dist/server/server/agent/stt-manager.js.map +1 -1
- package/dist/server/server/agent/tool-name-normalization.js.map +1 -1
- package/dist/server/server/agent/tts-manager.js.map +1 -1
- package/dist/server/server/bootstrap.d.ts +1 -0
- package/dist/server/server/bootstrap.d.ts.map +1 -1
- package/dist/server/server/bootstrap.js +3 -1
- package/dist/server/server/bootstrap.js.map +1 -1
- package/dist/server/server/config.d.ts +1 -0
- package/dist/server/server/config.d.ts.map +1 -1
- package/dist/server/server/config.js +7 -1
- package/dist/server/server/config.js.map +1 -1
- package/dist/server/server/connection-offer.d.ts +1 -0
- package/dist/server/server/connection-offer.d.ts.map +1 -1
- package/dist/server/server/daemon-config-store.d.ts.map +1 -1
- package/dist/server/server/daemon-config-store.js +2 -6
- package/dist/server/server/daemon-config-store.js.map +1 -1
- package/dist/server/server/daemon-keypair.js.map +1 -1
- package/dist/server/server/daemon-worker.js +3 -0
- package/dist/server/server/daemon-worker.js.map +1 -1
- package/dist/server/server/editor-targets.js.map +1 -1
- package/dist/server/server/json-utils.js.map +1 -1
- package/dist/server/server/logger.js.map +1 -1
- package/dist/server/server/loop/rpc-schemas.d.ts +68 -0
- package/dist/server/server/loop/rpc-schemas.d.ts.map +1 -1
- package/dist/server/server/loop/rpc-schemas.js +4 -0
- package/dist/server/server/loop/rpc-schemas.js.map +1 -1
- package/dist/server/server/loop-service.d.ts +8 -0
- package/dist/server/server/loop-service.d.ts.map +1 -1
- package/dist/server/server/loop-service.js +11 -2
- package/dist/server/server/loop-service.js.map +1 -1
- package/dist/server/server/package-version.d.ts +12 -0
- package/dist/server/server/package-version.d.ts.map +1 -1
- package/dist/server/server/package-version.js +13 -1
- package/dist/server/server/package-version.js.map +1 -1
- package/dist/server/server/pairing-offer.d.ts +1 -0
- package/dist/server/server/pairing-offer.d.ts.map +1 -1
- package/dist/server/server/pairing-offer.js +2 -1
- package/dist/server/server/pairing-offer.js.map +1 -1
- package/dist/server/server/pairing-qr.js +1 -1
- package/dist/server/server/pairing-qr.js.map +1 -1
- package/dist/server/server/paseo-env.d.ts +7 -3
- package/dist/server/server/paseo-env.d.ts.map +1 -1
- package/dist/server/server/paseo-env.js +16 -33
- package/dist/server/server/paseo-env.js.map +1 -1
- package/dist/server/server/persisted-config.d.ts +9 -0
- package/dist/server/server/persisted-config.d.ts.map +1 -1
- package/dist/server/server/persisted-config.js +1 -0
- package/dist/server/server/persisted-config.js.map +1 -1
- package/dist/server/server/persistence-hooks.js.map +1 -1
- package/dist/server/server/pid-lock.d.ts +21 -4
- package/dist/server/server/pid-lock.d.ts.map +1 -1
- package/dist/server/server/pid-lock.js +30 -8
- package/dist/server/server/pid-lock.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 +8 -5
- package/dist/server/server/relay-transport.js.map +1 -1
- package/dist/server/server/schedule/rpc-schemas.d.ts +1136 -0
- package/dist/server/server/schedule/rpc-schemas.d.ts.map +1 -1
- package/dist/server/server/schedule/rpc-schemas.js +39 -0
- package/dist/server/server/schedule/rpc-schemas.js.map +1 -1
- package/dist/server/server/schedule/service.d.ts +3 -1
- package/dist/server/server/schedule/service.d.ts.map +1 -1
- package/dist/server/server/schedule/service.js +92 -5
- package/dist/server/server/schedule/service.js.map +1 -1
- package/dist/server/server/schedule/types.d.ts +16 -0
- package/dist/server/server/schedule/types.d.ts.map +1 -1
- package/dist/server/server/script-health-monitor.js.map +1 -1
- package/dist/server/server/session.d.ts +3 -4
- package/dist/server/server/session.d.ts.map +1 -1
- package/dist/server/server/session.js +160 -120
- package/dist/server/server/session.js.map +1 -1
- package/dist/server/server/speech/audio.js.map +1 -1
- package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js +52 -52
- package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +9 -3
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.js +12 -10
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js +2 -2
- package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js.map +1 -1
- package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js.map +1 -1
- package/dist/server/server/voice/voice-turn-controller.d.ts +16 -13
- package/dist/server/server/voice/voice-turn-controller.d.ts.map +1 -1
- package/dist/server/server/voice/voice-turn-controller.js +303 -71
- package/dist/server/server/voice/voice-turn-controller.js.map +1 -1
- package/dist/server/server/voice-config.js +1 -1
- package/dist/server/server/voice-config.js.map +1 -1
- package/dist/server/server/websocket-server.js.map +1 -1
- package/dist/server/server/workspace-directory.d.ts.map +1 -1
- package/dist/server/server/workspace-directory.js +4 -2
- package/dist/server/server/workspace-directory.js.map +1 -1
- package/dist/server/server/workspace-git-metadata.d.ts.map +1 -1
- package/dist/server/server/workspace-git-metadata.js +12 -5
- package/dist/server/server/workspace-git-metadata.js.map +1 -1
- package/dist/server/server/workspace-git-service.d.ts +2 -0
- package/dist/server/server/workspace-git-service.d.ts.map +1 -1
- package/dist/server/server/workspace-git-service.js +49 -1
- package/dist/server/server/workspace-git-service.js.map +1 -1
- package/dist/server/server/workspace-registry-model.d.ts.map +1 -1
- package/dist/server/server/workspace-registry-model.js +10 -3
- package/dist/server/server/workspace-registry-model.js.map +1 -1
- package/dist/server/server/worktree-session.js +1 -1
- package/dist/server/server/worktree-session.js.map +1 -1
- package/dist/server/services/github-service.d.ts.map +1 -1
- package/dist/server/services/github-service.js +9 -2
- package/dist/server/services/github-service.js.map +1 -1
- package/dist/server/shared/connection-offer.d.ts +10 -0
- package/dist/server/shared/connection-offer.d.ts.map +1 -1
- package/dist/server/shared/connection-offer.js +1 -0
- package/dist/server/shared/connection-offer.js.map +1 -1
- package/dist/server/shared/daemon-endpoints.d.ts +4 -0
- package/dist/server/shared/daemon-endpoints.d.ts.map +1 -1
- package/dist/server/shared/daemon-endpoints.js +6 -1
- package/dist/server/shared/daemon-endpoints.js.map +1 -1
- package/dist/server/shared/error-utils.d.ts +11 -0
- package/dist/server/shared/error-utils.d.ts.map +1 -0
- package/dist/server/shared/error-utils.js +27 -0
- package/dist/server/shared/error-utils.js.map +1 -0
- package/dist/server/shared/messages.d.ts +6475 -2265
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +5 -1
- package/dist/server/shared/messages.js.map +1 -1
- package/dist/server/shared/tool-call-display.d.ts.map +1 -1
- package/dist/server/shared/tool-call-display.js +2 -0
- package/dist/server/shared/tool-call-display.js.map +1 -1
- package/dist/server/terminal/terminal-manager.d.ts +2 -1
- package/dist/server/terminal/terminal-manager.d.ts.map +1 -1
- package/dist/server/terminal/terminal-manager.js +2 -1
- package/dist/server/terminal/terminal-manager.js.map +1 -1
- package/dist/server/terminal/terminal-output-coalescer.js.map +1 -1
- package/dist/server/terminal/terminal-session-controller.d.ts.map +1 -1
- package/dist/server/terminal/terminal-session-controller.js +2 -0
- package/dist/server/terminal/terminal-session-controller.js.map +1 -1
- package/dist/server/terminal/terminal.d.ts +1 -1
- package/dist/server/terminal/terminal.d.ts.map +1 -1
- package/dist/server/terminal/terminal.js +53 -8
- package/dist/server/terminal/terminal.js.map +1 -1
- package/dist/server/terminal/worker-terminal-manager.js.map +1 -1
- package/dist/server/utils/checkout-git.d.ts.map +1 -1
- package/dist/server/utils/checkout-git.js +67 -11
- package/dist/server/utils/checkout-git.js.map +1 -1
- package/dist/server/utils/directory-suggestions.js.map +1 -1
- package/dist/server/utils/executable.d.ts +2 -1
- package/dist/server/utils/executable.d.ts.map +1 -1
- package/dist/server/utils/executable.js +50 -51
- package/dist/server/utils/executable.js.map +1 -1
- package/dist/server/utils/paseo-config-file.d.ts +1 -1
- package/dist/server/utils/paseo-config-file.d.ts.map +1 -1
- package/dist/server/utils/spawn.d.ts +2 -0
- package/dist/server/utils/spawn.d.ts.map +1 -1
- package/dist/server/utils/spawn.js +2 -1
- package/dist/server/utils/spawn.js.map +1 -1
- package/dist/server/utils/tree-kill.d.ts +18 -0
- package/dist/server/utils/tree-kill.d.ts.map +1 -0
- package/dist/server/utils/{process-tree.js → tree-kill.js} +14 -33
- package/dist/server/utils/tree-kill.js.map +1 -0
- package/dist/server/utils/worktree.js.map +1 -1
- package/dist/src/server/agent/provider-launch-config.js.map +1 -1
- package/dist/src/server/agent/provider-manifest.js +11 -0
- package/dist/src/server/agent/provider-manifest.js.map +1 -1
- package/dist/src/server/loop/rpc-schemas.js +4 -0
- package/dist/src/server/loop/rpc-schemas.js.map +1 -1
- package/dist/src/server/paseo-env.js +16 -33
- package/dist/src/server/paseo-env.js.map +1 -1
- package/dist/src/server/persisted-config.js +1 -0
- package/dist/src/server/persisted-config.js.map +1 -1
- package/dist/src/server/pid-lock.js +30 -8
- package/dist/src/server/pid-lock.js.map +1 -1
- package/dist/src/server/schedule/rpc-schemas.js +39 -0
- package/dist/src/server/schedule/rpc-schemas.js.map +1 -1
- package/dist/src/shared/messages.js +5 -1
- package/dist/src/shared/messages.js.map +1 -1
- package/dist/src/utils/executable.js +50 -51
- package/dist/src/utils/executable.js.map +1 -1
- package/dist/src/utils/spawn.js +2 -1
- package/dist/src/utils/spawn.js.map +1 -1
- package/package.json +5 -4
- package/dist/server/server/agent/providers/claude/claude-models.d.ts.map +0 -1
- package/dist/server/server/agent/providers/claude/claude-models.js.map +0 -1
- package/dist/server/server/agent/providers/claude-agent.d.ts.map +0 -1
- package/dist/server/server/agent/providers/claude-agent.js.map +0 -1
- package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.d.ts +0 -16
- package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.d.ts.map +0 -1
- package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.js +0 -35
- package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.js.map +0 -1
- package/dist/server/utils/process-tree.d.ts +0 -25
- package/dist/server/utils/process-tree.d.ts.map +0 -1
- package/dist/server/utils/process-tree.js.map +0 -1
|
@@ -28,6 +28,7 @@ import { buildWorkspaceScriptPayloads, readPaseoConfigForProjection, } from "./s
|
|
|
28
28
|
import { deriveProjectSlug } from "./workspace-git-metadata.js";
|
|
29
29
|
import { spawnWorkspaceScript } from "./worktree-bootstrap.js";
|
|
30
30
|
import { applyMutableProviderConfigToOverrides } from "./daemon-config-store.js";
|
|
31
|
+
import { getErrorMessage, getErrorMessageOr } from "../shared/error-utils.js";
|
|
31
32
|
import { buildProviderRegistry } from "./agent/provider-registry.js";
|
|
32
33
|
import { resolveSnapshotCwd } from "./agent/provider-snapshot-manager.js";
|
|
33
34
|
import { scheduleAgentMetadataGeneration } from "./agent/agent-metadata-generator.js";
|
|
@@ -241,7 +242,6 @@ const PCM_BYTES_PER_MS = (PCM_SAMPLE_RATE * PCM_CHANNELS * (PCM_BITS_PER_SAMPLE
|
|
|
241
242
|
const MIN_STREAMING_SEGMENT_DURATION_MS = 1000;
|
|
242
243
|
const MIN_STREAMING_SEGMENT_BYTES = Math.round(PCM_BYTES_PER_MS * MIN_STREAMING_SEGMENT_DURATION_MS);
|
|
243
244
|
const AgentIdSchema = z.string().uuid();
|
|
244
|
-
const VOICE_INTERRUPT_CONFIRMATION_MS = 500;
|
|
245
245
|
const AVAILABLE_EDITOR_TARGETS_CACHE_TTL_MS = 60000;
|
|
246
246
|
const AVAILABLE_EDITOR_TARGETS_CACHE_KEY = "available";
|
|
247
247
|
class VoiceFeatureUnavailableError extends Error {
|
|
@@ -304,7 +304,13 @@ function parseClientCapabilities(capabilities) {
|
|
|
304
304
|
return new Set();
|
|
305
305
|
}
|
|
306
306
|
const known = new Set(Object.values(CLIENT_CAPS));
|
|
307
|
-
|
|
307
|
+
const result = [];
|
|
308
|
+
for (const [key, value] of Object.entries(capabilities)) {
|
|
309
|
+
if (value === true && known.has(key)) {
|
|
310
|
+
result.push(key);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return new Set(result);
|
|
308
314
|
}
|
|
309
315
|
/**
|
|
310
316
|
* Session represents a single connected client session.
|
|
@@ -317,8 +323,6 @@ export class Session {
|
|
|
317
323
|
// Voice mode state
|
|
318
324
|
this.isVoiceMode = false;
|
|
319
325
|
this.speechInProgress = false;
|
|
320
|
-
this.pendingVoiceSpeechStartAt = null;
|
|
321
|
-
this.pendingVoiceSpeechTimer = null;
|
|
322
326
|
this.voiceTurnController = null;
|
|
323
327
|
this.voiceInputChunkCount = 0;
|
|
324
328
|
this.voiceInputBytes = 0;
|
|
@@ -991,7 +995,7 @@ export class Session {
|
|
|
991
995
|
catch (error) {
|
|
992
996
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
993
997
|
this.sessionLogger.error({ err }, "Error handling message");
|
|
994
|
-
const requestId = msg.requestId;
|
|
998
|
+
const requestId = "requestId" in msg && typeof msg.requestId === "string" ? msg.requestId : undefined;
|
|
995
999
|
if (typeof requestId === "string") {
|
|
996
1000
|
try {
|
|
997
1001
|
this.emit({
|
|
@@ -1375,6 +1379,22 @@ export class Session {
|
|
|
1375
1379
|
return this.handleChatReadRequest(msg);
|
|
1376
1380
|
case "chat/wait":
|
|
1377
1381
|
return this.handleChatWaitRequest(msg);
|
|
1382
|
+
case "loop/run":
|
|
1383
|
+
return this.handleLoopRunRequest(msg);
|
|
1384
|
+
case "loop/list":
|
|
1385
|
+
return this.handleLoopListRequest(msg);
|
|
1386
|
+
case "loop/inspect":
|
|
1387
|
+
return this.handleLoopInspectRequest(msg);
|
|
1388
|
+
case "loop/logs":
|
|
1389
|
+
return this.handleLoopLogsRequest(msg);
|
|
1390
|
+
case "loop/stop":
|
|
1391
|
+
return this.handleLoopStopRequest(msg);
|
|
1392
|
+
default:
|
|
1393
|
+
return this.dispatchScheduleMessage(msg);
|
|
1394
|
+
}
|
|
1395
|
+
}
|
|
1396
|
+
dispatchScheduleMessage(msg) {
|
|
1397
|
+
switch (msg.type) {
|
|
1378
1398
|
case "schedule/create":
|
|
1379
1399
|
return this.handleScheduleCreateRequest(msg);
|
|
1380
1400
|
case "schedule/list":
|
|
@@ -1389,16 +1409,10 @@ export class Session {
|
|
|
1389
1409
|
return this.handleScheduleResumeRequest(msg);
|
|
1390
1410
|
case "schedule/delete":
|
|
1391
1411
|
return this.handleScheduleDeleteRequest(msg);
|
|
1392
|
-
case "
|
|
1393
|
-
return this.
|
|
1394
|
-
case "
|
|
1395
|
-
return this.
|
|
1396
|
-
case "loop/inspect":
|
|
1397
|
-
return this.handleLoopInspectRequest(msg);
|
|
1398
|
-
case "loop/logs":
|
|
1399
|
-
return this.handleLoopLogsRequest(msg);
|
|
1400
|
-
case "loop/stop":
|
|
1401
|
-
return this.handleLoopStopRequest(msg);
|
|
1412
|
+
case "schedule/run-once":
|
|
1413
|
+
return this.handleScheduleRunOnceRequest(msg);
|
|
1414
|
+
case "schedule/update":
|
|
1415
|
+
return this.handleScheduleUpdateRequest(msg);
|
|
1402
1416
|
default:
|
|
1403
1417
|
return undefined;
|
|
1404
1418
|
}
|
|
@@ -1663,7 +1677,7 @@ export class Session {
|
|
|
1663
1677
|
id: uuidv4(),
|
|
1664
1678
|
timestamp: new Date(),
|
|
1665
1679
|
type: "error",
|
|
1666
|
-
content: `Failed to update agent: ${error
|
|
1680
|
+
content: `Failed to update agent: ${getErrorMessage(error)}`,
|
|
1667
1681
|
},
|
|
1668
1682
|
});
|
|
1669
1683
|
this.emit({
|
|
@@ -1672,9 +1686,7 @@ export class Session {
|
|
|
1672
1686
|
requestId,
|
|
1673
1687
|
agentId,
|
|
1674
1688
|
accepted: false,
|
|
1675
|
-
error: error
|
|
1676
|
-
? String(error.message)
|
|
1677
|
-
: "Failed to update agent",
|
|
1689
|
+
error: getErrorMessageOr(error, "Failed to update agent"),
|
|
1678
1690
|
},
|
|
1679
1691
|
});
|
|
1680
1692
|
}
|
|
@@ -1886,28 +1898,62 @@ export class Session {
|
|
|
1886
1898
|
if (!turnDetection) {
|
|
1887
1899
|
throw new Error("Voice turn detection is not configured");
|
|
1888
1900
|
}
|
|
1901
|
+
const stt = this.sttManager.getProvider();
|
|
1902
|
+
if (!stt) {
|
|
1903
|
+
throw new Error("Voice speech-to-text is not configured");
|
|
1904
|
+
}
|
|
1889
1905
|
this.sessionLogger.info({ providerId: turnDetection.id }, "startVoiceTurnController creating controller");
|
|
1890
1906
|
const controller = createVoiceTurnController({
|
|
1891
1907
|
logger: this.sessionLogger.child({ component: "voice-turn-controller" }),
|
|
1892
1908
|
turnDetection,
|
|
1893
|
-
|
|
1894
|
-
submitUtterance: async ({ pcm16, format, sampleRate, startedAt, endedAt }) => {
|
|
1895
|
-
this.sessionLogger.debug({
|
|
1896
|
-
audioBytes: pcm16.length,
|
|
1897
|
-
sampleRate,
|
|
1898
|
-
startedAt,
|
|
1899
|
-
endedAt,
|
|
1900
|
-
durationMs: Math.max(0, endedAt - startedAt),
|
|
1901
|
-
}, "Submitting detected voice utterance");
|
|
1902
|
-
await this.processCompletedAudio(pcm16, format);
|
|
1903
|
-
},
|
|
1904
|
-
},
|
|
1909
|
+
stt,
|
|
1905
1910
|
callbacks: {
|
|
1906
1911
|
onSpeechStarted: async () => {
|
|
1907
|
-
this.
|
|
1912
|
+
this.sessionLogger.debug("Voice VAD speech_started");
|
|
1913
|
+
},
|
|
1914
|
+
onPartialTranscript: async ({ segmentId, transcript }) => {
|
|
1915
|
+
this.sessionLogger.info({ segmentId, transcriptLength: transcript.trim().length }, "voice_input_state emitting isSpeaking=true");
|
|
1916
|
+
this.emit({
|
|
1917
|
+
type: "voice_input_state",
|
|
1918
|
+
payload: {
|
|
1919
|
+
isSpeaking: true,
|
|
1920
|
+
},
|
|
1921
|
+
});
|
|
1922
|
+
await this.handleVoiceSpeechStart();
|
|
1908
1923
|
},
|
|
1909
1924
|
onSpeechStopped: async () => {
|
|
1910
1925
|
this.handleVoiceSpeechStopped();
|
|
1926
|
+
this.setPhase("transcribing");
|
|
1927
|
+
this.emit({
|
|
1928
|
+
type: "activity_log",
|
|
1929
|
+
payload: {
|
|
1930
|
+
id: uuidv4(),
|
|
1931
|
+
timestamp: new Date(),
|
|
1932
|
+
type: "system",
|
|
1933
|
+
content: "Transcribing audio...",
|
|
1934
|
+
},
|
|
1935
|
+
});
|
|
1936
|
+
},
|
|
1937
|
+
onFinalTranscript: async ({ transcript, language, durationMs, avgLogprob, isLowConfidence, }) => {
|
|
1938
|
+
const requestId = uuidv4();
|
|
1939
|
+
const transcriptText = isLowConfidence ? "" : transcript.trim();
|
|
1940
|
+
if (isLowConfidence) {
|
|
1941
|
+
this.sessionLogger.debug({ text: transcript, avgLogprob }, "Filtered low-confidence transcription (likely non-speech)");
|
|
1942
|
+
}
|
|
1943
|
+
this.sessionLogger.info({
|
|
1944
|
+
requestId,
|
|
1945
|
+
isVoiceMode: this.isVoiceMode,
|
|
1946
|
+
transcriptLength: transcriptText.length,
|
|
1947
|
+
transcript: transcriptText,
|
|
1948
|
+
}, "Transcription result");
|
|
1949
|
+
await this.handleTranscriptionResultPayload({
|
|
1950
|
+
text: transcriptText,
|
|
1951
|
+
requestId,
|
|
1952
|
+
...(language ? { language } : {}),
|
|
1953
|
+
duration: durationMs,
|
|
1954
|
+
...(avgLogprob !== undefined ? { avgLogprob } : {}),
|
|
1955
|
+
...(isLowConfidence !== undefined ? { isLowConfidence } : {}),
|
|
1956
|
+
});
|
|
1911
1957
|
},
|
|
1912
1958
|
onError: (error) => {
|
|
1913
1959
|
this.sessionLogger.error({ err: error }, "Voice turn controller failed");
|
|
@@ -1923,51 +1969,11 @@ export class Session {
|
|
|
1923
1969
|
if (!this.voiceTurnController) {
|
|
1924
1970
|
return;
|
|
1925
1971
|
}
|
|
1926
|
-
this.clearPendingVoiceSpeechStart("turn-controller-stop");
|
|
1927
1972
|
const controller = this.voiceTurnController;
|
|
1928
1973
|
this.voiceTurnController = null;
|
|
1929
1974
|
await controller.stop();
|
|
1930
1975
|
}
|
|
1931
|
-
clearPendingVoiceSpeechStart(reason) {
|
|
1932
|
-
if (this.pendingVoiceSpeechTimer) {
|
|
1933
|
-
clearTimeout(this.pendingVoiceSpeechTimer);
|
|
1934
|
-
this.pendingVoiceSpeechTimer = null;
|
|
1935
|
-
}
|
|
1936
|
-
if (this.pendingVoiceSpeechStartAt !== null) {
|
|
1937
|
-
this.sessionLogger.debug({ reason }, "Clearing provisional voice speech start");
|
|
1938
|
-
this.pendingVoiceSpeechStartAt = null;
|
|
1939
|
-
}
|
|
1940
|
-
}
|
|
1941
|
-
handleProvisionalVoiceSpeechStarted() {
|
|
1942
|
-
if (this.speechInProgress || this.pendingVoiceSpeechTimer) {
|
|
1943
|
-
return;
|
|
1944
|
-
}
|
|
1945
|
-
const startedAt = Date.now();
|
|
1946
|
-
this.pendingVoiceSpeechStartAt = startedAt;
|
|
1947
|
-
this.sessionLogger.info({ confirmationMs: VOICE_INTERRUPT_CONFIRMATION_MS }, "Silero VAD provisional speech_started");
|
|
1948
|
-
this.pendingVoiceSpeechTimer = setTimeout(() => {
|
|
1949
|
-
this.pendingVoiceSpeechTimer = null;
|
|
1950
|
-
if (this.pendingVoiceSpeechStartAt !== startedAt || this.speechInProgress) {
|
|
1951
|
-
return;
|
|
1952
|
-
}
|
|
1953
|
-
this.pendingVoiceSpeechStartAt = null;
|
|
1954
|
-
this.sessionLogger.info("voice_input_state emitting isSpeaking=true");
|
|
1955
|
-
this.emit({
|
|
1956
|
-
type: "voice_input_state",
|
|
1957
|
-
payload: {
|
|
1958
|
-
isSpeaking: true,
|
|
1959
|
-
},
|
|
1960
|
-
});
|
|
1961
|
-
void this.handleVoiceSpeechStart();
|
|
1962
|
-
}, VOICE_INTERRUPT_CONFIRMATION_MS);
|
|
1963
|
-
}
|
|
1964
1976
|
handleVoiceSpeechStopped() {
|
|
1965
|
-
if (this.pendingVoiceSpeechStartAt !== null) {
|
|
1966
|
-
const durationMs = Date.now() - this.pendingVoiceSpeechStartAt;
|
|
1967
|
-
this.clearPendingVoiceSpeechStart("speech-stopped-before-confirmation");
|
|
1968
|
-
this.sessionLogger.info({ durationMs, confirmationMs: VOICE_INTERRUPT_CONFIRMATION_MS }, "Ignoring provisional voice speech start that ended before confirmation");
|
|
1969
|
-
return;
|
|
1970
|
-
}
|
|
1971
1977
|
this.sessionLogger.info("voice_input_state emitting isSpeaking=false");
|
|
1972
1978
|
this.emit({
|
|
1973
1979
|
type: "voice_input_state",
|
|
@@ -2039,14 +2045,7 @@ export class Session {
|
|
|
2039
2045
|
if (!resolvedWorkspace) {
|
|
2040
2046
|
throw new Error(`Workspace not found: ${msg.workspaceId}`);
|
|
2041
2047
|
}
|
|
2042
|
-
this.
|
|
2043
|
-
workspace: resolvedWorkspace,
|
|
2044
|
-
firstAgentContext,
|
|
2045
|
-
});
|
|
2046
|
-
const snapshot = await this.agentManager.createAgent({
|
|
2047
|
-
...sessionConfig,
|
|
2048
|
-
cwd: resolvedWorkspace.cwd,
|
|
2049
|
-
}, undefined, {
|
|
2048
|
+
const snapshot = await this.agentManager.createAgent(sessionConfig, undefined, {
|
|
2050
2049
|
labels,
|
|
2051
2050
|
workspaceId: resolvedWorkspace.workspaceId,
|
|
2052
2051
|
initialPrompt: trimmedPrompt,
|
|
@@ -2170,7 +2169,7 @@ export class Session {
|
|
|
2170
2169
|
id: uuidv4(),
|
|
2171
2170
|
timestamp: new Date(),
|
|
2172
2171
|
type: "error",
|
|
2173
|
-
content: `Failed to resume agent: ${error
|
|
2172
|
+
content: `Failed to resume agent: ${getErrorMessage(error)}`,
|
|
2174
2173
|
},
|
|
2175
2174
|
});
|
|
2176
2175
|
}
|
|
@@ -2301,7 +2300,7 @@ export class Session {
|
|
|
2301
2300
|
id: uuidv4(),
|
|
2302
2301
|
timestamp: new Date(),
|
|
2303
2302
|
type: "error",
|
|
2304
|
-
content: `Failed to refresh agent: ${error
|
|
2303
|
+
content: `Failed to refresh agent: ${getErrorMessage(error)}`,
|
|
2305
2304
|
},
|
|
2306
2305
|
});
|
|
2307
2306
|
}
|
|
@@ -2434,7 +2433,7 @@ export class Session {
|
|
|
2434
2433
|
type: "list_provider_models_response",
|
|
2435
2434
|
payload: {
|
|
2436
2435
|
provider: msg.provider,
|
|
2437
|
-
error:
|
|
2436
|
+
error: getErrorMessage(error),
|
|
2438
2437
|
fetchedAt,
|
|
2439
2438
|
requestId: msg.requestId,
|
|
2440
2439
|
},
|
|
@@ -2561,7 +2560,7 @@ export class Session {
|
|
|
2561
2560
|
type: "list_provider_modes_response",
|
|
2562
2561
|
payload: {
|
|
2563
2562
|
provider: msg.provider,
|
|
2564
|
-
error:
|
|
2563
|
+
error: getErrorMessage(error),
|
|
2565
2564
|
fetchedAt,
|
|
2566
2565
|
requestId: msg.requestId,
|
|
2567
2566
|
},
|
|
@@ -2618,7 +2617,7 @@ export class Session {
|
|
|
2618
2617
|
type: "list_provider_features_response",
|
|
2619
2618
|
payload: {
|
|
2620
2619
|
provider: msg.draftConfig.provider,
|
|
2621
|
-
error:
|
|
2620
|
+
error: getErrorMessage(error),
|
|
2622
2621
|
fetchedAt,
|
|
2623
2622
|
requestId: msg.requestId,
|
|
2624
2623
|
},
|
|
@@ -2645,7 +2644,7 @@ export class Session {
|
|
|
2645
2644
|
type: "list_available_providers_response",
|
|
2646
2645
|
payload: {
|
|
2647
2646
|
providers: [],
|
|
2648
|
-
error:
|
|
2647
|
+
error: getErrorMessage(error),
|
|
2649
2648
|
fetchedAt,
|
|
2650
2649
|
requestId: msg.requestId,
|
|
2651
2650
|
},
|
|
@@ -2861,7 +2860,7 @@ export class Session {
|
|
|
2861
2860
|
return snapshot.git.isDirty === true;
|
|
2862
2861
|
}
|
|
2863
2862
|
catch (error) {
|
|
2864
|
-
throw new Error(`Unable to inspect git status for ${cwd}: ${error
|
|
2863
|
+
throw new Error(`Unable to inspect git status for ${cwd}: ${getErrorMessage(error)}`, {
|
|
2865
2864
|
cause: error,
|
|
2866
2865
|
});
|
|
2867
2866
|
}
|
|
@@ -2934,7 +2933,7 @@ export class Session {
|
|
|
2934
2933
|
id: uuidv4(),
|
|
2935
2934
|
timestamp: new Date(),
|
|
2936
2935
|
type: "error",
|
|
2937
|
-
content: `Failed to set agent mode: ${error
|
|
2936
|
+
content: `Failed to set agent mode: ${getErrorMessage(error)}`,
|
|
2938
2937
|
},
|
|
2939
2938
|
});
|
|
2940
2939
|
this.emit({
|
|
@@ -2943,9 +2942,7 @@ export class Session {
|
|
|
2943
2942
|
requestId,
|
|
2944
2943
|
agentId,
|
|
2945
2944
|
accepted: false,
|
|
2946
|
-
error: error
|
|
2947
|
-
? String(error.message)
|
|
2948
|
-
: "Failed to set agent mode",
|
|
2945
|
+
error: getErrorMessageOr(error, "Failed to set agent mode"),
|
|
2949
2946
|
},
|
|
2950
2947
|
});
|
|
2951
2948
|
}
|
|
@@ -2968,7 +2965,7 @@ export class Session {
|
|
|
2968
2965
|
id: uuidv4(),
|
|
2969
2966
|
timestamp: new Date(),
|
|
2970
2967
|
type: "error",
|
|
2971
|
-
content: `Failed to set agent model: ${error
|
|
2968
|
+
content: `Failed to set agent model: ${getErrorMessage(error)}`,
|
|
2972
2969
|
},
|
|
2973
2970
|
});
|
|
2974
2971
|
this.emit({
|
|
@@ -2977,9 +2974,7 @@ export class Session {
|
|
|
2977
2974
|
requestId,
|
|
2978
2975
|
agentId,
|
|
2979
2976
|
accepted: false,
|
|
2980
|
-
error: error
|
|
2981
|
-
? String(error.message)
|
|
2982
|
-
: "Failed to set agent model",
|
|
2977
|
+
error: getErrorMessageOr(error, "Failed to set agent model"),
|
|
2983
2978
|
},
|
|
2984
2979
|
});
|
|
2985
2980
|
}
|
|
@@ -3002,7 +2997,7 @@ export class Session {
|
|
|
3002
2997
|
id: uuidv4(),
|
|
3003
2998
|
timestamp: new Date(),
|
|
3004
2999
|
type: "error",
|
|
3005
|
-
content: `Failed to set agent feature: ${error
|
|
3000
|
+
content: `Failed to set agent feature: ${getErrorMessage(error)}`,
|
|
3006
3001
|
},
|
|
3007
3002
|
});
|
|
3008
3003
|
this.emit({
|
|
@@ -3011,9 +3006,7 @@ export class Session {
|
|
|
3011
3006
|
requestId,
|
|
3012
3007
|
agentId,
|
|
3013
3008
|
accepted: false,
|
|
3014
|
-
error: error
|
|
3015
|
-
? String(error.message)
|
|
3016
|
-
: "Failed to set agent feature",
|
|
3009
|
+
error: getErrorMessageOr(error, "Failed to set agent feature"),
|
|
3017
3010
|
},
|
|
3018
3011
|
});
|
|
3019
3012
|
}
|
|
@@ -3036,7 +3029,7 @@ export class Session {
|
|
|
3036
3029
|
id: uuidv4(),
|
|
3037
3030
|
timestamp: new Date(),
|
|
3038
3031
|
type: "error",
|
|
3039
|
-
content: `Failed to set agent thinking option: ${error
|
|
3032
|
+
content: `Failed to set agent thinking option: ${getErrorMessage(error)}`,
|
|
3040
3033
|
},
|
|
3041
3034
|
});
|
|
3042
3035
|
this.emit({
|
|
@@ -3045,9 +3038,7 @@ export class Session {
|
|
|
3045
3038
|
requestId,
|
|
3046
3039
|
agentId,
|
|
3047
3040
|
accepted: false,
|
|
3048
|
-
error: error
|
|
3049
|
-
? String(error.message)
|
|
3050
|
-
: "Failed to set agent thinking option",
|
|
3041
|
+
error: getErrorMessageOr(error, "Failed to set agent thinking option"),
|
|
3051
3042
|
},
|
|
3052
3043
|
});
|
|
3053
3044
|
}
|
|
@@ -3162,7 +3153,7 @@ export class Session {
|
|
|
3162
3153
|
payload: {
|
|
3163
3154
|
agentId,
|
|
3164
3155
|
commands: [],
|
|
3165
|
-
error: error
|
|
3156
|
+
error: getErrorMessage(error),
|
|
3166
3157
|
requestId,
|
|
3167
3158
|
},
|
|
3168
3159
|
});
|
|
@@ -3189,7 +3180,7 @@ export class Session {
|
|
|
3189
3180
|
id: uuidv4(),
|
|
3190
3181
|
timestamp: new Date(),
|
|
3191
3182
|
type: "error",
|
|
3192
|
-
content: `Failed to respond to permission: ${error
|
|
3183
|
+
content: `Failed to respond to permission: ${getErrorMessage(error)}`,
|
|
3193
3184
|
},
|
|
3194
3185
|
});
|
|
3195
3186
|
throw error;
|
|
@@ -3276,7 +3267,7 @@ export class Session {
|
|
|
3276
3267
|
return;
|
|
3277
3268
|
default: {
|
|
3278
3269
|
const exhaustiveCheck = resolution;
|
|
3279
|
-
throw new Error(`Unhandled branch resolution: ${exhaustiveCheck}`);
|
|
3270
|
+
throw new Error(`Unhandled branch resolution: ${getErrorMessage(exhaustiveCheck)}`);
|
|
3280
3271
|
}
|
|
3281
3272
|
}
|
|
3282
3273
|
}
|
|
@@ -4157,7 +4148,7 @@ export class Session {
|
|
|
4157
4148
|
mode,
|
|
4158
4149
|
directory: null,
|
|
4159
4150
|
file: null,
|
|
4160
|
-
error: error
|
|
4151
|
+
error: getErrorMessage(error),
|
|
4161
4152
|
requestId,
|
|
4162
4153
|
},
|
|
4163
4154
|
});
|
|
@@ -4186,7 +4177,7 @@ export class Session {
|
|
|
4186
4177
|
payload: {
|
|
4187
4178
|
cwd,
|
|
4188
4179
|
icon: null,
|
|
4189
|
-
error: error
|
|
4180
|
+
error: getErrorMessage(error),
|
|
4190
4181
|
requestId,
|
|
4191
4182
|
},
|
|
4192
4183
|
});
|
|
@@ -4252,7 +4243,7 @@ export class Session {
|
|
|
4252
4243
|
fileName: null,
|
|
4253
4244
|
mimeType: null,
|
|
4254
4245
|
size: null,
|
|
4255
|
-
error: error
|
|
4246
|
+
error: getErrorMessage(error),
|
|
4256
4247
|
requestId,
|
|
4257
4248
|
},
|
|
4258
4249
|
});
|
|
@@ -4488,7 +4479,7 @@ export class Session {
|
|
|
4488
4479
|
return {
|
|
4489
4480
|
id: workspace.workspaceId,
|
|
4490
4481
|
projectId: workspace.projectId,
|
|
4491
|
-
projectDisplayName: resolvedProjectRecord?.displayName ??
|
|
4482
|
+
projectDisplayName: resolvedProjectRecord?.displayName ?? workspace.projectId,
|
|
4492
4483
|
projectRootPath: resolvedProjectRecord?.rootPath ?? workspace.cwd,
|
|
4493
4484
|
workspaceDirectory: workspace.cwd,
|
|
4494
4485
|
projectKind: (resolvedProjectRecord?.kind ?? "directory") === "git" ? "git" : "non_git",
|
|
@@ -4559,7 +4550,7 @@ export class Session {
|
|
|
4559
4550
|
return {
|
|
4560
4551
|
id: result.workspace.workspaceId,
|
|
4561
4552
|
projectId: result.workspace.projectId,
|
|
4562
|
-
projectDisplayName: projectRecord?.displayName ??
|
|
4553
|
+
projectDisplayName: projectRecord?.displayName ?? result.workspace.projectId,
|
|
4563
4554
|
projectRootPath: projectRecord?.rootPath ?? result.repoRoot,
|
|
4564
4555
|
workspaceDirectory: result.workspace.cwd,
|
|
4565
4556
|
projectKind: "git",
|
|
@@ -5551,8 +5542,9 @@ export class Session {
|
|
|
5551
5542
|
const agentId = resolved.agentId;
|
|
5552
5543
|
const prompt = this.buildAgentPrompt(msg.text, msg.images, msg.attachments);
|
|
5553
5544
|
this.sessionLogger.trace({ agentId, messageId: msg.messageId, textPrefix: msg.text.slice(0, 80) }, "send_agent_message_request: dispatching shared sendPromptToAgent");
|
|
5545
|
+
let dispatchResult;
|
|
5554
5546
|
try {
|
|
5555
|
-
await sendPromptToAgent({
|
|
5547
|
+
dispatchResult = await sendPromptToAgent({
|
|
5556
5548
|
agentManager: this.agentManager,
|
|
5557
5549
|
agentStorage: this.agentStorage,
|
|
5558
5550
|
agentId,
|
|
@@ -5576,6 +5568,18 @@ export class Session {
|
|
|
5576
5568
|
});
|
|
5577
5569
|
return;
|
|
5578
5570
|
}
|
|
5571
|
+
if (dispatchResult.outOfBand) {
|
|
5572
|
+
this.emit({
|
|
5573
|
+
type: "send_agent_message_response",
|
|
5574
|
+
payload: {
|
|
5575
|
+
requestId: msg.requestId,
|
|
5576
|
+
agentId,
|
|
5577
|
+
accepted: true,
|
|
5578
|
+
error: null,
|
|
5579
|
+
},
|
|
5580
|
+
});
|
|
5581
|
+
return;
|
|
5582
|
+
}
|
|
5579
5583
|
const startAbort = new AbortController();
|
|
5580
5584
|
const startTimeoutMs = 15000;
|
|
5581
5585
|
const startTimeout = setTimeout(() => startAbort.abort("timeout"), startTimeoutMs);
|
|
@@ -5777,12 +5781,6 @@ export class Session {
|
|
|
5777
5781
|
const chunkBytes = Buffer.byteLength(msg.audio, "base64");
|
|
5778
5782
|
this.voiceInputChunkCount += 1;
|
|
5779
5783
|
this.voiceInputBytes += chunkBytes;
|
|
5780
|
-
if (this.voiceInputChunkCount === 1) {
|
|
5781
|
-
this.sessionLogger.info({
|
|
5782
|
-
format: chunkFormat,
|
|
5783
|
-
audioBytes: chunkBytes,
|
|
5784
|
-
}, "Received first voice_audio_chunk for active voice mode");
|
|
5785
|
-
}
|
|
5786
5784
|
const now = Date.now();
|
|
5787
5785
|
if (this.voiceInputChunkCount % 50 === 0 || now - this.voiceInputWindowStartedAt >= 1000) {
|
|
5788
5786
|
this.sessionLogger.info({
|
|
@@ -5943,7 +5941,7 @@ export class Session {
|
|
|
5943
5941
|
id: uuidv4(),
|
|
5944
5942
|
timestamp: new Date(),
|
|
5945
5943
|
type: "error",
|
|
5946
|
-
content: `Transcription error: ${error
|
|
5944
|
+
content: `Transcription error: ${getErrorMessage(error)}`,
|
|
5947
5945
|
},
|
|
5948
5946
|
});
|
|
5949
5947
|
throw error;
|
|
@@ -6110,7 +6108,6 @@ export class Session {
|
|
|
6110
6108
|
* Clear speech-in-progress flag once the user turn has completed
|
|
6111
6109
|
*/
|
|
6112
6110
|
clearSpeechInProgress(reason) {
|
|
6113
|
-
this.clearPendingVoiceSpeechStart(`clear-speech-in-progress:${reason}`);
|
|
6114
6111
|
if (!this.speechInProgress) {
|
|
6115
6112
|
return;
|
|
6116
6113
|
}
|
|
@@ -6457,6 +6454,7 @@ export class Session {
|
|
|
6457
6454
|
target,
|
|
6458
6455
|
maxRuns: request.maxRuns,
|
|
6459
6456
|
expiresAt: request.expiresAt,
|
|
6457
|
+
runOnCreate: request.runOnCreate,
|
|
6460
6458
|
});
|
|
6461
6459
|
this.emit({
|
|
6462
6460
|
type: "schedule/create/response",
|
|
@@ -6567,6 +6565,46 @@ export class Session {
|
|
|
6567
6565
|
this.emitScheduleRpcError(request, error);
|
|
6568
6566
|
}
|
|
6569
6567
|
}
|
|
6568
|
+
async handleScheduleRunOnceRequest(request) {
|
|
6569
|
+
try {
|
|
6570
|
+
const schedule = await this.scheduleService.runOnce(request.scheduleId);
|
|
6571
|
+
this.emit({
|
|
6572
|
+
type: "schedule/run-once/response",
|
|
6573
|
+
payload: {
|
|
6574
|
+
requestId: request.requestId,
|
|
6575
|
+
schedule,
|
|
6576
|
+
error: null,
|
|
6577
|
+
},
|
|
6578
|
+
});
|
|
6579
|
+
}
|
|
6580
|
+
catch (error) {
|
|
6581
|
+
this.emitScheduleRpcError(request, error);
|
|
6582
|
+
}
|
|
6583
|
+
}
|
|
6584
|
+
async handleScheduleUpdateRequest(request) {
|
|
6585
|
+
try {
|
|
6586
|
+
const schedule = await this.scheduleService.update({
|
|
6587
|
+
id: request.scheduleId,
|
|
6588
|
+
...(request.name !== undefined ? { name: request.name } : {}),
|
|
6589
|
+
...(request.prompt !== undefined ? { prompt: request.prompt } : {}),
|
|
6590
|
+
...(request.cadence !== undefined ? { cadence: request.cadence } : {}),
|
|
6591
|
+
...(request.newAgentConfig !== undefined ? { newAgentConfig: request.newAgentConfig } : {}),
|
|
6592
|
+
...(request.maxRuns !== undefined ? { maxRuns: request.maxRuns } : {}),
|
|
6593
|
+
...(request.expiresAt !== undefined ? { expiresAt: request.expiresAt } : {}),
|
|
6594
|
+
});
|
|
6595
|
+
this.emit({
|
|
6596
|
+
type: "schedule/update/response",
|
|
6597
|
+
payload: {
|
|
6598
|
+
requestId: request.requestId,
|
|
6599
|
+
schedule,
|
|
6600
|
+
error: null,
|
|
6601
|
+
},
|
|
6602
|
+
});
|
|
6603
|
+
}
|
|
6604
|
+
catch (error) {
|
|
6605
|
+
this.emitScheduleRpcError(request, error);
|
|
6606
|
+
}
|
|
6607
|
+
}
|
|
6570
6608
|
emitLoopRpcError(request, error) {
|
|
6571
6609
|
const message = error instanceof Error ? error.message : String(error);
|
|
6572
6610
|
this.sessionLogger.error({ err: error, requestType: request.type }, "Loop request failed");
|
|
@@ -6587,10 +6625,12 @@ export class Session {
|
|
|
6587
6625
|
cwd: request.cwd,
|
|
6588
6626
|
provider: request.provider,
|
|
6589
6627
|
model: request.model,
|
|
6628
|
+
modeId: request.modeId,
|
|
6590
6629
|
workerProvider: request.workerProvider,
|
|
6591
6630
|
workerModel: request.workerModel,
|
|
6592
6631
|
verifierProvider: request.verifierProvider,
|
|
6593
6632
|
verifierModel: request.verifierModel,
|
|
6633
|
+
verifierModeId: request.verifierModeId,
|
|
6594
6634
|
verifyPrompt: request.verifyPrompt,
|
|
6595
6635
|
verifyChecks: request.verifyChecks,
|
|
6596
6636
|
archive: request.archive,
|