diff --git a/package-lock.json b/package-lock.json index 38e1232f8..9af10d5bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,19 +14,16 @@ "packages/coding-agent/examples/extensions/custom-provider-gitlab-duo", "packages/coding-agent/examples/extensions/sandbox" ], - "dependencies": { - "@earendil-works/pi-coding-agent": "^0.30.2" - }, "devDependencies": { - "@anthropic-ai/sandbox-runtime": "^0.0.26", + "@anthropic-ai/sandbox-runtime": "0.0.26", "@biomejs/biome": "2.3.5", - "@types/node": "^22.10.5", + "@types/node": "22.19.19", "@typescript/native-preview": "7.0.0-dev.20260120.1", - "husky": "^9.1.7", - "jiti": "^2.7.0", - "shx": "^0.4.0", - "tsx": "^4.20.3", - "typescript": "^5.9.2" + "esbuild": "0.28.0", + "husky": "9.1.7", + "jiti": "2.7.0", + "shx": "0.4.0", + "typescript": "5.9.3" }, "engines": { "node": ">=22.19.0" @@ -5089,25 +5086,6 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, - "node_modules/tsx": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.22.1.tgz", - "integrity": "sha512-TvncJykhxAzFCk0VQZKBTClall4Pm7qXDSodb6uxi8QFa8X8mT6ABjxxsQ2opDRYxG7AzcRWXaFtruz5HJKuWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "~0.28.0" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -6004,15 +5982,15 @@ "license": "MIT", "dependencies": { "@earendil-works/pi-ai": "^0.75.3", - "ignore": "^7.0.5", - "typebox": "^1.1.24", - "yaml": "^2.8.2" + "ignore": "7.0.5", + "typebox": "1.1.38", + "yaml": "2.9.0" }, "devDependencies": { - "@types/node": "^24.3.0", - "@vitest/coverage-v8": "^3.2.4", - "typescript": "^5.7.3", - "vitest": "^3.2.4" + "@types/node": "24.12.4", + "@vitest/coverage-v8": "3.2.4", + "typescript": "5.9.3", + "vitest": "3.2.4" }, "engines": { "node": ">=22.19.0" @@ -6040,23 +6018,23 @@ "version": "0.75.3", "license": "MIT", "dependencies": { - "@anthropic-ai/sdk": "^0.91.1", - "@aws-sdk/client-bedrock-runtime": "^3.1030.0", - "@google/genai": "^1.40.0", - "@mistralai/mistralai": "^2.2.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.6", + "@anthropic-ai/sdk": "0.91.1", + "@aws-sdk/client-bedrock-runtime": "3.1048.0", + "@google/genai": "1.52.0", + "@mistralai/mistralai": "2.2.1", + "http-proxy-agent": "7.0.2", + "https-proxy-agent": "7.0.6", "openai": "6.26.0", - "partial-json": "^0.1.7", - "typebox": "^1.1.24" + "partial-json": "0.1.7", + "typebox": "1.1.38" }, "bin": { "pi-ai": "dist/cli.js" }, "devDependencies": { - "@types/node": "^24.3.0", - "canvas": "^3.2.0", - "vitest": "^3.2.4" + "@types/node": "24.12.4", + "canvas": "3.2.3", + "vitest": "3.2.4" }, "engines": { "node": ">=22.19.0" @@ -6087,47 +6065,47 @@ "@earendil-works/pi-agent-core": "^0.75.3", "@earendil-works/pi-ai": "^0.75.3", "@earendil-works/pi-tui": "^0.75.3", - "@silvia-odwyer/photon-node": "^0.3.4", - "chalk": "^5.5.0", - "cross-spawn": "^7.0.6", - "diff": "^8.0.2", - "glob": "^13.0.1", - "highlight.js": "^10.7.3", - "hosted-git-info": "^9.0.2", - "ignore": "^7.0.5", - "jiti": "^2.7.0", - "minimatch": "^10.2.3", - "proper-lockfile": "^4.1.2", - "typebox": "^1.1.24", - "undici": "^8.3.0", - "yaml": "^2.8.2" + "@silvia-odwyer/photon-node": "0.3.4", + "chalk": "5.6.2", + "cross-spawn": "7.0.6", + "diff": "8.0.4", + "glob": "13.0.6", + "highlight.js": "10.7.3", + "hosted-git-info": "9.0.3", + "ignore": "7.0.5", + "jiti": "2.7.0", + "minimatch": "10.2.5", + "proper-lockfile": "4.1.2", + "typebox": "1.1.38", + "undici": "8.3.0", + "yaml": "2.9.0" }, "bin": { "pi": "dist/cli.js" }, "devDependencies": { - "@types/cross-spawn": "^6.0.6", - "@types/diff": "^7.0.2", - "@types/hosted-git-info": "^3.0.5", - "@types/ms": "^2.1.0", - "@types/node": "^24.3.0", - "@types/proper-lockfile": "^4.1.4", - "shx": "^0.4.0", - "typescript": "^5.7.3", - "vitest": "^3.2.4" + "@types/cross-spawn": "6.0.6", + "@types/diff": "7.0.2", + "@types/hosted-git-info": "3.0.5", + "@types/ms": "2.1.0", + "@types/node": "24.12.4", + "@types/proper-lockfile": "4.1.4", + "shx": "0.4.0", + "typescript": "5.9.3", + "vitest": "3.2.4" }, "engines": { "node": ">=22.19.0" }, "optionalDependencies": { - "@mariozechner/clipboard": "^0.3.6" + "@mariozechner/clipboard": "0.3.6" } }, "packages/coding-agent/examples/extensions/custom-provider-anthropic": { "name": "pi-extension-custom-provider-anthropic", "version": "0.75.3", "dependencies": { - "@anthropic-ai/sdk": "^0.52.0" + "@anthropic-ai/sdk": "0.52.0" } }, "packages/coding-agent/examples/extensions/custom-provider-gitlab-duo": { @@ -6138,17 +6116,17 @@ "name": "pi-extension-sandbox", "version": "1.5.3", "dependencies": { - "@anthropic-ai/sandbox-runtime": "^0.0.26" + "@anthropic-ai/sandbox-runtime": "0.0.26" } }, "packages/coding-agent/examples/extensions/with-deps": { "name": "pi-extension-with-deps", "version": "0.75.3", "dependencies": { - "ms": "^2.1.3" + "ms": "2.1.3" }, "devDependencies": { - "@types/ms": "^2.1.0" + "@types/ms": "2.1.0" } }, "packages/coding-agent/node_modules/@anthropic-ai/sdk": { @@ -6182,19 +6160,19 @@ "version": "0.75.3", "license": "MIT", "dependencies": { - "get-east-asian-width": "^1.3.0", - "marked": "^15.0.12" + "get-east-asian-width": "1.6.0", + "marked": "15.0.12" }, "devDependencies": { - "@xterm/headless": "^5.5.0", - "@xterm/xterm": "^5.5.0", - "chalk": "^5.5.0" + "@xterm/headless": "5.5.0", + "@xterm/xterm": "5.5.0", + "chalk": "5.6.2" }, "engines": { "node": ">=22.19.0" }, "optionalDependencies": { - "koffi": "^2.9.0" + "koffi": "2.16.2" } } } diff --git a/package.json b/package.json index c0b10fe0b..cd0fed1a6 100644 --- a/package.json +++ b/package.json @@ -30,23 +30,20 @@ "prepare": "husky" }, "devDependencies": { - "@anthropic-ai/sandbox-runtime": "^0.0.26", + "@anthropic-ai/sandbox-runtime": "0.0.26", "@biomejs/biome": "2.3.5", - "@types/node": "^22.10.5", + "@types/node": "22.19.19", "@typescript/native-preview": "7.0.0-dev.20260120.1", - "husky": "^9.1.7", - "jiti": "^2.7.0", - "tsx": "^4.20.3", - "typescript": "^5.9.2", - "shx": "^0.4.0" + "esbuild": "0.28.0", + "husky": "9.1.7", + "jiti": "2.7.0", + "shx": "0.4.0", + "typescript": "5.9.3" }, "engines": { "node": ">=22.19.0" }, "version": "0.0.3", - "dependencies": { - "@earendil-works/pi-coding-agent": "^0.30.2" - }, "overrides": { "rimraf": "6.1.2", "gaxios": { diff --git a/packages/agent/package.json b/packages/agent/package.json index 37e666bab..d8bf0656c 100644 --- a/packages/agent/package.json +++ b/packages/agent/package.json @@ -30,9 +30,9 @@ }, "dependencies": { "@earendil-works/pi-ai": "^0.75.3", - "ignore": "^7.0.5", - "typebox": "^1.1.24", - "yaml": "^2.8.2" + "ignore": "7.0.5", + "typebox": "1.1.38", + "yaml": "2.9.0" }, "keywords": [ "ai", @@ -52,9 +52,9 @@ "node": ">=22.19.0" }, "devDependencies": { - "@types/node": "^24.3.0", - "@vitest/coverage-v8": "^3.2.4", - "typescript": "^5.7.3", - "vitest": "^3.2.4" + "@types/node": "24.12.4", + "@vitest/coverage-v8": "3.2.4", + "typescript": "5.9.3", + "vitest": "3.2.4" } } diff --git a/packages/agent/test/agent-loop.test.ts b/packages/agent/test/agent-loop.test.ts index 261b42fc7..62eadf810 100644 --- a/packages/agent/test/agent-loop.test.ts +++ b/packages/agent/test/agent-loop.test.ts @@ -8,8 +8,8 @@ import { } from "@earendil-works/pi-ai"; import { Type } from "typebox"; import { describe, expect, it } from "vitest"; -import { agentLoop, agentLoopContinue } from "../src/agent-loop.js"; -import type { AgentContext, AgentEvent, AgentLoopConfig, AgentMessage, AgentTool } from "../src/types.js"; +import { agentLoop, agentLoopContinue } from "../src/agent-loop.ts"; +import type { AgentContext, AgentEvent, AgentLoopConfig, AgentMessage, AgentTool } from "../src/types.ts"; // Mock stream for testing - mimics MockAssistantStream class MockAssistantStream extends EventStream { diff --git a/packages/agent/test/agent.test.ts b/packages/agent/test/agent.test.ts index 9c38ae8c1..82cc58dee 100644 --- a/packages/agent/test/agent.test.ts +++ b/packages/agent/test/agent.test.ts @@ -1,6 +1,6 @@ import { type AssistantMessage, type AssistantMessageEvent, EventStream, getModel } from "@earendil-works/pi-ai"; import { describe, expect, it } from "vitest"; -import { Agent } from "../src/index.js"; +import { Agent } from "../src/index.ts"; // Mock stream that mimics AssistantMessageEventStream class MockAssistantStream extends EventStream { diff --git a/packages/agent/test/e2e.test.ts b/packages/agent/test/e2e.test.ts index b75645b06..309536ad2 100644 --- a/packages/agent/test/e2e.test.ts +++ b/packages/agent/test/e2e.test.ts @@ -11,8 +11,8 @@ import { type UserMessage, } from "@earendil-works/pi-ai"; import { afterEach, describe, expect, it } from "vitest"; -import { Agent, type AgentEvent } from "../src/index.js"; -import { calculateTool } from "./utils/calculate.js"; +import { Agent, type AgentEvent } from "../src/index.ts"; +import { calculateTool } from "./utils/calculate.ts"; const registrations: FauxProviderRegistration[] = []; diff --git a/packages/agent/test/harness/agent-harness-stream.test.ts b/packages/agent/test/harness/agent-harness-stream.test.ts index dba98f91e..ee79564bf 100644 --- a/packages/agent/test/harness/agent-harness-stream.test.ts +++ b/packages/agent/test/harness/agent-harness-stream.test.ts @@ -1,10 +1,10 @@ import { fauxAssistantMessage, fauxToolCall, registerFauxProvider, type StreamOptions } from "@earendil-works/pi-ai"; import { afterEach, describe, expect, it } from "vitest"; -import { AgentHarness } from "../../src/harness/agent-harness.js"; -import { NodeExecutionEnv } from "../../src/harness/env/nodejs.js"; -import { InMemorySessionStorage } from "../../src/harness/session/memory-storage.js"; -import { Session } from "../../src/harness/session/session.js"; -import { calculateTool } from "../utils/calculate.js"; +import { AgentHarness } from "../../src/harness/agent-harness.ts"; +import { NodeExecutionEnv } from "../../src/harness/env/nodejs.ts"; +import { InMemorySessionStorage } from "../../src/harness/session/memory-storage.ts"; +import { Session } from "../../src/harness/session/session.ts"; +import { calculateTool } from "../utils/calculate.ts"; const registrations: Array<{ unregister(): void }> = []; diff --git a/packages/agent/test/harness/agent-harness.test.ts b/packages/agent/test/harness/agent-harness.test.ts index 6ded341c8..8a3955324 100644 --- a/packages/agent/test/harness/agent-harness.test.ts +++ b/packages/agent/test/harness/agent-harness.test.ts @@ -1,13 +1,13 @@ import { fauxAssistantMessage, fauxToolCall, getModel, registerFauxProvider } from "@earendil-works/pi-ai"; import { afterEach, describe, expect, it } from "vitest"; -import { AgentHarness } from "../../src/harness/agent-harness.js"; -import { NodeExecutionEnv } from "../../src/harness/env/nodejs.js"; -import { InMemorySessionStorage } from "../../src/harness/session/memory-storage.js"; -import { Session } from "../../src/harness/session/session.js"; -import type { PromptTemplate, Skill } from "../../src/harness/types.js"; -import type { AgentMessage, AgentTool } from "../../src/types.js"; -import { calculateTool } from "../utils/calculate.js"; -import { getCurrentTimeTool } from "../utils/get-current-time.js"; +import { AgentHarness } from "../../src/harness/agent-harness.ts"; +import { NodeExecutionEnv } from "../../src/harness/env/nodejs.ts"; +import { InMemorySessionStorage } from "../../src/harness/session/memory-storage.ts"; +import { Session } from "../../src/harness/session/session.ts"; +import type { PromptTemplate, Skill } from "../../src/harness/types.ts"; +import type { AgentMessage, AgentTool } from "../../src/types.ts"; +import { calculateTool } from "../utils/calculate.ts"; +import { getCurrentTimeTool } from "../utils/get-current-time.ts"; interface AppSkill extends Skill { source: "project" | "user"; diff --git a/packages/agent/test/harness/compaction.test.ts b/packages/agent/test/harness/compaction.test.ts index 25d740ca5..b694d9f5b 100644 --- a/packages/agent/test/harness/compaction.test.ts +++ b/packages/agent/test/harness/compaction.test.ts @@ -22,8 +22,8 @@ import { prepareCompaction, serializeConversation, shouldCompact, -} from "../../src/harness/compaction/compaction.js"; -import { buildSessionContext } from "../../src/harness/session/session.js"; +} from "../../src/harness/compaction/compaction.ts"; +import { buildSessionContext } from "../../src/harness/session/session.ts"; import type { BranchSummaryEntry, CompactionEntry, @@ -33,9 +33,9 @@ import type { ModelChangeEntry, SessionTreeEntry, ThinkingLevelChangeEntry, -} from "../../src/harness/types.js"; -import { getOrThrow } from "../../src/harness/types.js"; -import type { AgentMessage } from "../../src/types.js"; +} from "../../src/harness/types.ts"; +import { getOrThrow } from "../../src/harness/types.ts"; +import type { AgentMessage } from "../../src/types.ts"; let nextId = 0; function createId(): string { diff --git a/packages/agent/test/harness/nodejs-env.test.ts b/packages/agent/test/harness/nodejs-env.test.ts index aef098be6..758d5f593 100644 --- a/packages/agent/test/harness/nodejs-env.test.ts +++ b/packages/agent/test/harness/nodejs-env.test.ts @@ -1,10 +1,10 @@ import { access, chmod, realpath, symlink } from "node:fs/promises"; import { join } from "node:path"; import { afterEach, describe, expect, it } from "vitest"; -import { NodeExecutionEnv } from "../../src/harness/env/nodejs.js"; -import { FileError, getOrThrow } from "../../src/harness/types.js"; -import { executeShellWithCapture } from "../../src/harness/utils/shell-output.js"; -import { createTempDir } from "./session-test-utils.js"; +import { NodeExecutionEnv } from "../../src/harness/env/nodejs.ts"; +import { FileError, getOrThrow } from "../../src/harness/types.ts"; +import { executeShellWithCapture } from "../../src/harness/utils/shell-output.ts"; +import { createTempDir } from "./session-test-utils.ts"; const chmodRestorePaths: string[] = []; diff --git a/packages/agent/test/harness/prompt-templates.test.ts b/packages/agent/test/harness/prompt-templates.test.ts index adb11006b..8e118ad49 100644 --- a/packages/agent/test/harness/prompt-templates.test.ts +++ b/packages/agent/test/harness/prompt-templates.test.ts @@ -1,13 +1,13 @@ import { symlink } from "node:fs/promises"; import { join } from "node:path"; import { describe, expect, it } from "vitest"; -import { NodeExecutionEnv } from "../../src/harness/env/nodejs.js"; +import { NodeExecutionEnv } from "../../src/harness/env/nodejs.ts"; import { formatPromptTemplateInvocation, loadPromptTemplates, loadSourcedPromptTemplates, -} from "../../src/harness/prompt-templates.js"; -import { createTempDir } from "./session-test-utils.js"; +} from "../../src/harness/prompt-templates.ts"; +import { createTempDir } from "./session-test-utils.ts"; describe("loadPromptTemplates", () => { it("loads markdown templates non-recursively from one or more dirs", async () => { diff --git a/packages/agent/test/harness/repo.test.ts b/packages/agent/test/harness/repo.test.ts index fda51b03b..b768fc1a1 100644 --- a/packages/agent/test/harness/repo.test.ts +++ b/packages/agent/test/harness/repo.test.ts @@ -1,9 +1,9 @@ import { existsSync } from "node:fs"; import { describe, expect, it } from "vitest"; -import { NodeExecutionEnv } from "../../src/harness/env/nodejs.js"; -import { JsonlSessionRepo } from "../../src/harness/session/jsonl-repo.js"; -import { InMemorySessionRepo } from "../../src/harness/session/memory-repo.js"; -import { createAssistantMessage, createTempDir, createUserMessage } from "./session-test-utils.js"; +import { NodeExecutionEnv } from "../../src/harness/env/nodejs.ts"; +import { JsonlSessionRepo } from "../../src/harness/session/jsonl-repo.ts"; +import { InMemorySessionRepo } from "../../src/harness/session/memory-repo.ts"; +import { createAssistantMessage, createTempDir, createUserMessage } from "./session-test-utils.ts"; describe("InMemorySessionRepo", () => { it("opens, deletes, and forks by metadata", async () => { diff --git a/packages/agent/test/harness/resource-formatting.test.ts b/packages/agent/test/harness/resource-formatting.test.ts index fe3fed406..45d4553f9 100644 --- a/packages/agent/test/harness/resource-formatting.test.ts +++ b/packages/agent/test/harness/resource-formatting.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import { formatPromptTemplateInvocation } from "../../src/harness/prompt-templates.js"; -import { formatSkillInvocation } from "../../src/harness/skills.js"; +import { formatPromptTemplateInvocation } from "../../src/harness/prompt-templates.ts"; +import { formatSkillInvocation } from "../../src/harness/skills.ts"; describe("resource formatting helpers", () => { it("formats skill invocations with additional instructions", () => { diff --git a/packages/agent/test/harness/session-uuid.test.ts b/packages/agent/test/harness/session-uuid.test.ts index 247f31776..b8d571f4e 100644 --- a/packages/agent/test/harness/session-uuid.test.ts +++ b/packages/agent/test/harness/session-uuid.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from "vitest"; -import { uuidv7 } from "../../src/harness/session/uuid.js"; +import { uuidv7 } from "../../src/harness/session/uuid.ts"; const UUID_V7_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/; const TIMESTAMP = 0x0123456789ab; diff --git a/packages/agent/test/harness/session.test.ts b/packages/agent/test/harness/session.test.ts index 96510ea46..c9598da8d 100644 --- a/packages/agent/test/harness/session.test.ts +++ b/packages/agent/test/harness/session.test.ts @@ -1,12 +1,12 @@ import { readFileSync } from "node:fs"; import { join } from "node:path"; import { describe, expect, it } from "vitest"; -import { NodeExecutionEnv } from "../../src/harness/env/nodejs.js"; -import { JsonlSessionStorage } from "../../src/harness/session/jsonl-storage.js"; -import { InMemorySessionStorage } from "../../src/harness/session/memory-storage.js"; -import { Session } from "../../src/harness/session/session.js"; -import type { SessionStorage } from "../../src/harness/types.js"; -import { createAssistantMessage, createTempDir, createUserMessage, getLatestTempDir } from "./session-test-utils.js"; +import { NodeExecutionEnv } from "../../src/harness/env/nodejs.ts"; +import { JsonlSessionStorage } from "../../src/harness/session/jsonl-storage.ts"; +import { InMemorySessionStorage } from "../../src/harness/session/memory-storage.ts"; +import { Session } from "../../src/harness/session/session.ts"; +import type { SessionStorage } from "../../src/harness/types.ts"; +import { createAssistantMessage, createTempDir, createUserMessage, getLatestTempDir } from "./session-test-utils.ts"; async function runSessionSuite( name: string, diff --git a/packages/agent/test/harness/skills.test.ts b/packages/agent/test/harness/skills.test.ts index 41840a3eb..bd769ea91 100644 --- a/packages/agent/test/harness/skills.test.ts +++ b/packages/agent/test/harness/skills.test.ts @@ -1,9 +1,9 @@ import { symlink } from "node:fs/promises"; import { join } from "node:path"; import { describe, expect, it } from "vitest"; -import { NodeExecutionEnv } from "../../src/harness/env/nodejs.js"; -import { loadSkills, loadSourcedSkills } from "../../src/harness/skills.js"; -import { createTempDir } from "./session-test-utils.js"; +import { NodeExecutionEnv } from "../../src/harness/env/nodejs.ts"; +import { loadSkills, loadSourcedSkills } from "../../src/harness/skills.ts"; +import { createTempDir } from "./session-test-utils.ts"; describe("loadSkills", () => { it("loads SKILL.md files through the execution environment", async () => { diff --git a/packages/agent/test/harness/storage.test.ts b/packages/agent/test/harness/storage.test.ts index ff6a6a959..e8383ce45 100644 --- a/packages/agent/test/harness/storage.test.ts +++ b/packages/agent/test/harness/storage.test.ts @@ -1,11 +1,11 @@ import { existsSync, readFileSync, writeFileSync } from "node:fs"; import { join } from "node:path"; import { describe, expect, it } from "vitest"; -import { NodeExecutionEnv } from "../../src/harness/env/nodejs.js"; -import { JsonlSessionStorage, loadJsonlSessionMetadata } from "../../src/harness/session/jsonl-storage.js"; -import { InMemorySessionStorage } from "../../src/harness/session/memory-storage.js"; -import { type MessageEntry, ok, type SessionMetadata } from "../../src/harness/types.js"; -import { createAssistantMessage, createTempDir, createUserMessage } from "./session-test-utils.js"; +import { NodeExecutionEnv } from "../../src/harness/env/nodejs.ts"; +import { JsonlSessionStorage, loadJsonlSessionMetadata } from "../../src/harness/session/jsonl-storage.ts"; +import { InMemorySessionStorage } from "../../src/harness/session/memory-storage.ts"; +import { type MessageEntry, ok, type SessionMetadata } from "../../src/harness/types.ts"; +import { createAssistantMessage, createTempDir, createUserMessage } from "./session-test-utils.ts"; describe("InMemorySessionStorage", () => { it("returns configured session metadata", async () => { diff --git a/packages/agent/test/harness/system-prompt.test.ts b/packages/agent/test/harness/system-prompt.test.ts index 46ce884bf..f20fbd166 100644 --- a/packages/agent/test/harness/system-prompt.test.ts +++ b/packages/agent/test/harness/system-prompt.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { formatSkillsForSystemPrompt } from "../../src/harness/system-prompt.js"; +import { formatSkillsForSystemPrompt } from "../../src/harness/system-prompt.ts"; const visibleSkill = { name: "visible", diff --git a/packages/agent/test/harness/truncate.test.ts b/packages/agent/test/harness/truncate.test.ts index f712cc2c5..3784a52c9 100644 --- a/packages/agent/test/harness/truncate.test.ts +++ b/packages/agent/test/harness/truncate.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { truncateHead, truncateTail } from "../../src/harness/utils/truncate.js"; +import { truncateHead, truncateTail } from "../../src/harness/utils/truncate.ts"; const encoder = new TextEncoder(); diff --git a/packages/agent/test/scratch/simple.ts b/packages/agent/test/scratch/simple.ts index 2b8fed114..de6ba3a26 100644 --- a/packages/agent/test/scratch/simple.ts +++ b/packages/agent/test/scratch/simple.ts @@ -1,8 +1,8 @@ import { homedir } from "node:os"; import { join } from "node:path"; import { getModel } from "@earendil-works/pi-ai"; -import { NodeExecutionEnv } from "../../src/harness/env/nodejs.js"; -import { InMemorySessionStorage } from "../../src/harness/session/memory-storage.js"; +import { NodeExecutionEnv } from "../../src/harness/env/nodejs.ts"; +import { InMemorySessionStorage } from "../../src/harness/session/memory-storage.ts"; import { AgentHarness, formatSkillsForSystemPrompt, @@ -11,13 +11,14 @@ import { type PromptTemplate, Session, type Skill, -} from "../../src/index.js"; +} from "../../src/index.ts"; type Source = { type: "project" | "user" | "path"; dir: string }; type SourcedSkill = Skill & { source: Source }; type SourcedPromptTemplate = PromptTemplate & { source: Source }; const env = new NodeExecutionEnv({ cwd: process.cwd() }); + const source = (type: Source["type"], dir: string) => ({ path: dir, source: { type, dir } }); const { skills: sourcedSkills } = await loadSourcedSkills( env, diff --git a/packages/agent/test/utils/calculate.ts b/packages/agent/test/utils/calculate.ts index cd2a3777b..6158efbde 100644 --- a/packages/agent/test/utils/calculate.ts +++ b/packages/agent/test/utils/calculate.ts @@ -1,5 +1,5 @@ import { type Static, Type } from "typebox"; -import type { AgentTool, AgentToolResult } from "../../src/types.js"; +import type { AgentTool, AgentToolResult } from "../../src/types.ts"; export interface CalculateResult extends AgentToolResult { content: Array<{ type: "text"; text: string }>; diff --git a/packages/agent/test/utils/get-current-time.ts b/packages/agent/test/utils/get-current-time.ts index b7075d9bc..a83a82af3 100644 --- a/packages/agent/test/utils/get-current-time.ts +++ b/packages/agent/test/utils/get-current-time.ts @@ -1,5 +1,5 @@ import { type Static, Type } from "typebox"; -import type { AgentTool, AgentToolResult } from "../../src/types.js"; +import type { AgentTool, AgentToolResult } from "../../src/types.ts"; export interface GetCurrentTimeResult extends AgentToolResult<{ utcTimestamp: number }> {} diff --git a/packages/ai/package.json b/packages/ai/package.json index 2fa04afc8..16fa3be7a 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -60,22 +60,22 @@ ], "scripts": { "clean": "shx rm -rf dist", - "generate-models": "npx tsx scripts/generate-models.ts", - "generate-image-models": "npx tsx scripts/generate-image-models.ts", + "generate-models": "node scripts/generate-models.ts", + "generate-image-models": "node scripts/generate-image-models.ts", "build": "npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json", "test": "vitest --run", "prepublishOnly": "npm run clean && npm run build" }, "dependencies": { - "@anthropic-ai/sdk": "^0.91.1", - "@aws-sdk/client-bedrock-runtime": "^3.1030.0", - "@google/genai": "^1.40.0", - "@mistralai/mistralai": "^2.2.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.6", + "@anthropic-ai/sdk": "0.91.1", + "@aws-sdk/client-bedrock-runtime": "3.1048.0", + "@google/genai": "1.52.0", + "@mistralai/mistralai": "2.2.1", + "http-proxy-agent": "7.0.2", + "https-proxy-agent": "7.0.6", "openai": "6.26.0", - "partial-json": "^0.1.7", - "typebox": "^1.1.24" + "partial-json": "0.1.7", + "typebox": "1.1.38" }, "keywords": [ "ai", @@ -98,8 +98,8 @@ "node": ">=22.19.0" }, "devDependencies": { - "@types/node": "^24.3.0", - "canvas": "^3.2.0", - "vitest": "^3.2.4" + "@types/node": "24.12.4", + "canvas": "3.2.3", + "vitest": "3.2.4" } } diff --git a/packages/ai/scripts/generate-image-models.ts b/packages/ai/scripts/generate-image-models.ts index c312f3e4f..2744da487 100644 --- a/packages/ai/scripts/generate-image-models.ts +++ b/packages/ai/scripts/generate-image-models.ts @@ -1,9 +1,9 @@ -#!/usr/bin/env tsx +#!/usr/bin/env node import { writeFileSync } from "fs"; import { dirname, join } from "path"; import { fileURLToPath } from "url"; -import type { ImagesModel } from "../src/types.js"; +import type { ImagesModel } from "../src/types.ts"; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/packages/ai/scripts/generate-models.ts b/packages/ai/scripts/generate-models.ts index e896726c4..0c025c68b 100644 --- a/packages/ai/scripts/generate-models.ts +++ b/packages/ai/scripts/generate-models.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env tsx +#!/usr/bin/env node import { writeFileSync } from "fs"; import { join, dirname } from "path"; @@ -8,14 +8,8 @@ import { CLOUDFLARE_AI_GATEWAY_COMPAT_BASE_URL, CLOUDFLARE_AI_GATEWAY_OPENAI_BASE_URL, CLOUDFLARE_WORKERS_AI_BASE_URL, -} from "../src/providers/cloudflare.js"; -import { - Api, - type AnthropicMessagesCompat, - KnownProvider, - Model, - type OpenAICompletionsCompat, -} from "../src/types.js"; +} from "../src/providers/cloudflare.ts"; +import type { AnthropicMessagesCompat, Api, KnownProvider, Model, OpenAICompletionsCompat } from "../src/types.ts"; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/packages/ai/scripts/generate-test-image.ts b/packages/ai/scripts/generate-test-image.ts index 29a473d46..da3df2661 100644 --- a/packages/ai/scripts/generate-test-image.ts +++ b/packages/ai/scripts/generate-test-image.ts @@ -1,7 +1,7 @@ -#!/usr/bin/env tsx +#!/usr/bin/env node import { createCanvas } from "canvas"; -import { writeFileSync } from "fs"; +import { mkdirSync, writeFileSync } from "fs"; import { join, dirname } from "path"; import { fileURLToPath } from "url"; @@ -27,7 +27,6 @@ const buffer = canvas.toBuffer("image/png"); const outputPath = join(__dirname, "..", "test", "data", "red-circle.png"); // Ensure the directory exists -import { mkdirSync } from "fs"; mkdirSync(join(__dirname, "..", "test", "data"), { recursive: true }); writeFileSync(outputPath, buffer); diff --git a/packages/ai/test/abort.test.ts b/packages/ai/test/abort.test.ts index cd46a6297..27c274aac 100644 --- a/packages/ai/test/abort.test.ts +++ b/packages/ai/test/abort.test.ts @@ -1,13 +1,13 @@ import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { complete, stream } from "../src/stream.js"; -import type { Api, Context, Model, StreamOptions } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { complete, stream } from "../src/stream.ts"; +import type { Api, Context, Model, StreamOptions } from "../src/types.ts"; type StreamOptionsWithExtras = StreamOptions & Record; -import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.js"; -import { hasBedrockCredentials } from "./bedrock-utils.js"; -import { resolveApiKey } from "./oauth.js"; +import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.ts"; +import { hasBedrockCredentials } from "./bedrock-utils.ts"; +import { resolveApiKey } from "./oauth.ts"; // Resolve OAuth tokens at module level (async, runs before tests) const [openaiCodexToken] = await Promise.all([resolveApiKey("openai-codex")]); diff --git a/packages/ai/test/anthropic-eager-tool-input-compat.test.ts b/packages/ai/test/anthropic-eager-tool-input-compat.test.ts index e73a00a03..c6df9c3ef 100644 --- a/packages/ai/test/anthropic-eager-tool-input-compat.test.ts +++ b/packages/ai/test/anthropic-eager-tool-input-compat.test.ts @@ -2,8 +2,8 @@ import { createServer, type IncomingMessage, type ServerResponse } from "node:ht import type { AddressInfo } from "node:net"; import { Type } from "typebox"; import { describe, expect, it } from "vitest"; -import { streamAnthropic } from "../src/providers/anthropic.js"; -import type { Context, Model, Tool } from "../src/types.js"; +import { streamAnthropic } from "../src/providers/anthropic.ts"; +import type { Context, Model, Tool } from "../src/types.ts"; interface CapturedRequest { headers: IncomingMessage["headers"]; diff --git a/packages/ai/test/anthropic-eager-tool-input-e2e.test.ts b/packages/ai/test/anthropic-eager-tool-input-e2e.test.ts index 3fed7ce26..2483e1a4b 100644 --- a/packages/ai/test/anthropic-eager-tool-input-e2e.test.ts +++ b/packages/ai/test/anthropic-eager-tool-input-e2e.test.ts @@ -1,10 +1,10 @@ import { Type } from "typebox"; import { describe, expect, it } from "vitest"; -import { getEnvApiKey } from "../src/env-api-keys.js"; -import { getModels, getProviders } from "../src/models.js"; -import { complete } from "../src/stream.js"; -import type { Api, KnownProvider, Model, ProviderStreamOptions, Tool } from "../src/types.js"; -import { resolveApiKey } from "./oauth.js"; +import { getEnvApiKey } from "../src/env-api-keys.ts"; +import { getModels, getProviders } from "../src/models.ts"; +import { complete } from "../src/stream.ts"; +import type { Api, KnownProvider, Model, ProviderStreamOptions, Tool } from "../src/types.ts"; +import { resolveApiKey } from "./oauth.ts"; const githubCopilotToken = await resolveApiKey("github-copilot"); diff --git a/packages/ai/test/anthropic-long-cache-retention-e2e.test.ts b/packages/ai/test/anthropic-long-cache-retention-e2e.test.ts index d900aa719..2b7667d7e 100644 --- a/packages/ai/test/anthropic-long-cache-retention-e2e.test.ts +++ b/packages/ai/test/anthropic-long-cache-retention-e2e.test.ts @@ -1,9 +1,9 @@ import { describe, expect, it } from "vitest"; -import { getEnvApiKey } from "../src/env-api-keys.js"; -import { getModels, getProviders } from "../src/models.js"; -import { complete } from "../src/stream.js"; -import type { Api, KnownProvider, Model, ProviderStreamOptions } from "../src/types.js"; -import { resolveApiKey } from "./oauth.js"; +import { getEnvApiKey } from "../src/env-api-keys.ts"; +import { getModels, getProviders } from "../src/models.ts"; +import { complete } from "../src/stream.ts"; +import type { Api, KnownProvider, Model, ProviderStreamOptions } from "../src/types.ts"; +import { resolveApiKey } from "./oauth.ts"; const githubCopilotToken = await resolveApiKey("github-copilot"); diff --git a/packages/ai/test/anthropic-oauth.test.ts b/packages/ai/test/anthropic-oauth.test.ts index f8e066c66..36585a5fd 100644 --- a/packages/ai/test/anthropic-oauth.test.ts +++ b/packages/ai/test/anthropic-oauth.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from "vitest"; -import { loginAnthropic, refreshAnthropicToken } from "../src/utils/oauth/anthropic.js"; +import { loginAnthropic, refreshAnthropicToken } from "../src/utils/oauth/anthropic.ts"; function jsonResponse(body: unknown, status: number = 200): Response { return new Response(JSON.stringify(body), { diff --git a/packages/ai/test/anthropic-opus-4-7-smoke.test.ts b/packages/ai/test/anthropic-opus-4-7-smoke.test.ts index 29626d1f8..7314f8af3 100644 --- a/packages/ai/test/anthropic-opus-4-7-smoke.test.ts +++ b/packages/ai/test/anthropic-opus-4-7-smoke.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { streamSimple } from "../src/stream.js"; -import type { Context } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { streamSimple } from "../src/stream.ts"; +import type { Context } from "../src/types.ts"; interface AnthropicThinkingPayload { thinking?: { type: string }; diff --git a/packages/ai/test/anthropic-sse-parsing.test.ts b/packages/ai/test/anthropic-sse-parsing.test.ts index 5bbc7d729..030249664 100644 --- a/packages/ai/test/anthropic-sse-parsing.test.ts +++ b/packages/ai/test/anthropic-sse-parsing.test.ts @@ -1,9 +1,9 @@ import type Anthropic from "@anthropic-ai/sdk"; import { Type } from "typebox"; import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { streamAnthropic } from "../src/providers/anthropic.js"; -import type { Context, ToolCall } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { streamAnthropic } from "../src/providers/anthropic.ts"; +import type { Context, ToolCall } from "../src/types.ts"; function createSseResponse(events: Array<{ event: string; data: string }>): Response { const body = events.map(({ event, data }) => `event: ${event}\ndata: ${data}\n`).join("\n"); diff --git a/packages/ai/test/anthropic-tool-name-normalization.test.ts b/packages/ai/test/anthropic-tool-name-normalization.test.ts index 1ea6bdb21..bb4540811 100644 --- a/packages/ai/test/anthropic-tool-name-normalization.test.ts +++ b/packages/ai/test/anthropic-tool-name-normalization.test.ts @@ -1,9 +1,9 @@ import { Type } from "typebox"; import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { stream } from "../src/stream.js"; -import type { Context, Tool } from "../src/types.js"; -import { resolveApiKey } from "./oauth.js"; +import { getModel } from "../src/models.ts"; +import { stream } from "../src/stream.ts"; +import type { Context, Tool } from "../src/types.ts"; +import { resolveApiKey } from "./oauth.ts"; const oauthToken = await resolveApiKey("anthropic"); diff --git a/packages/ai/test/azure-openai-base-url.test.ts b/packages/ai/test/azure-openai-base-url.test.ts index cdaebc4e3..530c5f473 100644 --- a/packages/ai/test/azure-openai-base-url.test.ts +++ b/packages/ai/test/azure-openai-base-url.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import { getModel } from "../src/models.js"; -import { streamAzureOpenAIResponses } from "../src/providers/azure-openai-responses.js"; -import type { Context } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { streamAzureOpenAIResponses } from "../src/providers/azure-openai-responses.ts"; +import type { Context } from "../src/types.ts"; interface CapturedAzureClientOptions { apiKey: string; diff --git a/packages/ai/test/bedrock-convert-messages.test.ts b/packages/ai/test/bedrock-convert-messages.test.ts index d96087632..d62abd1b9 100644 --- a/packages/ai/test/bedrock-convert-messages.test.ts +++ b/packages/ai/test/bedrock-convert-messages.test.ts @@ -44,9 +44,9 @@ vi.mock("@aws-sdk/client-bedrock-runtime", () => { }; }); -import { getModel } from "../src/models.js"; -import { streamBedrock } from "../src/providers/amazon-bedrock.js"; -import type { Context, Message } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { streamBedrock } from "../src/providers/amazon-bedrock.ts"; +import type { Context, Message } from "../src/types.ts"; const baseModel = getModel("amazon-bedrock", "us.anthropic.claude-sonnet-4-5-20250929-v1:0"); diff --git a/packages/ai/test/bedrock-endpoint-resolution.test.ts b/packages/ai/test/bedrock-endpoint-resolution.test.ts index 374599a47..a45bc6cfc 100644 --- a/packages/ai/test/bedrock-endpoint-resolution.test.ts +++ b/packages/ai/test/bedrock-endpoint-resolution.test.ts @@ -44,9 +44,9 @@ vi.mock("@aws-sdk/client-bedrock-runtime", () => { }; }); -import { getModel } from "../src/models.js"; -import { streamBedrock } from "../src/providers/amazon-bedrock.js"; -import type { Context, Model } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { streamBedrock } from "../src/providers/amazon-bedrock.ts"; +import type { Context, Model } from "../src/types.ts"; const context: Context = { messages: [{ role: "user", content: "hello", timestamp: Date.now() }], diff --git a/packages/ai/test/bedrock-models.test.ts b/packages/ai/test/bedrock-models.test.ts index 453a39537..2cfd8fb99 100644 --- a/packages/ai/test/bedrock-models.test.ts +++ b/packages/ai/test/bedrock-models.test.ts @@ -17,10 +17,10 @@ */ import { describe, expect, it } from "vitest"; -import { getModels } from "../src/models.js"; -import { complete } from "../src/stream.js"; -import type { Context } from "../src/types.js"; -import { hasBedrockCredentials } from "./bedrock-utils.js"; +import { getModels } from "../src/models.ts"; +import { complete } from "../src/stream.ts"; +import type { Context } from "../src/types.ts"; +import { hasBedrockCredentials } from "./bedrock-utils.ts"; describe("Amazon Bedrock Models", () => { const models = getModels("amazon-bedrock"); diff --git a/packages/ai/test/codex-websocket-cached-probe.ts b/packages/ai/test/codex-websocket-cached-probe.ts index ccc875f85..7317035cb 100644 --- a/packages/ai/test/codex-websocket-cached-probe.ts +++ b/packages/ai/test/codex-websocket-cached-probe.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env tsx +#!/usr/bin/env node /** * Live probe for OpenAI Codex Responses websocket-cached mode. * @@ -9,15 +9,15 @@ import { tmpdir } from "node:os"; import { join, resolve } from "node:path"; import { Type } from "typebox"; -import { AuthStorage } from "../../coding-agent/src/core/auth-storage.js"; -import { getModel } from "../src/models.js"; +import { AuthStorage } from "../../coding-agent/src/core/auth-storage.ts"; +import { getModel } from "../src/models.ts"; import { closeOpenAICodexWebSocketSessions, getOpenAICodexWebSocketDebugStats, resetOpenAICodexWebSocketDebugStats, streamOpenAICodexResponses, -} from "../src/providers/openai-codex-responses.js"; -import type { AssistantMessage, Context, Message, Model, Tool, ToolResultMessage, Transport } from "../src/types.js"; +} from "../src/providers/openai-codex-responses.ts"; +import type { AssistantMessage, Context, Message, Model, Tool, ToolResultMessage, Transport } from "../src/types.ts"; type ThinkingLevel = "minimal" | "low" | "medium" | "high" | "xhigh"; @@ -85,7 +85,7 @@ function required(value: string | undefined, flag: string): string { } function printHelp(): void { - console.log(`Usage: npx tsx test/codex-websocket-cached-probe.ts [options] + console.log(`Usage: node test/codex-websocket-cached-probe.ts [options] Options: --turns Number of user turns. Default: ${DEFAULT_TURNS} diff --git a/packages/ai/test/context-overflow.test.ts b/packages/ai/test/context-overflow.test.ts index 718800bf1..164ca75d8 100644 --- a/packages/ai/test/context-overflow.test.ts +++ b/packages/ai/test/context-overflow.test.ts @@ -14,13 +14,13 @@ import type { ChildProcess } from "child_process"; import { execSync, spawn } from "child_process"; import { afterAll, beforeAll, describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { complete } from "../src/stream.js"; -import type { AssistantMessage, Context, Model, Usage } from "../src/types.js"; -import { isContextOverflow } from "../src/utils/overflow.js"; -import { hasAzureOpenAICredentials } from "./azure-utils.js"; -import { hasBedrockCredentials } from "./bedrock-utils.js"; -import { resolveApiKey } from "./oauth.js"; +import { getModel } from "../src/models.ts"; +import { complete } from "../src/stream.ts"; +import type { AssistantMessage, Context, Model, Usage } from "../src/types.ts"; +import { isContextOverflow } from "../src/utils/overflow.ts"; +import { hasAzureOpenAICredentials } from "./azure-utils.ts"; +import { hasBedrockCredentials } from "./bedrock-utils.ts"; +import { resolveApiKey } from "./oauth.ts"; // Resolve OAuth tokens at module level (async, runs before tests) const oauthTokens = await Promise.all([resolveApiKey("github-copilot"), resolveApiKey("openai-codex")]); diff --git a/packages/ai/test/cross-provider-handoff.test.ts b/packages/ai/test/cross-provider-handoff.test.ts index a133241a5..23593394f 100644 --- a/packages/ai/test/cross-provider-handoff.test.ts +++ b/packages/ai/test/cross-provider-handoff.test.ts @@ -25,12 +25,12 @@ import { writeFileSync } from "fs"; import { Type } from "typebox"; import { beforeAll, describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { completeSimple, getEnvApiKey } from "../src/stream.js"; -import type { Api, AssistantMessage, Message, Model, Tool, ToolResultMessage } from "../src/types.js"; -import { hasAzureOpenAICredentials } from "./azure-utils.js"; -import { hasCloudflareAiGatewayCredentials, hasCloudflareWorkersAICredentials } from "./cloudflare-utils.js"; -import { resolveApiKey } from "./oauth.js"; +import { getModel } from "../src/models.ts"; +import { completeSimple, getEnvApiKey } from "../src/stream.ts"; +import type { Api, AssistantMessage, Message, Model, Tool, ToolResultMessage } from "../src/types.ts"; +import { hasAzureOpenAICredentials } from "./azure-utils.ts"; +import { hasCloudflareAiGatewayCredentials, hasCloudflareWorkersAICredentials } from "./cloudflare-utils.ts"; +import { resolveApiKey } from "./oauth.ts"; // Simple tool for testing const testToolSchema = Type.Object({ diff --git a/packages/ai/test/empty.test.ts b/packages/ai/test/empty.test.ts index 121c07b97..7df7de2c4 100644 --- a/packages/ai/test/empty.test.ts +++ b/packages/ai/test/empty.test.ts @@ -1,14 +1,14 @@ import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { complete } from "../src/stream.js"; -import type { Api, AssistantMessage, Context, Model, StreamOptions, UserMessage } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { complete } from "../src/stream.ts"; +import type { Api, AssistantMessage, Context, Model, StreamOptions, UserMessage } from "../src/types.ts"; type StreamOptionsWithExtras = StreamOptions & Record; -import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.js"; -import { hasBedrockCredentials } from "./bedrock-utils.js"; -import { hasCloudflareAiGatewayCredentials, hasCloudflareWorkersAICredentials } from "./cloudflare-utils.js"; -import { resolveApiKey } from "./oauth.js"; +import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.ts"; +import { hasBedrockCredentials } from "./bedrock-utils.ts"; +import { hasCloudflareAiGatewayCredentials, hasCloudflareWorkersAICredentials } from "./cloudflare-utils.ts"; +import { resolveApiKey } from "./oauth.ts"; // Resolve OAuth tokens at module level (async, runs before tests) const oauthTokens = await Promise.all([ diff --git a/packages/ai/test/env-api-keys.test.ts b/packages/ai/test/env-api-keys.test.ts index 6889743dc..61fec9128 100644 --- a/packages/ai/test/env-api-keys.test.ts +++ b/packages/ai/test/env-api-keys.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it } from "vitest"; -import { findEnvKeys, getEnvApiKey } from "../src/env-api-keys.js"; +import { findEnvKeys, getEnvApiKey } from "../src/env-api-keys.ts"; const originalCopilotGitHubToken = process.env.COPILOT_GITHUB_TOKEN; const originalGhToken = process.env.GH_TOKEN; diff --git a/packages/ai/test/faux-provider.test.ts b/packages/ai/test/faux-provider.test.ts index 16f338839..4f110c542 100644 --- a/packages/ai/test/faux-provider.test.ts +++ b/packages/ai/test/faux-provider.test.ts @@ -8,8 +8,8 @@ import { registerFauxProvider, stream, Type, -} from "../src/index.js"; -import type { AssistantMessageEvent, Context } from "../src/types.js"; +} from "../src/index.ts"; +import type { AssistantMessageEvent, Context } from "../src/types.ts"; async function collectEvents(streamResult: ReturnType): Promise { const events: AssistantMessageEvent[] = []; diff --git a/packages/ai/test/fireworks-models.test.ts b/packages/ai/test/fireworks-models.test.ts index 35427c10c..0260a910c 100644 --- a/packages/ai/test/fireworks-models.test.ts +++ b/packages/ai/test/fireworks-models.test.ts @@ -2,10 +2,10 @@ import { createServer, type IncomingMessage, type ServerResponse } from "node:ht import type { AddressInfo } from "node:net"; import { Type } from "typebox"; import { afterEach, describe, expect, it } from "vitest"; -import { findEnvKeys, getEnvApiKey } from "../src/env-api-keys.js"; -import { getModel } from "../src/models.js"; -import { streamAnthropic } from "../src/providers/anthropic.js"; -import type { Context, Model, Tool } from "../src/types.js"; +import { findEnvKeys, getEnvApiKey } from "../src/env-api-keys.ts"; +import { getModel } from "../src/models.ts"; +import { streamAnthropic } from "../src/providers/anthropic.ts"; +import type { Context, Model, Tool } from "../src/types.ts"; const originalFireworksApiKey = process.env.FIREWORKS_API_KEY; diff --git a/packages/ai/test/github-copilot-anthropic.test.ts b/packages/ai/test/github-copilot-anthropic.test.ts index 7fda4a45d..ee3de3e85 100644 --- a/packages/ai/test/github-copilot-anthropic.test.ts +++ b/packages/ai/test/github-copilot-anthropic.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from "vitest"; -import { getModel } from "../src/models.js"; -import { streamAnthropic } from "../src/providers/anthropic.js"; -import type { Context } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { streamAnthropic } from "../src/providers/anthropic.ts"; +import type { Context } from "../src/types.ts"; const mockState = vi.hoisted(() => ({ constructorOpts: undefined as Record | undefined, diff --git a/packages/ai/test/github-copilot-oauth.test.ts b/packages/ai/test/github-copilot-oauth.test.ts index 0367892cb..085b1cf00 100644 --- a/packages/ai/test/github-copilot-oauth.test.ts +++ b/packages/ai/test/github-copilot-oauth.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from "vitest"; -import { loginGitHubCopilot } from "../src/utils/oauth/github-copilot.js"; +import { loginGitHubCopilot } from "../src/utils/oauth/github-copilot.ts"; function jsonResponse(body: unknown, status: number = 200): Response { return new Response(JSON.stringify(body), { diff --git a/packages/ai/test/google-shared-convert-tools.test.ts b/packages/ai/test/google-shared-convert-tools.test.ts index 6cce3175e..c7b10b419 100644 --- a/packages/ai/test/google-shared-convert-tools.test.ts +++ b/packages/ai/test/google-shared-convert-tools.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import { convertTools } from "../src/providers/google-shared.js"; -import type { Tool } from "../src/types.js"; +import { convertTools } from "../src/providers/google-shared.ts"; +import type { Tool } from "../src/types.ts"; function makeTool(parameters: Record): Tool { return { diff --git a/packages/ai/test/google-shared-gemini3-unsigned-tool-call.test.ts b/packages/ai/test/google-shared-gemini3-unsigned-tool-call.test.ts index 1822e9dd7..920c6a4e7 100644 --- a/packages/ai/test/google-shared-gemini3-unsigned-tool-call.test.ts +++ b/packages/ai/test/google-shared-gemini3-unsigned-tool-call.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import { convertMessages } from "../src/providers/google-shared.js"; -import type { Context, Model } from "../src/types.js"; +import { convertMessages } from "../src/providers/google-shared.ts"; +import type { Context, Model } from "../src/types.ts"; function makeGemini3Model( api: TApi, diff --git a/packages/ai/test/google-shared-image-tool-result-routing.test.ts b/packages/ai/test/google-shared-image-tool-result-routing.test.ts index 27150dbae..1430a0849 100644 --- a/packages/ai/test/google-shared-image-tool-result-routing.test.ts +++ b/packages/ai/test/google-shared-image-tool-result-routing.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import { convertMessages } from "../src/providers/google-shared.js"; -import type { Context, Model } from "../src/types.js"; +import { convertMessages } from "../src/providers/google-shared.ts"; +import type { Context, Model } from "../src/types.ts"; function makeModel( api: TApi, diff --git a/packages/ai/test/google-thinking-disable.test.ts b/packages/ai/test/google-thinking-disable.test.ts index e8720ff8d..30df3638b 100644 --- a/packages/ai/test/google-thinking-disable.test.ts +++ b/packages/ai/test/google-thinking-disable.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { streamSimple } from "../src/stream.js"; -import type { Api, Context, Model, SimpleStreamOptions } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { streamSimple } from "../src/stream.ts"; +import type { Api, Context, Model, SimpleStreamOptions } from "../src/types.ts"; type SimpleOptionsWithExtras = SimpleStreamOptions & Record; diff --git a/packages/ai/test/google-thinking-signature.test.ts b/packages/ai/test/google-thinking-signature.test.ts index c90f7caae..83b17cccd 100644 --- a/packages/ai/test/google-thinking-signature.test.ts +++ b/packages/ai/test/google-thinking-signature.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { isThinkingPart, retainThoughtSignature } from "../src/providers/google-shared.js"; +import { isThinkingPart, retainThoughtSignature } from "../src/providers/google-shared.ts"; describe("Google thinking detection (thoughtSignature)", () => { it("treats part.thought === true as thinking", () => { diff --git a/packages/ai/test/google-vertex-api-key-resolution.test.ts b/packages/ai/test/google-vertex-api-key-resolution.test.ts index d05702c3a..5f66649c3 100644 --- a/packages/ai/test/google-vertex-api-key-resolution.test.ts +++ b/packages/ai/test/google-vertex-api-key-resolution.test.ts @@ -45,9 +45,9 @@ vi.mock("@google/genai", () => { }; }); -import { getModel } from "../src/models.js"; -import { streamGoogleVertex } from "../src/providers/google-vertex.js"; -import type { Context, Model } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { streamGoogleVertex } from "../src/providers/google-vertex.ts"; +import type { Context, Model } from "../src/types.ts"; const model = getModel("google-vertex", "gemini-3-flash-preview"); const context: Context = { diff --git a/packages/ai/test/image-tool-result.test.ts b/packages/ai/test/image-tool-result.test.ts index 9d1276d59..542b23857 100644 --- a/packages/ai/test/image-tool-result.test.ts +++ b/packages/ai/test/image-tool-result.test.ts @@ -2,15 +2,15 @@ import { readFileSync } from "node:fs"; import { join } from "node:path"; import { Type } from "typebox"; import { describe, expect, it } from "vitest"; -import type { Api, Context, Model, Tool, ToolResultMessage } from "../src/index.js"; -import { complete, getModel } from "../src/index.js"; -import type { StreamOptions } from "../src/types.js"; +import type { Api, Context, Model, Tool, ToolResultMessage } from "../src/index.ts"; +import { complete, getModel } from "../src/index.ts"; +import type { StreamOptions } from "../src/types.ts"; type StreamOptionsWithExtras = StreamOptions & Record; -import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.js"; -import { hasBedrockCredentials } from "./bedrock-utils.js"; -import { resolveApiKey } from "./oauth.js"; +import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.ts"; +import { hasBedrockCredentials } from "./bedrock-utils.ts"; +import { resolveApiKey } from "./oauth.ts"; // Resolve OAuth tokens at module level (async, runs before tests) const oauthTokens = await Promise.all([ diff --git a/packages/ai/test/images.test.ts b/packages/ai/test/images.test.ts index 59912c70b..c45cc215e 100644 --- a/packages/ai/test/images.test.ts +++ b/packages/ai/test/images.test.ts @@ -2,9 +2,9 @@ import { readFileSync } from "node:fs"; import { dirname, join } from "node:path"; import { fileURLToPath } from "node:url"; import { describe, expect, it } from "vitest"; -import { getImageModel } from "../src/image-models.js"; -import { generateImages } from "../src/images.js"; -import type { ImageContent, ImagesContext, ImagesModel, ProviderImagesOptions } from "../src/types.js"; +import { getImageModel } from "../src/image-models.ts"; +import { generateImages } from "../src/images.ts"; +import type { ImageContent, ImagesContext, ImagesModel, ProviderImagesOptions } from "../src/types.ts"; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/packages/ai/test/interleaved-thinking.test.ts b/packages/ai/test/interleaved-thinking.test.ts index fabc3c40b..4cf387ce0 100644 --- a/packages/ai/test/interleaved-thinking.test.ts +++ b/packages/ai/test/interleaved-thinking.test.ts @@ -1,11 +1,11 @@ import { Type } from "typebox"; import { describe, expect, it } from "vitest"; -import { getEnvApiKey } from "../src/env-api-keys.js"; -import { getModel } from "../src/models.js"; -import { completeSimple } from "../src/stream.js"; -import type { Api, Context, Model, StopReason, Tool, ToolCall, ToolResultMessage } from "../src/types.js"; -import { StringEnum } from "../src/utils/typebox-helpers.js"; -import { hasBedrockCredentials } from "./bedrock-utils.js"; +import { getEnvApiKey } from "../src/env-api-keys.ts"; +import { getModel } from "../src/models.ts"; +import { completeSimple } from "../src/stream.ts"; +import type { Api, Context, Model, StopReason, Tool, ToolCall, ToolResultMessage } from "../src/types.ts"; +import { StringEnum } from "../src/utils/typebox-helpers.ts"; +import { hasBedrockCredentials } from "./bedrock-utils.ts"; const calculatorSchema = Type.Object({ a: Type.Number({ description: "First number" }), diff --git a/packages/ai/test/lazy-module-load.test.ts b/packages/ai/test/lazy-module-load.test.ts index c94669abf..e21f0d12d 100644 --- a/packages/ai/test/lazy-module-load.test.ts +++ b/packages/ai/test/lazy-module-load.test.ts @@ -1,11 +1,8 @@ import { spawnSync } from "node:child_process"; -import { createRequire } from "node:module"; import { dirname, resolve } from "node:path"; import { fileURLToPath } from "node:url"; import { describe, expect, it } from "vitest"; -const require = createRequire(import.meta.url); -const tsxLoader = require.resolve("tsx/esm"); const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), ".."); const aiEntryUrl = new URL("../src/index.ts", import.meta.url).href; @@ -42,7 +39,7 @@ function runProbe(action: string): ProbeResult { console.log(JSON.stringify({ loadedSpecifiers: [...new Set(loaded)] })); `; - const result = spawnSync(process.execPath, ["--import", tsxLoader, "--input-type=module", "--eval", script], { + const result = spawnSync(process.execPath, ["--input-type=module", "--eval", script], { cwd: packageRoot, encoding: "utf8", }); diff --git a/packages/ai/test/mistral-reasoning-mode.test.ts b/packages/ai/test/mistral-reasoning-mode.test.ts index 28ff52086..35a5b96be 100644 --- a/packages/ai/test/mistral-reasoning-mode.test.ts +++ b/packages/ai/test/mistral-reasoning-mode.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { streamSimple } from "../src/stream.js"; -import type { Context, Model, SimpleStreamOptions } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { streamSimple } from "../src/stream.ts"; +import type { Context, Model, SimpleStreamOptions } from "../src/types.ts"; interface MistralPayload { promptMode?: "reasoning"; diff --git a/packages/ai/test/mistral-tool-schema.test.ts b/packages/ai/test/mistral-tool-schema.test.ts index 623e9a3a5..c6898fc64 100644 --- a/packages/ai/test/mistral-tool-schema.test.ts +++ b/packages/ai/test/mistral-tool-schema.test.ts @@ -1,8 +1,8 @@ import { Type } from "typebox"; import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { complete } from "../src/stream.js"; -import type { Context, Model } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { complete } from "../src/stream.ts"; +import type { Context, Model } from "../src/types.ts"; interface MistralToolPayload { tools?: Array<{ diff --git a/packages/ai/test/node-http-proxy.test.ts b/packages/ai/test/node-http-proxy.test.ts index 0057d9bd4..f4c9b735c 100644 --- a/packages/ai/test/node-http-proxy.test.ts +++ b/packages/ai/test/node-http-proxy.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it } from "vitest"; -import { resolveHttpProxyUrlForTarget, UNSUPPORTED_PROXY_PROTOCOL_MESSAGE } from "../src/utils/node-http-proxy.js"; +import { resolveHttpProxyUrlForTarget, UNSUPPORTED_PROXY_PROTOCOL_MESSAGE } from "../src/utils/node-http-proxy.ts"; const PROXY_ENV_KEYS = [ "HTTP_PROXY", diff --git a/packages/ai/test/oauth.ts b/packages/ai/test/oauth.ts index 8dd302a79..8ee7c94d8 100644 --- a/packages/ai/test/oauth.ts +++ b/packages/ai/test/oauth.ts @@ -8,8 +8,8 @@ import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "fs"; import { homedir } from "os"; import { dirname, join } from "path"; -import { getOAuthApiKey } from "../src/utils/oauth/index.js"; -import type { OAuthCredentials, OAuthProvider } from "../src/utils/oauth/types.js"; +import { getOAuthApiKey } from "../src/utils/oauth/index.ts"; +import type { OAuthCredentials, OAuthProvider } from "../src/utils/oauth/types.ts"; const AUTH_PATH = join(homedir(), ".pi", "agent", "auth.json"); diff --git a/packages/ai/test/openai-codex-cache-affinity-e2e.test.ts b/packages/ai/test/openai-codex-cache-affinity-e2e.test.ts index 0d929724c..0abb46f63 100644 --- a/packages/ai/test/openai-codex-cache-affinity-e2e.test.ts +++ b/packages/ai/test/openai-codex-cache-affinity-e2e.test.ts @@ -1,8 +1,8 @@ import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { complete } from "../src/stream.js"; -import type { Context } from "../src/types.js"; -import { resolveApiKey } from "./oauth.js"; +import { getModel } from "../src/models.ts"; +import { complete } from "../src/stream.ts"; +import type { Context } from "../src/types.ts"; +import { resolveApiKey } from "./oauth.ts"; const codexToken = await resolveApiKey("openai-codex"); diff --git a/packages/ai/test/openai-codex-oauth.test.ts b/packages/ai/test/openai-codex-oauth.test.ts index 276abe1bf..0157f6f66 100644 --- a/packages/ai/test/openai-codex-oauth.test.ts +++ b/packages/ai/test/openai-codex-oauth.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from "vitest"; -import { refreshOpenAICodexToken } from "../src/utils/oauth/openai-codex.js"; +import { refreshOpenAICodexToken } from "../src/utils/oauth/openai-codex.ts"; describe("OpenAI Codex OAuth", () => { afterEach(() => { diff --git a/packages/ai/test/openai-completions-cache-control-format.test.ts b/packages/ai/test/openai-completions-cache-control-format.test.ts index de69d02ac..7d8ee9c4d 100644 --- a/packages/ai/test/openai-completions-cache-control-format.test.ts +++ b/packages/ai/test/openai-completions-cache-control-format.test.ts @@ -1,8 +1,8 @@ import { Type } from "typebox"; import { beforeEach, describe, expect, it, vi } from "vitest"; -import { getModel } from "../src/models.js"; -import { streamOpenAICompletions } from "../src/providers/openai-completions.js"; -import type { Model } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { streamOpenAICompletions } from "../src/providers/openai-completions.ts"; +import type { Model } from "../src/types.ts"; interface CacheControl { type: "ephemeral"; diff --git a/packages/ai/test/openai-completions-empty-tools.test.ts b/packages/ai/test/openai-completions-empty-tools.test.ts index 8e5d49c78..a743351c0 100644 --- a/packages/ai/test/openai-completions-empty-tools.test.ts +++ b/packages/ai/test/openai-completions-empty-tools.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; -import { getModel } from "../src/models.js"; -import { streamSimple } from "../src/stream.js"; +import { getModel } from "../src/models.ts"; +import { streamSimple } from "../src/stream.ts"; // Empty tools arrays must NOT be serialized as `tools: []` — some OpenAI-compatible // backends (e.g. DashScope / Aliyun Qwen via compatible-mode) reject the request with diff --git a/packages/ai/test/openai-completions-prompt-cache.test.ts b/packages/ai/test/openai-completions-prompt-cache.test.ts index b1846421a..75098fc13 100644 --- a/packages/ai/test/openai-completions-prompt-cache.test.ts +++ b/packages/ai/test/openai-completions-prompt-cache.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import { getModel } from "../src/models.js"; -import { streamOpenAICompletions } from "../src/providers/openai-completions.js"; -import type { Model } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { streamOpenAICompletions } from "../src/providers/openai-completions.ts"; +import type { Model } from "../src/types.ts"; interface FakeOpenAIClientOptions { apiKey: string; diff --git a/packages/ai/test/openai-completions-response-model.test.ts b/packages/ai/test/openai-completions-response-model.test.ts index 32d4edf72..aab20dea8 100644 --- a/packages/ai/test/openai-completions-response-model.test.ts +++ b/packages/ai/test/openai-completions-response-model.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; -import { complete } from "../src/stream.js"; -import type { Model } from "../src/types.js"; +import { complete } from "../src/stream.ts"; +import type { Model } from "../src/types.ts"; // Router/virtual ids (e.g. OpenRouter `auto`) keep `model` pinned to the // requested id and surface the routed concrete id on `responseModel`. diff --git a/packages/ai/test/openai-completions-thinking-as-text.test.ts b/packages/ai/test/openai-completions-thinking-as-text.test.ts index a0bb65197..1c49aad3b 100644 --- a/packages/ai/test/openai-completions-thinking-as-text.test.ts +++ b/packages/ai/test/openai-completions-thinking-as-text.test.ts @@ -2,7 +2,7 @@ import { once } from "node:events"; import http from "node:http"; import type { AddressInfo } from "node:net"; import { afterEach, describe, expect, it } from "vitest"; -import { convertMessages, streamOpenAICompletions } from "../src/providers/openai-completions.js"; +import { convertMessages, streamOpenAICompletions } from "../src/providers/openai-completions.ts"; import type { AssistantMessage, AssistantMessageEvent, @@ -10,7 +10,7 @@ import type { Model, OpenAICompletionsCompat, Usage, -} from "../src/types.js"; +} from "../src/types.ts"; const emptyUsage: Usage = { input: 0, diff --git a/packages/ai/test/openai-completions-tool-choice.test.ts b/packages/ai/test/openai-completions-tool-choice.test.ts index 5401ac830..ec98427b8 100644 --- a/packages/ai/test/openai-completions-tool-choice.test.ts +++ b/packages/ai/test/openai-completions-tool-choice.test.ts @@ -1,9 +1,9 @@ import { Type } from "typebox"; import { beforeEach, describe, expect, it, vi } from "vitest"; -import { getModel } from "../src/models.js"; -import { convertMessages } from "../src/providers/openai-completions.js"; -import { streamSimple } from "../src/stream.js"; -import type { AssistantMessage, Model, Tool, ToolResultMessage } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { convertMessages } from "../src/providers/openai-completions.ts"; +import { streamSimple } from "../src/stream.ts"; +import type { AssistantMessage, Model, Tool, ToolResultMessage } from "../src/types.ts"; const mockState = vi.hoisted(() => ({ lastParams: undefined as unknown, diff --git a/packages/ai/test/openai-completions-tool-result-images.test.ts b/packages/ai/test/openai-completions-tool-result-images.test.ts index cd4d6436e..3510f3967 100644 --- a/packages/ai/test/openai-completions-tool-result-images.test.ts +++ b/packages/ai/test/openai-completions-tool-result-images.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { convertMessages } from "../src/providers/openai-completions.js"; +import { getModel } from "../src/models.ts"; +import { convertMessages } from "../src/providers/openai-completions.ts"; import type { AssistantMessage, Context, @@ -8,7 +8,7 @@ import type { OpenAICompletionsCompat, ToolResultMessage, Usage, -} from "../src/types.js"; +} from "../src/types.ts"; const emptyUsage: Usage = { input: 0, diff --git a/packages/ai/test/openai-responses-cache-affinity-e2e.test.ts b/packages/ai/test/openai-responses-cache-affinity-e2e.test.ts index a2fd0d0eb..d173694f9 100644 --- a/packages/ai/test/openai-responses-cache-affinity-e2e.test.ts +++ b/packages/ai/test/openai-responses-cache-affinity-e2e.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { complete } from "../src/stream.js"; -import type { Context } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { complete } from "../src/stream.ts"; +import type { Context } from "../src/types.ts"; describe.skipIf(!process.env.OPENAI_API_KEY)("openai responses cache affinity e2e", () => { it("handles direct OpenAI Responses requests with aligned cache-affinity identifiers", { retry: 2 }, async () => { diff --git a/packages/ai/test/openai-responses-copilot-provider.test.ts b/packages/ai/test/openai-responses-copilot-provider.test.ts index c956030df..04236feda 100644 --- a/packages/ai/test/openai-responses-copilot-provider.test.ts +++ b/packages/ai/test/openai-responses-copilot-provider.test.ts @@ -1,7 +1,7 @@ import { afterEach, describe, expect, it, vi } from "vitest"; -import { getModel } from "../src/models.js"; -import { streamOpenAIResponses } from "../src/providers/openai-responses.js"; -import type { Model } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { streamOpenAIResponses } from "../src/providers/openai-responses.ts"; +import type { Model } from "../src/types.ts"; type CapturedHeaders = Headers | string[][] | Record | undefined; diff --git a/packages/ai/test/openai-responses-foreign-toolcall-id.test.ts b/packages/ai/test/openai-responses-foreign-toolcall-id.test.ts index 52de262b0..10f063779 100644 --- a/packages/ai/test/openai-responses-foreign-toolcall-id.test.ts +++ b/packages/ai/test/openai-responses-foreign-toolcall-id.test.ts @@ -1,8 +1,8 @@ import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { convertResponsesMessages } from "../src/providers/openai-responses-shared.js"; -import type { AssistantMessage, Context, ToolResultMessage, Usage } from "../src/types.js"; -import { shortHash } from "../src/utils/hash.js"; +import { getModel } from "../src/models.ts"; +import { convertResponsesMessages } from "../src/providers/openai-responses-shared.ts"; +import type { AssistantMessage, Context, ToolResultMessage, Usage } from "../src/types.ts"; +import { shortHash } from "../src/utils/hash.ts"; const COPILOT_RAW_TOOL_CALL_ID = "call_4VnzVawQXPB9MgYib7CiQFEY|I9b95oN1wD/cHXKTw3PpRkL6KkCtzTJhUxMouMWYwHeTo2j3htzfSk7YPx2vifiIM4g3A8XXyOj8q4Bt6SLUG7gqY1E3ELkrkVQNHglRfUmWj84lqxJY+Puieb3VKyX0FB+83TUzn91cDMF/4gzt990IzqVrc+nIb9RRscRD070Du16q1glydVjWR0SBJsE6TbY/esOjFpqplogQqrajm1eI++f3eLi73R6q7hVusY0QbeFySVxABCjhN0lXB04caBe1rzHjYzul6MAXj7uq+0r17VLq+yrtyYhN12wkmFqHeqTyEei6EFPbMy24Nc+IbJlkP0OCg02W+gOnyBFcbi2ctvJFSOhSjt1CqBdqCnnhwUqXjbWiT0wh3DmLScRgTHmGkaI+oAcQQjfic65nxj+TnEkReA=="; diff --git a/packages/ai/test/openai-responses-partial-json-cleanup.test.ts b/packages/ai/test/openai-responses-partial-json-cleanup.test.ts index c34350de7..76b16ad3f 100644 --- a/packages/ai/test/openai-responses-partial-json-cleanup.test.ts +++ b/packages/ai/test/openai-responses-partial-json-cleanup.test.ts @@ -1,8 +1,8 @@ import type { ResponseStreamEvent } from "openai/resources/responses/responses.js"; import { describe, expect, it, vi } from "vitest"; -import { processResponsesStream } from "../src/providers/openai-responses-shared.js"; -import type { AssistantMessage, AssistantMessageEvent, Model } from "../src/types.js"; -import { AssistantMessageEventStream } from "../src/utils/event-stream.js"; +import { processResponsesStream } from "../src/providers/openai-responses-shared.ts"; +import type { AssistantMessage, AssistantMessageEvent, Model } from "../src/types.ts"; +import { AssistantMessageEventStream } from "../src/utils/event-stream.ts"; function createOutput(model: Model<"openai-responses">): AssistantMessage { return { diff --git a/packages/ai/test/openai-responses-reasoning-replay-e2e.test.ts b/packages/ai/test/openai-responses-reasoning-replay-e2e.test.ts index 2f78ddc78..aa6f2e239 100644 --- a/packages/ai/test/openai-responses-reasoning-replay-e2e.test.ts +++ b/packages/ai/test/openai-responses-reasoning-replay-e2e.test.ts @@ -1,8 +1,8 @@ import { Type } from "typebox"; import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { complete, getEnvApiKey } from "../src/stream.js"; -import type { AssistantMessage, Context, Message, Tool, ToolCall } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { complete, getEnvApiKey } from "../src/stream.ts"; +import type { AssistantMessage, Context, Message, Tool, ToolCall } from "../src/types.ts"; const testToolSchema = Type.Object({ value: Type.Number({ description: "A number to double" }), diff --git a/packages/ai/test/openai-responses-tool-result-images.test.ts b/packages/ai/test/openai-responses-tool-result-images.test.ts index 48ab8d08b..c6131d912 100644 --- a/packages/ai/test/openai-responses-tool-result-images.test.ts +++ b/packages/ai/test/openai-responses-tool-result-images.test.ts @@ -4,10 +4,10 @@ import { fileURLToPath } from "node:url"; import type { ResponseFunctionCallOutputItemList } from "openai/resources/responses/responses.js"; import { Type } from "typebox"; import { describe, expect, it } from "vitest"; -import type { Api, Context, Model, StreamOptions, Tool, ToolResultMessage } from "../src/index.js"; -import { complete, getModel } from "../src/index.js"; -import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.js"; -import { resolveApiKey } from "./oauth.js"; +import type { Api, Context, Model, StreamOptions, Tool, ToolResultMessage } from "../src/index.ts"; +import { complete, getModel } from "../src/index.ts"; +import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.ts"; +import { resolveApiKey } from "./oauth.ts"; type StreamOptionsWithExtras = StreamOptions & Record; diff --git a/packages/ai/test/openrouter-cache-write-repro.test.ts b/packages/ai/test/openrouter-cache-write-repro.test.ts index ca4929677..4bdeb2868 100644 --- a/packages/ai/test/openrouter-cache-write-repro.test.ts +++ b/packages/ai/test/openrouter-cache-write-repro.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { completeSimple } from "../src/stream.js"; +import { getModel } from "../src/models.ts"; +import { completeSimple } from "../src/stream.ts"; function createLongSystemPrompt(): string { const nonce = `${Date.now()}-${Math.random()}`; diff --git a/packages/ai/test/openrouter-images.test.ts b/packages/ai/test/openrouter-images.test.ts index de2ddbba8..31882bec3 100644 --- a/packages/ai/test/openrouter-images.test.ts +++ b/packages/ai/test/openrouter-images.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; -import { generateImages } from "../src/images.js"; -import type { ImagesContext, ImagesModel } from "../src/types.js"; +import { generateImages } from "../src/images.ts"; +import type { ImagesContext, ImagesModel } from "../src/types.ts"; const mockState = vi.hoisted(() => ({ lastParams: undefined as unknown, diff --git a/packages/ai/test/overflow.test.ts b/packages/ai/test/overflow.test.ts index ca6fde243..b26948e2b 100644 --- a/packages/ai/test/overflow.test.ts +++ b/packages/ai/test/overflow.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import type { AssistantMessage } from "../src/types.js"; -import { isContextOverflow } from "../src/utils/overflow.js"; +import type { AssistantMessage } from "../src/types.ts"; +import { isContextOverflow } from "../src/utils/overflow.ts"; function createErrorMessage(errorMessage: string): AssistantMessage { return { diff --git a/packages/ai/test/responseid.test.ts b/packages/ai/test/responseid.test.ts index 61df764b9..d250f5f41 100644 --- a/packages/ai/test/responseid.test.ts +++ b/packages/ai/test/responseid.test.ts @@ -1,9 +1,9 @@ import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { complete } from "../src/stream.js"; -import type { Api, Context, Model, StreamOptions } from "../src/types.js"; -import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.js"; -import { resolveApiKey } from "./oauth.js"; +import { getModel } from "../src/models.ts"; +import { complete } from "../src/stream.ts"; +import type { Api, Context, Model, StreamOptions } from "../src/types.ts"; +import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.ts"; +import { resolveApiKey } from "./oauth.ts"; type StreamOptionsWithExtras = StreamOptions & Record; diff --git a/packages/ai/test/stream.test.ts b/packages/ai/test/stream.test.ts index 21199d386..298104dd4 100644 --- a/packages/ai/test/stream.test.ts +++ b/packages/ai/test/stream.test.ts @@ -4,17 +4,17 @@ import { dirname, join } from "path"; import { Type } from "typebox"; import { fileURLToPath } from "url"; import { afterAll, beforeAll, describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { complete, stream } from "../src/stream.js"; -import type { Api, Context, ImageContent, Model, StreamOptions, Tool, ToolResultMessage } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { complete, stream } from "../src/stream.ts"; +import type { Api, Context, ImageContent, Model, StreamOptions, Tool, ToolResultMessage } from "../src/types.ts"; type StreamOptionsWithExtras = StreamOptions & Record; -import { StringEnum } from "../src/utils/typebox-helpers.js"; -import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.js"; -import { hasBedrockCredentials } from "./bedrock-utils.js"; -import { hasCloudflareAiGatewayCredentials, hasCloudflareWorkersAICredentials } from "./cloudflare-utils.js"; -import { resolveApiKey } from "./oauth.js"; +import { StringEnum } from "../src/utils/typebox-helpers.ts"; +import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.ts"; +import { hasBedrockCredentials } from "./bedrock-utils.ts"; +import { hasCloudflareAiGatewayCredentials, hasCloudflareWorkersAICredentials } from "./cloudflare-utils.ts"; +import { resolveApiKey } from "./oauth.ts"; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/packages/ai/test/supports-xhigh.test.ts b/packages/ai/test/supports-xhigh.test.ts index 6a66ee94c..4fb6f3b2a 100644 --- a/packages/ai/test/supports-xhigh.test.ts +++ b/packages/ai/test/supports-xhigh.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { getModel, getSupportedThinkingLevels } from "../src/models.js"; +import { getModel, getSupportedThinkingLevels } from "../src/models.ts"; describe("getSupportedThinkingLevels", () => { it("includes xhigh for Anthropic Opus 4.6 on anthropic-messages API", () => { diff --git a/packages/ai/test/together-models.test.ts b/packages/ai/test/together-models.test.ts index 140314471..cb5ea9433 100644 --- a/packages/ai/test/together-models.test.ts +++ b/packages/ai/test/together-models.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it } from "vitest"; -import { findEnvKeys, getEnvApiKey } from "../src/env-api-keys.js"; -import { getModel } from "../src/models.js"; +import { findEnvKeys, getEnvApiKey } from "../src/env-api-keys.ts"; +import { getModel } from "../src/models.ts"; const originalTogetherApiKey = process.env.TOGETHER_API_KEY; diff --git a/packages/ai/test/tokens.test.ts b/packages/ai/test/tokens.test.ts index 86a70cd23..f8da26a85 100644 --- a/packages/ai/test/tokens.test.ts +++ b/packages/ai/test/tokens.test.ts @@ -1,14 +1,14 @@ import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { stream } from "../src/stream.js"; -import type { Api, Context, Model, StreamOptions } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { stream } from "../src/stream.ts"; +import type { Api, Context, Model, StreamOptions } from "../src/types.ts"; type StreamOptionsWithExtras = StreamOptions & Record; -import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.js"; -import { hasBedrockCredentials } from "./bedrock-utils.js"; -import { hasCloudflareAiGatewayCredentials, hasCloudflareWorkersAICredentials } from "./cloudflare-utils.js"; -import { resolveApiKey } from "./oauth.js"; +import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.ts"; +import { hasBedrockCredentials } from "./bedrock-utils.ts"; +import { hasCloudflareAiGatewayCredentials, hasCloudflareWorkersAICredentials } from "./cloudflare-utils.ts"; +import { resolveApiKey } from "./oauth.ts"; // Resolve OAuth tokens at module level (async, runs before tests) const oauthTokens = await Promise.all([ diff --git a/packages/ai/test/tool-call-id-normalization.test.ts b/packages/ai/test/tool-call-id-normalization.test.ts index 33ea327ff..0672181b2 100644 --- a/packages/ai/test/tool-call-id-normalization.test.ts +++ b/packages/ai/test/tool-call-id-normalization.test.ts @@ -12,10 +12,10 @@ import { Type } from "typebox"; import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { completeSimple, getEnvApiKey } from "../src/stream.js"; -import type { AssistantMessage, Message, Tool, ToolResultMessage } from "../src/types.js"; -import { resolveApiKey } from "./oauth.js"; +import { getModel } from "../src/models.ts"; +import { completeSimple, getEnvApiKey } from "../src/stream.ts"; +import type { AssistantMessage, Message, Tool, ToolResultMessage } from "../src/types.ts"; +import { resolveApiKey } from "./oauth.ts"; // Resolve API keys const copilotToken = await resolveApiKey("github-copilot"); diff --git a/packages/ai/test/tool-call-without-result.test.ts b/packages/ai/test/tool-call-without-result.test.ts index fdab93944..2b1950b99 100644 --- a/packages/ai/test/tool-call-without-result.test.ts +++ b/packages/ai/test/tool-call-without-result.test.ts @@ -1,15 +1,15 @@ import { Type } from "typebox"; import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { complete } from "../src/stream.js"; -import type { Api, Context, Model, StreamOptions, Tool } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { complete } from "../src/stream.ts"; +import type { Api, Context, Model, StreamOptions, Tool } from "../src/types.ts"; type StreamOptionsWithExtras = StreamOptions & Record; -import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.js"; -import { hasBedrockCredentials } from "./bedrock-utils.js"; -import { hasCloudflareAiGatewayCredentials, hasCloudflareWorkersAICredentials } from "./cloudflare-utils.js"; -import { resolveApiKey } from "./oauth.js"; +import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.ts"; +import { hasBedrockCredentials } from "./bedrock-utils.ts"; +import { hasCloudflareAiGatewayCredentials, hasCloudflareWorkersAICredentials } from "./cloudflare-utils.ts"; +import { resolveApiKey } from "./oauth.ts"; // Resolve OAuth tokens at module level (async, runs before tests) const oauthTokens = await Promise.all([ diff --git a/packages/ai/test/total-tokens.test.ts b/packages/ai/test/total-tokens.test.ts index 47303da4c..bd782c2c0 100644 --- a/packages/ai/test/total-tokens.test.ts +++ b/packages/ai/test/total-tokens.test.ts @@ -13,16 +13,16 @@ */ import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { complete } from "../src/stream.js"; -import type { Api, Context, Model, StreamOptions, Usage } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { complete } from "../src/stream.ts"; +import type { Api, Context, Model, StreamOptions, Usage } from "../src/types.ts"; type StreamOptionsWithExtras = StreamOptions & Record; -import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.js"; -import { hasBedrockCredentials } from "./bedrock-utils.js"; -import { hasCloudflareAiGatewayCredentials, hasCloudflareWorkersAICredentials } from "./cloudflare-utils.js"; -import { resolveApiKey } from "./oauth.js"; +import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.ts"; +import { hasBedrockCredentials } from "./bedrock-utils.ts"; +import { hasCloudflareAiGatewayCredentials, hasCloudflareWorkersAICredentials } from "./cloudflare-utils.ts"; +import { resolveApiKey } from "./oauth.ts"; // Resolve OAuth tokens at module level (async, runs before tests) const oauthTokens = await Promise.all([ diff --git a/packages/ai/test/transform-messages-copilot-openai-to-anthropic.test.ts b/packages/ai/test/transform-messages-copilot-openai-to-anthropic.test.ts index 1db3bad69..4d858835a 100644 --- a/packages/ai/test/transform-messages-copilot-openai-to-anthropic.test.ts +++ b/packages/ai/test/transform-messages-copilot-openai-to-anthropic.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import { transformMessages } from "../src/providers/transform-messages.js"; -import type { AssistantMessage, Message, Model, ToolCall } from "../src/types.js"; +import { transformMessages } from "../src/providers/transform-messages.ts"; +import type { AssistantMessage, Message, Model, ToolCall } from "../src/types.ts"; // Normalize function matching what anthropic.ts uses function anthropicNormalizeToolCallId( diff --git a/packages/ai/test/unicode-surrogate.test.ts b/packages/ai/test/unicode-surrogate.test.ts index 568de1747..afe48d5c5 100644 --- a/packages/ai/test/unicode-surrogate.test.ts +++ b/packages/ai/test/unicode-surrogate.test.ts @@ -1,15 +1,15 @@ import { Type } from "typebox"; import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { complete } from "../src/stream.js"; -import type { Api, Context, Model, StreamOptions, ToolResultMessage } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { complete } from "../src/stream.ts"; +import type { Api, Context, Model, StreamOptions, ToolResultMessage } from "../src/types.ts"; type StreamOptionsWithExtras = StreamOptions & Record; -import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.js"; -import { hasBedrockCredentials } from "./bedrock-utils.js"; -import { hasCloudflareAiGatewayCredentials, hasCloudflareWorkersAICredentials } from "./cloudflare-utils.js"; -import { resolveApiKey } from "./oauth.js"; +import { hasAzureOpenAICredentials, resolveAzureDeploymentName } from "./azure-utils.ts"; +import { hasBedrockCredentials } from "./bedrock-utils.ts"; +import { hasCloudflareAiGatewayCredentials, hasCloudflareWorkersAICredentials } from "./cloudflare-utils.ts"; +import { resolveApiKey } from "./oauth.ts"; // Empty schema for test tools - must be proper OBJECT type for Cloud Code Assist const emptySchema = Type.Object({}); diff --git a/packages/ai/test/validation.test.ts b/packages/ai/test/validation.test.ts index fd9d0164f..dcbe9ebe9 100644 --- a/packages/ai/test/validation.test.ts +++ b/packages/ai/test/validation.test.ts @@ -1,7 +1,7 @@ import { Type } from "typebox"; import { describe, expect, it } from "vitest"; -import type { Tool, ToolCall } from "../src/types.js"; -import { validateToolArguments } from "../src/utils/validation.js"; +import type { Tool, ToolCall } from "../src/types.ts"; +import { validateToolArguments } from "../src/utils/validation.ts"; function createToolCallWithPlainSchema( schema: Tool["parameters"], diff --git a/packages/ai/test/xhigh.test.ts b/packages/ai/test/xhigh.test.ts index ef487369f..3c2798635 100644 --- a/packages/ai/test/xhigh.test.ts +++ b/packages/ai/test/xhigh.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from "vitest"; -import { getModel } from "../src/models.js"; -import { stream } from "../src/stream.js"; -import type { Context, Model } from "../src/types.js"; +import { getModel } from "../src/models.ts"; +import { stream } from "../src/stream.ts"; +import type { Context, Model } from "../src/types.ts"; function makeContext(): Context { return { diff --git a/packages/ai/test/zen.test.ts b/packages/ai/test/zen.test.ts index 567af8613..8ca80014e 100644 --- a/packages/ai/test/zen.test.ts +++ b/packages/ai/test/zen.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from "vitest"; -import { MODELS } from "../src/models.generated.js"; -import { complete } from "../src/stream.js"; -import type { Model } from "../src/types.js"; +import { MODELS } from "../src/models.generated.ts"; +import { complete } from "../src/stream.ts"; +import type { Model } from "../src/types.ts"; describe.skipIf(!process.env.OPENCODE_API_KEY)("OpenCode Models Smoke Test", () => { const providers = [ diff --git a/packages/coding-agent/examples/extensions/custom-provider-anthropic/package.json b/packages/coding-agent/examples/extensions/custom-provider-anthropic/package.json index d8e358c5d..a2f796cf7 100644 --- a/packages/coding-agent/examples/extensions/custom-provider-anthropic/package.json +++ b/packages/coding-agent/examples/extensions/custom-provider-anthropic/package.json @@ -14,6 +14,6 @@ ] }, "dependencies": { - "@anthropic-ai/sdk": "^0.52.0" + "@anthropic-ai/sdk": "0.52.0" } } diff --git a/packages/coding-agent/examples/extensions/custom-provider-gitlab-duo/test.ts b/packages/coding-agent/examples/extensions/custom-provider-gitlab-duo/test.ts index c79637325..0077aca83 100644 --- a/packages/coding-agent/examples/extensions/custom-provider-gitlab-duo/test.ts +++ b/packages/coding-agent/examples/extensions/custom-provider-gitlab-duo/test.ts @@ -12,7 +12,7 @@ import { type Api, type Context, type Model, registerApiProvider, streamSimple } import { readFileSync } from "fs"; import { getAgentDir } from "packages/coding-agent/src/config.js"; import { join } from "path"; -import { MODELS, streamGitLabDuo } from "./index.js"; +import { MODELS, streamGitLabDuo } from "./index.ts"; const MODEL_MAP = new Map(MODELS.map((m) => [m.id, m])); diff --git a/packages/coding-agent/examples/extensions/doom-overlay/doom-component.ts b/packages/coding-agent/examples/extensions/doom-overlay/doom-component.ts index dbc795b91..ddc2e98f5 100644 --- a/packages/coding-agent/examples/extensions/doom-overlay/doom-component.ts +++ b/packages/coding-agent/examples/extensions/doom-overlay/doom-component.ts @@ -7,8 +7,8 @@ import type { Component } from "@earendil-works/pi-tui"; import { isKeyRelease, type TUI } from "@earendil-works/pi-tui"; -import type { DoomEngine } from "./doom-engine.js"; -import { DoomKeys, mapKeyToDoom } from "./doom-keys.js"; +import type { DoomEngine } from "./doom-engine.ts"; +import { DoomKeys, mapKeyToDoom } from "./doom-keys.ts"; function renderHalfBlock( rgba: Uint8Array, diff --git a/packages/coding-agent/examples/extensions/doom-overlay/index.ts b/packages/coding-agent/examples/extensions/doom-overlay/index.ts index 434f0be1b..9d9dad13f 100644 --- a/packages/coding-agent/examples/extensions/doom-overlay/index.ts +++ b/packages/coding-agent/examples/extensions/doom-overlay/index.ts @@ -10,9 +10,9 @@ */ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; -import { DoomOverlayComponent } from "./doom-component.js"; -import { DoomEngine } from "./doom-engine.js"; -import { ensureWadFile } from "./wad-finder.js"; +import { DoomOverlayComponent } from "./doom-component.ts"; +import { DoomEngine } from "./doom-engine.ts"; +import { ensureWadFile } from "./wad-finder.ts"; // Persistent engine instance - survives between invocations let activeEngine: DoomEngine | null = null; diff --git a/packages/coding-agent/examples/extensions/plan-mode/index.ts b/packages/coding-agent/examples/extensions/plan-mode/index.ts index 709741d1e..40db408c9 100644 --- a/packages/coding-agent/examples/extensions/plan-mode/index.ts +++ b/packages/coding-agent/examples/extensions/plan-mode/index.ts @@ -16,7 +16,7 @@ import type { AgentMessage } from "@earendil-works/pi-agent-core"; import type { AssistantMessage, TextContent } from "@earendil-works/pi-ai"; import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent"; import { Key } from "@earendil-works/pi-tui"; -import { extractTodoItems, isSafeCommand, markCompletedSteps, type TodoItem } from "./utils.js"; +import { extractTodoItems, isSafeCommand, markCompletedSteps, type TodoItem } from "./utils.ts"; // Tools const PLAN_MODE_TOOLS = ["read", "bash", "grep", "find", "ls", "questionnaire"]; diff --git a/packages/coding-agent/examples/extensions/sandbox/package.json b/packages/coding-agent/examples/extensions/sandbox/package.json index 785ca4079..1fd94b35e 100644 --- a/packages/coding-agent/examples/extensions/sandbox/package.json +++ b/packages/coding-agent/examples/extensions/sandbox/package.json @@ -14,6 +14,6 @@ ] }, "dependencies": { - "@anthropic-ai/sandbox-runtime": "^0.0.26" + "@anthropic-ai/sandbox-runtime": "0.0.26" } } diff --git a/packages/coding-agent/examples/extensions/subagent/index.ts b/packages/coding-agent/examples/extensions/subagent/index.ts index 2853ad78b..92b471a34 100644 --- a/packages/coding-agent/examples/extensions/subagent/index.ts +++ b/packages/coding-agent/examples/extensions/subagent/index.ts @@ -22,7 +22,7 @@ import { StringEnum } from "@earendil-works/pi-ai"; import { type ExtensionAPI, getMarkdownTheme, withFileMutationQueue } from "@earendil-works/pi-coding-agent"; import { Container, Markdown, Spacer, Text } from "@earendil-works/pi-tui"; import { Type } from "typebox"; -import { type AgentConfig, type AgentScope, discoverAgents } from "./agents.js"; +import { type AgentConfig, type AgentScope, discoverAgents } from "./agents.ts"; const MAX_PARALLEL_TASKS = 8; const MAX_CONCURRENCY = 4; diff --git a/packages/coding-agent/examples/extensions/with-deps/package.json b/packages/coding-agent/examples/extensions/with-deps/package.json index eb66a8a9b..2d7cc7286 100644 --- a/packages/coding-agent/examples/extensions/with-deps/package.json +++ b/packages/coding-agent/examples/extensions/with-deps/package.json @@ -14,9 +14,9 @@ ] }, "dependencies": { - "ms": "^2.1.3" + "ms": "2.1.3" }, "devDependencies": { - "@types/ms": "^2.1.0" + "@types/ms": "2.1.0" } } diff --git a/packages/coding-agent/package.json b/packages/coding-agent/package.json index 82b5ec763..cd83c3807 100644 --- a/packages/coding-agent/package.json +++ b/packages/coding-agent/package.json @@ -40,20 +40,20 @@ "@earendil-works/pi-agent-core": "^0.75.3", "@earendil-works/pi-ai": "^0.75.3", "@earendil-works/pi-tui": "^0.75.3", - "@silvia-odwyer/photon-node": "^0.3.4", - "chalk": "^5.5.0", - "cross-spawn": "^7.0.6", - "diff": "^8.0.2", - "glob": "^13.0.1", - "highlight.js": "^10.7.3", - "hosted-git-info": "^9.0.2", - "ignore": "^7.0.5", - "jiti": "^2.7.0", - "minimatch": "^10.2.3", - "proper-lockfile": "^4.1.2", - "typebox": "^1.1.24", - "undici": "^8.3.0", - "yaml": "^2.8.2" + "@silvia-odwyer/photon-node": "0.3.4", + "chalk": "5.6.2", + "cross-spawn": "7.0.6", + "diff": "8.0.4", + "glob": "13.0.6", + "highlight.js": "10.7.3", + "hosted-git-info": "9.0.3", + "ignore": "7.0.5", + "jiti": "2.7.0", + "minimatch": "10.2.5", + "proper-lockfile": "4.1.2", + "typebox": "1.1.38", + "undici": "8.3.0", + "yaml": "2.9.0" }, "overrides": { "rimraf": "6.1.2", @@ -62,18 +62,18 @@ } }, "optionalDependencies": { - "@mariozechner/clipboard": "^0.3.6" + "@mariozechner/clipboard": "0.3.6" }, "devDependencies": { - "@types/cross-spawn": "^6.0.6", - "@types/diff": "^7.0.2", - "@types/hosted-git-info": "^3.0.5", - "@types/ms": "^2.1.0", - "@types/node": "^24.3.0", - "@types/proper-lockfile": "^4.1.4", - "shx": "^0.4.0", - "typescript": "^5.7.3", - "vitest": "^3.2.4" + "@types/cross-spawn": "6.0.6", + "@types/diff": "7.0.2", + "@types/hosted-git-info": "3.0.5", + "@types/ms": "2.1.0", + "@types/node": "24.12.4", + "@types/proper-lockfile": "4.1.4", + "shx": "0.4.0", + "typescript": "5.9.3", + "vitest": "3.2.4" }, "keywords": [ "coding-agent", diff --git a/packages/coding-agent/test/agent-session-auto-compaction-queue.test.ts b/packages/coding-agent/test/agent-session-auto-compaction-queue.test.ts index 1dd01c9b4..1abe3e288 100644 --- a/packages/coding-agent/test/agent-session-auto-compaction-queue.test.ts +++ b/packages/coding-agent/test/agent-session-auto-compaction-queue.test.ts @@ -4,12 +4,12 @@ import { join } from "node:path"; import { Agent } from "@earendil-works/pi-agent-core"; import { type AssistantMessage, getModel } from "@earendil-works/pi-ai"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import { AgentSession } from "../src/core/agent-session.js"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { ModelRegistry } from "../src/core/model-registry.js"; -import { SessionManager } from "../src/core/session-manager.js"; -import { SettingsManager } from "../src/core/settings-manager.js"; -import { createTestResourceLoader } from "./utilities.js"; +import { AgentSession } from "../src/core/agent-session.ts"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { ModelRegistry } from "../src/core/model-registry.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; +import { SettingsManager } from "../src/core/settings-manager.ts"; +import { createTestResourceLoader } from "./utilities.ts"; vi.mock("../src/core/compaction/index.js", () => ({ calculateContextTokens: (usage: { diff --git a/packages/coding-agent/test/agent-session-branching.test.ts b/packages/coding-agent/test/agent-session-branching.test.ts index 8590ad746..f516e6d65 100644 --- a/packages/coding-agent/test/agent-session-branching.test.ts +++ b/packages/coding-agent/test/agent-session-branching.test.ts @@ -12,17 +12,17 @@ import { tmpdir } from "node:os"; import { join } from "node:path"; import { getModel } from "@earendil-works/pi-ai"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import type { AgentSession } from "../src/core/agent-session.js"; +import type { AgentSession } from "../src/core/agent-session.ts"; import { type AgentSessionRuntime, type CreateAgentSessionRuntimeFactory, createAgentSessionFromServices, createAgentSessionRuntime, createAgentSessionServices, -} from "../src/core/agent-session-runtime.js"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { SessionManager } from "../src/core/session-manager.js"; -import { API_KEY } from "./utilities.js"; +} from "../src/core/agent-session-runtime.ts"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; +import { API_KEY } from "./utilities.ts"; describe.skipIf(!API_KEY)("AgentSession forking", () => { let session: AgentSession; diff --git a/packages/coding-agent/test/agent-session-compaction.test.ts b/packages/coding-agent/test/agent-session-compaction.test.ts index da52aecac..5724d6842 100644 --- a/packages/coding-agent/test/agent-session-compaction.test.ts +++ b/packages/coding-agent/test/agent-session-compaction.test.ts @@ -13,13 +13,13 @@ import { join } from "node:path"; import { Agent } from "@earendil-works/pi-agent-core"; import { getModel } from "@earendil-works/pi-ai"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { AgentSession, type AgentSessionEvent } from "../src/core/agent-session.js"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { ModelRegistry } from "../src/core/model-registry.js"; -import { SessionManager } from "../src/core/session-manager.js"; -import { SettingsManager } from "../src/core/settings-manager.js"; -import { createCodingTools } from "../src/index.js"; -import { API_KEY, createTestResourceLoader } from "./utilities.js"; +import { AgentSession, type AgentSessionEvent } from "../src/core/agent-session.ts"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { ModelRegistry } from "../src/core/model-registry.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; +import { SettingsManager } from "../src/core/settings-manager.ts"; +import { createCodingTools } from "../src/index.ts"; +import { API_KEY, createTestResourceLoader } from "./utilities.ts"; describe.skipIf(!API_KEY)("AgentSession compaction e2e", () => { let session: AgentSession; diff --git a/packages/coding-agent/test/agent-session-concurrent.test.ts b/packages/coding-agent/test/agent-session-concurrent.test.ts index 876883f21..81f400eae 100644 --- a/packages/coding-agent/test/agent-session-concurrent.test.ts +++ b/packages/coding-agent/test/agent-session-concurrent.test.ts @@ -16,13 +16,13 @@ import { } from "@earendil-works/pi-ai"; import { Type } from "typebox"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { AgentSession } from "../src/core/agent-session.js"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { ModelRegistry } from "../src/core/model-registry.js"; -import { SessionManager } from "../src/core/session-manager.js"; -import { SettingsManager } from "../src/core/settings-manager.js"; -import type { BuildSystemPromptOptions } from "../src/core/system-prompt.js"; -import { createTestExtensionsResult, createTestResourceLoader } from "./utilities.js"; +import { AgentSession } from "../src/core/agent-session.ts"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { ModelRegistry } from "../src/core/model-registry.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; +import { SettingsManager } from "../src/core/settings-manager.ts"; +import type { BuildSystemPromptOptions } from "../src/core/system-prompt.ts"; +import { createTestExtensionsResult, createTestResourceLoader } from "./utilities.ts"; // Mock stream that mimics AssistantMessageEventStream class MockAssistantStream extends EventStream { diff --git a/packages/coding-agent/test/agent-session-dynamic-provider.test.ts b/packages/coding-agent/test/agent-session-dynamic-provider.test.ts index e527ca35a..a6da8c9ed 100644 --- a/packages/coding-agent/test/agent-session-dynamic-provider.test.ts +++ b/packages/coding-agent/test/agent-session-dynamic-provider.test.ts @@ -3,12 +3,12 @@ import { tmpdir } from "node:os"; import { join } from "node:path"; import { getModel } from "@earendil-works/pi-ai"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { DefaultResourceLoader } from "../src/core/resource-loader.js"; -import type { ExtensionFactory } from "../src/core/sdk.js"; -import { createAgentSession } from "../src/core/sdk.js"; -import { SessionManager } from "../src/core/session-manager.js"; -import { SettingsManager } from "../src/core/settings-manager.js"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { DefaultResourceLoader } from "../src/core/resource-loader.ts"; +import type { ExtensionFactory } from "../src/core/sdk.ts"; +import { createAgentSession } from "../src/core/sdk.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; +import { SettingsManager } from "../src/core/settings-manager.ts"; describe("AgentSession dynamic provider registration", () => { let tempDir: string; diff --git a/packages/coding-agent/test/agent-session-dynamic-tools.test.ts b/packages/coding-agent/test/agent-session-dynamic-tools.test.ts index 6c020defe..e58ea22fc 100644 --- a/packages/coding-agent/test/agent-session-dynamic-tools.test.ts +++ b/packages/coding-agent/test/agent-session-dynamic-tools.test.ts @@ -4,10 +4,10 @@ import { join } from "node:path"; import { getModel } from "@earendil-works/pi-ai"; import { Type } from "typebox"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { DefaultResourceLoader } from "../src/core/resource-loader.js"; -import { createAgentSession } from "../src/core/sdk.js"; -import { SessionManager } from "../src/core/session-manager.js"; -import { SettingsManager } from "../src/core/settings-manager.js"; +import { DefaultResourceLoader } from "../src/core/resource-loader.ts"; +import { createAgentSession } from "../src/core/sdk.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; +import { SettingsManager } from "../src/core/settings-manager.ts"; describe("AgentSession dynamic tool registration", () => { let tempDir: string; diff --git a/packages/coding-agent/test/agent-session-retry.test.ts b/packages/coding-agent/test/agent-session-retry.test.ts index 25dfd2092..ebba143b3 100644 --- a/packages/coding-agent/test/agent-session-retry.test.ts +++ b/packages/coding-agent/test/agent-session-retry.test.ts @@ -5,12 +5,12 @@ import { Agent, type AgentEvent, type AgentTool } from "@earendil-works/pi-agent import { type AssistantMessage, type AssistantMessageEvent, EventStream, getModel } from "@earendil-works/pi-ai"; import { Type } from "typebox"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { AgentSession } from "../src/core/agent-session.js"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { ModelRegistry } from "../src/core/model-registry.js"; -import { SessionManager } from "../src/core/session-manager.js"; -import { SettingsManager } from "../src/core/settings-manager.js"; -import { createTestResourceLoader } from "./utilities.js"; +import { AgentSession } from "../src/core/agent-session.ts"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { ModelRegistry } from "../src/core/model-registry.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; +import { SettingsManager } from "../src/core/settings-manager.ts"; +import { createTestResourceLoader } from "./utilities.ts"; class MockAssistantStream extends EventStream { constructor() { diff --git a/packages/coding-agent/test/agent-session-runtime-events.test.ts b/packages/coding-agent/test/agent-session-runtime-events.test.ts index dcd705779..42b01fe12 100644 --- a/packages/coding-agent/test/agent-session-runtime-events.test.ts +++ b/packages/coding-agent/test/agent-session-runtime-events.test.ts @@ -8,16 +8,16 @@ import { createAgentSessionFromServices, createAgentSessionRuntime, createAgentSessionServices, -} from "../src/core/agent-session-runtime.js"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { SessionManager } from "../src/core/session-manager.js"; +} from "../src/core/agent-session-runtime.ts"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; import type { ExtensionFactory, SessionBeforeForkEvent, SessionBeforeSwitchEvent, SessionShutdownEvent, SessionStartEvent, -} from "../src/index.js"; +} from "../src/index.ts"; type RecordedSessionEvent = | SessionBeforeSwitchEvent diff --git a/packages/coding-agent/test/agent-session-stats.test.ts b/packages/coding-agent/test/agent-session-stats.test.ts index 27788b8f6..b435246e6 100644 --- a/packages/coding-agent/test/agent-session-stats.test.ts +++ b/packages/coding-agent/test/agent-session-stats.test.ts @@ -1,12 +1,12 @@ import { Agent } from "@earendil-works/pi-agent-core"; import { type AssistantMessage, getModel, type Usage } from "@earendil-works/pi-ai"; import { describe, expect, it } from "vitest"; -import { AgentSession } from "../src/core/agent-session.js"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { ModelRegistry } from "../src/core/model-registry.js"; -import { SessionManager } from "../src/core/session-manager.js"; -import { SettingsManager } from "../src/core/settings-manager.js"; -import { createTestResourceLoader } from "./utilities.js"; +import { AgentSession } from "../src/core/agent-session.ts"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { ModelRegistry } from "../src/core/model-registry.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; +import { SettingsManager } from "../src/core/settings-manager.ts"; +import { createTestResourceLoader } from "./utilities.ts"; const model = getModel("anthropic", "claude-sonnet-4-5")!; diff --git a/packages/coding-agent/test/agent-session-tree-navigation.test.ts b/packages/coding-agent/test/agent-session-tree-navigation.test.ts index 35abae1e5..361e5bffb 100644 --- a/packages/coding-agent/test/agent-session-tree-navigation.test.ts +++ b/packages/coding-agent/test/agent-session-tree-navigation.test.ts @@ -10,7 +10,7 @@ */ import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { API_KEY, createTestSession, type TestSessionContext } from "./utilities.js"; +import { API_KEY, createTestSession, type TestSessionContext } from "./utilities.ts"; describe.skipIf(!API_KEY)("AgentSession tree navigation e2e", () => { let ctx: TestSessionContext; diff --git a/packages/coding-agent/test/ansi-utils.test.ts b/packages/coding-agent/test/ansi-utils.test.ts index 862f04017..15bb43140 100644 --- a/packages/coding-agent/test/ansi-utils.test.ts +++ b/packages/coding-agent/test/ansi-utils.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { stripAnsi } from "../src/utils/ansi.js"; +import { stripAnsi } from "../src/utils/ansi.ts"; function referenceAnsiRegex(): RegExp { const ST = "(?:\\u0007|\\u001B\\u005C|\\u009C)"; diff --git a/packages/coding-agent/test/args.test.ts b/packages/coding-agent/test/args.test.ts index ab3ce2a5b..3bf41473c 100644 --- a/packages/coding-agent/test/args.test.ts +++ b/packages/coding-agent/test/args.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "vitest"; -import { parseArgs } from "../src/cli/args.js"; +import { parseArgs } from "../src/cli/args.ts"; describe("parseArgs", () => { describe("--version flag", () => { diff --git a/packages/coding-agent/test/assistant-message.test.ts b/packages/coding-agent/test/assistant-message.test.ts index 9af2a4a2f..137376a5b 100644 --- a/packages/coding-agent/test/assistant-message.test.ts +++ b/packages/coding-agent/test/assistant-message.test.ts @@ -1,7 +1,7 @@ import type { AssistantMessage } from "@earendil-works/pi-ai"; import { describe, expect, test } from "vitest"; -import { AssistantMessageComponent } from "../src/modes/interactive/components/assistant-message.js"; -import { initTheme } from "../src/modes/interactive/theme/theme.js"; +import { AssistantMessageComponent } from "../src/modes/interactive/components/assistant-message.ts"; +import { initTheme } from "../src/modes/interactive/theme/theme.ts"; const OSC133_ZONE_START = "\x1b]133;A\x07"; const OSC133_ZONE_END = "\x1b]133;B\x07"; diff --git a/packages/coding-agent/test/auth-storage.test.ts b/packages/coding-agent/test/auth-storage.test.ts index ddaef67e8..9ec971001 100644 --- a/packages/coding-agent/test/auth-storage.test.ts +++ b/packages/coding-agent/test/auth-storage.test.ts @@ -4,8 +4,8 @@ import { join } from "node:path"; import { registerOAuthProvider } from "@earendil-works/pi-ai/oauth"; import lockfile from "proper-lockfile"; import { afterEach, beforeEach, describe, expect, test, vi } from "vitest"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { clearConfigValueCache } from "../src/core/resolve-config-value.js"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { clearConfigValueCache } from "../src/core/resolve-config-value.ts"; describe("AuthStorage", () => { let tempDir: string; diff --git a/packages/coding-agent/test/bash-close-hang-windows.test.ts b/packages/coding-agent/test/bash-close-hang-windows.test.ts index 10ae6414e..a17834e24 100644 --- a/packages/coding-agent/test/bash-close-hang-windows.test.ts +++ b/packages/coding-agent/test/bash-close-hang-windows.test.ts @@ -3,8 +3,8 @@ import { existsSync, mkdirSync, readFileSync, rmSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { executeBashWithOperations } from "../src/core/bash-executor.js"; -import { createBashTool, createLocalBashOperations } from "../src/core/tools/bash.js"; +import { executeBashWithOperations } from "../src/core/bash-executor.ts"; +import { createBashTool, createLocalBashOperations } from "../src/core/tools/bash.ts"; function toBashSingleQuotedArg(value: string): string { return `'${value.replace(/\\/g, "/").replace(/'/g, `'"'"'`)}'`; diff --git a/packages/coding-agent/test/bash-execution-width.test.ts b/packages/coding-agent/test/bash-execution-width.test.ts index 12a8bb518..9cc64e8c1 100644 --- a/packages/coding-agent/test/bash-execution-width.test.ts +++ b/packages/coding-agent/test/bash-execution-width.test.ts @@ -4,8 +4,8 @@ */ import { visibleWidth } from "@earendil-works/pi-tui"; import { beforeAll, describe, expect, it } from "vitest"; -import { BashExecutionComponent } from "../src/modes/interactive/components/bash-execution.js"; -import { initTheme } from "../src/modes/interactive/theme/theme.js"; +import { BashExecutionComponent } from "../src/modes/interactive/components/bash-execution.ts"; +import { initTheme } from "../src/modes/interactive/theme/theme.ts"; /** Minimal TUI stub that only exposes terminal.columns */ function createTuiStub(columns: number): { columns: number; stub: any } { diff --git a/packages/coding-agent/test/block-images.test.ts b/packages/coding-agent/test/block-images.test.ts index 2c599276e..19b434595 100644 --- a/packages/coding-agent/test/block-images.test.ts +++ b/packages/coding-agent/test/block-images.test.ts @@ -2,9 +2,9 @@ import { mkdirSync, rmSync, writeFileSync } from "fs"; import { tmpdir } from "os"; import { join } from "path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { processFileArguments } from "../src/cli/file-processor.js"; -import { SettingsManager } from "../src/core/settings-manager.js"; -import { createReadTool } from "../src/core/tools/read.js"; +import { processFileArguments } from "../src/cli/file-processor.ts"; +import { SettingsManager } from "../src/core/settings-manager.ts"; +import { createReadTool } from "../src/core/tools/read.ts"; // 1x1 red PNG image as base64 (smallest valid PNG) const TINY_PNG_BASE64 = diff --git a/packages/coding-agent/test/clipboard-image-bmp-conversion.test.ts b/packages/coding-agent/test/clipboard-image-bmp-conversion.test.ts index 95107506b..be3a9d953 100644 --- a/packages/coding-agent/test/clipboard-image-bmp-conversion.test.ts +++ b/packages/coding-agent/test/clipboard-image-bmp-conversion.test.ts @@ -68,7 +68,7 @@ vi.mock("@mariozechner/clipboard", () => ({ describe("readClipboardImage BMP conversion", () => { test("converts BMP to PNG on Wayland/WSLg", async () => { - const { readClipboardImage } = await import("../src/utils/clipboard-image.js"); + const { readClipboardImage } = await import("../src/utils/clipboard-image.ts"); // Simulate Wayland session (WSLg) const image = await readClipboardImage({ diff --git a/packages/coding-agent/test/clipboard-image.test.ts b/packages/coding-agent/test/clipboard-image.test.ts index eda61a29e..b7416a4c6 100644 --- a/packages/coding-agent/test/clipboard-image.test.ts +++ b/packages/coding-agent/test/clipboard-image.test.ts @@ -70,7 +70,7 @@ describe("readClipboardImage", () => { throw new Error(`Unexpected spawnSync call: ${command} ${args.join(" ")}`); }); - const { readClipboardImage } = await import("../src/utils/clipboard-image.js"); + const { readClipboardImage } = await import("../src/utils/clipboard-image.ts"); const result = await readClipboardImage({ platform: "linux", env: { WAYLAND_DISPLAY: "1" } }); expect(result).not.toBeNull(); expect(result?.mimeType).toBe("image/png"); @@ -101,7 +101,7 @@ describe("readClipboardImage", () => { return spawnOk(Buffer.alloc(0)); }); - const { readClipboardImage } = await import("../src/utils/clipboard-image.js"); + const { readClipboardImage } = await import("../src/utils/clipboard-image.ts"); const result = await readClipboardImage({ platform: "linux", env: { XDG_SESSION_TYPE: "wayland" } }); expect(result).not.toBeNull(); expect(result?.mimeType).toBe("image/png"); @@ -138,7 +138,7 @@ describe("readClipboardImage", () => { throw new Error(`Unexpected spawnSync call: ${command} ${args.join(" ")}`); }); - const { readClipboardImage } = await import("../src/utils/clipboard-image.js"); + const { readClipboardImage } = await import("../src/utils/clipboard-image.ts"); const result = await readClipboardImage({ platform: "linux", env: { WSL_DISTRO_NAME: "Ubuntu" } }); expect(result).not.toBeNull(); expect(result?.mimeType).toBe("image/png"); @@ -153,7 +153,7 @@ describe("readClipboardImage", () => { mocks.clipboard.hasImage.mockReturnValue(true); mocks.clipboard.getImageBinary.mockResolvedValue(new Uint8Array([7])); - const { readClipboardImage } = await import("../src/utils/clipboard-image.js"); + const { readClipboardImage } = await import("../src/utils/clipboard-image.ts"); const result = await readClipboardImage({ platform: "linux", env: {} }); expect(result).not.toBeNull(); expect(result?.mimeType).toBe("image/png"); @@ -167,7 +167,7 @@ describe("readClipboardImage", () => { mocks.clipboard.hasImage.mockReturnValue(false); - const { readClipboardImage } = await import("../src/utils/clipboard-image.js"); + const { readClipboardImage } = await import("../src/utils/clipboard-image.ts"); const result = await readClipboardImage({ platform: "linux", env: {} }); expect(result).toBeNull(); }); diff --git a/packages/coding-agent/test/clipboard.test.ts b/packages/coding-agent/test/clipboard.test.ts index ea231b572..6ea3a6852 100644 --- a/packages/coding-agent/test/clipboard.test.ts +++ b/packages/coding-agent/test/clipboard.test.ts @@ -1,7 +1,7 @@ import { execSync, spawn } from "child_process"; import { platform } from "os"; import { afterEach, beforeEach, describe, expect, test, vi } from "vitest"; -import { copyToClipboard } from "../src/utils/clipboard.js"; +import { copyToClipboard } from "../src/utils/clipboard.ts"; const mocks = vi.hoisted(() => { return { diff --git a/packages/coding-agent/test/compaction-extensions-example.test.ts b/packages/coding-agent/test/compaction-extensions-example.test.ts index 4f5e33597..db2f40824 100644 --- a/packages/coding-agent/test/compaction-extensions-example.test.ts +++ b/packages/coding-agent/test/compaction-extensions-example.test.ts @@ -3,7 +3,7 @@ */ import { describe, expect, it } from "vitest"; -import type { ExtensionAPI, SessionBeforeCompactEvent, SessionCompactEvent } from "../src/core/extensions/index.js"; +import type { ExtensionAPI, SessionBeforeCompactEvent, SessionCompactEvent } from "../src/core/extensions/index.ts"; describe("Documentation example", () => { it("custom compaction example should type-check correctly", () => { diff --git a/packages/coding-agent/test/compaction-extensions.test.ts b/packages/coding-agent/test/compaction-extensions.test.ts index 1a134e7bf..2c41210e3 100644 --- a/packages/coding-agent/test/compaction-extensions.test.ts +++ b/packages/coding-agent/test/compaction-extensions.test.ts @@ -8,21 +8,21 @@ import { join } from "node:path"; import { Agent } from "@earendil-works/pi-agent-core"; import { getModel } from "@earendil-works/pi-ai"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { AgentSession } from "../src/core/agent-session.js"; -import { AuthStorage } from "../src/core/auth-storage.js"; +import { AgentSession } from "../src/core/agent-session.ts"; +import { AuthStorage } from "../src/core/auth-storage.ts"; import { createExtensionRuntime, type Extension, type SessionBeforeCompactEvent, type SessionCompactEvent, type SessionEvent, -} from "../src/core/extensions/index.js"; -import { ModelRegistry } from "../src/core/model-registry.js"; -import { SessionManager } from "../src/core/session-manager.js"; -import { SettingsManager } from "../src/core/settings-manager.js"; -import { createSyntheticSourceInfo } from "../src/core/source-info.js"; -import { createCodingTools } from "../src/index.js"; -import { createTestResourceLoader } from "./utilities.js"; +} from "../src/core/extensions/index.ts"; +import { ModelRegistry } from "../src/core/model-registry.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; +import { SettingsManager } from "../src/core/settings-manager.ts"; +import { createSyntheticSourceInfo } from "../src/core/source-info.ts"; +import { createCodingTools } from "../src/index.ts"; +import { createTestResourceLoader } from "./utilities.ts"; const API_KEY = process.env.ANTHROPIC_OAUTH_TOKEN || process.env.ANTHROPIC_API_KEY; diff --git a/packages/coding-agent/test/compaction-serialization.test.ts b/packages/coding-agent/test/compaction-serialization.test.ts index 9b11bb0f1..91ca9251a 100644 --- a/packages/coding-agent/test/compaction-serialization.test.ts +++ b/packages/coding-agent/test/compaction-serialization.test.ts @@ -1,6 +1,6 @@ import type { Message } from "@earendil-works/pi-ai"; import { describe, expect, it } from "vitest"; -import { serializeConversation } from "../src/core/compaction/utils.js"; +import { serializeConversation } from "../src/core/compaction/utils.ts"; describe("serializeConversation", () => { it("should truncate long tool results", () => { diff --git a/packages/coding-agent/test/compaction-summary-reasoning.test.ts b/packages/coding-agent/test/compaction-summary-reasoning.test.ts index ea52016bf..6609aca16 100644 --- a/packages/coding-agent/test/compaction-summary-reasoning.test.ts +++ b/packages/coding-agent/test/compaction-summary-reasoning.test.ts @@ -1,7 +1,7 @@ import type { AgentMessage } from "@earendil-works/pi-agent-core"; import type { AssistantMessage, Model } from "@earendil-works/pi-ai"; import { beforeEach, describe, expect, it, vi } from "vitest"; -import { type CompactionPreparation, compact, generateSummary } from "../src/core/compaction/index.js"; +import { type CompactionPreparation, compact, generateSummary } from "../src/core/compaction/index.ts"; const { completeSimpleMock } = vi.hoisted(() => ({ completeSimpleMock: vi.fn(), diff --git a/packages/coding-agent/test/compaction.test.ts b/packages/coding-agent/test/compaction.test.ts index ca665543c..929d06ec5 100644 --- a/packages/coding-agent/test/compaction.test.ts +++ b/packages/coding-agent/test/compaction.test.ts @@ -14,7 +14,7 @@ import { getLastAssistantUsage, prepareCompaction, shouldCompact, -} from "../src/core/compaction/index.js"; +} from "../src/core/compaction/index.ts"; import { buildSessionContext, type CompactionEntry, @@ -24,7 +24,7 @@ import { type SessionEntry, type SessionMessageEntry, type ThinkingLevelChangeEntry, -} from "../src/core/session-manager.js"; +} from "../src/core/session-manager.ts"; // ============================================================================ // Test fixtures diff --git a/packages/coding-agent/test/config.test.ts b/packages/coding-agent/test/config.test.ts index 71c4b48b5..c22ff12b4 100644 --- a/packages/coding-agent/test/config.test.ts +++ b/packages/coding-agent/test/config.test.ts @@ -7,7 +7,7 @@ import { getSelfUpdateCommand, getSelfUpdateUnavailableInstruction, getUpdateInstruction, -} from "../src/config.js"; +} from "../src/config.ts"; const execPathDescriptor = Object.getOwnPropertyDescriptor(process, "execPath"); const originalPath = process.env.PATH; diff --git a/packages/coding-agent/test/edit-tool-legacy-input.test.ts b/packages/coding-agent/test/edit-tool-legacy-input.test.ts index 13a8bbeb5..26a550d26 100644 --- a/packages/coding-agent/test/edit-tool-legacy-input.test.ts +++ b/packages/coding-agent/test/edit-tool-legacy-input.test.ts @@ -2,8 +2,8 @@ import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, describe, expect, it } from "vitest"; -import type { ExtensionContext } from "../src/core/extensions/types.js"; -import { createEditToolDefinition } from "../src/core/tools/edit.js"; +import type { ExtensionContext } from "../src/core/extensions/types.ts"; +import { createEditToolDefinition } from "../src/core/tools/edit.ts"; const tempDirs: string[] = []; diff --git a/packages/coding-agent/test/edit-tool-no-full-redraw.test.ts b/packages/coding-agent/test/edit-tool-no-full-redraw.test.ts index 21d4e7d58..1da9f0df7 100644 --- a/packages/coding-agent/test/edit-tool-no-full-redraw.test.ts +++ b/packages/coding-agent/test/edit-tool-no-full-redraw.test.ts @@ -3,10 +3,10 @@ import { tmpdir } from "node:os"; import { join } from "node:path"; import { Container, type Terminal, Text, TUI } from "@earendil-works/pi-tui"; import { afterEach, beforeAll, describe, expect, it } from "vitest"; -import { createEditToolDefinition } from "../src/core/tools/edit.js"; -import { computeEditsDiff, type Edit } from "../src/core/tools/edit-diff.js"; -import { ToolExecutionComponent } from "../src/modes/interactive/components/tool-execution.js"; -import { initTheme } from "../src/modes/interactive/theme/theme.js"; +import { createEditToolDefinition } from "../src/core/tools/edit.ts"; +import { computeEditsDiff, type Edit } from "../src/core/tools/edit-diff.ts"; +import { ToolExecutionComponent } from "../src/modes/interactive/components/tool-execution.ts"; +import { initTheme } from "../src/modes/interactive/theme/theme.ts"; class FakeTerminal implements Terminal { columns = 80; diff --git a/packages/coding-agent/test/export-html-whitespace.test.ts b/packages/coding-agent/test/export-html-whitespace.test.ts index 4336c63cb..9d2a0e84d 100644 --- a/packages/coding-agent/test/export-html-whitespace.test.ts +++ b/packages/coding-agent/test/export-html-whitespace.test.ts @@ -1,10 +1,10 @@ import type { Component } from "@earendil-works/pi-tui"; import { readFileSync } from "fs"; import { describe, expect, it } from "vitest"; -import { ansiLinesToHtml } from "../src/core/export-html/ansi-to-html.js"; -import { createToolHtmlRenderer } from "../src/core/export-html/tool-renderer.js"; -import type { ToolDefinition } from "../src/core/extensions/types.js"; -import type { Theme } from "../src/modes/interactive/theme/theme.js"; +import { ansiLinesToHtml } from "../src/core/export-html/ansi-to-html.ts"; +import { createToolHtmlRenderer } from "../src/core/export-html/tool-renderer.ts"; +import type { ToolDefinition } from "../src/core/extensions/types.ts"; +import type { Theme } from "../src/modes/interactive/theme/theme.ts"; describe("export HTML tool output whitespace", () => { it("preserves whitespace for plain-text tool output lines without preserving template whitespace", () => { diff --git a/packages/coding-agent/test/extensions-discovery.test.ts b/packages/coding-agent/test/extensions-discovery.test.ts index 52029d2cf..3613e9026 100644 --- a/packages/coding-agent/test/extensions-discovery.test.ts +++ b/packages/coding-agent/test/extensions-discovery.test.ts @@ -3,7 +3,7 @@ import * as os from "node:os"; import * as path from "node:path"; import { fileURLToPath } from "node:url"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { discoverAndLoadExtensions } from "../src/core/extensions/loader.js"; +import { discoverAndLoadExtensions } from "../src/core/extensions/loader.ts"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -440,7 +440,7 @@ describe("extensions discovery", () => { fs.writeFileSync(explicitPath, extensionCodeWithTool("explicit")); // Use loadExtensions directly to skip discovery - const { loadExtensions } = await import("../src/core/extensions/loader.js"); + const { loadExtensions } = await import("../src/core/extensions/loader.ts"); const result = await loadExtensions([explicitPath], tempDir); expect(result.errors).toHaveLength(0); @@ -454,7 +454,7 @@ describe("extensions discovery", () => { fs.writeFileSync(path.join(extensionsDir, "discovered.ts"), extensionCode); // Use loadExtensions directly with empty paths - const { loadExtensions } = await import("../src/core/extensions/loader.js"); + const { loadExtensions } = await import("../src/core/extensions/loader.ts"); const result = await loadExtensions([], tempDir); expect(result.errors).toHaveLength(0); diff --git a/packages/coding-agent/test/extensions-input-event.test.ts b/packages/coding-agent/test/extensions-input-event.test.ts index 5c08fd2ce..3d5ae5cc0 100644 --- a/packages/coding-agent/test/extensions-input-event.test.ts +++ b/packages/coding-agent/test/extensions-input-event.test.ts @@ -2,11 +2,11 @@ import * as fs from "node:fs"; import * as os from "node:os"; import * as path from "node:path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { discoverAndLoadExtensions } from "../src/core/extensions/loader.js"; -import { ExtensionRunner } from "../src/core/extensions/runner.js"; -import { ModelRegistry } from "../src/core/model-registry.js"; -import { SessionManager } from "../src/core/session-manager.js"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { discoverAndLoadExtensions } from "../src/core/extensions/loader.ts"; +import { ExtensionRunner } from "../src/core/extensions/runner.ts"; +import { ModelRegistry } from "../src/core/model-registry.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; describe("Input Event", () => { let tempDir: string; diff --git a/packages/coding-agent/test/extensions-runner.test.ts b/packages/coding-agent/test/extensions-runner.test.ts index 67c462358..03de2d775 100644 --- a/packages/coding-agent/test/extensions-runner.test.ts +++ b/packages/coding-agent/test/extensions-runner.test.ts @@ -6,13 +6,13 @@ import * as fs from "node:fs"; import * as os from "node:os"; import * as path from "node:path"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { createExtensionRuntime, discoverAndLoadExtensions } from "../src/core/extensions/loader.js"; -import { ExtensionRunner } from "../src/core/extensions/runner.js"; -import type { ExtensionActions, ExtensionContextActions, ProviderConfig } from "../src/core/extensions/types.js"; -import { KeybindingsManager, type KeyId } from "../src/core/keybindings.js"; -import { ModelRegistry } from "../src/core/model-registry.js"; -import { SessionManager } from "../src/core/session-manager.js"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { createExtensionRuntime, discoverAndLoadExtensions } from "../src/core/extensions/loader.ts"; +import { ExtensionRunner } from "../src/core/extensions/runner.ts"; +import type { ExtensionActions, ExtensionContextActions, ProviderConfig } from "../src/core/extensions/types.ts"; +import { KeybindingsManager, type KeyId } from "../src/core/keybindings.ts"; +import { ModelRegistry } from "../src/core/model-registry.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; describe("ExtensionRunner", () => { let tempDir: string; diff --git a/packages/coding-agent/test/file-mutation-queue.test.ts b/packages/coding-agent/test/file-mutation-queue.test.ts index 8b839fe20..73d20c6d4 100644 --- a/packages/coding-agent/test/file-mutation-queue.test.ts +++ b/packages/coding-agent/test/file-mutation-queue.test.ts @@ -2,9 +2,9 @@ import { access, mkdtemp, readFile, rm, symlink, writeFile } from "node:fs/promi import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, describe, expect, it } from "vitest"; -import { createEditTool } from "../src/core/tools/edit.js"; -import { withFileMutationQueue } from "../src/core/tools/file-mutation-queue.js"; -import { createWriteTool } from "../src/core/tools/write.js"; +import { createEditTool } from "../src/core/tools/edit.ts"; +import { withFileMutationQueue } from "../src/core/tools/file-mutation-queue.ts"; +import { createWriteTool } from "../src/core/tools/write.ts"; function delay(ms: number): Promise { return new Promise((resolve) => setTimeout(resolve, ms)); diff --git a/packages/coding-agent/test/footer-data-provider.test.ts b/packages/coding-agent/test/footer-data-provider.test.ts index 3a6e1d47a..4ad9a23a1 100644 --- a/packages/coding-agent/test/footer-data-provider.test.ts +++ b/packages/coding-agent/test/footer-data-provider.test.ts @@ -37,7 +37,7 @@ vi.mock("child_process", () => ({ }), })); -import { FooterDataProvider } from "../src/core/footer-data-provider.js"; +import { FooterDataProvider } from "../src/core/footer-data-provider.ts"; type WorktreeFixture = { worktreeDir: string; diff --git a/packages/coding-agent/test/footer-width.test.ts b/packages/coding-agent/test/footer-width.test.ts index dd158f365..2d9126473 100644 --- a/packages/coding-agent/test/footer-width.test.ts +++ b/packages/coding-agent/test/footer-width.test.ts @@ -1,9 +1,9 @@ import { visibleWidth } from "@earendil-works/pi-tui"; import { beforeAll, describe, expect, it } from "vitest"; -import type { AgentSession } from "../src/core/agent-session.js"; -import type { ReadonlyFooterDataProvider } from "../src/core/footer-data-provider.js"; -import { FooterComponent } from "../src/modes/interactive/components/footer.js"; -import { initTheme } from "../src/modes/interactive/theme/theme.js"; +import type { AgentSession } from "../src/core/agent-session.ts"; +import type { ReadonlyFooterDataProvider } from "../src/core/footer-data-provider.ts"; +import { FooterComponent } from "../src/modes/interactive/components/footer.ts"; +import { initTheme } from "../src/modes/interactive/theme/theme.ts"; type AssistantUsage = { input: number; diff --git a/packages/coding-agent/test/frontmatter.test.ts b/packages/coding-agent/test/frontmatter.test.ts index 3879fedf6..43a92985e 100644 --- a/packages/coding-agent/test/frontmatter.test.ts +++ b/packages/coding-agent/test/frontmatter.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { parseFrontmatter, stripFrontmatter } from "../src/utils/frontmatter.js"; +import { parseFrontmatter, stripFrontmatter } from "../src/utils/frontmatter.ts"; describe("parseFrontmatter", () => { it("parses keys, strips quotes, and returns body", () => { diff --git a/packages/coding-agent/test/git-ssh-url.test.ts b/packages/coding-agent/test/git-ssh-url.test.ts index a7d242673..6913b70c4 100644 --- a/packages/coding-agent/test/git-ssh-url.test.ts +++ b/packages/coding-agent/test/git-ssh-url.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { parseGitUrl } from "../src/utils/git.js"; +import { parseGitUrl } from "../src/utils/git.ts"; describe("Git URL Parsing", () => { describe("protocol URLs (accepted without git: prefix)", () => { diff --git a/packages/coding-agent/test/git-update.test.ts b/packages/coding-agent/test/git-update.test.ts index 2cfcb4041..0f574ba6f 100644 --- a/packages/coding-agent/test/git-update.test.ts +++ b/packages/coding-agent/test/git-update.test.ts @@ -12,8 +12,8 @@ import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { DefaultPackageManager } from "../src/core/package-manager.js"; -import { SettingsManager } from "../src/core/settings-manager.js"; +import { DefaultPackageManager } from "../src/core/package-manager.ts"; +import { SettingsManager } from "../src/core/settings-manager.ts"; // Helper to run git commands in a directory function git(args: string[], cwd: string): string { diff --git a/packages/coding-agent/test/image-processing.test.ts b/packages/coding-agent/test/image-processing.test.ts index 4dba6f2d9..40f264a83 100644 --- a/packages/coding-agent/test/image-processing.test.ts +++ b/packages/coding-agent/test/image-processing.test.ts @@ -3,8 +3,8 @@ */ import { describe, expect, it } from "vitest"; -import { convertToPng } from "../src/utils/image-convert.js"; -import { formatDimensionNote, resizeImage } from "../src/utils/image-resize.js"; +import { convertToPng } from "../src/utils/image-convert.ts"; +import { formatDimensionNote, resizeImage } from "../src/utils/image-resize.ts"; // Small 2x2 red PNG image (base64) - generated with ImageMagick const TINY_PNG = diff --git a/packages/coding-agent/test/image-resize-callers.test.ts b/packages/coding-agent/test/image-resize-callers.test.ts index 5d1c1a79b..2337ae8ca 100644 --- a/packages/coding-agent/test/image-resize-callers.test.ts +++ b/packages/coding-agent/test/image-resize-callers.test.ts @@ -8,9 +8,9 @@ vi.mock("../src/utils/image-resize.js", () => ({ formatDimensionNote: vi.fn(() => undefined), })); -import { processFileArguments } from "../src/cli/file-processor.js"; -import { createReadTool } from "../src/core/tools/read.js"; -import { resizeImage } from "../src/utils/image-resize.js"; +import { processFileArguments } from "../src/cli/file-processor.ts"; +import { createReadTool } from "../src/core/tools/read.ts"; +import { resizeImage } from "../src/utils/image-resize.ts"; const TINY_PNG_BASE64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg=="; diff --git a/packages/coding-agent/test/initial-message.test.ts b/packages/coding-agent/test/initial-message.test.ts index 22b1612da..fae479f78 100644 --- a/packages/coding-agent/test/initial-message.test.ts +++ b/packages/coding-agent/test/initial-message.test.ts @@ -1,6 +1,6 @@ import { describe, expect, test } from "vitest"; -import type { Args } from "../src/cli/args.js"; -import { buildInitialMessage } from "../src/cli/initial-message.js"; +import type { Args } from "../src/cli/args.ts"; +import { buildInitialMessage } from "../src/cli/initial-message.ts"; function createArgs(messages: string[] = []): Args { return { diff --git a/packages/coding-agent/test/interactive-mode-anthropic-warning.test.ts b/packages/coding-agent/test/interactive-mode-anthropic-warning.test.ts index 16ca930a2..10e351928 100644 --- a/packages/coding-agent/test/interactive-mode-anthropic-warning.test.ts +++ b/packages/coding-agent/test/interactive-mode-anthropic-warning.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test, vi } from "vitest"; -import { InteractiveMode } from "../src/modes/interactive/interactive-mode.js"; +import { InteractiveMode } from "../src/modes/interactive/interactive-mode.ts"; function createSettingsManager(warnings: { anthropicExtraUsage?: boolean } = {}) { return { diff --git a/packages/coding-agent/test/interactive-mode-clone-command.test.ts b/packages/coding-agent/test/interactive-mode-clone-command.test.ts index 9388b89fd..fea69c5d3 100644 --- a/packages/coding-agent/test/interactive-mode-clone-command.test.ts +++ b/packages/coding-agent/test/interactive-mode-clone-command.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from "vitest"; -import { InteractiveMode } from "../src/modes/interactive/interactive-mode.js"; +import { InteractiveMode } from "../src/modes/interactive/interactive-mode.ts"; type CloneCommandContext = { sessionManager: { getLeafId: () => string | null }; diff --git a/packages/coding-agent/test/interactive-mode-compaction.test.ts b/packages/coding-agent/test/interactive-mode-compaction.test.ts index 85e8e919b..0fc90454e 100644 --- a/packages/coding-agent/test/interactive-mode-compaction.test.ts +++ b/packages/coding-agent/test/interactive-mode-compaction.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test, vi } from "vitest"; -import { InteractiveMode } from "../src/modes/interactive/interactive-mode.js"; +import { InteractiveMode } from "../src/modes/interactive/interactive-mode.ts"; describe("InteractiveMode compaction events", () => { test("rebuilds chat and appends a synthetic compaction summary at the bottom", async () => { diff --git a/packages/coding-agent/test/interactive-mode-import-command.test.ts b/packages/coding-agent/test/interactive-mode-import-command.test.ts index 85575ec03..c2e5ae1fe 100644 --- a/packages/coding-agent/test/interactive-mode-import-command.test.ts +++ b/packages/coding-agent/test/interactive-mode-import-command.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from "vitest"; -import { SessionImportFileNotFoundError } from "../src/core/agent-session-runtime.js"; -import { InteractiveMode } from "../src/modes/interactive/interactive-mode.js"; +import { SessionImportFileNotFoundError } from "../src/core/agent-session-runtime.ts"; +import { InteractiveMode } from "../src/modes/interactive/interactive-mode.ts"; type PathCommand = "/export" | "/import"; diff --git a/packages/coding-agent/test/interactive-mode-status.test.ts b/packages/coding-agent/test/interactive-mode-status.test.ts index ba2b46c5f..d5a2c1594 100644 --- a/packages/coding-agent/test/interactive-mode-status.test.ts +++ b/packages/coding-agent/test/interactive-mode-status.test.ts @@ -2,10 +2,10 @@ import { homedir } from "node:os"; import * as path from "node:path"; import { type AutocompleteProvider, CombinedAutocompleteProvider, Container } from "@earendil-works/pi-tui"; import { beforeAll, describe, expect, test, vi } from "vitest"; -import type { AutocompleteProviderFactory } from "../src/core/extensions/types.js"; -import type { SourceInfo } from "../src/core/source-info.js"; -import { InteractiveMode } from "../src/modes/interactive/interactive-mode.js"; -import { initTheme } from "../src/modes/interactive/theme/theme.js"; +import type { AutocompleteProviderFactory } from "../src/core/extensions/types.ts"; +import type { SourceInfo } from "../src/core/source-info.ts"; +import { InteractiveMode } from "../src/modes/interactive/interactive-mode.ts"; +import { initTheme } from "../src/modes/interactive/theme/theme.ts"; function renderLastLine(container: Container, width = 120): string { const last = container.children[container.children.length - 1]; diff --git a/packages/coding-agent/test/interactive-mode-suspend.test.ts b/packages/coding-agent/test/interactive-mode-suspend.test.ts index 3f41fe2ea..996d2f1ab 100644 --- a/packages/coding-agent/test/interactive-mode-suspend.test.ts +++ b/packages/coding-agent/test/interactive-mode-suspend.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, test, vi } from "vitest"; -import { InteractiveMode } from "../src/modes/interactive/interactive-mode.js"; +import { InteractiveMode } from "../src/modes/interactive/interactive-mode.ts"; type FakeUi = { start: () => void; diff --git a/packages/coding-agent/test/keybindings-migration.test.ts b/packages/coding-agent/test/keybindings-migration.test.ts index 0799ff253..f393687c4 100644 --- a/packages/coding-agent/test/keybindings-migration.test.ts +++ b/packages/coding-agent/test/keybindings-migration.test.ts @@ -2,9 +2,9 @@ import * as fs from "node:fs"; import * as os from "node:os"; import * as path from "node:path"; import { afterEach, describe, expect, it } from "vitest"; -import { ENV_AGENT_DIR } from "../src/config.js"; -import { KeybindingsManager } from "../src/core/keybindings.js"; -import { runMigrations } from "../src/migrations.js"; +import { ENV_AGENT_DIR } from "../src/config.ts"; +import { KeybindingsManager } from "../src/core/keybindings.ts"; +import { runMigrations } from "../src/migrations.ts"; describe("keybindings migration", () => { const tempDirs: string[] = []; diff --git a/packages/coding-agent/test/model-registry.test.ts b/packages/coding-agent/test/model-registry.test.ts index 03434ea81..ad706ab5e 100644 --- a/packages/coding-agent/test/model-registry.test.ts +++ b/packages/coding-agent/test/model-registry.test.ts @@ -5,8 +5,8 @@ import type { AnthropicMessagesCompat, Api, Context, Model, OpenAICompletionsCom import { getApiProvider } from "@earendil-works/pi-ai"; import { getOAuthProvider } from "@earendil-works/pi-ai/oauth"; import { afterEach, beforeEach, describe, expect, test } from "vitest"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { clearApiKeyCache, ModelRegistry, type ProviderConfigInput } from "../src/core/model-registry.js"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { clearApiKeyCache, ModelRegistry, type ProviderConfigInput } from "../src/core/model-registry.ts"; describe("ModelRegistry", () => { let tempDir: string; diff --git a/packages/coding-agent/test/model-resolver.test.ts b/packages/coding-agent/test/model-resolver.test.ts index 69afd7565..7339200bc 100644 --- a/packages/coding-agent/test/model-resolver.test.ts +++ b/packages/coding-agent/test/model-resolver.test.ts @@ -5,7 +5,7 @@ import { findInitialModel, parseModelPattern, resolveCliModel, -} from "../src/core/model-resolver.js"; +} from "../src/core/model-resolver.ts"; // Mock models for testing const mockModels: Model<"anthropic-messages">[] = [ diff --git a/packages/coding-agent/test/oauth-selector.test.ts b/packages/coding-agent/test/oauth-selector.test.ts index 26fd993b4..7164db54b 100644 --- a/packages/coding-agent/test/oauth-selector.test.ts +++ b/packages/coding-agent/test/oauth-selector.test.ts @@ -1,12 +1,12 @@ import { setKeybindings } from "@earendil-works/pi-tui"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { KeybindingsManager } from "../src/core/keybindings.js"; -import { BUILT_IN_PROVIDER_DISPLAY_NAMES } from "../src/core/provider-display-names.js"; -import { OAuthSelectorComponent } from "../src/modes/interactive/components/oauth-selector.js"; -import { isApiKeyLoginProvider } from "../src/modes/interactive/interactive-mode.js"; -import { initTheme } from "../src/modes/interactive/theme/theme.js"; -import { stripAnsi } from "../src/utils/ansi.js"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { KeybindingsManager } from "../src/core/keybindings.ts"; +import { BUILT_IN_PROVIDER_DISPLAY_NAMES } from "../src/core/provider-display-names.ts"; +import { OAuthSelectorComponent } from "../src/modes/interactive/components/oauth-selector.ts"; +import { isApiKeyLoginProvider } from "../src/modes/interactive/interactive-mode.ts"; +import { initTheme } from "../src/modes/interactive/theme/theme.ts"; +import { stripAnsi } from "../src/utils/ansi.ts"; const originalOpenAiApiKey = process.env.OPENAI_API_KEY; diff --git a/packages/coding-agent/test/package-command-paths.test.ts b/packages/coding-agent/test/package-command-paths.test.ts index 03c8f4ca4..5e4a1a48a 100644 --- a/packages/coding-agent/test/package-command-paths.test.ts +++ b/packages/coding-agent/test/package-command-paths.test.ts @@ -2,8 +2,8 @@ import { mkdirSync, readFileSync, realpathSync, rmSync, writeFileSync } from "no import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import { ENV_AGENT_DIR, PACKAGE_NAME, VERSION } from "../src/config.js"; -import { main } from "../src/main.js"; +import { ENV_AGENT_DIR, PACKAGE_NAME, VERSION } from "../src/config.ts"; +import { main } from "../src/main.ts"; describe("package commands", () => { let tempDir: string; diff --git a/packages/coding-agent/test/package-manager-ssh.test.ts b/packages/coding-agent/test/package-manager-ssh.test.ts index 3dc04ab1d..1fa9b9173 100644 --- a/packages/coding-agent/test/package-manager-ssh.test.ts +++ b/packages/coding-agent/test/package-manager-ssh.test.ts @@ -2,8 +2,8 @@ import { mkdirSync, rmSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { DefaultPackageManager } from "../src/core/package-manager.js"; -import { SettingsManager } from "../src/core/settings-manager.js"; +import { DefaultPackageManager } from "../src/core/package-manager.ts"; +import { SettingsManager } from "../src/core/settings-manager.ts"; describe("Package Manager git source parsing", () => { let tempDir: string; diff --git a/packages/coding-agent/test/package-manager.test.ts b/packages/coding-agent/test/package-manager.test.ts index cc6afbc4f..9466d7338 100644 --- a/packages/coding-agent/test/package-manager.test.ts +++ b/packages/coding-agent/test/package-manager.test.ts @@ -4,8 +4,8 @@ import { tmpdir } from "node:os"; import { join, relative } from "node:path"; import { PassThrough } from "node:stream"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import { DefaultPackageManager, type ProgressEvent, type ResolvedResource } from "../src/core/package-manager.js"; -import { SettingsManager } from "../src/core/settings-manager.js"; +import { DefaultPackageManager, type ProgressEvent, type ResolvedResource } from "../src/core/package-manager.ts"; +import { SettingsManager } from "../src/core/settings-manager.ts"; function normalizeForMatch(value: string): string { return value.replace(/\\/g, "/"); @@ -1747,7 +1747,7 @@ Content`, // Main entry point writeFileSync( join(pkgDir, "extensions", "subagent", "index.ts"), - `import { helper } from "./agents.js"; + `import { helper } from "./agents.ts"; export default function(api) { api.registerTool({ name: "test", description: "test", execute: async () => helper() }); }`, ); // Helper module (should NOT be loaded as standalone extension) @@ -1803,7 +1803,7 @@ export default function(api) { api.registerTool({ name: "test", description: "te // Subdirectory with index.ts + helpers writeFileSync( join(pkgDir, "extensions", "complex", "index.ts"), - "import { a } from './a.js'; export default function(api) {}", + "import { a } from './a.ts'; export default function(api) {}", ); writeFileSync(join(pkgDir, "extensions", "complex", "a.ts"), "export const a = 1;"); writeFileSync(join(pkgDir, "extensions", "complex", "b.ts"), "export const b = 2;"); diff --git a/packages/coding-agent/test/path-utils.test.ts b/packages/coding-agent/test/path-utils.test.ts index 2ddf127c4..85c2605f4 100644 --- a/packages/coding-agent/test/path-utils.test.ts +++ b/packages/coding-agent/test/path-utils.test.ts @@ -2,7 +2,7 @@ import { mkdtempSync, readdirSync, rmdirSync, unlinkSync, writeFileSync } from " import { tmpdir } from "node:os"; import { join, resolve } from "node:path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { expandPath, resolveReadPath, resolveToCwd } from "../src/core/tools/path-utils.js"; +import { expandPath, resolveReadPath, resolveToCwd } from "../src/core/tools/path-utils.ts"; describe("path-utils", () => { describe("expandPath", () => { diff --git a/packages/coding-agent/test/paths.test.ts b/packages/coding-agent/test/paths.test.ts index 208da3f91..01151635d 100644 --- a/packages/coding-agent/test/paths.test.ts +++ b/packages/coding-agent/test/paths.test.ts @@ -2,7 +2,7 @@ import { mkdirSync, mkdtempSync, realpathSync, rmSync, symlinkSync, writeFileSyn import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, describe, expect, it } from "vitest"; -import { canonicalizePath, getCwdRelativePath, isLocalPath } from "../src/utils/paths.js"; +import { canonicalizePath, getCwdRelativePath, isLocalPath } from "../src/utils/paths.ts"; let tempDir: string; diff --git a/packages/coding-agent/test/pi-user-agent.test.ts b/packages/coding-agent/test/pi-user-agent.test.ts index 64439b210..1c49ca29d 100644 --- a/packages/coding-agent/test/pi-user-agent.test.ts +++ b/packages/coding-agent/test/pi-user-agent.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { getPiUserAgent } from "../src/utils/pi-user-agent.js"; +import { getPiUserAgent } from "../src/utils/pi-user-agent.ts"; describe("getPiUserAgent", () => { it("formats the user agent expected by pi.dev", () => { diff --git a/packages/coding-agent/test/plan-mode-utils.test.ts b/packages/coding-agent/test/plan-mode-utils.test.ts index 8d71ba956..db4b31ec1 100644 --- a/packages/coding-agent/test/plan-mode-utils.test.ts +++ b/packages/coding-agent/test/plan-mode-utils.test.ts @@ -6,7 +6,7 @@ import { isSafeCommand, markCompletedSteps, type TodoItem, -} from "../examples/extensions/plan-mode/utils.js"; +} from "../examples/extensions/plan-mode/utils.ts"; describe("isSafeCommand", () => { describe("safe commands", () => { diff --git a/packages/coding-agent/test/print-mode.test.ts b/packages/coding-agent/test/print-mode.test.ts index bbf6756e0..30d7251de 100644 --- a/packages/coding-agent/test/print-mode.test.ts +++ b/packages/coding-agent/test/print-mode.test.ts @@ -1,7 +1,7 @@ import type { AssistantMessage, ImageContent } from "@earendil-works/pi-ai"; import { afterEach, describe, expect, it, vi } from "vitest"; -import type { SessionShutdownEvent } from "../src/index.js"; -import { runPrintMode } from "../src/modes/print-mode.js"; +import type { SessionShutdownEvent } from "../src/index.ts"; +import { runPrintMode } from "../src/modes/print-mode.ts"; type EmitEvent = SessionShutdownEvent; diff --git a/packages/coding-agent/test/prompt-templates.test.ts b/packages/coding-agent/test/prompt-templates.test.ts index 10cecaca7..1e4bcf5ca 100644 --- a/packages/coding-agent/test/prompt-templates.test.ts +++ b/packages/coding-agent/test/prompt-templates.test.ts @@ -12,13 +12,13 @@ import { mkdirSync, rmSync, writeFileSync } from "fs"; import { tmpdir } from "os"; import { join } from "path"; import { afterAll, describe, expect, test } from "vitest"; -import { getAgentDir } from "../src/config.js"; +import { getAgentDir } from "../src/config.ts"; import { expandPromptTemplate, loadPromptTemplates, parseCommandArgs, substituteArgs, -} from "../src/core/prompt-templates.js"; +} from "../src/core/prompt-templates.ts"; // ============================================================================ // substituteArgs diff --git a/packages/coding-agent/test/resource-loader.test.ts b/packages/coding-agent/test/resource-loader.test.ts index 01adc9b36..f023855a3 100644 --- a/packages/coding-agent/test/resource-loader.test.ts +++ b/packages/coding-agent/test/resource-loader.test.ts @@ -2,14 +2,14 @@ import { mkdirSync, readFileSync, rmSync, symlinkSync, writeFileSync } from "nod import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { ExtensionRunner } from "../src/core/extensions/runner.js"; -import { ModelRegistry } from "../src/core/model-registry.js"; -import { DefaultResourceLoader } from "../src/core/resource-loader.js"; -import { SessionManager } from "../src/core/session-manager.js"; -import { SettingsManager } from "../src/core/settings-manager.js"; -import type { Skill } from "../src/core/skills.js"; -import { createSyntheticSourceInfo } from "../src/core/source-info.js"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { ExtensionRunner } from "../src/core/extensions/runner.ts"; +import { ModelRegistry } from "../src/core/model-registry.ts"; +import { DefaultResourceLoader } from "../src/core/resource-loader.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; +import { SettingsManager } from "../src/core/settings-manager.ts"; +import type { Skill } from "../src/core/skills.ts"; +import { createSyntheticSourceInfo } from "../src/core/source-info.ts"; describe("DefaultResourceLoader", () => { let tempDir: string; diff --git a/packages/coding-agent/test/restore-sandbox-env.test.ts b/packages/coding-agent/test/restore-sandbox-env.test.ts index fa9036eb2..2fb2767f6 100644 --- a/packages/coding-agent/test/restore-sandbox-env.test.ts +++ b/packages/coding-agent/test/restore-sandbox-env.test.ts @@ -6,7 +6,7 @@ vi.mock("node:fs", () => ({ readFileSync, })); -const { restoreSandboxEnv } = await import("../src/bun/restore-sandbox-env.js"); +const { restoreSandboxEnv } = await import("../src/bun/restore-sandbox-env.ts"); describe("restoreSandboxEnv", () => { it("does nothing when not running under bun", () => { diff --git a/packages/coding-agent/test/rpc-client-clone.test.ts b/packages/coding-agent/test/rpc-client-clone.test.ts index f05caa4a6..083f20c99 100644 --- a/packages/coding-agent/test/rpc-client-clone.test.ts +++ b/packages/coding-agent/test/rpc-client-clone.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from "vitest"; -import { RpcClient } from "../src/modes/rpc/rpc-client.js"; +import { RpcClient } from "../src/modes/rpc/rpc-client.ts"; type RpcClientPrivate = { send: (command: { type: string }) => Promise; diff --git a/packages/coding-agent/test/rpc-example.ts b/packages/coding-agent/test/rpc-example.ts index d82bd9349..aaa24fb1f 100644 --- a/packages/coding-agent/test/rpc-example.ts +++ b/packages/coding-agent/test/rpc-example.ts @@ -1,7 +1,7 @@ import { dirname, join } from "node:path"; import * as readline from "node:readline"; import { fileURLToPath } from "node:url"; -import { RpcClient } from "../src/modes/rpc/rpc-client.js"; +import { RpcClient } from "../src/modes/rpc/rpc-client.ts"; const __dirname = dirname(fileURLToPath(import.meta.url)); diff --git a/packages/coding-agent/test/rpc-jsonl.test.ts b/packages/coding-agent/test/rpc-jsonl.test.ts index f8ca4538f..c8fc89e13 100644 --- a/packages/coding-agent/test/rpc-jsonl.test.ts +++ b/packages/coding-agent/test/rpc-jsonl.test.ts @@ -1,6 +1,6 @@ import { Readable } from "node:stream"; import { describe, expect, test } from "vitest"; -import { attachJsonlLineReader, serializeJsonLine } from "../src/modes/rpc/jsonl.js"; +import { attachJsonlLineReader, serializeJsonLine } from "../src/modes/rpc/jsonl.ts"; describe("RPC JSONL framing", () => { test("serializes strict JSONL records without escaping Unicode separators", () => { diff --git a/packages/coding-agent/test/rpc-prompt-response-semantics.test.ts b/packages/coding-agent/test/rpc-prompt-response-semantics.test.ts index 07fac54d5..1504a6227 100644 --- a/packages/coding-agent/test/rpc-prompt-response-semantics.test.ts +++ b/packages/coding-agent/test/rpc-prompt-response-semantics.test.ts @@ -10,14 +10,14 @@ import { type Model, } from "@earendil-works/pi-ai"; import { afterEach, describe, expect, it, vi } from "vitest"; -import { AgentSession } from "../src/core/agent-session.js"; -import type { AgentSessionRuntime } from "../src/core/agent-session-runtime.js"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { ModelRegistry } from "../src/core/model-registry.js"; -import { SessionManager } from "../src/core/session-manager.js"; -import { SettingsManager } from "../src/core/settings-manager.js"; -import { runRpcMode } from "../src/modes/rpc/rpc-mode.js"; -import { createTestResourceLoader } from "./utilities.js"; +import { AgentSession } from "../src/core/agent-session.ts"; +import type { AgentSessionRuntime } from "../src/core/agent-session-runtime.ts"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { ModelRegistry } from "../src/core/model-registry.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; +import { SettingsManager } from "../src/core/settings-manager.ts"; +import { runRpcMode } from "../src/modes/rpc/rpc-mode.ts"; +import { createTestResourceLoader } from "./utilities.ts"; const rpcIo = vi.hoisted(() => ({ outputLines: [] as string[], diff --git a/packages/coding-agent/test/rpc.test.ts b/packages/coding-agent/test/rpc.test.ts index 9d4a97d49..87447d3bf 100644 --- a/packages/coding-agent/test/rpc.test.ts +++ b/packages/coding-agent/test/rpc.test.ts @@ -4,7 +4,7 @@ import { dirname, join } from "node:path"; import { fileURLToPath } from "node:url"; import type { AgentEvent } from "@earendil-works/pi-agent-core"; import { afterEach, beforeEach, describe, expect, test } from "vitest"; -import { RpcClient } from "../src/modes/rpc/rpc-client.js"; +import { RpcClient } from "../src/modes/rpc/rpc-client.ts"; const __dirname = dirname(fileURLToPath(import.meta.url)); diff --git a/packages/coding-agent/test/sdk-codex-cache-probe-tool-loop.ts b/packages/coding-agent/test/sdk-codex-cache-probe-tool-loop.ts index fe349646d..a6338d144 100644 --- a/packages/coding-agent/test/sdk-codex-cache-probe-tool-loop.ts +++ b/packages/coding-agent/test/sdk-codex-cache-probe-tool-loop.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env tsx +#!/usr/bin/env node /** * Manual SDK probe for OpenAI Codex prompt caching through the tool loop. * @@ -24,15 +24,15 @@ import { import { getOpenAICodexWebSocketDebugStats, streamSimpleOpenAICodexResponses, -} from "../../ai/src/providers/openai-codex-responses.js"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { createExtensionRuntime } from "../src/core/extensions/loader.js"; -import type { ToolDefinition } from "../src/core/extensions/types.js"; -import { ModelRegistry } from "../src/core/model-registry.js"; -import type { ResourceLoader } from "../src/core/resource-loader.js"; -import { createAgentSession } from "../src/core/sdk.js"; -import { SessionManager } from "../src/core/session-manager.js"; -import { SettingsManager } from "../src/core/settings-manager.js"; +} from "../../ai/src/providers/openai-codex-responses.ts"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { createExtensionRuntime } from "../src/core/extensions/loader.ts"; +import type { ToolDefinition } from "../src/core/extensions/types.ts"; +import { ModelRegistry } from "../src/core/model-registry.ts"; +import type { ResourceLoader } from "../src/core/resource-loader.ts"; +import { createAgentSession } from "../src/core/sdk.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; +import { SettingsManager } from "../src/core/settings-manager.ts"; type Transport = "sse" | "websocket" | "websocket-cached" | "auto"; @@ -123,7 +123,7 @@ function parseArgs(argv: string[]): Args { } function printHelp(): void { - console.log(`Usage: npx tsx test/sdk-codex-cache-probe-tool-loop.ts [options] + console.log(`Usage: node test/sdk-codex-cache-probe-tool-loop.ts [options] Options: --turns Number of turns to run. Must be between ${MIN_TURNS} and ${MAX_TURNS}. Default: ${DEFAULT_TURNS} diff --git a/packages/coding-agent/test/sdk-openrouter-attribution.test.ts b/packages/coding-agent/test/sdk-openrouter-attribution.test.ts index e667accf8..70bb87091 100644 --- a/packages/coding-agent/test/sdk-openrouter-attribution.test.ts +++ b/packages/coding-agent/test/sdk-openrouter-attribution.test.ts @@ -9,11 +9,11 @@ import { type SimpleStreamOptions, } from "@earendil-works/pi-ai"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { ModelRegistry } from "../src/core/model-registry.js"; -import { createAgentSession } from "../src/core/sdk.js"; -import { SessionManager } from "../src/core/session-manager.js"; -import { SettingsManager } from "../src/core/settings-manager.js"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { ModelRegistry } from "../src/core/model-registry.ts"; +import { createAgentSession } from "../src/core/sdk.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; +import { SettingsManager } from "../src/core/settings-manager.ts"; describe("createAgentSession OpenRouter attribution headers", () => { let tempDir: string; diff --git a/packages/coding-agent/test/sdk-session-manager.test.ts b/packages/coding-agent/test/sdk-session-manager.test.ts index 51498f507..cb7e505c7 100644 --- a/packages/coding-agent/test/sdk-session-manager.test.ts +++ b/packages/coding-agent/test/sdk-session-manager.test.ts @@ -3,8 +3,8 @@ import { tmpdir } from "node:os"; import { join } from "node:path"; import { getModel } from "@earendil-works/pi-ai"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { createAgentSession } from "../src/core/sdk.js"; -import { SessionManager } from "../src/core/session-manager.js"; +import { createAgentSession } from "../src/core/sdk.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; describe("createAgentSession session manager defaults", () => { let tempDir: string; diff --git a/packages/coding-agent/test/sdk-skills.test.ts b/packages/coding-agent/test/sdk-skills.test.ts index 5f95e67b9..49ade057e 100644 --- a/packages/coding-agent/test/sdk-skills.test.ts +++ b/packages/coding-agent/test/sdk-skills.test.ts @@ -2,11 +2,11 @@ import { mkdirSync, rmSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { createExtensionRuntime } from "../src/core/extensions/loader.js"; -import type { ResourceLoader } from "../src/core/resource-loader.js"; -import { createAgentSession } from "../src/core/sdk.js"; -import { SessionManager } from "../src/core/session-manager.js"; -import { createSyntheticSourceInfo } from "../src/core/source-info.js"; +import { createExtensionRuntime } from "../src/core/extensions/loader.ts"; +import type { ResourceLoader } from "../src/core/resource-loader.ts"; +import { createAgentSession } from "../src/core/sdk.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; +import { createSyntheticSourceInfo } from "../src/core/source-info.ts"; describe("createAgentSession skills option", () => { let tempDir: string; diff --git a/packages/coding-agent/test/session-cwd.test.ts b/packages/coding-agent/test/session-cwd.test.ts index 72ce6014b..8a7d23fca 100644 --- a/packages/coding-agent/test/session-cwd.test.ts +++ b/packages/coding-agent/test/session-cwd.test.ts @@ -2,9 +2,9 @@ import { mkdirSync, rmSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, describe, expect, it } from "vitest"; -import { type CreateAgentSessionRuntimeFactory, createAgentSessionRuntime } from "../src/core/agent-session-runtime.js"; -import { getMissingSessionCwdIssue, MissingSessionCwdError } from "../src/core/session-cwd.js"; -import { SessionManager } from "../src/core/session-manager.js"; +import { type CreateAgentSessionRuntimeFactory, createAgentSessionRuntime } from "../src/core/agent-session-runtime.ts"; +import { getMissingSessionCwdIssue, MissingSessionCwdError } from "../src/core/session-cwd.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; function createTempDir(name: string): string { const dir = join(tmpdir(), `${name}-${Date.now()}-${Math.random().toString(36).slice(2)}`); diff --git a/packages/coding-agent/test/session-info-modified-timestamp.test.ts b/packages/coding-agent/test/session-info-modified-timestamp.test.ts index 1dd1cb415..a4322e460 100644 --- a/packages/coding-agent/test/session-info-modified-timestamp.test.ts +++ b/packages/coding-agent/test/session-info-modified-timestamp.test.ts @@ -3,9 +3,9 @@ import { stat } from "node:fs/promises"; import { tmpdir } from "node:os"; import { dirname, join } from "node:path"; import { afterEach, beforeAll, describe, expect, it, vi } from "vitest"; -import type { SessionHeader } from "../src/core/session-manager.js"; -import { SessionManager } from "../src/core/session-manager.js"; -import { initTheme } from "../src/modes/interactive/theme/theme.js"; +import type { SessionHeader } from "../src/core/session-manager.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; +import { initTheme } from "../src/modes/interactive/theme/theme.ts"; function createSessionFile(path: string): void { const header: SessionHeader = { diff --git a/packages/coding-agent/test/session-manager/build-context.test.ts b/packages/coding-agent/test/session-manager/build-context.test.ts index 5bc336a66..a0d8c8e89 100644 --- a/packages/coding-agent/test/session-manager/build-context.test.ts +++ b/packages/coding-agent/test/session-manager/build-context.test.ts @@ -7,7 +7,7 @@ import { type SessionEntry, type SessionMessageEntry, type ThinkingLevelChangeEntry, -} from "../../src/core/session-manager.js"; +} from "../../src/core/session-manager.ts"; function msg(id: string, parentId: string | null, role: "user" | "assistant", text: string): SessionMessageEntry { const base = { type: "message" as const, id, parentId, timestamp: "2025-01-01T00:00:00Z" }; diff --git a/packages/coding-agent/test/session-manager/custom-session-id.test.ts b/packages/coding-agent/test/session-manager/custom-session-id.test.ts index 72eed4658..f9c6ad0d7 100644 --- a/packages/coding-agent/test/session-manager/custom-session-id.test.ts +++ b/packages/coding-agent/test/session-manager/custom-session-id.test.ts @@ -2,7 +2,7 @@ import { mkdtempSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { describe, expect, it } from "vitest"; -import { SessionManager } from "../../src/core/session-manager.js"; +import { SessionManager } from "../../src/core/session-manager.ts"; const UUID_V7_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/; diff --git a/packages/coding-agent/test/session-manager/file-operations.test.ts b/packages/coding-agent/test/session-manager/file-operations.test.ts index 16ef89e66..c744c3c35 100644 --- a/packages/coding-agent/test/session-manager/file-operations.test.ts +++ b/packages/coding-agent/test/session-manager/file-operations.test.ts @@ -2,7 +2,7 @@ import { mkdirSync, readFileSync, rmSync, writeFileSync } from "fs"; import { tmpdir } from "os"; import { join } from "path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { findMostRecentSession, loadEntriesFromFile, SessionManager } from "../../src/core/session-manager.js"; +import { findMostRecentSession, loadEntriesFromFile, SessionManager } from "../../src/core/session-manager.ts"; describe("loadEntriesFromFile", () => { let tempDir: string; diff --git a/packages/coding-agent/test/session-manager/labels.test.ts b/packages/coding-agent/test/session-manager/labels.test.ts index e703abf81..7500746e1 100644 --- a/packages/coding-agent/test/session-manager/labels.test.ts +++ b/packages/coding-agent/test/session-manager/labels.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { type LabelEntry, SessionManager } from "../../src/core/session-manager.js"; +import { type LabelEntry, SessionManager } from "../../src/core/session-manager.ts"; describe("SessionManager labels", () => { it("sets and gets labels", () => { diff --git a/packages/coding-agent/test/session-manager/migration.test.ts b/packages/coding-agent/test/session-manager/migration.test.ts index 1142da378..057742310 100644 --- a/packages/coding-agent/test/session-manager/migration.test.ts +++ b/packages/coding-agent/test/session-manager/migration.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { type FileEntry, migrateSessionEntries } from "../../src/core/session-manager.js"; +import { type FileEntry, migrateSessionEntries } from "../../src/core/session-manager.ts"; describe("migrateSessionEntries", () => { it("should add id/parentId to v1 entries", () => { diff --git a/packages/coding-agent/test/session-manager/save-entry.test.ts b/packages/coding-agent/test/session-manager/save-entry.test.ts index a384a0742..91019b93d 100644 --- a/packages/coding-agent/test/session-manager/save-entry.test.ts +++ b/packages/coding-agent/test/session-manager/save-entry.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { type CustomEntry, SessionManager } from "../../src/core/session-manager.js"; +import { type CustomEntry, SessionManager } from "../../src/core/session-manager.ts"; describe("SessionManager.saveCustomEntry", () => { it("saves custom entries and includes them in tree traversal", () => { diff --git a/packages/coding-agent/test/session-manager/tree-traversal.test.ts b/packages/coding-agent/test/session-manager/tree-traversal.test.ts index 2cfb10bc4..e47ec9095 100644 --- a/packages/coding-agent/test/session-manager/tree-traversal.test.ts +++ b/packages/coding-agent/test/session-manager/tree-traversal.test.ts @@ -2,8 +2,8 @@ import { existsSync, mkdirSync, readFileSync, rmSync } from "fs"; import { tmpdir } from "os"; import { join } from "path"; import { describe, expect, it } from "vitest"; -import { type CustomEntry, SessionManager } from "../../src/core/session-manager.js"; -import { assistantMsg, userMsg } from "../utilities.js"; +import { type CustomEntry, SessionManager } from "../../src/core/session-manager.ts"; +import { assistantMsg, userMsg } from "../utilities.ts"; describe("SessionManager append and tree traversal", () => { describe("append operations", () => { diff --git a/packages/coding-agent/test/session-selector-path-delete.test.ts b/packages/coding-agent/test/session-selector-path-delete.test.ts index 618ceef75..52cae4860 100644 --- a/packages/coding-agent/test/session-selector-path-delete.test.ts +++ b/packages/coding-agent/test/session-selector-path-delete.test.ts @@ -3,10 +3,10 @@ import { tmpdir } from "node:os"; import { join } from "node:path"; import { setKeybindings } from "@earendil-works/pi-tui"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import { KeybindingsManager } from "../src/core/keybindings.js"; -import type { SessionInfo } from "../src/core/session-manager.js"; -import { SessionSelectorComponent } from "../src/modes/interactive/components/session-selector.js"; -import { initTheme } from "../src/modes/interactive/theme/theme.js"; +import { KeybindingsManager } from "../src/core/keybindings.ts"; +import type { SessionInfo } from "../src/core/session-manager.ts"; +import { SessionSelectorComponent } from "../src/modes/interactive/components/session-selector.ts"; +import { initTheme } from "../src/modes/interactive/theme/theme.ts"; type Deferred = { promise: Promise; diff --git a/packages/coding-agent/test/session-selector-rename.test.ts b/packages/coding-agent/test/session-selector-rename.test.ts index f91d6ebf6..d535496c8 100644 --- a/packages/coding-agent/test/session-selector-rename.test.ts +++ b/packages/coding-agent/test/session-selector-rename.test.ts @@ -1,9 +1,9 @@ import { setKeybindings } from "@earendil-works/pi-tui"; import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { KeybindingsManager } from "../src/core/keybindings.js"; -import type { SessionInfo } from "../src/core/session-manager.js"; -import { SessionSelectorComponent } from "../src/modes/interactive/components/session-selector.js"; -import { initTheme } from "../src/modes/interactive/theme/theme.js"; +import { KeybindingsManager } from "../src/core/keybindings.ts"; +import type { SessionInfo } from "../src/core/session-manager.ts"; +import { SessionSelectorComponent } from "../src/modes/interactive/components/session-selector.ts"; +import { initTheme } from "../src/modes/interactive/theme/theme.ts"; async function flushPromises(): Promise { await new Promise((resolve) => { diff --git a/packages/coding-agent/test/session-selector-search.test.ts b/packages/coding-agent/test/session-selector-search.test.ts index f2ffbe1c5..c1aed7137 100644 --- a/packages/coding-agent/test/session-selector-search.test.ts +++ b/packages/coding-agent/test/session-selector-search.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import type { SessionInfo } from "../src/core/session-manager.js"; -import { filterAndSortSessions } from "../src/modes/interactive/components/session-selector-search.js"; +import type { SessionInfo } from "../src/core/session-manager.ts"; +import { filterAndSortSessions } from "../src/modes/interactive/components/session-selector-search.ts"; function makeSession( overrides: Partial & { id: string; modified: Date; allMessagesText: string }, diff --git a/packages/coding-agent/test/settings-manager-bug.test.ts b/packages/coding-agent/test/settings-manager-bug.test.ts index b79fd9f65..92cc3a821 100644 --- a/packages/coding-agent/test/settings-manager-bug.test.ts +++ b/packages/coding-agent/test/settings-manager-bug.test.ts @@ -1,7 +1,7 @@ import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "fs"; import { join } from "path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { SettingsManager } from "../src/core/settings-manager.js"; +import { SettingsManager } from "../src/core/settings-manager.ts"; /** * Tests for the fix to a bug where external file changes to arrays were overwritten. diff --git a/packages/coding-agent/test/skills.test.ts b/packages/coding-agent/test/skills.test.ts index 36c02e872..039801994 100644 --- a/packages/coding-agent/test/skills.test.ts +++ b/packages/coding-agent/test/skills.test.ts @@ -1,9 +1,9 @@ import { homedir } from "os"; import { join, resolve } from "path"; import { describe, expect, it } from "vitest"; -import type { ResourceDiagnostic } from "../src/core/diagnostics.js"; -import { formatSkillsForPrompt, loadSkills, loadSkillsFromDir, type Skill } from "../src/core/skills.js"; -import { createSyntheticSourceInfo } from "../src/core/source-info.js"; +import type { ResourceDiagnostic } from "../src/core/diagnostics.ts"; +import { formatSkillsForPrompt, loadSkills, loadSkillsFromDir, type Skill } from "../src/core/skills.ts"; +import { createSyntheticSourceInfo } from "../src/core/source-info.ts"; const fixturesDir = resolve(__dirname, "fixtures/skills"); const collisionFixturesDir = resolve(__dirname, "fixtures/skills-collision"); diff --git a/packages/coding-agent/test/stdout-cleanliness.test.ts b/packages/coding-agent/test/stdout-cleanliness.test.ts index f9455f89c..f6c426a19 100644 --- a/packages/coding-agent/test/stdout-cleanliness.test.ts +++ b/packages/coding-agent/test/stdout-cleanliness.test.ts @@ -3,10 +3,9 @@ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { join, resolve } from "node:path"; import { afterEach, describe, expect, it } from "vitest"; -import { ENV_AGENT_DIR } from "../src/config.js"; +import { ENV_AGENT_DIR } from "../src/config.ts"; const cliPath = resolve(__dirname, "../src/cli.ts"); -const tsxPath = resolve(__dirname, "../../../node_modules/tsx/dist/cli.mjs"); const tempDirs: string[] = []; @@ -55,7 +54,7 @@ async function runCli(args: string[]): Promise<{ stdout: string; stderr: string; ); return await new Promise((resolvePromise, reject) => { - const child = spawn(process.execPath, [tsxPath, cliPath, ...args], { + const child = spawn(process.execPath, [cliPath, ...args], { cwd: projectDir, env: { ...process.env, diff --git a/packages/coding-agent/test/streaming-render-debug.ts b/packages/coding-agent/test/streaming-render-debug.ts index ffd4cc89b..315c664dd 100644 --- a/packages/coding-agent/test/streaming-render-debug.ts +++ b/packages/coding-agent/test/streaming-render-debug.ts @@ -9,8 +9,8 @@ import { ProcessTerminal, TUI } from "@earendil-works/pi-tui"; import { readFileSync } from "fs"; import { dirname, join } from "path"; import { fileURLToPath } from "url"; -import { AssistantMessageComponent } from "../src/modes/interactive/components/assistant-message.js"; -import { initTheme } from "../src/modes/interactive/theme/theme.js"; +import { AssistantMessageComponent } from "../src/modes/interactive/components/assistant-message.ts"; +import { initTheme } from "../src/modes/interactive/theme/theme.ts"; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/packages/coding-agent/test/suite/agent-session-bash-persistence.test.ts b/packages/coding-agent/test/suite/agent-session-bash-persistence.test.ts index f59146b40..efd51cfcf 100644 --- a/packages/coding-agent/test/suite/agent-session-bash-persistence.test.ts +++ b/packages/coding-agent/test/suite/agent-session-bash-persistence.test.ts @@ -3,8 +3,8 @@ import type { AgentTool } from "@earendil-works/pi-agent-core"; import { fauxAssistantMessage, fauxToolCall } from "@earendil-works/pi-ai"; import { Type } from "typebox"; import { afterEach, describe, expect, it } from "vitest"; -import type { BashOperations } from "../../src/core/tools/bash.js"; -import { createHarness, type Harness } from "./harness.js"; +import type { BashOperations } from "../../src/core/tools/bash.ts"; +import { createHarness, type Harness } from "./harness.ts"; function getEntryTypes(harness: Harness): string[] { return harness.sessionManager.getEntries().map((entry) => entry.type); diff --git a/packages/coding-agent/test/suite/agent-session-compaction.test.ts b/packages/coding-agent/test/suite/agent-session-compaction.test.ts index 8ca5d0e5c..e04732d08 100644 --- a/packages/coding-agent/test/suite/agent-session-compaction.test.ts +++ b/packages/coding-agent/test/suite/agent-session-compaction.test.ts @@ -5,7 +5,7 @@ import { type Model, } from "@earendil-works/pi-ai"; import { afterEach, describe, expect, it, vi } from "vitest"; -import { createHarness, type Harness } from "./harness.js"; +import { createHarness, type Harness } from "./harness.ts"; type SessionWithCompactionInternals = { _checkCompaction: (assistantMessage: AssistantMessage, skipAbortedCheck?: boolean) => Promise; diff --git a/packages/coding-agent/test/suite/agent-session-model-extension.test.ts b/packages/coding-agent/test/suite/agent-session-model-extension.test.ts index 552711477..f6469884b 100644 --- a/packages/coding-agent/test/suite/agent-session-model-extension.test.ts +++ b/packages/coding-agent/test/suite/agent-session-model-extension.test.ts @@ -2,8 +2,8 @@ import type { AgentTool, ThinkingLevel } from "@earendil-works/pi-agent-core"; import { fauxAssistantMessage, fauxToolCall, type Model } from "@earendil-works/pi-ai"; import { Type } from "typebox"; import { afterEach, describe, expect, it } from "vitest"; -import type { ExtensionAPI } from "../../src/index.js"; -import { createHarness, getAssistantTexts, type Harness } from "./harness.js"; +import type { ExtensionAPI } from "../../src/index.ts"; +import { createHarness, getAssistantTexts, type Harness } from "./harness.ts"; describe("AgentSession model and extension characterization", () => { const harnesses: Harness[] = []; diff --git a/packages/coding-agent/test/suite/agent-session-prompt.test.ts b/packages/coding-agent/test/suite/agent-session-prompt.test.ts index e40a4fe37..dde25f61e 100644 --- a/packages/coding-agent/test/suite/agent-session-prompt.test.ts +++ b/packages/coding-agent/test/suite/agent-session-prompt.test.ts @@ -5,10 +5,10 @@ import type { AgentTool } from "@earendil-works/pi-agent-core"; import { fauxAssistantMessage, fauxToolCall, type Model } from "@earendil-works/pi-ai"; import { Type } from "typebox"; import { afterEach, describe, expect, it } from "vitest"; -import type { PromptTemplate } from "../../src/core/prompt-templates.js"; -import { createSyntheticSourceInfo } from "../../src/core/source-info.js"; -import { createTestResourceLoader } from "../utilities.js"; -import { createHarness, getMessageText, type Harness } from "./harness.js"; +import type { PromptTemplate } from "../../src/core/prompt-templates.ts"; +import { createSyntheticSourceInfo } from "../../src/core/source-info.ts"; +import { createTestResourceLoader } from "../utilities.ts"; +import { createHarness, getMessageText, type Harness } from "./harness.ts"; describe("AgentSession prompt characterization", () => { const harnesses: Harness[] = []; diff --git a/packages/coding-agent/test/suite/agent-session-queue.test.ts b/packages/coding-agent/test/suite/agent-session-queue.test.ts index 06aebcf87..3db7c14b3 100644 --- a/packages/coding-agent/test/suite/agent-session-queue.test.ts +++ b/packages/coding-agent/test/suite/agent-session-queue.test.ts @@ -3,7 +3,7 @@ import { fauxAssistantMessage, fauxToolCall } from "@earendil-works/pi-ai"; import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; import { Type } from "typebox"; import { afterEach, describe, expect, it } from "vitest"; -import { createHarness, getAssistantTexts, getMessageText, getUserTexts, type Harness } from "./harness.js"; +import { createHarness, getAssistantTexts, getMessageText, getUserTexts, type Harness } from "./harness.ts"; async function createWaitingHarness( options: { diff --git a/packages/coding-agent/test/suite/agent-session-retry-events.test.ts b/packages/coding-agent/test/suite/agent-session-retry-events.test.ts index ff3e5e95a..946f4da9e 100644 --- a/packages/coding-agent/test/suite/agent-session-retry-events.test.ts +++ b/packages/coding-agent/test/suite/agent-session-retry-events.test.ts @@ -2,7 +2,7 @@ import type { AgentTool } from "@earendil-works/pi-agent-core"; import { fauxAssistantMessage, fauxThinking, fauxToolCall } from "@earendil-works/pi-ai"; import { Type } from "typebox"; import { afterEach, describe, expect, it } from "vitest"; -import { createHarness, type Harness } from "./harness.js"; +import { createHarness, type Harness } from "./harness.ts"; function normalizeEventOrder(events: Harness["events"]): string[] { const normalized: string[] = []; diff --git a/packages/coding-agent/test/suite/agent-session-runtime.test.ts b/packages/coding-agent/test/suite/agent-session-runtime.test.ts index fb8b21679..4d839ecfb 100644 --- a/packages/coding-agent/test/suite/agent-session-runtime.test.ts +++ b/packages/coding-agent/test/suite/agent-session-runtime.test.ts @@ -8,9 +8,9 @@ import { createAgentSessionFromServices, createAgentSessionRuntime, createAgentSessionServices, -} from "../../src/core/agent-session-runtime.js"; -import { AuthStorage } from "../../src/core/auth-storage.js"; -import { SessionManager } from "../../src/core/session-manager.js"; +} from "../../src/core/agent-session-runtime.ts"; +import { AuthStorage } from "../../src/core/auth-storage.ts"; +import { SessionManager } from "../../src/core/session-manager.ts"; import type { ExtensionAPI, ExtensionFactory, @@ -18,7 +18,7 @@ import type { SessionBeforeSwitchEvent, SessionShutdownEvent, SessionStartEvent, -} from "../../src/index.js"; +} from "../../src/index.ts"; type RecordedSessionEvent = | SessionBeforeSwitchEvent diff --git a/packages/coding-agent/test/suite/harness.ts b/packages/coding-agent/test/suite/harness.ts index 16a8182ec..090d56837 100644 --- a/packages/coding-agent/test/suite/harness.ts +++ b/packages/coding-agent/test/suite/harness.ts @@ -9,20 +9,20 @@ import type { AgentMessage, AgentTool } from "@earendil-works/pi-agent-core"; import { Agent } from "@earendil-works/pi-agent-core"; import type { FauxModelDefinition, FauxProviderRegistration, FauxResponseStep, Model } from "@earendil-works/pi-ai"; import { registerFauxProvider } from "@earendil-works/pi-ai"; -import { AgentSession, type AgentSessionEvent } from "../../src/core/agent-session.js"; -import { AuthStorage } from "../../src/core/auth-storage.js"; -import type { ExtensionRunner } from "../../src/core/extensions/index.js"; -import { convertToLlm } from "../../src/core/messages.js"; -import { ModelRegistry } from "../../src/core/model-registry.js"; -import { SessionManager } from "../../src/core/session-manager.js"; -import type { Settings } from "../../src/core/settings-manager.js"; -import { SettingsManager } from "../../src/core/settings-manager.js"; -import type { ExtensionFactory, ResourceLoader } from "../../src/index.js"; +import { AgentSession, type AgentSessionEvent } from "../../src/core/agent-session.ts"; +import { AuthStorage } from "../../src/core/auth-storage.ts"; +import type { ExtensionRunner } from "../../src/core/extensions/index.ts"; +import { convertToLlm } from "../../src/core/messages.ts"; +import { ModelRegistry } from "../../src/core/model-registry.ts"; +import { SessionManager } from "../../src/core/session-manager.ts"; +import type { Settings } from "../../src/core/settings-manager.ts"; +import { SettingsManager } from "../../src/core/settings-manager.ts"; +import type { ExtensionFactory, ResourceLoader } from "../../src/index.ts"; import { type CreateTestExtensionsResultInput, createTestExtensionsResult, createTestResourceLoader, -} from "../utilities.js"; +} from "../utilities.ts"; type MessageTextPart = { type: "text"; text: string }; diff --git a/packages/coding-agent/test/suite/regressions/1717-2113-agent-session-event-settlement.test.ts b/packages/coding-agent/test/suite/regressions/1717-2113-agent-session-event-settlement.test.ts index bea38c9ee..e8658b1b1 100644 --- a/packages/coding-agent/test/suite/regressions/1717-2113-agent-session-event-settlement.test.ts +++ b/packages/coding-agent/test/suite/regressions/1717-2113-agent-session-event-settlement.test.ts @@ -2,7 +2,7 @@ import type { AgentTool } from "@earendil-works/pi-agent-core"; import { fauxAssistantMessage, fauxToolCall } from "@earendil-works/pi-ai"; import { Type } from "typebox"; import { afterEach, describe, expect, it } from "vitest"; -import { createHarness, type Harness } from "../harness.js"; +import { createHarness, type Harness } from "../harness.ts"; function createEchoTool(): AgentTool { return { diff --git a/packages/coding-agent/test/suite/regressions/2023-queued-slash-command-followup.test.ts b/packages/coding-agent/test/suite/regressions/2023-queued-slash-command-followup.test.ts index d4adadfaa..cf3f07522 100644 --- a/packages/coding-agent/test/suite/regressions/2023-queued-slash-command-followup.test.ts +++ b/packages/coding-agent/test/suite/regressions/2023-queued-slash-command-followup.test.ts @@ -3,7 +3,7 @@ import { fauxAssistantMessage, fauxToolCall } from "@earendil-works/pi-ai"; import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; import { Type } from "typebox"; import { afterEach, describe, expect, it } from "vitest"; -import { createHarness, getAssistantTexts, getUserTexts, type Harness } from "../harness.js"; +import { createHarness, getAssistantTexts, getUserTexts, type Harness } from "../harness.ts"; describe("issue #2023 queued slash-command follow-up", () => { const harnesses: Harness[] = []; diff --git a/packages/coding-agent/test/suite/regressions/2753-reload-stale-resource-settings.test.ts b/packages/coding-agent/test/suite/regressions/2753-reload-stale-resource-settings.test.ts index a95dc7d07..17d9b302b 100644 --- a/packages/coding-agent/test/suite/regressions/2753-reload-stale-resource-settings.test.ts +++ b/packages/coding-agent/test/suite/regressions/2753-reload-stale-resource-settings.test.ts @@ -8,9 +8,9 @@ import { createAgentSessionFromServices, createAgentSessionRuntime, createAgentSessionServices, -} from "../../../src/core/agent-session-runtime.js"; -import { AuthStorage } from "../../../src/core/auth-storage.js"; -import { SessionManager } from "../../../src/core/session-manager.js"; +} from "../../../src/core/agent-session-runtime.ts"; +import { AuthStorage } from "../../../src/core/auth-storage.ts"; +import { SessionManager } from "../../../src/core/session-manager.ts"; describe("issue #2753 reload stale resource settings", () => { const cleanups: Array<() => void> = []; diff --git a/packages/coding-agent/test/suite/regressions/2781-skill-collision-precedence.test.ts b/packages/coding-agent/test/suite/regressions/2781-skill-collision-precedence.test.ts index e7e17f586..cf36e7710 100644 --- a/packages/coding-agent/test/suite/regressions/2781-skill-collision-precedence.test.ts +++ b/packages/coding-agent/test/suite/regressions/2781-skill-collision-precedence.test.ts @@ -2,7 +2,7 @@ import { mkdirSync, rmSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { DefaultResourceLoader } from "../../../src/core/resource-loader.js"; +import { DefaultResourceLoader } from "../../../src/core/resource-loader.ts"; describe("issue #2781 skill collision precedence: user skills should override package skills", () => { let tempDir: string; diff --git a/packages/coding-agent/test/suite/regressions/2791-fswatch-error-crash.test.ts b/packages/coding-agent/test/suite/regressions/2791-fswatch-error-crash.test.ts index 007ba580f..ed450c5a9 100644 --- a/packages/coding-agent/test/suite/regressions/2791-fswatch-error-crash.test.ts +++ b/packages/coding-agent/test/suite/regressions/2791-fswatch-error-crash.test.ts @@ -39,7 +39,7 @@ describe("issue #2791 fs.watch error event crashes process", () => { }); it("process should survive an error event on the theme FSWatcher", () => { - const themeModulePath = join(__dirname, "../../../src/modes/interactive/theme/theme.js").replace(/\\/g, "/"); + const themeModulePath = join(__dirname, "../../../src/modes/interactive/theme/theme.ts").replace(/\\/g, "/"); const agentDir = join(tempRoot, "agent").replace(/\\/g, "/"); // Script that sets up the watcher and emits a synthetic error on it. @@ -87,7 +87,7 @@ process.exit(0); let stderr = ""; let exitCode: number; try { - _stdout = execFileSync("npx", ["tsx", scriptPath], { + _stdout = execFileSync(process.execPath, [scriptPath], { timeout: 10000, encoding: "utf-8", env: { ...process.env, PI_CODING_AGENT_DIR: agentDir }, diff --git a/packages/coding-agent/test/suite/regressions/2835-tools-allowlist-filters-extension-tools.test.ts b/packages/coding-agent/test/suite/regressions/2835-tools-allowlist-filters-extension-tools.test.ts index 7d69c2442..e0003aa69 100644 --- a/packages/coding-agent/test/suite/regressions/2835-tools-allowlist-filters-extension-tools.test.ts +++ b/packages/coding-agent/test/suite/regressions/2835-tools-allowlist-filters-extension-tools.test.ts @@ -4,10 +4,10 @@ import { join } from "node:path"; import { getModel } from "@earendil-works/pi-ai"; import { Type } from "typebox"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { DefaultResourceLoader } from "../../../src/core/resource-loader.js"; -import { createAgentSession } from "../../../src/core/sdk.js"; -import { SessionManager } from "../../../src/core/session-manager.js"; -import { SettingsManager } from "../../../src/core/settings-manager.js"; +import { DefaultResourceLoader } from "../../../src/core/resource-loader.ts"; +import { createAgentSession } from "../../../src/core/sdk.ts"; +import { SessionManager } from "../../../src/core/session-manager.ts"; +import { SettingsManager } from "../../../src/core/settings-manager.ts"; describe("regression #2835: tool allowlists filter extension tools", () => { let tempDir: string; diff --git a/packages/coding-agent/test/suite/regressions/2860-replaced-session-context.test.ts b/packages/coding-agent/test/suite/regressions/2860-replaced-session-context.test.ts index 21539919c..0e4c061e0 100644 --- a/packages/coding-agent/test/suite/regressions/2860-replaced-session-context.test.ts +++ b/packages/coding-agent/test/suite/regressions/2860-replaced-session-context.test.ts @@ -3,16 +3,16 @@ import { tmpdir } from "node:os"; import { join } from "node:path"; import { fauxAssistantMessage, registerFauxProvider } from "@earendil-works/pi-ai"; import { afterEach, describe, expect, it } from "vitest"; -import type { AgentSession } from "../../../src/core/agent-session.js"; +import type { AgentSession } from "../../../src/core/agent-session.ts"; import { type CreateAgentSessionRuntimeFactory, createAgentSessionFromServices, createAgentSessionRuntime, createAgentSessionServices, -} from "../../../src/core/agent-session-runtime.js"; -import { AuthStorage } from "../../../src/core/auth-storage.js"; -import { SessionManager } from "../../../src/core/session-manager.js"; -import type { ExtensionAPI, ExtensionCommandContext, ExtensionFactory } from "../../../src/index.js"; +} from "../../../src/core/agent-session-runtime.ts"; +import { AuthStorage } from "../../../src/core/auth-storage.ts"; +import { SessionManager } from "../../../src/core/session-manager.ts"; +import type { ExtensionAPI, ExtensionCommandContext, ExtensionFactory } from "../../../src/index.ts"; function getText(message: AgentSession["messages"][number]): string { if (!("content" in message)) { diff --git a/packages/coding-agent/test/suite/regressions/3217-scoped-model-order.test.ts b/packages/coding-agent/test/suite/regressions/3217-scoped-model-order.test.ts index e1b7cadd3..b32535ba6 100644 --- a/packages/coding-agent/test/suite/regressions/3217-scoped-model-order.test.ts +++ b/packages/coding-agent/test/suite/regressions/3217-scoped-model-order.test.ts @@ -1,11 +1,11 @@ import { setKeybindings, type TUI } from "@earendil-works/pi-tui"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import { KeybindingsManager } from "../../../src/core/keybindings.js"; -import { ModelSelectorComponent } from "../../../src/modes/interactive/components/model-selector.js"; -import { ScopedModelsSelectorComponent } from "../../../src/modes/interactive/components/scoped-models-selector.js"; -import { initTheme } from "../../../src/modes/interactive/theme/theme.js"; -import { stripAnsi } from "../../../src/utils/ansi.js"; -import { createHarness, type Harness } from "../harness.js"; +import { KeybindingsManager } from "../../../src/core/keybindings.ts"; +import { ModelSelectorComponent } from "../../../src/modes/interactive/components/model-selector.ts"; +import { ScopedModelsSelectorComponent } from "../../../src/modes/interactive/components/scoped-models-selector.ts"; +import { initTheme } from "../../../src/modes/interactive/theme/theme.ts"; +import { stripAnsi } from "../../../src/utils/ansi.ts"; +import { createHarness, type Harness } from "../harness.ts"; function createFakeTui(): TUI { return { diff --git a/packages/coding-agent/test/suite/regressions/3302-find-path-glob.test.ts b/packages/coding-agent/test/suite/regressions/3302-find-path-glob.test.ts index 05cf80086..825b4a05c 100644 --- a/packages/coding-agent/test/suite/regressions/3302-find-path-glob.test.ts +++ b/packages/coding-agent/test/suite/regressions/3302-find-path-glob.test.ts @@ -2,7 +2,7 @@ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { createFindToolDefinition } from "../../../src/core/tools/find.js"; +import { createFindToolDefinition } from "../../../src/core/tools/find.ts"; /** * Regression test for https://github.com/earendil-works/pi-mono/issues/3302 diff --git a/packages/coding-agent/test/suite/regressions/3303-find-nested-gitignore.test.ts b/packages/coding-agent/test/suite/regressions/3303-find-nested-gitignore.test.ts index d22b0c18f..bd986cc93 100644 --- a/packages/coding-agent/test/suite/regressions/3303-find-nested-gitignore.test.ts +++ b/packages/coding-agent/test/suite/regressions/3303-find-nested-gitignore.test.ts @@ -2,7 +2,7 @@ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { createFindToolDefinition } from "../../../src/core/tools/find.js"; +import { createFindToolDefinition } from "../../../src/core/tools/find.ts"; /** * Regression test for https://github.com/earendil-works/pi-mono/issues/3303 diff --git a/packages/coding-agent/test/suite/regressions/3317-network-connection-lost-retry.test.ts b/packages/coding-agent/test/suite/regressions/3317-network-connection-lost-retry.test.ts index 74276253b..1be6154e4 100644 --- a/packages/coding-agent/test/suite/regressions/3317-network-connection-lost-retry.test.ts +++ b/packages/coding-agent/test/suite/regressions/3317-network-connection-lost-retry.test.ts @@ -1,6 +1,6 @@ import { fauxAssistantMessage } from "@earendil-works/pi-ai"; import { afterEach, describe, expect, it } from "vitest"; -import { createHarness, getAssistantTexts, type Harness } from "../harness.js"; +import { createHarness, getAssistantTexts, type Harness } from "../harness.ts"; describe("issue #3317 network connection lost retry", () => { const harnesses: Harness[] = []; diff --git a/packages/coding-agent/test/suite/regressions/3592-no-builtin-tools-keeps-extension-tools.test.ts b/packages/coding-agent/test/suite/regressions/3592-no-builtin-tools-keeps-extension-tools.test.ts index 27b186f7b..d7d1376cb 100644 --- a/packages/coding-agent/test/suite/regressions/3592-no-builtin-tools-keeps-extension-tools.test.ts +++ b/packages/coding-agent/test/suite/regressions/3592-no-builtin-tools-keeps-extension-tools.test.ts @@ -7,11 +7,11 @@ import { afterEach, beforeEach, describe, expect, it } from "vitest"; import { createAgentSessionFromServices, createAgentSessionServices, -} from "../../../src/core/agent-session-services.js"; -import { DefaultResourceLoader } from "../../../src/core/resource-loader.js"; -import { createAgentSession } from "../../../src/core/sdk.js"; -import { SessionManager } from "../../../src/core/session-manager.js"; -import { SettingsManager } from "../../../src/core/settings-manager.js"; +} from "../../../src/core/agent-session-services.ts"; +import { DefaultResourceLoader } from "../../../src/core/resource-loader.ts"; +import { createAgentSession } from "../../../src/core/sdk.ts"; +import { SessionManager } from "../../../src/core/session-manager.ts"; +import { SettingsManager } from "../../../src/core/settings-manager.ts"; describe("regression #3592: no-builtin-tools keeps extension tools enabled", () => { let tempDir: string; diff --git a/packages/coding-agent/test/suite/regressions/3616-settings-inmemory-reload.test.ts b/packages/coding-agent/test/suite/regressions/3616-settings-inmemory-reload.test.ts index daa2c0307..5f92baeb1 100644 --- a/packages/coding-agent/test/suite/regressions/3616-settings-inmemory-reload.test.ts +++ b/packages/coding-agent/test/suite/regressions/3616-settings-inmemory-reload.test.ts @@ -2,8 +2,8 @@ import { existsSync, mkdirSync, rmSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { DefaultResourceLoader } from "../../../src/core/resource-loader.js"; -import { SettingsManager } from "../../../src/core/settings-manager.js"; +import { DefaultResourceLoader } from "../../../src/core/resource-loader.ts"; +import { SettingsManager } from "../../../src/core/settings-manager.ts"; describe("regression #3616: in-memory settings survive reload", () => { let tempDir: string; diff --git a/packages/coding-agent/test/suite/regressions/3686-session-name-event.test.ts b/packages/coding-agent/test/suite/regressions/3686-session-name-event.test.ts index 3614c09cc..6265ce966 100644 --- a/packages/coding-agent/test/suite/regressions/3686-session-name-event.test.ts +++ b/packages/coding-agent/test/suite/regressions/3686-session-name-event.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it } from "vitest"; -import type { ExtensionAPI } from "../../../src/index.js"; -import { createHarness, type Harness } from "../harness.js"; +import type { ExtensionAPI } from "../../../src/index.ts"; +import { createHarness, type Harness } from "../harness.ts"; describe("regression #3686: session name changes emit an event", () => { const harnesses: Harness[] = []; diff --git a/packages/coding-agent/test/suite/regressions/3688-tree-cancel-compacting.test.ts b/packages/coding-agent/test/suite/regressions/3688-tree-cancel-compacting.test.ts index 67262e2c5..7d0f172ea 100644 --- a/packages/coding-agent/test/suite/regressions/3688-tree-cancel-compacting.test.ts +++ b/packages/coding-agent/test/suite/regressions/3688-tree-cancel-compacting.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it } from "vitest"; -import { assistantMsg, userMsg } from "../../utilities.js"; -import { createHarness, type Harness } from "../harness.js"; +import { assistantMsg, userMsg } from "../../utilities.ts"; +import { createHarness, type Harness } from "../harness.ts"; describe("issue #3688 tree cancellation compaction state", () => { const harnesses: Harness[] = []; diff --git a/packages/coding-agent/test/suite/regressions/3982-message-end-cost-override.test.ts b/packages/coding-agent/test/suite/regressions/3982-message-end-cost-override.test.ts index 99a47b33c..757a08ede 100644 --- a/packages/coding-agent/test/suite/regressions/3982-message-end-cost-override.test.ts +++ b/packages/coding-agent/test/suite/regressions/3982-message-end-cost-override.test.ts @@ -1,6 +1,6 @@ import { fauxAssistantMessage } from "@earendil-works/pi-ai"; import { afterEach, describe, expect, it } from "vitest"; -import { createHarness, type Harness } from "../harness.js"; +import { createHarness, type Harness } from "../harness.ts"; describe("regression #3982: message_end cost override", () => { const harnesses: Harness[] = []; diff --git a/packages/coding-agent/test/suite/regressions/4167-thinking-toggle-pending-tool-render.test.ts b/packages/coding-agent/test/suite/regressions/4167-thinking-toggle-pending-tool-render.test.ts index 0dcd8a95e..307c71de2 100644 --- a/packages/coding-agent/test/suite/regressions/4167-thinking-toggle-pending-tool-render.test.ts +++ b/packages/coding-agent/test/suite/regressions/4167-thinking-toggle-pending-tool-render.test.ts @@ -2,12 +2,12 @@ import type { AgentMessage } from "@earendil-works/pi-agent-core"; import type { AssistantMessage, ToolResultMessage, Usage } from "@earendil-works/pi-ai"; import { Container, Text, type TUI } from "@earendil-works/pi-tui"; import { beforeAll, describe, expect, test, vi } from "vitest"; -import type { AgentSessionEvent } from "../../../src/core/agent-session.js"; -import type { SessionContext } from "../../../src/core/session-manager.js"; -import type { ToolExecutionComponent } from "../../../src/modes/interactive/components/tool-execution.js"; -import { InteractiveMode } from "../../../src/modes/interactive/interactive-mode.js"; -import { initTheme } from "../../../src/modes/interactive/theme/theme.js"; -import { stripAnsi } from "../../../src/utils/ansi.js"; +import type { AgentSessionEvent } from "../../../src/core/agent-session.ts"; +import type { SessionContext } from "../../../src/core/session-manager.ts"; +import type { ToolExecutionComponent } from "../../../src/modes/interactive/components/tool-execution.ts"; +import { InteractiveMode } from "../../../src/modes/interactive/interactive-mode.ts"; +import { initTheme } from "../../../src/modes/interactive/theme/theme.ts"; +import { stripAnsi } from "../../../src/utils/ansi.ts"; const TOOL_CALL_ID = "tool-4167"; const TOOL_NAME = "slow_tool"; diff --git a/packages/coding-agent/test/syntax-highlight.test.ts b/packages/coding-agent/test/syntax-highlight.test.ts index c5cc7ab1a..92d8aa391 100644 --- a/packages/coding-agent/test/syntax-highlight.test.ts +++ b/packages/coding-agent/test/syntax-highlight.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { highlight, renderHighlightedHtml, supportsLanguage } from "../src/utils/syntax-highlight.js"; +import { highlight, renderHighlightedHtml, supportsLanguage } from "../src/utils/syntax-highlight.ts"; describe("syntax highlight renderer", () => { it("renders highlighted spans with the provided theme", () => { diff --git a/packages/coding-agent/test/system-prompt.test.ts b/packages/coding-agent/test/system-prompt.test.ts index bdc190568..82def2278 100644 --- a/packages/coding-agent/test/system-prompt.test.ts +++ b/packages/coding-agent/test/system-prompt.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "vitest"; -import { buildSystemPrompt } from "../src/core/system-prompt.js"; +import { buildSystemPrompt } from "../src/core/system-prompt.ts"; describe("buildSystemPrompt", () => { describe("empty tools", () => { diff --git a/packages/coding-agent/test/test-harness.test.ts b/packages/coding-agent/test/test-harness.test.ts index f9cafa510..2d6e7866f 100644 --- a/packages/coding-agent/test/test-harness.test.ts +++ b/packages/coding-agent/test/test-harness.test.ts @@ -7,7 +7,7 @@ import type { AgentTool } from "@earendil-works/pi-agent-core"; import type { AssistantMessage } from "@earendil-works/pi-ai"; import { Type } from "typebox"; import { afterEach, describe, expect, it } from "vitest"; -import { createHarness, createHarnessWithExtensions, type Harness } from "./test-harness.js"; +import { createHarness, createHarnessWithExtensions, type Harness } from "./test-harness.ts"; describe("test harness", () => { let harness: Harness; diff --git a/packages/coding-agent/test/test-harness.ts b/packages/coding-agent/test/test-harness.ts index 269c51463..0ae601ef6 100644 --- a/packages/coding-agent/test/test-harness.ts +++ b/packages/coding-agent/test/test-harness.ts @@ -26,18 +26,18 @@ import type { Usage, } from "@earendil-works/pi-ai"; import { createAssistantMessageEventStream } from "@earendil-works/pi-ai"; -import { AgentSession, type AgentSessionEvent } from "../src/core/agent-session.js"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { ModelRegistry } from "../src/core/model-registry.js"; -import { SessionManager } from "../src/core/session-manager.js"; -import type { Settings } from "../src/core/settings-manager.js"; -import { SettingsManager } from "../src/core/settings-manager.js"; -import type { ExtensionFactory, ResourceLoader } from "../src/index.js"; +import { AgentSession, type AgentSessionEvent } from "../src/core/agent-session.ts"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { ModelRegistry } from "../src/core/model-registry.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; +import type { Settings } from "../src/core/settings-manager.ts"; +import { SettingsManager } from "../src/core/settings-manager.ts"; +import type { ExtensionFactory, ResourceLoader } from "../src/index.ts"; import { type CreateTestExtensionsResultInput, createTestExtensionsResult, createTestResourceLoader, -} from "./utilities.js"; +} from "./utilities.ts"; // ============================================================================ // Faux model diff --git a/packages/coding-agent/test/test-theme-colors.ts b/packages/coding-agent/test/test-theme-colors.ts index a3317026e..70da7b189 100644 --- a/packages/coding-agent/test/test-theme-colors.ts +++ b/packages/coding-agent/test/test-theme-colors.ts @@ -1,5 +1,5 @@ import fs from "fs"; -import { initTheme, theme } from "../src/modes/interactive/theme/theme.js"; +import { initTheme, theme } from "../src/modes/interactive/theme/theme.ts"; // --- Color utilities --- diff --git a/packages/coding-agent/test/theme-detection.test.ts b/packages/coding-agent/test/theme-detection.test.ts index 582358bbb..7bb280b21 100644 --- a/packages/coding-agent/test/theme-detection.test.ts +++ b/packages/coding-agent/test/theme-detection.test.ts @@ -5,7 +5,7 @@ import { getThemeByName, getThemeForRgbColor, parseOsc11BackgroundColor, -} from "../src/modes/interactive/theme/theme.js"; +} from "../src/modes/interactive/theme/theme.ts"; afterEach(() => { resetCapabilitiesCache(); diff --git a/packages/coding-agent/test/theme-export.test.ts b/packages/coding-agent/test/theme-export.test.ts index 84dd649a4..155a07a48 100644 --- a/packages/coding-agent/test/theme-export.test.ts +++ b/packages/coding-agent/test/theme-export.test.ts @@ -2,7 +2,7 @@ import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "fs" import { tmpdir } from "os"; import { join } from "path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { getThemeExportColors } from "../src/modes/interactive/theme/theme.js"; +import { getThemeExportColors } from "../src/modes/interactive/theme/theme.ts"; type ThemeFile = { name: string; diff --git a/packages/coding-agent/test/tool-execution-component.test.ts b/packages/coding-agent/test/tool-execution-component.test.ts index 7013ba2aa..54c75806b 100644 --- a/packages/coding-agent/test/tool-execution-component.test.ts +++ b/packages/coding-agent/test/tool-execution-component.test.ts @@ -2,14 +2,14 @@ import { join, resolve } from "node:path"; import { Text, type TUI } from "@earendil-works/pi-tui"; import { Type } from "typebox"; import { beforeAll, describe, expect, test } from "vitest"; -import { getReadmePath } from "../src/config.js"; -import type { ToolDefinition } from "../src/core/extensions/types.js"; -import { type BashOperations, createBashToolDefinition } from "../src/core/tools/bash.js"; -import { createReadTool, createReadToolDefinition } from "../src/core/tools/read.js"; -import { createWriteToolDefinition } from "../src/core/tools/write.js"; -import { ToolExecutionComponent } from "../src/modes/interactive/components/tool-execution.js"; -import { initTheme } from "../src/modes/interactive/theme/theme.js"; -import { stripAnsi } from "../src/utils/ansi.js"; +import { getReadmePath } from "../src/config.ts"; +import type { ToolDefinition } from "../src/core/extensions/types.ts"; +import { type BashOperations, createBashToolDefinition } from "../src/core/tools/bash.ts"; +import { createReadTool, createReadToolDefinition } from "../src/core/tools/read.ts"; +import { createWriteToolDefinition } from "../src/core/tools/write.ts"; +import { ToolExecutionComponent } from "../src/modes/interactive/components/tool-execution.ts"; +import { initTheme } from "../src/modes/interactive/theme/theme.ts"; +import { stripAnsi } from "../src/utils/ansi.ts"; function createBaseToolDefinition(name = "custom_tool"): ToolDefinition { return { diff --git a/packages/coding-agent/test/tools.test.ts b/packages/coding-agent/test/tools.test.ts index 70e4e54f4..70d4ec2d5 100644 --- a/packages/coding-agent/test/tools.test.ts +++ b/packages/coding-agent/test/tools.test.ts @@ -2,9 +2,9 @@ import { chmodSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } import { tmpdir } from "os"; import { join } from "path"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import { executeBashWithOperations } from "../src/core/bash-executor.js"; -import { type BashOperations, createBashTool, createLocalBashOperations } from "../src/core/tools/bash.js"; -import { computeEditsDiff } from "../src/core/tools/edit-diff.js"; +import { executeBashWithOperations } from "../src/core/bash-executor.ts"; +import { type BashOperations, createBashTool, createLocalBashOperations } from "../src/core/tools/bash.ts"; +import { computeEditsDiff } from "../src/core/tools/edit-diff.ts"; import { createEditTool, createFindTool, @@ -12,8 +12,8 @@ import { createLsTool, createReadTool, createWriteTool, -} from "../src/index.js"; -import * as shellModule from "../src/utils/shell.js"; +} from "../src/index.ts"; +import * as shellModule from "../src/utils/shell.ts"; const readTool = createReadTool(process.cwd()); const writeTool = createWriteTool(process.cwd()); diff --git a/packages/coding-agent/test/tree-selector.test.ts b/packages/coding-agent/test/tree-selector.test.ts index 3b29d7e0f..8f423dc54 100644 --- a/packages/coding-agent/test/tree-selector.test.ts +++ b/packages/coding-agent/test/tree-selector.test.ts @@ -1,14 +1,14 @@ import { setKeybindings } from "@earendil-works/pi-tui"; import { beforeAll, beforeEach, describe, expect, test } from "vitest"; -import { KeybindingsManager } from "../src/core/keybindings.js"; +import { KeybindingsManager } from "../src/core/keybindings.ts"; import type { ModelChangeEntry, SessionEntry, SessionMessageEntry, SessionTreeNode, -} from "../src/core/session-manager.js"; -import { TreeSelectorComponent } from "../src/modes/interactive/components/tree-selector.js"; -import { initTheme } from "../src/modes/interactive/theme/theme.js"; +} from "../src/core/session-manager.ts"; +import { TreeSelectorComponent } from "../src/modes/interactive/components/tree-selector.ts"; +import { initTheme } from "../src/modes/interactive/theme/theme.ts"; beforeAll(() => { initTheme("dark"); diff --git a/packages/coding-agent/test/trigger-compact-extension.test.ts b/packages/coding-agent/test/trigger-compact-extension.test.ts index 92d2ce956..a8bdbb2a2 100644 --- a/packages/coding-agent/test/trigger-compact-extension.test.ts +++ b/packages/coding-agent/test/trigger-compact-extension.test.ts @@ -1,6 +1,6 @@ import { describe, expect, test, vi } from "vitest"; -import triggerCompactExtension from "../examples/extensions/trigger-compact.js"; -import type { ExtensionAPI, ExtensionCommandContext, ExtensionContext } from "../src/core/extensions/index.js"; +import triggerCompactExtension from "../examples/extensions/trigger-compact.ts"; +import type { ExtensionAPI, ExtensionCommandContext, ExtensionContext } from "../src/core/extensions/index.ts"; function createContext(tokens: number | null, compact = vi.fn()): ExtensionContext { return { diff --git a/packages/coding-agent/test/user-message.test.ts b/packages/coding-agent/test/user-message.test.ts index 7c7568106..1e62e5a86 100644 --- a/packages/coding-agent/test/user-message.test.ts +++ b/packages/coding-agent/test/user-message.test.ts @@ -1,6 +1,6 @@ import { describe, expect, test } from "vitest"; -import { UserMessageComponent } from "../src/modes/interactive/components/user-message.js"; -import { initTheme } from "../src/modes/interactive/theme/theme.js"; +import { UserMessageComponent } from "../src/modes/interactive/components/user-message.ts"; +import { initTheme } from "../src/modes/interactive/theme/theme.ts"; const OSC133_ZONE_START = "\x1b]133;A\x07"; const OSC133_ZONE_END = "\x1b]133;B\x07"; diff --git a/packages/coding-agent/test/utilities.ts b/packages/coding-agent/test/utilities.ts index 058ce8891..5ebf68135 100644 --- a/packages/coding-agent/test/utilities.ts +++ b/packages/coding-agent/test/utilities.ts @@ -8,16 +8,16 @@ import { dirname, join } from "node:path"; import { Agent } from "@earendil-works/pi-agent-core"; import { getModel, type OAuthCredentials, type OAuthProvider } from "@earendil-works/pi-ai"; import { getOAuthApiKey } from "@earendil-works/pi-ai/oauth"; -import { AgentSession } from "../src/core/agent-session.js"; -import { AuthStorage } from "../src/core/auth-storage.js"; -import { createEventBus } from "../src/core/event-bus.js"; -import type { Extension, ExtensionFactory, LoadExtensionsResult } from "../src/core/extensions/index.js"; -import { createExtensionRuntime, loadExtensionFromFactory } from "../src/core/extensions/loader.js"; -import { ModelRegistry } from "../src/core/model-registry.js"; -import type { ResourceLoader } from "../src/core/resource-loader.js"; -import { SessionManager } from "../src/core/session-manager.js"; -import { SettingsManager } from "../src/core/settings-manager.js"; -import { createCodingTools } from "../src/index.js"; +import { AgentSession } from "../src/core/agent-session.ts"; +import { AuthStorage } from "../src/core/auth-storage.ts"; +import { createEventBus } from "../src/core/event-bus.ts"; +import type { Extension, ExtensionFactory, LoadExtensionsResult } from "../src/core/extensions/index.ts"; +import { createExtensionRuntime, loadExtensionFromFactory } from "../src/core/extensions/loader.ts"; +import { ModelRegistry } from "../src/core/model-registry.ts"; +import type { ResourceLoader } from "../src/core/resource-loader.ts"; +import { SessionManager } from "../src/core/session-manager.ts"; +import { SettingsManager } from "../src/core/settings-manager.ts"; +import { createCodingTools } from "../src/index.ts"; /** * API key for authenticated tests. Tests using this should be wrapped in diff --git a/packages/coding-agent/test/version-check.test.ts b/packages/coding-agent/test/version-check.test.ts index f05bfd2e8..70197fa59 100644 --- a/packages/coding-agent/test/version-check.test.ts +++ b/packages/coding-agent/test/version-check.test.ts @@ -5,7 +5,7 @@ import { getLatestPiRelease, getLatestPiVersion, isNewerPackageVersion, -} from "../src/utils/version-check.js"; +} from "../src/utils/version-check.ts"; const originalSkipVersionCheck = process.env.PI_SKIP_VERSION_CHECK; const originalOffline = process.env.PI_OFFLINE; diff --git a/packages/tui/package.json b/packages/tui/package.json index fd6786127..8248d33f5 100644 --- a/packages/tui/package.json +++ b/packages/tui/package.json @@ -7,7 +7,7 @@ "scripts": { "clean": "shx rm -rf dist", "build": "tsgo -p tsconfig.build.json", - "test": "node --test --import tsx test/*.test.ts", + "test": "node --test test/*.test.ts", "prepublishOnly": "npm run clean && npm run build" }, "files": [ @@ -35,15 +35,15 @@ }, "types": "./dist/index.d.ts", "dependencies": { - "get-east-asian-width": "^1.3.0", - "marked": "^15.0.12" + "get-east-asian-width": "1.6.0", + "marked": "15.0.12" }, "optionalDependencies": { - "koffi": "^2.9.0" + "koffi": "2.16.2" }, "devDependencies": { - "@xterm/headless": "^5.5.0", - "@xterm/xterm": "^5.5.0", - "chalk": "^5.5.0" + "@xterm/headless": "5.5.0", + "@xterm/xterm": "5.5.0", + "chalk": "5.6.2" } } diff --git a/packages/tui/test/autocomplete.test.ts b/packages/tui/test/autocomplete.test.ts index 3e5c82402..be27d152b 100644 --- a/packages/tui/test/autocomplete.test.ts +++ b/packages/tui/test/autocomplete.test.ts @@ -4,7 +4,7 @@ import { mkdirSync, mkdtempSync, rmSync, symlinkSync, writeFileSync } from "node import { tmpdir } from "node:os"; import { dirname, join } from "node:path"; import { afterEach, beforeEach, describe, it, test } from "node:test"; -import { CombinedAutocompleteProvider } from "../src/autocomplete.js"; +import { CombinedAutocompleteProvider } from "../src/autocomplete.ts"; const resolveFdPath = (): string | null => { const command = process.platform === "win32" ? "where" : "which"; diff --git a/packages/tui/test/bug-regression-isimageline-startswith-bug.test.ts b/packages/tui/test/bug-regression-isimageline-startswith-bug.test.ts index ff15d18fb..b3d25e835 100644 --- a/packages/tui/test/bug-regression-isimageline-startswith-bug.test.ts +++ b/packages/tui/test/bug-regression-isimageline-startswith-bug.test.ts @@ -56,7 +56,7 @@ describe("Bug regression: isImageLine() crash with image escape sequences", () = }); it("new implementation returns true correctly", async () => { - const { isImageLine } = await import("../src/terminal-image.js"); + const { isImageLine } = await import("../src/terminal-image.ts"); // Line containing image escape sequence with text before it const lineWithImageSequence = @@ -68,7 +68,7 @@ describe("Bug regression: isImageLine() crash with image escape sequences", () = }); it("new implementation detects Kitty sequences in any position", async () => { - const { isImageLine } = await import("../src/terminal-image.js"); + const { isImageLine } = await import("../src/terminal-image.ts"); const scenarios = [ "At start: \x1b_Ga=T,f=100,data...\x1b\\", @@ -85,7 +85,7 @@ describe("Bug regression: isImageLine() crash with image escape sequences", () = }); it("new implementation detects iTerm2 sequences in any position", async () => { - const { isImageLine } = await import("../src/terminal-image.js"); + const { isImageLine } = await import("../src/terminal-image.ts"); const scenarios = [ "At start: \x1b]1337;File=size=100,100:base64...\x07", @@ -121,7 +121,7 @@ describe("Bug regression: isImageLine() crash with image escape sequences", () = */ it("detects image sequences in read tool output", async () => { - const { isImageLine } = await import("../src/terminal-image.js"); + const { isImageLine } = await import("../src/terminal-image.ts"); // Simulate output when read tool processes an image // The line might have text from the read result plus the image escape sequence @@ -131,7 +131,7 @@ describe("Bug regression: isImageLine() crash with image escape sequences", () = }); it("detects Kitty sequences from Image component", async () => { - const { isImageLine } = await import("../src/terminal-image.js"); + const { isImageLine } = await import("../src/terminal-image.ts"); // Kitty image component creates multi-line output with escape sequences const kittyLine = "\x1b_Ga=T,f=100,t=f,d=base64data...\x1b\\\x1b_Gm=i=1;\x1b\\"; @@ -140,7 +140,7 @@ describe("Bug regression: isImageLine() crash with image escape sequences", () = }); it("handles ANSI codes before image sequences", async () => { - const { isImageLine } = await import("../src/terminal-image.js"); + const { isImageLine } = await import("../src/terminal-image.ts"); // Line might have styling (error, warning, etc.) before image data const lines = [ @@ -161,7 +161,7 @@ describe("Bug regression: isImageLine() crash with image escape sequences", () = describe("Crash scenario simulation", () => { it("does NOT crash on very long lines with image sequences", async () => { - const { isImageLine } = await import("../src/terminal-image.js"); + const { isImageLine } = await import("../src/terminal-image.ts"); /** * Simulate the exact crash scenario: @@ -190,7 +190,7 @@ describe("Bug regression: isImageLine() crash with image escape sequences", () = }); it("handles lines exactly matching crash log dimensions", async () => { - const { isImageLine } = await import("../src/terminal-image.js"); + const { isImageLine } = await import("../src/terminal-image.ts"); /** * Crash log showed: line 58649 chars wide, terminal width 115 @@ -211,7 +211,7 @@ describe("Bug regression: isImageLine() crash with image escape sequences", () = describe("Negative cases: Don't false positive", () => { it("does not detect images in regular long text", async () => { - const { isImageLine } = await import("../src/terminal-image.js"); + const { isImageLine } = await import("../src/terminal-image.ts"); // Very long line WITHOUT image sequences const longText = "A".repeat(100000); @@ -220,7 +220,7 @@ describe("Bug regression: isImageLine() crash with image escape sequences", () = }); it("does not detect images in lines with file paths", async () => { - const { isImageLine } = await import("../src/terminal-image.js"); + const { isImageLine } = await import("../src/terminal-image.ts"); const filePaths = [ "/path/to/1337/image.jpg", diff --git a/packages/tui/test/chat-simple.ts b/packages/tui/test/chat-simple.ts index 836d1f53a..b6ccd1a85 100644 --- a/packages/tui/test/chat-simple.ts +++ b/packages/tui/test/chat-simple.ts @@ -3,14 +3,14 @@ */ import chalk from "chalk"; -import { CombinedAutocompleteProvider } from "../src/autocomplete.js"; -import { Editor } from "../src/components/editor.js"; -import { Loader } from "../src/components/loader.js"; -import { Markdown } from "../src/components/markdown.js"; -import { Text } from "../src/components/text.js"; -import { ProcessTerminal } from "../src/terminal.js"; -import { TUI } from "../src/tui.js"; -import { defaultEditorTheme, defaultMarkdownTheme } from "./test-themes.js"; +import { CombinedAutocompleteProvider } from "../src/autocomplete.ts"; +import { Editor } from "../src/components/editor.ts"; +import { Loader } from "../src/components/loader.ts"; +import { Markdown } from "../src/components/markdown.ts"; +import { Text } from "../src/components/text.ts"; +import { ProcessTerminal } from "../src/terminal.ts"; +import { TUI } from "../src/tui.ts"; +import { defaultEditorTheme, defaultMarkdownTheme } from "./test-themes.ts"; // Create terminal const terminal = new ProcessTerminal(); diff --git a/packages/tui/test/editor.test.ts b/packages/tui/test/editor.test.ts index 36f7ee7b2..e7e74ec38 100644 --- a/packages/tui/test/editor.test.ts +++ b/packages/tui/test/editor.test.ts @@ -1,12 +1,12 @@ import assert from "node:assert"; import { describe, it } from "node:test"; import { stripVTControlCharacters } from "node:util"; -import { type AutocompleteProvider, CombinedAutocompleteProvider } from "../src/autocomplete.js"; -import { Editor, wordWrapLine } from "../src/components/editor.js"; -import { TUI } from "../src/tui.js"; -import { visibleWidth } from "../src/utils.js"; -import { defaultEditorTheme } from "./test-themes.js"; -import { VirtualTerminal } from "./virtual-terminal.js"; +import { type AutocompleteProvider, CombinedAutocompleteProvider } from "../src/autocomplete.ts"; +import { Editor, wordWrapLine } from "../src/components/editor.ts"; +import { TUI } from "../src/tui.ts"; +import { visibleWidth } from "../src/utils.ts"; +import { defaultEditorTheme } from "./test-themes.ts"; +import { VirtualTerminal } from "./virtual-terminal.ts"; /** Create a TUI with a virtual terminal for testing */ function createTestTUI(cols = 80, rows = 24): TUI { diff --git a/packages/tui/test/fuzzy.test.ts b/packages/tui/test/fuzzy.test.ts index e784e49c0..7415e963c 100644 --- a/packages/tui/test/fuzzy.test.ts +++ b/packages/tui/test/fuzzy.test.ts @@ -1,6 +1,6 @@ import assert from "node:assert"; import { describe, it } from "node:test"; -import { fuzzyFilter, fuzzyMatch } from "../src/fuzzy.js"; +import { fuzzyFilter, fuzzyMatch } from "../src/fuzzy.ts"; describe("fuzzyMatch", () => { it("empty query matches everything with score 0", () => { diff --git a/packages/tui/test/image-test.ts b/packages/tui/test/image-test.ts index 6a29d16d9..116c97d02 100644 --- a/packages/tui/test/image-test.ts +++ b/packages/tui/test/image-test.ts @@ -1,10 +1,10 @@ import { readFileSync } from "fs"; -import { Image } from "../src/components/image.js"; -import { Spacer } from "../src/components/spacer.js"; -import { Text } from "../src/components/text.js"; -import { ProcessTerminal } from "../src/terminal.js"; -import { getCapabilities, getImageDimensions } from "../src/terminal-image.js"; -import { TUI } from "../src/tui.js"; +import { Image } from "../src/components/image.ts"; +import { Spacer } from "../src/components/spacer.ts"; +import { Text } from "../src/components/text.ts"; +import { ProcessTerminal } from "../src/terminal.ts"; +import { getCapabilities, getImageDimensions } from "../src/terminal-image.ts"; +import { TUI } from "../src/tui.ts"; const testImagePath = process.argv[2] || "/tmp/test-image.png"; diff --git a/packages/tui/test/input.test.ts b/packages/tui/test/input.test.ts index 3edd73ca1..e980fb050 100644 --- a/packages/tui/test/input.test.ts +++ b/packages/tui/test/input.test.ts @@ -1,7 +1,7 @@ import assert from "node:assert"; import { describe, it } from "node:test"; -import { Input } from "../src/components/input.js"; -import { visibleWidth } from "../src/utils.js"; +import { Input } from "../src/components/input.ts"; +import { visibleWidth } from "../src/utils.ts"; describe("Input component", () => { it("submits value including backslash on Enter", () => { diff --git a/packages/tui/test/key-tester.ts b/packages/tui/test/key-tester.ts index 443ab3ac1..650b98cb2 100755 --- a/packages/tui/test/key-tester.ts +++ b/packages/tui/test/key-tester.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node -import { matchesKey } from "../src/keys.js"; -import { ProcessTerminal } from "../src/terminal.js"; -import { type Component, TUI } from "../src/tui.js"; +import { matchesKey } from "../src/keys.ts"; +import { ProcessTerminal } from "../src/terminal.ts"; +import { type Component, TUI } from "../src/tui.ts"; /** * Simple key code logger component diff --git a/packages/tui/test/keybindings.test.ts b/packages/tui/test/keybindings.test.ts index 7e255b0a2..37c674422 100644 --- a/packages/tui/test/keybindings.test.ts +++ b/packages/tui/test/keybindings.test.ts @@ -1,6 +1,6 @@ import assert from "node:assert"; import { describe, it } from "node:test"; -import { KeybindingsManager, TUI_KEYBINDINGS } from "../src/keybindings.js"; +import { KeybindingsManager, TUI_KEYBINDINGS } from "../src/keybindings.ts"; describe("KeybindingsManager", () => { it("does not evict selector confirm when input submit is rebound", () => { diff --git a/packages/tui/test/keys.test.ts b/packages/tui/test/keys.test.ts index 392214cde..e06844e40 100644 --- a/packages/tui/test/keys.test.ts +++ b/packages/tui/test/keys.test.ts @@ -11,7 +11,7 @@ import { matchesKey, parseKey, setKittyProtocolActive, -} from "../src/keys.js"; +} from "../src/keys.ts"; function withEnv(name: string, value: string | undefined, fn: () => void): void { const previous = process.env[name]; diff --git a/packages/tui/test/markdown.test.ts b/packages/tui/test/markdown.test.ts index 2e1ed022f..584c583c7 100644 --- a/packages/tui/test/markdown.test.ts +++ b/packages/tui/test/markdown.test.ts @@ -2,11 +2,11 @@ import assert from "node:assert"; import { afterEach, describe, it } from "node:test"; import type { Terminal as XtermTerminalType } from "@xterm/headless"; import { Chalk } from "chalk"; -import { Markdown } from "../src/components/markdown.js"; -import { resetCapabilitiesCache, setCapabilities } from "../src/terminal-image.js"; -import { type Component, TUI } from "../src/tui.js"; -import { defaultMarkdownTheme } from "./test-themes.js"; -import { VirtualTerminal } from "./virtual-terminal.js"; +import { Markdown } from "../src/components/markdown.ts"; +import { resetCapabilitiesCache, setCapabilities } from "../src/terminal-image.ts"; +import { type Component, TUI } from "../src/tui.ts"; +import { defaultMarkdownTheme } from "./test-themes.ts"; +import { VirtualTerminal } from "./virtual-terminal.ts"; // Force full color in CI so ANSI assertions are deterministic const chalk = new Chalk({ level: 3 }); diff --git a/packages/tui/test/overlay-non-capturing.test.ts b/packages/tui/test/overlay-non-capturing.test.ts index a0a7a6767..cb91e5e44 100644 --- a/packages/tui/test/overlay-non-capturing.test.ts +++ b/packages/tui/test/overlay-non-capturing.test.ts @@ -1,8 +1,8 @@ import assert from "node:assert"; import { describe, it } from "node:test"; -import type { Component, Focusable } from "../src/tui.js"; -import { TUI } from "../src/tui.js"; -import { VirtualTerminal } from "./virtual-terminal.js"; +import type { Component, Focusable } from "../src/tui.ts"; +import { TUI } from "../src/tui.ts"; +import { VirtualTerminal } from "./virtual-terminal.ts"; class StaticOverlay implements Component { private lines: string[]; diff --git a/packages/tui/test/overlay-options.test.ts b/packages/tui/test/overlay-options.test.ts index 942bddd37..c93f26cbd 100644 --- a/packages/tui/test/overlay-options.test.ts +++ b/packages/tui/test/overlay-options.test.ts @@ -1,8 +1,8 @@ import assert from "node:assert"; import { describe, it } from "node:test"; -import type { Component } from "../src/tui.js"; -import { TUI } from "../src/tui.js"; -import { VirtualTerminal } from "./virtual-terminal.js"; +import type { Component } from "../src/tui.ts"; +import { TUI } from "../src/tui.ts"; +import { VirtualTerminal } from "./virtual-terminal.ts"; class StaticOverlay implements Component { private lines: string[]; diff --git a/packages/tui/test/overlay-short-content.test.ts b/packages/tui/test/overlay-short-content.test.ts index 7721ea00c..135d8cb9e 100644 --- a/packages/tui/test/overlay-short-content.test.ts +++ b/packages/tui/test/overlay-short-content.test.ts @@ -1,7 +1,7 @@ import assert from "node:assert"; import { describe, it } from "node:test"; -import { type Component, TUI } from "../src/tui.js"; -import { VirtualTerminal } from "./virtual-terminal.js"; +import { type Component, TUI } from "../src/tui.ts"; +import { VirtualTerminal } from "./virtual-terminal.ts"; class SimpleContent implements Component { private lines: string[]; diff --git a/packages/tui/test/regression-regional-indicator-width.test.ts b/packages/tui/test/regression-regional-indicator-width.test.ts index 675ce97fa..6803e2b1a 100644 --- a/packages/tui/test/regression-regional-indicator-width.test.ts +++ b/packages/tui/test/regression-regional-indicator-width.test.ts @@ -1,6 +1,6 @@ import assert from "node:assert"; import { describe, it } from "node:test"; -import { visibleWidth, wrapTextWithAnsi } from "../src/utils.js"; +import { visibleWidth, wrapTextWithAnsi } from "../src/utils.ts"; describe("regional indicator width regression", () => { it("treats partial flag grapheme as full-width to avoid streaming render drift", () => { diff --git a/packages/tui/test/select-list.test.ts b/packages/tui/test/select-list.test.ts index 053690fe4..b5c24212c 100644 --- a/packages/tui/test/select-list.test.ts +++ b/packages/tui/test/select-list.test.ts @@ -1,7 +1,7 @@ import assert from "node:assert"; import { describe, it } from "node:test"; -import { SelectList } from "../src/components/select-list.js"; -import { visibleWidth } from "../src/utils.js"; +import { SelectList } from "../src/components/select-list.ts"; +import { visibleWidth } from "../src/utils.ts"; const testTheme = { selectedPrefix: (text: string) => text, diff --git a/packages/tui/test/stdin-buffer.test.ts b/packages/tui/test/stdin-buffer.test.ts index 4f4a00614..e72c14966 100644 --- a/packages/tui/test/stdin-buffer.test.ts +++ b/packages/tui/test/stdin-buffer.test.ts @@ -7,7 +7,7 @@ import assert from "node:assert"; import { beforeEach, describe, it } from "node:test"; -import { StdinBuffer } from "../src/stdin-buffer.js"; +import { StdinBuffer } from "../src/stdin-buffer.ts"; describe("StdinBuffer", () => { let buffer: StdinBuffer; diff --git a/packages/tui/test/terminal-image.test.ts b/packages/tui/test/terminal-image.test.ts index 4f7c238b3..70fbf9eb3 100644 --- a/packages/tui/test/terminal-image.test.ts +++ b/packages/tui/test/terminal-image.test.ts @@ -4,7 +4,7 @@ import assert from "node:assert"; import { describe, it } from "node:test"; -import { Image } from "../src/components/image.js"; +import { Image } from "../src/components/image.ts"; import { deleteAllKittyImages, deleteKittyImage, @@ -16,7 +16,7 @@ import { resetCapabilitiesCache, setCapabilities, setCellDimensions, -} from "../src/terminal-image.js"; +} from "../src/terminal-image.ts"; const ENV_KEYS = [ "TERM", diff --git a/packages/tui/test/terminal.test.ts b/packages/tui/test/terminal.test.ts index 7099b3dfa..ab2027dfa 100644 --- a/packages/tui/test/terminal.test.ts +++ b/packages/tui/test/terminal.test.ts @@ -1,6 +1,6 @@ import assert from "node:assert"; import { describe, it } from "node:test"; -import { ProcessTerminal } from "../src/terminal.js"; +import { ProcessTerminal } from "../src/terminal.ts"; describe("ProcessTerminal dimensions", () => { it("falls back to COLUMNS and LINES before default dimensions", () => { diff --git a/packages/tui/test/test-themes.ts b/packages/tui/test/test-themes.ts index ff68b2bbe..33e3c39e1 100644 --- a/packages/tui/test/test-themes.ts +++ b/packages/tui/test/test-themes.ts @@ -3,7 +3,7 @@ */ import { Chalk } from "chalk"; -import type { EditorTheme, MarkdownTheme, SelectListTheme } from "../src/index.js"; +import type { EditorTheme, MarkdownTheme, SelectListTheme } from "../src/index.ts"; const chalk = new Chalk({ level: 3 }); diff --git a/packages/tui/test/truncate-to-width.test.ts b/packages/tui/test/truncate-to-width.test.ts index 42d93ffa6..321ba8983 100644 --- a/packages/tui/test/truncate-to-width.test.ts +++ b/packages/tui/test/truncate-to-width.test.ts @@ -1,6 +1,6 @@ import assert from "node:assert"; import { describe, it } from "node:test"; -import { normalizeTerminalOutput, truncateToWidth, visibleWidth } from "../src/utils.js"; +import { normalizeTerminalOutput, truncateToWidth, visibleWidth } from "../src/utils.ts"; describe("truncateToWidth", () => { it("keeps output within width for very large unicode input", () => { diff --git a/packages/tui/test/truncated-text.test.ts b/packages/tui/test/truncated-text.test.ts index ac1391793..a25034e27 100644 --- a/packages/tui/test/truncated-text.test.ts +++ b/packages/tui/test/truncated-text.test.ts @@ -1,8 +1,8 @@ import assert from "node:assert"; import { describe, it } from "node:test"; import { Chalk } from "chalk"; -import { TruncatedText } from "../src/components/truncated-text.js"; -import { visibleWidth } from "../src/utils.js"; +import { TruncatedText } from "../src/components/truncated-text.ts"; +import { visibleWidth } from "../src/utils.ts"; // Force full color in CI so ANSI assertions are deterministic const chalk = new Chalk({ level: 3 }); diff --git a/packages/tui/test/tui-cell-size-input.test.ts b/packages/tui/test/tui-cell-size-input.test.ts index 0ca515d4b..fab915cac 100644 --- a/packages/tui/test/tui-cell-size-input.test.ts +++ b/packages/tui/test/tui-cell-size-input.test.ts @@ -1,8 +1,8 @@ import assert from "node:assert"; import { describe, it } from "node:test"; -import { getCellDimensions, resetCapabilitiesCache, setCellDimensions } from "../src/terminal-image.js"; -import { type Component, TUI } from "../src/tui.js"; -import { VirtualTerminal } from "./virtual-terminal.js"; +import { getCellDimensions, resetCapabilitiesCache, setCellDimensions } from "../src/terminal-image.ts"; +import { type Component, TUI } from "../src/tui.ts"; +import { VirtualTerminal } from "./virtual-terminal.ts"; class InputRecorder implements Component { readonly inputs: string[] = []; diff --git a/packages/tui/test/tui-overlay-style-leak.test.ts b/packages/tui/test/tui-overlay-style-leak.test.ts index df93deefb..a44b699ee 100644 --- a/packages/tui/test/tui-overlay-style-leak.test.ts +++ b/packages/tui/test/tui-overlay-style-leak.test.ts @@ -1,8 +1,8 @@ import assert from "node:assert"; import { describe, it } from "node:test"; import type { Terminal as XtermTerminalType } from "@xterm/headless"; -import { type Component, TUI } from "../src/tui.js"; -import { VirtualTerminal } from "./virtual-terminal.js"; +import { type Component, TUI } from "../src/tui.ts"; +import { VirtualTerminal } from "./virtual-terminal.ts"; class StaticLines implements Component { private readonly lines: string[]; diff --git a/packages/tui/test/tui-render.test.ts b/packages/tui/test/tui-render.test.ts index 91cb9695e..230a00050 100644 --- a/packages/tui/test/tui-render.test.ts +++ b/packages/tui/test/tui-render.test.ts @@ -1,9 +1,9 @@ import assert from "node:assert"; import { describe, it } from "node:test"; import type { Terminal as XtermTerminalType } from "@xterm/headless"; -import { deleteKittyImage, encodeKitty } from "../src/terminal-image.js"; -import { type Component, TUI } from "../src/tui.js"; -import { VirtualTerminal } from "./virtual-terminal.js"; +import { deleteKittyImage, encodeKitty } from "../src/terminal-image.ts"; +import { type Component, TUI } from "../src/tui.ts"; +import { VirtualTerminal } from "./virtual-terminal.ts"; class TestComponent implements Component { lines: string[] = []; diff --git a/packages/tui/test/viewport-overwrite-repro.ts b/packages/tui/test/viewport-overwrite-repro.ts index 5a0ac4f9c..1ef432a03 100644 --- a/packages/tui/test/viewport-overwrite-repro.ts +++ b/packages/tui/test/viewport-overwrite-repro.ts @@ -17,8 +17,8 @@ * - When content exceeds the viewport and new lines arrive after a tool-call pause, * some earlier PRE-TOOL lines near the bottom are overwritten by POST-TOOL lines. */ -import { ProcessTerminal } from "../src/terminal.js"; -import { type Component, TUI } from "../src/tui.js"; +import { ProcessTerminal } from "../src/terminal.ts"; +import { type Component, TUI } from "../src/tui.ts"; const sleep = (ms: number): Promise => new Promise((resolve) => setTimeout(resolve, ms)); diff --git a/packages/tui/test/virtual-terminal.ts b/packages/tui/test/virtual-terminal.ts index c7ca45102..4e067f4e5 100644 --- a/packages/tui/test/virtual-terminal.ts +++ b/packages/tui/test/virtual-terminal.ts @@ -1,6 +1,6 @@ import type { Terminal as XtermTerminalType } from "@xterm/headless"; import xterm from "@xterm/headless"; -import type { Terminal } from "../src/terminal.js"; +import type { Terminal } from "../src/terminal.ts"; // Extract Terminal class from the module const XtermTerminal = xterm.Terminal; diff --git a/packages/tui/test/wrap-ansi.test.ts b/packages/tui/test/wrap-ansi.test.ts index bd24e8159..52d591480 100644 --- a/packages/tui/test/wrap-ansi.test.ts +++ b/packages/tui/test/wrap-ansi.test.ts @@ -1,6 +1,6 @@ import assert from "node:assert"; import { describe, it } from "node:test"; -import { visibleWidth, wrapTextWithAnsi } from "../src/utils.js"; +import { visibleWidth, wrapTextWithAnsi } from "../src/utils.ts"; describe("wrapTextWithAnsi", () => { describe("underline styling", () => { diff --git a/scripts/cost.ts b/scripts/cost.ts index 2774b8d87..865fbed79 100755 --- a/scripts/cost.ts +++ b/scripts/cost.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env npx tsx +#!/usr/bin/env node import * as fs from "fs"; import * as path from "path"; diff --git a/scripts/session-transcripts.ts b/scripts/session-transcripts.ts index e10dbff9f..4dca6a1d4 100644 --- a/scripts/session-transcripts.ts +++ b/scripts/session-transcripts.ts @@ -1,9 +1,9 @@ -#!/usr/bin/env npx tsx +#!/usr/bin/env node /** * Extracts session transcripts for a given cwd, splits into context-sized files, * optionally spawns subagents to analyze patterns. * - * Usage: npx tsx scripts/session-transcripts.ts [--analyze] [--output ] [cwd] + * Usage: node scripts/session-transcripts.ts [--analyze] [--output ] [cwd] * --analyze Spawn pi subagents to analyze each transcript file * --output Output directory for transcript files (defaults to ./session-transcripts) * cwd Working directory to extract sessions for (defaults to current) @@ -14,7 +14,7 @@ import { spawn } from "child_process"; import { createInterface } from "node:readline"; import { homedir } from "os"; import { join, resolve } from "path"; -import { parseSessionEntries, type SessionMessageEntry } from "../packages/coding-agent/src/core/session-manager.js"; +import { parseSessionEntries, type SessionMessageEntry } from "../packages/coding-agent/src/core/session-manager.ts"; import chalk from "chalk"; const MAX_CHARS_PER_FILE = 100_000; // ~20k tokens, leaving room for prompt + analysis + output diff --git a/scripts/stats.ts b/scripts/stats.ts index 15c353e38..653f4bfb1 100644 --- a/scripts/stats.ts +++ b/scripts/stats.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env npx tsx +#!/usr/bin/env node import { existsSync, readdirSync, readFileSync } from "node:fs"; import { homedir } from "node:os"; diff --git a/scripts/tool-stats.ts b/scripts/tool-stats.ts index 8d39b8683..78a694187 100755 --- a/scripts/tool-stats.ts +++ b/scripts/tool-stats.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env npx tsx +#!/usr/bin/env node import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs"; import { homedir, tmpdir } from "node:os";