@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
|
@@ -3,20 +3,20 @@ import fs from "node:fs";
|
|
|
3
3
|
import { promises } from "node:fs";
|
|
4
4
|
import os from "node:os";
|
|
5
5
|
import path from "node:path";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { createProviderEnv, createProviderEnvSpec, } from "
|
|
16
|
-
import { findExecutable, isCommandAvailable } from "
|
|
17
|
-
import { withTimeout } from "
|
|
18
|
-
import { execCommand
|
|
19
|
-
import { getOrchestratorModeInstructions } from "
|
|
6
|
+
import { mapClaudeCanceledToolCall, mapClaudeCompletedToolCall, mapClaudeFailedToolCall, mapClaudeRunningToolCall, } from "./tool-call-mapper.js";
|
|
7
|
+
import { mapTaskNotificationSystemRecordToToolCall, mapTaskNotificationUserContentToToolCall, } from "./task-notification-tool-call.js";
|
|
8
|
+
import { getClaudeModels, normalizeClaudeRuntimeModelId } from "./models.js";
|
|
9
|
+
import { parsePartialJsonObject } from "./partial-json.js";
|
|
10
|
+
import { ClaudeSidechainTracker } from "./sidechain-tracker.js";
|
|
11
|
+
import { formatDiagnosticStatus, formatProviderDiagnostic, formatProviderDiagnosticError, toDiagnosticErrorMessage, } from "../diagnostic-utils.js";
|
|
12
|
+
import { appendOrReplaceGrowingAssistantMessage, runProviderTurn } from "../provider-runner.js";
|
|
13
|
+
import { renderPromptAttachmentAsText } from "../../prompt-attachments.js";
|
|
14
|
+
import { claudeQuery } from "./query.js";
|
|
15
|
+
import { createProviderEnv, createProviderEnvSpec, } from "../../provider-launch-config.js";
|
|
16
|
+
import { findExecutable, isCommandAvailable } from "../../../../utils/executable.js";
|
|
17
|
+
import { withTimeout } from "../../../../utils/promise-timeout.js";
|
|
18
|
+
import { execCommand } from "../../../../utils/spawn.js";
|
|
19
|
+
import { getOrchestratorModeInstructions } from "../../orchestrator-instructions.js";
|
|
20
20
|
const fsPromises = promises;
|
|
21
21
|
const CLAUDE_SETTING_SOURCES = ["user", "project"];
|
|
22
22
|
function readNonEmptyString(value) {
|
|
@@ -61,6 +61,21 @@ export function normalizeClaudeAskUserQuestionUpdatedInput(updatedInput, fallbac
|
|
|
61
61
|
answers: normalizedAnswers,
|
|
62
62
|
};
|
|
63
63
|
}
|
|
64
|
+
function isObjectRecord(value) {
|
|
65
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
66
|
+
}
|
|
67
|
+
function toObjectRecord(value) {
|
|
68
|
+
return isObjectRecord(value) ? value : undefined;
|
|
69
|
+
}
|
|
70
|
+
function isUnknownArray(value) {
|
|
71
|
+
return Array.isArray(value);
|
|
72
|
+
}
|
|
73
|
+
function isImageMimeType(value) {
|
|
74
|
+
return (value === "image/jpeg" ||
|
|
75
|
+
value === "image/png" ||
|
|
76
|
+
value === "image/gif" ||
|
|
77
|
+
value === "image/webp");
|
|
78
|
+
}
|
|
64
79
|
const CLAUDE_CAPABILITIES = {
|
|
65
80
|
supportsStreaming: true,
|
|
66
81
|
supportsSessionPersistence: true,
|
|
@@ -134,60 +149,6 @@ function extractSessionIdRaw(msg) {
|
|
|
134
149
|
return msg.session.id;
|
|
135
150
|
return "";
|
|
136
151
|
}
|
|
137
|
-
function resolveClaudeSpawnCommand(spawnOptions, runtimeSettings) {
|
|
138
|
-
const commandConfig = runtimeSettings?.command;
|
|
139
|
-
if (!commandConfig || commandConfig.mode === "default") {
|
|
140
|
-
return {
|
|
141
|
-
command: spawnOptions.command,
|
|
142
|
-
args: [...spawnOptions.args],
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
if (commandConfig.mode === "append") {
|
|
146
|
-
return {
|
|
147
|
-
command: spawnOptions.command,
|
|
148
|
-
args: [...spawnOptions.args, ...(commandConfig.args ?? [])],
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
return {
|
|
152
|
-
command: commandConfig.argv[0],
|
|
153
|
-
args: [...commandConfig.argv.slice(1), ...spawnOptions.args],
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
function applyRuntimeSettingsToClaudeOptions(options, runtimeSettings, launchEnv) {
|
|
157
|
-
return {
|
|
158
|
-
...options,
|
|
159
|
-
spawnClaudeCodeProcess: (spawnOptions) => {
|
|
160
|
-
const resolved = resolveClaudeSpawnCommand(spawnOptions, runtimeSettings);
|
|
161
|
-
// When the SDK passes a default JS runtime ("node"/"bun"), replace it with
|
|
162
|
-
// process.execPath — the actual node binary running the daemon. This avoids
|
|
163
|
-
// PATH lookup failures in the managed runtime bundle.
|
|
164
|
-
// When the SDK passes a native binary path (from pathToClaudeCodeExecutable)
|
|
165
|
-
// or the user overrides the command via runtime settings, use that directly.
|
|
166
|
-
const isDefaultRuntime = resolved.command === "node" || resolved.command === "bun";
|
|
167
|
-
const command = isDefaultRuntime ? process.execPath : resolved.command;
|
|
168
|
-
const child = spawnProcess(command, resolved.args, {
|
|
169
|
-
cwd: spawnOptions.cwd,
|
|
170
|
-
...createProviderEnvSpec({
|
|
171
|
-
baseEnv: spawnOptions.env,
|
|
172
|
-
runtimeSettings,
|
|
173
|
-
overlays: [launchEnv],
|
|
174
|
-
}),
|
|
175
|
-
signal: spawnOptions.signal,
|
|
176
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
177
|
-
// Bypass cmd.exe on Windows: the SDK passes --mcp-config with inline JSON
|
|
178
|
-
// containing double quotes, which cmd.exe mangles (strips quotes, breaks parsing).
|
|
179
|
-
// The command is always a resolved binary path, so shell routing is unnecessary.
|
|
180
|
-
shell: false,
|
|
181
|
-
});
|
|
182
|
-
if (typeof options.stderr === "function") {
|
|
183
|
-
child.stderr?.on("data", (chunk) => {
|
|
184
|
-
options.stderr?.(chunk.toString());
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
return child;
|
|
188
|
-
},
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
152
|
function isClaudeThinkingEffort(value) {
|
|
192
153
|
return (value === "low" ||
|
|
193
154
|
value === "medium" ||
|
|
@@ -210,11 +171,11 @@ function summarizeClaudeOptionsForLog(options) {
|
|
|
210
171
|
if (typeof systemPromptRaw === "string") {
|
|
211
172
|
return { mode: "string", preset: null };
|
|
212
173
|
}
|
|
213
|
-
const prompt = systemPromptRaw;
|
|
214
|
-
const promptType = typeof prompt
|
|
174
|
+
const prompt = toObjectRecord(systemPromptRaw);
|
|
175
|
+
const promptType = typeof prompt?.type === "string" ? prompt.type : "custom";
|
|
215
176
|
return {
|
|
216
177
|
mode: promptType === "preset" ? "preset" : "custom",
|
|
217
|
-
preset: typeof prompt
|
|
178
|
+
preset: typeof prompt?.preset === "string" && prompt.preset.length > 0 ? prompt.preset : null,
|
|
218
179
|
};
|
|
219
180
|
})();
|
|
220
181
|
const mcpServerNames = options.mcpServers ? Object.keys(options.mcpServers).sort() : [];
|
|
@@ -276,7 +237,11 @@ function normalizeForDeterministicString(value, seen) {
|
|
|
276
237
|
return "[circular]";
|
|
277
238
|
}
|
|
278
239
|
seen.add(objectValue);
|
|
279
|
-
const record = value;
|
|
240
|
+
const record = toObjectRecord(value);
|
|
241
|
+
if (!record) {
|
|
242
|
+
seen.delete(objectValue);
|
|
243
|
+
return "[invalid]";
|
|
244
|
+
}
|
|
280
245
|
const normalized = {};
|
|
281
246
|
for (const key of Object.keys(record).sort()) {
|
|
282
247
|
normalized[key] = normalizeForDeterministicString(record[key], seen);
|
|
@@ -284,7 +249,10 @@ function normalizeForDeterministicString(value, seen) {
|
|
|
284
249
|
seen.delete(objectValue);
|
|
285
250
|
return normalized;
|
|
286
251
|
}
|
|
287
|
-
|
|
252
|
+
if (typeof value === "number" || typeof value === "boolean") {
|
|
253
|
+
return String(value);
|
|
254
|
+
}
|
|
255
|
+
return "[unsupported]";
|
|
288
256
|
}
|
|
289
257
|
function deterministicStringify(value) {
|
|
290
258
|
if (typeof value === "undefined") {
|
|
@@ -298,12 +266,13 @@ function deterministicStringify(value) {
|
|
|
298
266
|
return JSON.stringify(normalized);
|
|
299
267
|
}
|
|
300
268
|
catch {
|
|
301
|
-
|
|
302
|
-
return
|
|
269
|
+
if (typeof value === "string") {
|
|
270
|
+
return value;
|
|
303
271
|
}
|
|
304
|
-
|
|
305
|
-
return
|
|
272
|
+
if (typeof value === "number" || typeof value === "boolean") {
|
|
273
|
+
return String(value);
|
|
306
274
|
}
|
|
275
|
+
return "[unserializable]";
|
|
307
276
|
}
|
|
308
277
|
}
|
|
309
278
|
function coerceToolResultContentToString(content) {
|
|
@@ -344,20 +313,21 @@ function collectClaudeTextContentParts(content) {
|
|
|
344
313
|
const normalized = normalizeClaudeTranscriptText(content);
|
|
345
314
|
return normalized ? [normalized] : [];
|
|
346
315
|
}
|
|
347
|
-
if (!
|
|
316
|
+
if (!isUnknownArray(content)) {
|
|
348
317
|
return [];
|
|
349
318
|
}
|
|
350
319
|
const parts = [];
|
|
351
320
|
for (const block of content) {
|
|
352
|
-
|
|
321
|
+
const blockRecord = toObjectRecord(block);
|
|
322
|
+
if (!blockRecord) {
|
|
353
323
|
continue;
|
|
354
324
|
}
|
|
355
|
-
const text = normalizeClaudeTranscriptText(
|
|
325
|
+
const text = normalizeClaudeTranscriptText(blockRecord.text);
|
|
356
326
|
if (text) {
|
|
357
327
|
parts.push(text);
|
|
358
328
|
continue;
|
|
359
329
|
}
|
|
360
|
-
const input = normalizeClaudeTranscriptText(
|
|
330
|
+
const input = normalizeClaudeTranscriptText(blockRecord.input);
|
|
361
331
|
if (input) {
|
|
362
332
|
parts.push(input);
|
|
363
333
|
}
|
|
@@ -537,6 +507,7 @@ function toClaudeSdkMcpConfig(config) {
|
|
|
537
507
|
headers: config.headers,
|
|
538
508
|
};
|
|
539
509
|
}
|
|
510
|
+
throw new Error("Unhandled MCP server config type");
|
|
540
511
|
}
|
|
541
512
|
function isClaudeContentChunk(value) {
|
|
542
513
|
return isMetadata(value) && typeof value.type === "string";
|
|
@@ -627,7 +598,7 @@ class TimelineAssembler {
|
|
|
627
598
|
return this.applyAbsoluteFragments(state, fragments);
|
|
628
599
|
}
|
|
629
600
|
consumeStreamEvent(message, runId, messageIdHint) {
|
|
630
|
-
const event = message.event;
|
|
601
|
+
const event = toObjectRecord(message.event) ?? {};
|
|
631
602
|
const eventType = readTrimmedString(event.type);
|
|
632
603
|
const streamEventMessageId = this.readMessageIdFromStreamEvent(event) ?? messageIdHint;
|
|
633
604
|
if (eventType === "message_start") {
|
|
@@ -810,19 +781,20 @@ class TimelineAssembler {
|
|
|
810
781
|
return fragments;
|
|
811
782
|
}
|
|
812
783
|
readMessageIdFromAssistantMessage(message) {
|
|
813
|
-
const candidate = message;
|
|
814
|
-
|
|
784
|
+
const candidate = toObjectRecord(message);
|
|
785
|
+
const messageContainer = toObjectRecord(candidate?.message);
|
|
786
|
+
return (readTrimmedString(candidate?.message_id) ?? readTrimmedString(messageContainer?.id) ?? null);
|
|
815
787
|
}
|
|
816
788
|
readMessageIdFromStreamEvent(event) {
|
|
817
|
-
const
|
|
818
|
-
return readTrimmedString(event.message_id) ?? readTrimmedString(
|
|
789
|
+
const messageContainer = toObjectRecord(event.message);
|
|
790
|
+
return readTrimmedString(event.message_id) ?? readTrimmedString(messageContainer?.id) ?? null;
|
|
819
791
|
}
|
|
820
792
|
}
|
|
821
793
|
function isSyntheticUserEntry(entry) {
|
|
822
|
-
|
|
794
|
+
const candidate = toObjectRecord(entry);
|
|
795
|
+
if (!candidate) {
|
|
823
796
|
return false;
|
|
824
797
|
}
|
|
825
|
-
const candidate = entry;
|
|
826
798
|
return candidate.isSynthetic === true || candidate.isMeta === true;
|
|
827
799
|
}
|
|
828
800
|
function firstTrimmedString(sources) {
|
|
@@ -835,11 +807,11 @@ function firstTrimmedString(sources) {
|
|
|
835
807
|
return null;
|
|
836
808
|
}
|
|
837
809
|
export function readEventIdentifiers(message) {
|
|
838
|
-
const root = message;
|
|
810
|
+
const root = toObjectRecord(message) ?? {};
|
|
839
811
|
const messageType = readTrimmedString(root.type);
|
|
840
|
-
const streamEvent = root.event;
|
|
841
|
-
const streamEventMessage = streamEvent?.message;
|
|
842
|
-
const messageContainer = root.message;
|
|
812
|
+
const streamEvent = toObjectRecord(root.event);
|
|
813
|
+
const streamEventMessage = toObjectRecord(streamEvent?.message);
|
|
814
|
+
const messageContainer = toObjectRecord(root.message);
|
|
843
815
|
const messageIdFromUuid = messageType === "user" ? root.uuid : undefined;
|
|
844
816
|
return {
|
|
845
817
|
taskId: firstTrimmedString([
|
|
@@ -873,7 +845,8 @@ export class ClaudeAgentClient {
|
|
|
873
845
|
this.defaults = options.defaults;
|
|
874
846
|
this.logger = options.logger.child({ module: "agent", provider: "claude" });
|
|
875
847
|
this.runtimeSettings = options.runtimeSettings;
|
|
876
|
-
this.queryFactory = options.queryFactory
|
|
848
|
+
this.queryFactory = options.queryFactory;
|
|
849
|
+
this.resolveBinary = options.resolveBinary ?? (() => resolveClaudeBinary(this.runtimeSettings));
|
|
877
850
|
}
|
|
878
851
|
async createSession(config, launchContext, options) {
|
|
879
852
|
const claudeConfig = this.assertConfig(config);
|
|
@@ -884,6 +857,7 @@ export class ClaudeAgentClient {
|
|
|
884
857
|
persistSession: options?.persistSession,
|
|
885
858
|
logger: this.logger,
|
|
886
859
|
queryFactory: this.queryFactory,
|
|
860
|
+
resolveBinary: this.resolveBinary,
|
|
887
861
|
});
|
|
888
862
|
}
|
|
889
863
|
async resumeSession(handle, overrides, launchContext) {
|
|
@@ -905,6 +879,7 @@ export class ClaudeAgentClient {
|
|
|
905
879
|
launchEnv: launchContext?.env,
|
|
906
880
|
logger: this.logger,
|
|
907
881
|
queryFactory: this.queryFactory,
|
|
882
|
+
resolveBinary: this.resolveBinary,
|
|
908
883
|
});
|
|
909
884
|
}
|
|
910
885
|
async listModels(_options) {
|
|
@@ -929,9 +904,7 @@ export class ClaudeAgentClient {
|
|
|
929
904
|
if (command?.mode === "replace") {
|
|
930
905
|
return await isCommandAvailable(command.argv[0]);
|
|
931
906
|
}
|
|
932
|
-
|
|
933
|
-
// via process.execPath. No external `claude` binary is required.
|
|
934
|
-
return true;
|
|
907
|
+
return await isCommandAvailable("claude");
|
|
935
908
|
}
|
|
936
909
|
async getDiagnostic() {
|
|
937
910
|
try {
|
|
@@ -980,6 +953,20 @@ export class ClaudeAgentClient {
|
|
|
980
953
|
return { ...config, provider: "claude" };
|
|
981
954
|
}
|
|
982
955
|
}
|
|
956
|
+
async function resolveClaudeBinary(runtimeSettings) {
|
|
957
|
+
const command = runtimeSettings?.command;
|
|
958
|
+
if (command?.mode === "replace") {
|
|
959
|
+
const foundOverride = await findExecutable(command.argv[0]);
|
|
960
|
+
if (foundOverride) {
|
|
961
|
+
return foundOverride;
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
const found = await findExecutable("claude");
|
|
965
|
+
if (found) {
|
|
966
|
+
return found;
|
|
967
|
+
}
|
|
968
|
+
throw new Error("Claude binary not found. Install Claude Code (https://github.com/anthropics/claude-code) and ensure it is available in your shell PATH.");
|
|
969
|
+
}
|
|
983
970
|
async function resolveClaudeVersion(runtimeSettings) {
|
|
984
971
|
const command = runtimeSettings?.command;
|
|
985
972
|
const envSpec = createProviderEnvSpec({ runtimeSettings });
|
|
@@ -1012,11 +999,11 @@ async function resolveClaudeAuth(runtimeSettings) {
|
|
|
1012
999
|
});
|
|
1013
1000
|
}
|
|
1014
1001
|
catch (error) {
|
|
1015
|
-
const err = error;
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
};
|
|
1002
|
+
const err = toObjectRecord(error);
|
|
1003
|
+
const stdout = typeof err?.stdout === "string" ? err.stdout : "";
|
|
1004
|
+
const stderr = typeof err?.stderr === "string" ? err.stderr : "";
|
|
1005
|
+
const fallbackMessage = typeof err?.message === "string" ? err.message : "";
|
|
1006
|
+
return { stdout, stderr: stderr || fallbackMessage };
|
|
1020
1007
|
}
|
|
1021
1008
|
};
|
|
1022
1009
|
try {
|
|
@@ -1042,15 +1029,17 @@ async function resolveClaudeAuth(runtimeSettings) {
|
|
|
1042
1029
|
}
|
|
1043
1030
|
}
|
|
1044
1031
|
function extractContextWindowSize(modelUsage) {
|
|
1045
|
-
|
|
1032
|
+
const usageRecord = toObjectRecord(modelUsage);
|
|
1033
|
+
if (!usageRecord) {
|
|
1046
1034
|
return undefined;
|
|
1047
1035
|
}
|
|
1048
1036
|
let maxContextWindow;
|
|
1049
|
-
for (const value of Object.values(
|
|
1050
|
-
|
|
1037
|
+
for (const value of Object.values(usageRecord)) {
|
|
1038
|
+
const valueRecord = toObjectRecord(value);
|
|
1039
|
+
if (!valueRecord) {
|
|
1051
1040
|
continue;
|
|
1052
1041
|
}
|
|
1053
|
-
const contextWindow =
|
|
1042
|
+
const contextWindow = valueRecord.contextWindow;
|
|
1054
1043
|
if (typeof contextWindow !== "number" ||
|
|
1055
1044
|
!Number.isFinite(contextWindow) ||
|
|
1056
1045
|
contextWindow <= 0) {
|
|
@@ -1077,8 +1066,8 @@ function readUsageFromTaskNotification(message) {
|
|
|
1077
1066
|
return readUsageTotalTokens(message.usage);
|
|
1078
1067
|
}
|
|
1079
1068
|
function readStreamRequestInputTokens(event) {
|
|
1080
|
-
const messageUsage = event.message?.usage;
|
|
1081
|
-
if (!messageUsage
|
|
1069
|
+
const messageUsage = toObjectRecord(toObjectRecord(event.message)?.usage);
|
|
1070
|
+
if (!messageUsage) {
|
|
1082
1071
|
return undefined;
|
|
1083
1072
|
}
|
|
1084
1073
|
const usage = messageUsage;
|
|
@@ -1099,7 +1088,7 @@ function readStreamRequestInputTokens(event) {
|
|
|
1099
1088
|
return inputTokens + cacheCreationInputTokens + cacheReadInputTokens;
|
|
1100
1089
|
}
|
|
1101
1090
|
function readStreamRequestOutputTokens(event) {
|
|
1102
|
-
const outputTokens = event.usage?.output_tokens;
|
|
1091
|
+
const outputTokens = toObjectRecord(event.usage)?.output_tokens;
|
|
1103
1092
|
if (typeof outputTokens !== "number" || !Number.isFinite(outputTokens) || outputTokens < 0) {
|
|
1104
1093
|
return undefined;
|
|
1105
1094
|
}
|
|
@@ -1217,7 +1206,8 @@ class ClaudeAgentSession {
|
|
|
1217
1206
|
this.runtimeSettings = options.runtimeSettings;
|
|
1218
1207
|
this.persistSession = options.persistSession;
|
|
1219
1208
|
this.logger = options.logger;
|
|
1220
|
-
this.queryFactory = options.queryFactory
|
|
1209
|
+
this.queryFactory = options.queryFactory;
|
|
1210
|
+
this.resolveBinary = options.resolveBinary;
|
|
1221
1211
|
const handle = options.handle;
|
|
1222
1212
|
if (handle) {
|
|
1223
1213
|
if (!handle.sessionId) {
|
|
@@ -1745,7 +1735,11 @@ class ClaudeAgentSession {
|
|
|
1745
1735
|
const options = await this.buildOptions();
|
|
1746
1736
|
this.logger.debug({ options: summarizeClaudeOptionsForLog(options) }, "claude query");
|
|
1747
1737
|
this.input = input;
|
|
1748
|
-
this.query =
|
|
1738
|
+
this.query = claudeQuery({ prompt: input.iterable, options }, {
|
|
1739
|
+
runtimeSettings: this.runtimeSettings,
|
|
1740
|
+
launchEnv: this.launchEnv,
|
|
1741
|
+
queryFactory: this.queryFactory,
|
|
1742
|
+
});
|
|
1749
1743
|
// Do not kick off background control-plane queries here. Methods like
|
|
1750
1744
|
// supportedCommands()/setPermissionMode() may execute immediately after
|
|
1751
1745
|
// ensureQuery() (for listCommands()/setMode()), and sharing the same query
|
|
@@ -1772,12 +1766,7 @@ class ClaudeAgentSession {
|
|
|
1772
1766
|
? this.config.thinkingOptionId
|
|
1773
1767
|
: undefined;
|
|
1774
1768
|
if (thinkingOptionId && isClaudeThinkingEffort(thinkingOptionId)) {
|
|
1775
|
-
|
|
1776
|
-
// adds 'xhigh' which the binary accepts but the typings don't yet expose.
|
|
1777
|
-
return {
|
|
1778
|
-
thinking: { type: "adaptive" },
|
|
1779
|
-
effort: thinkingOptionId,
|
|
1780
|
-
};
|
|
1769
|
+
return { thinking: { type: "adaptive" }, effort: thinkingOptionId };
|
|
1781
1770
|
}
|
|
1782
1771
|
return { thinking: undefined, effort: undefined };
|
|
1783
1772
|
}
|
|
@@ -1803,7 +1792,7 @@ class ClaudeAgentSession {
|
|
|
1803
1792
|
this.launchEnv,
|
|
1804
1793
|
],
|
|
1805
1794
|
});
|
|
1806
|
-
const claudeBinary = await
|
|
1795
|
+
const claudeBinary = await this.resolveBinary();
|
|
1807
1796
|
this.logger.debug({
|
|
1808
1797
|
claudeBinary,
|
|
1809
1798
|
pathEnvKey: resolvePathEnvKey(),
|
|
@@ -1821,7 +1810,7 @@ class ClaudeAgentSession {
|
|
|
1821
1810
|
allowDangerouslySkipPermissions: true,
|
|
1822
1811
|
agents: this.defaults?.agents,
|
|
1823
1812
|
canUseTool: this.handlePermissionRequest,
|
|
1824
|
-
|
|
1813
|
+
pathToClaudeCodeExecutable: claudeBinary,
|
|
1825
1814
|
// Use Claude Code preset system prompt and load CLAUDE.md files
|
|
1826
1815
|
// Append provider-agnostic system prompt and orchestrator instructions for agents.
|
|
1827
1816
|
systemPrompt: {
|
|
@@ -1861,10 +1850,7 @@ class ClaudeAgentSession {
|
|
|
1861
1850
|
...this.runtimeSettings.disallowedTools,
|
|
1862
1851
|
];
|
|
1863
1852
|
}
|
|
1864
|
-
return
|
|
1865
|
-
}
|
|
1866
|
-
applyRuntimeSettings(options) {
|
|
1867
|
-
return applyRuntimeSettingsToClaudeOptions(options, this.runtimeSettings, this.launchEnv);
|
|
1853
|
+
return base;
|
|
1868
1854
|
}
|
|
1869
1855
|
normalizeMcpServers(servers) {
|
|
1870
1856
|
const result = {};
|
|
@@ -1881,14 +1867,16 @@ class ClaudeAgentSession {
|
|
|
1881
1867
|
content.push({ type: "text", text: chunk.text });
|
|
1882
1868
|
}
|
|
1883
1869
|
else if (chunk.type === "image") {
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1870
|
+
if (isImageMimeType(chunk.mimeType)) {
|
|
1871
|
+
content.push({
|
|
1872
|
+
type: "image",
|
|
1873
|
+
source: {
|
|
1874
|
+
type: "base64",
|
|
1875
|
+
media_type: chunk.mimeType,
|
|
1876
|
+
data: chunk.data,
|
|
1877
|
+
},
|
|
1878
|
+
});
|
|
1879
|
+
}
|
|
1892
1880
|
}
|
|
1893
1881
|
else {
|
|
1894
1882
|
content.push({ type: "text", text: renderPromptAttachmentAsText(chunk) });
|
|
@@ -2107,7 +2095,7 @@ class ClaudeAgentSession {
|
|
|
2107
2095
|
this.logger.trace({ err: error }, "Claude query pump exited unexpectedly");
|
|
2108
2096
|
});
|
|
2109
2097
|
this.queryPumpPromise = pump;
|
|
2110
|
-
pump.finally(() => {
|
|
2098
|
+
void pump.finally(() => {
|
|
2111
2099
|
if (this.queryPumpPromise === pump) {
|
|
2112
2100
|
this.queryPumpPromise = null;
|
|
2113
2101
|
}
|
|
@@ -2386,7 +2374,7 @@ class ClaudeAgentSession {
|
|
|
2386
2374
|
return;
|
|
2387
2375
|
}
|
|
2388
2376
|
if (message.subtype === "status") {
|
|
2389
|
-
const status = message
|
|
2377
|
+
const status = toObjectRecord(message)?.status;
|
|
2390
2378
|
if (status === "compacting") {
|
|
2391
2379
|
this.compacting = true;
|
|
2392
2380
|
events.push({
|
|
@@ -2412,6 +2400,16 @@ class ClaudeAgentSession {
|
|
|
2412
2400
|
return;
|
|
2413
2401
|
}
|
|
2414
2402
|
if (message.subtype === "task_notification") {
|
|
2403
|
+
// TODO: subagent timelines are best-effort. Subagent task_notifications
|
|
2404
|
+
// arrive without parent_tool_use_id but with tool_use_id pointing at the
|
|
2405
|
+
// parent's Task call, so they slip past the sidechain router and pollute
|
|
2406
|
+
// the parent timeline. Drop them here; eventually thread them into the
|
|
2407
|
+
// parent Task tool call's sub_agent log instead.
|
|
2408
|
+
const taskUseId = message.tool_use_id;
|
|
2409
|
+
const cachedTool = taskUseId ? this.toolUseCache.get(taskUseId) : undefined;
|
|
2410
|
+
if (cachedTool?.name === "Task") {
|
|
2411
|
+
return;
|
|
2412
|
+
}
|
|
2415
2413
|
const taskNotificationItem = mapTaskNotificationSystemRecordToToolCall(message);
|
|
2416
2414
|
if (taskNotificationItem) {
|
|
2417
2415
|
events.push({
|
|
@@ -2523,8 +2521,12 @@ class ClaudeAgentSession {
|
|
|
2523
2521
|
};
|
|
2524
2522
|
}
|
|
2525
2523
|
captureSessionIdFromMessage(message) {
|
|
2526
|
-
const
|
|
2527
|
-
const sessionId = extractSessionIdRaw(
|
|
2524
|
+
const msgRecord = toObjectRecord(message) ?? {};
|
|
2525
|
+
const sessionId = extractSessionIdRaw({
|
|
2526
|
+
session_id: msgRecord.session_id,
|
|
2527
|
+
sessionId: msgRecord.sessionId,
|
|
2528
|
+
session: isObjectRecord(msgRecord.session) ? { id: msgRecord.session.id } : null,
|
|
2529
|
+
}).trim();
|
|
2528
2530
|
if (!sessionId) {
|
|
2529
2531
|
return { threadStartedSessionId: null, notice: null };
|
|
2530
2532
|
}
|
|
@@ -2552,8 +2554,12 @@ class ClaudeAgentSession {
|
|
|
2552
2554
|
if (message.subtype !== "init") {
|
|
2553
2555
|
return { threadStartedSessionId: null, notice: null };
|
|
2554
2556
|
}
|
|
2555
|
-
const
|
|
2556
|
-
const newSessionId = extractSessionIdRaw(
|
|
2557
|
+
const msgRecord = toObjectRecord(message) ?? {};
|
|
2558
|
+
const newSessionId = extractSessionIdRaw({
|
|
2559
|
+
session_id: msgRecord.session_id,
|
|
2560
|
+
sessionId: msgRecord.sessionId,
|
|
2561
|
+
session: isObjectRecord(msgRecord.session) ? { id: msgRecord.session.id } : null,
|
|
2562
|
+
}).trim();
|
|
2557
2563
|
if (!newSessionId) {
|
|
2558
2564
|
return { threadStartedSessionId: null, notice: null };
|
|
2559
2565
|
}
|
|
@@ -2676,10 +2682,10 @@ class ClaudeAgentSession {
|
|
|
2676
2682
|
};
|
|
2677
2683
|
}
|
|
2678
2684
|
trackStreamEventUsage(event) {
|
|
2679
|
-
|
|
2685
|
+
const streamEvent = toObjectRecord(event);
|
|
2686
|
+
if (!streamEvent) {
|
|
2680
2687
|
return null;
|
|
2681
2688
|
}
|
|
2682
|
-
const streamEvent = event;
|
|
2683
2689
|
const eventType = readTrimmedString(streamEvent.type);
|
|
2684
2690
|
if (eventType === "message_start") {
|
|
2685
2691
|
const inputTokens = readStreamRequestInputTokens(streamEvent);
|
|
@@ -2793,7 +2799,12 @@ class ClaudeAgentSession {
|
|
|
2793
2799
|
}
|
|
2794
2800
|
let entry;
|
|
2795
2801
|
try {
|
|
2796
|
-
|
|
2802
|
+
const parsed = JSON.parse(trimmed);
|
|
2803
|
+
const record = toObjectRecord(parsed);
|
|
2804
|
+
if (!record) {
|
|
2805
|
+
return;
|
|
2806
|
+
}
|
|
2807
|
+
entry = record;
|
|
2797
2808
|
}
|
|
2798
2809
|
catch {
|
|
2799
2810
|
return;
|
|
@@ -3334,12 +3345,20 @@ function hasToolLikeBlock(block) {
|
|
|
3334
3345
|
return type.includes("tool");
|
|
3335
3346
|
}
|
|
3336
3347
|
function readCompactionMetadata(source) {
|
|
3337
|
-
const
|
|
3348
|
+
const sourceRecord = toObjectRecord(source);
|
|
3349
|
+
if (!sourceRecord) {
|
|
3350
|
+
return null;
|
|
3351
|
+
}
|
|
3352
|
+
const candidates = [
|
|
3353
|
+
sourceRecord.compact_metadata,
|
|
3354
|
+
sourceRecord.compactMetadata,
|
|
3355
|
+
sourceRecord.compactionMetadata,
|
|
3356
|
+
];
|
|
3338
3357
|
for (const candidate of candidates) {
|
|
3339
|
-
|
|
3358
|
+
const metadata = toObjectRecord(candidate);
|
|
3359
|
+
if (!metadata) {
|
|
3340
3360
|
continue;
|
|
3341
3361
|
}
|
|
3342
|
-
const metadata = candidate;
|
|
3343
3362
|
const trigger = typeof metadata.trigger === "string" ? metadata.trigger : undefined;
|
|
3344
3363
|
const preTokensRaw = metadata.preTokens ?? metadata.pre_tokens;
|
|
3345
3364
|
const preTokens = typeof preTokensRaw === "number" ? preTokensRaw : undefined;
|
|
@@ -3529,10 +3548,10 @@ function isFinishedAccumulator(acc) {
|
|
|
3529
3548
|
return Boolean(acc.sessionId && acc.cwd && acc.title);
|
|
3530
3549
|
}
|
|
3531
3550
|
function applyClaudeSessionEntryToAccumulator(entryRaw, acc) {
|
|
3532
|
-
|
|
3551
|
+
const entry = toObjectRecord(entryRaw);
|
|
3552
|
+
if (!entry) {
|
|
3533
3553
|
return;
|
|
3534
3554
|
}
|
|
3535
|
-
const entry = entryRaw;
|
|
3536
3555
|
if (entry.isSidechain) {
|
|
3537
3556
|
return;
|
|
3538
3557
|
}
|
|
@@ -3616,10 +3635,10 @@ async function parseClaudeSessionDescriptor(filePath, mtime) {
|
|
|
3616
3635
|
};
|
|
3617
3636
|
}
|
|
3618
3637
|
function extractClaudeUserText(messageRaw) {
|
|
3619
|
-
|
|
3638
|
+
const message = toObjectRecord(messageRaw);
|
|
3639
|
+
if (!message) {
|
|
3620
3640
|
return null;
|
|
3621
3641
|
}
|
|
3622
|
-
const message = messageRaw;
|
|
3623
3642
|
if (typeof message.content === "string") {
|
|
3624
3643
|
const normalized = message.content.trim();
|
|
3625
3644
|
return normalized && !isClaudeTranscriptNoiseText(normalized) ? normalized : null;
|
|
@@ -3628,12 +3647,11 @@ function extractClaudeUserText(messageRaw) {
|
|
|
3628
3647
|
const normalized = message.text.trim();
|
|
3629
3648
|
return normalized && !isClaudeTranscriptNoiseText(normalized) ? normalized : null;
|
|
3630
3649
|
}
|
|
3631
|
-
if (
|
|
3650
|
+
if (isUnknownArray(message.content)) {
|
|
3632
3651
|
for (const block of message.content) {
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
|
|
3636
|
-
const normalized = block.text.trim();
|
|
3652
|
+
const blockRecord = toObjectRecord(block);
|
|
3653
|
+
if (blockRecord && typeof blockRecord.text === "string") {
|
|
3654
|
+
const normalized = blockRecord.text.trim();
|
|
3637
3655
|
if (normalized && !isClaudeTranscriptNoiseText(normalized)) {
|
|
3638
3656
|
return normalized;
|
|
3639
3657
|
}
|
|
@@ -3642,4 +3660,4 @@ function extractClaudeUserText(messageRaw) {
|
|
|
3642
3660
|
}
|
|
3643
3661
|
return null;
|
|
3644
3662
|
}
|
|
3645
|
-
//# sourceMappingURL=
|
|
3663
|
+
//# sourceMappingURL=agent.js.map
|