diff --git a/extensions/browser/src/test-utils/vitest-mock-fn.ts b/extensions/browser/src/test-utils/vitest-mock-fn.ts index eab9c6ec04d..9e182f9a061 100644 --- a/extensions/browser/src/test-utils/vitest-mock-fn.ts +++ b/extensions/browser/src/test-utils/vitest-mock-fn.ts @@ -1,3 +1,2 @@ -// oxlint-disable-next-line typescript/no-explicit-any -export type MockFn any = (...args: any[]) => any> = +export type MockFn unknown = (...args: unknown[]) => unknown> = import("vitest").Mock; diff --git a/extensions/matrix/runtime-api.ts b/extensions/matrix/runtime-api.ts index 74bfcc64c26..3768d1eb365 100644 --- a/extensions/matrix/runtime-api.ts +++ b/extensions/matrix/runtime-api.ts @@ -50,7 +50,7 @@ export type { ChannelMessageActionContext, } from "openclaw/plugin-sdk/channel-contract"; export type { OpenClawConfig } from "openclaw/plugin-sdk/config-types"; -export { formatZonedTimestamp } from "openclaw/plugin-sdk/core"; +export { formatZonedTimestamp } from "openclaw/plugin-sdk/time-runtime"; export type { PluginRuntime, RuntimeLogger } from "openclaw/plugin-sdk/plugin-runtime"; export type { RuntimeEnv } from "openclaw/plugin-sdk/runtime-env"; export type { WizardPrompter } from "openclaw/plugin-sdk/setup"; diff --git a/extensions/matrix/src/runtime-api.ts b/extensions/matrix/src/runtime-api.ts index eeabd6fab76..19445ef1ee4 100644 --- a/extensions/matrix/src/runtime-api.ts +++ b/extensions/matrix/src/runtime-api.ts @@ -103,11 +103,8 @@ export { resolveSenderScopedGroupPolicy, } from "openclaw/plugin-sdk/channel-policy"; export { buildTimeoutAbortSignal } from "./matrix/sdk/timeout-abort-signal.js"; -export { - formatZonedTimestamp, - type PluginRuntime, - type RuntimeLogger, -} from "openclaw/plugin-sdk/core"; +export { formatZonedTimestamp } from "openclaw/plugin-sdk/time-runtime"; +export type { PluginRuntime, RuntimeLogger } from "openclaw/plugin-sdk/plugin-runtime"; export type { ReplyPayload } from "openclaw/plugin-sdk/reply-runtime"; // resolveMatrixAccountStringValues already comes from the Matrix API barrel. // Re-exporting auth-precedence here makes Jiti try to define the same export twice. diff --git a/package.json b/package.json index 203c690e837..67af11c02e5 100644 --- a/package.json +++ b/package.json @@ -542,6 +542,10 @@ "types": "./dist/plugin-sdk/temp-path.d.ts", "default": "./dist/plugin-sdk/temp-path.js" }, + "./plugin-sdk/time-runtime": { + "types": "./dist/plugin-sdk/time-runtime.d.ts", + "default": "./dist/plugin-sdk/time-runtime.js" + }, "./plugin-sdk/logging-core": { "types": "./dist/plugin-sdk/logging-core.d.ts", "default": "./dist/plugin-sdk/logging-core.js" diff --git a/packages/plugin-sdk/package.json b/packages/plugin-sdk/package.json index 7a19d3308bf..8d9e367d970 100644 --- a/packages/plugin-sdk/package.json +++ b/packages/plugin-sdk/package.json @@ -60,6 +60,10 @@ "types": "./dist/src/plugin-sdk/system-event-runtime.d.ts", "default": "./src/system-event-runtime.ts" }, + "./time-runtime": { + "types": "./dist/src/plugin-sdk/time-runtime.d.ts", + "default": "./src/time-runtime.ts" + }, "./transport-ready-runtime": { "types": "./dist/src/plugin-sdk/transport-ready-runtime.d.ts", "default": "./src/transport-ready-runtime.ts" diff --git a/scripts/lib/plugin-sdk-entrypoints.json b/scripts/lib/plugin-sdk-entrypoints.json index d0f1506d0b7..ff1429674d6 100644 --- a/scripts/lib/plugin-sdk-entrypoints.json +++ b/scripts/lib/plugin-sdk-entrypoints.json @@ -119,6 +119,7 @@ "test-node-mocks", "testing", "temp-path", + "time-runtime", "logging-core", "migration", "migration-runtime", diff --git a/src/acp/persistent-bindings.lifecycle.test.ts b/src/acp/persistent-bindings.lifecycle.test.ts index 21897a87df2..a7d75145ea1 100644 --- a/src/acp/persistent-bindings.lifecycle.test.ts +++ b/src/acp/persistent-bindings.lifecycle.test.ts @@ -1,4 +1,4 @@ -import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { beforeEach, describe, expect, it, vi } from "vitest"; import type { OpenClawConfig } from "../config/config.js"; import { buildConfiguredAcpSessionKey } from "./persistent-bindings.types.js"; @@ -43,11 +43,8 @@ const baseCfg = { let resetAcpSessionInPlace: typeof import("./persistent-bindings.lifecycle.js").resetAcpSessionInPlace; -beforeAll(async () => { - ({ resetAcpSessionInPlace } = await import("./persistent-bindings.lifecycle.js")); -}); - -beforeEach(() => { +beforeEach(async () => { + vi.resetModules(); managerMocks.resolveSession.mockReset().mockReturnValue({ kind: "none" }); managerMocks.closeSession.mockReset().mockResolvedValue({ runtimeClosed: true, @@ -57,6 +54,7 @@ beforeEach(() => { managerMocks.updateSessionRuntimeOptions.mockReset().mockResolvedValue(undefined); sessionMetaMocks.readAcpSessionEntry.mockReset().mockReturnValue(undefined); resolveMocks.resolveConfiguredAcpBindingSpecBySessionKey.mockReset().mockReturnValue(null); + ({ resetAcpSessionInPlace } = await import("./persistent-bindings.lifecycle.js")); }); describe("resetAcpSessionInPlace", () => { diff --git a/src/plugin-sdk/time-runtime.ts b/src/plugin-sdk/time-runtime.ts new file mode 100644 index 00000000000..527d81046d1 --- /dev/null +++ b/src/plugin-sdk/time-runtime.ts @@ -0,0 +1,5 @@ +export { + formatUtcTimestamp, + formatZonedTimestamp, + resolveTimezone, +} from "../infra/format-time/format-datetime.js"; diff --git a/src/plugins/contracts/plugin-sdk-runtime-api-guardrails.test.ts b/src/plugins/contracts/plugin-sdk-runtime-api-guardrails.test.ts index a667f41b6fb..0131633c670 100644 --- a/src/plugins/contracts/plugin-sdk-runtime-api-guardrails.test.ts +++ b/src/plugins/contracts/plugin-sdk-runtime-api-guardrails.test.ts @@ -129,7 +129,7 @@ const RUNTIME_API_EXPORT_GUARDS: Record = { 'export { writeJsonFileAtomically } from "openclaw/plugin-sdk/json-store";', 'export type { ChannelDirectoryEntry, ChannelMessageActionContext } from "openclaw/plugin-sdk/channel-contract";', 'export type { OpenClawConfig } from "openclaw/plugin-sdk/config-types";', - 'export { formatZonedTimestamp } from "openclaw/plugin-sdk/core";', + 'export { formatZonedTimestamp } from "openclaw/plugin-sdk/time-runtime";', 'export type { PluginRuntime, RuntimeLogger } from "openclaw/plugin-sdk/plugin-runtime";', 'export type { RuntimeEnv } from "openclaw/plugin-sdk/runtime-env";', 'export type { WizardPrompter } from "openclaw/plugin-sdk/setup";',