diff --git a/packages/agent/src/agent-loop.ts b/packages/agent/src/agent-loop.ts index eb57039f3..28f037f5d 100644 --- a/packages/agent/src/agent-loop.ts +++ b/packages/agent/src/agent-loop.ts @@ -20,7 +20,7 @@ import type { AgentToolCall, AgentToolResult, StreamFn, -} from "./types.js"; +} from "./types.ts"; export type AgentEventSink = (event: AgentEvent) => Promise | void; diff --git a/packages/agent/src/agent.ts b/packages/agent/src/agent.ts index b9e0484cc..db6684a8a 100644 --- a/packages/agent/src/agent.ts +++ b/packages/agent/src/agent.ts @@ -8,7 +8,7 @@ import { type ThinkingBudgets, type Transport, } from "@earendil-works/pi-ai"; -import { runAgentLoop, runAgentLoopContinue } from "./agent-loop.js"; +import { runAgentLoop, runAgentLoopContinue } from "./agent-loop.ts"; import type { AfterToolCallContext, AfterToolCallResult, @@ -24,9 +24,9 @@ import type { QueueMode, StreamFn, ToolExecutionMode, -} from "./types.js"; +} from "./types.ts"; -export type { QueueMode } from "./types.js"; +export type { QueueMode } from "./types.ts"; function defaultConvertToLlm(messages: AgentMessage[]): Message[] { return messages.filter( diff --git a/packages/agent/src/harness/agent-harness.ts b/packages/agent/src/harness/agent-harness.ts index 6ab5dbef3..80535e8ec 100644 --- a/packages/agent/src/harness/agent-harness.ts +++ b/packages/agent/src/harness/agent-harness.ts @@ -5,7 +5,7 @@ import { streamSimple, type UserMessage, } from "@earendil-works/pi-ai"; -import { runAgentLoop } from "../agent-loop.js"; +import { runAgentLoop } from "../agent-loop.ts"; import type { AgentContext, AgentEvent, @@ -15,12 +15,12 @@ import type { QueueMode, StreamFn, ThinkingLevel, -} from "../types.js"; -import { collectEntriesForBranchSummary, generateBranchSummary } from "./compaction/branch-summarization.js"; -import { compact, DEFAULT_COMPACTION_SETTINGS, prepareCompaction } from "./compaction/compaction.js"; -import { convertToLlm } from "./messages.js"; -import { formatPromptTemplateInvocation } from "./prompt-templates.js"; -import { formatSkillInvocation } from "./skills.js"; +} from "../types.ts"; +import { collectEntriesForBranchSummary, generateBranchSummary } from "./compaction/branch-summarization.ts"; +import { compact, DEFAULT_COMPACTION_SETTINGS, prepareCompaction } from "./compaction/compaction.ts"; +import { convertToLlm } from "./messages.ts"; +import { formatPromptTemplateInvocation } from "./prompt-templates.ts"; +import { formatSkillInvocation } from "./skills.ts"; import type { AbortResult, AgentHarnessEvent, @@ -37,8 +37,8 @@ import type { PromptTemplate, Session, Skill, -} from "./types.js"; -import { AgentHarnessError, BranchSummaryError, CompactionError, SessionError, toError } from "./types.js"; +} from "./types.ts"; +import { AgentHarnessError, BranchSummaryError, CompactionError, SessionError, toError } from "./types.ts"; function createUserMessage(text: string, images?: ImageContent[]): UserMessage { const content: Array<{ type: "text"; text: string } | ImageContent> = [{ type: "text", text }]; diff --git a/packages/agent/src/harness/compaction/branch-summarization.ts b/packages/agent/src/harness/compaction/branch-summarization.ts index 37af3b15f..6ca4a4305 100644 --- a/packages/agent/src/harness/compaction/branch-summarization.ts +++ b/packages/agent/src/harness/compaction/branch-summarization.ts @@ -1,15 +1,15 @@ import type { Model } from "@earendil-works/pi-ai"; import { completeSimple } from "@earendil-works/pi-ai"; -import type { AgentMessage } from "../../types.js"; +import type { AgentMessage } from "../../types.ts"; import { convertToLlm, createBranchSummaryMessage, createCompactionSummaryMessage, createCustomMessage, -} from "../messages.js"; -import type { BranchSummaryResult, Session, SessionTreeEntry } from "../types.js"; -import { BranchSummaryError, err, ok, type Result, SessionError } from "../types.js"; -import { estimateTokens, SUMMARIZATION_SYSTEM_PROMPT } from "./compaction.js"; +} from "../messages.ts"; +import type { BranchSummaryResult, Session, SessionTreeEntry } from "../types.ts"; +import { BranchSummaryError, err, ok, type Result, SessionError } from "../types.ts"; +import { estimateTokens, SUMMARIZATION_SYSTEM_PROMPT } from "./compaction.ts"; import { computeFileLists, createFileOps, @@ -17,7 +17,7 @@ import { type FileOperations, formatFileOperations, serializeConversation, -} from "./utils.js"; +} from "./utils.ts"; /** File-operation details stored on generated branch summary entries. */ export interface BranchSummaryDetails { @@ -27,7 +27,7 @@ export interface BranchSummaryDetails { modifiedFiles: string[]; } -export type { FileOperations } from "./utils.js"; +export type { FileOperations } from "./utils.ts"; /** Prepared branch content for summarization. */ export interface BranchPreparation { diff --git a/packages/agent/src/harness/compaction/compaction.ts b/packages/agent/src/harness/compaction/compaction.ts index a04ccd072..aa7b32c6f 100644 --- a/packages/agent/src/harness/compaction/compaction.ts +++ b/packages/agent/src/harness/compaction/compaction.ts @@ -1,14 +1,14 @@ import type { AssistantMessage, ImageContent, Model, TextContent, Usage } from "@earendil-works/pi-ai"; import { completeSimple } from "@earendil-works/pi-ai"; -import type { AgentMessage, ThinkingLevel } from "../../types.js"; +import type { AgentMessage, ThinkingLevel } from "../../types.ts"; import { convertToLlm, createBranchSummaryMessage, createCompactionSummaryMessage, createCustomMessage, -} from "../messages.js"; -import { buildSessionContext } from "../session/session.js"; -import { type CompactionEntry, CompactionError, err, ok, type Result, type SessionTreeEntry } from "../types.js"; +} from "../messages.ts"; +import { buildSessionContext } from "../session/session.ts"; +import { type CompactionEntry, CompactionError, err, ok, type Result, type SessionTreeEntry } from "../types.ts"; import { computeFileLists, createFileOps, @@ -16,7 +16,7 @@ import { type FileOperations, formatFileOperations, serializeConversation, -} from "./utils.js"; +} from "./utils.ts"; /** File-operation details stored on generated compaction entries. */ export interface CompactionDetails { @@ -620,7 +620,7 @@ Summarize the prefix to provide context for the retained suffix: Be concise. Focus on what's needed to understand the kept suffix.`; -export { serializeConversation } from "./utils.js"; +export { serializeConversation } from "./utils.ts"; /** Generate compaction summary data from prepared session history. */ export async function compact( diff --git a/packages/agent/src/harness/compaction/utils.ts b/packages/agent/src/harness/compaction/utils.ts index 2b852a461..07535b79b 100644 --- a/packages/agent/src/harness/compaction/utils.ts +++ b/packages/agent/src/harness/compaction/utils.ts @@ -1,5 +1,5 @@ import type { Message } from "@earendil-works/pi-ai"; -import type { AgentMessage } from "../../types.js"; +import type { AgentMessage } from "../../types.ts"; /** File paths touched by a session branch or compaction range. */ export interface FileOperations { diff --git a/packages/agent/src/harness/env/nodejs.ts b/packages/agent/src/harness/env/nodejs.ts index 931651bce..e56e7aeb9 100644 --- a/packages/agent/src/harness/env/nodejs.ts +++ b/packages/agent/src/harness/env/nodejs.ts @@ -26,7 +26,7 @@ import { ok, type Result, toError, -} from "../types.js"; +} from "../types.ts"; function resolvePath(cwd: string, path: string): string { return isAbsolute(path) ? path : resolve(cwd, path); diff --git a/packages/agent/src/harness/messages.ts b/packages/agent/src/harness/messages.ts index 615bf1e42..36ce96a1e 100644 --- a/packages/agent/src/harness/messages.ts +++ b/packages/agent/src/harness/messages.ts @@ -1,5 +1,5 @@ import type { ImageContent, Message, TextContent } from "@earendil-works/pi-ai"; -import type { AgentMessage } from "../types.js"; +import type { AgentMessage } from "../types.ts"; export const COMPACTION_SUMMARY_PREFIX = `The conversation history before this point was compacted into the following summary: @@ -51,7 +51,7 @@ export interface CompactionSummaryMessage { timestamp: number; } -declare module "../types.js" { +declare module "../types.ts" { interface CustomAgentMessages { bashExecution: BashExecutionMessage; custom: CustomMessage; diff --git a/packages/agent/src/harness/prompt-templates.ts b/packages/agent/src/harness/prompt-templates.ts index 3e678cfc7..6c1b6be0b 100644 --- a/packages/agent/src/harness/prompt-templates.ts +++ b/packages/agent/src/harness/prompt-templates.ts @@ -1,5 +1,5 @@ import { parse } from "yaml"; -import { type ExecutionEnv, type FileInfo, type PromptTemplate, type Result, toError } from "./types.js"; +import { type ExecutionEnv, type FileInfo, type PromptTemplate, type Result, toError } from "./types.ts"; export type PromptTemplateDiagnosticCode = "file_info_failed" | "list_failed" | "read_failed" | "parse_failed"; diff --git a/packages/agent/src/harness/session/jsonl-repo.ts b/packages/agent/src/harness/session/jsonl-repo.ts index cd6ac1d83..1a08d4d35 100644 --- a/packages/agent/src/harness/session/jsonl-repo.ts +++ b/packages/agent/src/harness/session/jsonl-repo.ts @@ -5,16 +5,16 @@ import type { JsonlSessionMetadata, JsonlSessionRepoApi, Session, -} from "../types.js"; -import { SessionError, toError } from "../types.js"; -import { JsonlSessionStorage, loadJsonlSessionMetadata } from "./jsonl-storage.js"; +} from "../types.ts"; +import { SessionError, toError } from "../types.ts"; +import { JsonlSessionStorage, loadJsonlSessionMetadata } from "./jsonl-storage.ts"; import { createSessionId, createTimestamp, getEntriesToFork, getFileSystemResultOrThrow, toSession, -} from "./repo-utils.js"; +} from "./repo-utils.ts"; type JsonlSessionRepoFileSystem = Pick< FileSystem, diff --git a/packages/agent/src/harness/session/jsonl-storage.ts b/packages/agent/src/harness/session/jsonl-storage.ts index eac8334dd..54ad9eb03 100644 --- a/packages/agent/src/harness/session/jsonl-storage.ts +++ b/packages/agent/src/harness/session/jsonl-storage.ts @@ -1,7 +1,7 @@ -import type { FileSystem, JsonlSessionMetadata, LeafEntry, SessionStorage, SessionTreeEntry } from "../types.js"; -import { SessionError, toError } from "../types.js"; -import { getFileSystemResultOrThrow } from "./repo-utils.js"; -import { uuidv7 } from "./uuid.js"; +import type { FileSystem, JsonlSessionMetadata, LeafEntry, SessionStorage, SessionTreeEntry } from "../types.ts"; +import { SessionError, toError } from "../types.ts"; +import { getFileSystemResultOrThrow } from "./repo-utils.ts"; +import { uuidv7 } from "./uuid.ts"; type JsonlSessionStorageFileSystem = Pick; diff --git a/packages/agent/src/harness/session/memory-repo.ts b/packages/agent/src/harness/session/memory-repo.ts index 540955145..145bc2b7c 100644 --- a/packages/agent/src/harness/session/memory-repo.ts +++ b/packages/agent/src/harness/session/memory-repo.ts @@ -1,6 +1,6 @@ -import { type Session, SessionError, type SessionMetadata, type SessionRepo } from "../types.js"; -import { InMemorySessionStorage } from "./memory-storage.js"; -import { createSessionId, createTimestamp, getEntriesToFork, toSession } from "./repo-utils.js"; +import { type Session, SessionError, type SessionMetadata, type SessionRepo } from "../types.ts"; +import { InMemorySessionStorage } from "./memory-storage.ts"; +import { createSessionId, createTimestamp, getEntriesToFork, toSession } from "./repo-utils.ts"; export class InMemorySessionRepo implements SessionRepo { private sessions = new Map>(); diff --git a/packages/agent/src/harness/session/memory-storage.ts b/packages/agent/src/harness/session/memory-storage.ts index 8c45685b3..c6428cac6 100644 --- a/packages/agent/src/harness/session/memory-storage.ts +++ b/packages/agent/src/harness/session/memory-storage.ts @@ -4,8 +4,8 @@ import { type SessionMetadata, type SessionStorage, type SessionTreeEntry, -} from "../types.js"; -import { uuidv7 } from "./uuid.js"; +} from "../types.ts"; +import { uuidv7 } from "./uuid.ts"; function updateLabelCache(labelsById: Map, entry: SessionTreeEntry): void { if (entry.type !== "label") return; diff --git a/packages/agent/src/harness/session/repo-utils.ts b/packages/agent/src/harness/session/repo-utils.ts index f98b12565..a25b62def 100644 --- a/packages/agent/src/harness/session/repo-utils.ts +++ b/packages/agent/src/harness/session/repo-utils.ts @@ -5,9 +5,9 @@ import { type SessionMetadata, type SessionStorage, type SessionTreeEntry, -} from "../types.js"; -import { Session } from "./session.js"; -import { uuidv7 } from "./uuid.js"; +} from "../types.ts"; +import { Session } from "./session.ts"; +import { uuidv7 } from "./uuid.ts"; export function createSessionId(): string { return uuidv7(); diff --git a/packages/agent/src/harness/session/session.ts b/packages/agent/src/harness/session/session.ts index 0b0b3e1e4..4baf50ec8 100644 --- a/packages/agent/src/harness/session/session.ts +++ b/packages/agent/src/harness/session/session.ts @@ -1,6 +1,6 @@ import type { ImageContent, TextContent } from "@earendil-works/pi-ai"; -import type { AgentMessage } from "../../types.js"; -import { createBranchSummaryMessage, createCompactionSummaryMessage, createCustomMessage } from "../messages.js"; +import type { AgentMessage } from "../../types.ts"; +import { createBranchSummaryMessage, createCompactionSummaryMessage, createCustomMessage } from "../messages.ts"; import type { BranchSummaryEntry, CompactionEntry, @@ -15,8 +15,8 @@ import type { SessionStorage, SessionTreeEntry, ThinkingLevelChangeEntry, -} from "../types.js"; -import { SessionError } from "../types.js"; +} from "../types.ts"; +import { SessionError } from "../types.ts"; export function buildSessionContext(pathEntries: SessionTreeEntry[]): SessionContext { let thinkingLevel = "off"; diff --git a/packages/agent/src/harness/skills.ts b/packages/agent/src/harness/skills.ts index 7269857e9..a1a4c0c4a 100644 --- a/packages/agent/src/harness/skills.ts +++ b/packages/agent/src/harness/skills.ts @@ -1,6 +1,6 @@ import ignore from "ignore"; import { parse } from "yaml"; -import { type ExecutionEnv, type FileInfo, type Result, type Skill, toError } from "./types.js"; +import { type ExecutionEnv, type FileInfo, type Result, type Skill, toError } from "./types.ts"; const MAX_NAME_LENGTH = 64; const MAX_DESCRIPTION_LENGTH = 1024; diff --git a/packages/agent/src/harness/system-prompt.ts b/packages/agent/src/harness/system-prompt.ts index 44b8f6234..ec121da2c 100644 --- a/packages/agent/src/harness/system-prompt.ts +++ b/packages/agent/src/harness/system-prompt.ts @@ -1,4 +1,4 @@ -import type { Skill } from "./types.js"; +import type { Skill } from "./types.ts"; export function formatSkillsForSystemPrompt(skills: Skill[]): string { const visibleSkills = skills.filter((skill) => !skill.disableModelInvocation); diff --git a/packages/agent/src/harness/types.ts b/packages/agent/src/harness/types.ts index c9773be45..2d9096c4d 100644 --- a/packages/agent/src/harness/types.ts +++ b/packages/agent/src/harness/types.ts @@ -1,6 +1,6 @@ import type { ImageContent, Model, SimpleStreamOptions, TextContent, Transport } from "@earendil-works/pi-ai"; -import type { AgentEvent, AgentMessage, AgentTool, QueueMode, ThinkingLevel } from "../index.js"; -import type { Session } from "./session/session.js"; +import type { AgentEvent, AgentMessage, AgentTool, QueueMode, ThinkingLevel } from "../index.ts"; +import type { Session } from "./session/session.ts"; /** Result of a fallible operation. Expected failures are returned as `ok: false` instead of thrown. */ export type Result = { ok: true; value: TValue } | { ok: false; error: TError }; @@ -446,7 +446,7 @@ export interface SessionStorage; } -export type { Session } from "./session/session.js"; +export type { Session } from "./session/session.ts"; export interface SessionCreateOptions { id?: string; @@ -812,4 +812,4 @@ export interface AgentHarnessOptions< followUpMode?: QueueMode; } -export type { AgentHarness } from "./agent-harness.js"; +export type { AgentHarness } from "./agent-harness.ts"; diff --git a/packages/agent/src/harness/utils/shell-output.ts b/packages/agent/src/harness/utils/shell-output.ts index 23f1362cb..fea46d95a 100644 --- a/packages/agent/src/harness/utils/shell-output.ts +++ b/packages/agent/src/harness/utils/shell-output.ts @@ -6,8 +6,8 @@ import { ok, type Result, toError, -} from "../types.js"; -import { DEFAULT_MAX_BYTES, truncateTail } from "./truncate.js"; +} from "../types.ts"; +import { DEFAULT_MAX_BYTES, truncateTail } from "./truncate.ts"; export interface ShellCaptureOptions extends Omit { onChunk?: (chunk: string) => void; diff --git a/packages/agent/src/index.ts b/packages/agent/src/index.ts index 04275403f..fd3c2b9fc 100644 --- a/packages/agent/src/index.ts +++ b/packages/agent/src/index.ts @@ -1,8 +1,8 @@ // Core Agent -export * from "./agent.js"; +export * from "./agent.ts"; // Loop functions -export * from "./agent-loop.js"; -export * from "./harness/agent-harness.js"; +export * from "./agent-loop.ts"; +export * from "./harness/agent-harness.ts"; export { type BranchPreparation, type BranchSummaryDetails, @@ -10,7 +10,7 @@ export { collectEntriesForBranchSummary, generateBranchSummary, prepareBranchEntries, -} from "./harness/compaction/branch-summarization.js"; +} from "./harness/compaction/branch-summarization.ts"; export { calculateContextTokens, compact, @@ -24,21 +24,21 @@ export { prepareCompaction, serializeConversation, shouldCompact, -} from "./harness/compaction/compaction.js"; -export * from "./harness/messages.js"; -export * from "./harness/prompt-templates.js"; -export * from "./harness/session/jsonl-repo.js"; -export * from "./harness/session/memory-repo.js"; -export * from "./harness/session/repo-utils.js"; -export * from "./harness/session/session.js"; -export { uuidv7 } from "./harness/session/uuid.js"; -export * from "./harness/skills.js"; -export * from "./harness/system-prompt.js"; +} from "./harness/compaction/compaction.ts"; +export * from "./harness/messages.ts"; +export * from "./harness/prompt-templates.ts"; +export * from "./harness/session/jsonl-repo.ts"; +export * from "./harness/session/memory-repo.ts"; +export * from "./harness/session/repo-utils.ts"; +export * from "./harness/session/session.ts"; +export { uuidv7 } from "./harness/session/uuid.ts"; +export * from "./harness/skills.ts"; +export * from "./harness/system-prompt.ts"; // Harness -export * from "./harness/types.js"; -export * from "./harness/utils/shell-output.js"; -export * from "./harness/utils/truncate.js"; +export * from "./harness/types.ts"; +export * from "./harness/utils/shell-output.ts"; +export * from "./harness/utils/truncate.ts"; // Proxy utilities -export * from "./proxy.js"; +export * from "./proxy.ts"; // Types -export * from "./types.js"; +export * from "./types.ts"; diff --git a/packages/agent/src/node.ts b/packages/agent/src/node.ts index 23ccae43b..b6f53a5e0 100644 --- a/packages/agent/src/node.ts +++ b/packages/agent/src/node.ts @@ -1,2 +1,2 @@ -export { NodeExecutionEnv } from "./harness/env/nodejs.js"; -export * from "./index.js"; +export { NodeExecutionEnv } from "./harness/env/nodejs.ts"; +export * from "./index.ts"; diff --git a/packages/ai/scripts/generate-image-models.ts b/packages/ai/scripts/generate-image-models.ts index bd0c6727a..c312f3e4f 100644 --- a/packages/ai/scripts/generate-image-models.ts +++ b/packages/ai/scripts/generate-image-models.ts @@ -109,7 +109,7 @@ function generateImageModelsFile(models: ImagesModel<"openrouter-images">[]): st return `// This file is auto-generated by scripts/generate-image-models.ts // Do not edit manually - run 'npm run generate-image-models' to update -import type { ImagesApi, ImagesModel } from "./types.js"; +import type { ImagesApi, ImagesModel } from "./types.ts"; export const IMAGE_MODELS = { ${providerEntries} diff --git a/packages/ai/scripts/generate-models.ts b/packages/ai/scripts/generate-models.ts index f752f23b3..e896726c4 100644 --- a/packages/ai/scripts/generate-models.ts +++ b/packages/ai/scripts/generate-models.ts @@ -1863,7 +1863,7 @@ async function generateModels() { let output = `// This file is auto-generated by scripts/generate-models.ts // Do not edit manually - run 'npm run generate-models' to update -import type { Model } from "./types.js"; +import type { Model } from "./types.ts"; export const MODELS = { `; diff --git a/packages/ai/src/api-registry.ts b/packages/ai/src/api-registry.ts index ca0e06107..d86dd3e92 100644 --- a/packages/ai/src/api-registry.ts +++ b/packages/ai/src/api-registry.ts @@ -6,7 +6,7 @@ import type { SimpleStreamOptions, StreamFunction, StreamOptions, -} from "./types.js"; +} from "./types.ts"; export type ApiStreamFunction = ( model: Model, diff --git a/packages/ai/src/bedrock-provider.ts b/packages/ai/src/bedrock-provider.ts index 073054189..cf08b33ef 100644 --- a/packages/ai/src/bedrock-provider.ts +++ b/packages/ai/src/bedrock-provider.ts @@ -1,4 +1,4 @@ -import { streamBedrock, streamSimpleBedrock } from "./providers/amazon-bedrock.js"; +import { streamBedrock, streamSimpleBedrock } from "./providers/amazon-bedrock.ts"; export const bedrockProviderModule = { streamBedrock, diff --git a/packages/ai/src/cli.ts b/packages/ai/src/cli.ts index 7a4ff1fd3..38ee7e346 100644 --- a/packages/ai/src/cli.ts +++ b/packages/ai/src/cli.ts @@ -2,8 +2,8 @@ import { createInterface } from "node:readline"; import { existsSync, readFileSync, writeFileSync } from "fs"; -import { getOAuthProvider, getOAuthProviders } from "./utils/oauth/index.js"; -import type { OAuthCredentials, OAuthProviderId } from "./utils/oauth/types.js"; +import { getOAuthProvider, getOAuthProviders } from "./utils/oauth/index.ts"; +import type { OAuthCredentials, OAuthProviderId } from "./utils/oauth/types.ts"; const AUTH_FILE = "auth.json"; const PROVIDERS = getOAuthProviders(); diff --git a/packages/ai/src/env-api-keys.ts b/packages/ai/src/env-api-keys.ts index 6ed76d417..4aa0f7601 100644 --- a/packages/ai/src/env-api-keys.ts +++ b/packages/ai/src/env-api-keys.ts @@ -23,7 +23,7 @@ if (typeof process !== "undefined" && (process.versions?.node || process.version }); } -import type { KnownProvider } from "./types.js"; +import type { KnownProvider } from "./types.ts"; let _procEnvCache: Map | null = null; diff --git a/packages/ai/src/image-models.generated.ts b/packages/ai/src/image-models.generated.ts index 64836aa05..f5305b111 100644 --- a/packages/ai/src/image-models.generated.ts +++ b/packages/ai/src/image-models.generated.ts @@ -1,7 +1,7 @@ // This file is auto-generated by scripts/generate-image-models.ts // Do not edit manually - run 'npm run generate-image-models' to update -import type { ImagesApi, ImagesModel } from "./types.js"; +import type { ImagesApi, ImagesModel } from "./types.ts"; export const IMAGE_MODELS = { openrouter: { @@ -425,5 +425,20 @@ export const IMAGE_MODELS = { cacheWrite: 0, }, } satisfies ImagesModel<"openrouter-images">, + "x-ai/grok-imagine-image-quality": { + id: "x-ai/grok-imagine-image-quality", + name: "xAI: Grok Imagine Image Quality", + api: "openrouter-images", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + input: ["text", "image"], + output: ["image"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + } satisfies ImagesModel<"openrouter-images">, }, } as const satisfies Record>>; diff --git a/packages/ai/src/image-models.ts b/packages/ai/src/image-models.ts index afa4f415e..e8eb59bf6 100644 --- a/packages/ai/src/image-models.ts +++ b/packages/ai/src/image-models.ts @@ -1,5 +1,5 @@ -import { IMAGE_MODELS } from "./image-models.generated.js"; -import type { ImagesApi, ImagesModel, KnownImagesProvider } from "./types.js"; +import { IMAGE_MODELS } from "./image-models.generated.ts"; +import type { ImagesApi, ImagesModel, KnownImagesProvider } from "./types.ts"; const imageModelRegistry: Map>> = new Map(); diff --git a/packages/ai/src/images-api-registry.ts b/packages/ai/src/images-api-registry.ts index 2a0c0fd9b..4758439bf 100644 --- a/packages/ai/src/images-api-registry.ts +++ b/packages/ai/src/images-api-registry.ts @@ -1,4 +1,4 @@ -import type { AssistantImages, ImagesApi, ImagesContext, ImagesFunction, ImagesModel, ImagesOptions } from "./types.js"; +import type { AssistantImages, ImagesApi, ImagesContext, ImagesFunction, ImagesModel, ImagesOptions } from "./types.ts"; export type ImagesApiFunction = ( model: ImagesModel, diff --git a/packages/ai/src/images.ts b/packages/ai/src/images.ts index 88eb09f2e..47d0eecc5 100644 --- a/packages/ai/src/images.ts +++ b/packages/ai/src/images.ts @@ -1,7 +1,7 @@ -import "./providers/images/register-builtins.js"; +import "./providers/images/register-builtins.ts"; -import { getImagesApiProvider } from "./images-api-registry.js"; -import type { AssistantImages, ImagesApi, ImagesContext, ImagesModel, ProviderImagesOptions } from "./types.js"; +import { getImagesApiProvider } from "./images-api-registry.ts"; +import type { AssistantImages, ImagesApi, ImagesContext, ImagesModel, ProviderImagesOptions } from "./types.ts"; function resolveImagesApiProvider(api: ImagesApi) { const provider = getImagesApiProvider(api); diff --git a/packages/ai/src/index.ts b/packages/ai/src/index.ts index 0a5ce4ede..fd06fe81b 100644 --- a/packages/ai/src/index.ts +++ b/packages/ai/src/index.ts @@ -1,34 +1,34 @@ export type { Static, TSchema } from "typebox"; export { Type } from "typebox"; -export * from "./api-registry.js"; -export * from "./env-api-keys.js"; -export * from "./image-models.js"; -export * from "./images.js"; -export * from "./images-api-registry.js"; -export * from "./models.js"; -export type { BedrockOptions, BedrockThinkingDisplay } from "./providers/amazon-bedrock.js"; -export type { AnthropicEffort, AnthropicOptions, AnthropicThinkingDisplay } from "./providers/anthropic.js"; -export type { AzureOpenAIResponsesOptions } from "./providers/azure-openai-responses.js"; -export * from "./providers/faux.js"; -export type { GoogleOptions } from "./providers/google.js"; -export type { GoogleThinkingLevel } from "./providers/google-shared.js"; -export type { GoogleVertexOptions } from "./providers/google-vertex.js"; -export * from "./providers/images/register-builtins.js"; -export type { MistralOptions } from "./providers/mistral.js"; +export * from "./api-registry.ts"; +export * from "./env-api-keys.ts"; +export * from "./image-models.ts"; +export * from "./images.ts"; +export * from "./images-api-registry.ts"; +export * from "./models.ts"; +export type { BedrockOptions, BedrockThinkingDisplay } from "./providers/amazon-bedrock.ts"; +export type { AnthropicEffort, AnthropicOptions, AnthropicThinkingDisplay } from "./providers/anthropic.ts"; +export type { AzureOpenAIResponsesOptions } from "./providers/azure-openai-responses.ts"; +export * from "./providers/faux.ts"; +export type { GoogleOptions } from "./providers/google.ts"; +export type { GoogleThinkingLevel } from "./providers/google-shared.ts"; +export type { GoogleVertexOptions } from "./providers/google-vertex.ts"; +export * from "./providers/images/register-builtins.ts"; +export type { MistralOptions } from "./providers/mistral.ts"; export type { OpenAICodexResponsesOptions, OpenAICodexWebSocketDebugStats, -} from "./providers/openai-codex-responses.js"; -export type { OpenAICompletionsOptions } from "./providers/openai-completions.js"; -export type { OpenAIResponsesOptions } from "./providers/openai-responses.js"; -export * from "./providers/register-builtins.js"; -export * from "./session-resources.js"; -export * from "./stream.js"; -export * from "./types.js"; -export * from "./utils/diagnostics.js"; -export * from "./utils/event-stream.js"; -export * from "./utils/json-parse.js"; +} from "./providers/openai-codex-responses.ts"; +export type { OpenAICompletionsOptions } from "./providers/openai-completions.ts"; +export type { OpenAIResponsesOptions } from "./providers/openai-responses.ts"; +export * from "./providers/register-builtins.ts"; +export * from "./session-resources.ts"; +export * from "./stream.ts"; +export * from "./types.ts"; +export * from "./utils/diagnostics.ts"; +export * from "./utils/event-stream.ts"; +export * from "./utils/json-parse.ts"; export type { OAuthAuthInfo, OAuthCredentials, @@ -40,7 +40,7 @@ export type { OAuthProviderInterface, OAuthSelectOption, OAuthSelectPrompt, -} from "./utils/oauth/types.js"; -export * from "./utils/overflow.js"; -export * from "./utils/typebox-helpers.js"; -export * from "./utils/validation.js"; +} from "./utils/oauth/types.ts"; +export * from "./utils/overflow.ts"; +export * from "./utils/typebox-helpers.ts"; +export * from "./utils/validation.ts"; diff --git a/packages/ai/src/models.generated.ts b/packages/ai/src/models.generated.ts index 33df1db29..dbd7d4951 100644 --- a/packages/ai/src/models.generated.ts +++ b/packages/ai/src/models.generated.ts @@ -1,7 +1,7 @@ // This file is auto-generated by scripts/generate-models.ts // Do not edit manually - run 'npm run generate-models' to update -import type { Model } from "./types.js"; +import type { Model } from "./types.ts"; export const MODELS = { "amazon-bedrock": { @@ -911,8 +911,8 @@ export const MODELS = { cacheRead: 0, cacheWrite: 0, }, - contextWindow: 256000, - maxTokens: 256000, + contextWindow: 262143, + maxTokens: 16000, } satisfies Model<"bedrock-converse-stream">, "moonshotai.kimi-k2.5": { id: "moonshotai.kimi-k2.5", @@ -928,8 +928,8 @@ export const MODELS = { cacheRead: 0, cacheWrite: 0, }, - contextWindow: 256000, - maxTokens: 256000, + contextWindow: 262143, + maxTokens: 16000, } satisfies Model<"bedrock-converse-stream">, "nvidia.nemotron-nano-12b-v2": { id: "nvidia.nemotron-nano-12b-v2", @@ -3482,6 +3482,24 @@ export const MODELS = { contextWindow: 160000, maxTokens: 160000, } satisfies Model<"anthropic-messages">, + "accounts/fireworks/models/deepseek-v4-flash": { + id: "accounts/fireworks/models/deepseek-v4-flash", + name: "DeepSeek V4 Flash", + api: "anthropic-messages", + provider: "fireworks", + baseUrl: "https://api.fireworks.ai/inference", + compat: {"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}, + reasoning: true, + input: ["text"], + cost: { + input: 0.14, + output: 0.28, + cacheRead: 0.03, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 384000, + } satisfies Model<"anthropic-messages">, "accounts/fireworks/models/deepseek-v4-pro": { id: "accounts/fireworks/models/deepseek-v4-pro", name: "DeepSeek V4 Pro", @@ -4514,6 +4532,24 @@ export const MODELS = { contextWindow: 1048576, maxTokens: 65536, } satisfies Model<"google-generative-ai">, + "gemini-3.5-flash": { + id: "gemini-3.5-flash", + name: "Gemini 3.5 Flash", + api: "google-generative-ai", + provider: "google", + baseUrl: "https://generativelanguage.googleapis.com/v1beta", + reasoning: true, + thinkingLevelMap: {"off":null}, + input: ["text", "image"], + cost: { + input: 1.5, + output: 9, + cacheRead: 0.15, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model<"google-generative-ai">, "gemini-flash-latest": { id: "gemini-flash-latest", name: "Gemini Flash Latest", @@ -9194,6 +9230,23 @@ export const MODELS = { contextWindow: 1048756, maxTokens: 65536, } satisfies Model<"openai-completions">, + "google/gemini-3.5-flash": { + id: "google/gemini-3.5-flash", + name: "Google: Gemini 3.5 Flash", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.5, + output: 9, + cacheRead: 0.15, + cacheWrite: 0.08333333333333334, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model<"openai-completions">, "google/gemma-3-12b-it": { id: "google/gemma-3-12b-it", name: "Google: Gemma 3 12B", @@ -11868,13 +11921,13 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 0.14, + input: 0.13899999999999998, output: 1, - cacheRead: 0.049999999999999996, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 81920, + maxTokens: 4096, } satisfies Model<"openai-completions">, "qwen/qwen3.5-397b-a17b": { id: "qwen/qwen3.5-397b-a17b", @@ -12514,13 +12567,13 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.98, - output: 3.08, - cacheRead: 0.182, + input: 0, + output: 0, + cacheRead: 0, cacheWrite: 0, }, - contextWindow: 202752, - maxTokens: 4096, + contextWindow: 202800, + maxTokens: 202800, } satisfies Model<"openai-completions">, "z-ai/glm-5v-turbo": { id: "z-ai/glm-5v-turbo", @@ -12599,9 +12652,9 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 0.5, - output: 3, - cacheRead: 0.049999999999999996, + input: 1.5, + output: 9, + cacheRead: 0.15, cacheWrite: 0.08333333333333334, }, contextWindow: 1048576, @@ -13868,6 +13921,23 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 64000, } satisfies Model<"anthropic-messages">, + "google/gemini-3.5-flash": { + id: "google/gemini-3.5-flash", + name: "Gemini 3.5 Flash", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.5, + output: 9, + cacheRead: 0.15, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 64000, + } satisfies Model<"anthropic-messages">, "google/gemma-4-26b-a4b-it": { id: "google/gemma-4-26b-a4b-it", name: "Gemma 4 26B A4B IT", diff --git a/packages/ai/src/models.ts b/packages/ai/src/models.ts index 2125e685b..e14a6c2fb 100644 --- a/packages/ai/src/models.ts +++ b/packages/ai/src/models.ts @@ -1,5 +1,5 @@ -import { MODELS } from "./models.generated.js"; -import type { Api, KnownProvider, Model, ModelThinkingLevel, Usage } from "./types.js"; +import { MODELS } from "./models.generated.ts"; +import type { Api, KnownProvider, Model, ModelThinkingLevel, Usage } from "./types.ts"; const modelRegistry: Map>> = new Map(); diff --git a/packages/ai/src/oauth.ts b/packages/ai/src/oauth.ts index d768a0fe6..487816d8f 100644 --- a/packages/ai/src/oauth.ts +++ b/packages/ai/src/oauth.ts @@ -1 +1 @@ -export * from "./utils/oauth/index.js"; +export * from "./utils/oauth/index.ts"; diff --git a/packages/ai/src/providers/amazon-bedrock.ts b/packages/ai/src/providers/amazon-bedrock.ts index 6e616759d..5d89ac564 100644 --- a/packages/ai/src/providers/amazon-bedrock.ts +++ b/packages/ai/src/providers/amazon-bedrock.ts @@ -22,7 +22,7 @@ import { } from "@aws-sdk/client-bedrock-runtime"; import { NodeHttpHandler } from "@smithy/node-http-handler"; import type { DocumentType } from "@smithy/types"; -import { calculateCost } from "../models.js"; +import { calculateCost } from "../models.ts"; import type { Api, AssistantMessage, @@ -40,13 +40,13 @@ import type { Tool, ToolCall, ToolResultMessage, -} from "../types.js"; -import { AssistantMessageEventStream } from "../utils/event-stream.js"; -import { parseStreamingJson } from "../utils/json-parse.js"; -import { createHttpProxyAgentsForTarget } from "../utils/node-http-proxy.js"; -import { sanitizeSurrogates } from "../utils/sanitize-unicode.js"; -import { adjustMaxTokensForThinking, buildBaseOptions, clampReasoning } from "./simple-options.js"; -import { transformMessages } from "./transform-messages.js"; +} from "../types.ts"; +import { AssistantMessageEventStream } from "../utils/event-stream.ts"; +import { parseStreamingJson } from "../utils/json-parse.ts"; +import { createHttpProxyAgentsForTarget } from "../utils/node-http-proxy.ts"; +import { sanitizeSurrogates } from "../utils/sanitize-unicode.ts"; +import { adjustMaxTokensForThinking, buildBaseOptions, clampReasoning } from "./simple-options.ts"; +import { transformMessages } from "./transform-messages.ts"; export type BedrockThinkingDisplay = "summarized" | "omitted"; diff --git a/packages/ai/src/providers/anthropic.ts b/packages/ai/src/providers/anthropic.ts index 29f51df98..a594a4795 100644 --- a/packages/ai/src/providers/anthropic.ts +++ b/packages/ai/src/providers/anthropic.ts @@ -6,8 +6,8 @@ import type { MessageParam, RawMessageStreamEvent, } from "@anthropic-ai/sdk/resources/messages.js"; -import { getEnvApiKey } from "../env-api-keys.js"; -import { calculateCost } from "../models.js"; +import { getEnvApiKey } from "../env-api-keys.ts"; +import { calculateCost } from "../models.ts"; import type { AnthropicMessagesCompat, Api, @@ -26,16 +26,16 @@ import type { Tool, ToolCall, ToolResultMessage, -} from "../types.js"; -import { AssistantMessageEventStream } from "../utils/event-stream.js"; -import { headersToRecord } from "../utils/headers.js"; -import { parseJsonWithRepair, parseStreamingJson } from "../utils/json-parse.js"; -import { sanitizeSurrogates } from "../utils/sanitize-unicode.js"; +} from "../types.ts"; +import { AssistantMessageEventStream } from "../utils/event-stream.ts"; +import { headersToRecord } from "../utils/headers.ts"; +import { parseJsonWithRepair, parseStreamingJson } from "../utils/json-parse.ts"; +import { sanitizeSurrogates } from "../utils/sanitize-unicode.ts"; -import { resolveCloudflareBaseUrl } from "./cloudflare.js"; -import { buildCopilotDynamicHeaders, hasCopilotVisionInput } from "./github-copilot-headers.js"; -import { adjustMaxTokensForThinking, buildBaseOptions } from "./simple-options.js"; -import { transformMessages } from "./transform-messages.js"; +import { resolveCloudflareBaseUrl } from "./cloudflare.ts"; +import { buildCopilotDynamicHeaders, hasCopilotVisionInput } from "./github-copilot-headers.ts"; +import { adjustMaxTokensForThinking, buildBaseOptions } from "./simple-options.ts"; +import { transformMessages } from "./transform-messages.ts"; /** * Resolve cache retention preference. diff --git a/packages/ai/src/providers/azure-openai-responses.ts b/packages/ai/src/providers/azure-openai-responses.ts index 5625dbd37..60601a388 100644 --- a/packages/ai/src/providers/azure-openai-responses.ts +++ b/packages/ai/src/providers/azure-openai-responses.ts @@ -1,7 +1,7 @@ import { AzureOpenAI } from "openai"; import type { ResponseCreateParamsStreaming } from "openai/resources/responses/responses.js"; -import { getEnvApiKey } from "../env-api-keys.js"; -import { clampThinkingLevel } from "../models.js"; +import { getEnvApiKey } from "../env-api-keys.ts"; +import { clampThinkingLevel } from "../models.ts"; import type { Api, AssistantMessage, @@ -10,12 +10,12 @@ import type { SimpleStreamOptions, StreamFunction, StreamOptions, -} from "../types.js"; -import { AssistantMessageEventStream } from "../utils/event-stream.js"; -import { headersToRecord } from "../utils/headers.js"; -import { clampOpenAIPromptCacheKey } from "./openai-prompt-cache.js"; -import { convertResponsesMessages, convertResponsesTools, processResponsesStream } from "./openai-responses-shared.js"; -import { buildBaseOptions } from "./simple-options.js"; +} from "../types.ts"; +import { AssistantMessageEventStream } from "../utils/event-stream.ts"; +import { headersToRecord } from "../utils/headers.ts"; +import { clampOpenAIPromptCacheKey } from "./openai-prompt-cache.ts"; +import { convertResponsesMessages, convertResponsesTools, processResponsesStream } from "./openai-responses-shared.ts"; +import { buildBaseOptions } from "./simple-options.ts"; const DEFAULT_AZURE_API_VERSION = "v1"; const AZURE_TOOL_CALL_PROVIDERS = new Set(["openai", "openai-codex", "opencode", "azure-openai-responses"]); diff --git a/packages/ai/src/providers/cloudflare.ts b/packages/ai/src/providers/cloudflare.ts index 8e9d44cba..cd0a81596 100644 --- a/packages/ai/src/providers/cloudflare.ts +++ b/packages/ai/src/providers/cloudflare.ts @@ -1,4 +1,4 @@ -import type { Api, Model } from "../types.js"; +import type { Api, Model } from "../types.ts"; /** Workers AI direct endpoint. */ export const CLOUDFLARE_WORKERS_AI_BASE_URL = diff --git a/packages/ai/src/providers/faux.ts b/packages/ai/src/providers/faux.ts index 7bba1b72e..7e6298479 100644 --- a/packages/ai/src/providers/faux.ts +++ b/packages/ai/src/providers/faux.ts @@ -1,4 +1,4 @@ -import { registerApiProvider, unregisterApiProviders } from "../api-registry.js"; +import { registerApiProvider, unregisterApiProviders } from "../api-registry.ts"; import type { AssistantMessage, AssistantMessageEventStream, @@ -14,8 +14,8 @@ import type { ToolCall, ToolResultMessage, Usage, -} from "../types.js"; -import { createAssistantMessageEventStream } from "../utils/event-stream.js"; +} from "../types.ts"; +import { createAssistantMessageEventStream } from "../utils/event-stream.ts"; const DEFAULT_API = "faux"; const DEFAULT_PROVIDER = "faux"; diff --git a/packages/ai/src/providers/github-copilot-headers.ts b/packages/ai/src/providers/github-copilot-headers.ts index 4f01a9d2a..602750c49 100644 --- a/packages/ai/src/providers/github-copilot-headers.ts +++ b/packages/ai/src/providers/github-copilot-headers.ts @@ -1,4 +1,4 @@ -import type { Message } from "../types.js"; +import type { Message } from "../types.ts"; // Copilot expects X-Initiator to indicate whether the request is user-initiated // or agent-initiated (e.g. follow-up after assistant/tool messages). diff --git a/packages/ai/src/providers/google-shared.ts b/packages/ai/src/providers/google-shared.ts index 9f0ab1806..1559b20b7 100644 --- a/packages/ai/src/providers/google-shared.ts +++ b/packages/ai/src/providers/google-shared.ts @@ -3,9 +3,9 @@ */ import { type Content, FinishReason, FunctionCallingConfigMode, type Part } from "@google/genai"; -import type { Context, ImageContent, Model, StopReason, TextContent, Tool } from "../types.js"; -import { sanitizeSurrogates } from "../utils/sanitize-unicode.js"; -import { transformMessages } from "./transform-messages.js"; +import type { Context, ImageContent, Model, StopReason, TextContent, Tool } from "../types.ts"; +import { sanitizeSurrogates } from "../utils/sanitize-unicode.ts"; +import { transformMessages } from "./transform-messages.ts"; type GoogleApiType = "google-generative-ai" | "google-vertex"; diff --git a/packages/ai/src/providers/google-vertex.ts b/packages/ai/src/providers/google-vertex.ts index e29adcb1b..e5f18dabb 100644 --- a/packages/ai/src/providers/google-vertex.ts +++ b/packages/ai/src/providers/google-vertex.ts @@ -7,7 +7,7 @@ import { type ThinkingConfig, ThinkingLevel, } from "@google/genai"; -import { calculateCost, clampThinkingLevel } from "../models.js"; +import { calculateCost, clampThinkingLevel } from "../models.ts"; import type { Api, AssistantMessage, @@ -21,10 +21,10 @@ import type { ThinkingBudgets, ThinkingContent, ToolCall, -} from "../types.js"; -import { AssistantMessageEventStream } from "../utils/event-stream.js"; -import { sanitizeSurrogates } from "../utils/sanitize-unicode.js"; -import type { GoogleThinkingLevel } from "./google-shared.js"; +} from "../types.ts"; +import { AssistantMessageEventStream } from "../utils/event-stream.ts"; +import { sanitizeSurrogates } from "../utils/sanitize-unicode.ts"; +import type { GoogleThinkingLevel } from "./google-shared.ts"; import { convertMessages, convertTools, @@ -32,8 +32,8 @@ import { mapStopReason, mapToolChoice, retainThoughtSignature, -} from "./google-shared.js"; -import { buildBaseOptions } from "./simple-options.js"; +} from "./google-shared.ts"; +import { buildBaseOptions } from "./simple-options.ts"; export interface GoogleVertexOptions extends StreamOptions { toolChoice?: "auto" | "none" | "any"; diff --git a/packages/ai/src/providers/google.ts b/packages/ai/src/providers/google.ts index fd1adfdd9..d0ddf6734 100644 --- a/packages/ai/src/providers/google.ts +++ b/packages/ai/src/providers/google.ts @@ -4,8 +4,8 @@ import { GoogleGenAI, type ThinkingConfig, } from "@google/genai"; -import { getEnvApiKey } from "../env-api-keys.js"; -import { calculateCost, clampThinkingLevel } from "../models.js"; +import { getEnvApiKey } from "../env-api-keys.ts"; +import { calculateCost, clampThinkingLevel } from "../models.ts"; import type { Api, AssistantMessage, @@ -19,10 +19,10 @@ import type { ThinkingContent, ThinkingLevel, ToolCall, -} from "../types.js"; -import { AssistantMessageEventStream } from "../utils/event-stream.js"; -import { sanitizeSurrogates } from "../utils/sanitize-unicode.js"; -import type { GoogleThinkingLevel } from "./google-shared.js"; +} from "../types.ts"; +import { AssistantMessageEventStream } from "../utils/event-stream.ts"; +import { sanitizeSurrogates } from "../utils/sanitize-unicode.ts"; +import type { GoogleThinkingLevel } from "./google-shared.ts"; import { convertMessages, convertTools, @@ -30,8 +30,8 @@ import { mapStopReason, mapToolChoice, retainThoughtSignature, -} from "./google-shared.js"; -import { buildBaseOptions } from "./simple-options.js"; +} from "./google-shared.ts"; +import { buildBaseOptions } from "./simple-options.ts"; export interface GoogleOptions extends StreamOptions { toolChoice?: "auto" | "none" | "any"; diff --git a/packages/ai/src/providers/images/openrouter.ts b/packages/ai/src/providers/images/openrouter.ts index 70c95a8ce..01e81a604 100644 --- a/packages/ai/src/providers/images/openrouter.ts +++ b/packages/ai/src/providers/images/openrouter.ts @@ -6,7 +6,7 @@ import type { ChatCompletionContentPartText, ChatCompletionCreateParamsNonStreaming, } from "openai/resources/chat/completions.js"; -import { getEnvApiKey } from "../../env-api-keys.js"; +import { getEnvApiKey } from "../../env-api-keys.ts"; import type { AssistantImages, ImageContent, @@ -15,9 +15,9 @@ import type { ImagesModel, ImagesOptions, TextContent, -} from "../../types.js"; -import { headersToRecord } from "../../utils/headers.js"; -import { sanitizeSurrogates } from "../../utils/sanitize-unicode.js"; +} from "../../types.ts"; +import { headersToRecord } from "../../utils/headers.ts"; +import { sanitizeSurrogates } from "../../utils/sanitize-unicode.ts"; interface OpenRouterGeneratedImage { image_url?: string | { url?: string }; diff --git a/packages/ai/src/providers/images/register-builtins.ts b/packages/ai/src/providers/images/register-builtins.ts index 04338f201..e3decbb99 100644 --- a/packages/ai/src/providers/images/register-builtins.ts +++ b/packages/ai/src/providers/images/register-builtins.ts @@ -1,6 +1,6 @@ -import { registerImagesApiProvider } from "../../images-api-registry.js"; -import type { AssistantImages, ImagesContext, ImagesFunction, ImagesModel, ImagesOptions } from "../../types.js"; -import type { generateImagesOpenRouter as generateImagesOpenRouterFunction } from "./openrouter.js"; +import { registerImagesApiProvider } from "../../images-api-registry.ts"; +import type { AssistantImages, ImagesContext, ImagesFunction, ImagesModel, ImagesOptions } from "../../types.ts"; +import type { generateImagesOpenRouter as generateImagesOpenRouterFunction } from "./openrouter.ts"; interface OpenRouterImagesProviderModule { generateImagesOpenRouter: typeof generateImagesOpenRouterFunction; @@ -21,7 +21,7 @@ function createLazyLoadErrorImages(model: ImagesModel<"openrouter-images">, erro } function loadOpenRouterImagesProviderModule(): Promise { - openRouterImagesProviderModulePromise ||= import("./openrouter.js").then( + openRouterImagesProviderModulePromise ||= import("./openrouter.ts").then( (module) => module as OpenRouterImagesProviderModule, ); return openRouterImagesProviderModulePromise; diff --git a/packages/ai/src/providers/mistral.ts b/packages/ai/src/providers/mistral.ts index c1500dbfd..a15f141af 100644 --- a/packages/ai/src/providers/mistral.ts +++ b/packages/ai/src/providers/mistral.ts @@ -6,8 +6,8 @@ import type { ContentChunk, FunctionTool, } from "@mistralai/mistralai/models/components"; -import { getEnvApiKey } from "../env-api-keys.js"; -import { calculateCost, clampThinkingLevel } from "../models.js"; +import { getEnvApiKey } from "../env-api-keys.ts"; +import { calculateCost, clampThinkingLevel } from "../models.ts"; import type { AssistantMessage, Context, @@ -21,13 +21,13 @@ import type { ThinkingContent, Tool, ToolCall, -} from "../types.js"; -import { AssistantMessageEventStream } from "../utils/event-stream.js"; -import { shortHash } from "../utils/hash.js"; -import { parseStreamingJson } from "../utils/json-parse.js"; -import { sanitizeSurrogates } from "../utils/sanitize-unicode.js"; -import { buildBaseOptions } from "./simple-options.js"; -import { transformMessages } from "./transform-messages.js"; +} from "../types.ts"; +import { AssistantMessageEventStream } from "../utils/event-stream.ts"; +import { shortHash } from "../utils/hash.ts"; +import { parseStreamingJson } from "../utils/json-parse.ts"; +import { sanitizeSurrogates } from "../utils/sanitize-unicode.ts"; +import { buildBaseOptions } from "./simple-options.ts"; +import { transformMessages } from "./transform-messages.ts"; const MISTRAL_TOOL_CALL_ID_LENGTH = 9; const MAX_MISTRAL_ERROR_BODY_CHARS = 4000; diff --git a/packages/ai/src/providers/openai-codex-responses.ts b/packages/ai/src/providers/openai-codex-responses.ts index ab2ba7893..7bb9ca479 100644 --- a/packages/ai/src/providers/openai-codex-responses.ts +++ b/packages/ai/src/providers/openai-codex-responses.ts @@ -20,9 +20,9 @@ if (typeof process !== "undefined" && (process.versions?.node || process.version }); } -import { getEnvApiKey } from "../env-api-keys.js"; -import { clampThinkingLevel } from "../models.js"; -import { registerSessionResourceCleanup } from "../session-resources.js"; +import { getEnvApiKey } from "../env-api-keys.ts"; +import { clampThinkingLevel } from "../models.ts"; +import { registerSessionResourceCleanup } from "../session-resources.ts"; import type { Api, AssistantMessage, @@ -32,17 +32,17 @@ import type { StreamFunction, StreamOptions, Usage, -} from "../types.js"; +} from "../types.ts"; import { appendAssistantMessageDiagnostic, createAssistantMessageDiagnostic, formatThrownValue, -} from "../utils/diagnostics.js"; -import { AssistantMessageEventStream } from "../utils/event-stream.js"; -import { headersToRecord } from "../utils/headers.js"; -import { clampOpenAIPromptCacheKey } from "./openai-prompt-cache.js"; -import { convertResponsesMessages, convertResponsesTools, processResponsesStream } from "./openai-responses-shared.js"; -import { buildBaseOptions } from "./simple-options.js"; +} from "../utils/diagnostics.ts"; +import { AssistantMessageEventStream } from "../utils/event-stream.ts"; +import { headersToRecord } from "../utils/headers.ts"; +import { clampOpenAIPromptCacheKey } from "./openai-prompt-cache.ts"; +import { convertResponsesMessages, convertResponsesTools, processResponsesStream } from "./openai-responses-shared.ts"; +import { buildBaseOptions } from "./simple-options.ts"; // ============================================================================ // Configuration diff --git a/packages/ai/src/providers/openai-completions.ts b/packages/ai/src/providers/openai-completions.ts index 658d41796..12b6a508b 100644 --- a/packages/ai/src/providers/openai-completions.ts +++ b/packages/ai/src/providers/openai-completions.ts @@ -10,8 +10,8 @@ import type { ChatCompletionSystemMessageParam, ChatCompletionToolMessageParam, } from "openai/resources/chat/completions.js"; -import { getEnvApiKey } from "../env-api-keys.js"; -import { calculateCost, clampThinkingLevel } from "../models.js"; +import { getEnvApiKey } from "../env-api-keys.ts"; +import { calculateCost, clampThinkingLevel } from "../models.ts"; import type { AssistantMessage, CacheRetention, @@ -29,16 +29,16 @@ import type { Tool, ToolCall, ToolResultMessage, -} from "../types.js"; -import { AssistantMessageEventStream } from "../utils/event-stream.js"; -import { headersToRecord } from "../utils/headers.js"; -import { parseStreamingJson } from "../utils/json-parse.js"; -import { sanitizeSurrogates } from "../utils/sanitize-unicode.js"; -import { isCloudflareProvider, resolveCloudflareBaseUrl } from "./cloudflare.js"; -import { buildCopilotDynamicHeaders, hasCopilotVisionInput } from "./github-copilot-headers.js"; -import { clampOpenAIPromptCacheKey } from "./openai-prompt-cache.js"; -import { buildBaseOptions } from "./simple-options.js"; -import { transformMessages } from "./transform-messages.js"; +} from "../types.ts"; +import { AssistantMessageEventStream } from "../utils/event-stream.ts"; +import { headersToRecord } from "../utils/headers.ts"; +import { parseStreamingJson } from "../utils/json-parse.ts"; +import { sanitizeSurrogates } from "../utils/sanitize-unicode.ts"; +import { isCloudflareProvider, resolveCloudflareBaseUrl } from "./cloudflare.ts"; +import { buildCopilotDynamicHeaders, hasCopilotVisionInput } from "./github-copilot-headers.ts"; +import { clampOpenAIPromptCacheKey } from "./openai-prompt-cache.ts"; +import { buildBaseOptions } from "./simple-options.ts"; +import { transformMessages } from "./transform-messages.ts"; /** * Check if conversation messages contain tool calls or tool results. diff --git a/packages/ai/src/providers/openai-responses-shared.ts b/packages/ai/src/providers/openai-responses-shared.ts index 0d68cd7f4..b7bcd192e 100644 --- a/packages/ai/src/providers/openai-responses-shared.ts +++ b/packages/ai/src/providers/openai-responses-shared.ts @@ -12,7 +12,7 @@ import type { ResponseReasoningItem, ResponseStreamEvent, } from "openai/resources/responses/responses.js"; -import { calculateCost } from "../models.js"; +import { calculateCost } from "../models.ts"; import type { Api, AssistantMessage, @@ -26,12 +26,12 @@ import type { Tool, ToolCall, Usage, -} from "../types.js"; -import type { AssistantMessageEventStream } from "../utils/event-stream.js"; -import { shortHash } from "../utils/hash.js"; -import { parseStreamingJson } from "../utils/json-parse.js"; -import { sanitizeSurrogates } from "../utils/sanitize-unicode.js"; -import { transformMessages } from "./transform-messages.js"; +} from "../types.ts"; +import type { AssistantMessageEventStream } from "../utils/event-stream.ts"; +import { shortHash } from "../utils/hash.ts"; +import { parseStreamingJson } from "../utils/json-parse.ts"; +import { sanitizeSurrogates } from "../utils/sanitize-unicode.ts"; +import { transformMessages } from "./transform-messages.ts"; // ============================================================================= // Utilities diff --git a/packages/ai/src/providers/openai-responses.ts b/packages/ai/src/providers/openai-responses.ts index a23b197c5..e2d1ca80e 100644 --- a/packages/ai/src/providers/openai-responses.ts +++ b/packages/ai/src/providers/openai-responses.ts @@ -1,7 +1,7 @@ import OpenAI from "openai"; import type { ResponseCreateParamsStreaming } from "openai/resources/responses/responses.js"; -import { getEnvApiKey } from "../env-api-keys.js"; -import { clampThinkingLevel } from "../models.js"; +import { getEnvApiKey } from "../env-api-keys.ts"; +import { clampThinkingLevel } from "../models.ts"; import type { Api, AssistantMessage, @@ -13,14 +13,14 @@ import type { StreamFunction, StreamOptions, Usage, -} from "../types.js"; -import { AssistantMessageEventStream } from "../utils/event-stream.js"; -import { headersToRecord } from "../utils/headers.js"; -import { isCloudflareProvider, resolveCloudflareBaseUrl } from "./cloudflare.js"; -import { buildCopilotDynamicHeaders, hasCopilotVisionInput } from "./github-copilot-headers.js"; -import { clampOpenAIPromptCacheKey } from "./openai-prompt-cache.js"; -import { convertResponsesMessages, convertResponsesTools, processResponsesStream } from "./openai-responses-shared.js"; -import { buildBaseOptions } from "./simple-options.js"; +} from "../types.ts"; +import { AssistantMessageEventStream } from "../utils/event-stream.ts"; +import { headersToRecord } from "../utils/headers.ts"; +import { isCloudflareProvider, resolveCloudflareBaseUrl } from "./cloudflare.ts"; +import { buildCopilotDynamicHeaders, hasCopilotVisionInput } from "./github-copilot-headers.ts"; +import { clampOpenAIPromptCacheKey } from "./openai-prompt-cache.ts"; +import { convertResponsesMessages, convertResponsesTools, processResponsesStream } from "./openai-responses-shared.ts"; +import { buildBaseOptions } from "./simple-options.ts"; const OPENAI_TOOL_CALL_PROVIDERS = new Set(["openai", "openai-codex", "opencode"]); diff --git a/packages/ai/src/providers/register-builtins.ts b/packages/ai/src/providers/register-builtins.ts index 644756808..8fdcaaf0f 100644 --- a/packages/ai/src/providers/register-builtins.ts +++ b/packages/ai/src/providers/register-builtins.ts @@ -1,4 +1,4 @@ -import { clearApiProviders, registerApiProvider } from "../api-registry.js"; +import { clearApiProviders, registerApiProvider } from "../api-registry.ts"; import type { Api, AssistantMessage, @@ -8,17 +8,17 @@ import type { SimpleStreamOptions, StreamFunction, StreamOptions, -} from "../types.js"; -import { AssistantMessageEventStream } from "../utils/event-stream.js"; -import type { BedrockOptions } from "./amazon-bedrock.js"; -import type { AnthropicOptions } from "./anthropic.js"; -import type { AzureOpenAIResponsesOptions } from "./azure-openai-responses.js"; -import type { GoogleOptions } from "./google.js"; -import type { GoogleVertexOptions } from "./google-vertex.js"; -import type { MistralOptions } from "./mistral.js"; -import type { OpenAICodexResponsesOptions } from "./openai-codex-responses.js"; -import type { OpenAICompletionsOptions } from "./openai-completions.js"; -import type { OpenAIResponsesOptions } from "./openai-responses.js"; +} from "../types.ts"; +import { AssistantMessageEventStream } from "../utils/event-stream.ts"; +import type { BedrockOptions } from "./amazon-bedrock.ts"; +import type { AnthropicOptions } from "./anthropic.ts"; +import type { AzureOpenAIResponsesOptions } from "./azure-openai-responses.ts"; +import type { GoogleOptions } from "./google.ts"; +import type { GoogleVertexOptions } from "./google-vertex.ts"; +import type { MistralOptions } from "./mistral.ts"; +import type { OpenAICodexResponsesOptions } from "./openai-codex-responses.ts"; +import type { OpenAICompletionsOptions } from "./openai-completions.ts"; +import type { OpenAIResponsesOptions } from "./openai-responses.ts"; interface LazyProviderModule< TApi extends Api, @@ -86,7 +86,10 @@ interface BedrockProviderModule { ) => AsyncIterable; } -const importNodeOnlyProvider = (specifier: string): Promise => import(specifier); +const importNodeOnlyProvider = (specifier: string): Promise => { + const runtimeSpecifier = import.meta.url.endsWith(".js") ? specifier.replace(/\.ts$/, ".js") : specifier; + return import(runtimeSpecifier); +}; let anthropicProviderModulePromise: | Promise> @@ -203,7 +206,7 @@ function createLazySimpleStream< function loadAnthropicProviderModule(): Promise< LazyProviderModule<"anthropic-messages", AnthropicOptions, SimpleStreamOptions> > { - anthropicProviderModulePromise ||= import("./anthropic.js").then((module) => { + anthropicProviderModulePromise ||= import("./anthropic.ts").then((module) => { const provider = module as AnthropicProviderModule; return { stream: provider.streamAnthropic, @@ -216,7 +219,7 @@ function loadAnthropicProviderModule(): Promise< function loadAzureOpenAIResponsesProviderModule(): Promise< LazyProviderModule<"azure-openai-responses", AzureOpenAIResponsesOptions, SimpleStreamOptions> > { - azureOpenAIResponsesProviderModulePromise ||= import("./azure-openai-responses.js").then((module) => { + azureOpenAIResponsesProviderModulePromise ||= import("./azure-openai-responses.ts").then((module) => { const provider = module as AzureOpenAIResponsesProviderModule; return { stream: provider.streamAzureOpenAIResponses, @@ -229,7 +232,7 @@ function loadAzureOpenAIResponsesProviderModule(): Promise< function loadGoogleProviderModule(): Promise< LazyProviderModule<"google-generative-ai", GoogleOptions, SimpleStreamOptions> > { - googleProviderModulePromise ||= import("./google.js").then((module) => { + googleProviderModulePromise ||= import("./google.ts").then((module) => { const provider = module as GoogleProviderModule; return { stream: provider.streamGoogle, @@ -242,7 +245,7 @@ function loadGoogleProviderModule(): Promise< function loadGoogleVertexProviderModule(): Promise< LazyProviderModule<"google-vertex", GoogleVertexOptions, SimpleStreamOptions> > { - googleVertexProviderModulePromise ||= import("./google-vertex.js").then((module) => { + googleVertexProviderModulePromise ||= import("./google-vertex.ts").then((module) => { const provider = module as GoogleVertexProviderModule; return { stream: provider.streamGoogleVertex, @@ -255,7 +258,7 @@ function loadGoogleVertexProviderModule(): Promise< function loadMistralProviderModule(): Promise< LazyProviderModule<"mistral-conversations", MistralOptions, SimpleStreamOptions> > { - mistralProviderModulePromise ||= import("./mistral.js").then((module) => { + mistralProviderModulePromise ||= import("./mistral.ts").then((module) => { const provider = module as MistralProviderModule; return { stream: provider.streamMistral, @@ -268,7 +271,7 @@ function loadMistralProviderModule(): Promise< function loadOpenAICodexResponsesProviderModule(): Promise< LazyProviderModule<"openai-codex-responses", OpenAICodexResponsesOptions, SimpleStreamOptions> > { - openAICodexResponsesProviderModulePromise ||= import("./openai-codex-responses.js").then((module) => { + openAICodexResponsesProviderModulePromise ||= import("./openai-codex-responses.ts").then((module) => { const provider = module as OpenAICodexResponsesProviderModule; return { stream: provider.streamOpenAICodexResponses, @@ -281,7 +284,7 @@ function loadOpenAICodexResponsesProviderModule(): Promise< function loadOpenAICompletionsProviderModule(): Promise< LazyProviderModule<"openai-completions", OpenAICompletionsOptions, SimpleStreamOptions> > { - openAICompletionsProviderModulePromise ||= import("./openai-completions.js").then((module) => { + openAICompletionsProviderModulePromise ||= import("./openai-completions.ts").then((module) => { const provider = module as OpenAICompletionsProviderModule; return { stream: provider.streamOpenAICompletions, @@ -294,7 +297,7 @@ function loadOpenAICompletionsProviderModule(): Promise< function loadOpenAIResponsesProviderModule(): Promise< LazyProviderModule<"openai-responses", OpenAIResponsesOptions, SimpleStreamOptions> > { - openAIResponsesProviderModulePromise ||= import("./openai-responses.js").then((module) => { + openAIResponsesProviderModulePromise ||= import("./openai-responses.ts").then((module) => { const provider = module as OpenAIResponsesProviderModule; return { stream: provider.streamOpenAIResponses, @@ -310,7 +313,7 @@ function loadBedrockProviderModule(): Promise< if (bedrockProviderModuleOverride) { return Promise.resolve(bedrockProviderModuleOverride); } - bedrockProviderModulePromise ||= importNodeOnlyProvider("./amazon-bedrock.js").then((module) => { + bedrockProviderModulePromise ||= importNodeOnlyProvider("./amazon-bedrock.ts").then((module) => { const provider = module as BedrockProviderModule; return { stream: provider.streamBedrock, diff --git a/packages/ai/src/providers/simple-options.ts b/packages/ai/src/providers/simple-options.ts index 1822ebb1d..7f0aeea76 100644 --- a/packages/ai/src/providers/simple-options.ts +++ b/packages/ai/src/providers/simple-options.ts @@ -1,4 +1,4 @@ -import type { Api, Model, SimpleStreamOptions, StreamOptions, ThinkingBudgets, ThinkingLevel } from "../types.js"; +import type { Api, Model, SimpleStreamOptions, StreamOptions, ThinkingBudgets, ThinkingLevel } from "../types.ts"; export function buildBaseOptions(_model: Model, options?: SimpleStreamOptions, apiKey?: string): StreamOptions { return { diff --git a/packages/ai/src/providers/transform-messages.ts b/packages/ai/src/providers/transform-messages.ts index 8fde3716d..4029a0643 100644 --- a/packages/ai/src/providers/transform-messages.ts +++ b/packages/ai/src/providers/transform-messages.ts @@ -7,7 +7,7 @@ import type { TextContent, ToolCall, ToolResultMessage, -} from "../types.js"; +} from "../types.ts"; const NON_VISION_USER_IMAGE_PLACEHOLDER = "(image omitted: model does not support images)"; const NON_VISION_TOOL_IMAGE_PLACEHOLDER = "(tool image omitted: model does not support images)"; diff --git a/packages/ai/src/stream.ts b/packages/ai/src/stream.ts index e8a2e50eb..a38b01fdc 100644 --- a/packages/ai/src/stream.ts +++ b/packages/ai/src/stream.ts @@ -1,6 +1,6 @@ -import "./providers/register-builtins.js"; +import "./providers/register-builtins.ts"; -import { getApiProvider } from "./api-registry.js"; +import { getApiProvider } from "./api-registry.ts"; import type { Api, AssistantMessage, @@ -10,9 +10,9 @@ import type { ProviderStreamOptions, SimpleStreamOptions, StreamOptions, -} from "./types.js"; +} from "./types.ts"; -export { getEnvApiKey } from "./env-api-keys.js"; +export { getEnvApiKey } from "./env-api-keys.ts"; function resolveApiProvider(api: Api) { const provider = getApiProvider(api); diff --git a/packages/ai/src/types.ts b/packages/ai/src/types.ts index 851e4d4b1..6fc703f13 100644 --- a/packages/ai/src/types.ts +++ b/packages/ai/src/types.ts @@ -1,7 +1,7 @@ -import type { AssistantMessageDiagnostic } from "./utils/diagnostics.js"; -import type { AssistantMessageEventStream } from "./utils/event-stream.js"; +import type { AssistantMessageDiagnostic } from "./utils/diagnostics.ts"; +import type { AssistantMessageEventStream } from "./utils/event-stream.ts"; -export type { AssistantMessageEventStream } from "./utils/event-stream.js"; +export type { AssistantMessageEventStream } from "./utils/event-stream.ts"; export type KnownApi = | "openai-completions" diff --git a/packages/ai/src/utils/event-stream.ts b/packages/ai/src/utils/event-stream.ts index 43461ea2b..e5eef921d 100644 --- a/packages/ai/src/utils/event-stream.ts +++ b/packages/ai/src/utils/event-stream.ts @@ -1,4 +1,4 @@ -import type { AssistantMessage, AssistantMessageEvent } from "../types.js"; +import type { AssistantMessage, AssistantMessageEvent } from "../types.ts"; // Generic event stream class for async iteration export class EventStream implements AsyncIterable { diff --git a/packages/ai/src/utils/oauth/anthropic.ts b/packages/ai/src/utils/oauth/anthropic.ts index 1d404266a..feeb34fa3 100644 --- a/packages/ai/src/utils/oauth/anthropic.ts +++ b/packages/ai/src/utils/oauth/anthropic.ts @@ -6,9 +6,9 @@ */ import type { Server } from "node:http"; -import { oauthErrorHtml, oauthSuccessHtml } from "./oauth-page.js"; -import { generatePKCE } from "./pkce.js"; -import type { OAuthCredentials, OAuthLoginCallbacks, OAuthPrompt, OAuthProviderInterface } from "./types.js"; +import { oauthErrorHtml, oauthSuccessHtml } from "./oauth-page.ts"; +import { generatePKCE } from "./pkce.ts"; +import type { OAuthCredentials, OAuthLoginCallbacks, OAuthPrompt, OAuthProviderInterface } from "./types.ts"; type CallbackServerInfo = { server: Server; diff --git a/packages/ai/src/utils/oauth/github-copilot.ts b/packages/ai/src/utils/oauth/github-copilot.ts index dcacb43d2..6182ab910 100644 --- a/packages/ai/src/utils/oauth/github-copilot.ts +++ b/packages/ai/src/utils/oauth/github-copilot.ts @@ -2,9 +2,9 @@ * GitHub Copilot OAuth flow */ -import { getModels } from "../../models.js"; -import type { Api, Model } from "../../types.js"; -import type { OAuthCredentials, OAuthLoginCallbacks, OAuthProviderInterface } from "./types.js"; +import { getModels } from "../../models.ts"; +import type { Api, Model } from "../../types.ts"; +import type { OAuthCredentials, OAuthLoginCallbacks, OAuthProviderInterface } from "./types.ts"; type CopilotCredentials = OAuthCredentials & { enterpriseUrl?: string; diff --git a/packages/ai/src/utils/oauth/index.ts b/packages/ai/src/utils/oauth/index.ts index f5f180bf0..3a3a01b16 100644 --- a/packages/ai/src/utils/oauth/index.ts +++ b/packages/ai/src/utils/oauth/index.ts @@ -8,7 +8,7 @@ */ // Anthropic -export { anthropicOAuthProvider, loginAnthropic, refreshAnthropicToken } from "./anthropic.js"; +export { anthropicOAuthProvider, loginAnthropic, refreshAnthropicToken } from "./anthropic.ts"; // GitHub Copilot export { getGitHubCopilotBaseUrl, @@ -16,20 +16,20 @@ export { loginGitHubCopilot, normalizeDomain, refreshGitHubCopilotToken, -} from "./github-copilot.js"; +} from "./github-copilot.ts"; // OpenAI Codex (ChatGPT OAuth) -export { loginOpenAICodex, openaiCodexOAuthProvider, refreshOpenAICodexToken } from "./openai-codex.js"; +export { loginOpenAICodex, openaiCodexOAuthProvider, refreshOpenAICodexToken } from "./openai-codex.ts"; -export * from "./types.js"; +export * from "./types.ts"; // ============================================================================ // Provider Registry // ============================================================================ -import { anthropicOAuthProvider } from "./anthropic.js"; -import { githubCopilotOAuthProvider } from "./github-copilot.js"; -import { openaiCodexOAuthProvider } from "./openai-codex.js"; -import type { OAuthCredentials, OAuthProviderId, OAuthProviderInfo, OAuthProviderInterface } from "./types.js"; +import { anthropicOAuthProvider } from "./anthropic.ts"; +import { githubCopilotOAuthProvider } from "./github-copilot.ts"; +import { openaiCodexOAuthProvider } from "./openai-codex.ts"; +import type { OAuthCredentials, OAuthProviderId, OAuthProviderInfo, OAuthProviderInterface } from "./types.ts"; const BUILT_IN_OAUTH_PROVIDERS: OAuthProviderInterface[] = [ anthropicOAuthProvider, diff --git a/packages/ai/src/utils/oauth/openai-codex.ts b/packages/ai/src/utils/oauth/openai-codex.ts index 62c4c3521..28600d235 100644 --- a/packages/ai/src/utils/oauth/openai-codex.ts +++ b/packages/ai/src/utils/oauth/openai-codex.ts @@ -17,9 +17,9 @@ if (typeof process !== "undefined" && (process.versions?.node || process.version }); } -import { oauthErrorHtml, oauthSuccessHtml } from "./oauth-page.js"; -import { generatePKCE } from "./pkce.js"; -import type { OAuthCredentials, OAuthLoginCallbacks, OAuthPrompt, OAuthProviderInterface } from "./types.js"; +import { oauthErrorHtml, oauthSuccessHtml } from "./oauth-page.ts"; +import { generatePKCE } from "./pkce.ts"; +import type { OAuthCredentials, OAuthLoginCallbacks, OAuthPrompt, OAuthProviderInterface } from "./types.ts"; const CALLBACK_HOST = process.env.PI_OAUTH_CALLBACK_HOST || "127.0.0.1"; const CLIENT_ID = "app_EMoamEEZ73f0CkXaXp7hrann"; diff --git a/packages/ai/src/utils/oauth/types.ts b/packages/ai/src/utils/oauth/types.ts index 03cbf101d..a1426d815 100644 --- a/packages/ai/src/utils/oauth/types.ts +++ b/packages/ai/src/utils/oauth/types.ts @@ -1,4 +1,4 @@ -import type { Api, Model } from "../../types.js"; +import type { Api, Model } from "../../types.ts"; export type OAuthCredentials = { refresh: string; diff --git a/packages/ai/src/utils/overflow.ts b/packages/ai/src/utils/overflow.ts index 7eef4a75d..8b908e856 100644 --- a/packages/ai/src/utils/overflow.ts +++ b/packages/ai/src/utils/overflow.ts @@ -1,4 +1,4 @@ -import type { AssistantMessage } from "../types.js"; +import type { AssistantMessage } from "../types.ts"; /** * Regex patterns to detect context overflow errors from different providers. diff --git a/packages/ai/src/utils/validation.ts b/packages/ai/src/utils/validation.ts index 6fee28686..060898c74 100644 --- a/packages/ai/src/utils/validation.ts +++ b/packages/ai/src/utils/validation.ts @@ -1,7 +1,7 @@ import { Compile } from "typebox/compile"; import type { TLocalizedValidationError } from "typebox/error"; import { Value } from "typebox/value"; -import type { Tool, ToolCall } from "../types.js"; +import type { Tool, ToolCall } from "../types.ts"; const validatorCache = new WeakMap>(); const TYPEBOX_KIND = Symbol.for("TypeBox.Kind"); diff --git a/packages/coding-agent/examples/extensions/overlay-qa-tests.ts b/packages/coding-agent/examples/extensions/overlay-qa-tests.ts index b13f43a9f..306c139b4 100644 --- a/packages/coding-agent/examples/extensions/overlay-qa-tests.ts +++ b/packages/coding-agent/examples/extensions/overlay-qa-tests.ts @@ -303,7 +303,11 @@ function sleep(ms: number): Promise { // Base overlay component with common rendering abstract class BaseOverlay { - constructor(protected theme: Theme) {} + protected theme: Theme; + + constructor(theme: Theme) { + this.theme = theme; + } protected box(lines: string[], width: number, title?: string): string[] { const th = this.theme; @@ -330,12 +334,13 @@ abstract class BaseOverlay { // Anchor position test class AnchorTestComponent extends BaseOverlay { - constructor( - theme: Theme, - private anchor: OverlayAnchor, - private done: (result: "next" | "confirm" | "cancel") => void, - ) { + private anchor: OverlayAnchor; + private done: (result: "next" | "confirm" | "cancel") => void; + + constructor(theme: Theme, anchor: OverlayAnchor, done: (result: "next" | "confirm" | "cancel") => void) { super(theme); + this.anchor = anchor; + this.done = done; } handleInput(data: string): void { @@ -368,12 +373,17 @@ class AnchorTestComponent extends BaseOverlay { // Margin/offset test class MarginTestComponent extends BaseOverlay { + private config: { name: string; options: OverlayOptions }; + private done: (result: "next" | "close") => void; + constructor( theme: Theme, - private config: { name: string; options: OverlayOptions }, - private done: (result: "next" | "close") => void, + config: { name: string; options: OverlayOptions }, + done: (result: "next" | "close") => void, ) { super(theme); + this.config = config; + this.done = done; } handleInput(data: string): void { @@ -403,13 +413,15 @@ class MarginTestComponent extends BaseOverlay { // Stacked overlay test class StackOverlayComponent extends BaseOverlay { - constructor( - theme: Theme, - private num: number, - private position: string, - private done: (result: string) => void, - ) { + private num: number; + private position: string; + private done: (result: string) => void; + + constructor(theme: Theme, num: number, position: string, done: (result: string) => void) { super(theme); + this.num = num; + this.position = position; + this.done = done; } handleInput(data: string): void { @@ -446,19 +458,19 @@ class StackOverlayComponent extends BaseOverlay { // Streaming overflow test - spawns real process with colored output (original crash scenario) class StreamingOverflowComponent extends BaseOverlay { + private tui: TUI; private lines: string[] = []; private proc: ReturnType | null = null; private scrollOffset = 0; private maxVisibleLines = 15; private finished = false; private disposed = false; + private done: () => void; - constructor( - private tui: TUI, - theme: Theme, - private done: () => void, - ) { + constructor(tui: TUI, theme: Theme, done: () => void) { super(theme); + this.tui = tui; + this.done = done; this.startProcess(); } @@ -579,11 +591,11 @@ class StreamingOverflowComponent extends BaseOverlay { // Edge position test class EdgeTestComponent extends BaseOverlay { - constructor( - theme: Theme, - private done: () => void, - ) { + private done: () => void; + + constructor(theme: Theme, done: () => void) { super(theme); + this.done = done; } handleInput(data: string): void { @@ -614,12 +626,17 @@ class EdgeTestComponent extends BaseOverlay { // Percentage positioning test class PercentTestComponent extends BaseOverlay { + private config: { name: string; row: number; col: number }; + private done: (result: "next" | "close") => void; + constructor( theme: Theme, - private config: { name: string; row: number; col: number }, - private done: (result: "next" | "close") => void, + config: { name: string; row: number; col: number }, + done: (result: "next" | "close") => void, ) { super(theme); + this.config = config; + this.done = done; } handleInput(data: string): void { @@ -649,11 +666,11 @@ class PercentTestComponent extends BaseOverlay { // MaxHeight test - renders 20 lines, truncated to 10 by maxHeight class MaxHeightTestComponent extends BaseOverlay { - constructor( - theme: Theme, - private done: () => void, - ) { + private done: () => void; + + constructor(theme: Theme, done: () => void) { super(theme); + this.done = done; } handleInput(data: string): void { @@ -684,15 +701,15 @@ class MaxHeightTestComponent extends BaseOverlay { // Responsive sidepanel - demonstrates percentage width and visibility callback class SidepanelComponent extends BaseOverlay { + private tui: TUI; private items = ["Dashboard", "Messages", "Settings", "Help", "About"]; private selectedIndex = 0; + private done: () => void; - constructor( - private tui: TUI, - theme: Theme, - private done: () => void, - ) { + constructor(tui: TUI, theme: Theme, done: () => void) { super(theme); + this.tui = tui; + this.done = done; } handleInput(data: string): void { @@ -745,18 +762,18 @@ class SidepanelComponent extends BaseOverlay { // Animation demo - proves overlays can handle real-time updates like pi-doom class AnimationDemoComponent extends BaseOverlay { + private tui: TUI; private frame = 0; private interval: ReturnType | null = null; private fps = 0; private lastFpsUpdate = Date.now(); private framesSinceLastFps = 0; + private done: () => void; - constructor( - private tui: TUI, - theme: Theme, - private done: () => void, - ) { + constructor(tui: TUI, theme: Theme, done: () => void) { super(theme); + this.tui = tui; + this.done = done; this.startAnimation(); } @@ -860,15 +877,15 @@ function hslToRgb(h: number, s: number, l: number): [number, number, number] { // Toggle demo - demonstrates OverlayHandle.setHidden() via onHandle callback class ToggleDemoComponent extends BaseOverlay { + private tui: TUI; private toggleCount = 0; private isToggling = false; + private done: () => void; - constructor( - private tui: TUI, - theme: Theme, - private done: () => void, - ) { + constructor(tui: TUI, theme: Theme, done: () => void) { super(theme); + this.tui = tui; + this.done = done; } handleInput(data: string): void { @@ -923,19 +940,19 @@ class ToggleDemoComponent extends BaseOverlay { class PassiveDemoController extends BaseOverlay { focused = false; + private tui: TUI; private typed = ""; private timerComponent: TimerPanel; private timerHandle: OverlayHandle | null = null; private interval: ReturnType | null = null; private inputCount = 0; private lastInputDebug = ""; + private done: () => void; - constructor( - private tui: TUI, - theme: Theme, - private done: () => void, - ) { + constructor(tui: TUI, theme: Theme, done: () => void) { super(theme); + this.tui = tui; + this.done = done; this.timerComponent = new TimerPanel(theme); this.timerHandle = this.tui.showOverlay(this.timerComponent, { nonCapturing: true, @@ -1015,16 +1032,16 @@ class TimerPanel extends BaseOverlay { // === Focus cycling demo === class FocusDemoController extends BaseOverlay { + private tui: TUI; private panels: FocusPanel[] = []; private handles: OverlayHandle[] = []; private focusIndex = -1; + private done: () => void; - constructor( - private tui: TUI, - theme: Theme, - private done: () => void, - ) { + constructor(tui: TUI, theme: Theme, done: () => void) { super(theme); + this.tui = tui; + this.done = done; const colors = ["error", "success", "accent"] as const; const labels = ["Alpha", "Beta", "Gamma"]; @@ -1107,16 +1124,22 @@ class FocusDemoController extends BaseOverlay { class FocusPanel extends BaseOverlay { handle: OverlayHandle | null = null; readonly label: string; + private color: "error" | "success" | "accent"; + private onTab: () => void; + private onClose: () => void; constructor( theme: Theme, label: string, - private color: "error" | "success" | "accent", - private onTab: () => void, - private onClose: () => void, + color: "error" | "success" | "accent", + onTab: () => void, + onClose: () => void, ) { super(theme); this.label = label; + this.color = color; + this.onTab = onTab; + this.onClose = onClose; } handleInput(data: string): void { @@ -1155,19 +1178,19 @@ class FocusPanel extends BaseOverlay { // === Streaming input panel test (/overlay-streaming) === class StreamingInputController extends BaseOverlay { + private tui: TUI; private panels: StreamingInputPanel[] = []; private handles: OverlayHandle[] = []; private focusIndex = -1; // -1 = controller focused, 0-2 = panel focused private streamLines: string[] = []; private streamInterval: ReturnType | null = null; private lineCount = 0; + private done: () => void; - constructor( - private tui: TUI, - theme: Theme, - private done: () => void, - ) { + constructor(tui: TUI, theme: Theme, done: () => void) { super(theme); + this.tui = tui; + this.done = done; // Create 3 input panels as non-capturing overlays const colors = ["error", "success", "accent"] as const; @@ -1287,17 +1310,25 @@ class StreamingInputController extends BaseOverlay { class StreamingInputPanel implements Component { handle: OverlayHandle | null = null; + private theme: Theme; private typed = ""; readonly label: string; + private color: "error" | "success" | "accent"; + private onTab: () => void; + private onClose: () => void; constructor( - private theme: Theme, + theme: Theme, label: string, - private color: "error" | "success" | "accent", - private onTab: () => void, - private onClose: () => void, + color: "error" | "success" | "accent", + onTab: () => void, + onClose: () => void, ) { + this.theme = theme; this.label = label; + this.color = color; + this.onTab = onTab; + this.onClose = onClose; } handleInput(data: string): void { diff --git a/packages/coding-agent/examples/extensions/overlay-test.ts b/packages/coding-agent/examples/extensions/overlay-test.ts index 02f8204b1..c51cde1ac 100644 --- a/packages/coding-agent/examples/extensions/overlay-test.ts +++ b/packages/coding-agent/examples/extensions/overlay-test.ts @@ -42,10 +42,13 @@ class OverlayTestComponent implements Focusable { { label: "Cancel", hasInput: false, text: "", cursor: 0 }, ]; - constructor( - private theme: Theme, - private done: (result: { action: string; query?: string } | undefined) => void, - ) {} + private theme: Theme; + private done: (result: { action: string; query?: string } | undefined) => void; + + constructor(theme: Theme, done: (result: { action: string; query?: string } | undefined) => void) { + this.theme = theme; + this.done = done; + } handleInput(data: string): void { if (matchesKey(data, "escape")) { diff --git a/packages/coding-agent/src/bun/cli.ts b/packages/coding-agent/src/bun/cli.ts index 0aacb95b0..fa68a0ba4 100644 --- a/packages/coding-agent/src/bun/cli.ts +++ b/packages/coding-agent/src/bun/cli.ts @@ -1,12 +1,12 @@ #!/usr/bin/env node -import { APP_NAME } from "../config.js"; +import { APP_NAME } from "../config.ts"; process.title = APP_NAME; process.emitWarning = (() => {}) as typeof process.emitWarning; -import { restoreSandboxEnv } from "./restore-sandbox-env.js"; +import { restoreSandboxEnv } from "./restore-sandbox-env.ts"; restoreSandboxEnv(); -await import("./register-bedrock.js"); -await import("../cli.js"); +await import("./register-bedrock.ts"); +await import("../cli.ts"); diff --git a/packages/coding-agent/src/cli.ts b/packages/coding-agent/src/cli.ts index 1fdadb990..4f09675eb 100644 --- a/packages/coding-agent/src/cli.ts +++ b/packages/coding-agent/src/cli.ts @@ -6,8 +6,8 @@ * Test with: npx tsx src/cli-new.ts [args...] */ import * as undici from "undici"; -import { APP_NAME } from "./config.js"; -import { main } from "./main.js"; +import { APP_NAME } from "./config.ts"; +import { main } from "./main.ts"; process.title = APP_NAME; process.env.PI_CODING_AGENT = "true"; diff --git a/packages/coding-agent/src/cli/args.ts b/packages/coding-agent/src/cli/args.ts index 7d91a9bea..e4cb27dda 100644 --- a/packages/coding-agent/src/cli/args.ts +++ b/packages/coding-agent/src/cli/args.ts @@ -4,8 +4,8 @@ import type { ThinkingLevel } from "@earendil-works/pi-agent-core"; import chalk from "chalk"; -import { APP_NAME, CONFIG_DIR_NAME, ENV_AGENT_DIR, ENV_SESSION_DIR } from "../config.js"; -import type { ExtensionFlag } from "../core/extensions/types.js"; +import { APP_NAME, CONFIG_DIR_NAME, ENV_AGENT_DIR, ENV_SESSION_DIR } from "../config.ts"; +import type { ExtensionFlag } from "../core/extensions/types.ts"; export type Mode = "text" | "json" | "rpc"; diff --git a/packages/coding-agent/src/cli/config-selector.ts b/packages/coding-agent/src/cli/config-selector.ts index 18ff3b538..74265a100 100644 --- a/packages/coding-agent/src/cli/config-selector.ts +++ b/packages/coding-agent/src/cli/config-selector.ts @@ -3,10 +3,10 @@ */ import { ProcessTerminal, TUI } from "@earendil-works/pi-tui"; -import type { ResolvedPaths } from "../core/package-manager.js"; -import type { SettingsManager } from "../core/settings-manager.js"; -import { ConfigSelectorComponent } from "../modes/interactive/components/config-selector.js"; -import { initTheme, stopThemeWatcher } from "../modes/interactive/theme/theme.js"; +import type { ResolvedPaths } from "../core/package-manager.ts"; +import type { SettingsManager } from "../core/settings-manager.ts"; +import { ConfigSelectorComponent } from "../modes/interactive/components/config-selector.ts"; +import { initTheme, stopThemeWatcher } from "../modes/interactive/theme/theme.ts"; export interface ConfigSelectorOptions { resolvedPaths: ResolvedPaths; diff --git a/packages/coding-agent/src/cli/file-processor.ts b/packages/coding-agent/src/cli/file-processor.ts index c9ab54950..fe0e32ebf 100644 --- a/packages/coding-agent/src/cli/file-processor.ts +++ b/packages/coding-agent/src/cli/file-processor.ts @@ -6,9 +6,9 @@ import { access, readFile, stat } from "node:fs/promises"; import type { ImageContent } from "@earendil-works/pi-ai"; import chalk from "chalk"; import { resolve } from "path"; -import { resolveReadPath } from "../core/tools/path-utils.js"; -import { formatDimensionNote, resizeImage } from "../utils/image-resize.js"; -import { detectSupportedImageMimeTypeFromFile } from "../utils/mime.js"; +import { resolveReadPath } from "../core/tools/path-utils.ts"; +import { formatDimensionNote, resizeImage } from "../utils/image-resize.ts"; +import { detectSupportedImageMimeTypeFromFile } from "../utils/mime.ts"; export interface ProcessedFiles { text: string; diff --git a/packages/coding-agent/src/cli/initial-message.ts b/packages/coding-agent/src/cli/initial-message.ts index a3a7f1b75..c73f18a2f 100644 --- a/packages/coding-agent/src/cli/initial-message.ts +++ b/packages/coding-agent/src/cli/initial-message.ts @@ -1,5 +1,5 @@ import type { ImageContent } from "@earendil-works/pi-ai"; -import type { Args } from "./args.js"; +import type { Args } from "./args.ts"; export interface InitialMessageInput { parsed: Args; diff --git a/packages/coding-agent/src/cli/list-models.ts b/packages/coding-agent/src/cli/list-models.ts index 7d5385737..b648fb962 100644 --- a/packages/coding-agent/src/cli/list-models.ts +++ b/packages/coding-agent/src/cli/list-models.ts @@ -5,8 +5,8 @@ import type { Api, Model } from "@earendil-works/pi-ai"; import { fuzzyFilter } from "@earendil-works/pi-tui"; import chalk from "chalk"; -import { formatNoModelsAvailableMessage } from "../core/auth-guidance.js"; -import type { ModelRegistry } from "../core/model-registry.js"; +import { formatNoModelsAvailableMessage } from "../core/auth-guidance.ts"; +import type { ModelRegistry } from "../core/model-registry.ts"; /** * Format a number as human-readable (e.g., 200000 -> "200K", 1000000 -> "1M") diff --git a/packages/coding-agent/src/cli/session-picker.ts b/packages/coding-agent/src/cli/session-picker.ts index f84b6a086..42dcb808d 100644 --- a/packages/coding-agent/src/cli/session-picker.ts +++ b/packages/coding-agent/src/cli/session-picker.ts @@ -3,9 +3,9 @@ */ import { ProcessTerminal, setKeybindings, TUI } from "@earendil-works/pi-tui"; -import { KeybindingsManager } from "../core/keybindings.js"; -import type { SessionInfo, SessionListProgress } from "../core/session-manager.js"; -import { SessionSelectorComponent } from "../modes/interactive/components/session-selector.js"; +import { KeybindingsManager } from "../core/keybindings.ts"; +import type { SessionInfo, SessionListProgress } from "../core/session-manager.ts"; +import { SessionSelectorComponent } from "../modes/interactive/components/session-selector.ts"; type SessionsLoader = (onProgress?: SessionListProgress) => Promise; diff --git a/packages/coding-agent/src/config.ts b/packages/coding-agent/src/config.ts index e2ac87e17..1a94ea02a 100644 --- a/packages/coding-agent/src/config.ts +++ b/packages/coding-agent/src/config.ts @@ -2,7 +2,7 @@ import { accessSync, constants, existsSync, readFileSync, realpathSync } from "f import { homedir } from "os"; import { basename, dirname, join, resolve, sep, win32 } from "path"; import { fileURLToPath } from "url"; -import { spawnProcessSync } from "./utils/child-process.js"; +import { spawnProcessSync } from "./utils/child-process.ts"; // ============================================================================= // Package Detection diff --git a/packages/coding-agent/src/core/agent-session-runtime.ts b/packages/coding-agent/src/core/agent-session-runtime.ts index eebd75752..a89fef835 100644 --- a/packages/coding-agent/src/core/agent-session-runtime.ts +++ b/packages/coding-agent/src/core/agent-session-runtime.ts @@ -1,12 +1,12 @@ import { copyFileSync, existsSync, mkdirSync } from "node:fs"; import { basename, join, resolve } from "node:path"; -import type { AgentSession } from "./agent-session.js"; -import type { AgentSessionRuntimeDiagnostic, AgentSessionServices } from "./agent-session-services.js"; -import type { ReplacedSessionContext, SessionShutdownEvent, SessionStartEvent } from "./extensions/index.js"; -import { emitSessionShutdownEvent } from "./extensions/runner.js"; -import type { CreateAgentSessionResult } from "./sdk.js"; -import { assertSessionCwdExists } from "./session-cwd.js"; -import { SessionManager } from "./session-manager.js"; +import type { AgentSession } from "./agent-session.ts"; +import type { AgentSessionRuntimeDiagnostic, AgentSessionServices } from "./agent-session-services.ts"; +import type { ReplacedSessionContext, SessionShutdownEvent, SessionStartEvent } from "./extensions/index.ts"; +import { emitSessionShutdownEvent } from "./extensions/runner.ts"; +import type { CreateAgentSessionResult } from "./sdk.ts"; +import { assertSessionCwdExists } from "./session-cwd.ts"; +import { SessionManager } from "./session-manager.ts"; /** * Result returned by runtime creation. @@ -417,4 +417,4 @@ export { type CreateAgentSessionServicesOptions, createAgentSessionFromServices, createAgentSessionServices, -} from "./agent-session-services.js"; +} from "./agent-session-services.ts"; diff --git a/packages/coding-agent/src/core/agent-session-services.ts b/packages/coding-agent/src/core/agent-session-services.ts index 061399edb..852776a97 100644 --- a/packages/coding-agent/src/core/agent-session-services.ts +++ b/packages/coding-agent/src/core/agent-session-services.ts @@ -1,14 +1,14 @@ import { join } from "node:path"; import type { ThinkingLevel } from "@earendil-works/pi-agent-core"; import type { Model } from "@earendil-works/pi-ai"; -import { getAgentDir } from "../config.js"; -import { AuthStorage } from "./auth-storage.js"; -import type { SessionStartEvent, ToolDefinition } from "./extensions/index.js"; -import { ModelRegistry } from "./model-registry.js"; -import { DefaultResourceLoader, type DefaultResourceLoaderOptions, type ResourceLoader } from "./resource-loader.js"; -import { type CreateAgentSessionOptions, type CreateAgentSessionResult, createAgentSession } from "./sdk.js"; -import type { SessionManager } from "./session-manager.js"; -import { SettingsManager } from "./settings-manager.js"; +import { getAgentDir } from "../config.ts"; +import { AuthStorage } from "./auth-storage.ts"; +import type { SessionStartEvent, ToolDefinition } from "./extensions/index.ts"; +import { ModelRegistry } from "./model-registry.ts"; +import { DefaultResourceLoader, type DefaultResourceLoaderOptions, type ResourceLoader } from "./resource-loader.ts"; +import { type CreateAgentSessionOptions, type CreateAgentSessionResult, createAgentSession } from "./sdk.ts"; +import type { SessionManager } from "./session-manager.ts"; +import { SettingsManager } from "./settings-manager.ts"; /** * Non-fatal issues collected while creating services or sessions. diff --git a/packages/coding-agent/src/core/agent-session.ts b/packages/coding-agent/src/core/agent-session.ts index 362a9b9f7..d18591b72 100644 --- a/packages/coding-agent/src/core/agent-session.ts +++ b/packages/coding-agent/src/core/agent-session.ts @@ -33,11 +33,11 @@ import { resetApiProviders, streamSimple, } from "@earendil-works/pi-ai"; -import { theme } from "../modes/interactive/theme/theme.js"; -import { stripFrontmatter } from "../utils/frontmatter.js"; -import { sleep } from "../utils/sleep.js"; -import { formatNoApiKeyFoundMessage, formatNoModelSelectedMessage } from "./auth-guidance.js"; -import { type BashResult, executeBashWithOperations } from "./bash-executor.js"; +import { theme } from "../modes/interactive/theme/theme.ts"; +import { stripFrontmatter } from "../utils/frontmatter.ts"; +import { sleep } from "../utils/sleep.ts"; +import { formatNoApiKeyFoundMessage, formatNoModelSelectedMessage } from "./auth-guidance.ts"; +import { type BashResult, executeBashWithOperations } from "./bash-executor.ts"; import { type CompactionResult, calculateContextTokens, @@ -47,10 +47,10 @@ import { generateBranchSummary, prepareCompaction, shouldCompact, -} from "./compaction/index.js"; -import { DEFAULT_THINKING_LEVEL } from "./defaults.js"; -import { exportSessionToHtml, type ToolHtmlRenderer } from "./export-html/index.js"; -import { createToolHtmlRenderer } from "./export-html/tool-renderer.js"; +} from "./compaction/index.ts"; +import { DEFAULT_THINKING_LEVEL } from "./defaults.ts"; +import { exportSessionToHtml, type ToolHtmlRenderer } from "./export-html/index.ts"; +import { createToolHtmlRenderer } from "./export-html/tool-renderer.ts"; import { type ContextUsage, type ExtensionCommandContextActions, @@ -75,21 +75,21 @@ import { type TurnEndEvent, type TurnStartEvent, wrapRegisteredTools, -} from "./extensions/index.js"; -import { emitSessionShutdownEvent } from "./extensions/runner.js"; -import type { BashExecutionMessage, CustomMessage } from "./messages.js"; -import type { ModelRegistry } from "./model-registry.js"; -import { expandPromptTemplate, type PromptTemplate } from "./prompt-templates.js"; -import type { ResourceExtensionPaths, ResourceLoader } from "./resource-loader.js"; -import type { BranchSummaryEntry, CompactionEntry, SessionManager } from "./session-manager.js"; -import { CURRENT_SESSION_VERSION, getLatestCompactionEntry, type SessionHeader } from "./session-manager.js"; -import type { SettingsManager } from "./settings-manager.js"; -import type { SlashCommandInfo } from "./slash-commands.js"; -import { createSyntheticSourceInfo, type SourceInfo } from "./source-info.js"; -import { type BuildSystemPromptOptions, buildSystemPrompt } from "./system-prompt.js"; -import { type BashOperations, createLocalBashOperations } from "./tools/bash.js"; -import { createAllToolDefinitions } from "./tools/index.js"; -import { createToolDefinitionFromAgentTool } from "./tools/tool-definition-wrapper.js"; +} from "./extensions/index.ts"; +import { emitSessionShutdownEvent } from "./extensions/runner.ts"; +import type { BashExecutionMessage, CustomMessage } from "./messages.ts"; +import type { ModelRegistry } from "./model-registry.ts"; +import { expandPromptTemplate, type PromptTemplate } from "./prompt-templates.ts"; +import type { ResourceExtensionPaths, ResourceLoader } from "./resource-loader.ts"; +import type { BranchSummaryEntry, CompactionEntry, SessionManager } from "./session-manager.ts"; +import { CURRENT_SESSION_VERSION, getLatestCompactionEntry, type SessionHeader } from "./session-manager.ts"; +import type { SettingsManager } from "./settings-manager.ts"; +import type { SlashCommandInfo } from "./slash-commands.ts"; +import { createSyntheticSourceInfo, type SourceInfo } from "./source-info.ts"; +import { type BuildSystemPromptOptions, buildSystemPrompt } from "./system-prompt.ts"; +import { type BashOperations, createLocalBashOperations } from "./tools/bash.ts"; +import { createAllToolDefinitions } from "./tools/index.ts"; +import { createToolDefinitionFromAgentTool } from "./tools/tool-definition-wrapper.ts"; // ============================================================================ // Skill Block Parsing diff --git a/packages/coding-agent/src/core/auth-guidance.ts b/packages/coding-agent/src/core/auth-guidance.ts index 567b603da..9782cdaff 100644 --- a/packages/coding-agent/src/core/auth-guidance.ts +++ b/packages/coding-agent/src/core/auth-guidance.ts @@ -1,5 +1,5 @@ import { join } from "node:path"; -import { getDocsPath } from "../config.js"; +import { getDocsPath } from "../config.ts"; const UNKNOWN_PROVIDER = "unknown"; diff --git a/packages/coding-agent/src/core/auth-storage.ts b/packages/coding-agent/src/core/auth-storage.ts index 1522cc676..ae2996c43 100644 --- a/packages/coding-agent/src/core/auth-storage.ts +++ b/packages/coding-agent/src/core/auth-storage.ts @@ -17,8 +17,8 @@ import { getOAuthApiKey, getOAuthProvider, getOAuthProviders } from "@earendil-w import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "fs"; import { dirname, join } from "path"; import lockfile from "proper-lockfile"; -import { getAgentDir } from "../config.js"; -import { resolveConfigValue } from "./resolve-config-value.js"; +import { getAgentDir } from "../config.ts"; +import { resolveConfigValue } from "./resolve-config-value.ts"; export type ApiKeyCredential = { type: "api_key"; diff --git a/packages/coding-agent/src/core/bash-executor.ts b/packages/coding-agent/src/core/bash-executor.ts index c1818dacf..bacb2eccf 100644 --- a/packages/coding-agent/src/core/bash-executor.ts +++ b/packages/coding-agent/src/core/bash-executor.ts @@ -10,10 +10,10 @@ import { randomBytes } from "node:crypto"; import { createWriteStream, type WriteStream } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { stripAnsi } from "../utils/ansi.js"; -import { sanitizeBinaryOutput } from "../utils/shell.js"; -import type { BashOperations } from "./tools/bash.js"; -import { DEFAULT_MAX_BYTES, truncateTail } from "./tools/truncate.js"; +import { stripAnsi } from "../utils/ansi.ts"; +import { sanitizeBinaryOutput } from "../utils/shell.ts"; +import type { BashOperations } from "./tools/bash.ts"; +import { DEFAULT_MAX_BYTES, truncateTail } from "./tools/truncate.ts"; // ============================================================================ // Types diff --git a/packages/coding-agent/src/core/compaction/branch-summarization.ts b/packages/coding-agent/src/core/compaction/branch-summarization.ts index 69925ddab..0039bc79d 100644 --- a/packages/coding-agent/src/core/compaction/branch-summarization.ts +++ b/packages/coding-agent/src/core/compaction/branch-summarization.ts @@ -13,9 +13,9 @@ import { createBranchSummaryMessage, createCompactionSummaryMessage, createCustomMessage, -} from "../messages.js"; -import type { ReadonlySessionManager, SessionEntry } from "../session-manager.js"; -import { estimateTokens } from "./compaction.js"; +} from "../messages.ts"; +import type { ReadonlySessionManager, SessionEntry } from "../session-manager.ts"; +import { estimateTokens } from "./compaction.ts"; import { computeFileLists, createFileOps, @@ -24,7 +24,7 @@ import { formatFileOperations, SUMMARIZATION_SYSTEM_PROMPT, serializeConversation, -} from "./utils.js"; +} from "./utils.ts"; // ============================================================================ // Types @@ -44,7 +44,7 @@ export interface BranchSummaryDetails { modifiedFiles: string[]; } -export type { FileOperations } from "./utils.js"; +export type { FileOperations } from "./utils.ts"; export interface BranchPreparation { /** Messages extracted for summarization, in chronological order */ diff --git a/packages/coding-agent/src/core/compaction/compaction.ts b/packages/coding-agent/src/core/compaction/compaction.ts index c12be0eea..b8339fbaf 100644 --- a/packages/coding-agent/src/core/compaction/compaction.ts +++ b/packages/coding-agent/src/core/compaction/compaction.ts @@ -13,8 +13,8 @@ import { createBranchSummaryMessage, createCompactionSummaryMessage, createCustomMessage, -} from "../messages.js"; -import { buildSessionContext, type CompactionEntry, type SessionEntry } from "../session-manager.js"; +} from "../messages.ts"; +import { buildSessionContext, type CompactionEntry, type SessionEntry } from "../session-manager.ts"; import { computeFileLists, createFileOps, @@ -23,7 +23,7 @@ import { formatFileOperations, SUMMARIZATION_SYSTEM_PROMPT, serializeConversation, -} from "./utils.js"; +} from "./utils.ts"; // ============================================================================ // File Operation Tracking diff --git a/packages/coding-agent/src/core/compaction/index.ts b/packages/coding-agent/src/core/compaction/index.ts index d8c92a67b..7fae5f2c3 100644 --- a/packages/coding-agent/src/core/compaction/index.ts +++ b/packages/coding-agent/src/core/compaction/index.ts @@ -2,6 +2,6 @@ * Compaction and summarization utilities. */ -export * from "./branch-summarization.js"; -export * from "./compaction.js"; -export * from "./utils.js"; +export * from "./branch-summarization.ts"; +export * from "./compaction.ts"; +export * from "./utils.ts"; diff --git a/packages/coding-agent/src/core/exec.ts b/packages/coding-agent/src/core/exec.ts index 40f0453df..5afe9ec36 100644 --- a/packages/coding-agent/src/core/exec.ts +++ b/packages/coding-agent/src/core/exec.ts @@ -3,7 +3,7 @@ */ import { spawn } from "node:child_process"; -import { waitForChildProcess } from "../utils/child-process.js"; +import { waitForChildProcess } from "../utils/child-process.ts"; /** * Options for executing shell commands. diff --git a/packages/coding-agent/src/core/export-html/index.ts b/packages/coding-agent/src/core/export-html/index.ts index 6b5579b68..a831ae42d 100644 --- a/packages/coding-agent/src/core/export-html/index.ts +++ b/packages/coding-agent/src/core/export-html/index.ts @@ -1,11 +1,11 @@ import type { AgentState } from "@earendil-works/pi-agent-core"; import { existsSync, readFileSync, writeFileSync } from "fs"; import { basename, join } from "path"; -import { APP_NAME, getExportTemplateDir } from "../../config.js"; -import { getResolvedThemeColors, getThemeExportColors } from "../../modes/interactive/theme/theme.js"; -import type { ToolDefinition } from "../extensions/types.js"; -import type { SessionEntry } from "../session-manager.js"; -import { SessionManager } from "../session-manager.js"; +import { APP_NAME, getExportTemplateDir } from "../../config.ts"; +import { getResolvedThemeColors, getThemeExportColors } from "../../modes/interactive/theme/theme.ts"; +import type { ToolDefinition } from "../extensions/types.ts"; +import type { SessionEntry } from "../session-manager.ts"; +import { SessionManager } from "../session-manager.ts"; /** * Interface for rendering custom tools to HTML. diff --git a/packages/coding-agent/src/core/export-html/tool-renderer.ts b/packages/coding-agent/src/core/export-html/tool-renderer.ts index ee4fcb865..c2030a271 100644 --- a/packages/coding-agent/src/core/export-html/tool-renderer.ts +++ b/packages/coding-agent/src/core/export-html/tool-renderer.ts @@ -7,9 +7,9 @@ import type { ImageContent, TextContent } from "@earendil-works/pi-ai"; import type { Component } from "@earendil-works/pi-tui"; -import type { Theme } from "../../modes/interactive/theme/theme.js"; -import type { ToolDefinition, ToolRenderContext } from "../extensions/types.js"; -import { ansiLinesToHtml } from "./ansi-to-html.js"; +import type { Theme } from "../../modes/interactive/theme/theme.ts"; +import type { ToolDefinition, ToolRenderContext } from "../extensions/types.ts"; +import { ansiLinesToHtml } from "./ansi-to-html.ts"; export interface ToolHtmlRendererDeps { /** Function to look up tool definition by name */ diff --git a/packages/coding-agent/src/core/extensions/index.ts b/packages/coding-agent/src/core/extensions/index.ts index fdc235c6c..acbc50b18 100644 --- a/packages/coding-agent/src/core/extensions/index.ts +++ b/packages/coding-agent/src/core/extensions/index.ts @@ -2,14 +2,14 @@ * Extension system for lifecycle events and custom tools. */ -export type { SlashCommandInfo, SlashCommandSource } from "../slash-commands.js"; -export type { SourceInfo } from "../source-info.js"; +export type { SlashCommandInfo, SlashCommandSource } from "../slash-commands.ts"; +export type { SourceInfo } from "../source-info.ts"; export { createExtensionRuntime, discoverAndLoadExtensions, loadExtensionFromFactory, loadExtensions, -} from "./loader.js"; +} from "./loader.ts"; export type { ExtensionErrorListener, ForkHandler, @@ -17,8 +17,8 @@ export type { NewSessionHandler, ShutdownHandler, SwitchSessionHandler, -} from "./runner.js"; -export { ExtensionRunner } from "./runner.js"; +} from "./runner.ts"; +export { ExtensionRunner } from "./runner.ts"; export type { AfterProviderResponseEvent, AgentEndEvent, @@ -156,7 +156,7 @@ export type { WorkingIndicatorOptions, WriteToolCallEvent, WriteToolResultEvent, -} from "./types.js"; +} from "./types.ts"; // Type guards export { defineTool, @@ -168,5 +168,5 @@ export { isReadToolResult, isToolCallEventType, isWriteToolResult, -} from "./types.js"; -export { wrapRegisteredTool, wrapRegisteredTools } from "./wrapper.js"; +} from "./types.ts"; +export { wrapRegisteredTool, wrapRegisteredTools } from "./wrapper.ts"; diff --git a/packages/coding-agent/src/core/extensions/loader.ts b/packages/coding-agent/src/core/extensions/loader.ts index b2d7b2755..60ad625dc 100644 --- a/packages/coding-agent/src/core/extensions/loader.ts +++ b/packages/coding-agent/src/core/extensions/loader.ts @@ -20,14 +20,14 @@ import { createJiti } from "jiti/static"; import * as _bundledTypebox from "typebox"; import * as _bundledTypeboxCompile from "typebox/compile"; import * as _bundledTypeboxValue from "typebox/value"; -import { CONFIG_DIR_NAME, getAgentDir, isBunBinary } from "../../config.js"; +import { CONFIG_DIR_NAME, getAgentDir, isBunBinary } from "../../config.ts"; // NOTE: This import works because loader.ts exports are NOT re-exported from index.ts, // avoiding a circular dependency. Extensions can import from @earendil-works/pi-coding-agent. -import * as _bundledPiCodingAgent from "../../index.js"; -import { createEventBus, type EventBus } from "../event-bus.js"; -import type { ExecOptions } from "../exec.js"; -import { execCommand } from "../exec.js"; -import { createSyntheticSourceInfo } from "../source-info.js"; +import * as _bundledPiCodingAgent from "../../index.ts"; +import { createEventBus, type EventBus } from "../event-bus.ts"; +import type { ExecOptions } from "../exec.ts"; +import { execCommand } from "../exec.ts"; +import { createSyntheticSourceInfo } from "../source-info.ts"; import type { Extension, ExtensionAPI, @@ -38,7 +38,7 @@ import type { ProviderConfig, RegisteredCommand, ToolDefinition, -} from "./types.js"; +} from "./types.ts"; /** Modules available to extensions via virtualModules (for compiled Bun binary) */ const VIRTUAL_MODULES: Record = { @@ -236,7 +236,7 @@ function createExtensionAPI( shortcut: KeyId, options: { description?: string; - handler: (ctx: import("./types.js").ExtensionContext) => Promise | void; + handler: (ctx: import("./types.ts").ExtensionContext) => Promise | void; }, ): void { runtime.assertActive(); diff --git a/packages/coding-agent/src/core/extensions/runner.ts b/packages/coding-agent/src/core/extensions/runner.ts index c37a45884..167c52cc6 100644 --- a/packages/coding-agent/src/core/extensions/runner.ts +++ b/packages/coding-agent/src/core/extensions/runner.ts @@ -5,12 +5,12 @@ import type { AgentMessage } from "@earendil-works/pi-agent-core"; import type { ImageContent, Model } from "@earendil-works/pi-ai"; import type { KeyId } from "@earendil-works/pi-tui"; -import { type Theme, theme } from "../../modes/interactive/theme/theme.js"; -import type { ResourceDiagnostic } from "../diagnostics.js"; -import type { KeybindingsConfig } from "../keybindings.js"; -import type { ModelRegistry } from "../model-registry.js"; -import type { SessionManager } from "../session-manager.js"; -import type { BuildSystemPromptOptions } from "../system-prompt.js"; +import { type Theme, theme } from "../../modes/interactive/theme/theme.ts"; +import type { ResourceDiagnostic } from "../diagnostics.ts"; +import type { KeybindingsConfig } from "../keybindings.ts"; +import type { ModelRegistry } from "../model-registry.ts"; +import type { SessionManager } from "../session-manager.ts"; +import type { BuildSystemPromptOptions } from "../system-prompt.ts"; import type { BeforeAgentStartEvent, BeforeAgentStartEventResult, @@ -55,7 +55,7 @@ import type { ToolResultEventResult, UserBashEvent, UserBashEventResult, -} from "./types.js"; +} from "./types.ts"; // Extension shortcuts compete with canonical keybinding ids from keybindings.json. // Only editor-global shortcuts are reserved here. Picker-specific bindings are not. diff --git a/packages/coding-agent/src/core/extensions/types.ts b/packages/coding-agent/src/core/extensions/types.ts index 4c1b6fca1..58b852273 100644 --- a/packages/coding-agent/src/core/extensions/types.ts +++ b/packages/coding-agent/src/core/extensions/types.ts @@ -40,27 +40,27 @@ import type { TUI, } from "@earendil-works/pi-tui"; import type { Static, TSchema } from "typebox"; -import type { Theme } from "../../modes/interactive/theme/theme.js"; -import type { BashResult } from "../bash-executor.js"; -import type { CompactionPreparation, CompactionResult } from "../compaction/index.js"; -import type { EventBus } from "../event-bus.js"; -import type { ExecOptions, ExecResult } from "../exec.js"; -import type { ReadonlyFooterDataProvider } from "../footer-data-provider.js"; -import type { KeybindingsManager } from "../keybindings.js"; -import type { CustomMessage } from "../messages.js"; -import type { ModelRegistry } from "../model-registry.js"; +import type { Theme } from "../../modes/interactive/theme/theme.ts"; +import type { BashResult } from "../bash-executor.ts"; +import type { CompactionPreparation, CompactionResult } from "../compaction/index.ts"; +import type { EventBus } from "../event-bus.ts"; +import type { ExecOptions, ExecResult } from "../exec.ts"; +import type { ReadonlyFooterDataProvider } from "../footer-data-provider.ts"; +import type { KeybindingsManager } from "../keybindings.ts"; +import type { CustomMessage } from "../messages.ts"; +import type { ModelRegistry } from "../model-registry.ts"; import type { BranchSummaryEntry, CompactionEntry, ReadonlySessionManager, SessionEntry, SessionManager, -} from "../session-manager.js"; -import type { SlashCommandInfo } from "../slash-commands.js"; -import type { SourceInfo } from "../source-info.js"; -import type { BuildSystemPromptOptions } from "../system-prompt.js"; -import type { BashOperations } from "../tools/bash.js"; -import type { EditToolDetails } from "../tools/edit.js"; +} from "../session-manager.ts"; +import type { SlashCommandInfo } from "../slash-commands.ts"; +import type { SourceInfo } from "../source-info.ts"; +import type { BuildSystemPromptOptions } from "../system-prompt.ts"; +import type { BashOperations } from "../tools/bash.ts"; +import type { EditToolDetails } from "../tools/edit.ts"; import type { BashToolDetails, BashToolInput, @@ -74,12 +74,12 @@ import type { ReadToolDetails, ReadToolInput, WriteToolInput, -} from "../tools/index.js"; +} from "../tools/index.ts"; -export type { ExecOptions, ExecResult } from "../exec.js"; -export type { BuildSystemPromptOptions } from "../system-prompt.js"; +export type { ExecOptions, ExecResult } from "../exec.ts"; +export type { BuildSystemPromptOptions } from "../system-prompt.ts"; export type { AgentToolResult, AgentToolUpdateCallback, ToolExecutionMode }; -export type { AppKeybinding, KeybindingsManager } from "../keybindings.js"; +export type { AppKeybinding, KeybindingsManager } from "../keybindings.ts"; // ============================================================================ // UI Context diff --git a/packages/coding-agent/src/core/extensions/wrapper.ts b/packages/coding-agent/src/core/extensions/wrapper.ts index 9b9d281c4..6a84038c2 100644 --- a/packages/coding-agent/src/core/extensions/wrapper.ts +++ b/packages/coding-agent/src/core/extensions/wrapper.ts @@ -6,9 +6,9 @@ */ import type { AgentTool } from "@earendil-works/pi-agent-core"; -import { wrapToolDefinition, wrapToolDefinitions } from "../tools/tool-definition-wrapper.js"; -import type { ExtensionRunner } from "./runner.js"; -import type { RegisteredTool } from "./types.js"; +import { wrapToolDefinition, wrapToolDefinitions } from "../tools/tool-definition-wrapper.ts"; +import type { ExtensionRunner } from "./runner.ts"; +import type { RegisteredTool } from "./types.ts"; /** * Wrap a RegisteredTool into an AgentTool. diff --git a/packages/coding-agent/src/core/footer-data-provider.ts b/packages/coding-agent/src/core/footer-data-provider.ts index 5d7292214..b7ea09b8a 100644 --- a/packages/coding-agent/src/core/footer-data-provider.ts +++ b/packages/coding-agent/src/core/footer-data-provider.ts @@ -1,7 +1,7 @@ import { type ExecFileException, execFile, spawnSync } from "child_process"; import { existsSync, type FSWatcher, readFileSync, statSync, unwatchFile, watchFile } from "fs"; import { dirname, join, resolve } from "path"; -import { closeWatcher, FS_WATCH_RETRY_DELAY_MS, watchWithErrorHandler } from "../utils/fs-watch.js"; +import { closeWatcher, FS_WATCH_RETRY_DELAY_MS, watchWithErrorHandler } from "../utils/fs-watch.ts"; type GitPaths = { repoDir: string; diff --git a/packages/coding-agent/src/core/index.ts b/packages/coding-agent/src/core/index.ts index 003e1394f..71c45e9c8 100644 --- a/packages/coding-agent/src/core/index.ts +++ b/packages/coding-agent/src/core/index.ts @@ -10,13 +10,13 @@ export { type ModelCycleResult, type PromptOptions, type SessionStats, -} from "./agent-session.js"; +} from "./agent-session.ts"; export { AgentSessionRuntime, type CreateAgentSessionRuntimeFactory, type CreateAgentSessionRuntimeResult, createAgentSessionRuntime, -} from "./agent-session-runtime.js"; +} from "./agent-session-runtime.ts"; export { type AgentSessionRuntimeDiagnostic, type AgentSessionServices, @@ -24,10 +24,10 @@ export { type CreateAgentSessionServicesOptions, createAgentSessionFromServices, createAgentSessionServices, -} from "./agent-session-services.js"; -export { type BashExecutorOptions, type BashResult, executeBashWithOperations } from "./bash-executor.js"; -export type { CompactionResult } from "./compaction/index.js"; -export { createEventBus, type EventBus, type EventBusController } from "./event-bus.js"; +} from "./agent-session-services.ts"; +export { type BashExecutorOptions, type BashResult, executeBashWithOperations } from "./bash-executor.ts"; +export type { CompactionResult } from "./compaction/index.ts"; +export { createEventBus, type EventBus, type EventBusController } from "./event-bus.ts"; // Extensions system export { type AgentEndEvent, @@ -73,5 +73,5 @@ export { type TurnEndEvent, type TurnStartEvent, type WorkingIndicatorOptions, -} from "./extensions/index.js"; -export { createSyntheticSourceInfo } from "./source-info.js"; +} from "./extensions/index.ts"; +export { createSyntheticSourceInfo } from "./source-info.ts"; diff --git a/packages/coding-agent/src/core/keybindings.ts b/packages/coding-agent/src/core/keybindings.ts index f1663b1ad..7c0de6431 100644 --- a/packages/coding-agent/src/core/keybindings.ts +++ b/packages/coding-agent/src/core/keybindings.ts @@ -8,7 +8,7 @@ import { } from "@earendil-works/pi-tui"; import { existsSync, readFileSync } from "fs"; import { join } from "path"; -import { getAgentDir } from "../config.js"; +import { getAgentDir } from "../config.ts"; export interface AppKeybindings { "app.interrupt": true; diff --git a/packages/coding-agent/src/core/model-registry.ts b/packages/coding-agent/src/core/model-registry.ts index 6cf8c40f5..4d0404632 100644 --- a/packages/coding-agent/src/core/model-registry.ts +++ b/packages/coding-agent/src/core/model-registry.ts @@ -24,15 +24,15 @@ import { join } from "path"; import { type Static, Type } from "typebox"; import { Compile } from "typebox/compile"; import type { TLocalizedValidationError } from "typebox/error"; -import { getAgentDir } from "../config.js"; -import type { AuthStatus, AuthStorage } from "./auth-storage.js"; -import { BUILT_IN_PROVIDER_DISPLAY_NAMES } from "./provider-display-names.js"; +import { getAgentDir } from "../config.ts"; +import type { AuthStatus, AuthStorage } from "./auth-storage.ts"; +import { BUILT_IN_PROVIDER_DISPLAY_NAMES } from "./provider-display-names.ts"; import { clearConfigValueCache, resolveConfigValueOrThrow, resolveConfigValueUncached, resolveHeadersOrThrow, -} from "./resolve-config-value.js"; +} from "./resolve-config-value.ts"; // Schema for OpenRouter routing preferences const PercentileCutoffsSchema = Type.Object({ diff --git a/packages/coding-agent/src/core/model-resolver.ts b/packages/coding-agent/src/core/model-resolver.ts index 18a3eed8e..764c06f5a 100644 --- a/packages/coding-agent/src/core/model-resolver.ts +++ b/packages/coding-agent/src/core/model-resolver.ts @@ -6,9 +6,9 @@ import type { ThinkingLevel } from "@earendil-works/pi-agent-core"; import { type Api, type KnownProvider, type Model, modelsAreEqual } from "@earendil-works/pi-ai"; import chalk from "chalk"; import { minimatch } from "minimatch"; -import { isValidThinkingLevel } from "../cli/args.js"; -import { DEFAULT_THINKING_LEVEL } from "./defaults.js"; -import type { ModelRegistry } from "./model-registry.js"; +import { isValidThinkingLevel } from "../cli/args.ts"; +import { DEFAULT_THINKING_LEVEL } from "./defaults.ts"; +import type { ModelRegistry } from "./model-registry.ts"; /** Default model IDs for each known provider */ export const defaultModelPerProvider: Record = { diff --git a/packages/coding-agent/src/core/package-manager.ts b/packages/coding-agent/src/core/package-manager.ts index 04135cbf2..59d534270 100644 --- a/packages/coding-agent/src/core/package-manager.ts +++ b/packages/coding-agent/src/core/package-manager.ts @@ -27,12 +27,12 @@ import type { Readable } from "node:stream"; import { globSync } from "glob"; import ignore from "ignore"; import { minimatch } from "minimatch"; -import { CONFIG_DIR_NAME } from "../config.js"; -import { spawnProcess, spawnProcessSync } from "../utils/child-process.js"; -import { type GitSource, parseGitUrl } from "../utils/git.js"; -import { canonicalizePath, isLocalPath } from "../utils/paths.js"; -import { isStdoutTakenOver } from "./output-guard.js"; -import type { PackageSource, SettingsManager } from "./settings-manager.js"; +import { CONFIG_DIR_NAME } from "../config.ts"; +import { spawnProcess, spawnProcessSync } from "../utils/child-process.ts"; +import { type GitSource, parseGitUrl } from "../utils/git.ts"; +import { canonicalizePath, isLocalPath } from "../utils/paths.ts"; +import { isStdoutTakenOver } from "./output-guard.ts"; +import type { PackageSource, SettingsManager } from "./settings-manager.ts"; const NETWORK_TIMEOUT_MS = 10000; const UPDATE_CHECK_CONCURRENCY = 4; diff --git a/packages/coding-agent/src/core/prompt-templates.ts b/packages/coding-agent/src/core/prompt-templates.ts index 45e779a17..b646896d2 100644 --- a/packages/coding-agent/src/core/prompt-templates.ts +++ b/packages/coding-agent/src/core/prompt-templates.ts @@ -1,9 +1,9 @@ import { existsSync, readdirSync, readFileSync, statSync } from "fs"; import { homedir } from "os"; import { basename, dirname, isAbsolute, join, resolve, sep } from "path"; -import { CONFIG_DIR_NAME } from "../config.js"; -import { parseFrontmatter } from "../utils/frontmatter.js"; -import { createSyntheticSourceInfo, type SourceInfo } from "./source-info.js"; +import { CONFIG_DIR_NAME } from "../config.ts"; +import { parseFrontmatter } from "../utils/frontmatter.ts"; +import { createSyntheticSourceInfo, type SourceInfo } from "./source-info.ts"; /** * Represents a prompt template loaded from a markdown file diff --git a/packages/coding-agent/src/core/resolve-config-value.ts b/packages/coding-agent/src/core/resolve-config-value.ts index 646042e1c..215914ba5 100644 --- a/packages/coding-agent/src/core/resolve-config-value.ts +++ b/packages/coding-agent/src/core/resolve-config-value.ts @@ -4,7 +4,7 @@ */ import { execSync, spawnSync } from "child_process"; -import { getShellConfig } from "../utils/shell.js"; +import { getShellConfig } from "../utils/shell.ts"; // Cache for shell command results (persists for process lifetime) const commandResultCache = new Map(); diff --git a/packages/coding-agent/src/core/resource-loader.ts b/packages/coding-agent/src/core/resource-loader.ts index 338daf7e9..57d90f97b 100644 --- a/packages/coding-agent/src/core/resource-loader.ts +++ b/packages/coding-agent/src/core/resource-loader.ts @@ -2,23 +2,23 @@ import { existsSync, readdirSync, readFileSync, statSync } from "node:fs"; import { homedir } from "node:os"; import { join, resolve, sep } from "node:path"; import chalk from "chalk"; -import { CONFIG_DIR_NAME } from "../config.js"; -import { loadThemeFromPath, type Theme } from "../modes/interactive/theme/theme.js"; -import type { ResourceDiagnostic } from "./diagnostics.js"; +import { CONFIG_DIR_NAME } from "../config.ts"; +import { loadThemeFromPath, type Theme } from "../modes/interactive/theme/theme.ts"; +import type { ResourceDiagnostic } from "./diagnostics.ts"; -export type { ResourceCollision, ResourceDiagnostic } from "./diagnostics.js"; +export type { ResourceCollision, ResourceDiagnostic } from "./diagnostics.ts"; -import { canonicalizePath, isLocalPath } from "../utils/paths.js"; -import { createEventBus, type EventBus } from "./event-bus.js"; -import { createExtensionRuntime, loadExtensionFromFactory, loadExtensions } from "./extensions/loader.js"; -import type { Extension, ExtensionFactory, ExtensionRuntime, LoadExtensionsResult } from "./extensions/types.js"; -import { DefaultPackageManager, type PathMetadata } from "./package-manager.js"; -import type { PromptTemplate } from "./prompt-templates.js"; -import { loadPromptTemplates } from "./prompt-templates.js"; -import { SettingsManager } from "./settings-manager.js"; -import type { Skill } from "./skills.js"; -import { loadSkills } from "./skills.js"; -import { createSourceInfo, type SourceInfo } from "./source-info.js"; +import { canonicalizePath, isLocalPath } from "../utils/paths.ts"; +import { createEventBus, type EventBus } from "./event-bus.ts"; +import { createExtensionRuntime, loadExtensionFromFactory, loadExtensions } from "./extensions/loader.ts"; +import type { Extension, ExtensionFactory, ExtensionRuntime, LoadExtensionsResult } from "./extensions/types.ts"; +import { DefaultPackageManager, type PathMetadata } from "./package-manager.ts"; +import type { PromptTemplate } from "./prompt-templates.ts"; +import { loadPromptTemplates } from "./prompt-templates.ts"; +import { SettingsManager } from "./settings-manager.ts"; +import type { Skill } from "./skills.ts"; +import { loadSkills } from "./skills.ts"; +import { createSourceInfo, type SourceInfo } from "./source-info.ts"; export interface ResourceExtensionPaths { skillPaths?: Array<{ path: string; metadata: PathMetadata }>; diff --git a/packages/coding-agent/src/core/sdk.ts b/packages/coding-agent/src/core/sdk.ts index 3e0533d0d..7caa0fa11 100644 --- a/packages/coding-agent/src/core/sdk.ts +++ b/packages/coding-agent/src/core/sdk.ts @@ -1,21 +1,21 @@ import { join } from "node:path"; import { Agent, type AgentMessage, type ThinkingLevel } from "@earendil-works/pi-agent-core"; import { clampThinkingLevel, type Message, type Model, streamSimple } from "@earendil-works/pi-ai"; -import { getAgentDir } from "../config.js"; -import { AgentSession } from "./agent-session.js"; -import { formatNoModelsAvailableMessage } from "./auth-guidance.js"; -import { AuthStorage } from "./auth-storage.js"; -import { DEFAULT_THINKING_LEVEL } from "./defaults.js"; -import type { ExtensionRunner, LoadExtensionsResult, SessionStartEvent, ToolDefinition } from "./extensions/index.js"; -import { convertToLlm } from "./messages.js"; -import { ModelRegistry } from "./model-registry.js"; -import { findInitialModel } from "./model-resolver.js"; -import type { ResourceLoader } from "./resource-loader.js"; -import { DefaultResourceLoader } from "./resource-loader.js"; -import { getDefaultSessionDir, SessionManager } from "./session-manager.js"; -import { SettingsManager } from "./settings-manager.js"; -import { isInstallTelemetryEnabled } from "./telemetry.js"; -import { time } from "./timings.js"; +import { getAgentDir } from "../config.ts"; +import { AgentSession } from "./agent-session.ts"; +import { formatNoModelsAvailableMessage } from "./auth-guidance.ts"; +import { AuthStorage } from "./auth-storage.ts"; +import { DEFAULT_THINKING_LEVEL } from "./defaults.ts"; +import type { ExtensionRunner, LoadExtensionsResult, SessionStartEvent, ToolDefinition } from "./extensions/index.ts"; +import { convertToLlm } from "./messages.ts"; +import { ModelRegistry } from "./model-registry.ts"; +import { findInitialModel } from "./model-resolver.ts"; +import type { ResourceLoader } from "./resource-loader.ts"; +import { DefaultResourceLoader } from "./resource-loader.ts"; +import { getDefaultSessionDir, SessionManager } from "./session-manager.ts"; +import { SettingsManager } from "./settings-manager.ts"; +import { isInstallTelemetryEnabled } from "./telemetry.ts"; +import { time } from "./timings.ts"; import { createBashTool, createCodingTools, @@ -28,7 +28,7 @@ import { createWriteTool, type ToolName, withFileMutationQueue, -} from "./tools/index.js"; +} from "./tools/index.ts"; export interface CreateAgentSessionOptions { /** Working directory for project-local discovery. Default: process.cwd() */ @@ -91,7 +91,7 @@ export interface CreateAgentSessionResult { // Re-exports -export * from "./agent-session-runtime.js"; +export * from "./agent-session-runtime.ts"; export type { ExtensionAPI, ExtensionCommandContext, @@ -100,10 +100,10 @@ export type { SlashCommandInfo, SlashCommandSource, ToolDefinition, -} from "./extensions/index.js"; -export type { PromptTemplate } from "./prompt-templates.js"; -export type { Skill } from "./skills.js"; -export type { Tool } from "./tools/index.js"; +} from "./extensions/index.ts"; +export type { PromptTemplate } from "./prompt-templates.ts"; +export type { Skill } from "./skills.ts"; +export type { Tool } from "./tools/index.ts"; export { withFileMutationQueue, diff --git a/packages/coding-agent/src/core/session-manager.ts b/packages/coding-agent/src/core/session-manager.ts index 0c6e23348..533916f34 100644 --- a/packages/coding-agent/src/core/session-manager.ts +++ b/packages/coding-agent/src/core/session-manager.ts @@ -15,14 +15,14 @@ import { } from "fs"; import { readdir, readFile, stat } from "fs/promises"; import { join, resolve } from "path"; -import { getAgentDir as getDefaultAgentDir, getSessionsDir } from "../config.js"; +import { getAgentDir as getDefaultAgentDir, getSessionsDir } from "../config.ts"; import { type BashExecutionMessage, type CustomMessage, createBranchSummaryMessage, createCompactionSummaryMessage, createCustomMessage, -} from "./messages.js"; +} from "./messages.ts"; export const CURRENT_SESSION_VERSION = 3; diff --git a/packages/coding-agent/src/core/settings-manager.ts b/packages/coding-agent/src/core/settings-manager.ts index 4db920563..7dc6931e4 100644 --- a/packages/coding-agent/src/core/settings-manager.ts +++ b/packages/coding-agent/src/core/settings-manager.ts @@ -3,7 +3,7 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs"; import { homedir } from "os"; import { dirname, join } from "path"; import lockfile from "proper-lockfile"; -import { CONFIG_DIR_NAME, getAgentDir } from "../config.js"; +import { CONFIG_DIR_NAME, getAgentDir } from "../config.ts"; export interface CompactionSettings { enabled?: boolean; // default: true diff --git a/packages/coding-agent/src/core/skills.ts b/packages/coding-agent/src/core/skills.ts index 82dc9a63a..675da3a78 100644 --- a/packages/coding-agent/src/core/skills.ts +++ b/packages/coding-agent/src/core/skills.ts @@ -2,11 +2,11 @@ import { existsSync, readdirSync, readFileSync, statSync } from "fs"; import ignore from "ignore"; import { homedir } from "os"; import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "path"; -import { CONFIG_DIR_NAME, getAgentDir } from "../config.js"; -import { parseFrontmatter } from "../utils/frontmatter.js"; -import { canonicalizePath } from "../utils/paths.js"; -import type { ResourceDiagnostic } from "./diagnostics.js"; -import { createSyntheticSourceInfo, type SourceInfo } from "./source-info.js"; +import { CONFIG_DIR_NAME, getAgentDir } from "../config.ts"; +import { parseFrontmatter } from "../utils/frontmatter.ts"; +import { canonicalizePath } from "../utils/paths.ts"; +import type { ResourceDiagnostic } from "./diagnostics.ts"; +import { createSyntheticSourceInfo, type SourceInfo } from "./source-info.ts"; /** Max name length per spec */ const MAX_NAME_LENGTH = 64; diff --git a/packages/coding-agent/src/core/slash-commands.ts b/packages/coding-agent/src/core/slash-commands.ts index ffff92bb6..e52892c81 100644 --- a/packages/coding-agent/src/core/slash-commands.ts +++ b/packages/coding-agent/src/core/slash-commands.ts @@ -1,5 +1,5 @@ -import { APP_NAME } from "../config.js"; -import type { SourceInfo } from "./source-info.js"; +import { APP_NAME } from "../config.ts"; +import type { SourceInfo } from "./source-info.ts"; export type SlashCommandSource = "extension" | "prompt" | "skill"; diff --git a/packages/coding-agent/src/core/source-info.ts b/packages/coding-agent/src/core/source-info.ts index c75d3f947..c8c9837d1 100644 --- a/packages/coding-agent/src/core/source-info.ts +++ b/packages/coding-agent/src/core/source-info.ts @@ -1,4 +1,4 @@ -import type { PathMetadata } from "./package-manager.js"; +import type { PathMetadata } from "./package-manager.ts"; export type SourceScope = "user" | "project" | "temporary"; export type SourceOrigin = "package" | "top-level"; diff --git a/packages/coding-agent/src/core/system-prompt.ts b/packages/coding-agent/src/core/system-prompt.ts index c6b1017d0..8664d8719 100644 --- a/packages/coding-agent/src/core/system-prompt.ts +++ b/packages/coding-agent/src/core/system-prompt.ts @@ -2,8 +2,8 @@ * System prompt construction and project context loading */ -import { getDocsPath, getExamplesPath, getReadmePath } from "../config.js"; -import { formatSkillsForPrompt, type Skill } from "./skills.js"; +import { getDocsPath, getExamplesPath, getReadmePath } from "../config.ts"; +import { formatSkillsForPrompt, type Skill } from "./skills.ts"; export interface BuildSystemPromptOptions { /** Custom system prompt (replaces default). */ diff --git a/packages/coding-agent/src/core/telemetry.ts b/packages/coding-agent/src/core/telemetry.ts index b563d34b7..25111c2b3 100644 --- a/packages/coding-agent/src/core/telemetry.ts +++ b/packages/coding-agent/src/core/telemetry.ts @@ -1,4 +1,4 @@ -import type { SettingsManager } from "./settings-manager.js"; +import type { SettingsManager } from "./settings-manager.ts"; function isTruthyEnvFlag(value: string | undefined): boolean { if (!value) return false; diff --git a/packages/coding-agent/src/core/tools/bash.ts b/packages/coding-agent/src/core/tools/bash.ts index 207285005..f70c9470a 100644 --- a/packages/coding-agent/src/core/tools/bash.ts +++ b/packages/coding-agent/src/core/tools/bash.ts @@ -3,22 +3,22 @@ import type { AgentTool } from "@earendil-works/pi-agent-core"; import { Container, Text, truncateToWidth } from "@earendil-works/pi-tui"; import { spawn } from "child_process"; import { type Static, Type } from "typebox"; -import { keyHint } from "../../modes/interactive/components/keybinding-hints.js"; -import { truncateToVisualLines } from "../../modes/interactive/components/visual-truncate.js"; -import { theme } from "../../modes/interactive/theme/theme.js"; -import { waitForChildProcess } from "../../utils/child-process.js"; +import { keyHint } from "../../modes/interactive/components/keybinding-hints.ts"; +import { truncateToVisualLines } from "../../modes/interactive/components/visual-truncate.ts"; +import { theme } from "../../modes/interactive/theme/theme.ts"; +import { waitForChildProcess } from "../../utils/child-process.ts"; import { getShellConfig, getShellEnv, killProcessTree, trackDetachedChildPid, untrackDetachedChildPid, -} from "../../utils/shell.js"; -import type { ToolDefinition, ToolRenderResultOptions } from "../extensions/types.js"; -import { OutputAccumulator } from "./output-accumulator.js"; -import { getTextOutput, invalidArgText, str } from "./render-utils.js"; -import { wrapToolDefinition } from "./tool-definition-wrapper.js"; -import { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize, type TruncationResult } from "./truncate.js"; +} from "../../utils/shell.ts"; +import type { ToolDefinition, ToolRenderResultOptions } from "../extensions/types.ts"; +import { OutputAccumulator } from "./output-accumulator.ts"; +import { getTextOutput, invalidArgText, str } from "./render-utils.ts"; +import { wrapToolDefinition } from "./tool-definition-wrapper.ts"; +import { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize, type TruncationResult } from "./truncate.ts"; const bashSchema = Type.Object({ command: Type.String({ description: "Bash command to execute" }), diff --git a/packages/coding-agent/src/core/tools/edit-diff.ts b/packages/coding-agent/src/core/tools/edit-diff.ts index d8c4c0039..691d882ac 100644 --- a/packages/coding-agent/src/core/tools/edit-diff.ts +++ b/packages/coding-agent/src/core/tools/edit-diff.ts @@ -6,7 +6,7 @@ import * as Diff from "diff"; import { constants } from "fs"; import { access, readFile } from "fs/promises"; -import { resolveToCwd } from "./path-utils.js"; +import { resolveToCwd } from "./path-utils.ts"; export function detectLineEnding(content: string): "\r\n" | "\n" { const crlfIdx = content.indexOf("\r\n"); diff --git a/packages/coding-agent/src/core/tools/edit.ts b/packages/coding-agent/src/core/tools/edit.ts index 6a5f960f5..e56563785 100644 --- a/packages/coding-agent/src/core/tools/edit.ts +++ b/packages/coding-agent/src/core/tools/edit.ts @@ -3,8 +3,8 @@ import { Box, Container, Spacer, Text } from "@earendil-works/pi-tui"; import { constants } from "fs"; import { access as fsAccess, readFile as fsReadFile, writeFile as fsWriteFile } from "fs/promises"; import { type Static, Type } from "typebox"; -import { renderDiff } from "../../modes/interactive/components/diff.js"; -import type { ToolDefinition } from "../extensions/types.js"; +import { renderDiff } from "../../modes/interactive/components/diff.ts"; +import type { ToolDefinition } from "../extensions/types.ts"; import { applyEditsToNormalizedContent, computeEditsDiff, @@ -16,11 +16,11 @@ import { normalizeToLF, restoreLineEndings, stripBom, -} from "./edit-diff.js"; -import { withFileMutationQueue } from "./file-mutation-queue.js"; -import { resolveToCwd } from "./path-utils.js"; -import { invalidArgText, shortenPath, str } from "./render-utils.js"; -import { wrapToolDefinition } from "./tool-definition-wrapper.js"; +} from "./edit-diff.ts"; +import { withFileMutationQueue } from "./file-mutation-queue.ts"; +import { resolveToCwd } from "./path-utils.ts"; +import { invalidArgText, shortenPath, str } from "./render-utils.ts"; +import { wrapToolDefinition } from "./tool-definition-wrapper.ts"; type EditPreview = EditDiffResult | EditDiffError; @@ -190,7 +190,7 @@ function getRenderablePreviewInput(args: RenderableEditArgs | undefined): { path function formatEditCall( args: RenderableEditArgs | undefined, - theme: typeof import("../../modes/interactive/theme/theme.js").theme, + theme: typeof import("../../modes/interactive/theme/theme.ts").theme, ): string { const invalidArg = invalidArgText(theme); const rawPath = str(args?.file_path ?? args?.path); @@ -203,7 +203,7 @@ function formatEditResult( args: RenderableEditArgs | undefined, preview: EditPreview | undefined, result: EditToolResultLike, - theme: typeof import("../../modes/interactive/theme/theme.js").theme, + theme: typeof import("../../modes/interactive/theme/theme.ts").theme, isError: boolean, ): string | undefined { const rawPath = str(args?.file_path ?? args?.path); @@ -231,7 +231,7 @@ function formatEditResult( function getEditHeaderBg( preview: EditPreview | undefined, settledError: boolean | undefined, - theme: typeof import("../../modes/interactive/theme/theme.js").theme, + theme: typeof import("../../modes/interactive/theme/theme.ts").theme, ): (text: string) => string { if (preview) { if ("error" in preview) { @@ -248,7 +248,7 @@ function getEditHeaderBg( function buildEditCallComponent( component: EditCallRenderComponent, args: RenderableEditArgs | undefined, - theme: typeof import("../../modes/interactive/theme/theme.js").theme, + theme: typeof import("../../modes/interactive/theme/theme.ts").theme, ): EditCallRenderComponent { component.setBgFn(getEditHeaderBg(component.preview, component.settledError, theme)); component.clear(); diff --git a/packages/coding-agent/src/core/tools/find.ts b/packages/coding-agent/src/core/tools/find.ts index e2d552d4f..3fd2f6832 100644 --- a/packages/coding-agent/src/core/tools/find.ts +++ b/packages/coding-agent/src/core/tools/find.ts @@ -5,13 +5,13 @@ import { spawn } from "child_process"; import { existsSync } from "fs"; import path from "path"; import { type Static, Type } from "typebox"; -import { keyHint } from "../../modes/interactive/components/keybinding-hints.js"; -import { ensureTool } from "../../utils/tools-manager.js"; -import type { ToolDefinition, ToolRenderResultOptions } from "../extensions/types.js"; -import { resolveToCwd } from "./path-utils.js"; -import { getTextOutput, invalidArgText, shortenPath, str } from "./render-utils.js"; -import { wrapToolDefinition } from "./tool-definition-wrapper.js"; -import { DEFAULT_MAX_BYTES, formatSize, type TruncationResult, truncateHead } from "./truncate.js"; +import { keyHint } from "../../modes/interactive/components/keybinding-hints.ts"; +import { ensureTool } from "../../utils/tools-manager.ts"; +import type { ToolDefinition, ToolRenderResultOptions } from "../extensions/types.ts"; +import { resolveToCwd } from "./path-utils.ts"; +import { getTextOutput, invalidArgText, shortenPath, str } from "./render-utils.ts"; +import { wrapToolDefinition } from "./tool-definition-wrapper.ts"; +import { DEFAULT_MAX_BYTES, formatSize, type TruncationResult, truncateHead } from "./truncate.ts"; function toPosixPath(value: string): string { return value.split(path.sep).join("/"); @@ -58,7 +58,7 @@ export interface FindToolOptions { function formatFindCall( args: { pattern: string; path?: string; limit?: number } | undefined, - theme: typeof import("../../modes/interactive/theme/theme.js").theme, + theme: typeof import("../../modes/interactive/theme/theme.ts").theme, ): string { const pattern = str(args?.pattern); const rawPath = str(args?.path); @@ -82,7 +82,7 @@ function formatFindResult( details?: FindToolDetails; }, options: ToolRenderResultOptions, - theme: typeof import("../../modes/interactive/theme/theme.js").theme, + theme: typeof import("../../modes/interactive/theme/theme.ts").theme, showImages: boolean, ): string { const output = getTextOutput(result, showImages).trim(); diff --git a/packages/coding-agent/src/core/tools/grep.ts b/packages/coding-agent/src/core/tools/grep.ts index 4d441b180..041b31481 100644 --- a/packages/coding-agent/src/core/tools/grep.ts +++ b/packages/coding-agent/src/core/tools/grep.ts @@ -5,12 +5,12 @@ import { spawn } from "child_process"; import { readFileSync, statSync } from "fs"; import path from "path"; import { type Static, Type } from "typebox"; -import { keyHint } from "../../modes/interactive/components/keybinding-hints.js"; -import { ensureTool } from "../../utils/tools-manager.js"; -import type { ToolDefinition, ToolRenderResultOptions } from "../extensions/types.js"; -import { resolveToCwd } from "./path-utils.js"; -import { getTextOutput, invalidArgText, shortenPath, str } from "./render-utils.js"; -import { wrapToolDefinition } from "./tool-definition-wrapper.js"; +import { keyHint } from "../../modes/interactive/components/keybinding-hints.ts"; +import { ensureTool } from "../../utils/tools-manager.ts"; +import type { ToolDefinition, ToolRenderResultOptions } from "../extensions/types.ts"; +import { resolveToCwd } from "./path-utils.ts"; +import { getTextOutput, invalidArgText, shortenPath, str } from "./render-utils.ts"; +import { wrapToolDefinition } from "./tool-definition-wrapper.ts"; import { DEFAULT_MAX_BYTES, formatSize, @@ -18,7 +18,7 @@ import { type TruncationResult, truncateHead, truncateLine, -} from "./truncate.js"; +} from "./truncate.ts"; const grepSchema = Type.Object({ pattern: Type.String({ description: "Search pattern (regex or literal string)" }), @@ -66,7 +66,7 @@ export interface GrepToolOptions { function formatGrepCall( args: { pattern: string; path?: string; glob?: string; limit?: number } | undefined, - theme: typeof import("../../modes/interactive/theme/theme.js").theme, + theme: typeof import("../../modes/interactive/theme/theme.ts").theme, ): string { const pattern = str(args?.pattern); const rawPath = str(args?.path); @@ -90,7 +90,7 @@ function formatGrepResult( details?: GrepToolDetails; }, options: ToolRenderResultOptions, - theme: typeof import("../../modes/interactive/theme/theme.js").theme, + theme: typeof import("../../modes/interactive/theme/theme.ts").theme, showImages: boolean, ): string { const output = getTextOutput(result, showImages).trim(); diff --git a/packages/coding-agent/src/core/tools/index.ts b/packages/coding-agent/src/core/tools/index.ts index 659b5484b..e55f91406 100644 --- a/packages/coding-agent/src/core/tools/index.ts +++ b/packages/coding-agent/src/core/tools/index.ts @@ -8,7 +8,7 @@ export { createBashTool, createBashToolDefinition, createLocalBashOperations, -} from "./bash.js"; +} from "./bash.ts"; export { createEditTool, createEditToolDefinition, @@ -16,8 +16,8 @@ export { type EditToolDetails, type EditToolInput, type EditToolOptions, -} from "./edit.js"; -export { withFileMutationQueue } from "./file-mutation-queue.js"; +} from "./edit.ts"; +export { withFileMutationQueue } from "./file-mutation-queue.ts"; export { createFindTool, createFindToolDefinition, @@ -25,7 +25,7 @@ export { type FindToolDetails, type FindToolInput, type FindToolOptions, -} from "./find.js"; +} from "./find.ts"; export { createGrepTool, createGrepToolDefinition, @@ -33,7 +33,7 @@ export { type GrepToolDetails, type GrepToolInput, type GrepToolOptions, -} from "./grep.js"; +} from "./grep.ts"; export { createLsTool, createLsToolDefinition, @@ -41,7 +41,7 @@ export { type LsToolDetails, type LsToolInput, type LsToolOptions, -} from "./ls.js"; +} from "./ls.ts"; export { createReadTool, createReadToolDefinition, @@ -49,7 +49,7 @@ export { type ReadToolDetails, type ReadToolInput, type ReadToolOptions, -} from "./read.js"; +} from "./read.ts"; export { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, @@ -59,24 +59,24 @@ export { truncateHead, truncateLine, truncateTail, -} from "./truncate.js"; +} from "./truncate.ts"; export { createWriteTool, createWriteToolDefinition, type WriteOperations, type WriteToolInput, type WriteToolOptions, -} from "./write.js"; +} from "./write.ts"; import type { AgentTool } from "@earendil-works/pi-agent-core"; -import type { ToolDefinition } from "../extensions/types.js"; -import { type BashToolOptions, createBashTool, createBashToolDefinition } from "./bash.js"; -import { createEditTool, createEditToolDefinition, type EditToolOptions } from "./edit.js"; -import { createFindTool, createFindToolDefinition, type FindToolOptions } from "./find.js"; -import { createGrepTool, createGrepToolDefinition, type GrepToolOptions } from "./grep.js"; -import { createLsTool, createLsToolDefinition, type LsToolOptions } from "./ls.js"; -import { createReadTool, createReadToolDefinition, type ReadToolOptions } from "./read.js"; -import { createWriteTool, createWriteToolDefinition, type WriteToolOptions } from "./write.js"; +import type { ToolDefinition } from "../extensions/types.ts"; +import { type BashToolOptions, createBashTool, createBashToolDefinition } from "./bash.ts"; +import { createEditTool, createEditToolDefinition, type EditToolOptions } from "./edit.ts"; +import { createFindTool, createFindToolDefinition, type FindToolOptions } from "./find.ts"; +import { createGrepTool, createGrepToolDefinition, type GrepToolOptions } from "./grep.ts"; +import { createLsTool, createLsToolDefinition, type LsToolOptions } from "./ls.ts"; +import { createReadTool, createReadToolDefinition, type ReadToolOptions } from "./read.ts"; +import { createWriteTool, createWriteToolDefinition, type WriteToolOptions } from "./write.ts"; export type Tool = AgentTool; export type ToolDef = ToolDefinition; diff --git a/packages/coding-agent/src/core/tools/ls.ts b/packages/coding-agent/src/core/tools/ls.ts index e6ae22c75..f3d22c1d9 100644 --- a/packages/coding-agent/src/core/tools/ls.ts +++ b/packages/coding-agent/src/core/tools/ls.ts @@ -3,12 +3,12 @@ import { Text } from "@earendil-works/pi-tui"; import { existsSync, readdirSync, statSync } from "fs"; import nodePath from "path"; import { type Static, Type } from "typebox"; -import { keyHint } from "../../modes/interactive/components/keybinding-hints.js"; -import type { ToolDefinition, ToolRenderResultOptions } from "../extensions/types.js"; -import { resolveToCwd } from "./path-utils.js"; -import { getTextOutput, invalidArgText, shortenPath, str } from "./render-utils.js"; -import { wrapToolDefinition } from "./tool-definition-wrapper.js"; -import { DEFAULT_MAX_BYTES, formatSize, type TruncationResult, truncateHead } from "./truncate.js"; +import { keyHint } from "../../modes/interactive/components/keybinding-hints.ts"; +import type { ToolDefinition, ToolRenderResultOptions } from "../extensions/types.ts"; +import { resolveToCwd } from "./path-utils.ts"; +import { getTextOutput, invalidArgText, shortenPath, str } from "./render-utils.ts"; +import { wrapToolDefinition } from "./tool-definition-wrapper.ts"; +import { DEFAULT_MAX_BYTES, formatSize, type TruncationResult, truncateHead } from "./truncate.ts"; const lsSchema = Type.Object({ path: Type.Optional(Type.String({ description: "Directory to list (default: current directory)" })), @@ -50,7 +50,7 @@ export interface LsToolOptions { function formatLsCall( args: { path?: string; limit?: number } | undefined, - theme: typeof import("../../modes/interactive/theme/theme.js").theme, + theme: typeof import("../../modes/interactive/theme/theme.ts").theme, ): string { const rawPath = str(args?.path); const path = rawPath !== null ? shortenPath(rawPath || ".") : null; @@ -69,7 +69,7 @@ function formatLsResult( details?: LsToolDetails; }, options: ToolRenderResultOptions, - theme: typeof import("../../modes/interactive/theme/theme.js").theme, + theme: typeof import("../../modes/interactive/theme/theme.ts").theme, showImages: boolean, ): string { const output = getTextOutput(result, showImages).trim(); diff --git a/packages/coding-agent/src/core/tools/output-accumulator.ts b/packages/coding-agent/src/core/tools/output-accumulator.ts index 30f4d6633..78fcfe9e0 100644 --- a/packages/coding-agent/src/core/tools/output-accumulator.ts +++ b/packages/coding-agent/src/core/tools/output-accumulator.ts @@ -2,7 +2,7 @@ import { randomBytes } from "node:crypto"; import { createWriteStream, type WriteStream } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, type TruncationResult, truncateTail } from "./truncate.js"; +import { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, type TruncationResult, truncateTail } from "./truncate.ts"; export interface OutputAccumulatorOptions { maxLines?: number; diff --git a/packages/coding-agent/src/core/tools/read.ts b/packages/coding-agent/src/core/tools/read.ts index 867d04dcf..cd3b41edc 100644 --- a/packages/coding-agent/src/core/tools/read.ts +++ b/packages/coding-agent/src/core/tools/read.ts @@ -5,17 +5,17 @@ import { Text } from "@earendil-works/pi-tui"; import { constants } from "fs"; import { access as fsAccess, readFile as fsReadFile } from "fs/promises"; import { type Static, Type } from "typebox"; -import { getReadmePath } from "../../config.js"; -import { keyHint, keyText } from "../../modes/interactive/components/keybinding-hints.js"; -import { getLanguageFromPath, highlightCode, type Theme } from "../../modes/interactive/theme/theme.js"; -import { formatDimensionNote, resizeImage } from "../../utils/image-resize.js"; -import { detectSupportedImageMimeTypeFromFile } from "../../utils/mime.js"; -import { formatPathRelativeToCwdOrAbsolute } from "../../utils/paths.js"; -import type { ToolDefinition, ToolRenderResultOptions } from "../extensions/types.js"; -import { resolveReadPath } from "./path-utils.js"; -import { getTextOutput, invalidArgText, replaceTabs, shortenPath, str } from "./render-utils.js"; -import { wrapToolDefinition } from "./tool-definition-wrapper.js"; -import { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize, type TruncationResult, truncateHead } from "./truncate.js"; +import { getReadmePath } from "../../config.ts"; +import { keyHint, keyText } from "../../modes/interactive/components/keybinding-hints.ts"; +import { getLanguageFromPath, highlightCode, type Theme } from "../../modes/interactive/theme/theme.ts"; +import { formatDimensionNote, resizeImage } from "../../utils/image-resize.ts"; +import { detectSupportedImageMimeTypeFromFile } from "../../utils/mime.ts"; +import { formatPathRelativeToCwdOrAbsolute } from "../../utils/paths.ts"; +import type { ToolDefinition, ToolRenderResultOptions } from "../extensions/types.ts"; +import { resolveReadPath } from "./path-utils.ts"; +import { getTextOutput, invalidArgText, replaceTabs, shortenPath, str } from "./render-utils.ts"; +import { wrapToolDefinition } from "./tool-definition-wrapper.ts"; +import { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize, type TruncationResult, truncateHead } from "./truncate.ts"; const readSchema = Type.Object({ path: Type.String({ description: "Path to the file to read (relative or absolute)" }), diff --git a/packages/coding-agent/src/core/tools/render-utils.ts b/packages/coding-agent/src/core/tools/render-utils.ts index 8c7a6fcda..1614ed647 100644 --- a/packages/coding-agent/src/core/tools/render-utils.ts +++ b/packages/coding-agent/src/core/tools/render-utils.ts @@ -1,8 +1,8 @@ import * as os from "node:os"; import type { ImageContent, TextContent } from "@earendil-works/pi-ai"; import { getCapabilities, getImageDimensions, imageFallback } from "@earendil-works/pi-tui"; -import { stripAnsi } from "../../utils/ansi.js"; -import { sanitizeBinaryOutput } from "../../utils/shell.js"; +import { stripAnsi } from "../../utils/ansi.ts"; +import { sanitizeBinaryOutput } from "../../utils/shell.ts"; export function shortenPath(path: unknown): string { if (typeof path !== "string") return ""; diff --git a/packages/coding-agent/src/core/tools/tool-definition-wrapper.ts b/packages/coding-agent/src/core/tools/tool-definition-wrapper.ts index 1aca3f309..c9da525ad 100644 --- a/packages/coding-agent/src/core/tools/tool-definition-wrapper.ts +++ b/packages/coding-agent/src/core/tools/tool-definition-wrapper.ts @@ -1,5 +1,5 @@ import type { AgentTool } from "@earendil-works/pi-agent-core"; -import type { ExtensionContext, ToolDefinition } from "../extensions/types.js"; +import type { ExtensionContext, ToolDefinition } from "../extensions/types.ts"; /** Wrap a ToolDefinition into an AgentTool for the core runtime. */ export function wrapToolDefinition( diff --git a/packages/coding-agent/src/core/tools/write.ts b/packages/coding-agent/src/core/tools/write.ts index e1aa40aa5..5c07848e7 100644 --- a/packages/coding-agent/src/core/tools/write.ts +++ b/packages/coding-agent/src/core/tools/write.ts @@ -3,13 +3,13 @@ import { Container, Text } from "@earendil-works/pi-tui"; import { mkdir as fsMkdir, writeFile as fsWriteFile } from "fs/promises"; import { dirname } from "path"; import { type Static, Type } from "typebox"; -import { keyHint } from "../../modes/interactive/components/keybinding-hints.js"; -import { getLanguageFromPath, highlightCode } from "../../modes/interactive/theme/theme.js"; -import type { ToolDefinition, ToolRenderResultOptions } from "../extensions/types.js"; -import { withFileMutationQueue } from "./file-mutation-queue.js"; -import { resolveToCwd } from "./path-utils.js"; -import { invalidArgText, normalizeDisplayText, replaceTabs, shortenPath, str } from "./render-utils.js"; -import { wrapToolDefinition } from "./tool-definition-wrapper.js"; +import { keyHint } from "../../modes/interactive/components/keybinding-hints.ts"; +import { getLanguageFromPath, highlightCode } from "../../modes/interactive/theme/theme.ts"; +import type { ToolDefinition, ToolRenderResultOptions } from "../extensions/types.ts"; +import { withFileMutationQueue } from "./file-mutation-queue.ts"; +import { resolveToCwd } from "./path-utils.ts"; +import { invalidArgText, normalizeDisplayText, replaceTabs, shortenPath, str } from "./render-utils.ts"; +import { wrapToolDefinition } from "./tool-definition-wrapper.ts"; const writeSchema = Type.Object({ path: Type.String({ description: "Path to the file to write (relative or absolute)" }), @@ -131,7 +131,7 @@ function trimTrailingEmptyLines(lines: string[]): string[] { function formatWriteCall( args: { path?: string; file_path?: string; content?: string } | undefined, options: ToolRenderResultOptions, - theme: typeof import("../../modes/interactive/theme/theme.js").theme, + theme: typeof import("../../modes/interactive/theme/theme.ts").theme, cache: WriteHighlightCache | undefined, ): string { const rawPath = str(args?.file_path ?? args?.path); @@ -163,7 +163,7 @@ function formatWriteCall( function formatWriteResult( result: { content: Array<{ type: string; text?: string; data?: string; mimeType?: string }>; isError?: boolean }, - theme: typeof import("../../modes/interactive/theme/theme.js").theme, + theme: typeof import("../../modes/interactive/theme/theme.ts").theme, ): string | undefined { if (!result.isError) { return undefined; diff --git a/packages/coding-agent/src/index.ts b/packages/coding-agent/src/index.ts index 8001509fe..4fe81824e 100644 --- a/packages/coding-agent/src/index.ts +++ b/packages/coding-agent/src/index.ts @@ -1,7 +1,7 @@ // Core session management // Config paths -export { getAgentDir, VERSION } from "./config.js"; +export { getAgentDir, VERSION } from "./config.ts"; export { AgentSession, type AgentSessionConfig, @@ -12,7 +12,7 @@ export { type PromptOptions, parseSkillBlock, type SessionStats, -} from "./core/agent-session.js"; +} from "./core/agent-session.ts"; // Auth and model registry export { type ApiKeyCredential, @@ -23,7 +23,7 @@ export { FileAuthStorageBackend, InMemoryAuthStorageBackend, type OAuthCredential, -} from "./core/auth-storage.js"; +} from "./core/auth-storage.ts"; // Compaction export { type BranchPreparation, @@ -46,8 +46,8 @@ export { prepareBranchEntries, serializeConversation, shouldCompact, -} from "./core/compaction/index.js"; -export { createEventBus, type EventBus, type EventBusController } from "./core/event-bus.js"; +} from "./core/compaction/index.ts"; +export { createEventBus, type EventBus, type EventBusController } from "./core/event-bus.ts"; // Extension system export type { AgentEndEvent, @@ -128,7 +128,7 @@ export type { WidgetPlacement, WorkingIndicatorOptions, WriteToolCallEvent, -} from "./core/extensions/index.js"; +} from "./core/extensions/index.ts"; export { createExtensionRuntime, defineTool, @@ -144,11 +144,11 @@ export { isWriteToolResult, wrapRegisteredTool, wrapRegisteredTools, -} from "./core/extensions/index.js"; +} from "./core/extensions/index.ts"; // Footer data provider (git branch + extension statuses - data not otherwise available to extensions) -export type { ReadonlyFooterDataProvider } from "./core/footer-data-provider.js"; -export { convertToLlm } from "./core/messages.js"; -export { ModelRegistry } from "./core/model-registry.js"; +export type { ReadonlyFooterDataProvider } from "./core/footer-data-provider.ts"; +export { convertToLlm } from "./core/messages.ts"; +export { ModelRegistry } from "./core/model-registry.ts"; export type { PackageManager, PathMetadata, @@ -156,10 +156,10 @@ export type { ProgressEvent, ResolvedPaths, ResolvedResource, -} from "./core/package-manager.js"; -export { DefaultPackageManager } from "./core/package-manager.js"; -export type { ResourceCollision, ResourceDiagnostic, ResourceLoader } from "./core/resource-loader.js"; -export { DefaultResourceLoader, loadProjectContextFiles } from "./core/resource-loader.js"; +} from "./core/package-manager.ts"; +export { DefaultPackageManager } from "./core/package-manager.ts"; +export type { ResourceCollision, ResourceDiagnostic, ResourceLoader } from "./core/resource-loader.ts"; +export { DefaultResourceLoader, loadProjectContextFiles } from "./core/resource-loader.ts"; // SDK for programmatic usage export { AgentSessionRuntime, @@ -187,7 +187,7 @@ export { createReadTool, createWriteTool, type PromptTemplate, -} from "./core/sdk.js"; +} from "./core/sdk.ts"; export { type BranchSummaryEntry, buildSessionContext, @@ -210,14 +210,14 @@ export { SessionManager, type SessionMessageEntry, type ThinkingLevelChangeEntry, -} from "./core/session-manager.js"; +} from "./core/session-manager.ts"; export { type CompactionSettings, type ImageSettings, type PackageSource, type RetrySettings, SettingsManager, -} from "./core/settings-manager.js"; +} from "./core/settings-manager.ts"; // Skills export { formatSkillsForPrompt, @@ -227,8 +227,8 @@ export { loadSkillsFromDir, type Skill, type SkillFrontmatter, -} from "./core/skills.js"; -export { createSyntheticSourceInfo } from "./core/source-info.js"; +} from "./core/skills.ts"; +export { createSyntheticSourceInfo } from "./core/source-info.ts"; // Tools export { type BashOperations, @@ -278,9 +278,9 @@ export { type WriteToolInput, type WriteToolOptions, withFileMutationQueue, -} from "./core/tools/index.js"; +} from "./core/tools/index.ts"; // Main entry point -export { type MainOptions, main } from "./main.js"; +export { type MainOptions, main } from "./main.ts"; // Run modes for programmatic SDK usage export { InteractiveMode, @@ -295,7 +295,7 @@ export { type RpcSessionState, runPrintMode, runRpcMode, -} from "./modes/index.js"; +} from "./modes/index.ts"; // UI components for extensions export { ArminComponent, @@ -334,7 +334,7 @@ export { UserMessageComponent, UserMessageSelectorComponent, type VisualTruncateResult, -} from "./modes/interactive/components/index.js"; +} from "./modes/interactive/components/index.ts"; // Theme utilities for custom tools and extensions export { getLanguageFromPath, @@ -345,9 +345,9 @@ export { initTheme, Theme, type ThemeColor, -} from "./modes/interactive/theme/theme.js"; +} from "./modes/interactive/theme/theme.ts"; // Clipboard utilities -export { copyToClipboard } from "./utils/clipboard.js"; -export { parseFrontmatter, stripFrontmatter } from "./utils/frontmatter.js"; +export { copyToClipboard } from "./utils/clipboard.ts"; +export { parseFrontmatter, stripFrontmatter } from "./utils/frontmatter.ts"; // Shell utilities -export { getShellConfig } from "./utils/shell.js"; +export { getShellConfig } from "./utils/shell.ts"; diff --git a/packages/coding-agent/src/main.ts b/packages/coding-agent/src/main.ts index 9f1af6972..141a34e75 100644 --- a/packages/coding-agent/src/main.ts +++ b/packages/coding-agent/src/main.ts @@ -10,43 +10,43 @@ import { createInterface } from "node:readline"; import { type ImageContent, modelsAreEqual } from "@earendil-works/pi-ai"; import { ProcessTerminal, setKeybindings, TUI } from "@earendil-works/pi-tui"; import chalk from "chalk"; -import { type Args, type Mode, parseArgs, printHelp } from "./cli/args.js"; -import { processFileArguments } from "./cli/file-processor.js"; -import { buildInitialMessage } from "./cli/initial-message.js"; -import { listModels } from "./cli/list-models.js"; -import { selectSession } from "./cli/session-picker.js"; -import { ENV_SESSION_DIR, expandTildePath, getAgentDir, getPackageDir, VERSION } from "./config.js"; -import { type CreateAgentSessionRuntimeFactory, createAgentSessionRuntime } from "./core/agent-session-runtime.js"; +import { type Args, type Mode, parseArgs, printHelp } from "./cli/args.ts"; +import { processFileArguments } from "./cli/file-processor.ts"; +import { buildInitialMessage } from "./cli/initial-message.ts"; +import { listModels } from "./cli/list-models.ts"; +import { selectSession } from "./cli/session-picker.ts"; +import { ENV_SESSION_DIR, expandTildePath, getAgentDir, getPackageDir, VERSION } from "./config.ts"; +import { type CreateAgentSessionRuntimeFactory, createAgentSessionRuntime } from "./core/agent-session-runtime.ts"; import { type AgentSessionRuntimeDiagnostic, createAgentSessionFromServices, createAgentSessionServices, -} from "./core/agent-session-services.js"; -import { formatNoModelsAvailableMessage } from "./core/auth-guidance.js"; -import { AuthStorage } from "./core/auth-storage.js"; -import { exportFromFile } from "./core/export-html/index.js"; -import type { ExtensionFactory } from "./core/extensions/types.js"; -import { KeybindingsManager } from "./core/keybindings.js"; -import type { ModelRegistry } from "./core/model-registry.js"; -import { resolveCliModel, resolveModelScope, type ScopedModel } from "./core/model-resolver.js"; -import { restoreStdout, takeOverStdout } from "./core/output-guard.js"; -import type { CreateAgentSessionOptions } from "./core/sdk.js"; +} from "./core/agent-session-services.ts"; +import { formatNoModelsAvailableMessage } from "./core/auth-guidance.ts"; +import { AuthStorage } from "./core/auth-storage.ts"; +import { exportFromFile } from "./core/export-html/index.ts"; +import type { ExtensionFactory } from "./core/extensions/types.ts"; +import { KeybindingsManager } from "./core/keybindings.ts"; +import type { ModelRegistry } from "./core/model-registry.ts"; +import { resolveCliModel, resolveModelScope, type ScopedModel } from "./core/model-resolver.ts"; +import { restoreStdout, takeOverStdout } from "./core/output-guard.ts"; +import type { CreateAgentSessionOptions } from "./core/sdk.ts"; import { formatMissingSessionCwdPrompt, getMissingSessionCwdIssue, MissingSessionCwdError, type SessionCwdIssue, -} from "./core/session-cwd.js"; -import { SessionManager } from "./core/session-manager.js"; -import { SettingsManager } from "./core/settings-manager.js"; -import { printTimings, resetTimings, time } from "./core/timings.js"; -import { runMigrations, showDeprecationWarnings } from "./migrations.js"; -import { InteractiveMode, runPrintMode, runRpcMode } from "./modes/index.js"; -import { ExtensionSelectorComponent } from "./modes/interactive/components/extension-selector.js"; -import { initTheme, stopThemeWatcher } from "./modes/interactive/theme/theme.js"; -import { handleConfigCommand, handlePackageCommand } from "./package-manager-cli.js"; -import { isLocalPath } from "./utils/paths.js"; -import { cleanupWindowsSelfUpdateQuarantine } from "./utils/windows-self-update.js"; +} from "./core/session-cwd.ts"; +import { SessionManager } from "./core/session-manager.ts"; +import { SettingsManager } from "./core/settings-manager.ts"; +import { printTimings, resetTimings, time } from "./core/timings.ts"; +import { runMigrations, showDeprecationWarnings } from "./migrations.ts"; +import { InteractiveMode, runPrintMode, runRpcMode } from "./modes/index.ts"; +import { ExtensionSelectorComponent } from "./modes/interactive/components/extension-selector.ts"; +import { initTheme, stopThemeWatcher } from "./modes/interactive/theme/theme.ts"; +import { handleConfigCommand, handlePackageCommand } from "./package-manager-cli.ts"; +import { isLocalPath } from "./utils/paths.ts"; +import { cleanupWindowsSelfUpdateQuarantine } from "./utils/windows-self-update.ts"; /** * Read all content from piped stdin. diff --git a/packages/coding-agent/src/migrations.ts b/packages/coding-agent/src/migrations.ts index 42851d083..39aeea043 100644 --- a/packages/coding-agent/src/migrations.ts +++ b/packages/coding-agent/src/migrations.ts @@ -5,8 +5,8 @@ import chalk from "chalk"; import { existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "fs"; import { dirname, join } from "path"; -import { CONFIG_DIR_NAME, getAgentDir, getBinDir } from "./config.js"; -import { migrateKeybindingsConfig } from "./core/keybindings.js"; +import { CONFIG_DIR_NAME, getAgentDir, getBinDir } from "./config.ts"; +import { migrateKeybindingsConfig } from "./core/keybindings.ts"; const MIGRATION_GUIDE_URL = "https://github.com/earendil-works/pi-mono/blob/main/packages/coding-agent/CHANGELOG.md#extensions-migration"; diff --git a/packages/coding-agent/src/modes/index.ts b/packages/coding-agent/src/modes/index.ts index 205e9f54c..02cab7823 100644 --- a/packages/coding-agent/src/modes/index.ts +++ b/packages/coding-agent/src/modes/index.ts @@ -2,8 +2,8 @@ * Run modes for the coding agent. */ -export { InteractiveMode, type InteractiveModeOptions } from "./interactive/interactive-mode.js"; -export { type PrintModeOptions, runPrintMode } from "./print-mode.js"; -export { type ModelInfo, RpcClient, type RpcClientOptions, type RpcEventListener } from "./rpc/rpc-client.js"; -export { runRpcMode } from "./rpc/rpc-mode.js"; -export type { RpcCommand, RpcResponse, RpcSessionState } from "./rpc/rpc-types.js"; +export { InteractiveMode, type InteractiveModeOptions } from "./interactive/interactive-mode.ts"; +export { type PrintModeOptions, runPrintMode } from "./print-mode.ts"; +export { type ModelInfo, RpcClient, type RpcClientOptions, type RpcEventListener } from "./rpc/rpc-client.ts"; +export { runRpcMode } from "./rpc/rpc-mode.ts"; +export type { RpcCommand, RpcResponse, RpcSessionState } from "./rpc/rpc-types.ts"; diff --git a/packages/coding-agent/src/modes/interactive/components/armin.ts b/packages/coding-agent/src/modes/interactive/components/armin.ts index 794e5562a..209ca167f 100644 --- a/packages/coding-agent/src/modes/interactive/components/armin.ts +++ b/packages/coding-agent/src/modes/interactive/components/armin.ts @@ -3,7 +3,7 @@ */ import type { Component, TUI } from "@earendil-works/pi-tui"; -import { theme } from "../theme/theme.js"; +import { theme } from "../theme/theme.ts"; // XBM image: 31x36 pixels, LSB first, 1=background, 0=foreground const WIDTH = 31; diff --git a/packages/coding-agent/src/modes/interactive/components/assistant-message.ts b/packages/coding-agent/src/modes/interactive/components/assistant-message.ts index 7eb7e3061..32276467a 100644 --- a/packages/coding-agent/src/modes/interactive/components/assistant-message.ts +++ b/packages/coding-agent/src/modes/interactive/components/assistant-message.ts @@ -1,6 +1,6 @@ import type { AssistantMessage } from "@earendil-works/pi-ai"; import { Container, Markdown, type MarkdownTheme, Spacer, Text } from "@earendil-works/pi-tui"; -import { getMarkdownTheme, theme } from "../theme/theme.js"; +import { getMarkdownTheme, theme } from "../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/src/modes/interactive/components/bash-execution.ts b/packages/coding-agent/src/modes/interactive/components/bash-execution.ts index 240cd12d1..e53f5a5e0 100644 --- a/packages/coding-agent/src/modes/interactive/components/bash-execution.ts +++ b/packages/coding-agent/src/modes/interactive/components/bash-execution.ts @@ -8,12 +8,12 @@ import { DEFAULT_MAX_LINES, type TruncationResult, truncateTail, -} from "../../../core/tools/truncate.js"; -import { stripAnsi } from "../../../utils/ansi.js"; -import { theme } from "../theme/theme.js"; -import { DynamicBorder } from "./dynamic-border.js"; -import { keyHint, keyText } from "./keybinding-hints.js"; -import { truncateToVisualLines } from "./visual-truncate.js"; +} from "../../../core/tools/truncate.ts"; +import { stripAnsi } from "../../../utils/ansi.ts"; +import { theme } from "../theme/theme.ts"; +import { DynamicBorder } from "./dynamic-border.ts"; +import { keyHint, keyText } from "./keybinding-hints.ts"; +import { truncateToVisualLines } from "./visual-truncate.ts"; // Preview line limit when not expanded (matches tool execution behavior) const PREVIEW_LINES = 20; diff --git a/packages/coding-agent/src/modes/interactive/components/bordered-loader.ts b/packages/coding-agent/src/modes/interactive/components/bordered-loader.ts index e9b13919f..4d692ffc8 100644 --- a/packages/coding-agent/src/modes/interactive/components/bordered-loader.ts +++ b/packages/coding-agent/src/modes/interactive/components/bordered-loader.ts @@ -1,7 +1,7 @@ import { CancellableLoader, Container, Loader, Spacer, Text, type TUI } from "@earendil-works/pi-tui"; -import type { Theme } from "../theme/theme.js"; -import { DynamicBorder } from "./dynamic-border.js"; -import { keyHint } from "./keybinding-hints.js"; +import type { Theme } from "../theme/theme.ts"; +import { DynamicBorder } from "./dynamic-border.ts"; +import { keyHint } from "./keybinding-hints.ts"; /** Loader wrapped with borders for extension UI */ export class BorderedLoader extends Container { diff --git a/packages/coding-agent/src/modes/interactive/components/branch-summary-message.ts b/packages/coding-agent/src/modes/interactive/components/branch-summary-message.ts index b140f4968..af85115f0 100644 --- a/packages/coding-agent/src/modes/interactive/components/branch-summary-message.ts +++ b/packages/coding-agent/src/modes/interactive/components/branch-summary-message.ts @@ -1,7 +1,7 @@ import { Box, Markdown, type MarkdownTheme, Spacer, Text } from "@earendil-works/pi-tui"; -import type { BranchSummaryMessage } from "../../../core/messages.js"; -import { getMarkdownTheme, theme } from "../theme/theme.js"; -import { keyText } from "./keybinding-hints.js"; +import type { BranchSummaryMessage } from "../../../core/messages.ts"; +import { getMarkdownTheme, theme } from "../theme/theme.ts"; +import { keyText } from "./keybinding-hints.ts"; /** * Component that renders a branch summary message with collapsed/expanded state. diff --git a/packages/coding-agent/src/modes/interactive/components/compaction-summary-message.ts b/packages/coding-agent/src/modes/interactive/components/compaction-summary-message.ts index e4b78f883..cad613d76 100644 --- a/packages/coding-agent/src/modes/interactive/components/compaction-summary-message.ts +++ b/packages/coding-agent/src/modes/interactive/components/compaction-summary-message.ts @@ -1,7 +1,7 @@ import { Box, Markdown, type MarkdownTheme, Spacer, Text } from "@earendil-works/pi-tui"; -import type { CompactionSummaryMessage } from "../../../core/messages.js"; -import { getMarkdownTheme, theme } from "../theme/theme.js"; -import { keyText } from "./keybinding-hints.js"; +import type { CompactionSummaryMessage } from "../../../core/messages.ts"; +import { getMarkdownTheme, theme } from "../theme/theme.ts"; +import { keyText } from "./keybinding-hints.ts"; /** * Component that renders a compaction message with collapsed/expanded state. diff --git a/packages/coding-agent/src/modes/interactive/components/config-selector.ts b/packages/coding-agent/src/modes/interactive/components/config-selector.ts index 216283071..d4f167268 100644 --- a/packages/coding-agent/src/modes/interactive/components/config-selector.ts +++ b/packages/coding-agent/src/modes/interactive/components/config-selector.ts @@ -15,12 +15,12 @@ import { truncateToWidth, visibleWidth, } from "@earendil-works/pi-tui"; -import { CONFIG_DIR_NAME } from "../../../config.js"; -import type { PathMetadata, ResolvedPaths, ResolvedResource } from "../../../core/package-manager.js"; -import type { PackageSource, SettingsManager } from "../../../core/settings-manager.js"; -import { theme } from "../theme/theme.js"; -import { DynamicBorder } from "./dynamic-border.js"; -import { rawKeyHint } from "./keybinding-hints.js"; +import { CONFIG_DIR_NAME } from "../../../config.ts"; +import type { PathMetadata, ResolvedPaths, ResolvedResource } from "../../../core/package-manager.ts"; +import type { PackageSource, SettingsManager } from "../../../core/settings-manager.ts"; +import { theme } from "../theme/theme.ts"; +import { DynamicBorder } from "./dynamic-border.ts"; +import { rawKeyHint } from "./keybinding-hints.ts"; type ResourceType = "extensions" | "skills" | "prompts" | "themes"; diff --git a/packages/coding-agent/src/modes/interactive/components/custom-editor.ts b/packages/coding-agent/src/modes/interactive/components/custom-editor.ts index 18f7d27af..a9d256222 100644 --- a/packages/coding-agent/src/modes/interactive/components/custom-editor.ts +++ b/packages/coding-agent/src/modes/interactive/components/custom-editor.ts @@ -1,5 +1,5 @@ import { Editor, type EditorOptions, type EditorTheme, type TUI } from "@earendil-works/pi-tui"; -import type { AppKeybinding, KeybindingsManager } from "../../../core/keybindings.js"; +import type { AppKeybinding, KeybindingsManager } from "../../../core/keybindings.ts"; /** * Custom editor that handles app-level keybindings for coding-agent. diff --git a/packages/coding-agent/src/modes/interactive/components/custom-message.ts b/packages/coding-agent/src/modes/interactive/components/custom-message.ts index 5cf6bbe20..a8fffc6f3 100644 --- a/packages/coding-agent/src/modes/interactive/components/custom-message.ts +++ b/packages/coding-agent/src/modes/interactive/components/custom-message.ts @@ -1,9 +1,9 @@ import type { TextContent } from "@earendil-works/pi-ai"; import type { Component } from "@earendil-works/pi-tui"; import { Box, Container, Markdown, type MarkdownTheme, Spacer, Text } from "@earendil-works/pi-tui"; -import type { MessageRenderer } from "../../../core/extensions/types.js"; -import type { CustomMessage } from "../../../core/messages.js"; -import { getMarkdownTheme, theme } from "../theme/theme.js"; +import type { MessageRenderer } from "../../../core/extensions/types.ts"; +import type { CustomMessage } from "../../../core/messages.ts"; +import { getMarkdownTheme, theme } from "../theme/theme.ts"; /** * Component that renders a custom message entry from extensions. diff --git a/packages/coding-agent/src/modes/interactive/components/daxnuts.ts b/packages/coding-agent/src/modes/interactive/components/daxnuts.ts index bfc4dbaa2..c855f1468 100644 --- a/packages/coding-agent/src/modes/interactive/components/daxnuts.ts +++ b/packages/coding-agent/src/modes/interactive/components/daxnuts.ts @@ -5,7 +5,7 @@ */ import type { Component, TUI } from "@earendil-works/pi-tui"; -import { theme } from "../theme/theme.js"; +import { theme } from "../theme/theme.ts"; // 32x32 RGB image of dax, hex encoded (3 bytes per pixel) const DAX_HEX = diff --git a/packages/coding-agent/src/modes/interactive/components/diff.ts b/packages/coding-agent/src/modes/interactive/components/diff.ts index d575d63e3..54e88273d 100644 --- a/packages/coding-agent/src/modes/interactive/components/diff.ts +++ b/packages/coding-agent/src/modes/interactive/components/diff.ts @@ -1,5 +1,5 @@ import * as Diff from "diff"; -import { theme } from "../theme/theme.js"; +import { theme } from "../theme/theme.ts"; /** * Parse diff line to extract prefix, line number, and content. diff --git a/packages/coding-agent/src/modes/interactive/components/dynamic-border.ts b/packages/coding-agent/src/modes/interactive/components/dynamic-border.ts index d4fa67c40..77342b25e 100644 --- a/packages/coding-agent/src/modes/interactive/components/dynamic-border.ts +++ b/packages/coding-agent/src/modes/interactive/components/dynamic-border.ts @@ -1,5 +1,5 @@ import type { Component } from "@earendil-works/pi-tui"; -import { theme } from "../theme/theme.js"; +import { theme } from "../theme/theme.ts"; /** * Dynamic border component that adjusts to viewport width. diff --git a/packages/coding-agent/src/modes/interactive/components/earendil-announcement.ts b/packages/coding-agent/src/modes/interactive/components/earendil-announcement.ts index 59ec78f79..f2726d989 100644 --- a/packages/coding-agent/src/modes/interactive/components/earendil-announcement.ts +++ b/packages/coding-agent/src/modes/interactive/components/earendil-announcement.ts @@ -1,8 +1,8 @@ import * as fs from "node:fs"; import { Container, Image, Spacer, Text } from "@earendil-works/pi-tui"; -import { getBundledInteractiveAssetPath } from "../../../config.js"; -import { theme } from "../theme/theme.js"; -import { DynamicBorder } from "./dynamic-border.js"; +import { getBundledInteractiveAssetPath } from "../../../config.ts"; +import { theme } from "../theme/theme.ts"; +import { DynamicBorder } from "./dynamic-border.ts"; const BLOG_URL = "https://mariozechner.at/posts/2026-04-08-ive-sold-out/"; const IMAGE_FILENAME = "clankolas.png"; diff --git a/packages/coding-agent/src/modes/interactive/components/extension-editor.ts b/packages/coding-agent/src/modes/interactive/components/extension-editor.ts index b33ad9f59..e000fff4d 100644 --- a/packages/coding-agent/src/modes/interactive/components/extension-editor.ts +++ b/packages/coding-agent/src/modes/interactive/components/extension-editor.ts @@ -17,10 +17,10 @@ import { Text, type TUI, } from "@earendil-works/pi-tui"; -import type { KeybindingsManager } from "../../../core/keybindings.js"; -import { getEditorTheme, theme } from "../theme/theme.js"; -import { DynamicBorder } from "./dynamic-border.js"; -import { keyHint } from "./keybinding-hints.js"; +import type { KeybindingsManager } from "../../../core/keybindings.ts"; +import { getEditorTheme, theme } from "../theme/theme.ts"; +import { DynamicBorder } from "./dynamic-border.ts"; +import { keyHint } from "./keybinding-hints.ts"; export class ExtensionEditorComponent extends Container implements Focusable { private editor: Editor; diff --git a/packages/coding-agent/src/modes/interactive/components/extension-input.ts b/packages/coding-agent/src/modes/interactive/components/extension-input.ts index 39f44f0fc..581ef4f5c 100644 --- a/packages/coding-agent/src/modes/interactive/components/extension-input.ts +++ b/packages/coding-agent/src/modes/interactive/components/extension-input.ts @@ -3,10 +3,10 @@ */ import { Container, type Focusable, getKeybindings, Input, Spacer, Text, type TUI } from "@earendil-works/pi-tui"; -import { theme } from "../theme/theme.js"; -import { CountdownTimer } from "./countdown-timer.js"; -import { DynamicBorder } from "./dynamic-border.js"; -import { keyHint } from "./keybinding-hints.js"; +import { theme } from "../theme/theme.ts"; +import { CountdownTimer } from "./countdown-timer.ts"; +import { DynamicBorder } from "./dynamic-border.ts"; +import { keyHint } from "./keybinding-hints.ts"; export interface ExtensionInputOptions { tui?: TUI; diff --git a/packages/coding-agent/src/modes/interactive/components/extension-selector.ts b/packages/coding-agent/src/modes/interactive/components/extension-selector.ts index 8b59c2f21..d1dbdb4d0 100644 --- a/packages/coding-agent/src/modes/interactive/components/extension-selector.ts +++ b/packages/coding-agent/src/modes/interactive/components/extension-selector.ts @@ -4,10 +4,10 @@ */ import { Container, getKeybindings, Spacer, Text, type TUI } from "@earendil-works/pi-tui"; -import { theme } from "../theme/theme.js"; -import { CountdownTimer } from "./countdown-timer.js"; -import { DynamicBorder } from "./dynamic-border.js"; -import { keyHint, rawKeyHint } from "./keybinding-hints.js"; +import { theme } from "../theme/theme.ts"; +import { CountdownTimer } from "./countdown-timer.ts"; +import { DynamicBorder } from "./dynamic-border.ts"; +import { keyHint, rawKeyHint } from "./keybinding-hints.ts"; export interface ExtensionSelectorOptions { tui?: TUI; diff --git a/packages/coding-agent/src/modes/interactive/components/footer.ts b/packages/coding-agent/src/modes/interactive/components/footer.ts index 7e8109a51..283c1c0ad 100644 --- a/packages/coding-agent/src/modes/interactive/components/footer.ts +++ b/packages/coding-agent/src/modes/interactive/components/footer.ts @@ -1,7 +1,7 @@ import { type Component, truncateToWidth, visibleWidth } from "@earendil-works/pi-tui"; -import type { AgentSession } from "../../../core/agent-session.js"; -import type { ReadonlyFooterDataProvider } from "../../../core/footer-data-provider.js"; -import { theme } from "../theme/theme.js"; +import type { AgentSession } from "../../../core/agent-session.ts"; +import type { ReadonlyFooterDataProvider } from "../../../core/footer-data-provider.ts"; +import { theme } from "../theme/theme.ts"; /** * Sanitize text for display in a single-line status. diff --git a/packages/coding-agent/src/modes/interactive/components/index.ts b/packages/coding-agent/src/modes/interactive/components/index.ts index 242d96673..d9b5d773e 100644 --- a/packages/coding-agent/src/modes/interactive/components/index.ts +++ b/packages/coding-agent/src/modes/interactive/components/index.ts @@ -1,32 +1,32 @@ // UI Components for extensions -export { ArminComponent } from "./armin.js"; -export { AssistantMessageComponent } from "./assistant-message.js"; -export { BashExecutionComponent } from "./bash-execution.js"; -export { BorderedLoader } from "./bordered-loader.js"; -export { BranchSummaryMessageComponent } from "./branch-summary-message.js"; -export { CompactionSummaryMessageComponent } from "./compaction-summary-message.js"; -export { CustomEditor } from "./custom-editor.js"; -export { CustomMessageComponent } from "./custom-message.js"; -export { DaxnutsComponent } from "./daxnuts.js"; -export { type RenderDiffOptions, renderDiff } from "./diff.js"; -export { DynamicBorder } from "./dynamic-border.js"; -export { ExtensionEditorComponent } from "./extension-editor.js"; -export { ExtensionInputComponent } from "./extension-input.js"; -export { ExtensionSelectorComponent } from "./extension-selector.js"; -export { FooterComponent } from "./footer.js"; -export { keyHint, keyText, rawKeyHint } from "./keybinding-hints.js"; -export { LoginDialogComponent } from "./login-dialog.js"; -export { ModelSelectorComponent } from "./model-selector.js"; -export { OAuthSelectorComponent } from "./oauth-selector.js"; -export { type ModelsCallbacks, type ModelsConfig, ScopedModelsSelectorComponent } from "./scoped-models-selector.js"; -export { SessionSelectorComponent } from "./session-selector.js"; -export { type SettingsCallbacks, type SettingsConfig, SettingsSelectorComponent } from "./settings-selector.js"; -export { ShowImagesSelectorComponent } from "./show-images-selector.js"; -export { SkillInvocationMessageComponent } from "./skill-invocation-message.js"; -export { ThemeSelectorComponent } from "./theme-selector.js"; -export { ThinkingSelectorComponent } from "./thinking-selector.js"; -export { ToolExecutionComponent, type ToolExecutionOptions } from "./tool-execution.js"; -export { TreeSelectorComponent } from "./tree-selector.js"; -export { UserMessageComponent } from "./user-message.js"; -export { UserMessageSelectorComponent } from "./user-message-selector.js"; -export { truncateToVisualLines, type VisualTruncateResult } from "./visual-truncate.js"; +export { ArminComponent } from "./armin.ts"; +export { AssistantMessageComponent } from "./assistant-message.ts"; +export { BashExecutionComponent } from "./bash-execution.ts"; +export { BorderedLoader } from "./bordered-loader.ts"; +export { BranchSummaryMessageComponent } from "./branch-summary-message.ts"; +export { CompactionSummaryMessageComponent } from "./compaction-summary-message.ts"; +export { CustomEditor } from "./custom-editor.ts"; +export { CustomMessageComponent } from "./custom-message.ts"; +export { DaxnutsComponent } from "./daxnuts.ts"; +export { type RenderDiffOptions, renderDiff } from "./diff.ts"; +export { DynamicBorder } from "./dynamic-border.ts"; +export { ExtensionEditorComponent } from "./extension-editor.ts"; +export { ExtensionInputComponent } from "./extension-input.ts"; +export { ExtensionSelectorComponent } from "./extension-selector.ts"; +export { FooterComponent } from "./footer.ts"; +export { keyHint, keyText, rawKeyHint } from "./keybinding-hints.ts"; +export { LoginDialogComponent } from "./login-dialog.ts"; +export { ModelSelectorComponent } from "./model-selector.ts"; +export { OAuthSelectorComponent } from "./oauth-selector.ts"; +export { type ModelsCallbacks, type ModelsConfig, ScopedModelsSelectorComponent } from "./scoped-models-selector.ts"; +export { SessionSelectorComponent } from "./session-selector.ts"; +export { type SettingsCallbacks, type SettingsConfig, SettingsSelectorComponent } from "./settings-selector.ts"; +export { ShowImagesSelectorComponent } from "./show-images-selector.ts"; +export { SkillInvocationMessageComponent } from "./skill-invocation-message.ts"; +export { ThemeSelectorComponent } from "./theme-selector.ts"; +export { ThinkingSelectorComponent } from "./thinking-selector.ts"; +export { ToolExecutionComponent, type ToolExecutionOptions } from "./tool-execution.ts"; +export { TreeSelectorComponent } from "./tree-selector.ts"; +export { UserMessageComponent } from "./user-message.ts"; +export { UserMessageSelectorComponent } from "./user-message-selector.ts"; +export { truncateToVisualLines, type VisualTruncateResult } from "./visual-truncate.ts"; diff --git a/packages/coding-agent/src/modes/interactive/components/keybinding-hints.ts b/packages/coding-agent/src/modes/interactive/components/keybinding-hints.ts index bb018c185..22601abd9 100644 --- a/packages/coding-agent/src/modes/interactive/components/keybinding-hints.ts +++ b/packages/coding-agent/src/modes/interactive/components/keybinding-hints.ts @@ -3,7 +3,7 @@ */ import { getKeybindings, type Keybinding, type KeyId } from "@earendil-works/pi-tui"; -import { theme } from "../theme/theme.js"; +import { theme } from "../theme/theme.ts"; export interface KeyTextFormatOptions { capitalize?: boolean; diff --git a/packages/coding-agent/src/modes/interactive/components/login-dialog.ts b/packages/coding-agent/src/modes/interactive/components/login-dialog.ts index a9a6f2b0d..80560f142 100644 --- a/packages/coding-agent/src/modes/interactive/components/login-dialog.ts +++ b/packages/coding-agent/src/modes/interactive/components/login-dialog.ts @@ -1,9 +1,9 @@ import { getOAuthProviders } from "@earendil-works/pi-ai/oauth"; import { Container, type Focusable, getKeybindings, Input, Spacer, Text, type TUI } from "@earendil-works/pi-tui"; import { exec } from "child_process"; -import { theme } from "../theme/theme.js"; -import { DynamicBorder } from "./dynamic-border.js"; -import { keyHint } from "./keybinding-hints.js"; +import { theme } from "../theme/theme.ts"; +import { DynamicBorder } from "./dynamic-border.ts"; +import { keyHint } from "./keybinding-hints.ts"; /** * Login dialog component - replaces editor during OAuth login flow diff --git a/packages/coding-agent/src/modes/interactive/components/model-selector.ts b/packages/coding-agent/src/modes/interactive/components/model-selector.ts index 613ca9e1c..b9f5ec776 100644 --- a/packages/coding-agent/src/modes/interactive/components/model-selector.ts +++ b/packages/coding-agent/src/modes/interactive/components/model-selector.ts @@ -9,11 +9,11 @@ import { Text, type TUI, } from "@earendil-works/pi-tui"; -import type { ModelRegistry } from "../../../core/model-registry.js"; -import type { SettingsManager } from "../../../core/settings-manager.js"; -import { theme } from "../theme/theme.js"; -import { DynamicBorder } from "./dynamic-border.js"; -import { keyHint } from "./keybinding-hints.js"; +import type { ModelRegistry } from "../../../core/model-registry.ts"; +import type { SettingsManager } from "../../../core/settings-manager.ts"; +import { theme } from "../theme/theme.ts"; +import { DynamicBorder } from "./dynamic-border.ts"; +import { keyHint } from "./keybinding-hints.ts"; interface ModelItem { provider: string; diff --git a/packages/coding-agent/src/modes/interactive/components/oauth-selector.ts b/packages/coding-agent/src/modes/interactive/components/oauth-selector.ts index 93ce0e93d..5910e7009 100644 --- a/packages/coding-agent/src/modes/interactive/components/oauth-selector.ts +++ b/packages/coding-agent/src/modes/interactive/components/oauth-selector.ts @@ -7,9 +7,9 @@ import { Spacer, TruncatedText, } from "@earendil-works/pi-tui"; -import type { AuthStatus, AuthStorage } from "../../../core/auth-storage.js"; -import { theme } from "../theme/theme.js"; -import { DynamicBorder } from "./dynamic-border.js"; +import type { AuthStatus, AuthStorage } from "../../../core/auth-storage.ts"; +import { theme } from "../theme/theme.ts"; +import { DynamicBorder } from "./dynamic-border.ts"; export type AuthSelectorProvider = { id: string; diff --git a/packages/coding-agent/src/modes/interactive/components/scoped-models-selector.ts b/packages/coding-agent/src/modes/interactive/components/scoped-models-selector.ts index c5a82d9ad..06ce91691 100644 --- a/packages/coding-agent/src/modes/interactive/components/scoped-models-selector.ts +++ b/packages/coding-agent/src/modes/interactive/components/scoped-models-selector.ts @@ -10,9 +10,9 @@ import { Spacer, Text, } from "@earendil-works/pi-tui"; -import { theme } from "../theme/theme.js"; -import { DynamicBorder } from "./dynamic-border.js"; -import { keyText } from "./keybinding-hints.js"; +import { theme } from "../theme/theme.ts"; +import { DynamicBorder } from "./dynamic-border.ts"; +import { keyText } from "./keybinding-hints.ts"; // EnabledIds: null = all enabled (no filter), string[] = explicit ordered list type EnabledIds = string[] | null; diff --git a/packages/coding-agent/src/modes/interactive/components/session-selector-search.ts b/packages/coding-agent/src/modes/interactive/components/session-selector-search.ts index e82a9c05e..9b5bf2327 100644 --- a/packages/coding-agent/src/modes/interactive/components/session-selector-search.ts +++ b/packages/coding-agent/src/modes/interactive/components/session-selector-search.ts @@ -1,5 +1,5 @@ import { fuzzyMatch } from "@earendil-works/pi-tui"; -import type { SessionInfo } from "../../../core/session-manager.js"; +import type { SessionInfo } from "../../../core/session-manager.ts"; export type SortMode = "threaded" | "recent" | "relevance"; diff --git a/packages/coding-agent/src/modes/interactive/components/session-selector.ts b/packages/coding-agent/src/modes/interactive/components/session-selector.ts index e7c0b072d..74141e5ef 100644 --- a/packages/coding-agent/src/modes/interactive/components/session-selector.ts +++ b/packages/coding-agent/src/modes/interactive/components/session-selector.ts @@ -13,13 +13,13 @@ import { truncateToWidth, visibleWidth, } from "@earendil-works/pi-tui"; -import { KeybindingsManager } from "../../../core/keybindings.js"; -import type { SessionInfo, SessionListProgress } from "../../../core/session-manager.js"; -import { canonicalizePath as _canonicalizePath } from "../../../utils/paths.js"; -import { theme } from "../theme/theme.js"; -import { DynamicBorder } from "./dynamic-border.js"; -import { keyHint, keyText } from "./keybinding-hints.js"; -import { filterAndSortSessions, hasSessionName, type NameFilter, type SortMode } from "./session-selector-search.js"; +import { KeybindingsManager } from "../../../core/keybindings.ts"; +import type { SessionInfo, SessionListProgress } from "../../../core/session-manager.ts"; +import { canonicalizePath as _canonicalizePath } from "../../../utils/paths.ts"; +import { theme } from "../theme/theme.ts"; +import { DynamicBorder } from "./dynamic-border.ts"; +import { keyHint, keyText } from "./keybinding-hints.ts"; +import { filterAndSortSessions, hasSessionName, type NameFilter, type SortMode } from "./session-selector-search.ts"; type SessionScope = "current" | "all"; diff --git a/packages/coding-agent/src/modes/interactive/components/settings-selector.ts b/packages/coding-agent/src/modes/interactive/components/settings-selector.ts index 7d9d9cdf2..f99d73814 100644 --- a/packages/coding-agent/src/modes/interactive/components/settings-selector.ts +++ b/packages/coding-agent/src/modes/interactive/components/settings-selector.ts @@ -11,10 +11,10 @@ import { Spacer, Text, } from "@earendil-works/pi-tui"; -import type { WarningSettings } from "../../../core/settings-manager.js"; -import { getSelectListTheme, getSettingsListTheme, theme } from "../theme/theme.js"; -import { DynamicBorder } from "./dynamic-border.js"; -import { keyDisplayText } from "./keybinding-hints.js"; +import type { WarningSettings } from "../../../core/settings-manager.ts"; +import { getSelectListTheme, getSettingsListTheme, theme } from "../theme/theme.ts"; +import { DynamicBorder } from "./dynamic-border.ts"; +import { keyDisplayText } from "./keybinding-hints.ts"; const SETTINGS_SUBMENU_SELECT_LIST_LAYOUT: SelectListLayoutOptions = { minPrimaryColumnWidth: 12, diff --git a/packages/coding-agent/src/modes/interactive/components/show-images-selector.ts b/packages/coding-agent/src/modes/interactive/components/show-images-selector.ts index c0c7bc153..29c69f746 100644 --- a/packages/coding-agent/src/modes/interactive/components/show-images-selector.ts +++ b/packages/coding-agent/src/modes/interactive/components/show-images-selector.ts @@ -1,6 +1,6 @@ import { Container, type SelectItem, SelectList, type SelectListLayoutOptions } from "@earendil-works/pi-tui"; -import { getSelectListTheme } from "../theme/theme.js"; -import { DynamicBorder } from "./dynamic-border.js"; +import { getSelectListTheme } from "../theme/theme.ts"; +import { DynamicBorder } from "./dynamic-border.ts"; const SHOW_IMAGES_SELECT_LIST_LAYOUT: SelectListLayoutOptions = { minPrimaryColumnWidth: 12, diff --git a/packages/coding-agent/src/modes/interactive/components/skill-invocation-message.ts b/packages/coding-agent/src/modes/interactive/components/skill-invocation-message.ts index 8714edc2e..e09febc7c 100644 --- a/packages/coding-agent/src/modes/interactive/components/skill-invocation-message.ts +++ b/packages/coding-agent/src/modes/interactive/components/skill-invocation-message.ts @@ -1,7 +1,7 @@ import { Box, Markdown, type MarkdownTheme, Text } from "@earendil-works/pi-tui"; -import type { ParsedSkillBlock } from "../../../core/agent-session.js"; -import { getMarkdownTheme, theme } from "../theme/theme.js"; -import { keyText } from "./keybinding-hints.js"; +import type { ParsedSkillBlock } from "../../../core/agent-session.ts"; +import { getMarkdownTheme, theme } from "../theme/theme.ts"; +import { keyText } from "./keybinding-hints.ts"; /** * Component that renders a skill invocation message with collapsed/expanded state. diff --git a/packages/coding-agent/src/modes/interactive/components/theme-selector.ts b/packages/coding-agent/src/modes/interactive/components/theme-selector.ts index 29e6e7791..07b377423 100644 --- a/packages/coding-agent/src/modes/interactive/components/theme-selector.ts +++ b/packages/coding-agent/src/modes/interactive/components/theme-selector.ts @@ -1,6 +1,6 @@ import { Container, type SelectItem, SelectList, type SelectListLayoutOptions } from "@earendil-works/pi-tui"; -import { getAvailableThemes, getSelectListTheme } from "../theme/theme.js"; -import { DynamicBorder } from "./dynamic-border.js"; +import { getAvailableThemes, getSelectListTheme } from "../theme/theme.ts"; +import { DynamicBorder } from "./dynamic-border.ts"; const THEME_SELECT_LIST_LAYOUT: SelectListLayoutOptions = { minPrimaryColumnWidth: 12, diff --git a/packages/coding-agent/src/modes/interactive/components/thinking-selector.ts b/packages/coding-agent/src/modes/interactive/components/thinking-selector.ts index 9eadb86f6..91a3a6266 100644 --- a/packages/coding-agent/src/modes/interactive/components/thinking-selector.ts +++ b/packages/coding-agent/src/modes/interactive/components/thinking-selector.ts @@ -1,7 +1,7 @@ import type { ThinkingLevel } from "@earendil-works/pi-agent-core"; import { Container, type SelectItem, SelectList, type SelectListLayoutOptions } from "@earendil-works/pi-tui"; -import { getSelectListTheme } from "../theme/theme.js"; -import { DynamicBorder } from "./dynamic-border.js"; +import { getSelectListTheme } from "../theme/theme.ts"; +import { DynamicBorder } from "./dynamic-border.ts"; const THINKING_SELECT_LIST_LAYOUT: SelectListLayoutOptions = { minPrimaryColumnWidth: 12, diff --git a/packages/coding-agent/src/modes/interactive/components/tool-execution.ts b/packages/coding-agent/src/modes/interactive/components/tool-execution.ts index 867a0bb52..b941dfc88 100644 --- a/packages/coding-agent/src/modes/interactive/components/tool-execution.ts +++ b/packages/coding-agent/src/modes/interactive/components/tool-execution.ts @@ -1,9 +1,9 @@ import { Box, type Component, Container, getCapabilities, Image, Spacer, Text, type TUI } from "@earendil-works/pi-tui"; -import type { ToolDefinition, ToolRenderContext } from "../../../core/extensions/types.js"; -import { createAllToolDefinitions, type ToolName } from "../../../core/tools/index.js"; -import { getTextOutput as getRenderedTextOutput } from "../../../core/tools/render-utils.js"; -import { convertToPng } from "../../../utils/image-convert.js"; -import { theme } from "../theme/theme.js"; +import type { ToolDefinition, ToolRenderContext } from "../../../core/extensions/types.ts"; +import { createAllToolDefinitions, type ToolName } from "../../../core/tools/index.ts"; +import { getTextOutput as getRenderedTextOutput } from "../../../core/tools/render-utils.ts"; +import { convertToPng } from "../../../utils/image-convert.ts"; +import { theme } from "../theme/theme.ts"; export interface ToolExecutionOptions { showImages?: boolean; diff --git a/packages/coding-agent/src/modes/interactive/components/tree-selector.ts b/packages/coding-agent/src/modes/interactive/components/tree-selector.ts index d895a8920..990e705d1 100644 --- a/packages/coding-agent/src/modes/interactive/components/tree-selector.ts +++ b/packages/coding-agent/src/modes/interactive/components/tree-selector.ts @@ -9,10 +9,10 @@ import { TruncatedText, truncateToWidth, } from "@earendil-works/pi-tui"; -import type { SessionTreeNode } from "../../../core/session-manager.js"; -import { theme } from "../theme/theme.js"; -import { DynamicBorder } from "./dynamic-border.js"; -import { keyHint, keyText } from "./keybinding-hints.js"; +import type { SessionTreeNode } from "../../../core/session-manager.ts"; +import { theme } from "../theme/theme.ts"; +import { DynamicBorder } from "./dynamic-border.ts"; +import { keyHint, keyText } from "./keybinding-hints.ts"; /** Gutter info: position (displayIndent where connector was) and whether to show │ */ interface GutterInfo { diff --git a/packages/coding-agent/src/modes/interactive/components/user-message-selector.ts b/packages/coding-agent/src/modes/interactive/components/user-message-selector.ts index 6cf4223ab..69fbbc82a 100644 --- a/packages/coding-agent/src/modes/interactive/components/user-message-selector.ts +++ b/packages/coding-agent/src/modes/interactive/components/user-message-selector.ts @@ -1,6 +1,6 @@ import { type Component, Container, getKeybindings, Spacer, Text, truncateToWidth } from "@earendil-works/pi-tui"; -import { theme } from "../theme/theme.js"; -import { DynamicBorder } from "./dynamic-border.js"; +import { theme } from "../theme/theme.ts"; +import { DynamicBorder } from "./dynamic-border.ts"; interface UserMessageItem { id: string; // Entry ID in the session diff --git a/packages/coding-agent/src/modes/interactive/components/user-message.ts b/packages/coding-agent/src/modes/interactive/components/user-message.ts index 969df02fd..8fda83e9a 100644 --- a/packages/coding-agent/src/modes/interactive/components/user-message.ts +++ b/packages/coding-agent/src/modes/interactive/components/user-message.ts @@ -1,5 +1,5 @@ import { Box, Container, Markdown, type MarkdownTheme } from "@earendil-works/pi-tui"; -import { getMarkdownTheme, theme } from "../theme/theme.js"; +import { getMarkdownTheme, theme } from "../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/src/modes/interactive/interactive-mode.ts b/packages/coding-agent/src/modes/interactive/interactive-mode.ts index 7fe94dedd..c93beb93a 100644 --- a/packages/coding-agent/src/modes/interactive/interactive-mode.ts +++ b/packages/coding-agent/src/modes/interactive/interactive-mode.ts @@ -57,9 +57,9 @@ import { getDocsPath, getShareViewerUrl, VERSION, -} from "../../config.js"; -import { type AgentSession, type AgentSessionEvent, parseSkillBlock } from "../../core/agent-session.js"; -import { type AgentSessionRuntime, SessionImportFileNotFoundError } from "../../core/agent-session-runtime.js"; +} from "../../config.ts"; +import { type AgentSession, type AgentSessionEvent, parseSkillBlock } from "../../core/agent-session.ts"; +import { type AgentSessionRuntime, SessionImportFileNotFoundError } from "../../core/agent-session-runtime.ts"; import type { AutocompleteProviderFactory, EditorFactory, @@ -69,57 +69,57 @@ import type { ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetOptions, -} from "../../core/extensions/index.js"; -import { FooterDataProvider, type ReadonlyFooterDataProvider } from "../../core/footer-data-provider.js"; -import { type AppKeybinding, KeybindingsManager } from "../../core/keybindings.js"; -import { createCompactionSummaryMessage } from "../../core/messages.js"; -import { defaultModelPerProvider, findExactModelReferenceMatch, resolveModelScope } from "../../core/model-resolver.js"; -import { DefaultPackageManager } from "../../core/package-manager.js"; -import { BUILT_IN_PROVIDER_DISPLAY_NAMES } from "../../core/provider-display-names.js"; -import type { ResourceDiagnostic } from "../../core/resource-loader.js"; -import { formatMissingSessionCwdPrompt, MissingSessionCwdError } from "../../core/session-cwd.js"; -import { type SessionContext, SessionManager } from "../../core/session-manager.js"; -import { BUILTIN_SLASH_COMMANDS } from "../../core/slash-commands.js"; -import type { SourceInfo } from "../../core/source-info.js"; -import { isInstallTelemetryEnabled } from "../../core/telemetry.js"; -import type { TruncationResult } from "../../core/tools/truncate.js"; -import { getChangelogPath, getNewEntries, parseChangelog } from "../../utils/changelog.js"; -import { copyToClipboard } from "../../utils/clipboard.js"; -import { extensionForImageMimeType, readClipboardImage } from "../../utils/clipboard-image.js"; -import { parseGitUrl } from "../../utils/git.js"; -import { getCwdRelativePath } from "../../utils/paths.js"; -import { getPiUserAgent } from "../../utils/pi-user-agent.js"; -import { killTrackedDetachedChildren } from "../../utils/shell.js"; -import { ensureTool } from "../../utils/tools-manager.js"; -import { checkForNewPiVersion, type LatestPiRelease } from "../../utils/version-check.js"; -import { ArminComponent } from "./components/armin.js"; -import { AssistantMessageComponent } from "./components/assistant-message.js"; -import { BashExecutionComponent } from "./components/bash-execution.js"; -import { BorderedLoader } from "./components/bordered-loader.js"; -import { BranchSummaryMessageComponent } from "./components/branch-summary-message.js"; -import { CompactionSummaryMessageComponent } from "./components/compaction-summary-message.js"; -import { CountdownTimer } from "./components/countdown-timer.js"; -import { CustomEditor } from "./components/custom-editor.js"; -import { CustomMessageComponent } from "./components/custom-message.js"; -import { DaxnutsComponent } from "./components/daxnuts.js"; -import { DynamicBorder } from "./components/dynamic-border.js"; -import { EarendilAnnouncementComponent } from "./components/earendil-announcement.js"; -import { ExtensionEditorComponent } from "./components/extension-editor.js"; -import { ExtensionInputComponent } from "./components/extension-input.js"; -import { ExtensionSelectorComponent } from "./components/extension-selector.js"; -import { FooterComponent } from "./components/footer.js"; -import { formatKeyText, keyDisplayText, keyHint, keyText, rawKeyHint } from "./components/keybinding-hints.js"; -import { LoginDialogComponent } from "./components/login-dialog.js"; -import { ModelSelectorComponent } from "./components/model-selector.js"; -import { type AuthSelectorProvider, OAuthSelectorComponent } from "./components/oauth-selector.js"; -import { ScopedModelsSelectorComponent } from "./components/scoped-models-selector.js"; -import { SessionSelectorComponent } from "./components/session-selector.js"; -import { SettingsSelectorComponent } from "./components/settings-selector.js"; -import { SkillInvocationMessageComponent } from "./components/skill-invocation-message.js"; -import { ToolExecutionComponent } from "./components/tool-execution.js"; -import { TreeSelectorComponent } from "./components/tree-selector.js"; -import { UserMessageComponent } from "./components/user-message.js"; -import { UserMessageSelectorComponent } from "./components/user-message-selector.js"; +} from "../../core/extensions/index.ts"; +import { FooterDataProvider, type ReadonlyFooterDataProvider } from "../../core/footer-data-provider.ts"; +import { type AppKeybinding, KeybindingsManager } from "../../core/keybindings.ts"; +import { createCompactionSummaryMessage } from "../../core/messages.ts"; +import { defaultModelPerProvider, findExactModelReferenceMatch, resolveModelScope } from "../../core/model-resolver.ts"; +import { DefaultPackageManager } from "../../core/package-manager.ts"; +import { BUILT_IN_PROVIDER_DISPLAY_NAMES } from "../../core/provider-display-names.ts"; +import type { ResourceDiagnostic } from "../../core/resource-loader.ts"; +import { formatMissingSessionCwdPrompt, MissingSessionCwdError } from "../../core/session-cwd.ts"; +import { type SessionContext, SessionManager } from "../../core/session-manager.ts"; +import { BUILTIN_SLASH_COMMANDS } from "../../core/slash-commands.ts"; +import type { SourceInfo } from "../../core/source-info.ts"; +import { isInstallTelemetryEnabled } from "../../core/telemetry.ts"; +import type { TruncationResult } from "../../core/tools/truncate.ts"; +import { getChangelogPath, getNewEntries, parseChangelog } from "../../utils/changelog.ts"; +import { copyToClipboard } from "../../utils/clipboard.ts"; +import { extensionForImageMimeType, readClipboardImage } from "../../utils/clipboard-image.ts"; +import { parseGitUrl } from "../../utils/git.ts"; +import { getCwdRelativePath } from "../../utils/paths.ts"; +import { getPiUserAgent } from "../../utils/pi-user-agent.ts"; +import { killTrackedDetachedChildren } from "../../utils/shell.ts"; +import { ensureTool } from "../../utils/tools-manager.ts"; +import { checkForNewPiVersion, type LatestPiRelease } from "../../utils/version-check.ts"; +import { ArminComponent } from "./components/armin.ts"; +import { AssistantMessageComponent } from "./components/assistant-message.ts"; +import { BashExecutionComponent } from "./components/bash-execution.ts"; +import { BorderedLoader } from "./components/bordered-loader.ts"; +import { BranchSummaryMessageComponent } from "./components/branch-summary-message.ts"; +import { CompactionSummaryMessageComponent } from "./components/compaction-summary-message.ts"; +import { CountdownTimer } from "./components/countdown-timer.ts"; +import { CustomEditor } from "./components/custom-editor.ts"; +import { CustomMessageComponent } from "./components/custom-message.ts"; +import { DaxnutsComponent } from "./components/daxnuts.ts"; +import { DynamicBorder } from "./components/dynamic-border.ts"; +import { EarendilAnnouncementComponent } from "./components/earendil-announcement.ts"; +import { ExtensionEditorComponent } from "./components/extension-editor.ts"; +import { ExtensionInputComponent } from "./components/extension-input.ts"; +import { ExtensionSelectorComponent } from "./components/extension-selector.ts"; +import { FooterComponent } from "./components/footer.ts"; +import { formatKeyText, keyDisplayText, keyHint, keyText, rawKeyHint } from "./components/keybinding-hints.ts"; +import { LoginDialogComponent } from "./components/login-dialog.ts"; +import { ModelSelectorComponent } from "./components/model-selector.ts"; +import { type AuthSelectorProvider, OAuthSelectorComponent } from "./components/oauth-selector.ts"; +import { ScopedModelsSelectorComponent } from "./components/scoped-models-selector.ts"; +import { SessionSelectorComponent } from "./components/session-selector.ts"; +import { SettingsSelectorComponent } from "./components/settings-selector.ts"; +import { SkillInvocationMessageComponent } from "./components/skill-invocation-message.ts"; +import { ToolExecutionComponent } from "./components/tool-execution.ts"; +import { TreeSelectorComponent } from "./components/tree-selector.ts"; +import { UserMessageComponent } from "./components/user-message.ts"; +import { UserMessageSelectorComponent } from "./components/user-message-selector.ts"; import { getAvailableThemes, getAvailableThemesWithPaths, @@ -135,7 +135,7 @@ import { Theme, type ThemeColor, theme, -} from "./theme/theme.js"; +} from "./theme/theme.ts"; /** Interface for components that can be expanded/collapsed */ interface Expandable { diff --git a/packages/coding-agent/src/modes/interactive/theme/theme.ts b/packages/coding-agent/src/modes/interactive/theme/theme.ts index 9fb8b0312..0560f0142 100644 --- a/packages/coding-agent/src/modes/interactive/theme/theme.ts +++ b/packages/coding-agent/src/modes/interactive/theme/theme.ts @@ -10,10 +10,10 @@ import { import chalk from "chalk"; import { type Static, Type } from "typebox"; import { Compile } from "typebox/compile"; -import { getCustomThemesDir, getThemesDir } from "../../../config.js"; -import type { SourceInfo } from "../../../core/source-info.js"; -import { closeWatcher, watchWithErrorHandler } from "../../../utils/fs-watch.js"; -import { highlight, supportsLanguage } from "../../../utils/syntax-highlight.js"; +import { getCustomThemesDir, getThemesDir } from "../../../config.ts"; +import type { SourceInfo } from "../../../core/source-info.ts"; +import { closeWatcher, watchWithErrorHandler } from "../../../utils/fs-watch.ts"; +import { highlight, supportsLanguage } from "../../../utils/syntax-highlight.ts"; // ============================================================================ // Types & Schema diff --git a/packages/coding-agent/src/modes/print-mode.ts b/packages/coding-agent/src/modes/print-mode.ts index 2f9fb048e..c9553c558 100644 --- a/packages/coding-agent/src/modes/print-mode.ts +++ b/packages/coding-agent/src/modes/print-mode.ts @@ -7,9 +7,9 @@ */ import type { AssistantMessage, ImageContent } from "@earendil-works/pi-ai"; -import type { AgentSessionRuntime } from "../core/agent-session-runtime.js"; -import { flushRawStdout, writeRawStdout } from "../core/output-guard.js"; -import { killTrackedDetachedChildren } from "../utils/shell.js"; +import type { AgentSessionRuntime } from "../core/agent-session-runtime.ts"; +import { flushRawStdout, writeRawStdout } from "../core/output-guard.ts"; +import { killTrackedDetachedChildren } from "../utils/shell.ts"; /** * Options for print mode. diff --git a/packages/coding-agent/src/modes/rpc/rpc-client.ts b/packages/coding-agent/src/modes/rpc/rpc-client.ts index 194f479ef..53b96e642 100644 --- a/packages/coding-agent/src/modes/rpc/rpc-client.ts +++ b/packages/coding-agent/src/modes/rpc/rpc-client.ts @@ -7,11 +7,11 @@ import { type ChildProcess, spawn } from "node:child_process"; import type { AgentEvent, AgentMessage, ThinkingLevel } from "@earendil-works/pi-agent-core"; import type { ImageContent } from "@earendil-works/pi-ai"; -import type { SessionStats } from "../../core/agent-session.js"; -import type { BashResult } from "../../core/bash-executor.js"; -import type { CompactionResult } from "../../core/compaction/index.js"; -import { attachJsonlLineReader, serializeJsonLine } from "./jsonl.js"; -import type { RpcCommand, RpcResponse, RpcSessionState, RpcSlashCommand } from "./rpc-types.js"; +import type { SessionStats } from "../../core/agent-session.ts"; +import type { BashResult } from "../../core/bash-executor.ts"; +import type { CompactionResult } from "../../core/compaction/index.ts"; +import { attachJsonlLineReader, serializeJsonLine } from "./jsonl.ts"; +import type { RpcCommand, RpcResponse, RpcSessionState, RpcSlashCommand } from "./rpc-types.ts"; // ============================================================================ // Types diff --git a/packages/coding-agent/src/modes/rpc/rpc-mode.ts b/packages/coding-agent/src/modes/rpc/rpc-mode.ts index b10692edc..828c9f67f 100644 --- a/packages/coding-agent/src/modes/rpc/rpc-mode.ts +++ b/packages/coding-agent/src/modes/rpc/rpc-mode.ts @@ -12,17 +12,17 @@ */ import * as crypto from "node:crypto"; -import type { AgentSessionRuntime } from "../../core/agent-session-runtime.js"; +import type { AgentSessionRuntime } from "../../core/agent-session-runtime.ts"; import type { ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetOptions, WorkingIndicatorOptions, -} from "../../core/extensions/index.js"; -import { takeOverStdout, writeRawStdout } from "../../core/output-guard.js"; -import { killTrackedDetachedChildren } from "../../utils/shell.js"; -import { type Theme, theme } from "../interactive/theme/theme.js"; -import { attachJsonlLineReader, serializeJsonLine } from "./jsonl.js"; +} from "../../core/extensions/index.ts"; +import { takeOverStdout, writeRawStdout } from "../../core/output-guard.ts"; +import { killTrackedDetachedChildren } from "../../utils/shell.ts"; +import { type Theme, theme } from "../interactive/theme/theme.ts"; +import { attachJsonlLineReader, serializeJsonLine } from "./jsonl.ts"; import type { RpcCommand, RpcExtensionUIRequest, @@ -30,7 +30,7 @@ import type { RpcResponse, RpcSessionState, RpcSlashCommand, -} from "./rpc-types.js"; +} from "./rpc-types.ts"; // Re-export types for consumers export type { @@ -39,7 +39,7 @@ export type { RpcExtensionUIResponse, RpcResponse, RpcSessionState, -} from "./rpc-types.js"; +} from "./rpc-types.ts"; /** * Run in RPC mode. diff --git a/packages/coding-agent/src/modes/rpc/rpc-types.ts b/packages/coding-agent/src/modes/rpc/rpc-types.ts index 43aeeeeb4..02c8a6b92 100644 --- a/packages/coding-agent/src/modes/rpc/rpc-types.ts +++ b/packages/coding-agent/src/modes/rpc/rpc-types.ts @@ -7,10 +7,10 @@ import type { AgentMessage, ThinkingLevel } from "@earendil-works/pi-agent-core"; import type { ImageContent, Model } from "@earendil-works/pi-ai"; -import type { SessionStats } from "../../core/agent-session.js"; -import type { BashResult } from "../../core/bash-executor.js"; -import type { CompactionResult } from "../../core/compaction/index.js"; -import type { SourceInfo } from "../../core/source-info.js"; +import type { SessionStats } from "../../core/agent-session.ts"; +import type { BashResult } from "../../core/bash-executor.ts"; +import type { CompactionResult } from "../../core/compaction/index.ts"; +import type { SourceInfo } from "../../core/source-info.ts"; // ============================================================================ // RPC Commands (stdin) diff --git a/packages/coding-agent/src/package-manager-cli.ts b/packages/coding-agent/src/package-manager-cli.ts index 8fd5d6d45..f61d4ff2a 100644 --- a/packages/coding-agent/src/package-manager-cli.ts +++ b/packages/coding-agent/src/package-manager-cli.ts @@ -1,6 +1,6 @@ import { Markdown, type MarkdownTheme } from "@earendil-works/pi-tui"; import chalk from "chalk"; -import { selectConfig } from "./cli/config-selector.js"; +import { selectConfig } from "./cli/config-selector.ts"; import { APP_NAME, detectInstallMethod, @@ -11,15 +11,15 @@ import { PACKAGE_NAME, type SelfUpdateCommand, VERSION, -} from "./config.js"; -import { DefaultPackageManager } from "./core/package-manager.js"; -import { SettingsManager } from "./core/settings-manager.js"; -import { spawnProcess } from "./utils/child-process.js"; -import { getLatestPiRelease, isNewerPackageVersion } from "./utils/version-check.js"; +} from "./config.ts"; +import { DefaultPackageManager } from "./core/package-manager.ts"; +import { SettingsManager } from "./core/settings-manager.ts"; +import { spawnProcess } from "./utils/child-process.ts"; +import { getLatestPiRelease, isNewerPackageVersion } from "./utils/version-check.ts"; import { cleanupWindowsSelfUpdateQuarantine, quarantineWindowsNativeDependencies, -} from "./utils/windows-self-update.js"; +} from "./utils/windows-self-update.ts"; export type PackageCommand = "install" | "remove" | "update" | "list"; diff --git a/packages/coding-agent/src/utils/changelog.ts b/packages/coding-agent/src/utils/changelog.ts index 79b17d0e0..b9e8e35d2 100644 --- a/packages/coding-agent/src/utils/changelog.ts +++ b/packages/coding-agent/src/utils/changelog.ts @@ -96,4 +96,4 @@ export function getNewEntries(entries: ChangelogEntry[], lastVersion: string): C } // Re-export getChangelogPath from paths.ts for convenience -export { getChangelogPath } from "../config.js"; +export { getChangelogPath } from "../config.ts"; diff --git a/packages/coding-agent/src/utils/clipboard-image.ts b/packages/coding-agent/src/utils/clipboard-image.ts index 4cf44908f..44f8fb108 100644 --- a/packages/coding-agent/src/utils/clipboard-image.ts +++ b/packages/coding-agent/src/utils/clipboard-image.ts @@ -4,8 +4,8 @@ import { readFileSync, unlinkSync } from "fs"; import { tmpdir } from "os"; import { join } from "path"; -import { clipboard } from "./clipboard-native.js"; -import { loadPhoton } from "./photon.js"; +import { clipboard } from "./clipboard-native.ts"; +import { loadPhoton } from "./photon.ts"; export type ClipboardImage = { bytes: Uint8Array; diff --git a/packages/coding-agent/src/utils/clipboard.ts b/packages/coding-agent/src/utils/clipboard.ts index 84166e95e..26e1d018d 100644 --- a/packages/coding-agent/src/utils/clipboard.ts +++ b/packages/coding-agent/src/utils/clipboard.ts @@ -1,7 +1,7 @@ import { execSync, spawn } from "child_process"; import { platform } from "os"; -import { isWaylandSession } from "./clipboard-image.js"; -import { clipboard } from "./clipboard-native.js"; +import { isWaylandSession } from "./clipboard-image.ts"; +import { clipboard } from "./clipboard-native.ts"; type NativeClipboardExecOptions = { input: string; diff --git a/packages/coding-agent/src/utils/exif-orientation.ts b/packages/coding-agent/src/utils/exif-orientation.ts index ac34c790a..4b454afaa 100644 --- a/packages/coding-agent/src/utils/exif-orientation.ts +++ b/packages/coding-agent/src/utils/exif-orientation.ts @@ -1,4 +1,4 @@ -import type { PhotonImageType } from "./photon.js"; +import type { PhotonImageType } from "./photon.ts"; type Photon = typeof import("@silvia-odwyer/photon-node"); diff --git a/packages/coding-agent/src/utils/image-convert.ts b/packages/coding-agent/src/utils/image-convert.ts index 670997c05..4d5f0204a 100644 --- a/packages/coding-agent/src/utils/image-convert.ts +++ b/packages/coding-agent/src/utils/image-convert.ts @@ -1,5 +1,5 @@ -import { applyExifOrientation } from "./exif-orientation.js"; -import { loadPhoton } from "./photon.js"; +import { applyExifOrientation } from "./exif-orientation.ts"; +import { loadPhoton } from "./photon.ts"; /** * Convert image to PNG format for terminal display. diff --git a/packages/coding-agent/src/utils/image-resize.ts b/packages/coding-agent/src/utils/image-resize.ts index 84b4ac331..3eb17dae4 100644 --- a/packages/coding-agent/src/utils/image-resize.ts +++ b/packages/coding-agent/src/utils/image-resize.ts @@ -1,6 +1,6 @@ import type { ImageContent } from "@earendil-works/pi-ai"; -import { applyExifOrientation } from "./exif-orientation.js"; -import { loadPhoton } from "./photon.js"; +import { applyExifOrientation } from "./exif-orientation.ts"; +import { loadPhoton } from "./photon.ts"; export interface ImageResizeOptions { maxWidth?: number; // Default: 2000 diff --git a/packages/coding-agent/src/utils/shell.ts b/packages/coding-agent/src/utils/shell.ts index 7e3cc8ef6..817ba4f9f 100644 --- a/packages/coding-agent/src/utils/shell.ts +++ b/packages/coding-agent/src/utils/shell.ts @@ -1,7 +1,7 @@ import { existsSync } from "node:fs"; import { delimiter } from "node:path"; import { spawn, spawnSync } from "child_process"; -import { getBinDir } from "../config.js"; +import { getBinDir } from "../config.ts"; export interface ShellConfig { shell: string; diff --git a/packages/coding-agent/src/utils/syntax-highlight.ts b/packages/coding-agent/src/utils/syntax-highlight.ts index fc8a0281c..bcc4add1c 100644 --- a/packages/coding-agent/src/utils/syntax-highlight.ts +++ b/packages/coding-agent/src/utils/syntax-highlight.ts @@ -1,5 +1,5 @@ import hljs from "highlight.js/lib/index.js"; -import { decodeHtmlEntityAt } from "./html.js"; +import { decodeHtmlEntityAt } from "./html.ts"; export type HighlightFormatter = (text: string) => string; export type HighlightTheme = Partial>; diff --git a/packages/coding-agent/src/utils/tools-manager.ts b/packages/coding-agent/src/utils/tools-manager.ts index 2ee60a0dc..09d9a1195 100644 --- a/packages/coding-agent/src/utils/tools-manager.ts +++ b/packages/coding-agent/src/utils/tools-manager.ts @@ -5,7 +5,7 @@ import { arch, platform } from "os"; import { join } from "path"; import { Readable } from "stream"; import { pipeline } from "stream/promises"; -import { APP_NAME, getBinDir } from "../config.js"; +import { APP_NAME, getBinDir } from "../config.ts"; const TOOLS_DIR = getBinDir(); const NETWORK_TIMEOUT_MS = 10_000; diff --git a/packages/coding-agent/src/utils/version-check.ts b/packages/coding-agent/src/utils/version-check.ts index 27f3390c1..aec25bdb5 100644 --- a/packages/coding-agent/src/utils/version-check.ts +++ b/packages/coding-agent/src/utils/version-check.ts @@ -1,4 +1,4 @@ -import { getPiUserAgent } from "./pi-user-agent.js"; +import { getPiUserAgent } from "./pi-user-agent.ts"; const LATEST_VERSION_URL = "https://pi.dev/api/latest-version"; const DEFAULT_VERSION_CHECK_TIMEOUT_MS = 10000; diff --git a/packages/coding-agent/src/utils/windows-self-update.ts b/packages/coding-agent/src/utils/windows-self-update.ts index a988529e3..c837d4912 100644 --- a/packages/coding-agent/src/utils/windows-self-update.ts +++ b/packages/coding-agent/src/utils/windows-self-update.ts @@ -1,7 +1,7 @@ import { randomUUID } from "node:crypto"; import { copyFileSync, existsSync, mkdirSync, renameSync, rmSync } from "node:fs"; import { basename, dirname, join, relative, resolve, toNamespacedPath } from "node:path"; -import { getCwdRelativePath } from "./paths.js"; +import { getCwdRelativePath } from "./paths.ts"; const QUARANTINE_DIR_NAME = ".pi-native-quarantine"; diff --git a/packages/tui/src/autocomplete.ts b/packages/tui/src/autocomplete.ts index 965dc3031..5408967d1 100644 --- a/packages/tui/src/autocomplete.ts +++ b/packages/tui/src/autocomplete.ts @@ -2,7 +2,7 @@ import { spawn } from "child_process"; import { readdirSync, statSync } from "fs"; import { homedir } from "os"; import { basename, dirname, join } from "path"; -import { fuzzyFilter } from "./fuzzy.js"; +import { fuzzyFilter } from "./fuzzy.ts"; const PATH_DELIMITERS = new Set([" ", "\t", '"', "'", "="]); diff --git a/packages/tui/src/components/box.ts b/packages/tui/src/components/box.ts index c99b8600b..3573ab092 100644 --- a/packages/tui/src/components/box.ts +++ b/packages/tui/src/components/box.ts @@ -1,5 +1,5 @@ -import type { Component } from "../tui.js"; -import { applyBackgroundToLine, visibleWidth } from "../utils.js"; +import type { Component } from "../tui.ts"; +import { applyBackgroundToLine, visibleWidth } from "../utils.ts"; type RenderCache = { childLines: string[]; diff --git a/packages/tui/src/components/cancellable-loader.ts b/packages/tui/src/components/cancellable-loader.ts index e8bd85b90..7822cb042 100644 --- a/packages/tui/src/components/cancellable-loader.ts +++ b/packages/tui/src/components/cancellable-loader.ts @@ -1,5 +1,5 @@ -import { getKeybindings } from "../keybindings.js"; -import { Loader } from "./loader.js"; +import { getKeybindings } from "../keybindings.ts"; +import { Loader } from "./loader.ts"; /** * Loader that can be cancelled with Escape. diff --git a/packages/tui/src/components/editor.ts b/packages/tui/src/components/editor.ts index 990469e57..0b30ad0a3 100644 --- a/packages/tui/src/components/editor.ts +++ b/packages/tui/src/components/editor.ts @@ -1,11 +1,11 @@ -import type { AutocompleteProvider, AutocompleteSuggestions } from "../autocomplete.js"; -import { getKeybindings } from "../keybindings.js"; -import { decodePrintableKey, matchesKey } from "../keys.js"; -import { KillRing } from "../kill-ring.js"; -import { type Component, CURSOR_MARKER, type Focusable, type TUI } from "../tui.js"; -import { UndoStack } from "../undo-stack.js"; -import { getSegmenter, isPunctuationChar, isWhitespaceChar, truncateToWidth, visibleWidth } from "../utils.js"; -import { SelectList, type SelectListLayoutOptions, type SelectListTheme } from "./select-list.js"; +import type { AutocompleteProvider, AutocompleteSuggestions } from "../autocomplete.ts"; +import { getKeybindings } from "../keybindings.ts"; +import { decodePrintableKey, matchesKey } from "../keys.ts"; +import { KillRing } from "../kill-ring.ts"; +import { type Component, CURSOR_MARKER, type Focusable, type TUI } from "../tui.ts"; +import { UndoStack } from "../undo-stack.ts"; +import { getSegmenter, isPunctuationChar, isWhitespaceChar, truncateToWidth, visibleWidth } from "../utils.ts"; +import { SelectList, type SelectListLayoutOptions, type SelectListTheme } from "./select-list.ts"; const baseSegmenter = getSegmenter(); diff --git a/packages/tui/src/components/image.ts b/packages/tui/src/components/image.ts index eb68757d4..50c1e0f78 100644 --- a/packages/tui/src/components/image.ts +++ b/packages/tui/src/components/image.ts @@ -6,8 +6,8 @@ import { type ImageDimensions, imageFallback, renderImage, -} from "../terminal-image.js"; -import type { Component } from "../tui.js"; +} from "../terminal-image.ts"; +import type { Component } from "../tui.ts"; export interface ImageTheme { fallbackColor: (str: string) => string; diff --git a/packages/tui/src/components/input.ts b/packages/tui/src/components/input.ts index 9c97af95f..71f2363ba 100644 --- a/packages/tui/src/components/input.ts +++ b/packages/tui/src/components/input.ts @@ -1,9 +1,9 @@ -import { getKeybindings } from "../keybindings.js"; -import { decodeKittyPrintable } from "../keys.js"; -import { KillRing } from "../kill-ring.js"; -import { type Component, CURSOR_MARKER, type Focusable } from "../tui.js"; -import { UndoStack } from "../undo-stack.js"; -import { getSegmenter, isPunctuationChar, isWhitespaceChar, sliceByColumn, visibleWidth } from "../utils.js"; +import { getKeybindings } from "../keybindings.ts"; +import { decodeKittyPrintable } from "../keys.ts"; +import { KillRing } from "../kill-ring.ts"; +import { type Component, CURSOR_MARKER, type Focusable } from "../tui.ts"; +import { UndoStack } from "../undo-stack.ts"; +import { getSegmenter, isPunctuationChar, isWhitespaceChar, sliceByColumn, visibleWidth } from "../utils.ts"; const segmenter = getSegmenter(); diff --git a/packages/tui/src/components/loader.ts b/packages/tui/src/components/loader.ts index 6bac6ce81..9bce7293f 100644 --- a/packages/tui/src/components/loader.ts +++ b/packages/tui/src/components/loader.ts @@ -1,5 +1,5 @@ -import type { TUI } from "../tui.js"; -import { Text } from "./text.js"; +import type { TUI } from "../tui.ts"; +import { Text } from "./text.ts"; export interface LoaderIndicatorOptions { /** Animation frames. Use an empty array to hide the indicator. */ @@ -21,17 +21,23 @@ export class Loader extends Text { private intervalId: NodeJS.Timeout | null = null; private ui: TUI | null = null; private renderIndicatorVerbatim = false; + private spinnerColorFn: (str: string) => string; + private messageColorFn: (str: string) => string; + private message: string = "Loading..."; constructor( ui: TUI, - private spinnerColorFn: (str: string) => string, - private messageColorFn: (str: string) => string, - private message: string = "Loading...", + spinnerColorFn: (str: string) => string, + messageColorFn: (str: string) => string, + message: string = "Loading...", indicator?: LoaderIndicatorOptions, ) { super("", 1, 0); this.ui = ui; this.setIndicator(indicator); + this.spinnerColorFn = spinnerColorFn; + this.messageColorFn = messageColorFn; + this.message = message; } render(width: number): string[] { diff --git a/packages/tui/src/components/markdown.ts b/packages/tui/src/components/markdown.ts index 8e23e2890..2f0ab68df 100644 --- a/packages/tui/src/components/markdown.ts +++ b/packages/tui/src/components/markdown.ts @@ -1,7 +1,7 @@ import { Marked, type Token, Tokenizer, type Tokens } from "marked"; -import { getCapabilities, hyperlink, isImageLine } from "../terminal-image.js"; -import type { Component } from "../tui.js"; -import { applyBackgroundToLine, visibleWidth, wrapTextWithAnsi } from "../utils.js"; +import { getCapabilities, hyperlink, isImageLine } from "../terminal-image.ts"; +import type { Component } from "../tui.ts"; +import { applyBackgroundToLine, visibleWidth, wrapTextWithAnsi } from "../utils.ts"; const STRICT_STRIKETHROUGH_REGEX = /^(~~)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/; diff --git a/packages/tui/src/components/select-list.ts b/packages/tui/src/components/select-list.ts index 09353e544..26fdb685a 100644 --- a/packages/tui/src/components/select-list.ts +++ b/packages/tui/src/components/select-list.ts @@ -1,6 +1,6 @@ -import { getKeybindings } from "../keybindings.js"; -import type { Component } from "../tui.js"; -import { truncateToWidth, visibleWidth } from "../utils.js"; +import { getKeybindings } from "../keybindings.ts"; +import type { Component } from "../tui.ts"; +import { truncateToWidth, visibleWidth } from "../utils.ts"; const DEFAULT_PRIMARY_COLUMN_WIDTH = 32; const PRIMARY_COLUMN_GAP = 2; diff --git a/packages/tui/src/components/settings-list.ts b/packages/tui/src/components/settings-list.ts index 6a6235dd5..88e9433f7 100644 --- a/packages/tui/src/components/settings-list.ts +++ b/packages/tui/src/components/settings-list.ts @@ -1,8 +1,8 @@ -import { fuzzyFilter } from "../fuzzy.js"; -import { getKeybindings } from "../keybindings.js"; -import type { Component } from "../tui.js"; -import { truncateToWidth, visibleWidth, wrapTextWithAnsi } from "../utils.js"; -import { Input } from "./input.js"; +import { fuzzyFilter } from "../fuzzy.ts"; +import { getKeybindings } from "../keybindings.ts"; +import type { Component } from "../tui.ts"; +import { truncateToWidth, visibleWidth, wrapTextWithAnsi } from "../utils.ts"; +import { Input } from "./input.ts"; export interface SettingItem { /** Unique identifier for this setting */ diff --git a/packages/tui/src/components/spacer.ts b/packages/tui/src/components/spacer.ts index 8c63d3c2e..7abe1551c 100644 --- a/packages/tui/src/components/spacer.ts +++ b/packages/tui/src/components/spacer.ts @@ -1,4 +1,4 @@ -import type { Component } from "../tui.js"; +import type { Component } from "../tui.ts"; /** * Spacer component that renders empty lines diff --git a/packages/tui/src/components/text.ts b/packages/tui/src/components/text.ts index efcf25b45..3809a48a8 100644 --- a/packages/tui/src/components/text.ts +++ b/packages/tui/src/components/text.ts @@ -1,5 +1,5 @@ -import type { Component } from "../tui.js"; -import { applyBackgroundToLine, visibleWidth, wrapTextWithAnsi } from "../utils.js"; +import type { Component } from "../tui.ts"; +import { applyBackgroundToLine, visibleWidth, wrapTextWithAnsi } from "../utils.ts"; /** * Text component - displays multi-line text with word wrapping diff --git a/packages/tui/src/components/truncated-text.ts b/packages/tui/src/components/truncated-text.ts index 12eac558d..c26b88929 100644 --- a/packages/tui/src/components/truncated-text.ts +++ b/packages/tui/src/components/truncated-text.ts @@ -1,5 +1,5 @@ -import type { Component } from "../tui.js"; -import { truncateToWidth, visibleWidth } from "../utils.js"; +import type { Component } from "../tui.ts"; +import { truncateToWidth, visibleWidth } from "../utils.ts"; /** * Text component that truncates to fit viewport width diff --git a/packages/tui/src/editor-component.ts b/packages/tui/src/editor-component.ts index c6b6c43da..595645033 100644 --- a/packages/tui/src/editor-component.ts +++ b/packages/tui/src/editor-component.ts @@ -1,5 +1,5 @@ -import type { AutocompleteProvider } from "./autocomplete.js"; -import type { Component } from "./tui.js"; +import type { AutocompleteProvider } from "./autocomplete.ts"; +import type { Component } from "./tui.ts"; /** * Interface for custom editor components. diff --git a/packages/tui/src/index.ts b/packages/tui/src/index.ts index 3c8ae0aac..9404aa655 100644 --- a/packages/tui/src/index.ts +++ b/packages/tui/src/index.ts @@ -7,30 +7,30 @@ export { type AutocompleteSuggestions, CombinedAutocompleteProvider, type SlashCommand, -} from "./autocomplete.js"; +} from "./autocomplete.ts"; // Components -export { Box } from "./components/box.js"; -export { CancellableLoader } from "./components/cancellable-loader.js"; -export { Editor, type EditorOptions, type EditorTheme } from "./components/editor.js"; -export { Image, type ImageOptions, type ImageTheme } from "./components/image.js"; -export { Input } from "./components/input.js"; -export { Loader, type LoaderIndicatorOptions } from "./components/loader.js"; -export { type DefaultTextStyle, Markdown, type MarkdownTheme } from "./components/markdown.js"; +export { Box } from "./components/box.ts"; +export { CancellableLoader } from "./components/cancellable-loader.ts"; +export { Editor, type EditorOptions, type EditorTheme } from "./components/editor.ts"; +export { Image, type ImageOptions, type ImageTheme } from "./components/image.ts"; +export { Input } from "./components/input.ts"; +export { Loader, type LoaderIndicatorOptions } from "./components/loader.ts"; +export { type DefaultTextStyle, Markdown, type MarkdownTheme } from "./components/markdown.ts"; export { type SelectItem, SelectList, type SelectListLayoutOptions, type SelectListTheme, type SelectListTruncatePrimaryContext, -} from "./components/select-list.js"; -export { type SettingItem, SettingsList, type SettingsListTheme } from "./components/settings-list.js"; -export { Spacer } from "./components/spacer.js"; -export { Text } from "./components/text.js"; -export { TruncatedText } from "./components/truncated-text.js"; +} from "./components/select-list.ts"; +export { type SettingItem, SettingsList, type SettingsListTheme } from "./components/settings-list.ts"; +export { Spacer } from "./components/spacer.ts"; +export { Text } from "./components/text.ts"; +export { TruncatedText } from "./components/truncated-text.ts"; // Editor component interface (for custom editors) -export type { EditorComponent } from "./editor-component.js"; +export type { EditorComponent } from "./editor-component.ts"; // Fuzzy matching -export { type FuzzyMatch, fuzzyFilter, fuzzyMatch } from "./fuzzy.js"; +export { type FuzzyMatch, fuzzyFilter, fuzzyMatch } from "./fuzzy.ts"; // Keybindings export { getKeybindings, @@ -43,7 +43,7 @@ export { KeybindingsManager, setKeybindings, TUI_KEYBINDINGS, -} from "./keybindings.js"; +} from "./keybindings.ts"; // Keyboard input handling export { decodeKittyPrintable, @@ -56,11 +56,11 @@ export { matchesKey, parseKey, setKittyProtocolActive, -} from "./keys.js"; +} from "./keys.ts"; // Input buffering for batch splitting -export { StdinBuffer, type StdinBufferEventMap, type StdinBufferOptions } from "./stdin-buffer.js"; +export { StdinBuffer, type StdinBufferEventMap, type StdinBufferOptions } from "./stdin-buffer.ts"; // Terminal interface and implementations -export { ProcessTerminal, type Terminal } from "./terminal.js"; +export { ProcessTerminal, type Terminal } from "./terminal.ts"; // Terminal image support export { allocateImageId, @@ -88,7 +88,7 @@ export { setCapabilities, setCellDimensions, type TerminalCapabilities, -} from "./terminal-image.js"; +} from "./terminal-image.ts"; export { type Component, Container, @@ -101,6 +101,6 @@ export { type OverlayOptions, type SizeValue, TUI, -} from "./tui.js"; +} from "./tui.ts"; // Utilities -export { truncateToWidth, visibleWidth, wrapTextWithAnsi } from "./utils.js"; +export { truncateToWidth, visibleWidth, wrapTextWithAnsi } from "./utils.ts"; diff --git a/packages/tui/src/keybindings.ts b/packages/tui/src/keybindings.ts index 356554cff..789124ada 100644 --- a/packages/tui/src/keybindings.ts +++ b/packages/tui/src/keybindings.ts @@ -1,4 +1,4 @@ -import { type KeyId, matchesKey } from "./keys.js"; +import { type KeyId, matchesKey } from "./keys.ts"; /** * Global keybinding registry. diff --git a/packages/tui/src/terminal.ts b/packages/tui/src/terminal.ts index 60eb03593..9d24dcdd0 100644 --- a/packages/tui/src/terminal.ts +++ b/packages/tui/src/terminal.ts @@ -1,8 +1,8 @@ import * as fs from "node:fs"; import { createRequire } from "node:module"; import * as path from "node:path"; -import { setKittyProtocolActive } from "./keys.js"; -import { StdinBuffer } from "./stdin-buffer.js"; +import { setKittyProtocolActive } from "./keys.ts"; +import { StdinBuffer } from "./stdin-buffer.ts"; const cjsRequire = createRequire(import.meta.url); diff --git a/packages/tui/src/tui.ts b/packages/tui/src/tui.ts index 824ac82fe..2874ef02a 100644 --- a/packages/tui/src/tui.ts +++ b/packages/tui/src/tui.ts @@ -6,10 +6,10 @@ import * as fs from "node:fs"; import * as os from "node:os"; import * as path from "node:path"; import { performance } from "node:perf_hooks"; -import { isKeyRelease, matchesKey } from "./keys.js"; -import type { Terminal } from "./terminal.js"; -import { deleteKittyImage, getCapabilities, isImageLine, setCellDimensions } from "./terminal-image.js"; -import { extractSegments, normalizeTerminalOutput, sliceByColumn, sliceWithWidth, visibleWidth } from "./utils.js"; +import { isKeyRelease, matchesKey } from "./keys.ts"; +import type { Terminal } from "./terminal.ts"; +import { deleteKittyImage, getCapabilities, isImageLine, setCellDimensions } from "./terminal-image.ts"; +import { extractSegments, normalizeTerminalOutput, sliceByColumn, sliceWithWidth, visibleWidth } from "./utils.ts"; const KITTY_SEQUENCE_PREFIX = "\x1b_G"; diff --git a/packages/tui/test/markdown.test.ts b/packages/tui/test/markdown.test.ts index 4ba33dcaf..2e1ed022f 100644 --- a/packages/tui/test/markdown.test.ts +++ b/packages/tui/test/markdown.test.ts @@ -645,8 +645,11 @@ describe("Markdown component", () => { it("should not leak styles into following lines when rendered in TUI", async () => { class MarkdownWithInput implements Component { public markdownLineCount = 0; + private readonly markdown: Markdown; - constructor(private readonly markdown: Markdown) {} + constructor(markdown: Markdown) { + this.markdown = markdown; + } render(width: number): string[] { const lines = this.markdown.render(width); diff --git a/packages/tui/test/overlay-non-capturing.test.ts b/packages/tui/test/overlay-non-capturing.test.ts index c388814cb..a0a7a6767 100644 --- a/packages/tui/test/overlay-non-capturing.test.ts +++ b/packages/tui/test/overlay-non-capturing.test.ts @@ -5,7 +5,11 @@ import { TUI } from "../src/tui.js"; import { VirtualTerminal } from "./virtual-terminal.js"; class StaticOverlay implements Component { - constructor(private lines: string[]) {} + private lines: string[]; + + constructor(lines: string[]) { + this.lines = lines; + } render(): string[] { return this.lines; @@ -24,8 +28,11 @@ class EmptyContent implements Component { class FocusableOverlay implements Component, Focusable { focused = false; inputs: string[] = []; + private lines: string[]; - constructor(private lines: string[]) {} + constructor(lines: string[]) { + this.lines = lines; + } handleInput(data: string): void { this.inputs.push(data); diff --git a/packages/tui/test/overlay-options.test.ts b/packages/tui/test/overlay-options.test.ts index 45d909b63..942bddd37 100644 --- a/packages/tui/test/overlay-options.test.ts +++ b/packages/tui/test/overlay-options.test.ts @@ -5,10 +5,13 @@ import { TUI } from "../src/tui.js"; import { VirtualTerminal } from "./virtual-terminal.js"; class StaticOverlay implements Component { - constructor( - private lines: string[], - public requestedWidth?: number, - ) {} + private lines: string[]; + requestedWidth?: number; + + constructor(lines: string[], requestedWidth?: number) { + this.lines = lines; + this.requestedWidth = requestedWidth; + } render(width: number): string[] { // Store the width we were asked to render at for verification diff --git a/packages/tui/test/overlay-short-content.test.ts b/packages/tui/test/overlay-short-content.test.ts index 98c370297..7721ea00c 100644 --- a/packages/tui/test/overlay-short-content.test.ts +++ b/packages/tui/test/overlay-short-content.test.ts @@ -4,7 +4,12 @@ import { type Component, TUI } from "../src/tui.js"; import { VirtualTerminal } from "./virtual-terminal.js"; class SimpleContent implements Component { - constructor(private lines: string[]) {} + private lines: string[]; + + constructor(lines: string[]) { + this.lines = lines; + } + render(): string[] { return this.lines; } diff --git a/packages/tui/test/tui-overlay-style-leak.test.ts b/packages/tui/test/tui-overlay-style-leak.test.ts index 597133718..df93deefb 100644 --- a/packages/tui/test/tui-overlay-style-leak.test.ts +++ b/packages/tui/test/tui-overlay-style-leak.test.ts @@ -5,7 +5,11 @@ import { type Component, TUI } from "../src/tui.js"; import { VirtualTerminal } from "./virtual-terminal.js"; class StaticLines implements Component { - constructor(private readonly lines: string[]) {} + private readonly lines: string[]; + + constructor(lines: string[]) { + this.lines = lines; + } render(): string[] { return this.lines; @@ -15,7 +19,11 @@ class StaticLines implements Component { } class StaticOverlay implements Component { - constructor(private readonly line: string) {} + private readonly line: string; + + constructor(line: string) { + this.line = line; + } render(): string[] { return [this.line]; diff --git a/packages/web-ui/src/ChatPanel.ts b/packages/web-ui/src/ChatPanel.ts index 0a7a48238..bf86234e5 100644 --- a/packages/web-ui/src/ChatPanel.ts +++ b/packages/web-ui/src/ChatPanel.ts @@ -1,16 +1,16 @@ import { Badge } from "@mariozechner/mini-lit/dist/Badge.js"; import { html, LitElement } from "lit"; import { customElement, state } from "lit/decorators.js"; -import "./components/AgentInterface.js"; +import "./components/AgentInterface.ts"; import type { Agent, AgentTool } from "@earendil-works/pi-agent-core"; -import type { AgentInterface } from "./components/AgentInterface.js"; -import { ArtifactsRuntimeProvider } from "./components/sandbox/ArtifactsRuntimeProvider.js"; -import { AttachmentsRuntimeProvider } from "./components/sandbox/AttachmentsRuntimeProvider.js"; -import type { SandboxRuntimeProvider } from "./components/sandbox/SandboxRuntimeProvider.js"; -import { ArtifactsPanel, ArtifactsToolRenderer } from "./tools/artifacts/index.js"; -import { registerToolRenderer } from "./tools/renderer-registry.js"; -import type { Attachment } from "./utils/attachment-utils.js"; -import { i18n } from "./utils/i18n.js"; +import type { AgentInterface } from "./components/AgentInterface.ts"; +import { ArtifactsRuntimeProvider } from "./components/sandbox/ArtifactsRuntimeProvider.ts"; +import { AttachmentsRuntimeProvider } from "./components/sandbox/AttachmentsRuntimeProvider.ts"; +import type { SandboxRuntimeProvider } from "./components/sandbox/SandboxRuntimeProvider.ts"; +import { ArtifactsPanel, ArtifactsToolRenderer } from "./tools/artifacts/index.ts"; +import { registerToolRenderer } from "./tools/renderer-registry.ts"; +import type { Attachment } from "./utils/attachment-utils.ts"; +import { i18n } from "./utils/i18n.ts"; const BREAKPOINT = 800; // px - switch between overlay and side-by-side diff --git a/packages/web-ui/src/components/AgentInterface.ts b/packages/web-ui/src/components/AgentInterface.ts index 0a536e96c..672b80971 100644 --- a/packages/web-ui/src/components/AgentInterface.ts +++ b/packages/web-ui/src/components/AgentInterface.ts @@ -1,20 +1,20 @@ import { streamSimple, type ToolResultMessage, type Usage } from "@earendil-works/pi-ai"; import { html, LitElement } from "lit"; import { customElement, property, query } from "lit/decorators.js"; -import { ModelSelector } from "../dialogs/ModelSelector.js"; -import type { MessageEditor } from "./MessageEditor.js"; -import "./MessageEditor.js"; -import "./MessageList.js"; -import "./Messages.js"; // Import for side effects to register the custom elements -import { getAppStorage } from "../storage/app-storage.js"; -import "./StreamingMessageContainer.js"; +import { ModelSelector } from "../dialogs/ModelSelector.ts"; +import type { MessageEditor } from "./MessageEditor.ts"; +import "./MessageEditor.ts"; +import "./MessageList.ts"; +import "./Messages.ts"; // Import for side effects to register the custom elements +import { getAppStorage } from "../storage/app-storage.ts"; +import "./StreamingMessageContainer.ts"; import type { Agent, AgentEvent } from "@earendil-works/pi-agent-core"; -import type { Attachment } from "../utils/attachment-utils.js"; -import { formatUsage } from "../utils/format.js"; -import { i18n } from "../utils/i18n.js"; -import { createStreamFn } from "../utils/proxy-utils.js"; -import type { UserMessageWithAttachments } from "./Messages.js"; -import type { StreamingMessageContainer } from "./StreamingMessageContainer.js"; +import type { Attachment } from "../utils/attachment-utils.ts"; +import { formatUsage } from "../utils/format.ts"; +import { i18n } from "../utils/i18n.ts"; +import { createStreamFn } from "../utils/proxy-utils.ts"; +import type { UserMessageWithAttachments } from "./Messages.ts"; +import type { StreamingMessageContainer } from "./StreamingMessageContainer.ts"; @customElement("agent-interface") export class AgentInterface extends LitElement { diff --git a/packages/web-ui/src/components/AttachmentTile.ts b/packages/web-ui/src/components/AttachmentTile.ts index 823001d3c..31cacf790 100644 --- a/packages/web-ui/src/components/AttachmentTile.ts +++ b/packages/web-ui/src/components/AttachmentTile.ts @@ -3,9 +3,9 @@ import { LitElement } from "lit"; import { customElement, property } from "lit/decorators.js"; import { html } from "lit/html.js"; import { FileSpreadsheet, FileText, X } from "lucide"; -import { AttachmentOverlay } from "../dialogs/AttachmentOverlay.js"; -import type { Attachment } from "../utils/attachment-utils.js"; -import { i18n } from "../utils/i18n.js"; +import { AttachmentOverlay } from "../dialogs/AttachmentOverlay.ts"; +import type { Attachment } from "../utils/attachment-utils.ts"; +import { i18n } from "../utils/i18n.ts"; @customElement("attachment-tile") export class AttachmentTile extends LitElement { diff --git a/packages/web-ui/src/components/ConsoleBlock.ts b/packages/web-ui/src/components/ConsoleBlock.ts index 66f38b0b3..982f0f085 100644 --- a/packages/web-ui/src/components/ConsoleBlock.ts +++ b/packages/web-ui/src/components/ConsoleBlock.ts @@ -3,7 +3,7 @@ import { LitElement } from "lit"; import { property, state } from "lit/decorators.js"; import { html } from "lit/html.js"; import { Check, Copy } from "lucide"; -import { i18n } from "../utils/i18n.js"; +import { i18n } from "../utils/i18n.ts"; export class ConsoleBlock extends LitElement { @property() content: string = ""; diff --git a/packages/web-ui/src/components/CustomProviderCard.ts b/packages/web-ui/src/components/CustomProviderCard.ts index 1050b8553..b4f9da573 100644 --- a/packages/web-ui/src/components/CustomProviderCard.ts +++ b/packages/web-ui/src/components/CustomProviderCard.ts @@ -2,7 +2,7 @@ import { i18n } from "@mariozechner/mini-lit"; import { Button } from "@mariozechner/mini-lit/dist/Button.js"; import { html, LitElement, type TemplateResult } from "lit"; import { customElement, property } from "lit/decorators.js"; -import type { CustomProvider } from "../storage/stores/custom-providers-store.js"; +import type { CustomProvider } from "../storage/stores/custom-providers-store.ts"; @customElement("custom-provider-card") export class CustomProviderCard extends LitElement { diff --git a/packages/web-ui/src/components/Input.ts b/packages/web-ui/src/components/Input.ts index 112e08135..dff36891f 100644 --- a/packages/web-ui/src/components/Input.ts +++ b/packages/web-ui/src/components/Input.ts @@ -1,7 +1,7 @@ import { type BaseComponentProps, fc } from "@mariozechner/mini-lit/dist/mini.js"; import { html } from "lit"; import { type Ref, ref } from "lit/directives/ref.js"; -import { i18n } from "../utils/i18n.js"; +import { i18n } from "../utils/i18n.ts"; export type InputType = "text" | "email" | "password" | "number" | "url" | "tel" | "search"; export type InputSize = "sm" | "md" | "lg"; diff --git a/packages/web-ui/src/components/MessageEditor.ts b/packages/web-ui/src/components/MessageEditor.ts index e50d94019..d9a5124c1 100644 --- a/packages/web-ui/src/components/MessageEditor.ts +++ b/packages/web-ui/src/components/MessageEditor.ts @@ -6,9 +6,9 @@ import { html, LitElement } from "lit"; import { customElement, property, state } from "lit/decorators.js"; import { createRef, ref } from "lit/directives/ref.js"; import { Brain, Loader2, Paperclip, Send, Sparkles, Square } from "lucide"; -import { type Attachment, loadAttachment } from "../utils/attachment-utils.js"; -import { i18n } from "../utils/i18n.js"; -import "./AttachmentTile.js"; +import { type Attachment, loadAttachment } from "../utils/attachment-utils.ts"; +import { i18n } from "../utils/i18n.ts"; +import "./AttachmentTile.ts"; import type { ThinkingLevel } from "@earendil-works/pi-agent-core"; @customElement("message-editor") diff --git a/packages/web-ui/src/components/MessageList.ts b/packages/web-ui/src/components/MessageList.ts index 59cc69557..77723a3bf 100644 --- a/packages/web-ui/src/components/MessageList.ts +++ b/packages/web-ui/src/components/MessageList.ts @@ -6,7 +6,7 @@ import type { import { html, LitElement, type TemplateResult } from "lit"; import { property } from "lit/decorators.js"; import { repeat } from "lit/directives/repeat.js"; -import { renderMessage } from "./message-renderer-registry.js"; +import { renderMessage } from "./message-renderer-registry.ts"; export class MessageList extends LitElement { @property({ type: Array }) messages: AgentMessage[] = []; diff --git a/packages/web-ui/src/components/Messages.ts b/packages/web-ui/src/components/Messages.ts index 162375436..2809750fd 100644 --- a/packages/web-ui/src/components/Messages.ts +++ b/packages/web-ui/src/components/Messages.ts @@ -8,11 +8,11 @@ import type { } from "@earendil-works/pi-ai"; import { html, LitElement, type TemplateResult } from "lit"; import { customElement, property } from "lit/decorators.js"; -import { renderTool } from "../tools/index.js"; -import type { Attachment } from "../utils/attachment-utils.js"; -import { formatUsage } from "../utils/format.js"; -import { i18n } from "../utils/i18n.js"; -import "./ThinkingBlock.js"; +import { renderTool } from "../tools/index.ts"; +import type { Attachment } from "../utils/attachment-utils.ts"; +import { formatUsage } from "../utils/format.ts"; +import { i18n } from "../utils/i18n.ts"; +import "./ThinkingBlock.ts"; import type { AgentTool } from "@earendil-works/pi-agent-core"; export type UserMessageWithAttachments = { diff --git a/packages/web-ui/src/components/ProviderKeyInput.ts b/packages/web-ui/src/components/ProviderKeyInput.ts index c43d72d05..1b74f5987 100644 --- a/packages/web-ui/src/components/ProviderKeyInput.ts +++ b/packages/web-ui/src/components/ProviderKeyInput.ts @@ -4,9 +4,9 @@ import { Badge } from "@mariozechner/mini-lit/dist/Badge.js"; import { Button } from "@mariozechner/mini-lit/dist/Button.js"; import { html, LitElement } from "lit"; import { customElement, property, state } from "lit/decorators.js"; -import { getAppStorage } from "../storage/app-storage.js"; -import { applyProxyIfNeeded } from "../utils/proxy-utils.js"; -import { Input } from "./Input.js"; +import { getAppStorage } from "../storage/app-storage.ts"; +import { applyProxyIfNeeded } from "../utils/proxy-utils.ts"; +import { Input } from "./Input.ts"; // Test models for each provider const TEST_MODELS: Record = { diff --git a/packages/web-ui/src/components/SandboxedIframe.ts b/packages/web-ui/src/components/SandboxedIframe.ts index dd8f15ec3..3739c5e15 100644 --- a/packages/web-ui/src/components/SandboxedIframe.ts +++ b/packages/web-ui/src/components/SandboxedIframe.ts @@ -1,9 +1,9 @@ import { LitElement } from "lit"; import { customElement, property } from "lit/decorators.js"; -import { ConsoleRuntimeProvider } from "./sandbox/ConsoleRuntimeProvider.js"; -import { RuntimeMessageBridge } from "./sandbox/RuntimeMessageBridge.js"; -import { type MessageConsumer, RUNTIME_MESSAGE_ROUTER } from "./sandbox/RuntimeMessageRouter.js"; -import type { SandboxRuntimeProvider } from "./sandbox/SandboxRuntimeProvider.js"; +import { ConsoleRuntimeProvider } from "./sandbox/ConsoleRuntimeProvider.ts"; +import { RuntimeMessageBridge } from "./sandbox/RuntimeMessageBridge.ts"; +import { type MessageConsumer, RUNTIME_MESSAGE_ROUTER } from "./sandbox/RuntimeMessageRouter.ts"; +import type { SandboxRuntimeProvider } from "./sandbox/SandboxRuntimeProvider.ts"; export interface SandboxFile { fileName: string; diff --git a/packages/web-ui/src/components/sandbox/ArtifactsRuntimeProvider.ts b/packages/web-ui/src/components/sandbox/ArtifactsRuntimeProvider.ts index 95366a183..626fe0a7c 100644 --- a/packages/web-ui/src/components/sandbox/ArtifactsRuntimeProvider.ts +++ b/packages/web-ui/src/components/sandbox/ArtifactsRuntimeProvider.ts @@ -2,8 +2,8 @@ import type { AgentMessage } from "@earendil-works/pi-agent-core"; import { ARTIFACTS_RUNTIME_PROVIDER_DESCRIPTION_RO, ARTIFACTS_RUNTIME_PROVIDER_DESCRIPTION_RW, -} from "../../prompts/prompts.js"; -import type { SandboxRuntimeProvider } from "./SandboxRuntimeProvider.js"; +} from "../../prompts/prompts.ts"; +import type { SandboxRuntimeProvider } from "./SandboxRuntimeProvider.ts"; // Define minimal interface for ArtifactsPanel to avoid circular dependencies interface ArtifactsPanelLike { @@ -25,11 +25,15 @@ interface AgentLike { * Supports both online (extension) and offline (downloaded HTML) modes. */ export class ArtifactsRuntimeProvider implements SandboxRuntimeProvider { - constructor( - private artifactsPanel: ArtifactsPanelLike, - private agent?: AgentLike, - private readWrite: boolean = true, - ) {} + private artifactsPanel: ArtifactsPanelLike; + private agent?: AgentLike; + private readWrite: boolean; + + constructor(artifactsPanel: ArtifactsPanelLike, agent?: AgentLike, readWrite: boolean = true) { + this.artifactsPanel = artifactsPanel; + this.agent = agent; + this.readWrite = readWrite; + } getData(): Record { // Inject artifact snapshot for offline mode diff --git a/packages/web-ui/src/components/sandbox/AttachmentsRuntimeProvider.ts b/packages/web-ui/src/components/sandbox/AttachmentsRuntimeProvider.ts index 9c8b3d7d5..b706a5282 100644 --- a/packages/web-ui/src/components/sandbox/AttachmentsRuntimeProvider.ts +++ b/packages/web-ui/src/components/sandbox/AttachmentsRuntimeProvider.ts @@ -1,6 +1,6 @@ -import { ATTACHMENTS_RUNTIME_DESCRIPTION } from "../../prompts/prompts.js"; -import type { Attachment } from "../../utils/attachment-utils.js"; -import type { SandboxRuntimeProvider } from "./SandboxRuntimeProvider.js"; +import { ATTACHMENTS_RUNTIME_DESCRIPTION } from "../../prompts/prompts.ts"; +import type { Attachment } from "../../utils/attachment-utils.ts"; +import type { SandboxRuntimeProvider } from "./SandboxRuntimeProvider.ts"; /** * Attachments Runtime Provider @@ -10,7 +10,11 @@ import type { SandboxRuntimeProvider } from "./SandboxRuntimeProvider.js"; * Attachments are read-only snapshot data - no messaging needed. */ export class AttachmentsRuntimeProvider implements SandboxRuntimeProvider { - constructor(private attachments: Attachment[]) {} + private attachments: Attachment[]; + + constructor(attachments: Attachment[]) { + this.attachments = attachments; + } getData(): Record { const attachmentsData = this.attachments.map((a) => ({ diff --git a/packages/web-ui/src/components/sandbox/ConsoleRuntimeProvider.ts b/packages/web-ui/src/components/sandbox/ConsoleRuntimeProvider.ts index 326361c7c..18cc3c1a7 100644 --- a/packages/web-ui/src/components/sandbox/ConsoleRuntimeProvider.ts +++ b/packages/web-ui/src/components/sandbox/ConsoleRuntimeProvider.ts @@ -1,4 +1,4 @@ -import type { SandboxRuntimeProvider } from "./SandboxRuntimeProvider.js"; +import type { SandboxRuntimeProvider } from "./SandboxRuntimeProvider.ts"; export interface ConsoleLog { type: "log" | "warn" | "error" | "info"; diff --git a/packages/web-ui/src/components/sandbox/FileDownloadRuntimeProvider.ts b/packages/web-ui/src/components/sandbox/FileDownloadRuntimeProvider.ts index 824ae1259..c2e1f2959 100644 --- a/packages/web-ui/src/components/sandbox/FileDownloadRuntimeProvider.ts +++ b/packages/web-ui/src/components/sandbox/FileDownloadRuntimeProvider.ts @@ -1,4 +1,4 @@ -import type { SandboxRuntimeProvider } from "./SandboxRuntimeProvider.js"; +import type { SandboxRuntimeProvider } from "./SandboxRuntimeProvider.ts"; export interface DownloadableFile { fileName: string; diff --git a/packages/web-ui/src/components/sandbox/RuntimeMessageRouter.ts b/packages/web-ui/src/components/sandbox/RuntimeMessageRouter.ts index 3ab84b04e..0b6c6f00a 100644 --- a/packages/web-ui/src/components/sandbox/RuntimeMessageRouter.ts +++ b/packages/web-ui/src/components/sandbox/RuntimeMessageRouter.ts @@ -1,4 +1,4 @@ -import type { SandboxRuntimeProvider } from "./SandboxRuntimeProvider.js"; +import type { SandboxRuntimeProvider } from "./SandboxRuntimeProvider.ts"; // Type declaration for chrome extension API (when available) declare const chrome: any; diff --git a/packages/web-ui/src/dialogs/ApiKeyPromptDialog.ts b/packages/web-ui/src/dialogs/ApiKeyPromptDialog.ts index 7a45c561c..fe7d52c4d 100644 --- a/packages/web-ui/src/dialogs/ApiKeyPromptDialog.ts +++ b/packages/web-ui/src/dialogs/ApiKeyPromptDialog.ts @@ -1,10 +1,10 @@ import { customElement, state } from "lit/decorators.js"; -import "../components/ProviderKeyInput.js"; +import "../components/ProviderKeyInput.ts"; import { DialogContent, DialogHeader } from "@mariozechner/mini-lit/dist/Dialog.js"; import { DialogBase } from "@mariozechner/mini-lit/dist/DialogBase.js"; import { html } from "lit"; -import { getAppStorage } from "../storage/app-storage.js"; -import { i18n } from "../utils/i18n.js"; +import { getAppStorage } from "../storage/app-storage.ts"; +import { i18n } from "../utils/i18n.ts"; @customElement("api-key-prompt-dialog") export class ApiKeyPromptDialog extends DialogBase { diff --git a/packages/web-ui/src/dialogs/AttachmentOverlay.ts b/packages/web-ui/src/dialogs/AttachmentOverlay.ts index 4ec7734c1..329a98f95 100644 --- a/packages/web-ui/src/dialogs/AttachmentOverlay.ts +++ b/packages/web-ui/src/dialogs/AttachmentOverlay.ts @@ -7,8 +7,8 @@ import { state } from "lit/decorators.js"; import { Download, X } from "lucide"; import * as pdfjsLib from "pdfjs-dist"; import * as XLSX from "xlsx"; -import type { Attachment } from "../utils/attachment-utils.js"; -import { i18n } from "../utils/i18n.js"; +import type { Attachment } from "../utils/attachment-utils.ts"; +import { i18n } from "../utils/i18n.ts"; type FileType = "image" | "pdf" | "docx" | "pptx" | "excel" | "text"; diff --git a/packages/web-ui/src/dialogs/CustomProviderDialog.ts b/packages/web-ui/src/dialogs/CustomProviderDialog.ts index 2db0ce60a..c39777b21 100644 --- a/packages/web-ui/src/dialogs/CustomProviderDialog.ts +++ b/packages/web-ui/src/dialogs/CustomProviderDialog.ts @@ -7,9 +7,9 @@ import { Label } from "@mariozechner/mini-lit/dist/Label.js"; import { Select } from "@mariozechner/mini-lit/dist/Select.js"; import { html, type TemplateResult } from "lit"; import { state } from "lit/decorators.js"; -import { getAppStorage } from "../storage/app-storage.js"; -import type { CustomProvider, CustomProviderType } from "../storage/stores/custom-providers-store.js"; -import { discoverModels } from "../utils/model-discovery.js"; +import { getAppStorage } from "../storage/app-storage.ts"; +import type { CustomProvider, CustomProviderType } from "../storage/stores/custom-providers-store.ts"; +import { discoverModels } from "../utils/model-discovery.ts"; export class CustomProviderDialog extends DialogBase { private provider?: CustomProvider; diff --git a/packages/web-ui/src/dialogs/ModelSelector.ts b/packages/web-ui/src/dialogs/ModelSelector.ts index 1884765f9..d23d2484c 100644 --- a/packages/web-ui/src/dialogs/ModelSelector.ts +++ b/packages/web-ui/src/dialogs/ModelSelector.ts @@ -8,12 +8,12 @@ import { html, type PropertyValues, type TemplateResult } from "lit"; import { customElement, state } from "lit/decorators.js"; import { createRef, ref } from "lit/directives/ref.js"; import { Brain, Image as ImageIcon } from "lucide"; -import { Input } from "../components/Input.js"; -import { getAppStorage } from "../storage/app-storage.js"; -import type { AutoDiscoveryProviderType } from "../storage/stores/custom-providers-store.js"; -import { formatModelCost } from "../utils/format.js"; -import { i18n } from "../utils/i18n.js"; -import { discoverModels } from "../utils/model-discovery.js"; +import { Input } from "../components/Input.ts"; +import { getAppStorage } from "../storage/app-storage.ts"; +import type { AutoDiscoveryProviderType } from "../storage/stores/custom-providers-store.ts"; +import { formatModelCost } from "../utils/format.ts"; +import { i18n } from "../utils/i18n.ts"; +import { discoverModels } from "../utils/model-discovery.ts"; /** * Score a query against a text using subsequence matching. diff --git a/packages/web-ui/src/dialogs/PersistentStorageDialog.ts b/packages/web-ui/src/dialogs/PersistentStorageDialog.ts index f5c83a136..8db727645 100644 --- a/packages/web-ui/src/dialogs/PersistentStorageDialog.ts +++ b/packages/web-ui/src/dialogs/PersistentStorageDialog.ts @@ -3,7 +3,7 @@ import { DialogContent, DialogHeader } from "@mariozechner/mini-lit/dist/Dialog. import { DialogBase } from "@mariozechner/mini-lit/dist/DialogBase.js"; import { html } from "lit"; import { customElement, state } from "lit/decorators.js"; -import { i18n } from "../utils/i18n.js"; +import { i18n } from "../utils/i18n.ts"; @customElement("persistent-storage-dialog") export class PersistentStorageDialog extends DialogBase { diff --git a/packages/web-ui/src/dialogs/ProvidersModelsTab.ts b/packages/web-ui/src/dialogs/ProvidersModelsTab.ts index 440205c3d..b2eee51fc 100644 --- a/packages/web-ui/src/dialogs/ProvidersModelsTab.ts +++ b/packages/web-ui/src/dialogs/ProvidersModelsTab.ts @@ -3,17 +3,17 @@ import { i18n } from "@mariozechner/mini-lit"; import { Select } from "@mariozechner/mini-lit/dist/Select.js"; import { html, type TemplateResult } from "lit"; import { customElement, state } from "lit/decorators.js"; -import "../components/CustomProviderCard.js"; -import "../components/ProviderKeyInput.js"; -import { getAppStorage } from "../storage/app-storage.js"; +import "../components/CustomProviderCard.ts"; +import "../components/ProviderKeyInput.ts"; +import { getAppStorage } from "../storage/app-storage.ts"; import type { AutoDiscoveryProviderType, CustomProvider, CustomProviderType, -} from "../storage/stores/custom-providers-store.js"; -import { discoverModels } from "../utils/model-discovery.js"; -import { CustomProviderDialog } from "./CustomProviderDialog.js"; -import { SettingsTab } from "./SettingsDialog.js"; +} from "../storage/stores/custom-providers-store.ts"; +import { discoverModels } from "../utils/model-discovery.ts"; +import { CustomProviderDialog } from "./CustomProviderDialog.ts"; +import { SettingsTab } from "./SettingsDialog.ts"; @customElement("providers-models-tab") export class ProvidersModelsTab extends SettingsTab { diff --git a/packages/web-ui/src/dialogs/SessionListDialog.ts b/packages/web-ui/src/dialogs/SessionListDialog.ts index 66908d59a..b3ad3108e 100644 --- a/packages/web-ui/src/dialogs/SessionListDialog.ts +++ b/packages/web-ui/src/dialogs/SessionListDialog.ts @@ -2,10 +2,10 @@ import { DialogContent, DialogHeader } from "@mariozechner/mini-lit/dist/Dialog. import { DialogBase } from "@mariozechner/mini-lit/dist/DialogBase.js"; import { html } from "lit"; import { customElement, state } from "lit/decorators.js"; -import { getAppStorage } from "../storage/app-storage.js"; -import type { SessionMetadata } from "../storage/types.js"; -import { formatUsage } from "../utils/format.js"; -import { i18n } from "../utils/i18n.js"; +import { getAppStorage } from "../storage/app-storage.ts"; +import type { SessionMetadata } from "../storage/types.ts"; +import { formatUsage } from "../utils/format.ts"; +import { i18n } from "../utils/i18n.ts"; @customElement("session-list-dialog") export class SessionListDialog extends DialogBase { diff --git a/packages/web-ui/src/dialogs/SettingsDialog.ts b/packages/web-ui/src/dialogs/SettingsDialog.ts index 7f671b0a1..6d9148277 100644 --- a/packages/web-ui/src/dialogs/SettingsDialog.ts +++ b/packages/web-ui/src/dialogs/SettingsDialog.ts @@ -6,8 +6,8 @@ import { Label } from "@mariozechner/mini-lit/dist/Label.js"; import { Switch } from "@mariozechner/mini-lit/dist/Switch.js"; import { html, LitElement, type TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators.js"; -import "../components/ProviderKeyInput.js"; -import { getAppStorage } from "../storage/app-storage.js"; +import "../components/ProviderKeyInput.ts"; +import { getAppStorage } from "../storage/app-storage.ts"; // Base class for settings tabs export abstract class SettingsTab extends LitElement { diff --git a/packages/web-ui/src/index.ts b/packages/web-ui/src/index.ts index c808cde20..22ba992e2 100644 --- a/packages/web-ui/src/index.ts +++ b/packages/web-ui/src/index.ts @@ -2,18 +2,18 @@ export type { Agent, AgentMessage, AgentState, ThinkingLevel } from "@earendil-works/pi-agent-core"; export type { Model } from "@earendil-works/pi-ai"; -export { ChatPanel } from "./ChatPanel.js"; +export { ChatPanel } from "./ChatPanel.ts"; // Components -export { AgentInterface } from "./components/AgentInterface.js"; -export { AttachmentTile } from "./components/AttachmentTile.js"; -export { ConsoleBlock } from "./components/ConsoleBlock.js"; -export { CustomProviderCard } from "./components/CustomProviderCard.js"; -export { ExpandableSection } from "./components/ExpandableSection.js"; -export { Input } from "./components/Input.js"; -export { MessageEditor } from "./components/MessageEditor.js"; -export { MessageList } from "./components/MessageList.js"; +export { AgentInterface } from "./components/AgentInterface.ts"; +export { AttachmentTile } from "./components/AttachmentTile.ts"; +export { ConsoleBlock } from "./components/ConsoleBlock.ts"; +export { CustomProviderCard } from "./components/CustomProviderCard.ts"; +export { ExpandableSection } from "./components/ExpandableSection.ts"; +export { Input } from "./components/Input.ts"; +export { MessageEditor } from "./components/MessageEditor.ts"; +export { MessageList } from "./components/MessageList.ts"; // Message components -export type { ArtifactMessage, UserMessageWithAttachments } from "./components/Messages.js"; +export type { ArtifactMessage, UserMessageWithAttachments } from "./components/Messages.ts"; export { AbortedMessage, AssistantMessage, @@ -24,7 +24,7 @@ export { ToolMessage, ToolMessageDebugView, UserMessage, -} from "./components/Messages.js"; +} from "./components/Messages.ts"; // Message renderer registry export { getMessageRenderer, @@ -32,55 +32,55 @@ export { type MessageRole, registerMessageRenderer, renderMessage, -} from "./components/message-renderer-registry.js"; -export { ProviderKeyInput } from "./components/ProviderKeyInput.js"; +} from "./components/message-renderer-registry.ts"; +export { ProviderKeyInput } from "./components/ProviderKeyInput.ts"; export { type SandboxFile, SandboxIframe, type SandboxResult, type SandboxUrlProvider, -} from "./components/SandboxedIframe.js"; -export { StreamingMessageContainer } from "./components/StreamingMessageContainer.js"; +} from "./components/SandboxedIframe.ts"; +export { StreamingMessageContainer } from "./components/StreamingMessageContainer.ts"; // Sandbox Runtime Providers -export { ArtifactsRuntimeProvider } from "./components/sandbox/ArtifactsRuntimeProvider.js"; -export { AttachmentsRuntimeProvider } from "./components/sandbox/AttachmentsRuntimeProvider.js"; -export { type ConsoleLog, ConsoleRuntimeProvider } from "./components/sandbox/ConsoleRuntimeProvider.js"; +export { ArtifactsRuntimeProvider } from "./components/sandbox/ArtifactsRuntimeProvider.ts"; +export { AttachmentsRuntimeProvider } from "./components/sandbox/AttachmentsRuntimeProvider.ts"; +export { type ConsoleLog, ConsoleRuntimeProvider } from "./components/sandbox/ConsoleRuntimeProvider.ts"; export { type DownloadableFile, FileDownloadRuntimeProvider, -} from "./components/sandbox/FileDownloadRuntimeProvider.js"; -export { RuntimeMessageBridge } from "./components/sandbox/RuntimeMessageBridge.js"; -export { RUNTIME_MESSAGE_ROUTER } from "./components/sandbox/RuntimeMessageRouter.js"; -export type { SandboxRuntimeProvider } from "./components/sandbox/SandboxRuntimeProvider.js"; -export { ThinkingBlock } from "./components/ThinkingBlock.js"; -export { ApiKeyPromptDialog } from "./dialogs/ApiKeyPromptDialog.js"; -export { AttachmentOverlay } from "./dialogs/AttachmentOverlay.js"; -export { CustomProviderDialog } from "./dialogs/CustomProviderDialog.js"; +} from "./components/sandbox/FileDownloadRuntimeProvider.ts"; +export { RuntimeMessageBridge } from "./components/sandbox/RuntimeMessageBridge.ts"; +export { RUNTIME_MESSAGE_ROUTER } from "./components/sandbox/RuntimeMessageRouter.ts"; +export type { SandboxRuntimeProvider } from "./components/sandbox/SandboxRuntimeProvider.ts"; +export { ThinkingBlock } from "./components/ThinkingBlock.ts"; +export { ApiKeyPromptDialog } from "./dialogs/ApiKeyPromptDialog.ts"; +export { AttachmentOverlay } from "./dialogs/AttachmentOverlay.ts"; +export { CustomProviderDialog } from "./dialogs/CustomProviderDialog.ts"; // Dialogs -export { ModelSelector } from "./dialogs/ModelSelector.js"; -export { PersistentStorageDialog } from "./dialogs/PersistentStorageDialog.js"; -export { ProvidersModelsTab } from "./dialogs/ProvidersModelsTab.js"; -export { SessionListDialog } from "./dialogs/SessionListDialog.js"; -export { ApiKeysTab, ProxyTab, SettingsDialog, SettingsTab } from "./dialogs/SettingsDialog.js"; +export { ModelSelector } from "./dialogs/ModelSelector.ts"; +export { PersistentStorageDialog } from "./dialogs/PersistentStorageDialog.ts"; +export { ProvidersModelsTab } from "./dialogs/ProvidersModelsTab.ts"; +export { SessionListDialog } from "./dialogs/SessionListDialog.ts"; +export { ApiKeysTab, ProxyTab, SettingsDialog, SettingsTab } from "./dialogs/SettingsDialog.ts"; // Prompts export { ARTIFACTS_RUNTIME_PROVIDER_DESCRIPTION_RO, ARTIFACTS_RUNTIME_PROVIDER_DESCRIPTION_RW, ATTACHMENTS_RUNTIME_DESCRIPTION, -} from "./prompts/prompts.js"; +} from "./prompts/prompts.ts"; // Storage -export { AppStorage, getAppStorage, setAppStorage } from "./storage/app-storage.js"; -export { IndexedDBStorageBackend } from "./storage/backends/indexeddb-storage-backend.js"; -export { Store } from "./storage/store.js"; +export { AppStorage, getAppStorage, setAppStorage } from "./storage/app-storage.ts"; +export { IndexedDBStorageBackend } from "./storage/backends/indexeddb-storage-backend.ts"; +export { Store } from "./storage/store.ts"; export type { AutoDiscoveryProviderType, CustomProvider, CustomProviderType, -} from "./storage/stores/custom-providers-store.js"; -export { CustomProvidersStore } from "./storage/stores/custom-providers-store.js"; -export { ProviderKeysStore } from "./storage/stores/provider-keys-store.js"; -export { SessionsStore } from "./storage/stores/sessions-store.js"; -export { SettingsStore } from "./storage/stores/settings-store.js"; +} from "./storage/stores/custom-providers-store.ts"; +export { CustomProvidersStore } from "./storage/stores/custom-providers-store.ts"; +export { ProviderKeysStore } from "./storage/stores/provider-keys-store.ts"; +export { SessionsStore } from "./storage/stores/sessions-store.ts"; +export { SettingsStore } from "./storage/stores/settings-store.ts"; export type { IndexConfig, IndexedDBConfig, @@ -89,32 +89,32 @@ export type { StorageBackend, StorageTransaction, StoreConfig, -} from "./storage/types.js"; +} from "./storage/types.ts"; // Artifacts -export { ArtifactElement } from "./tools/artifacts/ArtifactElement.js"; -export { ArtifactPill } from "./tools/artifacts/ArtifactPill.js"; -export { type Artifact, ArtifactsPanel, type ArtifactsParams } from "./tools/artifacts/artifacts.js"; -export { ArtifactsToolRenderer } from "./tools/artifacts/artifacts-tool-renderer.js"; -export { HtmlArtifact } from "./tools/artifacts/HtmlArtifact.js"; -export { ImageArtifact } from "./tools/artifacts/ImageArtifact.js"; -export { MarkdownArtifact } from "./tools/artifacts/MarkdownArtifact.js"; -export { SvgArtifact } from "./tools/artifacts/SvgArtifact.js"; -export { TextArtifact } from "./tools/artifacts/TextArtifact.js"; -export { createExtractDocumentTool, extractDocumentTool } from "./tools/extract-document.js"; +export { ArtifactElement } from "./tools/artifacts/ArtifactElement.ts"; +export { ArtifactPill } from "./tools/artifacts/ArtifactPill.ts"; +export { type Artifact, ArtifactsPanel, type ArtifactsParams } from "./tools/artifacts/artifacts.ts"; +export { ArtifactsToolRenderer } from "./tools/artifacts/artifacts-tool-renderer.ts"; +export { HtmlArtifact } from "./tools/artifacts/HtmlArtifact.ts"; +export { ImageArtifact } from "./tools/artifacts/ImageArtifact.ts"; +export { MarkdownArtifact } from "./tools/artifacts/MarkdownArtifact.ts"; +export { SvgArtifact } from "./tools/artifacts/SvgArtifact.ts"; +export { TextArtifact } from "./tools/artifacts/TextArtifact.ts"; +export { createExtractDocumentTool, extractDocumentTool } from "./tools/extract-document.ts"; // Tools -export { getToolRenderer, registerToolRenderer, renderTool, setShowJsonMode } from "./tools/index.js"; -export { createJavaScriptReplTool, javascriptReplTool } from "./tools/javascript-repl.js"; -export { renderCollapsibleHeader, renderHeader } from "./tools/renderer-registry.js"; -export { BashRenderer } from "./tools/renderers/BashRenderer.js"; -export { CalculateRenderer } from "./tools/renderers/CalculateRenderer.js"; +export { getToolRenderer, registerToolRenderer, renderTool, setShowJsonMode } from "./tools/index.ts"; +export { createJavaScriptReplTool, javascriptReplTool } from "./tools/javascript-repl.ts"; +export { renderCollapsibleHeader, renderHeader } from "./tools/renderer-registry.ts"; +export { BashRenderer } from "./tools/renderers/BashRenderer.ts"; +export { CalculateRenderer } from "./tools/renderers/CalculateRenderer.ts"; // Tool renderers -export { DefaultRenderer } from "./tools/renderers/DefaultRenderer.js"; -export { GetCurrentTimeRenderer } from "./tools/renderers/GetCurrentTimeRenderer.js"; -export type { ToolRenderer, ToolRenderResult } from "./tools/types.js"; -export type { Attachment } from "./utils/attachment-utils.js"; +export { DefaultRenderer } from "./tools/renderers/DefaultRenderer.ts"; +export { GetCurrentTimeRenderer } from "./tools/renderers/GetCurrentTimeRenderer.ts"; +export type { ToolRenderer, ToolRenderResult } from "./tools/types.ts"; +export type { Attachment } from "./utils/attachment-utils.ts"; // Utils -export { loadAttachment } from "./utils/attachment-utils.js"; -export { clearAuthToken, getAuthToken } from "./utils/auth-token.js"; -export { formatCost, formatModelCost, formatTokenCount, formatUsage } from "./utils/format.js"; -export { i18n, setLanguage, translations } from "./utils/i18n.js"; -export { applyProxyIfNeeded, createStreamFn, isCorsError, shouldUseProxyForProvider } from "./utils/proxy-utils.js"; +export { loadAttachment } from "./utils/attachment-utils.ts"; +export { clearAuthToken, getAuthToken } from "./utils/auth-token.ts"; +export { formatCost, formatModelCost, formatTokenCount, formatUsage } from "./utils/format.ts"; +export { i18n, setLanguage, translations } from "./utils/i18n.ts"; +export { applyProxyIfNeeded, createStreamFn, isCorsError, shouldUseProxyForProvider } from "./utils/proxy-utils.ts"; diff --git a/packages/web-ui/src/storage/app-storage.ts b/packages/web-ui/src/storage/app-storage.ts index 420104d18..cda5d3efd 100644 --- a/packages/web-ui/src/storage/app-storage.ts +++ b/packages/web-ui/src/storage/app-storage.ts @@ -1,8 +1,8 @@ -import type { CustomProvidersStore } from "./stores/custom-providers-store.js"; -import type { ProviderKeysStore } from "./stores/provider-keys-store.js"; -import type { SessionsStore } from "./stores/sessions-store.js"; -import type { SettingsStore } from "./stores/settings-store.js"; -import type { StorageBackend } from "./types.js"; +import type { CustomProvidersStore } from "./stores/custom-providers-store.ts"; +import type { ProviderKeysStore } from "./stores/provider-keys-store.ts"; +import type { SessionsStore } from "./stores/sessions-store.ts"; +import type { SettingsStore } from "./stores/settings-store.ts"; +import type { StorageBackend } from "./types.ts"; /** * High-level storage API providing access to all storage operations. diff --git a/packages/web-ui/src/storage/backends/indexeddb-storage-backend.ts b/packages/web-ui/src/storage/backends/indexeddb-storage-backend.ts index 619c41d96..0950db112 100644 --- a/packages/web-ui/src/storage/backends/indexeddb-storage-backend.ts +++ b/packages/web-ui/src/storage/backends/indexeddb-storage-backend.ts @@ -1,4 +1,4 @@ -import type { IndexedDBConfig, StorageBackend, StorageTransaction } from "../types.js"; +import type { IndexedDBConfig, StorageBackend, StorageTransaction } from "../types.ts"; /** * IndexedDB implementation of StorageBackend. @@ -6,8 +6,11 @@ import type { IndexedDBConfig, StorageBackend, StorageTransaction } from "../typ */ export class IndexedDBStorageBackend implements StorageBackend { private dbPromise: Promise | null = null; + private config: IndexedDBConfig; - constructor(private config: IndexedDBConfig) {} + constructor(config: IndexedDBConfig) { + this.config = config; + } private async getDB(): Promise { if (!this.dbPromise) { diff --git a/packages/web-ui/src/storage/store.ts b/packages/web-ui/src/storage/store.ts index b5ea8b08f..60bb4563a 100644 --- a/packages/web-ui/src/storage/store.ts +++ b/packages/web-ui/src/storage/store.ts @@ -1,4 +1,4 @@ -import type { StorageBackend, StoreConfig } from "./types.js"; +import type { StorageBackend, StoreConfig } from "./types.ts"; /** * Base class for all storage stores. diff --git a/packages/web-ui/src/storage/stores/custom-providers-store.ts b/packages/web-ui/src/storage/stores/custom-providers-store.ts index 5a686b624..de02f23e1 100644 --- a/packages/web-ui/src/storage/stores/custom-providers-store.ts +++ b/packages/web-ui/src/storage/stores/custom-providers-store.ts @@ -1,6 +1,6 @@ import type { Model } from "@earendil-works/pi-ai"; -import { Store } from "../store.js"; -import type { StoreConfig } from "../types.js"; +import { Store } from "../store.ts"; +import type { StoreConfig } from "../types.ts"; export type AutoDiscoveryProviderType = "ollama" | "llama.cpp" | "vllm" | "lmstudio"; diff --git a/packages/web-ui/src/storage/stores/provider-keys-store.ts b/packages/web-ui/src/storage/stores/provider-keys-store.ts index 41cf88857..4ac1769c3 100644 --- a/packages/web-ui/src/storage/stores/provider-keys-store.ts +++ b/packages/web-ui/src/storage/stores/provider-keys-store.ts @@ -1,5 +1,5 @@ -import { Store } from "../store.js"; -import type { StoreConfig } from "../types.js"; +import { Store } from "../store.ts"; +import type { StoreConfig } from "../types.ts"; /** * Store for LLM provider API keys (Anthropic, OpenAI, etc.). diff --git a/packages/web-ui/src/storage/stores/sessions-store.ts b/packages/web-ui/src/storage/stores/sessions-store.ts index d244f9558..3fc400662 100644 --- a/packages/web-ui/src/storage/stores/sessions-store.ts +++ b/packages/web-ui/src/storage/stores/sessions-store.ts @@ -1,6 +1,6 @@ import type { AgentState } from "@earendil-works/pi-agent-core"; -import { Store } from "../store.js"; -import type { SessionData, SessionMetadata, StoreConfig } from "../types.js"; +import { Store } from "../store.ts"; +import type { SessionData, SessionMetadata, StoreConfig } from "../types.ts"; /** * Store for chat sessions (data and metadata). diff --git a/packages/web-ui/src/storage/stores/settings-store.ts b/packages/web-ui/src/storage/stores/settings-store.ts index f2f3181eb..38d4f4323 100644 --- a/packages/web-ui/src/storage/stores/settings-store.ts +++ b/packages/web-ui/src/storage/stores/settings-store.ts @@ -1,5 +1,5 @@ -import { Store } from "../store.js"; -import type { StoreConfig } from "../types.js"; +import { Store } from "../store.ts"; +import type { StoreConfig } from "../types.ts"; /** * Store for application settings (theme, proxy config, etc.). diff --git a/packages/web-ui/src/tools/artifacts/ArtifactPill.ts b/packages/web-ui/src/tools/artifacts/ArtifactPill.ts index 13078fcdf..28292771f 100644 --- a/packages/web-ui/src/tools/artifacts/ArtifactPill.ts +++ b/packages/web-ui/src/tools/artifacts/ArtifactPill.ts @@ -1,7 +1,7 @@ import { icon } from "@mariozechner/mini-lit"; import { html, type TemplateResult } from "lit"; import { FileCode2 } from "lucide"; -import type { ArtifactsPanel } from "./artifacts.js"; +import type { ArtifactsPanel } from "./artifacts.ts"; export function ArtifactPill(filename: string, artifactsPanel?: ArtifactsPanel): TemplateResult { const handleClick = (e: Event) => { diff --git a/packages/web-ui/src/tools/artifacts/Console.ts b/packages/web-ui/src/tools/artifacts/Console.ts index 287ed043a..809c77286 100644 --- a/packages/web-ui/src/tools/artifacts/Console.ts +++ b/packages/web-ui/src/tools/artifacts/Console.ts @@ -5,7 +5,7 @@ import { customElement, property, state } from "lit/decorators.js"; import { createRef, type Ref, ref } from "lit/directives/ref.js"; import { repeat } from "lit/directives/repeat.js"; import { ChevronDown, ChevronRight, ChevronsDown, Lock } from "lucide"; -import { i18n } from "../../utils/i18n.js"; +import { i18n } from "../../utils/i18n.ts"; interface LogEntry { type: "log" | "error"; diff --git a/packages/web-ui/src/tools/artifacts/DocxArtifact.ts b/packages/web-ui/src/tools/artifacts/DocxArtifact.ts index 0d9e22c43..97f52c7d8 100644 --- a/packages/web-ui/src/tools/artifacts/DocxArtifact.ts +++ b/packages/web-ui/src/tools/artifacts/DocxArtifact.ts @@ -2,8 +2,8 @@ import { DownloadButton } from "@mariozechner/mini-lit/dist/DownloadButton.js"; import { renderAsync } from "docx-preview"; import { html, type TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators.js"; -import { i18n } from "../../utils/i18n.js"; -import { ArtifactElement } from "./ArtifactElement.js"; +import { i18n } from "../../utils/i18n.ts"; +import { ArtifactElement } from "./ArtifactElement.ts"; @customElement("docx-artifact") export class DocxArtifact extends ArtifactElement { diff --git a/packages/web-ui/src/tools/artifacts/ExcelArtifact.ts b/packages/web-ui/src/tools/artifacts/ExcelArtifact.ts index dd6d41d7b..cd488d7f2 100644 --- a/packages/web-ui/src/tools/artifacts/ExcelArtifact.ts +++ b/packages/web-ui/src/tools/artifacts/ExcelArtifact.ts @@ -2,8 +2,8 @@ import { DownloadButton } from "@mariozechner/mini-lit/dist/DownloadButton.js"; import { html, type TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators.js"; import * as XLSX from "xlsx"; -import { i18n } from "../../utils/i18n.js"; -import { ArtifactElement } from "./ArtifactElement.js"; +import { i18n } from "../../utils/i18n.ts"; +import { ArtifactElement } from "./ArtifactElement.ts"; @customElement("excel-artifact") export class ExcelArtifact extends ArtifactElement { diff --git a/packages/web-ui/src/tools/artifacts/GenericArtifact.ts b/packages/web-ui/src/tools/artifacts/GenericArtifact.ts index 597615e51..43c8939c1 100644 --- a/packages/web-ui/src/tools/artifacts/GenericArtifact.ts +++ b/packages/web-ui/src/tools/artifacts/GenericArtifact.ts @@ -1,8 +1,8 @@ import { DownloadButton } from "@mariozechner/mini-lit/dist/DownloadButton.js"; import { html, type TemplateResult } from "lit"; import { customElement, property } from "lit/decorators.js"; -import { i18n } from "../../utils/i18n.js"; -import { ArtifactElement } from "./ArtifactElement.js"; +import { i18n } from "../../utils/i18n.ts"; +import { ArtifactElement } from "./ArtifactElement.ts"; @customElement("generic-artifact") export class GenericArtifact extends ArtifactElement { diff --git a/packages/web-ui/src/tools/artifacts/HtmlArtifact.ts b/packages/web-ui/src/tools/artifacts/HtmlArtifact.ts index f4bf36d75..ca13cb2e5 100644 --- a/packages/web-ui/src/tools/artifacts/HtmlArtifact.ts +++ b/packages/web-ui/src/tools/artifacts/HtmlArtifact.ts @@ -4,14 +4,14 @@ import { customElement, property, state } from "lit/decorators.js"; import { createRef, type Ref, ref } from "lit/directives/ref.js"; import { unsafeHTML } from "lit/directives/unsafe-html.js"; import { RefreshCw } from "lucide"; -import type { SandboxIframe } from "../../components/SandboxedIframe.js"; -import { type MessageConsumer, RUNTIME_MESSAGE_ROUTER } from "../../components/sandbox/RuntimeMessageRouter.js"; -import type { SandboxRuntimeProvider } from "../../components/sandbox/SandboxRuntimeProvider.js"; -import { i18n } from "../../utils/i18n.js"; -import "../../components/SandboxedIframe.js"; -import { ArtifactElement } from "./ArtifactElement.js"; -import type { Console } from "./Console.js"; -import "./Console.js"; +import type { SandboxIframe } from "../../components/SandboxedIframe.ts"; +import { type MessageConsumer, RUNTIME_MESSAGE_ROUTER } from "../../components/sandbox/RuntimeMessageRouter.ts"; +import type { SandboxRuntimeProvider } from "../../components/sandbox/SandboxRuntimeProvider.ts"; +import { i18n } from "../../utils/i18n.ts"; +import "../../components/SandboxedIframe.ts"; +import { ArtifactElement } from "./ArtifactElement.ts"; +import type { Console } from "./Console.ts"; +import "./Console.ts"; import { icon } from "@mariozechner/mini-lit"; import { Button } from "@mariozechner/mini-lit/dist/Button.js"; import { CopyButton } from "@mariozechner/mini-lit/dist/CopyButton.js"; diff --git a/packages/web-ui/src/tools/artifacts/ImageArtifact.ts b/packages/web-ui/src/tools/artifacts/ImageArtifact.ts index cc7b5f520..a7a1cdacb 100644 --- a/packages/web-ui/src/tools/artifacts/ImageArtifact.ts +++ b/packages/web-ui/src/tools/artifacts/ImageArtifact.ts @@ -1,8 +1,8 @@ import { DownloadButton } from "@mariozechner/mini-lit/dist/DownloadButton.js"; import { html, type TemplateResult } from "lit"; import { customElement, property } from "lit/decorators.js"; -import { i18n } from "../../utils/i18n.js"; -import { ArtifactElement } from "./ArtifactElement.js"; +import { i18n } from "../../utils/i18n.ts"; +import { ArtifactElement } from "./ArtifactElement.ts"; @customElement("image-artifact") export class ImageArtifact extends ArtifactElement { diff --git a/packages/web-ui/src/tools/artifacts/MarkdownArtifact.ts b/packages/web-ui/src/tools/artifacts/MarkdownArtifact.ts index 7f763b31a..5a68168c4 100644 --- a/packages/web-ui/src/tools/artifacts/MarkdownArtifact.ts +++ b/packages/web-ui/src/tools/artifacts/MarkdownArtifact.ts @@ -2,12 +2,12 @@ import hljs from "highlight.js"; import { html } from "lit"; import { customElement, property, state } from "lit/decorators.js"; import { unsafeHTML } from "lit/directives/unsafe-html.js"; -import { i18n } from "../../utils/i18n.js"; +import { i18n } from "../../utils/i18n.ts"; import "@mariozechner/mini-lit/dist/MarkdownBlock.js"; import { CopyButton } from "@mariozechner/mini-lit/dist/CopyButton.js"; import { DownloadButton } from "@mariozechner/mini-lit/dist/DownloadButton.js"; import { PreviewCodeToggle } from "@mariozechner/mini-lit/dist/PreviewCodeToggle.js"; -import { ArtifactElement } from "./ArtifactElement.js"; +import { ArtifactElement } from "./ArtifactElement.ts"; @customElement("markdown-artifact") export class MarkdownArtifact extends ArtifactElement { diff --git a/packages/web-ui/src/tools/artifacts/PdfArtifact.ts b/packages/web-ui/src/tools/artifacts/PdfArtifact.ts index e139c2a45..ffa5efe25 100644 --- a/packages/web-ui/src/tools/artifacts/PdfArtifact.ts +++ b/packages/web-ui/src/tools/artifacts/PdfArtifact.ts @@ -2,8 +2,8 @@ import { DownloadButton } from "@mariozechner/mini-lit/dist/DownloadButton.js"; import { html, type TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators.js"; import * as pdfjsLib from "pdfjs-dist"; -import { i18n } from "../../utils/i18n.js"; -import { ArtifactElement } from "./ArtifactElement.js"; +import { i18n } from "../../utils/i18n.ts"; +import { ArtifactElement } from "./ArtifactElement.ts"; // Configure PDF.js worker pdfjsLib.GlobalWorkerOptions.workerSrc = new URL("pdfjs-dist/build/pdf.worker.min.mjs", import.meta.url).toString(); diff --git a/packages/web-ui/src/tools/artifacts/SvgArtifact.ts b/packages/web-ui/src/tools/artifacts/SvgArtifact.ts index fe9f398f6..2a736597d 100644 --- a/packages/web-ui/src/tools/artifacts/SvgArtifact.ts +++ b/packages/web-ui/src/tools/artifacts/SvgArtifact.ts @@ -5,8 +5,8 @@ import hljs from "highlight.js"; import { html } from "lit"; import { customElement, property, state } from "lit/decorators.js"; import { unsafeHTML } from "lit/directives/unsafe-html.js"; -import { i18n } from "../../utils/i18n.js"; -import { ArtifactElement } from "./ArtifactElement.js"; +import { i18n } from "../../utils/i18n.ts"; +import { ArtifactElement } from "./ArtifactElement.ts"; @customElement("svg-artifact") export class SvgArtifact extends ArtifactElement { diff --git a/packages/web-ui/src/tools/artifacts/TextArtifact.ts b/packages/web-ui/src/tools/artifacts/TextArtifact.ts index 853267eeb..9110e396d 100644 --- a/packages/web-ui/src/tools/artifacts/TextArtifact.ts +++ b/packages/web-ui/src/tools/artifacts/TextArtifact.ts @@ -4,8 +4,8 @@ import hljs from "highlight.js"; import { html } from "lit"; import { customElement, property } from "lit/decorators.js"; import { unsafeHTML } from "lit/directives/unsafe-html.js"; -import { i18n } from "../../utils/i18n.js"; -import { ArtifactElement } from "./ArtifactElement.js"; +import { i18n } from "../../utils/i18n.ts"; +import { ArtifactElement } from "./ArtifactElement.ts"; // Known code file extensions for highlighting const CODE_EXTENSIONS = [ diff --git a/packages/web-ui/src/tools/artifacts/artifacts-tool-renderer.ts b/packages/web-ui/src/tools/artifacts/artifacts-tool-renderer.ts index 6767dcce7..c992a79ee 100644 --- a/packages/web-ui/src/tools/artifacts/artifacts-tool-renderer.ts +++ b/packages/web-ui/src/tools/artifacts/artifacts-tool-renderer.ts @@ -2,14 +2,14 @@ import "@mariozechner/mini-lit/dist/CodeBlock.js"; import type { ToolResultMessage } from "@earendil-works/pi-ai"; import { createRef, ref } from "lit/directives/ref.js"; import { FileCode2 } from "lucide"; -import "../../components/ConsoleBlock.js"; +import "../../components/ConsoleBlock.ts"; import { Diff } from "@mariozechner/mini-lit/dist/Diff.js"; import { html, type TemplateResult } from "lit"; -import { i18n } from "../../utils/i18n.js"; -import { renderCollapsibleHeader, renderHeader } from "../renderer-registry.js"; -import type { ToolRenderer, ToolRenderResult } from "../types.js"; -import { ArtifactPill } from "./ArtifactPill.js"; -import type { ArtifactsPanel, ArtifactsParams } from "./artifacts.js"; +import { i18n } from "../../utils/i18n.ts"; +import { renderCollapsibleHeader, renderHeader } from "../renderer-registry.ts"; +import type { ToolRenderer, ToolRenderResult } from "../types.ts"; +import { ArtifactPill } from "./ArtifactPill.ts"; +import type { ArtifactsPanel, ArtifactsParams } from "./artifacts.ts"; // Helper to extract text from content blocks function getTextOutput(result: ToolResultMessage | undefined): string { @@ -60,7 +60,11 @@ function getLanguageFromFilename(filename?: string): string { } export class ArtifactsToolRenderer implements ToolRenderer { - constructor(public artifactsPanel?: ArtifactsPanel) {} + artifactsPanel?: ArtifactsPanel; + + constructor(artifactsPanel?: ArtifactsPanel) { + this.artifactsPanel = artifactsPanel; + } render( params: ArtifactsParams | undefined, diff --git a/packages/web-ui/src/tools/artifacts/artifacts.ts b/packages/web-ui/src/tools/artifacts/artifacts.ts index 7f679eabb..1f74a5fb3 100644 --- a/packages/web-ui/src/tools/artifacts/artifacts.ts +++ b/packages/web-ui/src/tools/artifacts/artifacts.ts @@ -8,27 +8,27 @@ import { customElement, property, state } from "lit/decorators.js"; import { createRef, type Ref, ref } from "lit/directives/ref.js"; import { X } from "lucide"; import { type Static, Type } from "typebox"; -import type { ArtifactMessage } from "../../components/Messages.js"; -import { ArtifactsRuntimeProvider } from "../../components/sandbox/ArtifactsRuntimeProvider.js"; -import { AttachmentsRuntimeProvider } from "../../components/sandbox/AttachmentsRuntimeProvider.js"; -import type { SandboxRuntimeProvider } from "../../components/sandbox/SandboxRuntimeProvider.js"; +import type { ArtifactMessage } from "../../components/Messages.ts"; +import { ArtifactsRuntimeProvider } from "../../components/sandbox/ArtifactsRuntimeProvider.ts"; +import { AttachmentsRuntimeProvider } from "../../components/sandbox/AttachmentsRuntimeProvider.ts"; +import type { SandboxRuntimeProvider } from "../../components/sandbox/SandboxRuntimeProvider.ts"; import { ARTIFACTS_RUNTIME_PROVIDER_DESCRIPTION_RO, ARTIFACTS_TOOL_DESCRIPTION, ATTACHMENTS_RUNTIME_DESCRIPTION, -} from "../../prompts/prompts.js"; -import type { Attachment } from "../../utils/attachment-utils.js"; -import { i18n } from "../../utils/i18n.js"; -import type { ArtifactElement } from "./ArtifactElement.js"; -import { DocxArtifact } from "./DocxArtifact.js"; -import { ExcelArtifact } from "./ExcelArtifact.js"; -import { GenericArtifact } from "./GenericArtifact.js"; -import { HtmlArtifact } from "./HtmlArtifact.js"; -import { ImageArtifact } from "./ImageArtifact.js"; -import { MarkdownArtifact } from "./MarkdownArtifact.js"; -import { PdfArtifact } from "./PdfArtifact.js"; -import { SvgArtifact } from "./SvgArtifact.js"; -import { TextArtifact } from "./TextArtifact.js"; +} from "../../prompts/prompts.ts"; +import type { Attachment } from "../../utils/attachment-utils.ts"; +import { i18n } from "../../utils/i18n.ts"; +import type { ArtifactElement } from "./ArtifactElement.ts"; +import { DocxArtifact } from "./DocxArtifact.ts"; +import { ExcelArtifact } from "./ExcelArtifact.ts"; +import { GenericArtifact } from "./GenericArtifact.ts"; +import { HtmlArtifact } from "./HtmlArtifact.ts"; +import { ImageArtifact } from "./ImageArtifact.ts"; +import { MarkdownArtifact } from "./MarkdownArtifact.ts"; +import { PdfArtifact } from "./PdfArtifact.ts"; +import { SvgArtifact } from "./SvgArtifact.ts"; +import { TextArtifact } from "./TextArtifact.ts"; // Simple artifact model export interface Artifact { diff --git a/packages/web-ui/src/tools/artifacts/index.ts b/packages/web-ui/src/tools/artifacts/index.ts index e45580a1c..685022a6a 100644 --- a/packages/web-ui/src/tools/artifacts/index.ts +++ b/packages/web-ui/src/tools/artifacts/index.ts @@ -1,7 +1,7 @@ -export { ArtifactElement } from "./ArtifactElement.js"; -export { type Artifact, ArtifactsPanel, type ArtifactsParams } from "./artifacts.js"; -export { ArtifactsToolRenderer } from "./artifacts-tool-renderer.js"; -export { HtmlArtifact } from "./HtmlArtifact.js"; -export { MarkdownArtifact } from "./MarkdownArtifact.js"; -export { SvgArtifact } from "./SvgArtifact.js"; -export { TextArtifact } from "./TextArtifact.js"; +export { ArtifactElement } from "./ArtifactElement.ts"; +export { type Artifact, ArtifactsPanel, type ArtifactsParams } from "./artifacts.ts"; +export { ArtifactsToolRenderer } from "./artifacts-tool-renderer.ts"; +export { HtmlArtifact } from "./HtmlArtifact.ts"; +export { MarkdownArtifact } from "./MarkdownArtifact.ts"; +export { SvgArtifact } from "./SvgArtifact.ts"; +export { TextArtifact } from "./TextArtifact.ts"; diff --git a/packages/web-ui/src/tools/extract-document.ts b/packages/web-ui/src/tools/extract-document.ts index 77f602387..a710fee95 100644 --- a/packages/web-ui/src/tools/extract-document.ts +++ b/packages/web-ui/src/tools/extract-document.ts @@ -4,11 +4,11 @@ import { html } from "lit"; import { createRef, ref } from "lit/directives/ref.js"; import { FileText } from "lucide"; import { type Static, Type } from "typebox"; -import { EXTRACT_DOCUMENT_DESCRIPTION } from "../prompts/prompts.js"; -import { loadAttachment } from "../utils/attachment-utils.js"; -import { isCorsError } from "../utils/proxy-utils.js"; -import { registerToolRenderer, renderCollapsibleHeader, renderHeader } from "./renderer-registry.js"; -import type { ToolRenderer, ToolRenderResult } from "./types.js"; +import { EXTRACT_DOCUMENT_DESCRIPTION } from "../prompts/prompts.ts"; +import { loadAttachment } from "../utils/attachment-utils.ts"; +import { isCorsError } from "../utils/proxy-utils.ts"; +import { registerToolRenderer, renderCollapsibleHeader, renderHeader } from "./renderer-registry.ts"; +import type { ToolRenderer, ToolRenderResult } from "./types.ts"; // ============================================================================ // TYPES diff --git a/packages/web-ui/src/tools/index.ts b/packages/web-ui/src/tools/index.ts index 762e62324..4be3e1ea6 100644 --- a/packages/web-ui/src/tools/index.ts +++ b/packages/web-ui/src/tools/index.ts @@ -1,10 +1,10 @@ import type { ToolResultMessage } from "@earendil-works/pi-ai"; -import "./javascript-repl.js"; // Auto-registers the renderer -import "./extract-document.js"; // Auto-registers the renderer -import { getToolRenderer, registerToolRenderer } from "./renderer-registry.js"; -import { BashRenderer } from "./renderers/BashRenderer.js"; -import { DefaultRenderer } from "./renderers/DefaultRenderer.js"; -import type { ToolRenderResult } from "./types.js"; +import "./javascript-repl.ts"; // Auto-registers the renderer +import "./extract-document.ts"; // Auto-registers the renderer +import { getToolRenderer, registerToolRenderer } from "./renderer-registry.ts"; +import { BashRenderer } from "./renderers/BashRenderer.ts"; +import { DefaultRenderer } from "./renderers/DefaultRenderer.ts"; +import type { ToolRenderResult } from "./types.ts"; // Register all built-in tool renderers registerToolRenderer("bash", new BashRenderer()); diff --git a/packages/web-ui/src/tools/javascript-repl.ts b/packages/web-ui/src/tools/javascript-repl.ts index 1ed4125f5..612198b2d 100644 --- a/packages/web-ui/src/tools/javascript-repl.ts +++ b/packages/web-ui/src/tools/javascript-repl.ts @@ -5,12 +5,12 @@ import { html } from "lit"; import { createRef, ref } from "lit/directives/ref.js"; import { Code } from "lucide"; import { type Static, Type } from "typebox"; -import { type SandboxFile, SandboxIframe, type SandboxResult } from "../components/SandboxedIframe.js"; -import type { SandboxRuntimeProvider } from "../components/sandbox/SandboxRuntimeProvider.js"; -import { JAVASCRIPT_REPL_TOOL_DESCRIPTION } from "../prompts/prompts.js"; -import type { Attachment } from "../utils/attachment-utils.js"; -import { registerToolRenderer, renderCollapsibleHeader, renderHeader } from "./renderer-registry.js"; -import type { ToolRenderer, ToolRenderResult } from "./types.js"; +import { type SandboxFile, SandboxIframe, type SandboxResult } from "../components/SandboxedIframe.ts"; +import type { SandboxRuntimeProvider } from "../components/sandbox/SandboxRuntimeProvider.ts"; +import { JAVASCRIPT_REPL_TOOL_DESCRIPTION } from "../prompts/prompts.ts"; +import type { Attachment } from "../utils/attachment-utils.ts"; +import { registerToolRenderer, renderCollapsibleHeader, renderHeader } from "./renderer-registry.ts"; +import type { ToolRenderer, ToolRenderResult } from "./types.ts"; // Execute JavaScript code with attachments using SandboxedIframe export async function executeJavaScript( diff --git a/packages/web-ui/src/tools/renderer-registry.ts b/packages/web-ui/src/tools/renderer-registry.ts index 0d19781d6..69660c6ae 100644 --- a/packages/web-ui/src/tools/renderer-registry.ts +++ b/packages/web-ui/src/tools/renderer-registry.ts @@ -3,7 +3,7 @@ import { html, type TemplateResult } from "lit"; import type { Ref } from "lit/directives/ref.js"; import { ref } from "lit/directives/ref.js"; import { ChevronsUpDown, ChevronUp, Loader } from "lucide"; -import type { ToolRenderer } from "./types.js"; +import type { ToolRenderer } from "./types.ts"; // Registry of tool renderers export const toolRenderers = new Map(); diff --git a/packages/web-ui/src/tools/renderers/BashRenderer.ts b/packages/web-ui/src/tools/renderers/BashRenderer.ts index 97633d7fc..6f995f376 100644 --- a/packages/web-ui/src/tools/renderers/BashRenderer.ts +++ b/packages/web-ui/src/tools/renderers/BashRenderer.ts @@ -1,9 +1,9 @@ import type { ToolResultMessage } from "@earendil-works/pi-ai"; import { html } from "lit"; import { SquareTerminal } from "lucide"; -import { i18n } from "../../utils/i18n.js"; -import { renderHeader } from "../renderer-registry.js"; -import type { ToolRenderer, ToolRenderResult } from "../types.js"; +import { i18n } from "../../utils/i18n.ts"; +import { renderHeader } from "../renderer-registry.ts"; +import type { ToolRenderer, ToolRenderResult } from "../types.ts"; interface BashParams { command: string; diff --git a/packages/web-ui/src/tools/renderers/CalculateRenderer.ts b/packages/web-ui/src/tools/renderers/CalculateRenderer.ts index 0a2901476..a4672895a 100644 --- a/packages/web-ui/src/tools/renderers/CalculateRenderer.ts +++ b/packages/web-ui/src/tools/renderers/CalculateRenderer.ts @@ -1,9 +1,9 @@ import type { ToolResultMessage } from "@earendil-works/pi-ai"; import { html } from "lit"; import { Calculator } from "lucide"; -import { i18n } from "../../utils/i18n.js"; -import { renderHeader } from "../renderer-registry.js"; -import type { ToolRenderer, ToolRenderResult } from "../types.js"; +import { i18n } from "../../utils/i18n.ts"; +import { renderHeader } from "../renderer-registry.ts"; +import type { ToolRenderer, ToolRenderResult } from "../types.ts"; interface CalculateParams { expression: string; diff --git a/packages/web-ui/src/tools/renderers/DefaultRenderer.ts b/packages/web-ui/src/tools/renderers/DefaultRenderer.ts index 227649a9c..e5bf0ff12 100644 --- a/packages/web-ui/src/tools/renderers/DefaultRenderer.ts +++ b/packages/web-ui/src/tools/renderers/DefaultRenderer.ts @@ -1,9 +1,9 @@ import type { ToolResultMessage } from "@earendil-works/pi-ai"; import { html } from "lit"; import { Code } from "lucide"; -import { i18n } from "../../utils/i18n.js"; -import { renderHeader } from "../renderer-registry.js"; -import type { ToolRenderer, ToolRenderResult } from "../types.js"; +import { i18n } from "../../utils/i18n.ts"; +import { renderHeader } from "../renderer-registry.ts"; +import type { ToolRenderer, ToolRenderResult } from "../types.ts"; export class DefaultRenderer implements ToolRenderer { render(params: any | undefined, result: ToolResultMessage | undefined, isStreaming?: boolean): ToolRenderResult { diff --git a/packages/web-ui/src/tools/renderers/GetCurrentTimeRenderer.ts b/packages/web-ui/src/tools/renderers/GetCurrentTimeRenderer.ts index 0bd3664be..6e6240e68 100644 --- a/packages/web-ui/src/tools/renderers/GetCurrentTimeRenderer.ts +++ b/packages/web-ui/src/tools/renderers/GetCurrentTimeRenderer.ts @@ -1,9 +1,9 @@ import type { ToolResultMessage } from "@earendil-works/pi-ai"; import { html } from "lit"; import { Clock } from "lucide"; -import { i18n } from "../../utils/i18n.js"; -import { renderHeader } from "../renderer-registry.js"; -import type { ToolRenderer, ToolRenderResult } from "../types.js"; +import { i18n } from "../../utils/i18n.ts"; +import { renderHeader } from "../renderer-registry.ts"; +import type { ToolRenderer, ToolRenderResult } from "../types.ts"; interface GetCurrentTimeParams { timezone?: string; diff --git a/packages/web-ui/src/utils/attachment-utils.ts b/packages/web-ui/src/utils/attachment-utils.ts index afe98e443..57a8a6c70 100644 --- a/packages/web-ui/src/utils/attachment-utils.ts +++ b/packages/web-ui/src/utils/attachment-utils.ts @@ -3,7 +3,7 @@ import JSZip from "jszip"; import type { PDFDocumentProxy } from "pdfjs-dist"; import * as pdfjsLib from "pdfjs-dist"; import * as XLSX from "xlsx"; -import { i18n } from "./i18n.js"; +import { i18n } from "./i18n.ts"; // Configure PDF.js worker - we'll need to bundle this pdfjsLib.GlobalWorkerOptions.workerSrc = new URL("pdfjs-dist/build/pdf.worker.min.mjs", import.meta.url).toString(); diff --git a/packages/web-ui/src/utils/auth-token.ts b/packages/web-ui/src/utils/auth-token.ts index 385397e53..0d507fc61 100644 --- a/packages/web-ui/src/utils/auth-token.ts +++ b/packages/web-ui/src/utils/auth-token.ts @@ -1,5 +1,5 @@ import PromptDialog from "@mariozechner/mini-lit/dist/PromptDialog.js"; -import { i18n } from "./i18n.js"; +import { i18n } from "./i18n.ts"; export async function getAuthToken(): Promise { let authToken: string | undefined = localStorage.getItem(`auth-token`) || ""; diff --git a/packages/web-ui/tsconfig.build.json b/packages/web-ui/tsconfig.build.json index 9c4ca583d..3b5487414 100644 --- a/packages/web-ui/tsconfig.build.json +++ b/packages/web-ui/tsconfig.build.json @@ -11,6 +11,8 @@ "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true, "experimentalDecorators": true, "useDefineForClassFields": false, "rootDir": "./src", diff --git a/scripts/update-source-imports-to-ts.sh b/scripts/update-source-imports-to-ts.sh new file mode 100644 index 000000000..6030e41d5 --- /dev/null +++ b/scripts/update-source-imports-to-ts.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Rewrites relative source import specifiers in package source directories from .js to .ts. +# TypeScript's rewriteRelativeImportExtensions option rewrites these back to .js in emitted output. +find packages -mindepth 2 -maxdepth 2 -type d -name src -print0 | + while IFS= read -r -d '' src_dir; do + find "$src_dir" -type f -name '*.ts' -print0 + done | + xargs -0 perl -0pi -e 's/(\b(?:from|import)\b\s*\(?\s*["\x27])(\.{1,2}\/[^"\x27\r\n]+)\.js(["\x27]\s*\)?)/$1$2.ts$3/g; s/(\bdeclare\s+module\s+["\x27])(\.{1,2}\/[^"\x27\r\n]+)\.js(["\x27])/$1$2.ts$3/g; s/(\bimportNodeOnlyProvider\(\s*["\x27])(\.{1,2}\/[^"\x27\r\n]+)\.js(["\x27]\s*\))/$1$2.ts$3/g' diff --git a/tsconfig.base.json b/tsconfig.base.json index bd9a33a48..57e97d6e3 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -4,6 +4,7 @@ "module": "Node16", "lib": ["ES2022"], "strict": true, + "erasableSyntaxOnly": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, @@ -14,7 +15,8 @@ "inlineSourceMap": false, "moduleResolution": "Node16", "resolveJsonModule": true, - "allowImportingTsExtensions": false, + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true, "experimentalDecorators": true, "emitDecoratorMetadata": true, "useDefineForClassFields": false,