fix: clean up 49 unused variables, catch params, and stale imports (#22695)
This commit is contained in:
parent
34213d4446
commit
cce05c1665
@ -3,7 +3,7 @@ import { shortDomain } from "./stage"
|
|||||||
|
|
||||||
const storage = new sst.cloudflare.Bucket("EnterpriseStorage")
|
const storage = new sst.cloudflare.Bucket("EnterpriseStorage")
|
||||||
|
|
||||||
const teams = new sst.cloudflare.x.SolidStart("Teams", {
|
new sst.cloudflare.x.SolidStart("Teams", {
|
||||||
domain: shortDomain,
|
domain: shortDomain,
|
||||||
path: "packages/enterprise",
|
path: "packages/enterprise",
|
||||||
buildCommand: "bun run build:cloudflare",
|
buildCommand: "bun run build:cloudflare",
|
||||||
|
|||||||
@ -180,8 +180,8 @@ describe("SerializeAddon", () => {
|
|||||||
await writeAndWait(term, input)
|
await writeAndWait(term, input)
|
||||||
|
|
||||||
const origLine = term.buffer.active.getLine(0)
|
const origLine = term.buffer.active.getLine(0)
|
||||||
const origFg = origLine!.getCell(0)!.getFgColor()
|
const _origFg = origLine!.getCell(0)!.getFgColor()
|
||||||
const origBg = origLine!.getCell(0)!.getBgColor()
|
const _origBg = origLine!.getCell(0)!.getBgColor()
|
||||||
expect(origLine!.getCell(0)!.isBold()).toBe(1)
|
expect(origLine!.getCell(0)!.isBold()).toBe(1)
|
||||||
|
|
||||||
const serialized = addon.serialize({ range: { start: 0, end: 0 } })
|
const serialized = addon.serialize({ range: { start: 0, end: 0 } })
|
||||||
|
|||||||
@ -10,7 +10,7 @@ import { ThemeProvider } from "@opencode-ai/ui/theme/context"
|
|||||||
import { MetaProvider } from "@solidjs/meta"
|
import { MetaProvider } from "@solidjs/meta"
|
||||||
import { type BaseRouterProps, Navigate, Route, Router } from "@solidjs/router"
|
import { type BaseRouterProps, Navigate, Route, Router } from "@solidjs/router"
|
||||||
import { QueryClient, QueryClientProvider } from "@tanstack/solid-query"
|
import { QueryClient, QueryClientProvider } from "@tanstack/solid-query"
|
||||||
import { type Duration, Effect } from "effect"
|
import { Effect } from "effect"
|
||||||
import {
|
import {
|
||||||
type Component,
|
type Component,
|
||||||
createMemo,
|
createMemo,
|
||||||
@ -156,11 +156,6 @@ export function AppBaseProviders(props: ParentProps<{ locale?: Locale }>) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const effectMinDuration =
|
|
||||||
(duration: Duration.Input) =>
|
|
||||||
<A, E, R>(e: Effect.Effect<A, E, R>) =>
|
|
||||||
Effect.all([e, Effect.sleep(duration)], { concurrency: "unbounded" }).pipe(Effect.map((v) => v[0]))
|
|
||||||
|
|
||||||
function ConnectionGate(props: ParentProps<{ disableHealthCheck?: boolean }>) {
|
function ConnectionGate(props: ParentProps<{ disableHealthCheck?: boolean }>) {
|
||||||
const server = useServer()
|
const server = useServer()
|
||||||
const checkServerHealth = useCheckServerHealth()
|
const checkServerHealth = useCheckServerHealth()
|
||||||
|
|||||||
@ -433,7 +433,6 @@ export default function Page() {
|
|||||||
const isChildSession = createMemo(() => !!info()?.parentID)
|
const isChildSession = createMemo(() => !!info()?.parentID)
|
||||||
const diffs = createMemo(() => (params.id ? list(sync.data.session_diff[params.id]) : []))
|
const diffs = createMemo(() => (params.id ? list(sync.data.session_diff[params.id]) : []))
|
||||||
const sessionCount = createMemo(() => Math.max(info()?.summary?.files ?? 0, diffs().length))
|
const sessionCount = createMemo(() => Math.max(info()?.summary?.files ?? 0, diffs().length))
|
||||||
const hasSessionReview = createMemo(() => sessionCount() > 0)
|
|
||||||
const canReview = createMemo(() => !!sync.project)
|
const canReview = createMemo(() => !!sync.project)
|
||||||
const reviewTab = createMemo(() => isDesktop())
|
const reviewTab = createMemo(() => isDesktop())
|
||||||
const tabState = createSessionTabs({
|
const tabState = createSessionTabs({
|
||||||
@ -443,8 +442,6 @@ export default function Page() {
|
|||||||
review: reviewTab,
|
review: reviewTab,
|
||||||
hasReview: canReview,
|
hasReview: canReview,
|
||||||
})
|
})
|
||||||
const contextOpen = tabState.contextOpen
|
|
||||||
const openedTabs = tabState.openedTabs
|
|
||||||
const activeTab = tabState.activeTab
|
const activeTab = tabState.activeTab
|
||||||
const activeFileTab = tabState.activeFileTab
|
const activeFileTab = tabState.activeFileTab
|
||||||
const revertMessageID = createMemo(() => info()?.revert?.messageID)
|
const revertMessageID = createMemo(() => info()?.revert?.messageID)
|
||||||
|
|||||||
@ -378,12 +378,6 @@ export function FileTabContent(props: { tab: string }) {
|
|||||||
requestAnimationFrame(() => comments.clearFocus())
|
requestAnimationFrame(() => comments.clearFocus())
|
||||||
})
|
})
|
||||||
|
|
||||||
const cancelCommenting = () => {
|
|
||||||
const p = path()
|
|
||||||
if (p) file.setSelectedLines(p, null)
|
|
||||||
setNote("commenting", null)
|
|
||||||
}
|
|
||||||
|
|
||||||
let prev = {
|
let prev = {
|
||||||
loaded: false,
|
loaded: false,
|
||||||
ready: false,
|
ready: false,
|
||||||
|
|||||||
@ -8,7 +8,6 @@ import { LOCALES, route } from "../src/lib/language.js"
|
|||||||
const __dirname = dirname(fileURLToPath(import.meta.url))
|
const __dirname = dirname(fileURLToPath(import.meta.url))
|
||||||
const BASE_URL = config.baseUrl
|
const BASE_URL = config.baseUrl
|
||||||
const PUBLIC_DIR = join(__dirname, "../public")
|
const PUBLIC_DIR = join(__dirname, "../public")
|
||||||
const ROUTES_DIR = join(__dirname, "../src/routes")
|
|
||||||
const DOCS_DIR = join(__dirname, "../../../web/src/content/docs")
|
const DOCS_DIR = join(__dirname, "../../../web/src/content/docs")
|
||||||
|
|
||||||
interface SitemapEntry {
|
interface SitemapEntry {
|
||||||
|
|||||||
@ -31,8 +31,6 @@ export default function Home() {
|
|||||||
const i18n = useI18n()
|
const i18n = useI18n()
|
||||||
const language = useLanguage()
|
const language = useLanguage()
|
||||||
const githubData = createAsync(() => github())
|
const githubData = createAsync(() => github())
|
||||||
const release = createMemo(() => githubData()?.release)
|
|
||||||
|
|
||||||
const handleCopyClick = (event: Event) => {
|
const handleCopyClick = (event: Event) => {
|
||||||
const button = event.currentTarget as HTMLButtonElement
|
const button = event.currentTarget as HTMLButtonElement
|
||||||
const text = button.textContent
|
const text = button.textContent
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import { useI18n } from "~/context/i18n"
|
|||||||
import { useLanguage } from "~/context/language"
|
import { useLanguage } from "~/context/language"
|
||||||
import "./user-menu.css"
|
import "./user-menu.css"
|
||||||
|
|
||||||
const logout = action(async () => {
|
const _logout = action(async () => {
|
||||||
"use server"
|
"use server"
|
||||||
const auth = await useAuthSession()
|
const auth = await useAuthSession()
|
||||||
const event = getRequestEvent()
|
const event = getRequestEvent()
|
||||||
|
|||||||
@ -181,7 +181,7 @@ export default new Hono<{ Bindings: Env }>()
|
|||||||
let info
|
let info
|
||||||
const messages: Record<string, any> = {}
|
const messages: Record<string, any> = {}
|
||||||
data.forEach((d) => {
|
data.forEach((d) => {
|
||||||
const [root, type, ...splits] = d.key.split("/")
|
const [root, type] = d.key.split("/")
|
||||||
if (root !== "session") return
|
if (root !== "session") return
|
||||||
if (type === "info") {
|
if (type === "info") {
|
||||||
info = d.content
|
info = d.content
|
||||||
|
|||||||
@ -4,7 +4,6 @@ import { EffectBridge } from "@/effect/bridge"
|
|||||||
import { Log } from "../util/log"
|
import { Log } from "../util/log"
|
||||||
import { BusEvent } from "./bus-event"
|
import { BusEvent } from "./bus-event"
|
||||||
import { GlobalBus } from "./global"
|
import { GlobalBus } from "./global"
|
||||||
import { WorkspaceContext } from "@/control-plane/workspace-context"
|
|
||||||
import { InstanceState } from "@/effect/instance-state"
|
import { InstanceState } from "@/effect/instance-state"
|
||||||
import { makeRuntime } from "@/effect/run-service"
|
import { makeRuntime } from "@/effect/run-service"
|
||||||
|
|
||||||
|
|||||||
@ -111,7 +111,7 @@ export function Autocomplete(props: {
|
|||||||
|
|
||||||
const position = createMemo(() => {
|
const position = createMemo(() => {
|
||||||
if (!store.visible) return { x: 0, y: 0, width: 0 }
|
if (!store.visible) return { x: 0, y: 0, width: 0 }
|
||||||
const dims = dimensions()
|
dimensions()
|
||||||
positionTick()
|
positionTick()
|
||||||
const anchor = props.anchor()
|
const anchor = props.anchor()
|
||||||
const parent = anchor.parent
|
const parent = anchor.parent
|
||||||
|
|||||||
@ -157,10 +157,10 @@ export function Session() {
|
|||||||
const [showThinking, setShowThinking] = kv.signal("thinking_visibility", true)
|
const [showThinking, setShowThinking] = kv.signal("thinking_visibility", true)
|
||||||
const [timestamps, setTimestamps] = kv.signal<"hide" | "show">("timestamps", "hide")
|
const [timestamps, setTimestamps] = kv.signal<"hide" | "show">("timestamps", "hide")
|
||||||
const [showDetails, setShowDetails] = kv.signal("tool_details_visibility", true)
|
const [showDetails, setShowDetails] = kv.signal("tool_details_visibility", true)
|
||||||
const [showAssistantMetadata, setShowAssistantMetadata] = kv.signal("assistant_metadata_visibility", true)
|
const [showAssistantMetadata, _setShowAssistantMetadata] = kv.signal("assistant_metadata_visibility", true)
|
||||||
const [showScrollbar, setShowScrollbar] = kv.signal("scrollbar_visible", false)
|
const [showScrollbar, setShowScrollbar] = kv.signal("scrollbar_visible", false)
|
||||||
const [diffWrapMode] = kv.signal<"word" | "none">("diff_wrap_mode", "word")
|
const [diffWrapMode] = kv.signal<"word" | "none">("diff_wrap_mode", "word")
|
||||||
const [animationsEnabled, setAnimationsEnabled] = kv.signal("animations_enabled", true)
|
const [_animationsEnabled, _setAnimationsEnabled] = kv.signal("animations_enabled", true)
|
||||||
const [showGenericToolOutput, setShowGenericToolOutput] = kv.signal("generic_tool_output_visibility", false)
|
const [showGenericToolOutput, setShowGenericToolOutput] = kv.signal("generic_tool_output_visibility", false)
|
||||||
|
|
||||||
const wide = createMemo(() => dimensions().width > 120)
|
const wide = createMemo(() => dimensions().width > 120)
|
||||||
|
|||||||
@ -599,7 +599,7 @@ function Prompt<const T extends Record<string, string>>(props: {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const hint = createMemo(() => (store.expanded ? "minimize" : "fullscreen"))
|
const hint = createMemo(() => (store.expanded ? "minimize" : "fullscreen"))
|
||||||
const renderer = useRenderer()
|
useRenderer()
|
||||||
|
|
||||||
const content = () => (
|
const content = () => (
|
||||||
<box
|
<box
|
||||||
|
|||||||
@ -59,7 +59,7 @@ export function SubagentFooter() {
|
|||||||
const keybind = useKeybind()
|
const keybind = useKeybind()
|
||||||
const command = useCommandDialog()
|
const command = useCommandDialog()
|
||||||
const [hover, setHover] = createSignal<"parent" | "prev" | "next" | null>(null)
|
const [hover, setHover] = createSignal<"parent" | "prev" | "next" | null>(null)
|
||||||
const dimensions = useTerminalDimensions()
|
useTerminalDimensions()
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<box flexShrink={0}>
|
<box flexShrink={0}>
|
||||||
|
|||||||
@ -43,8 +43,6 @@ export async function resolveNetworkOptions(args: NetworkOptions) {
|
|||||||
const hostnameExplicitlySet = process.argv.includes("--hostname")
|
const hostnameExplicitlySet = process.argv.includes("--hostname")
|
||||||
const mdnsExplicitlySet = process.argv.includes("--mdns")
|
const mdnsExplicitlySet = process.argv.includes("--mdns")
|
||||||
const mdnsDomainExplicitlySet = process.argv.includes("--mdns-domain")
|
const mdnsDomainExplicitlySet = process.argv.includes("--mdns-domain")
|
||||||
const corsExplicitlySet = process.argv.includes("--cors")
|
|
||||||
|
|
||||||
const mdns = mdnsExplicitlySet ? args.mdns : (config?.server?.mdns ?? args.mdns)
|
const mdns = mdnsExplicitlySet ? args.mdns : (config?.server?.mdns ?? args.mdns)
|
||||||
const mdnsDomain = mdnsDomainExplicitlySet ? args["mdns-domain"] : (config?.server?.mdnsDomain ?? args["mdns-domain"])
|
const mdnsDomain = mdnsDomainExplicitlySet ? args["mdns-domain"] : (config?.server?.mdnsDomain ?? args["mdns-domain"])
|
||||||
const port = portExplicitlySet ? args.port : (config?.server?.port ?? args.port)
|
const port = portExplicitlySet ? args.port : (config?.server?.port ?? args.port)
|
||||||
|
|||||||
@ -8,13 +8,10 @@ import z from "zod"
|
|||||||
import { Config } from "../config"
|
import { Config } from "../config"
|
||||||
import { MCP } from "../mcp"
|
import { MCP } from "../mcp"
|
||||||
import { Skill } from "../skill"
|
import { Skill } from "../skill"
|
||||||
import { Log } from "../util/log"
|
|
||||||
import PROMPT_INITIALIZE from "./template/initialize.txt"
|
import PROMPT_INITIALIZE from "./template/initialize.txt"
|
||||||
import PROMPT_REVIEW from "./template/review.txt"
|
import PROMPT_REVIEW from "./template/review.txt"
|
||||||
|
|
||||||
export namespace Command {
|
export namespace Command {
|
||||||
const log = Log.create({ service: "command" })
|
|
||||||
|
|
||||||
type State = {
|
type State = {
|
||||||
commands: Record<string, Info>
|
commands: Record<string, Info>
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1095,7 +1095,7 @@ function patchJsonc(input: string, patch: unknown, path: string[] = []): string
|
|||||||
}
|
}
|
||||||
|
|
||||||
function writable(info: Info) {
|
function writable(info: Info) {
|
||||||
const { plugin_origins, ...next } = info
|
const { plugin_origins: _plugin_origins, ...next } = info
|
||||||
return next
|
return next
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -328,7 +328,7 @@ export namespace Workspace {
|
|||||||
try {
|
try {
|
||||||
const adaptor = await getAdaptor(info.projectID, row.type)
|
const adaptor = await getAdaptor(info.projectID, row.type)
|
||||||
await adaptor.remove(info)
|
await adaptor.remove(info)
|
||||||
} catch (err) {
|
} catch {
|
||||||
log.error("adaptor not available when removing workspace", { type: row.type })
|
log.error("adaptor not available when removing workspace", { type: row.type })
|
||||||
}
|
}
|
||||||
Database.use((db) => db.delete(WorkspaceTable).where(eq(WorkspaceTable.id, id)).run())
|
Database.use((db) => db.delete(WorkspaceTable).where(eq(WorkspaceTable.id, id)).run())
|
||||||
@ -404,7 +404,7 @@ export namespace Workspace {
|
|||||||
return synced(state)
|
return synced(state)
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
} catch (error) {
|
} catch {
|
||||||
if (signal?.aborted) throw signal.reason ?? new Error("Request aborted")
|
if (signal?.aborted) throw signal.reason ?? new Error("Request aborted")
|
||||||
throw new Error(`Timed out waiting for sync fence: ${JSON.stringify(state)}`)
|
throw new Error(`Timed out waiting for sync fence: ${JSON.stringify(state)}`)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -218,7 +218,7 @@ export namespace McpOAuthCallback {
|
|||||||
log.info("oauth callback server stopped")
|
log.info("oauth callback server stopped")
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const [name, pending] of pendingAuths) {
|
for (const [_name, pending] of pendingAuths) {
|
||||||
clearTimeout(pending.timeout)
|
clearTimeout(pending.timeout)
|
||||||
pending.reject(new Error("OAuth callback server stopped"))
|
pending.reject(new Error("OAuth callback server stopped"))
|
||||||
}
|
}
|
||||||
|
|||||||
@ -40,7 +40,7 @@ export function parse(headers: Headers) {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
data = JSON.parse(raw)
|
data = JSON.parse(raw)
|
||||||
} catch (err) {
|
} catch {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -16,8 +16,6 @@ import { AppFileSystem } from "@opencode-ai/shared/filesystem"
|
|||||||
|
|
||||||
type Rule = { method?: string; path: string; exact?: boolean; action: "local" | "forward" }
|
type Rule = { method?: string; path: string; exact?: boolean; action: "local" | "forward" }
|
||||||
|
|
||||||
const OPENCODE_WORKSPACE = process.env.OPENCODE_WORKSPACE
|
|
||||||
|
|
||||||
const RULES: Array<Rule> = [
|
const RULES: Array<Rule> = [
|
||||||
{ path: "/session/status", action: "forward" },
|
{ path: "/session/status", action: "forward" },
|
||||||
{ method: "GET", path: "/session", action: "local" },
|
{ method: "GET", path: "/session", action: "local" },
|
||||||
|
|||||||
@ -10,11 +10,8 @@ import { AppRuntime } from "../../effect/app-runtime"
|
|||||||
import { mapValues } from "remeda"
|
import { mapValues } from "remeda"
|
||||||
import { errors } from "../error"
|
import { errors } from "../error"
|
||||||
import { lazy } from "../../util/lazy"
|
import { lazy } from "../../util/lazy"
|
||||||
import { Log } from "../../util/log"
|
|
||||||
import { Effect } from "effect"
|
import { Effect } from "effect"
|
||||||
|
|
||||||
const log = Log.create({ service: "server" })
|
|
||||||
|
|
||||||
export const ProviderRoutes = lazy(() =>
|
export const ProviderRoutes = lazy(() =>
|
||||||
new Hono()
|
new Hono()
|
||||||
.get(
|
.get(
|
||||||
|
|||||||
@ -1825,7 +1825,7 @@ NOTE: At any point in time through this workflow you should feel free to ask the
|
|||||||
onSuccess: (output: unknown) => void
|
onSuccess: (output: unknown) => void
|
||||||
}): AITool {
|
}): AITool {
|
||||||
// Remove $schema property if present (not needed for tool input)
|
// Remove $schema property if present (not needed for tool input)
|
||||||
const { $schema, ...toolSchema } = input.schema
|
const { $schema: _, ...toolSchema } = input.schema
|
||||||
|
|
||||||
return tool({
|
return tool({
|
||||||
id: "StructuredOutput" as any,
|
id: "StructuredOutput" as any,
|
||||||
|
|||||||
@ -176,7 +176,7 @@ export namespace ToolRegistry {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const cfg = yield* config.get()
|
yield* config.get()
|
||||||
const questionEnabled =
|
const questionEnabled =
|
||||||
["app", "cli", "desktop"].includes(Flag.OPENCODE_CLIENT) || Flag.OPENCODE_ENABLE_QUESTION_TOOL
|
["app", "cli", "desktop"].includes(Flag.OPENCODE_CLIENT) || Flag.OPENCODE_ENABLE_QUESTION_TOOL
|
||||||
|
|
||||||
|
|||||||
@ -276,7 +276,7 @@ describe("file/index Filesystem patterns", () => {
|
|||||||
|
|
||||||
test("returns empty array buffer on error for images", async () => {
|
test("returns empty array buffer on error for images", async () => {
|
||||||
await using tmp = await tmpdir()
|
await using tmp = await tmpdir()
|
||||||
const filepath = path.join(tmp.path, "broken.png")
|
const _filepath = path.join(tmp.path, "broken.png")
|
||||||
// Don't create the file
|
// Don't create the file
|
||||||
|
|
||||||
await Instance.provide({
|
await Instance.provide({
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
// Simple JSON-RPC 2.0 LSP-like fake server over stdio
|
// Simple JSON-RPC 2.0 LSP-like fake server over stdio
|
||||||
// Implements a minimal LSP handshake and triggers a request upon notification
|
// Implements a minimal LSP handshake and triggers a request upon notification
|
||||||
|
|
||||||
const net = require("net")
|
|
||||||
|
|
||||||
let nextId = 1
|
let nextId = 1
|
||||||
|
|
||||||
function encode(message) {
|
function encode(message) {
|
||||||
|
|||||||
@ -2,8 +2,6 @@ import { describe, expect, test } from "bun:test"
|
|||||||
import { ProviderTransform } from "../../src/provider/transform"
|
import { ProviderTransform } from "../../src/provider/transform"
|
||||||
import { ModelID, ProviderID } from "../../src/provider/schema"
|
import { ModelID, ProviderID } from "../../src/provider/schema"
|
||||||
|
|
||||||
const OUTPUT_TOKEN_MAX = 32000
|
|
||||||
|
|
||||||
describe("ProviderTransform.options - setCacheKey", () => {
|
describe("ProviderTransform.options - setCacheKey", () => {
|
||||||
const sessionID = "test-session-123"
|
const sessionID = "test-session-123"
|
||||||
|
|
||||||
|
|||||||
@ -67,7 +67,7 @@ describe("session.list", () => {
|
|||||||
await Instance.provide({
|
await Instance.provide({
|
||||||
directory: tmp.path,
|
directory: tmp.path,
|
||||||
fn: async () => {
|
fn: async () => {
|
||||||
const session = await svc.create({ title: "new-session" })
|
await svc.create({ title: "new-session" })
|
||||||
const futureStart = Date.now() + 86400000
|
const futureStart = Date.now() + 86400000
|
||||||
|
|
||||||
const sessions = [...svc.list({ start: futureStart })]
|
const sessions = [...svc.list({ start: futureStart })]
|
||||||
|
|||||||
@ -1181,7 +1181,6 @@ describe("session.llm.stream", () => {
|
|||||||
const providerID = "google"
|
const providerID = "google"
|
||||||
const modelID = "gemini-2.5-flash"
|
const modelID = "gemini-2.5-flash"
|
||||||
const fixture = await loadFixture(providerID, modelID)
|
const fixture = await loadFixture(providerID, modelID)
|
||||||
const provider = fixture.provider
|
|
||||||
const model = fixture.model
|
const model = fixture.model
|
||||||
const pathSuffix = `/v1beta/models/${model.id}:streamGenerateContent`
|
const pathSuffix = `/v1beta/models/${model.id}:streamGenerateContent`
|
||||||
|
|
||||||
|
|||||||
@ -724,7 +724,7 @@ describe("MessageV2.filterCompacted", () => {
|
|||||||
|
|
||||||
const u1 = await addUser(session.id, "hello")
|
const u1 = await addUser(session.id, "hello")
|
||||||
await addCompactionPart(session.id, u1)
|
await addCompactionPart(session.id, u1)
|
||||||
const u2 = await addUser(session.id, "world")
|
await addUser(session.id, "world")
|
||||||
|
|
||||||
const result = MessageV2.filterCompacted(MessageV2.stream(session.id))
|
const result = MessageV2.filterCompacted(MessageV2.stream(session.id))
|
||||||
expect(result).toHaveLength(2)
|
expect(result).toHaveLength(2)
|
||||||
@ -748,7 +748,7 @@ describe("MessageV2.filterCompacted", () => {
|
|||||||
isRetryable: true,
|
isRetryable: true,
|
||||||
}).toObject() as MessageV2.Assistant["error"]
|
}).toObject() as MessageV2.Assistant["error"]
|
||||||
await addAssistant(session.id, u1, { summary: true, finish: "end_turn", error })
|
await addAssistant(session.id, u1, { summary: true, finish: "end_turn", error })
|
||||||
const u2 = await addUser(session.id, "retry")
|
await addUser(session.id, "retry")
|
||||||
|
|
||||||
const result = MessageV2.filterCompacted(MessageV2.stream(session.id))
|
const result = MessageV2.filterCompacted(MessageV2.stream(session.id))
|
||||||
// Error assistant doesn't add to completed, so compaction boundary never triggers
|
// Error assistant doesn't add to completed, so compaction boundary never triggers
|
||||||
@ -770,7 +770,7 @@ describe("MessageV2.filterCompacted", () => {
|
|||||||
|
|
||||||
// summary=true but no finish
|
// summary=true but no finish
|
||||||
await addAssistant(session.id, u1, { summary: true })
|
await addAssistant(session.id, u1, { summary: true })
|
||||||
const u2 = await addUser(session.id, "next")
|
await addUser(session.id, "next")
|
||||||
|
|
||||||
const result = MessageV2.filterCompacted(MessageV2.stream(session.id))
|
const result = MessageV2.filterCompacted(MessageV2.stream(session.id))
|
||||||
expect(result).toHaveLength(3)
|
expect(result).toHaveLength(3)
|
||||||
@ -892,7 +892,7 @@ describe("MessageV2 consistency", () => {
|
|||||||
directory: root,
|
directory: root,
|
||||||
fn: async () => {
|
fn: async () => {
|
||||||
const session = await svc.create({})
|
const session = await svc.create({})
|
||||||
const ids = await fill(session.id, 4)
|
await fill(session.id, 4)
|
||||||
|
|
||||||
const filtered = MessageV2.filterCompacted(MessageV2.stream(session.id))
|
const filtered = MessageV2.filterCompacted(MessageV2.stream(session.id))
|
||||||
const all = Array.from(MessageV2.stream(session.id)).reverse()
|
const all = Array.from(MessageV2.stream(session.id)).reverse()
|
||||||
|
|||||||
@ -5,7 +5,7 @@ export const message = {
|
|||||||
info: UserMessage
|
info: UserMessage
|
||||||
parts: Part[]
|
parts: Part[]
|
||||||
} {
|
} {
|
||||||
const { parts, ...rest } = input
|
const { parts: _parts, ...rest } = input
|
||||||
|
|
||||||
const info: UserMessage = {
|
const info: UserMessage = {
|
||||||
...rest,
|
...rest,
|
||||||
|
|||||||
@ -290,7 +290,7 @@ describe("AppFileSystem", () => {
|
|||||||
it(
|
it(
|
||||||
"exists works",
|
"exists works",
|
||||||
Effect.gen(function* () {
|
Effect.gen(function* () {
|
||||||
const fs = yield* AppFileSystem.Service
|
yield* AppFileSystem.Service
|
||||||
const filesys = yield* FileSystem.FileSystem
|
const filesys = yield* FileSystem.FileSystem
|
||||||
const tmp = yield* filesys.makeTempDirectoryScoped()
|
const tmp = yield* filesys.makeTempDirectoryScoped()
|
||||||
const file = path.join(tmp, "exists.txt")
|
const file = path.join(tmp, "exists.txt")
|
||||||
@ -304,7 +304,7 @@ describe("AppFileSystem", () => {
|
|||||||
it(
|
it(
|
||||||
"remove works",
|
"remove works",
|
||||||
Effect.gen(function* () {
|
Effect.gen(function* () {
|
||||||
const fs = yield* AppFileSystem.Service
|
yield* AppFileSystem.Service
|
||||||
const filesys = yield* FileSystem.FileSystem
|
const filesys = yield* FileSystem.FileSystem
|
||||||
const tmp = yield* filesys.makeTempDirectoryScoped()
|
const tmp = yield* filesys.makeTempDirectoryScoped()
|
||||||
const file = path.join(tmp, "delete-me.txt")
|
const file = path.join(tmp, "delete-me.txt")
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
import fs from "fs/promises"
|
import fs from "fs/promises"
|
||||||
import path from "path"
|
|
||||||
import os from "os"
|
import os from "os"
|
||||||
import { Effect, Layer } from "effect"
|
import { Effect, Layer } from "effect"
|
||||||
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
|
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
|
||||||
|
|||||||
@ -27,7 +27,7 @@ const sessions = new Map<string, { client: any; server: any; sessionId: string;
|
|||||||
const part = event.properties.part
|
const part = event.properties.part
|
||||||
if (part.type === "tool") {
|
if (part.type === "tool") {
|
||||||
// Find the session for this tool update
|
// Find the session for this tool update
|
||||||
for (const [sessionKey, session] of sessions.entries()) {
|
for (const [_sessionKey, session] of sessions.entries()) {
|
||||||
if (session.sessionId === part.sessionID) {
|
if (session.sessionId === part.sessionID) {
|
||||||
handleToolUpdate(part, session.channel, session.thread)
|
handleToolUpdate(part, session.channel, session.thread)
|
||||||
break
|
break
|
||||||
|
|||||||
@ -4,34 +4,6 @@ import { Script } from "@opencode-ai/script"
|
|||||||
import { $ } from "bun"
|
import { $ } from "bun"
|
||||||
import { fileURLToPath } from "url"
|
import { fileURLToPath } from "url"
|
||||||
|
|
||||||
const highlightsTemplate = `
|
|
||||||
<!--
|
|
||||||
Add highlights before publishing. Delete this section if no highlights.
|
|
||||||
|
|
||||||
- For multiple highlights, use multiple <highlight> tags
|
|
||||||
- Highlights with the same source attribute get grouped together
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!--
|
|
||||||
<highlight source="SourceName (TUI/Desktop/Web/Core)">
|
|
||||||
<h2>Feature title goes here</h2>
|
|
||||||
<p short="Short description used for Desktop Recap">
|
|
||||||
Full description of the feature or change
|
|
||||||
</p>
|
|
||||||
|
|
||||||
https://github.com/user-attachments/assets/uuid-for-video (you will want to drag & drop the video or picture)
|
|
||||||
|
|
||||||
<img
|
|
||||||
width="1912"
|
|
||||||
height="1164"
|
|
||||||
alt="image"
|
|
||||||
src="https://github.com/user-attachments/assets/uuid-for-image"
|
|
||||||
/>
|
|
||||||
</highlight>
|
|
||||||
-->
|
|
||||||
|
|
||||||
`
|
|
||||||
|
|
||||||
console.log("=== publishing ===\n")
|
console.log("=== publishing ===\n")
|
||||||
|
|
||||||
const pkgjsons = await Array.fromAsync(
|
const pkgjsons = await Array.fromAsync(
|
||||||
|
|||||||
@ -193,7 +193,7 @@ console.log("Fetching GitHub releases for anomalyco/opencode...\n")
|
|||||||
const releases = await fetchReleases()
|
const releases = await fetchReleases()
|
||||||
console.log(`\nFetched ${releases.length} releases total\n`)
|
console.log(`\nFetched ${releases.length} releases total\n`)
|
||||||
|
|
||||||
const { total: githubTotal, stats } = calculate(releases)
|
const { total: githubTotal } = calculate(releases)
|
||||||
|
|
||||||
console.log("Fetching npm all-time downloads for opencode-ai...\n")
|
console.log("Fetching npm all-time downloads for opencode-ai...\n")
|
||||||
const npmDownloads = await fetchNpmDownloads("opencode-ai")
|
const npmDownloads = await fetchNpmDownloads("opencode-ai")
|
||||||
|
|||||||
@ -6,11 +6,11 @@ import * as vscode from "vscode"
|
|||||||
const TERMINAL_NAME = "opencode"
|
const TERMINAL_NAME = "opencode"
|
||||||
|
|
||||||
export function activate(context: vscode.ExtensionContext) {
|
export function activate(context: vscode.ExtensionContext) {
|
||||||
let openNewTerminalDisposable = vscode.commands.registerCommand("opencode.openNewTerminal", async () => {
|
const openNewTerminalDisposable = vscode.commands.registerCommand("opencode.openNewTerminal", async () => {
|
||||||
await openTerminal()
|
await openTerminal()
|
||||||
})
|
})
|
||||||
|
|
||||||
let openTerminalDisposable = vscode.commands.registerCommand("opencode.openTerminal", async () => {
|
const openTerminalDisposable = vscode.commands.registerCommand("opencode.openTerminal", async () => {
|
||||||
// An opencode terminal already exists => focus it
|
// An opencode terminal already exists => focus it
|
||||||
const existingTerminal = vscode.window.terminals.find((t) => t.name === TERMINAL_NAME)
|
const existingTerminal = vscode.window.terminals.find((t) => t.name === TERMINAL_NAME)
|
||||||
if (existingTerminal) {
|
if (existingTerminal) {
|
||||||
@ -40,7 +40,7 @@ export function activate(context: vscode.ExtensionContext) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
context.subscriptions.push(openTerminalDisposable, addFilepathDisposable)
|
context.subscriptions.push(openNewTerminalDisposable, openTerminalDisposable, addFilepathDisposable)
|
||||||
|
|
||||||
async function openTerminal() {
|
async function openTerminal() {
|
||||||
// Create a new terminal in split screen
|
// Create a new terminal in split screen
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user