diff --git a/extensions/bluebubbles/src/actions.ts b/extensions/bluebubbles/src/actions.ts index 0f9d708b58..22c5d3e42e 100644 --- a/extensions/bluebubbles/src/actions.ts +++ b/extensions/bluebubbles/src/actions.ts @@ -10,7 +10,6 @@ import { type ChannelMessageActionName, type ChannelToolSend, } from "openclaw/plugin-sdk"; -import type { BlueBubblesSendTarget } from "./types.js"; import { resolveBlueBubblesAccount } from "./accounts.js"; import { sendBlueBubblesAttachment } from "./attachments.js"; import { @@ -27,6 +26,7 @@ import { getCachedBlueBubblesPrivateApiStatus, isMacOS26OrHigher } from "./probe import { sendBlueBubblesReaction } from "./reactions.js"; import { resolveChatGuidForTarget, sendMessageBlueBubbles } from "./send.js"; import { normalizeBlueBubblesHandle, parseBlueBubblesTarget } from "./targets.js"; +import type { BlueBubblesSendTarget } from "./types.js"; const providerId = "bluebubbles"; diff --git a/extensions/bluebubbles/src/attachments.test.ts b/extensions/bluebubbles/src/attachments.test.ts index 60062a6645..78d529106e 100644 --- a/extensions/bluebubbles/src/attachments.test.ts +++ b/extensions/bluebubbles/src/attachments.test.ts @@ -1,9 +1,9 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import "./test-mocks.js"; -import type { BlueBubblesAttachment } from "./types.js"; import { downloadBlueBubblesAttachment, sendBlueBubblesAttachment } from "./attachments.js"; import { getCachedBlueBubblesPrivateApiStatus } from "./probe.js"; import { installBlueBubblesFetchTestHooks } from "./test-harness.js"; +import type { BlueBubblesAttachment } from "./types.js"; const mockFetch = vi.fn(); diff --git a/extensions/bluebubbles/src/attachments.ts b/extensions/bluebubbles/src/attachments.ts index ffccac6fb8..e60022fca2 100644 --- a/extensions/bluebubbles/src/attachments.ts +++ b/extensions/bluebubbles/src/attachments.ts @@ -1,6 +1,6 @@ -import type { OpenClawConfig } from "openclaw/plugin-sdk"; import crypto from "node:crypto"; import path from "node:path"; +import type { OpenClawConfig } from "openclaw/plugin-sdk"; import { resolveBlueBubblesServerAccount } from "./account-resolve.js"; import { postMultipartFormData } from "./multipart.js"; import { getCachedBlueBubblesPrivateApiStatus } from "./probe.js"; diff --git a/extensions/bluebubbles/src/chat.ts b/extensions/bluebubbles/src/chat.ts index 4be9e0d05c..354e707672 100644 --- a/extensions/bluebubbles/src/chat.ts +++ b/extensions/bluebubbles/src/chat.ts @@ -1,6 +1,6 @@ -import type { OpenClawConfig } from "openclaw/plugin-sdk"; import crypto from "node:crypto"; import path from "node:path"; +import type { OpenClawConfig } from "openclaw/plugin-sdk"; import { resolveBlueBubblesServerAccount } from "./account-resolve.js"; import { postMultipartFormData } from "./multipart.js"; import { getCachedBlueBubblesPrivateApiStatus } from "./probe.js"; diff --git a/extensions/bluebubbles/src/media-send.test.ts b/extensions/bluebubbles/src/media-send.test.ts index c5c64d8a27..901c90f2d4 100644 --- a/extensions/bluebubbles/src/media-send.test.ts +++ b/extensions/bluebubbles/src/media-send.test.ts @@ -1,8 +1,8 @@ -import type { OpenClawConfig, PluginRuntime } from "openclaw/plugin-sdk"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { pathToFileURL } from "node:url"; +import type { OpenClawConfig, PluginRuntime } from "openclaw/plugin-sdk"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { sendBlueBubblesMedia } from "./media-send.js"; import { setBlueBubblesRuntime } from "./runtime.js"; diff --git a/extensions/bluebubbles/src/monitor-normalize.ts b/extensions/bluebubbles/src/monitor-normalize.ts index e53f145393..56566f2098 100644 --- a/extensions/bluebubbles/src/monitor-normalize.ts +++ b/extensions/bluebubbles/src/monitor-normalize.ts @@ -1,5 +1,5 @@ -import type { BlueBubblesAttachment } from "./types.js"; import { normalizeBlueBubblesHandle } from "./targets.js"; +import type { BlueBubblesAttachment } from "./types.js"; function asRecord(value: unknown): Record | null { return value && typeof value === "object" && !Array.isArray(value) diff --git a/extensions/bluebubbles/src/monitor-processing.ts b/extensions/bluebubbles/src/monitor-processing.ts index 8fd7bab285..1b5e80352e 100644 --- a/extensions/bluebubbles/src/monitor-processing.ts +++ b/extensions/bluebubbles/src/monitor-processing.ts @@ -7,11 +7,6 @@ import { resolveAckReaction, resolveControlCommandGate, } from "openclaw/plugin-sdk"; -import type { - BlueBubblesCoreRuntime, - BlueBubblesRuntimeEnv, - WebhookTarget, -} from "./monitor-shared.js"; import { downloadBlueBubblesAttachment } from "./attachments.js"; import { markBlueBubblesChatRead, sendBlueBubblesTyping } from "./chat.js"; import { sendBlueBubblesMedia } from "./media-send.js"; @@ -32,6 +27,11 @@ import { resolveBlueBubblesMessageId, resolveReplyContextFromCache, } from "./monitor-reply-cache.js"; +import type { + BlueBubblesCoreRuntime, + BlueBubblesRuntimeEnv, + WebhookTarget, +} from "./monitor-shared.js"; import { getCachedBlueBubblesPrivateApiStatus } from "./probe.js"; import { normalizeBlueBubblesReactionInput, sendBlueBubblesReaction } from "./reactions.js"; import { resolveChatGuidForTarget, sendMessageBlueBubbles } from "./send.js"; diff --git a/extensions/bluebubbles/src/monitor-shared.ts b/extensions/bluebubbles/src/monitor-shared.ts index fa1fa350d4..88e8403941 100644 --- a/extensions/bluebubbles/src/monitor-shared.ts +++ b/extensions/bluebubbles/src/monitor-shared.ts @@ -1,7 +1,7 @@ import type { OpenClawConfig } from "openclaw/plugin-sdk"; import type { ResolvedBlueBubblesAccount } from "./accounts.js"; -import type { BlueBubblesAccountConfig } from "./types.js"; import { getBlueBubblesRuntime } from "./runtime.js"; +import type { BlueBubblesAccountConfig } from "./types.js"; export type BlueBubblesRuntimeEnv = { log?: (message: string) => void; diff --git a/extensions/bluebubbles/src/monitor.test.ts b/extensions/bluebubbles/src/monitor.test.ts index 4c5146ef93..3f08a78c9a 100644 --- a/extensions/bluebubbles/src/monitor.test.ts +++ b/extensions/bluebubbles/src/monitor.test.ts @@ -1,6 +1,6 @@ +import { EventEmitter } from "node:events"; import type { IncomingMessage, ServerResponse } from "node:http"; import type { OpenClawConfig, PluginRuntime } from "openclaw/plugin-sdk"; -import { EventEmitter } from "node:events"; import { removeAckReactionAfterReply, shouldAckReaction } from "openclaw/plugin-sdk"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import type { ResolvedBlueBubblesAccount } from "./accounts.js"; diff --git a/extensions/bluebubbles/src/monitor.ts b/extensions/bluebubbles/src/monitor.ts index b8b5bfab22..9b5bd24091 100644 --- a/extensions/bluebubbles/src/monitor.ts +++ b/extensions/bluebubbles/src/monitor.ts @@ -1,6 +1,6 @@ +import { timingSafeEqual } from "node:crypto"; import type { IncomingMessage, ServerResponse } from "node:http"; import type { OpenClawConfig } from "openclaw/plugin-sdk"; -import { timingSafeEqual } from "node:crypto"; import { registerWebhookTarget, rejectNonPostWebhookRequest, diff --git a/extensions/bluebubbles/src/send-helpers.ts b/extensions/bluebubbles/src/send-helpers.ts index 7c3e4bdabf..53e03a92c8 100644 --- a/extensions/bluebubbles/src/send-helpers.ts +++ b/extensions/bluebubbles/src/send-helpers.ts @@ -1,5 +1,5 @@ -import type { BlueBubblesSendTarget } from "./types.js"; import { normalizeBlueBubblesHandle, parseBlueBubblesTarget } from "./targets.js"; +import type { BlueBubblesSendTarget } from "./types.js"; export function resolveBlueBubblesSendTarget(raw: string): BlueBubblesSendTarget { const parsed = parseBlueBubblesTarget(raw); diff --git a/extensions/bluebubbles/src/send.test.ts b/extensions/bluebubbles/src/send.test.ts index 931ba442c9..c1bcafe29c 100644 --- a/extensions/bluebubbles/src/send.test.ts +++ b/extensions/bluebubbles/src/send.test.ts @@ -1,9 +1,9 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; import "./test-mocks.js"; -import type { BlueBubblesSendTarget } from "./types.js"; import { getCachedBlueBubblesPrivateApiStatus } from "./probe.js"; import { sendMessageBlueBubbles, resolveChatGuidForTarget } from "./send.js"; import { installBlueBubblesFetchTestHooks } from "./test-harness.js"; +import type { BlueBubblesSendTarget } from "./types.js"; const mockFetch = vi.fn(); diff --git a/extensions/bluebubbles/src/send.ts b/extensions/bluebubbles/src/send.ts index 22e13bb3e3..c5614062f5 100644 --- a/extensions/bluebubbles/src/send.ts +++ b/extensions/bluebubbles/src/send.ts @@ -1,5 +1,5 @@ -import type { OpenClawConfig } from "openclaw/plugin-sdk"; import crypto from "node:crypto"; +import type { OpenClawConfig } from "openclaw/plugin-sdk"; import { stripMarkdown } from "openclaw/plugin-sdk"; import { resolveBlueBubblesAccount } from "./accounts.js"; import { getCachedBlueBubblesPrivateApiStatus } from "./probe.js"; diff --git a/extensions/device-pair/index.ts b/extensions/device-pair/index.ts index 2dd05f1a75..7af30d6135 100644 --- a/extensions/device-pair/index.ts +++ b/extensions/device-pair/index.ts @@ -1,5 +1,5 @@ -import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; import os from "node:os"; +import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; import { approveDevicePairing, listDevicePairing } from "openclaw/plugin-sdk"; import qrcode from "qrcode-terminal"; diff --git a/extensions/diagnostics-otel/src/service.ts b/extensions/diagnostics-otel/src/service.ts index 5b747f13cd..101812b2e3 100644 --- a/extensions/diagnostics-otel/src/service.ts +++ b/extensions/diagnostics-otel/src/service.ts @@ -1,6 +1,5 @@ -import type { SeverityNumber } from "@opentelemetry/api-logs"; -import type { DiagnosticEventPayload, OpenClawPluginService } from "openclaw/plugin-sdk"; import { metrics, trace, SpanStatusCode } from "@opentelemetry/api"; +import type { SeverityNumber } from "@opentelemetry/api-logs"; import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http"; import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http"; import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"; @@ -10,6 +9,7 @@ import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics"; import { NodeSDK } from "@opentelemetry/sdk-node"; import { ParentBasedSampler, TraceIdRatioBasedSampler } from "@opentelemetry/sdk-trace-base"; import { SemanticResourceAttributes } from "@opentelemetry/semantic-conventions"; +import type { DiagnosticEventPayload, OpenClawPluginService } from "openclaw/plugin-sdk"; import { onDiagnosticEvent, registerLogTransport } from "openclaw/plugin-sdk"; const DEFAULT_SERVICE_NAME = "openclaw"; diff --git a/extensions/feishu/src/bitable.ts b/extensions/feishu/src/bitable.ts index a198d98736..3fe4640976 100644 --- a/extensions/feishu/src/bitable.ts +++ b/extensions/feishu/src/bitable.ts @@ -1,7 +1,7 @@ -import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; import { Type } from "@sinclair/typebox"; -import type { FeishuConfig } from "./types.js"; +import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; import { createFeishuClient } from "./client.js"; +import type { FeishuConfig } from "./types.js"; // ============ Helpers ============ diff --git a/extensions/feishu/src/bot.ts b/extensions/feishu/src/bot.ts index 1824d3f922..a14a6b8baf 100644 --- a/extensions/feishu/src/bot.ts +++ b/extensions/feishu/src/bot.ts @@ -7,8 +7,6 @@ import { DEFAULT_GROUP_HISTORY_LIMIT, type HistoryEntry, } from "openclaw/plugin-sdk"; -import type { FeishuMessageContext, FeishuMediaInfo, ResolvedFeishuAccount } from "./types.js"; -import type { DynamicAgentCreationConfig } from "./types.js"; import { resolveFeishuAccount } from "./accounts.js"; import { createFeishuClient } from "./client.js"; import { tryRecordMessage } from "./dedup.js"; @@ -24,6 +22,8 @@ import { import { createFeishuReplyDispatcher } from "./reply-dispatcher.js"; import { getFeishuRuntime } from "./runtime.js"; import { getMessageFeishu, sendMessageFeishu } from "./send.js"; +import type { FeishuMessageContext, FeishuMediaInfo, ResolvedFeishuAccount } from "./types.js"; +import type { DynamicAgentCreationConfig } from "./types.js"; // --- Permission error extraction --- // Extract permission grant URL from Feishu API error response. diff --git a/extensions/feishu/src/channel.ts b/extensions/feishu/src/channel.ts index fb7881f230..646e7a1ccd 100644 --- a/extensions/feishu/src/channel.ts +++ b/extensions/feishu/src/channel.ts @@ -5,7 +5,6 @@ import { DEFAULT_ACCOUNT_ID, PAIRING_APPROVED_MESSAGE, } from "openclaw/plugin-sdk"; -import type { ResolvedFeishuAccount, FeishuConfig } from "./types.js"; import { resolveFeishuAccount, resolveFeishuCredentials, @@ -24,6 +23,7 @@ import { resolveFeishuGroupToolPolicy } from "./policy.js"; import { probeFeishu } from "./probe.js"; import { sendMessageFeishu } from "./send.js"; import { normalizeFeishuTarget, looksLikeFeishuId, formatFeishuTarget } from "./targets.js"; +import type { ResolvedFeishuAccount, FeishuConfig } from "./types.js"; const meta: ChannelMeta = { id: "feishu", diff --git a/extensions/feishu/src/docx.ts b/extensions/feishu/src/docx.ts index bb0a9262f9..195cc8c81e 100644 --- a/extensions/feishu/src/docx.ts +++ b/extensions/feishu/src/docx.ts @@ -1,7 +1,7 @@ -import type * as Lark from "@larksuiteoapi/node-sdk"; -import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; -import { Type } from "@sinclair/typebox"; import { Readable } from "stream"; +import type * as Lark from "@larksuiteoapi/node-sdk"; +import { Type } from "@sinclair/typebox"; +import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; import { listEnabledFeishuAccounts } from "./accounts.js"; import { createFeishuClient } from "./client.js"; import { FeishuDocSchema, type FeishuDocParams } from "./doc-schema.js"; diff --git a/extensions/feishu/src/dynamic-agent.ts b/extensions/feishu/src/dynamic-agent.ts index 05a0610324..d62c3f2a43 100644 --- a/extensions/feishu/src/dynamic-agent.ts +++ b/extensions/feishu/src/dynamic-agent.ts @@ -1,7 +1,7 @@ -import type { OpenClawConfig, PluginRuntime } from "openclaw/plugin-sdk"; import fs from "node:fs"; import os from "node:os"; import path from "node:path"; +import type { OpenClawConfig, PluginRuntime } from "openclaw/plugin-sdk"; import type { DynamicAgentCreationConfig } from "./types.js"; export type MaybeCreateDynamicAgentResult = { diff --git a/extensions/feishu/src/media.ts b/extensions/feishu/src/media.ts index 4159d00e2d..fad32d38c2 100644 --- a/extensions/feishu/src/media.ts +++ b/extensions/feishu/src/media.ts @@ -1,8 +1,8 @@ -import type { ClawdbotConfig } from "openclaw/plugin-sdk"; import fs from "fs"; import os from "os"; import path from "path"; import { Readable } from "stream"; +import type { ClawdbotConfig } from "openclaw/plugin-sdk"; import { resolveFeishuAccount } from "./accounts.js"; import { createFeishuClient } from "./client.js"; import { getFeishuRuntime } from "./runtime.js"; diff --git a/extensions/feishu/src/monitor.ts b/extensions/feishu/src/monitor.ts index 51af5a4aeb..5e0b122656 100644 --- a/extensions/feishu/src/monitor.ts +++ b/extensions/feishu/src/monitor.ts @@ -1,16 +1,16 @@ -import * as Lark from "@larksuiteoapi/node-sdk"; import * as http from "http"; +import * as Lark from "@larksuiteoapi/node-sdk"; import { type ClawdbotConfig, type RuntimeEnv, type HistoryEntry, installRequestBodyLimitGuard, } from "openclaw/plugin-sdk"; -import type { ResolvedFeishuAccount } from "./types.js"; import { resolveFeishuAccount, listEnabledFeishuAccounts } from "./accounts.js"; import { handleFeishuMessage, type FeishuMessageEvent, type FeishuBotAddedEvent } from "./bot.js"; import { createFeishuWSClient, createEventDispatcher } from "./client.js"; import { probeFeishu } from "./probe.js"; +import type { ResolvedFeishuAccount } from "./types.js"; export type MonitorFeishuOpts = { config?: ClawdbotConfig; diff --git a/extensions/feishu/src/onboarding.ts b/extensions/feishu/src/onboarding.ts index 3b56071074..a2cf02dd24 100644 --- a/extensions/feishu/src/onboarding.ts +++ b/extensions/feishu/src/onboarding.ts @@ -6,9 +6,9 @@ import type { WizardPrompter, } from "openclaw/plugin-sdk"; import { addWildcardAllowFrom, DEFAULT_ACCOUNT_ID, formatDocsLink } from "openclaw/plugin-sdk"; -import type { FeishuConfig } from "./types.js"; import { resolveFeishuCredentials } from "./accounts.js"; import { probeFeishu } from "./probe.js"; +import type { FeishuConfig } from "./types.js"; const channel = "feishu" as const; diff --git a/extensions/feishu/src/probe.ts b/extensions/feishu/src/probe.ts index 3de5bc55dc..d96ff49153 100644 --- a/extensions/feishu/src/probe.ts +++ b/extensions/feishu/src/probe.ts @@ -1,5 +1,5 @@ -import type { FeishuProbeResult } from "./types.js"; import { createFeishuClient, type FeishuClientCredentials } from "./client.js"; +import type { FeishuProbeResult } from "./types.js"; export async function probeFeishu(creds?: FeishuClientCredentials): Promise { if (!creds?.appId || !creds?.appSecret) { diff --git a/extensions/feishu/src/reply-dispatcher.ts b/extensions/feishu/src/reply-dispatcher.ts index 7b3fae2cb5..940370cd9f 100644 --- a/extensions/feishu/src/reply-dispatcher.ts +++ b/extensions/feishu/src/reply-dispatcher.ts @@ -6,9 +6,9 @@ import { type ReplyPayload, type RuntimeEnv, } from "openclaw/plugin-sdk"; -import type { MentionTarget } from "./mention.js"; import { resolveFeishuAccount } from "./accounts.js"; import { createFeishuClient } from "./client.js"; +import type { MentionTarget } from "./mention.js"; import { buildMentionedCardContent } from "./mention.js"; import { getFeishuRuntime } from "./runtime.js"; import { sendMarkdownCardFeishu, sendMessageFeishu } from "./send.js"; diff --git a/extensions/feishu/src/send.ts b/extensions/feishu/src/send.ts index cc546c9723..c97601cccc 100644 --- a/extensions/feishu/src/send.ts +++ b/extensions/feishu/src/send.ts @@ -1,12 +1,12 @@ import type { ClawdbotConfig } from "openclaw/plugin-sdk"; -import type { MentionTarget } from "./mention.js"; -import type { FeishuSendResult, ResolvedFeishuAccount } from "./types.js"; import { resolveFeishuAccount } from "./accounts.js"; import { createFeishuClient } from "./client.js"; +import type { MentionTarget } from "./mention.js"; import { buildMentionedMessage, buildMentionedCardContent } from "./mention.js"; import { getFeishuRuntime } from "./runtime.js"; import { assertFeishuMessageApiSuccess, toFeishuSendResult } from "./send-result.js"; import { resolveReceiveIdType, normalizeFeishuTarget } from "./targets.js"; +import type { FeishuSendResult, ResolvedFeishuAccount } from "./types.js"; export type FeishuMessageInfo = { messageId: string; diff --git a/extensions/googlechat/src/api.ts b/extensions/googlechat/src/api.ts index a0cf0acf57..f8bcd65fc1 100644 --- a/extensions/googlechat/src/api.ts +++ b/extensions/googlechat/src/api.ts @@ -1,7 +1,7 @@ import crypto from "node:crypto"; import type { ResolvedGoogleChatAccount } from "./accounts.js"; -import type { GoogleChatReaction } from "./types.js"; import { getGoogleChatAccessToken } from "./auth.js"; +import type { GoogleChatReaction } from "./types.js"; const CHAT_API_BASE = "https://chat.googleapis.com/v1"; const CHAT_UPLOAD_BASE = "https://chat.googleapis.com/upload/v1"; diff --git a/extensions/googlechat/src/monitor.ts b/extensions/googlechat/src/monitor.ts index 809c65fb23..272f3abc83 100644 --- a/extensions/googlechat/src/monitor.ts +++ b/extensions/googlechat/src/monitor.ts @@ -10,14 +10,6 @@ import { requestBodyErrorToText, resolveMentionGatingWithBypass, } from "openclaw/plugin-sdk"; -import type { - GoogleChatAnnotation, - GoogleChatAttachment, - GoogleChatEvent, - GoogleChatSpace, - GoogleChatMessage, - GoogleChatUser, -} from "./types.js"; import { type ResolvedGoogleChatAccount } from "./accounts.js"; import { downloadGoogleChatMedia, @@ -27,6 +19,14 @@ import { } from "./api.js"; import { verifyGoogleChatRequest, type GoogleChatAudienceType } from "./auth.js"; import { getGoogleChatRuntime } from "./runtime.js"; +import type { + GoogleChatAnnotation, + GoogleChatAttachment, + GoogleChatEvent, + GoogleChatSpace, + GoogleChatMessage, + GoogleChatUser, +} from "./types.js"; export type GoogleChatRuntimeEnv = { log?: (message: string) => void; diff --git a/extensions/googlechat/src/monitor.webhook-routing.test.ts b/extensions/googlechat/src/monitor.webhook-routing.test.ts index 1fb515e9b0..adf21bf98b 100644 --- a/extensions/googlechat/src/monitor.webhook-routing.test.ts +++ b/extensions/googlechat/src/monitor.webhook-routing.test.ts @@ -1,9 +1,9 @@ +import { EventEmitter } from "node:events"; import type { IncomingMessage } from "node:http"; import type { OpenClawConfig, PluginRuntime } from "openclaw/plugin-sdk"; -import { EventEmitter } from "node:events"; import { describe, expect, it, vi } from "vitest"; -import type { ResolvedGoogleChatAccount } from "./accounts.js"; import { createMockServerResponse } from "../../../src/test-utils/mock-http-response.js"; +import type { ResolvedGoogleChatAccount } from "./accounts.js"; import { verifyGoogleChatRequest } from "./auth.js"; import { handleGoogleChatWebhookRequest, registerGoogleChatWebhookTarget } from "./monitor.js"; diff --git a/extensions/irc/src/channel.ts b/extensions/irc/src/channel.ts index 4ab0df5203..4c39012831 100644 --- a/extensions/irc/src/channel.ts +++ b/extensions/irc/src/channel.ts @@ -8,7 +8,6 @@ import { deleteAccountFromConfigSection, type ChannelPlugin, } from "openclaw/plugin-sdk"; -import type { CoreConfig, IrcProbe } from "./types.js"; import { listIrcAccountIds, resolveDefaultIrcAccountId, @@ -28,6 +27,7 @@ import { resolveIrcGroupMatch, resolveIrcRequireMention } from "./policy.js"; import { probeIrc } from "./probe.js"; import { getIrcRuntime } from "./runtime.js"; import { sendMessageIrc } from "./send.js"; +import type { CoreConfig, IrcProbe } from "./types.js"; const meta = getChatChannelMeta("irc"); diff --git a/extensions/irc/src/inbound.ts b/extensions/irc/src/inbound.ts index 2c9c3ee9f6..01c69285e2 100644 --- a/extensions/irc/src/inbound.ts +++ b/extensions/irc/src/inbound.ts @@ -6,7 +6,6 @@ import { type RuntimeEnv, } from "openclaw/plugin-sdk"; import type { ResolvedIrcAccount } from "./accounts.js"; -import type { CoreConfig, IrcInboundMessage } from "./types.js"; import { normalizeIrcAllowlist, resolveIrcAllowlistMatch } from "./normalize.js"; import { resolveIrcMentionGate, @@ -17,6 +16,7 @@ import { } from "./policy.js"; import { getIrcRuntime } from "./runtime.js"; import { sendMessageIrc } from "./send.js"; +import type { CoreConfig, IrcInboundMessage } from "./types.js"; const CHANNEL_ID = "irc" as const; diff --git a/extensions/irc/src/monitor.ts b/extensions/irc/src/monitor.ts index 4a7a987178..d4dbec89db 100644 --- a/extensions/irc/src/monitor.ts +++ b/extensions/irc/src/monitor.ts @@ -1,5 +1,4 @@ import type { RuntimeEnv } from "openclaw/plugin-sdk"; -import type { CoreConfig, IrcInboundMessage } from "./types.js"; import { resolveIrcAccount } from "./accounts.js"; import { connectIrcClient, type IrcClient } from "./client.js"; import { buildIrcConnectOptions } from "./connect-options.js"; @@ -7,6 +6,7 @@ import { handleIrcInbound } from "./inbound.js"; import { isChannelTarget } from "./normalize.js"; import { makeIrcMessageId } from "./protocol.js"; import { getIrcRuntime } from "./runtime.js"; +import type { CoreConfig, IrcInboundMessage } from "./types.js"; export type IrcMonitorOptions = { accountId?: string; diff --git a/extensions/irc/src/normalize.ts b/extensions/irc/src/normalize.ts index 0860efa5e0..89d135dbfd 100644 --- a/extensions/irc/src/normalize.ts +++ b/extensions/irc/src/normalize.ts @@ -1,5 +1,5 @@ -import type { IrcInboundMessage } from "./types.js"; import { hasIrcControlChars } from "./control-chars.js"; +import type { IrcInboundMessage } from "./types.js"; const IRC_TARGET_PATTERN = /^[^\s:]+$/u; diff --git a/extensions/irc/src/onboarding.test.ts b/extensions/irc/src/onboarding.test.ts index cb9e78e590..e0493f270c 100644 --- a/extensions/irc/src/onboarding.test.ts +++ b/extensions/irc/src/onboarding.test.ts @@ -1,7 +1,7 @@ import type { RuntimeEnv, WizardPrompter } from "openclaw/plugin-sdk"; import { describe, expect, it, vi } from "vitest"; -import type { CoreConfig } from "./types.js"; import { ircOnboardingAdapter } from "./onboarding.js"; +import type { CoreConfig } from "./types.js"; const selectFirstOption = async (params: { options: Array<{ value: T }> }): Promise => { const first = params.options[0]; diff --git a/extensions/irc/src/onboarding.ts b/extensions/irc/src/onboarding.ts index 6f0508f676..2b2cecf8e4 100644 --- a/extensions/irc/src/onboarding.ts +++ b/extensions/irc/src/onboarding.ts @@ -9,13 +9,13 @@ import { type DmPolicy, type WizardPrompter, } from "openclaw/plugin-sdk"; -import type { CoreConfig, IrcAccountConfig, IrcNickServConfig } from "./types.js"; import { listIrcAccountIds, resolveDefaultIrcAccountId, resolveIrcAccount } from "./accounts.js"; import { isChannelTarget, normalizeIrcAllowEntry, normalizeIrcMessagingTarget, } from "./normalize.js"; +import type { CoreConfig, IrcAccountConfig, IrcNickServConfig } from "./types.js"; const channel = "irc" as const; diff --git a/extensions/irc/src/policy.ts b/extensions/irc/src/policy.ts index 7faa24f4d5..81828a5ac0 100644 --- a/extensions/irc/src/policy.ts +++ b/extensions/irc/src/policy.ts @@ -1,6 +1,6 @@ +import { normalizeIrcAllowlist, resolveIrcAllowlistMatch } from "./normalize.js"; import type { IrcAccountConfig, IrcChannelConfig } from "./types.js"; import type { IrcInboundMessage } from "./types.js"; -import { normalizeIrcAllowlist, resolveIrcAllowlistMatch } from "./normalize.js"; export type IrcGroupMatch = { allowed: boolean; diff --git a/extensions/irc/src/probe.ts b/extensions/irc/src/probe.ts index 367741b6b3..e18dee1f84 100644 --- a/extensions/irc/src/probe.ts +++ b/extensions/irc/src/probe.ts @@ -1,7 +1,7 @@ -import type { CoreConfig, IrcProbe } from "./types.js"; import { resolveIrcAccount } from "./accounts.js"; import { connectIrcClient } from "./client.js"; import { buildIrcConnectOptions } from "./connect-options.js"; +import type { CoreConfig, IrcProbe } from "./types.js"; function formatError(err: unknown): string { if (err instanceof Error) { diff --git a/extensions/irc/src/send.ts b/extensions/irc/src/send.ts index 70d8cb370b..e60859d44e 100644 --- a/extensions/irc/src/send.ts +++ b/extensions/irc/src/send.ts @@ -1,11 +1,11 @@ -import type { IrcClient } from "./client.js"; -import type { CoreConfig } from "./types.js"; import { resolveIrcAccount } from "./accounts.js"; +import type { IrcClient } from "./client.js"; import { connectIrcClient } from "./client.js"; import { buildIrcConnectOptions } from "./connect-options.js"; import { normalizeIrcMessagingTarget } from "./normalize.js"; import { makeIrcMessageId } from "./protocol.js"; import { getIrcRuntime } from "./runtime.js"; +import type { CoreConfig } from "./types.js"; type SendIrcOptions = { accountId?: string; diff --git a/extensions/llm-task/src/llm-task-tool.ts b/extensions/llm-task/src/llm-task-tool.ts index 9bec5fdad2..f40d0351fe 100644 --- a/extensions/llm-task/src/llm-task-tool.ts +++ b/extensions/llm-task/src/llm-task-tool.ts @@ -1,8 +1,8 @@ -import { Type } from "@sinclair/typebox"; -import Ajv from "ajv"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import { Type } from "@sinclair/typebox"; +import Ajv from "ajv"; // NOTE: This extension is intended to be bundled with OpenClaw. // When running from source (tests/dev), OpenClaw internals live under src/. // When running from a built install, internals live under dist/ (no src/ tree). diff --git a/extensions/lobster/src/lobster-tool.ts b/extensions/lobster/src/lobster-tool.ts index aa2fbccbed..b34bea6128 100644 --- a/extensions/lobster/src/lobster-tool.ts +++ b/extensions/lobster/src/lobster-tool.ts @@ -1,7 +1,7 @@ -import { Type } from "@sinclair/typebox"; import { spawn } from "node:child_process"; import fs from "node:fs"; import path from "node:path"; +import { Type } from "@sinclair/typebox"; import type { OpenClawPluginApi } from "../../../src/plugins/types.js"; type LobsterEnvelope = diff --git a/extensions/matrix/src/actions.ts b/extensions/matrix/src/actions.ts index 5cbf8eff88..868d46632c 100644 --- a/extensions/matrix/src/actions.ts +++ b/extensions/matrix/src/actions.ts @@ -7,9 +7,9 @@ import { type ChannelMessageActionName, type ChannelToolSend, } from "openclaw/plugin-sdk"; -import type { CoreConfig } from "./types.js"; import { resolveMatrixAccount } from "./matrix/accounts.js"; import { handleMatrixAction } from "./tool-actions.js"; +import type { CoreConfig } from "./types.js"; export const matrixMessageActions: ChannelMessageActionAdapter = { listActions: ({ cfg }) => { diff --git a/extensions/matrix/src/channel.directory.test.ts b/extensions/matrix/src/channel.directory.test.ts index 5a3703e29b..5fc6bbe28f 100644 --- a/extensions/matrix/src/channel.directory.test.ts +++ b/extensions/matrix/src/channel.directory.test.ts @@ -1,8 +1,8 @@ import type { PluginRuntime, RuntimeEnv } from "openclaw/plugin-sdk"; import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { CoreConfig } from "./types.js"; import { matrixPlugin } from "./channel.js"; import { setMatrixRuntime } from "./runtime.js"; +import type { CoreConfig } from "./types.js"; vi.mock("@vector-im/matrix-bot-sdk", () => ({ ConsoleLogger: class { diff --git a/extensions/matrix/src/channel.ts b/extensions/matrix/src/channel.ts index dc2ff62284..3cd699f252 100644 --- a/extensions/matrix/src/channel.ts +++ b/extensions/matrix/src/channel.ts @@ -9,7 +9,6 @@ import { setAccountEnabledInConfigSection, type ChannelPlugin, } from "openclaw/plugin-sdk"; -import type { CoreConfig } from "./types.js"; import { matrixMessageActions } from "./actions.js"; import { MatrixConfigSchema } from "./config-schema.js"; import { listMatrixDirectoryGroupsLive, listMatrixDirectoryPeersLive } from "./directory-live.js"; @@ -31,6 +30,7 @@ import { sendMessageMatrix } from "./matrix/send.js"; import { matrixOnboardingAdapter } from "./onboarding.js"; import { matrixOutbound } from "./outbound.js"; import { resolveMatrixTargets } from "./resolve-targets.js"; +import type { CoreConfig } from "./types.js"; // Mutex for serializing account startup (workaround for concurrent dynamic import race condition) let matrixStartupLock: Promise = Promise.resolve(); diff --git a/extensions/matrix/src/group-mentions.ts b/extensions/matrix/src/group-mentions.ts index 8f36f6d954..b324b4197a 100644 --- a/extensions/matrix/src/group-mentions.ts +++ b/extensions/matrix/src/group-mentions.ts @@ -1,7 +1,7 @@ import type { ChannelGroupContext, GroupToolPolicyConfig } from "openclaw/plugin-sdk"; -import type { CoreConfig } from "./types.js"; import { resolveMatrixAccountConfig } from "./matrix/accounts.js"; import { resolveMatrixRoomConfig } from "./matrix/monitor/rooms.js"; +import type { CoreConfig } from "./types.js"; function stripLeadingPrefixCaseInsensitive(value: string, prefix: string): string { return value.toLowerCase().startsWith(prefix.toLowerCase()) diff --git a/extensions/matrix/src/matrix/actions/client.ts b/extensions/matrix/src/matrix/actions/client.ts index 778ab480ac..f422e09a96 100644 --- a/extensions/matrix/src/matrix/actions/client.ts +++ b/extensions/matrix/src/matrix/actions/client.ts @@ -1,10 +1,10 @@ import { normalizeAccountId } from "openclaw/plugin-sdk/account-id"; -import type { CoreConfig } from "../../types.js"; -import type { MatrixActionClient, MatrixActionClientOpts } from "./types.js"; import { getMatrixRuntime } from "../../runtime.js"; +import type { CoreConfig } from "../../types.js"; import { getActiveMatrixClient } from "../active-client.js"; import { createPreparedMatrixClient } from "../client-bootstrap.js"; import { isBunRuntime, resolveMatrixAuth, resolveSharedMatrixClient } from "../client.js"; +import type { MatrixActionClient, MatrixActionClientOpts } from "./types.js"; export function ensureNodeRuntime() { if (isBunRuntime()) { diff --git a/extensions/matrix/src/matrix/client/config.ts b/extensions/matrix/src/matrix/client/config.ts index ef3325e122..e29923d4cc 100644 --- a/extensions/matrix/src/matrix/client/config.ts +++ b/extensions/matrix/src/matrix/client/config.ts @@ -1,9 +1,9 @@ import { MatrixClient } from "@vector-im/matrix-bot-sdk"; import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id"; -import type { CoreConfig } from "../../types.js"; -import type { MatrixAuth, MatrixResolvedConfig } from "./types.js"; import { getMatrixRuntime } from "../../runtime.js"; +import type { CoreConfig } from "../../types.js"; import { ensureMatrixSdkLoggingConfigured } from "./logging.js"; +import type { MatrixAuth, MatrixResolvedConfig } from "./types.js"; function clean(value?: string): string { return value?.trim() ?? ""; diff --git a/extensions/matrix/src/matrix/client/create-client.ts b/extensions/matrix/src/matrix/client/create-client.ts index d2dc7eaf84..dd9c99214b 100644 --- a/extensions/matrix/src/matrix/client/create-client.ts +++ b/extensions/matrix/src/matrix/client/create-client.ts @@ -1,3 +1,4 @@ +import fs from "node:fs"; import type { IStorageProvider, ICryptoStorageProvider } from "@vector-im/matrix-bot-sdk"; import { LogService, @@ -5,7 +6,6 @@ import { SimpleFsStorageProvider, RustSdkCryptoStorageProvider, } from "@vector-im/matrix-bot-sdk"; -import fs from "node:fs"; import { ensureMatrixSdkLoggingConfigured } from "./logging.js"; import { maybeMigrateLegacyStorage, diff --git a/extensions/matrix/src/matrix/client/shared.ts b/extensions/matrix/src/matrix/client/shared.ts index 5bdb412bc6..c04c61829a 100644 --- a/extensions/matrix/src/matrix/client/shared.ts +++ b/extensions/matrix/src/matrix/client/shared.ts @@ -2,10 +2,10 @@ import type { MatrixClient } from "@vector-im/matrix-bot-sdk"; import { LogService } from "@vector-im/matrix-bot-sdk"; import { normalizeAccountId } from "openclaw/plugin-sdk/account-id"; import type { CoreConfig } from "../../types.js"; -import type { MatrixAuth } from "./types.js"; import { resolveMatrixAuth } from "./config.js"; import { createMatrixClient } from "./create-client.js"; import { DEFAULT_ACCOUNT_KEY } from "./storage.js"; +import type { MatrixAuth } from "./types.js"; type SharedMatrixClientState = { client: MatrixClient; diff --git a/extensions/matrix/src/matrix/client/storage.ts b/extensions/matrix/src/matrix/client/storage.ts index 1c9dfbf337..32f9768c68 100644 --- a/extensions/matrix/src/matrix/client/storage.ts +++ b/extensions/matrix/src/matrix/client/storage.ts @@ -2,8 +2,8 @@ import crypto from "node:crypto"; import fs from "node:fs"; import os from "node:os"; import path from "node:path"; -import type { MatrixStoragePaths } from "./types.js"; import { getMatrixRuntime } from "../../runtime.js"; +import type { MatrixStoragePaths } from "./types.js"; export const DEFAULT_ACCOUNT_KEY = "default"; const STORAGE_META_FILENAME = "storage-meta.json"; diff --git a/extensions/matrix/src/matrix/deps.ts b/extensions/matrix/src/matrix/deps.ts index 67fb5244a1..6cddbdf23e 100644 --- a/extensions/matrix/src/matrix/deps.ts +++ b/extensions/matrix/src/matrix/deps.ts @@ -1,8 +1,8 @@ -import type { RuntimeEnv } from "openclaw/plugin-sdk"; import fs from "node:fs"; import { createRequire } from "node:module"; import path from "node:path"; import { fileURLToPath } from "node:url"; +import type { RuntimeEnv } from "openclaw/plugin-sdk"; import { getMatrixRuntime } from "../runtime.js"; const MATRIX_SDK_PACKAGE = "@vector-im/matrix-bot-sdk"; diff --git a/extensions/matrix/src/matrix/monitor/auto-join.ts b/extensions/matrix/src/matrix/monitor/auto-join.ts index 6fb36b93f1..9f36ae405d 100644 --- a/extensions/matrix/src/matrix/monitor/auto-join.ts +++ b/extensions/matrix/src/matrix/monitor/auto-join.ts @@ -1,8 +1,8 @@ import type { MatrixClient } from "@vector-im/matrix-bot-sdk"; -import type { RuntimeEnv } from "openclaw/plugin-sdk"; import { AutojoinRoomsMixin } from "@vector-im/matrix-bot-sdk"; -import type { CoreConfig } from "../../types.js"; +import type { RuntimeEnv } from "openclaw/plugin-sdk"; import { getMatrixRuntime } from "../../runtime.js"; +import type { CoreConfig } from "../../types.js"; export function registerMatrixAutoJoin(params: { client: MatrixClient; diff --git a/extensions/matrix/src/matrix/monitor/handler.ts b/extensions/matrix/src/matrix/monitor/handler.ts index f370701b71..ae8e864302 100644 --- a/extensions/matrix/src/matrix/monitor/handler.ts +++ b/extensions/matrix/src/matrix/monitor/handler.ts @@ -11,7 +11,6 @@ import { type RuntimeLogger, } from "openclaw/plugin-sdk"; import type { CoreConfig, MatrixRoomConfig, ReplyToMode } from "../../types.js"; -import type { MatrixRawEvent, RoomMessageEventContent } from "./types.js"; import { fetchEventSummary } from "../actions/summary.js"; import { formatPollAsText, @@ -36,6 +35,7 @@ import { resolveMentions } from "./mentions.js"; import { deliverMatrixReplies } from "./replies.js"; import { resolveMatrixRoomConfig } from "./rooms.js"; import { resolveMatrixThreadRootId, resolveMatrixThreadTarget } from "./threads.js"; +import type { MatrixRawEvent, RoomMessageEventContent } from "./types.js"; import { EventType, RelationType } from "./types.js"; export type MatrixMonitorHandlerParams = { diff --git a/extensions/matrix/src/matrix/monitor/index.ts b/extensions/matrix/src/matrix/monitor/index.ts index 37c441bbe3..df6d87fad4 100644 --- a/extensions/matrix/src/matrix/monitor/index.ts +++ b/extensions/matrix/src/matrix/monitor/index.ts @@ -1,8 +1,8 @@ import { format } from "node:util"; import { mergeAllowlist, summarizeMapping, type RuntimeEnv } from "openclaw/plugin-sdk"; -import type { CoreConfig, ReplyToMode } from "../../types.js"; import { resolveMatrixTargets } from "../../resolve-targets.js"; import { getMatrixRuntime } from "../../runtime.js"; +import type { CoreConfig, ReplyToMode } from "../../types.js"; import { resolveMatrixAccount } from "../accounts.js"; import { setActiveMatrixClient } from "../active-client.js"; import { diff --git a/extensions/matrix/src/matrix/send/client.ts b/extensions/matrix/src/matrix/send/client.ts index caafbfd458..9eee35e88b 100644 --- a/extensions/matrix/src/matrix/send/client.ts +++ b/extensions/matrix/src/matrix/send/client.ts @@ -1,7 +1,7 @@ import type { MatrixClient } from "@vector-im/matrix-bot-sdk"; import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id"; -import type { CoreConfig } from "../../types.js"; import { getMatrixRuntime } from "../../runtime.js"; +import type { CoreConfig } from "../../types.js"; import { getActiveMatrixClient, getAnyActiveMatrixClient } from "../active-client.js"; import { createPreparedMatrixClient } from "../client-bootstrap.js"; import { isBunRuntime, resolveMatrixAuth, resolveSharedMatrixClient } from "../client.js"; diff --git a/extensions/matrix/src/onboarding.ts b/extensions/matrix/src/onboarding.ts index b99f1eb9fe..3ad9588c06 100644 --- a/extensions/matrix/src/onboarding.ts +++ b/extensions/matrix/src/onboarding.ts @@ -8,11 +8,11 @@ import { type ChannelOnboardingDmPolicy, type WizardPrompter, } from "openclaw/plugin-sdk"; -import type { CoreConfig } from "./types.js"; import { listMatrixDirectoryGroupsLive } from "./directory-live.js"; import { resolveMatrixAccount } from "./matrix/accounts.js"; import { ensureMatrixSdkInstalled, isMatrixSdkAvailable } from "./matrix/deps.js"; import { resolveMatrixTargets } from "./resolve-targets.js"; +import type { CoreConfig } from "./types.js"; const channel = "matrix" as const; diff --git a/extensions/matrix/src/tool-actions.ts b/extensions/matrix/src/tool-actions.ts index 83ccecd7a8..7105058a44 100644 --- a/extensions/matrix/src/tool-actions.ts +++ b/extensions/matrix/src/tool-actions.ts @@ -6,7 +6,6 @@ import { readReactionParams, readStringParam, } from "openclaw/plugin-sdk"; -import type { CoreConfig } from "./types.js"; import { deleteMatrixMessage, editMatrixMessage, @@ -21,6 +20,7 @@ import { unpinMatrixMessage, } from "./matrix/actions.js"; import { reactMatrixMessage } from "./matrix/send.js"; +import type { CoreConfig } from "./types.js"; const messageActions = new Set(["sendMessage", "editMessage", "deleteMessage", "readMessages"]); const reactionActions = new Set(["react", "reactions"]); diff --git a/extensions/memory-lancedb/index.ts b/extensions/memory-lancedb/index.ts index f9ba0b98de..f712832511 100644 --- a/extensions/memory-lancedb/index.ts +++ b/extensions/memory-lancedb/index.ts @@ -6,11 +6,11 @@ * Provides seamless auto-recall and auto-capture via lifecycle hooks. */ -import type * as LanceDB from "@lancedb/lancedb"; -import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; -import { Type } from "@sinclair/typebox"; import { randomUUID } from "node:crypto"; +import type * as LanceDB from "@lancedb/lancedb"; +import { Type } from "@sinclair/typebox"; import OpenAI from "openai"; +import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; import { DEFAULT_CAPTURE_MAX_CHARS, MEMORY_CATEGORIES, diff --git a/extensions/msteams/src/attachments/download.ts b/extensions/msteams/src/attachments/download.ts index 704ba0f7f7..3a49871d31 100644 --- a/extensions/msteams/src/attachments/download.ts +++ b/extensions/msteams/src/attachments/download.ts @@ -1,8 +1,3 @@ -import type { - MSTeamsAccessTokenProvider, - MSTeamsAttachmentLike, - MSTeamsInboundMedia, -} from "./types.js"; import { getMSTeamsRuntime } from "../runtime.js"; import { extractInlineImageCandidates, @@ -14,6 +9,11 @@ import { resolveAuthAllowedHosts, resolveAllowedHosts, } from "./shared.js"; +import type { + MSTeamsAccessTokenProvider, + MSTeamsAttachmentLike, + MSTeamsInboundMedia, +} from "./types.js"; type DownloadCandidate = { url: string; diff --git a/extensions/msteams/src/attachments/graph.ts b/extensions/msteams/src/attachments/graph.ts index 2bd0148add..72133f8145 100644 --- a/extensions/msteams/src/attachments/graph.ts +++ b/extensions/msteams/src/attachments/graph.ts @@ -1,9 +1,3 @@ -import type { - MSTeamsAccessTokenProvider, - MSTeamsAttachmentLike, - MSTeamsGraphMediaResult, - MSTeamsInboundMedia, -} from "./types.js"; import { getMSTeamsRuntime } from "../runtime.js"; import { downloadMSTeamsAttachments } from "./download.js"; import { @@ -13,6 +7,12 @@ import { normalizeContentType, resolveAllowedHosts, } from "./shared.js"; +import type { + MSTeamsAccessTokenProvider, + MSTeamsAttachmentLike, + MSTeamsGraphMediaResult, + MSTeamsInboundMedia, +} from "./types.js"; type GraphHostedContent = { id?: string | null; diff --git a/extensions/msteams/src/attachments/html.ts b/extensions/msteams/src/attachments/html.ts index a1983d452d..33c5d28a86 100644 --- a/extensions/msteams/src/attachments/html.ts +++ b/extensions/msteams/src/attachments/html.ts @@ -1,4 +1,3 @@ -import type { MSTeamsAttachmentLike, MSTeamsHtmlAttachmentSummary } from "./types.js"; import { ATTACHMENT_TAG_RE, extractHtmlFromAttachment, @@ -7,6 +6,7 @@ import { isLikelyImageAttachment, safeHostForUrl, } from "./shared.js"; +import type { MSTeamsAttachmentLike, MSTeamsHtmlAttachmentSummary } from "./types.js"; export function summarizeMSTeamsHtmlAttachments( attachments: MSTeamsAttachmentLike[] | undefined, diff --git a/extensions/msteams/src/conversation-store-fs.test.ts b/extensions/msteams/src/conversation-store-fs.test.ts index 220a6f5dbf..79253a51e3 100644 --- a/extensions/msteams/src/conversation-store-fs.test.ts +++ b/extensions/msteams/src/conversation-store-fs.test.ts @@ -2,8 +2,8 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import { beforeEach, describe, expect, it } from "vitest"; -import type { StoredConversationReference } from "./conversation-store.js"; import { createMSTeamsConversationStoreFs } from "./conversation-store-fs.js"; +import type { StoredConversationReference } from "./conversation-store.js"; import { setMSTeamsRuntime } from "./runtime.js"; import { msteamsRuntimeStub } from "./test-runtime.js"; diff --git a/extensions/msteams/src/monitor-handler.ts b/extensions/msteams/src/monitor-handler.ts index 9f34019a17..d4b848fde5 100644 --- a/extensions/msteams/src/monitor-handler.ts +++ b/extensions/msteams/src/monitor-handler.ts @@ -1,12 +1,12 @@ import type { OpenClawConfig, RuntimeEnv } from "openclaw/plugin-sdk"; import type { MSTeamsConversationStore } from "./conversation-store.js"; +import { buildFileInfoCard, parseFileConsentInvoke, uploadToConsentUrl } from "./file-consent.js"; import type { MSTeamsAdapter } from "./messenger.js"; +import { createMSTeamsMessageHandler } from "./monitor-handler/message-handler.js"; import type { MSTeamsMonitorLogger } from "./monitor-types.js"; +import { getPendingUpload, removePendingUpload } from "./pending-uploads.js"; import type { MSTeamsPollStore } from "./polls.js"; import type { MSTeamsTurnContext } from "./sdk-types.js"; -import { buildFileInfoCard, parseFileConsentInvoke, uploadToConsentUrl } from "./file-consent.js"; -import { createMSTeamsMessageHandler } from "./monitor-handler/message-handler.js"; -import { getPendingUpload, removePendingUpload } from "./pending-uploads.js"; export type MSTeamsAccessTokenProvider = { getAccessToken: (scope: string) => Promise; diff --git a/extensions/msteams/src/monitor-handler/inbound-media.ts b/extensions/msteams/src/monitor-handler/inbound-media.ts index f34659652b..ae9f386561 100644 --- a/extensions/msteams/src/monitor-handler/inbound-media.ts +++ b/extensions/msteams/src/monitor-handler/inbound-media.ts @@ -1,4 +1,3 @@ -import type { MSTeamsTurnContext } from "../sdk-types.js"; import { buildMSTeamsGraphMessageUrls, downloadMSTeamsAttachments, @@ -8,6 +7,7 @@ import { type MSTeamsHtmlAttachmentSummary, type MSTeamsInboundMedia, } from "../attachments.js"; +import type { MSTeamsTurnContext } from "../sdk-types.js"; type MSTeamsLogger = { debug?: (message: string, meta?: Record) => void; diff --git a/extensions/msteams/src/monitor-handler/message-handler.ts b/extensions/msteams/src/monitor-handler/message-handler.ts index f846969e9c..ac3f20adf9 100644 --- a/extensions/msteams/src/monitor-handler/message-handler.ts +++ b/extensions/msteams/src/monitor-handler/message-handler.ts @@ -9,15 +9,13 @@ import { formatAllowlistMatchMeta, type HistoryEntry, } from "openclaw/plugin-sdk"; -import type { StoredConversationReference } from "../conversation-store.js"; -import type { MSTeamsMessageHandlerDeps } from "../monitor-handler.js"; -import type { MSTeamsTurnContext } from "../sdk-types.js"; import { buildMSTeamsAttachmentPlaceholder, buildMSTeamsMediaPayload, type MSTeamsAttachmentLike, summarizeMSTeamsHtmlAttachments, } from "../attachments.js"; +import type { StoredConversationReference } from "../conversation-store.js"; import { formatUnknownError } from "../errors.js"; import { extractMSTeamsConversationMessageId, @@ -26,6 +24,7 @@ import { stripMSTeamsMentionTags, wasMSTeamsBotMentioned, } from "../inbound.js"; +import type { MSTeamsMessageHandlerDeps } from "../monitor-handler.js"; import { isMSTeamsGroupAllowed, resolveMSTeamsAllowlistMatch, @@ -35,6 +34,7 @@ import { import { extractMSTeamsPollVote } from "../polls.js"; import { createMSTeamsReplyDispatcher } from "../reply-dispatcher.js"; import { getMSTeamsRuntime } from "../runtime.js"; +import type { MSTeamsTurnContext } from "../sdk-types.js"; import { recordMSTeamsSentMessage, wasMSTeamsMessageSent } from "../sent-message-cache.js"; import { resolveMSTeamsInboundMedia } from "./inbound-media.js"; diff --git a/extensions/msteams/src/monitor.ts b/extensions/msteams/src/monitor.ts index f26c8018ed..02c9674c49 100644 --- a/extensions/msteams/src/monitor.ts +++ b/extensions/msteams/src/monitor.ts @@ -6,10 +6,10 @@ import { type OpenClawConfig, type RuntimeEnv, } from "openclaw/plugin-sdk"; -import type { MSTeamsConversationStore } from "./conversation-store.js"; -import type { MSTeamsAdapter } from "./messenger.js"; import { createMSTeamsConversationStoreFs } from "./conversation-store-fs.js"; +import type { MSTeamsConversationStore } from "./conversation-store.js"; import { formatUnknownError } from "./errors.js"; +import type { MSTeamsAdapter } from "./messenger.js"; import { registerMSTeamsHandlers, type MSTeamsActivityHandler } from "./monitor-handler.js"; import { createMSTeamsPollStoreFs, type MSTeamsPollStore } from "./polls.js"; import { diff --git a/extensions/msteams/src/reply-dispatcher.ts b/extensions/msteams/src/reply-dispatcher.ts index aa58c15f2a..55389f2f69 100644 --- a/extensions/msteams/src/reply-dispatcher.ts +++ b/extensions/msteams/src/reply-dispatcher.ts @@ -9,8 +9,6 @@ import { } from "openclaw/plugin-sdk"; import type { MSTeamsAccessTokenProvider } from "./attachments/types.js"; import type { StoredConversationReference } from "./conversation-store.js"; -import type { MSTeamsMonitorLogger } from "./monitor-types.js"; -import type { MSTeamsTurnContext } from "./sdk-types.js"; import { classifyMSTeamsSendError, formatMSTeamsSendErrorHint, @@ -21,7 +19,9 @@ import { renderReplyPayloadsToMessages, sendMSTeamsMessages, } from "./messenger.js"; +import type { MSTeamsMonitorLogger } from "./monitor-types.js"; import { getMSTeamsRuntime } from "./runtime.js"; +import type { MSTeamsTurnContext } from "./sdk-types.js"; export function createMSTeamsReplyDispatcher(params: { cfg: OpenClawConfig; diff --git a/extensions/msteams/src/send-context.ts b/extensions/msteams/src/send-context.ts index deefe21c0b..af617a7150 100644 --- a/extensions/msteams/src/send-context.ts +++ b/extensions/msteams/src/send-context.ts @@ -4,12 +4,12 @@ import { type PluginRuntime, } from "openclaw/plugin-sdk"; import type { MSTeamsAccessTokenProvider } from "./attachments/types.js"; +import { createMSTeamsConversationStoreFs } from "./conversation-store-fs.js"; import type { MSTeamsConversationStore, StoredConversationReference, } from "./conversation-store.js"; import type { MSTeamsAdapter } from "./messenger.js"; -import { createMSTeamsConversationStoreFs } from "./conversation-store-fs.js"; import { getMSTeamsRuntime } from "./runtime.js"; import { createMSTeamsAdapter, loadMSTeamsSdkWithAuth } from "./sdk.js"; import { resolveMSTeamsCredentials } from "./token.js"; diff --git a/extensions/msteams/src/test-runtime.ts b/extensions/msteams/src/test-runtime.ts index d190f1a740..e32a8288ac 100644 --- a/extensions/msteams/src/test-runtime.ts +++ b/extensions/msteams/src/test-runtime.ts @@ -1,6 +1,6 @@ -import type { PluginRuntime } from "openclaw/plugin-sdk"; import os from "node:os"; import path from "node:path"; +import type { PluginRuntime } from "openclaw/plugin-sdk"; export const msteamsRuntimeStub = { state: { diff --git a/extensions/nextcloud-talk/src/channel.ts b/extensions/nextcloud-talk/src/channel.ts index 3355ec116f..7471d70dab 100644 --- a/extensions/nextcloud-talk/src/channel.ts +++ b/extensions/nextcloud-talk/src/channel.ts @@ -10,7 +10,6 @@ import { type OpenClawConfig, type ChannelSetupInput, } from "openclaw/plugin-sdk"; -import type { CoreConfig } from "./types.js"; import { listNextcloudTalkAccountIds, resolveDefaultNextcloudTalkAccountId, @@ -27,6 +26,7 @@ import { nextcloudTalkOnboardingAdapter } from "./onboarding.js"; import { resolveNextcloudTalkGroupToolPolicy } from "./policy.js"; import { getNextcloudTalkRuntime } from "./runtime.js"; import { sendMessageNextcloudTalk } from "./send.js"; +import type { CoreConfig } from "./types.js"; const meta = { id: "nextcloud-talk", diff --git a/extensions/nextcloud-talk/src/inbound.ts b/extensions/nextcloud-talk/src/inbound.ts index 59da12236e..1971166d4e 100644 --- a/extensions/nextcloud-talk/src/inbound.ts +++ b/extensions/nextcloud-talk/src/inbound.ts @@ -6,7 +6,6 @@ import { type RuntimeEnv, } from "openclaw/plugin-sdk"; import type { ResolvedNextcloudTalkAccount } from "./accounts.js"; -import type { CoreConfig, GroupPolicy, NextcloudTalkInboundMessage } from "./types.js"; import { normalizeNextcloudTalkAllowlist, resolveNextcloudTalkAllowlistMatch, @@ -18,6 +17,7 @@ import { import { resolveNextcloudTalkRoomKind } from "./room-info.js"; import { getNextcloudTalkRuntime } from "./runtime.js"; import { sendMessageNextcloudTalk } from "./send.js"; +import type { CoreConfig, GroupPolicy, NextcloudTalkInboundMessage } from "./types.js"; const CHANNEL_ID = "nextcloud-talk" as const; diff --git a/extensions/nextcloud-talk/src/monitor.ts b/extensions/nextcloud-talk/src/monitor.ts index 80a0f9753b..ca9214fa60 100644 --- a/extensions/nextcloud-talk/src/monitor.ts +++ b/extensions/nextcloud-talk/src/monitor.ts @@ -5,16 +5,16 @@ import { readRequestBodyWithLimit, requestBodyErrorToText, } from "openclaw/plugin-sdk"; +import { resolveNextcloudTalkAccount } from "./accounts.js"; +import { handleNextcloudTalkInbound } from "./inbound.js"; +import { getNextcloudTalkRuntime } from "./runtime.js"; +import { extractNextcloudTalkHeaders, verifyNextcloudTalkSignature } from "./signature.js"; import type { CoreConfig, NextcloudTalkInboundMessage, NextcloudTalkWebhookPayload, NextcloudTalkWebhookServerOptions, } from "./types.js"; -import { resolveNextcloudTalkAccount } from "./accounts.js"; -import { handleNextcloudTalkInbound } from "./inbound.js"; -import { getNextcloudTalkRuntime } from "./runtime.js"; -import { extractNextcloudTalkHeaders, verifyNextcloudTalkSignature } from "./signature.js"; const DEFAULT_WEBHOOK_PORT = 8788; const DEFAULT_WEBHOOK_HOST = "0.0.0.0"; diff --git a/extensions/nextcloud-talk/src/onboarding.ts b/extensions/nextcloud-talk/src/onboarding.ts index 9b4cb3c59f..26cb145cb0 100644 --- a/extensions/nextcloud-talk/src/onboarding.ts +++ b/extensions/nextcloud-talk/src/onboarding.ts @@ -10,12 +10,12 @@ import { type OpenClawConfig, type WizardPrompter, } from "openclaw/plugin-sdk"; -import type { CoreConfig, DmPolicy } from "./types.js"; import { listNextcloudTalkAccountIds, resolveDefaultNextcloudTalkAccountId, resolveNextcloudTalkAccount, } from "./accounts.js"; +import type { CoreConfig, DmPolicy } from "./types.js"; const channel = "nextcloud-talk" as const; diff --git a/extensions/nextcloud-talk/src/room-info.ts b/extensions/nextcloud-talk/src/room-info.ts index b2ff6a1763..b3d7877e46 100644 --- a/extensions/nextcloud-talk/src/room-info.ts +++ b/extensions/nextcloud-talk/src/room-info.ts @@ -1,5 +1,5 @@ -import type { RuntimeEnv } from "openclaw/plugin-sdk"; import { readFileSync } from "node:fs"; +import type { RuntimeEnv } from "openclaw/plugin-sdk"; import type { ResolvedNextcloudTalkAccount } from "./accounts.js"; const ROOM_CACHE_TTL_MS = 5 * 60 * 1000; diff --git a/extensions/nextcloud-talk/src/send.ts b/extensions/nextcloud-talk/src/send.ts index 365526c401..6692f7099e 100644 --- a/extensions/nextcloud-talk/src/send.ts +++ b/extensions/nextcloud-talk/src/send.ts @@ -1,7 +1,7 @@ -import type { CoreConfig, NextcloudTalkSendResult } from "./types.js"; import { resolveNextcloudTalkAccount } from "./accounts.js"; import { getNextcloudTalkRuntime } from "./runtime.js"; import { generateNextcloudTalkSignature } from "./signature.js"; +import type { CoreConfig, NextcloudTalkSendResult } from "./types.js"; type NextcloudTalkSendOpts = { baseUrl?: string; diff --git a/extensions/nostr/index.ts b/extensions/nostr/index.ts index 881af8c225..0d0b15a68c 100644 --- a/extensions/nostr/index.ts +++ b/extensions/nostr/index.ts @@ -1,7 +1,7 @@ import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; import { emptyPluginConfigSchema } from "openclaw/plugin-sdk"; -import type { NostrProfile } from "./src/config-schema.js"; import { nostrPlugin } from "./src/channel.js"; +import type { NostrProfile } from "./src/config-schema.js"; import { createNostrProfileHttpHandler } from "./src/nostr-profile-http.js"; import { setNostrRuntime, getNostrRuntime } from "./src/runtime.js"; import { resolveNostrAccount } from "./src/types.js"; diff --git a/extensions/nostr/src/channel.ts b/extensions/nostr/src/channel.ts index 8fe7ce4ac9..4067d5f2ea 100644 --- a/extensions/nostr/src/channel.ts +++ b/extensions/nostr/src/channel.ts @@ -7,10 +7,10 @@ import { type ChannelPlugin, } from "openclaw/plugin-sdk"; import type { NostrProfile } from "./config-schema.js"; -import type { MetricEvent, MetricsSnapshot } from "./metrics.js"; -import type { ProfilePublishResult } from "./nostr-profile.js"; import { NostrConfigSchema } from "./config-schema.js"; +import type { MetricEvent, MetricsSnapshot } from "./metrics.js"; import { normalizePubkey, startNostrBus, type NostrBusHandle } from "./nostr-bus.js"; +import type { ProfilePublishResult } from "./nostr-profile.js"; import { getNostrRuntime } from "./runtime.js"; import { listNostrAccountIds, diff --git a/extensions/nostr/src/nostr-state-store.test.ts b/extensions/nostr/src/nostr-state-store.test.ts index fa1942393a..2dcb9d2d49 100644 --- a/extensions/nostr/src/nostr-state-store.test.ts +++ b/extensions/nostr/src/nostr-state-store.test.ts @@ -1,7 +1,7 @@ -import type { PluginRuntime } from "openclaw/plugin-sdk"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import type { PluginRuntime } from "openclaw/plugin-sdk"; import { describe, expect, it } from "vitest"; import { readNostrBusState, diff --git a/extensions/phone-control/index.ts b/extensions/phone-control/index.ts index d2c418efe3..deec295804 100644 --- a/extensions/phone-control/index.ts +++ b/extensions/phone-control/index.ts @@ -1,6 +1,6 @@ -import type { OpenClawPluginApi, OpenClawPluginService } from "openclaw/plugin-sdk"; import fs from "node:fs/promises"; import path from "node:path"; +import type { OpenClawPluginApi, OpenClawPluginService } from "openclaw/plugin-sdk"; type ArmGroup = "camera" | "screen" | "writes" | "all"; diff --git a/extensions/tlon/src/monitor/index.ts b/extensions/tlon/src/monitor/index.ts index 70e06b0874..e9d9750537 100644 --- a/extensions/tlon/src/monitor/index.ts +++ b/extensions/tlon/src/monitor/index.ts @@ -1,5 +1,5 @@ -import type { RuntimeEnv, ReplyPayload, OpenClawConfig } from "openclaw/plugin-sdk"; import { format } from "node:util"; +import type { RuntimeEnv, ReplyPayload, OpenClawConfig } from "openclaw/plugin-sdk"; import { createReplyPrefixOptions } from "openclaw/plugin-sdk"; import { getTlonRuntime } from "../runtime.js"; import { normalizeShip, parseChannelNest } from "../targets.js"; diff --git a/extensions/tlon/src/onboarding.ts b/extensions/tlon/src/onboarding.ts index 5d01dd1dae..11b1ceccbd 100644 --- a/extensions/tlon/src/onboarding.ts +++ b/extensions/tlon/src/onboarding.ts @@ -7,8 +7,8 @@ import { type ChannelOnboardingAdapter, type WizardPrompter, } from "openclaw/plugin-sdk"; -import type { TlonResolvedAccount } from "./types.js"; import { buildTlonAccountFields } from "./account-fields.js"; +import type { TlonResolvedAccount } from "./types.js"; import { listTlonAccountIds, resolveTlonAccount } from "./types.js"; import { isBlockedUrbitHostname, validateUrbitBaseUrl } from "./urbit/base-url.js"; diff --git a/extensions/tlon/src/urbit/sse-client.ts b/extensions/tlon/src/urbit/sse-client.ts index a379d1680b..b75d43f775 100644 --- a/extensions/tlon/src/urbit/sse-client.ts +++ b/extensions/tlon/src/urbit/sse-client.ts @@ -1,5 +1,5 @@ -import type { LookupFn, SsrFPolicy } from "openclaw/plugin-sdk"; import { Readable } from "node:stream"; +import type { LookupFn, SsrFPolicy } from "openclaw/plugin-sdk"; import { ensureUrbitChannelOpen, pokeUrbitChannel, scryUrbitPath } from "./channel-ops.js"; import { getUrbitContext, normalizeUrbitCookie } from "./context.js"; import { urbitFetch } from "./fetch.js"; diff --git a/extensions/twitch/src/access-control.test.ts b/extensions/twitch/src/access-control.test.ts index 7114eab365..fc8fd184d1 100644 --- a/extensions/twitch/src/access-control.test.ts +++ b/extensions/twitch/src/access-control.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import type { TwitchAccountConfig, TwitchChatMessage } from "./types.js"; import { checkTwitchAccessControl, extractMentions } from "./access-control.js"; +import type { TwitchAccountConfig, TwitchChatMessage } from "./types.js"; describe("checkTwitchAccessControl", () => { const mockAccount: TwitchAccountConfig = { diff --git a/extensions/twitch/src/actions.ts b/extensions/twitch/src/actions.ts index fc824a774b..076610a652 100644 --- a/extensions/twitch/src/actions.ts +++ b/extensions/twitch/src/actions.ts @@ -4,9 +4,9 @@ * Handles tool-based actions for Twitch, such as sending messages. */ -import type { ChannelMessageActionAdapter, ChannelMessageActionContext } from "./types.js"; import { DEFAULT_ACCOUNT_ID, getAccountConfig } from "./config.js"; import { twitchOutbound } from "./outbound.js"; +import type { ChannelMessageActionAdapter, ChannelMessageActionContext } from "./types.js"; /** * Create a tool result with error content. diff --git a/extensions/twitch/src/client-manager-registry.ts b/extensions/twitch/src/client-manager-registry.ts index 4daceb4794..1b7ae23f21 100644 --- a/extensions/twitch/src/client-manager-registry.ts +++ b/extensions/twitch/src/client-manager-registry.ts @@ -5,8 +5,8 @@ * ensuring proper cleanup when accounts are stopped or reconfigured. */ -import type { ChannelLogSink } from "./types.js"; import { TwitchClientManager } from "./twitch-client.js"; +import type { ChannelLogSink } from "./types.js"; /** * Registry entry tracking a client manager and its associated account. diff --git a/extensions/twitch/src/monitor.ts b/extensions/twitch/src/monitor.ts index 9f8d3f513d..9f0c0df5b8 100644 --- a/extensions/twitch/src/monitor.ts +++ b/extensions/twitch/src/monitor.ts @@ -7,10 +7,10 @@ import type { ReplyPayload, OpenClawConfig } from "openclaw/plugin-sdk"; import { createReplyPrefixOptions } from "openclaw/plugin-sdk"; -import type { TwitchAccountConfig, TwitchChatMessage } from "./types.js"; import { checkTwitchAccessControl } from "./access-control.js"; import { getOrCreateClientManager } from "./client-manager-registry.js"; import { getTwitchRuntime } from "./runtime.js"; +import type { TwitchAccountConfig, TwitchChatMessage } from "./types.js"; import { stripMarkdownForTwitch } from "./utils/markdown.js"; export type TwitchRuntimeEnv = { diff --git a/extensions/twitch/src/onboarding.ts b/extensions/twitch/src/onboarding.ts index a3fe02ef10..adfa8b9e4d 100644 --- a/extensions/twitch/src/onboarding.ts +++ b/extensions/twitch/src/onboarding.ts @@ -10,8 +10,8 @@ import { type ChannelOnboardingDmPolicy, type WizardPrompter, } from "openclaw/plugin-sdk"; -import type { TwitchAccountConfig, TwitchRole } from "./types.js"; import { DEFAULT_ACCOUNT_ID, getAccountConfig } from "./config.js"; +import type { TwitchAccountConfig, TwitchRole } from "./types.js"; import { isAccountConfigured } from "./utils/twitch.js"; const channel = "twitch" as const; diff --git a/extensions/twitch/src/outbound.ts b/extensions/twitch/src/outbound.ts index 6ada089faf..d3e54933ab 100644 --- a/extensions/twitch/src/outbound.ts +++ b/extensions/twitch/src/outbound.ts @@ -5,13 +5,13 @@ * Supports text and media (URL) sending with markdown stripping and chunking. */ +import { DEFAULT_ACCOUNT_ID, getAccountConfig } from "./config.js"; +import { sendMessageTwitchInternal } from "./send.js"; import type { ChannelOutboundAdapter, ChannelOutboundContext, OutboundDeliveryResult, } from "./types.js"; -import { DEFAULT_ACCOUNT_ID, getAccountConfig } from "./config.js"; -import { sendMessageTwitchInternal } from "./send.js"; import { chunkTextForTwitch } from "./utils/markdown.js"; import { missingTargetError, normalizeTwitchChannel } from "./utils/twitch.js"; diff --git a/extensions/twitch/src/plugin.ts b/extensions/twitch/src/plugin.ts index b47d286280..15624e38f3 100644 --- a/extensions/twitch/src/plugin.ts +++ b/extensions/twitch/src/plugin.ts @@ -7,16 +7,6 @@ import type { OpenClawConfig } from "openclaw/plugin-sdk"; import { buildChannelConfigSchema } from "openclaw/plugin-sdk"; -import type { - ChannelAccountSnapshot, - ChannelCapabilities, - ChannelLogSink, - ChannelMeta, - ChannelPlugin, - ChannelResolveKind, - ChannelResolveResult, - TwitchAccountConfig, -} from "./types.js"; import { twitchMessageActions } from "./actions.js"; import { removeClientManager } from "./client-manager-registry.js"; import { TwitchConfigSchema } from "./config-schema.js"; @@ -27,6 +17,16 @@ import { probeTwitch } from "./probe.js"; import { resolveTwitchTargets } from "./resolver.js"; import { collectTwitchStatusIssues } from "./status.js"; import { resolveTwitchToken } from "./token.js"; +import type { + ChannelAccountSnapshot, + ChannelCapabilities, + ChannelLogSink, + ChannelMeta, + ChannelPlugin, + ChannelResolveKind, + ChannelResolveResult, + TwitchAccountConfig, +} from "./types.js"; import { isAccountConfigured } from "./utils/twitch.js"; /** diff --git a/extensions/twitch/src/probe.test.ts b/extensions/twitch/src/probe.test.ts index 9638120eb6..93b27dd61c 100644 --- a/extensions/twitch/src/probe.test.ts +++ b/extensions/twitch/src/probe.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { TwitchAccountConfig } from "./types.js"; import { probeTwitch } from "./probe.js"; +import type { TwitchAccountConfig } from "./types.js"; // Mock Twurple modules - Vitest v4 compatible mocking const mockUnbind = vi.fn(); diff --git a/extensions/twitch/src/probe.ts b/extensions/twitch/src/probe.ts index 41321103a4..0f421ff298 100644 --- a/extensions/twitch/src/probe.ts +++ b/extensions/twitch/src/probe.ts @@ -1,6 +1,6 @@ -import type { BaseProbeResult } from "openclaw/plugin-sdk"; import { StaticAuthProvider } from "@twurple/auth"; import { ChatClient } from "@twurple/chat"; +import type { BaseProbeResult } from "openclaw/plugin-sdk"; import type { TwitchAccountConfig } from "./types.js"; import { normalizeToken } from "./utils/twitch.js"; diff --git a/extensions/twitch/src/status.test.ts b/extensions/twitch/src/status.test.ts index 05113089f6..7aa8b909df 100644 --- a/extensions/twitch/src/status.test.ts +++ b/extensions/twitch/src/status.test.ts @@ -11,8 +11,8 @@ */ import { describe, expect, it } from "vitest"; -import type { ChannelAccountSnapshot } from "./types.js"; import { collectTwitchStatusIssues } from "./status.js"; +import type { ChannelAccountSnapshot } from "./types.js"; describe("status", () => { describe("collectTwitchStatusIssues", () => { diff --git a/extensions/twitch/src/status.ts b/extensions/twitch/src/status.ts index 2cb9ae0dbc..33a62d09ac 100644 --- a/extensions/twitch/src/status.ts +++ b/extensions/twitch/src/status.ts @@ -5,9 +5,9 @@ */ import type { ChannelStatusIssue } from "openclaw/plugin-sdk"; -import type { ChannelAccountSnapshot } from "./types.js"; import { getAccountConfig } from "./config.js"; import { resolveTwitchToken } from "./token.js"; +import type { ChannelAccountSnapshot } from "./types.js"; import { isAccountConfigured } from "./utils/twitch.js"; /** diff --git a/extensions/twitch/src/twitch-client.test.ts b/extensions/twitch/src/twitch-client.test.ts index 28d2745c22..24ffe75587 100644 --- a/extensions/twitch/src/twitch-client.test.ts +++ b/extensions/twitch/src/twitch-client.test.ts @@ -10,8 +10,8 @@ */ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import type { ChannelLogSink, TwitchAccountConfig, TwitchChatMessage } from "./types.js"; import { TwitchClientManager } from "./twitch-client.js"; +import type { ChannelLogSink, TwitchAccountConfig, TwitchChatMessage } from "./types.js"; // Mock @twurple dependencies const mockConnect = vi.fn().mockResolvedValue(undefined); diff --git a/extensions/twitch/src/twitch-client.ts b/extensions/twitch/src/twitch-client.ts index 538925c155..8669771994 100644 --- a/extensions/twitch/src/twitch-client.ts +++ b/extensions/twitch/src/twitch-client.ts @@ -1,8 +1,8 @@ -import type { OpenClawConfig } from "openclaw/plugin-sdk"; import { RefreshingAuthProvider, StaticAuthProvider } from "@twurple/auth"; import { ChatClient, LogLevel } from "@twurple/chat"; -import type { ChannelLogSink, TwitchAccountConfig, TwitchChatMessage } from "./types.js"; +import type { OpenClawConfig } from "openclaw/plugin-sdk"; import { resolveTwitchToken } from "./token.js"; +import type { ChannelLogSink, TwitchAccountConfig, TwitchChatMessage } from "./types.js"; import { normalizeToken } from "./utils/twitch.js"; /** diff --git a/extensions/voice-call/index.ts b/extensions/voice-call/index.ts index 7eb8daa8ff..d110dcc9c2 100644 --- a/extensions/voice-call/index.ts +++ b/extensions/voice-call/index.ts @@ -1,6 +1,5 @@ -import type { GatewayRequestHandlerOptions, OpenClawPluginApi } from "openclaw/plugin-sdk"; import { Type } from "@sinclair/typebox"; -import type { CoreConfig } from "./src/core-bridge.js"; +import type { GatewayRequestHandlerOptions, OpenClawPluginApi } from "openclaw/plugin-sdk"; import { registerVoiceCallCli } from "./src/cli.js"; import { VoiceCallConfigSchema, @@ -8,6 +7,7 @@ import { validateProviderConfig, type VoiceCallConfig, } from "./src/config.js"; +import type { CoreConfig } from "./src/core-bridge.js"; import { createVoiceCallRuntime, type VoiceCallRuntime } from "./src/runtime.js"; const voiceCallConfigSchema = { diff --git a/extensions/voice-call/src/cli.ts b/extensions/voice-call/src/cli.ts index 0707821c46..85049bab7f 100644 --- a/extensions/voice-call/src/cli.ts +++ b/extensions/voice-call/src/cli.ts @@ -1,7 +1,7 @@ -import type { Command } from "commander"; import fs from "node:fs"; import os from "node:os"; import path from "node:path"; +import type { Command } from "commander"; import { sleep } from "openclaw/plugin-sdk"; import type { VoiceCallConfig } from "./config.js"; import type { VoiceCallRuntime } from "./runtime.js"; diff --git a/extensions/voice-call/src/manager.test.ts b/extensions/voice-call/src/manager.test.ts index 3ffe9b040a..856556bd2e 100644 --- a/extensions/voice-call/src/manager.test.ts +++ b/extensions/voice-call/src/manager.test.ts @@ -1,6 +1,8 @@ import os from "node:os"; import path from "node:path"; import { describe, expect, it } from "vitest"; +import { VoiceCallConfigSchema } from "./config.js"; +import { CallManager } from "./manager.js"; import type { VoiceCallProvider } from "./providers/base.js"; import type { HangupCallInput, @@ -13,8 +15,6 @@ import type { WebhookContext, WebhookVerificationResult, } from "./types.js"; -import { VoiceCallConfigSchema } from "./config.js"; -import { CallManager } from "./manager.js"; class FakeProvider implements VoiceCallProvider { readonly name = "plivo" as const; diff --git a/extensions/voice-call/src/manager.ts b/extensions/voice-call/src/manager.ts index 3b3a5b7c06..d2c7d6eae8 100644 --- a/extensions/voice-call/src/manager.ts +++ b/extensions/voice-call/src/manager.ts @@ -3,8 +3,6 @@ import os from "node:os"; import path from "node:path"; import type { VoiceCallConfig } from "./config.js"; import type { CallManagerContext } from "./manager/context.js"; -import type { VoiceCallProvider } from "./providers/base.js"; -import type { CallId, CallRecord, NormalizedEvent, OutboundCallOptions } from "./types.js"; import { processEvent as processManagerEvent } from "./manager/events.js"; import { getCallByProviderCallId as getCallByProviderCallIdFromMaps } from "./manager/lookup.js"; import { @@ -15,6 +13,8 @@ import { speakInitialMessage as speakInitialMessageWithContext, } from "./manager/outbound.js"; import { getCallHistoryFromStore, loadActiveCallsFromStore } from "./manager/store.js"; +import type { VoiceCallProvider } from "./providers/base.js"; +import type { CallId, CallRecord, NormalizedEvent, OutboundCallOptions } from "./types.js"; import { resolveUserPath } from "./utils.js"; function resolveDefaultStoreBase(config: VoiceCallConfig, storePath?: string): string { diff --git a/extensions/voice-call/src/manager/events.test.ts b/extensions/voice-call/src/manager/events.test.ts index d11b1978d8..8407c9cc65 100644 --- a/extensions/voice-call/src/manager/events.test.ts +++ b/extensions/voice-call/src/manager/events.test.ts @@ -2,10 +2,10 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import { describe, expect, it } from "vitest"; +import { VoiceCallConfigSchema } from "../config.js"; import type { VoiceCallProvider } from "../providers/base.js"; import type { HangupCallInput, NormalizedEvent } from "../types.js"; import type { CallManagerContext } from "./context.js"; -import { VoiceCallConfigSchema } from "../config.js"; import { processEvent } from "./events.js"; function createContext(overrides: Partial = {}): CallManagerContext { diff --git a/extensions/voice-call/src/manager/events.ts b/extensions/voice-call/src/manager/events.ts index 53371514af..508a8d5263 100644 --- a/extensions/voice-call/src/manager/events.ts +++ b/extensions/voice-call/src/manager/events.ts @@ -1,7 +1,7 @@ import crypto from "node:crypto"; +import { isAllowlistedCaller, normalizePhoneNumber } from "../allowlist.js"; import type { CallRecord, CallState, NormalizedEvent } from "../types.js"; import type { CallManagerContext } from "./context.js"; -import { isAllowlistedCaller, normalizePhoneNumber } from "../allowlist.js"; import { findCall } from "./lookup.js"; import { endCall } from "./outbound.js"; import { addTranscriptEntry, transitionState } from "./state.js"; diff --git a/extensions/voice-call/src/manager/outbound.ts b/extensions/voice-call/src/manager/outbound.ts index 2089b95fe4..477ce18b83 100644 --- a/extensions/voice-call/src/manager/outbound.ts +++ b/extensions/voice-call/src/manager/outbound.ts @@ -1,6 +1,5 @@ import crypto from "node:crypto"; import type { CallMode } from "../config.js"; -import type { CallManagerContext } from "./context.js"; import { TerminalStates, type CallId, @@ -8,6 +7,7 @@ import { type OutboundCallOptions, } from "../types.js"; import { mapVoiceToPolly } from "../voice-mapping.js"; +import type { CallManagerContext } from "./context.js"; import { getCallByProviderCallId } from "./lookup.js"; import { addTranscriptEntry, transitionState } from "./state.js"; import { persistCallRecord } from "./store.js"; diff --git a/extensions/voice-call/src/manager/timers.ts b/extensions/voice-call/src/manager/timers.ts index 4b6d215054..116920e993 100644 --- a/extensions/voice-call/src/manager/timers.ts +++ b/extensions/voice-call/src/manager/timers.ts @@ -1,5 +1,5 @@ -import type { CallManagerContext } from "./context.js"; import { TerminalStates, type CallId } from "../types.js"; +import type { CallManagerContext } from "./context.js"; import { persistCallRecord } from "./store.js"; type TimerContext = Pick< diff --git a/extensions/voice-call/src/media-stream.test.ts b/extensions/voice-call/src/media-stream.test.ts index 8b5f700c59..ac2c5e5373 100644 --- a/extensions/voice-call/src/media-stream.test.ts +++ b/extensions/voice-call/src/media-stream.test.ts @@ -1,9 +1,9 @@ import { describe, expect, it } from "vitest"; +import { MediaStreamHandler } from "./media-stream.js"; import type { OpenAIRealtimeSTTProvider, RealtimeSTTSession, } from "./providers/stt-openai-realtime.js"; -import { MediaStreamHandler } from "./media-stream.js"; const createStubSession = (): RealtimeSTTSession => ({ connect: async () => {}, diff --git a/extensions/voice-call/src/providers/plivo.ts b/extensions/voice-call/src/providers/plivo.ts index 44f03c755f..9739379cf5 100644 --- a/extensions/voice-call/src/providers/plivo.ts +++ b/extensions/voice-call/src/providers/plivo.ts @@ -12,9 +12,9 @@ import type { WebhookContext, WebhookVerificationResult, } from "../types.js"; -import type { VoiceCallProvider } from "./base.js"; import { escapeXml } from "../voice-mapping.js"; import { reconstructWebhookUrl, verifyPlivoWebhook } from "../webhook-security.js"; +import type { VoiceCallProvider } from "./base.js"; export interface PlivoProviderOptions { /** Override public URL origin for signature verification */ diff --git a/extensions/voice-call/src/providers/telnyx.ts b/extensions/voice-call/src/providers/telnyx.ts index a0b7655fdb..05a750a00b 100644 --- a/extensions/voice-call/src/providers/telnyx.ts +++ b/extensions/voice-call/src/providers/telnyx.ts @@ -13,8 +13,8 @@ import type { WebhookContext, WebhookVerificationResult, } from "../types.js"; -import type { VoiceCallProvider } from "./base.js"; import { verifyTelnyxWebhook } from "../webhook-security.js"; +import type { VoiceCallProvider } from "./base.js"; /** * Telnyx Voice API provider implementation. diff --git a/extensions/voice-call/src/providers/twilio.ts b/extensions/voice-call/src/providers/twilio.ts index 245c5e2bc3..45031c3514 100644 --- a/extensions/voice-call/src/providers/twilio.ts +++ b/extensions/voice-call/src/providers/twilio.ts @@ -1,6 +1,7 @@ import crypto from "node:crypto"; import type { TwilioConfig, WebhookSecurityConfig } from "../config.js"; import type { MediaStreamHandler } from "../media-stream.js"; +import { chunkAudio } from "../telephony-audio.js"; import type { TelephonyTtsProvider } from "../telephony-tts.js"; import type { HangupCallInput, @@ -14,9 +15,8 @@ import type { WebhookContext, WebhookVerificationResult, } from "../types.js"; -import type { VoiceCallProvider } from "./base.js"; -import { chunkAudio } from "../telephony-audio.js"; import { escapeXml, mapVoiceToPolly } from "../voice-mapping.js"; +import type { VoiceCallProvider } from "./base.js"; import { twilioApiRequest } from "./twilio/api.js"; import { verifyTwilioProviderWebhook } from "./twilio/webhook.js"; diff --git a/extensions/voice-call/src/providers/twilio/webhook.ts b/extensions/voice-call/src/providers/twilio/webhook.ts index ecbd8c573d..91fdfb2dc1 100644 --- a/extensions/voice-call/src/providers/twilio/webhook.ts +++ b/extensions/voice-call/src/providers/twilio/webhook.ts @@ -1,6 +1,6 @@ import type { WebhookContext, WebhookVerificationResult } from "../../types.js"; -import type { TwilioProviderOptions } from "../twilio.js"; import { verifyTwilioWebhook } from "../../webhook-security.js"; +import type { TwilioProviderOptions } from "../twilio.js"; export function verifyTwilioProviderWebhook(params: { ctx: WebhookContext; diff --git a/extensions/voice-call/src/runtime.ts b/extensions/voice-call/src/runtime.ts index 811a907403..19ea3b30b1 100644 --- a/extensions/voice-call/src/runtime.ts +++ b/extensions/voice-call/src/runtime.ts @@ -1,13 +1,13 @@ import type { VoiceCallConfig } from "./config.js"; -import type { CoreConfig } from "./core-bridge.js"; -import type { VoiceCallProvider } from "./providers/base.js"; -import type { TelephonyTtsRuntime } from "./telephony-tts.js"; import { resolveVoiceCallConfig, validateProviderConfig } from "./config.js"; +import type { CoreConfig } from "./core-bridge.js"; import { CallManager } from "./manager.js"; +import type { VoiceCallProvider } from "./providers/base.js"; import { MockProvider } from "./providers/mock.js"; import { PlivoProvider } from "./providers/plivo.js"; import { TelnyxProvider } from "./providers/telnyx.js"; import { TwilioProvider } from "./providers/twilio.js"; +import type { TelephonyTtsRuntime } from "./telephony-tts.js"; import { createTelephonyTtsProvider } from "./telephony-tts.js"; import { startTunnel, type TunnelResult } from "./tunnel.js"; import { diff --git a/extensions/voice-call/src/webhook.test.ts b/extensions/voice-call/src/webhook.test.ts index 91330de7fa..51afdb7eba 100644 --- a/extensions/voice-call/src/webhook.test.ts +++ b/extensions/voice-call/src/webhook.test.ts @@ -1,8 +1,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { VoiceCallConfigSchema, type VoiceCallConfig } from "./config.js"; import type { CallManager } from "./manager.js"; import type { VoiceCallProvider } from "./providers/base.js"; import type { CallRecord } from "./types.js"; -import { VoiceCallConfigSchema, type VoiceCallConfig } from "./config.js"; import { VoiceCallWebhookServer } from "./webhook.js"; const provider: VoiceCallProvider = { diff --git a/extensions/voice-call/src/webhook.ts b/extensions/voice-call/src/webhook.ts index 4574c77bcb..f9e18a9dac 100644 --- a/extensions/voice-call/src/webhook.ts +++ b/extensions/voice-call/src/webhook.ts @@ -10,11 +10,11 @@ import type { VoiceCallConfig } from "./config.js"; import type { CoreConfig } from "./core-bridge.js"; import type { CallManager } from "./manager.js"; import type { MediaStreamConfig } from "./media-stream.js"; +import { MediaStreamHandler } from "./media-stream.js"; import type { VoiceCallProvider } from "./providers/base.js"; +import { OpenAIRealtimeSTTProvider } from "./providers/stt-openai-realtime.js"; import type { TwilioProvider } from "./providers/twilio.js"; import type { NormalizedEvent, WebhookContext } from "./types.js"; -import { MediaStreamHandler } from "./media-stream.js"; -import { OpenAIRealtimeSTTProvider } from "./providers/stt-openai-realtime.js"; const MAX_WEBHOOK_BODY_BYTES = 1024 * 1024; diff --git a/extensions/zalo/src/accounts.ts b/extensions/zalo/src/accounts.ts index 5fb4d13bac..7296a842e4 100644 --- a/extensions/zalo/src/accounts.ts +++ b/extensions/zalo/src/accounts.ts @@ -1,7 +1,7 @@ import type { OpenClawConfig } from "openclaw/plugin-sdk"; import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id"; -import type { ResolvedZaloAccount, ZaloAccountConfig, ZaloConfig } from "./types.js"; import { resolveZaloToken } from "./token.js"; +import type { ResolvedZaloAccount, ZaloAccountConfig, ZaloConfig } from "./types.js"; export type { ResolvedZaloAccount }; diff --git a/extensions/zalo/src/monitor.webhook.test.ts b/extensions/zalo/src/monitor.webhook.test.ts index 60217ed914..91e1be8c48 100644 --- a/extensions/zalo/src/monitor.webhook.test.ts +++ b/extensions/zalo/src/monitor.webhook.test.ts @@ -1,9 +1,9 @@ +import { createServer, type RequestListener } from "node:http"; import type { AddressInfo } from "node:net"; import type { OpenClawConfig, PluginRuntime } from "openclaw/plugin-sdk"; -import { createServer, type RequestListener } from "node:http"; import { describe, expect, it, vi } from "vitest"; -import type { ResolvedZaloAccount } from "./types.js"; import { handleZaloWebhookRequest, registerZaloWebhookTarget } from "./monitor.js"; +import type { ResolvedZaloAccount } from "./types.js"; async function withServer(handler: RequestListener, fn: (baseUrl: string) => Promise) { const server = createServer(handler); diff --git a/extensions/zalo/src/send.ts b/extensions/zalo/src/send.ts index 9b98759eeb..e2ac8b4bcb 100644 --- a/extensions/zalo/src/send.ts +++ b/extensions/zalo/src/send.ts @@ -1,6 +1,6 @@ import type { OpenClawConfig } from "openclaw/plugin-sdk"; -import type { ZaloFetch } from "./api.js"; import { resolveZaloAccount } from "./accounts.js"; +import type { ZaloFetch } from "./api.js"; import { sendMessage, sendPhoto } from "./api.js"; import { resolveZaloProxyFetch } from "./proxy.js"; import { resolveZaloToken } from "./token.js"; diff --git a/extensions/zalouser/src/channel.ts b/extensions/zalouser/src/channel.ts index fcbc014071..a632565692 100644 --- a/extensions/zalouser/src/channel.ts +++ b/extensions/zalouser/src/channel.ts @@ -20,7 +20,6 @@ import { resolveChannelAccountConfigBasePath, setAccountEnabledInConfigSection, } from "openclaw/plugin-sdk"; -import type { ZcaFriend, ZcaGroup, ZcaUserInfo } from "./types.js"; import { listZalouserAccountIds, resolveDefaultZalouserAccountId, @@ -34,6 +33,7 @@ import { zalouserOnboardingAdapter } from "./onboarding.js"; import { probeZalouser } from "./probe.js"; import { sendMessageZalouser } from "./send.js"; import { collectZalouserStatusIssues } from "./status-issues.js"; +import type { ZcaFriend, ZcaGroup, ZcaUserInfo } from "./types.js"; import { checkZcaInstalled, parseJsonOutput, runZca, runZcaInteractive } from "./zca.js"; const meta = { diff --git a/extensions/zalouser/src/monitor.ts b/extensions/zalouser/src/monitor.ts index 9d341cb67f..c55a76a147 100644 --- a/extensions/zalouser/src/monitor.ts +++ b/extensions/zalouser/src/monitor.ts @@ -6,9 +6,9 @@ import { resolveSenderCommandAuthorization, summarizeMapping, } from "openclaw/plugin-sdk"; -import type { ResolvedZalouserAccount, ZcaFriend, ZcaGroup, ZcaMessage } from "./types.js"; import { getZalouserRuntime } from "./runtime.js"; import { sendMessageZalouser } from "./send.js"; +import type { ResolvedZalouserAccount, ZcaFriend, ZcaGroup, ZcaMessage } from "./types.js"; import { parseJsonOutput, runZca, runZcaStreaming } from "./zca.js"; export type ZalouserMonitorOptions = { diff --git a/extensions/zalouser/src/onboarding.ts b/extensions/zalouser/src/onboarding.ts index f4dcc55cb7..03750e1101 100644 --- a/extensions/zalouser/src/onboarding.ts +++ b/extensions/zalouser/src/onboarding.ts @@ -12,13 +12,13 @@ import { promptAccountId, promptChannelAccessConfig, } from "openclaw/plugin-sdk"; -import type { ZcaFriend, ZcaGroup } from "./types.js"; import { listZalouserAccountIds, resolveDefaultZalouserAccountId, resolveZalouserAccountSync, checkZcaAuthenticated, } from "./accounts.js"; +import type { ZcaFriend, ZcaGroup } from "./types.js"; import { runZca, runZcaInteractive, checkZcaInstalled, parseJsonOutput } from "./zca.js"; const channel = "zalouser" as const; diff --git a/scripts/test-shell-completion.ts b/scripts/test-shell-completion.ts index 801ddf6307..068d033724 100644 --- a/scripts/test-shell-completion.ts +++ b/scripts/test-shell-completion.ts @@ -23,9 +23,9 @@ * node --import tsx scripts/test-shell-completion.ts --force */ -import { confirm, isCancel } from "@clack/prompts"; import os from "node:os"; import path from "node:path"; +import { confirm, isCancel } from "@clack/prompts"; import { installCompletion } from "../src/cli/completion-cli.js"; import { checkShellCompletionStatus, diff --git a/src/acp/client.ts b/src/acp/client.ts index 80cbda6013..1eaf70c005 100644 --- a/src/acp/client.ts +++ b/src/acp/client.ts @@ -1,3 +1,9 @@ +import { spawn, type ChildProcess } from "node:child_process"; +import fs from "node:fs"; +import path from "node:path"; +import * as readline from "node:readline"; +import { Readable, Writable } from "node:stream"; +import { fileURLToPath } from "node:url"; import { ClientSideConnection, PROTOCOL_VERSION, @@ -6,12 +12,6 @@ import { type RequestPermissionResponse, type SessionNotification, } from "@agentclientprotocol/sdk"; -import { spawn, type ChildProcess } from "node:child_process"; -import fs from "node:fs"; -import path from "node:path"; -import * as readline from "node:readline"; -import { Readable, Writable } from "node:stream"; -import { fileURLToPath } from "node:url"; import { ensureOpenClawCliOnPath } from "../infra/path-env.js"; import { DANGEROUS_ACP_TOOLS } from "../security/dangerous-tools.js"; diff --git a/src/acp/server.ts b/src/acp/server.ts index 93acc4a523..17174242a5 100644 --- a/src/acp/server.ts +++ b/src/acp/server.ts @@ -1,8 +1,7 @@ #!/usr/bin/env node -import { AgentSideConnection, ndJsonStream } from "@agentclientprotocol/sdk"; import { Readable, Writable } from "node:stream"; import { fileURLToPath } from "node:url"; -import type { AcpServerOptions } from "./types.js"; +import { AgentSideConnection, ndJsonStream } from "@agentclientprotocol/sdk"; import { loadConfig } from "../config/config.js"; import { resolveGatewayAuth } from "../gateway/auth.js"; import { buildGatewayConnectionDetails } from "../gateway/call.js"; @@ -10,6 +9,7 @@ import { GatewayClient } from "../gateway/client.js"; import { isMainModule } from "../infra/is-main.js"; import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../utils/message-channel.js"; import { AcpGatewayAgent } from "./translator.js"; +import type { AcpServerOptions } from "./types.js"; export function serveAcpGateway(opts: AcpServerOptions = {}): Promise { const cfg = loadConfig(); diff --git a/src/acp/session-mapper.ts b/src/acp/session-mapper.ts index 5688761895..da30721d22 100644 --- a/src/acp/session-mapper.ts +++ b/src/acp/session-mapper.ts @@ -1,6 +1,6 @@ import type { GatewayClient } from "../gateway/client.js"; -import type { AcpServerOptions } from "./types.js"; import { readBool, readString } from "./meta.js"; +import type { AcpServerOptions } from "./types.js"; export type AcpSessionMeta = { sessionKey?: string; diff --git a/src/acp/translator.ts b/src/acp/translator.ts index d120794e6d..3b8def1ec3 100644 --- a/src/acp/translator.ts +++ b/src/acp/translator.ts @@ -1,3 +1,4 @@ +import { randomUUID } from "node:crypto"; import type { Agent, AgentSideConnection, @@ -19,7 +20,6 @@ import type { StopReason, } from "@agentclientprotocol/sdk"; import { PROTOCOL_VERSION } from "@agentclientprotocol/sdk"; -import { randomUUID } from "node:crypto"; import type { GatewayClient } from "../gateway/client.js"; import type { EventFrame } from "../gateway/protocol/index.js"; import type { SessionsListResult } from "../gateway/session-utils.js"; diff --git a/src/agents/anthropic-payload-log.ts b/src/agents/anthropic-payload-log.ts index b2bdfa3a4d..03c2cbc1c1 100644 --- a/src/agents/anthropic-payload-log.ts +++ b/src/agents/anthropic-payload-log.ts @@ -1,7 +1,7 @@ -import type { AgentMessage, StreamFn } from "@mariozechner/pi-agent-core"; -import type { Api, Model } from "@mariozechner/pi-ai"; import crypto from "node:crypto"; import path from "node:path"; +import type { AgentMessage, StreamFn } from "@mariozechner/pi-agent-core"; +import type { Api, Model } from "@mariozechner/pi-ai"; import { resolveStateDir } from "../config/paths.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { resolveUserPath } from "../utils.js"; diff --git a/src/agents/anthropic.setup-token.live.test.ts b/src/agents/anthropic.setup-token.live.test.ts index 6415bb7996..a8a7859c7f 100644 --- a/src/agents/anthropic.setup-token.live.test.ts +++ b/src/agents/anthropic.setup-token.live.test.ts @@ -1,8 +1,8 @@ -import { type Api, completeSimple, type Model } from "@mariozechner/pi-ai"; import { randomUUID } from "node:crypto"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import { type Api, completeSimple, type Model } from "@mariozechner/pi-ai"; import { describe, expect, it } from "vitest"; import { ANTHROPIC_SETUP_TOKEN_PREFIX, diff --git a/src/agents/apply-patch.ts b/src/agents/apply-patch.ts index d07c419efa..ef756b37a2 100644 --- a/src/agents/apply-patch.ts +++ b/src/agents/apply-patch.ts @@ -1,10 +1,10 @@ -import type { AgentTool } from "@mariozechner/pi-agent-core"; -import { Type } from "@sinclair/typebox"; import fs from "node:fs/promises"; import path from "node:path"; -import type { SandboxFsBridge } from "./sandbox/fs-bridge.js"; +import type { AgentTool } from "@mariozechner/pi-agent-core"; +import { Type } from "@sinclair/typebox"; import { applyUpdateHunk } from "./apply-patch-update.js"; import { assertSandboxPath, resolveSandboxInputPath } from "./sandbox-paths.js"; +import type { SandboxFsBridge } from "./sandbox/fs-bridge.js"; const BEGIN_PATCH_MARKER = "*** Begin Patch"; const END_PATCH_MARKER = "*** End Patch"; diff --git a/src/agents/auth-profiles.cooldown-auto-expiry.test.ts b/src/agents/auth-profiles.cooldown-auto-expiry.test.ts index 9bcd9c93d4..baed94f251 100644 --- a/src/agents/auth-profiles.cooldown-auto-expiry.test.ts +++ b/src/agents/auth-profiles.cooldown-auto-expiry.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import type { AuthProfileStore } from "./auth-profiles/types.js"; import { resolveAuthProfileOrder } from "./auth-profiles/order.js"; +import type { AuthProfileStore } from "./auth-profiles/types.js"; import { isProfileInCooldown } from "./auth-profiles/usage.js"; /** diff --git a/src/agents/auth-profiles.resolve-auth-profile-order.does-not-prioritize-lastgood-round-robin-ordering.e2e.test.ts b/src/agents/auth-profiles.resolve-auth-profile-order.does-not-prioritize-lastgood-round-robin-ordering.e2e.test.ts index 621d81b5c2..ae2b636f8c 100644 --- a/src/agents/auth-profiles.resolve-auth-profile-order.does-not-prioritize-lastgood-round-robin-ordering.e2e.test.ts +++ b/src/agents/auth-profiles.resolve-auth-profile-order.does-not-prioritize-lastgood-round-robin-ordering.e2e.test.ts @@ -1,10 +1,10 @@ import { describe, expect, it } from "vitest"; -import type { AuthProfileStore } from "./auth-profiles/types.js"; import { resolveAuthProfileOrder } from "./auth-profiles.js"; import { ANTHROPIC_CFG, ANTHROPIC_STORE, } from "./auth-profiles.resolve-auth-profile-order.fixtures.js"; +import type { AuthProfileStore } from "./auth-profiles/types.js"; describe("resolveAuthProfileOrder", () => { const store = ANTHROPIC_STORE; diff --git a/src/agents/auth-profiles/doctor.ts b/src/agents/auth-profiles/doctor.ts index cd79fed43a..ee743a0600 100644 --- a/src/agents/auth-profiles/doctor.ts +++ b/src/agents/auth-profiles/doctor.ts @@ -1,9 +1,9 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { AuthProfileStore } from "./types.js"; import { formatCliCommand } from "../../cli/command-format.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { normalizeProviderId } from "../model-selection.js"; import { listProfilesForProvider } from "./profiles.js"; import { suggestOAuthProfileIdForLegacyDefault } from "./repair.js"; +import type { AuthProfileStore } from "./types.js"; export function formatAuthDoctorHint(params: { cfg?: OpenClawConfig; diff --git a/src/agents/auth-profiles/external-cli-sync.ts b/src/agents/auth-profiles/external-cli-sync.ts index 998e5dc3f0..56ca400cf1 100644 --- a/src/agents/auth-profiles/external-cli-sync.ts +++ b/src/agents/auth-profiles/external-cli-sync.ts @@ -1,4 +1,3 @@ -import type { AuthProfileCredential, AuthProfileStore, OAuthCredential } from "./types.js"; import { readQwenCliCredentialsCached, readMiniMaxCliCredentialsCached, @@ -10,6 +9,7 @@ import { MINIMAX_CLI_PROFILE_ID, log, } from "./constants.js"; +import type { AuthProfileCredential, AuthProfileStore, OAuthCredential } from "./types.js"; function shallowEqualOAuthCredentials(a: OAuthCredential | undefined, b: OAuthCredential): boolean { if (!a) { diff --git a/src/agents/auth-profiles/oauth.fallback-to-main-agent.e2e.test.ts b/src/agents/auth-profiles/oauth.fallback-to-main-agent.e2e.test.ts index ea15d462f0..0e4a94b3ed 100644 --- a/src/agents/auth-profiles/oauth.fallback-to-main-agent.e2e.test.ts +++ b/src/agents/auth-profiles/oauth.fallback-to-main-agent.e2e.test.ts @@ -2,10 +2,10 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import type { AuthProfileStore } from "./types.js"; import { captureEnv } from "../../test-utils/env.js"; import { resolveApiKeyForProfile } from "./oauth.js"; import { ensureAuthProfileStore } from "./store.js"; +import type { AuthProfileStore } from "./types.js"; describe("resolveApiKeyForProfile fallback to main agent", () => { const envSnapshot = captureEnv([ diff --git a/src/agents/auth-profiles/oauth.ts b/src/agents/auth-profiles/oauth.ts index a7ddc3c651..b757925379 100644 --- a/src/agents/auth-profiles/oauth.ts +++ b/src/agents/auth-profiles/oauth.ts @@ -5,7 +5,6 @@ import { type OAuthProvider, } from "@mariozechner/pi-ai"; import type { OpenClawConfig } from "../../config/config.js"; -import type { AuthProfileStore } from "./types.js"; import { withFileLock } from "../../infra/file-lock.js"; import { refreshQwenPortalCredentials } from "../../providers/qwen-portal-oauth.js"; import { refreshChutesTokens } from "../chutes-oauth.js"; @@ -14,6 +13,7 @@ import { formatAuthDoctorHint } from "./doctor.js"; import { ensureAuthStoreFile, resolveAuthStorePath } from "./paths.js"; import { suggestOAuthProfileIdForLegacyDefault } from "./repair.js"; import { ensureAuthProfileStore, saveAuthProfileStore } from "./store.js"; +import type { AuthProfileStore } from "./types.js"; const OAUTH_PROVIDER_IDS = new Set(getOAuthProviders().map((provider) => provider.id)); diff --git a/src/agents/auth-profiles/order.ts b/src/agents/auth-profiles/order.ts index 013f0b8d74..571f61f702 100644 --- a/src/agents/auth-profiles/order.ts +++ b/src/agents/auth-profiles/order.ts @@ -1,7 +1,7 @@ import type { OpenClawConfig } from "../../config/config.js"; -import type { AuthProfileStore } from "./types.js"; import { findNormalizedProviderValue, normalizeProviderId } from "../model-selection.js"; import { dedupeProfileIds, listProfilesForProvider } from "./profiles.js"; +import type { AuthProfileStore } from "./types.js"; import { clearExpiredCooldowns, isProfileInCooldown } from "./usage.js"; function resolveProfileUnusableUntil(stats: { diff --git a/src/agents/auth-profiles/paths.ts b/src/agents/auth-profiles/paths.ts index edb795d126..78167334f9 100644 --- a/src/agents/auth-profiles/paths.ts +++ b/src/agents/auth-profiles/paths.ts @@ -1,10 +1,10 @@ import fs from "node:fs"; import path from "node:path"; -import type { AuthProfileStore } from "./types.js"; import { saveJsonFile } from "../../infra/json-file.js"; import { resolveUserPath } from "../../utils.js"; import { resolveOpenClawAgentDir } from "../agent-paths.js"; import { AUTH_PROFILE_FILENAME, AUTH_STORE_VERSION, LEGACY_AUTH_FILENAME } from "./constants.js"; +import type { AuthProfileStore } from "./types.js"; export function resolveAuthStorePath(agentDir?: string): string { const resolved = resolveUserPath(agentDir ?? resolveOpenClawAgentDir()); diff --git a/src/agents/auth-profiles/profiles.ts b/src/agents/auth-profiles/profiles.ts index 063e8438f1..6afb10853e 100644 --- a/src/agents/auth-profiles/profiles.ts +++ b/src/agents/auth-profiles/profiles.ts @@ -1,4 +1,3 @@ -import type { AuthProfileCredential, AuthProfileStore } from "./types.js"; import { normalizeSecretInput } from "../../utils/normalize-secret-input.js"; import { normalizeProviderId } from "../model-selection.js"; import { @@ -6,6 +5,7 @@ import { saveAuthProfileStore, updateAuthProfileStoreWithLock, } from "./store.js"; +import type { AuthProfileCredential, AuthProfileStore } from "./types.js"; export function dedupeProfileIds(profileIds: string[]): string[] { return [...new Set(profileIds)]; diff --git a/src/agents/auth-profiles/repair.ts b/src/agents/auth-profiles/repair.ts index b7b972112a..854ec18ed3 100644 --- a/src/agents/auth-profiles/repair.ts +++ b/src/agents/auth-profiles/repair.ts @@ -1,8 +1,8 @@ import type { OpenClawConfig } from "../../config/config.js"; import type { AuthProfileConfig } from "../../config/types.js"; -import type { AuthProfileIdRepairResult, AuthProfileStore } from "./types.js"; import { findNormalizedProviderKey, normalizeProviderId } from "../model-selection.js"; import { dedupeProfileIds, listProfilesForProvider } from "./profiles.js"; +import type { AuthProfileIdRepairResult, AuthProfileStore } from "./types.js"; function getProfileSuffix(profileId: string): string { const idx = profileId.indexOf(":"); diff --git a/src/agents/auth-profiles/store.ts b/src/agents/auth-profiles/store.ts index 8c6f65012c..4e6b1f91bf 100644 --- a/src/agents/auth-profiles/store.ts +++ b/src/agents/auth-profiles/store.ts @@ -1,12 +1,12 @@ -import type { OAuthCredentials } from "@mariozechner/pi-ai"; import fs from "node:fs"; -import type { AuthProfileCredential, AuthProfileStore, ProfileUsageStats } from "./types.js"; +import type { OAuthCredentials } from "@mariozechner/pi-ai"; import { resolveOAuthPath } from "../../config/paths.js"; import { withFileLock } from "../../infra/file-lock.js"; import { loadJsonFile, saveJsonFile } from "../../infra/json-file.js"; import { AUTH_STORE_LOCK_OPTIONS, AUTH_STORE_VERSION, log } from "./constants.js"; import { syncExternalCliCredentials } from "./external-cli-sync.js"; import { ensureAuthStoreFile, resolveAuthStorePath, resolveLegacyAuthStorePath } from "./paths.js"; +import type { AuthProfileCredential, AuthProfileStore, ProfileUsageStats } from "./types.js"; type LegacyAuthStore = Record; diff --git a/src/agents/auth-profiles/usage.ts b/src/agents/auth-profiles/usage.ts index ada49f33b3..6c4ecf52e2 100644 --- a/src/agents/auth-profiles/usage.ts +++ b/src/agents/auth-profiles/usage.ts @@ -1,7 +1,7 @@ import type { OpenClawConfig } from "../../config/config.js"; -import type { AuthProfileFailureReason, AuthProfileStore, ProfileUsageStats } from "./types.js"; import { normalizeProviderId } from "../model-selection.js"; import { saveAuthProfileStore, updateAuthProfileStoreWithLock } from "./store.js"; +import type { AuthProfileFailureReason, AuthProfileStore, ProfileUsageStats } from "./types.js"; function resolveProfileUnusableUntil(stats: ProfileUsageStats): number | null { const values = [stats.cooldownUntil, stats.disabledUntil] diff --git a/src/agents/bash-tools.exec-runtime.ts b/src/agents/bash-tools.exec-runtime.ts index 48a169343c..c23b9e8c53 100644 --- a/src/agents/bash-tools.exec-runtime.ts +++ b/src/agents/bash-tools.exec-runtime.ts @@ -1,16 +1,16 @@ +import path from "node:path"; import type { AgentToolResult } from "@mariozechner/pi-agent-core"; import { Type } from "@sinclair/typebox"; -import path from "node:path"; import type { ExecAsk, ExecHost, ExecSecurity } from "../infra/exec-approvals.js"; -import type { ProcessSession } from "./bash-process-registry.js"; -import type { ExecToolDetails } from "./bash-tools.exec.js"; -import type { BashSandboxConfig } from "./bash-tools.shared.js"; import { requestHeartbeatNow } from "../infra/heartbeat-wake.js"; import { mergePathPrepend } from "../infra/path-prepend.js"; import { enqueueSystemEvent } from "../infra/system-events.js"; +import type { ProcessSession } from "./bash-process-registry.js"; +import type { ExecToolDetails } from "./bash-tools.exec.js"; +import type { BashSandboxConfig } from "./bash-tools.shared.js"; export { applyPathPrepend, normalizePathPrepend } from "../infra/path-prepend.js"; -import type { ManagedRun } from "../process/supervisor/index.js"; import { logWarn } from "../logger.js"; +import type { ManagedRun } from "../process/supervisor/index.js"; import { getProcessSupervisor } from "../process/supervisor/index.js"; import { addSession, diff --git a/src/agents/bash-tools.exec.ts b/src/agents/bash-tools.exec.ts index e0fba6ea2b..52de4249ec 100644 --- a/src/agents/bash-tools.exec.ts +++ b/src/agents/bash-tools.exec.ts @@ -1,8 +1,7 @@ -import type { AgentTool, AgentToolResult } from "@mariozechner/pi-agent-core"; import crypto from "node:crypto"; import fs from "node:fs/promises"; import path from "node:path"; -import type { BashSandboxConfig } from "./bash-tools.shared.js"; +import type { AgentTool, AgentToolResult } from "@mariozechner/pi-agent-core"; import { type ExecAsk, type ExecHost, @@ -51,6 +50,7 @@ import { type ExecProcessHandle, validateHostEnv, } from "./bash-tools.exec-runtime.js"; +import type { BashSandboxConfig } from "./bash-tools.shared.js"; import { buildSandboxEnv, clampWithDefault, diff --git a/src/agents/bash-tools.process.poll-timeout.test.ts b/src/agents/bash-tools.process.poll-timeout.test.ts index a2ee791f0e..4556f4e256 100644 --- a/src/agents/bash-tools.process.poll-timeout.test.ts +++ b/src/agents/bash-tools.process.poll-timeout.test.ts @@ -1,6 +1,6 @@ import { afterEach, expect, test, vi } from "vitest"; -import type { ProcessSession } from "./bash-process-registry.js"; import { resetDiagnosticSessionStateForTest } from "../logging/diagnostic-session-state.js"; +import type { ProcessSession } from "./bash-process-registry.js"; import { addSession, appendOutput, diff --git a/src/agents/bootstrap-files.e2e.test.ts b/src/agents/bootstrap-files.e2e.test.ts index fcbac96e5b..938d728d71 100644 --- a/src/agents/bootstrap-files.e2e.test.ts +++ b/src/agents/bootstrap-files.e2e.test.ts @@ -1,6 +1,5 @@ import path from "node:path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import type { WorkspaceBootstrapFile } from "./workspace.js"; import { clearInternalHooks, registerInternalHook, @@ -8,6 +7,7 @@ import { } from "../hooks/internal-hooks.js"; import { makeTempWorkspace } from "../test-helpers/workspace.js"; import { resolveBootstrapContextForRun, resolveBootstrapFilesForRun } from "./bootstrap-files.js"; +import type { WorkspaceBootstrapFile } from "./workspace.js"; describe("resolveBootstrapFilesForRun", () => { beforeEach(() => clearInternalHooks()); diff --git a/src/agents/bootstrap-files.ts b/src/agents/bootstrap-files.ts index 50df5dfdd9..6abad5fcf9 100644 --- a/src/agents/bootstrap-files.ts +++ b/src/agents/bootstrap-files.ts @@ -1,6 +1,6 @@ import type { OpenClawConfig } from "../config/config.js"; -import type { EmbeddedContextFile } from "./pi-embedded-helpers.js"; import { applyBootstrapHookOverrides } from "./bootstrap-hooks.js"; +import type { EmbeddedContextFile } from "./pi-embedded-helpers.js"; import { buildBootstrapContextFiles, resolveBootstrapMaxChars, diff --git a/src/agents/bootstrap-hooks.ts b/src/agents/bootstrap-hooks.ts index 5662d2c655..69655ae65e 100644 --- a/src/agents/bootstrap-hooks.ts +++ b/src/agents/bootstrap-hooks.ts @@ -1,8 +1,8 @@ import type { OpenClawConfig } from "../config/config.js"; import type { AgentBootstrapHookContext } from "../hooks/internal-hooks.js"; -import type { WorkspaceBootstrapFile } from "./workspace.js"; import { createInternalHookEvent, triggerInternalHook } from "../hooks/internal-hooks.js"; import { resolveAgentIdFromSessionKey } from "../routing/session-key.js"; +import type { WorkspaceBootstrapFile } from "./workspace.js"; export async function applyBootstrapHookOverrides(params: { files: WorkspaceBootstrapFile[]; diff --git a/src/agents/cache-trace.ts b/src/agents/cache-trace.ts index c73dad9033..0cc770dabe 100644 --- a/src/agents/cache-trace.ts +++ b/src/agents/cache-trace.ts @@ -1,6 +1,6 @@ -import type { AgentMessage, StreamFn } from "@mariozechner/pi-agent-core"; import crypto from "node:crypto"; import path from "node:path"; +import type { AgentMessage, StreamFn } from "@mariozechner/pi-agent-core"; import type { OpenClawConfig } from "../config/config.js"; import { resolveStateDir } from "../config/paths.js"; import { resolveUserPath } from "../utils.js"; diff --git a/src/agents/channel-tools.ts b/src/agents/channel-tools.ts index b6b7c2dc0d..e49a090f50 100644 --- a/src/agents/channel-tools.ts +++ b/src/agents/channel-tools.ts @@ -1,12 +1,12 @@ +import { getChannelDock } from "../channels/dock.js"; +import { getChannelPlugin, listChannelPlugins } from "../channels/plugins/index.js"; import type { ChannelAgentTool, ChannelMessageActionName, ChannelPlugin, } from "../channels/plugins/types.js"; -import type { OpenClawConfig } from "../config/config.js"; -import { getChannelDock } from "../channels/dock.js"; -import { getChannelPlugin, listChannelPlugins } from "../channels/plugins/index.js"; import { normalizeAnyChannelId } from "../channels/registry.js"; +import type { OpenClawConfig } from "../config/config.js"; import { defaultRuntime } from "../runtime.js"; /** diff --git a/src/agents/chutes-oauth.ts b/src/agents/chutes-oauth.ts index 1b730593d2..2b3abed84d 100644 --- a/src/agents/chutes-oauth.ts +++ b/src/agents/chutes-oauth.ts @@ -1,5 +1,5 @@ -import type { OAuthCredentials } from "@mariozechner/pi-ai"; import { createHash, randomBytes } from "node:crypto"; +import type { OAuthCredentials } from "@mariozechner/pi-ai"; export const CHUTES_OAUTH_ISSUER = "https://api.chutes.ai"; export const CHUTES_AUTHORIZE_ENDPOINT = `${CHUTES_OAUTH_ISSUER}/idp/authorize`; diff --git a/src/agents/cli-credentials.ts b/src/agents/cli-credentials.ts index f34e109f4b..0d6d7c28c8 100644 --- a/src/agents/cli-credentials.ts +++ b/src/agents/cli-credentials.ts @@ -1,8 +1,8 @@ -import type { OAuthCredentials, OAuthProvider } from "@mariozechner/pi-ai"; import { execFileSync, execSync } from "node:child_process"; import { createHash } from "node:crypto"; import fs from "node:fs"; import path from "node:path"; +import type { OAuthCredentials, OAuthProvider } from "@mariozechner/pi-ai"; import { loadJsonFile, saveJsonFile } from "../infra/json-file.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { resolveUserPath } from "../utils.js"; diff --git a/src/agents/cli-runner.ts b/src/agents/cli-runner.ts index 5160611e8e..e8a7874b87 100644 --- a/src/agents/cli-runner.ts +++ b/src/agents/cli-runner.ts @@ -1,8 +1,7 @@ import type { ImageContent } from "@mariozechner/pi-ai"; +import { resolveHeartbeatPrompt } from "../auto-reply/heartbeat.js"; import type { ThinkLevel } from "../auto-reply/thinking.js"; import type { OpenClawConfig } from "../config/config.js"; -import type { EmbeddedPiRunResult } from "./pi-embedded-runner.js"; -import { resolveHeartbeatPrompt } from "../auto-reply/heartbeat.js"; import { shouldLogVerbose } from "../globals.js"; import { isTruthyEnvValue } from "../infra/env.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; @@ -28,6 +27,7 @@ import { import { resolveOpenClawDocsPath } from "./docs-path.js"; import { FailoverError, resolveFailoverStatus } from "./failover-error.js"; import { classifyFailoverReason, isFailoverErrorMessage } from "./pi-embedded-helpers.js"; +import type { EmbeddedPiRunResult } from "./pi-embedded-runner.js"; import { redactRunIdentifier, resolveRunWorkspaceDir } from "./workspace-run.js"; const log = createSubsystemLogger("agent/claude-cli"); diff --git a/src/agents/cli-runner/helpers.ts b/src/agents/cli-runner/helpers.ts index f11c3d0aa7..e48d79b71d 100644 --- a/src/agents/cli-runner/helpers.ts +++ b/src/agents/cli-runner/helpers.ts @@ -1,17 +1,17 @@ -import type { AgentTool } from "@mariozechner/pi-agent-core"; -import type { ImageContent } from "@mariozechner/pi-ai"; import crypto from "node:crypto"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import type { AgentTool } from "@mariozechner/pi-agent-core"; +import type { ImageContent } from "@mariozechner/pi-ai"; import type { ThinkLevel } from "../../auto-reply/thinking.js"; import type { OpenClawConfig } from "../../config/config.js"; import type { CliBackendConfig } from "../../config/types.js"; -import type { EmbeddedContextFile } from "../pi-embedded-helpers.js"; import { buildTtsSystemPromptHint } from "../../tts/tts.js"; import { isRecord } from "../../utils.js"; import { buildModelAliasLines } from "../model-alias-lines.js"; import { resolveDefaultModelForAgent } from "../model-selection.js"; +import type { EmbeddedContextFile } from "../pi-embedded-helpers.js"; import { detectRuntimeShell } from "../shell-utils.js"; import { buildSystemPromptParams } from "../system-prompt-params.js"; import { buildAgentSystemPrompt } from "../system-prompt.js"; diff --git a/src/agents/model-auth.e2e.test.ts b/src/agents/model-auth.e2e.test.ts index 5eebfa16f1..40c483f91e 100644 --- a/src/agents/model-auth.e2e.test.ts +++ b/src/agents/model-auth.e2e.test.ts @@ -1,7 +1,7 @@ -import type { Api, Model } from "@mariozechner/pi-ai"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import type { Api, Model } from "@mariozechner/pi-ai"; import { describe, expect, it } from "vitest"; import { captureEnv } from "../test-utils/env.js"; import { ensureAuthProfileStore } from "./auth-profiles.js"; diff --git a/src/agents/model-auth.ts b/src/agents/model-auth.ts index 187d3df678..b8ef41530c 100644 --- a/src/agents/model-auth.ts +++ b/src/agents/model-auth.ts @@ -1,8 +1,8 @@ -import { type Api, getEnvApiKey, type Model } from "@mariozechner/pi-ai"; import path from "node:path"; +import { type Api, getEnvApiKey, type Model } from "@mariozechner/pi-ai"; +import { formatCliCommand } from "../cli/command-format.js"; import type { OpenClawConfig } from "../config/config.js"; import type { ModelProviderAuthMode, ModelProviderConfig } from "../config/types.js"; -import { formatCliCommand } from "../cli/command-format.js"; import { getShellEnvAppliedKeys } from "../infra/shell-env.js"; import { normalizeOptionalSecretInput, diff --git a/src/agents/model-fallback.ts b/src/agents/model-fallback.ts index 6e24fbda17..c04e1d6fd6 100644 --- a/src/agents/model-fallback.ts +++ b/src/agents/model-fallback.ts @@ -1,5 +1,4 @@ import type { OpenClawConfig } from "../config/config.js"; -import type { FailoverReason } from "./pi-embedded-helpers.js"; import { ensureAuthProfileStore, getSoonestCooldownExpiry, @@ -21,6 +20,7 @@ import { resolveConfiguredModelRef, resolveModelRefFromString, } from "./model-selection.js"; +import type { FailoverReason } from "./pi-embedded-helpers.js"; import { isLikelyContextOverflowError } from "./pi-embedded-helpers.js"; type ModelCandidate = { diff --git a/src/agents/model-forward-compat.ts b/src/agents/model-forward-compat.ts index 9487e5ae8f..9694c548d0 100644 --- a/src/agents/model-forward-compat.ts +++ b/src/agents/model-forward-compat.ts @@ -1,8 +1,8 @@ import type { Api, Model } from "@mariozechner/pi-ai"; -import type { ModelRegistry } from "./pi-model-discovery.js"; import { DEFAULT_CONTEXT_TOKENS } from "./defaults.js"; import { normalizeModelCompat } from "./model-compat.js"; import { normalizeProviderId } from "./model-selection.js"; +import type { ModelRegistry } from "./pi-model-discovery.js"; const OPENAI_CODEX_GPT_53_MODEL_ID = "gpt-5.3-codex"; const OPENAI_CODEX_TEMPLATE_MODEL_IDS = ["gpt-5.2-codex"] as const; diff --git a/src/agents/model-selection.ts b/src/agents/model-selection.ts index 5deae273d7..6471a7b8ff 100644 --- a/src/agents/model-selection.ts +++ b/src/agents/model-selection.ts @@ -1,7 +1,7 @@ import type { OpenClawConfig } from "../config/config.js"; -import type { ModelCatalogEntry } from "./model-catalog.js"; import { resolveAgentModelPrimary } from "./agent-scope.js"; import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "./defaults.js"; +import type { ModelCatalogEntry } from "./model-catalog.js"; import { normalizeGoogleModelId } from "./models-config.providers.js"; export type ModelRef = { diff --git a/src/agents/models-config.e2e-harness.ts b/src/agents/models-config.e2e-harness.ts index a35e910899..9b8ba534aa 100644 --- a/src/agents/models-config.e2e-harness.ts +++ b/src/agents/models-config.e2e-harness.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, vi } from "vitest"; +import { withTempHome as withTempHomeBase } from "../../test/helpers/temp-home.js"; import type { OpenClawConfig } from "../config/config.js"; import type { MockFn } from "../test-utils/vitest-mock-fn.js"; -import { withTempHome as withTempHomeBase } from "../../test/helpers/temp-home.js"; export async function withModelsTempHome(fn: (home: string) => Promise): Promise { return withTempHomeBase(fn, { prefix: "openclaw-models-" }); diff --git a/src/agents/ollama-stream.ts b/src/agents/ollama-stream.ts index d4368a57ba..39a1976933 100644 --- a/src/agents/ollama-stream.ts +++ b/src/agents/ollama-stream.ts @@ -1,3 +1,4 @@ +import { randomUUID } from "node:crypto"; import type { StreamFn } from "@mariozechner/pi-agent-core"; import type { AssistantMessage, @@ -8,7 +9,6 @@ import type { Usage, } from "@mariozechner/pi-ai"; import { createAssistantMessageEventStream } from "@mariozechner/pi-ai"; -import { randomUUID } from "node:crypto"; export const OLLAMA_NATIVE_BASE_URL = "http://127.0.0.1:11434"; diff --git a/src/agents/openclaw-tools.ts b/src/agents/openclaw-tools.ts index eed12b72d4..83590d3bf8 100644 --- a/src/agents/openclaw-tools.ts +++ b/src/agents/openclaw-tools.ts @@ -1,12 +1,12 @@ import type { OpenClawConfig } from "../config/config.js"; -import type { GatewayMessageChannel } from "../utils/message-channel.js"; -import type { SandboxFsBridge } from "./sandbox/fs-bridge.js"; -import type { AnyAgentTool } from "./tools/common.js"; import { resolvePluginTools } from "../plugins/tools.js"; +import type { GatewayMessageChannel } from "../utils/message-channel.js"; import { resolveSessionAgentId } from "./agent-scope.js"; +import type { SandboxFsBridge } from "./sandbox/fs-bridge.js"; import { createAgentsListTool } from "./tools/agents-list-tool.js"; import { createBrowserTool } from "./tools/browser-tool.js"; import { createCanvasTool } from "./tools/canvas-tool.js"; +import type { AnyAgentTool } from "./tools/common.js"; import { createCronTool } from "./tools/cron-tool.js"; import { createGatewayTool } from "./tools/gateway-tool.js"; import { createImageTool } from "./tools/image-tool.js"; diff --git a/src/agents/pi-auth-json.ts b/src/agents/pi-auth-json.ts index 70719e6bbd..122efb7b9f 100644 --- a/src/agents/pi-auth-json.ts +++ b/src/agents/pi-auth-json.ts @@ -1,7 +1,7 @@ import fs from "node:fs/promises"; import path from "node:path"; -import type { AuthProfileCredential } from "./auth-profiles/types.js"; import { ensureAuthProfileStore } from "./auth-profiles.js"; +import type { AuthProfileCredential } from "./auth-profiles/types.js"; import { normalizeProviderId } from "./model-selection.js"; type AuthJsonCredential = diff --git a/src/agents/pi-embedded-helpers/bootstrap.ts b/src/agents/pi-embedded-helpers/bootstrap.ts index 749ec1afc9..87f5d59c97 100644 --- a/src/agents/pi-embedded-helpers/bootstrap.ts +++ b/src/agents/pi-embedded-helpers/bootstrap.ts @@ -1,10 +1,10 @@ -import type { AgentMessage } from "@mariozechner/pi-agent-core"; import fs from "node:fs/promises"; import path from "node:path"; +import type { AgentMessage } from "@mariozechner/pi-agent-core"; import type { OpenClawConfig } from "../../config/config.js"; +import { truncateUtf16Safe } from "../../utils.js"; import type { WorkspaceBootstrapFile } from "../workspace.js"; import type { EmbeddedContextFile } from "./types.js"; -import { truncateUtf16Safe } from "../../utils.js"; type ContentBlockWithSignature = { thought_signature?: unknown; diff --git a/src/agents/pi-embedded-helpers/errors.ts b/src/agents/pi-embedded-helpers/errors.ts index 98a740e2f5..7c08ccef94 100644 --- a/src/agents/pi-embedded-helpers/errors.ts +++ b/src/agents/pi-embedded-helpers/errors.ts @@ -1,7 +1,7 @@ import type { AssistantMessage } from "@mariozechner/pi-ai"; import type { OpenClawConfig } from "../../config/config.js"; -import type { FailoverReason } from "./types.js"; import { formatSandboxToolPolicyBlockedMessage } from "../sandbox.js"; +import type { FailoverReason } from "./types.js"; export function formatBillingErrorMessage(provider?: string): string { const providerName = provider?.trim(); diff --git a/src/agents/pi-embedded-runner.buildembeddedsandboxinfo.e2e.test.ts b/src/agents/pi-embedded-runner.buildembeddedsandboxinfo.e2e.test.ts index 128d16d644..8b225ff89c 100644 --- a/src/agents/pi-embedded-runner.buildembeddedsandboxinfo.e2e.test.ts +++ b/src/agents/pi-embedded-runner.buildembeddedsandboxinfo.e2e.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import type { SandboxContext } from "./sandbox.js"; import { buildEmbeddedSandboxInfo } from "./pi-embedded-runner.js"; +import type { SandboxContext } from "./sandbox.js"; function createSandboxContext(overrides?: Partial): SandboxContext { const base = { diff --git a/src/agents/pi-embedded-runner.run-embedded-pi-agent.auth-profile-rotation.e2e.test.ts b/src/agents/pi-embedded-runner.run-embedded-pi-agent.auth-profile-rotation.e2e.test.ts index 14545cf153..49327be8ac 100644 --- a/src/agents/pi-embedded-runner.run-embedded-pi-agent.auth-profile-rotation.e2e.test.ts +++ b/src/agents/pi-embedded-runner.run-embedded-pi-agent.auth-profile-rotation.e2e.test.ts @@ -1,7 +1,7 @@ -import type { AssistantMessage } from "@mariozechner/pi-ai"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import type { AssistantMessage } from "@mariozechner/pi-ai"; import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import type { OpenClawConfig } from "../config/config.js"; import type { EmbeddedRunAttemptResult } from "./pi-embedded-runner/run/types.js"; diff --git a/src/agents/pi-embedded-runner/compact.ts b/src/agents/pi-embedded-runner/compact.ts index 7d2f8815c7..5b78971037 100644 --- a/src/agents/pi-embedded-runner/compact.ts +++ b/src/agents/pi-embedded-runner/compact.ts @@ -1,3 +1,5 @@ +import fs from "node:fs/promises"; +import os from "node:os"; import type { AgentMessage } from "@mariozechner/pi-agent-core"; import { createAgentSession, @@ -5,14 +7,10 @@ import { SessionManager, SettingsManager, } from "@mariozechner/pi-coding-agent"; -import fs from "node:fs/promises"; -import os from "node:os"; -import type { ReasoningLevel, ThinkLevel } from "../../auto-reply/thinking.js"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { ExecElevatedDefaults } from "../bash-tools.js"; -import type { EmbeddedPiCompactResult } from "./types.js"; import { resolveHeartbeatPrompt } from "../../auto-reply/heartbeat.js"; +import type { ReasoningLevel, ThinkLevel } from "../../auto-reply/thinking.js"; import { resolveChannelCapabilities } from "../../config/channel-capabilities.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { getMachineDisplayName } from "../../infra/machine-name.js"; import { getGlobalHookRunner } from "../../plugins/hook-runner-global.js"; import { type enqueueCommand, enqueueCommandInLane } from "../../process/command-queue.js"; @@ -26,6 +24,7 @@ import { normalizeMessageChannel } from "../../utils/message-channel.js"; import { isReasoningTagProvider } from "../../utils/provider-utils.js"; import { resolveOpenClawAgentDir } from "../agent-paths.js"; import { resolveSessionAgentIds } from "../agent-scope.js"; +import type { ExecElevatedDefaults } from "../bash-tools.js"; import { makeBootstrapWarn, resolveBootstrapContextForRun } from "../bootstrap-files.js"; import { listChannelSupportedActions, resolveChannelMessageToolHints } from "../channel-tools.js"; import { formatUserTime, resolveUserTimeFormat, resolveUserTimezone } from "../date-time.js"; @@ -82,6 +81,7 @@ import { createSystemPromptOverride, } from "./system-prompt.js"; import { splitSdkTools } from "./tool-split.js"; +import type { EmbeddedPiCompactResult } from "./types.js"; import { describeUnknownError, mapThinkingLevel } from "./utils.js"; import { flushPendingToolResultsAfterIdle } from "./wait-for-idle-before-flush.js"; diff --git a/src/agents/pi-embedded-runner/extensions.ts b/src/agents/pi-embedded-runner/extensions.ts index c6e7a637f2..3fa7b90a30 100644 --- a/src/agents/pi-embedded-runner/extensions.ts +++ b/src/agents/pi-embedded-runner/extensions.ts @@ -1,7 +1,7 @@ -import type { Api, Model } from "@mariozechner/pi-ai"; -import type { SessionManager } from "@mariozechner/pi-coding-agent"; import path from "node:path"; import { fileURLToPath } from "node:url"; +import type { Api, Model } from "@mariozechner/pi-ai"; +import type { SessionManager } from "@mariozechner/pi-coding-agent"; import type { OpenClawConfig } from "../../config/config.js"; import { resolveContextWindowInfo } from "../context-window-guard.js"; import { DEFAULT_CONTEXT_TOKENS } from "../defaults.js"; diff --git a/src/agents/pi-embedded-runner/google.ts b/src/agents/pi-embedded-runner/google.ts index 0666e3b02f..6cd261e4f9 100644 --- a/src/agents/pi-embedded-runner/google.ts +++ b/src/agents/pi-embedded-runner/google.ts @@ -1,8 +1,7 @@ +import { EventEmitter } from "node:events"; import type { AgentMessage, AgentTool } from "@mariozechner/pi-agent-core"; import type { SessionManager } from "@mariozechner/pi-coding-agent"; import type { TSchema } from "@sinclair/typebox"; -import { EventEmitter } from "node:events"; -import type { TranscriptPolicy } from "../transcript-policy.js"; import { registerUnhandledRejectionHandler } from "../../infra/unhandled-rejections.js"; import { hasInterSessionUserProvenance, @@ -21,6 +20,7 @@ import { stripToolResultDetails, sanitizeToolUseResultPairing, } from "../session-transcript-repair.js"; +import type { TranscriptPolicy } from "../transcript-policy.js"; import { resolveTranscriptPolicy } from "../transcript-policy.js"; import { log } from "./logger.js"; import { describeUnknownError } from "./utils.js"; diff --git a/src/agents/pi-embedded-runner/run.ts b/src/agents/pi-embedded-runner/run.ts index 381b23b27f..6c84f9268c 100644 --- a/src/agents/pi-embedded-runner/run.ts +++ b/src/agents/pi-embedded-runner/run.ts @@ -1,7 +1,5 @@ import fs from "node:fs/promises"; import type { ThinkLevel } from "../../auto-reply/thinking.js"; -import type { RunEmbeddedPiAgentParams } from "./run/params.js"; -import type { EmbeddedPiAgentMeta, EmbeddedPiRunResult } from "./types.js"; import { getGlobalHookRunner } from "../../plugins/hook-runner-global.js"; import { enqueueCommandInLane } from "../../process/command-queue.js"; import { isMarkdownCapableMessageChannel } from "../../utils/message-channel.js"; @@ -52,11 +50,13 @@ import { resolveGlobalLane, resolveSessionLane } from "./lanes.js"; import { log } from "./logger.js"; import { resolveModel } from "./model.js"; import { runEmbeddedAttempt } from "./run/attempt.js"; +import type { RunEmbeddedPiAgentParams } from "./run/params.js"; import { buildEmbeddedRunPayloads } from "./run/payloads.js"; import { truncateOversizedToolResultsInSession, sessionLikelyHasOversizedToolResults, } from "./tool-result-truncation.js"; +import type { EmbeddedPiAgentMeta, EmbeddedPiRunResult } from "./types.js"; import { describeUnknownError } from "./utils.js"; type ApiKeyInfo = ResolvedProviderAuth; diff --git a/src/agents/pi-embedded-runner/run/attempt.ts b/src/agents/pi-embedded-runner/run/attempt.ts index 1d79a7c5cc..11bf3f5da3 100644 --- a/src/agents/pi-embedded-runner/run/attempt.ts +++ b/src/agents/pi-embedded-runner/run/attempt.ts @@ -1,10 +1,9 @@ +import fs from "node:fs/promises"; +import os from "node:os"; import type { AgentMessage } from "@mariozechner/pi-agent-core"; import type { ImageContent } from "@mariozechner/pi-ai"; import { streamSimple } from "@mariozechner/pi-ai"; import { createAgentSession, SessionManager, SettingsManager } from "@mariozechner/pi-coding-agent"; -import fs from "node:fs/promises"; -import os from "node:os"; -import type { EmbeddedRunAttemptParams, EmbeddedRunAttemptResult } from "./types.js"; import { resolveHeartbeatPrompt } from "../../../auto-reply/heartbeat.js"; import { resolveChannelCapabilities } from "../../../config/channel-capabilities.js"; import { getMachineDisplayName } from "../../../infra/machine-name.js"; @@ -104,6 +103,7 @@ import { shouldFlagCompactionTimeout, } from "./compaction-timeout.js"; import { detectAndLoadPromptImages } from "./images.js"; +import type { EmbeddedRunAttemptParams, EmbeddedRunAttemptResult } from "./types.js"; export function injectHistoryImagesIntoMessages( messages: AgentMessage[], diff --git a/src/agents/pi-embedded-runner/run/images.ts b/src/agents/pi-embedded-runner/run/images.ts index 83ed670583..be6f8d0373 100644 --- a/src/agents/pi-embedded-runner/run/images.ts +++ b/src/agents/pi-embedded-runner/run/images.ts @@ -1,9 +1,9 @@ -import type { ImageContent } from "@mariozechner/pi-ai"; import path from "node:path"; import { fileURLToPath } from "node:url"; -import type { SandboxFsBridge } from "../../sandbox/fs-bridge.js"; +import type { ImageContent } from "@mariozechner/pi-ai"; import { resolveUserPath } from "../../../utils.js"; import { loadWebMedia } from "../../../web/media.js"; +import type { SandboxFsBridge } from "../../sandbox/fs-bridge.js"; import { sanitizeImageBlocks } from "../../tool-images.js"; import { log } from "../logger.js"; diff --git a/src/agents/pi-embedded-runner/run/payloads.ts b/src/agents/pi-embedded-runner/run/payloads.ts index ba42a50758..9fae3dc9c7 100644 --- a/src/agents/pi-embedded-runner/run/payloads.ts +++ b/src/agents/pi-embedded-runner/run/payloads.ts @@ -1,10 +1,9 @@ import type { AssistantMessage } from "@mariozechner/pi-ai"; -import type { ReasoningLevel, VerboseLevel } from "../../../auto-reply/thinking.js"; -import type { OpenClawConfig } from "../../../config/config.js"; -import type { ToolResultFormat } from "../../pi-embedded-subscribe.js"; import { parseReplyDirectives } from "../../../auto-reply/reply/reply-directives.js"; +import type { ReasoningLevel, VerboseLevel } from "../../../auto-reply/thinking.js"; import { isSilentReplyText, SILENT_REPLY_TOKEN } from "../../../auto-reply/tokens.js"; import { formatToolAggregate } from "../../../auto-reply/tool-meta.js"; +import type { OpenClawConfig } from "../../../config/config.js"; import { BILLING_ERROR_USER_MESSAGE, formatAssistantErrorText, @@ -13,6 +12,7 @@ import { isRawApiErrorPayload, normalizeTextForComparison, } from "../../pi-embedded-helpers.js"; +import type { ToolResultFormat } from "../../pi-embedded-subscribe.js"; import { extractAssistantText, extractAssistantThinking, diff --git a/src/agents/pi-embedded-runner/system-prompt.ts b/src/agents/pi-embedded-runner/system-prompt.ts index bc040f5e3c..9549619533 100644 --- a/src/agents/pi-embedded-runner/system-prompt.ts +++ b/src/agents/pi-embedded-runner/system-prompt.ts @@ -3,10 +3,10 @@ import type { AgentSession } from "@mariozechner/pi-coding-agent"; import type { MemoryCitationsMode } from "../../config/types.memory.js"; import type { ResolvedTimeFormat } from "../date-time.js"; import type { EmbeddedContextFile } from "../pi-embedded-helpers.js"; -import type { EmbeddedSandboxInfo } from "./types.js"; -import type { ReasoningLevel, ThinkLevel } from "./utils.js"; import { buildAgentSystemPrompt, type PromptMode } from "../system-prompt.js"; import { buildToolSummaryMap } from "../tool-summaries.js"; +import type { EmbeddedSandboxInfo } from "./types.js"; +import type { ReasoningLevel, ThinkLevel } from "./utils.js"; export function buildEmbeddedSystemPrompt(params: { workspaceDir: string; diff --git a/src/agents/pi-embedded-subscribe.handlers.compaction.ts b/src/agents/pi-embedded-subscribe.handlers.compaction.ts index fa7c46b8bd..f28e47d1a9 100644 --- a/src/agents/pi-embedded-subscribe.handlers.compaction.ts +++ b/src/agents/pi-embedded-subscribe.handlers.compaction.ts @@ -1,7 +1,7 @@ import type { AgentEvent } from "@mariozechner/pi-agent-core"; -import type { EmbeddedPiSubscribeContext } from "./pi-embedded-subscribe.handlers.types.js"; import { emitAgentEvent } from "../infra/agent-events.js"; import { getGlobalHookRunner } from "../plugins/hook-runner-global.js"; +import type { EmbeddedPiSubscribeContext } from "./pi-embedded-subscribe.handlers.types.js"; export function handleAutoCompactionStart(ctx: EmbeddedPiSubscribeContext) { ctx.state.compactionInFlight = true; diff --git a/src/agents/pi-embedded-subscribe.handlers.lifecycle.ts b/src/agents/pi-embedded-subscribe.handlers.lifecycle.ts index fdf3f54dd0..d578be3c51 100644 --- a/src/agents/pi-embedded-subscribe.handlers.lifecycle.ts +++ b/src/agents/pi-embedded-subscribe.handlers.lifecycle.ts @@ -1,7 +1,7 @@ -import type { EmbeddedPiSubscribeContext } from "./pi-embedded-subscribe.handlers.types.js"; import { emitAgentEvent } from "../infra/agent-events.js"; import { createInlineCodeState } from "../markdown/code-spans.js"; import { formatAssistantErrorText } from "./pi-embedded-helpers.js"; +import type { EmbeddedPiSubscribeContext } from "./pi-embedded-subscribe.handlers.types.js"; import { isAssistantMessage } from "./pi-embedded-utils.js"; export { diff --git a/src/agents/pi-embedded-subscribe.handlers.messages.ts b/src/agents/pi-embedded-subscribe.handlers.messages.ts index 0812e5956b..f4eec20921 100644 --- a/src/agents/pi-embedded-subscribe.handlers.messages.ts +++ b/src/agents/pi-embedded-subscribe.handlers.messages.ts @@ -1,5 +1,4 @@ import type { AgentEvent, AgentMessage } from "@mariozechner/pi-agent-core"; -import type { EmbeddedPiSubscribeContext } from "./pi-embedded-subscribe.handlers.types.js"; import { parseReplyDirectives } from "../auto-reply/reply/reply-directives.js"; import { SILENT_REPLY_TOKEN } from "../auto-reply/tokens.js"; import { emitAgentEvent } from "../infra/agent-events.js"; @@ -8,6 +7,7 @@ import { isMessagingToolDuplicateNormalized, normalizeTextForComparison, } from "./pi-embedded-helpers.js"; +import type { EmbeddedPiSubscribeContext } from "./pi-embedded-subscribe.handlers.types.js"; import { appendRawStream } from "./pi-embedded-subscribe.raw-stream.js"; import { extractAssistantText, diff --git a/src/agents/pi-embedded-subscribe.handlers.tools.media.test-helpers.ts b/src/agents/pi-embedded-subscribe.handlers.tools.media.test-helpers.ts index 057bf55627..378ae575f4 100644 --- a/src/agents/pi-embedded-subscribe.handlers.tools.media.test-helpers.ts +++ b/src/agents/pi-embedded-subscribe.handlers.tools.media.test-helpers.ts @@ -1,11 +1,11 @@ import type { AgentEvent } from "@mariozechner/pi-agent-core"; import type { Mock } from "vitest"; -import type { EmbeddedPiSubscribeContext } from "./pi-embedded-subscribe.handlers.types.js"; -import type { SubscribeEmbeddedPiSessionParams } from "./pi-embedded-subscribe.types.js"; import { handleToolExecutionEnd, handleToolExecutionStart, } from "./pi-embedded-subscribe.handlers.tools.js"; +import type { EmbeddedPiSubscribeContext } from "./pi-embedded-subscribe.handlers.types.js"; +import type { SubscribeEmbeddedPiSessionParams } from "./pi-embedded-subscribe.types.js"; /** * Narrowed params type that omits the `session` class instance (never accessed diff --git a/src/agents/pi-embedded-subscribe.handlers.tools.media.test.ts b/src/agents/pi-embedded-subscribe.handlers.tools.media.test.ts index 0677a525fc..5d0a91b4fa 100644 --- a/src/agents/pi-embedded-subscribe.handlers.tools.media.test.ts +++ b/src/agents/pi-embedded-subscribe.handlers.tools.media.test.ts @@ -1,9 +1,9 @@ import { describe, expect, it, vi } from "vitest"; -import type { EmbeddedPiSubscribeContext } from "./pi-embedded-subscribe.handlers.types.js"; import { handleToolExecutionEnd, handleToolExecutionStart, } from "./pi-embedded-subscribe.handlers.tools.js"; +import type { EmbeddedPiSubscribeContext } from "./pi-embedded-subscribe.handlers.types.js"; // Minimal mock context factory. Only the fields needed for the media emission path. function createMockContext(overrides?: { diff --git a/src/agents/pi-embedded-subscribe.handlers.tools.test.ts b/src/agents/pi-embedded-subscribe.handlers.tools.test.ts index 473f6fdb8d..c03eb00da5 100644 --- a/src/agents/pi-embedded-subscribe.handlers.tools.test.ts +++ b/src/agents/pi-embedded-subscribe.handlers.tools.test.ts @@ -1,14 +1,14 @@ import type { AgentEvent } from "@mariozechner/pi-agent-core"; import { describe, expect, it, vi } from "vitest"; import type { MessagingToolSend } from "./pi-embedded-messaging.js"; -import type { - ToolCallSummary, - ToolHandlerContext, -} from "./pi-embedded-subscribe.handlers.types.js"; import { handleToolExecutionEnd, handleToolExecutionStart, } from "./pi-embedded-subscribe.handlers.tools.js"; +import type { + ToolCallSummary, + ToolHandlerContext, +} from "./pi-embedded-subscribe.handlers.types.js"; type ToolExecutionStartEvent = Extract; type ToolExecutionEndEvent = Extract; diff --git a/src/agents/pi-embedded-subscribe.handlers.tools.ts b/src/agents/pi-embedded-subscribe.handlers.tools.ts index d7bbbc9e07..e5569ae5d5 100644 --- a/src/agents/pi-embedded-subscribe.handlers.tools.ts +++ b/src/agents/pi-embedded-subscribe.handlers.tools.ts @@ -1,13 +1,13 @@ import type { AgentEvent } from "@mariozechner/pi-agent-core"; +import { emitAgentEvent } from "../infra/agent-events.js"; +import { getGlobalHookRunner } from "../plugins/hook-runner-global.js"; import type { PluginHookAfterToolCallEvent } from "../plugins/types.js"; +import { normalizeTextForComparison } from "./pi-embedded-helpers.js"; +import { isMessagingTool, isMessagingToolSendAction } from "./pi-embedded-messaging.js"; import type { ToolCallSummary, ToolHandlerContext, } from "./pi-embedded-subscribe.handlers.types.js"; -import { emitAgentEvent } from "../infra/agent-events.js"; -import { getGlobalHookRunner } from "../plugins/hook-runner-global.js"; -import { normalizeTextForComparison } from "./pi-embedded-helpers.js"; -import { isMessagingTool, isMessagingToolSendAction } from "./pi-embedded-messaging.js"; import { extractToolErrorMessage, extractToolResultMediaPaths, diff --git a/src/agents/pi-embedded-subscribe.handlers.ts b/src/agents/pi-embedded-subscribe.handlers.ts index c68eda4b40..96ebe52ff1 100644 --- a/src/agents/pi-embedded-subscribe.handlers.ts +++ b/src/agents/pi-embedded-subscribe.handlers.ts @@ -1,7 +1,3 @@ -import type { - EmbeddedPiSubscribeContext, - EmbeddedPiSubscribeEvent, -} from "./pi-embedded-subscribe.handlers.types.js"; import { handleAgentEnd, handleAgentStart, @@ -18,6 +14,10 @@ import { handleToolExecutionStart, handleToolExecutionUpdate, } from "./pi-embedded-subscribe.handlers.tools.js"; +import type { + EmbeddedPiSubscribeContext, + EmbeddedPiSubscribeEvent, +} from "./pi-embedded-subscribe.handlers.types.js"; export function createEmbeddedPiSessionEventHandler(ctx: EmbeddedPiSubscribeContext) { return (evt: EmbeddedPiSubscribeEvent) => { diff --git a/src/agents/pi-embedded-subscribe.ts b/src/agents/pi-embedded-subscribe.ts index 1445eebe76..594cc43862 100644 --- a/src/agents/pi-embedded-subscribe.ts +++ b/src/agents/pi-embedded-subscribe.ts @@ -1,15 +1,10 @@ import type { AgentMessage } from "@mariozechner/pi-agent-core"; -import type { InlineCodeState } from "../markdown/code-spans.js"; -import type { - EmbeddedPiSubscribeContext, - EmbeddedPiSubscribeState, -} from "./pi-embedded-subscribe.handlers.types.js"; -import type { SubscribeEmbeddedPiSessionParams } from "./pi-embedded-subscribe.types.js"; import { parseReplyDirectives } from "../auto-reply/reply/reply-directives.js"; import { createStreamingDirectiveAccumulator } from "../auto-reply/reply/streaming-directives.js"; import { formatToolAggregate } from "../auto-reply/tool-meta.js"; import { emitAgentEvent } from "../infra/agent-events.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; +import type { InlineCodeState } from "../markdown/code-spans.js"; import { buildCodeSpanIndex, createInlineCodeState } from "../markdown/code-spans.js"; import { EmbeddedBlockChunker } from "./pi-embedded-block-chunker.js"; import { @@ -17,6 +12,11 @@ import { normalizeTextForComparison, } from "./pi-embedded-helpers.js"; import { createEmbeddedPiSessionEventHandler } from "./pi-embedded-subscribe.handlers.js"; +import type { + EmbeddedPiSubscribeContext, + EmbeddedPiSubscribeState, +} from "./pi-embedded-subscribe.handlers.types.js"; +import type { SubscribeEmbeddedPiSessionParams } from "./pi-embedded-subscribe.types.js"; import { formatReasoningMessage, stripDowngradedToolCallText } from "./pi-embedded-utils.js"; import { hasNonzeroUsage, normalizeUsage, type UsageLike } from "./usage.js"; diff --git a/src/agents/pi-extensions/compaction-safeguard.ts b/src/agents/pi-extensions/compaction-safeguard.ts index 9ecbaf4d42..a513c88c51 100644 --- a/src/agents/pi-extensions/compaction-safeguard.ts +++ b/src/agents/pi-extensions/compaction-safeguard.ts @@ -1,7 +1,7 @@ -import type { AgentMessage } from "@mariozechner/pi-agent-core"; -import type { ExtensionAPI, FileOperations } from "@mariozechner/pi-coding-agent"; import fs from "node:fs"; import path from "node:path"; +import type { AgentMessage } from "@mariozechner/pi-agent-core"; +import type { ExtensionAPI, FileOperations } from "@mariozechner/pi-coding-agent"; import { extractSections } from "../../auto-reply/reply/post-compaction-context.js"; import { BASE_CHUNK_RATIO, diff --git a/src/agents/pi-extensions/context-pruning/runtime.ts b/src/agents/pi-extensions/context-pruning/runtime.ts index 6d4fd07a2f..9c523b982c 100644 --- a/src/agents/pi-extensions/context-pruning/runtime.ts +++ b/src/agents/pi-extensions/context-pruning/runtime.ts @@ -1,5 +1,5 @@ -import type { EffectiveContextPruningSettings } from "./settings.js"; import { createSessionManagerRuntimeRegistry } from "../session-manager-runtime-registry.js"; +import type { EffectiveContextPruningSettings } from "./settings.js"; export type ContextPruningRuntimeValue = { settings: EffectiveContextPruningSettings; diff --git a/src/agents/pi-extensions/context-pruning/tools.ts b/src/agents/pi-extensions/context-pruning/tools.ts index b25b981cef..054861b63a 100644 --- a/src/agents/pi-extensions/context-pruning/tools.ts +++ b/src/agents/pi-extensions/context-pruning/tools.ts @@ -1,5 +1,5 @@ -import type { ContextPruningToolMatch } from "./settings.js"; import { compileGlobPatterns, matchesAnyGlobPattern } from "../../glob-pattern.js"; +import type { ContextPruningToolMatch } from "./settings.js"; function normalizeGlob(value: string) { return String(value ?? "") diff --git a/src/agents/pi-model-discovery.ts b/src/agents/pi-model-discovery.ts index e6726cf4cc..012e89e501 100644 --- a/src/agents/pi-model-discovery.ts +++ b/src/agents/pi-model-discovery.ts @@ -1,5 +1,5 @@ -import { AuthStorage, ModelRegistry } from "@mariozechner/pi-coding-agent"; import path from "node:path"; +import { AuthStorage, ModelRegistry } from "@mariozechner/pi-coding-agent"; export { AuthStorage, ModelRegistry } from "@mariozechner/pi-coding-agent"; diff --git a/src/agents/pi-tool-definition-adapter.ts b/src/agents/pi-tool-definition-adapter.ts index 1cf872b483..6db2bda63b 100644 --- a/src/agents/pi-tool-definition-adapter.ts +++ b/src/agents/pi-tool-definition-adapter.ts @@ -4,11 +4,11 @@ import type { AgentToolUpdateCallback, } from "@mariozechner/pi-agent-core"; import type { ToolDefinition } from "@mariozechner/pi-coding-agent"; -import type { ClientToolDefinition } from "./pi-embedded-runner/run/params.js"; -import type { HookContext } from "./pi-tools.before-tool-call.js"; import { logDebug, logError } from "../logger.js"; import { getGlobalHookRunner } from "../plugins/hook-runner-global.js"; import { isPlainObject } from "../utils.js"; +import type { ClientToolDefinition } from "./pi-embedded-runner/run/params.js"; +import type { HookContext } from "./pi-tools.before-tool-call.js"; import { consumeAdjustedParamsForToolCall, isToolWrappedWithBeforeToolCallHook, diff --git a/src/agents/pi-tools-agent-config.e2e.test.ts b/src/agents/pi-tools-agent-config.e2e.test.ts index 195305bb58..d8f9a1c866 100644 --- a/src/agents/pi-tools-agent-config.e2e.test.ts +++ b/src/agents/pi-tools-agent-config.e2e.test.ts @@ -4,9 +4,9 @@ import path from "node:path"; import { describe, expect, it } from "vitest"; import "./test-helpers/fast-coding-tools.js"; import type { OpenClawConfig } from "../config/config.js"; +import { createOpenClawCodingTools } from "./pi-tools.js"; import type { SandboxDockerConfig } from "./sandbox.js"; import type { SandboxFsBridge } from "./sandbox/fs-bridge.js"; -import { createOpenClawCodingTools } from "./pi-tools.js"; type ToolWithExecute = { execute: (toolCallId: string, args: unknown, signal?: AbortSignal) => Promise; diff --git a/src/agents/pi-tools.abort.ts b/src/agents/pi-tools.abort.ts index 50d08daf10..a1ff30ac4d 100644 --- a/src/agents/pi-tools.abort.ts +++ b/src/agents/pi-tools.abort.ts @@ -1,5 +1,5 @@ -import type { AnyAgentTool } from "./pi-tools.types.js"; import { bindAbortRelay } from "../utils/fetch-timeout.js"; +import type { AnyAgentTool } from "./pi-tools.types.js"; function throwAbortError(): never { const err = new Error("Aborted"); diff --git a/src/agents/pi-tools.before-tool-call.test.ts b/src/agents/pi-tools.before-tool-call.test.ts index d9ef2703d7..df5d9d3a2c 100644 --- a/src/agents/pi-tools.before-tool-call.test.ts +++ b/src/agents/pi-tools.before-tool-call.test.ts @@ -1,5 +1,4 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { AnyAgentTool } from "./tools/common.js"; import { onDiagnosticEvent, resetDiagnosticEventsForTest, @@ -9,6 +8,7 @@ import { resetDiagnosticSessionStateForTest } from "../logging/diagnostic-sessio import { getGlobalHookRunner } from "../plugins/hook-runner-global.js"; import { wrapToolWithBeforeToolCallHook } from "./pi-tools.before-tool-call.js"; import { CRITICAL_THRESHOLD, GLOBAL_CIRCUIT_BREAKER_THRESHOLD } from "./tool-loop-detection.js"; +import type { AnyAgentTool } from "./tools/common.js"; vi.mock("../plugins/hook-runner-global.js"); diff --git a/src/agents/pi-tools.before-tool-call.ts b/src/agents/pi-tools.before-tool-call.ts index 50412f5604..1198c813fc 100644 --- a/src/agents/pi-tools.before-tool-call.ts +++ b/src/agents/pi-tools.before-tool-call.ts @@ -1,10 +1,10 @@ import type { ToolLoopDetectionConfig } from "../config/types.tools.js"; import type { SessionState } from "../logging/diagnostic-session-state.js"; -import type { AnyAgentTool } from "./tools/common.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { getGlobalHookRunner } from "../plugins/hook-runner-global.js"; import { isPlainObject } from "../utils.js"; import { normalizeToolName } from "./tool-policy.js"; +import type { AnyAgentTool } from "./tools/common.js"; export type HookContext = { agentId?: string; diff --git a/src/agents/pi-tools.create-openclaw-coding-tools.adds-claude-style-aliases-schemas-without-dropping.e2e.test.ts b/src/agents/pi-tools.create-openclaw-coding-tools.adds-claude-style-aliases-schemas-without-dropping.e2e.test.ts index 51ccca68c4..f580f04c2b 100644 --- a/src/agents/pi-tools.create-openclaw-coding-tools.adds-claude-style-aliases-schemas-without-dropping.e2e.test.ts +++ b/src/agents/pi-tools.create-openclaw-coding-tools.adds-claude-style-aliases-schemas-without-dropping.e2e.test.ts @@ -1,7 +1,7 @@ -import type { AgentTool } from "@mariozechner/pi-agent-core"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import type { AgentTool } from "@mariozechner/pi-agent-core"; import { describe, expect, it, vi } from "vitest"; import "./test-helpers/fast-coding-tools.js"; import { createOpenClawTools } from "./openclaw-tools.js"; diff --git a/src/agents/pi-tools.policy.ts b/src/agents/pi-tools.policy.ts index caed3ca302..14b0e2d29b 100644 --- a/src/agents/pi-tools.policy.ts +++ b/src/agents/pi-tools.policy.ts @@ -1,13 +1,13 @@ -import type { OpenClawConfig } from "../config/config.js"; -import type { AnyAgentTool } from "./pi-tools.types.js"; -import type { SandboxToolPolicy } from "./sandbox.js"; import { getChannelDock } from "../channels/dock.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveChannelGroupToolsPolicy } from "../config/group-policy.js"; import { resolveThreadParentSessionKey } from "../sessions/session-key-utils.js"; import { normalizeMessageChannel } from "../utils/message-channel.js"; import { resolveAgentConfig, resolveAgentIdFromSessionKey } from "./agent-scope.js"; import { compileGlobPatterns, matchesAnyGlobPattern } from "./glob-pattern.js"; +import type { AnyAgentTool } from "./pi-tools.types.js"; import { pickSandboxToolPolicy } from "./sandbox-tool-policy.js"; +import type { SandboxToolPolicy } from "./sandbox.js"; import { expandToolGroups, normalizeToolName } from "./tool-policy.js"; function makeToolPolicyMatcher(policy: SandboxToolPolicy) { diff --git a/src/agents/pi-tools.read.ts b/src/agents/pi-tools.read.ts index 71e9bb7234..f35a75a56d 100644 --- a/src/agents/pi-tools.read.ts +++ b/src/agents/pi-tools.read.ts @@ -1,10 +1,10 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; import { createEditTool, createReadTool, createWriteTool } from "@mariozechner/pi-coding-agent"; -import type { AnyAgentTool } from "./pi-tools.types.js"; -import type { SandboxFsBridge } from "./sandbox/fs-bridge.js"; import { detectMime } from "../media/mime.js"; import { sniffMimeFromBase64 } from "../media/sniff-mime-from-base64.js"; +import type { AnyAgentTool } from "./pi-tools.types.js"; import { assertSandboxPath } from "./sandbox-paths.js"; +import type { SandboxFsBridge } from "./sandbox/fs-bridge.js"; import { sanitizeToolResultImages } from "./tool-images.js"; // NOTE(steipete): Upstream read now does file-magic MIME detection; we keep the wrapper diff --git a/src/agents/pi-tools.sandbox-mounted-paths.workspace-only.test.ts b/src/agents/pi-tools.sandbox-mounted-paths.workspace-only.test.ts index 5fd1b204fe..c26a446224 100644 --- a/src/agents/pi-tools.sandbox-mounted-paths.workspace-only.test.ts +++ b/src/agents/pi-tools.sandbox-mounted-paths.workspace-only.test.ts @@ -3,9 +3,9 @@ import os from "node:os"; import path from "node:path"; import { describe, expect, it, vi } from "vitest"; import type { OpenClawConfig } from "../config/config.js"; +import { createOpenClawCodingTools } from "./pi-tools.js"; import type { SandboxContext } from "./sandbox.js"; import type { SandboxFsBridge, SandboxResolvedPath } from "./sandbox/fs-bridge.js"; -import { createOpenClawCodingTools } from "./pi-tools.js"; import { createSandboxFsBridgeFromResolver } from "./test-helpers/host-sandbox-fs-bridge.js"; vi.mock("../infra/shell-env.js", async (importOriginal) => { diff --git a/src/agents/pi-tools.ts b/src/agents/pi-tools.ts index d7103d6381..39fde7b58e 100644 --- a/src/agents/pi-tools.ts +++ b/src/agents/pi-tools.ts @@ -7,9 +7,6 @@ import { } from "@mariozechner/pi-coding-agent"; import type { OpenClawConfig } from "../config/config.js"; import type { ToolLoopDetectionConfig } from "../config/types.tools.js"; -import type { ModelAuthMode } from "./model-auth.js"; -import type { AnyAgentTool } from "./pi-tools.types.js"; -import type { SandboxContext } from "./sandbox.js"; import { logWarn } from "../logger.js"; import { getPluginToolMeta } from "../plugins/tools.js"; import { isSubagentSessionKey } from "../routing/session-key.js"; @@ -23,6 +20,7 @@ import { type ProcessToolDefaults, } from "./bash-tools.js"; import { listChannelAgentTools } from "./channel-tools.js"; +import type { ModelAuthMode } from "./model-auth.js"; import { createOpenClawTools } from "./openclaw-tools.js"; import { wrapToolWithAbortSignal } from "./pi-tools.abort.js"; import { wrapToolWithBeforeToolCallHook } from "./pi-tools.before-tool-call.js"; @@ -45,6 +43,8 @@ import { wrapToolParamNormalization, } from "./pi-tools.read.js"; import { cleanToolSchemaForGemini, normalizeToolParameters } from "./pi-tools.schema.js"; +import type { AnyAgentTool } from "./pi-tools.types.js"; +import type { SandboxContext } from "./sandbox.js"; import { getSubagentDepthFromSessionStore } from "./subagent-depth.js"; import { applyToolPolicyPipeline, diff --git a/src/agents/sandbox/browser.ts b/src/agents/sandbox/browser.ts index 1db2b227d6..487cd3e298 100644 --- a/src/agents/sandbox/browser.ts +++ b/src/agents/sandbox/browser.ts @@ -1,5 +1,4 @@ import crypto from "node:crypto"; -import type { SandboxBrowserContext, SandboxConfig } from "./types.js"; import { startBrowserBridgeServer, stopBrowserBridgeServer } from "../../browser/bridge-server.js"; import { type ResolvedBrowserConfig, resolveProfile } from "../../browser/config.js"; import { @@ -22,6 +21,7 @@ import { import { readBrowserRegistry, updateBrowserRegistry } from "./registry.js"; import { resolveSandboxAgentId, slugifySessionKey } from "./shared.js"; import { isToolAllowed } from "./tool-policy.js"; +import type { SandboxBrowserContext, SandboxConfig } from "./types.js"; const HOT_BROWSER_WINDOW_MS = 5 * 60 * 1000; diff --git a/src/agents/sandbox/config-hash.test.ts b/src/agents/sandbox/config-hash.test.ts index b00e42821c..be70a04702 100644 --- a/src/agents/sandbox/config-hash.test.ts +++ b/src/agents/sandbox/config-hash.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import type { SandboxDockerConfig } from "./types.js"; import { computeSandboxBrowserConfigHash, computeSandboxConfigHash } from "./config-hash.js"; +import type { SandboxDockerConfig } from "./types.js"; function createDockerConfig(overrides?: Partial): SandboxDockerConfig { return { diff --git a/src/agents/sandbox/config-hash.ts b/src/agents/sandbox/config-hash.ts index ca99dbf4dd..62dfd91425 100644 --- a/src/agents/sandbox/config-hash.ts +++ b/src/agents/sandbox/config-hash.ts @@ -1,5 +1,5 @@ -import type { SandboxBrowserConfig, SandboxDockerConfig, SandboxWorkspaceAccess } from "./types.js"; import { hashTextSha256 } from "./hash.js"; +import type { SandboxBrowserConfig, SandboxDockerConfig, SandboxWorkspaceAccess } from "./types.js"; type SandboxHashInput = { docker: SandboxDockerConfig; diff --git a/src/agents/sandbox/config.ts b/src/agents/sandbox/config.ts index ba4e51060d..f2735f29f1 100644 --- a/src/agents/sandbox/config.ts +++ b/src/agents/sandbox/config.ts @@ -1,11 +1,4 @@ import type { OpenClawConfig } from "../../config/config.js"; -import type { - SandboxBrowserConfig, - SandboxConfig, - SandboxDockerConfig, - SandboxPruneConfig, - SandboxScope, -} from "./types.js"; import { resolveAgentConfig } from "../agent-scope.js"; import { DEFAULT_SANDBOX_BROWSER_AUTOSTART_TIMEOUT_MS, @@ -22,6 +15,13 @@ import { DEFAULT_SANDBOX_WORKSPACE_ROOT, } from "./constants.js"; import { resolveSandboxToolPolicyForAgent } from "./tool-policy.js"; +import type { + SandboxBrowserConfig, + SandboxConfig, + SandboxDockerConfig, + SandboxPruneConfig, + SandboxScope, +} from "./types.js"; export function resolveSandboxBrowserDockerCreateConfig(params: { docker: SandboxDockerConfig; diff --git a/src/agents/sandbox/context.ts b/src/agents/sandbox/context.ts index b0eb0ffd9e..34bc45846b 100644 --- a/src/agents/sandbox/context.ts +++ b/src/agents/sandbox/context.ts @@ -1,8 +1,7 @@ import fs from "node:fs/promises"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { SandboxContext, SandboxWorkspaceInfo } from "./types.js"; import { DEFAULT_BROWSER_EVALUATE_ENABLED } from "../../browser/constants.js"; import { ensureBrowserControlAuth, resolveBrowserControlAuth } from "../../browser/control-auth.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { loadConfig } from "../../config/config.js"; import { defaultRuntime } from "../../runtime.js"; import { resolveUserPath } from "../../utils.js"; @@ -15,6 +14,7 @@ import { createSandboxFsBridge } from "./fs-bridge.js"; import { maybePruneSandboxes } from "./prune.js"; import { resolveSandboxRuntimeStatus } from "./runtime-status.js"; import { resolveSandboxScopeKey, resolveSandboxWorkspaceDir } from "./shared.js"; +import type { SandboxContext, SandboxWorkspaceInfo } from "./types.js"; import { ensureSandboxWorkspace } from "./workspace.js"; async function ensureSandboxWorkspaceLayout(params: { diff --git a/src/agents/sandbox/docker.config-hash-recreate.test.ts b/src/agents/sandbox/docker.config-hash-recreate.test.ts index ae8706a6b7..5bde8562f2 100644 --- a/src/agents/sandbox/docker.config-hash-recreate.test.ts +++ b/src/agents/sandbox/docker.config-hash-recreate.test.ts @@ -1,9 +1,9 @@ import { EventEmitter } from "node:events"; import { Readable } from "node:stream"; import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { SandboxConfig } from "./types.js"; import { computeSandboxConfigHash } from "./config-hash.js"; import { ensureSandboxContainer } from "./docker.js"; +import type { SandboxConfig } from "./types.js"; type SpawnCall = { command: string; diff --git a/src/agents/sandbox/docker.ts b/src/agents/sandbox/docker.ts index f87f7d5f5b..be3175b79f 100644 --- a/src/agents/sandbox/docker.ts +++ b/src/agents/sandbox/docker.ts @@ -104,13 +104,13 @@ export function execDockerRaw( }); } -import type { SandboxConfig, SandboxDockerConfig, SandboxWorkspaceAccess } from "./types.js"; import { formatCliCommand } from "../../cli/command-format.js"; import { defaultRuntime } from "../../runtime.js"; import { computeSandboxConfigHash } from "./config-hash.js"; import { DEFAULT_SANDBOX_IMAGE, SANDBOX_AGENT_WORKSPACE_MOUNT } from "./constants.js"; import { readRegistry, updateRegistry } from "./registry.js"; import { resolveSandboxAgentId, resolveSandboxScopeKey, slugifySessionKey } from "./shared.js"; +import type { SandboxConfig, SandboxDockerConfig, SandboxWorkspaceAccess } from "./types.js"; import { validateSandboxSecurity } from "./validate-sandbox-security.js"; const HOT_CONTAINER_WINDOW_MS = 5 * 60 * 1000; diff --git a/src/agents/sandbox/fs-bridge.test.ts b/src/agents/sandbox/fs-bridge.test.ts index c2d4148069..7dba40951e 100644 --- a/src/agents/sandbox/fs-bridge.test.ts +++ b/src/agents/sandbox/fs-bridge.test.ts @@ -4,10 +4,10 @@ vi.mock("./docker.js", () => ({ execDockerRaw: vi.fn(), })); -import type { SandboxContext } from "./types.js"; import { execDockerRaw } from "./docker.js"; import { createSandboxFsBridge } from "./fs-bridge.js"; import { createSandboxTestContext } from "./test-fixtures.js"; +import type { SandboxContext } from "./types.js"; const mockedExecDockerRaw = vi.mocked(execDockerRaw); diff --git a/src/agents/sandbox/fs-bridge.ts b/src/agents/sandbox/fs-bridge.ts index dae5f6f22c..c9e9a15037 100644 --- a/src/agents/sandbox/fs-bridge.ts +++ b/src/agents/sandbox/fs-bridge.ts @@ -1,10 +1,10 @@ -import type { SandboxContext, SandboxWorkspaceAccess } from "./types.js"; import { execDockerRaw, type ExecDockerRawResult } from "./docker.js"; import { buildSandboxFsMounts, resolveSandboxFsPathWithMounts, type SandboxResolvedFsPath, } from "./fs-paths.js"; +import type { SandboxContext, SandboxWorkspaceAccess } from "./types.js"; type RunCommandOptions = { args?: string[]; diff --git a/src/agents/sandbox/fs-paths.test.ts b/src/agents/sandbox/fs-paths.test.ts index 40d59395f0..52261863af 100644 --- a/src/agents/sandbox/fs-paths.test.ts +++ b/src/agents/sandbox/fs-paths.test.ts @@ -1,12 +1,12 @@ import path from "node:path"; import { describe, expect, it } from "vitest"; -import type { SandboxContext } from "./types.js"; import { buildSandboxFsMounts, parseSandboxBindMount, resolveSandboxFsPathWithMounts, } from "./fs-paths.js"; import { createSandboxTestContext } from "./test-fixtures.js"; +import type { SandboxContext } from "./types.js"; function createSandbox(overrides?: Partial): SandboxContext { return createSandboxTestContext({ overrides }); diff --git a/src/agents/sandbox/fs-paths.ts b/src/agents/sandbox/fs-paths.ts index 446d526684..018fcac071 100644 --- a/src/agents/sandbox/fs-paths.ts +++ b/src/agents/sandbox/fs-paths.ts @@ -1,7 +1,7 @@ import path from "node:path"; -import type { SandboxContext } from "./types.js"; import { resolveSandboxInputPath, resolveSandboxPath } from "../sandbox-paths.js"; import { SANDBOX_AGENT_WORKSPACE_MOUNT } from "./constants.js"; +import type { SandboxContext } from "./types.js"; export type SandboxFsMount = { hostRoot: string; diff --git a/src/agents/sandbox/prune.ts b/src/agents/sandbox/prune.ts index c3b37534e3..45e7fda630 100644 --- a/src/agents/sandbox/prune.ts +++ b/src/agents/sandbox/prune.ts @@ -1,4 +1,3 @@ -import type { SandboxConfig } from "./types.js"; import { stopBrowserBridgeServer } from "../../browser/bridge-server.js"; import { defaultRuntime } from "../../runtime.js"; import { BROWSER_BRIDGES } from "./browser-bridges.js"; @@ -11,6 +10,7 @@ import { type SandboxBrowserRegistryEntry, type SandboxRegistryEntry, } from "./registry.js"; +import type { SandboxConfig } from "./types.js"; let lastPruneAtMs = 0; diff --git a/src/agents/sandbox/runtime-status.ts b/src/agents/sandbox/runtime-status.ts index 92d3761327..f5bdd1ad5e 100644 --- a/src/agents/sandbox/runtime-status.ts +++ b/src/agents/sandbox/runtime-status.ts @@ -1,11 +1,11 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { SandboxConfig, SandboxToolPolicyResolved } from "./types.js"; import { formatCliCommand } from "../../cli/command-format.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { canonicalizeMainSessionAlias, resolveAgentMainSessionKey } from "../../config/sessions.js"; import { resolveSessionAgentId } from "../agent-scope.js"; import { expandToolGroups } from "../tool-policy.js"; import { resolveSandboxConfigForAgent } from "./config.js"; import { resolveSandboxToolPolicyForAgent } from "./tool-policy.js"; +import type { SandboxConfig, SandboxToolPolicyResolved } from "./types.js"; function shouldSandboxSession(cfg: SandboxConfig, sessionKey: string, mainSessionKey: string) { if (cfg.mode === "off") { diff --git a/src/agents/sandbox/tool-policy.ts b/src/agents/sandbox/tool-policy.ts index 083cfcac4a..c63653059c 100644 --- a/src/agents/sandbox/tool-policy.ts +++ b/src/agents/sandbox/tool-policy.ts @@ -1,13 +1,13 @@ import type { OpenClawConfig } from "../../config/config.js"; +import { resolveAgentConfig } from "../agent-scope.js"; +import { compileGlobPatterns, matchesAnyGlobPattern } from "../glob-pattern.js"; +import { expandToolGroups } from "../tool-policy.js"; +import { DEFAULT_TOOL_ALLOW, DEFAULT_TOOL_DENY } from "./constants.js"; import type { SandboxToolPolicy, SandboxToolPolicyResolved, SandboxToolPolicySource, } from "./types.js"; -import { resolveAgentConfig } from "../agent-scope.js"; -import { compileGlobPatterns, matchesAnyGlobPattern } from "../glob-pattern.js"; -import { expandToolGroups } from "../tool-policy.js"; -import { DEFAULT_TOOL_ALLOW, DEFAULT_TOOL_DENY } from "./constants.js"; function normalizeGlob(value: string) { return value.trim().toLowerCase(); diff --git a/src/agents/session-tool-result-guard.tool-result-persist-hook.e2e.test.ts b/src/agents/session-tool-result-guard.tool-result-persist-hook.e2e.test.ts index cdfaf7775f..f55e9bc807 100644 --- a/src/agents/session-tool-result-guard.tool-result-persist-hook.e2e.test.ts +++ b/src/agents/session-tool-result-guard.tool-result-persist-hook.e2e.test.ts @@ -1,8 +1,8 @@ -import type { AgentMessage } from "@mariozechner/pi-agent-core"; -import { SessionManager } from "@mariozechner/pi-coding-agent"; import fs from "node:fs"; import os from "node:os"; import path from "node:path"; +import type { AgentMessage } from "@mariozechner/pi-agent-core"; +import { SessionManager } from "@mariozechner/pi-coding-agent"; import { describe, expect, it, afterEach } from "vitest"; import { initializeGlobalHookRunner, diff --git a/src/agents/skills-install-download.ts b/src/agents/skills-install-download.ts index c7514a9034..a586a36438 100644 --- a/src/agents/skills-install-download.ts +++ b/src/agents/skills-install-download.ts @@ -1,16 +1,16 @@ -import type { ReadableStream as NodeReadableStream } from "node:stream/web"; import fs from "node:fs"; import path from "node:path"; import { Readable } from "node:stream"; import { pipeline } from "node:stream/promises"; -import type { SkillInstallResult } from "./skills-install.js"; -import type { SkillEntry, SkillInstallSpec } from "./skills.js"; +import type { ReadableStream as NodeReadableStream } from "node:stream/web"; import { extractArchive as extractArchiveSafe } from "../infra/archive.js"; import { fetchWithSsrFGuard } from "../infra/net/fetch-guard.js"; import { isWithinDir, resolveSafeBaseDir } from "../infra/path-safety.js"; import { runCommandWithTimeout } from "../process/exec.js"; import { ensureDir, resolveUserPath } from "../utils.js"; import { formatInstallFailureMessage } from "./skills-install-output.js"; +import type { SkillInstallResult } from "./skills-install.js"; +import type { SkillEntry, SkillInstallSpec } from "./skills.js"; import { hasBinary } from "./skills.js"; import { resolveSkillToolsRootDir } from "./skills/tools-dir.js"; diff --git a/src/agents/skills-install.download.e2e.test.ts b/src/agents/skills-install.download.e2e.test.ts index d297b716f4..d80b39dea8 100644 --- a/src/agents/skills-install.download.e2e.test.ts +++ b/src/agents/skills-install.download.e2e.test.ts @@ -1,7 +1,7 @@ -import JSZip from "jszip"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import JSZip from "jszip"; import * as tar from "tar"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { setTempStateDir, writeDownloadSkill } from "./skills-install.download-test-utils.js"; diff --git a/src/agents/skills-status.e2e.test.ts b/src/agents/skills-status.e2e.test.ts index 9f1ec41584..5a53c27206 100644 --- a/src/agents/skills-status.e2e.test.ts +++ b/src/agents/skills-status.e2e.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import type { SkillEntry } from "./skills/types.js"; import { buildWorkspaceSkillStatus } from "./skills-status.js"; +import type { SkillEntry } from "./skills/types.js"; describe("buildWorkspaceSkillStatus", () => { it("does not surface install options for OS-scoped skills on unsupported platforms", () => { diff --git a/src/agents/skills-status.ts b/src/agents/skills-status.ts index 28409883ea..7d9f2a0cde 100644 --- a/src/agents/skills-status.ts +++ b/src/agents/skills-status.ts @@ -1,7 +1,7 @@ import path from "node:path"; import type { OpenClawConfig } from "../config/config.js"; -import type { RequirementConfigCheck, Requirements } from "../shared/requirements.js"; import { evaluateEntryMetadataRequirements } from "../shared/entry-status.js"; +import type { RequirementConfigCheck, Requirements } from "../shared/requirements.js"; import { CONFIG_DIR } from "../utils.js"; import { hasBinary, diff --git a/src/agents/skills/config.ts b/src/agents/skills/config.ts index 7662927e6c..212dc9907c 100644 --- a/src/agents/skills/config.ts +++ b/src/agents/skills/config.ts @@ -1,5 +1,4 @@ import type { OpenClawConfig, SkillConfig } from "../../config/config.js"; -import type { SkillEligibilityContext, SkillEntry } from "./types.js"; import { evaluateRuntimeRequires, hasBinary, @@ -8,6 +7,7 @@ import { resolveRuntimePlatform, } from "../../shared/config-eval.js"; import { resolveSkillKey } from "./frontmatter.js"; +import type { SkillEligibilityContext, SkillEntry } from "./types.js"; const DEFAULT_CONFIG_VALUES: Record = { "browser.enabled": true, diff --git a/src/agents/skills/env-overrides.ts b/src/agents/skills/env-overrides.ts index 281efc8a2a..0f5061a0da 100644 --- a/src/agents/skills/env-overrides.ts +++ b/src/agents/skills/env-overrides.ts @@ -1,7 +1,7 @@ import type { OpenClawConfig } from "../../config/config.js"; -import type { SkillEntry, SkillSnapshot } from "./types.js"; import { resolveSkillConfig } from "./config.js"; import { resolveSkillKey } from "./frontmatter.js"; +import type { SkillEntry, SkillSnapshot } from "./types.js"; type EnvUpdate = { key: string; prev: string | undefined }; type SkillConfig = NonNullable>; diff --git a/src/agents/skills/frontmatter.ts b/src/agents/skills/frontmatter.ts index 12e9f926a4..a4879324dd 100644 --- a/src/agents/skills/frontmatter.ts +++ b/src/agents/skills/frontmatter.ts @@ -1,11 +1,4 @@ import type { Skill } from "@mariozechner/pi-coding-agent"; -import type { - OpenClawSkillMetadata, - ParsedSkillFrontmatter, - SkillEntry, - SkillInstallSpec, - SkillInvocationPolicy, -} from "./types.js"; import { parseFrontmatterBlock } from "../../markdown/frontmatter.js"; import { getFrontmatterString, @@ -17,6 +10,13 @@ import { resolveOpenClawManifestOs, resolveOpenClawManifestRequires, } from "../../shared/frontmatter.js"; +import type { + OpenClawSkillMetadata, + ParsedSkillFrontmatter, + SkillEntry, + SkillInstallSpec, + SkillInvocationPolicy, +} from "./types.js"; export function parseFrontmatter(content: string): ParsedSkillFrontmatter { return parseFrontmatterBlock(content); diff --git a/src/agents/skills/refresh.ts b/src/agents/skills/refresh.ts index a9f92f2bed..5d0fab8680 100644 --- a/src/agents/skills/refresh.ts +++ b/src/agents/skills/refresh.ts @@ -1,6 +1,6 @@ -import chokidar, { type FSWatcher } from "chokidar"; import os from "node:os"; import path from "node:path"; +import chokidar, { type FSWatcher } from "chokidar"; import type { OpenClawConfig } from "../../config/config.js"; import { createSubsystemLogger } from "../../logging/subsystem.js"; import { CONFIG_DIR, resolveUserPath } from "../../utils.js"; diff --git a/src/agents/skills/tools-dir.ts b/src/agents/skills/tools-dir.ts index 767ad3f79f..06e1f3fb68 100644 --- a/src/agents/skills/tools-dir.ts +++ b/src/agents/skills/tools-dir.ts @@ -1,8 +1,8 @@ import path from "node:path"; -import type { SkillEntry } from "./types.js"; import { safePathSegmentHashed } from "../../infra/install-safe-path.js"; import { resolveConfigDir } from "../../utils.js"; import { resolveSkillKey } from "./frontmatter.js"; +import type { SkillEntry } from "./types.js"; export function resolveSkillToolsRootDir(entry: SkillEntry): string { const key = resolveSkillKey(entry.skill, entry); diff --git a/src/agents/skills/workspace.ts b/src/agents/skills/workspace.ts index 68df465fbf..b7470cb1ba 100644 --- a/src/agents/skills/workspace.ts +++ b/src/agents/skills/workspace.ts @@ -1,19 +1,12 @@ +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; import { formatSkillsForPrompt, loadSkillsFromDir, type Skill, } from "@mariozechner/pi-coding-agent"; -import fs from "node:fs"; -import os from "node:os"; -import path from "node:path"; import type { OpenClawConfig } from "../../config/config.js"; -import type { - ParsedSkillFrontmatter, - SkillEligibilityContext, - SkillCommandSpec, - SkillEntry, - SkillSnapshot, -} from "./types.js"; import { createSubsystemLogger } from "../../logging/subsystem.js"; import { CONFIG_DIR, resolveUserPath } from "../../utils.js"; import { resolveSandboxPath } from "../sandbox-paths.js"; @@ -27,6 +20,13 @@ import { } from "./frontmatter.js"; import { resolvePluginSkillDirs } from "./plugin-skills.js"; import { serializeByKey } from "./serialize.js"; +import type { + ParsedSkillFrontmatter, + SkillEligibilityContext, + SkillCommandSpec, + SkillEntry, + SkillSnapshot, +} from "./types.js"; const fsp = fs.promises; const skillsLogger = createSubsystemLogger("skills"); diff --git a/src/agents/subagent-depth.ts b/src/agents/subagent-depth.ts index ac7b812bee..8b62539ac4 100644 --- a/src/agents/subagent-depth.ts +++ b/src/agents/subagent-depth.ts @@ -1,5 +1,5 @@ -import JSON5 from "json5"; import fs from "node:fs"; +import JSON5 from "json5"; import type { OpenClawConfig } from "../config/config.js"; import { resolveStorePath } from "../config/sessions/paths.js"; import { getSubagentDepth, parseAgentSessionKey } from "../sessions/session-key-utils.js"; diff --git a/src/agents/subagent-registry.store.ts b/src/agents/subagent-registry.store.ts index 7e58bc9e0a..2709a6a1fd 100644 --- a/src/agents/subagent-registry.store.ts +++ b/src/agents/subagent-registry.store.ts @@ -1,9 +1,9 @@ import os from "node:os"; import path from "node:path"; -import type { SubagentRunRecord } from "./subagent-registry.js"; import { resolveStateDir } from "../config/paths.js"; import { loadJsonFile, saveJsonFile } from "../infra/json-file.js"; import { normalizeDeliveryContext } from "../utils/delivery-context.js"; +import type { SubagentRunRecord } from "./subagent-registry.js"; export type PersistedSubagentRegistryVersion = 1 | 2; diff --git a/src/agents/system-prompt-report.test.ts b/src/agents/system-prompt-report.test.ts index 1ff31b8535..ad758b27ba 100644 --- a/src/agents/system-prompt-report.test.ts +++ b/src/agents/system-prompt-report.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import type { WorkspaceBootstrapFile } from "./workspace.js"; import { buildSystemPromptReport } from "./system-prompt-report.js"; +import type { WorkspaceBootstrapFile } from "./workspace.js"; function makeBootstrapFile(overrides: Partial): WorkspaceBootstrapFile { return { diff --git a/src/agents/system-prompt-report.ts b/src/agents/system-prompt-report.ts index 638bca55a0..71d77f471e 100644 --- a/src/agents/system-prompt-report.ts +++ b/src/agents/system-prompt-report.ts @@ -1,5 +1,5 @@ -import type { AgentTool } from "@mariozechner/pi-agent-core"; import path from "node:path"; +import type { AgentTool } from "@mariozechner/pi-agent-core"; import type { SessionSystemPromptReport } from "../config/sessions/types.js"; import type { EmbeddedContextFile } from "./pi-embedded-helpers.js"; import type { WorkspaceBootstrapFile } from "./workspace.js"; diff --git a/src/agents/system-prompt.ts b/src/agents/system-prompt.ts index 04bff2d862..dcfce11fe3 100644 --- a/src/agents/system-prompt.ts +++ b/src/agents/system-prompt.ts @@ -1,9 +1,9 @@ import type { ReasoningLevel, ThinkLevel } from "../auto-reply/thinking.js"; +import { SILENT_REPLY_TOKEN } from "../auto-reply/tokens.js"; import type { MemoryCitationsMode } from "../config/types.memory.js"; +import { listDeliverableMessageChannels } from "../utils/message-channel.js"; import type { ResolvedTimeFormat } from "./date-time.js"; import type { EmbeddedContextFile } from "./pi-embedded-helpers.js"; -import { SILENT_REPLY_TOKEN } from "../auto-reply/tokens.js"; -import { listDeliverableMessageChannels } from "../utils/message-channel.js"; import { sanitizeForPromptLiteral } from "./sanitize-for-prompt.js"; /** diff --git a/src/agents/test-helpers/host-sandbox-fs-bridge.ts b/src/agents/test-helpers/host-sandbox-fs-bridge.ts index 85b22745fc..93bb34969a 100644 --- a/src/agents/test-helpers/host-sandbox-fs-bridge.ts +++ b/src/agents/test-helpers/host-sandbox-fs-bridge.ts @@ -1,7 +1,7 @@ import fs from "node:fs/promises"; import path from "node:path"; -import type { SandboxFsBridge, SandboxFsStat, SandboxResolvedPath } from "../sandbox/fs-bridge.js"; import { resolveSandboxPath } from "../sandbox-paths.js"; +import type { SandboxFsBridge, SandboxFsStat, SandboxResolvedPath } from "../sandbox/fs-bridge.js"; export function createSandboxFsBridgeFromResolver( resolvePath: (filePath: string, cwd?: string) => SandboxResolvedPath, diff --git a/src/agents/tool-call-id.ts b/src/agents/tool-call-id.ts index ed7476b941..00585be069 100644 --- a/src/agents/tool-call-id.ts +++ b/src/agents/tool-call-id.ts @@ -1,5 +1,5 @@ -import type { AgentMessage } from "@mariozechner/pi-agent-core"; import { createHash } from "node:crypto"; +import type { AgentMessage } from "@mariozechner/pi-agent-core"; export type ToolCallIdMode = "strict" | "strict9"; diff --git a/src/agents/tool-policy-pipeline.ts b/src/agents/tool-policy-pipeline.ts index c6d8cbb9b5..d3304a020d 100644 --- a/src/agents/tool-policy-pipeline.ts +++ b/src/agents/tool-policy-pipeline.ts @@ -1,5 +1,5 @@ -import type { AnyAgentTool } from "./pi-tools.types.js"; import { filterToolsByPolicy } from "./pi-tools.policy.js"; +import type { AnyAgentTool } from "./pi-tools.types.js"; import { buildPluginToolGroups, expandPolicyWithPluginGroups, diff --git a/src/agents/tool-policy.e2e.test.ts b/src/agents/tool-policy.e2e.test.ts index 0c93dd3843..7054dc67ab 100644 --- a/src/agents/tool-policy.e2e.test.ts +++ b/src/agents/tool-policy.e2e.test.ts @@ -1,8 +1,7 @@ import { describe, expect, it } from "vitest"; import type { OpenClawConfig } from "../config/config.js"; -import type { SandboxToolPolicy } from "./sandbox/types.js"; -import type { AnyAgentTool } from "./tools/common.js"; import { isToolAllowed, resolveSandboxToolPolicyForAgent } from "./sandbox/tool-policy.js"; +import type { SandboxToolPolicy } from "./sandbox/types.js"; import { TOOL_POLICY_CONFORMANCE } from "./tool-policy.conformance.js"; import { applyOwnerOnlyToolPolicy, @@ -12,6 +11,7 @@ import { resolveToolProfilePolicy, TOOL_GROUPS, } from "./tool-policy.js"; +import type { AnyAgentTool } from "./tools/common.js"; function createOwnerPolicyTools() { return [ diff --git a/src/agents/tools/agents-list-tool.ts b/src/agents/tools/agents-list-tool.ts index 1782484a30..277ac99064 100644 --- a/src/agents/tools/agents-list-tool.ts +++ b/src/agents/tools/agents-list-tool.ts @@ -1,5 +1,4 @@ import { Type } from "@sinclair/typebox"; -import type { AnyAgentTool } from "./common.js"; import { loadConfig } from "../../config/config.js"; import { DEFAULT_AGENT_ID, @@ -7,6 +6,7 @@ import { parseAgentSessionKey, } from "../../routing/session-key.js"; import { resolveAgentConfig } from "../agent-scope.js"; +import type { AnyAgentTool } from "./common.js"; import { jsonResult } from "./common.js"; import { resolveInternalSessionKey, resolveMainSessionAlias } from "./sessions-helpers.js"; diff --git a/src/agents/tools/canvas-tool.ts b/src/agents/tools/canvas-tool.ts index 561d7f46c0..77ddb56db4 100644 --- a/src/agents/tools/canvas-tool.ts +++ b/src/agents/tools/canvas-tool.ts @@ -1,6 +1,6 @@ -import { Type } from "@sinclair/typebox"; import crypto from "node:crypto"; import fs from "node:fs/promises"; +import { Type } from "@sinclair/typebox"; import { writeBase64ToFile } from "../../cli/nodes-camera.js"; import { canvasSnapshotTempPath, parseCanvasSnapshotPayload } from "../../cli/nodes-canvas.js"; import { imageMimeFromFormat } from "../../media/mime.js"; diff --git a/src/agents/tools/common.ts b/src/agents/tools/common.ts index 5921ecb16d..a1358b08b7 100644 --- a/src/agents/tools/common.ts +++ b/src/agents/tools/common.ts @@ -1,5 +1,5 @@ -import type { AgentTool, AgentToolResult } from "@mariozechner/pi-agent-core"; import fs from "node:fs/promises"; +import type { AgentTool, AgentToolResult } from "@mariozechner/pi-agent-core"; import { detectMime } from "../../media/mime.js"; import { sanitizeToolResultImages } from "../tool-images.js"; diff --git a/src/agents/tools/cron-tool.ts b/src/agents/tools/cron-tool.ts index 4fb53da8ff..e977ed8302 100644 --- a/src/agents/tools/cron-tool.ts +++ b/src/agents/tools/cron-tool.ts @@ -1,7 +1,7 @@ import { Type } from "@sinclair/typebox"; -import type { CronDelivery, CronMessageChannel } from "../../cron/types.js"; import { loadConfig } from "../../config/config.js"; import { normalizeCronJobCreate, normalizeCronJobPatch } from "../../cron/normalize.js"; +import type { CronDelivery, CronMessageChannel } from "../../cron/types.js"; import { normalizeHttpWebhookUrl } from "../../cron/webhook-url.js"; import { parseAgentSessionKey } from "../../sessions/session-key-utils.js"; import { extractTextFromChatContent } from "../../shared/chat-content.js"; diff --git a/src/agents/tools/discord-actions-messaging.ts b/src/agents/tools/discord-actions-messaging.ts index a29f4b6623..144992ac3d 100644 --- a/src/agents/tools/discord-actions-messaging.ts +++ b/src/agents/tools/discord-actions-messaging.ts @@ -1,6 +1,5 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; import type { DiscordActionConfig } from "../../config/config.js"; -import type { DiscordSendComponents, DiscordSendEmbeds } from "../../discord/send.shared.js"; import { readDiscordComponentSpec } from "../../discord/components.js"; import { createThreadDiscord, @@ -24,6 +23,7 @@ import { sendVoiceMessageDiscord, unpinMessageDiscord, } from "../../discord/send.js"; +import type { DiscordSendComponents, DiscordSendEmbeds } from "../../discord/send.shared.js"; import { resolveDiscordChannelId } from "../../discord/targets.js"; import { withNormalizedTimestamp } from "../date-time.js"; import { assertMediaNotDataUrl } from "../sandbox-paths.js"; diff --git a/src/agents/tools/discord-actions-presence.e2e.test.ts b/src/agents/tools/discord-actions-presence.e2e.test.ts index 71cf967e16..3d930a4bbd 100644 --- a/src/agents/tools/discord-actions-presence.e2e.test.ts +++ b/src/agents/tools/discord-actions-presence.e2e.test.ts @@ -1,8 +1,8 @@ import type { GatewayPlugin } from "@buape/carbon/gateway"; import { beforeEach, describe, expect, it, vi } from "vitest"; import type { DiscordActionConfig } from "../../config/config.js"; -import type { ActionGate } from "./common.js"; import { clearGateways, registerGateway } from "../../discord/monitor/gateway-registry.js"; +import type { ActionGate } from "./common.js"; import { handleDiscordPresenceAction } from "./discord-actions-presence.js"; const mockUpdatePresence = vi.fn(); diff --git a/src/agents/tools/image-tool.ts b/src/agents/tools/image-tool.ts index 55072fb123..f27f9bdaaa 100644 --- a/src/agents/tools/image-tool.ts +++ b/src/agents/tools/image-tool.ts @@ -1,9 +1,7 @@ +import path from "node:path"; import { type Api, type Context, complete, type Model } from "@mariozechner/pi-ai"; import { Type } from "@sinclair/typebox"; -import path from "node:path"; import type { OpenClawConfig } from "../../config/config.js"; -import type { SandboxFsBridge } from "../sandbox/fs-bridge.js"; -import type { AnyAgentTool } from "./common.js"; import { resolveUserPath } from "../../utils.js"; import { getDefaultLocalRoots, loadWebMedia } from "../../web/media.js"; import { ensureAuthProfileStore, listProfilesForProvider } from "../auth-profiles.js"; @@ -14,7 +12,9 @@ import { runWithImageModelFallback } from "../model-fallback.js"; import { resolveConfiguredModelRef } from "../model-selection.js"; import { ensureOpenClawModelsJson } from "../models-config.js"; import { discoverAuthStorage, discoverModels } from "../pi-model-discovery.js"; +import type { SandboxFsBridge } from "../sandbox/fs-bridge.js"; import { normalizeWorkspaceDir } from "../workspace-dir.js"; +import type { AnyAgentTool } from "./common.js"; import { coerceImageAssistantText, coerceImageModelConfig, diff --git a/src/agents/tools/memory-tool.ts b/src/agents/tools/memory-tool.ts index d37d7ad6cd..f2c169b726 100644 --- a/src/agents/tools/memory-tool.ts +++ b/src/agents/tools/memory-tool.ts @@ -1,13 +1,13 @@ import { Type } from "@sinclair/typebox"; import type { OpenClawConfig } from "../../config/config.js"; import type { MemoryCitationsMode } from "../../config/types.memory.js"; -import type { MemorySearchResult } from "../../memory/types.js"; -import type { AnyAgentTool } from "./common.js"; import { resolveMemoryBackendConfig } from "../../memory/backend-config.js"; import { getMemorySearchManager } from "../../memory/index.js"; +import type { MemorySearchResult } from "../../memory/types.js"; import { parseAgentSessionKey } from "../../routing/session-key.js"; import { resolveSessionAgentId } from "../agent-scope.js"; import { resolveMemorySearchConfig } from "../memory-search.js"; +import type { AnyAgentTool } from "./common.js"; import { jsonResult, readNumberParam, readStringParam } from "./common.js"; const MemorySearchSchema = Type.Object({ diff --git a/src/agents/tools/message-tool.ts b/src/agents/tools/message-tool.ts index 35b4e284da..4ddc6116bd 100644 --- a/src/agents/tools/message-tool.ts +++ b/src/agents/tools/message-tool.ts @@ -1,6 +1,4 @@ import { Type } from "@sinclair/typebox"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { AnyAgentTool } from "./common.js"; import { BLUEBUBBLES_GROUP_ACTIONS } from "../../channels/plugins/bluebubbles-actions.js"; import { listChannelMessageActions, @@ -13,6 +11,7 @@ import { CHANNEL_MESSAGE_ACTION_NAMES, type ChannelMessageActionName, } from "../../channels/plugins/types.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { loadConfig } from "../../config/config.js"; import { GATEWAY_CLIENT_IDS, GATEWAY_CLIENT_MODES } from "../../gateway/protocol/client-info.js"; import { getToolResult, runMessageAction } from "../../infra/outbound/message-action-runner.js"; @@ -23,6 +22,7 @@ import { normalizeMessageChannel } from "../../utils/message-channel.js"; import { resolveSessionAgentId } from "../agent-scope.js"; import { listChannelSupportedActions } from "../channel-tools.js"; import { channelTargetSchema, channelTargetsSchema, stringEnum } from "../schema/typebox.js"; +import type { AnyAgentTool } from "./common.js"; import { jsonResult, readNumberParam, readStringParam } from "./common.js"; import { resolveGatewayOptions } from "./gateway.js"; diff --git a/src/agents/tools/nodes-tool.ts b/src/agents/tools/nodes-tool.ts index cc5355c1b0..7add129efa 100644 --- a/src/agents/tools/nodes-tool.ts +++ b/src/agents/tools/nodes-tool.ts @@ -1,7 +1,6 @@ +import crypto from "node:crypto"; import type { AgentToolResult } from "@mariozechner/pi-agent-core"; import { Type } from "@sinclair/typebox"; -import crypto from "node:crypto"; -import type { OpenClawConfig } from "../../config/config.js"; import { type CameraFacing, cameraTempPath, @@ -17,6 +16,7 @@ import { writeScreenRecordToFile, } from "../../cli/nodes-screen.js"; import { parseDurationMs } from "../../cli/parse-duration.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { imageMimeFromFormat } from "../../media/mime.js"; import { resolveSessionAgentId } from "../agent-scope.js"; import { optionalStringEnum, stringEnum } from "../schema/typebox.js"; diff --git a/src/agents/tools/session-status-tool.ts b/src/agents/tools/session-status-tool.ts index b67de007f7..6edbc841a9 100644 --- a/src/agents/tools/session-status-tool.ts +++ b/src/agents/tools/session-status-tool.ts @@ -1,9 +1,8 @@ import { Type } from "@sinclair/typebox"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { AnyAgentTool } from "./common.js"; import { normalizeGroupActivation } from "../../auto-reply/group-activation.js"; import { getFollowupQueueDepth, resolveQueueSettings } from "../../auto-reply/reply/queue.js"; import { buildStatusMessage } from "../../auto-reply/status.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { loadConfig } from "../../config/config.js"; import { loadSessionStore, @@ -34,6 +33,7 @@ import { resolveDefaultModelForAgent, resolveModelRefFromString, } from "../model-selection.js"; +import type { AnyAgentTool } from "./common.js"; import { readStringParam } from "./common.js"; import { shouldResolveSessionIdInput, diff --git a/src/agents/tools/sessions-announce-target.ts b/src/agents/tools/sessions-announce-target.ts index f4119e033d..0edfafdb2e 100644 --- a/src/agents/tools/sessions-announce-target.ts +++ b/src/agents/tools/sessions-announce-target.ts @@ -1,7 +1,7 @@ -import type { AnnounceTarget } from "./sessions-send-helpers.js"; import { getChannelPlugin, normalizeChannelId } from "../../channels/plugins/index.js"; import { callGateway } from "../../gateway/call.js"; import { SessionListRow } from "./sessions-helpers.js"; +import type { AnnounceTarget } from "./sessions-send-helpers.js"; import { resolveAnnounceTargetFromKey } from "./sessions-send-helpers.js"; export async function resolveAnnounceTarget(params: { diff --git a/src/agents/tools/sessions-history-tool.ts b/src/agents/tools/sessions-history-tool.ts index dae466b723..5532b45735 100644 --- a/src/agents/tools/sessions-history-tool.ts +++ b/src/agents/tools/sessions-history-tool.ts @@ -1,9 +1,9 @@ import { Type } from "@sinclair/typebox"; -import type { AnyAgentTool } from "./common.js"; import { loadConfig } from "../../config/config.js"; import { callGateway } from "../../gateway/call.js"; import { capArrayByJsonBytes } from "../../gateway/session-utils.fs.js"; import { truncateUtf16Safe } from "../../utils.js"; +import type { AnyAgentTool } from "./common.js"; import { jsonResult, readStringParam } from "./common.js"; import { createSessionVisibilityGuard, diff --git a/src/agents/tools/sessions-list-tool.ts b/src/agents/tools/sessions-list-tool.ts index 277b95f3c2..bf16bbff3b 100644 --- a/src/agents/tools/sessions-list-tool.ts +++ b/src/agents/tools/sessions-list-tool.ts @@ -1,10 +1,10 @@ -import { Type } from "@sinclair/typebox"; import path from "node:path"; -import type { AnyAgentTool } from "./common.js"; +import { Type } from "@sinclair/typebox"; import { loadConfig } from "../../config/config.js"; import { resolveSessionFilePath } from "../../config/sessions.js"; import { callGateway } from "../../gateway/call.js"; import { resolveAgentIdFromSessionKey } from "../../routing/session-key.js"; +import type { AnyAgentTool } from "./common.js"; import { jsonResult, readStringArrayParam } from "./common.js"; import { createSessionVisibilityGuard, diff --git a/src/agents/tools/sessions-send-helpers.ts b/src/agents/tools/sessions-send-helpers.ts index ef8b4c1df0..94dc3fe0c6 100644 --- a/src/agents/tools/sessions-send-helpers.ts +++ b/src/agents/tools/sessions-send-helpers.ts @@ -1,9 +1,9 @@ -import type { OpenClawConfig } from "../../config/config.js"; import { getChannelPlugin, normalizeChannelId as normalizeAnyChannelId, } from "../../channels/plugins/index.js"; import { normalizeChannelId as normalizeChatChannelId } from "../../channels/registry.js"; +import type { OpenClawConfig } from "../../config/config.js"; const ANNOUNCE_SKIP_TOKEN = "ANNOUNCE_SKIP"; const REPLY_SKIP_TOKEN = "REPLY_SKIP"; diff --git a/src/agents/tools/sessions-send-tool.a2a.ts b/src/agents/tools/sessions-send-tool.a2a.ts index f6e428ec8d..bddc6abf64 100644 --- a/src/agents/tools/sessions-send-tool.a2a.ts +++ b/src/agents/tools/sessions-send-tool.a2a.ts @@ -1,8 +1,8 @@ import crypto from "node:crypto"; -import type { GatewayMessageChannel } from "../../utils/message-channel.js"; import { callGateway } from "../../gateway/call.js"; import { formatErrorMessage } from "../../infra/errors.js"; import { createSubsystemLogger } from "../../logging/subsystem.js"; +import type { GatewayMessageChannel } from "../../utils/message-channel.js"; import { AGENT_LANE_NESTED } from "../lanes.js"; import { readLatestAssistantReply, runAgentStep } from "./agent-step.js"; import { resolveAnnounceTarget } from "./sessions-announce-target.js"; diff --git a/src/agents/tools/sessions-send-tool.ts b/src/agents/tools/sessions-send-tool.ts index 505201cadb..3479668182 100644 --- a/src/agents/tools/sessions-send-tool.ts +++ b/src/agents/tools/sessions-send-tool.ts @@ -1,6 +1,5 @@ -import { Type } from "@sinclair/typebox"; import crypto from "node:crypto"; -import type { AnyAgentTool } from "./common.js"; +import { Type } from "@sinclair/typebox"; import { loadConfig } from "../../config/config.js"; import { callGateway } from "../../gateway/call.js"; import { normalizeAgentId, resolveAgentIdFromSessionKey } from "../../routing/session-key.js"; @@ -10,6 +9,7 @@ import { INTERNAL_MESSAGE_CHANNEL, } from "../../utils/message-channel.js"; import { AGENT_LANE_NESTED } from "../lanes.js"; +import type { AnyAgentTool } from "./common.js"; import { jsonResult, readStringParam } from "./common.js"; import { createSessionVisibilityGuard, diff --git a/src/agents/tools/sessions-spawn-tool.ts b/src/agents/tools/sessions-spawn-tool.ts index cb4c6ac87c..7b5ad60fed 100644 --- a/src/agents/tools/sessions-spawn-tool.ts +++ b/src/agents/tools/sessions-spawn-tool.ts @@ -1,8 +1,8 @@ import { Type } from "@sinclair/typebox"; import type { GatewayMessageChannel } from "../../utils/message-channel.js"; -import type { AnyAgentTool } from "./common.js"; import { optionalStringEnum } from "../schema/typebox.js"; import { spawnSubagentDirect } from "../subagent-spawn.js"; +import type { AnyAgentTool } from "./common.js"; import { jsonResult, readStringParam } from "./common.js"; const SessionsSpawnToolSchema = Type.Object({ diff --git a/src/agents/tools/subagents-tool.ts b/src/agents/tools/subagents-tool.ts index 803b80631c..d3e1cca617 100644 --- a/src/agents/tools/subagents-tool.ts +++ b/src/agents/tools/subagents-tool.ts @@ -1,9 +1,8 @@ -import { Type } from "@sinclair/typebox"; import crypto from "node:crypto"; -import type { SessionEntry } from "../../config/sessions.js"; -import type { AnyAgentTool } from "./common.js"; +import { Type } from "@sinclair/typebox"; import { clearSessionQueues } from "../../auto-reply/reply/queue.js"; import { loadConfig } from "../../config/config.js"; +import type { SessionEntry } from "../../config/sessions.js"; import { loadSessionStore, resolveStorePath, updateSessionStore } from "../../config/sessions.js"; import { callGateway } from "../../gateway/call.js"; import { logVerbose } from "../../globals.js"; @@ -31,6 +30,7 @@ import { replaceSubagentRunAfterSteer, type SubagentRunRecord, } from "../subagent-registry.js"; +import type { AnyAgentTool } from "./common.js"; import { jsonResult, readNumberParam, readStringParam } from "./common.js"; import { resolveInternalSessionKey, resolveMainSessionAlias } from "./sessions-helpers.js"; diff --git a/src/agents/tools/telegram-actions.ts b/src/agents/tools/telegram-actions.ts index 6dd624f5d7..26a871556a 100644 --- a/src/agents/tools/telegram-actions.ts +++ b/src/agents/tools/telegram-actions.ts @@ -1,7 +1,7 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; import type { OpenClawConfig } from "../../config/config.js"; -import type { TelegramButtonStyle, TelegramInlineButtons } from "../../telegram/button-types.js"; import { createTelegramActionGate } from "../../telegram/accounts.js"; +import type { TelegramButtonStyle, TelegramInlineButtons } from "../../telegram/button-types.js"; import { resolveTelegramInlineButtonsScope, resolveTelegramTargetChatType, diff --git a/src/agents/tools/tts-tool.ts b/src/agents/tools/tts-tool.ts index b11fa97d98..03ed3cd9a0 100644 --- a/src/agents/tools/tts-tool.ts +++ b/src/agents/tools/tts-tool.ts @@ -1,10 +1,10 @@ import { Type } from "@sinclair/typebox"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { GatewayMessageChannel } from "../../utils/message-channel.js"; -import type { AnyAgentTool } from "./common.js"; import { SILENT_REPLY_TOKEN } from "../../auto-reply/tokens.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { loadConfig } from "../../config/config.js"; import { textToSpeech } from "../../tts/tts.js"; +import type { GatewayMessageChannel } from "../../utils/message-channel.js"; +import type { AnyAgentTool } from "./common.js"; import { readStringParam } from "./common.js"; const TtsToolSchema = Type.Object({ diff --git a/src/agents/tools/web-fetch.ts b/src/agents/tools/web-fetch.ts index fc0aaead98..2bb3837c66 100644 --- a/src/agents/tools/web-fetch.ts +++ b/src/agents/tools/web-fetch.ts @@ -1,12 +1,12 @@ import { Type } from "@sinclair/typebox"; import type { OpenClawConfig } from "../../config/config.js"; -import type { AnyAgentTool } from "./common.js"; import { fetchWithSsrFGuard } from "../../infra/net/fetch-guard.js"; import { SsrFBlockedError } from "../../infra/net/ssrf.js"; import { logDebug } from "../../logger.js"; import { wrapExternalContent, wrapWebContent } from "../../security/external-content.js"; import { normalizeSecretInput } from "../../utils/normalize-secret-input.js"; import { stringEnum } from "../schema/typebox.js"; +import type { AnyAgentTool } from "./common.js"; import { jsonResult, readNumberParam, readStringParam } from "./common.js"; import { extractReadableContent, diff --git a/src/agents/tools/web-search.ts b/src/agents/tools/web-search.ts index be174b951d..52cf9f2575 100644 --- a/src/agents/tools/web-search.ts +++ b/src/agents/tools/web-search.ts @@ -1,9 +1,9 @@ import { Type } from "@sinclair/typebox"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { AnyAgentTool } from "./common.js"; import { formatCliCommand } from "../../cli/command-format.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { wrapWebContent } from "../../security/external-content.js"; import { normalizeSecretInput } from "../../utils/normalize-secret-input.js"; +import type { AnyAgentTool } from "./common.js"; import { jsonResult, readNumberParam, readStringParam } from "./common.js"; import { CacheEntry, diff --git a/src/agents/transcript-policy.ts b/src/agents/transcript-policy.ts index 22e173320b..62ccea8056 100644 --- a/src/agents/transcript-policy.ts +++ b/src/agents/transcript-policy.ts @@ -1,6 +1,6 @@ -import type { ToolCallIdMode } from "./tool-call-id.js"; import { normalizeProviderId } from "./model-selection.js"; import { isAntigravityClaude, isGoogleModelApi } from "./pi-embedded-helpers/google.js"; +import type { ToolCallIdMode } from "./tool-call-id.js"; export type TranscriptSanitizeMode = "full" | "images-only"; diff --git a/src/auto-reply/command-auth.ts b/src/auto-reply/command-auth.ts index 252bf5cdcf..b2b379e8a6 100644 --- a/src/auto-reply/command-auth.ts +++ b/src/auto-reply/command-auth.ts @@ -1,10 +1,10 @@ import type { ChannelDock } from "../channels/dock.js"; -import type { ChannelId } from "../channels/plugins/types.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { MsgContext } from "./templating.js"; import { getChannelDock, listChannelDocks } from "../channels/dock.js"; +import type { ChannelId } from "../channels/plugins/types.js"; import { normalizeAnyChannelId } from "../channels/registry.js"; +import type { OpenClawConfig } from "../config/config.js"; import { INTERNAL_MESSAGE_CHANNEL, normalizeMessageChannel } from "../utils/message-channel.js"; +import type { MsgContext } from "./templating.js"; export type CommandAuthorization = { providerId?: ChannelId; diff --git a/src/auto-reply/command-control.test.ts b/src/auto-reply/command-control.test.ts index 660889eca6..b8c04a48eb 100644 --- a/src/auto-reply/command-control.test.ts +++ b/src/auto-reply/command-control.test.ts @@ -1,6 +1,5 @@ import { afterEach, beforeEach, describe, expect, it } from "vitest"; import type { OpenClawConfig } from "../config/config.js"; -import type { MsgContext } from "./templating.js"; import { setActivePluginRegistry } from "../plugins/runtime.js"; import { createOutboundTestPlugin, createTestRegistry } from "../test-utils/channel-plugins.js"; import { resolveCommandAuthorization } from "./command-auth.js"; @@ -8,6 +7,7 @@ import { hasControlCommand, hasInlineCommandTokens } from "./command-detection.j import { listChatCommands } from "./commands-registry.js"; import { parseActivationCommand } from "./group-activation.js"; import { parseSendPolicyCommand } from "./send-policy.js"; +import type { MsgContext } from "./templating.js"; const createRegistry = () => createTestRegistry([ diff --git a/src/auto-reply/commands-args.test.ts b/src/auto-reply/commands-args.test.ts index c5e3ad7145..58383869fc 100644 --- a/src/auto-reply/commands-args.test.ts +++ b/src/auto-reply/commands-args.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import type { CommandArgValues } from "./commands-registry.types.js"; import { COMMAND_ARG_FORMATTERS } from "./commands-args.js"; +import type { CommandArgValues } from "./commands-registry.types.js"; function formatArgs(key: keyof typeof COMMAND_ARG_FORMATTERS, values: Record) { const formatter = COMMAND_ARG_FORMATTERS[key]; diff --git a/src/auto-reply/commands-registry.data.ts b/src/auto-reply/commands-registry.data.ts index 08ee6e0ffa..56cb8d8729 100644 --- a/src/auto-reply/commands-registry.data.ts +++ b/src/auto-reply/commands-registry.data.ts @@ -1,11 +1,11 @@ +import { listChannelDocks } from "../channels/dock.js"; +import { getActivePluginRegistry } from "../plugins/runtime.js"; +import { COMMAND_ARG_FORMATTERS } from "./commands-args.js"; import type { ChatCommandDefinition, CommandCategory, CommandScope, } from "./commands-registry.types.js"; -import { listChannelDocks } from "../channels/dock.js"; -import { getActivePluginRegistry } from "../plugins/runtime.js"; -import { COMMAND_ARG_FORMATTERS } from "./commands-args.js"; import { listThinkingLevels } from "./thinking.js"; type DefineChatCommandInput = { diff --git a/src/auto-reply/commands-registry.test.ts b/src/auto-reply/commands-registry.test.ts index 6099aabcce..6fd72a9f94 100644 --- a/src/auto-reply/commands-registry.test.ts +++ b/src/auto-reply/commands-registry.test.ts @@ -1,5 +1,4 @@ import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import type { ChatCommandDefinition } from "./commands-registry.types.js"; import { setActivePluginRegistry } from "../plugins/runtime.js"; import { createTestRegistry } from "../test-utils/channel-plugins.js"; import { @@ -17,6 +16,7 @@ import { serializeCommandArgs, shouldHandleTextCommands, } from "./commands-registry.js"; +import type { ChatCommandDefinition } from "./commands-registry.types.js"; beforeEach(() => { setActivePluginRegistry(createTestRegistry([])); diff --git a/src/auto-reply/commands-registry.ts b/src/auto-reply/commands-registry.ts index facd7723d5..6abbc1bf96 100644 --- a/src/auto-reply/commands-registry.ts +++ b/src/auto-reply/commands-registry.ts @@ -1,5 +1,9 @@ +import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "../agents/defaults.js"; +import { resolveConfiguredModelRef } from "../agents/model-selection.js"; import type { SkillCommandSpec } from "../agents/skills.js"; import type { OpenClawConfig } from "../config/types.js"; +import { escapeRegExp } from "../utils.js"; +import { getChatCommands, getNativeCommandSurfaces } from "./commands-registry.data.js"; import type { ChatCommandDefinition, CommandArgChoiceContext, @@ -12,10 +16,6 @@ import type { NativeCommandSpec, ShouldHandleTextCommandsParams, } from "./commands-registry.types.js"; -import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "../agents/defaults.js"; -import { resolveConfiguredModelRef } from "../agents/model-selection.js"; -import { escapeRegExp } from "../utils.js"; -import { getChatCommands, getNativeCommandSurfaces } from "./commands-registry.data.js"; export type { ChatCommandDefinition, diff --git a/src/auto-reply/dispatch.test.ts b/src/auto-reply/dispatch.test.ts index 9e9630c406..327a8b3069 100644 --- a/src/auto-reply/dispatch.test.ts +++ b/src/auto-reply/dispatch.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from "vitest"; import type { OpenClawConfig } from "../config/config.js"; -import type { ReplyDispatcher } from "./reply/reply-dispatcher.js"; import { dispatchInboundMessage, withReplyDispatcher } from "./dispatch.js"; +import type { ReplyDispatcher } from "./reply/reply-dispatcher.js"; import { buildTestCtx } from "./reply/test-ctx.js"; function createDispatcher(record: string[]): ReplyDispatcher { diff --git a/src/auto-reply/dispatch.ts b/src/auto-reply/dispatch.ts index 54bf79a7ba..95d1d9c34b 100644 --- a/src/auto-reply/dispatch.ts +++ b/src/auto-reply/dispatch.ts @@ -1,7 +1,5 @@ import type { OpenClawConfig } from "../config/config.js"; import type { DispatchFromConfigResult } from "./reply/dispatch-from-config.js"; -import type { FinalizedMsgContext, MsgContext } from "./templating.js"; -import type { GetReplyOptions } from "./types.js"; import { dispatchReplyFromConfig } from "./reply/dispatch-from-config.js"; import { finalizeInboundContext } from "./reply/inbound-context.js"; import { @@ -11,6 +9,8 @@ import { type ReplyDispatcherOptions, type ReplyDispatcherWithTypingOptions, } from "./reply/reply-dispatcher.js"; +import type { FinalizedMsgContext, MsgContext } from "./templating.js"; +import type { GetReplyOptions } from "./types.js"; export type DispatchInboundResult = DispatchFromConfigResult; diff --git a/src/auto-reply/envelope.ts b/src/auto-reply/envelope.ts index 1d3e20e944..34f4733ec7 100644 --- a/src/auto-reply/envelope.ts +++ b/src/auto-reply/envelope.ts @@ -1,7 +1,7 @@ -import type { OpenClawConfig } from "../config/config.js"; import { resolveUserTimezone } from "../agents/date-time.js"; import { normalizeChatType } from "../channels/chat-type.js"; import { resolveSenderLabel, type SenderLabelParams } from "../channels/sender-label.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveTimezone, formatUtcTimestamp, diff --git a/src/auto-reply/reply.block-streaming.test.ts b/src/auto-reply/reply.block-streaming.test.ts index 625f9a9c70..1f0e2e1d1c 100644 --- a/src/auto-reply/reply.block-streaming.test.ts +++ b/src/auto-reply/reply.block-streaming.test.ts @@ -2,8 +2,8 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import type { OpenClawConfig } from "../config/config.js"; import { loadModelCatalog } from "../agents/model-catalog.js"; +import type { OpenClawConfig } from "../config/config.js"; import { getReplyFromConfig } from "./reply.js"; type RunEmbeddedPiAgent = typeof import("../agents/pi-embedded.js").runEmbeddedPiAgent; diff --git a/src/auto-reply/reply.triggers.trigger-handling.test-harness.ts b/src/auto-reply/reply.triggers.trigger-handling.test-harness.ts index 3c650d67d0..ea03649292 100644 --- a/src/auto-reply/reply.triggers.trigger-handling.test-harness.ts +++ b/src/auto-reply/reply.triggers.trigger-handling.test-harness.ts @@ -1,8 +1,8 @@ import fs from "node:fs/promises"; import { join } from "node:path"; import { afterEach, expect, vi } from "vitest"; -import type { OpenClawConfig } from "../config/config.js"; import { withTempHome as withTempHomeBase } from "../../test/helpers/temp-home.js"; +import type { OpenClawConfig } from "../config/config.js"; // Avoid exporting vitest mock types (TS2742 under pnpm + d.ts emit). // oxlint-disable-next-line typescript/no-explicit-any diff --git a/src/auto-reply/reply/abort.ts b/src/auto-reply/reply/abort.ts index 3b55c08bb4..f51fd37ad0 100644 --- a/src/auto-reply/reply/abort.ts +++ b/src/auto-reply/reply/abort.ts @@ -1,5 +1,3 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { FinalizedMsgContext, MsgContext } from "../templating.js"; import { resolveSessionAgentId } from "../../agents/agent-scope.js"; import { abortEmbeddedPiRun } from "../../agents/pi-embedded.js"; import { @@ -10,6 +8,7 @@ import { resolveInternalSessionKey, resolveMainSessionAlias, } from "../../agents/tools/sessions-helpers.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { loadSessionStore, resolveStorePath, @@ -20,6 +19,7 @@ import { logVerbose } from "../../globals.js"; import { parseAgentSessionKey } from "../../routing/session-key.js"; import { resolveCommandAuthorization } from "../command-auth.js"; import { normalizeCommandBody, type CommandNormalizeOptions } from "../commands-registry.js"; +import type { FinalizedMsgContext, MsgContext } from "../templating.js"; import { stripMentions, stripStructuralPrefixes } from "./mentions.js"; import { clearSessionQueues } from "./queue.js"; diff --git a/src/auto-reply/reply/agent-runner-execution.ts b/src/auto-reply/reply/agent-runner-execution.ts index 57060f9915..2620351d39 100644 --- a/src/auto-reply/reply/agent-runner-execution.ts +++ b/src/auto-reply/reply/agent-runner-execution.ts @@ -1,10 +1,5 @@ import crypto from "node:crypto"; import fs from "node:fs"; -import type { TemplateContext } from "../templating.js"; -import type { VerboseLevel } from "../thinking.js"; -import type { GetReplyOptions, ReplyPayload } from "../types.js"; -import type { FollowupRun } from "./queue.js"; -import type { TypingSignaler } from "./typing-mode.js"; import { resolveAgentModelFallbacksOverride } from "../../agents/agent-scope.js"; import { runCliAgent } from "../../agents/cli-runner.js"; import { getCliSessionId } from "../../agents/cli-session.js"; @@ -33,7 +28,10 @@ import { resolveMessageChannel, } from "../../utils/message-channel.js"; import { stripHeartbeatToken } from "../heartbeat.js"; +import type { TemplateContext } from "../templating.js"; +import type { VerboseLevel } from "../thinking.js"; import { isSilentReplyText, SILENT_REPLY_TOKEN } from "../tokens.js"; +import type { GetReplyOptions, ReplyPayload } from "../types.js"; import { buildEmbeddedContextFromTemplate, buildTemplateSenderContext, @@ -41,7 +39,9 @@ import { } from "./agent-runner-utils.js"; import { resolveEnforceFinalTag } from "./agent-runner-utils.js"; import { type BlockReplyPipeline } from "./block-reply-pipeline.js"; +import type { FollowupRun } from "./queue.js"; import { createBlockReplyDeliveryHandler } from "./reply-delivery.js"; +import type { TypingSignaler } from "./typing-mode.js"; export type AgentRunLoopResult = | { diff --git a/src/auto-reply/reply/agent-runner-helpers.ts b/src/auto-reply/reply/agent-runner-helpers.ts index 8e302841cc..6f3658b743 100644 --- a/src/auto-reply/reply/agent-runner-helpers.ts +++ b/src/auto-reply/reply/agent-runner-helpers.ts @@ -1,9 +1,9 @@ -import type { ReplyPayload } from "../types.js"; -import type { TypingSignaler } from "./typing-mode.js"; import { loadSessionStore } from "../../config/sessions.js"; import { isAudioFileName } from "../../media/mime.js"; import { normalizeVerboseLevel, type VerboseLevel } from "../thinking.js"; +import type { ReplyPayload } from "../types.js"; import { scheduleFollowupDrain } from "./queue.js"; +import type { TypingSignaler } from "./typing-mode.js"; const hasAudioMedia = (urls?: string[]): boolean => Boolean(urls?.some((url) => isAudioFileName(url))); diff --git a/src/auto-reply/reply/agent-runner-memory.ts b/src/auto-reply/reply/agent-runner-memory.ts index 5f3fdf7385..1b61104d2c 100644 --- a/src/auto-reply/reply/agent-runner-memory.ts +++ b/src/auto-reply/reply/agent-runner-memory.ts @@ -1,14 +1,10 @@ import crypto from "node:crypto"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { TemplateContext } from "../templating.js"; -import type { VerboseLevel } from "../thinking.js"; -import type { GetReplyOptions } from "../types.js"; -import type { FollowupRun } from "./queue.js"; import { resolveAgentModelFallbacksOverride } from "../../agents/agent-scope.js"; import { runWithModelFallback } from "../../agents/model-fallback.js"; import { isCliProvider } from "../../agents/model-selection.js"; import { runEmbeddedPiAgent } from "../../agents/pi-embedded.js"; import { resolveSandboxConfigForAgent, resolveSandboxRuntimeStatus } from "../../agents/sandbox.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { resolveAgentIdFromSessionKey, type SessionEntry, @@ -16,6 +12,9 @@ import { } from "../../config/sessions.js"; import { logVerbose } from "../../globals.js"; import { registerAgentRunContext } from "../../infra/agent-events.js"; +import type { TemplateContext } from "../templating.js"; +import type { VerboseLevel } from "../thinking.js"; +import type { GetReplyOptions } from "../types.js"; import { buildEmbeddedContextFromTemplate, buildTemplateSenderContext, @@ -28,6 +27,7 @@ import { resolveMemoryFlushSettings, shouldRunMemoryFlush, } from "./memory-flush.js"; +import type { FollowupRun } from "./queue.js"; import { incrementCompactionCount } from "./session-updates.js"; export async function runMemoryFlushIfNeeded(params: { diff --git a/src/auto-reply/reply/agent-runner-payloads.ts b/src/auto-reply/reply/agent-runner-payloads.ts index 050da6f5ea..ddc3bb0b15 100644 --- a/src/auto-reply/reply/agent-runner-payloads.ts +++ b/src/auto-reply/reply/agent-runner-payloads.ts @@ -1,9 +1,9 @@ import type { ReplyToMode } from "../../config/types.js"; -import type { OriginatingChannelType } from "../templating.js"; -import type { ReplyPayload } from "../types.js"; import { logVerbose } from "../../globals.js"; import { stripHeartbeatToken } from "../heartbeat.js"; +import type { OriginatingChannelType } from "../templating.js"; import { SILENT_REPLY_TOKEN } from "../tokens.js"; +import type { ReplyPayload } from "../types.js"; import { formatBunFetchSocketError, isBunFetchSocketError } from "./agent-runner-utils.js"; import { createBlockReplyPayloadKey, type BlockReplyPipeline } from "./block-reply-pipeline.js"; import { normalizeReplyPayloadDirectives } from "./reply-delivery.js"; diff --git a/src/auto-reply/reply/agent-runner-utils.ts b/src/auto-reply/reply/agent-runner-utils.ts index 288a9ac6a2..7e9a622358 100644 --- a/src/auto-reply/reply/agent-runner-utils.ts +++ b/src/auto-reply/reply/agent-runner-utils.ts @@ -1,13 +1,13 @@ import type { NormalizedUsage } from "../../agents/usage.js"; +import { getChannelDock } from "../../channels/dock.js"; import type { ChannelId, ChannelThreadingToolContext } from "../../channels/plugins/types.js"; +import { normalizeAnyChannelId, normalizeChannelId } from "../../channels/registry.js"; import type { OpenClawConfig } from "../../config/config.js"; +import { isReasoningTagProvider } from "../../utils/provider-utils.js"; +import { estimateUsageCost, formatTokenCount, formatUsd } from "../../utils/usage-format.js"; import type { TemplateContext } from "../templating.js"; import type { ReplyPayload } from "../types.js"; import type { FollowupRun } from "./queue.js"; -import { getChannelDock } from "../../channels/dock.js"; -import { normalizeAnyChannelId, normalizeChannelId } from "../../channels/registry.js"; -import { isReasoningTagProvider } from "../../utils/provider-utils.js"; -import { estimateUsageCost, formatTokenCount, formatUsd } from "../../utils/usage-format.js"; const BUN_FETCH_SOCKET_ERROR_RE = /socket connection was closed unexpectedly/i; diff --git a/src/auto-reply/reply/agent-runner.misc.runreplyagent.test.ts b/src/auto-reply/reply/agent-runner.misc.runreplyagent.test.ts index 8ce11f49d8..ab16815cf4 100644 --- a/src/auto-reply/reply/agent-runner.misc.runreplyagent.test.ts +++ b/src/auto-reply/reply/agent-runner.misc.runreplyagent.test.ts @@ -4,10 +4,10 @@ import os from "node:os"; import path from "node:path"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import type { SessionEntry } from "../../config/sessions.js"; -import type { TemplateContext } from "../templating.js"; -import type { FollowupRun, QueueSettings } from "./queue.js"; import { loadSessionStore, saveSessionStore } from "../../config/sessions.js"; import { onAgentEvent } from "../../infra/agent-events.js"; +import type { TemplateContext } from "../templating.js"; +import type { FollowupRun, QueueSettings } from "./queue.js"; import { createMockTypingController } from "./test-helpers.js"; const runEmbeddedPiAgentMock = vi.fn(); diff --git a/src/auto-reply/reply/agent-runner.runreplyagent.test.ts b/src/auto-reply/reply/agent-runner.runreplyagent.test.ts index 29d1be5b80..bf6560e5b1 100644 --- a/src/auto-reply/reply/agent-runner.runreplyagent.test.ts +++ b/src/auto-reply/reply/agent-runner.runreplyagent.test.ts @@ -3,11 +3,11 @@ import { tmpdir } from "node:os"; import path from "node:path"; import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import type { SessionEntry } from "../../config/sessions.js"; +import * as sessions from "../../config/sessions.js"; import type { TypingMode } from "../../config/types.js"; import type { TemplateContext } from "../templating.js"; import type { GetReplyOptions } from "../types.js"; import type { FollowupRun, QueueSettings } from "./queue.js"; -import * as sessions from "../../config/sessions.js"; import { createMockTypingController } from "./test-helpers.js"; type AgentRunParams = { diff --git a/src/auto-reply/reply/agent-runner.ts b/src/auto-reply/reply/agent-runner.ts index 3ab99f7f7d..57e71dc3ae 100644 --- a/src/auto-reply/reply/agent-runner.ts +++ b/src/auto-reply/reply/agent-runner.ts @@ -1,9 +1,5 @@ import crypto from "node:crypto"; import fs from "node:fs"; -import type { TypingMode } from "../../config/types.js"; -import type { OriginatingChannelType, TemplateContext } from "../templating.js"; -import type { GetReplyOptions, ReplyPayload } from "../types.js"; -import type { TypingController } from "./typing.js"; import { lookupContextTokens } from "../../agents/context.js"; import { DEFAULT_CONTEXT_TOKENS } from "../../agents/defaults.js"; import { resolveModelAuthMode } from "../../agents/model-auth.js"; @@ -18,11 +14,14 @@ import { updateSessionStore, updateSessionStoreEntry, } from "../../config/sessions.js"; +import type { TypingMode } from "../../config/types.js"; import { emitDiagnosticEvent, isDiagnosticsEnabled } from "../../infra/diagnostic-events.js"; import { enqueueSystemEvent } from "../../infra/system-events.js"; import { defaultRuntime } from "../../runtime.js"; import { estimateUsageCost, resolveModelCostConfig } from "../../utils/usage-format.js"; +import type { OriginatingChannelType, TemplateContext } from "../templating.js"; import { resolveResponseUsageMode, type VerboseLevel } from "../thinking.js"; +import type { GetReplyOptions, ReplyPayload } from "../types.js"; import { runAgentTurnWithFallback } from "./agent-runner-execution.js"; import { createShouldEmitToolOutput, @@ -48,6 +47,7 @@ import { enqueueFollowupRun, type FollowupRun, type QueueSettings } from "./queu import { createReplyToModeFilterForChannel, resolveReplyToMode } from "./reply-threading.js"; import { incrementRunCompactionCount, persistRunSessionUsage } from "./session-run-accounting.js"; import { createTypingSignaler } from "./typing-mode.js"; +import type { TypingController } from "./typing.js"; const BLOCK_REPLY_SEND_TIMEOUT_MS = 15_000; const UNSCHEDULED_REMINDER_NOTE = diff --git a/src/auto-reply/reply/bash-command.ts b/src/auto-reply/reply/bash-command.ts index 7912bc02ff..49a1c4df14 100644 --- a/src/auto-reply/reply/bash-command.ts +++ b/src/auto-reply/reply/bash-command.ts @@ -1,13 +1,13 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { MsgContext } from "../templating.js"; -import type { ReplyPayload } from "../types.js"; import { resolveSessionAgentId } from "../../agents/agent-scope.js"; import { getFinishedSession, getSession, markExited } from "../../agents/bash-process-registry.js"; import { createExecTool } from "../../agents/bash-tools.js"; import { resolveSandboxRuntimeStatus } from "../../agents/sandbox.js"; import { killProcessTree } from "../../agents/shell-utils.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { logVerbose } from "../../globals.js"; import { clampInt } from "../../utils.js"; +import type { MsgContext } from "../templating.js"; +import type { ReplyPayload } from "../types.js"; import { formatElevatedUnavailableMessage } from "./elevated-unavailable.js"; import { stripMentions, stripStructuralPrefixes } from "./mentions.js"; diff --git a/src/auto-reply/reply/block-reply-pipeline.ts b/src/auto-reply/reply/block-reply-pipeline.ts index 0bdf2fd9ff..e6ed2a056f 100644 --- a/src/auto-reply/reply/block-reply-pipeline.ts +++ b/src/auto-reply/reply/block-reply-pipeline.ts @@ -1,7 +1,7 @@ -import type { ReplyPayload } from "../types.js"; -import type { BlockStreamingCoalescing } from "./block-streaming.js"; import { logVerbose } from "../../globals.js"; +import type { ReplyPayload } from "../types.js"; import { createBlockReplyCoalescer } from "./block-reply-coalescer.js"; +import type { BlockStreamingCoalescing } from "./block-streaming.js"; export type BlockReplyPipeline = { enqueue: (payload: ReplyPayload) => void; diff --git a/src/auto-reply/reply/block-streaming.ts b/src/auto-reply/reply/block-streaming.ts index 96cadb9993..4dfd5bb92d 100644 --- a/src/auto-reply/reply/block-streaming.ts +++ b/src/auto-reply/reply/block-streaming.ts @@ -1,7 +1,7 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { BlockStreamingCoalesceConfig } from "../../config/types.js"; import { getChannelDock } from "../../channels/dock.js"; import { normalizeChannelId } from "../../channels/plugins/index.js"; +import type { OpenClawConfig } from "../../config/config.js"; +import type { BlockStreamingCoalesceConfig } from "../../config/types.js"; import { normalizeAccountId } from "../../routing/session-key.js"; import { INTERNAL_MESSAGE_CHANNEL, diff --git a/src/auto-reply/reply/commands-allowlist.ts b/src/auto-reply/reply/commands-allowlist.ts index 09a626d9e6..fd5fa8ad7f 100644 --- a/src/auto-reply/reply/commands-allowlist.ts +++ b/src/auto-reply/reply/commands-allowlist.ts @@ -1,10 +1,9 @@ -import type { ChannelId } from "../../channels/plugins/types.js"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { CommandHandler } from "./commands-types.js"; import { getChannelDock } from "../../channels/dock.js"; import { resolveChannelConfigWrites } from "../../channels/plugins/config-writes.js"; import { listPairingChannels } from "../../channels/plugins/pairing.js"; +import type { ChannelId } from "../../channels/plugins/types.js"; import { normalizeChannelId } from "../../channels/registry.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { readConfigFileSnapshot, validateConfigObjectWithPlugins, @@ -25,6 +24,7 @@ import { resolveSlackAccount } from "../../slack/accounts.js"; import { resolveSlackUserAllowlist } from "../../slack/resolve-users.js"; import { resolveTelegramAccount } from "../../telegram/accounts.js"; import { resolveWhatsAppAccount } from "../../web/accounts.js"; +import type { CommandHandler } from "./commands-types.js"; type AllowlistScope = "dm" | "group" | "all"; type AllowlistAction = "list" | "add" | "remove"; diff --git a/src/auto-reply/reply/commands-approve.ts b/src/auto-reply/reply/commands-approve.ts index 12bca57ded..42e5b30a34 100644 --- a/src/auto-reply/reply/commands-approve.ts +++ b/src/auto-reply/reply/commands-approve.ts @@ -1,4 +1,3 @@ -import type { CommandHandler } from "./commands-types.js"; import { callGateway } from "../../gateway/call.js"; import { logVerbose } from "../../globals.js"; import { @@ -6,6 +5,7 @@ import { GATEWAY_CLIENT_NAMES, isInternalMessageChannel, } from "../../utils/message-channel.js"; +import type { CommandHandler } from "./commands-types.js"; const COMMAND = "/approve"; diff --git a/src/auto-reply/reply/commands-bash.ts b/src/auto-reply/reply/commands-bash.ts index 541f342da6..de884241e6 100644 --- a/src/auto-reply/reply/commands-bash.ts +++ b/src/auto-reply/reply/commands-bash.ts @@ -1,6 +1,6 @@ -import type { CommandHandler } from "./commands-types.js"; import { logVerbose } from "../../globals.js"; import { handleBashChatCommand } from "./bash-command.js"; +import type { CommandHandler } from "./commands-types.js"; export const handleBashCommand: CommandHandler = async (params, allowTextCommands) => { if (!allowTextCommands) { diff --git a/src/auto-reply/reply/commands-compact.ts b/src/auto-reply/reply/commands-compact.ts index 3362950872..f6242232a1 100644 --- a/src/auto-reply/reply/commands-compact.ts +++ b/src/auto-reply/reply/commands-compact.ts @@ -1,11 +1,10 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { CommandHandler } from "./commands-types.js"; import { abortEmbeddedPiRun, compactEmbeddedPiSession, isEmbeddedPiRunActive, waitForEmbeddedPiRunEnd, } from "../../agents/pi-embedded.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { resolveFreshSessionTotalTokens, resolveSessionFilePath, @@ -14,6 +13,7 @@ import { import { logVerbose } from "../../globals.js"; import { enqueueSystemEvent } from "../../infra/system-events.js"; import { formatContextUsageShort, formatTokenCount } from "../status.js"; +import type { CommandHandler } from "./commands-types.js"; import { stripMentions, stripStructuralPrefixes } from "./mentions.js"; import { incrementCompactionCount } from "./session-updates.js"; diff --git a/src/auto-reply/reply/commands-config.ts b/src/auto-reply/reply/commands-config.ts index e5f42c78a4..87aa8732f2 100644 --- a/src/auto-reply/reply/commands-config.ts +++ b/src/auto-reply/reply/commands-config.ts @@ -1,4 +1,3 @@ -import type { CommandHandler } from "./commands-types.js"; import { resolveChannelConfigWrites } from "../../channels/plugins/config-writes.js"; import { normalizeChannelId } from "../../channels/registry.js"; import { @@ -19,6 +18,7 @@ import { unsetConfigOverride, } from "../../config/runtime-overrides.js"; import { logVerbose } from "../../globals.js"; +import type { CommandHandler } from "./commands-types.js"; import { parseConfigCommand } from "./config-commands.js"; import { parseDebugCommand } from "./debug-commands.js"; diff --git a/src/auto-reply/reply/commands-context-report.test.ts b/src/auto-reply/reply/commands-context-report.test.ts index ace49f1ecf..515e2c8f6f 100644 --- a/src/auto-reply/reply/commands-context-report.test.ts +++ b/src/auto-reply/reply/commands-context-report.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import type { HandleCommandsParams } from "./commands-types.js"; import { buildContextReply } from "./commands-context-report.js"; +import type { HandleCommandsParams } from "./commands-types.js"; function makeParams(commandBodyNormalized: string, truncated: boolean): HandleCommandsParams { return { diff --git a/src/auto-reply/reply/commands-context-report.ts b/src/auto-reply/reply/commands-context-report.ts index b9a1130e52..bf8b5f694b 100644 --- a/src/auto-reply/reply/commands-context-report.ts +++ b/src/auto-reply/reply/commands-context-report.ts @@ -1,12 +1,12 @@ -import type { SessionSystemPromptReport } from "../../config/sessions/types.js"; -import type { ReplyPayload } from "../types.js"; -import type { HandleCommandsParams } from "./commands-types.js"; import { resolveBootstrapMaxChars, resolveBootstrapTotalMaxChars, } from "../../agents/pi-embedded-helpers.js"; import { buildSystemPromptReport } from "../../agents/system-prompt-report.js"; +import type { SessionSystemPromptReport } from "../../config/sessions/types.js"; +import type { ReplyPayload } from "../types.js"; import { resolveCommandsSystemPromptBundle } from "./commands-system-prompt.js"; +import type { HandleCommandsParams } from "./commands-types.js"; function estimateTokensFromChars(chars: number): number { return Math.ceil(Math.max(0, chars) / 4); diff --git a/src/auto-reply/reply/commands-context.ts b/src/auto-reply/reply/commands-context.ts index af78c2b38f..3d177c2b5f 100644 --- a/src/auto-reply/reply/commands-context.ts +++ b/src/auto-reply/reply/commands-context.ts @@ -1,8 +1,8 @@ import type { OpenClawConfig } from "../../config/config.js"; -import type { MsgContext } from "../templating.js"; -import type { CommandContext } from "./commands-types.js"; import { resolveCommandAuthorization } from "../command-auth.js"; import { normalizeCommandBody } from "../commands-registry.js"; +import type { MsgContext } from "../templating.js"; +import type { CommandContext } from "./commands-types.js"; import { stripMentions } from "./mentions.js"; export function buildCommandContext(params: { diff --git a/src/auto-reply/reply/commands-core.ts b/src/auto-reply/reply/commands-core.ts index 65ba090994..c24a2ef44b 100644 --- a/src/auto-reply/reply/commands-core.ts +++ b/src/auto-reply/reply/commands-core.ts @@ -1,9 +1,4 @@ import fs from "node:fs/promises"; -import type { - CommandHandler, - CommandHandlerResult, - HandleCommandsParams, -} from "./commands-types.js"; import { logVerbose } from "../../globals.js"; import { createInternalHookEvent, triggerInternalHook } from "../../hooks/internal-hooks.js"; import { getGlobalHookRunner } from "../../plugins/hook-runner-global.js"; @@ -35,6 +30,11 @@ import { } from "./commands-session.js"; import { handleSubagentsCommand } from "./commands-subagents.js"; import { handleTtsCommands } from "./commands-tts.js"; +import type { + CommandHandler, + CommandHandlerResult, + HandleCommandsParams, +} from "./commands-types.js"; import { routeReply } from "./route-reply.js"; let HANDLERS: CommandHandler[] | null = null; diff --git a/src/auto-reply/reply/commands-export-session.ts b/src/auto-reply/reply/commands-export-session.ts index 23e30dff97..10d039741a 100644 --- a/src/auto-reply/reply/commands-export-session.ts +++ b/src/auto-reply/reply/commands-export-session.ts @@ -1,17 +1,17 @@ -import type { SessionEntry as PiSessionEntry, SessionHeader } from "@mariozechner/pi-coding-agent"; -import { SessionManager } from "@mariozechner/pi-coding-agent"; import fs from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; -import type { SessionEntry } from "../../config/sessions/types.js"; -import type { ReplyPayload } from "../types.js"; -import type { HandleCommandsParams } from "./commands-types.js"; +import type { SessionEntry as PiSessionEntry, SessionHeader } from "@mariozechner/pi-coding-agent"; +import { SessionManager } from "@mariozechner/pi-coding-agent"; import { resolveDefaultSessionStorePath, resolveSessionFilePath, } from "../../config/sessions/paths.js"; import { loadSessionStore } from "../../config/sessions/store.js"; +import type { SessionEntry } from "../../config/sessions/types.js"; +import type { ReplyPayload } from "../types.js"; import { resolveCommandsSystemPromptBundle } from "./commands-system-prompt.js"; +import type { HandleCommandsParams } from "./commands-types.js"; // Export HTML templates are bundled with this module const EXPORT_HTML_DIR = path.join(path.dirname(fileURLToPath(import.meta.url)), "export-html"); diff --git a/src/auto-reply/reply/commands-info.ts b/src/auto-reply/reply/commands-info.ts index 50b2dbbb0d..8ed5c248ca 100644 --- a/src/auto-reply/reply/commands-info.ts +++ b/src/auto-reply/reply/commands-info.ts @@ -1,4 +1,3 @@ -import type { CommandHandler } from "./commands-types.js"; import { logVerbose } from "../../globals.js"; import { listSkillCommandsForAgents } from "../skill-commands.js"; import { @@ -9,6 +8,7 @@ import { import { buildContextReply } from "./commands-context-report.js"; import { buildExportSessionReply } from "./commands-export-session.js"; import { buildStatusReply } from "./commands-status.js"; +import type { CommandHandler } from "./commands-types.js"; export const handleHelpCommand: CommandHandler = async (params, allowTextCommands) => { if (!allowTextCommands) { diff --git a/src/auto-reply/reply/commands-mesh.ts b/src/auto-reply/reply/commands-mesh.ts index 01570ce189..6f5b1c12e4 100644 --- a/src/auto-reply/reply/commands-mesh.ts +++ b/src/auto-reply/reply/commands-mesh.ts @@ -1,7 +1,7 @@ -import type { CommandHandler } from "./commands-types.js"; import { callGateway } from "../../gateway/call.js"; import { logVerbose } from "../../globals.js"; import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../../utils/message-channel.js"; +import type { CommandHandler } from "./commands-types.js"; type MeshPlanShape = { planId: string; diff --git a/src/auto-reply/reply/commands-models.ts b/src/auto-reply/reply/commands-models.ts index 08d4b95080..9a7afda147 100644 --- a/src/auto-reply/reply/commands-models.ts +++ b/src/auto-reply/reply/commands-models.ts @@ -1,6 +1,3 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { ReplyPayload } from "../types.js"; -import type { CommandHandler } from "./commands-types.js"; import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "../../agents/defaults.js"; import { loadModelCatalog } from "../../agents/model-catalog.js"; import { @@ -10,6 +7,7 @@ import { resolveConfiguredModelRef, resolveModelRefFromString, } from "../../agents/model-selection.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { buildModelsKeyboard, buildProviderKeyboard, @@ -17,6 +15,8 @@ import { getModelsPageSize, type ProviderInfo, } from "../../telegram/model-buttons.js"; +import type { ReplyPayload } from "../types.js"; +import type { CommandHandler } from "./commands-types.js"; const PAGE_SIZE_DEFAULT = 20; const PAGE_SIZE_MAX = 100; diff --git a/src/auto-reply/reply/commands-plugin.ts b/src/auto-reply/reply/commands-plugin.ts index 7371b10260..e76f0f25e7 100644 --- a/src/auto-reply/reply/commands-plugin.ts +++ b/src/auto-reply/reply/commands-plugin.ts @@ -5,8 +5,8 @@ * This handler is called before built-in command handlers. */ -import type { CommandHandler, CommandHandlerResult } from "./commands-types.js"; import { matchPluginCommand, executePluginCommand } from "../../plugins/commands.js"; +import type { CommandHandler, CommandHandlerResult } from "./commands-types.js"; /** * Handle plugin-registered commands. diff --git a/src/auto-reply/reply/commands-ptt.ts b/src/auto-reply/reply/commands-ptt.ts index f104b3f177..09d0e094e3 100644 --- a/src/auto-reply/reply/commands-ptt.ts +++ b/src/auto-reply/reply/commands-ptt.ts @@ -1,7 +1,7 @@ import type { OpenClawConfig } from "../../config/config.js"; -import type { CommandHandler } from "./commands-types.js"; import { callGateway, randomIdempotencyKey } from "../../gateway/call.js"; import { logVerbose } from "../../globals.js"; +import type { CommandHandler } from "./commands-types.js"; type NodeSummary = { nodeId: string; diff --git a/src/auto-reply/reply/commands-session.ts b/src/auto-reply/reply/commands-session.ts index 205c6b3876..b8f14128ed 100644 --- a/src/auto-reply/reply/commands-session.ts +++ b/src/auto-reply/reply/commands-session.ts @@ -1,6 +1,5 @@ -import type { SessionEntry } from "../../config/sessions.js"; -import type { CommandHandler } from "./commands-types.js"; import { abortEmbeddedPiRun } from "../../agents/pi-embedded.js"; +import type { SessionEntry } from "../../config/sessions.js"; import { updateSessionStore } from "../../config/sessions.js"; import { logVerbose } from "../../globals.js"; import { createInternalHookEvent, triggerInternalHook } from "../../hooks/internal-hooks.js"; @@ -16,6 +15,7 @@ import { setAbortMemory, stopSubagentsForRequester, } from "./abort.js"; +import type { CommandHandler } from "./commands-types.js"; import { clearSessionQueues } from "./queue.js"; function resolveSessionEntryForKey( diff --git a/src/auto-reply/reply/commands-status.ts b/src/auto-reply/reply/commands-status.ts index 9d416d3f29..08aff7e056 100644 --- a/src/auto-reply/reply/commands-status.ts +++ b/src/auto-reply/reply/commands-status.ts @@ -1,9 +1,3 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { SessionEntry, SessionScope } from "../../config/sessions.js"; -import type { MediaUnderstandingDecision } from "../../media-understanding/types.js"; -import type { ElevatedLevel, ReasoningLevel, ThinkLevel, VerboseLevel } from "../thinking.js"; -import type { ReplyPayload } from "../types.js"; -import type { CommandContext } from "./commands-types.js"; import { resolveAgentDir, resolveDefaultAgentId, @@ -15,14 +9,20 @@ import { resolveInternalSessionKey, resolveMainSessionAlias, } from "../../agents/tools/sessions-helpers.js"; +import type { OpenClawConfig } from "../../config/config.js"; +import type { SessionEntry, SessionScope } from "../../config/sessions.js"; import { logVerbose } from "../../globals.js"; import { formatUsageWindowSummary, loadProviderUsageSummary, resolveUsageProviderId, } from "../../infra/provider-usage.js"; +import type { MediaUnderstandingDecision } from "../../media-understanding/types.js"; import { normalizeGroupActivation } from "../group-activation.js"; import { buildStatusMessage } from "../status.js"; +import type { ElevatedLevel, ReasoningLevel, ThinkLevel, VerboseLevel } from "../thinking.js"; +import type { ReplyPayload } from "../types.js"; +import type { CommandContext } from "./commands-types.js"; import { getFollowupQueueDepth, resolveQueueSettings } from "./queue.js"; import { resolveSubagentLabel } from "./subagents-utils.js"; diff --git a/src/auto-reply/reply/commands-subagents-spawn.test.ts b/src/auto-reply/reply/commands-subagents-spawn.test.ts index 8a19aaf655..57a2b47de3 100644 --- a/src/auto-reply/reply/commands-subagents-spawn.test.ts +++ b/src/auto-reply/reply/commands-subagents-spawn.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; +import { resetSubagentRegistryForTests } from "../../agents/subagent-registry.js"; import type { SpawnSubagentResult } from "../../agents/subagent-spawn.js"; import type { OpenClawConfig } from "../../config/config.js"; -import { resetSubagentRegistryForTests } from "../../agents/subagent-registry.js"; const hoisted = vi.hoisted(() => { const spawnSubagentDirectMock = vi.fn(); diff --git a/src/auto-reply/reply/commands-subagents.ts b/src/auto-reply/reply/commands-subagents.ts index 0535ddb68f..f56a9ed43e 100644 --- a/src/auto-reply/reply/commands-subagents.ts +++ b/src/auto-reply/reply/commands-subagents.ts @@ -1,8 +1,7 @@ import crypto from "node:crypto"; -import type { SubagentRunRecord } from "../../agents/subagent-registry.js"; -import type { CommandHandler } from "./commands-types.js"; import { AGENT_LANE_SUBAGENT } from "../../agents/lanes.js"; import { abortEmbeddedPiRun } from "../../agents/pi-embedded.js"; +import type { SubagentRunRecord } from "../../agents/subagent-registry.js"; import { clearSubagentRunSteerRestart, listSubagentRunsForRequester, @@ -36,6 +35,7 @@ import { } from "../../shared/subagents-format.js"; import { INTERNAL_MESSAGE_CHANNEL } from "../../utils/message-channel.js"; import { stopSubagentsForRequester } from "./abort.js"; +import type { CommandHandler } from "./commands-types.js"; import { clearSessionQueues } from "./queue.js"; import { formatRunLabel, formatRunStatus, sortSubagentRuns } from "./subagents-utils.js"; diff --git a/src/auto-reply/reply/commands-system-prompt.ts b/src/auto-reply/reply/commands-system-prompt.ts index 19e98acaa4..abbedd689a 100644 --- a/src/auto-reply/reply/commands-system-prompt.ts +++ b/src/auto-reply/reply/commands-system-prompt.ts @@ -1,10 +1,8 @@ import type { AgentTool } from "@mariozechner/pi-agent-core"; -import type { EmbeddedContextFile } from "../../agents/pi-embedded-helpers.js"; -import type { WorkspaceBootstrapFile } from "../../agents/workspace.js"; -import type { HandleCommandsParams } from "./commands-types.js"; import { resolveSessionAgentIds } from "../../agents/agent-scope.js"; import { resolveBootstrapContextForRun } from "../../agents/bootstrap-files.js"; import { resolveDefaultModelForAgent } from "../../agents/model-selection.js"; +import type { EmbeddedContextFile } from "../../agents/pi-embedded-helpers.js"; import { createOpenClawCodingTools } from "../../agents/pi-tools.js"; import { resolveSandboxRuntimeStatus } from "../../agents/sandbox.js"; import { buildWorkspaceSkillSnapshot } from "../../agents/skills.js"; @@ -12,8 +10,10 @@ import { getSkillsSnapshotVersion } from "../../agents/skills/refresh.js"; import { buildSystemPromptParams } from "../../agents/system-prompt-params.js"; import { buildAgentSystemPrompt } from "../../agents/system-prompt.js"; import { buildToolSummaryMap } from "../../agents/tool-summaries.js"; +import type { WorkspaceBootstrapFile } from "../../agents/workspace.js"; import { getRemoteSkillEligibility } from "../../infra/skills-remote.js"; import { buildTtsSystemPromptHint } from "../../tts/tts.js"; +import type { HandleCommandsParams } from "./commands-types.js"; export type CommandsSystemPromptBundle = { systemPrompt: string; diff --git a/src/auto-reply/reply/commands-tts.ts b/src/auto-reply/reply/commands-tts.ts index b31c5d1d76..a6711d2c64 100644 --- a/src/auto-reply/reply/commands-tts.ts +++ b/src/auto-reply/reply/commands-tts.ts @@ -1,5 +1,3 @@ -import type { ReplyPayload } from "../types.js"; -import type { CommandHandler } from "./commands-types.js"; import { logVerbose } from "../../globals.js"; import { getLastTtsAttempt, @@ -18,6 +16,8 @@ import { setTtsProvider, textToSpeech, } from "../../tts/tts.js"; +import type { ReplyPayload } from "../types.js"; +import type { CommandHandler } from "./commands-types.js"; type ParsedTtsCommand = { action: string; diff --git a/src/auto-reply/reply/commands.test.ts b/src/auto-reply/reply/commands.test.ts index edbddb37c4..7d89239ae8 100644 --- a/src/auto-reply/reply/commands.test.ts +++ b/src/auto-reply/reply/commands.test.ts @@ -2,16 +2,16 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { MsgContext } from "../templating.js"; import { addSubagentRunForTests, listSubagentRunsForRequester, resetSubagentRegistryForTests, } from "../../agents/subagent-registry.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { updateSessionStore } from "../../config/sessions.js"; import * as internalHooks from "../../hooks/internal-hooks.js"; import { clearPluginCommands, registerPluginCommand } from "../../plugins/commands.js"; +import type { MsgContext } from "../templating.js"; import { resetBashChatCommandForTests } from "./bash-command.js"; import { handleCompactCommand } from "./commands-compact.js"; import { buildCommandsPaginationKeyboard } from "./commands-info.js"; diff --git a/src/auto-reply/reply/directive-handling.auth.ts b/src/auto-reply/reply/directive-handling.auth.ts index e74b902fb9..480bf8a820 100644 --- a/src/auto-reply/reply/directive-handling.auth.ts +++ b/src/auto-reply/reply/directive-handling.auth.ts @@ -1,4 +1,3 @@ -import type { OpenClawConfig } from "../../config/config.js"; import { isProfileInCooldown, resolveAuthProfileDisplayLabel, @@ -11,6 +10,7 @@ import { resolveEnvApiKey, } from "../../agents/model-auth.js"; import { findNormalizedProviderValue, normalizeProviderId } from "../../agents/model-selection.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { shortenHomePath } from "../../utils.js"; export type ModelAuthDetailMode = "compact" | "verbose"; diff --git a/src/auto-reply/reply/directive-handling.fast-lane.ts b/src/auto-reply/reply/directive-handling.fast-lane.ts index fdea7c75e0..43f58adcca 100644 --- a/src/auto-reply/reply/directive-handling.fast-lane.ts +++ b/src/auto-reply/reply/directive-handling.fast-lane.ts @@ -1,7 +1,7 @@ import type { ReplyPayload } from "../types.js"; -import type { ApplyInlineDirectivesFastLaneParams } from "./directive-handling.params.js"; import { handleDirectiveOnly } from "./directive-handling.impl.js"; import { resolveCurrentDirectiveLevels } from "./directive-handling.levels.js"; +import type { ApplyInlineDirectivesFastLaneParams } from "./directive-handling.params.js"; import { isDirectiveOnly } from "./directive-handling.parse.js"; export async function applyInlineDirectivesFastLane( diff --git a/src/auto-reply/reply/directive-handling.impl.ts b/src/auto-reply/reply/directive-handling.impl.ts index 838d7aeee7..cd250cc78b 100644 --- a/src/auto-reply/reply/directive-handling.impl.ts +++ b/src/auto-reply/reply/directive-handling.impl.ts @@ -1,23 +1,22 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { ExecAsk, ExecHost, ExecSecurity } from "../../infra/exec-approvals.js"; -import type { ReplyPayload } from "../types.js"; -import type { HandleDirectiveOnlyParams } from "./directive-handling.params.js"; -import type { ElevatedLevel, ReasoningLevel, ThinkLevel } from "./directives.js"; import { resolveAgentConfig, resolveAgentDir, resolveSessionAgentId, } from "../../agents/agent-scope.js"; import { resolveSandboxRuntimeStatus } from "../../agents/sandbox.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { type SessionEntry, updateSessionStore } from "../../config/sessions.js"; +import type { ExecAsk, ExecHost, ExecSecurity } from "../../infra/exec-approvals.js"; import { enqueueSystemEvent } from "../../infra/system-events.js"; import { applyVerboseOverride } from "../../sessions/level-overrides.js"; import { applyModelOverrideToSessionEntry } from "../../sessions/model-overrides.js"; import { formatThinkingLevels, formatXHighModelHint, supportsXHighThinking } from "../thinking.js"; +import type { ReplyPayload } from "../types.js"; import { maybeHandleModelDirectiveInfo, resolveModelSelectionFromDirective, } from "./directive-handling.model.js"; +import type { HandleDirectiveOnlyParams } from "./directive-handling.params.js"; import { maybeHandleQueueDirective } from "./directive-handling.queue-validation.js"; import { formatDirectiveAck, @@ -26,6 +25,7 @@ import { enqueueModeSwitchEvents, withOptions, } from "./directive-handling.shared.js"; +import type { ElevatedLevel, ReasoningLevel, ThinkLevel } from "./directives.js"; function resolveExecDefaults(params: { cfg: OpenClawConfig; diff --git a/src/auto-reply/reply/directive-handling.model-picker.ts b/src/auto-reply/reply/directive-handling.model-picker.ts index f95c7141ba..0c2bcaf61e 100644 --- a/src/auto-reply/reply/directive-handling.model-picker.ts +++ b/src/auto-reply/reply/directive-handling.model-picker.ts @@ -1,5 +1,5 @@ -import type { OpenClawConfig } from "../../config/config.js"; import { type ModelRef, normalizeProviderId } from "../../agents/model-selection.js"; +import type { OpenClawConfig } from "../../config/config.js"; export type ModelPickerCatalogEntry = { provider: string; diff --git a/src/auto-reply/reply/directive-handling.model.ts b/src/auto-reply/reply/directive-handling.model.ts index dc36c54fb0..b69c4f2a7c 100644 --- a/src/auto-reply/reply/directive-handling.model.ts +++ b/src/auto-reply/reply/directive-handling.model.ts @@ -1,6 +1,3 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { ReplyPayload } from "../types.js"; -import type { InlineDirectives } from "./directive-handling.parse.js"; import { resolveAuthStorePathForDisplay } from "../../agents/auth-profiles.js"; import { type ModelAliasIndex, @@ -9,8 +6,10 @@ import { resolveConfiguredModelRef, resolveModelRefFromString, } from "../../agents/model-selection.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { buildBrowseProvidersButton } from "../../telegram/model-buttons.js"; import { shortenHomePath } from "../../utils.js"; +import type { ReplyPayload } from "../types.js"; import { resolveModelsCommandReply } from "./commands-models.js"; import { formatAuthLabel, @@ -22,6 +21,7 @@ import { type ModelPickerCatalogEntry, resolveProviderEndpointLabel, } from "./directive-handling.model-picker.js"; +import type { InlineDirectives } from "./directive-handling.parse.js"; import { type ModelDirectiveSelection, resolveModelDirectiveSelection } from "./model-selection.js"; function buildModelPickerCatalog(params: { diff --git a/src/auto-reply/reply/directive-handling.parse.ts b/src/auto-reply/reply/directive-handling.parse.ts index dbef035b3b..b09d5c553b 100644 --- a/src/auto-reply/reply/directive-handling.parse.ts +++ b/src/auto-reply/reply/directive-handling.parse.ts @@ -1,9 +1,8 @@ import type { OpenClawConfig } from "../../config/config.js"; import type { ExecAsk, ExecHost, ExecSecurity } from "../../infra/exec-approvals.js"; +import { extractModelDirective } from "../model.js"; import type { MsgContext } from "../templating.js"; import type { ElevatedLevel, ReasoningLevel, ThinkLevel, VerboseLevel } from "./directives.js"; -import type { QueueDropPolicy, QueueMode } from "./queue.js"; -import { extractModelDirective } from "../model.js"; import { extractElevatedDirective, extractExecDirective, @@ -13,6 +12,7 @@ import { extractVerboseDirective, } from "./directives.js"; import { stripMentions, stripStructuralPrefixes } from "./mentions.js"; +import type { QueueDropPolicy, QueueMode } from "./queue.js"; import { extractQueueDirective } from "./queue.js"; export type InlineDirectives = { diff --git a/src/auto-reply/reply/directive-handling.persist.ts b/src/auto-reply/reply/directive-handling.persist.ts index a7c97ad448..c781f49680 100644 --- a/src/auto-reply/reply/directive-handling.persist.ts +++ b/src/auto-reply/reply/directive-handling.persist.ts @@ -1,6 +1,3 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { InlineDirectives } from "./directive-handling.parse.js"; -import type { ElevatedLevel, ReasoningLevel } from "./directives.js"; import { resolveAgentDir, resolveDefaultAgentId, @@ -15,12 +12,15 @@ import { resolveDefaultModelForAgent, resolveModelRefFromString, } from "../../agents/model-selection.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { type SessionEntry, updateSessionStore } from "../../config/sessions.js"; import { enqueueSystemEvent } from "../../infra/system-events.js"; import { applyVerboseOverride } from "../../sessions/level-overrides.js"; import { applyModelOverrideToSessionEntry } from "../../sessions/model-overrides.js"; import { resolveProfileOverride } from "./directive-handling.auth.js"; +import type { InlineDirectives } from "./directive-handling.parse.js"; import { enqueueModeSwitchEvents } from "./directive-handling.shared.js"; +import type { ElevatedLevel, ReasoningLevel } from "./directives.js"; export async function persistInlineDirectives(params: { directives: InlineDirectives; diff --git a/src/auto-reply/reply/directive-handling.shared.ts b/src/auto-reply/reply/directive-handling.shared.ts index 01a61b773a..2a0a78615e 100644 --- a/src/auto-reply/reply/directive-handling.shared.ts +++ b/src/auto-reply/reply/directive-handling.shared.ts @@ -1,5 +1,5 @@ -import type { ElevatedLevel, ReasoningLevel } from "./directives.js"; import { formatCliCommand } from "../../cli/command-format.js"; +import type { ElevatedLevel, ReasoningLevel } from "./directives.js"; export const SYSTEM_MARK = "⚙️"; diff --git a/src/auto-reply/reply/directives.ts b/src/auto-reply/reply/directives.ts index bb08801b4c..e0bda738b6 100644 --- a/src/auto-reply/reply/directives.ts +++ b/src/auto-reply/reply/directives.ts @@ -1,5 +1,5 @@ -import type { NoticeLevel, ReasoningLevel } from "../thinking.js"; import { escapeRegExp } from "../../utils.js"; +import type { NoticeLevel, ReasoningLevel } from "../thinking.js"; import { type ElevatedLevel, normalizeElevatedLevel, diff --git a/src/auto-reply/reply/dispatch-from-config.ts b/src/auto-reply/reply/dispatch-from-config.ts index b605a0ff2d..0b8da28cc9 100644 --- a/src/auto-reply/reply/dispatch-from-config.ts +++ b/src/auto-reply/reply/dispatch-from-config.ts @@ -1,8 +1,5 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { FinalizedMsgContext } from "../templating.js"; -import type { GetReplyOptions, ReplyPayload } from "../types.js"; -import type { ReplyDispatcher, ReplyDispatchKind } from "./reply-dispatcher.js"; import { resolveSessionAgentId } from "../../agents/agent-scope.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { loadSessionStore, resolveStorePath } from "../../config/sessions.js"; import { logVerbose } from "../../globals.js"; import { isDiagnosticsEnabled } from "../../infra/diagnostic-events.js"; @@ -14,8 +11,11 @@ import { import { getGlobalHookRunner } from "../../plugins/hook-runner-global.js"; import { maybeApplyTtsToPayload, normalizeTtsAutoMode, resolveTtsConfig } from "../../tts/tts.js"; import { getReplyFromConfig } from "../reply.js"; +import type { FinalizedMsgContext } from "../templating.js"; +import type { GetReplyOptions, ReplyPayload } from "../types.js"; import { formatAbortReplyText, tryFastAbortFromMessage } from "./abort.js"; import { shouldSkipDuplicateInbound } from "./inbound-dedupe.js"; +import type { ReplyDispatcher, ReplyDispatchKind } from "./reply-dispatcher.js"; import { isRoutableChannel, routeReply } from "./route-reply.js"; const AUDIO_PLACEHOLDER_RE = /^(\s*\([^)]*\))?$/i; diff --git a/src/auto-reply/reply/followup-runner.test.ts b/src/auto-reply/reply/followup-runner.test.ts index ebdf83ad09..d0860cc202 100644 --- a/src/auto-reply/reply/followup-runner.test.ts +++ b/src/auto-reply/reply/followup-runner.test.ts @@ -2,8 +2,8 @@ import fs from "node:fs/promises"; import { tmpdir } from "node:os"; import path from "node:path"; import { describe, expect, it, vi } from "vitest"; -import type { FollowupRun } from "./queue.js"; import { loadSessionStore, saveSessionStore, type SessionEntry } from "../../config/sessions.js"; +import type { FollowupRun } from "./queue.js"; import { createMockTypingController } from "./test-helpers.js"; const runEmbeddedPiAgentMock = vi.fn(); diff --git a/src/auto-reply/reply/followup-runner.ts b/src/auto-reply/reply/followup-runner.ts index 1ef7734e8d..52f3e9e0c4 100644 --- a/src/auto-reply/reply/followup-runner.ts +++ b/src/auto-reply/reply/followup-runner.ts @@ -1,21 +1,20 @@ import crypto from "node:crypto"; -import type { TypingMode } from "../../config/types.js"; -import type { OriginatingChannelType } from "../templating.js"; -import type { GetReplyOptions, ReplyPayload } from "../types.js"; -import type { FollowupRun } from "./queue.js"; -import type { TypingController } from "./typing.js"; import { resolveAgentModelFallbacksOverride } from "../../agents/agent-scope.js"; import { lookupContextTokens } from "../../agents/context.js"; import { DEFAULT_CONTEXT_TOKENS } from "../../agents/defaults.js"; import { runWithModelFallback } from "../../agents/model-fallback.js"; import { runEmbeddedPiAgent } from "../../agents/pi-embedded.js"; import { resolveAgentIdFromSessionKey, type SessionEntry } from "../../config/sessions.js"; +import type { TypingMode } from "../../config/types.js"; import { logVerbose } from "../../globals.js"; import { registerAgentRunContext } from "../../infra/agent-events.js"; import { defaultRuntime } from "../../runtime.js"; import { stripHeartbeatToken } from "../heartbeat.js"; +import type { OriginatingChannelType } from "../templating.js"; import { isSilentReplyText, SILENT_REPLY_TOKEN } from "../tokens.js"; +import type { GetReplyOptions, ReplyPayload } from "../types.js"; import { resolveRunAuthProfile } from "./agent-runner-utils.js"; +import type { FollowupRun } from "./queue.js"; import { applyReplyThreading, filterMessagingToolDuplicates, @@ -26,6 +25,7 @@ import { resolveReplyToMode } from "./reply-threading.js"; import { isRoutableChannel, routeReply } from "./route-reply.js"; import { incrementRunCompactionCount, persistRunSessionUsage } from "./session-run-accounting.js"; import { createTypingSignaler } from "./typing-mode.js"; +import type { TypingController } from "./typing.js"; export function createFollowupRunner(params: { opts?: GetReplyOptions; diff --git a/src/auto-reply/reply/get-reply-directives-apply.ts b/src/auto-reply/reply/get-reply-directives-apply.ts index b6ecc4c830..59d1308cca 100644 --- a/src/auto-reply/reply/get-reply-directives-apply.ts +++ b/src/auto-reply/reply/get-reply-directives-apply.ts @@ -3,8 +3,6 @@ import type { SessionEntry } from "../../config/sessions.js"; import type { MsgContext } from "../templating.js"; import type { ElevatedLevel } from "../thinking.js"; import type { ReplyPayload } from "../types.js"; -import type { createModelSelectionState } from "./model-selection.js"; -import type { TypingController } from "./typing.js"; import { buildStatusReply } from "./commands.js"; import { applyInlineDirectivesFastLane, @@ -15,6 +13,8 @@ import { } from "./directive-handling.js"; import { resolveCurrentDirectiveLevels } from "./directive-handling.levels.js"; import { clearInlineDirectives } from "./get-reply-directives-utils.js"; +import type { createModelSelectionState } from "./model-selection.js"; +import type { TypingController } from "./typing.js"; type AgentDefaults = NonNullable["defaults"]; diff --git a/src/auto-reply/reply/get-reply-directives.ts b/src/auto-reply/reply/get-reply-directives.ts index 417bdf6541..57d1808d49 100644 --- a/src/auto-reply/reply/get-reply-directives.ts +++ b/src/auto-reply/reply/get-reply-directives.ts @@ -1,15 +1,14 @@ import type { ExecToolDefaults } from "../../agents/bash-tools.js"; import type { ModelAliasIndex } from "../../agents/model-selection.js"; +import { resolveSandboxRuntimeStatus } from "../../agents/sandbox.js"; import type { SkillCommandSpec } from "../../agents/skills.js"; import type { OpenClawConfig } from "../../config/config.js"; import type { SessionEntry } from "../../config/sessions.js"; +import { listChatCommands, shouldHandleTextCommands } from "../commands-registry.js"; +import { listSkillCommandsForWorkspace } from "../skill-commands.js"; import type { MsgContext, TemplateContext } from "../templating.js"; import type { ElevatedLevel, ReasoningLevel, ThinkLevel, VerboseLevel } from "../thinking.js"; import type { GetReplyOptions, ReplyPayload } from "../types.js"; -import type { TypingController } from "./typing.js"; -import { resolveSandboxRuntimeStatus } from "../../agents/sandbox.js"; -import { listChatCommands, shouldHandleTextCommands } from "../commands-registry.js"; -import { listSkillCommandsForWorkspace } from "../skill-commands.js"; import { resolveBlockStreamingChunking } from "./block-streaming.js"; import { buildCommandContext } from "./commands.js"; import { type InlineDirectives, parseInlineDirectives } from "./directive-handling.js"; @@ -20,6 +19,7 @@ import { CURRENT_MESSAGE_MARKER, stripMentions, stripStructuralPrefixes } from " import { createModelSelectionState, resolveContextTokens } from "./model-selection.js"; import { formatElevatedUnavailableMessage, resolveElevatedPermissions } from "./reply-elevated.js"; import { stripInlineStatus } from "./reply-inline.js"; +import type { TypingController } from "./typing.js"; type AgentDefaults = NonNullable["defaults"]; type ExecOverrides = Pick; diff --git a/src/auto-reply/reply/get-reply-inline-actions.skip-when-config-empty.test.ts b/src/auto-reply/reply/get-reply-inline-actions.skip-when-config-empty.test.ts index df833f6da1..e55d63e6cd 100644 --- a/src/auto-reply/reply/get-reply-inline-actions.skip-when-config-empty.test.ts +++ b/src/auto-reply/reply/get-reply-inline-actions.skip-when-config-empty.test.ts @@ -1,8 +1,8 @@ import { describe, expect, it, vi } from "vitest"; import type { TemplateContext } from "../templating.js"; -import type { TypingController } from "./typing.js"; import { clearInlineDirectives } from "./get-reply-directives-utils.js"; import { buildTestCtx } from "./test-ctx.js"; +import type { TypingController } from "./typing.js"; const handleCommandsMock = vi.fn(); diff --git a/src/auto-reply/reply/get-reply-inline-actions.ts b/src/auto-reply/reply/get-reply-inline-actions.ts index 954b017579..f579bd9212 100644 --- a/src/auto-reply/reply/get-reply-inline-actions.ts +++ b/src/auto-reply/reply/get-reply-inline-actions.ts @@ -1,14 +1,8 @@ +import { createOpenClawTools } from "../../agents/openclaw-tools.js"; import type { SkillCommandSpec } from "../../agents/skills.js"; +import { getChannelDock } from "../../channels/dock.js"; import type { OpenClawConfig } from "../../config/config.js"; import type { SessionEntry } from "../../config/sessions.js"; -import type { MsgContext, TemplateContext } from "../templating.js"; -import type { ElevatedLevel, ReasoningLevel, ThinkLevel, VerboseLevel } from "../thinking.js"; -import type { GetReplyOptions, ReplyPayload } from "../types.js"; -import type { InlineDirectives } from "./directive-handling.js"; -import type { createModelSelectionState } from "./model-selection.js"; -import type { TypingController } from "./typing.js"; -import { createOpenClawTools } from "../../agents/openclaw-tools.js"; -import { getChannelDock } from "../../channels/dock.js"; import { logVerbose } from "../../globals.js"; import { resolveGatewayMessageChannel } from "../../utils/message-channel.js"; import { @@ -16,10 +10,16 @@ import { listSkillCommandsForWorkspace, resolveSkillCommandInvocation, } from "../skill-commands.js"; +import type { MsgContext, TemplateContext } from "../templating.js"; +import type { ElevatedLevel, ReasoningLevel, ThinkLevel, VerboseLevel } from "../thinking.js"; +import type { GetReplyOptions, ReplyPayload } from "../types.js"; import { getAbortMemory } from "./abort.js"; import { buildStatusReply, handleCommands } from "./commands.js"; +import type { InlineDirectives } from "./directive-handling.js"; import { isDirectiveOnly } from "./directive-handling.js"; +import type { createModelSelectionState } from "./model-selection.js"; import { extractInlineSimpleCommand } from "./reply-inline.js"; +import type { TypingController } from "./typing.js"; const builtinSlashCommands = (() => { return listReservedChatSlashCommandNames([ diff --git a/src/auto-reply/reply/get-reply-run.ts b/src/auto-reply/reply/get-reply-run.ts index 66d64f5be7..e5d894099d 100644 --- a/src/auto-reply/reply/get-reply-run.ts +++ b/src/auto-reply/reply/get-reply-run.ts @@ -1,19 +1,13 @@ import crypto from "node:crypto"; -import type { ExecToolDefaults } from "../../agents/bash-tools.js"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { MsgContext, TemplateContext } from "../templating.js"; -import type { GetReplyOptions, ReplyPayload } from "../types.js"; -import type { buildCommandContext } from "./commands.js"; -import type { InlineDirectives } from "./directive-handling.js"; -import type { createModelSelectionState } from "./model-selection.js"; -import type { TypingController } from "./typing.js"; import { resolveSessionAuthProfileOverride } from "../../agents/auth-profiles/session-override.js"; +import type { ExecToolDefaults } from "../../agents/bash-tools.js"; import { abortEmbeddedPiRun, isEmbeddedPiRunActive, isEmbeddedPiRunStreaming, resolveEmbeddedSessionLane, } from "../../agents/pi-embedded.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { resolveGroupSessionKey, resolveSessionFilePath, @@ -27,6 +21,7 @@ import { normalizeMainKey } from "../../routing/session-key.js"; import { isReasoningTagProvider } from "../../utils/provider-utils.js"; import { hasControlCommand } from "../command-detection.js"; import { buildInboundMediaNote } from "../media-note.js"; +import type { MsgContext, TemplateContext } from "../templating.js"; import { type ElevatedLevel, formatXHighModelHint, @@ -37,15 +32,20 @@ import { type VerboseLevel, } from "../thinking.js"; import { SILENT_REPLY_TOKEN } from "../tokens.js"; +import type { GetReplyOptions, ReplyPayload } from "../types.js"; import { runReplyAgent } from "./agent-runner.js"; import { applySessionHints } from "./body.js"; +import type { buildCommandContext } from "./commands.js"; +import type { InlineDirectives } from "./directive-handling.js"; import { buildGroupChatContext, buildGroupIntro } from "./groups.js"; import { buildInboundMetaSystemPrompt, buildInboundUserContextPrefix } from "./inbound-meta.js"; +import type { createModelSelectionState } from "./model-selection.js"; import { resolveQueueSettings } from "./queue.js"; import { routeReply } from "./route-reply.js"; import { BARE_SESSION_RESET_PROMPT } from "./session-reset-prompt.js"; import { ensureSkillSnapshot, prependSystemEvents } from "./session-updates.js"; import { resolveTypingMode } from "./typing-mode.js"; +import type { TypingController } from "./typing.js"; import { appendUntrustedContext } from "./untrusted-context.js"; type AgentDefaults = NonNullable["defaults"]; diff --git a/src/auto-reply/reply/get-reply.ts b/src/auto-reply/reply/get-reply.ts index 32818eb593..193899919f 100644 --- a/src/auto-reply/reply/get-reply.ts +++ b/src/auto-reply/reply/get-reply.ts @@ -1,5 +1,3 @@ -import type { MsgContext } from "../templating.js"; -import type { GetReplyOptions, ReplyPayload } from "../types.js"; import { resolveAgentDir, resolveAgentWorkspaceDir, @@ -14,7 +12,9 @@ import { applyLinkUnderstanding } from "../../link-understanding/apply.js"; import { applyMediaUnderstanding } from "../../media-understanding/apply.js"; import { defaultRuntime } from "../../runtime.js"; import { resolveCommandAuthorization } from "../command-auth.js"; +import type { MsgContext } from "../templating.js"; import { SILENT_REPLY_TOKEN } from "../tokens.js"; +import type { GetReplyOptions, ReplyPayload } from "../types.js"; import { resolveDefaultModel } from "./directive-handling.js"; import { resolveReplyDirectives } from "./get-reply-directives.js"; import { handleInlineActions } from "./get-reply-inline-actions.js"; diff --git a/src/auto-reply/reply/groups.ts b/src/auto-reply/reply/groups.ts index a76c53c44b..8176499899 100644 --- a/src/auto-reply/reply/groups.ts +++ b/src/auto-reply/reply/groups.ts @@ -1,10 +1,10 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { GroupKeyResolution, SessionEntry } from "../../config/sessions.js"; -import type { TemplateContext } from "../templating.js"; import { getChannelDock } from "../../channels/dock.js"; import { getChannelPlugin, normalizeChannelId } from "../../channels/plugins/index.js"; +import type { OpenClawConfig } from "../../config/config.js"; +import type { GroupKeyResolution, SessionEntry } from "../../config/sessions.js"; import { isInternalMessageChannel } from "../../utils/message-channel.js"; import { normalizeGroupActivation } from "../group-activation.js"; +import type { TemplateContext } from "../templating.js"; function extractGroupId(raw: string | undefined | null): string | undefined { const trimmed = (raw ?? "").trim(); diff --git a/src/auto-reply/reply/inbound-context.ts b/src/auto-reply/reply/inbound-context.ts index 8f3e60857f..ae12521733 100644 --- a/src/auto-reply/reply/inbound-context.ts +++ b/src/auto-reply/reply/inbound-context.ts @@ -1,6 +1,6 @@ -import type { FinalizedMsgContext, MsgContext } from "../templating.js"; import { normalizeChatType } from "../../channels/chat-type.js"; import { resolveConversationLabel } from "../../channels/conversation-label.js"; +import type { FinalizedMsgContext, MsgContext } from "../templating.js"; import { normalizeInboundTextNewlines } from "./inbound-text.js"; export type FinalizeInboundContextOptions = { diff --git a/src/auto-reply/reply/inbound-dedupe.ts b/src/auto-reply/reply/inbound-dedupe.ts index fa6ecd5675..191e4c4f47 100644 --- a/src/auto-reply/reply/inbound-dedupe.ts +++ b/src/auto-reply/reply/inbound-dedupe.ts @@ -1,6 +1,6 @@ -import type { MsgContext } from "../templating.js"; import { logVerbose, shouldLogVerbose } from "../../globals.js"; import { createDedupeCache, type DedupeCache } from "../../infra/dedupe.js"; +import type { MsgContext } from "../templating.js"; const DEFAULT_INBOUND_DEDUPE_TTL_MS = 20 * 60_000; const DEFAULT_INBOUND_DEDUPE_MAX = 5000; diff --git a/src/auto-reply/reply/inbound-meta.ts b/src/auto-reply/reply/inbound-meta.ts index 2e8f81a9c1..5fdc175119 100644 --- a/src/auto-reply/reply/inbound-meta.ts +++ b/src/auto-reply/reply/inbound-meta.ts @@ -1,6 +1,6 @@ -import type { TemplateContext } from "../templating.js"; import { normalizeChatType } from "../../channels/chat-type.js"; import { resolveSenderLabel } from "../../channels/sender-label.js"; +import type { TemplateContext } from "../templating.js"; function safeTrim(value: unknown): string | undefined { if (typeof value !== "string") { diff --git a/src/auto-reply/reply/line-directives.ts b/src/auto-reply/reply/line-directives.ts index c3e052972c..eb58a5e668 100644 --- a/src/auto-reply/reply/line-directives.ts +++ b/src/auto-reply/reply/line-directives.ts @@ -1,5 +1,3 @@ -import type { LineChannelData } from "../../line/types.js"; -import type { ReplyPayload } from "../types.js"; import { createMediaPlayerCard, createEventCard, @@ -7,6 +5,8 @@ import { createDeviceControlCard, createAppleTvRemoteCard, } from "../../line/flex-templates.js"; +import type { LineChannelData } from "../../line/types.js"; +import type { ReplyPayload } from "../types.js"; /** * Parse LINE-specific directives from text and extract them into ReplyPayload fields. diff --git a/src/auto-reply/reply/memory-flush.ts b/src/auto-reply/reply/memory-flush.ts index a3b50ae344..2f99f582aa 100644 --- a/src/auto-reply/reply/memory-flush.ts +++ b/src/auto-reply/reply/memory-flush.ts @@ -1,8 +1,8 @@ -import type { OpenClawConfig } from "../../config/config.js"; import { lookupContextTokens } from "../../agents/context.js"; import { resolveCronStyleNow } from "../../agents/current-time.js"; import { DEFAULT_CONTEXT_TOKENS } from "../../agents/defaults.js"; import { DEFAULT_PI_COMPACTION_RESERVE_TOKENS_FLOOR } from "../../agents/pi-settings.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { resolveFreshSessionTotalTokens, type SessionEntry } from "../../config/sessions.js"; import { SILENT_REPLY_TOKEN } from "../tokens.js"; diff --git a/src/auto-reply/reply/mentions.ts b/src/auto-reply/reply/mentions.ts index 2997aa9b1c..3081517c65 100644 --- a/src/auto-reply/reply/mentions.ts +++ b/src/auto-reply/reply/mentions.ts @@ -1,9 +1,9 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { MsgContext } from "../templating.js"; import { resolveAgentConfig } from "../../agents/agent-scope.js"; import { getChannelDock } from "../../channels/dock.js"; import { normalizeChannelId } from "../../channels/plugins/index.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { escapeRegExp } from "../../utils.js"; +import type { MsgContext } from "../templating.js"; function deriveMentionPatterns(identity?: { name?: string; emoji?: string }) { const patterns: string[] = []; diff --git a/src/auto-reply/reply/model-selection.ts b/src/auto-reply/reply/model-selection.ts index b77b5251f9..c41abd31b4 100644 --- a/src/auto-reply/reply/model-selection.ts +++ b/src/auto-reply/reply/model-selection.ts @@ -1,5 +1,3 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { ThinkLevel } from "./directives.js"; import { clearSessionAuthProfileOverride } from "../../agents/auth-profiles/session-override.js"; import { lookupContextTokens } from "../../agents/context.js"; import { DEFAULT_CONTEXT_TOKENS } from "../../agents/defaults.js"; @@ -12,9 +10,11 @@ import { resolveModelRefFromString, resolveThinkingDefault, } from "../../agents/model-selection.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { type SessionEntry, updateSessionStore } from "../../config/sessions.js"; import { applyModelOverrideToSessionEntry } from "../../sessions/model-overrides.js"; import { resolveThreadParentSessionKey } from "../../sessions/session-key-utils.js"; +import type { ThinkLevel } from "./directives.js"; export type ModelDirectiveSelection = { provider: string; diff --git a/src/auto-reply/reply/normalize-reply.ts b/src/auto-reply/reply/normalize-reply.ts index 6846cacbbe..0436b1a1d6 100644 --- a/src/auto-reply/reply/normalize-reply.ts +++ b/src/auto-reply/reply/normalize-reply.ts @@ -1,7 +1,7 @@ -import type { ReplyPayload } from "../types.js"; import { sanitizeUserFacingText } from "../../agents/pi-embedded-helpers.js"; import { stripHeartbeatToken } from "../heartbeat.js"; import { HEARTBEAT_TOKEN, isSilentReplyText, SILENT_REPLY_TOKEN } from "../tokens.js"; +import type { ReplyPayload } from "../types.js"; import { hasLineDirectives, parseLineDirectives } from "./line-directives.js"; import { resolveResponsePrefixTemplate, diff --git a/src/auto-reply/reply/provider-dispatcher.ts b/src/auto-reply/reply/provider-dispatcher.ts index 6bcdca7424..2819e51f9f 100644 --- a/src/auto-reply/reply/provider-dispatcher.ts +++ b/src/auto-reply/reply/provider-dispatcher.ts @@ -1,15 +1,15 @@ import type { OpenClawConfig } from "../../config/config.js"; import type { DispatchInboundResult } from "../dispatch.js"; +import { + dispatchInboundMessageWithBufferedDispatcher, + dispatchInboundMessageWithDispatcher, +} from "../dispatch.js"; import type { FinalizedMsgContext, MsgContext } from "../templating.js"; import type { GetReplyOptions } from "../types.js"; import type { ReplyDispatcherOptions, ReplyDispatcherWithTypingOptions, } from "./reply-dispatcher.js"; -import { - dispatchInboundMessageWithBufferedDispatcher, - dispatchInboundMessageWithDispatcher, -} from "../dispatch.js"; export async function dispatchReplyWithBufferedBlockDispatcher(params: { ctx: MsgContext | FinalizedMsgContext; diff --git a/src/auto-reply/reply/queue/directive.ts b/src/auto-reply/reply/queue/directive.ts index 1a22746c88..99303143db 100644 --- a/src/auto-reply/reply/queue/directive.ts +++ b/src/auto-reply/reply/queue/directive.ts @@ -1,7 +1,7 @@ -import type { QueueDropPolicy, QueueMode } from "./types.js"; import { parseDurationMs } from "../../../cli/parse-duration.js"; import { skipDirectiveArgPrefix, takeDirectiveToken } from "../directive-parsing.js"; import { normalizeQueueDropPolicy, normalizeQueueMode } from "./normalize.js"; +import type { QueueDropPolicy, QueueMode } from "./types.js"; function parseQueueDebounce(raw?: string): number | undefined { if (!raw) { diff --git a/src/auto-reply/reply/queue/drain.ts b/src/auto-reply/reply/queue/drain.ts index 2d8c873775..ac2927fc08 100644 --- a/src/auto-reply/reply/queue/drain.ts +++ b/src/auto-reply/reply/queue/drain.ts @@ -1,4 +1,3 @@ -import type { FollowupRun } from "./types.js"; import { defaultRuntime } from "../../../runtime.js"; import { buildCollectPrompt, @@ -8,6 +7,7 @@ import { } from "../../../utils/queue-helpers.js"; import { isRoutableChannel } from "../route-reply.js"; import { FOLLOWUP_QUEUES } from "./state.js"; +import type { FollowupRun } from "./types.js"; function previewQueueSummaryPrompt(queue: { dropPolicy: "summarize" | "old" | "new"; diff --git a/src/auto-reply/reply/queue/enqueue.ts b/src/auto-reply/reply/queue/enqueue.ts index 16f6bdf2ed..f5444c0a96 100644 --- a/src/auto-reply/reply/queue/enqueue.ts +++ b/src/auto-reply/reply/queue/enqueue.ts @@ -1,6 +1,6 @@ -import type { FollowupRun, QueueDedupeMode, QueueSettings } from "./types.js"; import { applyQueueDropPolicy, shouldSkipQueueItem } from "../../../utils/queue-helpers.js"; import { FOLLOWUP_QUEUES, getFollowupQueue } from "./state.js"; +import type { FollowupRun, QueueDedupeMode, QueueSettings } from "./types.js"; function isRunAlreadyQueued( run: FollowupRun, diff --git a/src/auto-reply/reply/queue/settings.ts b/src/auto-reply/reply/queue/settings.ts index 9bf0619cde..4aec6d2375 100644 --- a/src/auto-reply/reply/queue/settings.ts +++ b/src/auto-reply/reply/queue/settings.ts @@ -1,8 +1,8 @@ -import type { InboundDebounceByProvider } from "../../../config/types.messages.js"; -import type { QueueMode, QueueSettings, ResolveQueueSettingsParams } from "./types.js"; import { getChannelPlugin } from "../../../channels/plugins/index.js"; +import type { InboundDebounceByProvider } from "../../../config/types.messages.js"; import { normalizeQueueDropPolicy, normalizeQueueMode } from "./normalize.js"; import { DEFAULT_QUEUE_CAP, DEFAULT_QUEUE_DEBOUNCE_MS, DEFAULT_QUEUE_DROP } from "./state.js"; +import type { QueueMode, QueueSettings, ResolveQueueSettingsParams } from "./types.js"; function defaultQueueModeForChannel(_channel?: string): QueueMode { return "collect"; diff --git a/src/auto-reply/reply/reply-delivery.ts b/src/auto-reply/reply/reply-delivery.ts index 367d5b84d9..78930c708f 100644 --- a/src/auto-reply/reply/reply-delivery.ts +++ b/src/auto-reply/reply/reply-delivery.ts @@ -1,11 +1,11 @@ -import type { BlockReplyContext, ReplyPayload } from "../types.js"; -import type { BlockReplyPipeline } from "./block-reply-pipeline.js"; -import type { TypingSignaler } from "./typing-mode.js"; import { logVerbose } from "../../globals.js"; import { SILENT_REPLY_TOKEN } from "../tokens.js"; +import type { BlockReplyContext, ReplyPayload } from "../types.js"; +import type { BlockReplyPipeline } from "./block-reply-pipeline.js"; import { createBlockReplyPayloadKey } from "./block-reply-pipeline.js"; import { parseReplyDirectives } from "./reply-directives.js"; import { applyReplyTagsToPayload, isRenderablePayload } from "./reply-payloads.js"; +import type { TypingSignaler } from "./typing-mode.js"; export type ReplyDirectiveParseMode = "always" | "auto" | "never"; diff --git a/src/auto-reply/reply/reply-dispatcher.ts b/src/auto-reply/reply/reply-dispatcher.ts index 9027af0693..bfc5fa20f0 100644 --- a/src/auto-reply/reply/reply-dispatcher.ts +++ b/src/auto-reply/reply/reply-dispatcher.ts @@ -1,10 +1,10 @@ import type { HumanDelayConfig } from "../../config/types.js"; -import type { GetReplyOptions, ReplyPayload } from "../types.js"; -import type { ResponsePrefixContext } from "./response-prefix-template.js"; -import type { TypingController } from "./typing.js"; import { sleep } from "../../utils.js"; +import type { GetReplyOptions, ReplyPayload } from "../types.js"; import { registerDispatcher } from "./dispatcher-registry.js"; import { normalizeReplyPayload, type NormalizeReplySkipReason } from "./normalize-reply.js"; +import type { ResponsePrefixContext } from "./response-prefix-template.js"; +import type { TypingController } from "./typing.js"; export type ReplyDispatchKind = "tool" | "block" | "final"; diff --git a/src/auto-reply/reply/reply-elevated.ts b/src/auto-reply/reply/reply-elevated.ts index 8b5166190f..2550997e53 100644 --- a/src/auto-reply/reply/reply-elevated.ts +++ b/src/auto-reply/reply/reply-elevated.ts @@ -1,10 +1,10 @@ -import type { AgentElevatedAllowFromConfig, OpenClawConfig } from "../../config/config.js"; -import type { MsgContext } from "../templating.js"; import { resolveAgentConfig } from "../../agents/agent-scope.js"; import { getChannelDock } from "../../channels/dock.js"; import { normalizeChannelId } from "../../channels/plugins/index.js"; import { CHAT_CHANNEL_ORDER } from "../../channels/registry.js"; +import type { AgentElevatedAllowFromConfig, OpenClawConfig } from "../../config/config.js"; import { INTERNAL_MESSAGE_CHANNEL } from "../../utils/message-channel.js"; +import type { MsgContext } from "../templating.js"; export { formatElevatedUnavailableMessage } from "./elevated-unavailable.js"; function normalizeAllowToken(value?: string) { diff --git a/src/auto-reply/reply/reply-flow.test.ts b/src/auto-reply/reply/reply-flow.test.ts index c314997929..232b4dbdbe 100644 --- a/src/auto-reply/reply/reply-flow.test.ts +++ b/src/auto-reply/reply/reply-flow.test.ts @@ -1,14 +1,14 @@ import { afterAll, beforeAll, describe, expect, it, vi } from "vitest"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { MsgContext, TemplateContext } from "../templating.js"; -import type { FollowupRun, QueueSettings } from "./queue.js"; import { expectInboundContextContract } from "../../../test/helpers/inbound-contract.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { defaultRuntime } from "../../runtime.js"; +import type { MsgContext, TemplateContext } from "../templating.js"; import { HEARTBEAT_TOKEN, SILENT_REPLY_TOKEN } from "../tokens.js"; import { finalizeInboundContext } from "./inbound-context.js"; import { buildInboundUserContextPrefix } from "./inbound-meta.js"; import { normalizeInboundTextNewlines } from "./inbound-text.js"; import { parseLineDirectives, hasLineDirectives } from "./line-directives.js"; +import type { FollowupRun, QueueSettings } from "./queue.js"; import { enqueueFollowupRun, scheduleFollowupDrain } from "./queue.js"; import { createReplyDispatcher } from "./reply-dispatcher.js"; import { createReplyToModeFilter, resolveReplyToMode } from "./reply-threading.js"; diff --git a/src/auto-reply/reply/reply-payloads.ts b/src/auto-reply/reply/reply-payloads.ts index e6b26211a6..31e8f42d82 100644 --- a/src/auto-reply/reply/reply-payloads.ts +++ b/src/auto-reply/reply/reply-payloads.ts @@ -1,9 +1,9 @@ +import { isMessagingToolDuplicate } from "../../agents/pi-embedded-helpers.js"; import type { MessagingToolSend } from "../../agents/pi-embedded-runner.js"; import type { ReplyToMode } from "../../config/types.js"; +import { normalizeTargetForProvider } from "../../infra/outbound/target-normalization.js"; import type { OriginatingChannelType } from "../templating.js"; import type { ReplyPayload } from "../types.js"; -import { isMessagingToolDuplicate } from "../../agents/pi-embedded-helpers.js"; -import { normalizeTargetForProvider } from "../../infra/outbound/target-normalization.js"; import { extractReplyToTag } from "./reply-tags.js"; import { createReplyToModeFilterForChannel } from "./reply-threading.js"; diff --git a/src/auto-reply/reply/reply-plumbing.test.ts b/src/auto-reply/reply/reply-plumbing.test.ts index 2b1d1367ac..0a66475b3f 100644 --- a/src/auto-reply/reply/reply-plumbing.test.ts +++ b/src/auto-reply/reply/reply-plumbing.test.ts @@ -1,8 +1,8 @@ import { describe, expect, it } from "vitest"; import type { SubagentRunRecord } from "../../agents/subagent-registry.js"; import type { OpenClawConfig } from "../../config/config.js"; -import type { TemplateContext } from "../templating.js"; import { formatDurationCompact } from "../../infra/format-time/format-duration.js"; +import type { TemplateContext } from "../templating.js"; import { buildThreadingToolContext } from "./agent-runner-utils.js"; import { applyReplyThreading } from "./reply-payloads.js"; import { diff --git a/src/auto-reply/reply/reply-threading.ts b/src/auto-reply/reply/reply-threading.ts index 8fb54e9161..5db377bbd0 100644 --- a/src/auto-reply/reply/reply-threading.ts +++ b/src/auto-reply/reply/reply-threading.ts @@ -1,9 +1,9 @@ +import { getChannelDock } from "../../channels/dock.js"; +import { normalizeChannelId } from "../../channels/plugins/index.js"; import type { OpenClawConfig } from "../../config/config.js"; import type { ReplyToMode } from "../../config/types.js"; import type { OriginatingChannelType } from "../templating.js"; import type { ReplyPayload } from "../types.js"; -import { getChannelDock } from "../../channels/dock.js"; -import { normalizeChannelId } from "../../channels/plugins/index.js"; export function resolveReplyToMode( cfg: OpenClawConfig, diff --git a/src/auto-reply/reply/route-reply.test.ts b/src/auto-reply/reply/route-reply.test.ts index 997e2bc4fa..541fb0aef4 100644 --- a/src/auto-reply/reply/route-reply.test.ts +++ b/src/auto-reply/reply/route-reply.test.ts @@ -1,13 +1,13 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import type { ChannelOutboundAdapter, ChannelPlugin } from "../../channels/plugins/types.js"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { PluginRegistry } from "../../plugins/registry.js"; import { discordOutbound } from "../../channels/plugins/outbound/discord.js"; import { imessageOutbound } from "../../channels/plugins/outbound/imessage.js"; import { signalOutbound } from "../../channels/plugins/outbound/signal.js"; import { slackOutbound } from "../../channels/plugins/outbound/slack.js"; import { telegramOutbound } from "../../channels/plugins/outbound/telegram.js"; import { whatsappOutbound } from "../../channels/plugins/outbound/whatsapp.js"; +import type { ChannelOutboundAdapter, ChannelPlugin } from "../../channels/plugins/types.js"; +import type { OpenClawConfig } from "../../config/config.js"; +import type { PluginRegistry } from "../../plugins/registry.js"; import { setActivePluginRegistry } from "../../plugins/runtime.js"; import { createOutboundTestPlugin, createTestRegistry } from "../../test-utils/channel-plugins.js"; import { createIMessageTestPlugin } from "../../test-utils/imessage-test-plugin.js"; diff --git a/src/auto-reply/reply/route-reply.ts b/src/auto-reply/reply/route-reply.ts index 4ff7f4893c..3b6cc68b7e 100644 --- a/src/auto-reply/reply/route-reply.ts +++ b/src/auto-reply/reply/route-reply.ts @@ -7,13 +7,13 @@ * across multiple providers. */ -import type { OpenClawConfig } from "../../config/config.js"; -import type { OriginatingChannelType } from "../templating.js"; -import type { ReplyPayload } from "../types.js"; import { resolveSessionAgentId } from "../../agents/agent-scope.js"; import { resolveEffectiveMessagesConfig } from "../../agents/identity.js"; import { normalizeChannelId } from "../../channels/plugins/index.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { INTERNAL_MESSAGE_CHANNEL, normalizeMessageChannel } from "../../utils/message-channel.js"; +import type { OriginatingChannelType } from "../templating.js"; +import type { ReplyPayload } from "../types.js"; import { normalizeReplyPayload } from "./normalize-reply.js"; export type RouteReplyParams = { diff --git a/src/auto-reply/reply/session-reset-model.ts b/src/auto-reply/reply/session-reset-model.ts index dc1e2e307f..efc2a2536b 100644 --- a/src/auto-reply/reply/session-reset-model.ts +++ b/src/auto-reply/reply/session-reset-model.ts @@ -1,6 +1,3 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { SessionEntry } from "../../config/sessions.js"; -import type { MsgContext, TemplateContext } from "../templating.js"; import { loadModelCatalog } from "../../agents/model-catalog.js"; import { buildAllowedModelSet, @@ -9,8 +6,11 @@ import { resolveModelRefFromString, type ModelAliasIndex, } from "../../agents/model-selection.js"; +import type { OpenClawConfig } from "../../config/config.js"; +import type { SessionEntry } from "../../config/sessions.js"; import { updateSessionStore } from "../../config/sessions.js"; import { applyModelOverrideToSessionEntry } from "../../sessions/model-overrides.js"; +import type { MsgContext, TemplateContext } from "../templating.js"; import { resolveModelDirectiveSelection, type ModelDirectiveSelection } from "./model-selection.js"; type ResetModelResult = { diff --git a/src/auto-reply/reply/session-updates.ts b/src/auto-reply/reply/session-updates.ts index 3e0e2bb7c8..665b159198 100644 --- a/src/auto-reply/reply/session-updates.ts +++ b/src/auto-reply/reply/session-updates.ts @@ -1,8 +1,8 @@ import crypto from "node:crypto"; -import type { OpenClawConfig } from "../../config/config.js"; import { resolveUserTimezone } from "../../agents/date-time.js"; import { buildWorkspaceSkillSnapshot } from "../../agents/skills.js"; import { ensureSkillsWatcher, getSkillsSnapshotVersion } from "../../agents/skills/refresh.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { type SessionEntry, updateSessionStore } from "../../config/sessions.js"; import { buildChannelSummary } from "../../infra/channel-summary.js"; import { diff --git a/src/auto-reply/reply/session.test.ts b/src/auto-reply/reply/session.test.ts index a89974c584..b17f570d1d 100644 --- a/src/auto-reply/reply/session.test.ts +++ b/src/auto-reply/reply/session.test.ts @@ -2,8 +2,8 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import type { OpenClawConfig } from "../../config/config.js"; import { buildModelAliasIndex } from "../../agents/model-selection.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { saveSessionStore } from "../../config/sessions.js"; import { formatZonedTimestamp } from "../../infra/format-time/format-datetime.ts"; import { enqueueSystemEvent, resetSystemEventsForTest } from "../../infra/system-events.js"; diff --git a/src/auto-reply/reply/session.ts b/src/auto-reply/reply/session.ts index 27d33ec1fc..f03de1c316 100644 --- a/src/auto-reply/reply/session.ts +++ b/src/auto-reply/reply/session.ts @@ -1,12 +1,10 @@ -import { CURRENT_SESSION_VERSION, SessionManager } from "@mariozechner/pi-coding-agent"; import crypto from "node:crypto"; import fs from "node:fs"; import path from "node:path"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { TtsAutoMode } from "../../config/types.tts.js"; -import type { MsgContext, TemplateContext } from "../templating.js"; +import { CURRENT_SESSION_VERSION, SessionManager } from "@mariozechner/pi-coding-agent"; import { resolveSessionAgentId } from "../../agents/agent-scope.js"; import { normalizeChatType } from "../../channels/chat-type.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { DEFAULT_RESET_TRIGGERS, deriveSessionMetaPatch, @@ -26,12 +24,14 @@ import { type SessionScope, updateSessionStore, } from "../../config/sessions.js"; +import type { TtsAutoMode } from "../../config/types.tts.js"; import { archiveSessionTranscripts } from "../../gateway/session-utils.fs.js"; import { deliverSessionMaintenanceWarning } from "../../infra/session-maintenance-warning.js"; import { getGlobalHookRunner } from "../../plugins/hook-runner-global.js"; import { normalizeMainKey } from "../../routing/session-key.js"; import { normalizeSessionDeliveryFields } from "../../utils/delivery-context.js"; import { resolveCommandAuthorization } from "../command-auth.js"; +import type { MsgContext, TemplateContext } from "../templating.js"; import { normalizeInboundTextNewlines } from "./inbound-text.js"; import { stripMentions, stripStructuralPrefixes } from "./mentions.js"; diff --git a/src/auto-reply/reply/stage-sandbox-media.ts b/src/auto-reply/reply/stage-sandbox-media.ts index 2cd882ea0c..43d289da5e 100644 --- a/src/auto-reply/reply/stage-sandbox-media.ts +++ b/src/auto-reply/reply/stage-sandbox-media.ts @@ -2,13 +2,13 @@ import { spawn } from "node:child_process"; import fs from "node:fs/promises"; import path from "node:path"; import { fileURLToPath } from "node:url"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { MsgContext, TemplateContext } from "../templating.js"; import { assertSandboxPath } from "../../agents/sandbox-paths.js"; import { ensureSandboxWorkspaceForSession } from "../../agents/sandbox.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { logVerbose } from "../../globals.js"; import { getMediaDir } from "../../media/store.js"; import { CONFIG_DIR } from "../../utils.js"; +import type { MsgContext, TemplateContext } from "../templating.js"; export async function stageSandboxMedia(params: { ctx: MsgContext; diff --git a/src/auto-reply/reply/streaming-directives.ts b/src/auto-reply/reply/streaming-directives.ts index 0a933f6962..c3a0cec758 100644 --- a/src/auto-reply/reply/streaming-directives.ts +++ b/src/auto-reply/reply/streaming-directives.ts @@ -1,7 +1,7 @@ -import type { ReplyDirectiveParseResult } from "./reply-directives.js"; import { splitMediaFromOutput } from "../../media/parse.js"; import { parseInlineDirectives } from "../../utils/directive-tags.js"; import { isSilentReplyText, SILENT_REPLY_TOKEN } from "../tokens.js"; +import type { ReplyDirectiveParseResult } from "./reply-directives.js"; type PendingReplyState = { explicitId?: string; diff --git a/src/auto-reply/reply/typing-mode.ts b/src/auto-reply/reply/typing-mode.ts index 554754bea1..37805ef3be 100644 --- a/src/auto-reply/reply/typing-mode.ts +++ b/src/auto-reply/reply/typing-mode.ts @@ -1,6 +1,6 @@ import type { TypingMode } from "../../config/types.js"; -import type { TypingController } from "./typing.js"; import { isSilentReplyText, SILENT_REPLY_TOKEN } from "../tokens.js"; +import type { TypingController } from "./typing.js"; export type TypingModeContext = { configured?: TypingMode; diff --git a/src/auto-reply/skill-commands.ts b/src/auto-reply/skill-commands.ts index 020ae66f12..49b851389d 100644 --- a/src/auto-reply/skill-commands.ts +++ b/src/auto-reply/skill-commands.ts @@ -1,7 +1,7 @@ import fs from "node:fs"; -import type { OpenClawConfig } from "../config/config.js"; import { listAgentIds, resolveAgentWorkspaceDir } from "../agents/agent-scope.js"; import { buildWorkspaceSkillCommandSpecs, type SkillCommandSpec } from "../agents/skills.js"; +import type { OpenClawConfig } from "../config/config.js"; import { getRemoteSkillEligibility } from "../infra/skills-remote.js"; import { listChatCommands } from "./commands-registry.js"; diff --git a/src/auto-reply/stage-sandbox-media.test-harness.ts b/src/auto-reply/stage-sandbox-media.test-harness.ts index 91fa31ee9a..7450dbe800 100644 --- a/src/auto-reply/stage-sandbox-media.test-harness.ts +++ b/src/auto-reply/stage-sandbox-media.test-harness.ts @@ -1,7 +1,7 @@ import { join } from "node:path"; +import { withTempHome as withTempHomeBase } from "../../test/helpers/temp-home.js"; import type { OpenClawConfig } from "../config/config.js"; import type { MsgContext, TemplateContext } from "./templating.js"; -import { withTempHome as withTempHomeBase } from "../../test/helpers/temp-home.js"; export async function withSandboxMediaTempHome( prefix: string, diff --git a/src/auto-reply/status.test.ts b/src/auto-reply/status.test.ts index 8a78b29e23..ad094713f7 100644 --- a/src/auto-reply/status.test.ts +++ b/src/auto-reply/status.test.ts @@ -1,9 +1,9 @@ import fs from "node:fs"; import path from "node:path"; import { afterEach, describe, expect, it, vi } from "vitest"; -import type { OpenClawConfig } from "../config/config.js"; import { normalizeTestText } from "../../test/helpers/normalize-text.js"; import { withTempHome } from "../../test/helpers/temp-home.js"; +import type { OpenClawConfig } from "../config/config.js"; import { createSuccessfulImageMediaDecision } from "./media-understanding.test-fixtures.js"; import { buildCommandsMessage, diff --git a/src/auto-reply/status.ts b/src/auto-reply/status.ts index f0ba70a30b..5ad02e40bb 100644 --- a/src/auto-reply/status.ts +++ b/src/auto-reply/status.ts @@ -1,15 +1,12 @@ import fs from "node:fs"; -import type { SkillCommandSpec } from "../agents/skills.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { MediaUnderstandingDecision } from "../media-understanding/types.js"; -import type { CommandCategory } from "./commands-registry.types.js"; -import type { ElevatedLevel, ReasoningLevel, ThinkLevel, VerboseLevel } from "./thinking.js"; import { lookupContextTokens } from "../agents/context.js"; import { DEFAULT_CONTEXT_TOKENS, DEFAULT_MODEL, DEFAULT_PROVIDER } from "../agents/defaults.js"; import { resolveModelAuthMode } from "../agents/model-auth.js"; import { resolveConfiguredModelRef } from "../agents/model-selection.js"; import { resolveSandboxRuntimeStatus } from "../agents/sandbox.js"; +import type { SkillCommandSpec } from "../agents/skills.js"; import { derivePromptTokens, normalizeUsage, type UsageLike } from "../agents/usage.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveMainSessionKey, resolveSessionFilePath, @@ -19,6 +16,7 @@ import { } from "../config/sessions.js"; import { formatTimeAgo } from "../infra/format-time/format-relative.ts"; import { resolveCommitHash } from "../infra/git-commit.js"; +import type { MediaUnderstandingDecision } from "../media-understanding/types.js"; import { listPluginCommands } from "../plugins/commands.js"; import { resolveAgentIdFromSessionKey } from "../routing/session-key.js"; import { @@ -41,6 +39,8 @@ import { listChatCommandsForConfig, type ChatCommandDefinition, } from "./commands-registry.js"; +import type { CommandCategory } from "./commands-registry.types.js"; +import type { ElevatedLevel, ReasoningLevel, ThinkLevel, VerboseLevel } from "./thinking.js"; type AgentDefaults = NonNullable["defaults"]>; type AgentConfig = Partial & { diff --git a/src/browser/bridge-server.ts b/src/browser/bridge-server.ts index 402df2322f..d98f878d71 100644 --- a/src/browser/bridge-server.ts +++ b/src/browser/bridge-server.ts @@ -1,11 +1,11 @@ import type { Server } from "node:http"; import type { AddressInfo } from "node:net"; import express from "express"; -import type { ResolvedBrowserConfig } from "./config.js"; -import type { BrowserRouteRegistrar } from "./routes/types.js"; import { isLoopbackHost } from "../gateway/net.js"; import { deleteBridgeAuthForPort, setBridgeAuthForPort } from "./bridge-auth-registry.js"; +import type { ResolvedBrowserConfig } from "./config.js"; import { registerBrowserRoutes } from "./routes/index.js"; +import type { BrowserRouteRegistrar } from "./routes/types.js"; import { type BrowserServerState, createBrowserRouteContext, diff --git a/src/browser/browser-utils.test.ts b/src/browser/browser-utils.test.ts index ab23bca95e..61641aa314 100644 --- a/src/browser/browser-utils.test.ts +++ b/src/browser/browser-utils.test.ts @@ -1,10 +1,10 @@ import { describe, expect, it, vi } from "vitest"; -import type { BrowserServerState } from "./server-context.js"; import { appendCdpPath, getHeadersWithAuth } from "./cdp.helpers.js"; import { __test } from "./client-fetch.js"; import { resolveBrowserConfig, resolveProfile } from "./config.js"; import { shouldRejectBrowserMutation } from "./csrf.js"; import { toBoolean } from "./routes/utils.js"; +import type { BrowserServerState } from "./server-context.js"; import { listKnownProfileNames } from "./server-context.js"; import { resolveTargetIdFromTabs } from "./target-id.js"; diff --git a/src/browser/chrome.ts b/src/browser/chrome.ts index b6e99576ae..9501d1e4d9 100644 --- a/src/browser/chrome.ts +++ b/src/browser/chrome.ts @@ -3,7 +3,6 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import WebSocket from "ws"; -import type { ResolvedBrowserConfig, ResolvedBrowserProfile } from "./config.js"; import { ensurePortAvailable } from "../infra/ports.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { CONFIG_DIR } from "../utils.js"; @@ -18,6 +17,7 @@ import { ensureProfileCleanExit, isProfileDecorated, } from "./chrome.profile-decoration.js"; +import type { ResolvedBrowserConfig, ResolvedBrowserProfile } from "./config.js"; import { DEFAULT_OPENCLAW_BROWSER_COLOR, DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME, diff --git a/src/browser/client-actions-observe.ts b/src/browser/client-actions-observe.ts index 6261609f95..7f7d8cd692 100644 --- a/src/browser/client-actions-observe.ts +++ b/src/browser/client-actions-observe.ts @@ -1,11 +1,11 @@ import type { BrowserActionPathResult, BrowserActionTargetOk } from "./client-actions-types.js"; +import { buildProfileQuery, withBaseUrl } from "./client-actions-url.js"; +import { fetchBrowserJson } from "./client-fetch.js"; import type { BrowserConsoleMessage, BrowserNetworkRequest, BrowserPageError, } from "./pw-session.js"; -import { buildProfileQuery, withBaseUrl } from "./client-actions-url.js"; -import { fetchBrowserJson } from "./client-fetch.js"; function buildQuerySuffix(params: Array<[string, string | boolean | undefined]>): string { const query = new URLSearchParams(); diff --git a/src/browser/extension-relay.ts b/src/browser/extension-relay.ts index 46a253d59f..defacc8895 100644 --- a/src/browser/extension-relay.ts +++ b/src/browser/extension-relay.ts @@ -1,8 +1,8 @@ +import { randomBytes } from "node:crypto"; import type { IncomingMessage } from "node:http"; +import { createServer } from "node:http"; import type { AddressInfo } from "node:net"; import type { Duplex } from "node:stream"; -import { randomBytes } from "node:crypto"; -import { createServer } from "node:http"; import WebSocket, { WebSocketServer } from "ws"; import { isLoopbackAddress, isLoopbackHost } from "../gateway/net.js"; import { rawDataToString } from "../infra/ws.js"; diff --git a/src/browser/profiles-service.test.ts b/src/browser/profiles-service.test.ts index e7ac6a6315..ef599fad82 100644 --- a/src/browser/profiles-service.test.ts +++ b/src/browser/profiles-service.test.ts @@ -1,9 +1,9 @@ import fs from "node:fs"; import path from "node:path"; import { describe, expect, it, vi } from "vitest"; -import type { BrowserRouteContext, BrowserServerState } from "./server-context.js"; import { resolveBrowserConfig } from "./config.js"; import { createBrowserProfilesService } from "./profiles-service.js"; +import type { BrowserRouteContext, BrowserServerState } from "./server-context.js"; vi.mock("../config/config.js", async (importOriginal) => { const actual = await importOriginal(); diff --git a/src/browser/profiles-service.ts b/src/browser/profiles-service.ts index 72a36b2bf5..149090d4a6 100644 --- a/src/browser/profiles-service.ts +++ b/src/browser/profiles-service.ts @@ -1,7 +1,6 @@ import fs from "node:fs"; import path from "node:path"; import type { BrowserProfileConfig, OpenClawConfig } from "../config/config.js"; -import type { BrowserRouteContext, ProfileStatus } from "./server-context.js"; import { loadConfig, writeConfigFile } from "../config/config.js"; import { deriveDefaultBrowserCdpPortRange } from "../config/port-defaults.js"; import { resolveOpenClawUserDataDir } from "./chrome.js"; @@ -14,6 +13,7 @@ import { getUsedPorts, isValidProfileName, } from "./profiles.js"; +import type { BrowserRouteContext, ProfileStatus } from "./server-context.js"; import { movePathToTrash } from "./trash.js"; export type CreateProfileParams = { diff --git a/src/browser/pw-tools-core.downloads.ts b/src/browser/pw-tools-core.downloads.ts index 0a24208292..d1503dc22e 100644 --- a/src/browser/pw-tools-core.downloads.ts +++ b/src/browser/pw-tools-core.downloads.ts @@ -1,7 +1,7 @@ -import type { Page } from "playwright-core"; import crypto from "node:crypto"; import fs from "node:fs/promises"; import path from "node:path"; +import type { Page } from "playwright-core"; import { resolvePreferredOpenClawTmpDir } from "../infra/tmp-openclaw-dir.js"; import { ensurePageState, diff --git a/src/browser/resolved-config-refresh.ts b/src/browser/resolved-config-refresh.ts index 1c4a59735e..721049036d 100644 --- a/src/browser/resolved-config-refresh.ts +++ b/src/browser/resolved-config-refresh.ts @@ -1,6 +1,6 @@ -import type { BrowserServerState } from "./server-context.types.js"; import { createConfigIO, loadConfig } from "../config/config.js"; import { resolveBrowserConfig, resolveProfile, type ResolvedBrowserProfile } from "./config.js"; +import type { BrowserServerState } from "./server-context.types.js"; function applyResolvedConfig( current: BrowserServerState, diff --git a/src/browser/routes/agent.act.ts b/src/browser/routes/agent.act.ts index b2d34ee242..809938b32a 100644 --- a/src/browser/routes/agent.act.ts +++ b/src/browser/routes/agent.act.ts @@ -1,6 +1,5 @@ import type { BrowserFormField } from "../client-actions-core.js"; import type { BrowserRouteContext } from "../server-context.js"; -import type { BrowserRouteRegistrar } from "./types.js"; import { type ActKind, isActKind, @@ -20,6 +19,7 @@ import { resolvePathWithinRoot, resolvePathsWithinRoot, } from "./path-output.js"; +import type { BrowserRouteRegistrar } from "./types.js"; import { jsonError, toBoolean, toNumber, toStringArray, toStringOrEmpty } from "./utils.js"; export function registerBrowserAgentActRoutes( diff --git a/src/browser/routes/agent.debug.ts b/src/browser/routes/agent.debug.ts index f5a1a3ae95..cda2978cb9 100644 --- a/src/browser/routes/agent.debug.ts +++ b/src/browser/routes/agent.debug.ts @@ -2,9 +2,9 @@ import crypto from "node:crypto"; import fs from "node:fs/promises"; import path from "node:path"; import type { BrowserRouteContext } from "../server-context.js"; -import type { BrowserRouteRegistrar } from "./types.js"; import { handleRouteError, readBody, requirePwAi, resolveProfileContext } from "./agent.shared.js"; import { DEFAULT_TRACE_DIR, resolvePathWithinRoot } from "./path-output.js"; +import type { BrowserRouteRegistrar } from "./types.js"; import { toBoolean, toStringOrEmpty } from "./utils.js"; export function registerBrowserAgentDebugRoutes( diff --git a/src/browser/routes/agent.shared.ts b/src/browser/routes/agent.shared.ts index 7d3ddac4e8..d230c72e32 100644 --- a/src/browser/routes/agent.shared.ts +++ b/src/browser/routes/agent.shared.ts @@ -1,7 +1,7 @@ import type { PwAiModule } from "../pw-ai-module.js"; +import { getPwAiModule as getPwAiModuleBase } from "../pw-ai-module.js"; import type { BrowserRouteContext, ProfileContext } from "../server-context.js"; import type { BrowserRequest, BrowserResponse } from "./types.js"; -import { getPwAiModule as getPwAiModuleBase } from "../pw-ai-module.js"; import { getProfileContext, jsonError } from "./utils.js"; export const SELECTOR_UNSUPPORTED_MESSAGE = [ diff --git a/src/browser/routes/agent.snapshot.ts b/src/browser/routes/agent.snapshot.ts index fb65f0e64c..927d4d5574 100644 --- a/src/browser/routes/agent.snapshot.ts +++ b/src/browser/routes/agent.snapshot.ts @@ -1,6 +1,4 @@ import path from "node:path"; -import type { BrowserRouteContext } from "../server-context.js"; -import type { BrowserRouteRegistrar } from "./types.js"; import { ensureMediaDir, saveMediaBuffer } from "../../media/store.js"; import { captureScreenshot, snapshotAria } from "../cdp.js"; import { @@ -13,6 +11,7 @@ import { DEFAULT_BROWSER_SCREENSHOT_MAX_SIDE, normalizeBrowserScreenshot, } from "../screenshot.js"; +import type { BrowserRouteContext } from "../server-context.js"; import { getPwAiModule, handleRouteError, @@ -20,6 +19,7 @@ import { requirePwAi, resolveProfileContext, } from "./agent.shared.js"; +import type { BrowserRouteRegistrar } from "./types.js"; import { jsonError, toBoolean, toNumber, toStringOrEmpty } from "./utils.js"; export function registerBrowserAgentSnapshotRoutes( diff --git a/src/browser/routes/agent.storage.ts b/src/browser/routes/agent.storage.ts index 9d7ba12d71..7bdfd468ed 100644 --- a/src/browser/routes/agent.storage.ts +++ b/src/browser/routes/agent.storage.ts @@ -1,6 +1,6 @@ import type { BrowserRouteContext } from "../server-context.js"; -import type { BrowserRouteRegistrar } from "./types.js"; import { handleRouteError, readBody, requirePwAi, resolveProfileContext } from "./agent.shared.js"; +import type { BrowserRouteRegistrar } from "./types.js"; import { jsonError, toBoolean, toNumber, toStringOrEmpty } from "./utils.js"; type StorageKind = "local" | "session"; diff --git a/src/browser/routes/agent.ts b/src/browser/routes/agent.ts index 218d378e2d..dc5e65433a 100644 --- a/src/browser/routes/agent.ts +++ b/src/browser/routes/agent.ts @@ -1,9 +1,9 @@ import type { BrowserRouteContext } from "../server-context.js"; -import type { BrowserRouteRegistrar } from "./types.js"; import { registerBrowserAgentActRoutes } from "./agent.act.js"; import { registerBrowserAgentDebugRoutes } from "./agent.debug.js"; import { registerBrowserAgentSnapshotRoutes } from "./agent.snapshot.js"; import { registerBrowserAgentStorageRoutes } from "./agent.storage.js"; +import type { BrowserRouteRegistrar } from "./types.js"; export function registerBrowserAgentRoutes(app: BrowserRouteRegistrar, ctx: BrowserRouteContext) { registerBrowserAgentSnapshotRoutes(app, ctx); diff --git a/src/browser/routes/basic.ts b/src/browser/routes/basic.ts index 598ff8c97d..26df2d1bb3 100644 --- a/src/browser/routes/basic.ts +++ b/src/browser/routes/basic.ts @@ -1,7 +1,7 @@ -import type { BrowserRouteContext } from "../server-context.js"; -import type { BrowserRouteRegistrar } from "./types.js"; import { resolveBrowserExecutableForPlatform } from "../chrome.executables.js"; import { createBrowserProfilesService } from "../profiles-service.js"; +import type { BrowserRouteContext } from "../server-context.js"; +import type { BrowserRouteRegistrar } from "./types.js"; import { getProfileContext, jsonError, toStringOrEmpty } from "./utils.js"; export function registerBrowserBasicRoutes(app: BrowserRouteRegistrar, ctx: BrowserRouteContext) { diff --git a/src/browser/routes/dispatcher.ts b/src/browser/routes/dispatcher.ts index 6395cd192a..b21f6991df 100644 --- a/src/browser/routes/dispatcher.ts +++ b/src/browser/routes/dispatcher.ts @@ -1,7 +1,7 @@ -import type { BrowserRouteContext } from "../server-context.js"; -import type { BrowserRequest, BrowserResponse, BrowserRouteRegistrar } from "./types.js"; import { escapeRegExp } from "../../utils.js"; +import type { BrowserRouteContext } from "../server-context.js"; import { registerBrowserRoutes } from "./index.js"; +import type { BrowserRequest, BrowserResponse, BrowserRouteRegistrar } from "./types.js"; type BrowserDispatchRequest = { method: "GET" | "POST" | "DELETE"; diff --git a/src/browser/routes/index.ts b/src/browser/routes/index.ts index 27c8732d65..3c20ef1c64 100644 --- a/src/browser/routes/index.ts +++ b/src/browser/routes/index.ts @@ -1,8 +1,8 @@ import type { BrowserRouteContext } from "../server-context.js"; -import type { BrowserRouteRegistrar } from "./types.js"; import { registerBrowserAgentRoutes } from "./agent.js"; import { registerBrowserBasicRoutes } from "./basic.js"; import { registerBrowserTabRoutes } from "./tabs.js"; +import type { BrowserRouteRegistrar } from "./types.js"; export function registerBrowserRoutes(app: BrowserRouteRegistrar, ctx: BrowserRouteContext) { registerBrowserBasicRoutes(app, ctx); diff --git a/src/browser/routes/utils.ts b/src/browser/routes/utils.ts index 1bd03c9ed2..1c7eeb38c8 100644 --- a/src/browser/routes/utils.ts +++ b/src/browser/routes/utils.ts @@ -1,6 +1,6 @@ +import { parseBooleanValue } from "../../utils/boolean.js"; import type { BrowserRouteContext, ProfileContext } from "../server-context.js"; import type { BrowserRequest, BrowserResponse } from "./types.js"; -import { parseBooleanValue } from "../../utils/boolean.js"; /** * Extract profile name from query string or body and get profile context. diff --git a/src/browser/server-context.remote-tab-ops.test.ts b/src/browser/server-context.remote-tab-ops.test.ts index bb5cbd6d13..0febccf5f9 100644 --- a/src/browser/server-context.remote-tab-ops.test.ts +++ b/src/browser/server-context.remote-tab-ops.test.ts @@ -1,7 +1,7 @@ import { afterEach, describe, expect, it, vi } from "vitest"; -import type { BrowserServerState } from "./server-context.js"; import * as cdpModule from "./cdp.js"; import * as pwAiModule from "./pw-ai-module.js"; +import type { BrowserServerState } from "./server-context.js"; import "./server-context.chrome-test-harness.js"; import { createBrowserRouteContext } from "./server-context.js"; diff --git a/src/browser/server-context.ts b/src/browser/server-context.ts index 6e5a60a142..01426b49aa 100644 --- a/src/browser/server-context.ts +++ b/src/browser/server-context.ts @@ -1,15 +1,4 @@ import fs from "node:fs"; -import type { ResolvedBrowserProfile } from "./config.js"; -import type { PwAiModule } from "./pw-ai-module.js"; -import type { - BrowserServerState, - BrowserRouteContext, - BrowserTab, - ContextOptions, - ProfileContext, - ProfileRuntimeState, - ProfileStatus, -} from "./server-context.types.js"; import { fetchJson, fetchOk } from "./cdp.helpers.js"; import { appendCdpPath, createTargetViaCdp, normalizeCdpWsUrl } from "./cdp.js"; import { @@ -19,16 +8,27 @@ import { resolveOpenClawUserDataDir, stopOpenClawChrome, } from "./chrome.js"; +import type { ResolvedBrowserProfile } from "./config.js"; import { resolveProfile } from "./config.js"; import { ensureChromeExtensionRelayServer, stopChromeExtensionRelayServer, } from "./extension-relay.js"; +import type { PwAiModule } from "./pw-ai-module.js"; import { getPwAiModule } from "./pw-ai-module.js"; import { refreshResolvedBrowserConfigFromDisk, resolveBrowserProfileWithHotReload, } from "./resolved-config-refresh.js"; +import type { + BrowserServerState, + BrowserRouteContext, + BrowserTab, + ContextOptions, + ProfileContext, + ProfileRuntimeState, + ProfileStatus, +} from "./server-context.types.js"; import { resolveTargetIdFromTabs } from "./target-id.js"; import { movePathToTrash } from "./trash.js"; diff --git a/src/browser/server.ts b/src/browser/server.ts index 57f5716ccc..3cc8037068 100644 --- a/src/browser/server.ts +++ b/src/browser/server.ts @@ -1,6 +1,5 @@ import type { Server } from "node:http"; import express from "express"; -import type { BrowserRouteRegistrar } from "./routes/types.js"; import { loadConfig } from "../config/config.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { resolveBrowserConfig, resolveProfile } from "./config.js"; @@ -8,6 +7,7 @@ import { ensureBrowserControlAuth, resolveBrowserControlAuth } from "./control-a import { ensureChromeExtensionRelayServer } from "./extension-relay.js"; import { isPwAiLoaded } from "./pw-ai-state.js"; import { registerBrowserRoutes } from "./routes/index.js"; +import type { BrowserRouteRegistrar } from "./routes/types.js"; import { type BrowserServerState, createBrowserRouteContext, diff --git a/src/browser/test-port.ts b/src/browser/test-port.ts index 5352eefa4e..860968df9a 100644 --- a/src/browser/test-port.ts +++ b/src/browser/test-port.ts @@ -1,5 +1,5 @@ -import type { AddressInfo } from "node:net"; import { createServer } from "node:http"; +import type { AddressInfo } from "node:net"; export async function getFreePort(): Promise { while (true) { diff --git a/src/canvas-host/a2ui.ts b/src/canvas-host/a2ui.ts index ce14940665..0f65ab67ed 100644 --- a/src/canvas-host/a2ui.ts +++ b/src/canvas-host/a2ui.ts @@ -1,5 +1,5 @@ -import type { IncomingMessage, ServerResponse } from "node:http"; import fs from "node:fs/promises"; +import type { IncomingMessage, ServerResponse } from "node:http"; import path from "node:path"; import { fileURLToPath } from "node:url"; import { detectMime } from "../media/mime.js"; diff --git a/src/canvas-host/server.test.ts b/src/canvas-host/server.test.ts index 94b05a6d72..616c6a902b 100644 --- a/src/canvas-host/server.test.ts +++ b/src/canvas-host/server.test.ts @@ -1,6 +1,6 @@ -import type { AddressInfo } from "node:net"; import fs from "node:fs/promises"; import { createServer } from "node:http"; +import type { AddressInfo } from "node:net"; import os from "node:os"; import path from "node:path"; import { afterAll, beforeAll, describe, expect, it, vi } from "vitest"; diff --git a/src/canvas-host/server.ts b/src/canvas-host/server.ts index 565c969a52..a8a55f01c0 100644 --- a/src/canvas-host/server.ts +++ b/src/canvas-host/server.ts @@ -1,15 +1,15 @@ -import type { Socket } from "node:net"; -import type { Duplex } from "node:stream"; -import chokidar from "chokidar"; import * as fsSync from "node:fs"; import fs from "node:fs/promises"; import http, { type IncomingMessage, type Server, type ServerResponse } from "node:http"; +import type { Socket } from "node:net"; import path from "node:path"; +import type { Duplex } from "node:stream"; +import chokidar from "chokidar"; import { type WebSocket, WebSocketServer } from "ws"; -import type { RuntimeEnv } from "../runtime.js"; import { resolveStateDir } from "../config/paths.js"; import { isTruthyEnvValue } from "../infra/env.js"; import { detectMime } from "../media/mime.js"; +import type { RuntimeEnv } from "../runtime.js"; import { ensureDir, resolveUserPath } from "../utils.js"; import { CANVAS_HOST_PATH, diff --git a/src/channels/dock.ts b/src/channels/dock.ts index 2326bcfdb6..32ccf835b2 100644 --- a/src/channels/dock.ts +++ b/src/channels/dock.ts @@ -1,17 +1,4 @@ import type { OpenClawConfig } from "../config/config.js"; -import type { - ChannelCapabilities, - ChannelCommandAdapter, - ChannelElevatedAdapter, - ChannelGroupAdapter, - ChannelId, - ChannelAgentPromptAdapter, - ChannelMentionAdapter, - ChannelPlugin, - ChannelThreadingContext, - ChannelThreadingAdapter, - ChannelThreadingToolContext, -} from "./plugins/types.js"; import { resolveChannelGroupRequireMention, resolveChannelGroupToolsPolicy, @@ -41,6 +28,19 @@ import { resolveWhatsAppGroupRequireMention, resolveWhatsAppGroupToolPolicy, } from "./plugins/group-mentions.js"; +import type { + ChannelCapabilities, + ChannelCommandAdapter, + ChannelElevatedAdapter, + ChannelGroupAdapter, + ChannelId, + ChannelAgentPromptAdapter, + ChannelMentionAdapter, + ChannelPlugin, + ChannelThreadingContext, + ChannelThreadingAdapter, + ChannelThreadingToolContext, +} from "./plugins/types.js"; import { CHAT_CHANNEL_ORDER, type ChatChannelId, getChatChannelMeta } from "./registry.js"; export type ChannelDock = { diff --git a/src/channels/plugins/actions/discord.ts b/src/channels/plugins/actions/discord.ts index 4f8b06e7c3..b174c50507 100644 --- a/src/channels/plugins/actions/discord.ts +++ b/src/channels/plugins/actions/discord.ts @@ -1,6 +1,6 @@ import type { DiscordActionConfig } from "../../../config/types.discord.js"; -import type { ChannelMessageActionAdapter, ChannelMessageActionName } from "../types.js"; import { createDiscordActionGate, listEnabledDiscordAccounts } from "../../../discord/accounts.js"; +import type { ChannelMessageActionAdapter, ChannelMessageActionName } from "../types.js"; import { handleDiscordMessageAction } from "./discord/handle-action.js"; export const discordMessageActions: ChannelMessageActionAdapter = { diff --git a/src/channels/plugins/actions/discord/handle-action.guild-admin.ts b/src/channels/plugins/actions/discord/handle-action.guild-admin.ts index 8f7ad54ba9..a52ab21efd 100644 --- a/src/channels/plugins/actions/discord/handle-action.guild-admin.ts +++ b/src/channels/plugins/actions/discord/handle-action.guild-admin.ts @@ -1,11 +1,11 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; -import type { ChannelMessageActionContext } from "../../types.js"; import { readNumberParam, readStringArrayParam, readStringParam, } from "../../../../agents/tools/common.js"; import { handleDiscordAction } from "../../../../agents/tools/discord-actions.js"; +import type { ChannelMessageActionContext } from "../../types.js"; type Ctx = Pick; diff --git a/src/channels/plugins/actions/discord/handle-action.ts b/src/channels/plugins/actions/discord/handle-action.ts index 6c867d81c8..91d0206328 100644 --- a/src/channels/plugins/actions/discord/handle-action.ts +++ b/src/channels/plugins/actions/discord/handle-action.ts @@ -1,5 +1,4 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; -import type { ChannelMessageActionContext } from "../../types.js"; import { readNumberParam, readStringArrayParam, @@ -7,6 +6,7 @@ import { } from "../../../../agents/tools/common.js"; import { handleDiscordAction } from "../../../../agents/tools/discord-actions.js"; import { resolveDiscordChannelId } from "../../../../discord/targets.js"; +import type { ChannelMessageActionContext } from "../../types.js"; import { tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin.js"; const providerId = "discord"; diff --git a/src/channels/plugins/actions/signal.ts b/src/channels/plugins/actions/signal.ts index b9dd4b5c59..7a7ec55bd7 100644 --- a/src/channels/plugins/actions/signal.ts +++ b/src/channels/plugins/actions/signal.ts @@ -1,8 +1,8 @@ -import type { ChannelMessageActionAdapter, ChannelMessageActionName } from "../types.js"; import { createActionGate, jsonResult, readStringParam } from "../../../agents/tools/common.js"; import { listEnabledSignalAccounts, resolveSignalAccount } from "../../../signal/accounts.js"; import { resolveSignalReactionLevel } from "../../../signal/reaction-level.js"; import { sendReactionSignal, removeReactionSignal } from "../../../signal/send-reactions.js"; +import type { ChannelMessageActionAdapter, ChannelMessageActionName } from "../types.js"; const providerId = "signal"; const GROUP_PREFIX = "group:"; diff --git a/src/channels/plugins/actions/telegram.ts b/src/channels/plugins/actions/telegram.ts index db0a51b4de..0f33692815 100644 --- a/src/channels/plugins/actions/telegram.ts +++ b/src/channels/plugins/actions/telegram.ts @@ -1,5 +1,3 @@ -import type { TelegramActionConfig } from "../../../config/types.telegram.js"; -import type { ChannelMessageActionAdapter, ChannelMessageActionName } from "../types.js"; import { readNumberParam, readStringArrayParam, @@ -7,12 +5,14 @@ import { readStringParam, } from "../../../agents/tools/common.js"; import { handleTelegramAction } from "../../../agents/tools/telegram-actions.js"; +import type { TelegramActionConfig } from "../../../config/types.telegram.js"; import { extractToolSend } from "../../../plugin-sdk/tool-send.js"; import { createTelegramActionGate, listEnabledTelegramAccounts, } from "../../../telegram/accounts.js"; import { isTelegramInlineButtonsEnabled } from "../../../telegram/inline-buttons.js"; +import type { ChannelMessageActionAdapter, ChannelMessageActionName } from "../types.js"; const providerId = "telegram"; diff --git a/src/channels/plugins/catalog.ts b/src/channels/plugins/catalog.ts index a07438b279..fe2208765e 100644 --- a/src/channels/plugins/catalog.ts +++ b/src/channels/plugins/catalog.ts @@ -1,11 +1,11 @@ import fs from "node:fs"; import path from "node:path"; -import type { OpenClawPackageManifest } from "../../plugins/manifest.js"; -import type { PluginOrigin } from "../../plugins/types.js"; -import type { ChannelMeta } from "./types.js"; import { MANIFEST_KEY } from "../../compat/legacy-names.js"; import { discoverOpenClawPlugins } from "../../plugins/discovery.js"; +import type { OpenClawPackageManifest } from "../../plugins/manifest.js"; +import type { PluginOrigin } from "../../plugins/types.js"; import { CONFIG_DIR, isRecord, resolveUserPath } from "../../utils.js"; +import type { ChannelMeta } from "./types.js"; export type ChannelUiMetaEntry = { id: string; diff --git a/src/channels/plugins/config-writes.ts b/src/channels/plugins/config-writes.ts index db8e1e3bc0..6b86bdd495 100644 --- a/src/channels/plugins/config-writes.ts +++ b/src/channels/plugins/config-writes.ts @@ -1,6 +1,6 @@ import type { OpenClawConfig } from "../../config/config.js"; -import type { ChannelId } from "./types.js"; import { normalizeAccountId } from "../../routing/session-key.js"; +import type { ChannelId } from "./types.js"; type ChannelConfigWithAccounts = { configWrites?: boolean; diff --git a/src/channels/plugins/directory-config.ts b/src/channels/plugins/directory-config.ts index 2593878d20..e36e560dbc 100644 --- a/src/channels/plugins/directory-config.ts +++ b/src/channels/plugins/directory-config.ts @@ -1,11 +1,11 @@ import type { OpenClawConfig } from "../../config/types.js"; -import type { ChannelDirectoryEntry } from "./types.js"; import { resolveDiscordAccount } from "../../discord/accounts.js"; import { resolveSlackAccount } from "../../slack/accounts.js"; import { resolveTelegramAccount } from "../../telegram/accounts.js"; import { resolveWhatsAppAccount } from "../../web/accounts.js"; import { isWhatsAppGroupJid, normalizeWhatsAppTarget } from "../../whatsapp/normalize.js"; import { normalizeSlackMessagingTarget } from "./normalize/slack.js"; +import type { ChannelDirectoryEntry } from "./types.js"; export type DirectoryConfigParams = { cfg: OpenClawConfig; diff --git a/src/channels/plugins/group-mentions.ts b/src/channels/plugins/group-mentions.ts index e736914648..4c91fc7eb3 100644 --- a/src/channels/plugins/group-mentions.ts +++ b/src/channels/plugins/group-mentions.ts @@ -1,14 +1,14 @@ import type { OpenClawConfig } from "../../config/config.js"; -import type { DiscordConfig } from "../../config/types.js"; -import type { - GroupToolPolicyBySenderConfig, - GroupToolPolicyConfig, -} from "../../config/types.tools.js"; import { resolveChannelGroupRequireMention, resolveChannelGroupToolsPolicy, resolveToolsBySender, } from "../../config/group-policy.js"; +import type { DiscordConfig } from "../../config/types.js"; +import type { + GroupToolPolicyBySenderConfig, + GroupToolPolicyConfig, +} from "../../config/types.tools.js"; import { resolveSlackAccount } from "../../slack/accounts.js"; type GroupMentionParams = { diff --git a/src/channels/plugins/helpers.ts b/src/channels/plugins/helpers.ts index f4eea63740..9e7499c237 100644 --- a/src/channels/plugins/helpers.ts +++ b/src/channels/plugins/helpers.ts @@ -1,7 +1,7 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { ChannelPlugin } from "./types.js"; import { formatCliCommand } from "../../cli/command-format.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { DEFAULT_ACCOUNT_ID } from "../../routing/session-key.js"; +import type { ChannelPlugin } from "./types.js"; // Channel docking helper: use this when selecting the default account for a plugin. export function resolveChannelDefaultAccountId(params: { diff --git a/src/channels/plugins/index.ts b/src/channels/plugins/index.ts index ef9870a3d9..4c20cd5a5a 100644 --- a/src/channels/plugins/index.ts +++ b/src/channels/plugins/index.ts @@ -1,6 +1,6 @@ -import type { ChannelId, ChannelPlugin } from "./types.js"; import { requireActivePluginRegistry } from "../../plugins/runtime.js"; import { CHAT_CHANNEL_ORDER, type ChatChannelId, normalizeAnyChannelId } from "../registry.js"; +import type { ChannelId, ChannelPlugin } from "./types.js"; // Channel plugins registry (runtime). // diff --git a/src/channels/plugins/load.ts b/src/channels/plugins/load.ts index 6b0d6e90b4..e339b54f3f 100644 --- a/src/channels/plugins/load.ts +++ b/src/channels/plugins/load.ts @@ -1,6 +1,6 @@ import type { PluginRegistry } from "../../plugins/registry.js"; -import type { ChannelId, ChannelPlugin } from "./types.js"; import { getActivePluginRegistry } from "../../plugins/runtime.js"; +import type { ChannelId, ChannelPlugin } from "./types.js"; const cache = new Map(); let lastRegistry: PluginRegistry | null = null; diff --git a/src/channels/plugins/message-actions.ts b/src/channels/plugins/message-actions.ts index 8e2cc0c344..ac1b54cbd7 100644 --- a/src/channels/plugins/message-actions.ts +++ b/src/channels/plugins/message-actions.ts @@ -1,7 +1,7 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; import type { OpenClawConfig } from "../../config/config.js"; -import type { ChannelMessageActionContext, ChannelMessageActionName } from "./types.js"; import { getChannelPlugin, listChannelPlugins } from "./index.js"; +import type { ChannelMessageActionContext, ChannelMessageActionName } from "./types.js"; export function listChannelMessageActions(cfg: OpenClawConfig): ChannelMessageActionName[] { const actions = new Set(["send", "broadcast"]); diff --git a/src/channels/plugins/onboarding/discord.ts b/src/channels/plugins/onboarding/discord.ts index 0b327050cc..7b2dc844b3 100644 --- a/src/channels/plugins/onboarding/discord.ts +++ b/src/channels/plugins/onboarding/discord.ts @@ -1,8 +1,6 @@ import type { OpenClawConfig } from "../../../config/config.js"; import type { DiscordGuildEntry } from "../../../config/types.discord.js"; import type { DmPolicy } from "../../../config/types.js"; -import type { WizardPrompter } from "../../../wizard/prompts.js"; -import type { ChannelOnboardingAdapter, ChannelOnboardingDmPolicy } from "../onboarding-types.js"; import { listDiscordAccountIds, resolveDefaultDiscordAccountId, @@ -16,6 +14,8 @@ import { import { resolveDiscordUserAllowlist } from "../../../discord/resolve-users.js"; import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../../../routing/session-key.js"; import { formatDocsLink } from "../../../terminal/links.js"; +import type { WizardPrompter } from "../../../wizard/prompts.js"; +import type { ChannelOnboardingAdapter, ChannelOnboardingDmPolicy } from "../onboarding-types.js"; import { promptChannelAccessConfig } from "./channel-access.js"; import { addWildcardAllowFrom, mergeAllowFromEntries, promptAccountId } from "./helpers.js"; diff --git a/src/channels/plugins/onboarding/helpers.ts b/src/channels/plugins/onboarding/helpers.ts index 8eaa3f0f96..559e883631 100644 --- a/src/channels/plugins/onboarding/helpers.ts +++ b/src/channels/plugins/onboarding/helpers.ts @@ -1,5 +1,5 @@ -import type { PromptAccountId, PromptAccountIdParams } from "../onboarding-types.js"; import { promptAccountId as promptAccountIdSdk } from "../../../plugin-sdk/onboarding.js"; +import type { PromptAccountId, PromptAccountIdParams } from "../onboarding-types.js"; export const promptAccountId: PromptAccountId = async (params: PromptAccountIdParams) => { return await promptAccountIdSdk(params); diff --git a/src/channels/plugins/onboarding/imessage.ts b/src/channels/plugins/onboarding/imessage.ts index 085285a4a4..c5cdeb8367 100644 --- a/src/channels/plugins/onboarding/imessage.ts +++ b/src/channels/plugins/onboarding/imessage.ts @@ -1,8 +1,6 @@ +import { detectBinary } from "../../../commands/onboard-helpers.js"; import type { OpenClawConfig } from "../../../config/config.js"; import type { DmPolicy } from "../../../config/types.js"; -import type { WizardPrompter } from "../../../wizard/prompts.js"; -import type { ChannelOnboardingAdapter, ChannelOnboardingDmPolicy } from "../onboarding-types.js"; -import { detectBinary } from "../../../commands/onboard-helpers.js"; import { listIMessageAccountIds, resolveDefaultIMessageAccountId, @@ -11,6 +9,8 @@ import { import { normalizeIMessageHandle } from "../../../imessage/targets.js"; import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../../../routing/session-key.js"; import { formatDocsLink } from "../../../terminal/links.js"; +import type { WizardPrompter } from "../../../wizard/prompts.js"; +import type { ChannelOnboardingAdapter, ChannelOnboardingDmPolicy } from "../onboarding-types.js"; import { addWildcardAllowFrom, mergeAllowFromEntries, promptAccountId } from "./helpers.js"; const channel = "imessage" as const; diff --git a/src/channels/plugins/onboarding/signal.ts b/src/channels/plugins/onboarding/signal.ts index 5e7ca152d8..98b9e69108 100644 --- a/src/channels/plugins/onboarding/signal.ts +++ b/src/channels/plugins/onboarding/signal.ts @@ -1,10 +1,8 @@ -import type { OpenClawConfig } from "../../../config/config.js"; -import type { DmPolicy } from "../../../config/types.js"; -import type { WizardPrompter } from "../../../wizard/prompts.js"; -import type { ChannelOnboardingAdapter, ChannelOnboardingDmPolicy } from "../onboarding-types.js"; import { formatCliCommand } from "../../../cli/command-format.js"; import { detectBinary } from "../../../commands/onboard-helpers.js"; import { installSignalCli } from "../../../commands/signal-install.js"; +import type { OpenClawConfig } from "../../../config/config.js"; +import type { DmPolicy } from "../../../config/types.js"; import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../../../routing/session-key.js"; import { listSignalAccountIds, @@ -13,6 +11,8 @@ import { } from "../../../signal/accounts.js"; import { formatDocsLink } from "../../../terminal/links.js"; import { normalizeE164 } from "../../../utils.js"; +import type { WizardPrompter } from "../../../wizard/prompts.js"; +import type { ChannelOnboardingAdapter, ChannelOnboardingDmPolicy } from "../onboarding-types.js"; import { addWildcardAllowFrom, mergeAllowFromEntries, promptAccountId } from "./helpers.js"; const channel = "signal" as const; diff --git a/src/channels/plugins/onboarding/slack.ts b/src/channels/plugins/onboarding/slack.ts index 991a8c446c..136b73ef80 100644 --- a/src/channels/plugins/onboarding/slack.ts +++ b/src/channels/plugins/onboarding/slack.ts @@ -1,7 +1,5 @@ import type { OpenClawConfig } from "../../../config/config.js"; import type { DmPolicy } from "../../../config/types.js"; -import type { WizardPrompter } from "../../../wizard/prompts.js"; -import type { ChannelOnboardingAdapter, ChannelOnboardingDmPolicy } from "../onboarding-types.js"; import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../../../routing/session-key.js"; import { listSlackAccountIds, @@ -11,6 +9,8 @@ import { import { resolveSlackChannelAllowlist } from "../../../slack/resolve-channels.js"; import { resolveSlackUserAllowlist } from "../../../slack/resolve-users.js"; import { formatDocsLink } from "../../../terminal/links.js"; +import type { WizardPrompter } from "../../../wizard/prompts.js"; +import type { ChannelOnboardingAdapter, ChannelOnboardingDmPolicy } from "../onboarding-types.js"; import { promptChannelAccessConfig } from "./channel-access.js"; import { addWildcardAllowFrom, mergeAllowFromEntries, promptAccountId } from "./helpers.js"; diff --git a/src/channels/plugins/onboarding/telegram.ts b/src/channels/plugins/onboarding/telegram.ts index a9b3c5d8ee..34badafb19 100644 --- a/src/channels/plugins/onboarding/telegram.ts +++ b/src/channels/plugins/onboarding/telegram.ts @@ -1,8 +1,6 @@ +import { formatCliCommand } from "../../../cli/command-format.js"; import type { OpenClawConfig } from "../../../config/config.js"; import type { DmPolicy } from "../../../config/types.js"; -import type { WizardPrompter } from "../../../wizard/prompts.js"; -import type { ChannelOnboardingAdapter, ChannelOnboardingDmPolicy } from "../onboarding-types.js"; -import { formatCliCommand } from "../../../cli/command-format.js"; import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../../../routing/session-key.js"; import { listTelegramAccountIds, @@ -10,6 +8,8 @@ import { resolveTelegramAccount, } from "../../../telegram/accounts.js"; import { formatDocsLink } from "../../../terminal/links.js"; +import type { WizardPrompter } from "../../../wizard/prompts.js"; +import type { ChannelOnboardingAdapter, ChannelOnboardingDmPolicy } from "../onboarding-types.js"; import { addWildcardAllowFrom, mergeAllowFromEntries, promptAccountId } from "./helpers.js"; const channel = "telegram" as const; diff --git a/src/channels/plugins/onboarding/whatsapp.ts b/src/channels/plugins/onboarding/whatsapp.ts index 4d0c5125e3..80be2a4702 100644 --- a/src/channels/plugins/onboarding/whatsapp.ts +++ b/src/channels/plugins/onboarding/whatsapp.ts @@ -1,13 +1,11 @@ import path from "node:path"; -import type { OpenClawConfig } from "../../../config/config.js"; -import type { DmPolicy } from "../../../config/types.js"; -import type { RuntimeEnv } from "../../../runtime.js"; -import type { WizardPrompter } from "../../../wizard/prompts.js"; -import type { ChannelOnboardingAdapter } from "../onboarding-types.js"; import { loginWeb } from "../../../channel-web.js"; import { formatCliCommand } from "../../../cli/command-format.js"; +import type { OpenClawConfig } from "../../../config/config.js"; import { mergeWhatsAppConfig } from "../../../config/merge-config.js"; +import type { DmPolicy } from "../../../config/types.js"; import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../../../routing/session-key.js"; +import type { RuntimeEnv } from "../../../runtime.js"; import { formatDocsLink } from "../../../terminal/links.js"; import { normalizeE164, pathExists } from "../../../utils.js"; import { @@ -15,6 +13,8 @@ import { resolveDefaultWhatsAppAccountId, resolveWhatsAppAuthDir, } from "../../../web/accounts.js"; +import type { WizardPrompter } from "../../../wizard/prompts.js"; +import type { ChannelOnboardingAdapter } from "../onboarding-types.js"; import { mergeAllowFromEntries, promptAccountId } from "./helpers.js"; const channel = "whatsapp" as const; diff --git a/src/channels/plugins/outbound/discord.ts b/src/channels/plugins/outbound/discord.ts index 82fbdd757b..dc8ebb00e9 100644 --- a/src/channels/plugins/outbound/discord.ts +++ b/src/channels/plugins/outbound/discord.ts @@ -1,6 +1,6 @@ -import type { ChannelOutboundAdapter } from "../types.js"; import { sendMessageDiscord, sendPollDiscord } from "../../../discord/send.js"; import { normalizeDiscordOutboundTarget } from "../normalize/discord.js"; +import type { ChannelOutboundAdapter } from "../types.js"; export const discordOutbound: ChannelOutboundAdapter = { deliveryMode: "direct", diff --git a/src/channels/plugins/outbound/imessage.ts b/src/channels/plugins/outbound/imessage.ts index 13d79849f1..b4d2a8ad7a 100644 --- a/src/channels/plugins/outbound/imessage.ts +++ b/src/channels/plugins/outbound/imessage.ts @@ -1,7 +1,7 @@ -import type { ChannelOutboundAdapter } from "../types.js"; import { chunkText } from "../../../auto-reply/chunk.js"; import { sendMessageIMessage } from "../../../imessage/send.js"; import { resolveChannelMediaMaxBytes } from "../media-limits.js"; +import type { ChannelOutboundAdapter } from "../types.js"; function resolveIMessageMaxBytes(params: { cfg: Parameters[0]["cfg"]; diff --git a/src/channels/plugins/outbound/load.ts b/src/channels/plugins/outbound/load.ts index c3b2ba068d..8f027b373a 100644 --- a/src/channels/plugins/outbound/load.ts +++ b/src/channels/plugins/outbound/load.ts @@ -1,6 +1,6 @@ import type { PluginRegistry } from "../../../plugins/registry.js"; -import type { ChannelId, ChannelOutboundAdapter } from "../types.js"; import { getActivePluginRegistry } from "../../../plugins/runtime.js"; +import type { ChannelId, ChannelOutboundAdapter } from "../types.js"; // Channel docking: outbound sends should stay cheap to import. // diff --git a/src/channels/plugins/outbound/signal.ts b/src/channels/plugins/outbound/signal.ts index b96615b148..cad9a13ef3 100644 --- a/src/channels/plugins/outbound/signal.ts +++ b/src/channels/plugins/outbound/signal.ts @@ -1,7 +1,7 @@ -import type { ChannelOutboundAdapter } from "../types.js"; import { chunkText } from "../../../auto-reply/chunk.js"; import { sendMessageSignal } from "../../../signal/send.js"; import { resolveChannelMediaMaxBytes } from "../media-limits.js"; +import type { ChannelOutboundAdapter } from "../types.js"; function resolveSignalMaxBytes(params: { cfg: Parameters[0]["cfg"]; diff --git a/src/channels/plugins/outbound/slack.ts b/src/channels/plugins/outbound/slack.ts index b5bd4273fb..37cfe1943e 100644 --- a/src/channels/plugins/outbound/slack.ts +++ b/src/channels/plugins/outbound/slack.ts @@ -1,7 +1,7 @@ import type { OutboundIdentity } from "../../../infra/outbound/identity.js"; -import type { ChannelOutboundAdapter } from "../types.js"; import { getGlobalHookRunner } from "../../../plugins/hook-runner-global.js"; import { sendMessageSlack, type SlackSendIdentity } from "../../../slack/send.js"; +import type { ChannelOutboundAdapter } from "../types.js"; function resolveSlackSendIdentity(identity?: OutboundIdentity): SlackSendIdentity | undefined { if (!identity) { diff --git a/src/channels/plugins/outbound/telegram.ts b/src/channels/plugins/outbound/telegram.ts index 51ba9d4750..822452feb5 100644 --- a/src/channels/plugins/outbound/telegram.ts +++ b/src/channels/plugins/outbound/telegram.ts @@ -1,11 +1,11 @@ import type { TelegramInlineButtons } from "../../../telegram/button-types.js"; -import type { ChannelOutboundAdapter } from "../types.js"; import { markdownToTelegramHtmlChunks } from "../../../telegram/format.js"; import { parseTelegramReplyToMessageId, parseTelegramThreadId, } from "../../../telegram/outbound-params.js"; import { sendMessageTelegram } from "../../../telegram/send.js"; +import type { ChannelOutboundAdapter } from "../types.js"; export const telegramOutbound: ChannelOutboundAdapter = { deliveryMode: "direct", diff --git a/src/channels/plugins/outbound/whatsapp.ts b/src/channels/plugins/outbound/whatsapp.ts index 0bb94dac60..5cd189d684 100644 --- a/src/channels/plugins/outbound/whatsapp.ts +++ b/src/channels/plugins/outbound/whatsapp.ts @@ -1,8 +1,8 @@ -import type { ChannelOutboundAdapter } from "../types.js"; import { chunkText } from "../../../auto-reply/chunk.js"; import { shouldLogVerbose } from "../../../globals.js"; import { sendPollWhatsApp } from "../../../web/outbound.js"; import { resolveWhatsAppOutboundTarget } from "../../../whatsapp/resolve-outbound-target.js"; +import type { ChannelOutboundAdapter } from "../types.js"; export const whatsappOutbound: ChannelOutboundAdapter = { deliveryMode: "gateway", diff --git a/src/channels/plugins/pairing.ts b/src/channels/plugins/pairing.ts index ea5e5451c0..f179ae6983 100644 --- a/src/channels/plugins/pairing.ts +++ b/src/channels/plugins/pairing.ts @@ -1,12 +1,12 @@ import type { OpenClawConfig } from "../../config/config.js"; import type { RuntimeEnv } from "../../runtime.js"; -import type { ChannelPairingAdapter } from "./types.js"; import { type ChannelId, getChannelPlugin, listChannelPlugins, normalizeChannelId, } from "./index.js"; +import type { ChannelPairingAdapter } from "./types.js"; export function listPairingChannels(): ChannelId[] { // Channel docking: pairing support is declared via plugin.pairing. diff --git a/src/channels/plugins/plugins-core.test.ts b/src/channels/plugins/plugins-core.test.ts index 64daeb574a..a1c505fb11 100644 --- a/src/channels/plugins/plugins-core.test.ts +++ b/src/channels/plugins/plugins-core.test.ts @@ -7,13 +7,11 @@ import type { DiscordTokenResolution } from "../../discord/token.js"; import type { IMessageProbe } from "../../imessage/probe.js"; import type { LineProbeResult } from "../../line/types.js"; import type { PluginRegistry } from "../../plugins/registry.js"; +import { setActivePluginRegistry } from "../../plugins/runtime.js"; import type { SignalProbe } from "../../signal/probe.js"; import type { SlackProbe } from "../../slack/probe.js"; import type { TelegramProbe } from "../../telegram/probe.js"; import type { TelegramTokenResolution } from "../../telegram/token.js"; -import type { ChannelOutboundAdapter, ChannelPlugin } from "./types.js"; -import type { BaseProbeResult, BaseTokenResolution } from "./types.js"; -import { setActivePluginRegistry } from "../../plugins/runtime.js"; import { createTestRegistry } from "../../test-utils/channel-plugins.js"; import { getChannelPluginCatalogEntry, listChannelPluginCatalogEntries } from "./catalog.js"; import { resolveChannelConfigWrites } from "./config-writes.js"; @@ -30,6 +28,8 @@ import { import { listChannelPlugins } from "./index.js"; import { loadChannelPlugin } from "./load.js"; import { loadChannelOutboundAdapter } from "./outbound/load.js"; +import type { ChannelOutboundAdapter, ChannelPlugin } from "./types.js"; +import type { BaseProbeResult, BaseTokenResolution } from "./types.js"; describe("channel plugin registry", () => { const emptyRegistry = createTestRegistry([]); diff --git a/src/channels/plugins/slack.actions.ts b/src/channels/plugins/slack.actions.ts index b2480a0aa9..abd4e75d45 100644 --- a/src/channels/plugins/slack.actions.ts +++ b/src/channels/plugins/slack.actions.ts @@ -1,8 +1,8 @@ -import type { ChannelMessageActionAdapter } from "./types.js"; import { handleSlackAction, type SlackActionContext } from "../../agents/tools/slack-actions.js"; import { handleSlackMessageAction } from "../../plugin-sdk/slack-message-actions.js"; import { extractSlackToolSend, listSlackMessageActions } from "../../slack/message-actions.js"; import { resolveSlackChannelId } from "../../slack/targets.js"; +import type { ChannelMessageActionAdapter } from "./types.js"; export function createSlackActions(providerId: string): ChannelMessageActionAdapter { return { diff --git a/src/channels/plugins/status-issues/whatsapp.ts b/src/channels/plugins/status-issues/whatsapp.ts index 66e23a61de..99ed65a000 100644 --- a/src/channels/plugins/status-issues/whatsapp.ts +++ b/src/channels/plugins/status-issues/whatsapp.ts @@ -1,5 +1,5 @@ -import type { ChannelAccountSnapshot, ChannelStatusIssue } from "../types.js"; import { formatCliCommand } from "../../../cli/command-format.js"; +import type { ChannelAccountSnapshot, ChannelStatusIssue } from "../types.js"; import { asString, isRecord } from "./shared.js"; type WhatsAppAccountStatus = { diff --git a/src/channels/registry.ts b/src/channels/registry.ts index 205372334d..20a015320d 100644 --- a/src/channels/registry.ts +++ b/src/channels/registry.ts @@ -1,6 +1,6 @@ +import { requireActivePluginRegistry } from "../plugins/runtime.js"; import type { ChannelMeta } from "./plugins/types.js"; import type { ChannelId } from "./plugins/types.js"; -import { requireActivePluginRegistry } from "../plugins/runtime.js"; // Channel docking: add new core channels here (order + meta + aliases), then // register the plugin in its extension entrypoint and keep protocol IDs in sync. diff --git a/src/channels/reply-prefix.ts b/src/channels/reply-prefix.ts index 0e6fde0952..2ae6f3d221 100644 --- a/src/channels/reply-prefix.ts +++ b/src/channels/reply-prefix.ts @@ -1,10 +1,10 @@ -import type { GetReplyOptions } from "../auto-reply/types.js"; -import type { OpenClawConfig } from "../config/config.js"; import { resolveEffectiveMessagesConfig, resolveIdentityName } from "../agents/identity.js"; import { extractShortModelName, type ResponsePrefixContext, } from "../auto-reply/reply/response-prefix-template.js"; +import type { GetReplyOptions } from "../auto-reply/types.js"; +import type { OpenClawConfig } from "../config/config.js"; type ModelSelectionContext = Parameters>[0]; diff --git a/src/cli/browser-cli-actions-input/register.element.ts b/src/cli/browser-cli-actions-input/register.element.ts index 10e3b6497c..270d59d682 100644 --- a/src/cli/browser-cli-actions-input/register.element.ts +++ b/src/cli/browser-cli-actions-input/register.element.ts @@ -1,7 +1,7 @@ import type { Command } from "commander"; -import type { BrowserParentOpts } from "../browser-cli-shared.js"; import { danger } from "../../globals.js"; import { defaultRuntime } from "../../runtime.js"; +import type { BrowserParentOpts } from "../browser-cli-shared.js"; import { callBrowserAct, requireRef, resolveBrowserActionContext } from "./shared.js"; export function registerBrowserElementCommands( diff --git a/src/cli/browser-cli-actions-input/register.form-wait-eval.ts b/src/cli/browser-cli-actions-input/register.form-wait-eval.ts index 4a574e68d0..f5e90c1321 100644 --- a/src/cli/browser-cli-actions-input/register.form-wait-eval.ts +++ b/src/cli/browser-cli-actions-input/register.form-wait-eval.ts @@ -1,7 +1,7 @@ import type { Command } from "commander"; -import type { BrowserParentOpts } from "../browser-cli-shared.js"; import { danger } from "../../globals.js"; import { defaultRuntime } from "../../runtime.js"; +import type { BrowserParentOpts } from "../browser-cli-shared.js"; import { callBrowserAct, readFields, resolveBrowserActionContext } from "./shared.js"; export function registerBrowserFormWaitEvalCommands( diff --git a/src/cli/browser-cli-extension.ts b/src/cli/browser-cli-extension.ts index 5fb70ed31e..a04059dfda 100644 --- a/src/cli/browser-cli-extension.ts +++ b/src/cli/browser-cli-extension.ts @@ -1,7 +1,7 @@ -import type { Command } from "commander"; import fs from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; +import type { Command } from "commander"; import { movePathToTrash } from "../browser/trash.js"; import { resolveStateDir } from "../config/paths.js"; import { danger, info } from "../globals.js"; diff --git a/src/cli/browser-cli.ts b/src/cli/browser-cli.ts index 91865a5642..085d06cad8 100644 --- a/src/cli/browser-cli.ts +++ b/src/cli/browser-cli.ts @@ -1,5 +1,4 @@ import type { Command } from "commander"; -import type { BrowserParentOpts } from "./browser-cli-shared.js"; import { danger } from "../globals.js"; import { defaultRuntime } from "../runtime.js"; import { formatDocsLink } from "../terminal/links.js"; @@ -11,6 +10,7 @@ import { browserActionExamples, browserCoreExamples } from "./browser-cli-exampl import { registerBrowserExtensionCommands } from "./browser-cli-extension.js"; import { registerBrowserInspectCommands } from "./browser-cli-inspect.js"; import { registerBrowserManageCommands } from "./browser-cli-manage.js"; +import type { BrowserParentOpts } from "./browser-cli-shared.js"; import { registerBrowserStateCommands } from "./browser-cli-state.js"; import { formatCliCommand } from "./command-format.js"; import { addGatewayClientOptions } from "./gateway-rpc.js"; diff --git a/src/cli/completion-cli.ts b/src/cli/completion-cli.ts index 5659f9596a..e8f9f40d47 100644 --- a/src/cli/completion-cli.ts +++ b/src/cli/completion-cli.ts @@ -1,7 +1,7 @@ -import { Command, Option } from "commander"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import { Command, Option } from "commander"; import { resolveStateDir } from "../config/paths.js"; import { routeLogsToStderr } from "../logging/console.js"; import { pathExists } from "../utils.js"; diff --git a/src/cli/config-cli.ts b/src/cli/config-cli.ts index 25de315692..c35caf5f00 100644 --- a/src/cli/config-cli.ts +++ b/src/cli/config-cli.ts @@ -1,8 +1,8 @@ import type { Command } from "commander"; import JSON5 from "json5"; -import type { RuntimeEnv } from "../runtime.js"; import { readConfigFileSnapshot, writeConfigFile } from "../config/config.js"; import { danger, info } from "../globals.js"; +import type { RuntimeEnv } from "../runtime.js"; import { defaultRuntime } from "../runtime.js"; import { formatDocsLink } from "../terminal/links.js"; import { theme } from "../terminal/theme.js"; diff --git a/src/cli/cron-cli/register.cron-add.ts b/src/cli/cron-cli/register.cron-add.ts index 001fd5f1bf..29df5085fb 100644 --- a/src/cli/cron-cli/register.cron-add.ts +++ b/src/cli/cron-cli/register.cron-add.ts @@ -1,9 +1,9 @@ import type { Command } from "commander"; import type { CronJob } from "../../cron/types.js"; -import type { GatewayRpcOpts } from "../gateway-rpc.js"; import { danger } from "../../globals.js"; import { sanitizeAgentId } from "../../routing/session-key.js"; import { defaultRuntime } from "../../runtime.js"; +import type { GatewayRpcOpts } from "../gateway-rpc.js"; import { addGatewayClientOptions, callGatewayFromCli } from "../gateway-rpc.js"; import { parsePositiveIntOrUndefined } from "../program/helpers.js"; import { diff --git a/src/cli/cron-cli/shared.ts b/src/cli/cron-cli/shared.ts index bb5f02711e..9c74e10854 100644 --- a/src/cli/cron-cli/shared.ts +++ b/src/cli/cron-cli/shared.ts @@ -1,10 +1,10 @@ -import type { CronJob, CronSchedule } from "../../cron/types.js"; -import type { GatewayRpcOpts } from "../gateway-rpc.js"; import { listChannelPlugins } from "../../channels/plugins/index.js"; import { parseAbsoluteTimeMs } from "../../cron/parse.js"; +import type { CronJob, CronSchedule } from "../../cron/types.js"; import { formatDurationHuman } from "../../infra/format-time/format-duration.ts"; import { defaultRuntime } from "../../runtime.js"; import { colorize, isRich, theme } from "../../terminal/theme.js"; +import type { GatewayRpcOpts } from "../gateway-rpc.js"; import { callGatewayFromCli } from "../gateway-rpc.js"; export const getCronChannelOptions = () => diff --git a/src/cli/daemon-cli/install.ts b/src/cli/daemon-cli/install.ts index c29462d4ec..d6d75823b3 100644 --- a/src/cli/daemon-cli/install.ts +++ b/src/cli/daemon-cli/install.ts @@ -1,4 +1,3 @@ -import type { DaemonInstallOptions } from "./types.js"; import { buildGatewayInstallPlan } from "../../commands/daemon-install-helpers.js"; import { DEFAULT_GATEWAY_DAEMON_RUNTIME, @@ -22,6 +21,7 @@ import { installDaemonServiceAndEmit, } from "./response.js"; import { parsePort } from "./shared.js"; +import type { DaemonInstallOptions } from "./types.js"; export async function runDaemonInstall(opts: DaemonInstallOptions) { const json = Boolean(opts.json); diff --git a/src/cli/daemon-cli/lifecycle-core.ts b/src/cli/daemon-cli/lifecycle-core.ts index ce934b2a51..981328997e 100644 --- a/src/cli/daemon-cli/lifecycle-core.ts +++ b/src/cli/daemon-cli/lifecycle-core.ts @@ -1,7 +1,7 @@ -import type { GatewayService } from "../../daemon/service.js"; import { loadConfig } from "../../config/config.js"; import { resolveIsNixMode } from "../../config/paths.js"; import { checkTokenDrift } from "../../daemon/service-audit.js"; +import type { GatewayService } from "../../daemon/service.js"; import { renderSystemdUnavailableHints } from "../../daemon/systemd-hints.js"; import { isSystemdUserServiceAvailable } from "../../daemon/systemd.js"; import { isWSL } from "../../infra/wsl.js"; diff --git a/src/cli/daemon-cli/lifecycle.ts b/src/cli/daemon-cli/lifecycle.ts index 6418483741..c1b03d9f74 100644 --- a/src/cli/daemon-cli/lifecycle.ts +++ b/src/cli/daemon-cli/lifecycle.ts @@ -1,4 +1,3 @@ -import type { DaemonLifecycleOptions } from "./types.js"; import { resolveGatewayService } from "../../daemon/service.js"; import { runServiceRestart, @@ -7,6 +6,7 @@ import { runServiceUninstall, } from "./lifecycle-core.js"; import { renderGatewayServiceStartHints } from "./shared.js"; +import type { DaemonLifecycleOptions } from "./types.js"; export async function runDaemonUninstall(opts: DaemonLifecycleOptions = {}) { return await runServiceUninstall({ diff --git a/src/cli/daemon-cli/status.gather.ts b/src/cli/daemon-cli/status.gather.ts index 37bb999146..d705dba44a 100644 --- a/src/cli/daemon-cli/status.gather.ts +++ b/src/cli/daemon-cli/status.gather.ts @@ -1,15 +1,14 @@ -import type { GatewayBindMode, GatewayControlUiConfig } from "../../config/types.js"; -import type { FindExtraGatewayServicesOptions } from "../../daemon/inspect.js"; -import type { ServiceConfigAudit } from "../../daemon/service-audit.js"; -import type { GatewayRpcOpts } from "./types.js"; import { createConfigIO, resolveConfigPath, resolveGatewayPort, resolveStateDir, } from "../../config/config.js"; +import type { GatewayBindMode, GatewayControlUiConfig } from "../../config/types.js"; import { readLastGatewayErrorLine } from "../../daemon/diagnostics.js"; +import type { FindExtraGatewayServicesOptions } from "../../daemon/inspect.js"; import { findExtraGatewayServices } from "../../daemon/inspect.js"; +import type { ServiceConfigAudit } from "../../daemon/service-audit.js"; import { auditGatewayServiceConfig } from "../../daemon/service-audit.js"; import { resolveGatewayService } from "../../daemon/service.js"; import { resolveGatewayBindHost } from "../../gateway/net.js"; @@ -22,6 +21,7 @@ import { import { pickPrimaryTailnetIPv4 } from "../../infra/tailnet.js"; import { probeGatewayStatus } from "./probe.js"; import { normalizeListenerAddress, parsePortFromArgs, pickProbeHostForBind } from "./shared.js"; +import type { GatewayRpcOpts } from "./types.js"; type ConfigSummary = { path: string; diff --git a/src/cli/daemon-cli/status.ts b/src/cli/daemon-cli/status.ts index aa24d2ee61..2af5a1977e 100644 --- a/src/cli/daemon-cli/status.ts +++ b/src/cli/daemon-cli/status.ts @@ -1,8 +1,8 @@ -import type { DaemonStatusOptions } from "./types.js"; import { defaultRuntime } from "../../runtime.js"; import { colorize, isRich, theme } from "../../terminal/theme.js"; import { gatherDaemonStatus } from "./status.gather.js"; import { printDaemonStatus } from "./status.print.js"; +import type { DaemonStatusOptions } from "./types.js"; export async function runDaemonStatus(opts: DaemonStatusOptions) { try { diff --git a/src/cli/dns-cli.ts b/src/cli/dns-cli.ts index 9dfc1b0d16..de6e6c0dec 100644 --- a/src/cli/dns-cli.ts +++ b/src/cli/dns-cli.ts @@ -1,7 +1,7 @@ -import type { Command } from "commander"; import { spawnSync } from "node:child_process"; import fs from "node:fs"; import path from "node:path"; +import type { Command } from "commander"; import { loadConfig } from "../config/config.js"; import { pickPrimaryTailnetIPv4, pickPrimaryTailnetIPv6 } from "../infra/tailnet.js"; import { getWideAreaZonePath, resolveWideAreaDiscoveryDomain } from "../infra/widearea-dns.js"; diff --git a/src/cli/exec-approvals-cli.ts b/src/cli/exec-approvals-cli.ts index 7d04f07c8f..b09938a2a1 100644 --- a/src/cli/exec-approvals-cli.ts +++ b/src/cli/exec-approvals-cli.ts @@ -1,7 +1,6 @@ +import fs from "node:fs/promises"; import type { Command } from "commander"; import JSON5 from "json5"; -import fs from "node:fs/promises"; -import type { NodesRpcOpts } from "./nodes-cli/types.js"; import { readExecApprovalsSnapshot, saveExecApprovals, @@ -16,6 +15,7 @@ import { isRich, theme } from "../terminal/theme.js"; import { describeUnknownError } from "./gateway-cli/shared.js"; import { callGatewayFromCli } from "./gateway-rpc.js"; import { nodesCallOpts, resolveNodeId } from "./nodes-cli/rpc.js"; +import type { NodesRpcOpts } from "./nodes-cli/types.js"; type ExecApprovalsSnapshot = { path: string; diff --git a/src/cli/gateway-cli/register.ts b/src/cli/gateway-cli/register.ts index 34ef3273dd..b85783382f 100644 --- a/src/cli/gateway-cli/register.ts +++ b/src/cli/gateway-cli/register.ts @@ -1,10 +1,9 @@ import type { Command } from "commander"; -import type { CostUsageSummary } from "../../infra/session-cost-usage.js"; -import type { GatewayDiscoverOpts } from "./discover.js"; import { gatewayStatusCommand } from "../../commands/gateway-status.js"; import { formatHealthChannelLines, type HealthSummary } from "../../commands/health.js"; import { loadConfig } from "../../config/config.js"; import { discoverGatewayBeacons } from "../../infra/bonjour-discovery.js"; +import type { CostUsageSummary } from "../../infra/session-cost-usage.js"; import { resolveWideAreaDiscoveryDomain } from "../../infra/widearea-dns.js"; import { defaultRuntime } from "../../runtime.js"; import { styleHealthChannelLine } from "../../terminal/health-style.js"; @@ -16,6 +15,7 @@ import { addGatewayServiceCommands } from "../daemon-cli.js"; import { formatHelpExamples } from "../help-format.js"; import { withProgress } from "../progress.js"; import { callGatewayCli, gatewayCallOpts } from "./call.js"; +import type { GatewayDiscoverOpts } from "./discover.js"; import { dedupeBeacons, parseDiscoverTimeoutMs, diff --git a/src/cli/gateway-cli/run-loop.ts b/src/cli/gateway-cli/run-loop.ts index 84c2bbc326..12d1bf1f19 100644 --- a/src/cli/gateway-cli/run-loop.ts +++ b/src/cli/gateway-cli/run-loop.ts @@ -1,5 +1,4 @@ import type { startGatewayServer } from "../../gateway/server.js"; -import type { defaultRuntime } from "../../runtime.js"; import { acquireGatewayLock } from "../../infra/gateway-lock.js"; import { restartGatewayProcessWithFreshPid } from "../../infra/process-respawn.js"; import { @@ -14,6 +13,7 @@ import { waitForActiveTasks, } from "../../process/command-queue.js"; import { createRestartIterationHook } from "../../process/restart-recovery.js"; +import type { defaultRuntime } from "../../runtime.js"; const gatewayLog = createSubsystemLogger("gateway"); diff --git a/src/cli/gateway-cli/run.ts b/src/cli/gateway-cli/run.ts index 6c0d2277f4..58b0ceae47 100644 --- a/src/cli/gateway-cli/run.ts +++ b/src/cli/gateway-cli/run.ts @@ -1,8 +1,7 @@ -import type { Command } from "commander"; import fs from "node:fs"; import path from "node:path"; +import type { Command } from "commander"; import type { GatewayAuthMode } from "../../config/config.js"; -import type { GatewayWsLogStyle } from "../../gateway/ws-logging.js"; import { CONFIG_PATH, loadConfig, @@ -12,6 +11,7 @@ import { } from "../../config/config.js"; import { resolveGatewayAuth } from "../../gateway/auth.js"; import { startGatewayServer } from "../../gateway/server.js"; +import type { GatewayWsLogStyle } from "../../gateway/ws-logging.js"; import { setGatewayWsLogStyle } from "../../gateway/ws-logging.js"; import { setVerbose } from "../../globals.js"; import { GatewayLockError } from "../../infra/gateway-lock.js"; diff --git a/src/cli/hooks-cli.ts b/src/cli/hooks-cli.ts index 6fb7027036..ffa7383c5e 100644 --- a/src/cli/hooks-cli.ts +++ b/src/cli/hooks-cli.ts @@ -1,10 +1,9 @@ -import type { Command } from "commander"; import fs from "node:fs"; import fsp from "node:fs/promises"; import path from "node:path"; -import type { OpenClawConfig } from "../config/config.js"; -import type { HookEntry } from "../hooks/types.js"; +import type { Command } from "commander"; import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js"; +import type { OpenClawConfig } from "../config/config.js"; import { loadConfig, writeConfigFile } from "../config/io.js"; import { buildWorkspaceHookStatus, @@ -17,6 +16,7 @@ import { resolveHookInstallDir, } from "../hooks/install.js"; import { recordHookInstall } from "../hooks/installs.js"; +import type { HookEntry } from "../hooks/types.js"; import { loadWorkspaceHookEntries } from "../hooks/workspace.js"; import { resolveArchiveKind } from "../infra/archive.js"; import { buildPluginStatusReport } from "../plugins/status.js"; diff --git a/src/cli/logs-cli.ts b/src/cli/logs-cli.ts index 2fa8345814..afd3a2cd1f 100644 --- a/src/cli/logs-cli.ts +++ b/src/cli/logs-cli.ts @@ -1,5 +1,5 @@ -import type { Command } from "commander"; import { setTimeout as delay } from "node:timers/promises"; +import type { Command } from "commander"; import { buildGatewayConnectionDetails } from "../gateway/call.js"; import { parseLogLine } from "../logging/parse-log-line.js"; import { formatLocalIsoWithOffset } from "../logging/timestamps.js"; diff --git a/src/cli/memory-cli.test.ts b/src/cli/memory-cli.test.ts index 5821f1c5ea..1da9f96de1 100644 --- a/src/cli/memory-cli.test.ts +++ b/src/cli/memory-cli.test.ts @@ -1,7 +1,7 @@ -import { Command } from "commander"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import { Command } from "commander"; import { afterEach, describe, expect, it, vi } from "vitest"; const getMemorySearchManager = vi.fn(); diff --git a/src/cli/memory-cli.ts b/src/cli/memory-cli.ts index c103f8b699..82dbb50e70 100644 --- a/src/cli/memory-cli.ts +++ b/src/cli/memory-cli.ts @@ -1,8 +1,8 @@ -import type { Command } from "commander"; import fsSync from "node:fs"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import type { Command } from "commander"; import { resolveDefaultAgentId } from "../agents/agent-scope.js"; import { loadConfig } from "../config/config.js"; import { resolveStateDir } from "../config/paths.js"; diff --git a/src/cli/node-cli/daemon.ts b/src/cli/node-cli/daemon.ts index 9c53af7617..dccc242900 100644 --- a/src/cli/node-cli/daemon.ts +++ b/src/cli/node-cli/daemon.ts @@ -1,4 +1,3 @@ -import type { GatewayServiceRuntime } from "../../daemon/service-runtime.js"; import { buildNodeInstallPlan } from "../../commands/node-daemon-install-helpers.js"; import { DEFAULT_NODE_DAEMON_RUNTIME, @@ -12,6 +11,7 @@ import { } from "../../daemon/constants.js"; import { resolveGatewayLogPaths } from "../../daemon/launchd.js"; import { resolveNodeService } from "../../daemon/node-service.js"; +import type { GatewayServiceRuntime } from "../../daemon/service-runtime.js"; import { loadNodeHostConfig } from "../../node-host/config.js"; import { defaultRuntime } from "../../runtime.js"; import { colorize, theme } from "../../terminal/theme.js"; diff --git a/src/cli/nodes-cli/pairing-render.ts b/src/cli/nodes-cli/pairing-render.ts index a24561912e..8963b27f9f 100644 --- a/src/cli/nodes-cli/pairing-render.ts +++ b/src/cli/nodes-cli/pairing-render.ts @@ -1,6 +1,6 @@ -import type { PendingRequest } from "./types.js"; import { formatTimeAgo } from "../../infra/format-time/format-relative.ts"; import { renderTable } from "../../terminal/table.js"; +import type { PendingRequest } from "./types.js"; export function renderPendingPairingRequestsTable(params: { pending: PendingRequest[]; diff --git a/src/cli/nodes-cli/register.camera.ts b/src/cli/nodes-cli/register.camera.ts index 3039189f0f..5f6324edda 100644 --- a/src/cli/nodes-cli/register.camera.ts +++ b/src/cli/nodes-cli/register.camera.ts @@ -1,5 +1,4 @@ import type { Command } from "commander"; -import type { NodesRpcOpts } from "./types.js"; import { defaultRuntime } from "../../runtime.js"; import { renderTable } from "../../terminal/table.js"; import { shortenHomePath } from "../../utils.js"; @@ -14,6 +13,7 @@ import { import { parseDurationMs } from "../parse-duration.js"; import { getNodesTheme, runNodesCommand } from "./cli-utils.js"; import { buildNodeInvokeParams, callGatewayCli, nodesCallOpts, resolveNodeId } from "./rpc.js"; +import type { NodesRpcOpts } from "./types.js"; const parseFacing = (value: string): CameraFacing => { const v = String(value ?? "") diff --git a/src/cli/nodes-cli/register.canvas.ts b/src/cli/nodes-cli/register.canvas.ts index d9877f8ad1..9604d66b02 100644 --- a/src/cli/nodes-cli/register.canvas.ts +++ b/src/cli/nodes-cli/register.canvas.ts @@ -1,6 +1,5 @@ -import type { Command } from "commander"; import fs from "node:fs/promises"; -import type { NodesRpcOpts } from "./types.js"; +import type { Command } from "commander"; import { defaultRuntime } from "../../runtime.js"; import { shortenHomePath } from "../../utils.js"; import { writeBase64ToFile } from "../nodes-camera.js"; @@ -9,6 +8,7 @@ import { parseTimeoutMs } from "../nodes-run.js"; import { buildA2UITextJsonl, validateA2UIJsonl } from "./a2ui-jsonl.js"; import { getNodesTheme, runNodesCommand } from "./cli-utils.js"; import { buildNodeInvokeParams, callGatewayCli, nodesCallOpts, resolveNodeId } from "./rpc.js"; +import type { NodesRpcOpts } from "./types.js"; async function invokeCanvas(opts: NodesRpcOpts, command: string, params?: Record) { const nodeId = await resolveNodeId(opts, String(opts.node ?? "")); diff --git a/src/cli/nodes-cli/register.invoke.ts b/src/cli/nodes-cli/register.invoke.ts index 6cf004be89..2a7ec004f8 100644 --- a/src/cli/nodes-cli/register.invoke.ts +++ b/src/cli/nodes-cli/register.invoke.ts @@ -1,5 +1,4 @@ import type { Command } from "commander"; -import type { NodesRpcOpts } from "./types.js"; import { resolveAgentConfig, resolveDefaultAgentId } from "../../agents/agent-scope.js"; import { loadConfig } from "../../config/config.js"; import { randomIdempotencyKey } from "../../gateway/call.js"; @@ -19,6 +18,7 @@ import { parseEnvPairs, parseTimeoutMs } from "../nodes-run.js"; import { getNodesTheme, runNodesCommand } from "./cli-utils.js"; import { parseNodeList } from "./format.js"; import { callGatewayCli, nodesCallOpts, resolveNodeId, unauthorizedHintForMessage } from "./rpc.js"; +import type { NodesRpcOpts } from "./types.js"; type NodesRunOpts = NodesRpcOpts & { node?: string; diff --git a/src/cli/nodes-cli/register.location.ts b/src/cli/nodes-cli/register.location.ts index 89028feaec..c4dd02356e 100644 --- a/src/cli/nodes-cli/register.location.ts +++ b/src/cli/nodes-cli/register.location.ts @@ -1,9 +1,9 @@ import type { Command } from "commander"; -import type { NodesRpcOpts } from "./types.js"; import { randomIdempotencyKey } from "../../gateway/call.js"; import { defaultRuntime } from "../../runtime.js"; import { runNodesCommand } from "./cli-utils.js"; import { callGatewayCli, nodesCallOpts, resolveNodeId } from "./rpc.js"; +import type { NodesRpcOpts } from "./types.js"; export function registerNodesLocationCommands(nodes: Command) { const location = nodes.command("location").description("Fetch location from a paired node"); diff --git a/src/cli/nodes-cli/register.notify.ts b/src/cli/nodes-cli/register.notify.ts index 9843eb7695..25952a2d8a 100644 --- a/src/cli/nodes-cli/register.notify.ts +++ b/src/cli/nodes-cli/register.notify.ts @@ -1,9 +1,9 @@ import type { Command } from "commander"; -import type { NodesRpcOpts } from "./types.js"; import { randomIdempotencyKey } from "../../gateway/call.js"; import { defaultRuntime } from "../../runtime.js"; import { getNodesTheme, runNodesCommand } from "./cli-utils.js"; import { callGatewayCli, nodesCallOpts, resolveNodeId } from "./rpc.js"; +import type { NodesRpcOpts } from "./types.js"; export function registerNodesNotifyCommand(nodes: Command) { nodesCallOpts( diff --git a/src/cli/nodes-cli/register.pairing.ts b/src/cli/nodes-cli/register.pairing.ts index daab00bdf3..b20c989c1c 100644 --- a/src/cli/nodes-cli/register.pairing.ts +++ b/src/cli/nodes-cli/register.pairing.ts @@ -1,10 +1,10 @@ import type { Command } from "commander"; -import type { NodesRpcOpts } from "./types.js"; import { defaultRuntime } from "../../runtime.js"; import { getNodesTheme, runNodesCommand } from "./cli-utils.js"; import { parsePairingList } from "./format.js"; import { renderPendingPairingRequestsTable } from "./pairing-render.js"; import { callGatewayCli, nodesCallOpts, resolveNodeId } from "./rpc.js"; +import type { NodesRpcOpts } from "./types.js"; export function registerNodesPairingCommands(nodes: Command) { nodesCallOpts( diff --git a/src/cli/nodes-cli/register.screen.ts b/src/cli/nodes-cli/register.screen.ts index e2034be169..06cbc6599c 100644 --- a/src/cli/nodes-cli/register.screen.ts +++ b/src/cli/nodes-cli/register.screen.ts @@ -1,5 +1,4 @@ import type { Command } from "commander"; -import type { NodesRpcOpts } from "./types.js"; import { defaultRuntime } from "../../runtime.js"; import { shortenHomePath } from "../../utils.js"; import { @@ -10,6 +9,7 @@ import { import { parseDurationMs } from "../parse-duration.js"; import { runNodesCommand } from "./cli-utils.js"; import { buildNodeInvokeParams, callGatewayCli, nodesCallOpts, resolveNodeId } from "./rpc.js"; +import type { NodesRpcOpts } from "./types.js"; export function registerNodesScreenCommands(nodes: Command) { const screen = nodes diff --git a/src/cli/nodes-cli/register.status.ts b/src/cli/nodes-cli/register.status.ts index 414106f130..4dcb3be8e3 100644 --- a/src/cli/nodes-cli/register.status.ts +++ b/src/cli/nodes-cli/register.status.ts @@ -1,5 +1,4 @@ import type { Command } from "commander"; -import type { NodesRpcOpts } from "./types.js"; import { formatTimeAgo } from "../../infra/format-time/format-relative.ts"; import { defaultRuntime } from "../../runtime.js"; import { renderTable } from "../../terminal/table.js"; @@ -9,6 +8,7 @@ import { getNodesTheme, runNodesCommand } from "./cli-utils.js"; import { formatPermissions, parseNodeList, parsePairingList } from "./format.js"; import { renderPendingPairingRequestsTable } from "./pairing-render.js"; import { callGatewayCli, nodesCallOpts, resolveNodeId } from "./rpc.js"; +import type { NodesRpcOpts } from "./types.js"; function formatVersionLabel(raw: string) { const trimmed = raw.trim(); diff --git a/src/cli/nodes-cli/rpc.ts b/src/cli/nodes-cli/rpc.ts index 691da4dd7f..9771935477 100644 --- a/src/cli/nodes-cli/rpc.ts +++ b/src/cli/nodes-cli/rpc.ts @@ -1,10 +1,10 @@ import type { Command } from "commander"; -import type { NodeListNode, NodesRpcOpts } from "./types.js"; import { callGateway, randomIdempotencyKey } from "../../gateway/call.js"; import { resolveNodeIdFromCandidates } from "../../shared/node-match.js"; import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../../utils/message-channel.js"; import { withProgress } from "../progress.js"; import { parseNodeList, parsePairingList } from "./format.js"; +import type { NodeListNode, NodesRpcOpts } from "./types.js"; export const nodesCallOpts = (cmd: Command, defaults?: { timeoutMs?: number }) => cmd diff --git a/src/cli/plugin-registry.ts b/src/cli/plugin-registry.ts index d66103d525..22d7ce61ab 100644 --- a/src/cli/plugin-registry.ts +++ b/src/cli/plugin-registry.ts @@ -1,9 +1,9 @@ -import type { PluginLogger } from "../plugins/types.js"; import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js"; import { loadConfig } from "../config/config.js"; import { createSubsystemLogger } from "../logging.js"; import { loadOpenClawPlugins } from "../plugins/loader.js"; import { getActivePluginRegistry } from "../plugins/runtime.js"; +import type { PluginLogger } from "../plugins/types.js"; const log = createSubsystemLogger("plugins"); let pluginRegistryLoaded = false; diff --git a/src/cli/plugins-cli.ts b/src/cli/plugins-cli.ts index c7d884c68b..bca81b40af 100644 --- a/src/cli/plugins-cli.ts +++ b/src/cli/plugins-cli.ts @@ -1,15 +1,15 @@ -import type { Command } from "commander"; import fs from "node:fs"; import os from "node:os"; import path from "node:path"; +import type { Command } from "commander"; import type { OpenClawConfig } from "../config/config.js"; -import type { PluginRecord } from "../plugins/registry.js"; import { loadConfig, writeConfigFile } from "../config/config.js"; import { resolveStateDir } from "../config/paths.js"; import { resolveArchiveKind } from "../infra/archive.js"; import { installPluginFromNpmSpec, installPluginFromPath } from "../plugins/install.js"; import { recordPluginInstall } from "../plugins/installs.js"; import { clearPluginManifestRegistryCache } from "../plugins/manifest-registry.js"; +import type { PluginRecord } from "../plugins/registry.js"; import { applyExclusiveSlotSelection } from "../plugins/slots.js"; import { resolvePluginSourceRoots, formatPluginSourceForTable } from "../plugins/source-display.js"; import { buildPluginStatusReport } from "../plugins/status.js"; diff --git a/src/cli/program/command-registry.ts b/src/cli/program/command-registry.ts index a09ed87f11..d829f205b0 100644 --- a/src/cli/program/command-registry.ts +++ b/src/cli/program/command-registry.ts @@ -1,7 +1,7 @@ import type { Command } from "commander"; -import type { ProgramContext } from "./context.js"; import { getPrimaryCommand, hasHelpOrVersion } from "../argv.js"; import { reparseProgramFromActionArgs } from "./action-reparse.js"; +import type { ProgramContext } from "./context.js"; import { registerSubCliCommands } from "./register.subclis.js"; type CommandRegisterParams = { diff --git a/src/cli/program/config-guard.ts b/src/cli/program/config-guard.ts index da8d3da73e..10ba913c12 100644 --- a/src/cli/program/config-guard.ts +++ b/src/cli/program/config-guard.ts @@ -1,6 +1,6 @@ -import type { RuntimeEnv } from "../../runtime.js"; import { loadAndMaybeMigrateDoctorConfig } from "../../commands/doctor-config-flow.js"; import { readConfigFileSnapshot } from "../../config/config.js"; +import type { RuntimeEnv } from "../../runtime.js"; import { colorize, isRich, theme } from "../../terminal/theme.js"; import { shortenHomePath } from "../../utils.js"; import { shouldMigrateStateFromPath } from "../argv.js"; diff --git a/src/cli/program/help.ts b/src/cli/program/help.ts index 57fb99e202..8769a08db9 100644 --- a/src/cli/program/help.ts +++ b/src/cli/program/help.ts @@ -1,11 +1,11 @@ import type { Command } from "commander"; -import type { ProgramContext } from "./context.js"; import { formatDocsLink } from "../../terminal/links.js"; import { isRich, theme } from "../../terminal/theme.js"; import { escapeRegExp } from "../../utils.js"; import { formatCliBannerLine, hasEmittedCliBanner } from "../banner.js"; import { replaceCliName, resolveCliName } from "../cli-name.js"; import { getCoreCliCommandsWithSubcommands } from "./command-registry.js"; +import type { ProgramContext } from "./context.js"; import { getSubCliCommandsWithSubcommands } from "./register.subclis.js"; const CLI_NAME = resolveCliName(); diff --git a/src/cli/program/message/register.broadcast.ts b/src/cli/program/message/register.broadcast.ts index 9550571f5f..bfdd1ebeeb 100644 --- a/src/cli/program/message/register.broadcast.ts +++ b/src/cli/program/message/register.broadcast.ts @@ -1,6 +1,6 @@ import type { Command } from "commander"; -import type { MessageCliHelpers } from "./helpers.js"; import { CHANNEL_TARGETS_DESCRIPTION } from "../../../infra/outbound/channel-target.js"; +import type { MessageCliHelpers } from "./helpers.js"; export function registerMessageBroadcastCommand(message: Command, helpers: MessageCliHelpers) { helpers diff --git a/src/cli/program/message/register.emoji-sticker.ts b/src/cli/program/message/register.emoji-sticker.ts index dd2e04eac0..221a386585 100644 --- a/src/cli/program/message/register.emoji-sticker.ts +++ b/src/cli/program/message/register.emoji-sticker.ts @@ -1,6 +1,6 @@ import type { Command } from "commander"; -import type { MessageCliHelpers } from "./helpers.js"; import { collectOption } from "../helpers.js"; +import type { MessageCliHelpers } from "./helpers.js"; export function registerMessageEmojiCommands(message: Command, helpers: MessageCliHelpers) { const emoji = message.command("emoji").description("Emoji actions"); diff --git a/src/cli/program/message/register.permissions-search.ts b/src/cli/program/message/register.permissions-search.ts index 75b8882fbf..4aeb7103ed 100644 --- a/src/cli/program/message/register.permissions-search.ts +++ b/src/cli/program/message/register.permissions-search.ts @@ -1,6 +1,6 @@ import type { Command } from "commander"; -import type { MessageCliHelpers } from "./helpers.js"; import { collectOption } from "../helpers.js"; +import type { MessageCliHelpers } from "./helpers.js"; export function registerMessagePermissionsCommand(message: Command, helpers: MessageCliHelpers) { helpers diff --git a/src/cli/program/message/register.poll.ts b/src/cli/program/message/register.poll.ts index e45fa3b86c..fcae239a50 100644 --- a/src/cli/program/message/register.poll.ts +++ b/src/cli/program/message/register.poll.ts @@ -1,6 +1,6 @@ import type { Command } from "commander"; -import type { MessageCliHelpers } from "./helpers.js"; import { collectOption } from "../helpers.js"; +import type { MessageCliHelpers } from "./helpers.js"; export function registerMessagePollCommand(message: Command, helpers: MessageCliHelpers) { helpers diff --git a/src/cli/program/register.message.ts b/src/cli/program/register.message.ts index 7ba0bace2e..0c79f83be9 100644 --- a/src/cli/program/register.message.ts +++ b/src/cli/program/register.message.ts @@ -1,8 +1,8 @@ import type { Command } from "commander"; -import type { ProgramContext } from "./context.js"; import { formatDocsLink } from "../../terminal/links.js"; import { theme } from "../../terminal/theme.js"; import { formatHelpExamples } from "../help-format.js"; +import type { ProgramContext } from "./context.js"; import { createMessageCliHelpers } from "./message/helpers.js"; import { registerMessageBroadcastCommand } from "./message/register.broadcast.js"; import { registerMessageDiscordAdminCommands } from "./message/register.discord-admin.js"; diff --git a/src/cli/program/register.onboard.ts b/src/cli/program/register.onboard.ts index f62d6eb0b9..2d6ec567ac 100644 --- a/src/cli/program/register.onboard.ts +++ b/src/cli/program/register.onboard.ts @@ -1,5 +1,7 @@ import type { Command } from "commander"; +import { formatAuthChoiceChoicesForCli } from "../../commands/auth-choice-options.js"; import type { GatewayDaemonRuntime } from "../../commands/daemon-runtime.js"; +import { ONBOARD_PROVIDER_AUTH_FLAGS } from "../../commands/onboard-provider-auth-flags.js"; import type { AuthChoice, GatewayAuthChoice, @@ -7,8 +9,6 @@ import type { NodeManagerChoice, TailscaleMode, } from "../../commands/onboard-types.js"; -import { formatAuthChoiceChoicesForCli } from "../../commands/auth-choice-options.js"; -import { ONBOARD_PROVIDER_AUTH_FLAGS } from "../../commands/onboard-provider-auth-flags.js"; import { onboardCommand } from "../../commands/onboard.js"; import { defaultRuntime } from "../../runtime.js"; import { formatDocsLink } from "../../terminal/links.js"; diff --git a/src/cli/skills-cli.e2e.test.ts b/src/cli/skills-cli.e2e.test.ts index 51b1640af1..2c4d7f12f3 100644 --- a/src/cli/skills-cli.e2e.test.ts +++ b/src/cli/skills-cli.e2e.test.ts @@ -2,8 +2,8 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import { afterAll, beforeAll, describe, expect, it } from "vitest"; -import type { SkillEntry } from "../agents/skills.js"; import { buildWorkspaceSkillStatus } from "../agents/skills-status.js"; +import type { SkillEntry } from "../agents/skills.js"; import { captureEnv } from "../test-utils/env.js"; import { formatSkillInfo, formatSkillsCheck, formatSkillsList } from "./skills-cli.format.js"; diff --git a/src/cli/system-cli.ts b/src/cli/system-cli.ts index b4c92e98ad..653d842b79 100644 --- a/src/cli/system-cli.ts +++ b/src/cli/system-cli.ts @@ -1,9 +1,9 @@ import type { Command } from "commander"; -import type { GatewayRpcOpts } from "./gateway-rpc.js"; import { danger } from "../globals.js"; import { defaultRuntime } from "../runtime.js"; import { formatDocsLink } from "../terminal/links.js"; import { theme } from "../terminal/theme.js"; +import type { GatewayRpcOpts } from "./gateway-rpc.js"; import { addGatewayClientOptions, callGatewayFromCli } from "./gateway-rpc.js"; type SystemEventOpts = GatewayRpcOpts & { text?: string; mode?: string; json?: boolean }; diff --git a/src/cli/update-cli/progress.ts b/src/cli/update-cli/progress.ts index cdd0d20a21..1fd2f3d204 100644 --- a/src/cli/update-cli/progress.ts +++ b/src/cli/update-cli/progress.ts @@ -1,13 +1,13 @@ import { spinner } from "@clack/prompts"; +import { formatDurationPrecise } from "../../infra/format-time/format-duration.ts"; import type { UpdateRunResult, UpdateStepInfo, UpdateStepProgress, } from "../../infra/update-runner.js"; -import type { UpdateCommandOptions } from "./shared.js"; -import { formatDurationPrecise } from "../../infra/format-time/format-duration.ts"; import { defaultRuntime } from "../../runtime.js"; import { theme } from "../../terminal/theme.js"; +import type { UpdateCommandOptions } from "./shared.js"; const STEP_LABELS: Record = { "clean check": "Working directory is clean", diff --git a/src/cli/update-cli/shared.ts b/src/cli/update-cli/shared.ts index b137248f0b..f7956fb328 100644 --- a/src/cli/update-cli/shared.ts +++ b/src/cli/update-cli/shared.ts @@ -2,7 +2,6 @@ import { spawnSync } from "node:child_process"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; -import type { UpdateStepProgress, UpdateStepResult } from "../../infra/update-runner.js"; import { resolveStateDir } from "../../config/paths.js"; import { resolveOpenClawPackageRoot } from "../../infra/openclaw-root.js"; import { readPackageName, readPackageVersion } from "../../infra/package-json.js"; @@ -14,6 +13,7 @@ import { detectGlobalInstallManagerForRoot, type GlobalInstallManager, } from "../../infra/update-global.js"; +import type { UpdateStepProgress, UpdateStepResult } from "../../infra/update-runner.js"; import { runCommandWithTimeout } from "../../process/exec.js"; import { defaultRuntime } from "../../runtime.js"; import { theme } from "../../terminal/theme.js"; diff --git a/src/cli/update-cli/update-command.ts b/src/cli/update-cli/update-command.ts index 0c85fadbcc..f9293ad9bf 100644 --- a/src/cli/update-cli/update-command.ts +++ b/src/cli/update-cli/update-command.ts @@ -1,5 +1,5 @@ -import { confirm, isCancel } from "@clack/prompts"; import path from "node:path"; +import { confirm, isCancel } from "@clack/prompts"; import { checkShellCompletionStatus, ensureCompletionCacheExists, diff --git a/src/commands/agent-via-gateway.e2e.test.ts b/src/commands/agent-via-gateway.e2e.test.ts index 0d4ba93455..2bf21697ba 100644 --- a/src/commands/agent-via-gateway.e2e.test.ts +++ b/src/commands/agent-via-gateway.e2e.test.ts @@ -12,9 +12,9 @@ vi.mock("./agent.js", () => ({ })); import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; import * as configModule from "../config/config.js"; import { callGateway } from "../gateway/call.js"; +import type { RuntimeEnv } from "../runtime.js"; import { agentCliCommand } from "./agent-via-gateway.js"; import { agentCommand } from "./agent.js"; diff --git a/src/commands/agent-via-gateway.ts b/src/commands/agent-via-gateway.ts index a4a0d6e042..cc0c05850c 100644 --- a/src/commands/agent-via-gateway.ts +++ b/src/commands/agent-via-gateway.ts @@ -1,12 +1,12 @@ -import type { CliDeps } from "../cli/deps.js"; -import type { RuntimeEnv } from "../runtime.js"; import { listAgentIds } from "../agents/agent-scope.js"; import { DEFAULT_CHAT_CHANNEL } from "../channels/registry.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { CliDeps } from "../cli/deps.js"; import { withProgress } from "../cli/progress.js"; import { loadConfig } from "../config/config.js"; import { callGateway, randomIdempotencyKey } from "../gateway/call.js"; import { normalizeAgentId } from "../routing/session-key.js"; +import type { RuntimeEnv } from "../runtime.js"; import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES, diff --git a/src/commands/agent.e2e.test.ts b/src/commands/agent.e2e.test.ts index 46ce78da9a..86e2b11907 100644 --- a/src/commands/agent.e2e.test.ts +++ b/src/commands/agent.e2e.test.ts @@ -12,16 +12,16 @@ vi.mock("../agents/model-catalog.js", () => ({ loadModelCatalog: vi.fn(), })); -import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; import { telegramPlugin } from "../../extensions/telegram/src/channel.js"; import { setTelegramRuntime } from "../../extensions/telegram/src/runtime.js"; import { loadModelCatalog } from "../agents/model-catalog.js"; import { runEmbeddedPiAgent } from "../agents/pi-embedded.js"; +import type { OpenClawConfig } from "../config/config.js"; import * as configModule from "../config/config.js"; import { emitAgentEvent, onAgentEvent } from "../infra/agent-events.js"; import { setActivePluginRegistry } from "../plugins/runtime.js"; import { createPluginRuntime } from "../plugins/runtime/index.js"; +import type { RuntimeEnv } from "../runtime.js"; import { createTestRegistry } from "../test-utils/channel-plugins.js"; import { agentCommand } from "./agent.js"; diff --git a/src/commands/agent.ts b/src/commands/agent.ts index e8de4b4d86..38ba29edc2 100644 --- a/src/commands/agent.ts +++ b/src/commands/agent.ts @@ -1,4 +1,3 @@ -import type { AgentCommandOpts } from "./agent/types.js"; import { listAgentIds, resolveAgentDir, @@ -62,6 +61,7 @@ import { deliverAgentCommandResult } from "./agent/delivery.js"; import { resolveAgentRunContext } from "./agent/run-context.js"; import { updateSessionStoreAfterAgentRun } from "./agent/session-store.js"; import { resolveSession } from "./agent/session.js"; +import type { AgentCommandOpts } from "./agent/types.js"; type PersistSessionEntryParams = { sessionStore: Record; diff --git a/src/commands/agent/delivery.ts b/src/commands/agent/delivery.ts index 0fe99b295a..d657295d05 100644 --- a/src/commands/agent/delivery.ts +++ b/src/commands/agent/delivery.ts @@ -1,11 +1,9 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { SessionEntry } from "../../config/sessions.js"; -import type { RuntimeEnv } from "../../runtime.js"; -import type { AgentCommandOpts } from "./types.js"; import { resolveSessionAgentId } from "../../agents/agent-scope.js"; import { AGENT_LANE_NESTED } from "../../agents/lanes.js"; import { getChannelPlugin, normalizeChannelId } from "../../channels/plugins/index.js"; import { createOutboundSendDeps, type CliDeps } from "../../cli/outbound-send-deps.js"; +import type { OpenClawConfig } from "../../config/config.js"; +import type { SessionEntry } from "../../config/sessions.js"; import { resolveAgentDeliveryPlan, resolveAgentOutboundTarget, @@ -18,7 +16,9 @@ import { normalizeOutboundPayloads, normalizeOutboundPayloadsForJson, } from "../../infra/outbound/payloads.js"; +import type { RuntimeEnv } from "../../runtime.js"; import { isInternalMessageChannel } from "../../utils/message-channel.js"; +import type { AgentCommandOpts } from "./types.js"; type RunResult = Awaited< ReturnType<(typeof import("../../agents/pi-embedded.js"))["runEmbeddedPiAgent"]> diff --git a/src/commands/agent/run-context.ts b/src/commands/agent/run-context.ts index cf8dacd711..b9d3c3a69d 100644 --- a/src/commands/agent/run-context.ts +++ b/src/commands/agent/run-context.ts @@ -1,6 +1,6 @@ -import type { AgentCommandOpts, AgentRunContext } from "./types.js"; import { normalizeAccountId } from "../../utils/account-id.js"; import { resolveMessageChannel } from "../../utils/message-channel.js"; +import type { AgentCommandOpts, AgentRunContext } from "./types.js"; export function resolveAgentRunContext(opts: AgentCommandOpts): AgentRunContext { const merged: AgentRunContext = opts.runContext ? { ...opts.runContext } : {}; diff --git a/src/commands/agent/session-store.ts b/src/commands/agent/session-store.ts index 4b4a27fd6a..149ca32f03 100644 --- a/src/commands/agent/session-store.ts +++ b/src/commands/agent/session-store.ts @@ -1,9 +1,9 @@ -import type { OpenClawConfig } from "../../config/config.js"; import { setCliSessionId } from "../../agents/cli-session.js"; import { lookupContextTokens } from "../../agents/context.js"; import { DEFAULT_CONTEXT_TOKENS } from "../../agents/defaults.js"; import { isCliProvider } from "../../agents/model-selection.js"; import { deriveSessionTotalTokens, hasNonzeroUsage } from "../../agents/usage.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { type SessionEntry, updateSessionStore } from "../../config/sessions.js"; type RunResult = Awaited< diff --git a/src/commands/agent/session.ts b/src/commands/agent/session.ts index ec29f1798a..62600448af 100644 --- a/src/commands/agent/session.ts +++ b/src/commands/agent/session.ts @@ -1,13 +1,13 @@ import crypto from "node:crypto"; -import type { MsgContext } from "../../auto-reply/templating.js"; -import type { OpenClawConfig } from "../../config/config.js"; import { listAgentIds } from "../../agents/agent-scope.js"; +import type { MsgContext } from "../../auto-reply/templating.js"; import { normalizeThinkLevel, normalizeVerboseLevel, type ThinkLevel, type VerboseLevel, } from "../../auto-reply/thinking.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { evaluateSessionFreshness, loadSessionStore, diff --git a/src/commands/agents.bindings.ts b/src/commands/agents.bindings.ts index 31d0f4bce1..f0eaf959e1 100644 --- a/src/commands/agents.bindings.ts +++ b/src/commands/agents.bindings.ts @@ -1,10 +1,10 @@ +import { resolveChannelDefaultAccountId } from "../channels/plugins/helpers.js"; +import { getChannelPlugin, normalizeChannelId } from "../channels/plugins/index.js"; import type { ChannelId } from "../channels/plugins/types.js"; import type { OpenClawConfig } from "../config/config.js"; import type { AgentBinding } from "../config/types.js"; -import type { ChannelChoice } from "./onboard-types.js"; -import { resolveChannelDefaultAccountId } from "../channels/plugins/helpers.js"; -import { getChannelPlugin, normalizeChannelId } from "../channels/plugins/index.js"; import { DEFAULT_ACCOUNT_ID, normalizeAgentId } from "../routing/session-key.js"; +import type { ChannelChoice } from "./onboard-types.js"; function bindingMatchKey(match: AgentBinding["match"]) { const accountId = match.accountId?.trim() || DEFAULT_ACCOUNT_ID; diff --git a/src/commands/agents.commands.add.ts b/src/commands/agents.commands.add.ts index ef6b42077f..807ecca0b2 100644 --- a/src/commands/agents.commands.add.ts +++ b/src/commands/agents.commands.add.ts @@ -1,7 +1,5 @@ import fs from "node:fs/promises"; import path from "node:path"; -import type { RuntimeEnv } from "../runtime.js"; -import type { ChannelChoice } from "./onboard-types.js"; import { resolveAgentDir, resolveAgentWorkspaceDir, @@ -12,6 +10,7 @@ import { resolveAuthStorePath } from "../agents/auth-profiles/paths.js"; import { writeConfigFile } from "../config/config.js"; import { logConfigUpdated } from "../config/logging.js"; import { DEFAULT_AGENT_ID, normalizeAgentId } from "../routing/session-key.js"; +import type { RuntimeEnv } from "../runtime.js"; import { defaultRuntime } from "../runtime.js"; import { resolveUserPath, shortenHomePath } from "../utils.js"; import { createClackPrompter } from "../wizard/clack-prompter.js"; @@ -28,6 +27,7 @@ import { promptAuthChoiceGrouped } from "./auth-choice-prompt.js"; import { applyAuthChoice, warnIfModelConfigLooksOff } from "./auth-choice.js"; import { setupChannels } from "./onboard-channels.js"; import { ensureWorkspaceAndSessions } from "./onboard-helpers.js"; +import type { ChannelChoice } from "./onboard-types.js"; type AgentsAddOptions = { name?: string; diff --git a/src/commands/agents.commands.delete.ts b/src/commands/agents.commands.delete.ts index 6d45834a4e..659d51f322 100644 --- a/src/commands/agents.commands.delete.ts +++ b/src/commands/agents.commands.delete.ts @@ -1,9 +1,9 @@ -import type { RuntimeEnv } from "../runtime.js"; import { resolveAgentDir, resolveAgentWorkspaceDir } from "../agents/agent-scope.js"; import { writeConfigFile } from "../config/config.js"; import { logConfigUpdated } from "../config/logging.js"; import { resolveSessionTranscriptsDirForAgent } from "../config/sessions.js"; import { DEFAULT_AGENT_ID, normalizeAgentId } from "../routing/session-key.js"; +import type { RuntimeEnv } from "../runtime.js"; import { defaultRuntime } from "../runtime.js"; import { createClackPrompter } from "../wizard/clack-prompter.js"; import { createQuietRuntime, requireValidConfig } from "./agents.command-shared.js"; diff --git a/src/commands/agents.commands.identity.ts b/src/commands/agents.commands.identity.ts index 2e150a405c..3d20507848 100644 --- a/src/commands/agents.commands.identity.ts +++ b/src/commands/agents.commands.identity.ts @@ -1,13 +1,13 @@ import fs from "node:fs/promises"; import path from "node:path"; -import type { IdentityConfig } from "../config/types.js"; -import type { RuntimeEnv } from "../runtime.js"; import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js"; import { identityHasValues, parseIdentityMarkdown } from "../agents/identity-file.js"; import { DEFAULT_IDENTITY_FILENAME } from "../agents/workspace.js"; import { writeConfigFile } from "../config/config.js"; import { logConfigUpdated } from "../config/logging.js"; +import type { IdentityConfig } from "../config/types.js"; import { normalizeAgentId } from "../routing/session-key.js"; +import type { RuntimeEnv } from "../runtime.js"; import { defaultRuntime } from "../runtime.js"; import { resolveUserPath, shortenHomePath } from "../utils.js"; import { requireValidConfig } from "./agents.command-shared.js"; diff --git a/src/commands/agents.commands.list.ts b/src/commands/agents.commands.list.ts index 3af388de41..cb3240f0dc 100644 --- a/src/commands/agents.commands.list.ts +++ b/src/commands/agents.commands.list.ts @@ -1,12 +1,12 @@ -import type { AgentBinding } from "../config/types.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { AgentSummary } from "./agents.config.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { AgentBinding } from "../config/types.js"; import { normalizeAgentId } from "../routing/session-key.js"; +import type { RuntimeEnv } from "../runtime.js"; import { defaultRuntime } from "../runtime.js"; import { shortenHomePath } from "../utils.js"; import { describeBinding } from "./agents.bindings.js"; import { requireValidConfig } from "./agents.command-shared.js"; +import type { AgentSummary } from "./agents.config.js"; import { buildAgentSummaries } from "./agents.config.js"; import { buildProviderStatusIndex, diff --git a/src/commands/agents.config.ts b/src/commands/agents.config.ts index fe0907c04c..5647ea990f 100644 --- a/src/commands/agents.config.ts +++ b/src/commands/agents.config.ts @@ -1,15 +1,15 @@ -import type { AgentIdentityFile } from "../agents/identity-file.js"; -import type { OpenClawConfig } from "../config/config.js"; import { resolveAgentDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, } from "../agents/agent-scope.js"; +import type { AgentIdentityFile } from "../agents/identity-file.js"; import { identityHasValues, loadAgentIdentityFromWorkspace, parseIdentityMarkdown as parseIdentityMarkdownFile, } from "../agents/identity-file.js"; +import type { OpenClawConfig } from "../config/config.js"; import { normalizeAgentId } from "../routing/session-key.js"; export type AgentSummary = { diff --git a/src/commands/agents.providers.ts b/src/commands/agents.providers.ts index 1309011966..0d53a62051 100644 --- a/src/commands/agents.providers.ts +++ b/src/commands/agents.providers.ts @@ -1,12 +1,12 @@ -import type { ChannelId } from "../channels/plugins/types.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { AgentBinding } from "../config/types.js"; import { resolveChannelDefaultAccountId } from "../channels/plugins/helpers.js"; import { getChannelPlugin, listChannelPlugins, normalizeChannelId, } from "../channels/plugins/index.js"; +import type { ChannelId } from "../channels/plugins/types.js"; +import type { OpenClawConfig } from "../config/config.js"; +import type { AgentBinding } from "../config/types.js"; import { DEFAULT_ACCOUNT_ID } from "../routing/session-key.js"; type ProviderAccountStatus = { diff --git a/src/commands/auth-choice-options.ts b/src/commands/auth-choice-options.ts index 424968dfda..e5269ab36b 100644 --- a/src/commands/auth-choice-options.ts +++ b/src/commands/auth-choice-options.ts @@ -1,6 +1,6 @@ import type { AuthProfileStore } from "../agents/auth-profiles.js"; -import type { AuthChoice, AuthChoiceGroupId } from "./onboard-types.js"; import { AUTH_CHOICE_LEGACY_ALIASES_FOR_CLI } from "./auth-choice-legacy.js"; +import type { AuthChoice, AuthChoiceGroupId } from "./onboard-types.js"; export type { AuthChoiceGroupId }; diff --git a/src/commands/auth-choice-prompt.ts b/src/commands/auth-choice-prompt.ts index 8eef15e079..35012b61a5 100644 --- a/src/commands/auth-choice-prompt.ts +++ b/src/commands/auth-choice-prompt.ts @@ -1,7 +1,7 @@ import type { AuthProfileStore } from "../agents/auth-profiles.js"; import type { WizardPrompter } from "../wizard/prompts.js"; -import type { AuthChoice } from "./onboard-types.js"; import { buildAuthChoiceGroups } from "./auth-choice-options.js"; +import type { AuthChoice } from "./onboard-types.js"; const BACK_VALUE = "__back"; diff --git a/src/commands/auth-choice.apply.anthropic.ts b/src/commands/auth-choice.apply.anthropic.ts index 6c37a0424a..666f6614d1 100644 --- a/src/commands/auth-choice.apply.anthropic.ts +++ b/src/commands/auth-choice.apply.anthropic.ts @@ -1,10 +1,10 @@ -import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { upsertAuthProfile } from "../agents/auth-profiles.js"; import { formatApiKeyPreview, normalizeApiKeyInput, validateApiKeyInput, } from "./auth-choice.api-key.js"; +import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { buildTokenProfileId, validateAnthropicSetupToken } from "./auth-token.js"; import { applyAuthProfileConfig, setAnthropicApiKey } from "./onboard-auth.js"; diff --git a/src/commands/auth-choice.apply.api-providers.ts b/src/commands/auth-choice.apply.api-providers.ts index 9761be6cf9..74fdc39613 100644 --- a/src/commands/auth-choice.apply.api-providers.ts +++ b/src/commands/auth-choice.apply.api-providers.ts @@ -1,4 +1,3 @@ -import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { ensureAuthProfileStore, resolveAuthProfileOrder } from "../agents/auth-profiles.js"; import { resolveEnvApiKey } from "../agents/model-auth.js"; import { @@ -7,6 +6,7 @@ import { validateApiKeyInput, } from "./auth-choice.api-key.js"; import { applyAuthChoiceHuggingface } from "./auth-choice.apply.huggingface.js"; +import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { applyAuthChoiceOpenRouter } from "./auth-choice.apply.openrouter.js"; import { applyDefaultModelChoice } from "./auth-choice.default-model.js"; import { diff --git a/src/commands/auth-choice.apply.github-copilot.ts b/src/commands/auth-choice.apply.github-copilot.ts index b31a5be5e7..cd67ae1cbd 100644 --- a/src/commands/auth-choice.apply.github-copilot.ts +++ b/src/commands/auth-choice.apply.github-copilot.ts @@ -1,5 +1,5 @@ -import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { githubCopilotLoginCommand } from "../providers/github-copilot-auth.js"; +import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { applyAuthProfileConfig } from "./onboard-auth.js"; export async function applyAuthChoiceGitHubCopilot( diff --git a/src/commands/auth-choice.apply.huggingface.ts b/src/commands/auth-choice.apply.huggingface.ts index 9358505c3e..c1210921b7 100644 --- a/src/commands/auth-choice.apply.huggingface.ts +++ b/src/commands/auth-choice.apply.huggingface.ts @@ -1,4 +1,3 @@ -import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { discoverHuggingfaceModels, isHuggingfacePolicyLocked, @@ -10,6 +9,7 @@ import { validateApiKeyInput, } from "./auth-choice.api-key.js"; import { createAuthChoiceAgentModelNoter } from "./auth-choice.apply-helpers.js"; +import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { applyDefaultModelChoice } from "./auth-choice.default-model.js"; import { ensureModelAllowlistEntry } from "./model-allowlist.js"; import { diff --git a/src/commands/auth-choice.apply.minimax.ts b/src/commands/auth-choice.apply.minimax.ts index f28d648c9c..044ba12054 100644 --- a/src/commands/auth-choice.apply.minimax.ts +++ b/src/commands/auth-choice.apply.minimax.ts @@ -1,10 +1,10 @@ -import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { resolveEnvApiKey } from "../agents/model-auth.js"; import { formatApiKeyPreview, normalizeApiKeyInput, validateApiKeyInput, } from "./auth-choice.api-key.js"; +import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { applyAuthChoicePluginProvider } from "./auth-choice.apply.plugin-provider.js"; import { applyDefaultModelChoice } from "./auth-choice.default-model.js"; import { diff --git a/src/commands/auth-choice.apply.openai.ts b/src/commands/auth-choice.apply.openai.ts index b71a20c4fd..db00f5d25a 100644 --- a/src/commands/auth-choice.apply.openai.ts +++ b/src/commands/auth-choice.apply.openai.ts @@ -1,4 +1,3 @@ -import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { resolveEnvApiKey } from "../agents/model-auth.js"; import { upsertSharedEnvVar } from "../infra/env-file.js"; import { @@ -6,6 +5,7 @@ import { normalizeApiKeyInput, validateApiKeyInput, } from "./auth-choice.api-key.js"; +import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { applyDefaultModelChoice } from "./auth-choice.default-model.js"; import { isRemoteEnvironment } from "./oauth-env.js"; import { applyAuthProfileConfig, writeOAuthCredentials } from "./onboard-auth.js"; diff --git a/src/commands/auth-choice.apply.openrouter.ts b/src/commands/auth-choice.apply.openrouter.ts index 9a805ec39f..5855941a6d 100644 --- a/src/commands/auth-choice.apply.openrouter.ts +++ b/src/commands/auth-choice.apply.openrouter.ts @@ -1,4 +1,3 @@ -import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { ensureAuthProfileStore, resolveAuthProfileOrder } from "../agents/auth-profiles.js"; import { resolveEnvApiKey } from "../agents/model-auth.js"; import { @@ -6,6 +5,7 @@ import { normalizeApiKeyInput, validateApiKeyInput, } from "./auth-choice.api-key.js"; +import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { applyDefaultModelChoice } from "./auth-choice.default-model.js"; import { applyAuthProfileConfig, diff --git a/src/commands/auth-choice.apply.plugin-provider.ts b/src/commands/auth-choice.apply.plugin-provider.ts index 5d17f677a5..e1568ca86b 100644 --- a/src/commands/auth-choice.apply.plugin-provider.ts +++ b/src/commands/auth-choice.apply.plugin-provider.ts @@ -1,4 +1,3 @@ -import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { resolveOpenClawAgentDir } from "../agents/agent-paths.js"; import { resolveDefaultAgentId, @@ -9,6 +8,7 @@ import { upsertAuthProfile } from "../agents/auth-profiles.js"; import { resolveDefaultAgentWorkspaceDir } from "../agents/workspace.js"; import { enablePluginInConfig } from "../plugins/enable.js"; import { resolvePluginProviders } from "../plugins/providers.js"; +import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { isRemoteEnvironment } from "./oauth-env.js"; import { createVpsAwareOAuthHandlers } from "./oauth-flow.js"; import { applyAuthProfileConfig } from "./onboard-auth.js"; diff --git a/src/commands/auth-choice.apply.ts b/src/commands/auth-choice.apply.ts index 73091aefd1..be07d07c55 100644 --- a/src/commands/auth-choice.apply.ts +++ b/src/commands/auth-choice.apply.ts @@ -1,7 +1,6 @@ import type { OpenClawConfig } from "../config/config.js"; import type { RuntimeEnv } from "../runtime.js"; import type { WizardPrompter } from "../wizard/prompts.js"; -import type { AuthChoice } from "./onboard-types.js"; import { applyAuthChoiceAnthropic } from "./auth-choice.apply.anthropic.js"; import { applyAuthChoiceApiProviders } from "./auth-choice.apply.api-providers.js"; import { applyAuthChoiceCopilotProxy } from "./auth-choice.apply.copilot-proxy.js"; @@ -14,6 +13,7 @@ import { applyAuthChoiceOpenAI } from "./auth-choice.apply.openai.js"; import { applyAuthChoiceQwenPortal } from "./auth-choice.apply.qwen-portal.js"; import { applyAuthChoiceVllm } from "./auth-choice.apply.vllm.js"; import { applyAuthChoiceXAI } from "./auth-choice.apply.xai.js"; +import type { AuthChoice } from "./onboard-types.js"; export type ApplyAuthChoiceParams = { authChoice: AuthChoice; diff --git a/src/commands/auth-choice.apply.xai.ts b/src/commands/auth-choice.apply.xai.ts index df287a732e..d925dc3872 100644 --- a/src/commands/auth-choice.apply.xai.ts +++ b/src/commands/auth-choice.apply.xai.ts @@ -1,4 +1,3 @@ -import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { resolveEnvApiKey } from "../agents/model-auth.js"; import { formatApiKeyPreview, @@ -6,6 +5,7 @@ import { validateApiKeyInput, } from "./auth-choice.api-key.js"; import { createAuthChoiceAgentModelNoter } from "./auth-choice.apply-helpers.js"; +import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { applyDefaultModelChoice } from "./auth-choice.default-model.js"; import { applyAuthProfileConfig, diff --git a/src/commands/auth-choice.e2e.test.ts b/src/commands/auth-choice.e2e.test.ts index d4014cf0e3..c7e6b19fdb 100644 --- a/src/commands/auth-choice.e2e.test.ts +++ b/src/commands/auth-choice.e2e.test.ts @@ -1,13 +1,13 @@ import fs from "node:fs/promises"; import { afterEach, describe, expect, it, vi } from "vitest"; import type { WizardPrompter } from "../wizard/prompts.js"; -import type { AuthChoice } from "./onboard-types.js"; import { applyAuthChoice, resolvePreferredProviderForAuthChoice } from "./auth-choice.js"; import { MINIMAX_CN_API_BASE_URL, ZAI_CODING_CN_BASE_URL, ZAI_CODING_GLOBAL_BASE_URL, } from "./onboard-auth.js"; +import type { AuthChoice } from "./onboard-types.js"; import { authProfilePathForAgent, createAuthTestLifecycle, diff --git a/src/commands/auth-choice.model-check.ts b/src/commands/auth-choice.model-check.ts index 378a6a9fd8..b1579ea348 100644 --- a/src/commands/auth-choice.model-check.ts +++ b/src/commands/auth-choice.model-check.ts @@ -1,11 +1,11 @@ -import type { OpenClawConfig } from "../config/config.js"; -import type { WizardPrompter } from "../wizard/prompts.js"; import { resolveAgentModelPrimary } from "../agents/agent-scope.js"; import { ensureAuthProfileStore, listProfilesForProvider } from "../agents/auth-profiles.js"; import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "../agents/defaults.js"; import { getCustomProviderApiKey, resolveEnvApiKey } from "../agents/model-auth.js"; import { loadModelCatalog } from "../agents/model-catalog.js"; import { resolveConfiguredModelRef } from "../agents/model-selection.js"; +import type { OpenClawConfig } from "../config/config.js"; +import type { WizardPrompter } from "../wizard/prompts.js"; import { OPENAI_CODEX_DEFAULT_MODEL } from "./openai-codex-model-default.js"; export async function warnIfModelConfigLooksOff( diff --git a/src/commands/channels/add-mutators.ts b/src/commands/channels/add-mutators.ts index d96f6e3215..cb2256bd5a 100644 --- a/src/commands/channels/add-mutators.ts +++ b/src/commands/channels/add-mutators.ts @@ -1,6 +1,6 @@ +import { getChannelPlugin } from "../../channels/plugins/index.js"; import type { ChannelId, ChannelSetupInput } from "../../channels/plugins/types.js"; import type { OpenClawConfig } from "../../config/config.js"; -import { getChannelPlugin } from "../../channels/plugins/index.js"; import { normalizeAccountId } from "../../routing/session-key.js"; type ChatChannel = ChannelId; diff --git a/src/commands/channels/add.ts b/src/commands/channels/add.ts index c086433be5..a23fb2428e 100644 --- a/src/commands/channels/add.ts +++ b/src/commands/channels/add.ts @@ -1,8 +1,7 @@ -import type { ChannelId, ChannelSetupInput } from "../../channels/plugins/types.js"; -import type { ChannelChoice } from "../onboard-types.js"; import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../../agents/agent-scope.js"; import { listChannelPluginCatalogEntries } from "../../channels/plugins/catalog.js"; import { getChannelPlugin, normalizeChannelId } from "../../channels/plugins/index.js"; +import type { ChannelId, ChannelSetupInput } from "../../channels/plugins/types.js"; import { writeConfigFile, type OpenClawConfig } from "../../config/config.js"; import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../../routing/session-key.js"; import { defaultRuntime, type RuntimeEnv } from "../../runtime.js"; @@ -10,6 +9,7 @@ import { resolveTelegramAccount } from "../../telegram/accounts.js"; import { deleteTelegramUpdateOffset } from "../../telegram/update-offset-store.js"; import { createClackPrompter } from "../../wizard/clack-prompter.js"; import { setupChannels } from "../onboard-channels.js"; +import type { ChannelChoice } from "../onboard-types.js"; import { ensureOnboardingPluginInstalled, reloadOnboardingPluginRegistry, diff --git a/src/commands/channels/capabilities.e2e.test.ts b/src/commands/channels/capabilities.e2e.test.ts index 0112a62e7d..b66763213e 100644 --- a/src/commands/channels/capabilities.e2e.test.ts +++ b/src/commands/channels/capabilities.e2e.test.ts @@ -1,8 +1,8 @@ process.env.NO_COLOR = "1"; import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { ChannelPlugin } from "../../channels/plugins/types.js"; import { getChannelPlugin, listChannelPlugins } from "../../channels/plugins/index.js"; +import type { ChannelPlugin } from "../../channels/plugins/types.js"; import { fetchSlackScopes } from "../../slack/scopes.js"; import { channelsCapabilitiesCommand } from "./capabilities.js"; diff --git a/src/commands/channels/capabilities.ts b/src/commands/channels/capabilities.ts index 86df733372..f311b70e4c 100644 --- a/src/commands/channels/capabilities.ts +++ b/src/commands/channels/capabilities.ts @@ -1,7 +1,7 @@ -import type { ChannelCapabilities, ChannelPlugin } from "../../channels/plugins/types.js"; -import type { OpenClawConfig } from "../../config/config.js"; import { resolveChannelDefaultAccountId } from "../../channels/plugins/helpers.js"; import { getChannelPlugin, listChannelPlugins } from "../../channels/plugins/index.js"; +import type { ChannelCapabilities, ChannelPlugin } from "../../channels/plugins/types.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { fetchChannelPermissionsDiscord } from "../../discord/send.js"; import { parseDiscordTarget } from "../../discord/targets.js"; import { danger } from "../../globals.js"; diff --git a/src/commands/channels/list.ts b/src/commands/channels/list.ts index 5c589479b8..06caefb3d9 100644 --- a/src/commands/channels/list.ts +++ b/src/commands/channels/list.ts @@ -1,7 +1,7 @@ -import type { ChannelAccountSnapshot, ChannelPlugin } from "../../channels/plugins/types.js"; import { loadAuthProfileStore } from "../../agents/auth-profiles.js"; import { listChannelPlugins } from "../../channels/plugins/index.js"; import { buildChannelAccountSnapshot } from "../../channels/plugins/status.js"; +import type { ChannelAccountSnapshot, ChannelPlugin } from "../../channels/plugins/types.js"; import { withProgress } from "../../cli/progress.js"; import { formatUsageReportLines, loadProviderUsageSummary } from "../../infra/provider-usage.js"; import { defaultRuntime, type RuntimeEnv } from "../../runtime.js"; diff --git a/src/commands/channels/resolve.ts b/src/commands/channels/resolve.ts index 0891a56ef5..8eedbcde03 100644 --- a/src/commands/channels/resolve.ts +++ b/src/commands/channels/resolve.ts @@ -1,9 +1,9 @@ -import type { ChannelResolveKind, ChannelResolveResult } from "../../channels/plugins/types.js"; -import type { RuntimeEnv } from "../../runtime.js"; import { getChannelPlugin } from "../../channels/plugins/index.js"; +import type { ChannelResolveKind, ChannelResolveResult } from "../../channels/plugins/types.js"; import { loadConfig } from "../../config/config.js"; import { danger } from "../../globals.js"; import { resolveMessageChannelSelection } from "../../infra/outbound/channel-selection.js"; +import type { RuntimeEnv } from "../../runtime.js"; export type ChannelsResolveOptions = { channel?: string; diff --git a/src/commands/channels/shared.ts b/src/commands/channels/shared.ts index 8c5331e4ad..a76d6dc0f5 100644 --- a/src/commands/channels/shared.ts +++ b/src/commands/channels/shared.ts @@ -1,5 +1,5 @@ -import type { OpenClawConfig } from "../../config/config.js"; import { type ChannelId, getChannelPlugin } from "../../channels/plugins/index.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { DEFAULT_ACCOUNT_ID } from "../../routing/session-key.js"; import { defaultRuntime, type RuntimeEnv } from "../../runtime.js"; import { requireValidConfigSnapshot } from "../config-validation.js"; diff --git a/src/commands/channels/status.ts b/src/commands/channels/status.ts index 3efb6cc0f7..882b08d4ca 100644 --- a/src/commands/channels/status.ts +++ b/src/commands/channels/status.ts @@ -1,6 +1,6 @@ -import type { ChannelAccountSnapshot } from "../../channels/plugins/types.js"; import { listChannelPlugins } from "../../channels/plugins/index.js"; import { buildChannelAccountSnapshot } from "../../channels/plugins/status.js"; +import type { ChannelAccountSnapshot } from "../../channels/plugins/types.js"; import { formatCliCommand } from "../../cli/command-format.js"; import { withProgress } from "../../cli/progress.js"; import { type OpenClawConfig, readConfigFileSnapshot } from "../../config/config.js"; diff --git a/src/commands/chutes-oauth.ts b/src/commands/chutes-oauth.ts index e979907931..a33727a13d 100644 --- a/src/commands/chutes-oauth.ts +++ b/src/commands/chutes-oauth.ts @@ -1,6 +1,6 @@ -import type { OAuthCredentials } from "@mariozechner/pi-ai"; import { randomBytes } from "node:crypto"; import { createServer } from "node:http"; +import type { OAuthCredentials } from "@mariozechner/pi-ai"; import type { ChutesOAuthAppConfig } from "../agents/chutes-oauth.js"; import { CHUTES_AUTHORIZE_ENDPOINT, diff --git a/src/commands/cleanup-utils.ts b/src/commands/cleanup-utils.ts index edca7757da..b3dbe39cc5 100644 --- a/src/commands/cleanup-utils.ts +++ b/src/commands/cleanup-utils.ts @@ -1,8 +1,8 @@ import fs from "node:fs/promises"; import path from "node:path"; +import { resolveDefaultAgentWorkspaceDir } from "../agents/workspace.js"; import type { OpenClawConfig } from "../config/config.js"; import type { RuntimeEnv } from "../runtime.js"; -import { resolveDefaultAgentWorkspaceDir } from "../agents/workspace.js"; import { resolveHomeDir, resolveUserPath, shortenHomeInString } from "../utils.js"; export type RemovalResult = { diff --git a/src/commands/config-validation.ts b/src/commands/config-validation.ts index 6544b15fba..e8c7cef84c 100644 --- a/src/commands/config-validation.ts +++ b/src/commands/config-validation.ts @@ -1,6 +1,6 @@ -import type { RuntimeEnv } from "../runtime.js"; import { formatCliCommand } from "../cli/command-format.js"; import { type OpenClawConfig, readConfigFileSnapshot } from "../config/config.js"; +import type { RuntimeEnv } from "../runtime.js"; export async function requireValidConfigSnapshot( runtime: RuntimeEnv, diff --git a/src/commands/configure.channels.ts b/src/commands/configure.channels.ts index 8829b15738..7170fa88eb 100644 --- a/src/commands/configure.channels.ts +++ b/src/commands/configure.channels.ts @@ -1,8 +1,8 @@ -import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; import { getChannelPlugin, listChannelPlugins } from "../channels/plugins/index.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { OpenClawConfig } from "../config/config.js"; import { CONFIG_PATH } from "../config/config.js"; +import type { RuntimeEnv } from "../runtime.js"; import { note } from "../terminal/note.js"; import { shortenHomePath } from "../utils.js"; import { confirm, select } from "./configure.shared.js"; diff --git a/src/commands/configure.commands.ts b/src/commands/configure.commands.ts index 042562f57a..036c9845c4 100644 --- a/src/commands/configure.commands.ts +++ b/src/commands/configure.commands.ts @@ -1,6 +1,6 @@ import type { RuntimeEnv } from "../runtime.js"; -import type { WizardSection } from "./configure.shared.js"; import { defaultRuntime } from "../runtime.js"; +import type { WizardSection } from "./configure.shared.js"; import { CONFIGURE_WIZARD_SECTIONS, parseConfigureWizardSections } from "./configure.shared.js"; import { runConfigureWizard } from "./configure.wizard.js"; diff --git a/src/commands/configure.daemon.ts b/src/commands/configure.daemon.ts index b6cc796051..1e4c634aa8 100644 --- a/src/commands/configure.daemon.ts +++ b/src/commands/configure.daemon.ts @@ -1,7 +1,7 @@ -import type { RuntimeEnv } from "../runtime.js"; import { withProgress } from "../cli/progress.js"; import { loadConfig } from "../config/config.js"; import { resolveGatewayService } from "../daemon/service.js"; +import type { RuntimeEnv } from "../runtime.js"; import { note } from "../terminal/note.js"; import { confirm, select } from "./configure.shared.js"; import { buildGatewayInstallPlan, gatewayInstallErrorHint } from "./daemon-install-helpers.js"; diff --git a/src/commands/configure.gateway-auth.ts b/src/commands/configure.gateway-auth.ts index f46515001c..fa37d876f0 100644 --- a/src/commands/configure.gateway-auth.ts +++ b/src/commands/configure.gateway-auth.ts @@ -1,7 +1,7 @@ +import { ensureAuthProfileStore } from "../agents/auth-profiles.js"; import type { OpenClawConfig, GatewayAuthConfig } from "../config/config.js"; import type { RuntimeEnv } from "../runtime.js"; import type { WizardPrompter } from "../wizard/prompts.js"; -import { ensureAuthProfileStore } from "../agents/auth-profiles.js"; import { promptAuthChoiceGrouped } from "./auth-choice-prompt.js"; import { applyAuthChoice, resolvePreferredProviderForAuthChoice } from "./auth-choice.js"; import { diff --git a/src/commands/configure.gateway.ts b/src/commands/configure.gateway.ts index b0676f311a..2ce2c605b2 100644 --- a/src/commands/configure.gateway.ts +++ b/src/commands/configure.gateway.ts @@ -1,5 +1,4 @@ import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; import { resolveGatewayPort } from "../config/config.js"; import { TAILSCALE_DOCS_LINES, @@ -7,6 +6,7 @@ import { TAILSCALE_MISSING_BIN_NOTE_LINES, } from "../gateway/gateway-config-prompts.shared.js"; import { findTailscaleBinary } from "../infra/tailscale.js"; +import type { RuntimeEnv } from "../runtime.js"; import { validateIPv4AddressInput } from "../shared/net/ipv4.js"; import { note } from "../terminal/note.js"; import { buildGatewayAuthConfig } from "./configure.gateway-auth.js"; diff --git a/src/commands/configure.wizard.ts b/src/commands/configure.wizard.ts index 4961e0c5cf..fd00144f51 100644 --- a/src/commands/configure.wizard.ts +++ b/src/commands/configure.wizard.ts @@ -1,14 +1,9 @@ -import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { - ChannelsWizardMode, - ConfigureWizardParams, - WizardSection, -} from "./configure.shared.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { OpenClawConfig } from "../config/config.js"; import { readConfigFileSnapshot, resolveGatewayPort, writeConfigFile } from "../config/config.js"; import { logConfigUpdated } from "../config/logging.js"; import { ensureControlUiAssetsBuilt } from "../infra/control-ui-assets.js"; +import type { RuntimeEnv } from "../runtime.js"; import { defaultRuntime } from "../runtime.js"; import { note } from "../terminal/note.js"; import { resolveUserPath } from "../utils.js"; @@ -18,6 +13,11 @@ import { removeChannelConfigWizard } from "./configure.channels.js"; import { maybeInstallDaemon } from "./configure.daemon.js"; import { promptAuthConfig } from "./configure.gateway-auth.js"; import { promptGatewayConfig } from "./configure.gateway.js"; +import type { + ChannelsWizardMode, + ConfigureWizardParams, + WizardSection, +} from "./configure.shared.js"; import { CONFIGURE_SECTION_OPTIONS, confirm, diff --git a/src/commands/daemon-install-helpers.ts b/src/commands/daemon-install-helpers.ts index 6a6df53fa2..d121812374 100644 --- a/src/commands/daemon-install-helpers.ts +++ b/src/commands/daemon-install-helpers.ts @@ -1,7 +1,6 @@ -import type { OpenClawConfig } from "../config/types.js"; -import type { GatewayDaemonRuntime } from "./daemon-runtime.js"; import { formatCliCommand } from "../cli/command-format.js"; import { collectConfigEnvVars } from "../config/env-vars.js"; +import type { OpenClawConfig } from "../config/types.js"; import { resolveGatewayLaunchAgentLabel } from "../daemon/constants.js"; import { resolveGatewayProgramArguments } from "../daemon/program-args.js"; import { @@ -10,6 +9,7 @@ import { resolveSystemNodeInfo, } from "../daemon/runtime-paths.js"; import { buildServiceEnvironment } from "../daemon/service-env.js"; +import type { GatewayDaemonRuntime } from "./daemon-runtime.js"; type WarnFn = (message: string, title?: string) => void; diff --git a/src/commands/dashboard.ts b/src/commands/dashboard.ts index cc4a4de60c..8b95b540c6 100644 --- a/src/commands/dashboard.ts +++ b/src/commands/dashboard.ts @@ -1,6 +1,6 @@ -import type { RuntimeEnv } from "../runtime.js"; import { readConfigFileSnapshot, resolveGatewayPort } from "../config/config.js"; import { copyToClipboard } from "../infra/clipboard.js"; +import type { RuntimeEnv } from "../runtime.js"; import { defaultRuntime } from "../runtime.js"; import { detectBrowserOpenSupport, diff --git a/src/commands/docs.ts b/src/commands/docs.ts index 20509fc592..ba16670c3c 100644 --- a/src/commands/docs.ts +++ b/src/commands/docs.ts @@ -1,7 +1,7 @@ -import type { RuntimeEnv } from "../runtime.js"; import { hasBinary } from "../agents/skills.js"; import { formatCliCommand } from "../cli/command-format.js"; import { runCommandWithTimeout } from "../process/exec.js"; +import type { RuntimeEnv } from "../runtime.js"; import { formatDocsLink } from "../terminal/links.js"; import { isRich, theme } from "../terminal/theme.js"; diff --git a/src/commands/doctor-auth.deprecated-cli-profiles.e2e.test.ts b/src/commands/doctor-auth.deprecated-cli-profiles.e2e.test.ts index 170becdca0..705fc8bd43 100644 --- a/src/commands/doctor-auth.deprecated-cli-profiles.e2e.test.ts +++ b/src/commands/doctor-auth.deprecated-cli-profiles.e2e.test.ts @@ -2,8 +2,8 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import type { DoctorPrompter } from "./doctor-prompter.js"; import { maybeRemoveDeprecatedCliAuthProfiles } from "./doctor-auth.js"; +import type { DoctorPrompter } from "./doctor-prompter.js"; let originalAgentDir: string | undefined; let originalPiAgentDir: string | undefined; diff --git a/src/commands/doctor-auth.ts b/src/commands/doctor-auth.ts index c3eb7399ce..a12ab384a2 100644 --- a/src/commands/doctor-auth.ts +++ b/src/commands/doctor-auth.ts @@ -1,5 +1,3 @@ -import type { OpenClawConfig } from "../config/config.js"; -import type { DoctorPrompter } from "./doctor-prompter.js"; import { buildAuthHealthSummary, DEFAULT_OAUTH_WARN_MS, @@ -15,7 +13,9 @@ import { } from "../agents/auth-profiles.js"; import { updateAuthProfileStoreWithLock } from "../agents/auth-profiles/store.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { OpenClawConfig } from "../config/config.js"; import { note } from "../terminal/note.js"; +import type { DoctorPrompter } from "./doctor-prompter.js"; export async function maybeRepairAnthropicOAuthProfileId( cfg: OpenClawConfig, diff --git a/src/commands/doctor-completion.ts b/src/commands/doctor-completion.ts index 403b314aea..1e38c7701c 100644 --- a/src/commands/doctor-completion.ts +++ b/src/commands/doctor-completion.ts @@ -1,7 +1,5 @@ import { spawnSync } from "node:child_process"; import path from "node:path"; -import type { RuntimeEnv } from "../runtime.js"; -import type { DoctorPrompter } from "./doctor-prompter.js"; import { resolveCliName } from "../cli/cli-name.js"; import { completionCacheExists, @@ -12,7 +10,9 @@ import { usesSlowDynamicCompletion, } from "../cli/completion-cli.js"; import { resolveOpenClawPackageRoot } from "../infra/openclaw-root.js"; +import type { RuntimeEnv } from "../runtime.js"; import { note } from "../terminal/note.js"; +import type { DoctorPrompter } from "./doctor-prompter.js"; type CompletionShell = "zsh" | "bash" | "fish" | "powershell"; diff --git a/src/commands/doctor-config-flow.ts b/src/commands/doctor-config-flow.ts index 44ca303c6c..d79cf150a2 100644 --- a/src/commands/doctor-config-flow.ts +++ b/src/commands/doctor-config-flow.ts @@ -1,13 +1,12 @@ -import type { ZodIssue } from "zod"; import fs from "node:fs/promises"; import path from "node:path"; -import type { OpenClawConfig } from "../config/config.js"; -import type { DoctorOptions } from "./doctor-prompter.js"; +import type { ZodIssue } from "zod"; import { isNumericTelegramUserId, normalizeTelegramAllowFromEntry, } from "../channels/telegram/allow-from.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { OpenClawConfig } from "../config/config.js"; import { OpenClawSchema, CONFIG_PATH, @@ -19,6 +18,7 @@ import { listTelegramAccountIds, resolveTelegramAccount } from "../telegram/acco import { note } from "../terminal/note.js"; import { isRecord, resolveHomeDir } from "../utils.js"; import { normalizeLegacyConfigValues } from "./doctor-legacy-config.js"; +import type { DoctorOptions } from "./doctor-prompter.js"; import { autoMigrateLegacyStateDir } from "./doctor-state-migrations.js"; type UnrecognizedKeysIssue = ZodIssue & { diff --git a/src/commands/doctor-format.ts b/src/commands/doctor-format.ts index 25eee7d163..fea545e5b5 100644 --- a/src/commands/doctor-format.ts +++ b/src/commands/doctor-format.ts @@ -1,4 +1,3 @@ -import type { GatewayServiceRuntime } from "../daemon/service-runtime.js"; import { formatCliCommand } from "../cli/command-format.js"; import { resolveGatewayLaunchAgentLabel, @@ -7,6 +6,7 @@ import { } from "../daemon/constants.js"; import { resolveGatewayLogPaths } from "../daemon/launchd.js"; import { formatRuntimeStatus } from "../daemon/runtime-format.js"; +import type { GatewayServiceRuntime } from "../daemon/service-runtime.js"; import { isSystemdUnavailableDetail, renderSystemdUnavailableHints, diff --git a/src/commands/doctor-gateway-daemon-flow.ts b/src/commands/doctor-gateway-daemon-flow.ts index 4600794283..49f0e48e9f 100644 --- a/src/commands/doctor-gateway-daemon-flow.ts +++ b/src/commands/doctor-gateway-daemon-flow.ts @@ -1,7 +1,5 @@ -import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { DoctorOptions, DoctorPrompter } from "./doctor-prompter.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveGatewayPort } from "../config/config.js"; import { resolveGatewayLaunchAgentLabel, @@ -19,6 +17,7 @@ import { renderSystemdUnavailableHints } from "../daemon/systemd-hints.js"; import { isSystemdUserServiceAvailable } from "../daemon/systemd.js"; import { formatPortDiagnostics, inspectPortUsage } from "../infra/ports.js"; import { isWSL } from "../infra/wsl.js"; +import type { RuntimeEnv } from "../runtime.js"; import { note } from "../terminal/note.js"; import { sleep } from "../utils.js"; import { buildGatewayInstallPlan, gatewayInstallErrorHint } from "./daemon-install-helpers.js"; @@ -28,6 +27,7 @@ import { type GatewayDaemonRuntime, } from "./daemon-runtime.js"; import { buildGatewayRuntimeHints, formatGatewayRuntimeSummary } from "./doctor-format.js"; +import type { DoctorOptions, DoctorPrompter } from "./doctor-prompter.js"; import { formatHealthCheckFailure } from "./health-format.js"; import { healthCommand } from "./health.js"; diff --git a/src/commands/doctor-gateway-health.ts b/src/commands/doctor-gateway-health.ts index e728f67a7f..bf3400f646 100644 --- a/src/commands/doctor-gateway-health.ts +++ b/src/commands/doctor-gateway-health.ts @@ -1,7 +1,7 @@ import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; import { buildGatewayConnectionDetails, callGateway } from "../gateway/call.js"; import { collectChannelStatusIssues } from "../infra/channels-status-issues.js"; +import type { RuntimeEnv } from "../runtime.js"; import { note } from "../terminal/note.js"; import { formatHealthCheckFailure } from "./health-format.js"; import { healthCommand } from "./health.js"; diff --git a/src/commands/doctor-gateway-services.ts b/src/commands/doctor-gateway-services.ts index 15bbcf8add..445087dc1b 100644 --- a/src/commands/doctor-gateway-services.ts +++ b/src/commands/doctor-gateway-services.ts @@ -4,8 +4,6 @@ import os from "node:os"; import path from "node:path"; import { promisify } from "node:util"; import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { DoctorOptions, DoctorPrompter } from "./doctor-prompter.js"; import { resolveGatewayPort, resolveIsNixMode } from "../config/paths.js"; import { findExtraGatewayServices, renderGatewayServiceCleanupHints } from "../daemon/inspect.js"; import { renderSystemNodeWarning, resolveSystemNodeInfo } from "../daemon/runtime-paths.js"; @@ -15,9 +13,11 @@ import { SERVICE_AUDIT_CODES, } from "../daemon/service-audit.js"; import { resolveGatewayService } from "../daemon/service.js"; +import type { RuntimeEnv } from "../runtime.js"; import { note } from "../terminal/note.js"; import { buildGatewayInstallPlan } from "./daemon-install-helpers.js"; import { DEFAULT_GATEWAY_DAEMON_RUNTIME, type GatewayDaemonRuntime } from "./daemon-runtime.js"; +import type { DoctorOptions, DoctorPrompter } from "./doctor-prompter.js"; const execFileAsync = promisify(execFile); diff --git a/src/commands/doctor-memory-search.ts b/src/commands/doctor-memory-search.ts index 5ceefd4205..c06876b234 100644 --- a/src/commands/doctor-memory-search.ts +++ b/src/commands/doctor-memory-search.ts @@ -1,9 +1,9 @@ import fsSync from "node:fs"; -import type { OpenClawConfig } from "../config/config.js"; import { resolveAgentDir, resolveDefaultAgentId } from "../agents/agent-scope.js"; import { resolveMemorySearchConfig } from "../agents/memory-search.js"; import { resolveApiKeyForProvider } from "../agents/model-auth.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { OpenClawConfig } from "../config/config.js"; import { note } from "../terminal/note.js"; import { resolveUserPath } from "../utils.js"; diff --git a/src/commands/doctor-sandbox.ts b/src/commands/doctor-sandbox.ts index 562f675d9f..aa08fb8673 100644 --- a/src/commands/doctor-sandbox.ts +++ b/src/commands/doctor-sandbox.ts @@ -1,16 +1,16 @@ import fs from "node:fs"; import path from "node:path"; -import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { DoctorPrompter } from "./doctor-prompter.js"; import { DEFAULT_SANDBOX_BROWSER_IMAGE, DEFAULT_SANDBOX_COMMON_IMAGE, DEFAULT_SANDBOX_IMAGE, resolveSandboxScope, } from "../agents/sandbox.js"; +import type { OpenClawConfig } from "../config/config.js"; import { runCommandWithTimeout, runExec } from "../process/exec.js"; +import type { RuntimeEnv } from "../runtime.js"; import { note } from "../terminal/note.js"; +import type { DoctorPrompter } from "./doctor-prompter.js"; type SandboxScriptInfo = { scriptPath: string; diff --git a/src/commands/doctor-security.ts b/src/commands/doctor-security.ts index 8cdf194d4b..28d9b6f782 100644 --- a/src/commands/doctor-security.ts +++ b/src/commands/doctor-security.ts @@ -1,8 +1,8 @@ -import type { ChannelId } from "../channels/plugins/types.js"; -import type { OpenClawConfig, GatewayBindMode } from "../config/config.js"; import { resolveChannelDefaultAccountId } from "../channels/plugins/helpers.js"; import { listChannelPlugins } from "../channels/plugins/index.js"; +import type { ChannelId } from "../channels/plugins/types.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { OpenClawConfig, GatewayBindMode } from "../config/config.js"; import { resolveGatewayAuth } from "../gateway/auth.js"; import { isLoopbackHost, resolveGatewayBindHost } from "../gateway/net.js"; import { readChannelAllowFromStore } from "../pairing/pairing-store.js"; diff --git a/src/commands/doctor-state-integrity.ts b/src/commands/doctor-state-integrity.ts index 135d974b01..7b6086e265 100644 --- a/src/commands/doctor-state-integrity.ts +++ b/src/commands/doctor-state-integrity.ts @@ -1,8 +1,8 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; -import type { OpenClawConfig } from "../config/config.js"; import { resolveDefaultAgentId } from "../agents/agent-scope.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveOAuthDir, resolveStateDir } from "../config/paths.js"; import { loadSessionStore, diff --git a/src/commands/doctor-ui.ts b/src/commands/doctor-ui.ts index 268738ea13..0626cf8b94 100644 --- a/src/commands/doctor-ui.ts +++ b/src/commands/doctor-ui.ts @@ -1,14 +1,14 @@ import fs from "node:fs/promises"; import path from "node:path"; -import type { RuntimeEnv } from "../runtime.js"; -import type { DoctorPrompter } from "./doctor-prompter.js"; import { resolveControlUiDistIndexHealth, resolveControlUiDistIndexPathForRoot, } from "../infra/control-ui-assets.js"; import { resolveOpenClawPackageRoot } from "../infra/openclaw-root.js"; import { runCommandWithTimeout } from "../process/exec.js"; +import type { RuntimeEnv } from "../runtime.js"; import { note } from "../terminal/note.js"; +import type { DoctorPrompter } from "./doctor-prompter.js"; export async function maybeRepairUiProtocolFreshness( _runtime: RuntimeEnv, diff --git a/src/commands/doctor-update.ts b/src/commands/doctor-update.ts index e0beaa7743..ee08e5d726 100644 --- a/src/commands/doctor-update.ts +++ b/src/commands/doctor-update.ts @@ -1,10 +1,10 @@ -import type { RuntimeEnv } from "../runtime.js"; -import type { DoctorOptions } from "./doctor-prompter.js"; import { formatCliCommand } from "../cli/command-format.js"; import { isTruthyEnvValue } from "../infra/env.js"; import { runGatewayUpdate } from "../infra/update-runner.js"; import { runCommandWithTimeout } from "../process/exec.js"; +import type { RuntimeEnv } from "../runtime.js"; import { note } from "../terminal/note.js"; +import type { DoctorOptions } from "./doctor-prompter.js"; async function detectOpenClawGitCheckout(root: string): Promise<"git" | "not-git" | "unknown"> { const res = await runCommandWithTimeout(["git", "-C", root, "rev-parse", "--show-toplevel"], { diff --git a/src/commands/doctor-workspace-status.ts b/src/commands/doctor-workspace-status.ts index 9830d5a7f7..34cffe1809 100644 --- a/src/commands/doctor-workspace-status.ts +++ b/src/commands/doctor-workspace-status.ts @@ -1,6 +1,6 @@ -import type { OpenClawConfig } from "../config/config.js"; import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js"; import { buildWorkspaceSkillStatus } from "../agents/skills-status.js"; +import type { OpenClawConfig } from "../config/config.js"; import { loadOpenClawPlugins } from "../plugins/loader.js"; import { note } from "../terminal/note.js"; import { detectLegacyWorkspaceDirs, formatLegacyWorkspaceWarning } from "./doctor-workspace.js"; diff --git a/src/commands/doctor.ts b/src/commands/doctor.ts index 9fb8183c26..d7742a02ce 100644 --- a/src/commands/doctor.ts +++ b/src/commands/doctor.ts @@ -1,7 +1,5 @@ -import { intro as clackIntro, outro as clackOutro } from "@clack/prompts"; import fs from "node:fs"; -import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; +import { intro as clackIntro, outro as clackOutro } from "@clack/prompts"; import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js"; import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "../agents/defaults.js"; import { loadModelCatalog } from "../agents/model-catalog.js"; @@ -11,12 +9,14 @@ import { resolveHooksGmailModel, } from "../agents/model-selection.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { OpenClawConfig } from "../config/config.js"; import { CONFIG_PATH, readConfigFileSnapshot, writeConfigFile } from "../config/config.js"; import { logConfigUpdated } from "../config/logging.js"; import { resolveGatewayService } from "../daemon/service.js"; import { resolveGatewayAuth } from "../gateway/auth.js"; import { buildGatewayConnectionDetails } from "../gateway/call.js"; import { resolveOpenClawPackageRoot } from "../infra/openclaw-root.js"; +import type { RuntimeEnv } from "../runtime.js"; import { defaultRuntime } from "../runtime.js"; import { note } from "../terminal/note.js"; import { stylePromptTitle } from "../terminal/prompt-style.js"; diff --git a/src/commands/gateway-status.ts b/src/commands/gateway-status.ts index 9959642d6f..0e5efe4a78 100644 --- a/src/commands/gateway-status.ts +++ b/src/commands/gateway-status.ts @@ -1,4 +1,3 @@ -import type { RuntimeEnv } from "../runtime.js"; import { withProgress } from "../cli/progress.js"; import { loadConfig, resolveGatewayPort } from "../config/config.js"; import { probeGateway } from "../gateway/probe.js"; @@ -6,6 +5,7 @@ import { discoverGatewayBeacons } from "../infra/bonjour-discovery.js"; import { resolveSshConfig } from "../infra/ssh-config.js"; import { parseSshTarget, startSshPortForward } from "../infra/ssh-tunnel.js"; import { resolveWideAreaDiscoveryDomain } from "../infra/widearea-dns.js"; +import type { RuntimeEnv } from "../runtime.js"; import { colorize, isRich, theme } from "../terminal/theme.js"; import { buildNetworkHints, diff --git a/src/commands/gateway-status/helpers.ts b/src/commands/gateway-status/helpers.ts index 566f894d09..bd8c772bc0 100644 --- a/src/commands/gateway-status/helpers.ts +++ b/src/commands/gateway-status/helpers.ts @@ -1,6 +1,6 @@ +import { resolveGatewayPort } from "../../config/config.js"; import type { OpenClawConfig, ConfigFileSnapshot } from "../../config/types.js"; import type { GatewayProbeResult } from "../../gateway/probe.js"; -import { resolveGatewayPort } from "../../config/config.js"; import { pickPrimaryTailnetIPv4 } from "../../infra/tailnet.js"; import { colorize, theme } from "../../terminal/theme.js"; import { pickGatewaySelfPresence } from "../gateway-presence.js"; diff --git a/src/commands/health.command.coverage.e2e.test.ts b/src/commands/health.command.coverage.e2e.test.ts index bb29d4906c..bc2739d99e 100644 --- a/src/commands/health.command.coverage.e2e.test.ts +++ b/src/commands/health.command.coverage.e2e.test.ts @@ -1,8 +1,8 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { HealthSummary } from "./health.js"; import { setActivePluginRegistry } from "../plugins/runtime.js"; import { stripAnsi } from "../terminal/ansi.js"; import { createTestRegistry } from "../test-utils/channel-plugins.js"; +import type { HealthSummary } from "./health.js"; import { healthCommand } from "./health.js"; const callGatewayMock = vi.fn(); diff --git a/src/commands/health.e2e.test.ts b/src/commands/health.e2e.test.ts index f1abbd6f8d..8fae558332 100644 --- a/src/commands/health.e2e.test.ts +++ b/src/commands/health.e2e.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { HealthSummary } from "./health.js"; import { stripAnsi } from "../terminal/ansi.js"; import { formatHealthCheckFailure } from "./health-format.js"; +import type { HealthSummary } from "./health.js"; import { formatHealthChannelLines, healthCommand } from "./health.js"; const runtime = { diff --git a/src/commands/health.snapshot.e2e.test.ts b/src/commands/health.snapshot.e2e.test.ts index e06b7ed39f..27f54e694c 100644 --- a/src/commands/health.snapshot.e2e.test.ts +++ b/src/commands/health.snapshot.e2e.test.ts @@ -2,10 +2,10 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import type { HealthSummary } from "./health.js"; import { telegramPlugin } from "../../extensions/telegram/src/channel.js"; import { setActivePluginRegistry } from "../plugins/runtime.js"; import { createTestRegistry } from "../test-utils/channel-plugins.js"; +import type { HealthSummary } from "./health.js"; import { getHealthSnapshot } from "./health.js"; let testConfig: Record = {}; diff --git a/src/commands/health.ts b/src/commands/health.ts index f615a8ede0..0280c5dab6 100644 --- a/src/commands/health.ts +++ b/src/commands/health.ts @@ -1,10 +1,9 @@ -import type { ChannelAccountSnapshot } from "../channels/plugins/types.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; import { resolveDefaultAgentId } from "../agents/agent-scope.js"; import { resolveChannelDefaultAccountId } from "../channels/plugins/helpers.js"; import { getChannelPlugin, listChannelPlugins } from "../channels/plugins/index.js"; +import type { ChannelAccountSnapshot } from "../channels/plugins/types.js"; import { withProgress } from "../cli/progress.js"; +import type { OpenClawConfig } from "../config/config.js"; import { loadConfig } from "../config/config.js"; import { loadSessionStore, resolveStorePath } from "../config/sessions.js"; import { buildGatewayConnectionDetails, callGateway } from "../gateway/call.js"; @@ -17,6 +16,7 @@ import { } from "../infra/heartbeat-runner.js"; import { buildChannelAccountBindings, resolvePreferredAccountId } from "../routing/bindings.js"; import { normalizeAgentId } from "../routing/session-key.js"; +import type { RuntimeEnv } from "../runtime.js"; import { styleHealthChannelLine } from "../terminal/health-style.js"; import { isRich } from "../terminal/theme.js"; diff --git a/src/commands/message-format.ts b/src/commands/message-format.ts index 2a9b51daeb..2e803a0a79 100644 --- a/src/commands/message-format.ts +++ b/src/commands/message-format.ts @@ -1,8 +1,8 @@ +import { getChannelPlugin } from "../channels/plugins/index.js"; import type { ChannelId, ChannelMessageActionName } from "../channels/plugins/types.js"; import type { OutboundDeliveryResult } from "../infra/outbound/deliver.js"; -import type { MessageActionRunResult } from "../infra/outbound/message-action-runner.js"; -import { getChannelPlugin } from "../channels/plugins/index.js"; import { formatGatewaySummary, formatOutboundDeliverySummary } from "../infra/outbound/format.js"; +import type { MessageActionRunResult } from "../infra/outbound/message-action-runner.js"; import { formatTargetDisplay } from "../infra/outbound/target-resolver.js"; import { renderTable } from "../terminal/table.js"; import { isRich, theme } from "../terminal/theme.js"; diff --git a/src/commands/message.ts b/src/commands/message.ts index d10733706e..caf7e6d63c 100644 --- a/src/commands/message.ts +++ b/src/commands/message.ts @@ -1,5 +1,3 @@ -import type { OutboundSendDeps } from "../infra/outbound/deliver.js"; -import type { RuntimeEnv } from "../runtime.js"; import { CHANNEL_MESSAGE_ACTION_NAMES, type ChannelMessageActionName, @@ -7,7 +5,9 @@ import { import { createOutboundSendDeps, type CliDeps } from "../cli/outbound-send-deps.js"; import { withProgress } from "../cli/progress.js"; import { loadConfig } from "../config/config.js"; +import type { OutboundSendDeps } from "../infra/outbound/deliver.js"; import { runMessageAction } from "../infra/outbound/message-action-runner.js"; +import type { RuntimeEnv } from "../runtime.js"; import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../utils/message-channel.js"; import { buildMessageCliJson, formatMessageCliText } from "./message-format.js"; diff --git a/src/commands/model-allowlist.ts b/src/commands/model-allowlist.ts index 157c3e4eb4..bc6dfc5308 100644 --- a/src/commands/model-allowlist.ts +++ b/src/commands/model-allowlist.ts @@ -1,6 +1,6 @@ -import type { OpenClawConfig } from "../config/config.js"; import { DEFAULT_PROVIDER } from "../agents/defaults.js"; import { resolveAllowlistModelKey } from "../agents/model-selection.js"; +import type { OpenClawConfig } from "../config/config.js"; export function ensureModelAllowlistEntry(params: { cfg: OpenClawConfig; diff --git a/src/commands/model-picker.ts b/src/commands/model-picker.ts index 22956dcec6..7a9ac18abf 100644 --- a/src/commands/model-picker.ts +++ b/src/commands/model-picker.ts @@ -1,5 +1,3 @@ -import type { OpenClawConfig } from "../config/config.js"; -import type { WizardPrompter, WizardSelectOption } from "../wizard/prompts.js"; import { ensureAuthProfileStore, listProfilesForProvider } from "../agents/auth-profiles.js"; import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "../agents/defaults.js"; import { getCustomProviderApiKey, resolveEnvApiKey } from "../agents/model-auth.js"; @@ -11,6 +9,8 @@ import { normalizeProviderId, resolveConfiguredModelRef, } from "../agents/model-selection.js"; +import type { OpenClawConfig } from "../config/config.js"; +import type { WizardPrompter, WizardSelectOption } from "../wizard/prompts.js"; import { formatTokenK } from "./models/shared.js"; import { OPENAI_CODEX_DEFAULT_MODEL } from "./openai-codex-model-default.js"; import { promptAndConfigureVllm } from "./vllm-setup.js"; diff --git a/src/commands/models/aliases.ts b/src/commands/models/aliases.ts index d719ee7bc4..5a84721d2d 100644 --- a/src/commands/models/aliases.ts +++ b/src/commands/models/aliases.ts @@ -1,6 +1,6 @@ -import type { RuntimeEnv } from "../../runtime.js"; import { loadConfig } from "../../config/config.js"; import { logConfigUpdated } from "../../config/logging.js"; +import type { RuntimeEnv } from "../../runtime.js"; import { ensureFlagCompatibility, normalizeAlias, diff --git a/src/commands/models/auth-order.ts b/src/commands/models/auth-order.ts index 9dc820c8e9..880435c718 100644 --- a/src/commands/models/auth-order.ts +++ b/src/commands/models/auth-order.ts @@ -1,4 +1,3 @@ -import type { RuntimeEnv } from "../../runtime.js"; import { resolveAgentDir, resolveDefaultAgentId } from "../../agents/agent-scope.js"; import { type AuthProfileStore, @@ -7,6 +6,7 @@ import { } from "../../agents/auth-profiles.js"; import { normalizeProviderId } from "../../agents/model-selection.js"; import { loadConfig } from "../../config/config.js"; +import type { RuntimeEnv } from "../../runtime.js"; import { shortenHomePath } from "../../utils.js"; import { resolveKnownAgentId } from "./shared.js"; diff --git a/src/commands/models/auth.ts b/src/commands/models/auth.ts index 69dd84dde0..04ac9c2558 100644 --- a/src/commands/models/auth.ts +++ b/src/commands/models/auth.ts @@ -1,13 +1,11 @@ import { confirm as clackConfirm, select as clackSelect, text as clackText } from "@clack/prompts"; -import type { AuthProfileCredential } from "../../agents/auth-profiles/types.js"; -import type { ProviderAuthResult, ProviderPlugin } from "../../plugins/types.js"; -import type { RuntimeEnv } from "../../runtime.js"; import { resolveAgentDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, } from "../../agents/agent-scope.js"; import { upsertAuthProfile } from "../../agents/auth-profiles.js"; +import type { AuthProfileCredential } from "../../agents/auth-profiles/types.js"; import { normalizeProviderId } from "../../agents/model-selection.js"; import { resolveDefaultAgentWorkspaceDir } from "../../agents/workspace.js"; import { formatCliCommand } from "../../cli/command-format.js"; @@ -15,6 +13,8 @@ import { parseDurationMs } from "../../cli/parse-duration.js"; import { readConfigFileSnapshot } from "../../config/config.js"; import { logConfigUpdated } from "../../config/logging.js"; import { resolvePluginProviders } from "../../plugins/providers.js"; +import type { ProviderAuthResult, ProviderPlugin } from "../../plugins/types.js"; +import type { RuntimeEnv } from "../../runtime.js"; import { stylePromptHint, stylePromptMessage } from "../../terminal/prompt-style.js"; import { createClackPrompter } from "../../wizard/clack-prompter.js"; import { validateAnthropicSetupToken } from "../auth-token.js"; diff --git a/src/commands/models/fallbacks-shared.ts b/src/commands/models/fallbacks-shared.ts index 1070249ddd..dc540d9425 100644 --- a/src/commands/models/fallbacks-shared.ts +++ b/src/commands/models/fallbacks-shared.ts @@ -1,8 +1,8 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { RuntimeEnv } from "../../runtime.js"; import { buildModelAliasIndex, resolveModelRefFromString } from "../../agents/model-selection.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { loadConfig } from "../../config/config.js"; import { logConfigUpdated } from "../../config/logging.js"; +import type { RuntimeEnv } from "../../runtime.js"; import { DEFAULT_PROVIDER, ensureFlagCompatibility, diff --git a/src/commands/models/list.auth-overview.ts b/src/commands/models/list.auth-overview.ts index 90c8a0defa..49159e93af 100644 --- a/src/commands/models/list.auth-overview.ts +++ b/src/commands/models/list.auth-overview.ts @@ -1,5 +1,3 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { ProviderAuthOverview } from "./list.types.js"; import { formatRemainingShort } from "../../agents/auth-health.js"; import { type AuthProfileStore, @@ -9,8 +7,10 @@ import { resolveProfileUnusableUntilForDisplay, } from "../../agents/auth-profiles.js"; import { getCustomProviderApiKey, resolveEnvApiKey } from "../../agents/model-auth.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { shortenHomePath } from "../../utils.js"; import { maskApiKey } from "./list.format.js"; +import type { ProviderAuthOverview } from "./list.types.js"; export function resolveProviderAuthOverview(params: { provider: string; diff --git a/src/commands/models/list.configured.ts b/src/commands/models/list.configured.ts index d2d3f76855..a4300ea563 100644 --- a/src/commands/models/list.configured.ts +++ b/src/commands/models/list.configured.ts @@ -1,11 +1,11 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { ConfiguredEntry } from "./list.types.js"; import { buildModelAliasIndex, parseModelRef, resolveConfiguredModelRef, resolveModelRefFromString, } from "../../agents/model-selection.js"; +import type { OpenClawConfig } from "../../config/config.js"; +import type { ConfiguredEntry } from "./list.types.js"; import { DEFAULT_MODEL, DEFAULT_PROVIDER, modelKey } from "./shared.js"; export function resolveConfiguredEntries(cfg: OpenClawConfig) { diff --git a/src/commands/models/list.list-command.ts b/src/commands/models/list.list-command.ts index cdad37bbd2..dc19598570 100644 --- a/src/commands/models/list.list-command.ts +++ b/src/commands/models/list.list-command.ts @@ -1,13 +1,13 @@ import type { Api, Model } from "@mariozechner/pi-ai"; -import type { ModelRegistry } from "../../agents/pi-model-discovery.js"; -import type { RuntimeEnv } from "../../runtime.js"; -import type { ModelRow } from "./list.types.js"; import { resolveForwardCompatModel } from "../../agents/model-forward-compat.js"; import { parseModelRef } from "../../agents/model-selection.js"; +import type { ModelRegistry } from "../../agents/pi-model-discovery.js"; +import type { RuntimeEnv } from "../../runtime.js"; import { resolveConfiguredEntries } from "./list.configured.js"; import { formatErrorWithStack } from "./list.errors.js"; import { loadModelRegistry, toModelRow } from "./list.registry.js"; import { printModelTable } from "./list.table.js"; +import type { ModelRow } from "./list.types.js"; import { DEFAULT_PROVIDER, ensureFlagCompatibility, isLocalBaseUrl, modelKey } from "./shared.js"; export async function modelsListCommand( diff --git a/src/commands/models/list.probe.ts b/src/commands/models/list.probe.ts index 795933f24f..60b3831611 100644 --- a/src/commands/models/list.probe.ts +++ b/src/commands/models/list.probe.ts @@ -1,6 +1,5 @@ import crypto from "node:crypto"; import fs from "node:fs/promises"; -import type { OpenClawConfig } from "../../config/config.js"; import { resolveOpenClawAgentDir } from "../../agents/agent-paths.js"; import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../../agents/agent-scope.js"; import { @@ -19,6 +18,7 @@ import { } from "../../agents/model-selection.js"; import { runEmbeddedPiAgent } from "../../agents/pi-embedded.js"; import { resolveDefaultAgentWorkspaceDir } from "../../agents/workspace.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { resolveSessionTranscriptPath, resolveSessionTranscriptsDirForAgent, diff --git a/src/commands/models/list.registry.ts b/src/commands/models/list.registry.ts index f3f16d40ab..42f75ca1bb 100644 --- a/src/commands/models/list.registry.ts +++ b/src/commands/models/list.registry.ts @@ -1,9 +1,6 @@ import type { Api, Model } from "@mariozechner/pi-ai"; -import type { AuthProfileStore } from "../../agents/auth-profiles.js"; -import type { ModelRegistry } from "../../agents/pi-model-discovery.js"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { ModelRow } from "./list.types.js"; import { resolveOpenClawAgentDir } from "../../agents/agent-paths.js"; +import type { AuthProfileStore } from "../../agents/auth-profiles.js"; import { listProfilesForProvider } from "../../agents/auth-profiles.js"; import { getCustomProviderApiKey, @@ -16,12 +13,15 @@ import { } from "../../agents/model-forward-compat.js"; import { ensureOpenClawModelsJson } from "../../agents/models-config.js"; import { ensurePiAuthJsonFromAuthProfiles } from "../../agents/pi-auth-json.js"; +import type { ModelRegistry } from "../../agents/pi-model-discovery.js"; import { discoverAuthStorage, discoverModels } from "../../agents/pi-model-discovery.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { formatErrorWithStack, MODEL_AVAILABILITY_UNAVAILABLE_CODE, shouldFallbackToAuthHeuristics, } from "./list.errors.js"; +import type { ModelRow } from "./list.types.js"; import { isLocalBaseUrl, modelKey } from "./shared.js"; const hasAuthForProvider = ( diff --git a/src/commands/models/list.status-command.ts b/src/commands/models/list.status-command.ts index 842cad3372..7e46c170cc 100644 --- a/src/commands/models/list.status-command.ts +++ b/src/commands/models/list.status-command.ts @@ -1,5 +1,4 @@ import path from "node:path"; -import type { RuntimeEnv } from "../../runtime.js"; import { resolveOpenClawAgentDir } from "../../agents/agent-paths.js"; import { resolveAgentDir, @@ -34,6 +33,7 @@ import { type UsageProviderId, } from "../../infra/provider-usage.js"; import { getShellEnvAppliedKeys, shouldEnableShellEnvFallback } from "../../infra/shell-env.js"; +import type { RuntimeEnv } from "../../runtime.js"; import { renderTable } from "../../terminal/table.js"; import { colorize, theme } from "../../terminal/theme.js"; import { shortenHomePath } from "../../utils.js"; diff --git a/src/commands/models/list.table.ts b/src/commands/models/list.table.ts index b8f52f0bea..3211ce57b1 100644 --- a/src/commands/models/list.table.ts +++ b/src/commands/models/list.table.ts @@ -1,7 +1,7 @@ import type { RuntimeEnv } from "../../runtime.js"; -import type { ModelRow } from "./list.types.js"; import { colorize, theme } from "../../terminal/theme.js"; import { formatTag, isRich, pad, truncate } from "./list.format.js"; +import type { ModelRow } from "./list.types.js"; import { formatTokenK } from "./shared.js"; const MODEL_PAD = 42; diff --git a/src/commands/models/scan.ts b/src/commands/models/scan.ts index b12c750e7f..fd5b48bbfa 100644 --- a/src/commands/models/scan.ts +++ b/src/commands/models/scan.ts @@ -1,10 +1,10 @@ import { cancel, multiselect as clackMultiselect, isCancel } from "@clack/prompts"; -import type { RuntimeEnv } from "../../runtime.js"; import { resolveApiKeyForProvider } from "../../agents/model-auth.js"; import { type ModelScanResult, scanOpenRouterModels } from "../../agents/model-scan.js"; import { withProgressTotals } from "../../cli/progress.js"; import { loadConfig } from "../../config/config.js"; import { logConfigUpdated } from "../../config/logging.js"; +import type { RuntimeEnv } from "../../runtime.js"; import { stylePromptHint, stylePromptMessage, diff --git a/src/commands/models/set-image.ts b/src/commands/models/set-image.ts index 920418e4f8..f401314110 100644 --- a/src/commands/models/set-image.ts +++ b/src/commands/models/set-image.ts @@ -1,5 +1,5 @@ -import type { RuntimeEnv } from "../../runtime.js"; import { logConfigUpdated } from "../../config/logging.js"; +import type { RuntimeEnv } from "../../runtime.js"; import { applyDefaultModelPrimaryUpdate, updateConfig } from "./shared.js"; export async function modelsSetImageCommand(modelRaw: string, runtime: RuntimeEnv) { diff --git a/src/commands/models/set.ts b/src/commands/models/set.ts index 163fdc204c..dd0054994f 100644 --- a/src/commands/models/set.ts +++ b/src/commands/models/set.ts @@ -1,8 +1,8 @@ -import type { RuntimeEnv } from "../../runtime.js"; import { loadModelCatalog } from "../../agents/model-catalog.js"; import { modelKey } from "../../agents/model-selection.js"; import { readConfigFileSnapshot } from "../../config/config.js"; import { logConfigUpdated } from "../../config/logging.js"; +import type { RuntimeEnv } from "../../runtime.js"; import { applyDefaultModelPrimaryUpdate, resolveModelTarget, updateConfig } from "./shared.js"; export async function modelsSetCommand(modelRaw: string, runtime: RuntimeEnv) { diff --git a/src/commands/node-daemon-install-helpers.ts b/src/commands/node-daemon-install-helpers.ts index 750b681406..ef8007f8e5 100644 --- a/src/commands/node-daemon-install-helpers.ts +++ b/src/commands/node-daemon-install-helpers.ts @@ -1,4 +1,3 @@ -import type { NodeDaemonRuntime } from "./node-daemon-runtime.js"; import { formatNodeServiceDescription } from "../daemon/constants.js"; import { resolveNodeProgramArguments } from "../daemon/program-args.js"; import { @@ -8,6 +7,7 @@ import { } from "../daemon/runtime-paths.js"; import { buildNodeServiceEnvironment } from "../daemon/service-env.js"; import { resolveGatewayDevMode } from "./daemon-install-helpers.js"; +import type { NodeDaemonRuntime } from "./node-daemon-runtime.js"; type WarnFn = (message: string, title?: string) => void; diff --git a/src/commands/onboard-auth.config-core.ts b/src/commands/onboard-auth.config-core.ts index 4db007191b..6bc500cabb 100644 --- a/src/commands/onboard-auth.config-core.ts +++ b/src/commands/onboard-auth.config-core.ts @@ -1,5 +1,3 @@ -import type { OpenClawConfig } from "../config/config.js"; -import type { ModelApi } from "../config/types.models.js"; import { buildHuggingfaceModelDefinition, HUGGINGFACE_BASE_URL, @@ -28,6 +26,8 @@ import { VENICE_DEFAULT_MODEL_REF, VENICE_MODEL_CATALOG, } from "../agents/venice-models.js"; +import type { OpenClawConfig } from "../config/config.js"; +import type { ModelApi } from "../config/types.models.js"; import { HUGGINGFACE_DEFAULT_MODEL_REF, OPENROUTER_DEFAULT_MODEL_REF, diff --git a/src/commands/onboard-auth.config-gateways.ts b/src/commands/onboard-auth.config-gateways.ts index b89acca00f..a7a4d4246c 100644 --- a/src/commands/onboard-auth.config-gateways.ts +++ b/src/commands/onboard-auth.config-gateways.ts @@ -1,8 +1,8 @@ -import type { OpenClawConfig } from "../config/config.js"; import { buildCloudflareAiGatewayModelDefinition, resolveCloudflareAiGatewayBaseUrl, } from "../agents/cloudflare-ai-gateway.js"; +import type { OpenClawConfig } from "../config/config.js"; import { applyAgentDefaultModelPrimary, applyProviderConfigWithDefaultModel, diff --git a/src/commands/onboard-auth.config-opencode.ts b/src/commands/onboard-auth.config-opencode.ts index b6d994aad2..c9f1dd4725 100644 --- a/src/commands/onboard-auth.config-opencode.ts +++ b/src/commands/onboard-auth.config-opencode.ts @@ -1,5 +1,5 @@ -import type { OpenClawConfig } from "../config/config.js"; import { OPENCODE_ZEN_DEFAULT_MODEL_REF } from "../agents/opencode-zen-models.js"; +import type { OpenClawConfig } from "../config/config.js"; import { applyAgentDefaultModelPrimary } from "./onboard-auth.config-shared.js"; export function applyOpencodeZenProviderConfig(cfg: OpenClawConfig): OpenClawConfig { diff --git a/src/commands/onboard-auth.e2e.test.ts b/src/commands/onboard-auth.e2e.test.ts index 81ccf99d40..36b1306e8b 100644 --- a/src/commands/onboard-auth.e2e.test.ts +++ b/src/commands/onboard-auth.e2e.test.ts @@ -1,6 +1,6 @@ -import type { OAuthCredentials } from "@mariozechner/pi-ai"; import fs from "node:fs/promises"; import path from "node:path"; +import type { OAuthCredentials } from "@mariozechner/pi-ai"; import { afterEach, describe, expect, it } from "vitest"; import { applyAuthProfileConfig, diff --git a/src/commands/onboard-auth.models.ts b/src/commands/onboard-auth.models.ts index 26c6107b1c..30d418892e 100644 --- a/src/commands/onboard-auth.models.ts +++ b/src/commands/onboard-auth.models.ts @@ -1,5 +1,5 @@ -import type { ModelDefinitionConfig } from "../config/types.js"; import { QIANFAN_BASE_URL, QIANFAN_DEFAULT_MODEL_ID } from "../agents/models-config.providers.js"; +import type { ModelDefinitionConfig } from "../config/types.js"; export const DEFAULT_MINIMAX_BASE_URL = "https://api.minimax.io/v1"; export const MINIMAX_API_BASE_URL = "https://api.minimax.io/anthropic"; diff --git a/src/commands/onboard-channels.ts b/src/commands/onboard-channels.ts index 3a324a321a..a2c3092f1e 100644 --- a/src/commands/onboard-channels.ts +++ b/src/commands/onboard-channels.ts @@ -1,28 +1,23 @@ -import type { ChannelMeta } from "../channels/plugins/types.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { DmPolicy } from "../config/types.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { WizardPrompter, WizardSelectOption } from "../wizard/prompts.js"; -import type { ChannelChoice } from "./onboard-types.js"; -import type { - ChannelOnboardingDmPolicy, - ChannelOnboardingStatus, - SetupChannelsOptions, -} from "./onboarding/types.js"; import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js"; import { listChannelPluginCatalogEntries } from "../channels/plugins/catalog.js"; import { resolveChannelDefaultAccountId } from "../channels/plugins/helpers.js"; import { listChannelPlugins, getChannelPlugin } from "../channels/plugins/index.js"; +import type { ChannelMeta } from "../channels/plugins/types.js"; import { formatChannelPrimerLine, formatChannelSelectionLine, listChatChannels, } from "../channels/registry.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { OpenClawConfig } from "../config/config.js"; import { isChannelConfigured } from "../config/plugin-auto-enable.js"; +import type { DmPolicy } from "../config/types.js"; import { enablePluginInConfig } from "../plugins/enable.js"; import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../routing/session-key.js"; +import type { RuntimeEnv } from "../runtime.js"; import { formatDocsLink } from "../terminal/links.js"; +import type { WizardPrompter, WizardSelectOption } from "../wizard/prompts.js"; +import type { ChannelChoice } from "./onboard-types.js"; import { ensureOnboardingPluginInstalled, reloadOnboardingPluginRegistry, @@ -31,6 +26,11 @@ import { getChannelOnboardingAdapter, listChannelOnboardingAdapters, } from "./onboarding/registry.js"; +import type { + ChannelOnboardingDmPolicy, + ChannelOnboardingStatus, + SetupChannelsOptions, +} from "./onboarding/types.js"; type ConfiguredChannelAction = "update" | "disable" | "delete" | "skip"; diff --git a/src/commands/onboard-custom.ts b/src/commands/onboard-custom.ts index 6e180cb9ae..5b631631ca 100644 --- a/src/commands/onboard-custom.ts +++ b/src/commands/onboard-custom.ts @@ -1,10 +1,10 @@ +import { DEFAULT_PROVIDER } from "../agents/defaults.js"; +import { buildModelAliasIndex, modelKey } from "../agents/model-selection.js"; import type { OpenClawConfig } from "../config/config.js"; import type { ModelProviderConfig } from "../config/types.models.js"; import type { RuntimeEnv } from "../runtime.js"; -import type { WizardPrompter } from "../wizard/prompts.js"; -import { DEFAULT_PROVIDER } from "../agents/defaults.js"; -import { buildModelAliasIndex, modelKey } from "../agents/model-selection.js"; import { fetchWithTimeout } from "../utils/fetch-timeout.js"; +import type { WizardPrompter } from "../wizard/prompts.js"; import { applyPrimaryModel } from "./model-picker.js"; import { normalizeAlias } from "./models/shared.js"; diff --git a/src/commands/onboard-helpers.ts b/src/commands/onboard-helpers.ts index 8f013ae480..48f9e87c31 100644 --- a/src/commands/onboard-helpers.ts +++ b/src/commands/onboard-helpers.ts @@ -1,12 +1,10 @@ -import { cancel, isCancel } from "@clack/prompts"; import crypto from "node:crypto"; import fs from "node:fs/promises"; import path from "node:path"; import { inspect } from "node:util"; -import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { NodeManagerChoice, OnboardMode, ResetScope } from "./onboard-types.js"; +import { cancel, isCancel } from "@clack/prompts"; import { DEFAULT_AGENT_WORKSPACE_DIR, ensureAgentWorkspace } from "../agents/workspace.js"; +import type { OpenClawConfig } from "../config/config.js"; import { CONFIG_PATH } from "../config/config.js"; import { resolveSessionTranscriptsDirForAgent } from "../config/sessions.js"; import { callGateway } from "../gateway/call.js"; @@ -16,6 +14,7 @@ import { isSafeExecutableValue } from "../infra/exec-safety.js"; import { pickPrimaryTailnetIPv4 } from "../infra/tailnet.js"; import { isWSL } from "../infra/wsl.js"; import { runCommandWithTimeout } from "../process/exec.js"; +import type { RuntimeEnv } from "../runtime.js"; import { stylePromptTitle } from "../terminal/prompt-style.js"; import { CONFIG_DIR, @@ -26,6 +25,7 @@ import { } from "../utils.js"; import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../utils/message-channel.js"; import { VERSION } from "../version.js"; +import type { NodeManagerChoice, OnboardMode, ResetScope } from "./onboard-types.js"; export function guardCancel(value: T | symbol, runtime: RuntimeEnv): T { if (isCancel(value)) { diff --git a/src/commands/onboard-hooks.ts b/src/commands/onboard-hooks.ts index 7fcc94465b..575c3590da 100644 --- a/src/commands/onboard-hooks.ts +++ b/src/commands/onboard-hooks.ts @@ -1,9 +1,9 @@ -import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { WizardPrompter } from "../wizard/prompts.js"; import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { OpenClawConfig } from "../config/config.js"; import { buildWorkspaceHookStatus } from "../hooks/hooks-status.js"; +import type { RuntimeEnv } from "../runtime.js"; +import type { WizardPrompter } from "../wizard/prompts.js"; export async function setupInternalHooks( cfg: OpenClawConfig, diff --git a/src/commands/onboard-interactive.ts b/src/commands/onboard-interactive.ts index 2678f28108..670c0fa02d 100644 --- a/src/commands/onboard-interactive.ts +++ b/src/commands/onboard-interactive.ts @@ -1,10 +1,10 @@ import type { RuntimeEnv } from "../runtime.js"; -import type { OnboardOptions } from "./onboard-types.js"; import { defaultRuntime } from "../runtime.js"; import { restoreTerminalState } from "../terminal/restore.js"; import { createClackPrompter } from "../wizard/clack-prompter.js"; import { runOnboardingWizard } from "../wizard/onboarding.js"; import { WizardCancelledError } from "../wizard/prompts.js"; +import type { OnboardOptions } from "./onboard-types.js"; export async function runInteractiveOnboarding( opts: OnboardOptions, diff --git a/src/commands/onboard-non-interactive.ts b/src/commands/onboard-non-interactive.ts index f65abdfd0f..4b4d122322 100644 --- a/src/commands/onboard-non-interactive.ts +++ b/src/commands/onboard-non-interactive.ts @@ -1,11 +1,11 @@ -import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { OnboardOptions } from "./onboard-types.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { OpenClawConfig } from "../config/config.js"; import { readConfigFileSnapshot } from "../config/config.js"; +import type { RuntimeEnv } from "../runtime.js"; import { defaultRuntime } from "../runtime.js"; import { runNonInteractiveOnboardingLocal } from "./onboard-non-interactive/local.js"; import { runNonInteractiveOnboardingRemote } from "./onboard-non-interactive/remote.js"; +import type { OnboardOptions } from "./onboard-types.js"; export async function runNonInteractiveOnboarding( opts: OnboardOptions, diff --git a/src/commands/onboard-non-interactive/api-keys.ts b/src/commands/onboard-non-interactive/api-keys.ts index fc03805f2a..11fda28352 100644 --- a/src/commands/onboard-non-interactive/api-keys.ts +++ b/src/commands/onboard-non-interactive/api-keys.ts @@ -1,11 +1,11 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { RuntimeEnv } from "../../runtime.js"; import { ensureAuthProfileStore, resolveApiKeyForProfile, resolveAuthProfileOrder, } from "../../agents/auth-profiles.js"; import { resolveEnvApiKey } from "../../agents/model-auth.js"; +import type { OpenClawConfig } from "../../config/config.js"; +import type { RuntimeEnv } from "../../runtime.js"; import { normalizeOptionalSecretInput } from "../../utils/normalize-secret-input.js"; export type NonInteractiveApiKeySource = "flag" | "env" | "profile"; diff --git a/src/commands/onboard-non-interactive/local.ts b/src/commands/onboard-non-interactive/local.ts index 7c64f1ca6b..181e57812a 100644 --- a/src/commands/onboard-non-interactive/local.ts +++ b/src/commands/onboard-non-interactive/local.ts @@ -1,9 +1,8 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { RuntimeEnv } from "../../runtime.js"; -import type { OnboardOptions } from "../onboard-types.js"; import { formatCliCommand } from "../../cli/command-format.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { resolveGatewayPort, writeConfigFile } from "../../config/config.js"; import { logConfigUpdated } from "../../config/logging.js"; +import type { RuntimeEnv } from "../../runtime.js"; import { DEFAULT_GATEWAY_DAEMON_RUNTIME } from "../daemon-runtime.js"; import { healthCommand } from "../health.js"; import { applyOnboardingLocalWorkspaceConfig } from "../onboard-config.js"; @@ -14,6 +13,7 @@ import { resolveControlUiLinks, waitForGatewayReachable, } from "../onboard-helpers.js"; +import type { OnboardOptions } from "../onboard-types.js"; import { inferAuthChoiceFromFlags } from "./local/auth-choice-inference.js"; import { applyNonInteractiveAuthChoice } from "./local/auth-choice.js"; import { installGatewayDaemonNonInteractive } from "./local/daemon-install.js"; diff --git a/src/commands/onboard-non-interactive/local/auth-choice-inference.ts b/src/commands/onboard-non-interactive/local/auth-choice-inference.ts index bd59df084f..1064961bd3 100644 --- a/src/commands/onboard-non-interactive/local/auth-choice-inference.ts +++ b/src/commands/onboard-non-interactive/local/auth-choice-inference.ts @@ -1,5 +1,5 @@ -import type { AuthChoice, OnboardOptions } from "../../onboard-types.js"; import { ONBOARD_PROVIDER_AUTH_FLAGS } from "../../onboard-provider-auth-flags.js"; +import type { AuthChoice, OnboardOptions } from "../../onboard-types.js"; type AuthChoiceFlag = { optionKey: keyof AuthChoiceFlagOptions; diff --git a/src/commands/onboard-non-interactive/local/auth-choice.ts b/src/commands/onboard-non-interactive/local/auth-choice.ts index 23a5d370df..61f437adf3 100644 --- a/src/commands/onboard-non-interactive/local/auth-choice.ts +++ b/src/commands/onboard-non-interactive/local/auth-choice.ts @@ -1,10 +1,9 @@ -import type { OpenClawConfig } from "../../../config/config.js"; -import type { RuntimeEnv } from "../../../runtime.js"; -import type { AuthChoice, OnboardOptions } from "../../onboard-types.js"; import { upsertAuthProfile } from "../../../agents/auth-profiles.js"; import { normalizeProviderId } from "../../../agents/model-selection.js"; import { parseDurationMs } from "../../../cli/parse-duration.js"; +import type { OpenClawConfig } from "../../../config/config.js"; import { upsertSharedEnvVar } from "../../../infra/env-file.js"; +import type { RuntimeEnv } from "../../../runtime.js"; import { shortenHomePath } from "../../../utils.js"; import { normalizeSecretInput } from "../../../utils/normalize-secret-input.js"; import { buildTokenProfileId, validateAnthropicSetupToken } from "../../auth-token.js"; @@ -55,6 +54,7 @@ import { parseNonInteractiveCustomApiFlags, resolveCustomProviderId, } from "../../onboard-custom.js"; +import type { AuthChoice, OnboardOptions } from "../../onboard-types.js"; import { applyOpenAIConfig } from "../../openai-model-default.js"; import { detectZaiEndpoint } from "../../zai-endpoint-detect.js"; import { resolveNonInteractiveApiKey } from "../api-keys.js"; diff --git a/src/commands/onboard-non-interactive/local/daemon-install.ts b/src/commands/onboard-non-interactive/local/daemon-install.ts index 984113226c..3e4de7cc53 100644 --- a/src/commands/onboard-non-interactive/local/daemon-install.ts +++ b/src/commands/onboard-non-interactive/local/daemon-install.ts @@ -1,10 +1,10 @@ import type { OpenClawConfig } from "../../../config/config.js"; -import type { RuntimeEnv } from "../../../runtime.js"; -import type { OnboardOptions } from "../../onboard-types.js"; import { resolveGatewayService } from "../../../daemon/service.js"; import { isSystemdUserServiceAvailable } from "../../../daemon/systemd.js"; +import type { RuntimeEnv } from "../../../runtime.js"; import { buildGatewayInstallPlan, gatewayInstallErrorHint } from "../../daemon-install-helpers.js"; import { DEFAULT_GATEWAY_DAEMON_RUNTIME, isGatewayDaemonRuntime } from "../../daemon-runtime.js"; +import type { OnboardOptions } from "../../onboard-types.js"; import { ensureSystemdUserLingerNonInteractive } from "../../systemd-linger.js"; export async function installGatewayDaemonNonInteractive(params: { diff --git a/src/commands/onboard-non-interactive/local/gateway-config.ts b/src/commands/onboard-non-interactive/local/gateway-config.ts index 4f509bb203..a786838cef 100644 --- a/src/commands/onboard-non-interactive/local/gateway-config.ts +++ b/src/commands/onboard-non-interactive/local/gateway-config.ts @@ -1,7 +1,7 @@ import type { OpenClawConfig } from "../../../config/config.js"; import type { RuntimeEnv } from "../../../runtime.js"; -import type { OnboardOptions } from "../../onboard-types.js"; import { randomToken } from "../../onboard-helpers.js"; +import type { OnboardOptions } from "../../onboard-types.js"; export function applyNonInteractiveGatewayConfig(params: { nextConfig: OpenClawConfig; diff --git a/src/commands/onboard-non-interactive/local/workspace.ts b/src/commands/onboard-non-interactive/local/workspace.ts index 2384d6e71c..a24e5c66d6 100644 --- a/src/commands/onboard-non-interactive/local/workspace.ts +++ b/src/commands/onboard-non-interactive/local/workspace.ts @@ -1,6 +1,6 @@ import type { OpenClawConfig } from "../../../config/config.js"; -import type { OnboardOptions } from "../../onboard-types.js"; import { resolveUserPath } from "../../../utils.js"; +import type { OnboardOptions } from "../../onboard-types.js"; export function resolveNonInteractiveWorkspaceDir(params: { opts: OnboardOptions; diff --git a/src/commands/onboard-non-interactive/remote.ts b/src/commands/onboard-non-interactive/remote.ts index eb020503f3..fa38cb9c43 100644 --- a/src/commands/onboard-non-interactive/remote.ts +++ b/src/commands/onboard-non-interactive/remote.ts @@ -1,10 +1,10 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { RuntimeEnv } from "../../runtime.js"; -import type { OnboardOptions } from "../onboard-types.js"; import { formatCliCommand } from "../../cli/command-format.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { writeConfigFile } from "../../config/config.js"; import { logConfigUpdated } from "../../config/logging.js"; +import type { RuntimeEnv } from "../../runtime.js"; import { applyWizardMetadata } from "../onboard-helpers.js"; +import type { OnboardOptions } from "../onboard-types.js"; export async function runNonInteractiveOnboardingRemote(params: { opts: OnboardOptions; diff --git a/src/commands/onboard-remote.ts b/src/commands/onboard-remote.ts index 077f5fa6be..01c1c99417 100644 --- a/src/commands/onboard-remote.ts +++ b/src/commands/onboard-remote.ts @@ -1,8 +1,8 @@ import type { OpenClawConfig } from "../config/config.js"; import type { GatewayBonjourBeacon } from "../infra/bonjour-discovery.js"; -import type { WizardPrompter } from "../wizard/prompts.js"; import { discoverGatewayBeacons } from "../infra/bonjour-discovery.js"; import { resolveWideAreaDiscoveryDomain } from "../infra/widearea-dns.js"; +import type { WizardPrompter } from "../wizard/prompts.js"; import { detectBinary } from "./onboard-helpers.js"; const DEFAULT_GATEWAY_URL = "ws://127.0.0.1:18789"; diff --git a/src/commands/onboard-skills.ts b/src/commands/onboard-skills.ts index c471729bb5..bea474574d 100644 --- a/src/commands/onboard-skills.ts +++ b/src/commands/onboard-skills.ts @@ -1,10 +1,10 @@ -import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { WizardPrompter } from "../wizard/prompts.js"; import { installSkill } from "../agents/skills-install.js"; import { buildWorkspaceSkillStatus } from "../agents/skills-status.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { OpenClawConfig } from "../config/config.js"; +import type { RuntimeEnv } from "../runtime.js"; import { normalizeSecretInput } from "../utils/normalize-secret-input.js"; +import type { WizardPrompter } from "../wizard/prompts.js"; import { detectBinary, resolveNodeManagerOptions } from "./onboard-helpers.js"; function summarizeInstallFailure(message: string): string | undefined { diff --git a/src/commands/onboard.ts b/src/commands/onboard.ts index 47653b2967..2ddcb309cb 100644 --- a/src/commands/onboard.ts +++ b/src/commands/onboard.ts @@ -1,14 +1,14 @@ -import type { RuntimeEnv } from "../runtime.js"; -import type { OnboardOptions } from "./onboard-types.js"; import { formatCliCommand } from "../cli/command-format.js"; import { readConfigFileSnapshot } from "../config/config.js"; import { assertSupportedRuntime } from "../infra/runtime-guard.js"; +import type { RuntimeEnv } from "../runtime.js"; import { defaultRuntime } from "../runtime.js"; import { resolveUserPath } from "../utils.js"; import { isDeprecatedAuthChoice, normalizeLegacyOnboardAuthChoice } from "./auth-choice-legacy.js"; import { DEFAULT_WORKSPACE, handleReset } from "./onboard-helpers.js"; import { runInteractiveOnboarding } from "./onboard-interactive.js"; import { runNonInteractiveOnboarding } from "./onboard-non-interactive.js"; +import type { OnboardOptions } from "./onboard-types.js"; export async function onboardCommand(opts: OnboardOptions, runtime: RuntimeEnv = defaultRuntime) { assertSupportedRuntime(runtime); diff --git a/src/commands/onboarding/plugin-install.ts b/src/commands/onboarding/plugin-install.ts index 235a64f3af..9550f9082f 100644 --- a/src/commands/onboarding/plugin-install.ts +++ b/src/commands/onboarding/plugin-install.ts @@ -1,15 +1,15 @@ import fs from "node:fs"; import path from "node:path"; +import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../../agents/agent-scope.js"; import type { ChannelPluginCatalogEntry } from "../../channels/plugins/catalog.js"; import type { OpenClawConfig } from "../../config/config.js"; -import type { RuntimeEnv } from "../../runtime.js"; -import type { WizardPrompter } from "../../wizard/prompts.js"; -import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../../agents/agent-scope.js"; import { createSubsystemLogger } from "../../logging/subsystem.js"; import { enablePluginInConfig } from "../../plugins/enable.js"; import { installPluginFromNpmSpec } from "../../plugins/install.js"; import { recordPluginInstall } from "../../plugins/installs.js"; import { loadOpenClawPlugins } from "../../plugins/loader.js"; +import type { RuntimeEnv } from "../../runtime.js"; +import type { WizardPrompter } from "../../wizard/prompts.js"; type InstallChoice = "npm" | "local" | "skip"; diff --git a/src/commands/onboarding/registry.ts b/src/commands/onboarding/registry.ts index f305e295b8..d3fdbef2ce 100644 --- a/src/commands/onboarding/registry.ts +++ b/src/commands/onboarding/registry.ts @@ -1,6 +1,6 @@ +import { listChannelPlugins } from "../../channels/plugins/index.js"; import type { ChannelChoice } from "../onboard-types.js"; import type { ChannelOnboardingAdapter } from "./types.js"; -import { listChannelPlugins } from "../../channels/plugins/index.js"; const CHANNEL_ONBOARDING_ADAPTERS = () => new Map( diff --git a/src/commands/provider-auth-helpers.ts b/src/commands/provider-auth-helpers.ts index 1204a3ad39..f36c1c3de7 100644 --- a/src/commands/provider-auth-helpers.ts +++ b/src/commands/provider-auth-helpers.ts @@ -1,6 +1,6 @@ +import { normalizeProviderId } from "../agents/model-selection.js"; import type { OpenClawConfig } from "../config/config.js"; import type { ProviderAuthMethod, ProviderPlugin } from "../plugins/types.js"; -import { normalizeProviderId } from "../agents/model-selection.js"; export function resolveProviderMatch( providers: ProviderPlugin[], diff --git a/src/commands/reset.ts b/src/commands/reset.ts index fd6203c0af..76612fdfcf 100644 --- a/src/commands/reset.ts +++ b/src/commands/reset.ts @@ -1,8 +1,8 @@ import { cancel, confirm, isCancel, select } from "@clack/prompts"; -import type { RuntimeEnv } from "../runtime.js"; import { formatCliCommand } from "../cli/command-format.js"; import { isNixMode } from "../config/config.js"; import { resolveGatewayService } from "../daemon/service.js"; +import type { RuntimeEnv } from "../runtime.js"; import { stylePromptHint, stylePromptMessage, stylePromptTitle } from "../terminal/prompt-style.js"; import { resolveCleanupPlanFromDisk } from "./cleanup-plan.js"; import { listAgentSessionDirs, removePath } from "./cleanup-utils.js"; diff --git a/src/commands/sandbox-display.ts b/src/commands/sandbox-display.ts index 1804586d9c..181af6bcc1 100644 --- a/src/commands/sandbox-display.ts +++ b/src/commands/sandbox-display.ts @@ -3,9 +3,9 @@ */ import type { SandboxBrowserInfo, SandboxContainerInfo } from "../agents/sandbox.js"; -import type { RuntimeEnv } from "../runtime.js"; import { formatCliCommand } from "../cli/command-format.js"; import { formatDurationCompact } from "../infra/format-time/format-duration.ts"; +import type { RuntimeEnv } from "../runtime.js"; import { formatImageMatch, formatSimpleStatus, formatStatus } from "./sandbox-formatters.js"; type DisplayConfig = { diff --git a/src/commands/sandbox-explain.ts b/src/commands/sandbox-explain.ts index 8e79688fe9..f91ab07c81 100644 --- a/src/commands/sandbox-explain.ts +++ b/src/commands/sandbox-explain.ts @@ -1,11 +1,10 @@ -import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; import { resolveAgentConfig } from "../agents/agent-scope.js"; import { resolveSandboxConfigForAgent, resolveSandboxToolPolicyForAgent, } from "../agents/sandbox.js"; import { normalizeAnyChannelId } from "../channels/registry.js"; +import type { OpenClawConfig } from "../config/config.js"; import { loadConfig } from "../config/config.js"; import { loadSessionStore, @@ -20,6 +19,7 @@ import { parseAgentSessionKey, resolveAgentIdFromSessionKey, } from "../routing/session-key.js"; +import type { RuntimeEnv } from "../runtime.js"; import { formatDocsLink } from "../terminal/links.js"; import { colorize, isRich, theme } from "../terminal/theme.js"; import { INTERNAL_MESSAGE_CHANNEL } from "../utils/message-channel.js"; diff --git a/src/commands/sandbox.ts b/src/commands/sandbox.ts index 9fca4206a3..e9071ce781 100644 --- a/src/commands/sandbox.ts +++ b/src/commands/sandbox.ts @@ -1,5 +1,4 @@ import { confirm as clackConfirm } from "@clack/prompts"; -import type { RuntimeEnv } from "../runtime.js"; import { listSandboxBrowsers, listSandboxContainers, @@ -8,6 +7,7 @@ import { type SandboxBrowserInfo, type SandboxContainerInfo, } from "../agents/sandbox.js"; +import type { RuntimeEnv } from "../runtime.js"; import { displayBrowsers, displayContainers, diff --git a/src/commands/sessions.ts b/src/commands/sessions.ts index 03a912e63e..a75d8ec711 100644 --- a/src/commands/sessions.ts +++ b/src/commands/sessions.ts @@ -1,4 +1,3 @@ -import type { RuntimeEnv } from "../runtime.js"; import { lookupContextTokens } from "../agents/context.js"; import { DEFAULT_CONTEXT_TOKENS, DEFAULT_MODEL, DEFAULT_PROVIDER } from "../agents/defaults.js"; import { resolveConfiguredModelRef } from "../agents/model-selection.js"; @@ -12,6 +11,7 @@ import { import { classifySessionKey } from "../gateway/session-utils.js"; import { info } from "../globals.js"; import { formatTimeAgo } from "../infra/format-time/format-relative.ts"; +import type { RuntimeEnv } from "../runtime.js"; import { isRich, theme } from "../terminal/theme.js"; type SessionRow = { diff --git a/src/commands/setup.ts b/src/commands/setup.ts index 70e595599b..3045f748b1 100644 --- a/src/commands/setup.ts +++ b/src/commands/setup.ts @@ -1,10 +1,10 @@ -import JSON5 from "json5"; import fs from "node:fs/promises"; -import type { RuntimeEnv } from "../runtime.js"; +import JSON5 from "json5"; import { DEFAULT_AGENT_WORKSPACE_DIR, ensureAgentWorkspace } from "../agents/workspace.js"; import { type OpenClawConfig, createConfigIO, writeConfigFile } from "../config/config.js"; import { formatConfigPath, logConfigUpdated } from "../config/logging.js"; import { resolveSessionTranscriptsDir } from "../config/sessions.js"; +import type { RuntimeEnv } from "../runtime.js"; import { defaultRuntime } from "../runtime.js"; import { shortenHomePath } from "../utils.js"; diff --git a/src/commands/signal-install.test.ts b/src/commands/signal-install.test.ts index ccde686f62..c078c6fd75 100644 --- a/src/commands/signal-install.test.ts +++ b/src/commands/signal-install.test.ts @@ -1,7 +1,7 @@ -import JSZip from "jszip"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import JSZip from "jszip"; import * as tar from "tar"; import { describe, expect, it } from "vitest"; import type { ReleaseAsset } from "./signal-install.js"; diff --git a/src/commands/signal-install.ts b/src/commands/signal-install.ts index 768d09f33c..a5c73392b4 100644 --- a/src/commands/signal-install.ts +++ b/src/commands/signal-install.ts @@ -4,10 +4,10 @@ import { request } from "node:https"; import os from "node:os"; import path from "node:path"; import { pipeline } from "node:stream/promises"; -import type { RuntimeEnv } from "../runtime.js"; import { extractArchive } from "../infra/archive.js"; import { resolveBrewExecutable } from "../infra/brew.js"; import { runCommandWithTimeout } from "../process/exec.js"; +import type { RuntimeEnv } from "../runtime.js"; import { CONFIG_DIR } from "../utils.js"; export type ReleaseAsset = { diff --git a/src/commands/status-all.ts b/src/commands/status-all.ts index 7983a70e18..e7b38cb0ec 100644 --- a/src/commands/status-all.ts +++ b/src/commands/status-all.ts @@ -1,11 +1,10 @@ -import type { GatewayService } from "../daemon/service.js"; -import type { RuntimeEnv } from "../runtime.js"; import { buildWorkspaceSkillStatus } from "../agents/skills-status.js"; import { formatCliCommand } from "../cli/command-format.js"; import { withProgress } from "../cli/progress.js"; import { loadConfig, readConfigFileSnapshot, resolveGatewayPort } from "../config/config.js"; import { readLastGatewayErrorLine } from "../daemon/diagnostics.js"; import { resolveNodeService } from "../daemon/node-service.js"; +import type { GatewayService } from "../daemon/service.js"; import { resolveGatewayService } from "../daemon/service.js"; import { buildGatewayConnectionDetails, callGateway } from "../gateway/call.js"; import { normalizeControlUiBasePath } from "../gateway/control-ui-shared.js"; @@ -21,6 +20,7 @@ import { readTailscaleStatusJson } from "../infra/tailscale.js"; import { normalizeUpdateChannel, resolveUpdateChannelDisplay } from "../infra/update-channels.js"; import { checkUpdateStatus, formatGitInstallLabel } from "../infra/update-check.js"; import { runExec } from "../process/exec.js"; +import type { RuntimeEnv } from "../runtime.js"; import { VERSION } from "../version.js"; import { resolveControlUiLinks } from "./onboard-helpers.js"; import { getAgentLocalStatuses } from "./status-all/agents.js"; diff --git a/src/commands/status-all/agents.ts b/src/commands/status-all/agents.ts index a30f65e128..caf1ae03ed 100644 --- a/src/commands/status-all/agents.ts +++ b/src/commands/status-all/agents.ts @@ -1,7 +1,7 @@ import fs from "node:fs/promises"; import path from "node:path"; -import type { OpenClawConfig } from "../../config/config.js"; import { resolveAgentWorkspaceDir } from "../../agents/agent-scope.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { loadSessionStore, resolveStorePath } from "../../config/sessions.js"; import { listAgentsForGateway } from "../../gateway/session-utils.js"; diff --git a/src/commands/status-all/channels.mattermost-token-summary.test.ts b/src/commands/status-all/channels.mattermost-token-summary.test.ts index 57c5cc7162..645bd30f81 100644 --- a/src/commands/status-all/channels.mattermost-token-summary.test.ts +++ b/src/commands/status-all/channels.mattermost-token-summary.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from "vitest"; -import type { ChannelPlugin } from "../../channels/plugins/types.js"; import { listChannelPlugins } from "../../channels/plugins/index.js"; +import type { ChannelPlugin } from "../../channels/plugins/types.js"; import { buildChannelsTable } from "./channels.js"; vi.mock("../../channels/plugins/index.js", () => ({ diff --git a/src/commands/status-all/channels.ts b/src/commands/status-all/channels.ts index 3ab0e3316a..1a324c9320 100644 --- a/src/commands/status-all/channels.ts +++ b/src/commands/status-all/channels.ts @@ -1,16 +1,16 @@ import fs from "node:fs"; -import type { - ChannelAccountSnapshot, - ChannelId, - ChannelPlugin, -} from "../../channels/plugins/types.js"; -import type { OpenClawConfig } from "../../config/config.js"; import { buildChannelAccountSnapshot, formatChannelAllowFrom, } from "../../channels/account-summary.js"; import { resolveChannelDefaultAccountId } from "../../channels/plugins/helpers.js"; import { listChannelPlugins } from "../../channels/plugins/index.js"; +import type { + ChannelAccountSnapshot, + ChannelId, + ChannelPlugin, +} from "../../channels/plugins/types.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { sha256HexPrefix } from "../../logging/redact-identifier.js"; import { formatTimeAgo } from "./format.js"; diff --git a/src/commands/status.command.ts b/src/commands/status.command.ts index e500b689a6..e06feb42af 100644 --- a/src/commands/status.command.ts +++ b/src/commands/status.command.ts @@ -1,11 +1,10 @@ -import type { HeartbeatEventPayload } from "../infra/heartbeat-events.js"; -import type { RuntimeEnv } from "../runtime.js"; import { formatCliCommand } from "../cli/command-format.js"; import { withProgress } from "../cli/progress.js"; import { resolveGatewayPort } from "../config/config.js"; import { buildGatewayConnectionDetails, callGateway } from "../gateway/call.js"; import { info } from "../globals.js"; import { formatTimeAgo } from "../infra/format-time/format-relative.ts"; +import type { HeartbeatEventPayload } from "../infra/heartbeat-events.js"; import { formatUsageReportLines, loadProviderUsageSummary } from "../infra/provider-usage.js"; import { normalizeUpdateChannel, resolveUpdateChannelDisplay } from "../infra/update-channels.js"; import { formatGitInstallLabel } from "../infra/update-check.js"; @@ -15,6 +14,7 @@ import { resolveMemoryVectorState, type Tone, } from "../memory/status-format.js"; +import type { RuntimeEnv } from "../runtime.js"; import { runSecurityAudit } from "../security/audit.js"; import { renderTable } from "../terminal/table.js"; import { theme } from "../terminal/theme.js"; diff --git a/src/commands/status.daemon.ts b/src/commands/status.daemon.ts index e1fd4820b6..af6ee25c12 100644 --- a/src/commands/status.daemon.ts +++ b/src/commands/status.daemon.ts @@ -1,5 +1,5 @@ -import type { GatewayService } from "../daemon/service.js"; import { resolveNodeService } from "../daemon/node-service.js"; +import type { GatewayService } from "../daemon/service.js"; import { resolveGatewayService } from "../daemon/service.js"; import { formatDaemonRuntimeShort } from "./status.format.js"; diff --git a/src/commands/status.format.ts b/src/commands/status.format.ts index 87fe094b19..6564623138 100644 --- a/src/commands/status.format.ts +++ b/src/commands/status.format.ts @@ -1,6 +1,6 @@ -import type { SessionStatus } from "./status.types.js"; import { formatDurationPrecise } from "../infra/format-time/format-duration.ts"; import { formatRuntimeStatusWithDetails } from "../infra/runtime-status.ts"; +import type { SessionStatus } from "./status.types.js"; export const formatKTokens = (value: number) => `${(value / 1000).toFixed(value >= 10_000 ? 0 : 1)}k`; diff --git a/src/commands/status.link-channel.ts b/src/commands/status.link-channel.ts index d936dddf2b..cea7b8feb9 100644 --- a/src/commands/status.link-channel.ts +++ b/src/commands/status.link-channel.ts @@ -1,7 +1,7 @@ -import type { ChannelAccountSnapshot, ChannelPlugin } from "../channels/plugins/types.js"; -import type { OpenClawConfig } from "../config/config.js"; import { resolveChannelDefaultAccountId } from "../channels/plugins/helpers.js"; import { listChannelPlugins } from "../channels/plugins/index.js"; +import type { ChannelAccountSnapshot, ChannelPlugin } from "../channels/plugins/types.js"; +import type { OpenClawConfig } from "../config/config.js"; export type LinkChannelContext = { linked: boolean; diff --git a/src/commands/status.scan.ts b/src/commands/status.scan.ts index 862a2c6c15..2321843445 100644 --- a/src/commands/status.scan.ts +++ b/src/commands/status.scan.ts @@ -1,5 +1,3 @@ -import type { MemoryProviderStatus } from "../memory/types.js"; -import type { RuntimeEnv } from "../runtime.js"; import { withProgress } from "../cli/progress.js"; import { loadConfig } from "../config/config.js"; import { buildGatewayConnectionDetails, callGateway } from "../gateway/call.js"; @@ -9,7 +7,9 @@ import { collectChannelStatusIssues } from "../infra/channels-status-issues.js"; import { resolveOsSummary } from "../infra/os-summary.js"; import { getTailnetHostname } from "../infra/tailscale.js"; import { getMemorySearchManager } from "../memory/index.js"; +import type { MemoryProviderStatus } from "../memory/types.js"; import { runExec } from "../process/exec.js"; +import type { RuntimeEnv } from "../runtime.js"; import { buildChannelsTable } from "./status-all/channels.js"; import { getAgentLocalStatuses } from "./status.agent-local.js"; import { pickGatewaySelfPresence, resolveGatewayProbeAuth } from "./status.gateway-probe.js"; diff --git a/src/commands/status.summary.redaction.test.ts b/src/commands/status.summary.redaction.test.ts index 9920e63a02..02eaecbcb3 100644 --- a/src/commands/status.summary.redaction.test.ts +++ b/src/commands/status.summary.redaction.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import type { StatusSummary } from "./status.types.js"; import { redactSensitiveStatusSummary } from "./status.summary.js"; +import type { StatusSummary } from "./status.types.js"; function createRecentSessionRow() { return { diff --git a/src/commands/status.summary.ts b/src/commands/status.summary.ts index 6667c12f51..6cee0d7de8 100644 --- a/src/commands/status.summary.ts +++ b/src/commands/status.summary.ts @@ -1,4 +1,3 @@ -import type { HeartbeatStatus, SessionStatus, StatusSummary } from "./status.types.js"; import { lookupContextTokens } from "../agents/context.js"; import { DEFAULT_CONTEXT_TOKENS, DEFAULT_MODEL, DEFAULT_PROVIDER } from "../agents/defaults.js"; import { resolveConfiguredModelRef } from "../agents/model-selection.js"; @@ -16,6 +15,7 @@ import { resolveHeartbeatSummaryForAgent } from "../infra/heartbeat-runner.js"; import { peekSystemEvents } from "../infra/system-events.js"; import { parseAgentSessionKey } from "../routing/session-key.js"; import { resolveLinkChannelContext } from "./status.link-channel.js"; +import type { HeartbeatStatus, SessionStatus, StatusSummary } from "./status.types.js"; const buildFlags = (entry?: SessionEntry): string[] => { if (!entry) { diff --git a/src/commands/systemd-linger.ts b/src/commands/systemd-linger.ts index ef0356f8f8..f810f5c250 100644 --- a/src/commands/systemd-linger.ts +++ b/src/commands/systemd-linger.ts @@ -1,9 +1,9 @@ -import type { RuntimeEnv } from "../runtime.js"; import { enableSystemdUserLinger, isSystemdUserServiceAvailable, readSystemdUserLingerStatus, } from "../daemon/systemd.js"; +import type { RuntimeEnv } from "../runtime.js"; import { note } from "../terminal/note.js"; export type LingerPrompter = { diff --git a/src/commands/test-wizard-helpers.ts b/src/commands/test-wizard-helpers.ts index bf12645a13..078cd5ef87 100644 --- a/src/commands/test-wizard-helpers.ts +++ b/src/commands/test-wizard-helpers.ts @@ -2,9 +2,9 @@ import fs from "node:fs/promises"; import path from "node:path"; import { vi } from "vitest"; import type { RuntimeEnv } from "../runtime.js"; -import type { WizardPrompter } from "../wizard/prompts.js"; import { makeTempWorkspace } from "../test-helpers/workspace.js"; import { captureEnv } from "../test-utils/env.js"; +import type { WizardPrompter } from "../wizard/prompts.js"; export const noopAsync = async () => {}; export const noop = () => {}; diff --git a/src/commands/uninstall.ts b/src/commands/uninstall.ts index 333d664112..59691653f9 100644 --- a/src/commands/uninstall.ts +++ b/src/commands/uninstall.ts @@ -1,8 +1,8 @@ -import { cancel, confirm, isCancel, multiselect } from "@clack/prompts"; import path from "node:path"; -import type { RuntimeEnv } from "../runtime.js"; +import { cancel, confirm, isCancel, multiselect } from "@clack/prompts"; import { isNixMode } from "../config/config.js"; import { resolveGatewayService } from "../daemon/service.js"; +import type { RuntimeEnv } from "../runtime.js"; import { stylePromptHint, stylePromptMessage, stylePromptTitle } from "../terminal/prompt-style.js"; import { resolveHomeDir } from "../utils.js"; import { resolveCleanupPlanFromDisk } from "./cleanup-plan.js"; diff --git a/src/commands/vllm-setup.ts b/src/commands/vllm-setup.ts index a2525ff2e2..f0f3f47356 100644 --- a/src/commands/vllm-setup.ts +++ b/src/commands/vllm-setup.ts @@ -1,6 +1,6 @@ +import { upsertAuthProfileWithLock } from "../agents/auth-profiles.js"; import type { OpenClawConfig } from "../config/config.js"; import type { WizardPrompter } from "../wizard/prompts.js"; -import { upsertAuthProfileWithLock } from "../agents/auth-profiles.js"; export const VLLM_DEFAULT_BASE_URL = "http://127.0.0.1:8000/v1"; export const VLLM_DEFAULT_CONTEXT_WINDOW = 128000; diff --git a/src/config/agent-dirs.test.ts b/src/config/agent-dirs.test.ts index 399d00b2a4..f7f3605c08 100644 --- a/src/config/agent-dirs.test.ts +++ b/src/config/agent-dirs.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from "vitest"; -import type { OpenClawConfig } from "./types.js"; import { findDuplicateAgentDirs } from "./agent-dirs.js"; +import type { OpenClawConfig } from "./types.js"; afterEach(() => { vi.unstubAllEnvs(); diff --git a/src/config/agent-dirs.ts b/src/config/agent-dirs.ts index 1507c01080..acbdbdeb19 100644 --- a/src/config/agent-dirs.ts +++ b/src/config/agent-dirs.ts @@ -1,10 +1,10 @@ import os from "node:os"; import path from "node:path"; -import type { OpenClawConfig } from "./types.js"; import { resolveRequiredHomeDir } from "../infra/home-dir.js"; import { DEFAULT_AGENT_ID, normalizeAgentId } from "../routing/session-key.js"; import { resolveUserPath } from "../utils.js"; import { resolveStateDir } from "./paths.js"; +import type { OpenClawConfig } from "./types.js"; export type DuplicateAgentDir = { agentDir: string; diff --git a/src/config/channel-capabilities.test.ts b/src/config/channel-capabilities.test.ts index ca67fdd8f1..7af4c32010 100644 --- a/src/config/channel-capabilities.test.ts +++ b/src/config/channel-capabilities.test.ts @@ -1,9 +1,9 @@ import { afterEach, beforeEach, describe, expect, it } from "vitest"; import type { ChannelPlugin } from "../channels/plugins/types.js"; import type { PluginRegistry } from "../plugins/registry.js"; -import type { OpenClawConfig } from "./config.js"; import { setActivePluginRegistry } from "../plugins/runtime.js"; import { resolveChannelCapabilities } from "./channel-capabilities.js"; +import type { OpenClawConfig } from "./config.js"; describe("resolveChannelCapabilities", () => { beforeEach(() => { diff --git a/src/config/channel-capabilities.ts b/src/config/channel-capabilities.ts index 9754decb1d..7e5bd75461 100644 --- a/src/config/channel-capabilities.ts +++ b/src/config/channel-capabilities.ts @@ -1,7 +1,7 @@ -import type { OpenClawConfig } from "./config.js"; -import type { TelegramCapabilitiesConfig } from "./types.telegram.js"; import { normalizeChannelId } from "../channels/plugins/index.js"; import { normalizeAccountId } from "../routing/session-key.js"; +import type { OpenClawConfig } from "./config.js"; +import type { TelegramCapabilitiesConfig } from "./types.telegram.js"; type CapabilitiesConfig = TelegramCapabilitiesConfig; diff --git a/src/config/commands.ts b/src/config/commands.ts index 7a248faad2..c2b3a363a8 100644 --- a/src/config/commands.ts +++ b/src/config/commands.ts @@ -1,6 +1,6 @@ +import { normalizeChannelId } from "../channels/plugins/index.js"; import type { ChannelId } from "../channels/plugins/types.js"; import type { NativeCommandsSetting } from "./types.js"; -import { normalizeChannelId } from "../channels/plugins/index.js"; function resolveAutoDefault(providerId?: ChannelId): boolean { const id = normalizeChannelId(providerId); diff --git a/src/config/config.backup-rotation.test.ts b/src/config/config.backup-rotation.test.ts index d569d20e71..cf55025d80 100644 --- a/src/config/config.backup-rotation.test.ts +++ b/src/config/config.backup-rotation.test.ts @@ -1,9 +1,9 @@ import fs from "node:fs/promises"; import path from "node:path"; import { describe, expect, it } from "vitest"; -import type { OpenClawConfig } from "./types.js"; import { rotateConfigBackups } from "./backup-rotation.js"; import { withTempHome } from "./test-helpers.js"; +import type { OpenClawConfig } from "./types.js"; describe("config backup rotation", () => { it("keeps a 5-deep backup ring for config writes", async () => { diff --git a/src/config/config.env-vars.test.ts b/src/config/config.env-vars.test.ts index fdee7bd053..5b628c6fef 100644 --- a/src/config/config.env-vars.test.ts +++ b/src/config/config.env-vars.test.ts @@ -1,11 +1,11 @@ import fs from "node:fs/promises"; import path from "node:path"; import { describe, expect, it } from "vitest"; -import type { OpenClawConfig } from "./types.js"; import { loadDotEnv } from "../infra/dotenv.js"; import { resolveConfigEnvVars } from "./env-substitution.js"; import { applyConfigEnvVars } from "./env-vars.js"; import { withEnvOverride, withTempHome } from "./test-helpers.js"; +import type { OpenClawConfig } from "./types.js"; describe("config env vars", () => { it("applies env vars from env block when missing", async () => { diff --git a/src/config/defaults.ts b/src/config/defaults.ts index 820533a066..cecc8d9e22 100644 --- a/src/config/defaults.ts +++ b/src/config/defaults.ts @@ -1,9 +1,9 @@ -import type { OpenClawConfig } from "./types.js"; -import type { ModelDefinitionConfig } from "./types.models.js"; import { DEFAULT_CONTEXT_TOKENS } from "../agents/defaults.js"; import { parseModelRef } from "../agents/model-selection.js"; import { DEFAULT_AGENT_MAX_CONCURRENT, DEFAULT_SUBAGENT_MAX_CONCURRENT } from "./agent-limits.js"; import { resolveTalkApiKey } from "./talk.js"; +import type { OpenClawConfig } from "./types.js"; +import type { ModelDefinitionConfig } from "./types.models.js"; type WarnState = { warned: boolean }; diff --git a/src/config/group-policy.ts b/src/config/group-policy.ts index 8aecd78a8f..9082e74aac 100644 --- a/src/config/group-policy.ts +++ b/src/config/group-policy.ts @@ -1,7 +1,7 @@ import type { ChannelId } from "../channels/plugins/types.js"; +import { normalizeAccountId } from "../routing/session-key.js"; import type { OpenClawConfig } from "./config.js"; import type { GroupToolPolicyBySenderConfig, GroupToolPolicyConfig } from "./types.tools.js"; -import { normalizeAccountId } from "../routing/session-key.js"; export type GroupPolicyChannel = ChannelId; diff --git a/src/config/includes-scan.ts b/src/config/includes-scan.ts index 28ee377c85..3906b9e2cf 100644 --- a/src/config/includes-scan.ts +++ b/src/config/includes-scan.ts @@ -1,6 +1,6 @@ -import JSON5 from "json5"; import * as fs from "node:fs/promises"; import path from "node:path"; +import JSON5 from "json5"; import { INCLUDE_KEY, MAX_INCLUDE_DEPTH } from "./includes.js"; function listDirectIncludes(parsed: unknown): string[] { diff --git a/src/config/includes.ts b/src/config/includes.ts index 9f55803b4b..53e4c81acf 100644 --- a/src/config/includes.ts +++ b/src/config/includes.ts @@ -10,9 +10,9 @@ * ``` */ -import JSON5 from "json5"; import fs from "node:fs"; import path from "node:path"; +import JSON5 from "json5"; import { isPlainObject } from "../utils.js"; export const INCLUDE_KEY = "$include"; diff --git a/src/config/io.ts b/src/config/io.ts index e922e005a4..ef9449742e 100644 --- a/src/config/io.ts +++ b/src/config/io.ts @@ -1,10 +1,9 @@ -import JSON5 from "json5"; import crypto from "node:crypto"; import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import { isDeepStrictEqual } from "node:util"; -import type { OpenClawConfig, ConfigFileSnapshot, LegacyConfigIssue } from "./types.js"; +import JSON5 from "json5"; import { loadDotEnv } from "../infra/dotenv.js"; import { resolveRequiredHomeDir } from "../infra/home-dir.js"; import { @@ -39,6 +38,7 @@ import { applyMergePatch } from "./merge-patch.js"; import { normalizeConfigPaths } from "./normalize-paths.js"; import { resolveConfigPath, resolveDefaultConfigCandidates, resolveStateDir } from "./paths.js"; import { applyConfigOverrides } from "./runtime-overrides.js"; +import type { OpenClawConfig, ConfigFileSnapshot, LegacyConfigIssue } from "./types.js"; import { validateConfigObjectRawWithPlugins, validateConfigObjectWithPlugins, diff --git a/src/config/legacy-migrate.ts b/src/config/legacy-migrate.ts index 15617f1980..fedb59c2d6 100644 --- a/src/config/legacy-migrate.ts +++ b/src/config/legacy-migrate.ts @@ -1,5 +1,5 @@ -import type { OpenClawConfig } from "./types.js"; import { applyLegacyMigrations } from "./legacy.js"; +import type { OpenClawConfig } from "./types.js"; import { validateConfigObjectWithPlugins } from "./validation.js"; export function migrateLegacyConfig(raw: unknown): { diff --git a/src/config/legacy.ts b/src/config/legacy.ts index c5ba7d02fc..4f34fb9563 100644 --- a/src/config/legacy.ts +++ b/src/config/legacy.ts @@ -1,6 +1,6 @@ -import type { LegacyConfigIssue } from "./types.js"; import { LEGACY_CONFIG_MIGRATIONS } from "./legacy.migrations.js"; import { LEGACY_CONFIG_RULES } from "./legacy.rules.js"; +import type { LegacyConfigIssue } from "./types.js"; export function findLegacyConfigIssues(raw: unknown): LegacyConfigIssue[] { if (!raw || typeof raw !== "object") { diff --git a/src/config/markdown-tables.ts b/src/config/markdown-tables.ts index d74ee20d7d..8815a90b13 100644 --- a/src/config/markdown-tables.ts +++ b/src/config/markdown-tables.ts @@ -1,7 +1,7 @@ -import type { OpenClawConfig } from "./config.js"; -import type { MarkdownTableMode } from "./types.base.js"; import { normalizeChannelId } from "../channels/plugins/index.js"; import { normalizeAccountId } from "../routing/session-key.js"; +import type { OpenClawConfig } from "./config.js"; +import type { MarkdownTableMode } from "./types.base.js"; type MarkdownConfigEntry = { markdown?: { diff --git a/src/config/model-alias-defaults.test.ts b/src/config/model-alias-defaults.test.ts index 2635cbe0ac..025b946368 100644 --- a/src/config/model-alias-defaults.test.ts +++ b/src/config/model-alias-defaults.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from "vitest"; -import type { OpenClawConfig } from "./types.js"; import { DEFAULT_CONTEXT_TOKENS } from "../agents/defaults.js"; import { applyModelDefaults } from "./defaults.js"; +import type { OpenClawConfig } from "./types.js"; describe("applyModelDefaults", () => { it("adds default aliases when models are present", () => { diff --git a/src/config/normalize-paths.ts b/src/config/normalize-paths.ts index 2178f96afb..98914d3499 100644 --- a/src/config/normalize-paths.ts +++ b/src/config/normalize-paths.ts @@ -1,5 +1,5 @@ -import type { OpenClawConfig } from "./types.js"; import { isPlainObject, resolveUserPath } from "../utils.js"; +import type { OpenClawConfig } from "./types.js"; const PATH_VALUE_RE = /^~(?=$|[\\/])/; diff --git a/src/config/paths.ts b/src/config/paths.ts index 18f8ab9266..b60f41f336 100644 --- a/src/config/paths.ts +++ b/src/config/paths.ts @@ -1,8 +1,8 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; -import type { OpenClawConfig } from "./types.js"; import { expandHomePrefix, resolveRequiredHomeDir } from "../infra/home-dir.js"; +import type { OpenClawConfig } from "./types.js"; /** * Nix mode detection: When OPENCLAW_NIX_MODE=1, the gateway is running under Nix. diff --git a/src/config/plugin-auto-enable.ts b/src/config/plugin-auto-enable.ts index 1ad048a355..40e8270860 100644 --- a/src/config/plugin-auto-enable.ts +++ b/src/config/plugin-auto-enable.ts @@ -1,4 +1,3 @@ -import type { OpenClawConfig } from "./config.js"; import { normalizeProviderId } from "../agents/model-selection.js"; import { getChannelPluginCatalogEntry, @@ -11,6 +10,7 @@ import { } from "../channels/registry.js"; import { isRecord } from "../utils.js"; import { hasAnyWhatsAppAuth } from "../web/accounts.js"; +import type { OpenClawConfig } from "./config.js"; import { ensurePluginAllowlisted } from "./plugins-allowlist.js"; type PluginEnableChange = { diff --git a/src/config/redact-snapshot.test.ts b/src/config/redact-snapshot.test.ts index 455a7e96f9..8f262d545f 100644 --- a/src/config/redact-snapshot.test.ts +++ b/src/config/redact-snapshot.test.ts @@ -1,12 +1,12 @@ import { describe, expect, it } from "vitest"; -import type { ConfigUiHints } from "./schema.js"; -import type { ConfigFileSnapshot } from "./types.openclaw.js"; import { REDACTED_SENTINEL, redactConfigSnapshot, restoreRedactedValues as restoreRedactedValues_orig, } from "./redact-snapshot.js"; import { __test__ } from "./schema.hints.js"; +import type { ConfigUiHints } from "./schema.js"; +import type { ConfigFileSnapshot } from "./types.openclaw.js"; import { OpenClawSchema } from "./zod-schema.js"; const { mapSensitivePaths } = __test__; diff --git a/src/config/redact-snapshot.ts b/src/config/redact-snapshot.ts index 81b02b8225..0059138a41 100644 --- a/src/config/redact-snapshot.ts +++ b/src/config/redact-snapshot.ts @@ -1,6 +1,6 @@ -import type { ConfigFileSnapshot } from "./types.openclaw.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { isSensitiveConfigPath, type ConfigUiHints } from "./schema.hints.js"; +import type { ConfigFileSnapshot } from "./types.openclaw.js"; const log = createSubsystemLogger("config/redaction"); const ENV_VAR_PLACEHOLDER_PATTERN = /^\$\{[^}]*\}$/; diff --git a/src/config/runtime-overrides.test.ts b/src/config/runtime-overrides.test.ts index 3dfdf4457c..2f859e10be 100644 --- a/src/config/runtime-overrides.test.ts +++ b/src/config/runtime-overrides.test.ts @@ -1,5 +1,4 @@ import { beforeEach, describe, expect, it } from "vitest"; -import type { OpenClawConfig } from "./types.js"; import { applyConfigOverrides, getConfigOverrides, @@ -7,6 +6,7 @@ import { setConfigOverride, unsetConfigOverride, } from "./runtime-overrides.js"; +import type { OpenClawConfig } from "./types.js"; describe("runtime overrides", () => { beforeEach(() => { diff --git a/src/config/runtime-overrides.ts b/src/config/runtime-overrides.ts index 5c4ba076a0..14de08304d 100644 --- a/src/config/runtime-overrides.ts +++ b/src/config/runtime-overrides.ts @@ -1,6 +1,6 @@ -import type { OpenClawConfig } from "./types.js"; import { isPlainObject } from "../utils.js"; import { parseConfigPath, setConfigValueAtPath, unsetConfigValueAtPath } from "./config-paths.js"; +import type { OpenClawConfig } from "./types.js"; type OverrideTree = Record; diff --git a/src/config/schema.ts b/src/config/schema.ts index f3ae6bf2fa..74dc00f784 100644 --- a/src/config/schema.ts +++ b/src/config/schema.ts @@ -1,6 +1,6 @@ -import type { ConfigUiHint, ConfigUiHints } from "./schema.hints.js"; import { CHANNEL_IDS } from "../channels/registry.js"; import { VERSION } from "../version.js"; +import type { ConfigUiHint, ConfigUiHints } from "./schema.hints.js"; import { applySensitiveHints, buildBaseHints, mapSensitivePaths } from "./schema.hints.js"; import { OpenClawSchema } from "./zod-schema.js"; diff --git a/src/config/sessions/group.ts b/src/config/sessions/group.ts index 76ff191cc5..d02726a004 100644 --- a/src/config/sessions/group.ts +++ b/src/config/sessions/group.ts @@ -1,6 +1,6 @@ import type { MsgContext } from "../../auto-reply/templating.js"; -import type { GroupKeyResolution } from "./types.js"; import { listDeliverableMessageChannels } from "../../utils/message-channel.js"; +import type { GroupKeyResolution } from "./types.js"; const getGroupSurfaces = () => new Set([...listDeliverableMessageChannels(), "webchat"]); diff --git a/src/config/sessions/main-session.ts b/src/config/sessions/main-session.ts index ea90fc8bb7..b9e4ef1642 100644 --- a/src/config/sessions/main-session.ts +++ b/src/config/sessions/main-session.ts @@ -1,4 +1,3 @@ -import type { SessionScope } from "./types.js"; import { buildAgentMainSessionKey, DEFAULT_AGENT_ID, @@ -7,6 +6,7 @@ import { resolveAgentIdFromSessionKey, } from "../../routing/session-key.js"; import { loadConfig } from "../config.js"; +import type { SessionScope } from "./types.js"; export function resolveMainSessionKey(cfg?: { session?: { scope?: SessionScope; mainKey?: string }; diff --git a/src/config/sessions/metadata.ts b/src/config/sessions/metadata.ts index b250951b35..c438fd60f2 100644 --- a/src/config/sessions/metadata.ts +++ b/src/config/sessions/metadata.ts @@ -1,11 +1,11 @@ import type { MsgContext } from "../../auto-reply/templating.js"; -import type { GroupKeyResolution, SessionEntry, SessionOrigin } from "./types.js"; import { normalizeChatType } from "../../channels/chat-type.js"; import { resolveConversationLabel } from "../../channels/conversation-label.js"; import { getChannelDock } from "../../channels/dock.js"; import { normalizeChannelId } from "../../channels/plugins/index.js"; import { normalizeMessageChannel } from "../../utils/message-channel.js"; import { buildGroupDisplayName, resolveGroupSessionKey } from "./group.js"; +import type { GroupKeyResolution, SessionEntry, SessionOrigin } from "./types.js"; const mergeOrigin = ( existing: SessionOrigin | undefined, diff --git a/src/config/sessions/reset.ts b/src/config/sessions/reset.ts index 50fb911148..1bf5887f24 100644 --- a/src/config/sessions/reset.ts +++ b/src/config/sessions/reset.ts @@ -1,5 +1,5 @@ -import type { SessionConfig, SessionResetConfig } from "../types.base.js"; import { normalizeMessageChannel } from "../../utils/message-channel.js"; +import type { SessionConfig, SessionResetConfig } from "../types.base.js"; import { DEFAULT_IDLE_MINUTES } from "./types.js"; export type SessionResetMode = "daily" | "idle"; diff --git a/src/config/sessions/session-key.ts b/src/config/sessions/session-key.ts index 08c645f3cf..3244f5c7c6 100644 --- a/src/config/sessions/session-key.ts +++ b/src/config/sessions/session-key.ts @@ -1,5 +1,4 @@ import type { MsgContext } from "../../auto-reply/templating.js"; -import type { SessionScope } from "./types.js"; import { buildAgentMainSessionKey, DEFAULT_AGENT_ID, @@ -7,6 +6,7 @@ import { } from "../../routing/session-key.js"; import { normalizeE164 } from "../../utils.js"; import { resolveGroupSessionKey } from "./group.js"; +import type { SessionScope } from "./types.js"; // Decide which session bucket to use (per-sender vs global). export function deriveSessionKey(scope: SessionScope, ctx: MsgContext) { diff --git a/src/config/sessions/sessions.test.ts b/src/config/sessions/sessions.test.ts index 39387b220f..c8aff2b4de 100644 --- a/src/config/sessions/sessions.test.ts +++ b/src/config/sessions/sessions.test.ts @@ -3,13 +3,12 @@ import fsPromises from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import type { SessionConfig } from "../types.base.js"; -import type { SessionEntry } from "./types.js"; import { clearSessionStoreCacheForTest, loadSessionStore, updateSessionStore, } from "../sessions.js"; +import type { SessionConfig } from "../types.base.js"; import { resolveSessionFilePath, resolveSessionTranscriptPathInDir, @@ -17,6 +16,7 @@ import { } from "./paths.js"; import { resolveSessionResetPolicy } from "./reset.js"; import { appendAssistantMessageToSessionTranscript } from "./transcript.js"; +import type { SessionEntry } from "./types.js"; describe("session path safety", () => { it("rejects unsafe session IDs", () => { diff --git a/src/config/sessions/store.pruning.e2e.test.ts b/src/config/sessions/store.pruning.e2e.test.ts index a382e050a5..a7b7182f7c 100644 --- a/src/config/sessions/store.pruning.e2e.test.ts +++ b/src/config/sessions/store.pruning.e2e.test.ts @@ -3,8 +3,8 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import type { SessionEntry } from "./types.js"; import { clearSessionStoreCacheForTest, loadSessionStore, saveSessionStore } from "./store.js"; +import type { SessionEntry } from "./types.js"; // Keep integration tests deterministic: never read a real openclaw.json. vi.mock("../config.js", () => ({ diff --git a/src/config/sessions/store.pruning.test.ts b/src/config/sessions/store.pruning.test.ts index a31a97b8f9..677a01fb4c 100644 --- a/src/config/sessions/store.pruning.test.ts +++ b/src/config/sessions/store.pruning.test.ts @@ -3,8 +3,8 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import type { SessionEntry } from "./types.js"; import { capEntryCount, pruneStaleEntries, rotateSessionFile } from "./store.js"; +import type { SessionEntry } from "./types.js"; const DAY_MS = 24 * 60 * 60 * 1000; diff --git a/src/config/sessions/store.ts b/src/config/sessions/store.ts index e0ff6d36ff..5807df590a 100644 --- a/src/config/sessions/store.ts +++ b/src/config/sessions/store.ts @@ -1,9 +1,8 @@ import crypto from "node:crypto"; import fs from "node:fs"; import path from "node:path"; -import type { MsgContext } from "../../auto-reply/templating.js"; -import type { SessionMaintenanceConfig, SessionMaintenanceMode } from "../types.base.js"; import { acquireSessionWriteLock } from "../../agents/session-write-lock.js"; +import type { MsgContext } from "../../auto-reply/templating.js"; import { parseByteSize } from "../../cli/parse-bytes.js"; import { parseDurationMs } from "../../cli/parse-duration.js"; import { @@ -20,6 +19,7 @@ import { } from "../../utils/delivery-context.js"; import { getFileMtimeMs, isCacheEnabled, resolveCacheTtlMs } from "../cache-utils.js"; import { loadConfig } from "../config.js"; +import type { SessionMaintenanceConfig, SessionMaintenanceMode } from "../types.base.js"; import { deriveSessionMetaPatch } from "./metadata.js"; import { mergeSessionEntry, type SessionEntry } from "./types.js"; diff --git a/src/config/sessions/transcript.ts b/src/config/sessions/transcript.ts index 9a20aa3c68..eff566a00b 100644 --- a/src/config/sessions/transcript.ts +++ b/src/config/sessions/transcript.ts @@ -1,10 +1,10 @@ -import { CURRENT_SESSION_VERSION, SessionManager } from "@mariozechner/pi-coding-agent"; import fs from "node:fs"; import path from "node:path"; -import type { SessionEntry } from "./types.js"; +import { CURRENT_SESSION_VERSION, SessionManager } from "@mariozechner/pi-coding-agent"; import { emitSessionTranscriptUpdate } from "../../sessions/transcript-events.js"; import { resolveDefaultSessionStorePath, resolveSessionFilePath } from "./paths.js"; import { loadSessionStore, updateSessionStore } from "./store.js"; +import type { SessionEntry } from "./types.js"; function stripQuery(value: string): string { const noHash = value.split("#")[0] ?? value; diff --git a/src/config/sessions/types.ts b/src/config/sessions/types.ts index 809af7709c..f729bedf5c 100644 --- a/src/config/sessions/types.ts +++ b/src/config/sessions/types.ts @@ -1,5 +1,5 @@ -import type { Skill } from "@mariozechner/pi-coding-agent"; import crypto from "node:crypto"; +import type { Skill } from "@mariozechner/pi-coding-agent"; import type { ChatType } from "../../channels/chat-type.js"; import type { ChannelId } from "../../channels/plugins/types.js"; import type { DeliveryContext } from "../../utils/delivery-context.js"; diff --git a/src/config/validation.ts b/src/config/validation.ts index 217a5af271..29ebd8fa66 100644 --- a/src/config/validation.ts +++ b/src/config/validation.ts @@ -1,5 +1,4 @@ import path from "node:path"; -import type { OpenClawConfig, ConfigValidationIssue } from "./types.js"; import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js"; import { CHANNEL_IDS, normalizeChatChannelId } from "../channels/registry.js"; import { @@ -13,6 +12,7 @@ import { isRecord } from "../utils.js"; import { findDuplicateAgentDirs, formatDuplicateAgentDirError } from "./agent-dirs.js"; import { applyAgentDefaults, applyModelDefaults, applySessionDefaults } from "./defaults.js"; import { findLegacyConfigIssues } from "./legacy.js"; +import type { OpenClawConfig, ConfigValidationIssue } from "./types.js"; import { OpenClawSchema } from "./zod-schema.js"; const AVATAR_SCHEME_RE = /^[a-z][a-z0-9+.-]*:/i; diff --git a/src/cron/delivery.test.ts b/src/cron/delivery.test.ts index 783d0532b3..6eaa5c6670 100644 --- a/src/cron/delivery.test.ts +++ b/src/cron/delivery.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import type { CronJob } from "./types.js"; import { resolveCronDeliveryPlan } from "./delivery.js"; +import type { CronJob } from "./types.js"; function makeJob(overrides: Partial): CronJob { const now = Date.now(); diff --git a/src/cron/isolated-agent.delivers-response-has-heartbeat-ok-but-includes.test.ts b/src/cron/isolated-agent.delivers-response-has-heartbeat-ok-but-includes.test.ts index c0cf90d375..1374d98b76 100644 --- a/src/cron/isolated-agent.delivers-response-has-heartbeat-ok-but-includes.test.ts +++ b/src/cron/isolated-agent.delivers-response-has-heartbeat-ok-but-includes.test.ts @@ -1,8 +1,8 @@ import "./isolated-agent.mocks.js"; import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { CliDeps } from "../cli/deps.js"; import { runEmbeddedPiAgent } from "../agents/pi-embedded.js"; import { runSubagentAnnounceFlow } from "../agents/subagent-announce.js"; +import type { CliDeps } from "../cli/deps.js"; import { runCronIsolatedAgentTurn } from "./isolated-agent.js"; import { makeCfg, diff --git a/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.e2e.test.ts b/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.e2e.test.ts index 17966d8159..b910001184 100644 --- a/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.e2e.test.ts +++ b/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.e2e.test.ts @@ -1,9 +1,9 @@ import "./isolated-agent.mocks.js"; import fs from "node:fs/promises"; import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { CliDeps } from "../cli/deps.js"; import { runEmbeddedPiAgent } from "../agents/pi-embedded.js"; import { runSubagentAnnounceFlow } from "../agents/subagent-announce.js"; +import type { CliDeps } from "../cli/deps.js"; import { runCronIsolatedAgentTurn } from "./isolated-agent.js"; import { makeCfg, diff --git a/src/cron/isolated-agent.test-harness.ts b/src/cron/isolated-agent.test-harness.ts index b908c44ef2..c5c0ccc39b 100644 --- a/src/cron/isolated-agent.test-harness.ts +++ b/src/cron/isolated-agent.test-harness.ts @@ -1,8 +1,8 @@ import fs from "node:fs/promises"; import path from "node:path"; +import { withTempHome as withTempHomeBase } from "../../test/helpers/temp-home.js"; import type { OpenClawConfig } from "../config/config.js"; import type { CronJob } from "./types.js"; -import { withTempHome as withTempHomeBase } from "../../test/helpers/temp-home.js"; export async function withTempCronHome(fn: (home: string) => Promise): Promise { return withTempHomeBase(fn, { prefix: "openclaw-cron-" }); diff --git a/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.e2e.test.ts b/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.e2e.test.ts index 97748d1276..cdbd3c7ee2 100644 --- a/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.e2e.test.ts +++ b/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.e2e.test.ts @@ -2,8 +2,8 @@ import fs from "node:fs/promises"; import path from "node:path"; import { beforeEach, describe, expect, it, vi } from "vitest"; import type { CliDeps } from "../cli/deps.js"; -import type { CronJob } from "./types.js"; import { makeCfg, makeJob, withTempCronHome } from "./isolated-agent.test-harness.js"; +import type { CronJob } from "./types.js"; vi.mock("../agents/pi-embedded.js", () => ({ abortEmbeddedPiRun: vi.fn().mockReturnValue(false), diff --git a/src/cron/isolated-agent/delivery-target.ts b/src/cron/isolated-agent/delivery-target.ts index cad157d027..c0a59827bb 100644 --- a/src/cron/isolated-agent/delivery-target.ts +++ b/src/cron/isolated-agent/delivery-target.ts @@ -1,13 +1,13 @@ import type { ChannelId } from "../../channels/plugins/types.js"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { OutboundChannel } from "../../infra/outbound/targets.js"; import { DEFAULT_CHAT_CHANNEL } from "../../channels/registry.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { loadSessionStore, resolveAgentMainSessionKey, resolveStorePath, } from "../../config/sessions.js"; import { resolveMessageChannelSelection } from "../../infra/outbound/channel-selection.js"; +import type { OutboundChannel } from "../../infra/outbound/targets.js"; import { resolveOutboundTarget, resolveSessionDeliveryTarget, diff --git a/src/cron/isolated-agent/run.ts b/src/cron/isolated-agent/run.ts index 4cf7183693..e775ce3df9 100644 --- a/src/cron/isolated-agent/run.ts +++ b/src/cron/isolated-agent/run.ts @@ -1,7 +1,3 @@ -import type { MessagingToolSend } from "../../agents/pi-embedded-messaging.js"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { AgentDefaultsConfig } from "../../config/types.js"; -import type { CronJob, CronRunOutcome, CronRunTelemetry } from "../types.js"; import { resolveAgentConfig, resolveAgentDir, @@ -24,6 +20,7 @@ import { resolveHooksGmailModel, resolveThinkingDefault, } from "../../agents/model-selection.js"; +import type { MessagingToolSend } from "../../agents/pi-embedded-messaging.js"; import { runEmbeddedPiAgent } from "../../agents/pi-embedded.js"; import { runSubagentAnnounceFlow } from "../../agents/subagent-announce.js"; import { countActiveDescendantRuns } from "../../agents/subagent-registry.js"; @@ -37,11 +34,13 @@ import { } from "../../auto-reply/thinking.js"; import { SILENT_REPLY_TOKEN } from "../../auto-reply/tokens.js"; import { createOutboundSendDeps, type CliDeps } from "../../cli/outbound-send-deps.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { resolveAgentMainSessionKey, resolveSessionTranscriptPath, updateSessionStore, } from "../../config/sessions.js"; +import type { AgentDefaultsConfig } from "../../config/types.js"; import { registerAgentRunContext } from "../../infra/agent-events.js"; import { deliverOutboundPayloads } from "../../infra/outbound/deliver.js"; import { resolveAgentOutboundIdentity } from "../../infra/outbound/identity.js"; @@ -54,6 +53,7 @@ import { isExternalHookSession, } from "../../security/external-content.js"; import { resolveCronDeliveryPlan } from "../delivery.js"; +import type { CronJob, CronRunOutcome, CronRunTelemetry } from "../types.js"; import { resolveDeliveryTarget } from "./delivery-target.js"; import { isHeartbeatOnlyResponse, diff --git a/src/cron/isolated-agent/skills-snapshot.ts b/src/cron/isolated-agent/skills-snapshot.ts index 2a491717a2..82408991e3 100644 --- a/src/cron/isolated-agent/skills-snapshot.ts +++ b/src/cron/isolated-agent/skills-snapshot.ts @@ -1,8 +1,8 @@ -import type { OpenClawConfig } from "../../config/config.js"; import { resolveAgentSkillsFilter } from "../../agents/agent-scope.js"; import { buildWorkspaceSkillSnapshot, type SkillSnapshot } from "../../agents/skills.js"; import { matchesSkillFilter } from "../../agents/skills/filter.js"; import { getSkillsSnapshotVersion } from "../../agents/skills/refresh.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { getRemoteSkillEligibility } from "../../infra/skills-remote.js"; export function resolveCronSkillsSnapshot(params: { diff --git a/src/cron/normalize.ts b/src/cron/normalize.ts index 9cab8a6086..31cce630ef 100644 --- a/src/cron/normalize.ts +++ b/src/cron/normalize.ts @@ -1,4 +1,3 @@ -import type { CronJobCreate, CronJobPatch } from "./types.js"; import { sanitizeAgentId } from "../routing/session-key.js"; import { isRecord } from "../utils.js"; import { @@ -9,6 +8,7 @@ import { import { parseAbsoluteTimeMs } from "./parse.js"; import { migrateLegacyCronPayload } from "./payload-migration.js"; import { inferLegacyName } from "./service/normalize.js"; +import type { CronJobCreate, CronJobPatch } from "./types.js"; type UnknownRecord = Record; diff --git a/src/cron/schedule.ts b/src/cron/schedule.ts index 669aae32b2..140cbb8293 100644 --- a/src/cron/schedule.ts +++ b/src/cron/schedule.ts @@ -1,6 +1,6 @@ import { Cron } from "croner"; -import type { CronSchedule } from "./types.js"; import { parseAbsoluteTimeMs } from "./parse.js"; +import type { CronSchedule } from "./types.js"; function resolveCronTimezone(tz?: string) { const trimmed = typeof tz === "string" ? tz.trim() : ""; diff --git a/src/cron/service.issue-13992-regression.test.ts b/src/cron/service.issue-13992-regression.test.ts index d21f0b48ea..04e1e87787 100644 --- a/src/cron/service.issue-13992-regression.test.ts +++ b/src/cron/service.issue-13992-regression.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from "vitest"; +import { recomputeNextRunsForMaintenance } from "./service/jobs.js"; import type { CronServiceState } from "./service/state.js"; import type { CronJob } from "./types.js"; -import { recomputeNextRunsForMaintenance } from "./service/jobs.js"; describe("issue #13992 regression - cron jobs skip execution", () => { function createMockState(jobs: CronJob[]): CronServiceState { diff --git a/src/cron/service.issue-17852-daily-skip.test.ts b/src/cron/service.issue-17852-daily-skip.test.ts index 48bea88a33..27f56abdd6 100644 --- a/src/cron/service.issue-17852-daily-skip.test.ts +++ b/src/cron/service.issue-17852-daily-skip.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from "vitest"; +import { recomputeNextRuns, recomputeNextRunsForMaintenance } from "./service/jobs.js"; import type { CronServiceState } from "./service/state.js"; import type { CronJob } from "./types.js"; -import { recomputeNextRuns, recomputeNextRunsForMaintenance } from "./service/jobs.js"; /** * Regression test for issue #17852: daily cron jobs skip a day (48h jump). diff --git a/src/cron/service.issue-regressions.test.ts b/src/cron/service.issue-regressions.test.ts index bf45bd20f0..87e98d69b9 100644 --- a/src/cron/service.issue-regressions.test.ts +++ b/src/cron/service.issue-regressions.test.ts @@ -2,10 +2,10 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import type { CronJob, CronJobState } from "./types.js"; import { CronService } from "./service.js"; import { createCronServiceState, type CronEvent } from "./service/state.js"; import { onTimer } from "./service/timer.js"; +import type { CronJob, CronJobState } from "./types.js"; const noopLogger = { info: vi.fn(), diff --git a/src/cron/service.jobs.test.ts b/src/cron/service.jobs.test.ts index ed28d59275..16fa96e36f 100644 --- a/src/cron/service.jobs.test.ts +++ b/src/cron/service.jobs.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import type { CronJob, CronJobPatch } from "./types.js"; import { applyJobPatch } from "./service/jobs.js"; +import type { CronJob, CronJobPatch } from "./types.js"; describe("applyJobPatch", () => { it("clears delivery when switching to main session", () => { diff --git a/src/cron/service.rearm-timer-when-running.test.ts b/src/cron/service.rearm-timer-when-running.test.ts index 6b9353ed81..90f7d73533 100644 --- a/src/cron/service.rearm-timer-when-running.test.ts +++ b/src/cron/service.rearm-timer-when-running.test.ts @@ -1,8 +1,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import type { CronJob } from "./types.js"; import { createCronStoreHarness, createNoopLogger } from "./service.test-harness.js"; import { createCronServiceState } from "./service/state.js"; import { onTimer } from "./service/timer.js"; +import type { CronJob } from "./types.js"; const noopLogger = createNoopLogger(); const { makeStorePath } = createCronStoreHarness(); diff --git a/src/cron/service.skips-main-jobs-empty-systemevent-text.test.ts b/src/cron/service.skips-main-jobs-empty-systemevent-text.test.ts index 90ba40f92d..f438faa806 100644 --- a/src/cron/service.skips-main-jobs-empty-systemevent-text.test.ts +++ b/src/cron/service.skips-main-jobs-empty-systemevent-text.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import type { CronJob } from "./types.js"; import { CronService } from "./service.js"; import { createCronStoreHarness, createNoopLogger } from "./service.test-harness.js"; +import type { CronJob } from "./types.js"; const noopLogger = createNoopLogger(); const { makeStorePath } = createCronStoreHarness(); diff --git a/src/cron/service.ts b/src/cron/service.ts index 8891ee9915..50d5f40b6e 100644 --- a/src/cron/service.ts +++ b/src/cron/service.ts @@ -1,6 +1,6 @@ -import type { CronJob, CronJobCreate, CronJobPatch } from "./types.js"; import * as ops from "./service/ops.js"; import { type CronServiceDeps, createCronServiceState } from "./service/state.js"; +import type { CronJob, CronJobCreate, CronJobPatch } from "./types.js"; export type { CronEvent, CronServiceDeps } from "./service/state.js"; diff --git a/src/cron/service/jobs.schedule-error-isolation.test.ts b/src/cron/service/jobs.schedule-error-isolation.test.ts index 85f9cb6dab..064ff37c1e 100644 --- a/src/cron/service/jobs.schedule-error-isolation.test.ts +++ b/src/cron/service/jobs.schedule-error-isolation.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import type { CronJob, CronStoreFile } from "../types.js"; -import type { CronServiceState } from "./state.js"; import { recomputeNextRuns } from "./jobs.js"; +import type { CronServiceState } from "./state.js"; function createMockState(jobs: CronJob[]): CronServiceState { const store: CronStoreFile = { version: 1, jobs }; diff --git a/src/cron/service/jobs.ts b/src/cron/service/jobs.ts index 92b0717c63..b3e246d112 100644 --- a/src/cron/service/jobs.ts +++ b/src/cron/service/jobs.ts @@ -1,4 +1,6 @@ import crypto from "node:crypto"; +import { parseAbsoluteTimeMs } from "../parse.js"; +import { computeNextRunAtMs } from "../schedule.js"; import type { CronDelivery, CronDeliveryPatch, @@ -8,9 +10,6 @@ import type { CronPayload, CronPayloadPatch, } from "../types.js"; -import type { CronServiceState } from "./state.js"; -import { parseAbsoluteTimeMs } from "../parse.js"; -import { computeNextRunAtMs } from "../schedule.js"; import { normalizeHttpWebhookUrl } from "../webhook-url.js"; import { normalizeOptionalAgentId, @@ -19,6 +18,7 @@ import { normalizePayloadToSystemText, normalizeRequiredName, } from "./normalize.js"; +import type { CronServiceState } from "./state.js"; const STUCK_RUN_MS = 2 * 60 * 60 * 1000; diff --git a/src/cron/service/normalize.ts b/src/cron/service/normalize.ts index 1e4b172f49..61f63dd3ce 100644 --- a/src/cron/service/normalize.ts +++ b/src/cron/service/normalize.ts @@ -1,6 +1,6 @@ -import type { CronPayload } from "../types.js"; import { normalizeAgentId } from "../../routing/session-key.js"; import { truncateUtf16Safe } from "../../utils.js"; +import type { CronPayload } from "../types.js"; export function normalizeRequiredName(raw: unknown) { if (typeof raw !== "string") { diff --git a/src/cron/service/ops.ts b/src/cron/service/ops.ts index 2545a84d21..d1b9794ff2 100644 --- a/src/cron/service/ops.ts +++ b/src/cron/service/ops.ts @@ -1,5 +1,4 @@ import type { CronJobCreate, CronJobPatch } from "../types.js"; -import type { CronServiceState } from "./state.js"; import { applyJobPatch, computeJobNextRunAtMs, @@ -11,6 +10,7 @@ import { recomputeNextRunsForMaintenance, } from "./jobs.js"; import { locked } from "./locked.js"; +import type { CronServiceState } from "./state.js"; import { ensureLoaded, persist, warnIfDisabled } from "./store.js"; import { armTimer, emit, executeJob, runMissedJobs, stopTimer, wake } from "./timer.js"; diff --git a/src/cron/service/store.ts b/src/cron/service/store.ts index b47d9ccc5f..5335d86f59 100644 --- a/src/cron/service/store.ts +++ b/src/cron/service/store.ts @@ -1,6 +1,4 @@ import fs from "node:fs"; -import type { CronJob } from "../types.js"; -import type { CronServiceState } from "./state.js"; import { buildDeliveryFromLegacyPayload, hasLegacyDeliveryHints, @@ -9,8 +7,10 @@ import { import { parseAbsoluteTimeMs } from "../parse.js"; import { migrateLegacyCronPayload } from "../payload-migration.js"; import { loadCronStore, saveCronStore } from "../store.js"; +import type { CronJob } from "../types.js"; import { recomputeNextRuns } from "./jobs.js"; import { inferLegacyName, normalizeOptionalText } from "./normalize.js"; +import type { CronServiceState } from "./state.js"; function buildDeliveryPatchFromLegacyPayload(payload: Record) { const deliver = payload.deliver; diff --git a/src/cron/service/timer.ts b/src/cron/service/timer.ts index 9186525ef2..9240735d23 100644 --- a/src/cron/service/timer.ts +++ b/src/cron/service/timer.ts @@ -1,9 +1,8 @@ import type { HeartbeatRunResult } from "../../infra/heartbeat-wake.js"; -import type { CronJob, CronRunOutcome, CronRunStatus, CronRunTelemetry } from "../types.js"; -import type { CronEvent, CronServiceState } from "./state.js"; import { DEFAULT_AGENT_ID } from "../../routing/session-key.js"; import { resolveCronDeliveryPlan } from "../delivery.js"; import { sweepCronRunSessions } from "../session-reaper.js"; +import type { CronJob, CronRunOutcome, CronRunStatus, CronRunTelemetry } from "../types.js"; import { computeJobNextRunAtMs, nextWakeAtMs, @@ -11,6 +10,7 @@ import { resolveJobPayloadTextForMain, } from "./jobs.js"; import { locked } from "./locked.js"; +import type { CronEvent, CronServiceState } from "./state.js"; import { ensureLoaded, persist } from "./store.js"; const MAX_TIMER_DELAY_MS = 60_000; diff --git a/src/cron/session-reaper.test.ts b/src/cron/session-reaper.test.ts index 3a0c0d57d6..0da7cffff9 100644 --- a/src/cron/session-reaper.test.ts +++ b/src/cron/session-reaper.test.ts @@ -2,8 +2,8 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import { describe, it, expect, beforeEach } from "vitest"; -import type { Logger } from "./service/state.js"; import { isCronRunSessionKey } from "../sessions/session-key-utils.js"; +import type { Logger } from "./service/state.js"; import { sweepCronRunSessions, resolveRetentionMs, resetReaperThrottle } from "./session-reaper.js"; function createTestLogger(): Logger { diff --git a/src/cron/session-reaper.ts b/src/cron/session-reaper.ts index f21559902e..c42236d364 100644 --- a/src/cron/session-reaper.ts +++ b/src/cron/session-reaper.ts @@ -6,11 +6,11 @@ * run records. The base session (`...:cron:`) is kept as-is. */ -import type { CronConfig } from "../config/types.cron.js"; -import type { Logger } from "./service/state.js"; import { parseDurationMs } from "../cli/parse-duration.js"; import { updateSessionStore } from "../config/sessions.js"; +import type { CronConfig } from "../config/types.cron.js"; import { isCronRunSessionKey } from "../sessions/session-key-utils.js"; +import type { Logger } from "./service/state.js"; const DEFAULT_RETENTION_MS = 24 * 3_600_000; // 24 hours diff --git a/src/cron/store.ts b/src/cron/store.ts index bc27c656fd..cfc2044df9 100644 --- a/src/cron/store.ts +++ b/src/cron/store.ts @@ -1,9 +1,9 @@ -import JSON5 from "json5"; import fs from "node:fs"; import path from "node:path"; -import type { CronStoreFile } from "./types.js"; +import JSON5 from "json5"; import { expandHomePrefix } from "../infra/home-dir.js"; import { CONFIG_DIR } from "../utils.js"; +import type { CronStoreFile } from "./types.js"; export const DEFAULT_CRON_DIR = path.join(CONFIG_DIR, "cron"); export const DEFAULT_CRON_STORE_PATH = path.join(DEFAULT_CRON_DIR, "jobs.json"); diff --git a/src/cron/validate-timestamp.ts b/src/cron/validate-timestamp.ts index 3003fb3d26..8f10295623 100644 --- a/src/cron/validate-timestamp.ts +++ b/src/cron/validate-timestamp.ts @@ -1,5 +1,5 @@ -import type { CronSchedule } from "./types.js"; import { parseAbsoluteTimeMs } from "./parse.js"; +import type { CronSchedule } from "./types.js"; const ONE_MINUTE_MS = 60 * 1000; const TEN_YEARS_MS = 10 * 365.25 * 24 * 60 * 60 * 1000; diff --git a/src/daemon/launchd.ts b/src/daemon/launchd.ts index 795fe82809..b11a2d9e01 100644 --- a/src/daemon/launchd.ts +++ b/src/daemon/launchd.ts @@ -1,6 +1,5 @@ import fs from "node:fs/promises"; import path from "node:path"; -import type { GatewayServiceRuntime } from "./service-runtime.js"; import { GATEWAY_LAUNCH_AGENT_LABEL, resolveGatewayServiceDescription, @@ -15,6 +14,7 @@ import { import { formatLine, toPosixPath } from "./output.js"; import { resolveGatewayStateDir, resolveHomeDir } from "./paths.js"; import { parseKeyValueOutput } from "./runtime-parse.js"; +import type { GatewayServiceRuntime } from "./service-runtime.js"; function resolveLaunchAgentLabel(args?: { env?: Record }): string { const envLabel = args?.env?.OPENCLAW_LAUNCHD_LABEL?.trim(); diff --git a/src/daemon/node-service.ts b/src/daemon/node-service.ts index da4ac8e87d..14e3f2e82d 100644 --- a/src/daemon/node-service.ts +++ b/src/daemon/node-service.ts @@ -1,4 +1,3 @@ -import type { GatewayService, GatewayServiceInstallArgs } from "./service.js"; import { NODE_SERVICE_KIND, NODE_SERVICE_MARKER, @@ -7,6 +6,7 @@ import { resolveNodeSystemdServiceName, resolveNodeWindowsTaskName, } from "./constants.js"; +import type { GatewayService, GatewayServiceInstallArgs } from "./service.js"; import { resolveGatewayService } from "./service.js"; function withNodeServiceEnv( diff --git a/src/daemon/schtasks.ts b/src/daemon/schtasks.ts index a70f100793..a24503e55a 100644 --- a/src/daemon/schtasks.ts +++ b/src/daemon/schtasks.ts @@ -1,12 +1,12 @@ import fs from "node:fs/promises"; import path from "node:path"; -import type { GatewayServiceRuntime } from "./service-runtime.js"; import { splitArgsPreservingQuotes } from "./arg-split.js"; import { resolveGatewayServiceDescription, resolveGatewayWindowsTaskName } from "./constants.js"; import { formatLine } from "./output.js"; import { resolveGatewayStateDir } from "./paths.js"; import { parseKeyValueOutput } from "./runtime-parse.js"; import { execSchtasks } from "./schtasks-exec.js"; +import type { GatewayServiceRuntime } from "./service-runtime.js"; function resolveTaskName(env: Record): string { const override = env.OPENCLAW_WINDOWS_TASK_NAME?.trim(); diff --git a/src/daemon/service.ts b/src/daemon/service.ts index 615e8193ef..45fe2f638a 100644 --- a/src/daemon/service.ts +++ b/src/daemon/service.ts @@ -1,4 +1,3 @@ -import type { GatewayServiceRuntime } from "./service-runtime.js"; import { installLaunchAgent, isLaunchAgentLoaded, @@ -17,6 +16,7 @@ import { stopScheduledTask, uninstallScheduledTask, } from "./schtasks.js"; +import type { GatewayServiceRuntime } from "./service-runtime.js"; import { installSystemdService, isSystemdServiceEnabled, diff --git a/src/daemon/systemd.ts b/src/daemon/systemd.ts index 41107d4a2e..7d91e6b32c 100644 --- a/src/daemon/systemd.ts +++ b/src/daemon/systemd.ts @@ -1,6 +1,5 @@ import fs from "node:fs/promises"; import path from "node:path"; -import type { GatewayServiceRuntime } from "./service-runtime.js"; import { LEGACY_GATEWAY_SYSTEMD_SERVICE_NAMES, resolveGatewayServiceDescription, @@ -10,6 +9,7 @@ import { execFileUtf8 } from "./exec-file.js"; import { formatLine, toPosixPath } from "./output.js"; import { resolveHomeDir } from "./paths.js"; import { parseKeyValueOutput } from "./runtime-parse.js"; +import type { GatewayServiceRuntime } from "./service-runtime.js"; import { enableSystemdUserLinger, readSystemdUserLingerStatus, diff --git a/src/discord/accounts.ts b/src/discord/accounts.ts index 81b8d11481..2f5729114c 100644 --- a/src/discord/accounts.ts +++ b/src/discord/accounts.ts @@ -1,6 +1,6 @@ +import { createAccountListHelpers } from "../channels/plugins/account-helpers.js"; import type { OpenClawConfig } from "../config/config.js"; import type { DiscordAccountConfig, DiscordActionConfig } from "../config/types.js"; -import { createAccountListHelpers } from "../channels/plugins/account-helpers.js"; import { normalizeAccountId } from "../routing/session-key.js"; import { resolveDiscordToken } from "./token.js"; diff --git a/src/discord/client.ts b/src/discord/client.ts index 6829dcc35d..ee48ebfe74 100644 --- a/src/discord/client.ts +++ b/src/discord/client.ts @@ -1,7 +1,7 @@ import { RequestClient } from "@buape/carbon"; -import type { RetryConfig } from "../infra/retry.js"; import { loadConfig } from "../config/config.js"; import { createDiscordRetryRunner, type RetryRunner } from "../infra/retry-policy.js"; +import type { RetryConfig } from "../infra/retry.js"; import { resolveDiscordAccount } from "./accounts.js"; import { normalizeDiscordToken } from "./token.js"; diff --git a/src/discord/components.ts b/src/discord/components.ts index 0c789a0059..acab337149 100644 --- a/src/discord/components.ts +++ b/src/discord/components.ts @@ -1,3 +1,4 @@ +import crypto from "node:crypto"; import { Button, ChannelSelectMenu, @@ -24,7 +25,6 @@ import { type TopLevelComponents, } from "@buape/carbon"; import { ButtonStyle, MessageFlags, TextInputStyle } from "discord-api-types/v10"; -import crypto from "node:crypto"; export const DISCORD_COMPONENT_CUSTOM_ID_KEY = "occomp"; export const DISCORD_MODAL_CUSTOM_ID_KEY = "ocmodal"; diff --git a/src/discord/gateway-logging.ts b/src/discord/gateway-logging.ts index e1f8fcf258..916952020b 100644 --- a/src/discord/gateway-logging.ts +++ b/src/discord/gateway-logging.ts @@ -1,6 +1,6 @@ import type { EventEmitter } from "node:events"; -import type { RuntimeEnv } from "../runtime.js"; import { logVerbose } from "../globals.js"; +import type { RuntimeEnv } from "../runtime.js"; type GatewayEmitter = Pick; diff --git a/src/discord/monitor/agent-components.ts b/src/discord/monitor/agent-components.ts index 02580c1bcb..0476b8fcd1 100644 --- a/src/discord/monitor/agent-components.ts +++ b/src/discord/monitor/agent-components.ts @@ -1,4 +1,3 @@ -import type { APIStringSelectComponent } from "discord-api-types/v10"; import { Button, ChannelSelectMenu, @@ -16,9 +15,8 @@ import { type StringSelectMenuInteraction, type UserSelectMenuInteraction, } from "@buape/carbon"; +import type { APIStringSelectComponent } from "discord-api-types/v10"; import { ButtonStyle, ChannelType } from "discord-api-types/v10"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { DiscordAccountConfig } from "../../config/types.discord.js"; import { resolveHumanDelayConfig } from "../../agents/identity.js"; import { resolveChunkMode, resolveTextChunkLimit } from "../../auto-reply/chunk.js"; import { formatInboundEnvelope, resolveEnvelopeFormatOptions } from "../../auto-reply/envelope.js"; @@ -27,8 +25,10 @@ import { dispatchReplyWithBufferedBlockDispatcher } from "../../auto-reply/reply import { createReplyReferencePlanner } from "../../auto-reply/reply/reply-reference.js"; import { createReplyPrefixOptions } from "../../channels/reply-prefix.js"; import { recordInboundSession } from "../../channels/session.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { resolveMarkdownTableMode } from "../../config/markdown-tables.js"; import { readSessionUpdatedAt, resolveStorePath } from "../../config/sessions.js"; +import type { DiscordAccountConfig } from "../../config/types.discord.js"; import { logVerbose } from "../../globals.js"; import { enqueueSystemEvent } from "../../infra/system-events.js"; import { logDebug, logError } from "../../logger.js"; diff --git a/src/discord/monitor/exec-approvals.test.ts b/src/discord/monitor/exec-approvals.test.ts index c583401229..de600ad524 100644 --- a/src/discord/monitor/exec-approvals.test.ts +++ b/src/discord/monitor/exec-approvals.test.ts @@ -1,11 +1,11 @@ -import type { ButtonInteraction, ComponentData } from "@buape/carbon"; -import { Routes } from "discord-api-types/v10"; import fs from "node:fs"; import os from "node:os"; import path from "node:path"; +import type { ButtonInteraction, ComponentData } from "@buape/carbon"; +import { Routes } from "discord-api-types/v10"; import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { DiscordExecApprovalConfig } from "../../config/types.discord.js"; import { clearSessionStoreCacheForTest } from "../../config/sessions.js"; +import type { DiscordExecApprovalConfig } from "../../config/types.discord.js"; import { buildExecApprovalCustomId, extractDiscordChannelId, diff --git a/src/discord/monitor/exec-approvals.ts b/src/discord/monitor/exec-approvals.ts index 04fa106308..6be9163db8 100644 --- a/src/discord/monitor/exec-approvals.ts +++ b/src/discord/monitor/exec-approvals.ts @@ -11,19 +11,19 @@ import { } from "@buape/carbon"; import { ButtonStyle, Routes } from "discord-api-types/v10"; import type { OpenClawConfig } from "../../config/config.js"; +import { loadSessionStore, resolveStorePath } from "../../config/sessions.js"; import type { DiscordExecApprovalConfig } from "../../config/types.discord.js"; +import { buildGatewayConnectionDetails } from "../../gateway/call.js"; +import { GatewayClient } from "../../gateway/client.js"; import type { EventFrame } from "../../gateway/protocol/index.js"; import type { ExecApprovalDecision, ExecApprovalRequest, ExecApprovalResolved, } from "../../infra/exec-approvals.js"; -import type { RuntimeEnv } from "../../runtime.js"; -import { loadSessionStore, resolveStorePath } from "../../config/sessions.js"; -import { buildGatewayConnectionDetails } from "../../gateway/call.js"; -import { GatewayClient } from "../../gateway/client.js"; import { logDebug, logError } from "../../logger.js"; import { normalizeAccountId, resolveAgentIdFromSessionKey } from "../../routing/session-key.js"; +import type { RuntimeEnv } from "../../runtime.js"; import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES, diff --git a/src/discord/monitor/gateway-plugin.ts b/src/discord/monitor/gateway-plugin.ts index ae4aea597b..be754890ea 100644 --- a/src/discord/monitor/gateway-plugin.ts +++ b/src/discord/monitor/gateway-plugin.ts @@ -2,8 +2,8 @@ import { GatewayIntents, GatewayPlugin } from "@buape/carbon/gateway"; import { HttpsProxyAgent } from "https-proxy-agent"; import WebSocket from "ws"; import type { DiscordAccountConfig } from "../../config/types.js"; -import type { RuntimeEnv } from "../../runtime.js"; import { danger } from "../../globals.js"; +import type { RuntimeEnv } from "../../runtime.js"; export function resolveDiscordGatewayIntents( intentsConfig?: import("../../config/types.discord.js").DiscordIntentsConfig, diff --git a/src/discord/monitor/message-handler.inbound-contract.test.ts b/src/discord/monitor/message-handler.inbound-contract.test.ts index e634e4a7f8..533fc8cdd0 100644 --- a/src/discord/monitor/message-handler.inbound-contract.test.ts +++ b/src/discord/monitor/message-handler.inbound-contract.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from "vitest"; -import type { MsgContext } from "../../auto-reply/templating.js"; import { buildDispatchInboundCaptureMock } from "../../../test/helpers/dispatch-inbound-capture.js"; import { expectInboundContextContract } from "../../../test/helpers/inbound-contract.js"; +import type { MsgContext } from "../../auto-reply/templating.js"; let capturedCtx: MsgContext | undefined; diff --git a/src/discord/monitor/message-handler.preflight.ts b/src/discord/monitor/message-handler.preflight.ts index d858f07502..d474ce2d0a 100644 --- a/src/discord/monitor/message-handler.preflight.ts +++ b/src/discord/monitor/message-handler.preflight.ts @@ -1,8 +1,4 @@ import { ChannelType, MessageType, type User } from "@buape/carbon"; -import type { - DiscordMessagePreflightContext, - DiscordMessagePreflightParams, -} from "./message-handler.preflight.types.js"; import { hasControlCommand } from "../../auto-reply/command-detection.js"; import { shouldHandleTextCommands } from "../../auto-reply/commands-registry.js"; import { @@ -48,6 +44,10 @@ import { resolveDiscordSystemLocation, resolveTimestampMs, } from "./format.js"; +import type { + DiscordMessagePreflightContext, + DiscordMessagePreflightParams, +} from "./message-handler.preflight.types.js"; import { resolveDiscordChannelInfo, resolveDiscordMessageChannelId, diff --git a/src/discord/monitor/message-handler.process.ts b/src/discord/monitor/message-handler.process.ts index 16e0af4da4..e307219d94 100644 --- a/src/discord/monitor/message-handler.process.ts +++ b/src/discord/monitor/message-handler.process.ts @@ -1,6 +1,4 @@ import { ChannelType } from "@buape/carbon"; -import type { ReplyPayload } from "../../auto-reply/types.js"; -import type { DiscordMessagePreflightContext } from "./message-handler.preflight.js"; import { resolveAckReaction, resolveHumanDelayConfig } from "../../agents/identity.js"; import { resolveChunkMode } from "../../auto-reply/chunk.js"; import { dispatchInboundMessage } from "../../auto-reply/dispatch.js"; @@ -11,6 +9,7 @@ import { } from "../../auto-reply/reply/history.js"; import { finalizeInboundContext } from "../../auto-reply/reply/inbound-context.js"; import { createReplyDispatcherWithTyping } from "../../auto-reply/reply/reply-dispatcher.js"; +import type { ReplyPayload } from "../../auto-reply/types.js"; import { shouldAckReaction as shouldAckReactionGate } from "../../channels/ack-reactions.js"; import { logTypingFailure, logAckFailure } from "../../channels/logging.js"; import { createReplyPrefixOptions } from "../../channels/reply-prefix.js"; @@ -26,6 +25,7 @@ import { truncateUtf16Safe } from "../../utils.js"; import { reactMessageDiscord, removeReactionDiscord } from "../send.js"; import { normalizeDiscordSlug, resolveDiscordOwnerAllowFrom } from "./allow-list.js"; import { resolveTimestampMs } from "./format.js"; +import type { DiscordMessagePreflightContext } from "./message-handler.preflight.js"; import { buildDiscordMediaPayload, resolveDiscordMessageText, diff --git a/src/discord/monitor/message-handler.ts b/src/discord/monitor/message-handler.ts index bfed7c16af..a22b7fd344 100644 --- a/src/discord/monitor/message-handler.ts +++ b/src/discord/monitor/message-handler.ts @@ -1,13 +1,13 @@ import type { Client } from "@buape/carbon"; -import type { DiscordMessageEvent, DiscordMessageHandler } from "./listeners.js"; -import type { DiscordMessagePreflightParams } from "./message-handler.preflight.types.js"; import { hasControlCommand } from "../../auto-reply/command-detection.js"; import { createInboundDebouncer, resolveInboundDebounceMs, } from "../../auto-reply/inbound-debounce.js"; import { danger } from "../../globals.js"; +import type { DiscordMessageEvent, DiscordMessageHandler } from "./listeners.js"; import { preflightDiscordMessage } from "./message-handler.preflight.js"; +import type { DiscordMessagePreflightParams } from "./message-handler.preflight.types.js"; import { processDiscordMessage } from "./message-handler.process.js"; import { resolveDiscordMessageChannelId, resolveDiscordMessageText } from "./message-utils.js"; diff --git a/src/discord/monitor/monitor.test.ts b/src/discord/monitor/monitor.test.ts index 008f824f88..8ee2cc2184 100644 --- a/src/discord/monitor/monitor.test.ts +++ b/src/discord/monitor/monitor.test.ts @@ -9,8 +9,6 @@ import type { GatewayPresenceUpdate } from "discord-api-types/v10"; import { beforeEach, describe, expect, it, vi } from "vitest"; import type { OpenClawConfig } from "../../config/config.js"; import type { DiscordAccountConfig } from "../../config/types.discord.js"; -import type { DiscordComponentEntry, DiscordModalEntry } from "../components.js"; -import type { DiscordChannelConfigResolved } from "./allow-list.js"; import { buildAgentSessionKey } from "../../routing/resolve-route.js"; import { clearDiscordComponentEntries, @@ -18,12 +16,14 @@ import { resolveDiscordComponentEntry, resolveDiscordModalEntry, } from "../components-registry.js"; +import type { DiscordComponentEntry, DiscordModalEntry } from "../components.js"; import { createAgentComponentButton, createAgentSelectMenu, createDiscordComponentButton, createDiscordComponentModal, } from "./agent-components.js"; +import type { DiscordChannelConfigResolved } from "./allow-list.js"; import { resolveDiscordMemberAllowed, resolveDiscordOwnerAllowFrom, diff --git a/src/discord/monitor/native-command.ts b/src/discord/monitor/native-command.ts index 65d1ab1468..2b4f0bc239 100644 --- a/src/discord/monitor/native-command.ts +++ b/src/discord/monitor/native-command.ts @@ -10,6 +10,8 @@ import { type ComponentData, } from "@buape/carbon"; import { ApplicationCommandOptionType, ButtonStyle } from "discord-api-types/v10"; +import { resolveHumanDelayConfig } from "../../agents/identity.js"; +import { resolveChunkMode, resolveTextChunkLimit } from "../../auto-reply/chunk.js"; import type { ChatCommandDefinition, CommandArgDefinition, @@ -17,10 +19,6 @@ import type { CommandArgs, NativeCommandSpec, } from "../../auto-reply/commands-registry.js"; -import type { ReplyPayload } from "../../auto-reply/types.js"; -import type { OpenClawConfig, loadConfig } from "../../config/config.js"; -import { resolveHumanDelayConfig } from "../../agents/identity.js"; -import { resolveChunkMode, resolveTextChunkLimit } from "../../auto-reply/chunk.js"; import { buildCommandTextFromArgs, findCommandByNativeName, @@ -32,8 +30,10 @@ import { } from "../../auto-reply/commands-registry.js"; import { finalizeInboundContext } from "../../auto-reply/reply/inbound-context.js"; import { dispatchReplyWithDispatcher } from "../../auto-reply/reply/provider-dispatcher.js"; +import type { ReplyPayload } from "../../auto-reply/types.js"; import { resolveCommandAuthorizedFromAuthorizers } from "../../channels/command-gating.js"; import { createReplyPrefixOptions } from "../../channels/reply-prefix.js"; +import type { OpenClawConfig, loadConfig } from "../../config/config.js"; import { getAgentScopedMediaLocalRoots } from "../../media/local-roots.js"; import { buildPairingReply } from "../../pairing/pairing-messages.js"; import { diff --git a/src/discord/monitor/provider.ts b/src/discord/monitor/provider.ts index 9f2b71941b..b37d79a4e3 100644 --- a/src/discord/monitor/provider.ts +++ b/src/discord/monitor/provider.ts @@ -1,17 +1,16 @@ -import type { GatewayPlugin } from "@buape/carbon/gateway"; +import { inspect } from "node:util"; import { Client, ReadyListener, type BaseMessageInteractiveComponent, type Modal, } from "@buape/carbon"; +import type { GatewayPlugin } from "@buape/carbon/gateway"; import { Routes } from "discord-api-types/v10"; -import { inspect } from "node:util"; import { ProxyAgent, fetch as undiciFetch } from "undici"; -import type { HistoryEntry } from "../../auto-reply/reply/history.js"; -import type { OpenClawConfig, ReplyToMode } from "../../config/config.js"; import { resolveTextChunkLimit } from "../../auto-reply/chunk.js"; import { listNativeCommandSpecsForConfig } from "../../auto-reply/commands-registry.js"; +import type { HistoryEntry } from "../../auto-reply/reply/history.js"; import { listSkillCommandsForAgents } from "../../auto-reply/skill-commands.js"; import { addAllowlistUserEntriesFromConfigEntry, @@ -26,6 +25,7 @@ import { resolveNativeCommandsEnabled, resolveNativeSkillsEnabled, } from "../../config/commands.js"; +import type { OpenClawConfig, ReplyToMode } from "../../config/config.js"; import { loadConfig } from "../../config/config.js"; import { danger, logVerbose, shouldLogVerbose, warn } from "../../globals.js"; import { formatErrorMessage } from "../../infra/errors.js"; diff --git a/src/discord/monitor/reply-delivery.ts b/src/discord/monitor/reply-delivery.ts index 919bccac0b..7690ed2440 100644 --- a/src/discord/monitor/reply-delivery.ts +++ b/src/discord/monitor/reply-delivery.ts @@ -2,8 +2,8 @@ import type { RequestClient } from "@buape/carbon"; import type { ChunkMode } from "../../auto-reply/chunk.js"; import type { ReplyPayload } from "../../auto-reply/types.js"; import type { MarkdownTableMode } from "../../config/types.base.js"; -import type { RuntimeEnv } from "../../runtime.js"; import { convertMarkdownTables } from "../../markdown/tables.js"; +import type { RuntimeEnv } from "../../runtime.js"; import { chunkDiscordTextWithMode } from "../chunk.js"; import { sendMessageDiscord, sendVoiceMessageDiscord } from "../send.js"; diff --git a/src/discord/monitor/threading.ts b/src/discord/monitor/threading.ts index d5a5875fbd..4efc83d0c7 100644 --- a/src/discord/monitor/threading.ts +++ b/src/discord/monitor/threading.ts @@ -1,12 +1,12 @@ import { ChannelType, type Client } from "@buape/carbon"; import { Routes } from "discord-api-types/v10"; -import type { ReplyToMode } from "../../config/config.js"; -import type { DiscordChannelConfigResolved } from "./allow-list.js"; -import type { DiscordMessageEvent } from "./listeners.js"; import { createReplyReferencePlanner } from "../../auto-reply/reply/reply-reference.js"; +import type { ReplyToMode } from "../../config/config.js"; import { logVerbose } from "../../globals.js"; import { buildAgentSessionKey } from "../../routing/resolve-route.js"; import { truncateUtf16Safe } from "../../utils.js"; +import type { DiscordChannelConfigResolved } from "./allow-list.js"; +import type { DiscordMessageEvent } from "./listeners.js"; import { resolveDiscordChannelInfo, resolveDiscordMessageChannelId } from "./message-utils.js"; export type DiscordThreadChannel = { diff --git a/src/discord/send.channels.ts b/src/discord/send.channels.ts index 3ad65e4583..829afeb1f5 100644 --- a/src/discord/send.channels.ts +++ b/src/discord/send.channels.ts @@ -1,5 +1,6 @@ import type { APIChannel } from "discord-api-types/v10"; import { Routes } from "discord-api-types/v10"; +import { resolveDiscordRest } from "./send.shared.js"; import type { DiscordChannelCreate, DiscordChannelEdit, @@ -7,7 +8,6 @@ import type { DiscordChannelPermissionSet, DiscordReactOpts, } from "./send.types.js"; -import { resolveDiscordRest } from "./send.shared.js"; export async function createChannelDiscord( payload: DiscordChannelCreate, diff --git a/src/discord/send.components.ts b/src/discord/send.components.ts index 838935fedc..0afd1f8337 100644 --- a/src/discord/send.components.ts +++ b/src/discord/send.components.ts @@ -1,12 +1,11 @@ -import type { APIChannel } from "discord-api-types/v10"; import { serializePayload, type MessagePayloadFile, type MessagePayloadObject, type RequestClient, } from "@buape/carbon"; +import type { APIChannel } from "discord-api-types/v10"; import { ChannelType, Routes } from "discord-api-types/v10"; -import type { DiscordSendResult } from "./send.types.js"; import { loadConfig } from "../config/config.js"; import { recordChannelActivity } from "../infra/channel-activity.js"; import { loadWebMedia } from "../web/media.js"; @@ -26,6 +25,7 @@ import { stripUndefinedFields, SUPPRESS_NOTIFICATIONS_FLAG, } from "./send.shared.js"; +import type { DiscordSendResult } from "./send.types.js"; const DISCORD_FORUM_LIKE_TYPES = new Set([ChannelType.GuildForum, ChannelType.GuildMedia]); diff --git a/src/discord/send.emojis-stickers.ts b/src/discord/send.emojis-stickers.ts index a56b47bccc..a6e4218263 100644 --- a/src/discord/send.emojis-stickers.ts +++ b/src/discord/send.emojis-stickers.ts @@ -1,7 +1,7 @@ import { Routes } from "discord-api-types/v10"; -import type { DiscordEmojiUpload, DiscordReactOpts, DiscordStickerUpload } from "./send.types.js"; import { loadWebMediaRaw } from "../web/media.js"; import { normalizeEmojiName, resolveDiscordRest } from "./send.shared.js"; +import type { DiscordEmojiUpload, DiscordReactOpts, DiscordStickerUpload } from "./send.types.js"; import { DISCORD_MAX_EMOJI_BYTES, DISCORD_MAX_STICKER_BYTES } from "./send.types.js"; export async function listGuildEmojisDiscord(guildId: string, opts: DiscordReactOpts = {}) { diff --git a/src/discord/send.guild.ts b/src/discord/send.guild.ts index bb6abc4012..fab1aff9ac 100644 --- a/src/discord/send.guild.ts +++ b/src/discord/send.guild.ts @@ -7,13 +7,13 @@ import type { RESTPostAPIGuildScheduledEventJSONBody, } from "discord-api-types/v10"; import { Routes } from "discord-api-types/v10"; +import { resolveDiscordRest } from "./send.shared.js"; import type { DiscordModerationTarget, DiscordReactOpts, DiscordRoleChange, DiscordTimeoutTarget, } from "./send.types.js"; -import { resolveDiscordRest } from "./send.shared.js"; export async function fetchMemberInfoDiscord( guildId: string, diff --git a/src/discord/send.messages.ts b/src/discord/send.messages.ts index 1c8c67499a..ae661c027a 100644 --- a/src/discord/send.messages.ts +++ b/src/discord/send.messages.ts @@ -1,5 +1,6 @@ import type { APIChannel, APIMessage } from "discord-api-types/v10"; import { ChannelType, Routes } from "discord-api-types/v10"; +import { resolveDiscordRest } from "./send.shared.js"; import type { DiscordMessageEdit, DiscordMessageQuery, @@ -8,7 +9,6 @@ import type { DiscordThreadCreate, DiscordThreadList, } from "./send.types.js"; -import { resolveDiscordRest } from "./send.shared.js"; export async function readMessagesDiscord( channelId: string, diff --git a/src/discord/send.outbound.ts b/src/discord/send.outbound.ts index 2408fa15a6..3a312efa5a 100644 --- a/src/discord/send.outbound.ts +++ b/src/discord/send.outbound.ts @@ -1,20 +1,19 @@ -import type { APIChannel } from "discord-api-types/v10"; -import { serializePayload, type MessagePayloadObject, type RequestClient } from "@buape/carbon"; -import { ChannelType, Routes } from "discord-api-types/v10"; import crypto from "node:crypto"; import fs from "node:fs/promises"; import path from "node:path"; -import type { RetryConfig } from "../infra/retry.js"; -import type { PollInput } from "../polls.js"; -import type { DiscordSendResult } from "./send.types.js"; +import { serializePayload, type MessagePayloadObject, type RequestClient } from "@buape/carbon"; +import type { APIChannel } from "discord-api-types/v10"; +import { ChannelType, Routes } from "discord-api-types/v10"; import { resolveChunkMode } from "../auto-reply/chunk.js"; import { loadConfig } from "../config/config.js"; import { resolveMarkdownTableMode } from "../config/markdown-tables.js"; import { recordChannelActivity } from "../infra/channel-activity.js"; +import type { RetryConfig } from "../infra/retry.js"; import { resolvePreferredOpenClawTmpDir } from "../infra/tmp-openclaw-dir.js"; import { convertMarkdownTables } from "../markdown/tables.js"; import { maxBytesForKind } from "../media/constants.js"; import { extensionForMime } from "../media/mime.js"; +import type { PollInput } from "../polls.js"; import { loadWebMediaRaw } from "../web/media.js"; import { resolveDiscordAccount } from "./accounts.js"; import { @@ -35,6 +34,7 @@ import { type DiscordSendComponents, type DiscordSendEmbeds, } from "./send.shared.js"; +import type { DiscordSendResult } from "./send.types.js"; import { ensureOggOpus, getVoiceMessageMetadata, diff --git a/src/discord/send.permissions.ts b/src/discord/send.permissions.ts index fa95aa6604..c24b6a65bd 100644 --- a/src/discord/send.permissions.ts +++ b/src/discord/send.permissions.ts @@ -1,8 +1,8 @@ import type { RequestClient } from "@buape/carbon"; import type { APIChannel, APIGuild, APIGuildMember, APIRole } from "discord-api-types/v10"; import { ChannelType, PermissionFlagsBits, Routes } from "discord-api-types/v10"; -import type { DiscordPermissionsSummary, DiscordReactOpts } from "./send.types.js"; import { resolveDiscordRest } from "./client.js"; +import type { DiscordPermissionsSummary, DiscordReactOpts } from "./send.types.js"; const PERMISSION_ENTRIES = Object.entries(PermissionFlagsBits).filter( ([, value]) => typeof value === "bigint", diff --git a/src/discord/send.reactions.ts b/src/discord/send.reactions.ts index 3aef057ff7..89dd9b9070 100644 --- a/src/discord/send.reactions.ts +++ b/src/discord/send.reactions.ts @@ -1,5 +1,4 @@ import { Routes } from "discord-api-types/v10"; -import type { DiscordReactionSummary, DiscordReactOpts } from "./send.types.js"; import { loadConfig } from "../config/config.js"; import { buildReactionIdentifier, @@ -8,6 +7,7 @@ import { normalizeReactionEmoji, resolveDiscordRest, } from "./send.shared.js"; +import type { DiscordReactionSummary, DiscordReactOpts } from "./send.types.js"; export async function reactMessageDiscord( channelId: string, diff --git a/src/discord/send.shared.ts b/src/discord/send.shared.ts index 6423997730..f195e781ec 100644 --- a/src/discord/send.shared.ts +++ b/src/discord/send.shared.ts @@ -1,4 +1,3 @@ -import type { RESTAPIPoll } from "discord-api-types/rest/v10"; import { Embed, RequestClient, @@ -8,10 +7,11 @@ import { type TopLevelComponents, } from "@buape/carbon"; import { PollLayoutType } from "discord-api-types/payloads/v10"; +import type { RESTAPIPoll } from "discord-api-types/rest/v10"; import { Routes, type APIEmbed } from "discord-api-types/v10"; import type { ChunkMode } from "../auto-reply/chunk.js"; -import type { RetryRunner } from "../infra/retry-policy.js"; import { loadConfig } from "../config/config.js"; +import type { RetryRunner } from "../infra/retry-policy.js"; import { normalizePollDurationHours, normalizePollInput, type PollInput } from "../polls.js"; import { loadWebMedia } from "../web/media.js"; import { resolveDiscordAccount } from "./accounts.js"; diff --git a/src/discord/targets.test.ts b/src/discord/targets.test.ts index 654c59d1f7..e30b6a69be 100644 --- a/src/discord/targets.test.ts +++ b/src/discord/targets.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { OpenClawConfig } from "../config/config.js"; import { normalizeDiscordMessagingTarget } from "../channels/plugins/normalize/discord.js"; +import type { OpenClawConfig } from "../config/config.js"; import { listDiscordDirectoryPeersLive } from "./directory-live.js"; import { parseDiscordTarget, resolveDiscordChannelId, resolveDiscordTarget } from "./targets.js"; diff --git a/src/discord/voice-message.ts b/src/discord/voice-message.ts index b5e289d677..f7d76d12ec 100644 --- a/src/discord/voice-message.ts +++ b/src/discord/voice-message.ts @@ -10,12 +10,12 @@ * - No other content (text, embeds, etc.) */ -import type { RequestClient } from "@buape/carbon"; import { execFile } from "node:child_process"; import crypto from "node:crypto"; import fs from "node:fs/promises"; import path from "node:path"; import { promisify } from "node:util"; +import type { RequestClient } from "@buape/carbon"; import type { RetryRunner } from "../infra/retry-policy.js"; import { resolvePreferredOpenClawTmpDir } from "../infra/tmp-openclaw-dir.js"; diff --git a/src/gateway/assistant-identity.ts b/src/gateway/assistant-identity.ts index e446171087..84ba6c7e6a 100644 --- a/src/gateway/assistant-identity.ts +++ b/src/gateway/assistant-identity.ts @@ -1,7 +1,7 @@ -import type { OpenClawConfig } from "../config/config.js"; import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js"; import { resolveAgentIdentity } from "../agents/identity.js"; import { loadAgentIdentity } from "../commands/agents.config.js"; +import type { OpenClawConfig } from "../config/config.js"; import { normalizeAgentId } from "../routing/session-key.js"; const MAX_ASSISTANT_NAME = 50; diff --git a/src/gateway/boot.ts b/src/gateway/boot.ts index e9486eac32..ff36af7eeb 100644 --- a/src/gateway/boot.ts +++ b/src/gateway/boot.ts @@ -1,17 +1,17 @@ import crypto from "node:crypto"; import fs from "node:fs/promises"; import path from "node:path"; -import type { CliDeps } from "../cli/deps.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { SessionEntry } from "../config/sessions/types.js"; import { SILENT_REPLY_TOKEN } from "../auto-reply/tokens.js"; +import type { CliDeps } from "../cli/deps.js"; import { agentCommand } from "../commands/agent.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveAgentIdFromSessionKey, resolveMainSessionKey, } from "../config/sessions/main-session.js"; import { resolveStorePath } from "../config/sessions/paths.js"; import { loadSessionStore, updateSessionStore } from "../config/sessions/store.js"; +import type { SessionEntry } from "../config/sessions/types.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { type RuntimeEnv, defaultRuntime } from "../runtime.js"; diff --git a/src/gateway/channel-health-monitor.test.ts b/src/gateway/channel-health-monitor.test.ts index 730a219f02..228b7b66e9 100644 --- a/src/gateway/channel-health-monitor.test.ts +++ b/src/gateway/channel-health-monitor.test.ts @@ -1,8 +1,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import type { ChannelId } from "../channels/plugins/types.js"; import type { ChannelAccountSnapshot } from "../channels/plugins/types.js"; -import type { ChannelManager, ChannelRuntimeSnapshot } from "./server-channels.js"; import { startChannelHealthMonitor } from "./channel-health-monitor.js"; +import type { ChannelManager, ChannelRuntimeSnapshot } from "./server-channels.js"; function createMockChannelManager(overrides?: Partial): ChannelManager { return { diff --git a/src/gateway/channel-health-monitor.ts b/src/gateway/channel-health-monitor.ts index 8349df0ed1..4b26efcec9 100644 --- a/src/gateway/channel-health-monitor.ts +++ b/src/gateway/channel-health-monitor.ts @@ -1,6 +1,6 @@ import type { ChannelId } from "../channels/plugins/types.js"; -import type { ChannelManager } from "./server-channels.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; +import type { ChannelManager } from "./server-channels.js"; const log = createSubsystemLogger("gateway/health-monitor"); diff --git a/src/gateway/client.ts b/src/gateway/client.ts index ff24b44cec..c976469702 100644 --- a/src/gateway/client.ts +++ b/src/gateway/client.ts @@ -1,11 +1,11 @@ import { randomUUID } from "node:crypto"; import { WebSocket, type ClientOptions, type CertMeta } from "ws"; -import type { DeviceIdentity } from "../infra/device-identity.js"; import { clearDeviceAuthToken, loadDeviceAuthToken, storeDeviceAuthToken, } from "../infra/device-auth-store.js"; +import type { DeviceIdentity } from "../infra/device-identity.js"; import { loadOrCreateDeviceIdentity, publicKeyRawBase64UrlFromPem, diff --git a/src/gateway/config-reload.test.ts b/src/gateway/config-reload.test.ts index 9259de73a8..3ad545855f 100644 --- a/src/gateway/config-reload.test.ts +++ b/src/gateway/config-reload.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import type { ChannelPlugin } from "../channels/plugins/types.js"; import { listChannelPlugins } from "../channels/plugins/index.js"; +import type { ChannelPlugin } from "../channels/plugins/types.js"; import { setActivePluginRegistry } from "../plugins/runtime.js"; import { createTestRegistry } from "../test-utils/channel-plugins.js"; import { diff --git a/src/gateway/config-reload.ts b/src/gateway/config-reload.ts index 31548c130b..a9b0de69ed 100644 --- a/src/gateway/config-reload.ts +++ b/src/gateway/config-reload.ts @@ -1,6 +1,6 @@ import chokidar from "chokidar"; -import type { OpenClawConfig, ConfigFileSnapshot, GatewayReloadMode } from "../config/config.js"; import { type ChannelId, listChannelPlugins } from "../channels/plugins/index.js"; +import type { OpenClawConfig, ConfigFileSnapshot, GatewayReloadMode } from "../config/config.js"; import { getActivePluginRegistry } from "../plugins/runtime.js"; import { isPlainObject } from "../utils.js"; diff --git a/src/gateway/control-ui.http.test.ts b/src/gateway/control-ui.http.test.ts index 14603efaf7..20b0503e97 100644 --- a/src/gateway/control-ui.http.test.ts +++ b/src/gateway/control-ui.http.test.ts @@ -1,5 +1,5 @@ -import type { IncomingMessage } from "node:http"; import fs from "node:fs/promises"; +import type { IncomingMessage } from "node:http"; import os from "node:os"; import path from "node:path"; import { describe, expect, it } from "vitest"; diff --git a/src/gateway/control-ui.ts b/src/gateway/control-ui.ts index 1256a3e5f9..de1f8e86aa 100644 --- a/src/gateway/control-ui.ts +++ b/src/gateway/control-ui.ts @@ -1,5 +1,5 @@ -import type { IncomingMessage, ServerResponse } from "node:http"; import fs from "node:fs"; +import type { IncomingMessage, ServerResponse } from "node:http"; import path from "node:path"; import type { OpenClawConfig } from "../config/config.js"; import { resolveControlUiRootSync } from "../infra/control-ui-assets.js"; diff --git a/src/gateway/gateway-misc.test.ts b/src/gateway/gateway-misc.test.ts index c39a0256b0..c48e4965a0 100644 --- a/src/gateway/gateway-misc.test.ts +++ b/src/gateway/gateway-misc.test.ts @@ -1,19 +1,19 @@ import { describe, expect, it, test, vi } from "vitest"; -import type { RequestFrame } from "./protocol/index.js"; -import type { GatewayClient as GatewayMethodClient } from "./server-methods/types.js"; -import type { GatewayRequestContext, RespondFn } from "./server-methods/types.js"; -import type { GatewayWsClient } from "./server/ws-types.js"; import { defaultVoiceWakeTriggers } from "../infra/voicewake.js"; import { GatewayClient } from "./client.js"; import { DEFAULT_DANGEROUS_NODE_COMMANDS, resolveNodeCommandAllowlist, } from "./node-command-policy.js"; +import type { RequestFrame } from "./protocol/index.js"; import { createGatewayBroadcaster } from "./server-broadcast.js"; import { createChatRunRegistry } from "./server-chat.js"; import { handleNodeInvokeResult } from "./server-methods/nodes.handlers.invoke-result.js"; +import type { GatewayClient as GatewayMethodClient } from "./server-methods/types.js"; +import type { GatewayRequestContext, RespondFn } from "./server-methods/types.js"; import { createNodeSubscriptionManager } from "./server-node-subscriptions.js"; import { formatError, normalizeVoiceWakeTriggers } from "./server-utils.js"; +import type { GatewayWsClient } from "./server/ws-types.js"; const wsMockState = vi.hoisted(() => ({ last: null as { url: unknown; opts: unknown } | null, diff --git a/src/gateway/gateway-models.profiles.live.test.ts b/src/gateway/gateway-models.profiles.live.test.ts index d941c1d262..098dae6e9d 100644 --- a/src/gateway/gateway-models.profiles.live.test.ts +++ b/src/gateway/gateway-models.profiles.live.test.ts @@ -1,11 +1,10 @@ -import type { Api, Model } from "@mariozechner/pi-ai"; import { randomBytes, randomUUID } from "node:crypto"; import fs from "node:fs/promises"; import { createServer } from "node:net"; import os from "node:os"; import path from "node:path"; +import type { Api, Model } from "@mariozechner/pi-ai"; import { describe, it } from "vitest"; -import type { OpenClawConfig, ModelProviderConfig } from "../config/types.js"; import { resolveOpenClawAgentDir } from "../agents/agent-paths.js"; import { resolveAgentWorkspaceDir } from "../agents/agent-scope.js"; import { @@ -23,6 +22,7 @@ import { getApiKeyForModel } from "../agents/model-auth.js"; import { ensureOpenClawModelsJson } from "../agents/models-config.js"; import { discoverAuthStorage, discoverModels } from "../agents/pi-model-discovery.js"; import { loadConfig } from "../config/config.js"; +import type { OpenClawConfig, ModelProviderConfig } from "../config/types.js"; import { isTruthyEnvValue } from "../infra/env.js"; import { DEFAULT_AGENT_ID } from "../routing/session-key.js"; import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../utils/message-channel.js"; diff --git a/src/gateway/hooks-mapping.ts b/src/gateway/hooks-mapping.ts index e7236e9f9b..efec4e5370 100644 --- a/src/gateway/hooks-mapping.ts +++ b/src/gateway/hooks-mapping.ts @@ -1,7 +1,7 @@ import path from "node:path"; import { pathToFileURL } from "node:url"; -import type { HookMessageChannel } from "./hooks.js"; import { CONFIG_PATH, type HookMappingConfig, type HooksConfig } from "../config/config.js"; +import type { HookMessageChannel } from "./hooks.js"; export type HookMappingResolved = { id: string; diff --git a/src/gateway/hooks.ts b/src/gateway/hooks.ts index 56b6a39835..7cc7cfdf60 100644 --- a/src/gateway/hooks.ts +++ b/src/gateway/hooks.ts @@ -1,9 +1,9 @@ -import type { IncomingMessage } from "node:http"; import { randomUUID } from "node:crypto"; -import type { ChannelId } from "../channels/plugins/types.js"; -import type { OpenClawConfig } from "../config/config.js"; +import type { IncomingMessage } from "node:http"; import { listAgentIds, resolveDefaultAgentId } from "../agents/agent-scope.js"; import { listChannelPlugins } from "../channels/plugins/index.js"; +import type { ChannelId } from "../channels/plugins/types.js"; +import type { OpenClawConfig } from "../config/config.js"; import { readJsonBodyWithLimit, requestBodyErrorToText } from "../infra/http-body.js"; import { normalizeAgentId } from "../routing/session-key.js"; import { normalizeMessageChannel } from "../utils/message-channel.js"; diff --git a/src/gateway/http-utils.ts b/src/gateway/http-utils.ts index 95be8d2210..fe183265f5 100644 --- a/src/gateway/http-utils.ts +++ b/src/gateway/http-utils.ts @@ -1,5 +1,5 @@ -import type { IncomingMessage } from "node:http"; import { randomUUID } from "node:crypto"; +import type { IncomingMessage } from "node:http"; import { buildAgentMainSessionKey, normalizeAgentId } from "../routing/session-key.js"; export function getHeader(req: IncomingMessage, name: string): string | undefined { diff --git a/src/gateway/node-invoke-sanitize.ts b/src/gateway/node-invoke-sanitize.ts index dcd8eb3f58..c794405dde 100644 --- a/src/gateway/node-invoke-sanitize.ts +++ b/src/gateway/node-invoke-sanitize.ts @@ -1,6 +1,6 @@ import type { ExecApprovalManager } from "./exec-approval-manager.js"; -import type { GatewayClient } from "./server-methods/types.js"; import { sanitizeSystemRunParamsForForwarding } from "./node-invoke-system-run-approval.js"; +import type { GatewayClient } from "./server-methods/types.js"; export function sanitizeNodeInvokeParamsForForwarding(opts: { command: string; diff --git a/src/gateway/node-invoke-system-run-approval.ts b/src/gateway/node-invoke-system-run-approval.ts index 73e7d83c71..66865953d4 100644 --- a/src/gateway/node-invoke-system-run-approval.ts +++ b/src/gateway/node-invoke-system-run-approval.ts @@ -1,9 +1,9 @@ -import type { ExecApprovalManager, ExecApprovalRecord } from "./exec-approval-manager.js"; -import type { GatewayClient } from "./server-methods/types.js"; import { formatExecCommand, validateSystemRunCommandConsistency, } from "../infra/system-run-command.js"; +import type { ExecApprovalManager, ExecApprovalRecord } from "./exec-approval-manager.js"; +import type { GatewayClient } from "./server-methods/types.js"; type SystemRunParamsLike = { command?: unknown; diff --git a/src/gateway/openai-http.ts b/src/gateway/openai-http.ts index 12d80cdfac..733985fd0e 100644 --- a/src/gateway/openai-http.ts +++ b/src/gateway/openai-http.ts @@ -1,7 +1,5 @@ -import type { IncomingMessage, ServerResponse } from "node:http"; import { randomUUID } from "node:crypto"; -import type { AuthRateLimiter } from "./auth-rate-limit.js"; -import type { ResolvedGatewayAuth } from "./auth.js"; +import type { IncomingMessage, ServerResponse } from "node:http"; import { createDefaultDeps } from "../cli/deps.js"; import { agentCommand } from "../commands/agent.js"; import { emitAgentEvent, onAgentEvent } from "../infra/agent-events.js"; @@ -12,6 +10,8 @@ import { buildAgentMessageFromConversationEntries, type ConversationEntry, } from "./agent-prompt.js"; +import type { AuthRateLimiter } from "./auth-rate-limit.js"; +import type { ResolvedGatewayAuth } from "./auth.js"; import { sendJson, setSseHeaders, writeDone } from "./http-common.js"; import { handleGatewayPostJsonEndpoint } from "./http-endpoint-helpers.js"; import { resolveAgentIdForRequest, resolveSessionKey } from "./http-utils.js"; diff --git a/src/gateway/openresponses-http.ts b/src/gateway/openresponses-http.ts index 2fc00dbdef..3fe440d4c3 100644 --- a/src/gateway/openresponses-http.ts +++ b/src/gateway/openresponses-http.ts @@ -6,15 +6,13 @@ * @see https://www.open-responses.com/ */ -import type { IncomingMessage, ServerResponse } from "node:http"; import { randomUUID } from "node:crypto"; +import type { IncomingMessage, ServerResponse } from "node:http"; import type { ClientToolDefinition } from "../agents/pi-embedded-runner/run/params.js"; -import type { ImageContent } from "../commands/agent/types.js"; -import type { GatewayHttpResponsesConfig } from "../config/types.gateway.js"; -import type { AuthRateLimiter } from "./auth-rate-limit.js"; -import type { ResolvedGatewayAuth } from "./auth.js"; import { createDefaultDeps } from "../cli/deps.js"; import { agentCommand } from "../commands/agent.js"; +import type { ImageContent } from "../commands/agent/types.js"; +import type { GatewayHttpResponsesConfig } from "../config/types.gateway.js"; import { emitAgentEvent, onAgentEvent } from "../infra/agent-events.js"; import { logWarn } from "../logger.js"; import { @@ -36,6 +34,8 @@ import { buildAgentMessageFromConversationEntries, type ConversationEntry, } from "./agent-prompt.js"; +import type { AuthRateLimiter } from "./auth-rate-limit.js"; +import type { ResolvedGatewayAuth } from "./auth.js"; import { sendJson, setSseHeaders, writeDone } from "./http-common.js"; import { handleGatewayPostJsonEndpoint } from "./http-endpoint-helpers.js"; import { resolveAgentIdForRequest, resolveSessionKey } from "./http-utils.js"; diff --git a/src/gateway/probe.ts b/src/gateway/probe.ts index 42a10f1cb9..3dbba982dd 100644 --- a/src/gateway/probe.ts +++ b/src/gateway/probe.ts @@ -1,6 +1,6 @@ import { randomUUID } from "node:crypto"; -import type { SystemPresence } from "../infra/system-presence.js"; import { formatErrorMessage } from "../infra/errors.js"; +import type { SystemPresence } from "../infra/system-presence.js"; import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../utils/message-channel.js"; import { GatewayClient } from "./client.js"; diff --git a/src/gateway/server-broadcast.ts b/src/gateway/server-broadcast.ts index 6f4e570f3b..f8ef2d69a7 100644 --- a/src/gateway/server-broadcast.ts +++ b/src/gateway/server-broadcast.ts @@ -1,5 +1,5 @@ -import type { GatewayWsClient } from "./server/ws-types.js"; import { MAX_BUFFERED_BYTES } from "./server-constants.js"; +import type { GatewayWsClient } from "./server/ws-types.js"; import { logWs, shouldLogWs, summarizeAgentEventForWsLog } from "./ws-log.js"; const ADMIN_SCOPE = "operator.admin"; diff --git a/src/gateway/server-channels.test.ts b/src/gateway/server-channels.test.ts index 1e18c286e0..30fcf3b959 100644 --- a/src/gateway/server-channels.test.ts +++ b/src/gateway/server-channels.test.ts @@ -1,5 +1,4 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import type { RuntimeEnv } from "../runtime.js"; import { type ChannelId, type ChannelPlugin } from "../channels/plugins/types.js"; import { createSubsystemLogger, @@ -9,6 +8,7 @@ import { import { createEmptyPluginRegistry, type PluginRegistry } from "../plugins/registry.js"; import { getActivePluginRegistry, setActivePluginRegistry } from "../plugins/runtime.js"; import { DEFAULT_ACCOUNT_ID } from "../routing/session-key.js"; +import type { RuntimeEnv } from "../runtime.js"; import { createChannelManager } from "./server-channels.js"; const hoisted = vi.hoisted(() => { diff --git a/src/gateway/server-channels.ts b/src/gateway/server-channels.ts index e2c7a4e4fc..c5a4064e2f 100644 --- a/src/gateway/server-channels.ts +++ b/src/gateway/server-channels.ts @@ -1,13 +1,13 @@ -import type { ChannelAccountSnapshot } from "../channels/plugins/types.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { createSubsystemLogger } from "../logging/subsystem.js"; -import type { RuntimeEnv } from "../runtime.js"; import { resolveChannelDefaultAccountId } from "../channels/plugins/helpers.js"; import { type ChannelId, getChannelPlugin, listChannelPlugins } from "../channels/plugins/index.js"; +import type { ChannelAccountSnapshot } from "../channels/plugins/types.js"; +import type { OpenClawConfig } from "../config/config.js"; import { type BackoffPolicy, computeBackoff, sleepWithAbort } from "../infra/backoff.js"; import { formatErrorMessage } from "../infra/errors.js"; import { resetDirectoryCache } from "../infra/outbound/target-resolver.js"; +import type { createSubsystemLogger } from "../logging/subsystem.js"; import { DEFAULT_ACCOUNT_ID } from "../routing/session-key.js"; +import type { RuntimeEnv } from "../runtime.js"; const CHANNEL_RESTART_POLICY: BackoffPolicy = { initialMs: 5_000, diff --git a/src/gateway/server-close.ts b/src/gateway/server-close.ts index ea0323587a..da9f5a39e9 100644 --- a/src/gateway/server-close.ts +++ b/src/gateway/server-close.ts @@ -1,10 +1,10 @@ import type { Server as HttpServer } from "node:http"; import type { WebSocketServer } from "ws"; import type { CanvasHostHandler, CanvasHostServer } from "../canvas-host/server.js"; -import type { HeartbeatRunner } from "../infra/heartbeat-runner.js"; -import type { PluginServicesHandle } from "../plugins/services.js"; import { type ChannelId, listChannelPlugins } from "../channels/plugins/index.js"; import { stopGmailWatcher } from "../hooks/gmail-watcher.js"; +import type { HeartbeatRunner } from "../infra/heartbeat-runner.js"; +import type { PluginServicesHandle } from "../plugins/services.js"; export function createGatewayCloseHandler(params: { bonjourStop: (() => Promise) | null; diff --git a/src/gateway/server-cron.ts b/src/gateway/server-cron.ts index 62f37724b7..cd0b565cb9 100644 --- a/src/gateway/server-cron.ts +++ b/src/gateway/server-cron.ts @@ -1,5 +1,5 @@ -import type { CliDeps } from "../cli/deps.js"; import { resolveDefaultAgentId } from "../agents/agent-scope.js"; +import type { CliDeps } from "../cli/deps.js"; import { loadConfig } from "../config/config.js"; import { canonicalizeMainSessionAlias, diff --git a/src/gateway/server-http.ts b/src/gateway/server-http.ts index 1bdd5acf24..f5dd2acaa7 100644 --- a/src/gateway/server-http.ts +++ b/src/gateway/server-http.ts @@ -1,5 +1,3 @@ -import type { TlsOptions } from "node:tls"; -import type { WebSocketServer } from "ws"; import { createServer as createHttpServer, type Server as HttpServer, @@ -7,10 +5,8 @@ import { type ServerResponse, } from "node:http"; import { createServer as createHttpsServer } from "node:https"; -import type { CanvasHostHandler } from "../canvas-host/server.js"; -import type { createSubsystemLogger } from "../logging/subsystem.js"; -import type { AuthRateLimiter } from "./auth-rate-limit.js"; -import type { GatewayWsClient } from "./server/ws-types.js"; +import type { TlsOptions } from "node:tls"; +import type { WebSocketServer } from "ws"; import { resolveAgentAvatar } from "../agents/identity-avatar.js"; import { A2UI_PATH, @@ -18,9 +14,12 @@ import { CANVAS_WS_PATH, handleA2uiHttpRequest, } from "../canvas-host/a2ui.js"; +import type { CanvasHostHandler } from "../canvas-host/server.js"; import { loadConfig } from "../config/config.js"; +import type { createSubsystemLogger } from "../logging/subsystem.js"; import { safeEqualSecret } from "../security/secret-equal.js"; import { handleSlackHttpRequest } from "../slack/http/index.js"; +import type { AuthRateLimiter } from "./auth-rate-limit.js"; import { authorizeGatewayConnect, isLocalDirectRequest, @@ -54,6 +53,7 @@ import { getBearerToken, getHeader } from "./http-utils.js"; import { isPrivateOrLoopbackAddress, resolveGatewayClientIp } from "./net.js"; import { handleOpenAiHttpRequest } from "./openai-http.js"; import { handleOpenResponsesHttpRequest } from "./openresponses-http.js"; +import type { GatewayWsClient } from "./server/ws-types.js"; import { handleToolsInvokeHttpRequest } from "./tools-invoke-http.js"; type SubsystemLogger = ReturnType; diff --git a/src/gateway/server-lanes.ts b/src/gateway/server-lanes.ts index 6c42b55596..ae65745708 100644 --- a/src/gateway/server-lanes.ts +++ b/src/gateway/server-lanes.ts @@ -1,5 +1,5 @@ -import type { loadConfig } from "../config/config.js"; import { resolveAgentMaxConcurrent, resolveSubagentMaxConcurrent } from "../config/agent-limits.js"; +import type { loadConfig } from "../config/config.js"; import { setCommandLaneConcurrency } from "../process/command-queue.js"; import { CommandLane } from "../process/lanes.js"; diff --git a/src/gateway/server-maintenance.ts b/src/gateway/server-maintenance.ts index bb3b68dd46..a93c799513 100644 --- a/src/gateway/server-maintenance.ts +++ b/src/gateway/server-maintenance.ts @@ -1,13 +1,13 @@ import type { HealthSummary } from "../commands/health.js"; -import type { ChatRunEntry } from "./server-chat.js"; -import type { DedupeEntry } from "./server-shared.js"; import { abortChatRunById, type ChatAbortControllerEntry } from "./chat-abort.js"; +import type { ChatRunEntry } from "./server-chat.js"; import { DEDUPE_MAX, DEDUPE_TTL_MS, HEALTH_REFRESH_INTERVAL_MS, TICK_INTERVAL_MS, } from "./server-constants.js"; +import type { DedupeEntry } from "./server-shared.js"; import { formatError } from "./server-utils.js"; import { setBroadcastHealthUpdate } from "./server/health-state.js"; diff --git a/src/gateway/server-methods.ts b/src/gateway/server-methods.ts index 5ae929e79c..e0e78da52e 100644 --- a/src/gateway/server-methods.ts +++ b/src/gateway/server-methods.ts @@ -1,4 +1,3 @@ -import type { GatewayRequestHandlers, GatewayRequestOptions } from "./server-methods/types.js"; import { ErrorCodes, errorShape } from "./protocol/index.js"; import { agentHandlers } from "./server-methods/agent.js"; import { agentsHandlers } from "./server-methods/agents.js"; @@ -21,6 +20,7 @@ import { skillsHandlers } from "./server-methods/skills.js"; import { systemHandlers } from "./server-methods/system.js"; import { talkHandlers } from "./server-methods/talk.js"; import { ttsHandlers } from "./server-methods/tts.js"; +import type { GatewayRequestHandlers, GatewayRequestOptions } from "./server-methods/types.js"; import { updateHandlers } from "./server-methods/update.js"; import { usageHandlers } from "./server-methods/usage.js"; import { voicewakeHandlers } from "./server-methods/voicewake.js"; diff --git a/src/gateway/server-methods/agent-timestamp.ts b/src/gateway/server-methods/agent-timestamp.ts index b83245650b..e00be2bbac 100644 --- a/src/gateway/server-methods/agent-timestamp.ts +++ b/src/gateway/server-methods/agent-timestamp.ts @@ -1,5 +1,5 @@ -import type { OpenClawConfig } from "../../config/types.js"; import { resolveUserTimezone } from "../../agents/date-time.js"; +import type { OpenClawConfig } from "../../config/types.js"; import { formatZonedTimestamp } from "../../infra/format-time/format-datetime.ts"; /** diff --git a/src/gateway/server-methods/agent.test.ts b/src/gateway/server-methods/agent.test.ts index 5db64f261e..5b8c89f023 100644 --- a/src/gateway/server-methods/agent.test.ts +++ b/src/gateway/server-methods/agent.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from "vitest"; -import type { GatewayRequestContext } from "./types.js"; import { BARE_SESSION_RESET_PROMPT } from "../../auto-reply/reply/session-reset-prompt.js"; import { agentHandlers } from "./agent.js"; +import type { GatewayRequestContext } from "./types.js"; const mocks = vi.hoisted(() => ({ loadSessionEntry: vi.fn(), diff --git a/src/gateway/server-methods/agent.ts b/src/gateway/server-methods/agent.ts index d9c3451ee9..1336d42cb8 100644 --- a/src/gateway/server-methods/agent.ts +++ b/src/gateway/server-methods/agent.ts @@ -1,5 +1,4 @@ import { randomUUID } from "node:crypto"; -import type { GatewayRequestHandlerOptions, GatewayRequestHandlers } from "./types.js"; import { listAgentIds } from "../../agents/agent-scope.js"; import { BARE_SESSION_RESET_PROMPT } from "../../auto-reply/reply/session-reset-prompt.js"; import { agentCommand } from "../../commands/agent.js"; @@ -50,6 +49,7 @@ import { waitForAgentJob } from "./agent-job.js"; import { injectTimestamp, timestampOptsFromConfig } from "./agent-timestamp.js"; import { normalizeRpcAttachmentsToChatAttachments } from "./attachment-normalize.js"; import { sessionsHandlers } from "./sessions.js"; +import type { GatewayRequestHandlerOptions, GatewayRequestHandlers } from "./types.js"; const RESET_COMMAND_RE = /^\/(new|reset)(?:\s+([\s\S]*))?$/i; diff --git a/src/gateway/server-methods/agents.ts b/src/gateway/server-methods/agents.ts index 2fbb07fd96..04a716e077 100644 --- a/src/gateway/server-methods/agents.ts +++ b/src/gateway/server-methods/agents.ts @@ -1,6 +1,5 @@ import fs from "node:fs/promises"; import path from "node:path"; -import type { GatewayRequestHandlers, RespondFn } from "./types.js"; import { listAgentIds, resolveAgentDir, @@ -43,6 +42,7 @@ import { validateAgentsUpdateParams, } from "../protocol/index.js"; import { listAgentsForGateway } from "../session-utils.js"; +import type { GatewayRequestHandlers, RespondFn } from "./types.js"; const BOOTSTRAP_FILE_NAMES = [ DEFAULT_AGENTS_FILENAME, diff --git a/src/gateway/server-methods/browser.ts b/src/gateway/server-methods/browser.ts index a262432776..fb042ad696 100644 --- a/src/gateway/server-methods/browser.ts +++ b/src/gateway/server-methods/browser.ts @@ -1,6 +1,4 @@ import crypto from "node:crypto"; -import type { NodeSession } from "../node-registry.js"; -import type { GatewayRequestHandlers } from "./types.js"; import { createBrowserControlContext, startBrowserControlServiceFromConfig, @@ -9,8 +7,10 @@ import { applyBrowserProxyPaths, persistBrowserProxyFiles } from "../../browser/ import { createBrowserRouteDispatcher } from "../../browser/routes/dispatcher.js"; import { loadConfig } from "../../config/config.js"; import { isNodeCommandAllowed, resolveNodeCommandAllowlist } from "../node-command-policy.js"; +import type { NodeSession } from "../node-registry.js"; import { ErrorCodes, errorShape } from "../protocol/index.js"; import { respondUnavailableOnNodeInvokeError, safeParseJson } from "./nodes.helpers.js"; +import type { GatewayRequestHandlers } from "./types.js"; type BrowserRequestParams = { method?: string; diff --git a/src/gateway/server-methods/channels.ts b/src/gateway/server-methods/channels.ts index 529fba686f..d00d872653 100644 --- a/src/gateway/server-methods/channels.ts +++ b/src/gateway/server-methods/channels.ts @@ -1,6 +1,3 @@ -import type { ChannelAccountSnapshot, ChannelPlugin } from "../../channels/plugins/types.js"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { GatewayRequestContext, GatewayRequestHandlers } from "./types.js"; import { buildChannelUiCatalog } from "../../channels/plugins/catalog.js"; import { resolveChannelDefaultAccountId } from "../../channels/plugins/helpers.js"; import { @@ -10,6 +7,8 @@ import { normalizeChannelId, } from "../../channels/plugins/index.js"; import { buildChannelAccountSnapshot } from "../../channels/plugins/status.js"; +import type { ChannelAccountSnapshot, ChannelPlugin } from "../../channels/plugins/types.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { loadConfig, readConfigFileSnapshot } from "../../config/config.js"; import { getChannelActivity } from "../../infra/channel-activity.js"; import { DEFAULT_ACCOUNT_ID } from "../../routing/session-key.js"; @@ -22,6 +21,7 @@ import { validateChannelsStatusParams, } from "../protocol/index.js"; import { formatForLog } from "../ws-log.js"; +import type { GatewayRequestContext, GatewayRequestHandlers } from "./types.js"; type ChannelLogoutPayload = { channel: ChannelId; diff --git a/src/gateway/server-methods/chat.abort-persistence.test.ts b/src/gateway/server-methods/chat.abort-persistence.test.ts index bee1382e07..428efefa3c 100644 --- a/src/gateway/server-methods/chat.abort-persistence.test.ts +++ b/src/gateway/server-methods/chat.abort-persistence.test.ts @@ -1,7 +1,7 @@ -import { CURRENT_SESSION_VERSION } from "@mariozechner/pi-coding-agent"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import { CURRENT_SESSION_VERSION } from "@mariozechner/pi-coding-agent"; import { afterEach, describe, expect, it, vi } from "vitest"; type TranscriptLine = { diff --git a/src/gateway/server-methods/chat.inject.parentid.e2e.test.ts b/src/gateway/server-methods/chat.inject.parentid.e2e.test.ts index 532be67eb4..5cf209b605 100644 --- a/src/gateway/server-methods/chat.inject.parentid.e2e.test.ts +++ b/src/gateway/server-methods/chat.inject.parentid.e2e.test.ts @@ -1,7 +1,7 @@ -import { CURRENT_SESSION_VERSION } from "@mariozechner/pi-coding-agent"; import fs from "node:fs"; import os from "node:os"; import path from "node:path"; +import { CURRENT_SESSION_VERSION } from "@mariozechner/pi-coding-agent"; import { describe, expect, it, vi } from "vitest"; import type { GatewayRequestContext } from "./types.js"; diff --git a/src/gateway/server-methods/chat.ts b/src/gateway/server-methods/chat.ts index 1af817aa1e..6c0b90e943 100644 --- a/src/gateway/server-methods/chat.ts +++ b/src/gateway/server-methods/chat.ts @@ -1,13 +1,12 @@ -import { CURRENT_SESSION_VERSION, SessionManager } from "@mariozechner/pi-coding-agent"; import fs from "node:fs"; import path from "node:path"; -import type { MsgContext } from "../../auto-reply/templating.js"; -import type { GatewayRequestContext, GatewayRequestHandlers } from "./types.js"; +import { CURRENT_SESSION_VERSION, SessionManager } from "@mariozechner/pi-coding-agent"; import { resolveSessionAgentId } from "../../agents/agent-scope.js"; import { resolveThinkingDefault } from "../../agents/model-selection.js"; import { resolveAgentTimeoutMs } from "../../agents/timeout.js"; import { dispatchInboundMessage } from "../../auto-reply/dispatch.js"; import { createReplyDispatcher } from "../../auto-reply/reply/reply-dispatcher.js"; +import type { MsgContext } from "../../auto-reply/templating.js"; import { createReplyPrefixOptions } from "../../channels/reply-prefix.js"; import { resolveSessionFilePath } from "../../config/sessions.js"; import { resolveSendPolicy } from "../../sessions/send-policy.js"; @@ -42,6 +41,7 @@ import { import { formatForLog } from "../ws-log.js"; import { injectTimestamp, timestampOptsFromConfig } from "./agent-timestamp.js"; import { normalizeRpcAttachmentsToChatAttachments } from "./attachment-normalize.js"; +import type { GatewayRequestContext, GatewayRequestHandlers } from "./types.js"; type TranscriptAppendResult = { ok: boolean; diff --git a/src/gateway/server-methods/config.ts b/src/gateway/server-methods/config.ts index e0bc6c8916..7956320f57 100644 --- a/src/gateway/server-methods/config.ts +++ b/src/gateway/server-methods/config.ts @@ -1,5 +1,3 @@ -import type { OpenClawConfig } from "../../config/types.openclaw.js"; -import type { GatewayRequestHandlers, RespondFn } from "./types.js"; import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../../agents/agent-scope.js"; import { listChannelPlugins } from "../../channels/plugins/index.js"; import { @@ -21,6 +19,7 @@ import { } from "../../config/redact-snapshot.js"; import { buildConfigSchema, type ConfigSchemaResponse } from "../../config/schema.js"; import { extractDeliveryInfo } from "../../config/sessions.js"; +import type { OpenClawConfig } from "../../config/types.openclaw.js"; import { formatDoctorNonInteractiveHint, type RestartSentinelPayload, @@ -39,6 +38,7 @@ import { } from "../protocol/index.js"; import { resolveBaseHashParam } from "./base-hash.js"; import { parseRestartRequestParams } from "./restart-request.js"; +import type { GatewayRequestHandlers, RespondFn } from "./types.js"; import { assertValidParams } from "./validation.js"; function requireConfigBaseHash( diff --git a/src/gateway/server-methods/connect.ts b/src/gateway/server-methods/connect.ts index bd7d70072e..309693782a 100644 --- a/src/gateway/server-methods/connect.ts +++ b/src/gateway/server-methods/connect.ts @@ -1,5 +1,5 @@ -import type { GatewayRequestHandlers } from "./types.js"; import { ErrorCodes, errorShape } from "../protocol/index.js"; +import type { GatewayRequestHandlers } from "./types.js"; export const connectHandlers: GatewayRequestHandlers = { connect: ({ respond }) => { diff --git a/src/gateway/server-methods/cron.ts b/src/gateway/server-methods/cron.ts index 023d9d3633..054576091d 100644 --- a/src/gateway/server-methods/cron.ts +++ b/src/gateway/server-methods/cron.ts @@ -1,7 +1,6 @@ -import type { CronJobCreate, CronJobPatch } from "../../cron/types.js"; -import type { GatewayRequestHandlers } from "./types.js"; import { normalizeCronJobCreate, normalizeCronJobPatch } from "../../cron/normalize.js"; import { readCronRunLogEntries, resolveCronRunLogPath } from "../../cron/run-log.js"; +import type { CronJobCreate, CronJobPatch } from "../../cron/types.js"; import { validateScheduleTimestamp } from "../../cron/validate-timestamp.js"; import { ErrorCodes, @@ -16,6 +15,7 @@ import { validateCronUpdateParams, validateWakeParams, } from "../protocol/index.js"; +import type { GatewayRequestHandlers } from "./types.js"; export const cronHandlers: GatewayRequestHandlers = { wake: ({ params, respond, context }) => { diff --git a/src/gateway/server-methods/devices.ts b/src/gateway/server-methods/devices.ts index b57cfd6d9f..ebf7d7f947 100644 --- a/src/gateway/server-methods/devices.ts +++ b/src/gateway/server-methods/devices.ts @@ -1,4 +1,3 @@ -import type { GatewayRequestHandlers } from "./types.js"; import { approveDevicePairing, listDevicePairing, @@ -18,6 +17,7 @@ import { validateDeviceTokenRevokeParams, validateDeviceTokenRotateParams, } from "../protocol/index.js"; +import type { GatewayRequestHandlers } from "./types.js"; function redactPairedDevice( device: { tokens?: Record } & Record, diff --git a/src/gateway/server-methods/exec-approval.ts b/src/gateway/server-methods/exec-approval.ts index 01045b2ac1..798102d20d 100644 --- a/src/gateway/server-methods/exec-approval.ts +++ b/src/gateway/server-methods/exec-approval.ts @@ -1,10 +1,9 @@ import type { ExecApprovalForwarder } from "../../infra/exec-approval-forwarder.js"; -import type { ExecApprovalManager } from "../exec-approval-manager.js"; -import type { GatewayRequestHandlers } from "./types.js"; import { DEFAULT_EXEC_APPROVAL_TIMEOUT_MS, type ExecApprovalDecision, } from "../../infra/exec-approvals.js"; +import type { ExecApprovalManager } from "../exec-approval-manager.js"; import { ErrorCodes, errorShape, @@ -12,6 +11,7 @@ import { validateExecApprovalRequestParams, validateExecApprovalResolveParams, } from "../protocol/index.js"; +import type { GatewayRequestHandlers } from "./types.js"; export function createExecApprovalHandlers( manager: ExecApprovalManager, diff --git a/src/gateway/server-methods/exec-approvals.ts b/src/gateway/server-methods/exec-approvals.ts index a0e0575abc..d55befb14a 100644 --- a/src/gateway/server-methods/exec-approvals.ts +++ b/src/gateway/server-methods/exec-approvals.ts @@ -1,4 +1,3 @@ -import type { GatewayRequestHandlers, RespondFn } from "./types.js"; import { ensureExecApprovals, mergeExecApprovalsSocketDefaults, @@ -22,6 +21,7 @@ import { respondUnavailableOnThrow, safeParseJson, } from "./nodes.helpers.js"; +import type { GatewayRequestHandlers, RespondFn } from "./types.js"; import { assertValidParams } from "./validation.js"; function requireApprovalsBaseHash( diff --git a/src/gateway/server-methods/health.ts b/src/gateway/server-methods/health.ts index d0c499090c..f89030a14c 100644 --- a/src/gateway/server-methods/health.ts +++ b/src/gateway/server-methods/health.ts @@ -1,9 +1,9 @@ -import type { GatewayRequestHandlers } from "./types.js"; import { getStatusSummary } from "../../commands/status.js"; import { ErrorCodes, errorShape } from "../protocol/index.js"; import { HEALTH_REFRESH_INTERVAL_MS } from "../server-constants.js"; import { formatError } from "../server-utils.js"; import { formatForLog } from "../ws-log.js"; +import type { GatewayRequestHandlers } from "./types.js"; const ADMIN_SCOPE = "operator.admin"; diff --git a/src/gateway/server-methods/logs.ts b/src/gateway/server-methods/logs.ts index aebd6efa9d..e7d8138051 100644 --- a/src/gateway/server-methods/logs.ts +++ b/src/gateway/server-methods/logs.ts @@ -1,6 +1,5 @@ import fs from "node:fs/promises"; import path from "node:path"; -import type { GatewayRequestHandlers } from "./types.js"; import { getResolvedLoggerSettings } from "../../logging.js"; import { clamp } from "../../utils.js"; import { @@ -9,6 +8,7 @@ import { formatValidationErrors, validateLogsTailParams, } from "../protocol/index.js"; +import type { GatewayRequestHandlers } from "./types.js"; const DEFAULT_LIMIT = 500; const DEFAULT_MAX_BYTES = 250_000; diff --git a/src/gateway/server-methods/mesh.test.ts b/src/gateway/server-methods/mesh.test.ts index 679557d7fe..04069eb416 100644 --- a/src/gateway/server-methods/mesh.test.ts +++ b/src/gateway/server-methods/mesh.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from "vitest"; -import type { GatewayRequestContext } from "./types.js"; import { __resetMeshRunsForTest, meshHandlers } from "./mesh.js"; +import type { GatewayRequestContext } from "./types.js"; const mocks = vi.hoisted(() => ({ agent: vi.fn(), diff --git a/src/gateway/server-methods/mesh.ts b/src/gateway/server-methods/mesh.ts index a33f09cba7..0d1b594450 100644 --- a/src/gateway/server-methods/mesh.ts +++ b/src/gateway/server-methods/mesh.ts @@ -1,5 +1,4 @@ import { randomUUID } from "node:crypto"; -import type { GatewayRequestHandlerOptions, GatewayRequestHandlers, RespondFn } from "./types.js"; import { agentCommand } from "../../commands/agent.js"; import { normalizeAgentId } from "../../routing/session-key.js"; import { defaultRuntime } from "../../runtime.js"; @@ -15,6 +14,7 @@ import { type MeshWorkflowPlan, } from "../protocol/index.js"; import { agentHandlers } from "./agent.js"; +import type { GatewayRequestHandlerOptions, GatewayRequestHandlers, RespondFn } from "./types.js"; type MeshStepStatus = "pending" | "running" | "succeeded" | "failed" | "skipped"; type MeshRunStatus = "pending" | "running" | "completed" | "failed"; diff --git a/src/gateway/server-methods/models.ts b/src/gateway/server-methods/models.ts index 68eca48a12..ec2f5a0aa5 100644 --- a/src/gateway/server-methods/models.ts +++ b/src/gateway/server-methods/models.ts @@ -1,10 +1,10 @@ -import type { GatewayRequestHandlers } from "./types.js"; import { ErrorCodes, errorShape, formatValidationErrors, validateModelsListParams, } from "../protocol/index.js"; +import type { GatewayRequestHandlers } from "./types.js"; export const modelsHandlers: GatewayRequestHandlers = { "models.list": async ({ params, respond, context }) => { diff --git a/src/gateway/server-methods/nodes.handlers.invoke-result.ts b/src/gateway/server-methods/nodes.handlers.invoke-result.ts index 786eb038c6..91e48e813f 100644 --- a/src/gateway/server-methods/nodes.handlers.invoke-result.ts +++ b/src/gateway/server-methods/nodes.handlers.invoke-result.ts @@ -1,6 +1,6 @@ -import type { GatewayRequestHandler } from "./types.js"; import { ErrorCodes, errorShape, validateNodeInvokeResultParams } from "../protocol/index.js"; import { respondInvalidParams } from "./nodes.helpers.js"; +import type { GatewayRequestHandler } from "./types.js"; function normalizeNodeInvokeResultParams(params: unknown): unknown { if (!params || typeof params !== "object") { diff --git a/src/gateway/server-methods/nodes.helpers.ts b/src/gateway/server-methods/nodes.helpers.ts index 33192193d6..69388d0786 100644 --- a/src/gateway/server-methods/nodes.helpers.ts +++ b/src/gateway/server-methods/nodes.helpers.ts @@ -1,7 +1,7 @@ import type { ErrorObject } from "ajv"; -import type { RespondFn } from "./types.js"; import { ErrorCodes, errorShape, formatValidationErrors } from "../protocol/index.js"; import { formatForLog } from "../ws-log.js"; +import type { RespondFn } from "./types.js"; type ValidatorFn = ((value: unknown) => boolean) & { errors?: ErrorObject[] | null; diff --git a/src/gateway/server-methods/nodes.ts b/src/gateway/server-methods/nodes.ts index c300ea2f73..9d7df8ea4b 100644 --- a/src/gateway/server-methods/nodes.ts +++ b/src/gateway/server-methods/nodes.ts @@ -1,4 +1,3 @@ -import type { GatewayRequestHandlers } from "./types.js"; import { loadConfig } from "../../config/config.js"; import { listDevicePairing } from "../../infra/device-pairing.js"; import { @@ -33,6 +32,7 @@ import { safeParseJson, uniqueSortedStrings, } from "./nodes.helpers.js"; +import type { GatewayRequestHandlers } from "./types.js"; function isNodeEntry(entry: { role?: string; roles?: string[] }) { if (entry.role === "node") { diff --git a/src/gateway/server-methods/send.test.ts b/src/gateway/server-methods/send.test.ts index f93ff221b4..167132ccad 100644 --- a/src/gateway/server-methods/send.test.ts +++ b/src/gateway/server-methods/send.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { GatewayRequestContext } from "./types.js"; import { sendHandlers } from "./send.js"; +import type { GatewayRequestContext } from "./types.js"; const mocks = vi.hoisted(() => ({ deliverOutboundPayloads: vi.fn(), diff --git a/src/gateway/server-methods/send.ts b/src/gateway/server-methods/send.ts index ea094ab7a7..550839acdb 100644 --- a/src/gateway/server-methods/send.ts +++ b/src/gateway/server-methods/send.ts @@ -1,4 +1,3 @@ -import type { GatewayRequestContext, GatewayRequestHandlers } from "./types.js"; import { resolveSessionAgentId } from "../../agents/agent-scope.js"; import { getChannelPlugin, normalizeChannelId } from "../../channels/plugins/index.js"; import { DEFAULT_CHAT_CHANNEL } from "../../channels/registry.js"; @@ -20,6 +19,7 @@ import { validateSendParams, } from "../protocol/index.js"; import { formatForLog } from "../ws-log.js"; +import type { GatewayRequestContext, GatewayRequestHandlers } from "./types.js"; type InflightResult = { ok: boolean; diff --git a/src/gateway/server-methods/sessions.ts b/src/gateway/server-methods/sessions.ts index 91cdf77049..ab37ff7bc4 100644 --- a/src/gateway/server-methods/sessions.ts +++ b/src/gateway/server-methods/sessions.ts @@ -1,6 +1,5 @@ import { randomUUID } from "node:crypto"; import fs from "node:fs"; -import type { GatewayRequestHandlers, RespondFn } from "./types.js"; import { resolveDefaultAgentId } from "../../agents/agent-scope.js"; import { abortEmbeddedPiRun, waitForEmbeddedPiRunEnd } from "../../agents/pi-embedded.js"; import { stopSubagentsForRequester } from "../../auto-reply/reply/abort.js"; @@ -43,6 +42,7 @@ import { } from "../session-utils.js"; import { applySessionsPatchToStore } from "../sessions-patch.js"; import { resolveSessionKeyFromResolveParams } from "../sessions-resolve.js"; +import type { GatewayRequestHandlers, RespondFn } from "./types.js"; import { assertValidParams } from "./validation.js"; function requireSessionKey(key: unknown, respond: RespondFn): string | null { diff --git a/src/gateway/server-methods/skills.ts b/src/gateway/server-methods/skills.ts index c4039a1872..2dbcf9afae 100644 --- a/src/gateway/server-methods/skills.ts +++ b/src/gateway/server-methods/skills.ts @@ -1,5 +1,3 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { GatewayRequestHandlers } from "./types.js"; import { listAgentIds, resolveAgentWorkspaceDir, @@ -9,6 +7,7 @@ import { installSkill } from "../../agents/skills-install.js"; import { buildWorkspaceSkillStatus } from "../../agents/skills-status.js"; import { loadWorkspaceSkillEntries, type SkillEntry } from "../../agents/skills.js"; import { listAgentWorkspaceDirs } from "../../agents/workspace-dirs.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { loadConfig, writeConfigFile } from "../../config/config.js"; import { getRemoteSkillEligibility } from "../../infra/skills-remote.js"; import { normalizeAgentId } from "../../routing/session-key.js"; @@ -22,6 +21,7 @@ import { validateSkillsStatusParams, validateSkillsUpdateParams, } from "../protocol/index.js"; +import type { GatewayRequestHandlers } from "./types.js"; function collectSkillBins(entries: SkillEntry[]): string[] { const bins = new Set(); diff --git a/src/gateway/server-methods/system.ts b/src/gateway/server-methods/system.ts index fa440a29a7..b9c5e64ca0 100644 --- a/src/gateway/server-methods/system.ts +++ b/src/gateway/server-methods/system.ts @@ -1,10 +1,10 @@ -import type { GatewayRequestHandlers } from "./types.js"; import { resolveMainSessionKeyFromConfig } from "../../config/sessions.js"; import { getLastHeartbeatEvent } from "../../infra/heartbeat-events.js"; import { setHeartbeatsEnabled } from "../../infra/heartbeat-runner.js"; import { enqueueSystemEvent, isSystemEventContextChanged } from "../../infra/system-events.js"; import { listSystemPresence, updateSystemPresence } from "../../infra/system-presence.js"; import { ErrorCodes, errorShape } from "../protocol/index.js"; +import type { GatewayRequestHandlers } from "./types.js"; export const systemHandlers: GatewayRequestHandlers = { "last-heartbeat": ({ respond }) => { diff --git a/src/gateway/server-methods/talk.ts b/src/gateway/server-methods/talk.ts index fbe43618ec..760f4cc931 100644 --- a/src/gateway/server-methods/talk.ts +++ b/src/gateway/server-methods/talk.ts @@ -1,4 +1,3 @@ -import type { GatewayRequestHandlers } from "./types.js"; import { readConfigFileSnapshot } from "../../config/config.js"; import { redactConfigObject } from "../../config/redact-snapshot.js"; import { @@ -8,6 +7,7 @@ import { validateTalkConfigParams, validateTalkModeParams, } from "../protocol/index.js"; +import type { GatewayRequestHandlers } from "./types.js"; const ADMIN_SCOPE = "operator.admin"; const TALK_SECRETS_SCOPE = "operator.talk.secrets"; diff --git a/src/gateway/server-methods/tts.ts b/src/gateway/server-methods/tts.ts index 4535149bb5..5e4e8254eb 100644 --- a/src/gateway/server-methods/tts.ts +++ b/src/gateway/server-methods/tts.ts @@ -1,4 +1,3 @@ -import type { GatewayRequestHandlers } from "./types.js"; import { loadConfig } from "../../config/config.js"; import { OPENAI_TTS_MODELS, @@ -17,6 +16,7 @@ import { } from "../../tts/tts.js"; import { ErrorCodes, errorShape } from "../protocol/index.js"; import { formatForLog } from "../ws-log.js"; +import type { GatewayRequestHandlers } from "./types.js"; export const ttsHandlers: GatewayRequestHandlers = { "tts.status": async ({ respond }) => { diff --git a/src/gateway/server-methods/update.ts b/src/gateway/server-methods/update.ts index a72e2d0abe..5e743d8230 100644 --- a/src/gateway/server-methods/update.ts +++ b/src/gateway/server-methods/update.ts @@ -1,4 +1,3 @@ -import type { GatewayRequestHandlers } from "./types.js"; import { loadConfig } from "../../config/config.js"; import { extractDeliveryInfo } from "../../config/sessions.js"; import { resolveOpenClawPackageRoot } from "../../infra/openclaw-root.js"; @@ -12,6 +11,7 @@ import { normalizeUpdateChannel } from "../../infra/update-channels.js"; import { runGatewayUpdate } from "../../infra/update-runner.js"; import { validateUpdateRunParams } from "../protocol/index.js"; import { parseRestartRequestParams } from "./restart-request.js"; +import type { GatewayRequestHandlers } from "./types.js"; import { assertValidParams } from "./validation.js"; export const updateHandlers: GatewayRequestHandlers = { diff --git a/src/gateway/server-methods/usage.ts b/src/gateway/server-methods/usage.ts index 65ce44070c..dd48dce479 100644 --- a/src/gateway/server-methods/usage.ts +++ b/src/gateway/server-methods/usage.ts @@ -1,5 +1,11 @@ import fs from "node:fs"; +import { loadConfig } from "../../config/config.js"; +import { + resolveSessionFilePath, + resolveSessionFilePathOptions, +} from "../../config/sessions/paths.js"; import type { SessionEntry, SessionSystemPromptReport } from "../../config/sessions/types.js"; +import { loadProviderUsageSummary } from "../../infra/provider-usage.js"; import type { CostUsageSummary, SessionCostSummary, @@ -10,13 +16,6 @@ import type { SessionModelUsage, SessionToolUsage, } from "../../infra/session-cost-usage.js"; -import type { GatewayRequestHandlers, RespondFn } from "./types.js"; -import { loadConfig } from "../../config/config.js"; -import { - resolveSessionFilePath, - resolveSessionFilePathOptions, -} from "../../config/sessions/paths.js"; -import { loadProviderUsageSummary } from "../../infra/provider-usage.js"; import { loadCostUsageSummary, loadSessionCostSummary, @@ -37,6 +36,7 @@ import { loadCombinedSessionStoreForGateway, loadSessionEntry, } from "../session-utils.js"; +import type { GatewayRequestHandlers, RespondFn } from "./types.js"; const COST_USAGE_CACHE_TTL_MS = 30_000; diff --git a/src/gateway/server-methods/validation.ts b/src/gateway/server-methods/validation.ts index 90c663d26c..9aeb2a8733 100644 --- a/src/gateway/server-methods/validation.ts +++ b/src/gateway/server-methods/validation.ts @@ -1,6 +1,6 @@ import type { ErrorObject } from "ajv"; -import type { RespondFn } from "./types.js"; import { ErrorCodes, errorShape, formatValidationErrors } from "../protocol/index.js"; +import type { RespondFn } from "./types.js"; export type Validator = ((params: unknown) => params is T) & { errors?: ErrorObject[] | null; diff --git a/src/gateway/server-methods/voicewake.ts b/src/gateway/server-methods/voicewake.ts index aa1355dc7f..3f43488aa9 100644 --- a/src/gateway/server-methods/voicewake.ts +++ b/src/gateway/server-methods/voicewake.ts @@ -1,8 +1,8 @@ -import type { GatewayRequestHandlers } from "./types.js"; import { loadVoiceWakeConfig, setVoiceWakeTriggers } from "../../infra/voicewake.js"; import { ErrorCodes, errorShape } from "../protocol/index.js"; import { normalizeVoiceWakeTriggers } from "../server-utils.js"; import { formatForLog } from "../ws-log.js"; +import type { GatewayRequestHandlers } from "./types.js"; export const voicewakeHandlers: GatewayRequestHandlers = { "voicewake.get": async ({ respond }) => { diff --git a/src/gateway/server-methods/web.ts b/src/gateway/server-methods/web.ts index 8e016442eb..26f6f44ea8 100644 --- a/src/gateway/server-methods/web.ts +++ b/src/gateway/server-methods/web.ts @@ -1,4 +1,3 @@ -import type { GatewayRequestHandlers, RespondFn } from "./types.js"; import { listChannelPlugins } from "../../channels/plugins/index.js"; import { ErrorCodes, @@ -8,6 +7,7 @@ import { validateWebLoginWaitParams, } from "../protocol/index.js"; import { formatForLog } from "../ws-log.js"; +import type { GatewayRequestHandlers, RespondFn } from "./types.js"; const WEB_LOGIN_METHODS = new Set(["web.login.start", "web.login.wait"]); diff --git a/src/gateway/server-methods/wizard.ts b/src/gateway/server-methods/wizard.ts index 18b92087bd..c8675bd7fd 100644 --- a/src/gateway/server-methods/wizard.ts +++ b/src/gateway/server-methods/wizard.ts @@ -1,5 +1,4 @@ import { randomUUID } from "node:crypto"; -import type { GatewayRequestContext, GatewayRequestHandlers, RespondFn } from "./types.js"; import { defaultRuntime } from "../../runtime.js"; import { WizardSession } from "../../wizard/session.js"; import { @@ -11,6 +10,7 @@ import { validateWizardStatusParams, } from "../protocol/index.js"; import { formatForLog } from "../ws-log.js"; +import type { GatewayRequestContext, GatewayRequestHandlers, RespondFn } from "./types.js"; import { assertValidParams } from "./validation.js"; function readWizardStatus(session: WizardSession) { diff --git a/src/gateway/server-node-events.test.ts b/src/gateway/server-node-events.test.ts index 5341d5b094..2b49210d2f 100644 --- a/src/gateway/server-node-events.test.ts +++ b/src/gateway/server-node-events.test.ts @@ -9,9 +9,9 @@ vi.mock("../infra/heartbeat-wake.js", () => ({ import type { CliDeps } from "../cli/deps.js"; import type { HealthSummary } from "../commands/health.js"; -import type { NodeEventContext } from "./server-node-events-types.js"; import { requestHeartbeatNow } from "../infra/heartbeat-wake.js"; import { enqueueSystemEvent } from "../infra/system-events.js"; +import type { NodeEventContext } from "./server-node-events-types.js"; import { handleNodeEvent } from "./server-node-events.js"; const enqueueSystemEventMock = vi.mocked(enqueueSystemEvent); diff --git a/src/gateway/server-node-events.ts b/src/gateway/server-node-events.ts index 360cde40bb..cad2e803c1 100644 --- a/src/gateway/server-node-events.ts +++ b/src/gateway/server-node-events.ts @@ -1,5 +1,4 @@ import { randomUUID } from "node:crypto"; -import type { NodeEvent, NodeEventContext } from "./server-node-events-types.js"; import { normalizeChannelId } from "../channels/plugins/index.js"; import { agentCommand } from "../commands/agent.js"; import { loadConfig } from "../config/config.js"; @@ -8,6 +7,7 @@ import { requestHeartbeatNow } from "../infra/heartbeat-wake.js"; import { enqueueSystemEvent } from "../infra/system-events.js"; import { normalizeMainKey } from "../routing/session-key.js"; import { defaultRuntime } from "../runtime.js"; +import type { NodeEvent, NodeEventContext } from "./server-node-events-types.js"; import { loadSessionEntry, pruneLegacyStoreKeys, diff --git a/src/gateway/server-plugins.ts b/src/gateway/server-plugins.ts index 39d1d4773e..e879310c30 100644 --- a/src/gateway/server-plugins.ts +++ b/src/gateway/server-plugins.ts @@ -1,6 +1,6 @@ import type { loadConfig } from "../config/config.js"; -import type { GatewayRequestHandler } from "./server-methods/types.js"; import { loadOpenClawPlugins } from "../plugins/loader.js"; +import type { GatewayRequestHandler } from "./server-methods/types.js"; export function loadGatewayPlugins(params: { cfg: ReturnType; diff --git a/src/gateway/server-reload-handlers.ts b/src/gateway/server-reload-handlers.ts index 6a2dfd2cb2..c16b2eb399 100644 --- a/src/gateway/server-reload-handlers.ts +++ b/src/gateway/server-reload-handlers.ts @@ -1,12 +1,11 @@ -import type { CliDeps } from "../cli/deps.js"; -import type { loadConfig } from "../config/config.js"; -import type { HeartbeatRunner } from "../infra/heartbeat-runner.js"; -import type { ChannelKind, GatewayReloadPlan } from "./config-reload.js"; import { getActiveEmbeddedRunCount } from "../agents/pi-embedded-runner/runs.js"; import { getTotalPendingReplies } from "../auto-reply/reply/dispatcher-registry.js"; +import type { CliDeps } from "../cli/deps.js"; import { resolveAgentMaxConcurrent, resolveSubagentMaxConcurrent } from "../config/agent-limits.js"; +import type { loadConfig } from "../config/config.js"; import { startGmailWatcher, stopGmailWatcher } from "../hooks/gmail-watcher.js"; import { isTruthyEnvValue } from "../infra/env.js"; +import type { HeartbeatRunner } from "../infra/heartbeat-runner.js"; import { resetDirectoryCache } from "../infra/outbound/target-resolver.js"; import { deferGatewayRestartUntilIdle, @@ -15,6 +14,7 @@ import { } from "../infra/restart.js"; import { setCommandLaneConcurrency, getTotalQueueSize } from "../process/command-queue.js"; import { CommandLane } from "../process/lanes.js"; +import type { ChannelKind, GatewayReloadPlan } from "./config-reload.js"; import { resolveHooksConfig } from "./hooks.js"; import { startBrowserControlServerIfEnabled } from "./server-browser.js"; import { buildGatewayCronService, type GatewayCronState } from "./server-cron.js"; diff --git a/src/gateway/server-restart-sentinel.ts b/src/gateway/server-restart-sentinel.ts index a4b5bc046c..32bff530b6 100644 --- a/src/gateway/server-restart-sentinel.ts +++ b/src/gateway/server-restart-sentinel.ts @@ -1,7 +1,7 @@ -import type { CliDeps } from "../cli/deps.js"; import { resolveSessionAgentId } from "../agents/agent-scope.js"; import { resolveAnnounceTargetFromKey } from "../agents/tools/sessions-send-helpers.js"; import { normalizeChannelId } from "../channels/plugins/index.js"; +import type { CliDeps } from "../cli/deps.js"; import { resolveMainSessionKeyFromConfig } from "../config/sessions.js"; import { deliverOutboundPayloads } from "../infra/outbound/deliver.js"; import { resolveOutboundTarget } from "../infra/outbound/targets.js"; diff --git a/src/gateway/server-runtime-state.ts b/src/gateway/server-runtime-state.ts index d0c8c01e17..f126850c28 100644 --- a/src/gateway/server-runtime-state.ts +++ b/src/gateway/server-runtime-state.ts @@ -1,5 +1,7 @@ import type { Server as HttpServer } from "node:http"; import { WebSocketServer } from "ws"; +import { CANVAS_HOST_PATH } from "../canvas-host/a2ui.js"; +import { type CanvasHostHandler, createCanvasHostHandler } from "../canvas-host/server.js"; import type { CliDeps } from "../cli/deps.js"; import type { createSubsystemLogger } from "../logging/subsystem.js"; import type { PluginRegistry } from "../plugins/registry.js"; @@ -9,11 +11,6 @@ import type { ResolvedGatewayAuth } from "./auth.js"; import type { ChatAbortControllerEntry } from "./chat-abort.js"; import type { ControlUiRootState } from "./control-ui.js"; import type { HooksConfigResolved } from "./hooks.js"; -import type { DedupeEntry } from "./server-shared.js"; -import type { GatewayTlsRuntime } from "./server/tls.js"; -import type { GatewayWsClient } from "./server/ws-types.js"; -import { CANVAS_HOST_PATH } from "../canvas-host/a2ui.js"; -import { type CanvasHostHandler, createCanvasHostHandler } from "../canvas-host/server.js"; import { resolveGatewayListenHosts } from "./net.js"; import { createGatewayBroadcaster, @@ -27,9 +24,12 @@ import { } from "./server-chat.js"; import { MAX_PAYLOAD_BYTES } from "./server-constants.js"; import { attachGatewayUpgradeHandler, createGatewayHttpServer } from "./server-http.js"; +import type { DedupeEntry } from "./server-shared.js"; import { createGatewayHooksRequestHandler } from "./server/hooks.js"; import { listenGatewayHttpServer } from "./server/http-listen.js"; import { createGatewayPluginRequestHandler } from "./server/plugins-http.js"; +import type { GatewayTlsRuntime } from "./server/tls.js"; +import type { GatewayWsClient } from "./server/ws-types.js"; export async function createGatewayRuntimeState(params: { cfg: import("../config/config.js").OpenClawConfig; diff --git a/src/gateway/server-startup-log.ts b/src/gateway/server-startup-log.ts index a62adaf882..cf6d2575c7 100644 --- a/src/gateway/server-startup-log.ts +++ b/src/gateway/server-startup-log.ts @@ -1,7 +1,7 @@ import chalk from "chalk"; -import type { loadConfig } from "../config/config.js"; import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "../agents/defaults.js"; import { resolveConfiguredModelRef } from "../agents/model-selection.js"; +import type { loadConfig } from "../config/config.js"; import { getResolvedLoggerSettings } from "../logging.js"; export function logGatewayStartup(params: { diff --git a/src/gateway/server-startup-memory.ts b/src/gateway/server-startup-memory.ts index 5ead1518e5..d12aba7809 100644 --- a/src/gateway/server-startup-memory.ts +++ b/src/gateway/server-startup-memory.ts @@ -1,5 +1,5 @@ -import type { OpenClawConfig } from "../config/config.js"; import { listAgentIds } from "../agents/agent-scope.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveMemoryBackendConfig } from "../memory/backend-config.js"; import { getMemorySearchManager } from "../memory/index.js"; diff --git a/src/gateway/server-startup.ts b/src/gateway/server-startup.ts index 61e1b30a05..7ebda43ef9 100644 --- a/src/gateway/server-startup.ts +++ b/src/gateway/server-startup.ts @@ -1,6 +1,3 @@ -import type { CliDeps } from "../cli/deps.js"; -import type { loadConfig } from "../config/config.js"; -import type { loadOpenClawPlugins } from "../plugins/loader.js"; import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "../agents/defaults.js"; import { loadModelCatalog } from "../agents/model-catalog.js"; import { @@ -10,6 +7,8 @@ import { } from "../agents/model-selection.js"; import { resolveAgentSessionDirs } from "../agents/session-dirs.js"; import { cleanStaleLockFiles } from "../agents/session-write-lock.js"; +import type { CliDeps } from "../cli/deps.js"; +import type { loadConfig } from "../config/config.js"; import { resolveStateDir } from "../config/paths.js"; import { startGmailWatcher } from "../hooks/gmail-watcher.js"; import { @@ -19,6 +18,7 @@ import { } from "../hooks/internal-hooks.js"; import { loadInternalHooks } from "../hooks/loader.js"; import { isTruthyEnvValue } from "../infra/env.js"; +import type { loadOpenClawPlugins } from "../plugins/loader.js"; import { type PluginServicesHandle, startPluginServices } from "../plugins/services.js"; import { startBrowserControlServerIfEnabled } from "./server-browser.js"; import { diff --git a/src/gateway/server-ws-runtime.ts b/src/gateway/server-ws-runtime.ts index 4fc86ada36..9c14794a58 100644 --- a/src/gateway/server-ws-runtime.ts +++ b/src/gateway/server-ws-runtime.ts @@ -3,8 +3,8 @@ import type { createSubsystemLogger } from "../logging/subsystem.js"; import type { AuthRateLimiter } from "./auth-rate-limit.js"; import type { ResolvedGatewayAuth } from "./auth.js"; import type { GatewayRequestContext, GatewayRequestHandlers } from "./server-methods/types.js"; -import type { GatewayWsClient } from "./server/ws-types.js"; import { attachGatewayWsConnectionHandler } from "./server/ws-connection.js"; +import type { GatewayWsClient } from "./server/ws-types.js"; export function attachGatewayWsHandlers(params: { wss: WebSocketServer; diff --git a/src/gateway/server.agent.gateway-server-agent-b.e2e.test.ts b/src/gateway/server.agent.gateway-server-agent-b.e2e.test.ts index 6e86a03e2f..08c999a8eb 100644 --- a/src/gateway/server.agent.gateway-server-agent-b.e2e.test.ts +++ b/src/gateway/server.agent.gateway-server-agent-b.e2e.test.ts @@ -3,9 +3,9 @@ import os from "node:os"; import path from "node:path"; import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; import { WebSocket } from "ws"; -import type { ChannelPlugin } from "../channels/plugins/types.js"; import { whatsappPlugin } from "../../extensions/whatsapp/src/channel.js"; import { BARE_SESSION_RESET_PROMPT } from "../auto-reply/reply/session-reset-prompt.js"; +import type { ChannelPlugin } from "../channels/plugins/types.js"; import { emitAgentEvent, registerAgentRunContext } from "../infra/agent-events.js"; import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../utils/message-channel.js"; import { setRegistry } from "./server.agent.gateway-server-agent.mocks.js"; diff --git a/src/gateway/server.canvas-auth.e2e.test.ts b/src/gateway/server.canvas-auth.e2e.test.ts index a9d18dcea0..3d0d7c0cd3 100644 --- a/src/gateway/server.canvas-auth.e2e.test.ts +++ b/src/gateway/server.canvas-auth.e2e.test.ts @@ -1,11 +1,11 @@ import { describe, expect, test } from "vitest"; import { WebSocket, WebSocketServer } from "ws"; -import type { CanvasHostHandler } from "../canvas-host/server.js"; -import type { ResolvedGatewayAuth } from "./auth.js"; -import type { GatewayWsClient } from "./server/ws-types.js"; import { A2UI_PATH, CANVAS_HOST_PATH, CANVAS_WS_PATH } from "../canvas-host/a2ui.js"; +import type { CanvasHostHandler } from "../canvas-host/server.js"; import { createAuthRateLimiter } from "./auth-rate-limit.js"; +import type { ResolvedGatewayAuth } from "./auth.js"; import { attachGatewayUpgradeHandler, createGatewayHttpServer } from "./server-http.js"; +import type { GatewayWsClient } from "./server/ws-types.js"; import { withTempConfig } from "./test-temp-config.js"; async function listen(server: ReturnType): Promise<{ diff --git a/src/gateway/server.impl.ts b/src/gateway/server.impl.ts index dea9551c3e..2cfa561e99 100644 --- a/src/gateway/server.impl.ts +++ b/src/gateway/server.impl.ts @@ -1,14 +1,10 @@ import path from "node:path"; -import type { CanvasHostServer } from "../canvas-host/server.js"; -import type { PluginServicesHandle } from "../plugins/services.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { ControlUiRootState } from "./control-ui.js"; -import type { startBrowserControlServerIfEnabled } from "./server-browser.js"; import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js"; import { getActiveEmbeddedRunCount } from "../agents/pi-embedded-runner/runs.js"; import { registerSkillsChangeListener } from "../agents/skills/refresh.js"; import { initSubagentRegistry } from "../agents/subagent-registry.js"; import { getTotalPendingReplies } from "../auto-reply/reply/dispatcher-registry.js"; +import type { CanvasHostServer } from "../canvas-host/server.js"; import { type ChannelId, listChannelPlugins } from "../channels/plugins/index.js"; import { formatCliCommand } from "../cli/command-format.js"; import { createDefaultDeps } from "../cli/deps.js"; @@ -45,13 +41,17 @@ import { startDiagnosticHeartbeat, stopDiagnosticHeartbeat } from "../logging/di import { createSubsystemLogger, runtimeForLogger } from "../logging/subsystem.js"; import { getGlobalHookRunner, runGlobalGatewayStopSafely } from "../plugins/hook-runner-global.js"; import { createEmptyPluginRegistry } from "../plugins/registry.js"; +import type { PluginServicesHandle } from "../plugins/services.js"; import { getTotalQueueSize } from "../process/command-queue.js"; +import type { RuntimeEnv } from "../runtime.js"; import { runOnboardingWizard } from "../wizard/onboarding.js"; import { createAuthRateLimiter, type AuthRateLimiter } from "./auth-rate-limit.js"; import { startChannelHealthMonitor } from "./channel-health-monitor.js"; import { startGatewayConfigReloader } from "./config-reload.js"; +import type { ControlUiRootState } from "./control-ui.js"; import { ExecApprovalManager } from "./exec-approval-manager.js"; import { NodeRegistry } from "./node-registry.js"; +import type { startBrowserControlServerIfEnabled } from "./server-browser.js"; import { createChannelManager } from "./server-channels.js"; import { createAgentEventHandler } from "./server-chat.js"; import { createGatewayCloseHandler } from "./server-close.js"; diff --git a/src/gateway/server.models-voicewake-misc.e2e.test.ts b/src/gateway/server.models-voicewake-misc.e2e.test.ts index a89e925027..896edca232 100644 --- a/src/gateway/server.models-voicewake-misc.e2e.test.ts +++ b/src/gateway/server.models-voicewake-misc.e2e.test.ts @@ -4,8 +4,8 @@ import os from "node:os"; import path from "node:path"; import { afterAll, beforeAll, describe, expect, test } from "vitest"; import { WebSocket } from "ws"; -import type { ChannelOutboundAdapter } from "../channels/plugins/types.js"; import { getChannelPlugin } from "../channels/plugins/index.js"; +import type { ChannelOutboundAdapter } from "../channels/plugins/types.js"; import { resolveCanvasHostUrl } from "../infra/canvas-host-url.js"; import { GatewayLockError } from "../infra/gateway-lock.js"; import { getActivePluginRegistry, setActivePluginRegistry } from "../plugins/runtime.js"; diff --git a/src/gateway/server.roles-allowlist-update.e2e.test.ts b/src/gateway/server.roles-allowlist-update.e2e.test.ts index a1b0c599d0..99f40a8c0e 100644 --- a/src/gateway/server.roles-allowlist-update.e2e.test.ts +++ b/src/gateway/server.roles-allowlist-update.e2e.test.ts @@ -3,9 +3,9 @@ import os from "node:os"; import path from "node:path"; import { describe, expect, test, vi } from "vitest"; import { WebSocket } from "ws"; -import type { GatewayClient } from "./client.js"; import { CONFIG_PATH } from "../config/config.js"; import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../utils/message-channel.js"; +import type { GatewayClient } from "./client.js"; vi.mock("../infra/update-runner.js", () => ({ runGatewayUpdate: vi.fn(async () => ({ diff --git a/src/gateway/server/health-state.ts b/src/gateway/server/health-state.ts index 9d38799b37..3e2ef9522d 100644 --- a/src/gateway/server/health-state.ts +++ b/src/gateway/server/health-state.ts @@ -1,4 +1,3 @@ -import type { Snapshot } from "../protocol/index.js"; import { resolveDefaultAgentId } from "../../agents/agent-scope.js"; import { getHealthSnapshot, type HealthSummary } from "../../commands/health.js"; import { CONFIG_PATH, STATE_DIR, loadConfig } from "../../config/config.js"; @@ -6,6 +5,7 @@ import { resolveMainSessionKey } from "../../config/sessions.js"; import { listSystemPresence } from "../../infra/system-presence.js"; import { normalizeMainKey } from "../../routing/session-key.js"; import { resolveGatewayAuth } from "../auth.js"; +import type { Snapshot } from "../protocol/index.js"; let presenceVersion = 1; let healthVersion = 1; diff --git a/src/gateway/server/hooks.ts b/src/gateway/server/hooks.ts index 28619103cc..a20a748ef5 100644 --- a/src/gateway/server/hooks.ts +++ b/src/gateway/server/hooks.ts @@ -1,13 +1,13 @@ import { randomUUID } from "node:crypto"; import type { CliDeps } from "../../cli/deps.js"; -import type { CronJob } from "../../cron/types.js"; -import type { createSubsystemLogger } from "../../logging/subsystem.js"; -import type { HookMessageChannel, HooksConfigResolved } from "../hooks.js"; import { loadConfig } from "../../config/config.js"; import { resolveMainSessionKeyFromConfig } from "../../config/sessions.js"; import { runCronIsolatedAgentTurn } from "../../cron/isolated-agent.js"; +import type { CronJob } from "../../cron/types.js"; import { requestHeartbeatNow } from "../../infra/heartbeat-wake.js"; import { enqueueSystemEvent } from "../../infra/system-events.js"; +import type { createSubsystemLogger } from "../../logging/subsystem.js"; +import type { HookMessageChannel, HooksConfigResolved } from "../hooks.js"; import { createHooksRequestHandler } from "../server-http.js"; type SubsystemLogger = ReturnType; diff --git a/src/gateway/server/ws-connection.ts b/src/gateway/server/ws-connection.ts index d1483ee076..c02dc337b0 100644 --- a/src/gateway/server/ws-connection.ts +++ b/src/gateway/server/ws-connection.ts @@ -1,21 +1,21 @@ -import type { WebSocket, WebSocketServer } from "ws"; import { randomUUID } from "node:crypto"; -import type { createSubsystemLogger } from "../../logging/subsystem.js"; -import type { AuthRateLimiter } from "../auth-rate-limit.js"; -import type { ResolvedGatewayAuth } from "../auth.js"; -import type { GatewayRequestContext, GatewayRequestHandlers } from "../server-methods/types.js"; -import type { GatewayWsClient } from "./ws-types.js"; +import type { WebSocket, WebSocketServer } from "ws"; import { resolveCanvasHostUrl } from "../../infra/canvas-host-url.js"; import { removeRemoteNodeInfo } from "../../infra/skills-remote.js"; import { listSystemPresence, upsertPresence } from "../../infra/system-presence.js"; +import type { createSubsystemLogger } from "../../logging/subsystem.js"; import { truncateUtf16Safe } from "../../utils.js"; import { isWebchatClient } from "../../utils/message-channel.js"; +import type { AuthRateLimiter } from "../auth-rate-limit.js"; +import type { ResolvedGatewayAuth } from "../auth.js"; import { isLoopbackAddress } from "../net.js"; import { getHandshakeTimeoutMs } from "../server-constants.js"; +import type { GatewayRequestContext, GatewayRequestHandlers } from "../server-methods/types.js"; import { formatError } from "../server-utils.js"; import { logWs } from "../ws-log.js"; import { getHealthVersion, getPresenceVersion, incrementPresenceVersion } from "./health-state.js"; import { attachGatewayWsMessageHandler } from "./ws-connection/message-handler.js"; +import type { GatewayWsClient } from "./ws-types.js"; type SubsystemLogger = ReturnType; diff --git a/src/gateway/server/ws-connection/auth-messages.ts b/src/gateway/server/ws-connection/auth-messages.ts index c4900a6eae..4f6e993a3c 100644 --- a/src/gateway/server/ws-connection/auth-messages.ts +++ b/src/gateway/server/ws-connection/auth-messages.ts @@ -1,5 +1,5 @@ -import type { ResolvedGatewayAuth } from "../../auth.js"; import { isGatewayCliClient, isWebchatClient } from "../../../utils/message-channel.js"; +import type { ResolvedGatewayAuth } from "../../auth.js"; import { GATEWAY_CLIENT_IDS } from "../../protocol/client-info.js"; export type AuthProvidedKind = "token" | "password" | "none"; diff --git a/src/gateway/server/ws-connection/message-handler.ts b/src/gateway/server/ws-connection/message-handler.ts index a49640652e..c265b09f88 100644 --- a/src/gateway/server/ws-connection/message-handler.ts +++ b/src/gateway/server/ws-connection/message-handler.ts @@ -1,10 +1,6 @@ import type { IncomingMessage } from "node:http"; -import type { WebSocket } from "ws"; import os from "node:os"; -import type { createSubsystemLogger } from "../../../logging/subsystem.js"; -import type { GatewayAuthResult, ResolvedGatewayAuth } from "../../auth.js"; -import type { GatewayRequestContext, GatewayRequestHandlers } from "../../server-methods/types.js"; -import type { GatewayWsClient } from "../ws-types.js"; +import type { WebSocket } from "ws"; import { loadConfig } from "../../../config/config.js"; import { deriveDeviceIdFromPublicKey, @@ -24,12 +20,14 @@ import { recordRemoteNodeInfo, refreshRemoteNodeBins } from "../../../infra/skil import { upsertPresence } from "../../../infra/system-presence.js"; import { loadVoiceWakeConfig } from "../../../infra/voicewake.js"; import { rawDataToString } from "../../../infra/ws.js"; +import type { createSubsystemLogger } from "../../../logging/subsystem.js"; import { isGatewayCliClient, isWebchatClient } from "../../../utils/message-channel.js"; import { AUTH_RATE_LIMIT_SCOPE_DEVICE_TOKEN, AUTH_RATE_LIMIT_SCOPE_SHARED_SECRET, type AuthRateLimiter, } from "../../auth-rate-limit.js"; +import type { GatewayAuthResult, ResolvedGatewayAuth } from "../../auth.js"; import { authorizeGatewayConnect, isLocalDirectRequest } from "../../auth.js"; import { buildDeviceAuthPayload } from "../../device-auth.js"; import { isLoopbackAddress, isTrustedProxyAddress, resolveGatewayClientIp } from "../../net.js"; @@ -49,6 +47,7 @@ import { } from "../../protocol/index.js"; import { MAX_BUFFERED_BYTES, MAX_PAYLOAD_BYTES, TICK_INTERVAL_MS } from "../../server-constants.js"; import { handleGatewayRequest } from "../../server-methods.js"; +import type { GatewayRequestContext, GatewayRequestHandlers } from "../../server-methods/types.js"; import { formatError } from "../../server-utils.js"; import { formatForLog, logWs } from "../../ws-log.js"; import { truncateCloseReason } from "../close-reason.js"; @@ -59,6 +58,7 @@ import { incrementPresenceVersion, refreshGatewayHealthSnapshot, } from "../health-state.js"; +import type { GatewayWsClient } from "../ws-types.js"; import { formatGatewayAuthFailureMessage, type AuthProvidedKind } from "./auth-messages.js"; type SubsystemLogger = ReturnType; diff --git a/src/gateway/session-utils.fs.ts b/src/gateway/session-utils.fs.ts index c3edd8cf0a..34c24c710a 100644 --- a/src/gateway/session-utils.fs.ts +++ b/src/gateway/session-utils.fs.ts @@ -1,7 +1,6 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; -import type { SessionPreviewItem } from "./session-utils.types.js"; import { resolveSessionFilePath, resolveSessionTranscriptPath, @@ -11,6 +10,7 @@ import { resolveRequiredHomeDir } from "../infra/home-dir.js"; import { hasInterSessionUserProvenance } from "../sessions/input-provenance.js"; import { extractToolCallNames, hasToolCall } from "../utils/transcript-tools.js"; import { stripEnvelope } from "./chat-sanitize.js"; +import type { SessionPreviewItem } from "./session-utils.types.js"; type SessionTitleFields = { firstUserMessage: string | null; diff --git a/src/gateway/session-utils.ts b/src/gateway/session-utils.ts index 29279feb68..d0198fc26c 100644 --- a/src/gateway/session-utils.ts +++ b/src/gateway/session-utils.ts @@ -1,11 +1,5 @@ import fs from "node:fs"; import path from "node:path"; -import type { - GatewayAgentRow, - GatewaySessionRow, - GatewaySessionsDefaults, - SessionsListResult, -} from "./session-utils.types.js"; import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js"; import { lookupContextTokens } from "../agents/context.js"; import { DEFAULT_CONTEXT_TOKENS, DEFAULT_MODEL, DEFAULT_PROVIDER } from "../agents/defaults.js"; @@ -34,6 +28,12 @@ import { import { isCronRunSessionKey } from "../sessions/session-key-utils.js"; import { normalizeSessionDeliveryFields } from "../utils/delivery-context.js"; import { readSessionTitleFieldsFromTranscript } from "./session-utils.fs.js"; +import type { + GatewayAgentRow, + GatewaySessionRow, + GatewaySessionsDefaults, + SessionsListResult, +} from "./session-utils.types.js"; export { archiveFileOnDisk, diff --git a/src/gateway/sessions-patch.ts b/src/gateway/sessions-patch.ts index 5e1800c0f4..2d98bbdee3 100644 --- a/src/gateway/sessions-patch.ts +++ b/src/gateway/sessions-patch.ts @@ -1,8 +1,6 @@ import { randomUUID } from "node:crypto"; -import type { ModelCatalogEntry } from "../agents/model-catalog.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { SessionEntry } from "../config/sessions.js"; import { resolveDefaultAgentId } from "../agents/agent-scope.js"; +import type { ModelCatalogEntry } from "../agents/model-catalog.js"; import { resolveAllowedModelRef, resolveDefaultModelForAgent } from "../agents/model-selection.js"; import { normalizeGroupActivation } from "../auto-reply/group-activation.js"; import { @@ -14,6 +12,8 @@ import { normalizeUsageDisplay, supportsXHighThinking, } from "../auto-reply/thinking.js"; +import type { OpenClawConfig } from "../config/config.js"; +import type { SessionEntry } from "../config/sessions.js"; import { isSubagentSessionKey, normalizeAgentId, diff --git a/src/gateway/test-helpers.mocks.ts b/src/gateway/test-helpers.mocks.ts index 970be85ec8..5ebdc7859e 100644 --- a/src/gateway/test-helpers.mocks.ts +++ b/src/gateway/test-helpers.mocks.ts @@ -5,11 +5,11 @@ import os from "node:os"; import path from "node:path"; import { Mock, vi } from "vitest"; import type { ChannelPlugin, ChannelOutboundAdapter } from "../channels/plugins/types.js"; +import { applyPluginAutoEnable } from "../config/plugin-auto-enable.js"; import type { AgentBinding } from "../config/types.agents.js"; import type { HooksConfig } from "../config/types.hooks.js"; import type { TailscaleWhoisIdentity } from "../infra/tailscale.js"; import type { PluginRegistry } from "../plugins/registry.js"; -import { applyPluginAutoEnable } from "../config/plugin-auto-enable.js"; import { setActivePluginRegistry } from "../plugins/runtime.js"; import { DEFAULT_ACCOUNT_ID } from "../routing/session-key.js"; diff --git a/src/gateway/test-helpers.server.ts b/src/gateway/test-helpers.server.ts index 984b31237a..506aed49c0 100644 --- a/src/gateway/test-helpers.server.ts +++ b/src/gateway/test-helpers.server.ts @@ -4,7 +4,6 @@ import os from "node:os"; import path from "node:path"; import { afterAll, afterEach, beforeAll, beforeEach, expect, vi } from "vitest"; import { WebSocket } from "ws"; -import type { GatewayServerOptions } from "./server.js"; import { resolveMainSessionKeyFromConfig, type SessionEntry } from "../config/sessions.js"; import { resetAgentRunContextForTest } from "../infra/agent-events.js"; import { @@ -21,6 +20,7 @@ import { getDeterministicFreePortBlock } from "../test-utils/ports.js"; import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../utils/message-channel.js"; import { buildDeviceAuthPayload } from "./device-auth.js"; import { PROTOCOL_VERSION } from "./protocol/index.js"; +import type { GatewayServerOptions } from "./server.js"; import { agentCommand, cronIsolatedRun, diff --git a/src/gateway/tools-invoke-http.test.ts b/src/gateway/tools-invoke-http.test.ts index 2725b0d190..aa5f9a637e 100644 --- a/src/gateway/tools-invoke-http.test.ts +++ b/src/gateway/tools-invoke-http.test.ts @@ -1,5 +1,5 @@ -import type { AddressInfo } from "node:net"; import { createServer, type IncomingMessage, type ServerResponse } from "node:http"; +import type { AddressInfo } from "node:net"; import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; const TEST_GATEWAY_TOKEN = "test-gateway-token-1234567890"; diff --git a/src/gateway/tools-invoke-http.ts b/src/gateway/tools-invoke-http.ts index 91a03f3f32..bd2c78a6dc 100644 --- a/src/gateway/tools-invoke-http.ts +++ b/src/gateway/tools-invoke-http.ts @@ -1,5 +1,4 @@ import type { IncomingMessage, ServerResponse } from "node:http"; -import type { AuthRateLimiter } from "./auth-rate-limit.js"; import { createOpenClawTools } from "../agents/openclaw-tools.js"; import { resolveEffectiveToolPolicy, @@ -24,6 +23,7 @@ import { getPluginToolMeta } from "../plugins/tools.js"; import { isSubagentSessionKey } from "../routing/session-key.js"; import { DEFAULT_GATEWAY_HTTP_TOOL_DENY } from "../security/dangerous-tools.js"; import { normalizeMessageChannel } from "../utils/message-channel.js"; +import type { AuthRateLimiter } from "./auth-rate-limit.js"; import { authorizeGatewayConnect, type ResolvedGatewayAuth } from "./auth.js"; import { readJsonBodyOrError, diff --git a/src/hooks/bundled/boot-md/handler.ts b/src/hooks/bundled/boot-md/handler.ts index 4084d17987..6d41a144b4 100644 --- a/src/hooks/bundled/boot-md/handler.ts +++ b/src/hooks/bundled/boot-md/handler.ts @@ -1,8 +1,8 @@ import type { CliDeps } from "../../../cli/deps.js"; -import type { OpenClawConfig } from "../../../config/config.js"; -import type { HookHandler } from "../../hooks.js"; import { createDefaultDeps } from "../../../cli/deps.js"; +import type { OpenClawConfig } from "../../../config/config.js"; import { runBootOnce } from "../../../gateway/boot.js"; +import type { HookHandler } from "../../hooks.js"; type BootHookContext = { cfg?: OpenClawConfig; diff --git a/src/hooks/bundled/bootstrap-extra-files/handler.test.ts b/src/hooks/bundled/bootstrap-extra-files/handler.test.ts index 85d39a1d64..f810e00959 100644 --- a/src/hooks/bundled/bootstrap-extra-files/handler.test.ts +++ b/src/hooks/bundled/bootstrap-extra-files/handler.test.ts @@ -2,8 +2,8 @@ import fs from "node:fs/promises"; import path from "node:path"; import { describe, expect, it } from "vitest"; import type { OpenClawConfig } from "../../../config/config.js"; -import type { AgentBootstrapHookContext } from "../../hooks.js"; import { makeTempWorkspace, writeWorkspaceFile } from "../../../test-helpers/workspace.js"; +import type { AgentBootstrapHookContext } from "../../hooks.js"; import { createHookEvent } from "../../hooks.js"; import handler from "./handler.js"; diff --git a/src/hooks/bundled/command-logger/handler.ts b/src/hooks/bundled/command-logger/handler.ts index 0731296b0f..b86afb7fb5 100644 --- a/src/hooks/bundled/command-logger/handler.ts +++ b/src/hooks/bundled/command-logger/handler.ts @@ -26,8 +26,8 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; -import type { HookHandler } from "../../hooks.js"; import { resolveStateDir } from "../../../config/paths.js"; +import type { HookHandler } from "../../hooks.js"; /** * Log all command events to a file diff --git a/src/hooks/bundled/session-memory/handler.test.ts b/src/hooks/bundled/session-memory/handler.test.ts index fcc895f89b..5a611162c7 100644 --- a/src/hooks/bundled/session-memory/handler.test.ts +++ b/src/hooks/bundled/session-memory/handler.test.ts @@ -2,8 +2,8 @@ import fs from "node:fs/promises"; import path from "node:path"; import { beforeAll, describe, expect, it, vi } from "vitest"; import type { OpenClawConfig } from "../../../config/config.js"; -import type { HookHandler } from "../../hooks.js"; import { makeTempWorkspace, writeWorkspaceFile } from "../../../test-helpers/workspace.js"; +import type { HookHandler } from "../../hooks.js"; import { createHookEvent } from "../../hooks.js"; // Avoid calling the embedded Pi agent (global command lane); keep this unit test deterministic. diff --git a/src/hooks/bundled/session-memory/handler.ts b/src/hooks/bundled/session-memory/handler.ts index 540aab243f..f35938124c 100644 --- a/src/hooks/bundled/session-memory/handler.ts +++ b/src/hooks/bundled/session-memory/handler.ts @@ -8,14 +8,14 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; -import type { OpenClawConfig } from "../../../config/config.js"; -import type { HookHandler } from "../../hooks.js"; import { resolveAgentWorkspaceDir } from "../../../agents/agent-scope.js"; +import type { OpenClawConfig } from "../../../config/config.js"; import { resolveStateDir } from "../../../config/paths.js"; import { createSubsystemLogger } from "../../../logging/subsystem.js"; import { resolveAgentIdFromSessionKey } from "../../../routing/session-key.js"; import { hasInterSessionUserProvenance } from "../../../sessions/input-provenance.js"; import { resolveHookConfig } from "../../config.js"; +import type { HookHandler } from "../../hooks.js"; import { generateSlugViaLLM } from "../../llm-slug-generator.js"; const log = createSubsystemLogger("hooks/session-memory"); diff --git a/src/hooks/config.ts b/src/hooks/config.ts index df02802740..0a7aa89fef 100644 --- a/src/hooks/config.ts +++ b/src/hooks/config.ts @@ -1,5 +1,4 @@ import type { OpenClawConfig, HookConfig } from "../config/config.js"; -import type { HookEligibilityContext, HookEntry } from "./types.js"; import { evaluateRuntimeRequires, hasBinary, @@ -8,6 +7,7 @@ import { resolveRuntimePlatform, } from "../shared/config-eval.js"; import { resolveHookKey } from "./frontmatter.js"; +import type { HookEligibilityContext, HookEntry } from "./types.js"; const DEFAULT_CONFIG_VALUES: Record = { "browser.enabled": true, diff --git a/src/hooks/frontmatter.ts b/src/hooks/frontmatter.ts index de9e49c723..aa9e75537d 100644 --- a/src/hooks/frontmatter.ts +++ b/src/hooks/frontmatter.ts @@ -1,10 +1,3 @@ -import type { - OpenClawHookMetadata, - HookEntry, - HookInstallSpec, - HookInvocationPolicy, - ParsedHookFrontmatter, -} from "./types.js"; import { parseFrontmatterBlock } from "../markdown/frontmatter.js"; import { getFrontmatterString, @@ -16,6 +9,13 @@ import { resolveOpenClawManifestOs, resolveOpenClawManifestRequires, } from "../shared/frontmatter.js"; +import type { + OpenClawHookMetadata, + HookEntry, + HookInstallSpec, + HookInvocationPolicy, + ParsedHookFrontmatter, +} from "./types.js"; export function parseFrontmatter(content: string): ParsedHookFrontmatter { return parseFrontmatterBlock(content); diff --git a/src/hooks/gmail-watcher.ts b/src/hooks/gmail-watcher.ts index 16512e3550..254b8057b9 100644 --- a/src/hooks/gmail-watcher.ts +++ b/src/hooks/gmail-watcher.ts @@ -6,8 +6,8 @@ */ import { type ChildProcess, spawn } from "node:child_process"; -import type { OpenClawConfig } from "../config/config.js"; import { hasBinary } from "../agents/skills.js"; +import type { OpenClawConfig } from "../config/config.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { runCommandWithTimeout } from "../process/exec.js"; import { ensureTailscaleEndpoint } from "./gmail-setup-utils.js"; diff --git a/src/hooks/hooks-status.ts b/src/hooks/hooks-status.ts index af7cacd5a0..2b6ca8eaf3 100644 --- a/src/hooks/hooks-status.ts +++ b/src/hooks/hooks-status.ts @@ -1,10 +1,10 @@ import path from "node:path"; import type { OpenClawConfig } from "../config/config.js"; -import type { RequirementConfigCheck, Requirements } from "../shared/requirements.js"; -import type { HookEligibilityContext, HookEntry, HookInstallSpec } from "./types.js"; import { evaluateEntryMetadataRequirements } from "../shared/entry-status.js"; +import type { RequirementConfigCheck, Requirements } from "../shared/requirements.js"; import { CONFIG_DIR } from "../utils.js"; import { hasBinary, isConfigPathTruthy, resolveHookConfig } from "./config.js"; +import type { HookEligibilityContext, HookEntry, HookInstallSpec } from "./types.js"; import { loadWorkspaceHookEntries } from "./workspace.js"; export type HookStatusConfigCheck = RequirementConfigCheck; diff --git a/src/hooks/llm-slug-generator.ts b/src/hooks/llm-slug-generator.ts index 67fdfe4c83..b7e1f5ec31 100644 --- a/src/hooks/llm-slug-generator.ts +++ b/src/hooks/llm-slug-generator.ts @@ -5,13 +5,13 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; -import type { OpenClawConfig } from "../config/config.js"; import { resolveDefaultAgentId, resolveAgentWorkspaceDir, resolveAgentDir, } from "../agents/agent-scope.js"; import { runEmbeddedPiAgent } from "../agents/pi-embedded.js"; +import type { OpenClawConfig } from "../config/config.js"; /** * Generate a short 1-2 word filename slug from session content using LLM diff --git a/src/hooks/loader.ts b/src/hooks/loader.ts index 750904f76d..391fdc12b6 100644 --- a/src/hooks/loader.ts +++ b/src/hooks/loader.ts @@ -8,10 +8,10 @@ import path from "node:path"; import { pathToFileURL } from "node:url"; import type { OpenClawConfig } from "../config/config.js"; -import type { InternalHookHandler } from "./internal-hooks.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { resolveHookConfig } from "./config.js"; import { shouldIncludeHook } from "./config.js"; +import type { InternalHookHandler } from "./internal-hooks.js"; import { registerInternalHook } from "./internal-hooks.js"; import { loadWorkspaceHookEntries } from "./workspace.js"; diff --git a/src/hooks/plugin-hooks.ts b/src/hooks/plugin-hooks.ts index faf34323b5..f7da685fb9 100644 --- a/src/hooks/plugin-hooks.ts +++ b/src/hooks/plugin-hooks.ts @@ -1,9 +1,9 @@ import path from "node:path"; import { pathToFileURL } from "node:url"; import type { OpenClawPluginApi } from "../plugins/types.js"; +import { shouldIncludeHook } from "./config.js"; import type { InternalHookHandler } from "./internal-hooks.js"; import type { HookEntry } from "./types.js"; -import { shouldIncludeHook } from "./config.js"; import { loadHookEntriesFromDir } from "./workspace.js"; export type PluginHookLoadResult = { diff --git a/src/hooks/workspace.ts b/src/hooks/workspace.ts index 0156834a39..698ba3544a 100644 --- a/src/hooks/workspace.ts +++ b/src/hooks/workspace.ts @@ -1,15 +1,7 @@ import fs from "node:fs"; import path from "node:path"; -import type { OpenClawConfig } from "../config/config.js"; -import type { - Hook, - HookEligibilityContext, - HookEntry, - HookSnapshot, - HookSource, - ParsedHookFrontmatter, -} from "./types.js"; import { MANIFEST_KEY } from "../compat/legacy-names.js"; +import type { OpenClawConfig } from "../config/config.js"; import { CONFIG_DIR, resolveUserPath } from "../utils.js"; import { resolveBundledHooksDir } from "./bundled-dir.js"; import { shouldIncludeHook } from "./config.js"; @@ -18,6 +10,14 @@ import { resolveOpenClawMetadata, resolveHookInvocationPolicy, } from "./frontmatter.js"; +import type { + Hook, + HookEligibilityContext, + HookEntry, + HookSnapshot, + HookSource, + ParsedHookFrontmatter, +} from "./types.js"; type HookPackageManifest = { name?: string; diff --git a/src/imessage/accounts.ts b/src/imessage/accounts.ts index cfaee974a8..764c1dd39e 100644 --- a/src/imessage/accounts.ts +++ b/src/imessage/accounts.ts @@ -1,6 +1,6 @@ +import { createAccountListHelpers } from "../channels/plugins/account-helpers.js"; import type { OpenClawConfig } from "../config/config.js"; import type { IMessageAccountConfig } from "../config/types.js"; -import { createAccountListHelpers } from "../channels/plugins/account-helpers.js"; import { normalizeAccountId } from "../routing/session-key.js"; export type ResolvedIMessageAccount = { diff --git a/src/imessage/monitor.gating.test.ts b/src/imessage/monitor.gating.test.ts index a1568d9533..8180a40c89 100644 --- a/src/imessage/monitor.gating.test.ts +++ b/src/imessage/monitor.gating.test.ts @@ -1,11 +1,11 @@ import { describe, expect, it } from "vitest"; import type { OpenClawConfig } from "../config/config.js"; -import type { IMessagePayload } from "./monitor/types.js"; import { buildIMessageInboundContext, resolveIMessageInboundDecision, } from "./monitor/inbound-processing.js"; import { parseIMessageNotification } from "./monitor/parse-notification.js"; +import type { IMessagePayload } from "./monitor/types.js"; function baseCfg(): OpenClawConfig { return { diff --git a/src/imessage/monitor/deliver.ts b/src/imessage/monitor/deliver.ts index b39d68a6be..f929f32c93 100644 --- a/src/imessage/monitor/deliver.ts +++ b/src/imessage/monitor/deliver.ts @@ -1,10 +1,10 @@ -import type { ReplyPayload } from "../../auto-reply/types.js"; -import type { RuntimeEnv } from "../../runtime.js"; -import type { createIMessageRpcClient } from "../client.js"; import { chunkTextWithMode, resolveChunkMode } from "../../auto-reply/chunk.js"; +import type { ReplyPayload } from "../../auto-reply/types.js"; import { loadConfig } from "../../config/config.js"; import { resolveMarkdownTableMode } from "../../config/markdown-tables.js"; import { convertMarkdownTables } from "../../markdown/tables.js"; +import type { RuntimeEnv } from "../../runtime.js"; +import type { createIMessageRpcClient } from "../client.js"; import { sendMessageIMessage } from "../send.js"; type SentMessageCache = { diff --git a/src/imessage/monitor/inbound-processing.ts b/src/imessage/monitor/inbound-processing.ts index df8549c073..8ed2bbb51e 100644 --- a/src/imessage/monitor/inbound-processing.ts +++ b/src/imessage/monitor/inbound-processing.ts @@ -1,5 +1,3 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { MonitorIMessageOpts, IMessagePayload } from "./types.js"; import { hasControlCommand } from "../../auto-reply/command-detection.js"; import { formatInboundEnvelope, @@ -16,6 +14,7 @@ import { finalizeInboundContext } from "../../auto-reply/reply/inbound-context.j import { buildMentionRegexes, matchesMentionPatterns } from "../../auto-reply/reply/mentions.js"; import { resolveControlCommandGate } from "../../channels/command-gating.js"; import { logInboundDrop } from "../../channels/logging.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { resolveChannelGroupPolicy, resolveChannelGroupRequireMention, @@ -27,6 +26,7 @@ import { isAllowedIMessageSender, normalizeIMessageHandle, } from "../targets.js"; +import type { MonitorIMessageOpts, IMessagePayload } from "./types.js"; type IMessageReplyContext = { id?: string; diff --git a/src/imessage/monitor/monitor-provider.ts b/src/imessage/monitor/monitor-provider.ts index bf7dc90681..06ba9d1820 100644 --- a/src/imessage/monitor/monitor-provider.ts +++ b/src/imessage/monitor/monitor-provider.ts @@ -1,5 +1,4 @@ import fs from "node:fs/promises"; -import type { IMessagePayload, MonitorIMessageOpts } from "./types.js"; import { resolveHumanDelayConfig } from "../../agents/identity.js"; import { resolveTextChunkLimit } from "../../auto-reply/chunk.js"; import { hasControlCommand } from "../../auto-reply/command-detection.js"; @@ -40,6 +39,7 @@ import { } from "./inbound-processing.js"; import { parseIMessageNotification } from "./parse-notification.js"; import { normalizeAllowList, resolveRuntime } from "./runtime.js"; +import type { IMessagePayload, MonitorIMessageOpts } from "./types.js"; /** * Try to detect remote host from an SSH wrapper script like: diff --git a/src/imessage/monitor/runtime.ts b/src/imessage/monitor/runtime.ts index 004fc2fdd9..ac2916b56f 100644 --- a/src/imessage/monitor/runtime.ts +++ b/src/imessage/monitor/runtime.ts @@ -1,5 +1,5 @@ -import type { MonitorIMessageOpts } from "./types.js"; import { createNonExitingRuntime, type RuntimeEnv } from "../../runtime.js"; +import type { MonitorIMessageOpts } from "./types.js"; export function resolveRuntime(opts: MonitorIMessageOpts): RuntimeEnv { return opts.runtime ?? createNonExitingRuntime(); diff --git a/src/imessage/probe.ts b/src/imessage/probe.ts index 27b228e8d5..9c33a471ab 100644 --- a/src/imessage/probe.ts +++ b/src/imessage/probe.ts @@ -1,8 +1,8 @@ import type { BaseProbeResult } from "../channels/plugins/types.js"; -import type { RuntimeEnv } from "../runtime.js"; import { detectBinary } from "../commands/onboard-helpers.js"; import { loadConfig } from "../config/config.js"; import { runCommandWithTimeout } from "../process/exec.js"; +import type { RuntimeEnv } from "../runtime.js"; import { createIMessageRpcClient } from "./client.js"; import { DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS } from "./constants.js"; diff --git a/src/infra/archive.test.ts b/src/infra/archive.test.ts index 825f215db1..fec09bf092 100644 --- a/src/infra/archive.test.ts +++ b/src/infra/archive.test.ts @@ -1,7 +1,7 @@ -import JSZip from "jszip"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import JSZip from "jszip"; import * as tar from "tar"; import { afterAll, beforeAll, describe, expect, it } from "vitest"; import { extractArchive, resolveArchiveKind, resolvePackedRootDir } from "./archive.js"; diff --git a/src/infra/archive.ts b/src/infra/archive.ts index 260c202e57..f7d0843732 100644 --- a/src/infra/archive.ts +++ b/src/infra/archive.ts @@ -1,9 +1,9 @@ -import JSZip from "jszip"; import { createWriteStream } from "node:fs"; import fs from "node:fs/promises"; import path from "node:path"; import { Readable, Transform } from "node:stream"; import { pipeline } from "node:stream/promises"; +import JSZip from "jszip"; import * as tar from "tar"; import { resolveSafeBaseDir } from "./path-safety.js"; diff --git a/src/infra/channel-summary.ts b/src/infra/channel-summary.ts index c0dd13ab20..095f717c41 100644 --- a/src/infra/channel-summary.ts +++ b/src/infra/channel-summary.ts @@ -1,9 +1,9 @@ -import type { ChannelAccountSnapshot, ChannelPlugin } from "../channels/plugins/types.js"; import { buildChannelAccountSnapshot, formatChannelAllowFrom, } from "../channels/account-summary.js"; import { listChannelPlugins } from "../channels/plugins/index.js"; +import type { ChannelAccountSnapshot, ChannelPlugin } from "../channels/plugins/types.js"; import { type OpenClawConfig, loadConfig } from "../config/config.js"; import { DEFAULT_ACCOUNT_ID } from "../routing/session-key.js"; import { theme } from "../terminal/theme.js"; diff --git a/src/infra/channels-status-issues.ts b/src/infra/channels-status-issues.ts index b5e5a610b0..6ec5d19672 100644 --- a/src/infra/channels-status-issues.ts +++ b/src/infra/channels-status-issues.ts @@ -1,5 +1,5 @@ -import type { ChannelAccountSnapshot, ChannelStatusIssue } from "../channels/plugins/types.js"; import { listChannelPlugins } from "../channels/plugins/index.js"; +import type { ChannelAccountSnapshot, ChannelStatusIssue } from "../channels/plugins/types.js"; export function collectChannelStatusIssues(payload: Record): ChannelStatusIssue[] { const issues: ChannelStatusIssue[] = []; diff --git a/src/infra/dotenv.ts b/src/infra/dotenv.ts index e6474b4074..64e55e858f 100644 --- a/src/infra/dotenv.ts +++ b/src/infra/dotenv.ts @@ -1,6 +1,6 @@ -import dotenv from "dotenv"; import fs from "node:fs"; import path from "node:path"; +import dotenv from "dotenv"; import { resolveConfigDir } from "../utils.js"; export function loadDotEnv(opts?: { quiet?: boolean }) { diff --git a/src/infra/exec-approval-forwarder.ts b/src/infra/exec-approval-forwarder.ts index 7db8737070..b703f59592 100644 --- a/src/infra/exec-approval-forwarder.ts +++ b/src/infra/exec-approval-forwarder.ts @@ -1,18 +1,18 @@ import type { OpenClawConfig } from "../config/config.js"; +import { loadConfig } from "../config/config.js"; +import { loadSessionStore, resolveStorePath } from "../config/sessions.js"; import type { ExecApprovalForwardingConfig, ExecApprovalForwardTarget, } from "../config/types.approvals.js"; +import { createSubsystemLogger } from "../logging/subsystem.js"; +import { parseAgentSessionKey } from "../routing/session-key.js"; +import { isDeliverableMessageChannel, normalizeMessageChannel } from "../utils/message-channel.js"; import type { ExecApprovalDecision, ExecApprovalRequest, ExecApprovalResolved, } from "./exec-approvals.js"; -import { loadConfig } from "../config/config.js"; -import { loadSessionStore, resolveStorePath } from "../config/sessions.js"; -import { createSubsystemLogger } from "../logging/subsystem.js"; -import { parseAgentSessionKey } from "../routing/session-key.js"; -import { isDeliverableMessageChannel, normalizeMessageChannel } from "../utils/message-channel.js"; import { deliverOutboundPayloads } from "./outbound/deliver.js"; import { resolveSessionDeliveryTarget } from "./outbound/targets.js"; diff --git a/src/infra/exec-approvals-allowlist.ts b/src/infra/exec-approvals-allowlist.ts index 1d7b52018e..deda16e444 100644 --- a/src/infra/exec-approvals-allowlist.ts +++ b/src/infra/exec-approvals-allowlist.ts @@ -1,6 +1,5 @@ import fs from "node:fs"; import path from "node:path"; -import type { ExecAllowlistEntry } from "./exec-approvals.js"; import { DEFAULT_SAFE_BINS, analyzeShellCommand, @@ -12,6 +11,7 @@ import { type CommandResolution, type ExecCommandSegment, } from "./exec-approvals-analysis.js"; +import type { ExecAllowlistEntry } from "./exec-approvals.js"; function isPathLikeToken(value: string): boolean { const trimmed = value.trim(); diff --git a/src/infra/exec-approvals-analysis.ts b/src/infra/exec-approvals-analysis.ts index 7ade7a769a..0a8340eef5 100644 --- a/src/infra/exec-approvals-analysis.ts +++ b/src/infra/exec-approvals-analysis.ts @@ -1,8 +1,8 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; -import type { ExecAllowlistEntry } from "./exec-approvals.js"; import { splitShellArgs } from "../utils/shell-argv.js"; +import type { ExecAllowlistEntry } from "./exec-approvals.js"; export const DEFAULT_SAFE_BINS = ["jq", "grep", "cut", "sort", "uniq", "head", "tail", "tr", "wc"]; diff --git a/src/infra/fs-safe.ts b/src/infra/fs-safe.ts index fc8d4ce526..64c0288002 100644 --- a/src/infra/fs-safe.ts +++ b/src/infra/fs-safe.ts @@ -1,6 +1,6 @@ import type { Stats } from "node:fs"; -import type { FileHandle } from "node:fs/promises"; import { constants as fsConstants } from "node:fs"; +import type { FileHandle } from "node:fs/promises"; import fs from "node:fs/promises"; import path from "node:path"; diff --git a/src/infra/heartbeat-active-hours.ts b/src/infra/heartbeat-active-hours.ts index b8f18efbba..1d9f1d3362 100644 --- a/src/infra/heartbeat-active-hours.ts +++ b/src/infra/heartbeat-active-hours.ts @@ -1,6 +1,6 @@ +import { resolveUserTimezone } from "../agents/date-time.js"; import type { OpenClawConfig } from "../config/config.js"; import type { AgentDefaultsConfig } from "../config/types.agent-defaults.js"; -import { resolveUserTimezone } from "../agents/date-time.js"; type HeartbeatConfig = AgentDefaultsConfig["heartbeat"]; diff --git a/src/infra/heartbeat-runner.ghost-reminder.test.ts b/src/infra/heartbeat-runner.ghost-reminder.test.ts index 55aa20a293..af7ffbf436 100644 --- a/src/infra/heartbeat-runner.ghost-reminder.test.ts +++ b/src/infra/heartbeat-runner.ghost-reminder.test.ts @@ -2,10 +2,10 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import type { OpenClawConfig } from "../config/config.js"; import { telegramPlugin } from "../../extensions/telegram/src/channel.js"; import { setTelegramRuntime } from "../../extensions/telegram/src/runtime.js"; import * as replyModule from "../auto-reply/reply.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveMainSessionKey } from "../config/sessions.js"; import { setActivePluginRegistry } from "../plugins/runtime.js"; import { createPluginRuntime } from "../plugins/runtime/index.js"; diff --git a/src/infra/heartbeat-runner.model-override.test.ts b/src/infra/heartbeat-runner.model-override.test.ts index 4b7f7db3db..f3fe5ea6e6 100644 --- a/src/infra/heartbeat-runner.model-override.test.ts +++ b/src/infra/heartbeat-runner.model-override.test.ts @@ -2,12 +2,12 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import type { OpenClawConfig } from "../config/config.js"; import { telegramPlugin } from "../../extensions/telegram/src/channel.js"; import { setTelegramRuntime } from "../../extensions/telegram/src/runtime.js"; import { whatsappPlugin } from "../../extensions/whatsapp/src/channel.js"; import { setWhatsAppRuntime } from "../../extensions/whatsapp/src/runtime.js"; import * as replyModule from "../auto-reply/reply.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveAgentMainSessionKey, resolveMainSessionKey } from "../config/sessions.js"; import { setActivePluginRegistry } from "../plugins/runtime.js"; import { createPluginRuntime } from "../plugins/runtime/index.js"; diff --git a/src/infra/heartbeat-runner.returns-default-unset.test.ts b/src/infra/heartbeat-runner.returns-default-unset.test.ts index 4829e4e058..1ce3871d72 100644 --- a/src/infra/heartbeat-runner.returns-default-unset.test.ts +++ b/src/infra/heartbeat-runner.returns-default-unset.test.ts @@ -2,10 +2,10 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import type { OpenClawConfig } from "../config/config.js"; import { HEARTBEAT_PROMPT } from "../auto-reply/heartbeat.js"; import * as replyModule from "../auto-reply/reply.js"; import { whatsappOutbound } from "../channels/plugins/outbound/whatsapp.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveAgentIdFromSessionKey, resolveAgentMainSessionKey, diff --git a/src/infra/heartbeat-runner.sender-prefers-delivery-target.test.ts b/src/infra/heartbeat-runner.sender-prefers-delivery-target.test.ts index 0c83468a2f..b244ef669e 100644 --- a/src/infra/heartbeat-runner.sender-prefers-delivery-target.test.ts +++ b/src/infra/heartbeat-runner.sender-prefers-delivery-target.test.ts @@ -2,8 +2,8 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { describe, expect, it, vi } from "vitest"; -import type { OpenClawConfig } from "../config/config.js"; import * as replyModule from "../auto-reply/reply.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveMainSessionKey } from "../config/sessions.js"; import { runHeartbeatOnce } from "./heartbeat-runner.js"; import { installHeartbeatRunnerTestRuntime } from "./heartbeat-runner.test-harness.js"; diff --git a/src/infra/heartbeat-runner.test-harness.ts b/src/infra/heartbeat-runner.test-harness.ts index 8227c91757..f884aabfe8 100644 --- a/src/infra/heartbeat-runner.test-harness.ts +++ b/src/infra/heartbeat-runner.test-harness.ts @@ -1,11 +1,11 @@ import { beforeEach } from "vitest"; -import type { ChannelPlugin } from "../channels/plugins/types.plugin.js"; import { slackPlugin } from "../../extensions/slack/src/channel.js"; import { setSlackRuntime } from "../../extensions/slack/src/runtime.js"; import { telegramPlugin } from "../../extensions/telegram/src/channel.js"; import { setTelegramRuntime } from "../../extensions/telegram/src/runtime.js"; import { whatsappPlugin } from "../../extensions/whatsapp/src/channel.js"; import { setWhatsAppRuntime } from "../../extensions/whatsapp/src/runtime.js"; +import type { ChannelPlugin } from "../channels/plugins/types.plugin.js"; import { setActivePluginRegistry } from "../plugins/runtime.js"; import { createPluginRuntime } from "../plugins/runtime/index.js"; import { createTestRegistry } from "../test-utils/channel-plugins.js"; diff --git a/src/infra/heartbeat-runner.transcript-prune.test.ts b/src/infra/heartbeat-runner.transcript-prune.test.ts index 24785d908c..cea7f17249 100644 --- a/src/infra/heartbeat-runner.transcript-prune.test.ts +++ b/src/infra/heartbeat-runner.transcript-prune.test.ts @@ -1,9 +1,9 @@ import fs from "node:fs/promises"; import path from "node:path"; import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { OpenClawConfig } from "../config/config.js"; import { telegramPlugin } from "../../extensions/telegram/src/channel.js"; import { setTelegramRuntime } from "../../extensions/telegram/src/runtime.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveMainSessionKey } from "../config/sessions.js"; import { setActivePluginRegistry } from "../plugins/runtime.js"; import { createPluginRuntime } from "../plugins/runtime/index.js"; diff --git a/src/infra/heartbeat-runner.ts b/src/infra/heartbeat-runner.ts index a3902f5c36..fef8972bcc 100644 --- a/src/infra/heartbeat-runner.ts +++ b/src/infra/heartbeat-runner.ts @@ -1,10 +1,5 @@ import fs from "node:fs/promises"; import path from "node:path"; -import type { ReplyPayload } from "../auto-reply/types.js"; -import type { ChannelHeartbeatDeps } from "../channels/plugins/types.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { AgentDefaultsConfig } from "../config/types.agent-defaults.js"; -import type { OutboundSendDeps } from "./outbound/deliver.js"; import { resolveAgentConfig, resolveAgentWorkspaceDir, @@ -23,8 +18,11 @@ import { } from "../auto-reply/heartbeat.js"; import { getReplyFromConfig } from "../auto-reply/reply.js"; import { HEARTBEAT_TOKEN } from "../auto-reply/tokens.js"; +import type { ReplyPayload } from "../auto-reply/types.js"; import { getChannelPlugin } from "../channels/plugins/index.js"; +import type { ChannelHeartbeatDeps } from "../channels/plugins/types.js"; import { parseDurationMs } from "../cli/parse-duration.js"; +import type { OpenClawConfig } from "../config/config.js"; import { loadConfig } from "../config/config.js"; import { canonicalizeMainSessionAlias, @@ -36,6 +34,7 @@ import { saveSessionStore, updateSessionStore, } from "../config/sessions.js"; +import type { AgentDefaultsConfig } from "../config/types.agent-defaults.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { getQueueSize } from "../process/command-queue.js"; import { CommandLane } from "../process/lanes.js"; @@ -57,6 +56,7 @@ import { requestHeartbeatNow, setHeartbeatWakeHandler, } from "./heartbeat-wake.js"; +import type { OutboundSendDeps } from "./outbound/deliver.js"; import { deliverOutboundPayloads } from "./outbound/deliver.js"; import { resolveHeartbeatDeliveryTarget, diff --git a/src/infra/http-body.test.ts b/src/infra/http-body.test.ts index 16b63a10e4..e3548b1eab 100644 --- a/src/infra/http-body.test.ts +++ b/src/infra/http-body.test.ts @@ -1,5 +1,5 @@ -import type { IncomingMessage } from "node:http"; import { EventEmitter } from "node:events"; +import type { IncomingMessage } from "node:http"; import { describe, expect, it } from "vitest"; import { createMockServerResponse } from "../test-utils/mock-http-response.js"; import { diff --git a/src/infra/outbound/agent-delivery.ts b/src/infra/outbound/agent-delivery.ts index c2398943d8..08480cbf23 100644 --- a/src/infra/outbound/agent-delivery.ts +++ b/src/infra/outbound/agent-delivery.ts @@ -1,8 +1,7 @@ import type { ChannelOutboundTargetMode } from "../../channels/plugins/types.js"; +import { DEFAULT_CHAT_CHANNEL } from "../../channels/registry.js"; import type { OpenClawConfig } from "../../config/config.js"; import type { SessionEntry } from "../../config/sessions.js"; -import type { OutboundTargetResolution } from "./targets.js"; -import { DEFAULT_CHAT_CHANNEL } from "../../channels/registry.js"; import { normalizeAccountId } from "../../utils/account-id.js"; import { INTERNAL_MESSAGE_CHANNEL, @@ -11,6 +10,7 @@ import { normalizeMessageChannel, type GatewayMessageChannel, } from "../../utils/message-channel.js"; +import type { OutboundTargetResolution } from "./targets.js"; import { resolveOutboundTarget, resolveSessionDeliveryTarget, diff --git a/src/infra/outbound/channel-selection.ts b/src/infra/outbound/channel-selection.ts index 6ef5d16171..a8ba2b699e 100644 --- a/src/infra/outbound/channel-selection.ts +++ b/src/infra/outbound/channel-selection.ts @@ -1,6 +1,6 @@ +import { listChannelPlugins } from "../../channels/plugins/index.js"; import type { ChannelPlugin } from "../../channels/plugins/types.js"; import type { OpenClawConfig } from "../../config/config.js"; -import { listChannelPlugins } from "../../channels/plugins/index.js"; import { listDeliverableMessageChannels, type DeliverableMessageChannel, diff --git a/src/infra/outbound/deliver.test.ts b/src/infra/outbound/deliver.test.ts index 95ca30cd51..ba9d2013c4 100644 --- a/src/infra/outbound/deliver.test.ts +++ b/src/infra/outbound/deliver.test.ts @@ -1,9 +1,9 @@ import path from "node:path"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import type { OpenClawConfig } from "../../config/config.js"; import { signalOutbound } from "../../channels/plugins/outbound/signal.js"; import { telegramOutbound } from "../../channels/plugins/outbound/telegram.js"; import { whatsappOutbound } from "../../channels/plugins/outbound/whatsapp.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { STATE_DIR } from "../../config/paths.js"; import { setActivePluginRegistry } from "../../plugins/runtime.js"; import { markdownToSignalTextChunks } from "../../signal/format.js"; diff --git a/src/infra/outbound/deliver.ts b/src/infra/outbound/deliver.ts index 23c576cd98..c48dea0d04 100644 --- a/src/infra/outbound/deliver.ts +++ b/src/infra/outbound/deliver.ts @@ -1,37 +1,37 @@ -import type { ReplyPayload } from "../../auto-reply/types.js"; -import type { - ChannelOutboundAdapter, - ChannelOutboundContext, -} from "../../channels/plugins/types.js"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { sendMessageDiscord } from "../../discord/send.js"; -import type { sendMessageIMessage } from "../../imessage/send.js"; -import type { sendMessageSlack } from "../../slack/send.js"; -import type { sendMessageTelegram } from "../../telegram/send.js"; -import type { sendMessageWhatsApp } from "../../web/outbound.js"; -import type { OutboundIdentity } from "./identity.js"; -import type { NormalizedOutboundPayload } from "./payloads.js"; -import type { OutboundChannel } from "./targets.js"; import { chunkByParagraph, chunkMarkdownTextWithMode, resolveChunkMode, resolveTextChunkLimit, } from "../../auto-reply/chunk.js"; +import type { ReplyPayload } from "../../auto-reply/types.js"; import { resolveChannelMediaMaxBytes } from "../../channels/plugins/media-limits.js"; import { loadChannelOutboundAdapter } from "../../channels/plugins/outbound/load.js"; +import type { + ChannelOutboundAdapter, + ChannelOutboundContext, +} from "../../channels/plugins/types.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { resolveMarkdownTableMode } from "../../config/markdown-tables.js"; import { appendAssistantMessageToSessionTranscript, resolveMirroredTranscriptText, } from "../../config/sessions.js"; +import type { sendMessageDiscord } from "../../discord/send.js"; +import type { sendMessageIMessage } from "../../imessage/send.js"; import { getAgentScopedMediaLocalRoots } from "../../media/local-roots.js"; import { getGlobalHookRunner } from "../../plugins/hook-runner-global.js"; import { markdownToSignalTextChunks, type SignalTextStyleRange } from "../../signal/format.js"; import { sendMessageSignal } from "../../signal/send.js"; +import type { sendMessageSlack } from "../../slack/send.js"; +import type { sendMessageTelegram } from "../../telegram/send.js"; +import type { sendMessageWhatsApp } from "../../web/outbound.js"; import { throwIfAborted } from "./abort.js"; import { ackDelivery, enqueueDelivery, failDelivery } from "./delivery-queue.js"; +import type { OutboundIdentity } from "./identity.js"; +import type { NormalizedOutboundPayload } from "./payloads.js"; import { normalizeReplyPayloadsForDelivery } from "./payloads.js"; +import type { OutboundChannel } from "./targets.js"; export type { NormalizedOutboundPayload } from "./payloads.js"; export { normalizeOutboundPayloads } from "./payloads.js"; diff --git a/src/infra/outbound/delivery-queue.ts b/src/infra/outbound/delivery-queue.ts index ade2c67e47..331875da4b 100644 --- a/src/infra/outbound/delivery-queue.ts +++ b/src/infra/outbound/delivery-queue.ts @@ -3,8 +3,8 @@ import fs from "node:fs"; import path from "node:path"; import type { ReplyPayload } from "../../auto-reply/types.js"; import type { OpenClawConfig } from "../../config/config.js"; -import type { OutboundChannel } from "./targets.js"; import { resolveStateDir } from "../../config/paths.js"; +import type { OutboundChannel } from "./targets.js"; const QUEUE_DIRNAME = "delivery-queue"; const FAILED_DIRNAME = "failed"; diff --git a/src/infra/outbound/format.ts b/src/infra/outbound/format.ts index 4772ee9172..7a0092675d 100644 --- a/src/infra/outbound/format.ts +++ b/src/infra/outbound/format.ts @@ -1,7 +1,7 @@ -import type { ChannelId } from "../../channels/plugins/types.js"; -import type { OutboundDeliveryResult } from "./deliver.js"; import { getChannelPlugin } from "../../channels/plugins/index.js"; +import type { ChannelId } from "../../channels/plugins/types.js"; import { getChatChannelMeta, normalizeChatChannelId } from "../../channels/registry.js"; +import type { OutboundDeliveryResult } from "./deliver.js"; export type OutboundDeliveryJson = { channel: string; diff --git a/src/infra/outbound/identity.ts b/src/infra/outbound/identity.ts index 25de17a060..64b522a6ad 100644 --- a/src/infra/outbound/identity.ts +++ b/src/infra/outbound/identity.ts @@ -1,6 +1,6 @@ -import type { OpenClawConfig } from "../../config/config.js"; import { resolveAgentAvatar } from "../../agents/identity-avatar.js"; import { resolveAgentIdentity } from "../../agents/identity.js"; +import type { OpenClawConfig } from "../../config/config.js"; export type OutboundIdentity = { name?: string; diff --git a/src/infra/outbound/message-action-params.ts b/src/infra/outbound/message-action-params.ts index 2b6a3186d6..cf230e7741 100644 --- a/src/infra/outbound/message-action-params.ts +++ b/src/infra/outbound/message-action-params.ts @@ -1,14 +1,14 @@ import fs from "node:fs/promises"; import path from "node:path"; import { fileURLToPath } from "node:url"; +import { assertMediaNotDataUrl, resolveSandboxedMediaSource } from "../../agents/sandbox-paths.js"; +import { readStringParam } from "../../agents/tools/common.js"; import type { ChannelId, ChannelMessageActionName, ChannelThreadingToolContext, } from "../../channels/plugins/types.js"; import type { OpenClawConfig } from "../../config/config.js"; -import { assertMediaNotDataUrl, resolveSandboxedMediaSource } from "../../agents/sandbox-paths.js"; -import { readStringParam } from "../../agents/tools/common.js"; import { extensionForMime } from "../../media/mime.js"; import { parseSlackTarget } from "../../slack/targets.js"; import { parseTelegramTarget } from "../../telegram/targets.js"; diff --git a/src/infra/outbound/message-action-runner.test.ts b/src/infra/outbound/message-action-runner.test.ts index 358c202b98..f7ce41c756 100644 --- a/src/infra/outbound/message-action-runner.test.ts +++ b/src/infra/outbound/message-action-runner.test.ts @@ -2,12 +2,12 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import type { ChannelPlugin } from "../../channels/plugins/types.js"; -import type { OpenClawConfig } from "../../config/config.js"; import { slackPlugin } from "../../../extensions/slack/src/channel.js"; import { telegramPlugin } from "../../../extensions/telegram/src/channel.js"; import { whatsappPlugin } from "../../../extensions/whatsapp/src/channel.js"; import { jsonResult } from "../../agents/tools/common.js"; +import type { ChannelPlugin } from "../../channels/plugins/types.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { setActivePluginRegistry } from "../../plugins/runtime.js"; import { createOutboundTestPlugin, createTestRegistry } from "../../test-utils/channel-plugins.js"; import { createIMessageTestPlugin } from "../../test-utils/imessage-test-plugin.js"; diff --git a/src/infra/outbound/message-action-runner.threading.test.ts b/src/infra/outbound/message-action-runner.threading.test.ts index 418e833abd..c5b040dd3c 100644 --- a/src/infra/outbound/message-action-runner.threading.test.ts +++ b/src/infra/outbound/message-action-runner.threading.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import type { OpenClawConfig } from "../../config/config.js"; import { slackPlugin } from "../../../extensions/slack/src/channel.js"; import { telegramPlugin } from "../../../extensions/telegram/src/channel.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { setActivePluginRegistry } from "../../plugins/runtime.js"; import { createTestRegistry } from "../../test-utils/channel-plugins.js"; diff --git a/src/infra/outbound/message-action-runner.ts b/src/infra/outbound/message-action-runner.ts index bc249debfb..b48a36ff0b 100644 --- a/src/infra/outbound/message-action-runner.ts +++ b/src/infra/outbound/message-action-runner.ts @@ -1,12 +1,4 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; -import type { - ChannelId, - ChannelMessageActionName, - ChannelThreadingToolContext, -} from "../../channels/plugins/types.js"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { OutboundSendDeps } from "./deliver.js"; -import type { MessagePollResult, MessageSendResult } from "./message.js"; import { resolveSessionAgentId } from "../../agents/agent-scope.js"; import { readNumberParam, @@ -15,6 +7,12 @@ import { } from "../../agents/tools/common.js"; import { parseReplyDirectives } from "../../auto-reply/reply/reply-directives.js"; import { dispatchChannelMessageAction } from "../../channels/plugins/message-actions.js"; +import type { + ChannelId, + ChannelMessageActionName, + ChannelThreadingToolContext, +} from "../../channels/plugins/types.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { isDeliverableMessageChannel, normalizeMessageChannel, @@ -27,6 +25,7 @@ import { resolveMessageChannelSelection, } from "./channel-selection.js"; import { applyTargetToParams } from "./channel-target.js"; +import type { OutboundSendDeps } from "./deliver.js"; import { hydrateSendAttachmentParams, hydrateSetGroupIconParams, @@ -40,6 +39,7 @@ import { resolveTelegramAutoThreadId, } from "./message-action-params.js"; import { actionHasTarget, actionRequiresTarget } from "./message-action-spec.js"; +import type { MessagePollResult, MessageSendResult } from "./message.js"; import { applyCrossContextDecoration, buildCrossContextDecoration, diff --git a/src/infra/outbound/message.ts b/src/infra/outbound/message.ts index bf013f7a15..88e56d84a4 100644 --- a/src/infra/outbound/message.ts +++ b/src/infra/outbound/message.ts @@ -1,8 +1,8 @@ -import type { OpenClawConfig } from "../../config/config.js"; -import type { PollInput } from "../../polls.js"; import { getChannelPlugin, normalizeChannelId } from "../../channels/plugins/index.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { loadConfig } from "../../config/config.js"; import { callGateway, randomIdempotencyKey } from "../../gateway/call.js"; +import type { PollInput } from "../../polls.js"; import { normalizePollInput } from "../../polls.js"; import { GATEWAY_CLIENT_MODES, diff --git a/src/infra/outbound/outbound-send-service.ts b/src/infra/outbound/outbound-send-service.ts index 88eda04d87..85fa580019 100644 --- a/src/infra/outbound/outbound-send-service.ts +++ b/src/infra/outbound/outbound-send-service.ts @@ -1,12 +1,12 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; +import { dispatchChannelMessageAction } from "../../channels/plugins/message-actions.js"; import type { ChannelId, ChannelThreadingToolContext } from "../../channels/plugins/types.js"; import type { OpenClawConfig } from "../../config/config.js"; +import { appendAssistantMessageToSessionTranscript } from "../../config/sessions.js"; import type { GatewayClientMode, GatewayClientName } from "../../utils/message-channel.js"; +import { throwIfAborted } from "./abort.js"; import type { OutboundSendDeps } from "./deliver.js"; import type { MessagePollResult, MessageSendResult } from "./message.js"; -import { dispatchChannelMessageAction } from "../../channels/plugins/message-actions.js"; -import { appendAssistantMessageToSessionTranscript } from "../../config/sessions.js"; -import { throwIfAborted } from "./abort.js"; import { sendMessage, sendPoll } from "./message.js"; import { extractToolPayload } from "./tool-payload.js"; diff --git a/src/infra/outbound/outbound-session.ts b/src/infra/outbound/outbound-session.ts index c6c81f99e4..17b9c901a1 100644 --- a/src/infra/outbound/outbound-session.ts +++ b/src/infra/outbound/outbound-session.ts @@ -1,9 +1,8 @@ import type { MsgContext } from "../../auto-reply/templating.js"; import type { ChatType } from "../../channels/chat-type.js"; +import { getChannelPlugin } from "../../channels/plugins/index.js"; import type { ChannelId } from "../../channels/plugins/types.js"; import type { OpenClawConfig } from "../../config/config.js"; -import type { ResolvedMessagingTarget } from "./target-resolver.js"; -import { getChannelPlugin } from "../../channels/plugins/index.js"; import { recordSessionMetaFromInbound, resolveStorePath } from "../../config/sessions.js"; import { parseDiscordTarget } from "../../discord/targets.js"; import { parseIMessageTarget, normalizeIMessageHandle } from "../../imessage/targets.js"; @@ -22,6 +21,7 @@ import { buildTelegramGroupPeerId } from "../../telegram/bot/helpers.js"; import { resolveTelegramTargetChatType } from "../../telegram/inline-buttons.js"; import { parseTelegramTarget } from "../../telegram/targets.js"; import { isWhatsAppGroupJid, normalizeWhatsAppTarget } from "../../whatsapp/normalize.js"; +import type { ResolvedMessagingTarget } from "./target-resolver.js"; export type OutboundSessionRoute = { sessionKey: string; diff --git a/src/infra/outbound/outbound.test.ts b/src/infra/outbound/outbound.test.ts index 797d2486ba..97c833cc8c 100644 --- a/src/infra/outbound/outbound.test.ts +++ b/src/infra/outbound/outbound.test.ts @@ -2,10 +2,9 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { OutboundDeliveryJson } from "./format.js"; import { telegramPlugin } from "../../../extensions/telegram/src/channel.js"; import { whatsappPlugin } from "../../../extensions/whatsapp/src/channel.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { setActivePluginRegistry } from "../../plugins/runtime.js"; import { createTestRegistry } from "../../test-utils/channel-plugins.js"; import { @@ -20,6 +19,7 @@ import { } from "./delivery-queue.js"; import { DirectoryCache } from "./directory-cache.js"; import { buildOutboundResultEnvelope } from "./envelope.js"; +import type { OutboundDeliveryJson } from "./format.js"; import { buildOutboundDeliveryJson, formatGatewaySummary, diff --git a/src/infra/outbound/payloads.ts b/src/infra/outbound/payloads.ts index a44fdf2f1a..888f3624e1 100644 --- a/src/infra/outbound/payloads.ts +++ b/src/infra/outbound/payloads.ts @@ -1,6 +1,6 @@ -import type { ReplyPayload } from "../../auto-reply/types.js"; import { parseReplyDirectives } from "../../auto-reply/reply/reply-directives.js"; import { isRenderablePayload } from "../../auto-reply/reply/reply-payloads.js"; +import type { ReplyPayload } from "../../auto-reply/types.js"; export type NormalizedOutboundPayload = { text: string; diff --git a/src/infra/outbound/target-normalization.ts b/src/infra/outbound/target-normalization.ts index c4238d3a98..290bff1823 100644 --- a/src/infra/outbound/target-normalization.ts +++ b/src/infra/outbound/target-normalization.ts @@ -1,5 +1,5 @@ -import type { ChannelId } from "../../channels/plugins/types.js"; import { getChannelPlugin, normalizeChannelId } from "../../channels/plugins/index.js"; +import type { ChannelId } from "../../channels/plugins/types.js"; export function normalizeChannelTargetInput(raw: string): string { return raw.trim(); diff --git a/src/infra/outbound/target-resolver.ts b/src/infra/outbound/target-resolver.ts index def41c70cf..b3ac5ba438 100644 --- a/src/infra/outbound/target-resolver.ts +++ b/src/infra/outbound/target-resolver.ts @@ -1,10 +1,10 @@ +import { getChannelPlugin } from "../../channels/plugins/index.js"; import type { ChannelDirectoryEntry, ChannelDirectoryEntryKind, ChannelId, } from "../../channels/plugins/types.js"; import type { OpenClawConfig } from "../../config/config.js"; -import { getChannelPlugin } from "../../channels/plugins/index.js"; import { defaultRuntime, type RuntimeEnv } from "../../runtime.js"; import { buildDirectoryCacheKey, DirectoryCache } from "./directory-cache.js"; import { ambiguousTargetError, unknownTargetError } from "./target-errors.js"; diff --git a/src/infra/outbound/targets.ts b/src/infra/outbound/targets.ts index ce3359309c..4776f5110c 100644 --- a/src/infra/outbound/targets.ts +++ b/src/infra/outbound/targets.ts @@ -1,15 +1,15 @@ +import { getChannelPlugin, normalizeChannelId } from "../../channels/plugins/index.js"; import type { ChannelOutboundTargetMode } from "../../channels/plugins/types.js"; +import { formatCliCommand } from "../../cli/command-format.js"; import type { OpenClawConfig } from "../../config/config.js"; import type { SessionEntry } from "../../config/sessions.js"; import type { AgentDefaultsConfig } from "../../config/types.agent-defaults.js"; +import { normalizeAccountId } from "../../routing/session-key.js"; +import { deliveryContextFromSession } from "../../utils/delivery-context.js"; import type { DeliverableMessageChannel, GatewayMessageChannel, } from "../../utils/message-channel.js"; -import { getChannelPlugin, normalizeChannelId } from "../../channels/plugins/index.js"; -import { formatCliCommand } from "../../cli/command-format.js"; -import { normalizeAccountId } from "../../routing/session-key.js"; -import { deliveryContextFromSession } from "../../utils/delivery-context.js"; import { INTERNAL_MESSAGE_CHANNEL, isDeliverableMessageChannel, diff --git a/src/infra/ports-format.ts b/src/infra/ports-format.ts index 54fb75b66c..d8c45dfe27 100644 --- a/src/infra/ports-format.ts +++ b/src/infra/ports-format.ts @@ -1,5 +1,5 @@ -import type { PortListener, PortListenerKind, PortUsage } from "./ports-types.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { PortListener, PortListenerKind, PortUsage } from "./ports-types.js"; export function classifyPortListener(listener: PortListener, port: number): PortListenerKind { const raw = `${listener.commandLine ?? ""} ${listener.command ?? ""}`.trim().toLowerCase(); diff --git a/src/infra/ports-inspect.ts b/src/infra/ports-inspect.ts index 33ad3823c5..4cd86c1b6c 100644 --- a/src/infra/ports-inspect.ts +++ b/src/infra/ports-inspect.ts @@ -1,9 +1,9 @@ import net from "node:net"; -import type { PortListener, PortUsage, PortUsageStatus } from "./ports-types.js"; import { runCommandWithTimeout } from "../process/exec.js"; import { isErrno } from "./errors.js"; import { buildPortHints } from "./ports-format.js"; import { resolveLsofCommand } from "./ports-lsof.js"; +import type { PortListener, PortUsage, PortUsageStatus } from "./ports-types.js"; type CommandResult = { stdout: string; diff --git a/src/infra/ports.ts b/src/infra/ports.ts index 64a6323983..cd8c21eaa4 100644 --- a/src/infra/ports.ts +++ b/src/infra/ports.ts @@ -1,12 +1,12 @@ import net from "node:net"; -import type { RuntimeEnv } from "../runtime.js"; -import type { PortListener, PortListenerKind, PortUsage, PortUsageStatus } from "./ports-types.js"; import { danger, info, shouldLogVerbose, warn } from "../globals.js"; import { logDebug } from "../logger.js"; +import type { RuntimeEnv } from "../runtime.js"; import { defaultRuntime } from "../runtime.js"; import { isErrno } from "./errors.js"; import { formatPortDiagnostics } from "./ports-format.js"; import { inspectPortUsage } from "./ports-inspect.js"; +import type { PortListener, PortListenerKind, PortUsage, PortUsageStatus } from "./ports-types.js"; class PortInUseError extends Error { port: number; diff --git a/src/infra/provider-usage.auth.ts b/src/infra/provider-usage.auth.ts index 75b1860f95..d5dafab833 100644 --- a/src/infra/provider-usage.auth.ts +++ b/src/infra/provider-usage.auth.ts @@ -1,7 +1,6 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; -import type { UsageProviderId } from "./provider-usage.types.js"; import { dedupeProfileIds, ensureAuthProfileStore, @@ -13,6 +12,7 @@ import { getCustomProviderApiKey, resolveEnvApiKey } from "../agents/model-auth. import { normalizeProviderId } from "../agents/model-selection.js"; import { loadConfig } from "../config/config.js"; import { normalizeSecretInput } from "../utils/normalize-secret-input.js"; +import type { UsageProviderId } from "./provider-usage.types.js"; export type ProviderAuth = { provider: UsageProviderId; diff --git a/src/infra/provider-usage.fetch.antigravity.ts b/src/infra/provider-usage.fetch.antigravity.ts index e739458c94..fe4fd9de10 100644 --- a/src/infra/provider-usage.fetch.antigravity.ts +++ b/src/infra/provider-usage.fetch.antigravity.ts @@ -1,7 +1,7 @@ -import type { ProviderUsageSnapshot, UsageWindow } from "./provider-usage.types.js"; import { logDebug } from "../logger.js"; import { fetchJson } from "./provider-usage.fetch.shared.js"; import { clampPercent, PROVIDER_LABELS } from "./provider-usage.shared.js"; +import type { ProviderUsageSnapshot, UsageWindow } from "./provider-usage.types.js"; type LoadCodeAssistResponse = { availablePromptCredits?: number | string; diff --git a/src/infra/provider-usage.fetch.claude.ts b/src/infra/provider-usage.fetch.claude.ts index 73e8803674..7a91448e23 100644 --- a/src/infra/provider-usage.fetch.claude.ts +++ b/src/infra/provider-usage.fetch.claude.ts @@ -1,6 +1,6 @@ -import type { ProviderUsageSnapshot, UsageWindow } from "./provider-usage.types.js"; import { fetchJson } from "./provider-usage.fetch.shared.js"; import { clampPercent, PROVIDER_LABELS } from "./provider-usage.shared.js"; +import type { ProviderUsageSnapshot, UsageWindow } from "./provider-usage.types.js"; type ClaudeUsageResponse = { five_hour?: { utilization?: number; resets_at?: string }; diff --git a/src/infra/provider-usage.fetch.codex.ts b/src/infra/provider-usage.fetch.codex.ts index fa433586a2..6078c95e13 100644 --- a/src/infra/provider-usage.fetch.codex.ts +++ b/src/infra/provider-usage.fetch.codex.ts @@ -1,6 +1,6 @@ -import type { ProviderUsageSnapshot, UsageWindow } from "./provider-usage.types.js"; import { fetchJson } from "./provider-usage.fetch.shared.js"; import { clampPercent, PROVIDER_LABELS } from "./provider-usage.shared.js"; +import type { ProviderUsageSnapshot, UsageWindow } from "./provider-usage.types.js"; type CodexUsageResponse = { rate_limit?: { diff --git a/src/infra/provider-usage.fetch.copilot.ts b/src/infra/provider-usage.fetch.copilot.ts index bcdd9a4317..3782982aa2 100644 --- a/src/infra/provider-usage.fetch.copilot.ts +++ b/src/infra/provider-usage.fetch.copilot.ts @@ -1,6 +1,6 @@ -import type { ProviderUsageSnapshot, UsageWindow } from "./provider-usage.types.js"; import { fetchJson } from "./provider-usage.fetch.shared.js"; import { clampPercent, PROVIDER_LABELS } from "./provider-usage.shared.js"; +import type { ProviderUsageSnapshot, UsageWindow } from "./provider-usage.types.js"; type CopilotUsageResponse = { quota_snapshots?: { diff --git a/src/infra/provider-usage.fetch.gemini.ts b/src/infra/provider-usage.fetch.gemini.ts index 7ec96651da..39a5806417 100644 --- a/src/infra/provider-usage.fetch.gemini.ts +++ b/src/infra/provider-usage.fetch.gemini.ts @@ -1,10 +1,10 @@ +import { fetchJson } from "./provider-usage.fetch.shared.js"; +import { clampPercent, PROVIDER_LABELS } from "./provider-usage.shared.js"; import type { ProviderUsageSnapshot, UsageProviderId, UsageWindow, } from "./provider-usage.types.js"; -import { fetchJson } from "./provider-usage.fetch.shared.js"; -import { clampPercent, PROVIDER_LABELS } from "./provider-usage.shared.js"; type GeminiUsageResponse = { buckets?: Array<{ modelId?: string; remainingFraction?: number }>; diff --git a/src/infra/provider-usage.fetch.minimax.ts b/src/infra/provider-usage.fetch.minimax.ts index a2cc1106d4..7ffe7a3f1d 100644 --- a/src/infra/provider-usage.fetch.minimax.ts +++ b/src/infra/provider-usage.fetch.minimax.ts @@ -1,7 +1,7 @@ -import type { ProviderUsageSnapshot, UsageWindow } from "./provider-usage.types.js"; import { isRecord } from "../utils.js"; import { fetchJson } from "./provider-usage.fetch.shared.js"; import { clampPercent, PROVIDER_LABELS } from "./provider-usage.shared.js"; +import type { ProviderUsageSnapshot, UsageWindow } from "./provider-usage.types.js"; type MinimaxBaseResp = { status_code?: number; diff --git a/src/infra/provider-usage.fetch.zai.ts b/src/infra/provider-usage.fetch.zai.ts index 1a8fc2ea8f..97a7a9a90e 100644 --- a/src/infra/provider-usage.fetch.zai.ts +++ b/src/infra/provider-usage.fetch.zai.ts @@ -1,6 +1,6 @@ -import type { ProviderUsageSnapshot, UsageWindow } from "./provider-usage.types.js"; import { fetchJson } from "./provider-usage.fetch.shared.js"; import { clampPercent, PROVIDER_LABELS } from "./provider-usage.shared.js"; +import type { ProviderUsageSnapshot, UsageWindow } from "./provider-usage.types.js"; type ZaiUsageResponse = { success?: boolean; diff --git a/src/infra/provider-usage.format.ts b/src/infra/provider-usage.format.ts index 7733d81210..3b02828f49 100644 --- a/src/infra/provider-usage.format.ts +++ b/src/infra/provider-usage.format.ts @@ -1,5 +1,5 @@ -import type { ProviderUsageSnapshot, UsageSummary, UsageWindow } from "./provider-usage.types.js"; import { clampPercent } from "./provider-usage.shared.js"; +import type { ProviderUsageSnapshot, UsageSummary, UsageWindow } from "./provider-usage.types.js"; function formatResetRemaining(targetMs?: number, now?: number): string | null { if (!targetMs) { diff --git a/src/infra/provider-usage.load.ts b/src/infra/provider-usage.load.ts index ea3a5b4348..d4975dc0a0 100644 --- a/src/infra/provider-usage.load.ts +++ b/src/infra/provider-usage.load.ts @@ -1,8 +1,3 @@ -import type { - ProviderUsageSnapshot, - UsageProviderId, - UsageSummary, -} from "./provider-usage.types.js"; import { resolveFetch } from "./fetch.js"; import { type ProviderAuth, resolveProviderAuths } from "./provider-usage.auth.js"; import { @@ -21,6 +16,11 @@ import { usageProviders, withTimeout, } from "./provider-usage.shared.js"; +import type { + ProviderUsageSnapshot, + UsageProviderId, + UsageSummary, +} from "./provider-usage.types.js"; type UsageSummaryOptions = { now?: number; diff --git a/src/infra/provider-usage.shared.ts b/src/infra/provider-usage.shared.ts index 2f66a7403f..763eca4e8a 100644 --- a/src/infra/provider-usage.shared.ts +++ b/src/infra/provider-usage.shared.ts @@ -1,5 +1,5 @@ -import type { UsageProviderId } from "./provider-usage.types.js"; import { normalizeProviderId } from "../agents/model-selection.js"; +import type { UsageProviderId } from "./provider-usage.types.js"; export const DEFAULT_TIMEOUT_MS = 5000; diff --git a/src/infra/session-cost-usage.ts b/src/infra/session-cost-usage.ts index 96bebb9a96..53aeb55ffb 100644 --- a/src/infra/session-cost-usage.ts +++ b/src/infra/session-cost-usage.ts @@ -2,8 +2,15 @@ import fs from "node:fs"; import path from "node:path"; import readline from "node:readline"; import type { NormalizedUsage, UsageLike } from "../agents/usage.js"; +import { normalizeUsage } from "../agents/usage.js"; import type { OpenClawConfig } from "../config/config.js"; +import { + resolveSessionFilePath, + resolveSessionTranscriptsDirForAgent, +} from "../config/sessions/paths.js"; import type { SessionEntry } from "../config/sessions/types.js"; +import { countToolResults, extractToolCallNames } from "../utils/transcript-tools.js"; +import { estimateUsageCost, resolveModelCostConfig } from "../utils/usage-format.js"; import type { CostBreakdown, CostUsageTotals, @@ -24,13 +31,6 @@ import type { SessionUsageTimePoint, SessionUsageTimeSeries, } from "./session-cost-usage.types.js"; -import { normalizeUsage } from "../agents/usage.js"; -import { - resolveSessionFilePath, - resolveSessionTranscriptsDirForAgent, -} from "../config/sessions/paths.js"; -import { countToolResults, extractToolCallNames } from "../utils/transcript-tools.js"; -import { estimateUsageCost, resolveModelCostConfig } from "../utils/usage-format.js"; export type { CostUsageDailyEntry, diff --git a/src/infra/session-maintenance-warning.ts b/src/infra/session-maintenance-warning.ts index 8fa46cf27e..37ebee275e 100644 --- a/src/infra/session-maintenance-warning.ts +++ b/src/infra/session-maintenance-warning.ts @@ -1,6 +1,6 @@ +import { resolveSessionAgentId } from "../agents/agent-scope.js"; import type { OpenClawConfig } from "../config/config.js"; import type { SessionEntry, SessionMaintenanceWarning } from "../config/sessions.js"; -import { resolveSessionAgentId } from "../agents/agent-scope.js"; import { isDeliverableMessageChannel, normalizeMessageChannel } from "../utils/message-channel.js"; import { resolveSessionDeliveryTarget } from "./outbound/targets.js"; import { enqueueSystemEvent } from "./system-events.js"; diff --git a/src/infra/skills-remote.ts b/src/infra/skills-remote.ts index ea1e4de422..4897c6fb59 100644 --- a/src/infra/skills-remote.ts +++ b/src/infra/skills-remote.ts @@ -1,9 +1,9 @@ import type { SkillEligibilityContext, SkillEntry } from "../agents/skills.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { NodeRegistry } from "../gateway/node-registry.js"; import { loadWorkspaceSkillEntries } from "../agents/skills.js"; import { bumpSkillsSnapshotVersion } from "../agents/skills/refresh.js"; import { listAgentWorkspaceDirs } from "../agents/workspace-dirs.js"; +import type { OpenClawConfig } from "../config/config.js"; +import type { NodeRegistry } from "../gateway/node-registry.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { listNodePairing, updatePairedNodeMetadata } from "./node-pairing.js"; diff --git a/src/infra/state-migrations.fs.ts b/src/infra/state-migrations.fs.ts index 1f105d8cdb..286f72d155 100644 --- a/src/infra/state-migrations.fs.ts +++ b/src/infra/state-migrations.fs.ts @@ -1,5 +1,5 @@ -import JSON5 from "json5"; import fs from "node:fs"; +import JSON5 from "json5"; export type SessionEntryLike = { sessionId?: string; diff --git a/src/infra/state-migrations.ts b/src/infra/state-migrations.ts index 7b570935a1..533448b201 100644 --- a/src/infra/state-migrations.ts +++ b/src/infra/state-migrations.ts @@ -1,18 +1,18 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; -import type { OpenClawConfig } from "../config/config.js"; -import type { SessionEntry } from "../config/sessions.js"; -import type { SessionScope } from "../config/sessions/types.js"; import { resolveDefaultAgentId } from "../agents/agent-scope.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveLegacyStateDirs, resolveNewStateDir, resolveOAuthDir, resolveStateDir, } from "../config/paths.js"; +import type { SessionEntry } from "../config/sessions.js"; import { saveSessionStore } from "../config/sessions.js"; import { canonicalizeMainSessionAlias } from "../config/sessions/main-session.js"; +import type { SessionScope } from "../config/sessions/types.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { buildAgentMainSessionKey, diff --git a/src/infra/system-events.test.ts b/src/infra/system-events.test.ts index 9175d45c70..2667a57181 100644 --- a/src/infra/system-events.test.ts +++ b/src/infra/system-events.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it } from "vitest"; -import type { OpenClawConfig } from "../config/config.js"; import { prependSystemEvents } from "../auto-reply/reply/session-updates.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveMainSessionKey } from "../config/sessions.js"; import { isCronSystemEvent } from "./heartbeat-runner.js"; import { enqueueSystemEvent, peekSystemEvents, resetSystemEventsForTest } from "./system-events.js"; diff --git a/src/infra/transport-ready.ts b/src/infra/transport-ready.ts index 6c1225079c..42c1476c20 100644 --- a/src/infra/transport-ready.ts +++ b/src/infra/transport-ready.ts @@ -1,5 +1,5 @@ -import type { RuntimeEnv } from "../runtime.js"; import { danger } from "../globals.js"; +import type { RuntimeEnv } from "../runtime.js"; import { sleepWithAbort } from "./backoff.js"; export type TransportReadyResult = { diff --git a/src/infra/update-startup.ts b/src/infra/update-startup.ts index 4f9e7e42d1..7ef7c5c40f 100644 --- a/src/infra/update-startup.ts +++ b/src/infra/update-startup.ts @@ -1,7 +1,7 @@ import fs from "node:fs/promises"; import path from "node:path"; -import type { loadConfig } from "../config/config.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { loadConfig } from "../config/config.js"; import { resolveStateDir } from "../config/paths.js"; import { VERSION } from "../version.js"; import { resolveOpenClawPackageRoot } from "./openclaw-root.js"; diff --git a/src/infra/ws.ts b/src/infra/ws.ts index 585e181bca..441672e78d 100644 --- a/src/infra/ws.ts +++ b/src/infra/ws.ts @@ -1,5 +1,5 @@ -import type WebSocket from "ws"; import { Buffer } from "node:buffer"; +import type WebSocket from "ws"; export function rawDataToString( data: WebSocket.RawData, diff --git a/src/line/bot-handlers.ts b/src/line/bot-handlers.ts index d56e62549b..4591499680 100644 --- a/src/line/bot-handlers.ts +++ b/src/line/bot-handlers.ts @@ -8,8 +8,6 @@ import type { PostbackEvent, } from "@line/bot-sdk"; import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { LineGroupConfig, ResolvedLineAccount } from "./types.js"; import { danger, logVerbose } from "../globals.js"; import { resolvePairingIdLabel } from "../pairing/pairing-labels.js"; import { buildPairingReply } from "../pairing/pairing-messages.js"; @@ -17,6 +15,7 @@ import { readChannelAllowFromStore, upsertChannelPairingRequest, } from "../pairing/pairing-store.js"; +import type { RuntimeEnv } from "../runtime.js"; import { firstDefined, isSenderAllowed, normalizeAllowFromWithStore } from "./bot-access.js"; import { getLineSourceInfo, @@ -26,6 +25,7 @@ import { } from "./bot-message-context.js"; import { downloadLineMedia } from "./download.js"; import { pushMessageLine, replyMessageLine } from "./send.js"; +import type { LineGroupConfig, ResolvedLineAccount } from "./types.js"; interface MediaRef { path: string; diff --git a/src/line/bot-message-context.test.ts b/src/line/bot-message-context.test.ts index b75300dc09..b888c43bd5 100644 --- a/src/line/bot-message-context.test.ts +++ b/src/line/bot-message-context.test.ts @@ -1,11 +1,11 @@ -import type { MessageEvent, PostbackEvent } from "@line/bot-sdk"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import type { MessageEvent, PostbackEvent } from "@line/bot-sdk"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; import type { OpenClawConfig } from "../config/config.js"; -import type { ResolvedLineAccount } from "./types.js"; import { buildLineMessageContext, buildLinePostbackContext } from "./bot-message-context.js"; +import type { ResolvedLineAccount } from "./types.js"; describe("buildLineMessageContext", () => { let tmpDir: string; diff --git a/src/line/bot-message-context.ts b/src/line/bot-message-context.ts index 7381a9f507..dd1da2ffbf 100644 --- a/src/line/bot-message-context.ts +++ b/src/line/bot-message-context.ts @@ -1,9 +1,8 @@ import type { MessageEvent, StickerEventMessage, EventSource, PostbackEvent } from "@line/bot-sdk"; -import type { OpenClawConfig } from "../config/config.js"; -import type { ResolvedLineAccount } from "./types.js"; import { formatInboundEnvelope, resolveEnvelopeFormatOptions } from "../auto-reply/envelope.js"; import { finalizeInboundContext } from "../auto-reply/reply/inbound-context.js"; import { formatLocationText, toLocationContext } from "../channels/location.js"; +import type { OpenClawConfig } from "../config/config.js"; import { readSessionUpdatedAt, recordSessionMetaFromInbound, @@ -13,6 +12,7 @@ import { import { logVerbose, shouldLogVerbose } from "../globals.js"; import { recordChannelActivity } from "../infra/channel-activity.js"; import { resolveAgentRoute } from "../routing/resolve-route.js"; +import type { ResolvedLineAccount } from "./types.js"; interface MediaRef { path: string; diff --git a/src/line/bot.ts b/src/line/bot.ts index b78a667e19..ed0966873e 100644 --- a/src/line/bot.ts +++ b/src/line/bot.ts @@ -1,13 +1,13 @@ import type { WebhookRequestBody } from "@line/bot-sdk"; import type { Request, Response, NextFunction } from "express"; import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { LineInboundContext } from "./bot-message-context.js"; -import type { ResolvedLineAccount } from "./types.js"; import { loadConfig } from "../config/config.js"; import { logVerbose } from "../globals.js"; +import type { RuntimeEnv } from "../runtime.js"; import { resolveLineAccount } from "./accounts.js"; import { handleLineWebhookEvents } from "./bot-handlers.js"; +import type { LineInboundContext } from "./bot-message-context.js"; +import type { ResolvedLineAccount } from "./types.js"; import { startLineWebhook } from "./webhook.js"; export interface LineBotOptions { diff --git a/src/line/download.ts b/src/line/download.ts index 9219025cc4..064662d713 100644 --- a/src/line/download.ts +++ b/src/line/download.ts @@ -1,7 +1,7 @@ -import { messagingApi } from "@line/bot-sdk"; import fs from "node:fs"; import os from "node:os"; import path from "node:path"; +import { messagingApi } from "@line/bot-sdk"; import { logVerbose } from "../globals.js"; interface DownloadResult { diff --git a/src/line/flex-templates/basic-cards.ts b/src/line/flex-templates/basic-cards.ts index de1afdaa8b..d1daa4be64 100644 --- a/src/line/flex-templates/basic-cards.ts +++ b/src/line/flex-templates/basic-cards.ts @@ -1,3 +1,4 @@ +import { attachFooterText } from "./common.js"; import type { Action, CardAction, @@ -10,7 +11,6 @@ import type { FlexText, ListItem, } from "./types.js"; -import { attachFooterText } from "./common.js"; /** * Create an info card with title, body, and optional footer diff --git a/src/line/flex-templates/schedule-cards.ts b/src/line/flex-templates/schedule-cards.ts index 5de8d24405..ecea638b1f 100644 --- a/src/line/flex-templates/schedule-cards.ts +++ b/src/line/flex-templates/schedule-cards.ts @@ -1,5 +1,5 @@ -import type { Action, FlexBox, FlexBubble, FlexComponent, FlexText } from "./types.js"; import { attachFooterText } from "./common.js"; +import type { Action, FlexBox, FlexBubble, FlexComponent, FlexText } from "./types.js"; function buildTitleSubtitleHeader(params: { title: string; subtitle?: string }): FlexComponent[] { const { title, subtitle } = params; diff --git a/src/line/monitor.ts b/src/line/monitor.ts index 24572a9128..07a995c4ee 100644 --- a/src/line/monitor.ts +++ b/src/line/monitor.ts @@ -1,13 +1,12 @@ import type { WebhookRequestBody } from "@line/bot-sdk"; -import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { LineChannelData, ResolvedLineAccount } from "./types.js"; import { chunkMarkdownText } from "../auto-reply/chunk.js"; import { dispatchReplyWithBufferedBlockDispatcher } from "../auto-reply/reply/provider-dispatcher.js"; import { createReplyPrefixOptions } from "../channels/reply-prefix.js"; +import type { OpenClawConfig } from "../config/config.js"; import { danger, logVerbose } from "../globals.js"; import { normalizePluginHttpPath } from "../plugins/http-path.js"; import { registerPluginHttpRoute } from "../plugins/http-registry.js"; +import type { RuntimeEnv } from "../runtime.js"; import { deliverLineAutoReply } from "./auto-reply-delivery.js"; import { createLineBot } from "./bot.js"; import { processLineMessage } from "./markdown-to-line.js"; @@ -26,6 +25,7 @@ import { createLocationMessage, } from "./send.js"; import { buildTemplateMessageFromPayload } from "./template-messages.js"; +import type { LineChannelData, ResolvedLineAccount } from "./types.js"; import { createLineNodeWebhookHandler } from "./webhook-node.js"; export interface MonitorLineProviderOptions { diff --git a/src/line/probe.ts b/src/line/probe.ts index 0da983de46..a93d8d12ed 100644 --- a/src/line/probe.ts +++ b/src/line/probe.ts @@ -1,6 +1,6 @@ import { messagingApi } from "@line/bot-sdk"; -import type { LineProbeResult } from "./types.js"; import { withTimeout } from "../utils/with-timeout.js"; +import type { LineProbeResult } from "./types.js"; export async function probeLineBot( channelAccessToken: string, diff --git a/src/line/rich-menu.ts b/src/line/rich-menu.ts index 51363c9d8e..c693778ddf 100644 --- a/src/line/rich-menu.ts +++ b/src/line/rich-menu.ts @@ -1,5 +1,5 @@ -import { messagingApi } from "@line/bot-sdk"; import { readFile } from "node:fs/promises"; +import { messagingApi } from "@line/bot-sdk"; import { loadConfig } from "../config/config.js"; import { logVerbose } from "../globals.js"; import { resolveLineAccount } from "./accounts.js"; diff --git a/src/line/send.ts b/src/line/send.ts index 7f091f6c47..f68df9a290 100644 --- a/src/line/send.ts +++ b/src/line/send.ts @@ -1,10 +1,10 @@ import { messagingApi } from "@line/bot-sdk"; -import type { LineSendResult } from "./types.js"; import { loadConfig } from "../config/config.js"; import { logVerbose } from "../globals.js"; import { recordChannelActivity } from "../infra/channel-activity.js"; import { resolveLineAccount } from "./accounts.js"; import { resolveLineChannelAccessToken } from "./channel-access-token.js"; +import type { LineSendResult } from "./types.js"; // Use the messaging API types directly type Message = messagingApi.Message; diff --git a/src/line/webhook-node.test.ts b/src/line/webhook-node.test.ts index 5ca858b054..27b489ae67 100644 --- a/src/line/webhook-node.test.ts +++ b/src/line/webhook-node.test.ts @@ -1,5 +1,5 @@ -import type { IncomingMessage, ServerResponse } from "node:http"; import crypto from "node:crypto"; +import type { IncomingMessage, ServerResponse } from "node:http"; import { describe, expect, it, vi } from "vitest"; import { createLineNodeWebhookHandler } from "./webhook-node.js"; diff --git a/src/line/webhook-node.ts b/src/line/webhook-node.ts index 47b36bfaf1..493f00e186 100644 --- a/src/line/webhook-node.ts +++ b/src/line/webhook-node.ts @@ -1,12 +1,12 @@ -import type { WebhookRequestBody } from "@line/bot-sdk"; import type { IncomingMessage, ServerResponse } from "node:http"; -import type { RuntimeEnv } from "../runtime.js"; +import type { WebhookRequestBody } from "@line/bot-sdk"; import { danger, logVerbose } from "../globals.js"; import { isRequestBodyLimitError, readRequestBodyWithLimit, requestBodyErrorToText, } from "../infra/http-body.js"; +import type { RuntimeEnv } from "../runtime.js"; import { validateLineSignature } from "./signature.js"; import { isLineWebhookVerificationRequest, parseLineWebhookBody } from "./webhook-utils.js"; diff --git a/src/line/webhook.ts b/src/line/webhook.ts index 25c99970fe..173d247243 100644 --- a/src/line/webhook.ts +++ b/src/line/webhook.ts @@ -1,7 +1,7 @@ import type { WebhookRequestBody } from "@line/bot-sdk"; import type { Request, Response, NextFunction } from "express"; -import type { RuntimeEnv } from "../runtime.js"; import { logVerbose, danger } from "../globals.js"; +import type { RuntimeEnv } from "../runtime.js"; import { validateLineSignature } from "./signature.js"; import { isLineWebhookVerificationRequest, parseLineWebhookBody } from "./webhook-utils.js"; diff --git a/src/link-understanding/apply.ts b/src/link-understanding/apply.ts index f2bd97981d..06f3fc43ac 100644 --- a/src/link-understanding/apply.ts +++ b/src/link-understanding/apply.ts @@ -1,6 +1,6 @@ +import { finalizeInboundContext } from "../auto-reply/reply/inbound-context.js"; import type { MsgContext } from "../auto-reply/templating.js"; import type { OpenClawConfig } from "../config/config.js"; -import { finalizeInboundContext } from "../auto-reply/reply/inbound-context.js"; import { formatLinkUnderstandingBody } from "./format.js"; import { runLinkUnderstanding } from "./runner.js"; diff --git a/src/link-understanding/runner.ts b/src/link-understanding/runner.ts index f77f0f85cf..c9338af899 100644 --- a/src/link-understanding/runner.ts +++ b/src/link-understanding/runner.ts @@ -1,7 +1,7 @@ import type { MsgContext } from "../auto-reply/templating.js"; +import { applyTemplate } from "../auto-reply/templating.js"; import type { OpenClawConfig } from "../config/config.js"; import type { LinkModelConfig, LinkToolsConfig } from "../config/types.tools.js"; -import { applyTemplate } from "../auto-reply/templating.js"; import { logVerbose, shouldLogVerbose } from "../globals.js"; import { CLI_OUTPUT_MAX_BUFFER } from "../media-understanding/defaults.js"; import { resolveTimeoutMs } from "../media-understanding/resolve.js"; diff --git a/src/logger.test.ts b/src/logger.test.ts index faa5d5d97a..ccb1b2361b 100644 --- a/src/logger.test.ts +++ b/src/logger.test.ts @@ -3,7 +3,6 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import { afterEach, describe, expect, it, vi } from "vitest"; -import type { RuntimeEnv } from "./runtime.js"; import { isVerbose, isYes, logVerbose, setVerbose, setYes } from "./globals.js"; import { logDebug, logError, logInfo, logSuccess, logWarn } from "./logger.js"; import { @@ -12,6 +11,7 @@ import { setLoggerOverride, stripRedundantSubsystemPrefixForConsole, } from "./logging.js"; +import type { RuntimeEnv } from "./runtime.js"; describe("logger helpers", () => { afterEach(() => { diff --git a/src/logging.ts b/src/logging.ts index a2ebbf3373..6662e939dd 100644 --- a/src/logging.ts +++ b/src/logging.ts @@ -1,7 +1,4 @@ import type { ConsoleLoggerSettings, ConsoleStyle } from "./logging/console.js"; -import type { LogLevel } from "./logging/levels.js"; -import type { LoggerResolvedSettings, LoggerSettings, PinoLikeLogger } from "./logging/logger.js"; -import type { SubsystemLogger } from "./logging/subsystem.js"; import { enableConsoleCapture, getConsoleSettings, @@ -12,7 +9,9 @@ import { setConsoleTimestampPrefix, shouldLogSubsystemToConsole, } from "./logging/console.js"; +import type { LogLevel } from "./logging/levels.js"; import { ALLOWED_LOG_LEVELS, levelToMinLevel, normalizeLogLevel } from "./logging/levels.js"; +import type { LoggerResolvedSettings, LoggerSettings, PinoLikeLogger } from "./logging/logger.js"; import { DEFAULT_LOG_DIR, DEFAULT_LOG_FILE, @@ -24,6 +23,7 @@ import { setLoggerOverride, toPinoLikeLogger, } from "./logging/logger.js"; +import type { SubsystemLogger } from "./logging/subsystem.js"; import { createSubsystemLogger, createSubsystemRuntime, diff --git a/src/logging/config.ts b/src/logging/config.ts index a421453477..bb17b94bff 100644 --- a/src/logging/config.ts +++ b/src/logging/config.ts @@ -1,7 +1,7 @@ -import json5 from "json5"; import fs from "node:fs"; -import type { OpenClawConfig } from "../config/types.js"; +import json5 from "json5"; import { resolveConfigPath } from "../config/paths.js"; +import type { OpenClawConfig } from "../config/types.js"; type LoggingConfig = OpenClawConfig["logging"]; diff --git a/src/logging/logger.ts b/src/logging/logger.ts index b3ddd65d92..aaa1b46aff 100644 --- a/src/logging/logger.ts +++ b/src/logging/logger.ts @@ -3,9 +3,9 @@ import { createRequire } from "node:module"; import path from "node:path"; import { Logger as TsLogger } from "tslog"; import type { OpenClawConfig } from "../config/types.js"; -import type { ConsoleStyle } from "./console.js"; import { resolvePreferredOpenClawTmpDir } from "../infra/tmp-openclaw-dir.js"; import { readLoggingConfig } from "./config.js"; +import type { ConsoleStyle } from "./console.js"; import { type LogLevel, levelToMinLevel, normalizeLogLevel } from "./levels.js"; import { loggingState } from "./state.js"; diff --git a/src/logging/subsystem.ts b/src/logging/subsystem.ts index c8259a159a..088f173aa5 100644 --- a/src/logging/subsystem.ts +++ b/src/logging/subsystem.ts @@ -1,6 +1,6 @@ -import type { Logger as TsLogger } from "tslog"; -import { Chalk } from "chalk"; import { inspect } from "node:util"; +import { Chalk } from "chalk"; +import type { Logger as TsLogger } from "tslog"; import { CHAT_CHANNEL_ORDER } from "../channels/registry.js"; import { isVerbose } from "../globals.js"; import { defaultRuntime, type RuntimeEnv } from "../runtime.js"; diff --git a/src/markdown/ir.ts b/src/markdown/ir.ts index f72d472b67..17203c6972 100644 --- a/src/markdown/ir.ts +++ b/src/markdown/ir.ts @@ -1,6 +1,6 @@ import MarkdownIt from "markdown-it"; -import type { MarkdownTableMode } from "../config/types.base.js"; import { chunkText } from "../auto-reply/chunk.js"; +import type { MarkdownTableMode } from "../config/types.base.js"; type ListState = { type: "bullet" | "ordered"; diff --git a/src/media-understanding/apply.e2e.test.ts b/src/media-understanding/apply.e2e.test.ts index fd272efd23..adc7d76d48 100644 --- a/src/media-understanding/apply.e2e.test.ts +++ b/src/media-understanding/apply.e2e.test.ts @@ -2,9 +2,9 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { beforeEach, describe, expect, it, vi } from "vitest"; +import { resolveApiKeyForProvider } from "../agents/model-auth.js"; import type { MsgContext } from "../auto-reply/templating.js"; import type { OpenClawConfig } from "../config/config.js"; -import { resolveApiKeyForProvider } from "../agents/model-auth.js"; import { fetchRemoteMedia } from "../media/fetch.js"; vi.mock("../agents/model-auth.js", () => ({ diff --git a/src/media-understanding/apply.ts b/src/media-understanding/apply.ts index 712add0629..6de29873bb 100644 --- a/src/media-understanding/apply.ts +++ b/src/media-understanding/apply.ts @@ -1,13 +1,7 @@ import path from "node:path"; +import { finalizeInboundContext } from "../auto-reply/reply/inbound-context.js"; import type { MsgContext } from "../auto-reply/templating.js"; import type { OpenClawConfig } from "../config/config.js"; -import type { - MediaUnderstandingCapability, - MediaUnderstandingDecision, - MediaUnderstandingOutput, - MediaUnderstandingProvider, -} from "./types.js"; -import { finalizeInboundContext } from "../auto-reply/reply/inbound-context.js"; import { logVerbose, shouldLogVerbose } from "../globals.js"; import { extractFileContentFromSource, @@ -29,6 +23,12 @@ import { normalizeMediaAttachments, runCapability, } from "./runner.js"; +import type { + MediaUnderstandingCapability, + MediaUnderstandingDecision, + MediaUnderstandingOutput, + MediaUnderstandingProvider, +} from "./types.js"; export type ApplyMediaUnderstandingResult = { outputs: MediaUnderstandingOutput[]; diff --git a/src/media-understanding/attachments.ts b/src/media-understanding/attachments.ts index 939a55f96d..5976886a9a 100644 --- a/src/media-understanding/attachments.ts +++ b/src/media-understanding/attachments.ts @@ -5,13 +5,13 @@ import path from "node:path"; import { fileURLToPath } from "node:url"; import type { MsgContext } from "../auto-reply/templating.js"; import type { MediaUnderstandingAttachmentsConfig } from "../config/types.tools.js"; -import type { MediaAttachment, MediaUnderstandingCapability } from "./types.js"; import { logVerbose, shouldLogVerbose } from "../globals.js"; import { isAbortError } from "../infra/unhandled-rejections.js"; import { fetchRemoteMedia, MediaFetchError } from "../media/fetch.js"; import { detectMime, getFileExtension, isAudioFileName, kindFromMime } from "../media/mime.js"; import { MediaUnderstandingSkipError } from "./errors.js"; import { fetchWithTimeout } from "./providers/shared.js"; +import type { MediaAttachment, MediaUnderstandingCapability } from "./types.js"; type MediaBufferResult = { buffer: Buffer; diff --git a/src/media-understanding/audio-preflight.ts b/src/media-understanding/audio-preflight.ts index 0db4a22821..2dc5157e7c 100644 --- a/src/media-understanding/audio-preflight.ts +++ b/src/media-understanding/audio-preflight.ts @@ -1,6 +1,5 @@ import type { MsgContext } from "../auto-reply/templating.js"; import type { OpenClawConfig } from "../config/config.js"; -import type { MediaUnderstandingProvider } from "./types.js"; import { logVerbose, shouldLogVerbose } from "../globals.js"; import { isAudioAttachment } from "./attachments.js"; import { @@ -10,6 +9,7 @@ import { normalizeMediaAttachments, runCapability, } from "./runner.js"; +import type { MediaUnderstandingProvider } from "./types.js"; /** * Transcribes the first audio attachment BEFORE mention checking. diff --git a/src/media-understanding/providers/image.ts b/src/media-understanding/providers/image.ts index 371f7dc470..8cf08f5d43 100644 --- a/src/media-understanding/providers/image.ts +++ b/src/media-understanding/providers/image.ts @@ -1,11 +1,11 @@ import type { Api, Context, Model } from "@mariozechner/pi-ai"; import { complete } from "@mariozechner/pi-ai"; -import type { ImageDescriptionRequest, ImageDescriptionResult } from "../types.js"; import { minimaxUnderstandImage } from "../../agents/minimax-vlm.js"; import { getApiKeyForModel, requireApiKey } from "../../agents/model-auth.js"; import { ensureOpenClawModelsJson } from "../../agents/models-config.js"; import { discoverAuthStorage, discoverModels } from "../../agents/pi-model-discovery.js"; import { coerceImageAssistantText } from "../../agents/tools/image-tool.helpers.js"; +import type { ImageDescriptionRequest, ImageDescriptionResult } from "../types.js"; export async function describeImageWithModel( params: ImageDescriptionRequest, diff --git a/src/media-understanding/providers/index.ts b/src/media-understanding/providers/index.ts index d64e5f94c6..26e209b014 100644 --- a/src/media-understanding/providers/index.ts +++ b/src/media-understanding/providers/index.ts @@ -1,5 +1,5 @@ -import type { MediaUnderstandingProvider } from "../types.js"; import { normalizeProviderId } from "../../agents/model-selection.js"; +import type { MediaUnderstandingProvider } from "../types.js"; import { anthropicProvider } from "./anthropic/index.js"; import { deepgramProvider } from "./deepgram/index.js"; import { googleProvider } from "./google/index.js"; diff --git a/src/media-understanding/providers/shared.ts b/src/media-understanding/providers/shared.ts index beaafcf9e5..1fac7ba5b8 100644 --- a/src/media-understanding/providers/shared.ts +++ b/src/media-understanding/providers/shared.ts @@ -1,6 +1,6 @@ import type { GuardedFetchResult } from "../../infra/net/fetch-guard.js"; -import type { LookupFn, SsrFPolicy } from "../../infra/net/ssrf.js"; import { fetchWithSsrFGuard } from "../../infra/net/fetch-guard.js"; +import type { LookupFn, SsrFPolicy } from "../../infra/net/ssrf.js"; export { fetchWithTimeout } from "../../utils/fetch-timeout.js"; const MAX_ERROR_CHARS = 300; diff --git a/src/media-understanding/resolve.test.ts b/src/media-understanding/resolve.test.ts index ec43cce5ec..3f7b21c52c 100644 --- a/src/media-understanding/resolve.test.ts +++ b/src/media-understanding/resolve.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from "vitest"; import type { OpenClawConfig } from "../config/config.js"; -import type { MediaUnderstandingCapability } from "./types.js"; import { resolveEntriesWithActiveFallback, resolveModelEntries } from "./resolve.js"; +import type { MediaUnderstandingCapability } from "./types.js"; const providerRegistry = new Map([ ["openai", { capabilities: ["image"] }], diff --git a/src/media-understanding/resolve.ts b/src/media-understanding/resolve.ts index 0a05ad9eae..824f5603c9 100644 --- a/src/media-understanding/resolve.ts +++ b/src/media-understanding/resolve.ts @@ -5,7 +5,6 @@ import type { MediaUnderstandingModelConfig, MediaUnderstandingScopeConfig, } from "../config/types.tools.js"; -import type { MediaUnderstandingCapability } from "./types.js"; import { logVerbose, shouldLogVerbose } from "../globals.js"; import { DEFAULT_MAX_BYTES, @@ -15,6 +14,7 @@ import { } from "./defaults.js"; import { normalizeMediaProviderId } from "./providers/index.js"; import { normalizeMediaUnderstandingChatType, resolveMediaUnderstandingScope } from "./scope.js"; +import type { MediaUnderstandingCapability } from "./types.js"; export function resolveTimeoutMs(seconds: number | undefined, fallbackSeconds: number): number { const value = typeof seconds === "number" && Number.isFinite(seconds) ? seconds : fallbackSeconds; diff --git a/src/media-understanding/runner.entries.ts b/src/media-understanding/runner.entries.ts index 07b8f4e090..1c64cf5893 100644 --- a/src/media-understanding/runner.entries.ts +++ b/src/media-understanding/runner.entries.ts @@ -1,21 +1,14 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import { requireApiKey, resolveApiKeyForProvider } from "../agents/model-auth.js"; import type { MsgContext } from "../auto-reply/templating.js"; +import { applyTemplate } from "../auto-reply/templating.js"; import type { OpenClawConfig } from "../config/config.js"; import type { MediaUnderstandingConfig, MediaUnderstandingModelConfig, } from "../config/types.tools.js"; -import type { - MediaUnderstandingCapability, - MediaUnderstandingDecision, - MediaUnderstandingModelDecision, - MediaUnderstandingOutput, - MediaUnderstandingProvider, -} from "./types.js"; -import { requireApiKey, resolveApiKeyForProvider } from "../agents/model-auth.js"; -import { applyTemplate } from "../auto-reply/templating.js"; import { logVerbose, shouldLogVerbose } from "../globals.js"; import { runExec } from "../process/exec.js"; import { MediaAttachmentCache } from "./attachments.js"; @@ -30,6 +23,13 @@ import { extractGeminiResponse } from "./output-extract.js"; import { describeImageWithModel } from "./providers/image.js"; import { getMediaUnderstandingProvider, normalizeMediaProviderId } from "./providers/index.js"; import { resolveMaxBytes, resolveMaxChars, resolvePrompt, resolveTimeoutMs } from "./resolve.js"; +import type { + MediaUnderstandingCapability, + MediaUnderstandingDecision, + MediaUnderstandingModelDecision, + MediaUnderstandingOutput, + MediaUnderstandingProvider, +} from "./types.js"; import { estimateBase64Size, resolveVideoMaxBase64Bytes } from "./video.js"; export type ProviderRegistry = Map; diff --git a/src/media-understanding/runner.ts b/src/media-understanding/runner.ts index 2ca1ce654f..51aa8f3593 100644 --- a/src/media-understanding/runner.ts +++ b/src/media-understanding/runner.ts @@ -2,26 +2,18 @@ import { constants as fsConstants } from "node:fs"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; -import type { MsgContext } from "../auto-reply/templating.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { - MediaUnderstandingConfig, - MediaUnderstandingModelConfig, -} from "../config/types.tools.js"; -import type { - MediaAttachment, - MediaUnderstandingCapability, - MediaUnderstandingDecision, - MediaUnderstandingModelDecision, - MediaUnderstandingOutput, - MediaUnderstandingProvider, -} from "./types.js"; import { resolveApiKeyForProvider } from "../agents/model-auth.js"; import { findModelInCatalog, loadModelCatalog, modelSupportsVision, } from "../agents/model-catalog.js"; +import type { MsgContext } from "../auto-reply/templating.js"; +import type { OpenClawConfig } from "../config/config.js"; +import type { + MediaUnderstandingConfig, + MediaUnderstandingModelConfig, +} from "../config/types.tools.js"; import { logVerbose, shouldLogVerbose } from "../globals.js"; import { runExec } from "../process/exec.js"; import { MediaAttachmentCache, normalizeAttachments, selectAttachments } from "./attachments.js"; @@ -46,6 +38,14 @@ import { runCliEntry, runProviderEntry, } from "./runner.entries.js"; +import type { + MediaAttachment, + MediaUnderstandingCapability, + MediaUnderstandingDecision, + MediaUnderstandingModelDecision, + MediaUnderstandingOutput, + MediaUnderstandingProvider, +} from "./types.js"; export type ActiveMediaModel = { provider: string; diff --git a/src/media-understanding/scope.ts b/src/media-understanding/scope.ts index f0a13db280..a31031c02d 100644 --- a/src/media-understanding/scope.ts +++ b/src/media-understanding/scope.ts @@ -1,5 +1,5 @@ -import type { MediaUnderstandingScopeConfig } from "../config/types.tools.js"; import { normalizeChatType } from "../channels/chat-type.js"; +import type { MediaUnderstandingScopeConfig } from "../config/types.tools.js"; export type MediaUnderstandingScopeDecision = "allow" | "deny"; diff --git a/src/media/fetch.ts b/src/media/fetch.ts index 493f71b872..158e6d88d5 100644 --- a/src/media/fetch.ts +++ b/src/media/fetch.ts @@ -1,6 +1,6 @@ import path from "node:path"; -import type { LookupFn, SsrFPolicy } from "../infra/net/ssrf.js"; import { fetchWithSsrFGuard } from "../infra/net/fetch-guard.js"; +import type { LookupFn, SsrFPolicy } from "../infra/net/ssrf.js"; import { detectMime, extensionForMime } from "./mime.js"; import { readResponseWithLimit } from "./read-response-with-limit.js"; diff --git a/src/media/host.test.ts b/src/media/host.test.ts index c67ccea5c4..6c3d785a2e 100644 --- a/src/media/host.test.ts +++ b/src/media/host.test.ts @@ -1,5 +1,5 @@ -import type { Server } from "node:http"; import fs from "node:fs/promises"; +import type { Server } from "node:http"; import { beforeEach, describe, expect, it, vi } from "vitest"; const mocks = vi.hoisted(() => ({ diff --git a/src/media/input-files.ts b/src/media/input-files.ts index d77531e5ba..61fc067ef9 100644 --- a/src/media/input-files.ts +++ b/src/media/input-files.ts @@ -1,5 +1,5 @@ -import type { SsrFPolicy } from "../infra/net/ssrf.js"; import { fetchWithSsrFGuard } from "../infra/net/fetch-guard.js"; +import type { SsrFPolicy } from "../infra/net/ssrf.js"; import { logWarn } from "../logger.js"; import { estimateBase64DecodedBytes } from "./base64.js"; import { readResponseWithLimit } from "./read-response-with-limit.js"; diff --git a/src/media/local-roots.ts b/src/media/local-roots.ts index ec4943e878..f926aba2f2 100644 --- a/src/media/local-roots.ts +++ b/src/media/local-roots.ts @@ -1,7 +1,7 @@ import os from "node:os"; import path from "node:path"; -import type { OpenClawConfig } from "../config/config.js"; import { resolveAgentWorkspaceDir } from "../agents/agent-scope.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveStateDir } from "../config/paths.js"; function buildMediaLocalRoots(stateDir: string): string[] { diff --git a/src/media/mime.ts b/src/media/mime.ts index f3e89df0da..6a377b7dc6 100644 --- a/src/media/mime.ts +++ b/src/media/mime.ts @@ -1,5 +1,5 @@ -import { fileTypeFromBuffer } from "file-type"; import path from "node:path"; +import { fileTypeFromBuffer } from "file-type"; import { type MediaKind, mediaKindFromMime } from "./constants.js"; // Map common mimes to preferred file extensions. diff --git a/src/media/server.test.ts b/src/media/server.test.ts index ffda31f76d..b67c3a26cf 100644 --- a/src/media/server.test.ts +++ b/src/media/server.test.ts @@ -1,5 +1,5 @@ -import type { AddressInfo } from "node:net"; import fs from "node:fs/promises"; +import type { AddressInfo } from "node:net"; import os from "node:os"; import path from "node:path"; import { afterAll, beforeAll, describe, expect, it, vi } from "vitest"; diff --git a/src/media/server.ts b/src/media/server.ts index 31d956f74b..58c6e10b7c 100644 --- a/src/media/server.ts +++ b/src/media/server.ts @@ -1,6 +1,6 @@ +import fs from "node:fs/promises"; import type { Server } from "node:http"; import express, { type Express } from "express"; -import fs from "node:fs/promises"; import { danger } from "../globals.js"; import { SafeOpenError, openFileWithinRoot } from "../infra/fs-safe.js"; import { defaultRuntime, type RuntimeEnv } from "../runtime.js"; diff --git a/src/media/store.redirect.test.ts b/src/media/store.redirect.test.ts index c7305e783f..e236c4f903 100644 --- a/src/media/store.redirect.test.ts +++ b/src/media/store.redirect.test.ts @@ -1,8 +1,8 @@ -import JSZip from "jszip"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { PassThrough } from "node:stream"; +import JSZip from "jszip"; import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { createPinnedLookup } from "../infra/net/ssrf.js"; import { captureEnv } from "../test-utils/env.js"; diff --git a/src/media/store.test.ts b/src/media/store.test.ts index 8c611550d0..dbdc226bac 100644 --- a/src/media/store.test.ts +++ b/src/media/store.test.ts @@ -1,7 +1,7 @@ -import JSZip from "jszip"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import JSZip from "jszip"; import sharp from "sharp"; import { afterAll, beforeAll, describe, expect, it, vi } from "vitest"; import { isPathWithinBase } from "../../test/helpers/paths.js"; diff --git a/src/memory/backend-config.test.ts b/src/memory/backend-config.test.ts index 42385a1224..61fa62f931 100644 --- a/src/memory/backend-config.test.ts +++ b/src/memory/backend-config.test.ts @@ -1,7 +1,7 @@ import path from "node:path"; import { describe, expect, it } from "vitest"; -import type { OpenClawConfig } from "../config/config.js"; import { resolveAgentWorkspaceDir } from "../agents/agent-scope.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveMemoryBackendConfig } from "./backend-config.js"; describe("resolveMemoryBackendConfig", () => { diff --git a/src/memory/backend-config.ts b/src/memory/backend-config.ts index d632f4e8cb..02573f3a54 100644 --- a/src/memory/backend-config.ts +++ b/src/memory/backend-config.ts @@ -1,4 +1,6 @@ import path from "node:path"; +import { resolveAgentWorkspaceDir } from "../agents/agent-scope.js"; +import { parseDurationMs } from "../cli/parse-duration.js"; import type { OpenClawConfig } from "../config/config.js"; import type { SessionSendPolicyConfig } from "../config/types.base.js"; import type { @@ -8,8 +10,6 @@ import type { MemoryQmdIndexPath, MemoryQmdSearchMode, } from "../config/types.memory.js"; -import { resolveAgentWorkspaceDir } from "../agents/agent-scope.js"; -import { parseDurationMs } from "../cli/parse-duration.js"; import { resolveUserPath } from "../utils.js"; import { splitShellArgs } from "../utils/shell-argv.js"; diff --git a/src/memory/batch-gemini.ts b/src/memory/batch-gemini.ts index cb7df35f61..19a4f69faa 100644 --- a/src/memory/batch-gemini.ts +++ b/src/memory/batch-gemini.ts @@ -1,7 +1,7 @@ -import type { GeminiEmbeddingClient } from "./embeddings-gemini.js"; import { runEmbeddingBatchGroups } from "./batch-runner.js"; import { buildBatchHeaders, normalizeBatchBaseUrl } from "./batch-utils.js"; import { debugEmbeddingsLog } from "./embeddings-debug.js"; +import type { GeminiEmbeddingClient } from "./embeddings-gemini.js"; import { hashText } from "./internal.js"; export type GeminiBatchRequest = { diff --git a/src/memory/batch-openai.ts b/src/memory/batch-openai.ts index 80716b1b3c..0f4a347549 100644 --- a/src/memory/batch-openai.ts +++ b/src/memory/batch-openai.ts @@ -1,10 +1,10 @@ -import type { OpenAiEmbeddingClient } from "./embeddings-openai.js"; import { extractBatchErrorMessage, formatUnavailableBatchError } from "./batch-error-utils.js"; import { postJsonWithRetry } from "./batch-http.js"; import { applyEmbeddingBatchOutputLine } from "./batch-output.js"; import { runEmbeddingBatchGroups } from "./batch-runner.js"; import { uploadBatchJsonlFile } from "./batch-upload.js"; import { buildBatchHeaders, normalizeBatchBaseUrl } from "./batch-utils.js"; +import type { OpenAiEmbeddingClient } from "./embeddings-openai.js"; export type OpenAiBatchRequest = { custom_id: string; diff --git a/src/memory/batch-voyage.ts b/src/memory/batch-voyage.ts index 8919c6fa41..e1f4c4df90 100644 --- a/src/memory/batch-voyage.ts +++ b/src/memory/batch-voyage.ts @@ -1,12 +1,12 @@ import { createInterface } from "node:readline"; import { Readable } from "node:stream"; -import type { VoyageEmbeddingClient } from "./embeddings-voyage.js"; import { extractBatchErrorMessage, formatUnavailableBatchError } from "./batch-error-utils.js"; import { postJsonWithRetry } from "./batch-http.js"; import { applyEmbeddingBatchOutputLine } from "./batch-output.js"; import { runEmbeddingBatchGroups } from "./batch-runner.js"; import { uploadBatchJsonlFile } from "./batch-upload.js"; import { buildBatchHeaders, normalizeBatchBaseUrl } from "./batch-utils.js"; +import type { VoyageEmbeddingClient } from "./embeddings-voyage.js"; /** * Voyage Batch API Input Line format. diff --git a/src/memory/embedding-chunk-limits.test.ts b/src/memory/embedding-chunk-limits.test.ts index 9785693ee7..83c4a26d34 100644 --- a/src/memory/embedding-chunk-limits.test.ts +++ b/src/memory/embedding-chunk-limits.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from "vitest"; -import type { EmbeddingProvider } from "./embeddings.js"; import { enforceEmbeddingMaxInputTokens } from "./embedding-chunk-limits.js"; import { estimateUtf8Bytes } from "./embedding-input-limits.js"; +import type { EmbeddingProvider } from "./embeddings.js"; function createProvider(maxInputTokens: number): EmbeddingProvider { return { diff --git a/src/memory/embedding-chunk-limits.ts b/src/memory/embedding-chunk-limits.ts index 74b1637bd2..3f83285530 100644 --- a/src/memory/embedding-chunk-limits.ts +++ b/src/memory/embedding-chunk-limits.ts @@ -1,6 +1,6 @@ -import type { EmbeddingProvider } from "./embeddings.js"; import { estimateUtf8Bytes, splitTextToUtf8ByteLimit } from "./embedding-input-limits.js"; import { resolveEmbeddingMaxInputTokens } from "./embedding-model-limits.js"; +import type { EmbeddingProvider } from "./embeddings.js"; import { hashText, type MemoryChunk } from "./internal.js"; export function enforceEmbeddingMaxInputTokens( diff --git a/src/memory/embeddings-gemini.ts b/src/memory/embeddings-gemini.ts index 29afb2d9fb..c9a325e54d 100644 --- a/src/memory/embeddings-gemini.ts +++ b/src/memory/embeddings-gemini.ts @@ -1,7 +1,7 @@ -import type { EmbeddingProvider, EmbeddingProviderOptions } from "./embeddings.js"; import { requireApiKey, resolveApiKeyForProvider } from "../agents/model-auth.js"; import { parseGeminiAuth } from "../infra/gemini-auth.js"; import { debugEmbeddingsLog } from "./embeddings-debug.js"; +import type { EmbeddingProvider, EmbeddingProviderOptions } from "./embeddings.js"; export type GeminiEmbeddingClient = { baseUrl: string; diff --git a/src/memory/embeddings-openai.ts b/src/memory/embeddings-openai.ts index 806d5f3358..b319fbcd2b 100644 --- a/src/memory/embeddings-openai.ts +++ b/src/memory/embeddings-openai.ts @@ -1,6 +1,6 @@ -import type { EmbeddingProvider, EmbeddingProviderOptions } from "./embeddings.js"; import { resolveRemoteEmbeddingBearerClient } from "./embeddings-remote-client.js"; import { fetchRemoteEmbeddingVectors } from "./embeddings-remote-fetch.js"; +import type { EmbeddingProvider, EmbeddingProviderOptions } from "./embeddings.js"; export type OpenAiEmbeddingClient = { baseUrl: string; diff --git a/src/memory/embeddings-remote-client.ts b/src/memory/embeddings-remote-client.ts index cc1ce5d51e..dc99717e7b 100644 --- a/src/memory/embeddings-remote-client.ts +++ b/src/memory/embeddings-remote-client.ts @@ -1,5 +1,5 @@ -import type { EmbeddingProviderOptions } from "./embeddings.js"; import { requireApiKey, resolveApiKeyForProvider } from "../agents/model-auth.js"; +import type { EmbeddingProviderOptions } from "./embeddings.js"; type RemoteEmbeddingProviderId = "openai" | "voyage"; diff --git a/src/memory/embeddings-voyage.ts b/src/memory/embeddings-voyage.ts index 1a685608f2..faf82c5f11 100644 --- a/src/memory/embeddings-voyage.ts +++ b/src/memory/embeddings-voyage.ts @@ -1,6 +1,6 @@ -import type { EmbeddingProvider, EmbeddingProviderOptions } from "./embeddings.js"; import { resolveRemoteEmbeddingBearerClient } from "./embeddings-remote-client.js"; import { fetchRemoteEmbeddingVectors } from "./embeddings-remote-fetch.js"; +import type { EmbeddingProvider, EmbeddingProviderOptions } from "./embeddings.js"; export type VoyageEmbeddingClient = { baseUrl: string; diff --git a/src/memory/embeddings.ts b/src/memory/embeddings.ts index 925210968e..fc60218931 100644 --- a/src/memory/embeddings.ts +++ b/src/memory/embeddings.ts @@ -1,5 +1,5 @@ -import type { Llama, LlamaEmbeddingContext, LlamaModel } from "node-llama-cpp"; import fsSync from "node:fs"; +import type { Llama, LlamaEmbeddingContext, LlamaModel } from "node-llama-cpp"; import type { OpenClawConfig } from "../config/config.js"; import { formatErrorMessage } from "../infra/errors.js"; import { resolveUserPath } from "../utils.js"; diff --git a/src/memory/manager-embedding-ops.ts b/src/memory/manager-embedding-ops.ts index 2b9c67ea48..45ebd5626c 100644 --- a/src/memory/manager-embedding-ops.ts +++ b/src/memory/manager-embedding-ops.ts @@ -1,6 +1,4 @@ import fs from "node:fs/promises"; -import type { SessionFileEntry } from "./session-files.js"; -import type { MemorySource } from "./types.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { runGeminiEmbeddingBatches, type GeminiBatchRequest } from "./batch-gemini.js"; import { @@ -20,6 +18,8 @@ import { type MemoryFileEntry, } from "./internal.js"; import { MemoryManagerSyncOps } from "./manager-sync-ops.js"; +import type { SessionFileEntry } from "./session-files.js"; +import type { MemorySource } from "./types.js"; const VECTOR_TABLE = "chunks_vec"; const FTS_TABLE = "chunks_fts"; diff --git a/src/memory/manager-sync-ops.ts b/src/memory/manager-sync-ops.ts index 489c6e3503..c5c1d71a2e 100644 --- a/src/memory/manager-sync-ops.ts +++ b/src/memory/manager-sync-ops.ts @@ -1,11 +1,9 @@ -import type { DatabaseSync } from "node:sqlite"; -import chokidar, { FSWatcher } from "chokidar"; import { randomUUID } from "node:crypto"; import fsSync from "node:fs"; import fs from "node:fs/promises"; import path from "node:path"; -import type { SessionFileEntry } from "./session-files.js"; -import type { MemorySource, MemorySyncProgressUpdate } from "./types.js"; +import type { DatabaseSync } from "node:sqlite"; +import chokidar, { FSWatcher } from "chokidar"; import { resolveAgentDir } from "../agents/agent-scope.js"; import { ResolvedMemorySearchConfig } from "../agents/memory-search.js"; import { type OpenClawConfig } from "../config/config.js"; @@ -32,6 +30,7 @@ import { } from "./internal.js"; import { type MemoryFileEntry } from "./internal.js"; import { ensureMemoryIndexSchema } from "./memory-schema.js"; +import type { SessionFileEntry } from "./session-files.js"; import { buildSessionEntry, listSessionFilesForAgent, @@ -39,6 +38,7 @@ import { } from "./session-files.js"; import { loadSqliteVecExtension } from "./sqlite-vec.js"; import { requireNodeSqlite } from "./sqlite.js"; +import type { MemorySource, MemorySyncProgressUpdate } from "./types.js"; type MemoryIndexMeta = { model: string; diff --git a/src/memory/manager.atomic-reindex.test.ts b/src/memory/manager.atomic-reindex.test.ts index e69e520da6..36f4f2e298 100644 --- a/src/memory/manager.atomic-reindex.test.ts +++ b/src/memory/manager.atomic-reindex.test.ts @@ -2,8 +2,8 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import type { MemoryIndexManager } from "./index.js"; import { getEmbedBatchMock, resetEmbeddingMocks } from "./embedding.test-mocks.js"; +import type { MemoryIndexManager } from "./index.js"; import { getRequiredMemoryIndexManager } from "./test-manager-helpers.js"; let shouldFail = false; diff --git a/src/memory/manager.sync-errors-do-not-crash.test.ts b/src/memory/manager.sync-errors-do-not-crash.test.ts index 4103521ca9..103be8a1ab 100644 --- a/src/memory/manager.sync-errors-do-not-crash.test.ts +++ b/src/memory/manager.sync-errors-do-not-crash.test.ts @@ -2,8 +2,8 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import type { MemoryIndexManager } from "./index.js"; import { getEmbedBatchMock, resetEmbeddingMocks } from "./embedding.test-mocks.js"; +import type { MemoryIndexManager } from "./index.js"; import { getRequiredMemoryIndexManager } from "./test-manager-helpers.js"; describe("memory manager sync failures", () => { diff --git a/src/memory/manager.ts b/src/memory/manager.ts index 88253c085f..a0124e1b72 100644 --- a/src/memory/manager.ts +++ b/src/memory/manager.ts @@ -1,19 +1,11 @@ -import type { DatabaseSync } from "node:sqlite"; -import { type FSWatcher } from "chokidar"; import fs from "node:fs/promises"; import path from "node:path"; -import type { ResolvedMemorySearchConfig } from "../agents/memory-search.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { - MemoryEmbeddingProbeResult, - MemoryProviderStatus, - MemorySearchManager, - MemorySearchResult, - MemorySource, - MemorySyncProgressUpdate, -} from "./types.js"; +import type { DatabaseSync } from "node:sqlite"; +import { type FSWatcher } from "chokidar"; import { resolveAgentDir, resolveAgentWorkspaceDir } from "../agents/agent-scope.js"; +import type { ResolvedMemorySearchConfig } from "../agents/memory-search.js"; import { resolveMemorySearchConfig } from "../agents/memory-search.js"; +import type { OpenClawConfig } from "../config/config.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { createEmbeddingProvider, @@ -28,6 +20,14 @@ import { isMemoryPath, normalizeExtraMemoryPaths } from "./internal.js"; import { MemoryManagerEmbeddingOps } from "./manager-embedding-ops.js"; import { searchKeyword, searchVector } from "./manager-search.js"; import { extractKeywords } from "./query-expansion.js"; +import type { + MemoryEmbeddingProbeResult, + MemoryProviderStatus, + MemorySearchManager, + MemorySearchResult, + MemorySource, + MemorySyncProgressUpdate, +} from "./types.js"; const SNIPPET_MAX_CHARS = 700; const VECTOR_TABLE = "chunks_vec"; const FTS_TABLE = "chunks_fts"; diff --git a/src/memory/qmd-manager.test.ts b/src/memory/qmd-manager.test.ts index 83c896432b..1168718c9a 100644 --- a/src/memory/qmd-manager.test.ts +++ b/src/memory/qmd-manager.test.ts @@ -1,8 +1,8 @@ -import type { Mock } from "vitest"; import { EventEmitter } from "node:events"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import type { Mock } from "vitest"; import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; const { logWarnMock, logDebugMock, logInfoMock } = vi.hoisted(() => ({ diff --git a/src/memory/qmd-manager.ts b/src/memory/qmd-manager.ts index 3353b18d3e..380f4175c9 100644 --- a/src/memory/qmd-manager.ts +++ b/src/memory/qmd-manager.ts @@ -3,16 +3,8 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import readline from "node:readline"; -import type { OpenClawConfig } from "../config/config.js"; -import type { - MemoryEmbeddingProbeResult, - MemoryProviderStatus, - MemorySearchManager, - MemorySearchResult, - MemorySource, - MemorySyncProgressUpdate, -} from "./types.js"; import { resolveAgentWorkspaceDir } from "../agents/agent-scope.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveStateDir } from "../config/paths.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { deriveQmdScopeChannel, deriveQmdScopeChatType, isQmdScopeAllowed } from "./qmd-scope.js"; @@ -22,6 +14,14 @@ import { type SessionFileEntry, } from "./session-files.js"; import { requireNodeSqlite } from "./sqlite.js"; +import type { + MemoryEmbeddingProbeResult, + MemoryProviderStatus, + MemorySearchManager, + MemorySearchResult, + MemorySource, + MemorySyncProgressUpdate, +} from "./types.js"; type SqliteDatabase = import("node:sqlite").DatabaseSync; import type { ResolvedMemoryBackendConfig, ResolvedQmdConfig } from "./backend-config.js"; diff --git a/src/memory/qmd-scope.ts b/src/memory/qmd-scope.ts index 050a7fa7e8..ac28959db4 100644 --- a/src/memory/qmd-scope.ts +++ b/src/memory/qmd-scope.ts @@ -1,5 +1,5 @@ -import type { ResolvedQmdConfig } from "./backend-config.js"; import { parseAgentSessionKey } from "../sessions/session-key-utils.js"; +import type { ResolvedQmdConfig } from "./backend-config.js"; type ParsedQmdSessionScope = { channel?: string; diff --git a/src/memory/search-manager.ts b/src/memory/search-manager.ts index 9b8278e2df..95b23379e5 100644 --- a/src/memory/search-manager.ts +++ b/src/memory/search-manager.ts @@ -1,12 +1,12 @@ import type { OpenClawConfig } from "../config/config.js"; +import { createSubsystemLogger } from "../logging/subsystem.js"; import type { ResolvedQmdConfig } from "./backend-config.js"; +import { resolveMemoryBackendConfig } from "./backend-config.js"; import type { MemoryEmbeddingProbeResult, MemorySearchManager, MemorySyncProgressUpdate, } from "./types.js"; -import { createSubsystemLogger } from "../logging/subsystem.js"; -import { resolveMemoryBackendConfig } from "./backend-config.js"; const log = createSubsystemLogger("memory"); const QMD_MANAGER_CACHE = new Map(); diff --git a/src/memory/sync-memory-files.ts b/src/memory/sync-memory-files.ts index eee354bb6c..182bae6d0d 100644 --- a/src/memory/sync-memory-files.ts +++ b/src/memory/sync-memory-files.ts @@ -1,8 +1,8 @@ import type { DatabaseSync } from "node:sqlite"; -import type { SyncProgressState } from "./sync-progress.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { buildFileEntry, listMemoryFiles, type MemoryFileEntry } from "./internal.js"; import { indexFileEntryIfChanged } from "./sync-index.js"; +import type { SyncProgressState } from "./sync-progress.js"; import { bumpSyncProgressTotal } from "./sync-progress.js"; import { deleteStaleIndexedPaths } from "./sync-stale.js"; diff --git a/src/memory/sync-session-files.ts b/src/memory/sync-session-files.ts index d0c7883b61..16c670abc2 100644 --- a/src/memory/sync-session-files.ts +++ b/src/memory/sync-session-files.ts @@ -1,13 +1,13 @@ import type { DatabaseSync } from "node:sqlite"; -import type { SessionFileEntry } from "./session-files.js"; -import type { SyncProgressState } from "./sync-progress.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; +import type { SessionFileEntry } from "./session-files.js"; import { buildSessionEntry, listSessionFilesForAgent, sessionPathForFile, } from "./session-files.js"; import { indexFileEntryIfChanged } from "./sync-index.js"; +import type { SyncProgressState } from "./sync-progress.js"; import { bumpSyncProgressCompleted, bumpSyncProgressTotal } from "./sync-progress.js"; import { deleteStaleIndexedPaths } from "./sync-stale.js"; diff --git a/src/pairing/pairing-labels.ts b/src/pairing/pairing-labels.ts index b230cd2d38..a7a5145434 100644 --- a/src/pairing/pairing-labels.ts +++ b/src/pairing/pairing-labels.ts @@ -1,5 +1,5 @@ -import type { PairingChannel } from "./pairing-store.js"; import { getPairingAdapter } from "../channels/plugins/pairing.js"; +import type { PairingChannel } from "./pairing-store.js"; export function resolvePairingIdLabel(channel: PairingChannel): string { return getPairingAdapter(channel)?.idLabel ?? "userId"; diff --git a/src/pairing/pairing-messages.ts b/src/pairing/pairing-messages.ts index bff3384ac4..edcce20348 100644 --- a/src/pairing/pairing-messages.ts +++ b/src/pairing/pairing-messages.ts @@ -1,5 +1,5 @@ -import type { PairingChannel } from "./pairing-store.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { PairingChannel } from "./pairing-store.js"; export function buildPairingReply(params: { channel: PairingChannel; diff --git a/src/pairing/pairing-store.ts b/src/pairing/pairing-store.ts index 4b72bc5847..fcf9a4f0ce 100644 --- a/src/pairing/pairing-store.ts +++ b/src/pairing/pairing-store.ts @@ -2,8 +2,8 @@ import crypto from "node:crypto"; import fs from "node:fs"; import os from "node:os"; import path from "node:path"; -import type { ChannelId, ChannelPairingAdapter } from "../channels/plugins/types.js"; import { getPairingAdapter } from "../channels/plugins/pairing.js"; +import type { ChannelId, ChannelPairingAdapter } from "../channels/plugins/types.js"; import { resolveOAuthDir, resolveStateDir } from "../config/paths.js"; import { withFileLock as withPathLock } from "../infra/file-lock.js"; import { resolveRequiredHomeDir } from "../infra/home-dir.js"; diff --git a/src/plugin-sdk/onboarding.ts b/src/plugin-sdk/onboarding.ts index 16782faa3a..0752243124 100644 --- a/src/plugin-sdk/onboarding.ts +++ b/src/plugin-sdk/onboarding.ts @@ -1,6 +1,6 @@ import type { OpenClawConfig } from "../config/config.js"; -import type { WizardPrompter } from "../wizard/prompts.js"; import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../routing/session-key.js"; +import type { WizardPrompter } from "../wizard/prompts.js"; export type PromptAccountIdParams = { cfg: OpenClawConfig; diff --git a/src/plugin-sdk/slack-message-actions.ts b/src/plugin-sdk/slack-message-actions.ts index d5a757b80d..77b24b9586 100644 --- a/src/plugin-sdk/slack-message-actions.ts +++ b/src/plugin-sdk/slack-message-actions.ts @@ -1,6 +1,6 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; -import type { ChannelMessageActionContext } from "../channels/plugins/types.js"; import { readNumberParam, readStringParam } from "../agents/tools/common.js"; +import type { ChannelMessageActionContext } from "../channels/plugins/types.js"; import { parseSlackBlocksInput } from "../slack/blocks-input.js"; type SlackActionInvoke = ( diff --git a/src/plugins/cli.ts b/src/plugins/cli.ts index fe13718554..c96eeca4d5 100644 --- a/src/plugins/cli.ts +++ b/src/plugins/cli.ts @@ -1,10 +1,10 @@ import type { Command } from "commander"; -import type { OpenClawConfig } from "../config/config.js"; -import type { PluginLogger } from "./types.js"; import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js"; +import type { OpenClawConfig } from "../config/config.js"; import { loadConfig } from "../config/config.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { loadOpenClawPlugins } from "./loader.js"; +import type { PluginLogger } from "./types.js"; const log = createSubsystemLogger("plugins"); diff --git a/src/plugins/commands.ts b/src/plugins/commands.ts index 7c332dd09a..d8ed49ce64 100644 --- a/src/plugins/commands.ts +++ b/src/plugins/commands.ts @@ -6,12 +6,12 @@ */ import type { OpenClawConfig } from "../config/config.js"; +import { logVerbose } from "../globals.js"; import type { OpenClawPluginCommandDefinition, PluginCommandContext, PluginCommandResult, } from "./types.js"; -import { logVerbose } from "../globals.js"; type RegisteredPluginCommand = OpenClawPluginCommandDefinition & { pluginId: string; diff --git a/src/plugins/discovery.ts b/src/plugins/discovery.ts index fd9ca62c27..02b10ade64 100644 --- a/src/plugins/discovery.ts +++ b/src/plugins/discovery.ts @@ -1,6 +1,5 @@ import fs from "node:fs"; import path from "node:path"; -import type { PluginDiagnostic, PluginOrigin } from "./types.js"; import { resolveConfigDir, resolveUserPath } from "../utils.js"; import { resolveBundledPluginsDir } from "./bundled-dir.js"; import { @@ -8,6 +7,7 @@ import { type OpenClawPackageManifest, type PackageManifest, } from "./manifest.js"; +import type { PluginDiagnostic, PluginOrigin } from "./types.js"; const EXTENSION_EXTS = new Set([".ts", ".js", ".mts", ".cts", ".mjs", ".cjs"]); diff --git a/src/plugins/hook-runner-global.ts b/src/plugins/hook-runner-global.ts index 38e2a57ae9..609721fcb4 100644 --- a/src/plugins/hook-runner-global.ts +++ b/src/plugins/hook-runner-global.ts @@ -5,10 +5,10 @@ * and can be called from anywhere in the codebase. */ -import type { PluginRegistry } from "./registry.js"; -import type { PluginHookGatewayContext, PluginHookGatewayStopEvent } from "./types.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { createHookRunner, type HookRunner } from "./hooks.js"; +import type { PluginRegistry } from "./registry.js"; +import type { PluginHookGatewayContext, PluginHookGatewayStopEvent } from "./types.js"; const log = createSubsystemLogger("plugins"); diff --git a/src/plugins/hooks.before-agent-start.test.ts b/src/plugins/hooks.before-agent-start.test.ts index fc0eb31888..19a7612118 100644 --- a/src/plugins/hooks.before-agent-start.test.ts +++ b/src/plugins/hooks.before-agent-start.test.ts @@ -6,9 +6,9 @@ * backward compatibility. */ import { beforeEach, describe, expect, it } from "vitest"; -import type { PluginHookBeforeAgentStartResult, TypedPluginHookRegistration } from "./types.js"; import { createHookRunner } from "./hooks.js"; import { createEmptyPluginRegistry, type PluginRegistry } from "./registry.js"; +import type { PluginHookBeforeAgentStartResult, TypedPluginHookRegistration } from "./types.js"; function addBeforeAgentStartHook( registry: PluginRegistry, diff --git a/src/plugins/hooks.model-override-wiring.test.ts b/src/plugins/hooks.model-override-wiring.test.ts index 901e0c9d93..1ebe6bb2be 100644 --- a/src/plugins/hooks.model-override-wiring.test.ts +++ b/src/plugins/hooks.model-override-wiring.test.ts @@ -7,6 +7,8 @@ * 3. before_agent_start remains a legacy compatibility fallback */ import { beforeEach, describe, expect, it, vi } from "vitest"; +import { createHookRunner } from "./hooks.js"; +import { createEmptyPluginRegistry, type PluginRegistry } from "./registry.js"; import type { PluginHookAgentContext, PluginHookBeforeAgentStartResult, @@ -16,8 +18,6 @@ import type { PluginHookBeforePromptBuildResult, TypedPluginHookRegistration, } from "./types.js"; -import { createHookRunner } from "./hooks.js"; -import { createEmptyPluginRegistry, type PluginRegistry } from "./registry.js"; function addBeforeModelResolveHook( registry: PluginRegistry, diff --git a/src/plugins/hooks.phase-hooks.test.ts b/src/plugins/hooks.phase-hooks.test.ts index 9dcafd917f..a75c5ac334 100644 --- a/src/plugins/hooks.phase-hooks.test.ts +++ b/src/plugins/hooks.phase-hooks.test.ts @@ -1,11 +1,11 @@ import { beforeEach, describe, expect, it } from "vitest"; +import { createHookRunner } from "./hooks.js"; +import { createEmptyPluginRegistry, type PluginRegistry } from "./registry.js"; import type { PluginHookBeforeModelResolveResult, PluginHookBeforePromptBuildResult, TypedPluginHookRegistration, } from "./types.js"; -import { createHookRunner } from "./hooks.js"; -import { createEmptyPluginRegistry, type PluginRegistry } from "./registry.js"; function addTypedHook( registry: PluginRegistry, diff --git a/src/plugins/http-registry.ts b/src/plugins/http-registry.ts index 4234d3c2b7..5e2df3b522 100644 --- a/src/plugins/http-registry.ts +++ b/src/plugins/http-registry.ts @@ -1,6 +1,6 @@ import type { IncomingMessage, ServerResponse } from "node:http"; -import type { PluginHttpRouteRegistration, PluginRegistry } from "./registry.js"; import { normalizePluginHttpPath } from "./http-path.js"; +import type { PluginHttpRouteRegistration, PluginRegistry } from "./registry.js"; import { requireActivePluginRegistry } from "./runtime.js"; export type PluginHttpRouteHandler = ( diff --git a/src/plugins/install.e2e.test.ts b/src/plugins/install.e2e.test.ts index ef894e0f11..d93703b8d7 100644 --- a/src/plugins/install.e2e.test.ts +++ b/src/plugins/install.e2e.test.ts @@ -1,8 +1,8 @@ -import JSZip from "jszip"; import { randomUUID } from "node:crypto"; import fs from "node:fs"; import os from "node:os"; import path from "node:path"; +import JSZip from "jszip"; import * as tar from "tar"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import * as skillScanner from "../security/skill-scanner.js"; diff --git a/src/plugins/loader.ts b/src/plugins/loader.ts index 1d16939b8a..3060b3daab 100644 --- a/src/plugins/loader.ts +++ b/src/plugins/loader.ts @@ -1,15 +1,9 @@ -import { createJiti } from "jiti"; import fs from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; +import { createJiti } from "jiti"; import type { OpenClawConfig } from "../config/config.js"; import type { GatewayRequestHandler } from "../gateway/server-methods/types.js"; -import type { - OpenClawPluginDefinition, - OpenClawPluginModule, - PluginDiagnostic, - PluginLogger, -} from "./types.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { resolveUserPath } from "../utils.js"; import { clearPluginCommands } from "./commands.js"; @@ -27,6 +21,12 @@ import { createPluginRegistry, type PluginRecord, type PluginRegistry } from "./ import { setActivePluginRegistry } from "./runtime.js"; import { createPluginRuntime } from "./runtime/index.js"; import { validateJsonSchemaValue } from "./schema-validator.js"; +import type { + OpenClawPluginDefinition, + OpenClawPluginModule, + PluginDiagnostic, + PluginLogger, +} from "./types.js"; export type PluginLoadResult = PluginRegistry; diff --git a/src/plugins/manifest-registry.ts b/src/plugins/manifest-registry.ts index fce573bafd..8929a664f4 100644 --- a/src/plugins/manifest-registry.ts +++ b/src/plugins/manifest-registry.ts @@ -1,10 +1,10 @@ import fs from "node:fs"; import type { OpenClawConfig } from "../config/config.js"; -import type { PluginConfigUiHint, PluginDiagnostic, PluginKind, PluginOrigin } from "./types.js"; import { resolveUserPath } from "../utils.js"; import { normalizePluginsConfig, type NormalizedPluginsConfig } from "./config-state.js"; import { discoverOpenClawPlugins, type PluginCandidate } from "./discovery.js"; import { loadPluginManifest, type PluginManifest } from "./manifest.js"; +import type { PluginConfigUiHint, PluginDiagnostic, PluginKind, PluginOrigin } from "./types.js"; type SeenIdEntry = { candidate: PluginCandidate; diff --git a/src/plugins/manifest.ts b/src/plugins/manifest.ts index ed76e188b4..7840733f10 100644 --- a/src/plugins/manifest.ts +++ b/src/plugins/manifest.ts @@ -1,8 +1,8 @@ import fs from "node:fs"; import path from "node:path"; -import type { PluginConfigUiHint, PluginKind } from "./types.js"; import { MANIFEST_KEY } from "../compat/legacy-names.js"; import { isRecord } from "../utils.js"; +import type { PluginConfigUiHint, PluginKind } from "./types.js"; export const PLUGIN_MANIFEST_FILENAME = "openclaw.plugin.json"; export const PLUGIN_MANIFEST_FILENAMES = [PLUGIN_MANIFEST_FILENAME] as const; diff --git a/src/plugins/providers.ts b/src/plugins/providers.ts index 0236a5d4d9..7ab2d1848e 100644 --- a/src/plugins/providers.ts +++ b/src/plugins/providers.ts @@ -1,6 +1,6 @@ -import type { ProviderPlugin } from "./types.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { loadOpenClawPlugins, type PluginLoadOptions } from "./loader.js"; +import type { ProviderPlugin } from "./types.js"; const log = createSubsystemLogger("plugins"); diff --git a/src/plugins/registry.ts b/src/plugins/registry.ts index 29f2f87aa8..cf709c5713 100644 --- a/src/plugins/registry.ts +++ b/src/plugins/registry.ts @@ -6,7 +6,11 @@ import type { GatewayRequestHandler, GatewayRequestHandlers, } from "../gateway/server-methods/types.js"; +import { registerInternalHook } from "../hooks/internal-hooks.js"; import type { HookEntry } from "../hooks/types.js"; +import { resolveUserPath } from "../utils.js"; +import { registerPluginCommand } from "./commands.js"; +import { normalizePluginHttpPath } from "./http-path.js"; import type { PluginRuntime } from "./runtime/types.js"; import type { OpenClawPluginApi, @@ -29,10 +33,6 @@ import type { PluginHookHandlerMap, PluginHookRegistration as TypedPluginHookRegistration, } from "./types.js"; -import { registerInternalHook } from "../hooks/internal-hooks.js"; -import { resolveUserPath } from "../utils.js"; -import { registerPluginCommand } from "./commands.js"; -import { normalizePluginHttpPath } from "./http-path.js"; export type PluginToolRegistration = { pluginId: string; diff --git a/src/plugins/runtime/index.ts b/src/plugins/runtime/index.ts index d5abe65600..e36b8f7286 100644 --- a/src/plugins/runtime/index.ts +++ b/src/plugins/runtime/index.ts @@ -1,5 +1,4 @@ import { createRequire } from "node:module"; -import type { PluginRuntime } from "./types.js"; import { resolveEffectiveMessagesConfig, resolveHumanDelayConfig } from "../../agents/identity.js"; import { createMemoryGetTool, createMemorySearchTool } from "../../agents/tools/memory-tool.js"; import { handleSlackAction } from "../../agents/tools/slack-actions.js"; @@ -139,6 +138,7 @@ import { } from "../../web/auth-store.js"; import { loadWebMedia } from "../../web/media.js"; import { formatNativeDependencyHint } from "./native-deps.js"; +import type { PluginRuntime } from "./types.js"; let cachedVersion: string | null = null; diff --git a/src/plugins/services.ts b/src/plugins/services.ts index 09e96634c7..8c71300c20 100644 --- a/src/plugins/services.ts +++ b/src/plugins/services.ts @@ -1,7 +1,7 @@ import type { OpenClawConfig } from "../config/config.js"; -import type { PluginRegistry } from "./registry.js"; import { STATE_DIR } from "../config/paths.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; +import type { PluginRegistry } from "./registry.js"; const log = createSubsystemLogger("plugins"); diff --git a/src/plugins/source-display.ts b/src/plugins/source-display.ts index 582f880c7f..c6bad9f3fe 100644 --- a/src/plugins/source-display.ts +++ b/src/plugins/source-display.ts @@ -1,7 +1,7 @@ import path from "node:path"; -import type { PluginRecord } from "./registry.js"; import { resolveConfigDir, shortenHomeInString } from "../utils.js"; import { resolveBundledPluginsDir } from "./bundled-dir.js"; +import type { PluginRecord } from "./registry.js"; export type PluginSourceRoots = { stock?: string; diff --git a/src/plugins/status.ts b/src/plugins/status.ts index 9077602a4d..b5d444cc3b 100644 --- a/src/plugins/status.ts +++ b/src/plugins/status.ts @@ -1,9 +1,9 @@ -import type { PluginRegistry } from "./registry.js"; import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js"; import { resolveDefaultAgentWorkspaceDir } from "../agents/workspace.js"; import { loadConfig } from "../config/config.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { loadOpenClawPlugins } from "./loader.js"; +import type { PluginRegistry } from "./registry.js"; export type PluginStatusReport = PluginRegistry & { workspaceDir?: string; diff --git a/src/plugins/tools.ts b/src/plugins/tools.ts index 313b7af91d..7ac23105a0 100644 --- a/src/plugins/tools.ts +++ b/src/plugins/tools.ts @@ -1,9 +1,9 @@ -import type { AnyAgentTool } from "../agents/tools/common.js"; -import type { OpenClawPluginToolContext } from "./types.js"; import { normalizeToolName } from "../agents/tool-policy.js"; +import type { AnyAgentTool } from "../agents/tools/common.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { applyTestPluginDefaults, normalizePluginsConfig } from "./config-state.js"; import { loadOpenClawPlugins } from "./loader.js"; +import type { OpenClawPluginToolContext } from "./types.js"; const log = createSubsystemLogger("plugins"); diff --git a/src/plugins/types.ts b/src/plugins/types.ts index 03d9ffbae5..fc54fdece8 100644 --- a/src/plugins/types.ts +++ b/src/plugins/types.ts @@ -1,6 +1,6 @@ +import type { IncomingMessage, ServerResponse } from "node:http"; import type { AgentMessage } from "@mariozechner/pi-agent-core"; import type { Command } from "commander"; -import type { IncomingMessage, ServerResponse } from "node:http"; import type { AuthProfileCredential, OAuthCredential } from "../agents/auth-profiles/types.js"; import type { AnyAgentTool } from "../agents/tools/common.js"; import type { ReplyPayload } from "../auto-reply/types.js"; diff --git a/src/process/supervisor/adapters/child.ts b/src/process/supervisor/adapters/child.ts index 1db291e933..3229516b65 100644 --- a/src/process/supervisor/adapters/child.ts +++ b/src/process/supervisor/adapters/child.ts @@ -1,7 +1,7 @@ import type { ChildProcessWithoutNullStreams, SpawnOptions } from "node:child_process"; -import type { ManagedRunStdin } from "../types.js"; import { killProcessTree } from "../../kill-tree.js"; import { spawnWithFallback } from "../../spawn-utils.js"; +import type { ManagedRunStdin } from "../types.js"; import { toStringEnv } from "./env.js"; function resolveCommand(command: string): string { diff --git a/src/process/supervisor/adapters/pty.ts b/src/process/supervisor/adapters/pty.ts index e93c42a00b..40b0bc2ce7 100644 --- a/src/process/supervisor/adapters/pty.ts +++ b/src/process/supervisor/adapters/pty.ts @@ -1,5 +1,5 @@ -import type { ManagedRunStdin } from "../types.js"; import { killProcessTree } from "../../kill-tree.js"; +import type { ManagedRunStdin } from "../types.js"; import { toStringEnv } from "./env.js"; const FORCE_KILL_WAIT_FALLBACK_MS = 4000; diff --git a/src/process/supervisor/index.ts b/src/process/supervisor/index.ts index 42557ba540..ea9ef44b58 100644 --- a/src/process/supervisor/index.ts +++ b/src/process/supervisor/index.ts @@ -1,5 +1,5 @@ -import type { ProcessSupervisor } from "./types.js"; import { createProcessSupervisor } from "./supervisor.js"; +import type { ProcessSupervisor } from "./types.js"; let singleton: ProcessSupervisor | null = null; diff --git a/src/process/supervisor/supervisor.ts b/src/process/supervisor/supervisor.ts index dba0d7d375..3c6834003f 100644 --- a/src/process/supervisor/supervisor.ts +++ b/src/process/supervisor/supervisor.ts @@ -1,4 +1,9 @@ import crypto from "node:crypto"; +import { getShellConfig } from "../../agents/shell-utils.js"; +import { createSubsystemLogger } from "../../logging/subsystem.js"; +import { createChildAdapter } from "./adapters/child.js"; +import { createPtyAdapter } from "./adapters/pty.js"; +import { createRunRegistry } from "./registry.js"; import type { ManagedRun, ProcessSupervisor, @@ -7,11 +12,6 @@ import type { SpawnInput, TerminationReason, } from "./types.js"; -import { getShellConfig } from "../../agents/shell-utils.js"; -import { createSubsystemLogger } from "../../logging/subsystem.js"; -import { createChildAdapter } from "./adapters/child.js"; -import { createPtyAdapter } from "./adapters/pty.js"; -import { createRunRegistry } from "./registry.js"; const log = createSubsystemLogger("process/supervisor"); diff --git a/src/providers/github-copilot-auth.ts b/src/providers/github-copilot-auth.ts index e0f1cf55ce..d4ffb926a5 100644 --- a/src/providers/github-copilot-auth.ts +++ b/src/providers/github-copilot-auth.ts @@ -1,9 +1,9 @@ import { intro, note, outro, spinner } from "@clack/prompts"; -import type { RuntimeEnv } from "../runtime.js"; import { ensureAuthProfileStore, upsertAuthProfile } from "../agents/auth-profiles.js"; import { updateConfig } from "../commands/models/shared.js"; import { applyAuthProfileConfig } from "../commands/onboard-auth.js"; import { logConfigUpdated } from "../config/logging.js"; +import type { RuntimeEnv } from "../runtime.js"; import { stylePromptTitle } from "../terminal/prompt-style.js"; const CLIENT_ID = "Iv1.b507a08c87ecfe98"; diff --git a/src/providers/google-shared.ensures-function-call-comes-after-user-turn.test.ts b/src/providers/google-shared.ensures-function-call-comes-after-user-turn.test.ts index beb28be359..9f209f3b08 100644 --- a/src/providers/google-shared.ensures-function-call-comes-after-user-turn.test.ts +++ b/src/providers/google-shared.ensures-function-call-comes-after-user-turn.test.ts @@ -1,5 +1,5 @@ -import type { Context } from "@mariozechner/pi-ai/dist/types.js"; import { convertMessages } from "@mariozechner/pi-ai/dist/providers/google-shared.js"; +import type { Context } from "@mariozechner/pi-ai/dist/types.js"; import { describe, expect, it } from "vitest"; import { asRecord, diff --git a/src/providers/google-shared.preserves-parameters-type-is-missing.test.ts b/src/providers/google-shared.preserves-parameters-type-is-missing.test.ts index 45b1c733e7..a0d74c79eb 100644 --- a/src/providers/google-shared.preserves-parameters-type-is-missing.test.ts +++ b/src/providers/google-shared.preserves-parameters-type-is-missing.test.ts @@ -1,5 +1,5 @@ -import type { Context, Tool } from "@mariozechner/pi-ai/dist/types.js"; import { convertMessages, convertTools } from "@mariozechner/pi-ai/dist/providers/google-shared.js"; +import type { Context, Tool } from "@mariozechner/pi-ai/dist/types.js"; import { describe, expect, it } from "vitest"; import { asRecord, diff --git a/src/routing/bindings.ts b/src/routing/bindings.ts index 9fc2ffb82d..f6e77503fa 100644 --- a/src/routing/bindings.ts +++ b/src/routing/bindings.ts @@ -1,7 +1,7 @@ -import type { OpenClawConfig } from "../config/config.js"; -import type { AgentBinding } from "../config/types.agents.js"; import { resolveDefaultAgentId } from "../agents/agent-scope.js"; import { normalizeChatChannelId } from "../channels/registry.js"; +import type { OpenClawConfig } from "../config/config.js"; +import type { AgentBinding } from "../config/types.agents.js"; import { normalizeAccountId, normalizeAgentId } from "./session-key.js"; function normalizeBindingChannelId(raw?: string | null): string | null { diff --git a/src/routing/resolve-route.ts b/src/routing/resolve-route.ts index 578a3ca8f8..1aee956f60 100644 --- a/src/routing/resolve-route.ts +++ b/src/routing/resolve-route.ts @@ -1,7 +1,7 @@ -import type { ChatType } from "../channels/chat-type.js"; -import type { OpenClawConfig } from "../config/config.js"; import { resolveDefaultAgentId } from "../agents/agent-scope.js"; +import type { ChatType } from "../channels/chat-type.js"; import { normalizeChatType } from "../channels/chat-type.js"; +import type { OpenClawConfig } from "../config/config.js"; import { shouldLogVerbose } from "../globals.js"; import { logDebug } from "../logger.js"; import { listBindings } from "./bindings.js"; diff --git a/src/security/audit-channel.ts b/src/security/audit-channel.ts index d862212626..f0522b32ed 100644 --- a/src/security/audit-channel.ts +++ b/src/security/audit-channel.ts @@ -1,15 +1,15 @@ +import { resolveChannelDefaultAccountId } from "../channels/plugins/helpers.js"; import type { listChannelPlugins } from "../channels/plugins/index.js"; import type { ChannelId } from "../channels/plugins/types.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { SecurityAuditFinding, SecurityAuditSeverity } from "./audit.js"; -import { resolveChannelDefaultAccountId } from "../channels/plugins/helpers.js"; import { isNumericTelegramUserId, normalizeTelegramAllowFromEntry, } from "../channels/telegram/allow-from.js"; import { formatCliCommand } from "../cli/command-format.js"; import { resolveNativeCommandsEnabled, resolveNativeSkillsEnabled } from "../config/commands.js"; +import type { OpenClawConfig } from "../config/config.js"; import { readChannelAllowFromStore } from "../pairing/pairing-store.js"; +import type { SecurityAuditFinding, SecurityAuditSeverity } from "./audit.js"; function normalizeAllowFromList(list: Array | undefined | null): string[] { if (!Array.isArray(list)) { diff --git a/src/security/audit-extra.async.ts b/src/security/audit-extra.async.ts index 2b95c43b4c..a6c7adab1a 100644 --- a/src/security/audit-extra.async.ts +++ b/src/security/audit-extra.async.ts @@ -5,25 +5,23 @@ */ import fs from "node:fs/promises"; import path from "node:path"; -import type { SandboxToolPolicy } from "../agents/sandbox/types.js"; -import type { OpenClawConfig, ConfigFileSnapshot } from "../config/config.js"; -import type { AgentToolsConfig } from "../config/types.tools.js"; -import type { SkillScanFinding } from "./skill-scanner.js"; -import type { ExecFn } from "./windows-acl.js"; import { resolveDefaultAgentId } from "../agents/agent-scope.js"; import { isToolAllowedByPolicies } from "../agents/pi-tools.policy.js"; import { resolveSandboxConfigForAgent, resolveSandboxToolPolicyForAgent, } from "../agents/sandbox.js"; +import type { SandboxToolPolicy } from "../agents/sandbox/types.js"; import { loadWorkspaceSkillEntries } from "../agents/skills.js"; import { resolveToolProfilePolicy } from "../agents/tool-policy.js"; import { listAgentWorkspaceDirs } from "../agents/workspace-dirs.js"; import { MANIFEST_KEY } from "../compat/legacy-names.js"; import { resolveNativeSkillsEnabled } from "../config/commands.js"; +import type { OpenClawConfig, ConfigFileSnapshot } from "../config/config.js"; import { createConfigIO } from "../config/config.js"; import { collectIncludePathsRecursive } from "../config/includes-scan.js"; import { resolveOAuthDir } from "../config/paths.js"; +import type { AgentToolsConfig } from "../config/types.tools.js"; import { normalizePluginsConfig } from "../plugins/config-state.js"; import { normalizeAgentId } from "../routing/session-key.js"; import { @@ -34,7 +32,9 @@ import { } from "./audit-fs.js"; import { pickSandboxToolPolicy } from "./audit-tool-policy.js"; import { extensionUsesSkippedScannerPath, isPathInside } from "./scan-paths.js"; +import type { SkillScanFinding } from "./skill-scanner.js"; import * as skillScanner from "./skill-scanner.js"; +import type { ExecFn } from "./windows-acl.js"; export type SecurityAuditFinding = { checkId: string; diff --git a/src/security/audit-extra.sync.ts b/src/security/audit-extra.sync.ts index 411920a9b9..50b18c3799 100644 --- a/src/security/audit-extra.sync.ts +++ b/src/security/audit-extra.sync.ts @@ -1,20 +1,20 @@ +import { isToolAllowedByPolicies } from "../agents/pi-tools.policy.js"; +import { + resolveSandboxConfigForAgent, + resolveSandboxToolPolicyForAgent, +} from "../agents/sandbox.js"; /** * Synchronous security audit collector functions. * * These functions analyze config-based security properties without I/O. */ import type { SandboxToolPolicy } from "../agents/sandbox/types.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { AgentToolsConfig } from "../config/types.tools.js"; -import { isToolAllowedByPolicies } from "../agents/pi-tools.policy.js"; -import { - resolveSandboxConfigForAgent, - resolveSandboxToolPolicyForAgent, -} from "../agents/sandbox.js"; import { getBlockedBindReason } from "../agents/sandbox/validate-sandbox-security.js"; import { resolveToolProfilePolicy } from "../agents/tool-policy.js"; import { resolveBrowserConfig } from "../browser/config.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { OpenClawConfig } from "../config/config.js"; +import type { AgentToolsConfig } from "../config/types.tools.js"; import { resolveGatewayAuth } from "../gateway/auth.js"; import { resolveNodeCommandAllowlist } from "../gateway/node-command-policy.js"; import { inferParamBFromIdOrName } from "../shared/model-param-b.js"; diff --git a/src/security/audit.ts b/src/security/audit.ts index 7f08620ffe..7059b0d008 100644 --- a/src/security/audit.ts +++ b/src/security/audit.ts @@ -1,9 +1,8 @@ -import type { OpenClawConfig } from "../config/config.js"; -import type { ExecFn } from "./windows-acl.js"; import { resolveBrowserConfig, resolveProfile } from "../browser/config.js"; import { resolveBrowserControlAuth } from "../browser/control-auth.js"; import { listChannelPlugins } from "../channels/plugins/index.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveConfigPath, resolveStateDir } from "../config/paths.js"; import { resolveGatewayAuth } from "../gateway/auth.js"; import { buildGatewayConnectionDetails } from "../gateway/call.js"; @@ -36,6 +35,7 @@ import { inspectPathPermissions, } from "./audit-fs.js"; import { DEFAULT_GATEWAY_HTTP_TOOL_DENY } from "./dangerous-tools.js"; +import type { ExecFn } from "./windows-acl.js"; export type SecurityAuditSeverity = "info" | "warn" | "critical"; diff --git a/src/security/fix.ts b/src/security/fix.ts index 085fcb525c..6de16b0885 100644 --- a/src/security/fix.ts +++ b/src/security/fix.ts @@ -1,7 +1,7 @@ import fs from "node:fs/promises"; import path from "node:path"; -import type { OpenClawConfig } from "../config/config.js"; import { resolveDefaultAgentId } from "../agents/agent-scope.js"; +import type { OpenClawConfig } from "../config/config.js"; import { createConfigIO } from "../config/config.js"; import { collectIncludePathsRecursive } from "../config/includes-scan.js"; import { resolveConfigPath, resolveOAuthDir, resolveStateDir } from "../config/paths.js"; diff --git a/src/sessions/level-overrides.ts b/src/sessions/level-overrides.ts index f0016fa439..29add6f195 100644 --- a/src/sessions/level-overrides.ts +++ b/src/sessions/level-overrides.ts @@ -1,5 +1,5 @@ -import type { SessionEntry } from "../config/sessions.js"; import { normalizeVerboseLevel, type VerboseLevel } from "../auto-reply/thinking.js"; +import type { SessionEntry } from "../config/sessions.js"; export function parseVerboseOverride( raw: unknown, diff --git a/src/sessions/send-policy.ts b/src/sessions/send-policy.ts index 76c206d419..b67a02f829 100644 --- a/src/sessions/send-policy.ts +++ b/src/sessions/send-policy.ts @@ -1,6 +1,6 @@ +import { normalizeChatType } from "../channels/chat-type.js"; import type { OpenClawConfig } from "../config/config.js"; import type { SessionChatType, SessionEntry } from "../config/sessions.js"; -import { normalizeChatType } from "../channels/chat-type.js"; export type SessionSendPolicyDecision = "allow" | "deny"; diff --git a/src/signal/accounts.ts b/src/signal/accounts.ts index 3899d8160d..09267f6c5c 100644 --- a/src/signal/accounts.ts +++ b/src/signal/accounts.ts @@ -1,6 +1,6 @@ +import { createAccountListHelpers } from "../channels/plugins/account-helpers.js"; import type { OpenClawConfig } from "../config/config.js"; import type { SignalAccountConfig } from "../config/types.js"; -import { createAccountListHelpers } from "../channels/plugins/account-helpers.js"; import { normalizeAccountId } from "../routing/session-key.js"; export type ResolvedSignalAccount = { diff --git a/src/signal/monitor.tool-result.test-harness.ts b/src/signal/monitor.tool-result.test-harness.ts index 4bb3bc73e8..7d1919c5bb 100644 --- a/src/signal/monitor.tool-result.test-harness.ts +++ b/src/signal/monitor.tool-result.test-harness.ts @@ -1,7 +1,7 @@ import { beforeEach, vi } from "vitest"; -import type { MockFn } from "../test-utils/vitest-mock-fn.js"; import { resetInboundDedupe } from "../auto-reply/reply/inbound-dedupe.js"; import { resetSystemEventsForTest } from "../infra/system-events.js"; +import type { MockFn } from "../test-utils/vitest-mock-fn.js"; type SignalToolResultTestMocks = { waitForTransportReadyMock: MockFn; diff --git a/src/signal/monitor.ts b/src/signal/monitor.ts index 85f5cac66d..98b8bd301d 100644 --- a/src/signal/monitor.ts +++ b/src/signal/monitor.ts @@ -1,9 +1,9 @@ -import type { ReplyPayload } from "../auto-reply/types.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { SignalReactionNotificationMode } from "../config/types.js"; import { chunkTextWithMode, resolveChunkMode, resolveTextChunkLimit } from "../auto-reply/chunk.js"; import { DEFAULT_GROUP_HISTORY_LIMIT, type HistoryEntry } from "../auto-reply/reply/history.js"; +import type { ReplyPayload } from "../auto-reply/types.js"; +import type { OpenClawConfig } from "../config/config.js"; import { loadConfig } from "../config/config.js"; +import type { SignalReactionNotificationMode } from "../config/types.js"; import { waitForTransportReady } from "../infra/transport-ready.js"; import { saveMediaBuffer } from "../media/store.js"; import { createNonExitingRuntime, type RuntimeEnv } from "../runtime.js"; diff --git a/src/signal/monitor/event-handler.inbound-contract.test.ts b/src/signal/monitor/event-handler.inbound-contract.test.ts index 5c91b7c341..554281c0e5 100644 --- a/src/signal/monitor/event-handler.inbound-contract.test.ts +++ b/src/signal/monitor/event-handler.inbound-contract.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from "vitest"; -import type { MsgContext } from "../../auto-reply/templating.js"; import { buildDispatchInboundCaptureMock } from "../../../test/helpers/dispatch-inbound-capture.js"; import { expectInboundContextContract } from "../../../test/helpers/inbound-contract.js"; +import type { MsgContext } from "../../auto-reply/templating.js"; let capturedCtx: MsgContext | undefined; diff --git a/src/signal/monitor/event-handler.mention-gating.test.ts b/src/signal/monitor/event-handler.mention-gating.test.ts index 8206bc027d..6a38799c8d 100644 --- a/src/signal/monitor/event-handler.mention-gating.test.ts +++ b/src/signal/monitor/event-handler.mention-gating.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from "vitest"; +import { buildDispatchInboundCaptureMock } from "../../../test/helpers/dispatch-inbound-capture.js"; import type { MsgContext } from "../../auto-reply/templating.js"; import type { OpenClawConfig } from "../../config/types.js"; -import { buildDispatchInboundCaptureMock } from "../../../test/helpers/dispatch-inbound-capture.js"; import { createBaseSignalEventHandlerDeps } from "./event-handler.test-harness.js"; type SignalMsgContext = MsgContext & { diff --git a/src/signal/monitor/event-handler.ts b/src/signal/monitor/event-handler.ts index ea31b0f6a9..73c9edc843 100644 --- a/src/signal/monitor/event-handler.ts +++ b/src/signal/monitor/event-handler.ts @@ -1,4 +1,3 @@ -import type { SignalEventHandlerDeps, SignalReceivePayload } from "./event-handler.types.js"; import { resolveHumanDelayConfig } from "../../agents/identity.js"; import { hasControlCommand } from "../../auto-reply/command-detection.js"; import { dispatchInboundMessage } from "../../auto-reply/dispatch.js"; @@ -47,6 +46,7 @@ import { resolveSignalSender, } from "../identity.js"; import { sendMessageSignal, sendReadReceiptSignal, sendTypingSignal } from "../send.js"; +import type { SignalEventHandlerDeps, SignalReceivePayload } from "./event-handler.types.js"; import { renderSignalMentions } from "./mentions.js"; export function createSignalEventHandler(deps: SignalEventHandlerDeps) { const inboundDebounceMs = resolveInboundDebounceMs({ cfg: deps.cfg, channel: "signal" }); diff --git a/src/signal/sse-reconnect.ts b/src/signal/sse-reconnect.ts index c6dfd5d8a9..f119388f3d 100644 --- a/src/signal/sse-reconnect.ts +++ b/src/signal/sse-reconnect.ts @@ -1,7 +1,7 @@ -import type { BackoffPolicy } from "../infra/backoff.js"; -import type { RuntimeEnv } from "../runtime.js"; import { logVerbose, shouldLogVerbose } from "../globals.js"; +import type { BackoffPolicy } from "../infra/backoff.js"; import { computeBackoff, sleepWithAbort } from "../infra/backoff.js"; +import type { RuntimeEnv } from "../runtime.js"; import { type SignalSseEvent, streamSignalEvents } from "./client.js"; const DEFAULT_RECONNECT_POLICY: BackoffPolicy = { diff --git a/src/slack/accounts.ts b/src/slack/accounts.ts index fea00630b7..f5d54b5098 100644 --- a/src/slack/accounts.ts +++ b/src/slack/accounts.ts @@ -1,7 +1,7 @@ -import type { OpenClawConfig } from "../config/config.js"; -import type { SlackAccountConfig } from "../config/types.js"; import { normalizeChatType } from "../channels/chat-type.js"; import { createAccountListHelpers } from "../channels/plugins/account-helpers.js"; +import type { OpenClawConfig } from "../config/config.js"; +import type { SlackAccountConfig } from "../config/types.js"; import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../routing/session-key.js"; import { resolveSlackAppToken, resolveSlackBotToken } from "./token.js"; diff --git a/src/slack/message-actions.ts b/src/slack/message-actions.ts index bf7d6f202c..21665f74ea 100644 --- a/src/slack/message-actions.ts +++ b/src/slack/message-actions.ts @@ -1,6 +1,6 @@ +import { createActionGate } from "../agents/tools/common.js"; import type { ChannelMessageActionName, ChannelToolSend } from "../channels/plugins/types.js"; import type { OpenClawConfig } from "../config/config.js"; -import { createActionGate } from "../agents/tools/common.js"; import { listEnabledSlackAccounts } from "./accounts.js"; export function listSlackMessageActions(cfg: OpenClawConfig): ChannelMessageActionName[] { diff --git a/src/slack/monitor/auth.ts b/src/slack/monitor/auth.ts index 2bfbbed59e..4fca101d26 100644 --- a/src/slack/monitor/auth.ts +++ b/src/slack/monitor/auth.ts @@ -1,6 +1,6 @@ -import type { SlackMonitorContext } from "./context.js"; import { readChannelAllowFromStore } from "../../pairing/pairing-store.js"; import { allowListMatches, normalizeAllowList, normalizeAllowListLower } from "./allow-list.js"; +import type { SlackMonitorContext } from "./context.js"; export async function resolveSlackEffectiveAllowFrom(ctx: SlackMonitorContext) { const storeAllowFrom = await readChannelAllowFromStore("slack").catch(() => []); diff --git a/src/slack/monitor/channel-config.ts b/src/slack/monitor/channel-config.ts index 0d34209e42..7e2c6cb4c1 100644 --- a/src/slack/monitor/channel-config.ts +++ b/src/slack/monitor/channel-config.ts @@ -1,11 +1,11 @@ -import type { SlackReactionNotificationMode } from "../../config/config.js"; -import type { SlackMessageEvent } from "../types.js"; import { applyChannelMatchMeta, buildChannelKeyCandidates, resolveChannelEntryMatchWithFallback, type ChannelMatchSource, } from "../../channels/channel-config.js"; +import type { SlackReactionNotificationMode } from "../../config/config.js"; +import type { SlackMessageEvent } from "../types.js"; import { allowListMatches, normalizeAllowListLower, normalizeSlackSlug } from "./allow-list.js"; export type SlackChannelConfigResolved = { diff --git a/src/slack/monitor/context.ts b/src/slack/monitor/context.ts index d95297e1e2..70dd8a8085 100644 --- a/src/slack/monitor/context.ts +++ b/src/slack/monitor/context.ts @@ -1,16 +1,16 @@ import type { App } from "@slack/bolt"; import type { HistoryEntry } from "../../auto-reply/reply/history.js"; -import type { OpenClawConfig, SlackReactionNotificationMode } from "../../config/config.js"; -import type { DmPolicy, GroupPolicy } from "../../config/types.js"; -import type { RuntimeEnv } from "../../runtime.js"; -import type { SlackMessageEvent } from "../types.js"; -import type { SlackChannelConfigEntries } from "./channel-config.js"; import { formatAllowlistMatchMeta } from "../../channels/allowlist-match.js"; +import type { OpenClawConfig, SlackReactionNotificationMode } from "../../config/config.js"; import { resolveSessionKey, type SessionScope } from "../../config/sessions.js"; +import type { DmPolicy, GroupPolicy } from "../../config/types.js"; import { logVerbose } from "../../globals.js"; import { createDedupeCache } from "../../infra/dedupe.js"; import { getChildLogger } from "../../logging.js"; +import type { RuntimeEnv } from "../../runtime.js"; +import type { SlackMessageEvent } from "../types.js"; import { normalizeAllowList, normalizeAllowListLower, normalizeSlackSlug } from "./allow-list.js"; +import type { SlackChannelConfigEntries } from "./channel-config.js"; import { resolveSlackChannelConfig } from "./channel-config.js"; import { isSlackChannelAllowedByPolicy } from "./policy.js"; diff --git a/src/slack/monitor/events.ts b/src/slack/monitor/events.ts index 637b3c52be..851028e646 100644 --- a/src/slack/monitor/events.ts +++ b/src/slack/monitor/events.ts @@ -1,12 +1,12 @@ import type { ResolvedSlackAccount } from "../accounts.js"; import type { SlackMonitorContext } from "./context.js"; -import type { SlackMessageHandler } from "./message-handler.js"; import { registerSlackChannelEvents } from "./events/channels.js"; import { registerSlackInteractionEvents } from "./events/interactions.js"; import { registerSlackMemberEvents } from "./events/members.js"; import { registerSlackMessageEvents } from "./events/messages.js"; import { registerSlackPinEvents } from "./events/pins.js"; import { registerSlackReactionEvents } from "./events/reactions.js"; +import type { SlackMessageHandler } from "./message-handler.js"; export function registerSlackMonitorEvents(params: { ctx: SlackMonitorContext; diff --git a/src/slack/monitor/events/channels.ts b/src/slack/monitor/events/channels.ts index 1e69ffe209..962f2655b7 100644 --- a/src/slack/monitor/events/channels.ts +++ b/src/slack/monitor/events/channels.ts @@ -1,16 +1,16 @@ import type { SlackEventMiddlewareArgs } from "@slack/bolt"; -import type { SlackMonitorContext } from "../context.js"; -import type { - SlackChannelCreatedEvent, - SlackChannelIdChangedEvent, - SlackChannelRenamedEvent, -} from "../types.js"; import { resolveChannelConfigWrites } from "../../../channels/plugins/config-writes.js"; import { loadConfig, writeConfigFile } from "../../../config/config.js"; import { danger, warn } from "../../../globals.js"; import { enqueueSystemEvent } from "../../../infra/system-events.js"; import { migrateSlackChannelConfig } from "../../channel-migration.js"; import { resolveSlackChannelLabel } from "../channel-config.js"; +import type { SlackMonitorContext } from "../context.js"; +import type { + SlackChannelCreatedEvent, + SlackChannelIdChangedEvent, + SlackChannelRenamedEvent, +} from "../types.js"; export function registerSlackChannelEvents(params: { ctx: SlackMonitorContext }) { const { ctx } = params; diff --git a/src/slack/monitor/events/interactions.ts b/src/slack/monitor/events/interactions.ts index 38367cdd40..958d6b3f5d 100644 --- a/src/slack/monitor/events/interactions.ts +++ b/src/slack/monitor/events/interactions.ts @@ -1,8 +1,8 @@ import type { SlackActionMiddlewareArgs } from "@slack/bolt"; import type { Block, KnownBlock } from "@slack/web-api"; -import type { SlackMonitorContext } from "../context.js"; import { enqueueSystemEvent } from "../../../infra/system-events.js"; import { parseSlackModalPrivateMetadata } from "../../modal-metadata.js"; +import type { SlackMonitorContext } from "../context.js"; // Prefix for OpenClaw-generated action IDs to scope our handler const OPENCLAW_ACTION_PREFIX = "openclaw:"; diff --git a/src/slack/monitor/events/members.ts b/src/slack/monitor/events/members.ts index 1b7decdfd3..652c75bb4e 100644 --- a/src/slack/monitor/events/members.ts +++ b/src/slack/monitor/events/members.ts @@ -1,9 +1,9 @@ import type { SlackEventMiddlewareArgs } from "@slack/bolt"; -import type { SlackMonitorContext } from "../context.js"; -import type { SlackMemberChannelEvent } from "../types.js"; import { danger } from "../../../globals.js"; import { enqueueSystemEvent } from "../../../infra/system-events.js"; import { resolveSlackChannelLabel } from "../channel-config.js"; +import type { SlackMonitorContext } from "../context.js"; +import type { SlackMemberChannelEvent } from "../types.js"; export function registerSlackMemberEvents(params: { ctx: SlackMonitorContext }) { const { ctx } = params; diff --git a/src/slack/monitor/events/messages.ts b/src/slack/monitor/events/messages.ts index 1685f748e5..0ccb8dc100 100644 --- a/src/slack/monitor/events/messages.ts +++ b/src/slack/monitor/events/messages.ts @@ -1,5 +1,8 @@ import type { SlackEventMiddlewareArgs } from "@slack/bolt"; +import { danger } from "../../../globals.js"; +import { enqueueSystemEvent } from "../../../infra/system-events.js"; import type { SlackAppMentionEvent, SlackMessageEvent } from "../../types.js"; +import { resolveSlackChannelLabel } from "../channel-config.js"; import type { SlackMonitorContext } from "../context.js"; import type { SlackMessageHandler } from "../message-handler.js"; import type { @@ -7,9 +10,6 @@ import type { SlackMessageDeletedEvent, SlackThreadBroadcastEvent, } from "../types.js"; -import { danger } from "../../../globals.js"; -import { enqueueSystemEvent } from "../../../infra/system-events.js"; -import { resolveSlackChannelLabel } from "../channel-config.js"; export function registerSlackMessageEvents(params: { ctx: SlackMonitorContext; diff --git a/src/slack/monitor/events/pins.ts b/src/slack/monitor/events/pins.ts index 1cb0328a82..2613bc35e2 100644 --- a/src/slack/monitor/events/pins.ts +++ b/src/slack/monitor/events/pins.ts @@ -1,9 +1,9 @@ import type { SlackEventMiddlewareArgs } from "@slack/bolt"; -import type { SlackMonitorContext } from "../context.js"; -import type { SlackPinEvent } from "../types.js"; import { danger } from "../../../globals.js"; import { enqueueSystemEvent } from "../../../infra/system-events.js"; import { resolveSlackChannelLabel } from "../channel-config.js"; +import type { SlackMonitorContext } from "../context.js"; +import type { SlackPinEvent } from "../types.js"; async function handleSlackPinEvent(params: { ctx: SlackMonitorContext; diff --git a/src/slack/monitor/events/reactions.ts b/src/slack/monitor/events/reactions.ts index 0844fddd84..b437352d6c 100644 --- a/src/slack/monitor/events/reactions.ts +++ b/src/slack/monitor/events/reactions.ts @@ -1,9 +1,9 @@ import type { SlackEventMiddlewareArgs } from "@slack/bolt"; -import type { SlackMonitorContext } from "../context.js"; -import type { SlackReactionEvent } from "../types.js"; import { danger } from "../../../globals.js"; import { enqueueSystemEvent } from "../../../infra/system-events.js"; import { resolveSlackChannelLabel } from "../channel-config.js"; +import type { SlackMonitorContext } from "../context.js"; +import type { SlackReactionEvent } from "../types.js"; export function registerSlackReactionEvents(params: { ctx: SlackMonitorContext }) { const { ctx } = params; diff --git a/src/slack/monitor/media.test.ts b/src/slack/monitor/media.test.ts index 05a7c916b4..81eec0a442 100644 --- a/src/slack/monitor/media.test.ts +++ b/src/slack/monitor/media.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import type { SavedMedia } from "../../media/store.js"; import * as ssrf from "../../infra/net/ssrf.js"; +import type { SavedMedia } from "../../media/store.js"; import * as mediaStore from "../../media/store.js"; import { fetchWithSlackAuth, diff --git a/src/slack/monitor/media.ts b/src/slack/monitor/media.ts index 47729b868c..964aec1107 100644 --- a/src/slack/monitor/media.ts +++ b/src/slack/monitor/media.ts @@ -1,9 +1,9 @@ import type { WebClient as SlackWebClient } from "@slack/web-api"; -import type { FetchLike } from "../../media/fetch.js"; -import type { SlackAttachment, SlackFile } from "../types.js"; import { normalizeHostname } from "../../infra/net/hostname.js"; +import type { FetchLike } from "../../media/fetch.js"; import { fetchRemoteMedia } from "../../media/fetch.js"; import { saveMediaBuffer } from "../../media/store.js"; +import type { SlackAttachment, SlackFile } from "../types.js"; function isSlackHostname(hostname: string): boolean { const normalized = normalizeHostname(hostname); diff --git a/src/slack/monitor/message-handler.ts b/src/slack/monitor/message-handler.ts index e974dbeebe..ec537dfcd6 100644 --- a/src/slack/monitor/message-handler.ts +++ b/src/slack/monitor/message-handler.ts @@ -1,12 +1,12 @@ -import type { ResolvedSlackAccount } from "../accounts.js"; -import type { SlackMessageEvent } from "../types.js"; -import type { SlackMonitorContext } from "./context.js"; import { hasControlCommand } from "../../auto-reply/command-detection.js"; import { createInboundDebouncer, resolveInboundDebounceMs, } from "../../auto-reply/inbound-debounce.js"; +import type { ResolvedSlackAccount } from "../accounts.js"; +import type { SlackMessageEvent } from "../types.js"; import { stripSlackMentionsForCommandDetection } from "./commands.js"; +import type { SlackMonitorContext } from "./context.js"; import { dispatchPreparedSlackMessage } from "./message-handler/dispatch.js"; import { prepareSlackMessage } from "./message-handler/prepare.js"; import { createSlackThreadTsResolver } from "./thread-resolution.js"; diff --git a/src/slack/monitor/message-handler/dispatch.ts b/src/slack/monitor/message-handler/dispatch.ts index a2f515f341..7964aea361 100644 --- a/src/slack/monitor/message-handler/dispatch.ts +++ b/src/slack/monitor/message-handler/dispatch.ts @@ -1,4 +1,3 @@ -import type { PreparedSlackMessage } from "./types.js"; import { resolveHumanDelayConfig } from "../../../agents/identity.js"; import { dispatchInboundMessage } from "../../../auto-reply/dispatch.js"; import { clearHistoryEntriesIfEnabled } from "../../../auto-reply/reply/history.js"; @@ -18,6 +17,7 @@ import { } from "../../stream-mode.js"; import { resolveSlackThreadTargets } from "../../threading.js"; import { createSlackReplyDeliveryPlan, deliverReplies } from "../replies.js"; +import type { PreparedSlackMessage } from "./types.js"; export async function dispatchPreparedSlackMessage(prepared: PreparedSlackMessage) { const { ctx, account, message, route } = prepared; diff --git a/src/slack/monitor/message-handler/prepare.test.ts b/src/slack/monitor/message-handler/prepare.test.ts index 3f81c59ed8..836a68f7e1 100644 --- a/src/slack/monitor/message-handler/prepare.test.ts +++ b/src/slack/monitor/message-handler/prepare.test.ts @@ -1,16 +1,16 @@ -import type { App } from "@slack/bolt"; import fs from "node:fs"; import os from "node:os"; import path from "node:path"; +import type { App } from "@slack/bolt"; import { afterAll, beforeAll, describe, expect, it, vi } from "vitest"; +import { expectInboundContextContract } from "../../../../test/helpers/inbound-contract.js"; import type { OpenClawConfig } from "../../../config/config.js"; +import { resolveAgentRoute } from "../../../routing/resolve-route.js"; +import { resolveThreadSessionKeys } from "../../../routing/session-key.js"; import type { RuntimeEnv } from "../../../runtime.js"; import type { ResolvedSlackAccount } from "../../accounts.js"; import type { SlackMessageEvent } from "../../types.js"; import type { SlackMonitorContext } from "../context.js"; -import { expectInboundContextContract } from "../../../../test/helpers/inbound-contract.js"; -import { resolveAgentRoute } from "../../../routing/resolve-route.js"; -import { resolveThreadSessionKeys } from "../../../routing/session-key.js"; import { createSlackMonitorContext } from "../context.js"; import { prepareSlackMessage } from "./prepare.js"; diff --git a/src/slack/monitor/message-handler/prepare.ts b/src/slack/monitor/message-handler/prepare.ts index dedc0739bf..e0cf23aee2 100644 --- a/src/slack/monitor/message-handler/prepare.ts +++ b/src/slack/monitor/message-handler/prepare.ts @@ -1,7 +1,3 @@ -import type { FinalizedMsgContext } from "../../../auto-reply/templating.js"; -import type { ResolvedSlackAccount } from "../../accounts.js"; -import type { SlackMessageEvent } from "../../types.js"; -import type { PreparedSlackMessage } from "./types.js"; import { resolveAckReaction } from "../../../agents/identity.js"; import { hasControlCommand } from "../../../auto-reply/command-detection.js"; import { shouldHandleTextCommands } from "../../../auto-reply/commands-registry.js"; @@ -18,6 +14,7 @@ import { buildMentionRegexes, matchesMentionWithExplicit, } from "../../../auto-reply/reply/mentions.js"; +import type { FinalizedMsgContext } from "../../../auto-reply/templating.js"; import { shouldAckReaction as shouldAckReactionGate, type AckReactionScope, @@ -35,9 +32,11 @@ import { buildPairingReply } from "../../../pairing/pairing-messages.js"; import { upsertChannelPairingRequest } from "../../../pairing/pairing-store.js"; import { resolveAgentRoute } from "../../../routing/resolve-route.js"; import { resolveThreadSessionKeys } from "../../../routing/session-key.js"; +import type { ResolvedSlackAccount } from "../../accounts.js"; import { reactSlackMessage } from "../../actions.js"; import { sendMessageSlack } from "../../send.js"; import { resolveSlackThreadContext } from "../../threading.js"; +import type { SlackMessageEvent } from "../../types.js"; import { resolveSlackAllowListMatch, resolveSlackUserAllowed } from "../allow-list.js"; import { resolveSlackEffectiveAllowFrom } from "../auth.js"; import { resolveSlackChannelConfig } from "../channel-config.js"; @@ -50,6 +49,7 @@ import { resolveSlackThreadStarter, } from "../media.js"; import { resolveSlackRoomContextHints } from "../room-context.js"; +import type { PreparedSlackMessage } from "./types.js"; export async function prepareSlackMessage(params: { ctx: SlackMonitorContext; diff --git a/src/slack/monitor/provider.ts b/src/slack/monitor/provider.ts index 6362cfcc8a..248728751e 100644 --- a/src/slack/monitor/provider.ts +++ b/src/slack/monitor/provider.ts @@ -1,7 +1,5 @@ import type { IncomingMessage, ServerResponse } from "node:http"; import SlackBolt from "@slack/bolt"; -import type { SessionScope } from "../../config/sessions.js"; -import type { MonitorSlackOpts } from "./types.js"; import { resolveTextChunkLimit } from "../../auto-reply/chunk.js"; import { DEFAULT_GROUP_HISTORY_LIMIT } from "../../auto-reply/reply/history.js"; import { @@ -12,6 +10,7 @@ import { summarizeMapping, } from "../../channels/allowlists/resolve-utils.js"; import { loadConfig } from "../../config/config.js"; +import type { SessionScope } from "../../config/sessions.js"; import { warn } from "../../globals.js"; import { installRequestBodyLimitGuard } from "../../infra/http-body.js"; import { normalizeMainKey } from "../../routing/session-key.js"; @@ -28,6 +27,7 @@ import { createSlackMonitorContext } from "./context.js"; import { registerSlackMonitorEvents } from "./events.js"; import { createSlackMessageHandler } from "./message-handler.js"; import { registerSlackMonitorSlashCommands } from "./slash.js"; +import type { MonitorSlackOpts } from "./types.js"; const slackBoltModule = SlackBolt as typeof import("@slack/bolt") & { default?: typeof import("@slack/bolt"); diff --git a/src/slack/monitor/replies.ts b/src/slack/monitor/replies.ts index 550bb9c66b..083c59b3f5 100644 --- a/src/slack/monitor/replies.ts +++ b/src/slack/monitor/replies.ts @@ -1,10 +1,10 @@ import type { ChunkMode } from "../../auto-reply/chunk.js"; -import type { ReplyPayload } from "../../auto-reply/types.js"; -import type { MarkdownTableMode } from "../../config/types.base.js"; -import type { RuntimeEnv } from "../../runtime.js"; import { chunkMarkdownTextWithMode } from "../../auto-reply/chunk.js"; import { createReplyReferencePlanner } from "../../auto-reply/reply/reply-reference.js"; import { isSilentReplyText, SILENT_REPLY_TOKEN } from "../../auto-reply/tokens.js"; +import type { ReplyPayload } from "../../auto-reply/types.js"; +import type { MarkdownTableMode } from "../../config/types.base.js"; +import type { RuntimeEnv } from "../../runtime.js"; import { markdownToSlackMrkdwnChunks } from "../format.js"; import { sendMessageSlack } from "../send.js"; diff --git a/src/slack/monitor/slash.ts b/src/slack/monitor/slash.ts index 3edda895c5..d67eb68f9c 100644 --- a/src/slack/monitor/slash.ts +++ b/src/slack/monitor/slash.ts @@ -1,8 +1,6 @@ import type { SlackActionMiddlewareArgs, SlackCommandMiddlewareArgs } from "@slack/bolt"; import type { ChatCommandDefinition, CommandArgs } from "../../auto-reply/commands-registry.js"; import type { ReplyPayload } from "../../auto-reply/types.js"; -import type { ResolvedSlackAccount } from "../accounts.js"; -import type { SlackMonitorContext } from "./context.js"; import { formatAllowlistMatchMeta } from "../../channels/allowlist-match.js"; import { resolveCommandAuthorizedFromAuthorizers } from "../../channels/command-gating.js"; import { resolveNativeCommandsEnabled, resolveNativeSkillsEnabled } from "../../config/commands.js"; @@ -13,6 +11,7 @@ import { upsertChannelPairingRequest, } from "../../pairing/pairing-store.js"; import { chunkItems } from "../../utils/chunk-items.js"; +import type { ResolvedSlackAccount } from "../accounts.js"; import { normalizeAllowList, normalizeAllowListLower, @@ -21,6 +20,7 @@ import { } from "./allow-list.js"; import { resolveSlackChannelConfig, type SlackChannelConfigResolved } from "./channel-config.js"; import { buildSlackSlashCommandMatcher, resolveSlackSlashCommandConfig } from "./commands.js"; +import type { SlackMonitorContext } from "./context.js"; import { normalizeSlackChannelType } from "./context.js"; import { isSlackChannelAllowedByPolicy } from "./policy.js"; import { resolveSlackRoomContextHints } from "./room-context.js"; diff --git a/src/slack/monitor/thread-resolution.ts b/src/slack/monitor/thread-resolution.ts index 6911325397..a4ae0ac718 100644 --- a/src/slack/monitor/thread-resolution.ts +++ b/src/slack/monitor/thread-resolution.ts @@ -1,7 +1,7 @@ import type { WebClient as SlackWebClient } from "@slack/web-api"; -import type { SlackMessageEvent } from "../types.js"; import { logVerbose, shouldLogVerbose } from "../../globals.js"; import { pruneMapToMaxSize } from "../../infra/map-size.js"; +import type { SlackMessageEvent } from "../types.js"; type ThreadTsCacheEntry = { threadTs: string | null; diff --git a/src/slack/send.ts b/src/slack/send.ts index 83c56202d7..d0b0f9c1a9 100644 --- a/src/slack/send.ts +++ b/src/slack/send.ts @@ -4,7 +4,6 @@ import { type KnownBlock, type WebClient, } from "@slack/web-api"; -import type { SlackTokenSource } from "./accounts.js"; import { chunkMarkdownTextWithMode, resolveChunkMode, @@ -14,6 +13,7 @@ import { loadConfig } from "../config/config.js"; import { resolveMarkdownTableMode } from "../config/markdown-tables.js"; import { logVerbose } from "../globals.js"; import { loadWebMedia } from "../web/media.js"; +import type { SlackTokenSource } from "./accounts.js"; import { resolveSlackAccount } from "./accounts.js"; import { buildSlackBlocksFallbackText } from "./blocks-fallback.js"; import { validateSlackBlocksArray } from "./blocks-input.js"; diff --git a/src/telegram/api-logging.ts b/src/telegram/api-logging.ts index 6dc2776c2a..4534b3f826 100644 --- a/src/telegram/api-logging.ts +++ b/src/telegram/api-logging.ts @@ -1,7 +1,7 @@ -import type { RuntimeEnv } from "../runtime.js"; import { danger } from "../globals.js"; import { formatErrorMessage } from "../infra/errors.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; +import type { RuntimeEnv } from "../runtime.js"; export type TelegramApiLogger = (message: string) => void; diff --git a/src/telegram/bot-handlers.ts b/src/telegram/bot-handlers.ts index 0fd1883eed..64a05b5a8c 100644 --- a/src/telegram/bot-handlers.ts +++ b/src/telegram/bot-handlers.ts @@ -1,7 +1,4 @@ import type { Message, ReactionTypeEmoji } from "@grammyjs/types"; -import type { TelegramGroupConfig, TelegramTopicConfig } from "../config/types.js"; -import type { TelegramMediaRef } from "./bot-message-context.js"; -import type { TelegramContext } from "./bot/types.js"; import { resolveDefaultAgentId } from "../agents/agent-scope.js"; import { hasControlCommand } from "../auto-reply/command-detection.js"; import { @@ -17,6 +14,7 @@ import { resolveChannelConfigWrites } from "../channels/plugins/config-writes.js import { loadConfig } from "../config/config.js"; import { writeConfigFile } from "../config/io.js"; import { loadSessionStore, resolveStorePath } from "../config/sessions.js"; +import type { TelegramGroupConfig, TelegramTopicConfig } from "../config/types.js"; import { danger, logVerbose, warn } from "../globals.js"; import { enqueueSystemEvent } from "../infra/system-events.js"; import { readChannelAllowFromStore } from "../pairing/pairing-store.js"; @@ -28,6 +26,7 @@ import { normalizeAllowFromWithStore, type NormalizedAllowFrom, } from "./bot-access.js"; +import type { TelegramMediaRef } from "./bot-message-context.js"; import { RegisterTelegramHandlerParams } from "./bot-native-commands.js"; import { MEDIA_GROUP_TIMEOUT_MS, type MediaGroupEntry } from "./bot-updates.js"; import { resolveMedia } from "./bot/delivery.js"; @@ -37,6 +36,7 @@ import { resolveTelegramForumThreadId, resolveTelegramGroupAllowFromContext, } from "./bot/helpers.js"; +import type { TelegramContext } from "./bot/types.js"; import { evaluateTelegramGroupBaseAccess, evaluateTelegramGroupPolicyAccess, diff --git a/src/telegram/bot-message-context.ts b/src/telegram/bot-message-context.ts index 7961fb469e..3be196e57f 100644 --- a/src/telegram/bot-message-context.ts +++ b/src/telegram/bot-message-context.ts @@ -1,8 +1,4 @@ import type { Bot } from "grammy"; -import type { MsgContext } from "../auto-reply/templating.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { DmPolicy, TelegramGroupConfig, TelegramTopicConfig } from "../config/types.js"; -import type { StickerMetadata, TelegramContext } from "./bot/types.js"; import { resolveAckReaction } from "../agents/identity.js"; import { findModelInCatalog, @@ -20,14 +16,17 @@ import { } from "../auto-reply/reply/history.js"; import { finalizeInboundContext } from "../auto-reply/reply/inbound-context.js"; import { buildMentionRegexes, matchesMentionWithExplicit } from "../auto-reply/reply/mentions.js"; +import type { MsgContext } from "../auto-reply/templating.js"; import { shouldAckReaction as shouldAckReactionGate } from "../channels/ack-reactions.js"; import { resolveControlCommandGate } from "../channels/command-gating.js"; import { formatLocationText, toLocationContext } from "../channels/location.js"; import { logInboundDrop } from "../channels/logging.js"; import { resolveMentionGatingWithBypass } from "../channels/mention-gating.js"; import { recordInboundSession } from "../channels/session.js"; +import type { OpenClawConfig } from "../config/config.js"; import { loadConfig } from "../config/config.js"; import { readSessionUpdatedAt, resolveStorePath } from "../config/sessions.js"; +import type { DmPolicy, TelegramGroupConfig, TelegramTopicConfig } from "../config/types.js"; import { logVerbose, shouldLogVerbose } from "../globals.js"; import { recordChannelActivity } from "../infra/channel-activity.js"; import { buildPairingReply } from "../pairing/pairing-messages.js"; @@ -57,6 +56,7 @@ import { hasBotMention, resolveTelegramThreadSpec, } from "./bot/helpers.js"; +import type { StickerMetadata, TelegramContext } from "./bot/types.js"; import { evaluateTelegramGroupBaseAccess } from "./group-access.js"; export type TelegramMediaRef = { diff --git a/src/telegram/bot-message-dispatch.test.ts b/src/telegram/bot-message-dispatch.test.ts index 64bfd96967..080587a76a 100644 --- a/src/telegram/bot-message-dispatch.test.ts +++ b/src/telegram/bot-message-dispatch.test.ts @@ -1,5 +1,5 @@ -import type { Bot } from "grammy"; import path from "node:path"; +import type { Bot } from "grammy"; import { beforeEach, describe, expect, it, vi } from "vitest"; import { STATE_DIR } from "../config/paths.js"; diff --git a/src/telegram/bot-message-dispatch.ts b/src/telegram/bot-message-dispatch.ts index 32cc019e51..6157b75440 100644 --- a/src/telegram/bot-message-dispatch.ts +++ b/src/telegram/bot-message-dispatch.ts @@ -1,10 +1,4 @@ import type { Bot } from "grammy"; -import type { OpenClawConfig, ReplyToMode, TelegramAccountConfig } from "../config/types.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { TelegramMessageContext } from "./bot-message-context.js"; -import type { TelegramBotOptions } from "./bot.js"; -import type { TelegramStreamMode } from "./bot/types.js"; -import type { TelegramInlineButtons } from "./button-types.js"; import { resolveAgentDir } from "../agents/agent-scope.js"; import { findModelInCatalog, @@ -21,9 +15,15 @@ import { logAckFailure, logTypingFailure } from "../channels/logging.js"; import { createReplyPrefixOptions } from "../channels/reply-prefix.js"; import { createTypingCallbacks } from "../channels/typing.js"; import { resolveMarkdownTableMode } from "../config/markdown-tables.js"; +import type { OpenClawConfig, ReplyToMode, TelegramAccountConfig } from "../config/types.js"; import { danger, logVerbose } from "../globals.js"; import { getAgentScopedMediaLocalRoots } from "../media/local-roots.js"; +import type { RuntimeEnv } from "../runtime.js"; +import type { TelegramMessageContext } from "./bot-message-context.js"; +import type { TelegramBotOptions } from "./bot.js"; import { deliverReplies } from "./bot/delivery.js"; +import type { TelegramStreamMode } from "./bot/types.js"; +import type { TelegramInlineButtons } from "./button-types.js"; import { resolveTelegramDraftStreamingChunking } from "./draft-chunking.js"; import { createTelegramDraftStream } from "./draft-stream.js"; import { editMessageTelegram } from "./send.js"; diff --git a/src/telegram/bot-message.ts b/src/telegram/bot-message.ts index 5c65468e44..6d9fa9ee45 100644 --- a/src/telegram/bot-message.ts +++ b/src/telegram/bot-message.ts @@ -1,14 +1,14 @@ import type { ReplyToMode } from "../config/config.js"; import type { TelegramAccountConfig } from "../config/types.telegram.js"; import type { RuntimeEnv } from "../runtime.js"; -import type { TelegramBotOptions } from "./bot.js"; -import type { TelegramContext, TelegramStreamMode } from "./bot/types.js"; import { buildTelegramMessageContext, type BuildTelegramMessageContextParams, type TelegramMediaRef, } from "./bot-message-context.js"; import { dispatchTelegramMessage } from "./bot-message-dispatch.js"; +import type { TelegramBotOptions } from "./bot.js"; +import type { TelegramContext, TelegramStreamMode } from "./bot/types.js"; /** Dependencies injected once when creating the message processor. */ type TelegramMessageProcessorDeps = Omit< diff --git a/src/telegram/bot-native-command-menu.ts b/src/telegram/bot-native-command-menu.ts index 98fcf1e0d3..25e0b420c1 100644 --- a/src/telegram/bot-native-command-menu.ts +++ b/src/telegram/bot-native-command-menu.ts @@ -1,9 +1,9 @@ import type { Bot } from "grammy"; -import type { RuntimeEnv } from "../runtime.js"; import { normalizeTelegramCommandName, TELEGRAM_COMMAND_NAME_PATTERN, } from "../config/telegram-custom-commands.js"; +import type { RuntimeEnv } from "../runtime.js"; import { withTelegramApiErrorLogging } from "./api-logging.js"; export const TELEGRAM_MAX_COMMANDS = 100; diff --git a/src/telegram/bot-native-commands.test.ts b/src/telegram/bot-native-commands.test.ts index 3a057299a1..fd98fbfc83 100644 --- a/src/telegram/bot-native-commands.test.ts +++ b/src/telegram/bot-native-commands.test.ts @@ -1,9 +1,9 @@ import path from "node:path"; import { beforeEach, describe, expect, it, vi } from "vitest"; import type { OpenClawConfig } from "../config/config.js"; +import { STATE_DIR } from "../config/paths.js"; import type { TelegramAccountConfig } from "../config/types.js"; import type { RuntimeEnv } from "../runtime.js"; -import { STATE_DIR } from "../config/paths.js"; import { registerTelegramNativeCommands } from "./bot-native-commands.js"; const { listSkillCommandsForAgents } = vi.hoisted(() => ({ diff --git a/src/telegram/bot-native-commands.ts b/src/telegram/bot-native-commands.ts index f22d44c3b7..6c6a5cfc39 100644 --- a/src/telegram/bot-native-commands.ts +++ b/src/telegram/bot-native-commands.ts @@ -1,16 +1,6 @@ import type { Bot, Context } from "grammy"; -import type { CommandArgs } from "../auto-reply/commands-registry.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { ChannelGroupPolicy } from "../config/group-policy.js"; -import type { - ReplyToMode, - TelegramAccountConfig, - TelegramGroupConfig, - TelegramTopicConfig, -} from "../config/types.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { TelegramContext } from "./bot/types.js"; import { resolveChunkMode } from "../auto-reply/chunk.js"; +import type { CommandArgs } from "../auto-reply/commands-registry.js"; import { buildCommandTextFromArgs, findCommandByNativeName, @@ -24,8 +14,16 @@ import { dispatchReplyWithBufferedBlockDispatcher } from "../auto-reply/reply/pr import { listSkillCommandsForAgents } from "../auto-reply/skill-commands.js"; import { resolveCommandAuthorizedFromAuthorizers } from "../channels/command-gating.js"; import { createReplyPrefixOptions } from "../channels/reply-prefix.js"; +import type { OpenClawConfig } from "../config/config.js"; +import type { ChannelGroupPolicy } from "../config/group-policy.js"; import { resolveMarkdownTableMode } from "../config/markdown-tables.js"; import { resolveTelegramCustomCommands } from "../config/telegram-custom-commands.js"; +import type { + ReplyToMode, + TelegramAccountConfig, + TelegramGroupConfig, + TelegramTopicConfig, +} from "../config/types.js"; import { danger, logVerbose } from "../globals.js"; import { getChildLogger } from "../logging.js"; import { getAgentScopedMediaLocalRoots } from "../media/local-roots.js"; @@ -36,6 +34,7 @@ import { } from "../plugins/commands.js"; import { resolveAgentRoute } from "../routing/resolve-route.js"; import { resolveThreadSessionKeys } from "../routing/session-key.js"; +import type { RuntimeEnv } from "../runtime.js"; import { withTelegramApiErrorLogging } from "./api-logging.js"; import { firstDefined, isSenderAllowed, normalizeAllowFromWithStore } from "./bot-access.js"; import { @@ -55,6 +54,7 @@ import { resolveTelegramGroupAllowFromContext, resolveTelegramThreadSpec, } from "./bot/helpers.js"; +import type { TelegramContext } from "./bot/types.js"; import { evaluateTelegramGroupBaseAccess, evaluateTelegramGroupPolicyAccess, diff --git a/src/telegram/bot-updates.ts b/src/telegram/bot-updates.ts index bf1422fc1e..990f009bb7 100644 --- a/src/telegram/bot-updates.ts +++ b/src/telegram/bot-updates.ts @@ -1,6 +1,6 @@ import type { Message } from "@grammyjs/types"; -import type { TelegramContext } from "./bot/types.js"; import { createDedupeCache } from "../infra/dedupe.js"; +import type { TelegramContext } from "./bot/types.js"; const MEDIA_GROUP_TIMEOUT_MS = 500; const RECENT_TELEGRAM_UPDATE_TTL_MS = 5 * 60_000; diff --git a/src/telegram/bot.create-telegram-bot.test-harness.ts b/src/telegram/bot.create-telegram-bot.test-harness.ts index d5070dbb1a..3617fb6fd5 100644 --- a/src/telegram/bot.create-telegram-bot.test-harness.ts +++ b/src/telegram/bot.create-telegram-bot.test-harness.ts @@ -1,9 +1,9 @@ import { beforeEach, vi } from "vitest"; +import { resetInboundDedupe } from "../auto-reply/reply/inbound-dedupe.js"; import type { MsgContext } from "../auto-reply/templating.js"; import type { GetReplyOptions, ReplyPayload } from "../auto-reply/types.js"; import type { OpenClawConfig } from "../config/config.js"; import type { MockFn } from "../test-utils/vitest-mock-fn.js"; -import { resetInboundDedupe } from "../auto-reply/reply/inbound-dedupe.js"; type AnyMock = MockFn<(...args: unknown[]) => unknown>; type AnyAsyncMock = MockFn<(...args: unknown[]) => Promise>; diff --git a/src/telegram/bot.create-telegram-bot.test.ts b/src/telegram/bot.create-telegram-bot.test.ts index 3a3e0909a9..54dd77a591 100644 --- a/src/telegram/bot.create-telegram-bot.test.ts +++ b/src/telegram/bot.create-telegram-bot.test.ts @@ -1,7 +1,7 @@ -import type { Chat, Message } from "@grammyjs/types"; import fs from "node:fs"; import os from "node:os"; import path from "node:path"; +import type { Chat, Message } from "@grammyjs/types"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { escapeRegExp, formatEnvelopeTimestamp } from "../../test/helpers/envelope-timestamp.js"; import { diff --git a/src/telegram/bot.ts b/src/telegram/bot.ts index 5d995eab8f..076891a8da 100644 --- a/src/telegram/bot.ts +++ b/src/telegram/bot.ts @@ -1,10 +1,8 @@ -import type { ApiClientOptions } from "grammy"; import { sequentialize } from "@grammyjs/runner"; import { apiThrottler } from "@grammyjs/transformer-throttler"; import { type Message, type UserFromGetMe } from "@grammyjs/types"; +import type { ApiClientOptions } from "grammy"; import { Bot, webhookCallback } from "grammy"; -import type { OpenClawConfig, ReplyToMode } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; import { resolveDefaultAgentId } from "../agents/agent-scope.js"; import { resolveTextChunkLimit } from "../auto-reply/chunk.js"; import { isAbortRequestText } from "../auto-reply/reply/abort.js"; @@ -14,6 +12,7 @@ import { resolveNativeCommandsEnabled, resolveNativeSkillsEnabled, } from "../config/commands.js"; +import type { OpenClawConfig, ReplyToMode } from "../config/config.js"; import { loadConfig } from "../config/config.js"; import { resolveChannelGroupPolicy, @@ -24,6 +23,7 @@ import { danger, logVerbose, shouldLogVerbose } from "../globals.js"; import { formatUncaughtError } from "../infra/errors.js"; import { getChildLogger } from "../logging.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; +import type { RuntimeEnv } from "../runtime.js"; import { resolveTelegramAccount } from "./accounts.js"; import { registerTelegramHandlers } from "./bot-handlers.js"; import { createTelegramMessageProcessor } from "./bot-message.js"; diff --git a/src/telegram/bot/delivery.ts b/src/telegram/bot/delivery.ts index d446176e55..a6fe055cdf 100644 --- a/src/telegram/bot/delivery.ts +++ b/src/telegram/bot/delivery.ts @@ -1,11 +1,8 @@ import { type Bot, GrammyError, InputFile } from "grammy"; +import { chunkMarkdownTextWithMode, type ChunkMode } from "../../auto-reply/chunk.js"; import type { ReplyPayload } from "../../auto-reply/types.js"; import type { ReplyToMode } from "../../config/config.js"; import type { MarkdownTableMode } from "../../config/types.base.js"; -import type { RuntimeEnv } from "../../runtime.js"; -import type { TelegramInlineButtons } from "../button-types.js"; -import type { StickerMetadata, TelegramContext } from "./types.js"; -import { chunkMarkdownTextWithMode, type ChunkMode } from "../../auto-reply/chunk.js"; import { danger, logVerbose, warn } from "../../globals.js"; import { formatErrorMessage } from "../../infra/errors.js"; import { retryAsync } from "../../infra/retry.js"; @@ -13,8 +10,10 @@ import { mediaKindFromMime } from "../../media/constants.js"; import { fetchRemoteMedia } from "../../media/fetch.js"; import { isGifMedia } from "../../media/mime.js"; import { saveMediaBuffer } from "../../media/store.js"; +import type { RuntimeEnv } from "../../runtime.js"; import { loadWebMedia } from "../../web/media.js"; import { withTelegramApiErrorLogging } from "../api-logging.js"; +import type { TelegramInlineButtons } from "../button-types.js"; import { splitTelegramCaption } from "../caption.js"; import { markdownToTelegramChunks, @@ -31,6 +30,7 @@ import { resolveTelegramReplyId, type TelegramThreadSpec, } from "./helpers.js"; +import type { StickerMetadata, TelegramContext } from "./types.js"; const PARSE_ERR_RE = /can't parse entities|parse entities|find end of the entity/i; const VOICE_FORBIDDEN_RE = /VOICE_MESSAGES_FORBIDDEN/; diff --git a/src/telegram/bot/helpers.ts b/src/telegram/bot/helpers.ts index 1a98334421..7f842976d6 100644 --- a/src/telegram/bot/helpers.ts +++ b/src/telegram/bot/helpers.ts @@ -1,13 +1,13 @@ import type { Chat, Message, MessageOrigin, User } from "@grammyjs/types"; -import type { TelegramGroupConfig, TelegramTopicConfig } from "../../config/types.js"; -import type { TelegramStreamMode } from "./types.js"; import { formatLocationText, type NormalizedLocation } from "../../channels/location.js"; +import type { TelegramGroupConfig, TelegramTopicConfig } from "../../config/types.js"; import { readChannelAllowFromStore } from "../../pairing/pairing-store.js"; import { firstDefined, normalizeAllowFromWithStore, type NormalizedAllowFrom, } from "../bot-access.js"; +import type { TelegramStreamMode } from "./types.js"; const TELEGRAM_GENERAL_TOPIC_ID = 1; diff --git a/src/telegram/draft-chunking.ts b/src/telegram/draft-chunking.ts index 8c594cb654..e73a76ae8c 100644 --- a/src/telegram/draft-chunking.ts +++ b/src/telegram/draft-chunking.ts @@ -1,6 +1,6 @@ -import type { OpenClawConfig } from "../config/config.js"; import { resolveTextChunkLimit } from "../auto-reply/chunk.js"; import { getChannelDock } from "../channels/dock.js"; +import type { OpenClawConfig } from "../config/config.js"; import { normalizeAccountId } from "../routing/session-key.js"; const DEFAULT_TELEGRAM_DRAFT_STREAM_MIN = 200; diff --git a/src/telegram/monitor.ts b/src/telegram/monitor.ts index d243ca37fa..05629e4ace 100644 --- a/src/telegram/monitor.ts +++ b/src/telegram/monitor.ts @@ -1,12 +1,12 @@ import { type RunOptions, run } from "@grammyjs/runner"; -import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; import { resolveAgentMaxConcurrent } from "../config/agent-limits.js"; +import type { OpenClawConfig } from "../config/config.js"; import { loadConfig } from "../config/config.js"; import { computeBackoff, sleepWithAbort } from "../infra/backoff.js"; import { formatErrorMessage } from "../infra/errors.js"; import { formatDurationPrecise } from "../infra/format-time/format-duration.ts"; import { registerUnhandledRejectionHandler } from "../infra/unhandled-rejections.js"; +import type { RuntimeEnv } from "../runtime.js"; import { resolveTelegramAccount } from "./accounts.js"; import { resolveTelegramAllowedUpdates } from "./allowed-updates.js"; import { createTelegramBot } from "./bot.js"; diff --git a/src/telegram/send.ts b/src/telegram/send.ts index c06ec665cb..4e37a24028 100644 --- a/src/telegram/send.ts +++ b/src/telegram/send.ts @@ -5,8 +5,6 @@ import type { ReactionTypeEmoji, } from "@grammyjs/types"; import { type ApiClientOptions, Bot, HttpError, InputFile } from "grammy"; -import type { RetryConfig } from "../infra/retry.js"; -import type { TelegramInlineButtons } from "./button-types.js"; import { loadConfig } from "../config/config.js"; import { resolveMarkdownTableMode } from "../config/markdown-tables.js"; import { logVerbose } from "../globals.js"; @@ -14,6 +12,7 @@ import { recordChannelActivity } from "../infra/channel-activity.js"; import { isDiagnosticFlagEnabled } from "../infra/diagnostic-flags.js"; import { formatErrorMessage, formatUncaughtError } from "../infra/errors.js"; import { createTelegramRetryRunner } from "../infra/retry-policy.js"; +import type { RetryConfig } from "../infra/retry.js"; import { redactSensitiveText } from "../logging/redact.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { mediaKindFromMime } from "../media/constants.js"; @@ -23,6 +22,7 @@ import { loadWebMedia } from "../web/media.js"; import { type ResolvedTelegramAccount, resolveTelegramAccount } from "./accounts.js"; import { withTelegramApiErrorLogging } from "./api-logging.js"; import { buildTelegramThreadParams } from "./bot/helpers.js"; +import type { TelegramInlineButtons } from "./button-types.js"; import { splitTelegramCaption } from "./caption.js"; import { resolveTelegramFetch } from "./fetch.js"; import { renderTelegramHtmlText } from "./format.js"; diff --git a/src/telegram/sticker-cache.ts b/src/telegram/sticker-cache.ts index 24d989820c..4fea08b383 100644 --- a/src/telegram/sticker-cache.ts +++ b/src/telegram/sticker-cache.ts @@ -1,14 +1,14 @@ import fs from "node:fs/promises"; import path from "node:path"; -import type { ModelCatalogEntry } from "../agents/model-catalog.js"; -import type { OpenClawConfig } from "../config/config.js"; import { resolveApiKeyForProvider } from "../agents/model-auth.js"; +import type { ModelCatalogEntry } from "../agents/model-catalog.js"; import { findModelInCatalog, loadModelCatalog, modelSupportsVision, } from "../agents/model-catalog.js"; import { resolveDefaultModelForAgent } from "../agents/model-selection.js"; +import type { OpenClawConfig } from "../config/config.js"; import { STATE_DIR } from "../config/paths.js"; import { logVerbose } from "../globals.js"; import { loadJsonFile, saveJsonFile } from "../infra/json-file.js"; diff --git a/src/telegram/webhook.ts b/src/telegram/webhook.ts index 259fa4c7ab..9eb3c73d7f 100644 --- a/src/telegram/webhook.ts +++ b/src/telegram/webhook.ts @@ -1,7 +1,6 @@ -import { webhookCallback } from "grammy"; import { createServer } from "node:http"; +import { webhookCallback } from "grammy"; import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; import { isDiagnosticsEnabled } from "../infra/diagnostic-events.js"; import { formatErrorMessage } from "../infra/errors.js"; import { installRequestBodyLimitGuard } from "../infra/http-body.js"; @@ -12,6 +11,7 @@ import { startDiagnosticHeartbeat, stopDiagnosticHeartbeat, } from "../logging/diagnostic.js"; +import type { RuntimeEnv } from "../runtime.js"; import { defaultRuntime } from "../runtime.js"; import { resolveTelegramAllowedUpdates } from "./allowed-updates.js"; import { withTelegramApiErrorLogging } from "./api-logging.js"; diff --git a/src/test-utils/imessage-test-plugin.ts b/src/test-utils/imessage-test-plugin.ts index 0c02987ede..104d8ca847 100644 --- a/src/test-utils/imessage-test-plugin.ts +++ b/src/test-utils/imessage-test-plugin.ts @@ -1,5 +1,5 @@ -import type { ChannelOutboundAdapter, ChannelPlugin } from "../channels/plugins/types.js"; import { imessageOutbound } from "../channels/plugins/outbound/imessage.js"; +import type { ChannelOutboundAdapter, ChannelPlugin } from "../channels/plugins/types.js"; import { normalizeIMessageHandle } from "../imessage/targets.js"; export const createIMessageTestPlugin = (params?: { diff --git a/src/tts/tts-core.ts b/src/tts/tts-core.ts index da7b178779..c460793c37 100644 --- a/src/tts/tts-core.ts +++ b/src/tts/tts-core.ts @@ -1,13 +1,6 @@ +import { rmSync } from "node:fs"; import { completeSimple, type TextContent } from "@mariozechner/pi-ai"; import { EdgeTTS } from "node-edge-tts"; -import { rmSync } from "node:fs"; -import type { OpenClawConfig } from "../config/config.js"; -import type { - ResolvedTtsConfig, - ResolvedTtsModelOverrides, - TtsDirectiveOverrides, - TtsDirectiveParseResult, -} from "./tts.js"; import { getApiKeyForModel, requireApiKey } from "../agents/model-auth.js"; import { buildModelAliasIndex, @@ -16,6 +9,13 @@ import { type ModelRef, } from "../agents/model-selection.js"; import { resolveModel } from "../agents/pi-embedded-runner/model.js"; +import type { OpenClawConfig } from "../config/config.js"; +import type { + ResolvedTtsConfig, + ResolvedTtsModelOverrides, + TtsDirectiveOverrides, + TtsDirectiveParseResult, +} from "./tts.js"; const DEFAULT_ELEVENLABS_BASE_URL = "https://api.elevenlabs.io"; const TEMP_FILE_CLEANUP_DELAY_MS = 5 * 60 * 1000; // 5 minutes diff --git a/src/tts/tts.test.ts b/src/tts/tts.test.ts index 4962c284c7..1c5ecfb558 100644 --- a/src/tts/tts.test.ts +++ b/src/tts/tts.test.ts @@ -1,8 +1,8 @@ import { completeSimple, type AssistantMessage } from "@mariozechner/pi-ai"; import { describe, expect, it, vi, beforeEach } from "vitest"; -import type { OpenClawConfig } from "../config/config.js"; import { getApiKeyForModel } from "../agents/model-auth.js"; import { resolveModel } from "../agents/pi-embedded-runner/model.js"; +import type { OpenClawConfig } from "../config/config.js"; import { withEnv } from "../test-utils/env.js"; import * as tts from "./tts.js"; diff --git a/src/tts/tts.ts b/src/tts/tts.ts index edfa8eda62..becdf7bfc1 100644 --- a/src/tts/tts.ts +++ b/src/tts/tts.ts @@ -11,6 +11,7 @@ import { import { tmpdir } from "node:os"; import path from "node:path"; import type { ReplyPayload } from "../auto-reply/types.js"; +import { normalizeChannelId } from "../channels/plugins/index.js"; import type { ChannelId } from "../channels/plugins/types.js"; import type { OpenClawConfig } from "../config/config.js"; import type { @@ -20,7 +21,6 @@ import type { TtsProvider, TtsModelOverrideConfig, } from "../config/types.tts.js"; -import { normalizeChannelId } from "../channels/plugins/index.js"; import { logVerbose } from "../globals.js"; import { stripMarkdown } from "../line/markdown-to-line.js"; import { isVoiceCompatibleAudio } from "../media/audio.js"; diff --git a/src/tui/commands.ts b/src/tui/commands.ts index 66260d6a16..4f15841c9d 100644 --- a/src/tui/commands.ts +++ b/src/tui/commands.ts @@ -1,7 +1,7 @@ import type { SlashCommand } from "@mariozechner/pi-tui"; -import type { OpenClawConfig } from "../config/types.js"; import { listChatCommands, listChatCommandsForConfig } from "../auto-reply/commands-registry.js"; import { formatThinkingLevels, listThinkingLevelLabels } from "../auto-reply/thinking.js"; +import type { OpenClawConfig } from "../config/types.js"; const VERBOSE_LEVELS = ["on", "off"]; const REASONING_LEVELS = ["on", "off"]; diff --git a/src/tui/tui-command-handlers.ts b/src/tui/tui-command-handlers.ts index 233cc293bd..bc39a1ed24 100644 --- a/src/tui/tui-command-handlers.ts +++ b/src/tui/tui-command-handlers.ts @@ -1,28 +1,28 @@ -import type { Component, TUI } from "@mariozechner/pi-tui"; import { randomUUID } from "node:crypto"; +import type { Component, TUI } from "@mariozechner/pi-tui"; +import { + formatThinkingLevels, + normalizeUsageDisplay, + resolveResponseUsageMode, +} from "../auto-reply/thinking.js"; import type { SessionsPatchResult } from "../gateway/protocol/index.js"; +import { formatRelativeTimestamp } from "../infra/format-time/format-relative.ts"; +import { normalizeAgentId } from "../routing/session-key.js"; +import { helpText, parseCommand } from "./commands.js"; import type { ChatLog } from "./components/chat-log.js"; +import { + createFilterableSelectList, + createSearchableSelectList, + createSettingsList, +} from "./components/selectors.js"; import type { GatewayChatClient } from "./gateway-chat.js"; +import { formatStatusSummary } from "./tui-status-summary.js"; import type { AgentSummary, GatewayStatusSummary, TuiOptions, TuiStateAccess, } from "./tui-types.js"; -import { - formatThinkingLevels, - normalizeUsageDisplay, - resolveResponseUsageMode, -} from "../auto-reply/thinking.js"; -import { formatRelativeTimestamp } from "../infra/format-time/format-relative.ts"; -import { normalizeAgentId } from "../routing/session-key.js"; -import { helpText, parseCommand } from "./commands.js"; -import { - createFilterableSelectList, - createSearchableSelectList, - createSettingsList, -} from "./components/selectors.js"; -import { formatStatusSummary } from "./tui-status-summary.js"; type CommandHandlerContext = { client: GatewayChatClient; diff --git a/src/tui/tui-event-handlers.test.ts b/src/tui/tui-event-handlers.test.ts index b3c6ff47ea..10b619d0d0 100644 --- a/src/tui/tui-event-handlers.test.ts +++ b/src/tui/tui-event-handlers.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from "vitest"; -import type { AgentEvent, ChatEvent, TuiStateAccess } from "./tui-types.js"; import { createEventHandlers } from "./tui-event-handlers.js"; +import type { AgentEvent, ChatEvent, TuiStateAccess } from "./tui-types.js"; type MockFn = ReturnType; type HandlerChatLog = { diff --git a/src/tui/tui-event-handlers.ts b/src/tui/tui-event-handlers.ts index 60bd6f72c2..d852924e96 100644 --- a/src/tui/tui-event-handlers.ts +++ b/src/tui/tui-event-handlers.ts @@ -1,6 +1,6 @@ -import type { AgentEvent, ChatEvent, TuiStateAccess } from "./tui-types.js"; import { asString, extractTextFromMessage, isCommandMessage } from "./tui-formatters.js"; import { TuiStreamAssembler } from "./tui-stream-assembler.js"; +import type { AgentEvent, ChatEvent, TuiStateAccess } from "./tui-types.js"; type EventHandlerChatLog = { startTool: (toolCallId: string, toolName: string, args: unknown) => void; diff --git a/src/tui/tui-local-shell.ts b/src/tui/tui-local-shell.ts index 58f01ba78f..94c850ca9e 100644 --- a/src/tui/tui-local-shell.ts +++ b/src/tui/tui-local-shell.ts @@ -1,5 +1,5 @@ -import type { Component, SelectItem } from "@mariozechner/pi-tui"; import { spawn } from "node:child_process"; +import type { Component, SelectItem } from "@mariozechner/pi-tui"; import { createSearchableSelectList } from "./components/selectors.js"; type LocalShellDeps = { diff --git a/src/tui/tui-session-actions.test.ts b/src/tui/tui-session-actions.test.ts index 7e20595058..541c4e97ce 100644 --- a/src/tui/tui-session-actions.test.ts +++ b/src/tui/tui-session-actions.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from "vitest"; -import type { TuiStateAccess } from "./tui-types.js"; import { createSessionActions } from "./tui-session-actions.js"; +import type { TuiStateAccess } from "./tui-types.js"; describe("tui session actions", () => { it("queues session refreshes and applies the latest result", async () => { diff --git a/src/tui/tui-session-actions.ts b/src/tui/tui-session-actions.ts index 13faf44cee..82c6a795dd 100644 --- a/src/tui/tui-session-actions.ts +++ b/src/tui/tui-session-actions.ts @@ -1,14 +1,14 @@ import type { TUI } from "@mariozechner/pi-tui"; import type { SessionsPatchResult } from "../gateway/protocol/index.js"; -import type { ChatLog } from "./components/chat-log.js"; -import type { GatewayAgentsList, GatewayChatClient } from "./gateway-chat.js"; -import type { TuiOptions, TuiStateAccess } from "./tui-types.js"; import { normalizeAgentId, normalizeMainKey, parseAgentSessionKey, } from "../routing/session-key.js"; +import type { ChatLog } from "./components/chat-log.js"; +import type { GatewayAgentsList, GatewayChatClient } from "./gateway-chat.js"; import { asString, extractTextFromMessage, isCommandMessage } from "./tui-formatters.js"; +import type { TuiOptions, TuiStateAccess } from "./tui-types.js"; type SessionActionContext = { client: GatewayChatClient; diff --git a/src/tui/tui-status-summary.ts b/src/tui/tui-status-summary.ts index fa5345cf14..64fc00adad 100644 --- a/src/tui/tui-status-summary.ts +++ b/src/tui/tui-status-summary.ts @@ -1,7 +1,7 @@ -import type { GatewayStatusSummary } from "./tui-types.js"; import { formatTimeAgo } from "../infra/format-time/format-relative.ts"; import { formatTokenCount } from "../utils/usage-format.js"; import { formatContextUsageLine } from "./tui-formatters.js"; +import type { GatewayStatusSummary } from "./tui-types.js"; export function formatStatusSummary(summary: GatewayStatusSummary) { const lines: string[] = []; diff --git a/src/tui/tui.ts b/src/tui/tui.ts index d53c92a127..8f22087fe9 100644 --- a/src/tui/tui.ts +++ b/src/tui/tui.ts @@ -6,13 +6,6 @@ import { Text, TUI, } from "@mariozechner/pi-tui"; -import type { - AgentSummary, - SessionInfo, - SessionScope, - TuiOptions, - TuiStateAccess, -} from "./tui-types.js"; import { resolveDefaultAgentId } from "../agents/agent-scope.js"; import { loadConfig } from "../config/config.js"; import { @@ -32,6 +25,13 @@ import { formatTokens } from "./tui-formatters.js"; import { createLocalShellRunner } from "./tui-local-shell.js"; import { createOverlayHandlers } from "./tui-overlays.js"; import { createSessionActions } from "./tui-session-actions.js"; +import type { + AgentSummary, + SessionInfo, + SessionScope, + TuiOptions, + TuiStateAccess, +} from "./tui-types.js"; import { buildWaitingStatusMessage, defaultWaitingPhrases } from "./tui-waiting.js"; export { resolveFinalAssistantText } from "./tui-formatters.js"; diff --git a/src/web/accounts.ts b/src/web/accounts.ts index fdd9380833..41f9f2bd91 100644 --- a/src/web/accounts.ts +++ b/src/web/accounts.ts @@ -1,9 +1,9 @@ import fs from "node:fs"; import path from "node:path"; -import type { OpenClawConfig } from "../config/config.js"; -import type { DmPolicy, GroupPolicy, WhatsAppAccountConfig } from "../config/types.js"; import { createAccountListHelpers } from "../channels/plugins/account-helpers.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveOAuthDir } from "../config/paths.js"; +import type { DmPolicy, GroupPolicy, WhatsAppAccountConfig } from "../config/types.js"; import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../routing/session-key.js"; import { resolveUserPath } from "../utils.js"; import { hasWebCredsSync } from "./auth-store.js"; diff --git a/src/web/active-listener.ts b/src/web/active-listener.ts index 0cb48ab405..2c85289961 100644 --- a/src/web/active-listener.ts +++ b/src/web/active-listener.ts @@ -1,5 +1,5 @@ -import type { PollInput } from "../polls.js"; import { formatCliCommand } from "../cli/command-format.js"; +import type { PollInput } from "../polls.js"; import { DEFAULT_ACCOUNT_ID } from "../routing/session-key.js"; export type ActiveWebSendOptions = { diff --git a/src/web/auth-store.ts b/src/web/auth-store.ts index 53af4469cb..b17df5e322 100644 --- a/src/web/auth-store.ts +++ b/src/web/auth-store.ts @@ -1,13 +1,13 @@ import fsSync from "node:fs"; import fs from "node:fs/promises"; import path from "node:path"; -import type { WebChannel } from "../utils.js"; import { formatCliCommand } from "../cli/command-format.js"; import { resolveOAuthDir } from "../config/paths.js"; import { info, success } from "../globals.js"; import { getChildLogger } from "../logging.js"; import { DEFAULT_ACCOUNT_ID } from "../routing/session-key.js"; import { defaultRuntime, type RuntimeEnv } from "../runtime.js"; +import type { WebChannel } from "../utils.js"; import { jidToE164, resolveUserPath } from "../utils.js"; export function resolveDefaultWebAuthDir(): string { diff --git a/src/web/auto-reply.broadcast-groups.test-harness.ts b/src/web/auto-reply.broadcast-groups.test-harness.ts index 57d31861d8..81ab35ee20 100644 --- a/src/web/auto-reply.broadcast-groups.test-harness.ts +++ b/src/web/auto-reply.broadcast-groups.test-harness.ts @@ -1,11 +1,11 @@ import { vi } from "vitest"; -import type { WebInboundMessage } from "./inbound.js"; import { monitorWebChannel } from "./auto-reply.js"; import { createWebInboundDeliverySpies, createWebListenerFactoryCapture, sendWebDirectInboundMessage, } from "./auto-reply.test-harness.js"; +import type { WebInboundMessage } from "./inbound.js"; export async function monitorWebChannelWithCapture(resolver: unknown): Promise<{ spies: ReturnType; diff --git a/src/web/auto-reply.test-harness.ts b/src/web/auto-reply.test-harness.ts index 7cbf0ea386..d1b0aefb6c 100644 --- a/src/web/auto-reply.test-harness.ts +++ b/src/web/auto-reply.test-harness.ts @@ -3,10 +3,10 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { afterAll, afterEach, beforeAll, beforeEach, vi } from "vitest"; -import type { WebInboundMessage } from "./inbound.js"; import { resetInboundDedupe } from "../auto-reply/reply/inbound-dedupe.js"; import * as ssrf from "../infra/net/ssrf.js"; import { resetLogger, setLoggerOverride } from "../logging.js"; +import type { WebInboundMessage } from "./inbound.js"; import { resetBaileysMocks as _resetBaileysMocks, resetLoadConfigMock as _resetLoadConfigMock, diff --git a/src/web/auto-reply.web-auto-reply.compresses-common-formats-jpeg-cap.e2e.test.ts b/src/web/auto-reply.web-auto-reply.compresses-common-formats-jpeg-cap.e2e.test.ts index 2fe9429768..da3f7ae0c9 100644 --- a/src/web/auto-reply.web-auto-reply.compresses-common-formats-jpeg-cap.e2e.test.ts +++ b/src/web/auto-reply.web-auto-reply.compresses-common-formats-jpeg-cap.e2e.test.ts @@ -1,7 +1,6 @@ import crypto from "node:crypto"; import sharp from "sharp"; import { describe, expect, it, vi } from "vitest"; -import type { WebInboundMessage } from "./inbound.js"; import { monitorWebChannel } from "./auto-reply.js"; import { installWebAutoReplyTestHomeHooks, @@ -9,6 +8,7 @@ import { resetLoadConfigMock, setLoadConfigMock, } from "./auto-reply.test-harness.js"; +import type { WebInboundMessage } from "./inbound.js"; installWebAutoReplyTestHomeHooks(); diff --git a/src/web/auto-reply/deliver-reply.test.ts b/src/web/auto-reply/deliver-reply.test.ts index 6a00136953..32850a95fd 100644 --- a/src/web/auto-reply/deliver-reply.test.ts +++ b/src/web/auto-reply/deliver-reply.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from "vitest"; -import type { WebInboundMsg } from "./types.js"; import { deliverWebReply } from "./deliver-reply.js"; +import type { WebInboundMsg } from "./types.js"; vi.mock("../../globals.js", async (importOriginal) => { const actual = await importOriginal(); diff --git a/src/web/auto-reply/deliver-reply.ts b/src/web/auto-reply/deliver-reply.ts index 0f9064e7b2..cb9b1e6ed4 100644 --- a/src/web/auto-reply/deliver-reply.ts +++ b/src/web/auto-reply/deliver-reply.ts @@ -1,7 +1,6 @@ +import { chunkMarkdownTextWithMode, type ChunkMode } from "../../auto-reply/chunk.js"; import type { ReplyPayload } from "../../auto-reply/types.js"; import type { MarkdownTableMode } from "../../config/types.base.js"; -import type { WebInboundMsg } from "./types.js"; -import { chunkMarkdownTextWithMode, type ChunkMode } from "../../auto-reply/chunk.js"; import { logVerbose, shouldLogVerbose } from "../../globals.js"; import { convertMarkdownTables } from "../../markdown/tables.js"; import { markdownToWhatsApp } from "../../markdown/whatsapp.js"; @@ -10,6 +9,7 @@ import { loadWebMedia } from "../media.js"; import { newConnectionId } from "../reconnect.js"; import { formatError } from "../session.js"; import { whatsappOutboundLog } from "./loggers.js"; +import type { WebInboundMsg } from "./types.js"; import { elide } from "./util.js"; export async function deliverWebReply(params: { diff --git a/src/web/auto-reply/heartbeat-runner.test.ts b/src/web/auto-reply/heartbeat-runner.test.ts index e89477648b..e6e5d234f8 100644 --- a/src/web/auto-reply/heartbeat-runner.test.ts +++ b/src/web/auto-reply/heartbeat-runner.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; import type { getReplyFromConfig } from "../../auto-reply/reply.js"; -import type { sendMessageWhatsApp } from "../outbound.js"; import { HEARTBEAT_TOKEN } from "../../auto-reply/tokens.js"; +import type { sendMessageWhatsApp } from "../outbound.js"; const state = vi.hoisted(() => ({ visibility: { showAlerts: true, showOk: true, useIndicator: false }, diff --git a/src/web/auto-reply/mentions.ts b/src/web/auto-reply/mentions.ts index 7d5dcc22f2..f595bd2f0a 100644 --- a/src/web/auto-reply/mentions.ts +++ b/src/web/auto-reply/mentions.ts @@ -1,7 +1,7 @@ -import type { loadConfig } from "../../config/config.js"; -import type { WebInboundMsg } from "./types.js"; import { buildMentionRegexes, normalizeMentionText } from "../../auto-reply/reply/mentions.js"; +import type { loadConfig } from "../../config/config.js"; import { isSelfChatMode, jidToE164, normalizeE164 } from "../../utils.js"; +import type { WebInboundMsg } from "./types.js"; export type MentionConfig = { mentionRegexes: RegExp[]; diff --git a/src/web/auto-reply/monitor.ts b/src/web/auto-reply/monitor.ts index db515d3f06..8ee3c8a85c 100644 --- a/src/web/auto-reply/monitor.ts +++ b/src/web/auto-reply/monitor.ts @@ -1,4 +1,3 @@ -import type { WebChannelStatus, WebInboundMsg, WebMonitorTuning } from "./types.js"; import { hasControlCommand } from "../../auto-reply/command-detection.js"; import { resolveInboundDebounceMs } from "../../auto-reply/inbound-debounce.js"; import { getReplyFromConfig } from "../../auto-reply/reply.js"; @@ -29,6 +28,7 @@ import { whatsappHeartbeatLog, whatsappLog } from "./loggers.js"; import { buildMentionConfig } from "./mentions.js"; import { createEchoTracker } from "./monitor/echo.js"; import { createWebOnMessageHandler } from "./monitor/on-message.js"; +import type { WebChannelStatus, WebInboundMsg, WebMonitorTuning } from "./types.js"; import { isLikelyWhatsAppCryptoError } from "./util.js"; export async function monitorWebChannel( diff --git a/src/web/auto-reply/monitor/ack-reaction.ts b/src/web/auto-reply/monitor/ack-reaction.ts index 13a2b76e2e..2ac7c56d2a 100644 --- a/src/web/auto-reply/monitor/ack-reaction.ts +++ b/src/web/auto-reply/monitor/ack-reaction.ts @@ -1,9 +1,9 @@ -import type { loadConfig } from "../../../config/config.js"; -import type { WebInboundMsg } from "../types.js"; import { shouldAckReactionForWhatsApp } from "../../../channels/ack-reactions.js"; +import type { loadConfig } from "../../../config/config.js"; import { logVerbose } from "../../../globals.js"; import { sendReactionWhatsApp } from "../../outbound.js"; import { formatError } from "../../session.js"; +import type { WebInboundMsg } from "../types.js"; import { resolveGroupActivationFor } from "./group-activation.js"; export function maybeSendAckReaction(params: { diff --git a/src/web/auto-reply/monitor/broadcast.ts b/src/web/auto-reply/monitor/broadcast.ts index 058adda23a..88c0670fe3 100644 --- a/src/web/auto-reply/monitor/broadcast.ts +++ b/src/web/auto-reply/monitor/broadcast.ts @@ -1,7 +1,5 @@ import type { loadConfig } from "../../../config/config.js"; import type { resolveAgentRoute } from "../../../routing/resolve-route.js"; -import type { WebInboundMsg } from "../types.js"; -import type { GroupHistoryEntry } from "./process-message.js"; import { buildAgentSessionKey } from "../../../routing/resolve-route.js"; import { buildAgentMainSessionKey, @@ -10,6 +8,8 @@ import { } from "../../../routing/session-key.js"; import { formatError } from "../../session.js"; import { whatsappInboundLog } from "../loggers.js"; +import type { WebInboundMsg } from "../types.js"; +import type { GroupHistoryEntry } from "./process-message.js"; export async function maybeBroadcastMessage(params: { cfg: ReturnType; diff --git a/src/web/auto-reply/monitor/group-activation.ts b/src/web/auto-reply/monitor/group-activation.ts index 944ddeb46d..aeb16428fb 100644 --- a/src/web/auto-reply/monitor/group-activation.ts +++ b/src/web/auto-reply/monitor/group-activation.ts @@ -1,5 +1,5 @@ -import type { loadConfig } from "../../../config/config.js"; import { normalizeGroupActivation } from "../../../auto-reply/group-activation.js"; +import type { loadConfig } from "../../../config/config.js"; import { resolveChannelGroupPolicy, resolveChannelGroupRequireMention, diff --git a/src/web/auto-reply/monitor/group-gating.ts b/src/web/auto-reply/monitor/group-gating.ts index bb024cfb95..a2ae98eea5 100644 --- a/src/web/auto-reply/monitor/group-gating.ts +++ b/src/web/auto-reply/monitor/group-gating.ts @@ -1,12 +1,12 @@ -import type { loadConfig } from "../../../config/config.js"; -import type { MentionConfig } from "../mentions.js"; -import type { WebInboundMsg } from "../types.js"; import { hasControlCommand } from "../../../auto-reply/command-detection.js"; import { parseActivationCommand } from "../../../auto-reply/group-activation.js"; import { recordPendingHistoryEntryIfEnabled } from "../../../auto-reply/reply/history.js"; import { resolveMentionGating } from "../../../channels/mention-gating.js"; +import type { loadConfig } from "../../../config/config.js"; import { normalizeE164 } from "../../../utils.js"; +import type { MentionConfig } from "../mentions.js"; import { buildMentionConfig, debugMention, resolveOwnerList } from "../mentions.js"; +import type { WebInboundMsg } from "../types.js"; import { stripMentionsForCommand } from "./commands.js"; import { resolveGroupActivationFor, resolveGroupPolicyFor } from "./group-activation.js"; import { noteGroupMember } from "./group-members.js"; diff --git a/src/web/auto-reply/monitor/message-line.ts b/src/web/auto-reply/monitor/message-line.ts index a0c104a902..1416d8424e 100644 --- a/src/web/auto-reply/monitor/message-line.ts +++ b/src/web/auto-reply/monitor/message-line.ts @@ -1,7 +1,7 @@ -import type { loadConfig } from "../../../config/config.js"; -import type { WebInboundMsg } from "../types.js"; import { resolveMessagePrefix } from "../../../agents/identity.js"; import { formatInboundEnvelope, type EnvelopeFormatOptions } from "../../../auto-reply/envelope.js"; +import type { loadConfig } from "../../../config/config.js"; +import type { WebInboundMsg } from "../types.js"; export function formatReplyContext(msg: WebInboundMsg) { if (!msg.replyToBody) { diff --git a/src/web/auto-reply/monitor/on-message.ts b/src/web/auto-reply/monitor/on-message.ts index d9232dcd80..947a56603e 100644 --- a/src/web/auto-reply/monitor/on-message.ts +++ b/src/web/auto-reply/monitor/on-message.ts @@ -1,15 +1,15 @@ import type { getReplyFromConfig } from "../../../auto-reply/reply.js"; import type { MsgContext } from "../../../auto-reply/templating.js"; -import type { MentionConfig } from "../mentions.js"; -import type { WebInboundMsg } from "../types.js"; -import type { EchoTracker } from "./echo.js"; -import type { GroupHistoryEntry } from "./group-gating.js"; import { loadConfig } from "../../../config/config.js"; import { logVerbose } from "../../../globals.js"; import { resolveAgentRoute } from "../../../routing/resolve-route.js"; import { buildGroupHistoryKey } from "../../../routing/session-key.js"; import { normalizeE164 } from "../../../utils.js"; +import type { MentionConfig } from "../mentions.js"; +import type { WebInboundMsg } from "../types.js"; import { maybeBroadcastMessage } from "./broadcast.js"; +import type { EchoTracker } from "./echo.js"; +import type { GroupHistoryEntry } from "./group-gating.js"; import { applyGroupGating } from "./group-gating.js"; import { updateLastRouteInBackground } from "./last-route.js"; import { resolvePeerId } from "./peer.js"; diff --git a/src/web/auto-reply/monitor/peer.ts b/src/web/auto-reply/monitor/peer.ts index 3bc91c5391..b41555ffa2 100644 --- a/src/web/auto-reply/monitor/peer.ts +++ b/src/web/auto-reply/monitor/peer.ts @@ -1,5 +1,5 @@ -import type { WebInboundMsg } from "../types.js"; import { jidToE164, normalizeE164 } from "../../../utils.js"; +import type { WebInboundMsg } from "../types.js"; export function resolvePeerId(msg: WebInboundMsg) { if (msg.chatType === "group") { diff --git a/src/web/auto-reply/monitor/process-message.ts b/src/web/auto-reply/monitor/process-message.ts index ed86bf9309..11a5cf8dee 100644 --- a/src/web/auto-reply/monitor/process-message.ts +++ b/src/web/auto-reply/monitor/process-message.ts @@ -1,9 +1,3 @@ -import type { getReplyFromConfig } from "../../../auto-reply/reply.js"; -import type { ReplyPayload } from "../../../auto-reply/types.js"; -import type { loadConfig } from "../../../config/config.js"; -import type { getChildLogger } from "../../../logging.js"; -import type { resolveAgentRoute } from "../../../routing/resolve-route.js"; -import type { WebInboundMsg } from "../types.js"; import { resolveIdentityNamePrefix } from "../../../agents/identity.js"; import { resolveChunkMode, resolveTextChunkLimit } from "../../../auto-reply/chunk.js"; import { shouldComputeCommandAuthorized } from "../../../auto-reply/command-detection.js"; @@ -11,14 +5,17 @@ import { formatInboundEnvelope, resolveEnvelopeFormatOptions, } from "../../../auto-reply/envelope.js"; +import type { getReplyFromConfig } from "../../../auto-reply/reply.js"; import { buildHistoryContextFromEntries, type HistoryEntry, } from "../../../auto-reply/reply/history.js"; import { finalizeInboundContext } from "../../../auto-reply/reply/inbound-context.js"; import { dispatchReplyWithBufferedBlockDispatcher } from "../../../auto-reply/reply/provider-dispatcher.js"; +import type { ReplyPayload } from "../../../auto-reply/types.js"; import { toLocationContext } from "../../../channels/location.js"; import { createReplyPrefixOptions } from "../../../channels/reply-prefix.js"; +import type { loadConfig } from "../../../config/config.js"; import { resolveMarkdownTableMode } from "../../../config/markdown-tables.js"; import { readSessionUpdatedAt, @@ -26,13 +23,16 @@ import { resolveStorePath, } from "../../../config/sessions.js"; import { logVerbose, shouldLogVerbose } from "../../../globals.js"; +import type { getChildLogger } from "../../../logging.js"; import { getAgentScopedMediaLocalRoots } from "../../../media/local-roots.js"; import { readChannelAllowFromStore } from "../../../pairing/pairing-store.js"; +import type { resolveAgentRoute } from "../../../routing/resolve-route.js"; import { jidToE164, normalizeE164 } from "../../../utils.js"; import { newConnectionId } from "../../reconnect.js"; import { formatError } from "../../session.js"; import { deliverWebReply } from "../deliver-reply.js"; import { whatsappInboundLog, whatsappOutboundLog } from "../loggers.js"; +import type { WebInboundMsg } from "../types.js"; import { elide } from "../util.js"; import { maybeSendAckReaction } from "./ack-reaction.js"; import { formatGroupMembers } from "./group-members.js"; diff --git a/src/web/auto-reply/web-auto-reply-utils.test.ts b/src/web/auto-reply/web-auto-reply-utils.test.ts index 2308373f4b..9a2493eb1e 100644 --- a/src/web/auto-reply/web-auto-reply-utils.test.ts +++ b/src/web/auto-reply/web-auto-reply-utils.test.ts @@ -2,10 +2,10 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { describe, expect, it, vi } from "vitest"; -import type { WebInboundMsg } from "./types.js"; import { saveSessionStore } from "../../config/sessions.js"; import { isBotMentionedFromTargets, resolveMentionTargets } from "./mentions.js"; import { getSessionSnapshot } from "./session-snapshot.js"; +import type { WebInboundMsg } from "./types.js"; import { elide, isLikelyWhatsAppCryptoError } from "./util.js"; const makeMsg = (overrides: Partial): WebInboundMsg => diff --git a/src/web/inbound/media.ts b/src/web/inbound/media.ts index 68650cde3d..d6f7d53467 100644 --- a/src/web/inbound/media.ts +++ b/src/web/inbound/media.ts @@ -1,7 +1,7 @@ import type { proto, WAMessage } from "@whiskeysockets/baileys"; import { downloadMediaMessage, normalizeMessageContent } from "@whiskeysockets/baileys"; -import type { createWaSocket } from "../session.js"; import { logVerbose } from "../../globals.js"; +import type { createWaSocket } from "../session.js"; function unwrapMessage(message: proto.IMessage | undefined): proto.IMessage | undefined { const normalized = normalizeMessageContent(message); diff --git a/src/web/inbound/monitor.ts b/src/web/inbound/monitor.ts index b21813e6f0..3078112243 100644 --- a/src/web/inbound/monitor.ts +++ b/src/web/inbound/monitor.ts @@ -1,6 +1,5 @@ import type { AnyMessageContent, proto, WAMessage } from "@whiskeysockets/baileys"; import { DisconnectReason, isJidGroup } from "@whiskeysockets/baileys"; -import type { WebInboundMessage, WebListenerCloseReason } from "./types.js"; import { createInboundDebouncer } from "../../auto-reply/inbound-debounce.js"; import { formatLocationText } from "../../channels/location.js"; import { logVerbose, shouldLogVerbose } from "../../globals.js"; @@ -21,6 +20,7 @@ import { } from "./extract.js"; import { downloadInboundMedia } from "./media.js"; import { createWebSendApi } from "./send-api.js"; +import type { WebInboundMessage, WebListenerCloseReason } from "./types.js"; export async function monitorWebInbox(options: { verbose: boolean; diff --git a/src/web/inbound/send-api.ts b/src/web/inbound/send-api.ts index 05824536c1..f0e5ea764f 100644 --- a/src/web/inbound/send-api.ts +++ b/src/web/inbound/send-api.ts @@ -1,7 +1,7 @@ import type { AnyMessageContent, WAPresence } from "@whiskeysockets/baileys"; -import type { ActiveWebSendOptions } from "../active-listener.js"; import { recordChannelActivity } from "../../infra/channel-activity.js"; import { toWhatsappJid } from "../../utils.js"; +import type { ActiveWebSendOptions } from "../active-listener.js"; function recordWhatsAppOutbound(accountId: string) { recordChannelActivity({ diff --git a/src/web/login-qr.ts b/src/web/login-qr.ts index 323619be91..f913bf4d04 100644 --- a/src/web/login-qr.ts +++ b/src/web/login-qr.ts @@ -1,5 +1,5 @@ -import { DisconnectReason } from "@whiskeysockets/baileys"; import { randomUUID } from "node:crypto"; +import { DisconnectReason } from "@whiskeysockets/baileys"; import { loadConfig } from "../config/config.js"; import { danger, info, success } from "../globals.js"; import { logInfo } from "../logger.js"; diff --git a/src/web/login.coverage.test.ts b/src/web/login.coverage.test.ts index 767ceec7a8..4d758e27b4 100644 --- a/src/web/login.coverage.test.ts +++ b/src/web/login.coverage.test.ts @@ -1,7 +1,7 @@ -import { DisconnectReason } from "@whiskeysockets/baileys"; import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import { DisconnectReason } from "@whiskeysockets/baileys"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; const rmMock = vi.spyOn(fs, "rm"); diff --git a/src/web/login.test.ts b/src/web/login.test.ts index 89baa47339..08f495eeac 100644 --- a/src/web/login.test.ts +++ b/src/web/login.test.ts @@ -19,8 +19,8 @@ vi.mock("./session.js", () => { }; }); -import type { waitForWaConnection } from "./session.js"; import { loginWeb } from "./login.js"; +import type { waitForWaConnection } from "./session.js"; const { createWaSocket } = await import("./session.js"); diff --git a/src/web/media.ts b/src/web/media.ts index 13ed96e492..cc63814170 100644 --- a/src/web/media.ts +++ b/src/web/media.ts @@ -1,8 +1,8 @@ import fs from "node:fs/promises"; import path from "node:path"; import { fileURLToPath } from "node:url"; -import type { SsrFPolicy } from "../infra/net/ssrf.js"; import { logVerbose, shouldLogVerbose } from "../globals.js"; +import type { SsrFPolicy } from "../infra/net/ssrf.js"; import { type MediaKind, maxBytesForKind, mediaKindFromMime } from "../media/constants.js"; import { fetchRemoteMedia } from "../media/fetch.js"; import { diff --git a/src/web/session.ts b/src/web/session.ts index a9129626f4..9dc8c6e47b 100644 --- a/src/web/session.ts +++ b/src/web/session.ts @@ -1,3 +1,5 @@ +import { randomUUID } from "node:crypto"; +import fsSync from "node:fs"; import { DisconnectReason, fetchLatestBaileysVersion, @@ -5,8 +7,6 @@ import { makeWASocket, useMultiFileAuthState, } from "@whiskeysockets/baileys"; -import { randomUUID } from "node:crypto"; -import fsSync from "node:fs"; import qrcode from "qrcode-terminal"; import { formatCliCommand } from "../cli/command-format.js"; import { danger, success } from "../globals.js"; diff --git a/src/wizard/clack-prompter.ts b/src/wizard/clack-prompter.ts index d04abf5b70..469d80311a 100644 --- a/src/wizard/clack-prompter.ts +++ b/src/wizard/clack-prompter.ts @@ -10,11 +10,11 @@ import { spinner, text, } from "@clack/prompts"; -import type { WizardProgress, WizardPrompter } from "./prompts.js"; import { createCliProgress } from "../cli/progress.js"; import { note as emitNote } from "../terminal/note.js"; import { stylePromptHint, stylePromptMessage, stylePromptTitle } from "../terminal/prompt-style.js"; import { theme } from "../terminal/theme.js"; +import type { WizardProgress, WizardPrompter } from "./prompts.js"; import { WizardCancelledError } from "./prompts.js"; function guardCancel(value: T | symbol): T { diff --git a/src/wizard/onboarding.completion.ts b/src/wizard/onboarding.completion.ts index 06ad9ed1a0..f0888a9e6a 100644 --- a/src/wizard/onboarding.completion.ts +++ b/src/wizard/onboarding.completion.ts @@ -1,15 +1,15 @@ import os from "node:os"; import path from "node:path"; -import type { ShellCompletionStatus } from "../commands/doctor-completion.js"; -import type { WizardFlow } from "./onboarding.types.js"; -import type { WizardPrompter } from "./prompts.js"; import { resolveCliName } from "../cli/cli-name.js"; import { installCompletion } from "../cli/completion-cli.js"; +import type { ShellCompletionStatus } from "../commands/doctor-completion.js"; import { checkShellCompletionStatus, ensureCompletionCacheExists, } from "../commands/doctor-completion.js"; import { pathExists } from "../utils.js"; +import type { WizardFlow } from "./onboarding.types.js"; +import type { WizardPrompter } from "./prompts.js"; type CompletionDeps = { resolveCliName: () => string; diff --git a/src/wizard/onboarding.finalize.ts b/src/wizard/onboarding.finalize.ts index b73979915e..c1bae8cd0c 100644 --- a/src/wizard/onboarding.finalize.ts +++ b/src/wizard/onboarding.finalize.ts @@ -1,10 +1,5 @@ import fs from "node:fs/promises"; import path from "node:path"; -import type { OnboardOptions } from "../commands/onboard-types.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { GatewayWizardSettings, WizardFlow } from "./onboarding.types.js"; -import type { WizardPrompter } from "./prompts.js"; import { DEFAULT_BOOTSTRAP_FILENAME } from "../agents/workspace.js"; import { formatCliCommand } from "../cli/command-format.js"; import { @@ -25,13 +20,18 @@ import { waitForGatewayReachable, resolveControlUiLinks, } from "../commands/onboard-helpers.js"; +import type { OnboardOptions } from "../commands/onboard-types.js"; +import type { OpenClawConfig } from "../config/config.js"; import { resolveGatewayService } from "../daemon/service.js"; import { isSystemdUserServiceAvailable } from "../daemon/systemd.js"; import { ensureControlUiAssetsBuilt } from "../infra/control-ui-assets.js"; +import type { RuntimeEnv } from "../runtime.js"; import { restoreTerminalState } from "../terminal/restore.js"; import { runTui } from "../tui/tui.js"; import { resolveUserPath } from "../utils.js"; import { setupOnboardingShellCompletion } from "./onboarding.completion.js"; +import type { GatewayWizardSettings, WizardFlow } from "./onboarding.types.js"; +import type { WizardPrompter } from "./prompts.js"; type FinalizeOnboardingOptions = { flow: WizardFlow; diff --git a/src/wizard/onboarding.gateway-config.ts b/src/wizard/onboarding.gateway-config.ts index a874c077b2..a57cef19b1 100644 --- a/src/wizard/onboarding.gateway-config.ts +++ b/src/wizard/onboarding.gateway-config.ts @@ -1,24 +1,24 @@ -import type { GatewayAuthChoice } from "../commands/onboard-types.js"; -import type { GatewayBindMode, GatewayTailscaleMode, OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { - GatewayWizardSettings, - QuickstartGatewayDefaults, - WizardFlow, -} from "./onboarding.types.js"; -import type { WizardPrompter } from "./prompts.js"; import { normalizeGatewayTokenInput, randomToken, validateGatewayPasswordInput, } from "../commands/onboard-helpers.js"; +import type { GatewayAuthChoice } from "../commands/onboard-types.js"; +import type { GatewayBindMode, GatewayTailscaleMode, OpenClawConfig } from "../config/config.js"; import { TAILSCALE_DOCS_LINES, TAILSCALE_EXPOSURE_OPTIONS, TAILSCALE_MISSING_BIN_NOTE_LINES, } from "../gateway/gateway-config-prompts.shared.js"; import { findTailscaleBinary } from "../infra/tailscale.js"; +import type { RuntimeEnv } from "../runtime.js"; import { validateIPv4AddressInput } from "../shared/net/ipv4.js"; +import type { + GatewayWizardSettings, + QuickstartGatewayDefaults, + WizardFlow, +} from "./onboarding.types.js"; +import type { WizardPrompter } from "./prompts.js"; // These commands are "high risk" (privacy writes/recording) and should be // explicitly armed by the user when they want to use them. diff --git a/src/wizard/onboarding.test.ts b/src/wizard/onboarding.test.ts index feb9b1c98c..7b9774413f 100644 --- a/src/wizard/onboarding.test.ts +++ b/src/wizard/onboarding.test.ts @@ -2,10 +2,10 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { afterAll, beforeAll, describe, expect, it, vi } from "vitest"; -import type { RuntimeEnv } from "../runtime.js"; -import type { WizardPrompter, WizardSelectParams } from "./prompts.js"; import { DEFAULT_BOOTSTRAP_FILENAME } from "../agents/workspace.js"; +import type { RuntimeEnv } from "../runtime.js"; import { runOnboardingWizard } from "./onboarding.js"; +import type { WizardPrompter, WizardSelectParams } from "./prompts.js"; const ensureAuthProfileStore = vi.hoisted(() => vi.fn(() => ({ profiles: {} }))); const promptAuthChoiceGrouped = vi.hoisted(() => vi.fn(async () => "skip")); diff --git a/src/wizard/onboarding.ts b/src/wizard/onboarding.ts index a5bff274ce..df826b62cc 100644 --- a/src/wizard/onboarding.ts +++ b/src/wizard/onboarding.ts @@ -1,3 +1,4 @@ +import { formatCliCommand } from "../cli/command-format.js"; import type { GatewayAuthChoice, OnboardMode, @@ -5,17 +6,16 @@ import type { ResetScope, } from "../commands/onboard-types.js"; import type { OpenClawConfig } from "../config/config.js"; -import type { RuntimeEnv } from "../runtime.js"; -import type { QuickstartGatewayDefaults, WizardFlow } from "./onboarding.types.js"; -import { formatCliCommand } from "../cli/command-format.js"; import { DEFAULT_GATEWAY_PORT, readConfigFileSnapshot, resolveGatewayPort, writeConfigFile, } from "../config/config.js"; +import type { RuntimeEnv } from "../runtime.js"; import { defaultRuntime } from "../runtime.js"; import { resolveUserPath } from "../utils.js"; +import type { QuickstartGatewayDefaults, WizardFlow } from "./onboarding.types.js"; import { WizardCancelledError, type WizardPrompter } from "./prompts.js"; async function requireRiskAcknowledgement(params: { diff --git a/test/helpers/mock-incoming-request.ts b/test/helpers/mock-incoming-request.ts index fd00f9a6d5..2083893038 100644 --- a/test/helpers/mock-incoming-request.ts +++ b/test/helpers/mock-incoming-request.ts @@ -1,5 +1,5 @@ -import type { IncomingMessage } from "node:http"; import { EventEmitter } from "node:events"; +import type { IncomingMessage } from "node:http"; export function createMockIncomingRequest(chunks: string[]): IncomingMessage { const req = new EventEmitter() as IncomingMessage & { diff --git a/ui/src/i18n/lib/translate.ts b/ui/src/i18n/lib/translate.ts index 8ba9557b72..3b1cfa0978 100644 --- a/ui/src/i18n/lib/translate.ts +++ b/ui/src/i18n/lib/translate.ts @@ -1,5 +1,5 @@ -import type { Locale, TranslationMap } from "./types.ts"; import { en } from "../locales/en.ts"; +import type { Locale, TranslationMap } from "./types.ts"; type Subscriber = (locale: Locale) => void; diff --git a/ui/src/ui/app-channels.ts b/ui/src/ui/app-channels.ts index 28840af052..eb05e83e81 100644 --- a/ui/src/ui/app-channels.ts +++ b/ui/src/ui/app-channels.ts @@ -1,5 +1,4 @@ import type { OpenClawApp } from "./app.ts"; -import type { NostrProfile } from "./types.ts"; import { loadChannels, logoutWhatsApp, @@ -7,6 +6,7 @@ import { waitWhatsAppLogin, } from "./controllers/channels.ts"; import { loadConfig, saveConfig } from "./controllers/config.ts"; +import type { NostrProfile } from "./types.ts"; import { createNostrProfileFormState } from "./views/channels.nostr-profile-form.ts"; export async function handleWhatsAppStart(host: OpenClawApp, force: boolean) { diff --git a/ui/src/ui/app-chat.ts b/ui/src/ui/app-chat.ts index c648a89d11..1e824fb4fe 100644 --- a/ui/src/ui/app-chat.ts +++ b/ui/src/ui/app-chat.ts @@ -1,13 +1,13 @@ -import type { OpenClawApp } from "./app.ts"; -import type { GatewayHelloOk } from "./gateway.ts"; -import type { ChatAttachment, ChatQueueItem } from "./ui-types.ts"; import { parseAgentSessionKey } from "../../../src/sessions/session-key-utils.js"; import { scheduleChatScroll } from "./app-scroll.ts"; import { setLastActiveSessionKey } from "./app-settings.ts"; import { resetToolStream } from "./app-tool-stream.ts"; +import type { OpenClawApp } from "./app.ts"; import { abortChatRun, loadChatHistory, sendChatMessage } from "./controllers/chat.ts"; import { loadSessions } from "./controllers/sessions.ts"; +import type { GatewayHelloOk } from "./gateway.ts"; import { normalizeBasePath } from "./navigation.ts"; +import type { ChatAttachment, ChatQueueItem } from "./ui-types.ts"; import { generateUUID } from "./uuid.ts"; export type ChatHost = { diff --git a/ui/src/ui/app-gateway.ts b/ui/src/ui/app-gateway.ts index 12b2c7b6d9..aaa02c4440 100644 --- a/ui/src/ui/app-gateway.ts +++ b/ui/src/ui/app-gateway.ts @@ -1,11 +1,5 @@ -import type { EventLogEntry } from "./app-events.ts"; -import type { OpenClawApp } from "./app.ts"; -import type { ExecApprovalRequest } from "./controllers/exec-approval.ts"; -import type { GatewayEventFrame, GatewayHelloOk } from "./gateway.ts"; -import type { Tab } from "./navigation.ts"; -import type { UiSettings } from "./storage.ts"; -import type { AgentsListResult, PresenceEntry, HealthSnapshot, StatusSummary } from "./types.ts"; import { CHAT_SESSIONS_ACTIVE_MINUTES, flushChatQueueForEvent } from "./app-chat.ts"; +import type { EventLogEntry } from "./app-events.ts"; import { applySettings, loadCron, @@ -13,11 +7,13 @@ import { setLastActiveSessionKey, } from "./app-settings.ts"; import { handleAgentEvent, resetToolStream, type AgentEventPayload } from "./app-tool-stream.ts"; +import type { OpenClawApp } from "./app.ts"; import { loadAgents } from "./controllers/agents.ts"; import { loadAssistantIdentity } from "./controllers/assistant-identity.ts"; import { loadChatHistory } from "./controllers/chat.ts"; import { handleChatEvent, type ChatEventPayload } from "./controllers/chat.ts"; import { loadDevices } from "./controllers/devices.ts"; +import type { ExecApprovalRequest } from "./controllers/exec-approval.ts"; import { addExecApproval, parseExecApprovalRequested, @@ -26,7 +22,11 @@ import { } from "./controllers/exec-approval.ts"; import { loadNodes } from "./controllers/nodes.ts"; import { loadSessions } from "./controllers/sessions.ts"; +import type { GatewayEventFrame, GatewayHelloOk } from "./gateway.ts"; import { GatewayBrowserClient } from "./gateway.ts"; +import type { Tab } from "./navigation.ts"; +import type { UiSettings } from "./storage.ts"; +import type { AgentsListResult, PresenceEntry, HealthSnapshot, StatusSummary } from "./types.ts"; type GatewayHost = { settings: UiSettings; diff --git a/ui/src/ui/app-lifecycle.ts b/ui/src/ui/app-lifecycle.ts index a40f5d5ee2..4144271410 100644 --- a/ui/src/ui/app-lifecycle.ts +++ b/ui/src/ui/app-lifecycle.ts @@ -1,4 +1,3 @@ -import type { Tab } from "./navigation.ts"; import { connectGateway } from "./app-gateway.ts"; import { startLogsPolling, @@ -18,6 +17,7 @@ import { syncThemeWithSettings, } from "./app-settings.ts"; import { loadControlUiBootstrapConfig } from "./controllers/control-ui-bootstrap.ts"; +import type { Tab } from "./navigation.ts"; type LifecycleHost = { basePath: string; diff --git a/ui/src/ui/app-render.helpers.node.test.ts b/ui/src/ui/app-render.helpers.node.test.ts index ab6ba84396..b8698abee8 100644 --- a/ui/src/ui/app-render.helpers.node.test.ts +++ b/ui/src/ui/app-render.helpers.node.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import type { SessionsListResult } from "./types.ts"; import { parseSessionKey, resolveSessionDisplayName } from "./app-render.helpers.ts"; +import type { SessionsListResult } from "./types.ts"; type SessionRow = SessionsListResult["sessions"][number]; diff --git a/ui/src/ui/app-render.helpers.ts b/ui/src/ui/app-render.helpers.ts index a6a82452ea..d4c3655813 100644 --- a/ui/src/ui/app-render.helpers.ts +++ b/ui/src/ui/app-render.helpers.ts @@ -1,16 +1,16 @@ import { html } from "lit"; import { repeat } from "lit/directives/repeat.js"; -import type { AppViewState } from "./app-view-state.ts"; -import type { ThemeTransitionContext } from "./theme-transition.ts"; -import type { ThemeMode } from "./theme.ts"; -import type { SessionsListResult } from "./types.ts"; import { t } from "../i18n/index.ts"; import { refreshChat } from "./app-chat.ts"; import { syncUrlWithSessionKey } from "./app-settings.ts"; +import type { AppViewState } from "./app-view-state.ts"; import { OpenClawApp } from "./app.ts"; import { ChatState, loadChatHistory } from "./controllers/chat.ts"; import { icons } from "./icons.ts"; import { iconForTab, pathForTab, titleForTab, type Tab } from "./navigation.ts"; +import type { ThemeTransitionContext } from "./theme-transition.ts"; +import type { ThemeMode } from "./theme.ts"; +import type { SessionsListResult } from "./types.ts"; type SessionDefaultsSnapshot = { mainSessionKey?: string; diff --git a/ui/src/ui/app-render.ts b/ui/src/ui/app-render.ts index b782419d2a..ee47ea94a9 100644 --- a/ui/src/ui/app-render.ts +++ b/ui/src/ui/app-render.ts @@ -1,10 +1,10 @@ import { html, nothing } from "lit"; -import type { AppViewState } from "./app-view-state.ts"; import { parseAgentSessionKey } from "../../../src/routing/session-key.js"; import { t } from "../i18n/index.ts"; import { refreshChatAvatar } from "./app-chat.ts"; import { renderUsageTab } from "./app-render-usage-tab.ts"; import { renderChatControls, renderTab, renderThemeToggle } from "./app-render.helpers.ts"; +import type { AppViewState } from "./app-view-state.ts"; import { loadAgentFileContent, loadAgentFiles, saveAgentFile } from "./controllers/agent-files.ts"; import { loadAgentIdentities, loadAgentIdentity } from "./controllers/agent-identity.ts"; import { loadAgentSkills } from "./controllers/agent-skills.ts"; diff --git a/ui/src/ui/app-settings.test.ts b/ui/src/ui/app-settings.test.ts index 6978ca6cc6..48411bbe5b 100644 --- a/ui/src/ui/app-settings.test.ts +++ b/ui/src/ui/app-settings.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import type { Tab } from "./navigation.ts"; import { setTabFromRoute } from "./app-settings.ts"; +import type { Tab } from "./navigation.ts"; type SettingsHost = Parameters[0] & { logsPollInterval: number | null; diff --git a/ui/src/ui/app-settings.ts b/ui/src/ui/app-settings.ts index 00a67d7e97..7415e468e0 100644 --- a/ui/src/ui/app-settings.ts +++ b/ui/src/ui/app-settings.ts @@ -1,5 +1,3 @@ -import type { OpenClawApp } from "./app.ts"; -import type { AgentsListResult } from "./types.ts"; import { refreshChat } from "./app-chat.ts"; import { startLogsPolling, @@ -8,6 +6,7 @@ import { stopDebugPolling, } from "./app-polling.ts"; import { scheduleChatScroll, scheduleLogsScroll } from "./app-scroll.ts"; +import type { OpenClawApp } from "./app.ts"; import { loadAgentIdentities, loadAgentIdentity } from "./controllers/agent-identity.ts"; import { loadAgentSkills } from "./controllers/agent-skills.ts"; import { loadAgents } from "./controllers/agents.ts"; @@ -33,6 +32,7 @@ import { import { saveSettings, type UiSettings } from "./storage.ts"; import { startThemeTransition, type ThemeTransitionContext } from "./theme-transition.ts"; import { resolveTheme, type ResolvedTheme, type ThemeMode } from "./theme.ts"; +import type { AgentsListResult } from "./types.ts"; type SettingsHost = { settings: UiSettings; diff --git a/ui/src/ui/app.ts b/ui/src/ui/app.ts index eb66b8ffb0..84e39067ba 100644 --- a/ui/src/ui/app.ts +++ b/ui/src/ui/app.ts @@ -1,34 +1,5 @@ import { LitElement } from "lit"; import { customElement, state } from "lit/decorators.js"; -import type { EventLogEntry } from "./app-events.ts"; -import type { AppViewState } from "./app-view-state.ts"; -import type { DevicePairingList } from "./controllers/devices.ts"; -import type { ExecApprovalRequest } from "./controllers/exec-approval.ts"; -import type { ExecApprovalsFile, ExecApprovalsSnapshot } from "./controllers/exec-approvals.ts"; -import type { SkillMessage } from "./controllers/skills.ts"; -import type { GatewayBrowserClient, GatewayHelloOk } from "./gateway.ts"; -import type { Tab } from "./navigation.ts"; -import type { ResolvedTheme, ThemeMode } from "./theme.ts"; -import type { - AgentsListResult, - AgentsFilesListResult, - AgentIdentityResult, - ConfigSnapshot, - ConfigUiHints, - CronJob, - CronRunLogEntry, - CronStatus, - HealthSnapshot, - LogEntry, - LogLevel, - PresenceEntry, - ChannelsStatusSnapshot, - SessionsListResult, - SkillStatusReport, - StatusSummary, - NostrProfile, -} from "./types.ts"; -import type { NostrProfileFormState } from "./views/channels.nostr-profile-form.ts"; import { i18n, I18nController, isSupportedLocale } from "../i18n/index.ts"; import { handleChannelConfigReload as handleChannelConfigReloadInternal, @@ -49,6 +20,7 @@ import { removeQueuedMessage as removeQueuedMessageInternal, } from "./app-chat.ts"; import { DEFAULT_CRON_FORM, DEFAULT_LOG_LEVEL_FILTERS } from "./app-defaults.ts"; +import type { EventLogEntry } from "./app-events.ts"; import { connectGateway as connectGatewayInternal } from "./app-gateway.ts"; import { handleConnected, @@ -77,10 +49,38 @@ import { type ToolStreamEntry, type CompactionStatus, } from "./app-tool-stream.ts"; +import type { AppViewState } from "./app-view-state.ts"; import { normalizeAssistantIdentity } from "./assistant-identity.ts"; import { loadAssistantIdentity as loadAssistantIdentityInternal } from "./controllers/assistant-identity.ts"; +import type { DevicePairingList } from "./controllers/devices.ts"; +import type { ExecApprovalRequest } from "./controllers/exec-approval.ts"; +import type { ExecApprovalsFile, ExecApprovalsSnapshot } from "./controllers/exec-approvals.ts"; +import type { SkillMessage } from "./controllers/skills.ts"; +import type { GatewayBrowserClient, GatewayHelloOk } from "./gateway.ts"; +import type { Tab } from "./navigation.ts"; import { loadSettings, type UiSettings } from "./storage.ts"; +import type { ResolvedTheme, ThemeMode } from "./theme.ts"; +import type { + AgentsListResult, + AgentsFilesListResult, + AgentIdentityResult, + ConfigSnapshot, + ConfigUiHints, + CronJob, + CronRunLogEntry, + CronStatus, + HealthSnapshot, + LogEntry, + LogLevel, + PresenceEntry, + ChannelsStatusSnapshot, + SessionsListResult, + SkillStatusReport, + StatusSummary, + NostrProfile, +} from "./types.ts"; import { type ChatAttachment, type ChatQueueItem, type CronFormState } from "./ui-types.ts"; +import type { NostrProfileFormState } from "./views/channels.nostr-profile-form.ts"; declare global { interface Window { diff --git a/ui/src/ui/chat/grouped-render.ts b/ui/src/ui/chat/grouped-render.ts index 63da6b982b..7c36713c3c 100644 --- a/ui/src/ui/chat/grouped-render.ts +++ b/ui/src/ui/chat/grouped-render.ts @@ -1,9 +1,9 @@ import { html, nothing } from "lit"; import { unsafeHTML } from "lit/directives/unsafe-html.js"; import type { AssistantIdentity } from "../assistant-identity.ts"; -import type { MessageGroup } from "../types/chat-types.ts"; import { toSanitizedMarkdownHtml } from "../markdown.ts"; import { detectTextDirection } from "../text-direction.ts"; +import type { MessageGroup } from "../types/chat-types.ts"; import { renderCopyAsMarkdownButton } from "./copy-as-markdown.ts"; import { extractTextCached, diff --git a/ui/src/ui/chat/tool-cards.ts b/ui/src/ui/chat/tool-cards.ts index 7b89a2450a..acd427b9e7 100644 --- a/ui/src/ui/chat/tool-cards.ts +++ b/ui/src/ui/chat/tool-cards.ts @@ -1,7 +1,7 @@ import { html, nothing } from "lit"; -import type { ToolCard } from "../types/chat-types.ts"; import { icons } from "../icons.ts"; import { formatToolDetail, resolveToolDisplay } from "../tool-display.ts"; +import type { ToolCard } from "../types/chat-types.ts"; import { TOOL_INLINE_THRESHOLD } from "./constants.ts"; import { extractTextCached } from "./message-extract.ts"; import { isToolResultMessage } from "./message-normalizer.ts"; diff --git a/ui/src/ui/controllers/assistant-identity.ts b/ui/src/ui/controllers/assistant-identity.ts index ea6afb5e5a..abf6aa974c 100644 --- a/ui/src/ui/controllers/assistant-identity.ts +++ b/ui/src/ui/controllers/assistant-identity.ts @@ -1,5 +1,5 @@ -import type { GatewayBrowserClient } from "../gateway.ts"; import { normalizeAssistantIdentity } from "../assistant-identity.ts"; +import type { GatewayBrowserClient } from "../gateway.ts"; export type AssistantIdentityState = { client: GatewayBrowserClient | null; diff --git a/ui/src/ui/controllers/channels.ts b/ui/src/ui/controllers/channels.ts index de50dadd34..22f5de1588 100644 --- a/ui/src/ui/controllers/channels.ts +++ b/ui/src/ui/controllers/channels.ts @@ -1,5 +1,5 @@ -import type { ChannelsState } from "./channels.types.ts"; import { ChannelsStatusSnapshot } from "../types.ts"; +import type { ChannelsState } from "./channels.types.ts"; export type { ChannelsState }; diff --git a/ui/src/ui/controllers/chat.ts b/ui/src/ui/controllers/chat.ts index 4990b6a7aa..d819ceee02 100644 --- a/ui/src/ui/controllers/chat.ts +++ b/ui/src/ui/controllers/chat.ts @@ -1,6 +1,6 @@ +import { extractText } from "../chat/message-extract.ts"; import type { GatewayBrowserClient } from "../gateway.ts"; import type { ChatAttachment } from "../ui-types.ts"; -import { extractText } from "../chat/message-extract.ts"; import { generateUUID } from "../uuid.ts"; export type ChatState = { diff --git a/ui/src/ui/controllers/cron.ts b/ui/src/ui/controllers/cron.ts index fbb7d65dbc..1a69b9c3c1 100644 --- a/ui/src/ui/controllers/cron.ts +++ b/ui/src/ui/controllers/cron.ts @@ -1,7 +1,7 @@ +import { toNumber } from "../format.ts"; import type { GatewayBrowserClient } from "../gateway.ts"; import type { CronJob, CronRunLogEntry, CronStatus } from "../types.ts"; import type { CronFormState } from "../ui-types.ts"; -import { toNumber } from "../format.ts"; export type CronState = { client: GatewayBrowserClient | null; diff --git a/ui/src/ui/controllers/devices.ts b/ui/src/ui/controllers/devices.ts index a66fca4cd3..16edd8afe4 100644 --- a/ui/src/ui/controllers/devices.ts +++ b/ui/src/ui/controllers/devices.ts @@ -1,6 +1,6 @@ -import type { GatewayBrowserClient } from "../gateway.ts"; import { clearDeviceAuthToken, storeDeviceAuthToken } from "../device-auth.ts"; import { loadOrCreateDeviceIdentity } from "../device-identity.ts"; +import type { GatewayBrowserClient } from "../gateway.ts"; export type DeviceTokenSummary = { role: string; diff --git a/ui/src/ui/controllers/sessions.ts b/ui/src/ui/controllers/sessions.ts index da72abc875..9421a65608 100644 --- a/ui/src/ui/controllers/sessions.ts +++ b/ui/src/ui/controllers/sessions.ts @@ -1,6 +1,6 @@ +import { toNumber } from "../format.ts"; import type { GatewayBrowserClient } from "../gateway.ts"; import type { SessionsListResult } from "../types.ts"; -import { toNumber } from "../format.ts"; export type SessionsState = { client: GatewayBrowserClient | null; diff --git a/ui/src/ui/navigation.ts b/ui/src/ui/navigation.ts index 7d768566b4..8e1bc2c962 100644 --- a/ui/src/ui/navigation.ts +++ b/ui/src/ui/navigation.ts @@ -1,5 +1,5 @@ -import type { IconName } from "./icons.js"; import { t } from "../i18n/index.ts"; +import type { IconName } from "./icons.js"; export const TAB_GROUPS = [ { label: "chat", tabs: ["chat"] }, diff --git a/ui/src/ui/presenter.ts b/ui/src/ui/presenter.ts index 009b886ba9..dbeaa68733 100644 --- a/ui/src/ui/presenter.ts +++ b/ui/src/ui/presenter.ts @@ -1,5 +1,5 @@ -import type { CronJob, GatewaySessionRow, PresenceEntry } from "./types.ts"; import { formatRelativeTimestamp, formatDurationHuman, formatMs } from "./format.ts"; +import type { CronJob, GatewaySessionRow, PresenceEntry } from "./types.ts"; export function formatPresenceSummary(entry: PresenceEntry): string { const host = entry.host ?? "unknown"; diff --git a/ui/src/ui/storage.ts b/ui/src/ui/storage.ts index b2eecc3295..b32e6c3c5b 100644 --- a/ui/src/ui/storage.ts +++ b/ui/src/ui/storage.ts @@ -1,7 +1,7 @@ const KEY = "openclaw.control.settings.v1"; -import type { ThemeMode } from "./theme.ts"; import { isSupportedLocale } from "../i18n/index.ts"; +import type { ThemeMode } from "./theme.ts"; export type UiSettings = { gatewayUrl: string; diff --git a/ui/src/ui/tool-display.ts b/ui/src/ui/tool-display.ts index edc856d906..6d05026cb6 100644 --- a/ui/src/ui/tool-display.ts +++ b/ui/src/ui/tool-display.ts @@ -1,4 +1,3 @@ -import type { IconName } from "./icons.ts"; import { defaultTitle, normalizeToolName, @@ -12,6 +11,7 @@ import { resolveWriteDetail, type ToolDisplaySpec as ToolDisplaySpecBase, } from "../../../src/agents/tool-display-common.js"; +import type { IconName } from "./icons.ts"; import rawConfig from "./tool-display.json" with { type: "json" }; type ToolDisplaySpec = ToolDisplaySpecBase & { diff --git a/ui/src/ui/views/agents-panels-status-files.ts b/ui/src/ui/views/agents-panels-status-files.ts index c36f5ae62e..23de4cb96b 100644 --- a/ui/src/ui/views/agents-panels-status-files.ts +++ b/ui/src/ui/views/agents-panels-status-files.ts @@ -1,4 +1,11 @@ import { html, nothing } from "lit"; +import { formatRelativeTimestamp } from "../format.ts"; +import { + formatCronPayload, + formatCronSchedule, + formatCronState, + formatNextRun, +} from "../presenter.ts"; import type { AgentFileEntry, AgentsFilesListResult, @@ -7,13 +14,6 @@ import type { CronJob, CronStatus, } from "../types.ts"; -import { formatRelativeTimestamp } from "../format.ts"; -import { - formatCronPayload, - formatCronSchedule, - formatCronState, - formatNextRun, -} from "../presenter.ts"; import { formatBytes, type AgentContext } from "./agents-utils.ts"; function renderAgentContextCard(context: AgentContext, subtitle: string) { diff --git a/ui/src/ui/views/agents-panels-tools-skills.ts b/ui/src/ui/views/agents-panels-tools-skills.ts index 063a94f93f..517be376ce 100644 --- a/ui/src/ui/views/agents-panels-tools-skills.ts +++ b/ui/src/ui/views/agents-panels-tools-skills.ts @@ -1,7 +1,6 @@ import { html, nothing } from "lit"; -import type { SkillStatusEntry, SkillStatusReport } from "../types.ts"; -import type { SkillGroup } from "./skills-grouping.ts"; import { normalizeToolName } from "../../../../src/agents/tool-policy.js"; +import type { SkillStatusEntry, SkillStatusReport } from "../types.ts"; import { isAllowedByPolicy, matchesList, @@ -10,6 +9,7 @@ import { resolveToolProfile, TOOL_SECTIONS, } from "./agents-utils.ts"; +import type { SkillGroup } from "./skills-grouping.ts"; import { groupSkills } from "./skills-grouping.ts"; import { computeSkillMissing, diff --git a/ui/src/ui/views/agents-utils.ts b/ui/src/ui/views/agents-utils.ts index 7b4582a14c..fedfb385b3 100644 --- a/ui/src/ui/views/agents-utils.ts +++ b/ui/src/ui/views/agents-utils.ts @@ -1,10 +1,10 @@ import { html } from "lit"; -import type { AgentIdentityResult, AgentsFilesListResult, AgentsListResult } from "../types.ts"; import { expandToolGroups, normalizeToolName, resolveToolProfilePolicy, } from "../../../../src/agents/tool-policy.js"; +import type { AgentIdentityResult, AgentsFilesListResult, AgentsListResult } from "../types.ts"; export const TOOL_SECTIONS = [ { diff --git a/ui/src/ui/views/channels.discord.ts b/ui/src/ui/views/channels.discord.ts index bd31af6c92..4da44152fc 100644 --- a/ui/src/ui/views/channels.discord.ts +++ b/ui/src/ui/views/channels.discord.ts @@ -1,8 +1,8 @@ import { html, nothing } from "lit"; -import type { DiscordStatus } from "../types.ts"; -import type { ChannelsProps } from "./channels.types.ts"; import { formatRelativeTimestamp } from "../format.ts"; +import type { DiscordStatus } from "../types.ts"; import { renderChannelConfigSection } from "./channels.config.ts"; +import type { ChannelsProps } from "./channels.types.ts"; export function renderDiscordCard(params: { props: ChannelsProps; diff --git a/ui/src/ui/views/channels.googlechat.ts b/ui/src/ui/views/channels.googlechat.ts index e0ce1ea100..ee9234bb0c 100644 --- a/ui/src/ui/views/channels.googlechat.ts +++ b/ui/src/ui/views/channels.googlechat.ts @@ -1,8 +1,8 @@ import { html, nothing } from "lit"; -import type { GoogleChatStatus } from "../types.ts"; -import type { ChannelsProps } from "./channels.types.ts"; import { formatRelativeTimestamp } from "../format.ts"; +import type { GoogleChatStatus } from "../types.ts"; import { renderChannelConfigSection } from "./channels.config.ts"; +import type { ChannelsProps } from "./channels.types.ts"; export function renderGoogleChatCard(params: { props: ChannelsProps; diff --git a/ui/src/ui/views/channels.imessage.ts b/ui/src/ui/views/channels.imessage.ts index 0010175a11..f474b4e9cd 100644 --- a/ui/src/ui/views/channels.imessage.ts +++ b/ui/src/ui/views/channels.imessage.ts @@ -1,8 +1,8 @@ import { html, nothing } from "lit"; -import type { IMessageStatus } from "../types.ts"; -import type { ChannelsProps } from "./channels.types.ts"; import { formatRelativeTimestamp } from "../format.ts"; +import type { IMessageStatus } from "../types.ts"; import { renderChannelConfigSection } from "./channels.config.ts"; +import type { ChannelsProps } from "./channels.types.ts"; export function renderIMessageCard(params: { props: ChannelsProps; diff --git a/ui/src/ui/views/channels.nostr.ts b/ui/src/ui/views/channels.nostr.ts index d59ecb6944..88adcd3916 100644 --- a/ui/src/ui/views/channels.nostr.ts +++ b/ui/src/ui/views/channels.nostr.ts @@ -1,13 +1,13 @@ import { html, nothing } from "lit"; -import type { ChannelAccountSnapshot, NostrStatus } from "../types.ts"; -import type { ChannelsProps } from "./channels.types.ts"; import { formatRelativeTimestamp } from "../format.ts"; +import type { ChannelAccountSnapshot, NostrStatus } from "../types.ts"; import { renderChannelConfigSection } from "./channels.config.ts"; import { renderNostrProfileForm, type NostrProfileFormState, type NostrProfileFormCallbacks, } from "./channels.nostr-profile-form.ts"; +import type { ChannelsProps } from "./channels.types.ts"; /** * Truncate a pubkey for display (shows first and last 8 chars) diff --git a/ui/src/ui/views/channels.signal.ts b/ui/src/ui/views/channels.signal.ts index 79324cafc8..db7d9a52de 100644 --- a/ui/src/ui/views/channels.signal.ts +++ b/ui/src/ui/views/channels.signal.ts @@ -1,8 +1,8 @@ import { html, nothing } from "lit"; -import type { SignalStatus } from "../types.ts"; -import type { ChannelsProps } from "./channels.types.ts"; import { formatRelativeTimestamp } from "../format.ts"; +import type { SignalStatus } from "../types.ts"; import { renderChannelConfigSection } from "./channels.config.ts"; +import type { ChannelsProps } from "./channels.types.ts"; export function renderSignalCard(params: { props: ChannelsProps; diff --git a/ui/src/ui/views/channels.slack.ts b/ui/src/ui/views/channels.slack.ts index 5c1f4cd5e5..ca53e3e2d7 100644 --- a/ui/src/ui/views/channels.slack.ts +++ b/ui/src/ui/views/channels.slack.ts @@ -1,8 +1,8 @@ import { html, nothing } from "lit"; -import type { SlackStatus } from "../types.ts"; -import type { ChannelsProps } from "./channels.types.ts"; import { formatRelativeTimestamp } from "../format.ts"; +import type { SlackStatus } from "../types.ts"; import { renderChannelConfigSection } from "./channels.config.ts"; +import type { ChannelsProps } from "./channels.types.ts"; export function renderSlackCard(params: { props: ChannelsProps; diff --git a/ui/src/ui/views/channels.telegram.ts b/ui/src/ui/views/channels.telegram.ts index aca7e15f59..96381a6289 100644 --- a/ui/src/ui/views/channels.telegram.ts +++ b/ui/src/ui/views/channels.telegram.ts @@ -1,8 +1,8 @@ import { html, nothing } from "lit"; -import type { ChannelAccountSnapshot, TelegramStatus } from "../types.ts"; -import type { ChannelsProps } from "./channels.types.ts"; import { formatRelativeTimestamp } from "../format.ts"; +import type { ChannelAccountSnapshot, TelegramStatus } from "../types.ts"; import { renderChannelConfigSection } from "./channels.config.ts"; +import type { ChannelsProps } from "./channels.types.ts"; export function renderTelegramCard(params: { props: ChannelsProps; diff --git a/ui/src/ui/views/channels.ts b/ui/src/ui/views/channels.ts index e602d92c84..8906289177 100644 --- a/ui/src/ui/views/channels.ts +++ b/ui/src/ui/views/channels.ts @@ -1,4 +1,5 @@ import { html, nothing } from "lit"; +import { formatRelativeTimestamp } from "../format.ts"; import type { ChannelAccountSnapshot, ChannelUiMetaEntry, @@ -13,8 +14,6 @@ import type { TelegramStatus, WhatsAppStatus, } from "../types.ts"; -import type { ChannelKey, ChannelsChannelData, ChannelsProps } from "./channels.types.ts"; -import { formatRelativeTimestamp } from "../format.ts"; import { renderChannelConfigSection } from "./channels.config.ts"; import { renderDiscordCard } from "./channels.discord.ts"; import { renderGoogleChatCard } from "./channels.googlechat.ts"; @@ -24,6 +23,7 @@ import { channelEnabled, renderChannelAccountCount } from "./channels.shared.ts" import { renderSignalCard } from "./channels.signal.ts"; import { renderSlackCard } from "./channels.slack.ts"; import { renderTelegramCard } from "./channels.telegram.ts"; +import type { ChannelKey, ChannelsChannelData, ChannelsProps } from "./channels.types.ts"; import { renderWhatsAppCard } from "./channels.whatsapp.ts"; export function renderChannels(props: ChannelsProps) { diff --git a/ui/src/ui/views/channels.whatsapp.ts b/ui/src/ui/views/channels.whatsapp.ts index 6c9850bf3c..463788c1f6 100644 --- a/ui/src/ui/views/channels.whatsapp.ts +++ b/ui/src/ui/views/channels.whatsapp.ts @@ -1,8 +1,8 @@ import { html, nothing } from "lit"; -import type { WhatsAppStatus } from "../types.ts"; -import type { ChannelsProps } from "./channels.types.ts"; import { formatRelativeTimestamp, formatDurationHuman } from "../format.ts"; +import type { WhatsAppStatus } from "../types.ts"; import { renderChannelConfigSection } from "./channels.config.ts"; +import type { ChannelsProps } from "./channels.types.ts"; export function renderWhatsAppCard(params: { props: ChannelsProps; diff --git a/ui/src/ui/views/chat.ts b/ui/src/ui/views/chat.ts index a74b6cf166..1ef9224525 100644 --- a/ui/src/ui/views/chat.ts +++ b/ui/src/ui/views/chat.ts @@ -1,9 +1,6 @@ import { html, nothing } from "lit"; import { ref } from "lit/directives/ref.js"; import { repeat } from "lit/directives/repeat.js"; -import type { SessionsListResult } from "../types.ts"; -import type { ChatItem, MessageGroup } from "../types/chat-types.ts"; -import type { ChatAttachment, ChatQueueItem } from "../ui-types.ts"; import { renderMessageGroup, renderReadingIndicatorGroup, @@ -12,6 +9,9 @@ import { import { normalizeMessage, normalizeRoleForGrouping } from "../chat/message-normalizer.ts"; import { icons } from "../icons.ts"; import { detectTextDirection } from "../text-direction.ts"; +import type { SessionsListResult } from "../types.ts"; +import type { ChatItem, MessageGroup } from "../types/chat-types.ts"; +import type { ChatAttachment, ChatQueueItem } from "../ui-types.ts"; import { renderMarkdownSidebar } from "./markdown-sidebar.ts"; import "../components/resizable-divider.ts"; diff --git a/ui/src/ui/views/config-form.render.ts b/ui/src/ui/views/config-form.render.ts index 7c541d97f0..9512622d15 100644 --- a/ui/src/ui/views/config-form.render.ts +++ b/ui/src/ui/views/config-form.render.ts @@ -1,6 +1,6 @@ import { html, nothing } from "lit"; -import type { ConfigUiHints } from "../types.ts"; import { icons } from "../icons.ts"; +import type { ConfigUiHints } from "../types.ts"; import { renderNode } from "./config-form.node.ts"; import { hintForPath, humanize, schemaType, type JsonSchema } from "./config-form.shared.ts"; diff --git a/ui/src/ui/views/cron.test.ts b/ui/src/ui/views/cron.test.ts index e53509f0df..839566151c 100644 --- a/ui/src/ui/views/cron.test.ts +++ b/ui/src/ui/views/cron.test.ts @@ -1,7 +1,7 @@ import { render } from "lit"; import { describe, expect, it, vi } from "vitest"; -import type { CronJob } from "../types.ts"; import { DEFAULT_CRON_FORM } from "../app-defaults.ts"; +import type { CronJob } from "../types.ts"; import { renderCron, type CronProps } from "./cron.ts"; function createJob(id: string): CronJob { diff --git a/ui/src/ui/views/cron.ts b/ui/src/ui/views/cron.ts index 11b5477c31..e5cc32408e 100644 --- a/ui/src/ui/views/cron.ts +++ b/ui/src/ui/views/cron.ts @@ -1,9 +1,9 @@ import { html, nothing } from "lit"; -import type { ChannelUiMetaEntry, CronJob, CronRunLogEntry, CronStatus } from "../types.ts"; -import type { CronFormState } from "../ui-types.ts"; import { formatRelativeTimestamp, formatMs } from "../format.ts"; import { pathForTab } from "../navigation.ts"; import { formatCronSchedule, formatNextRun } from "../presenter.ts"; +import type { ChannelUiMetaEntry, CronJob, CronRunLogEntry, CronStatus } from "../types.ts"; +import type { CronFormState } from "../ui-types.ts"; export type CronProps = { basePath: string; diff --git a/ui/src/ui/views/instances.ts b/ui/src/ui/views/instances.ts index 897304cef0..df5fe5fd4f 100644 --- a/ui/src/ui/views/instances.ts +++ b/ui/src/ui/views/instances.ts @@ -1,6 +1,6 @@ import { html, nothing } from "lit"; -import type { PresenceEntry } from "../types.ts"; import { formatPresenceAge, formatPresenceSummary } from "../presenter.ts"; +import type { PresenceEntry } from "../types.ts"; export type InstancesProps = { loading: boolean; diff --git a/ui/src/ui/views/nodes-exec-approvals.ts b/ui/src/ui/views/nodes-exec-approvals.ts index f968006345..6a0c1a0d47 100644 --- a/ui/src/ui/views/nodes-exec-approvals.ts +++ b/ui/src/ui/views/nodes-exec-approvals.ts @@ -3,8 +3,8 @@ import type { ExecApprovalsAllowlistEntry, ExecApprovalsFile, } from "../controllers/exec-approvals.ts"; -import type { NodesProps } from "./nodes.ts"; import { clampText, formatRelativeTimestamp } from "../format.ts"; +import type { NodesProps } from "./nodes.ts"; type ExecSecurity = "deny" | "allowlist" | "full"; type ExecAsk = "off" | "on-miss" | "always"; diff --git a/ui/src/ui/views/overview.ts b/ui/src/ui/views/overview.ts index caa2a6fd15..6d94ea1fda 100644 --- a/ui/src/ui/views/overview.ts +++ b/ui/src/ui/views/overview.ts @@ -1,9 +1,9 @@ import { html } from "lit"; -import type { GatewayHelloOk } from "../gateway.ts"; -import type { UiSettings } from "../storage.ts"; import { t, i18n, type Locale } from "../../i18n/index.ts"; import { formatRelativeTimestamp, formatDurationHuman } from "../format.ts"; +import type { GatewayHelloOk } from "../gateway.ts"; import { formatNextRun } from "../presenter.ts"; +import type { UiSettings } from "../storage.ts"; export type OverviewProps = { connected: boolean; diff --git a/ui/src/ui/views/sessions.ts b/ui/src/ui/views/sessions.ts index 9abc17f5b7..6f0332f62b 100644 --- a/ui/src/ui/views/sessions.ts +++ b/ui/src/ui/views/sessions.ts @@ -1,8 +1,8 @@ import { html, nothing } from "lit"; -import type { GatewaySessionRow, SessionsListResult } from "../types.ts"; import { formatRelativeTimestamp } from "../format.ts"; import { pathForTab } from "../navigation.ts"; import { formatSessionTokens } from "../presenter.ts"; +import type { GatewaySessionRow, SessionsListResult } from "../types.ts"; export type SessionsProps = { loading: boolean; diff --git a/ui/src/ui/views/skills.ts b/ui/src/ui/views/skills.ts index 9077a30df3..830f97921f 100644 --- a/ui/src/ui/views/skills.ts +++ b/ui/src/ui/views/skills.ts @@ -1,7 +1,7 @@ import { html, nothing } from "lit"; import type { SkillMessageMap } from "../controllers/skills.ts"; -import type { SkillStatusEntry, SkillStatusReport } from "../types.ts"; import { clampText } from "../format.ts"; +import type { SkillStatusEntry, SkillStatusReport } from "../types.ts"; import { groupSkills } from "./skills-grouping.ts"; import { computeSkillMissing, diff --git a/ui/src/ui/views/usage-render-details.test.ts b/ui/src/ui/views/usage-render-details.test.ts index 084a15c4d1..1218b528bd 100644 --- a/ui/src/ui/views/usage-render-details.test.ts +++ b/ui/src/ui/views/usage-render-details.test.ts @@ -1,10 +1,10 @@ import { describe, it, expect } from "vitest"; -import type { TimeSeriesPoint, UsageSessionEntry } from "./usageTypes.ts"; import { computeFilteredUsage, CHART_BAR_WIDTH_RATIO, CHART_MAX_BAR_WIDTH, } from "./usage-render-details.ts"; +import type { TimeSeriesPoint, UsageSessionEntry } from "./usageTypes.ts"; function makePoint(overrides: Partial = {}): TimeSeriesPoint { return {