mirror of
https://fastgit.cc/https://github.com/anomalyco/opencode
synced 2026-05-03 07:11:31 +08:00
Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1986a6e817 | ||
|
|
dfe1325fca | ||
|
|
c1686c6ddc | ||
|
|
79b6ce5db4 | ||
|
|
0c816eb4b1 | ||
|
|
e318e173d8 | ||
|
|
b314781a1a | ||
|
|
8396d6b016 | ||
|
|
43e20874f4 | ||
|
|
c444e971b0 | ||
|
|
430bde9e9b | ||
|
|
05b82a6a30 | ||
|
|
6cd02c05c2 | ||
|
|
b3a7513765 | ||
|
|
f8738c9002 | ||
|
|
b460db15d7 | ||
|
|
ff4779ca11 | ||
|
|
146ff8ad85 | ||
|
|
0d0ec7dc46 | ||
|
|
1ea6e6cd4b | ||
|
|
96061222d2 | ||
|
|
3b9155714d | ||
|
|
7371db5cc6 | ||
|
|
b09b7d28b8 | ||
|
|
31ed4602e1 |
32
bun.lock
32
bun.lock
@@ -29,7 +29,7 @@
|
||||
},
|
||||
"packages/app": {
|
||||
"name": "@opencode-ai/app",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"dependencies": {
|
||||
"@kobalte/core": "catalog:",
|
||||
"@opencode-ai/core": "workspace:*",
|
||||
@@ -85,7 +85,7 @@
|
||||
},
|
||||
"packages/console/app": {
|
||||
"name": "@opencode-ai/console-app",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"dependencies": {
|
||||
"@cloudflare/vite-plugin": "1.15.2",
|
||||
"@ibm/plex": "6.4.1",
|
||||
@@ -119,7 +119,7 @@
|
||||
},
|
||||
"packages/console/core": {
|
||||
"name": "@opencode-ai/console-core",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"dependencies": {
|
||||
"@aws-sdk/client-sts": "3.782.0",
|
||||
"@jsx-email/render": "1.1.1",
|
||||
@@ -146,7 +146,7 @@
|
||||
},
|
||||
"packages/console/function": {
|
||||
"name": "@opencode-ai/console-function",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"dependencies": {
|
||||
"@ai-sdk/anthropic": "3.0.64",
|
||||
"@ai-sdk/openai": "3.0.48",
|
||||
@@ -170,7 +170,7 @@
|
||||
},
|
||||
"packages/console/mail": {
|
||||
"name": "@opencode-ai/console-mail",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"dependencies": {
|
||||
"@jsx-email/all": "2.2.3",
|
||||
"@jsx-email/cli": "1.4.3",
|
||||
@@ -194,7 +194,7 @@
|
||||
},
|
||||
"packages/core": {
|
||||
"name": "@opencode-ai/core",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"bin": {
|
||||
"opencode": "./bin/opencode",
|
||||
},
|
||||
@@ -228,7 +228,7 @@
|
||||
},
|
||||
"packages/desktop": {
|
||||
"name": "@opencode-ai/desktop",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"dependencies": {
|
||||
"@opencode-ai/app": "workspace:*",
|
||||
"@opencode-ai/ui": "workspace:*",
|
||||
@@ -263,7 +263,7 @@
|
||||
},
|
||||
"packages/desktop-electron": {
|
||||
"name": "@opencode-ai/desktop-electron",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"dependencies": {
|
||||
"drizzle-orm": "catalog:",
|
||||
"effect": "catalog:",
|
||||
@@ -309,7 +309,7 @@
|
||||
},
|
||||
"packages/enterprise": {
|
||||
"name": "@opencode-ai/enterprise",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"dependencies": {
|
||||
"@opencode-ai/core": "workspace:*",
|
||||
"@opencode-ai/ui": "workspace:*",
|
||||
@@ -338,7 +338,7 @@
|
||||
},
|
||||
"packages/function": {
|
||||
"name": "@opencode-ai/function",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"dependencies": {
|
||||
"@octokit/auth-app": "8.0.1",
|
||||
"@octokit/rest": "catalog:",
|
||||
@@ -354,7 +354,7 @@
|
||||
},
|
||||
"packages/opencode": {
|
||||
"name": "opencode",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"bin": {
|
||||
"opencode": "./bin/opencode",
|
||||
},
|
||||
@@ -496,7 +496,7 @@
|
||||
},
|
||||
"packages/plugin": {
|
||||
"name": "@opencode-ai/plugin",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"dependencies": {
|
||||
"@opencode-ai/sdk": "workspace:*",
|
||||
"effect": "catalog:",
|
||||
@@ -531,7 +531,7 @@
|
||||
},
|
||||
"packages/sdk/js": {
|
||||
"name": "@opencode-ai/sdk",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"dependencies": {
|
||||
"cross-spawn": "catalog:",
|
||||
},
|
||||
@@ -546,7 +546,7 @@
|
||||
},
|
||||
"packages/slack": {
|
||||
"name": "@opencode-ai/slack",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"dependencies": {
|
||||
"@opencode-ai/sdk": "workspace:*",
|
||||
"@slack/bolt": "^3.17.1",
|
||||
@@ -581,7 +581,7 @@
|
||||
},
|
||||
"packages/ui": {
|
||||
"name": "@opencode-ai/ui",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"dependencies": {
|
||||
"@kobalte/core": "catalog:",
|
||||
"@opencode-ai/core": "workspace:*",
|
||||
@@ -630,7 +630,7 @@
|
||||
},
|
||||
"packages/web": {
|
||||
"name": "@opencode-ai/web",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"dependencies": {
|
||||
"@astrojs/cloudflare": "12.6.3",
|
||||
"@astrojs/markdown-remark": "6.3.1",
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"nodeModules": {
|
||||
"x86_64-linux": "sha256-OtyfKTBEHsJpjzAjN9vCR0PzGzdK6CDHdyU7eZ6Gl1s=",
|
||||
"aarch64-linux": "sha256-3eHJs3S/+uDUPAouWPsdBOlEvAOhOYx5bJzahL0tAJk=",
|
||||
"aarch64-darwin": "sha256-rFXzrkhPVb3yM20J8R8m7GqroNNk1vAEz+o/Ks+iAI4=",
|
||||
"x86_64-darwin": "sha256-lb1IGgbpxg723Qxj2WVPkxKUUmyOIsFOAhA5LoZ8GwY="
|
||||
"x86_64-linux": "sha256-SLWRe4uPSRWgU+NPa1BywmrUtNVIC0Oy2mjmxclxk+s=",
|
||||
"aarch64-linux": "sha256-toHEeIqMzrmThoV0B52juGKm4pa/aJN3gBFFtrSZp2Q=",
|
||||
"aarch64-darwin": "sha256-lYUsUxq5zR2RXjqZTEdjduOncnlwvTlxDJVKWXJuKPY=",
|
||||
"x86_64-darwin": "sha256-77XmuEYqGwb1mkEHfnghq1VtukFTneohA0FW6WDOk1U="
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,7 +55,6 @@ stdenvNoCC.mkDerivation {
|
||||
--filter './packages/opencode' \
|
||||
--filter './packages/desktop' \
|
||||
--filter './packages/app' \
|
||||
--filter './packages/shared' \
|
||||
--frozen-lockfile \
|
||||
--ignore-scripts \
|
||||
--no-progress
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@opencode-ai/app",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"description": "",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@opencode-ai/console-app",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://json.schemastore.org/package.json",
|
||||
"name": "@opencode-ai/console-core",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@opencode-ai/console-function",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"$schema": "https://json.schemastore.org/package.json",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@opencode-ai/console-mail",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"dependencies": {
|
||||
"@jsx-email/all": "2.2.3",
|
||||
"@jsx-email/cli": "1.4.3",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"$schema": "https://json.schemastore.org/package.json",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"name": "@opencode-ai/core",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@opencode-ai/desktop-electron",
|
||||
"private": true,
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"homepage": "https://opencode.ai",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@opencode-ai/desktop",
|
||||
"private": true,
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@opencode-ai/enterprise",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
id = "opencode"
|
||||
name = "OpenCode"
|
||||
description = "The open source coding agent."
|
||||
version = "1.14.31"
|
||||
version = "1.14.33"
|
||||
schema_version = 1
|
||||
authors = ["Anomaly"]
|
||||
repository = "https://github.com/anomalyco/opencode"
|
||||
@@ -11,26 +11,26 @@ name = "OpenCode"
|
||||
icon = "./icons/opencode.svg"
|
||||
|
||||
[agent_servers.opencode.targets.darwin-aarch64]
|
||||
archive = "https://github.com/anomalyco/opencode/releases/download/v1.14.31/opencode-darwin-arm64.zip"
|
||||
archive = "https://github.com/anomalyco/opencode/releases/download/v1.14.33/opencode-darwin-arm64.zip"
|
||||
cmd = "./opencode"
|
||||
args = ["acp"]
|
||||
|
||||
[agent_servers.opencode.targets.darwin-x86_64]
|
||||
archive = "https://github.com/anomalyco/opencode/releases/download/v1.14.31/opencode-darwin-x64.zip"
|
||||
archive = "https://github.com/anomalyco/opencode/releases/download/v1.14.33/opencode-darwin-x64.zip"
|
||||
cmd = "./opencode"
|
||||
args = ["acp"]
|
||||
|
||||
[agent_servers.opencode.targets.linux-aarch64]
|
||||
archive = "https://github.com/anomalyco/opencode/releases/download/v1.14.31/opencode-linux-arm64.tar.gz"
|
||||
archive = "https://github.com/anomalyco/opencode/releases/download/v1.14.33/opencode-linux-arm64.tar.gz"
|
||||
cmd = "./opencode"
|
||||
args = ["acp"]
|
||||
|
||||
[agent_servers.opencode.targets.linux-x86_64]
|
||||
archive = "https://github.com/anomalyco/opencode/releases/download/v1.14.31/opencode-linux-x64.tar.gz"
|
||||
archive = "https://github.com/anomalyco/opencode/releases/download/v1.14.33/opencode-linux-x64.tar.gz"
|
||||
cmd = "./opencode"
|
||||
args = ["acp"]
|
||||
|
||||
[agent_servers.opencode.targets.windows-x86_64]
|
||||
archive = "https://github.com/anomalyco/opencode/releases/download/v1.14.31/opencode-windows-x64.zip"
|
||||
archive = "https://github.com/anomalyco/opencode/releases/download/v1.14.33/opencode-windows-x64.zip"
|
||||
cmd = "./opencode.exe"
|
||||
args = ["acp"]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@opencode-ai/function",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"$schema": "https://json.schemastore.org/package.json",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"$schema": "https://json.schemastore.org/package.json",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"name": "opencode",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -1,15 +1,17 @@
|
||||
import { Instance } from "../project/instance"
|
||||
import { InstanceStore } from "../project/instance-store"
|
||||
import { getBootstrapRunEffect } from "../effect/app-runtime"
|
||||
|
||||
export async function bootstrap<T>(directory: string, cb: () => Promise<T>) {
|
||||
return Instance.provide({
|
||||
directory,
|
||||
init: await getBootstrapRunEffect(),
|
||||
fn: async () => {
|
||||
try {
|
||||
const result = await cb()
|
||||
return result
|
||||
} finally {
|
||||
await InstanceStore.runtime.runPromise((s) => s.dispose(Instance.current))
|
||||
await InstanceStore.disposeInstance(Instance.current)
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import type { Argv } from "yargs"
|
||||
import { Session } from "@/session/session"
|
||||
import { MessageV2 } from "../../session/message-v2"
|
||||
import { SessionID } from "../../session/schema"
|
||||
import { cmd } from "./cmd"
|
||||
import { bootstrap } from "../bootstrap"
|
||||
import { effectCmd, fail } from "../effect-cmd"
|
||||
import { UI } from "../ui"
|
||||
import * as prompts from "@clack/prompts"
|
||||
import { EOL } from "os"
|
||||
import { AppRuntime } from "@/effect/app-runtime"
|
||||
import { Effect } from "effect"
|
||||
import { InstanceRef } from "@/effect/instance-ref"
|
||||
import { InstanceStore } from "@/project/instance-store"
|
||||
|
||||
function redact(kind: string, id: string, value: string) {
|
||||
return value.trim() ? `[redacted:${kind}:${id}]` : value
|
||||
@@ -220,11 +220,11 @@ function sanitize(data: { info: Session.Info; messages: MessageV2.WithParts[] })
|
||||
}
|
||||
}
|
||||
|
||||
export const ExportCommand = cmd({
|
||||
export const ExportCommand = effectCmd({
|
||||
command: "export [sessionID]",
|
||||
describe: "export session data as JSON",
|
||||
builder: (yargs: Argv) => {
|
||||
return yargs
|
||||
builder: (yargs) =>
|
||||
yargs
|
||||
.positional("sessionID", {
|
||||
describe: "session id to export",
|
||||
type: "string",
|
||||
@@ -232,72 +232,65 @@ export const ExportCommand = cmd({
|
||||
.option("sanitize", {
|
||||
describe: "redact sensitive transcript and file data",
|
||||
type: "boolean",
|
||||
})
|
||||
},
|
||||
handler: async (args) => {
|
||||
await bootstrap(process.cwd(), async () => {
|
||||
let sessionID = args.sessionID ? SessionID.make(args.sessionID) : undefined
|
||||
process.stderr.write(`Exporting session: ${sessionID ?? "latest"}\n`)
|
||||
|
||||
if (!sessionID) {
|
||||
UI.empty()
|
||||
prompts.intro("Export session", {
|
||||
output: process.stderr,
|
||||
})
|
||||
|
||||
const sessions = await AppRuntime.runPromise(Session.Service.use((svc) => svc.list()))
|
||||
|
||||
if (sessions.length === 0) {
|
||||
prompts.log.error("No sessions found", {
|
||||
output: process.stderr,
|
||||
})
|
||||
prompts.outro("Done", {
|
||||
output: process.stderr,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
sessions.sort((a, b) => b.time.updated - a.time.updated)
|
||||
|
||||
const selectedSession = await prompts.autocomplete({
|
||||
message: "Select session to export",
|
||||
maxItems: 10,
|
||||
options: sessions.map((session) => ({
|
||||
label: session.title,
|
||||
value: session.id,
|
||||
hint: `${new Date(session.time.updated).toLocaleString()} • ${session.id.slice(-8)}`,
|
||||
})),
|
||||
output: process.stderr,
|
||||
})
|
||||
|
||||
if (prompts.isCancel(selectedSession)) {
|
||||
throw new UI.CancelledError()
|
||||
}
|
||||
|
||||
sessionID = selectedSession
|
||||
|
||||
prompts.outro("Exporting session...", {
|
||||
output: process.stderr,
|
||||
})
|
||||
}
|
||||
|
||||
try {
|
||||
const sessionInfo = await AppRuntime.runPromise(Session.Service.use((svc) => svc.get(sessionID!)))
|
||||
const messages = await AppRuntime.runPromise(
|
||||
Session.Service.use((svc) => svc.messages({ sessionID: sessionInfo.id })),
|
||||
)
|
||||
|
||||
const exportData = {
|
||||
info: sessionInfo,
|
||||
messages,
|
||||
}
|
||||
|
||||
process.stdout.write(JSON.stringify(args.sanitize ? sanitize(exportData) : exportData, null, 2))
|
||||
process.stdout.write(EOL)
|
||||
} catch {
|
||||
UI.error(`Session not found: ${sessionID!}`)
|
||||
process.exit(1)
|
||||
}
|
||||
})
|
||||
},
|
||||
}),
|
||||
handler: Effect.fn("Cli.export")(function* (args) {
|
||||
const ctx = yield* InstanceRef
|
||||
if (!ctx) return
|
||||
const store = yield* InstanceStore.Service
|
||||
return yield* run(args).pipe(Effect.ensuring(store.dispose(ctx)))
|
||||
}),
|
||||
})
|
||||
|
||||
const run = Effect.fn("Cli.export.body")(function* (args: { sessionID?: string; sanitize?: boolean }) {
|
||||
const svc = yield* Session.Service
|
||||
let sessionID = args.sessionID ? SessionID.make(args.sessionID) : undefined
|
||||
process.stderr.write(`Exporting session: ${sessionID ?? "latest"}\n`)
|
||||
|
||||
if (!sessionID) {
|
||||
UI.empty()
|
||||
prompts.intro("Export session", { output: process.stderr })
|
||||
|
||||
const sessions = yield* svc.list()
|
||||
|
||||
if (sessions.length === 0) {
|
||||
prompts.log.error("No sessions found", { output: process.stderr })
|
||||
prompts.outro("Done", { output: process.stderr })
|
||||
return
|
||||
}
|
||||
|
||||
sessions.sort((a, b) => b.time.updated - a.time.updated)
|
||||
|
||||
const selectedSession = yield* Effect.promise(() =>
|
||||
prompts.autocomplete({
|
||||
message: "Select session to export",
|
||||
maxItems: 10,
|
||||
options: sessions.map((session) => ({
|
||||
label: session.title,
|
||||
value: session.id,
|
||||
hint: `${new Date(session.time.updated).toLocaleString()} • ${session.id.slice(-8)}`,
|
||||
})),
|
||||
output: process.stderr,
|
||||
}),
|
||||
)
|
||||
|
||||
if (prompts.isCancel(selectedSession)) {
|
||||
return yield* Effect.die(new UI.CancelledError())
|
||||
}
|
||||
|
||||
sessionID = selectedSession
|
||||
|
||||
prompts.outro("Exporting session...", { output: process.stderr })
|
||||
}
|
||||
|
||||
// Match legacy try/catch — catches both typed failures and defects
|
||||
// (Session.Service.get throws NotFoundError as a defect, not a typed E).
|
||||
return yield* Effect.gen(function* () {
|
||||
const sessionInfo = yield* svc.get(sessionID!)
|
||||
const messages = yield* svc.messages({ sessionID: sessionInfo.id })
|
||||
|
||||
const exportData = { info: sessionInfo, messages }
|
||||
|
||||
process.stdout.write(JSON.stringify(args.sanitize ? sanitize(exportData) : exportData, null, 2))
|
||||
process.stdout.write(EOL)
|
||||
}).pipe(Effect.catchCause(() => fail(`Session not found: ${sessionID!}`)))
|
||||
})
|
||||
|
||||
@@ -212,7 +212,7 @@ export const GithubInstallCommand = cmd({
|
||||
const app = await getAppInfo()
|
||||
await installGitHubApp()
|
||||
|
||||
const providers = await ModelsDev.get().then((p) => {
|
||||
const providers = await AppRuntime.runPromise(ModelsDev.Service.use((s) => s.get())).then((p) => {
|
||||
// TODO: add guide for copilot, for now just hide it
|
||||
delete p["github-copilot"]
|
||||
return p
|
||||
|
||||
@@ -1,17 +1,15 @@
|
||||
import type { Argv } from "yargs"
|
||||
import type { Session as SDKSession, Message, Part } from "@opencode-ai/sdk/v2"
|
||||
import { Session } from "@/session/session"
|
||||
import { MessageV2 } from "../../session/message-v2"
|
||||
import { cmd } from "./cmd"
|
||||
import { bootstrap } from "../bootstrap"
|
||||
import { CliError, effectCmd } from "../effect-cmd"
|
||||
import { Database } from "@/storage/db"
|
||||
import { SessionTable, MessageTable, PartTable } from "../../session/session.sql"
|
||||
import { Instance } from "../../project/instance"
|
||||
import { InstanceRef } from "@/effect/instance-ref"
|
||||
import { InstanceStore } from "@/project/instance-store"
|
||||
import { ShareNext } from "@/share/share-next"
|
||||
import { EOL } from "os"
|
||||
import { Filesystem } from "@/util/filesystem"
|
||||
import { AppRuntime } from "@/effect/app-runtime"
|
||||
import { Schema } from "effect"
|
||||
import { Effect, Schema } from "effect"
|
||||
|
||||
const decodeMessageInfo = Schema.decodeUnknownSync(MessageV2.Info)
|
||||
const decodePart = Schema.decodeUnknownSync(MessageV2.Part)
|
||||
@@ -78,135 +76,147 @@ export function transformShareData(shareData: ShareData[]): {
|
||||
}
|
||||
}
|
||||
|
||||
export const ImportCommand = cmd({
|
||||
type ExportData = { info: SDKSession; messages: Array<{ info: Message; parts: Part[] }> }
|
||||
|
||||
export const ImportCommand = effectCmd({
|
||||
command: "import <file>",
|
||||
describe: "import session data from JSON file or URL",
|
||||
builder: (yargs: Argv) => {
|
||||
return yargs.positional("file", {
|
||||
builder: (yargs) =>
|
||||
yargs.positional("file", {
|
||||
describe: "path to JSON file or share URL",
|
||||
type: "string",
|
||||
demandOption: true,
|
||||
}),
|
||||
handler: Effect.fn("Cli.import")(function* (args) {
|
||||
// effectCmd always provides InstanceRef via InstanceStore.Service.provide; this is an invariant.
|
||||
const ctx = yield* InstanceRef
|
||||
if (!ctx) return yield* Effect.die("InstanceRef not provided")
|
||||
const store = yield* InstanceStore.Service
|
||||
// Ensure store.dispose runs disposers and emits server.instance.disposed
|
||||
// on every exit path: success, early return, typed failure, defect, interrupt.
|
||||
return yield* runImport(args.file, ctx.project.id).pipe(Effect.ensuring(store.dispose(ctx)))
|
||||
}),
|
||||
})
|
||||
|
||||
const runImport = Effect.fn("Cli.import.body")(function* (file: string, projectID: string) {
|
||||
const share = yield* ShareNext.Service
|
||||
|
||||
let exportData: ExportData | undefined
|
||||
|
||||
const isUrl = file.startsWith("http://") || file.startsWith("https://")
|
||||
|
||||
if (isUrl) {
|
||||
const slug = parseShareUrl(file)
|
||||
if (!slug) {
|
||||
const baseUrl = yield* Effect.orDie(share.url())
|
||||
process.stdout.write(`Invalid URL format. Expected: ${baseUrl}/share/<slug>`)
|
||||
process.stdout.write(EOL)
|
||||
return
|
||||
}
|
||||
|
||||
const baseUrl = new URL(file).origin
|
||||
const req = yield* Effect.orDie(share.request())
|
||||
const headers = shouldAttachShareAuthHeaders(file, req.baseUrl) ? req.headers : {}
|
||||
|
||||
const tryFetch = (url: string) =>
|
||||
Effect.tryPromise({
|
||||
try: () => fetch(url, { headers }),
|
||||
catch: (e) =>
|
||||
new CliError({
|
||||
message: `Failed to fetch share data: ${e instanceof Error ? e.message : String(e)}`,
|
||||
}),
|
||||
})
|
||||
|
||||
const dataPath = req.api.data(slug)
|
||||
let response = yield* tryFetch(`${baseUrl}${dataPath}`)
|
||||
|
||||
if (!response.ok && dataPath !== `/api/share/${slug}/data`) {
|
||||
response = yield* tryFetch(`${baseUrl}/api/share/${slug}/data`)
|
||||
}
|
||||
|
||||
if (!response.ok) {
|
||||
process.stdout.write(`Failed to fetch share data: ${response.statusText}`)
|
||||
process.stdout.write(EOL)
|
||||
return
|
||||
}
|
||||
|
||||
const shareData = yield* Effect.tryPromise({
|
||||
try: () => response.json() as Promise<ShareData[]>,
|
||||
catch: () => new CliError({ message: "Share data was not valid JSON" }),
|
||||
})
|
||||
},
|
||||
handler: async (args) => {
|
||||
await bootstrap(process.cwd(), async () => {
|
||||
let exportData:
|
||||
| {
|
||||
info: SDKSession
|
||||
messages: Array<{
|
||||
info: Message
|
||||
parts: Part[]
|
||||
}>
|
||||
}
|
||||
| undefined
|
||||
const transformed = transformShareData(shareData)
|
||||
|
||||
const isUrl = args.file.startsWith("http://") || args.file.startsWith("https://")
|
||||
if (!transformed) {
|
||||
process.stdout.write(`Share not found or empty: ${slug}`)
|
||||
process.stdout.write(EOL)
|
||||
return
|
||||
}
|
||||
|
||||
if (isUrl) {
|
||||
const slug = parseShareUrl(args.file)
|
||||
if (!slug) {
|
||||
const baseUrl = await AppRuntime.runPromise(ShareNext.Service.use((svc) => svc.url()))
|
||||
process.stdout.write(`Invalid URL format. Expected: ${baseUrl}/share/<slug>`)
|
||||
process.stdout.write(EOL)
|
||||
return
|
||||
}
|
||||
exportData = transformed
|
||||
} else {
|
||||
exportData = yield* Effect.promise(() =>
|
||||
Filesystem.readJson<NonNullable<typeof exportData>>(file).catch(() => undefined),
|
||||
)
|
||||
if (!exportData) {
|
||||
process.stdout.write(`File not found: ${file}`)
|
||||
process.stdout.write(EOL)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
const parsed = new URL(args.file)
|
||||
const baseUrl = parsed.origin
|
||||
const req = await AppRuntime.runPromise(ShareNext.Service.use((svc) => svc.request()))
|
||||
const headers = shouldAttachShareAuthHeaders(args.file, req.baseUrl) ? req.headers : {}
|
||||
if (!exportData) {
|
||||
process.stdout.write(`Failed to read session data`)
|
||||
process.stdout.write(EOL)
|
||||
return
|
||||
}
|
||||
|
||||
const dataPath = req.api.data(slug)
|
||||
let response = await fetch(`${baseUrl}${dataPath}`, {
|
||||
headers,
|
||||
const info = Schema.decodeUnknownSync(Session.Info)({
|
||||
...exportData.info,
|
||||
projectID,
|
||||
}) as Session.Info
|
||||
const row = Session.toRow(info)
|
||||
Database.use((db) =>
|
||||
db
|
||||
.insert(SessionTable)
|
||||
.values(row)
|
||||
.onConflictDoUpdate({ target: SessionTable.id, set: { project_id: row.project_id } })
|
||||
.run(),
|
||||
)
|
||||
|
||||
for (const msg of exportData.messages) {
|
||||
const msgInfo = decodeMessageInfo(msg.info) as MessageV2.Info
|
||||
const { id, sessionID: _, ...msgData } = msgInfo
|
||||
Database.use((db) =>
|
||||
db
|
||||
.insert(MessageTable)
|
||||
.values({
|
||||
id,
|
||||
session_id: row.id,
|
||||
time_created: msgInfo.time?.created ?? Date.now(),
|
||||
data: msgData,
|
||||
})
|
||||
.onConflictDoNothing()
|
||||
.run(),
|
||||
)
|
||||
|
||||
if (!response.ok && dataPath !== `/api/share/${slug}/data`) {
|
||||
response = await fetch(`${baseUrl}/api/share/${slug}/data`, {
|
||||
headers,
|
||||
})
|
||||
}
|
||||
|
||||
if (!response.ok) {
|
||||
process.stdout.write(`Failed to fetch share data: ${response.statusText}`)
|
||||
process.stdout.write(EOL)
|
||||
return
|
||||
}
|
||||
|
||||
const shareData: ShareData[] = await response.json()
|
||||
const transformed = transformShareData(shareData)
|
||||
|
||||
if (!transformed) {
|
||||
process.stdout.write(`Share not found or empty: ${slug}`)
|
||||
process.stdout.write(EOL)
|
||||
return
|
||||
}
|
||||
|
||||
exportData = transformed
|
||||
} else {
|
||||
exportData = await Filesystem.readJson<NonNullable<typeof exportData>>(args.file).catch(() => undefined)
|
||||
if (!exportData) {
|
||||
process.stdout.write(`File not found: ${args.file}`)
|
||||
process.stdout.write(EOL)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if (!exportData) {
|
||||
process.stdout.write(`Failed to read session data`)
|
||||
process.stdout.write(EOL)
|
||||
return
|
||||
}
|
||||
|
||||
const info = Schema.decodeUnknownSync(Session.Info)({
|
||||
...exportData.info,
|
||||
projectID: Instance.project.id,
|
||||
}) as Session.Info
|
||||
const row = Session.toRow(info)
|
||||
for (const part of msg.parts) {
|
||||
const partInfo = decodePart(part) as MessageV2.Part
|
||||
const { id: partId, sessionID: _s, messageID, ...partData } = partInfo
|
||||
Database.use((db) =>
|
||||
db
|
||||
.insert(SessionTable)
|
||||
.values(row)
|
||||
.onConflictDoUpdate({ target: SessionTable.id, set: { project_id: row.project_id } })
|
||||
.insert(PartTable)
|
||||
.values({
|
||||
id: partId,
|
||||
message_id: messageID,
|
||||
session_id: row.id,
|
||||
data: partData,
|
||||
})
|
||||
.onConflictDoNothing()
|
||||
.run(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
for (const msg of exportData.messages) {
|
||||
const msgInfo = decodeMessageInfo(msg.info) as MessageV2.Info
|
||||
const { id, sessionID: _, ...msgData } = msgInfo
|
||||
Database.use((db) =>
|
||||
db
|
||||
.insert(MessageTable)
|
||||
.values({
|
||||
id,
|
||||
session_id: row.id,
|
||||
time_created: msgInfo.time?.created ?? Date.now(),
|
||||
data: msgData,
|
||||
})
|
||||
.onConflictDoNothing()
|
||||
.run(),
|
||||
)
|
||||
|
||||
for (const part of msg.parts) {
|
||||
const partInfo = decodePart(part) as MessageV2.Part
|
||||
const { id: partId, sessionID: _s, messageID, ...partData } = partInfo
|
||||
Database.use((db) =>
|
||||
db
|
||||
.insert(PartTable)
|
||||
.values({
|
||||
id: partId,
|
||||
message_id: messageID,
|
||||
session_id: row.id,
|
||||
data: partData,
|
||||
})
|
||||
.onConflictDoNothing()
|
||||
.run(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
process.stdout.write(`Imported session: ${exportData.info.id}`)
|
||||
process.stdout.write(EOL)
|
||||
})
|
||||
},
|
||||
process.stdout.write(`Imported session: ${exportData.info.id}`)
|
||||
process.stdout.write(EOL)
|
||||
})
|
||||
|
||||
@@ -1,19 +1,16 @@
|
||||
import type { Argv } from "yargs"
|
||||
import { Instance } from "../../project/instance"
|
||||
import { EOL } from "os"
|
||||
import { Effect } from "effect"
|
||||
import { Provider } from "@/provider/provider"
|
||||
import { ProviderID } from "../../provider/schema"
|
||||
import { ModelsDev } from "@/provider/models"
|
||||
import { cmd } from "./cmd"
|
||||
import { effectCmd, fail } from "../effect-cmd"
|
||||
import { UI } from "../ui"
|
||||
import { EOL } from "os"
|
||||
import { AppRuntime } from "@/effect/app-runtime"
|
||||
import { Effect } from "effect"
|
||||
|
||||
export const ModelsCommand = cmd({
|
||||
export const ModelsCommand = effectCmd({
|
||||
command: "models [provider]",
|
||||
describe: "list all available models",
|
||||
builder: (yargs: Argv) => {
|
||||
return yargs
|
||||
builder: (yargs) =>
|
||||
yargs
|
||||
.positional("provider", {
|
||||
describe: "provider ID to filter models by",
|
||||
type: "string",
|
||||
@@ -26,63 +23,44 @@ export const ModelsCommand = cmd({
|
||||
.option("refresh", {
|
||||
describe: "refresh the models cache from models.dev",
|
||||
type: "boolean",
|
||||
})
|
||||
},
|
||||
handler: async (args) => {
|
||||
}),
|
||||
handler: Effect.fn("Cli.models")(function* (args) {
|
||||
if (args.refresh) {
|
||||
await ModelsDev.refresh(true)
|
||||
yield* ModelsDev.Service.use((s) => s.refresh(true))
|
||||
UI.println(UI.Style.TEXT_SUCCESS_BOLD + "Models cache refreshed" + UI.Style.TEXT_NORMAL)
|
||||
}
|
||||
|
||||
await Instance.provide({
|
||||
directory: process.cwd(),
|
||||
async fn() {
|
||||
await AppRuntime.runPromise(
|
||||
Effect.gen(function* () {
|
||||
const svc = yield* Provider.Service
|
||||
const providers = yield* svc.list()
|
||||
const provider = yield* Provider.Service
|
||||
const providers = yield* provider.list()
|
||||
|
||||
const print = (providerID: ProviderID, verbose?: boolean) => {
|
||||
const provider = providers[providerID]
|
||||
const sorted = Object.entries(provider.models).sort(([a], [b]) => a.localeCompare(b))
|
||||
for (const [modelID, model] of sorted) {
|
||||
process.stdout.write(`${providerID}/${modelID}`)
|
||||
process.stdout.write(EOL)
|
||||
if (verbose) {
|
||||
process.stdout.write(JSON.stringify(model, null, 2))
|
||||
process.stdout.write(EOL)
|
||||
}
|
||||
}
|
||||
}
|
||||
const print = (providerID: ProviderID, verbose?: boolean) => {
|
||||
const p = providers[providerID]
|
||||
const sorted = Object.entries(p.models).sort(([a], [b]) => a.localeCompare(b))
|
||||
for (const [modelID, model] of sorted) {
|
||||
process.stdout.write(`${providerID}/${modelID}`)
|
||||
process.stdout.write(EOL)
|
||||
if (verbose) {
|
||||
process.stdout.write(JSON.stringify(model, null, 2))
|
||||
process.stdout.write(EOL)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (args.provider) {
|
||||
const providerID = ProviderID.make(args.provider)
|
||||
const provider = providers[providerID]
|
||||
if (!provider) {
|
||||
yield* Effect.sync(() => UI.error(`Provider not found: ${args.provider}`))
|
||||
return
|
||||
}
|
||||
if (args.provider) {
|
||||
const providerID = ProviderID.make(args.provider)
|
||||
if (!providers[providerID]) return yield* fail(`Provider not found: ${args.provider}`)
|
||||
print(providerID, args.verbose)
|
||||
return
|
||||
}
|
||||
|
||||
yield* Effect.sync(() => print(providerID, args.verbose))
|
||||
return
|
||||
}
|
||||
|
||||
const ids = Object.keys(providers).sort((a, b) => {
|
||||
const aIsOpencode = a.startsWith("opencode")
|
||||
const bIsOpencode = b.startsWith("opencode")
|
||||
if (aIsOpencode && !bIsOpencode) return -1
|
||||
if (!aIsOpencode && bIsOpencode) return 1
|
||||
return a.localeCompare(b)
|
||||
})
|
||||
|
||||
yield* Effect.sync(() => {
|
||||
for (const providerID of ids) {
|
||||
print(ProviderID.make(providerID), args.verbose)
|
||||
}
|
||||
})
|
||||
}),
|
||||
)
|
||||
},
|
||||
const ids = Object.keys(providers).sort((a, b) => {
|
||||
const aIsOpencode = a.startsWith("opencode")
|
||||
const bIsOpencode = b.startsWith("opencode")
|
||||
if (aIsOpencode && !bIsOpencode) return -1
|
||||
if (!aIsOpencode && bIsOpencode) return 1
|
||||
return a.localeCompare(b)
|
||||
})
|
||||
},
|
||||
|
||||
for (const providerID of ids) print(ProviderID.make(providerID), args.verbose)
|
||||
}),
|
||||
})
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
import { intro, log, outro, spinner } from "@clack/prompts"
|
||||
import type { Argv } from "yargs"
|
||||
import { Effect } from "effect"
|
||||
|
||||
import { ConfigPaths } from "@/config/paths"
|
||||
import { Global } from "@opencode-ai/core/global"
|
||||
import { installPlugin, patchPluginConfig, readPluginManifest } from "../../plugin/install"
|
||||
import { resolvePluginTarget } from "../../plugin/shared"
|
||||
import { Instance } from "../../project/instance"
|
||||
import { errorMessage } from "../../util/error"
|
||||
import { Filesystem } from "@/util/filesystem"
|
||||
import { Process } from "@/util/process"
|
||||
import { UI } from "../ui"
|
||||
import { cmd } from "./cmd"
|
||||
import { effectCmd } from "../effect-cmd"
|
||||
import { InstanceRef } from "@/effect/instance-ref"
|
||||
|
||||
type Spin = {
|
||||
start: (msg: string) => void
|
||||
@@ -175,12 +175,12 @@ export function createPlugTask(input: PlugInput, dep: PlugDeps = defaultPlugDeps
|
||||
}
|
||||
}
|
||||
|
||||
export const PluginCommand = cmd({
|
||||
export const PluginCommand = effectCmd({
|
||||
command: "plugin <module>",
|
||||
aliases: ["plug"],
|
||||
describe: "install plugin and update config",
|
||||
builder: (yargs: Argv) => {
|
||||
return yargs
|
||||
builder: (yargs) =>
|
||||
yargs
|
||||
.positional("module", {
|
||||
type: "string",
|
||||
describe: "npm module name",
|
||||
@@ -196,9 +196,8 @@ export const PluginCommand = cmd({
|
||||
type: "boolean",
|
||||
default: false,
|
||||
describe: "replace existing plugin version",
|
||||
})
|
||||
},
|
||||
handler: async (args) => {
|
||||
}),
|
||||
handler: Effect.fn("Cli.plug")(function* (args) {
|
||||
const mod = String(args.module ?? "").trim()
|
||||
if (!mod) {
|
||||
UI.error("module is required")
|
||||
@@ -214,20 +213,18 @@ export const PluginCommand = cmd({
|
||||
global: Boolean(args.global),
|
||||
force: Boolean(args.force),
|
||||
})
|
||||
let ok = true
|
||||
|
||||
await Instance.provide({
|
||||
directory: process.cwd(),
|
||||
fn: async () => {
|
||||
ok = await run({
|
||||
vcs: Instance.project.vcs,
|
||||
worktree: Instance.worktree,
|
||||
directory: Instance.directory,
|
||||
})
|
||||
},
|
||||
})
|
||||
const ctx = yield* InstanceRef
|
||||
if (!ctx) return
|
||||
const ok = yield* Effect.promise(() =>
|
||||
run({
|
||||
vcs: ctx.project.vcs,
|
||||
worktree: ctx.worktree,
|
||||
directory: ctx.directory,
|
||||
}),
|
||||
)
|
||||
|
||||
outro("Done")
|
||||
if (!ok) process.exitCode = 1
|
||||
},
|
||||
}),
|
||||
})
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { Effect } from "effect"
|
||||
import { UI } from "../ui"
|
||||
import { cmd } from "./cmd"
|
||||
import { AppRuntime } from "@/effect/app-runtime"
|
||||
import { effectCmd, fail } from "../effect-cmd"
|
||||
import { Git } from "@/git"
|
||||
import { Instance } from "@/project/instance"
|
||||
import { InstanceRef } from "@/effect/instance-ref"
|
||||
import { Process } from "@/util/process"
|
||||
|
||||
export const PrCommand = cmd({
|
||||
export const PrCommand = effectCmd({
|
||||
command: "pr <number>",
|
||||
describe: "fetch and checkout a GitHub PR branch, then run opencode",
|
||||
builder: (yargs) =>
|
||||
@@ -14,125 +14,102 @@ export const PrCommand = cmd({
|
||||
describe: "PR number to checkout",
|
||||
demandOption: true,
|
||||
}),
|
||||
async handler(args) {
|
||||
await Instance.provide({
|
||||
directory: process.cwd(),
|
||||
async fn() {
|
||||
const project = Instance.project
|
||||
if (project.vcs !== "git") {
|
||||
UI.error("Could not find git repository. Please run this command from a git repository.")
|
||||
process.exit(1)
|
||||
handler: Effect.fn("Cli.pr")(function* (args) {
|
||||
const ctx = yield* InstanceRef
|
||||
if (!ctx) return yield* fail("Could not load instance context")
|
||||
if (ctx.project.vcs !== "git") {
|
||||
return yield* fail("Could not find git repository. Please run this command from a git repository.")
|
||||
}
|
||||
|
||||
const git = yield* Git.Service
|
||||
const worktree = ctx.worktree
|
||||
|
||||
const prNumber = args.number
|
||||
const localBranchName = `pr/${prNumber}`
|
||||
UI.println(`Fetching and checking out PR #${prNumber}...`)
|
||||
|
||||
const checkout = yield* Effect.promise(() =>
|
||||
Process.run(["gh", "pr", "checkout", `${prNumber}`, "--branch", localBranchName, "--force"], { nothrow: true }),
|
||||
)
|
||||
if (checkout.code !== 0) {
|
||||
return yield* fail(`Failed to checkout PR #${prNumber}. Make sure you have gh CLI installed and authenticated.`)
|
||||
}
|
||||
|
||||
const prInfoResult = yield* Effect.promise(() =>
|
||||
Process.text(
|
||||
[
|
||||
"gh",
|
||||
"pr",
|
||||
"view",
|
||||
`${prNumber}`,
|
||||
"--json",
|
||||
"headRepository,headRepositoryOwner,isCrossRepository,headRefName,body",
|
||||
],
|
||||
{ nothrow: true },
|
||||
),
|
||||
)
|
||||
|
||||
let sessionId: string | undefined
|
||||
|
||||
if (prInfoResult.code === 0 && prInfoResult.text.trim()) {
|
||||
const prInfo = JSON.parse(prInfoResult.text)
|
||||
|
||||
if (prInfo?.isCrossRepository && prInfo.headRepository && prInfo.headRepositoryOwner) {
|
||||
const forkOwner = prInfo.headRepositoryOwner.login
|
||||
const forkName = prInfo.headRepository.name
|
||||
const remoteName = forkOwner
|
||||
|
||||
const remotes = (yield* git.run(["remote"], { cwd: worktree })).text().trim()
|
||||
if (!remotes.split("\n").includes(remoteName)) {
|
||||
yield* git.run(["remote", "add", remoteName, `https://github.com/${forkOwner}/${forkName}.git`], {
|
||||
cwd: worktree,
|
||||
})
|
||||
UI.println(`Added fork remote: ${remoteName}`)
|
||||
}
|
||||
|
||||
const prNumber = args.number
|
||||
const localBranchName = `pr/${prNumber}`
|
||||
UI.println(`Fetching and checking out PR #${prNumber}...`)
|
||||
yield* git.run(["branch", `--set-upstream-to=${remoteName}/${prInfo.headRefName}`, localBranchName], {
|
||||
cwd: worktree,
|
||||
})
|
||||
}
|
||||
|
||||
// Use gh pr checkout with custom branch name
|
||||
const result = await Process.run(
|
||||
["gh", "pr", "checkout", `${prNumber}`, "--branch", localBranchName, "--force"],
|
||||
{
|
||||
nothrow: true,
|
||||
},
|
||||
)
|
||||
if (prInfo?.body) {
|
||||
const sessionMatch = prInfo.body.match(/https:\/\/opncd\.ai\/s\/([a-zA-Z0-9_-]+)/)
|
||||
if (sessionMatch) {
|
||||
const sessionUrl = sessionMatch[0]
|
||||
UI.println(`Found opencode session: ${sessionUrl}`)
|
||||
UI.println(`Importing session...`)
|
||||
|
||||
if (result.code !== 0) {
|
||||
UI.error(`Failed to checkout PR #${prNumber}. Make sure you have gh CLI installed and authenticated.`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
// Fetch PR info for fork handling and session link detection
|
||||
const prInfoResult = await Process.text(
|
||||
[
|
||||
"gh",
|
||||
"pr",
|
||||
"view",
|
||||
`${prNumber}`,
|
||||
"--json",
|
||||
"headRepository,headRepositoryOwner,isCrossRepository,headRefName,body",
|
||||
],
|
||||
{ nothrow: true },
|
||||
)
|
||||
|
||||
let sessionId: string | undefined
|
||||
|
||||
if (prInfoResult.code === 0) {
|
||||
const prInfoText = prInfoResult.text
|
||||
if (prInfoText.trim()) {
|
||||
const prInfo = JSON.parse(prInfoText)
|
||||
|
||||
// Handle fork PRs
|
||||
if (prInfo && prInfo.isCrossRepository && prInfo.headRepository && prInfo.headRepositoryOwner) {
|
||||
const forkOwner = prInfo.headRepositoryOwner.login
|
||||
const forkName = prInfo.headRepository.name
|
||||
const remoteName = forkOwner
|
||||
|
||||
// Check if remote already exists
|
||||
const remotes = await AppRuntime.runPromise(
|
||||
Git.Service.use((git) => git.run(["remote"], { cwd: Instance.worktree })),
|
||||
).then((x) => x.text().trim())
|
||||
if (!remotes.split("\n").includes(remoteName)) {
|
||||
await AppRuntime.runPromise(
|
||||
Git.Service.use((git) =>
|
||||
git.run(["remote", "add", remoteName, `https://github.com/${forkOwner}/${forkName}.git`], {
|
||||
cwd: Instance.worktree,
|
||||
}),
|
||||
),
|
||||
)
|
||||
UI.println(`Added fork remote: ${remoteName}`)
|
||||
}
|
||||
|
||||
// Set upstream to the fork so pushes go there
|
||||
const headRefName = prInfo.headRefName
|
||||
await AppRuntime.runPromise(
|
||||
Git.Service.use((git) =>
|
||||
git.run(["branch", `--set-upstream-to=${remoteName}/${headRefName}`, localBranchName], {
|
||||
cwd: Instance.worktree,
|
||||
}),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
// Check for opencode session link in PR body
|
||||
if (prInfo && prInfo.body) {
|
||||
const sessionMatch = prInfo.body.match(/https:\/\/opncd\.ai\/s\/([a-zA-Z0-9_-]+)/)
|
||||
if (sessionMatch) {
|
||||
const sessionUrl = sessionMatch[0]
|
||||
UI.println(`Found opencode session: ${sessionUrl}`)
|
||||
UI.println(`Importing session...`)
|
||||
|
||||
const importResult = await Process.text(["opencode", "import", sessionUrl], {
|
||||
nothrow: true,
|
||||
})
|
||||
if (importResult.code === 0) {
|
||||
const importOutput = importResult.text.trim()
|
||||
// Extract session ID from the output (format: "Imported session: <session-id>")
|
||||
const sessionIdMatch = importOutput.match(/Imported session: ([a-zA-Z0-9_-]+)/)
|
||||
if (sessionIdMatch) {
|
||||
sessionId = sessionIdMatch[1]
|
||||
UI.println(`Session imported: ${sessionId}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
const importResult = yield* Effect.promise(() =>
|
||||
Process.text(["opencode", "import", sessionUrl], { nothrow: true }),
|
||||
)
|
||||
if (importResult.code === 0) {
|
||||
const sessionIdMatch = importResult.text.trim().match(/Imported session: ([a-zA-Z0-9_-]+)/)
|
||||
if (sessionIdMatch) {
|
||||
sessionId = sessionIdMatch[1]
|
||||
UI.println(`Session imported: ${sessionId}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
UI.println(`Successfully checked out PR #${prNumber} as branch '${localBranchName}'`)
|
||||
UI.println()
|
||||
UI.println("Starting opencode...")
|
||||
UI.println()
|
||||
UI.println(`Successfully checked out PR #${prNumber} as branch '${localBranchName}'`)
|
||||
UI.println()
|
||||
UI.println("Starting opencode...")
|
||||
UI.println()
|
||||
|
||||
const opencodeArgs = sessionId ? ["-s", sessionId] : []
|
||||
const opencodeProcess = Process.spawn(["opencode", ...opencodeArgs], {
|
||||
const opencodeArgs = sessionId ? ["-s", sessionId] : []
|
||||
const code = yield* Effect.promise(
|
||||
() =>
|
||||
Process.spawn(["opencode", ...opencodeArgs], {
|
||||
stdin: "inherit",
|
||||
stdout: "inherit",
|
||||
stderr: "inherit",
|
||||
cwd: process.cwd(),
|
||||
})
|
||||
const code = await opencodeProcess.exited
|
||||
if (code !== 0) throw new Error(`opencode exited with code ${code}`)
|
||||
},
|
||||
})
|
||||
},
|
||||
}).exited,
|
||||
)
|
||||
// Match legacy throw semantics — propagate as a defect so the top-level
|
||||
// index.ts catch handles it identically (exit 1, "Unexpected error" banner).
|
||||
if (code !== 0) return yield* Effect.die(new Error(`opencode exited with code ${code}`))
|
||||
}),
|
||||
})
|
||||
|
||||
@@ -4,6 +4,9 @@ import { cmd } from "./cmd"
|
||||
import * as prompts from "@clack/prompts"
|
||||
import { UI } from "../ui"
|
||||
import { ModelsDev } from "@/provider/models"
|
||||
|
||||
const getModels = () => AppRuntime.runPromise(ModelsDev.Service.use((s) => s.get()))
|
||||
const refreshModels = () => AppRuntime.runPromise(ModelsDev.Service.use((s) => s.refresh(true)))
|
||||
import { map, pipe, sortBy, values } from "remeda"
|
||||
import path from "path"
|
||||
import os from "os"
|
||||
@@ -245,7 +248,7 @@ export const ProvidersListCommand = cmd({
|
||||
return Object.entries(yield* auth.all())
|
||||
}),
|
||||
)
|
||||
const database = await ModelsDev.get()
|
||||
const database = await getModels()
|
||||
|
||||
for (const [providerID, result] of results) {
|
||||
const name = database[providerID]?.name || providerID
|
||||
@@ -334,14 +337,14 @@ export const ProvidersLoginCommand = cmd({
|
||||
prompts.outro("Done")
|
||||
return
|
||||
}
|
||||
await ModelsDev.refresh(true).catch(() => {})
|
||||
await refreshModels().catch(() => {})
|
||||
|
||||
const config = await AppRuntime.runPromise(Config.Service.use((cfg) => cfg.get()))
|
||||
|
||||
const disabled = new Set(config.disabled_providers ?? [])
|
||||
const enabled = config.enabled_providers ? new Set(config.enabled_providers) : undefined
|
||||
|
||||
const providers = await ModelsDev.get().then((x) => {
|
||||
const providers = await getModels().then((x) => {
|
||||
const filtered: Record<string, (typeof x)[string]> = {}
|
||||
for (const [key, value] of Object.entries(x)) {
|
||||
if ((enabled ? enabled.has(key) : true) && !disabled.has(key)) {
|
||||
@@ -505,7 +508,7 @@ export const ProvidersLogoutCommand = cmd({
|
||||
prompts.log.error("No credentials found")
|
||||
return
|
||||
}
|
||||
const database = await ModelsDev.get()
|
||||
const database = await getModels()
|
||||
const selected = await prompts.select({
|
||||
message: "Select provider",
|
||||
options: credentials.map(([key, value]) => ({
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import type { Argv } from "yargs"
|
||||
import { Effect } from "effect"
|
||||
import { cmd } from "./cmd"
|
||||
import { effectCmd, fail } from "../effect-cmd"
|
||||
import { Session } from "@/session/session"
|
||||
import { SessionID } from "../../session/schema"
|
||||
import { bootstrap } from "../bootstrap"
|
||||
import { UI } from "../ui"
|
||||
import { Locale } from "@/util/locale"
|
||||
import { Flag } from "@opencode-ai/core/flag/flag"
|
||||
@@ -11,7 +12,8 @@ import { Process } from "@/util/process"
|
||||
import { EOL } from "os"
|
||||
import path from "path"
|
||||
import { which } from "../../util/which"
|
||||
import { AppRuntime } from "@/effect/app-runtime"
|
||||
import { InstanceRef } from "@/effect/instance-ref"
|
||||
import { InstanceStore } from "@/project/instance-store"
|
||||
|
||||
function pagerCmd(): string[] {
|
||||
const lessOptions = ["-R", "-S"]
|
||||
@@ -47,36 +49,35 @@ export const SessionCommand = cmd({
|
||||
async handler() {},
|
||||
})
|
||||
|
||||
export const SessionDeleteCommand = cmd({
|
||||
export const SessionDeleteCommand = effectCmd({
|
||||
command: "delete <sessionID>",
|
||||
describe: "delete a session",
|
||||
builder: (yargs: Argv) => {
|
||||
return yargs.positional("sessionID", {
|
||||
builder: (yargs) =>
|
||||
yargs.positional("sessionID", {
|
||||
describe: "session ID to delete",
|
||||
type: "string",
|
||||
demandOption: true,
|
||||
})
|
||||
},
|
||||
handler: async (args) => {
|
||||
await bootstrap(process.cwd(), async () => {
|
||||
}),
|
||||
handler: Effect.fn("Cli.session.delete")(function* (args) {
|
||||
const ctx = yield* InstanceRef
|
||||
if (!ctx) return
|
||||
const store = yield* InstanceStore.Service
|
||||
return yield* Effect.gen(function* () {
|
||||
const svc = yield* Session.Service
|
||||
const sessionID = SessionID.make(args.sessionID)
|
||||
try {
|
||||
await AppRuntime.runPromise(Session.Service.use((svc) => svc.get(sessionID)))
|
||||
} catch {
|
||||
UI.error(`Session not found: ${args.sessionID}`)
|
||||
process.exit(1)
|
||||
}
|
||||
await AppRuntime.runPromise(Session.Service.use((svc) => svc.remove(sessionID)))
|
||||
// Match legacy try/catch — Session.get surfaces NotFoundError as a defect.
|
||||
yield* svc.get(sessionID).pipe(Effect.catchCause(() => fail(`Session not found: ${args.sessionID}`)))
|
||||
yield* svc.remove(sessionID)
|
||||
UI.println(UI.Style.TEXT_SUCCESS_BOLD + `Session ${args.sessionID} deleted` + UI.Style.TEXT_NORMAL)
|
||||
})
|
||||
},
|
||||
}).pipe(Effect.ensuring(store.dispose(ctx)))
|
||||
}),
|
||||
})
|
||||
|
||||
export const SessionListCommand = cmd({
|
||||
export const SessionListCommand = effectCmd({
|
||||
command: "list",
|
||||
describe: "list sessions",
|
||||
builder: (yargs: Argv) => {
|
||||
return yargs
|
||||
builder: (yargs) =>
|
||||
yargs
|
||||
.option("max-count", {
|
||||
alias: "n",
|
||||
describe: "limit to N most recent sessions",
|
||||
@@ -87,47 +88,42 @@ export const SessionListCommand = cmd({
|
||||
type: "string",
|
||||
choices: ["table", "json"],
|
||||
default: "table",
|
||||
})
|
||||
},
|
||||
handler: async (args) => {
|
||||
await bootstrap(process.cwd(), async () => {
|
||||
const sessions = await AppRuntime.runPromise(
|
||||
Session.Service.use((svc) => svc.list({ roots: true, limit: args.maxCount })),
|
||||
)
|
||||
}),
|
||||
handler: Effect.fn("Cli.session.list")(function* (args) {
|
||||
const ctx = yield* InstanceRef
|
||||
if (!ctx) return
|
||||
const store = yield* InstanceStore.Service
|
||||
return yield* Effect.gen(function* () {
|
||||
const sessions = yield* Session.Service.use((svc) => svc.list({ roots: true, limit: args.maxCount }))
|
||||
|
||||
if (sessions.length === 0) {
|
||||
return
|
||||
}
|
||||
if (sessions.length === 0) return
|
||||
|
||||
let output: string
|
||||
if (args.format === "json") {
|
||||
output = formatSessionJSON(sessions)
|
||||
} else {
|
||||
output = formatSessionTable(sessions)
|
||||
}
|
||||
const output = args.format === "json" ? formatSessionJSON(sessions) : formatSessionTable(sessions)
|
||||
|
||||
const shouldPaginate = process.stdout.isTTY && !args.maxCount && args.format === "table"
|
||||
|
||||
if (shouldPaginate) {
|
||||
const proc = Process.spawn(pagerCmd(), {
|
||||
stdin: "pipe",
|
||||
stdout: "inherit",
|
||||
stderr: "inherit",
|
||||
yield* Effect.promise(async () => {
|
||||
const proc = Process.spawn(pagerCmd(), {
|
||||
stdin: "pipe",
|
||||
stdout: "inherit",
|
||||
stderr: "inherit",
|
||||
})
|
||||
|
||||
if (!proc.stdin) {
|
||||
console.log(output)
|
||||
return
|
||||
}
|
||||
|
||||
proc.stdin.write(output)
|
||||
proc.stdin.end()
|
||||
await proc.exited
|
||||
})
|
||||
|
||||
if (!proc.stdin) {
|
||||
console.log(output)
|
||||
return
|
||||
}
|
||||
|
||||
proc.stdin.write(output)
|
||||
proc.stdin.end()
|
||||
await proc.exited
|
||||
} else {
|
||||
console.log(output)
|
||||
}
|
||||
})
|
||||
},
|
||||
}).pipe(Effect.ensuring(store.dispose(ctx)))
|
||||
}),
|
||||
})
|
||||
|
||||
function formatSessionTable(sessions: Session.Info[]): string {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import type { Argv } from "yargs"
|
||||
import { cmd } from "./cmd"
|
||||
import { Effect } from "effect"
|
||||
import { effectCmd } from "../effect-cmd"
|
||||
import { Session } from "@/session/session"
|
||||
import { bootstrap } from "../bootstrap"
|
||||
import { Database } from "@/storage/db"
|
||||
import { SessionTable } from "../../session/session.sql"
|
||||
import { Project } from "@/project/project"
|
||||
import { Instance } from "../../project/instance"
|
||||
import { InstanceRef } from "@/effect/instance-ref"
|
||||
import { InstanceStore } from "@/project/instance-store"
|
||||
import { AppRuntime } from "@/effect/app-runtime"
|
||||
|
||||
interface SessionStats {
|
||||
@@ -47,11 +47,11 @@ interface SessionStats {
|
||||
medianTokensPerSession: number
|
||||
}
|
||||
|
||||
export const StatsCommand = cmd({
|
||||
export const StatsCommand = effectCmd({
|
||||
command: "stats",
|
||||
describe: "show token usage and cost statistics",
|
||||
builder: (yargs: Argv) => {
|
||||
return yargs
|
||||
builder: (yargs) =>
|
||||
yargs
|
||||
.option("days", {
|
||||
describe: "show stats for the last N days (default: all time)",
|
||||
type: "number",
|
||||
@@ -66,34 +66,42 @@ export const StatsCommand = cmd({
|
||||
.option("project", {
|
||||
describe: "filter by project (default: all projects, empty string: current project)",
|
||||
type: "string",
|
||||
})
|
||||
},
|
||||
handler: async (args) => {
|
||||
await bootstrap(process.cwd(), async () => {
|
||||
const stats = await aggregateSessionStats(args.days, args.project)
|
||||
|
||||
let modelLimit: number | undefined
|
||||
if (args.models === true) {
|
||||
modelLimit = Infinity
|
||||
} else if (typeof args.models === "number") {
|
||||
modelLimit = args.models
|
||||
}
|
||||
|
||||
displayStats(stats, args.tools, modelLimit)
|
||||
})
|
||||
},
|
||||
}),
|
||||
handler: Effect.fn("Cli.stats")(function* (args) {
|
||||
const ctx = yield* InstanceRef
|
||||
if (!ctx) return
|
||||
const store = yield* InstanceStore.Service
|
||||
return yield* run(args, ctx.project).pipe(Effect.ensuring(store.dispose(ctx)))
|
||||
}),
|
||||
})
|
||||
|
||||
async function getCurrentProject(): Promise<Project.Info> {
|
||||
return Instance.project
|
||||
}
|
||||
const run = (
|
||||
args: { days?: number; tools?: number; models?: unknown; project?: string },
|
||||
currentProject: Project.Info,
|
||||
) =>
|
||||
Effect.promise(async () => {
|
||||
const stats = await aggregateSessionStats(args.days, args.project, currentProject)
|
||||
|
||||
let modelLimit: number | undefined
|
||||
if (args.models === true) {
|
||||
modelLimit = Infinity
|
||||
} else if (typeof args.models === "number") {
|
||||
modelLimit = args.models
|
||||
}
|
||||
|
||||
displayStats(stats, args.tools, modelLimit)
|
||||
})
|
||||
|
||||
async function getAllSessions(): Promise<Session.Info[]> {
|
||||
const rows = Database.use((db) => db.select().from(SessionTable).all())
|
||||
return rows.map((row) => Session.fromRow(row))
|
||||
}
|
||||
|
||||
export async function aggregateSessionStats(days?: number, projectFilter?: string): Promise<SessionStats> {
|
||||
export async function aggregateSessionStats(
|
||||
days?: number,
|
||||
projectFilter?: string,
|
||||
currentProject?: Project.Info,
|
||||
): Promise<SessionStats> {
|
||||
const sessions = await getAllSessions()
|
||||
const MS_IN_DAY = 24 * 60 * 60 * 1000
|
||||
|
||||
@@ -117,7 +125,7 @@ export async function aggregateSessionStats(days?: number, projectFilter?: strin
|
||||
|
||||
if (projectFilter !== undefined) {
|
||||
if (projectFilter === "") {
|
||||
const currentProject = await getCurrentProject()
|
||||
if (!currentProject) throw new Error("currentProject required when projectFilter is empty string")
|
||||
filteredSessions = filteredSessions.filter((session) => session.projectID === currentProject.id)
|
||||
} else {
|
||||
filteredSessions = filteredSessions.filter((session) => session.projectID === projectFilter)
|
||||
|
||||
@@ -10,7 +10,7 @@ import { GlobalBus } from "@/bus/global"
|
||||
import { Flag } from "@opencode-ai/core/flag/flag"
|
||||
import { writeHeapSnapshot } from "node:v8"
|
||||
import { Heap } from "@/cli/heap"
|
||||
import { AppRuntime } from "@/effect/app-runtime"
|
||||
import { AppRuntime, getBootstrapRunEffect } from "@/effect/app-runtime"
|
||||
import { ensureProcessMetadata } from "@opencode-ai/core/util/opencode-process"
|
||||
|
||||
ensureProcessMetadata("worker")
|
||||
@@ -77,6 +77,7 @@ export const rpc = {
|
||||
async checkUpgrade(input: { directory: string }) {
|
||||
await Instance.provide({
|
||||
directory: input.directory,
|
||||
init: await getBootstrapRunEffect(),
|
||||
fn: async () => {
|
||||
await upgrade().catch(() => {})
|
||||
},
|
||||
@@ -88,7 +89,7 @@ export const rpc = {
|
||||
async shutdown() {
|
||||
Log.Default.info("worker shutting down")
|
||||
|
||||
await InstanceStore.runtime.runPromise((s) => s.disposeAll())
|
||||
await InstanceStore.disposeAllInstances()
|
||||
if (server) await server.stop(true)
|
||||
},
|
||||
}
|
||||
|
||||
52
packages/opencode/src/cli/effect-cmd.ts
Normal file
52
packages/opencode/src/cli/effect-cmd.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import type { Argv } from "yargs"
|
||||
import { Effect, Schema } from "effect"
|
||||
import { AppRuntime, type AppServices } from "@/effect/app-runtime"
|
||||
import { InstanceStore } from "@/project/instance-store"
|
||||
import { cmd } from "./cmd/cmd"
|
||||
|
||||
/**
|
||||
* User-visible command failure. Throw via `fail("...")` from an effectCmd handler
|
||||
* to surface a printed message + non-zero exit. Recognised by the global error
|
||||
* formatter in `src/cli/error.ts` (FormatError), so the existing top-level
|
||||
* catch + cleanup in `src/index.ts` runs normally.
|
||||
*/
|
||||
export class CliError extends Schema.TaggedErrorClass<CliError>()("CliError", {
|
||||
message: Schema.String,
|
||||
exitCode: Schema.optional(Schema.Number),
|
||||
}) {}
|
||||
|
||||
export const fail = (message: string, exitCode = 1) => Effect.fail(new CliError({ message, exitCode }))
|
||||
|
||||
/**
|
||||
* Effect-native CLI command builder. Wraps yargs `cmd()` so the handler body is
|
||||
* an `Effect` with `InstanceRef` provided and any `AppServices` yieldable.
|
||||
*
|
||||
* Errors propagate to the existing top-level handler in `src/index.ts`; use
|
||||
* `fail("...")` for user-visible domain failures (clean exit, formatted message).
|
||||
*
|
||||
* Handlers are typically `Effect.fn("Cli.<name>")(function*(args) { ... })`,
|
||||
* which adds a named tracing span per CLI invocation. Once all commands use
|
||||
* `effectCmd`, swapping the underlying `cmd()` factory for effect/cli's
|
||||
* `Command.make(...)` won't touch any handler bodies.
|
||||
*/
|
||||
export const effectCmd = <Args, A>(opts: {
|
||||
command: string | readonly string[]
|
||||
aliases?: string | readonly string[]
|
||||
describe: string | false
|
||||
builder?: (yargs: Argv) => Argv<Args>
|
||||
/** Defaults to process.cwd(). Override for commands that take a directory positional. */
|
||||
directory?: (args: Args) => string
|
||||
handler: (args: Args) => Effect.Effect<A, CliError, AppServices | InstanceStore.Service>
|
||||
}) =>
|
||||
cmd<{}, Args>({
|
||||
command: opts.command,
|
||||
aliases: opts.aliases,
|
||||
describe: opts.describe,
|
||||
builder: opts.builder as never,
|
||||
async handler(rawArgs) {
|
||||
// yargs typing wraps Args in ArgumentsCamelCase<WithDoubleDash<...>>; cast at the boundary.
|
||||
const args = rawArgs as unknown as Args
|
||||
const directory = opts.directory?.(args) ?? process.cwd()
|
||||
await AppRuntime.runPromise(InstanceStore.Service.use((s) => s.provide({ directory }, opts.handler(args))))
|
||||
},
|
||||
})
|
||||
@@ -15,6 +15,13 @@ function isTaggedError(error: unknown, tag: string): boolean {
|
||||
}
|
||||
|
||||
export function FormatError(input: unknown) {
|
||||
// CliError: domain failure surfaced from an effectCmd handler via fail("...")
|
||||
if (isTaggedError(input, "CliError")) {
|
||||
const data = input as ErrorLike & { exitCode?: number }
|
||||
if (data.exitCode != null) process.exitCode = data.exitCode
|
||||
return data.message ?? ""
|
||||
}
|
||||
|
||||
// MCPFailed: { name: string }
|
||||
if (NamedError.hasName(input, "MCPFailed")) {
|
||||
return `MCP server "${(input as ErrorLike).data?.name}" failed. Note, opencode does not support MCP authentication yet.`
|
||||
|
||||
@@ -13,7 +13,6 @@ import { Env } from "../env"
|
||||
import { applyEdits, modify } from "jsonc-parser"
|
||||
import { type InstanceContext } from "../project/instance"
|
||||
import { InstanceStore } from "../project/instance-store"
|
||||
import { InstanceRef } from "@/effect/instance-ref"
|
||||
import { InstallationLocal, InstallationVersion } from "@opencode-ai/core/installation/version"
|
||||
import { existsSync } from "fs"
|
||||
import { GlobalBus } from "@/bus/global"
|
||||
@@ -739,15 +738,17 @@ export const layer = Layer.effect(
|
||||
.writeFileString(file, JSON.stringify(mergeDeep(writable(existing), writable(config)), null, 2))
|
||||
.pipe(Effect.orDie)
|
||||
if (options?.dispose !== false) {
|
||||
const ctx = yield* InstanceRef
|
||||
if (ctx) yield* Effect.promise(() => InstanceStore.runtime.runPromise((s) => s.dispose(ctx)))
|
||||
// Fail loudly if no instance is bound — silently skipping would
|
||||
// mask "config update without an active instance" bugs. The throw
|
||||
// comes from `Instance.current` inside `InstanceState.context`.
|
||||
const ctx = yield* InstanceState.context
|
||||
yield* Effect.promise(() => InstanceStore.disposeInstance(ctx))
|
||||
}
|
||||
})
|
||||
|
||||
const invalidate = Effect.fn("Config.invalidate")(function* (wait?: boolean) {
|
||||
yield* invalidateGlobal
|
||||
const task = InstanceStore.runtime
|
||||
.runPromise((s) => s.disposeAll())
|
||||
const task = InstanceStore.disposeAllInstances()
|
||||
.catch(() => undefined)
|
||||
.finally(() =>
|
||||
GlobalBus.emit("event", {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Layer, ManagedRuntime } from "effect"
|
||||
import { Effect, Layer, ManagedRuntime } from "effect"
|
||||
import { attach } from "./run-service"
|
||||
import * as Observability from "@opencode-ai/core/effect/observability"
|
||||
|
||||
@@ -14,6 +14,7 @@ import { FileWatcher } from "@/file/watcher"
|
||||
import { Storage } from "@/storage/storage"
|
||||
import { Snapshot } from "@/snapshot"
|
||||
import { Plugin } from "@/plugin"
|
||||
import { ModelsDev } from "@/provider/models"
|
||||
import { Provider } from "@/provider/provider"
|
||||
import { ProviderAuth } from "@/provider/auth"
|
||||
import { Agent } from "@/agent/agent"
|
||||
@@ -39,6 +40,7 @@ import { Command } from "@/command"
|
||||
import { Truncate } from "@/tool/truncate"
|
||||
import { ToolRegistry } from "@/tool/registry"
|
||||
import { Format } from "@/format"
|
||||
import { InstanceBootstrap } from "@/project/bootstrap"
|
||||
import { InstanceStore } from "@/project/instance-store"
|
||||
import { Project } from "@/project/project"
|
||||
import { Vcs } from "@/project/vcs"
|
||||
@@ -66,6 +68,7 @@ export const AppLayer = Layer.mergeAll(
|
||||
Storage.defaultLayer,
|
||||
Snapshot.defaultLayer,
|
||||
Plugin.defaultLayer,
|
||||
ModelsDev.defaultLayer,
|
||||
Provider.defaultLayer,
|
||||
ProviderAuth.defaultLayer,
|
||||
Agent.defaultLayer,
|
||||
@@ -91,6 +94,7 @@ export const AppLayer = Layer.mergeAll(
|
||||
Truncate.defaultLayer,
|
||||
ToolRegistry.defaultLayer,
|
||||
Format.defaultLayer,
|
||||
InstanceBootstrap.defaultLayer,
|
||||
InstanceStore.defaultLayer,
|
||||
Project.defaultLayer,
|
||||
Vcs.defaultLayer,
|
||||
@@ -105,6 +109,9 @@ export const AppLayer = Layer.mergeAll(
|
||||
|
||||
const rt = ManagedRuntime.make(AppLayer, { memoMap })
|
||||
type Runtime = Pick<typeof rt, "runSync" | "runPromise" | "runPromiseExit" | "runFork" | "runCallback" | "dispose">
|
||||
|
||||
/** Services provided by AppRuntime — i.e. what an Effect run via AppRuntime.runPromise can yield. */
|
||||
export type AppServices = ManagedRuntime.ManagedRuntime.Services<typeof rt>
|
||||
const wrap = (effect: Parameters<typeof rt.runSync>[0]) => attach(effect as never) as never
|
||||
|
||||
export const AppRuntime: Runtime = {
|
||||
@@ -125,3 +132,15 @@ export const AppRuntime: Runtime = {
|
||||
},
|
||||
dispose: () => rt.dispose(),
|
||||
}
|
||||
|
||||
let bootstrapRun: Promise<Effect.Effect<void>>
|
||||
export function getBootstrapRunEffect(): Promise<Effect.Effect<void>> {
|
||||
if (!bootstrapRun) {
|
||||
bootstrapRun = AppRuntime.runPromise(
|
||||
Effect.gen(function* () {
|
||||
return (yield* InstanceBootstrap.Service).run
|
||||
}),
|
||||
)
|
||||
}
|
||||
return bootstrapRun
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { GlobalBus } from "@/bus/global"
|
||||
import { WorkspaceContext } from "@/control-plane/workspace-context"
|
||||
import { InstanceRef } from "@/effect/instance-ref"
|
||||
import { disposeInstance } from "@/effect/instance-registry"
|
||||
import { disposeInstance as runDisposers } from "@/effect/instance-registry"
|
||||
import { makeRuntime } from "@/effect/run-service"
|
||||
import { AppFileSystem } from "@opencode-ai/core/filesystem"
|
||||
import { Context, Deferred, Duration, Effect, Exit, Layer, Scope } from "effect"
|
||||
@@ -94,7 +94,7 @@ export const layer: Layer.Layer<Service, never, Project.Service> = Layer.effect(
|
||||
|
||||
const disposeContext = Effect.fn("InstanceStore.disposeContext")(function* (ctx: InstanceContext) {
|
||||
yield* Effect.logInfo("disposing instance", { directory: ctx.directory })
|
||||
yield* Effect.promise(() => disposeInstance(ctx.directory))
|
||||
yield* Effect.promise(() => runDisposers(ctx.directory))
|
||||
yield* emitDisposed({ directory: ctx.directory, project: ctx.project.id })
|
||||
})
|
||||
|
||||
@@ -135,7 +135,7 @@ export const layer: Layer.Layer<Service, never, Project.Service> = Layer.effect(
|
||||
yield* Effect.logInfo("reloading instance", { directory })
|
||||
if (previous) {
|
||||
yield* Deferred.await(previous.deferred).pipe(Effect.ignore)
|
||||
yield* Effect.promise(() => disposeInstance(directory))
|
||||
yield* Effect.promise(() => runDisposers(directory))
|
||||
yield* emitDisposed({ directory, project: input.project?.id })
|
||||
}
|
||||
yield* completeLoad(directory, input, entry)
|
||||
@@ -197,4 +197,11 @@ export const defaultLayer = layer.pipe(Layer.provide(Project.defaultLayer))
|
||||
|
||||
export const runtime = makeRuntime(Service, defaultLayer)
|
||||
|
||||
// Promise-returning helpers for callers without an Effect runtime in scope.
|
||||
// They route through `runtime` (not a yielded Service from a fresh runtime)
|
||||
// so they share the cache that `Instance.provide` populates.
|
||||
export const disposeInstance = (ctx: InstanceContext) => runtime.runPromise((store) => store.dispose(ctx))
|
||||
export const disposeAllInstances = () => runtime.runPromise((store) => store.disposeAll())
|
||||
export const reloadInstance = (input: LoadInput) => runtime.runPromise((store) => store.reload(input))
|
||||
|
||||
export * as InstanceStore from "./instance-store"
|
||||
|
||||
@@ -42,10 +42,4 @@ export const Instance = {
|
||||
restore<R>(ctx: InstanceContext, fn: () => R): R {
|
||||
return context.provide(ctx, fn)
|
||||
},
|
||||
async reload(input: InstanceStore.LoadInput) {
|
||||
return InstanceStore.runtime.runPromise((store) => store.reload(input))
|
||||
},
|
||||
async dispose() {
|
||||
return InstanceStore.runtime.runPromise((store) => store.dispose(Instance.current))
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,25 +1,13 @@
|
||||
import { Global } from "@opencode-ai/core/global"
|
||||
import * as Log from "@opencode-ai/core/util/log"
|
||||
import path from "path"
|
||||
import { Schema } from "effect"
|
||||
import { Context, Duration, Effect, Layer, Option, Schedule, Schema } from "effect"
|
||||
import { FetchHttpClient, HttpClient, HttpClientRequest } from "effect/unstable/http"
|
||||
import { Installation } from "../installation"
|
||||
import { Flag } from "@opencode-ai/core/flag/flag"
|
||||
import { lazy } from "@/util/lazy"
|
||||
import { Filesystem } from "@/util/filesystem"
|
||||
import { Flock } from "@opencode-ai/core/util/flock"
|
||||
import { Hash } from "@opencode-ai/core/util/hash"
|
||||
|
||||
// Try to import bundled snapshot (generated at build time)
|
||||
// Falls back to undefined in dev mode when snapshot doesn't exist
|
||||
/* @ts-ignore */
|
||||
|
||||
const log = Log.create({ service: "models.dev" })
|
||||
const source = url()
|
||||
const filepath = path.join(
|
||||
Global.Path.cache,
|
||||
source === "https://models.dev" ? "models.json" : `models-${Hash.fast(source)}.json`,
|
||||
)
|
||||
const ttl = 5 * 60 * 1000
|
||||
import { AppFileSystem } from "@opencode-ai/core/filesystem"
|
||||
import { withTransientReadRetry } from "@/util/effect-http-client"
|
||||
|
||||
const Cost = Schema.Struct({
|
||||
input: Schema.Finite,
|
||||
@@ -101,76 +89,110 @@ export const Provider = Schema.Struct({
|
||||
|
||||
export type Provider = Schema.Schema.Type<typeof Provider>
|
||||
|
||||
function url() {
|
||||
return Flag.OPENCODE_MODELS_URL || "https://models.dev"
|
||||
export interface Interface {
|
||||
readonly get: () => Effect.Effect<Record<string, Provider>>
|
||||
readonly refresh: (force?: boolean) => Effect.Effect<void>
|
||||
}
|
||||
|
||||
function fresh() {
|
||||
return Date.now() - Number(Filesystem.stat(filepath)?.mtimeMs ?? 0) < ttl
|
||||
}
|
||||
export class Service extends Context.Service<Service, Interface>()("@opencode/ModelsDev") {}
|
||||
|
||||
function skip(force: boolean) {
|
||||
return !force && fresh()
|
||||
}
|
||||
export const layer: Layer.Layer<Service, never, AppFileSystem.Service | HttpClient.HttpClient> = Layer.effect(
|
||||
Service,
|
||||
Effect.gen(function* () {
|
||||
const fs = yield* AppFileSystem.Service
|
||||
const http = HttpClient.filterStatusOk(withTransientReadRetry(yield* HttpClient.HttpClient))
|
||||
|
||||
const fetchApi = async () => {
|
||||
const result = await fetch(`${url()}/api.json`, {
|
||||
headers: { "User-Agent": Installation.USER_AGENT },
|
||||
signal: AbortSignal.timeout(10000),
|
||||
})
|
||||
return { ok: result.ok, text: await result.text() }
|
||||
}
|
||||
const source = Flag.OPENCODE_MODELS_URL || "https://models.dev"
|
||||
const filepath = path.join(
|
||||
Global.Path.cache,
|
||||
source === "https://models.dev" ? "models.json" : `models-${Hash.fast(source)}.json`,
|
||||
)
|
||||
const ttl = Duration.minutes(5)
|
||||
const lockKey = `models-dev:${filepath}`
|
||||
|
||||
export const Data = lazy(async () => {
|
||||
const result = await Filesystem.readJson(Flag.OPENCODE_MODELS_PATH ?? filepath).catch(() => {})
|
||||
if (result) return result
|
||||
// @ts-ignore
|
||||
const snapshot = await import("./models-snapshot.js")
|
||||
.then((m) => m.snapshot as Record<string, unknown>)
|
||||
.catch(() => undefined)
|
||||
if (snapshot) return snapshot
|
||||
if (Flag.OPENCODE_DISABLE_MODELS_FETCH) return {}
|
||||
return Flock.withLock(`models-dev:${filepath}`, async () => {
|
||||
const result = await Filesystem.readJson(Flag.OPENCODE_MODELS_PATH ?? filepath).catch(() => {})
|
||||
if (result) return result
|
||||
const result2 = await fetchApi()
|
||||
if (result2.ok) {
|
||||
await Filesystem.write(filepath, result2.text).catch((e) => {
|
||||
log.error("Failed to write models cache", { error: e })
|
||||
})
|
||||
}
|
||||
return JSON.parse(result2.text)
|
||||
})
|
||||
})
|
||||
|
||||
export async function get() {
|
||||
const result = await Data()
|
||||
return result as Record<string, Provider>
|
||||
}
|
||||
|
||||
export async function refresh(force = false) {
|
||||
if (skip(force)) return Data.reset()
|
||||
await Flock.withLock(`models-dev:${filepath}`, async () => {
|
||||
if (skip(force)) return Data.reset()
|
||||
const result = await fetchApi()
|
||||
if (!result.ok) return
|
||||
await Filesystem.write(filepath, result.text)
|
||||
Data.reset()
|
||||
}).catch((e) => {
|
||||
log.error("Failed to fetch models.dev", {
|
||||
error: e,
|
||||
const fresh = Effect.fnUntraced(function* () {
|
||||
const stat = yield* fs.stat(filepath).pipe(Effect.catch(() => Effect.succeed(undefined)))
|
||||
if (!stat) return false
|
||||
const mtime = Option.getOrElse(stat.mtime, () => new Date(0)).getTime()
|
||||
return Date.now() - mtime < Duration.toMillis(ttl)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
if (!Flag.OPENCODE_DISABLE_MODELS_FETCH && !process.argv.includes("--get-yargs-completions")) {
|
||||
void refresh()
|
||||
setInterval(
|
||||
async () => {
|
||||
await refresh()
|
||||
},
|
||||
60 * 1000 * 60,
|
||||
).unref()
|
||||
}
|
||||
const fetchApi = Effect.fn("ModelsDev.fetchApi")(function* () {
|
||||
return yield* HttpClientRequest.get(`${source}/api.json`).pipe(
|
||||
HttpClientRequest.setHeader("User-Agent", Installation.USER_AGENT),
|
||||
http.execute,
|
||||
Effect.flatMap((res) => res.text),
|
||||
Effect.timeout("10 seconds"),
|
||||
)
|
||||
})
|
||||
|
||||
const loadFromDisk = fs.readJson(Flag.OPENCODE_MODELS_PATH ?? filepath).pipe(
|
||||
Effect.catch(() => Effect.succeed(undefined)),
|
||||
Effect.map((v) => v as Record<string, Provider> | undefined),
|
||||
)
|
||||
|
||||
// Bundled at build time; absent in dev — `tryPromise` covers both.
|
||||
const loadSnapshot = Effect.tryPromise({
|
||||
// @ts-ignore — generated at build time, may not exist in dev
|
||||
try: () => import("./models-snapshot.js").then((m) => m.snapshot as Record<string, Provider> | undefined),
|
||||
catch: () => undefined,
|
||||
}).pipe(Effect.catch(() => Effect.succeed(undefined)))
|
||||
|
||||
const fetchAndWrite = Effect.fn("ModelsDev.fetchAndWrite")(function* () {
|
||||
const text = yield* fetchApi()
|
||||
yield* fs.writeWithDirs(filepath, text)
|
||||
return text
|
||||
})
|
||||
|
||||
const populate = Effect.gen(function* () {
|
||||
const fromDisk = yield* loadFromDisk
|
||||
if (fromDisk) return fromDisk
|
||||
const snapshot = yield* loadSnapshot
|
||||
if (snapshot) return snapshot
|
||||
if (Flag.OPENCODE_DISABLE_MODELS_FETCH) return {}
|
||||
// Flock is cross-process: concurrent opencode CLIs can race on this cache file.
|
||||
const text = yield* Effect.scoped(
|
||||
Effect.gen(function* () {
|
||||
yield* Flock.effect(lockKey)
|
||||
return yield* fetchAndWrite()
|
||||
}),
|
||||
)
|
||||
return JSON.parse(text) as Record<string, Provider>
|
||||
}).pipe(Effect.withSpan("ModelsDev.populate"), Effect.orDie)
|
||||
|
||||
const [cachedGet, invalidate] = yield* Effect.cachedInvalidateWithTTL(populate, Duration.infinity)
|
||||
|
||||
const get = (): Effect.Effect<Record<string, Provider>> => cachedGet
|
||||
|
||||
const refresh = Effect.fn("ModelsDev.refresh")(function* (force = false) {
|
||||
if (!force && (yield* fresh())) return
|
||||
yield* Effect.scoped(
|
||||
Effect.gen(function* () {
|
||||
yield* Flock.effect(lockKey)
|
||||
// Re-check under the lock: another process may have refreshed between
|
||||
// our outer check and lock acquisition.
|
||||
if (!force && (yield* fresh())) return
|
||||
yield* fetchAndWrite()
|
||||
yield* invalidate
|
||||
}),
|
||||
).pipe(
|
||||
Effect.tapCause((cause) => Effect.logError("Failed to fetch models.dev", { cause })),
|
||||
Effect.ignore,
|
||||
)
|
||||
})
|
||||
|
||||
if (!Flag.OPENCODE_DISABLE_MODELS_FETCH && !process.argv.includes("--get-yargs-completions")) {
|
||||
// Schedule.spaced runs the effect once, then waits between completions.
|
||||
yield* Effect.forkScoped(refresh().pipe(Effect.repeat(Schedule.spaced("60 minutes")), Effect.ignore))
|
||||
}
|
||||
|
||||
return Service.of({ get, refresh })
|
||||
}),
|
||||
)
|
||||
|
||||
export const defaultLayer: Layer.Layer<Service> = layer.pipe(
|
||||
Layer.provide(FetchHttpClient.layer),
|
||||
Layer.provide(AppFileSystem.defaultLayer),
|
||||
)
|
||||
|
||||
export * as ModelsDev from "./models"
|
||||
|
||||
@@ -1074,7 +1074,7 @@ export function fromModelsDevProvider(provider: ModelsDev.Provider): Info {
|
||||
const layer: Layer.Layer<
|
||||
Service,
|
||||
never,
|
||||
Config.Service | Auth.Service | Plugin.Service | AppFileSystem.Service | Env.Service
|
||||
Config.Service | Auth.Service | Plugin.Service | AppFileSystem.Service | Env.Service | ModelsDev.Service
|
||||
> = Layer.effect(
|
||||
Service,
|
||||
Effect.gen(function* () {
|
||||
@@ -1083,13 +1083,14 @@ const layer: Layer.Layer<
|
||||
const auth = yield* Auth.Service
|
||||
const env = yield* Env.Service
|
||||
const plugin = yield* Plugin.Service
|
||||
const modelsDevSvc = yield* ModelsDev.Service
|
||||
|
||||
const state = yield* InstanceState.make<State>(() =>
|
||||
Effect.gen(function* () {
|
||||
using _ = log.time("state")
|
||||
const bridge = yield* EffectBridge.make()
|
||||
const cfg = yield* config.get()
|
||||
const modelsDev = yield* Effect.promise(() => ModelsDev.get())
|
||||
const modelsDev = yield* modelsDevSvc.get()
|
||||
const database = mapValues(modelsDev, fromModelsDevProvider)
|
||||
|
||||
const providers: Record<ProviderID, Info> = {} as Record<ProviderID, Info>
|
||||
@@ -1722,6 +1723,7 @@ export const defaultLayer = Layer.suspend(() =>
|
||||
Layer.provide(Config.defaultLayer),
|
||||
Layer.provide(Auth.defaultLayer),
|
||||
Layer.provide(Plugin.defaultLayer),
|
||||
Layer.provide(ModelsDev.defaultLayer),
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -200,7 +200,7 @@ export const GlobalRoutes = lazy(() =>
|
||||
},
|
||||
}),
|
||||
async (c) => {
|
||||
await InstanceStore.runtime.runPromise((s) => s.disposeAll())
|
||||
await InstanceStore.disposeAllInstances()
|
||||
GlobalBus.emit("event", {
|
||||
directory: "global",
|
||||
payload: {
|
||||
|
||||
@@ -17,7 +17,7 @@ export const providerHandlers = HttpApiBuilder.group(InstanceHttpApi, "provider"
|
||||
|
||||
const list = Effect.fn("ProviderHttpApi.list")(function* () {
|
||||
const config = yield* cfg.get()
|
||||
const all = yield* Effect.promise(() => ModelsDev.get())
|
||||
const all = yield* ModelsDev.Service.use((s) => s.get())
|
||||
const disabled = new Set(config.disabled_providers ?? [])
|
||||
const enabled = config.enabled_providers ? new Set(config.enabled_providers) : undefined
|
||||
const filtered: Record<string, (typeof all)[string]> = {}
|
||||
|
||||
@@ -23,6 +23,7 @@ import { InstanceStore } from "@/project/instance-store"
|
||||
import { Plugin } from "@/plugin"
|
||||
import { Project } from "@/project/project"
|
||||
import { ProviderAuth } from "@/provider/auth"
|
||||
import { ModelsDev } from "@/provider/models"
|
||||
import { Provider } from "@/provider/provider"
|
||||
import { Pty } from "@/pty"
|
||||
import { Question } from "@/question"
|
||||
@@ -155,6 +156,7 @@ export function createRoutes(corsOptions?: CorsOptions) {
|
||||
InstanceBootstrap.defaultLayer,
|
||||
InstanceStore.defaultLayer,
|
||||
MCP.defaultLayer,
|
||||
ModelsDev.defaultLayer,
|
||||
Permission.defaultLayer,
|
||||
Plugin.defaultLayer,
|
||||
Project.defaultLayer,
|
||||
|
||||
@@ -63,7 +63,7 @@ export const InstanceRoutes = (upgrade: UpgradeWebSocket): Hono => {
|
||||
},
|
||||
}),
|
||||
async (c) => {
|
||||
await InstanceStore.runtime.runPromise((s) => s.dispose(Instance.current))
|
||||
await InstanceStore.disposeInstance(Instance.current)
|
||||
return c.json(true)
|
||||
},
|
||||
)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { MiddlewareHandler } from "hono"
|
||||
import { Instance } from "@/project/instance"
|
||||
import { AppRuntime } from "@/effect/app-runtime"
|
||||
import { getBootstrapRunEffect } from "@/effect/app-runtime"
|
||||
import { AppFileSystem } from "@opencode-ai/core/filesystem"
|
||||
import { WorkspaceContext } from "@/control-plane/workspace-context"
|
||||
import { WorkspaceID } from "@/control-plane/schema"
|
||||
@@ -23,6 +23,7 @@ export function InstanceMiddleware(workspaceID?: WorkspaceID): MiddlewareHandler
|
||||
async fn() {
|
||||
return Instance.provide({
|
||||
directory,
|
||||
init: await getBootstrapRunEffect(),
|
||||
async fn() {
|
||||
return next()
|
||||
},
|
||||
|
||||
@@ -2,12 +2,13 @@ import { Hono } from "hono"
|
||||
import { describeRoute, validator } from "hono-openapi"
|
||||
import { resolver } from "hono-openapi"
|
||||
import { Instance } from "@/project/instance"
|
||||
import { InstanceStore } from "@/project/instance-store"
|
||||
import { Project } from "@/project/project"
|
||||
import z from "zod"
|
||||
import { ProjectID } from "@/project/schema"
|
||||
import { errors } from "../../error"
|
||||
import { lazy } from "@/util/lazy"
|
||||
import { AppRuntime } from "@/effect/app-runtime"
|
||||
import { getBootstrapRunEffect } from "@/effect/app-runtime"
|
||||
import { jsonRequest, runRequest } from "./trace"
|
||||
|
||||
export const ProjectRoutes = lazy(() =>
|
||||
@@ -81,7 +82,12 @@ export const ProjectRoutes = lazy(() =>
|
||||
Project.Service.use((svc) => svc.initGit({ directory: dir, project: prev })),
|
||||
)
|
||||
if (next.id === prev.id && next.vcs === prev.vcs && next.worktree === prev.worktree) return c.json(next)
|
||||
await Instance.reload({ directory: dir, worktree: dir, project: next })
|
||||
await InstanceStore.reloadInstance({
|
||||
directory: dir,
|
||||
worktree: dir,
|
||||
project: next,
|
||||
init: await getBootstrapRunEffect(),
|
||||
})
|
||||
return c.json(next)
|
||||
},
|
||||
)
|
||||
|
||||
@@ -36,7 +36,7 @@ export const ProviderRoutes = lazy(() =>
|
||||
const svc = yield* Provider.Service
|
||||
const cfg = yield* Config.Service
|
||||
const config = yield* cfg.get()
|
||||
const all = yield* Effect.promise(() => ModelsDev.get())
|
||||
const all = yield* ModelsDev.Service.use((s) => s.get())
|
||||
const disabled = new Set(config.disabled_providers ?? [])
|
||||
const enabled = config.enabled_providers ? new Set(config.enabled_providers) : undefined
|
||||
const filtered: Record<string, (typeof all)[string]> = {}
|
||||
|
||||
@@ -5,10 +5,10 @@ import { WorkspaceID } from "@/control-plane/schema"
|
||||
import { WorkspaceContext } from "@/control-plane/workspace-context"
|
||||
import { Workspace } from "@/control-plane/workspace"
|
||||
import { Flag } from "@opencode-ai/core/flag/flag"
|
||||
import { getBootstrapRunEffect, AppRuntime } from "@/effect/app-runtime"
|
||||
import { Instance } from "@/project/instance"
|
||||
import { Session } from "@/session/session"
|
||||
import { SessionID } from "@/session/schema"
|
||||
import { AppRuntime } from "@/effect/app-runtime"
|
||||
import { Effect } from "effect"
|
||||
import * as Log from "@opencode-ai/core/util/log"
|
||||
import { ServerProxy } from "./proxy"
|
||||
@@ -94,11 +94,13 @@ export function WorkspaceRouterMiddleware(upgrade: UpgradeWebSocket): Middleware
|
||||
const target = await adapter.target(workspace)
|
||||
|
||||
if (target.type === "local") {
|
||||
const init = await getBootstrapRunEffect()
|
||||
return WorkspaceContext.provide({
|
||||
workspaceID: WorkspaceID.make(workspaceID),
|
||||
fn: () =>
|
||||
Instance.provide({
|
||||
directory: target.directory,
|
||||
init,
|
||||
async fn() {
|
||||
return next()
|
||||
},
|
||||
|
||||
@@ -464,9 +464,18 @@ NOTE: At any point in time through this workflow you should feel free to ask the
|
||||
{ tool: key, sessionID: ctx.sessionID, callID: opts.toolCallId },
|
||||
{ args },
|
||||
)
|
||||
yield* ctx.ask({ permission: key, metadata: {}, patterns: ["*"], always: ["*"] })
|
||||
const result: Awaited<ReturnType<NonNullable<typeof execute>>> = yield* Effect.promise(() =>
|
||||
execute(args, opts),
|
||||
const result: Awaited<ReturnType<NonNullable<typeof execute>>> = yield* Effect.gen(function* () {
|
||||
yield* ctx.ask({ permission: key, metadata: {}, patterns: ["*"], always: ["*"] })
|
||||
return yield* Effect.promise(() => execute(args, opts))
|
||||
}).pipe(
|
||||
Effect.withSpan("Tool.execute", {
|
||||
attributes: {
|
||||
"tool.name": key,
|
||||
"tool.call_id": opts.toolCallId,
|
||||
"session.id": ctx.sessionID,
|
||||
"message.id": input.processor.message.id,
|
||||
},
|
||||
}),
|
||||
)
|
||||
yield* plugin.trigger(
|
||||
"tool.execute.after",
|
||||
|
||||
@@ -154,10 +154,6 @@ export const ReadTool = Tool.define(
|
||||
params: Schema.Schema.Type<typeof Parameters>,
|
||||
ctx: Tool.Context,
|
||||
) {
|
||||
if (params.offset !== undefined && params.offset < 1) {
|
||||
return yield* Effect.fail(new Error("offset must be greater than or equal to 1"))
|
||||
}
|
||||
|
||||
const instance = yield* InstanceState.context
|
||||
let filepath = params.filePath
|
||||
if (!path.isAbsolute(filepath)) {
|
||||
@@ -192,7 +188,7 @@ export const ReadTool = Tool.define(
|
||||
if (stat.type === "Directory") {
|
||||
const items = yield* list(filepath)
|
||||
const limit = params.limit ?? DEFAULT_READ_LIMIT
|
||||
const offset = params.offset ?? 1
|
||||
const offset = params.offset || 1
|
||||
const start = offset - 1
|
||||
const sliced = items.slice(start, start + limit)
|
||||
const truncated = start + sliced.length < items.length
|
||||
@@ -249,7 +245,7 @@ export const ReadTool = Tool.define(
|
||||
}
|
||||
|
||||
const file = yield* Effect.promise(() =>
|
||||
lines(filepath, { limit: params.limit ?? DEFAULT_READ_LIMIT, offset: params.offset ?? 1 }),
|
||||
lines(filepath, { limit: params.limit ?? DEFAULT_READ_LIMIT, offset: params.offset || 1 }),
|
||||
)
|
||||
if (file.count < file.offset && !(file.count === 0 && file.offset === 1)) {
|
||||
return yield* Effect.fail(
|
||||
|
||||
@@ -154,7 +154,16 @@ export const layer: Layer.Layer<
|
||||
...(out.truncated && { outputPath: out.outputPath }),
|
||||
},
|
||||
}
|
||||
}),
|
||||
}).pipe(
|
||||
Effect.withSpan("Tool.execute", {
|
||||
attributes: {
|
||||
"tool.name": id,
|
||||
"session.id": toolCtx.sessionID,
|
||||
"message.id": toolCtx.messageID,
|
||||
...(toolCtx.callID ? { "tool.call_id": toolCtx.callID } : {}),
|
||||
},
|
||||
}),
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner"
|
||||
import { $ } from "bun"
|
||||
import { Context, Deferred, Duration, Effect, Exit, Fiber, Layer } from "effect"
|
||||
import { InstanceState } from "@/effect/instance-state"
|
||||
import { InstanceStore } from "../../src/project/instance-store"
|
||||
import { Instance } from "../../src/project/instance"
|
||||
import { disposeAllInstances, provideInstance, tmpdirScoped } from "../fixture/fixture"
|
||||
import { testEffect } from "../lib/effect"
|
||||
@@ -69,7 +70,7 @@ it.live("InstanceState invalidates on reload", () =>
|
||||
)
|
||||
|
||||
const a = yield* access(state, dir)
|
||||
yield* Effect.promise(() => Instance.reload({ directory: dir }))
|
||||
yield* Effect.promise(() => InstanceStore.reloadInstance({ directory: dir }))
|
||||
const b = yield* access(state, dir)
|
||||
|
||||
expect(a).not.toBe(b)
|
||||
@@ -269,7 +270,7 @@ it.live("InstanceState correct after interleaved init and dispose", () =>
|
||||
|
||||
const [, b] = yield* Effect.all(
|
||||
[
|
||||
Effect.promise(() => Instance.reload({ directory: one })),
|
||||
Effect.promise(() => InstanceStore.reloadInstance({ directory: one })),
|
||||
Test.use((svc) => svc.get()).pipe(provideInstance(two)),
|
||||
],
|
||||
{ concurrency: "unbounded" },
|
||||
|
||||
@@ -8,16 +8,13 @@ import type * as Scope from "effect/Scope"
|
||||
import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process"
|
||||
import type { Config } from "@/config/config"
|
||||
import { InstanceRef } from "../../src/effect/instance-ref"
|
||||
import { Instance } from "../../src/project/instance"
|
||||
import { InstanceStore } from "../../src/project/instance-store"
|
||||
import { Instance } from "../../src/project/instance"
|
||||
import { TestLLMServer } from "../lib/llm-server"
|
||||
|
||||
// Test helper for tearing down all loaded instances. Used in afterEach hooks.
|
||||
// Replaces direct Instance.disposeAll() calls so the legacy promise method can be removed.
|
||||
// IMPORTANT: must use InstanceStore.runtime, not AppRuntime or a test-layer Service —
|
||||
// Instance.provide loads instances into InstanceStore.runtime's Service cache, and that
|
||||
// Service is built per-runtime (not shared via memoMap across Effect.runPromise boundaries).
|
||||
export const disposeAllInstances = () => InstanceStore.runtime.runPromise((s) => s.disposeAll())
|
||||
// Re-export for test ergonomics. The implementation lives next to the runtime
|
||||
// it consumes; see `InstanceStore.disposeAllInstances` for the rationale.
|
||||
export { disposeAllInstances } from "../../src/project/instance-store"
|
||||
|
||||
// Strip null bytes from paths (defensive fix for CI environment issues)
|
||||
function sanitizePath(p: string): string {
|
||||
@@ -153,7 +150,7 @@ export function provideTmpdirInstance<A, E, R>(
|
||||
? Effect.promise(() =>
|
||||
Instance.provide({
|
||||
directory: path,
|
||||
fn: () => Instance.dispose(),
|
||||
fn: () => InstanceStore.disposeInstance(Instance.current),
|
||||
}),
|
||||
).pipe(Effect.ignore)
|
||||
: Effect.void,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { test, expect, mock, beforeEach } from "bun:test"
|
||||
import { InstanceStore } from "../../src/project/instance-store"
|
||||
import { Effect } from "effect"
|
||||
import type { MCP as MCPNS } from "../../src/mcp/index"
|
||||
|
||||
@@ -197,7 +198,7 @@ function withInstance(
|
||||
fn: async () => {
|
||||
await Effect.runPromise(MCP.Service.use(fn).pipe(Effect.provide(MCP.defaultLayer)))
|
||||
// dispose instance to clean up state between tests
|
||||
await Instance.dispose()
|
||||
await InstanceStore.disposeInstance(Instance.current)
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner"
|
||||
import { Permission } from "../../src/permission"
|
||||
import { PermissionID } from "../../src/permission/schema"
|
||||
import { Instance } from "../../src/project/instance"
|
||||
import { InstanceStore } from "../../src/project/instance-store"
|
||||
import { disposeAllInstances, provideInstance, provideTmpdirInstance, tmpdirScoped } from "../fixture/fixture"
|
||||
import { testEffect } from "../lib/effect"
|
||||
import { MessageID, SessionID } from "../../src/session/schema"
|
||||
@@ -998,7 +999,9 @@ it.live("pending permission rejects on instance dispose", () =>
|
||||
}).pipe(run, Effect.forkScoped)
|
||||
|
||||
expect(yield* waitForPending(1).pipe(run)).toHaveLength(1)
|
||||
yield* Effect.promise(() => Instance.provide({ directory: dir, fn: () => void Instance.dispose() }))
|
||||
yield* Effect.promise(() =>
|
||||
Instance.provide({ directory: dir, fn: () => void InstanceStore.disposeInstance(Instance.current) }),
|
||||
)
|
||||
|
||||
const exit = yield* Fiber.await(fiber)
|
||||
expect(Exit.isFailure(exit)).toBe(true)
|
||||
@@ -1021,7 +1024,7 @@ it.live("pending permission rejects on instance reload", () =>
|
||||
}).pipe(run, Effect.forkScoped)
|
||||
|
||||
expect(yield* waitForPending(1).pipe(run)).toHaveLength(1)
|
||||
yield* Effect.promise(() => Instance.reload({ directory: dir }))
|
||||
yield* Effect.promise(() => InstanceStore.reloadInstance({ directory: dir }))
|
||||
|
||||
const exit = yield* Fiber.await(fiber)
|
||||
expect(Exit.isFailure(exit)).toBe(true)
|
||||
@@ -1115,7 +1118,7 @@ it.live("ask - abort should clear pending request", () =>
|
||||
|
||||
const pending = yield* waitForPending(1).pipe(run)
|
||||
expect(pending).toHaveLength(1)
|
||||
yield* Effect.promise(() => Instance.reload({ directory: dir }))
|
||||
yield* Effect.promise(() => InstanceStore.reloadInstance({ directory: dir }))
|
||||
|
||||
const exit = yield* Fiber.await(fiber)
|
||||
expect(Exit.isFailure(exit)).toBe(true)
|
||||
|
||||
@@ -5,6 +5,7 @@ import path from "path"
|
||||
import { Cause, Effect, Exit, Layer } from "effect"
|
||||
import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner"
|
||||
import { Instance } from "../../src/project/instance"
|
||||
import { InstanceStore } from "../../src/project/instance-store"
|
||||
import { Worktree } from "../../src/worktree"
|
||||
import { disposeAllInstances, provideInstance, provideTmpdirInstance } from "../fixture/fixture"
|
||||
import { testEffect } from "../lib/effect"
|
||||
@@ -136,7 +137,11 @@ describe("Worktree", () => {
|
||||
expect(props.name).toBe(info.name)
|
||||
expect(props.branch).toBe(info.branch)
|
||||
|
||||
yield* Effect.promise(() => Instance.dispose()).pipe(provideInstance(info.directory))
|
||||
yield* Effect.promise(() =>
|
||||
InstanceStore.runtime.runPromise((s) =>
|
||||
s.load({ directory: info.directory }).pipe(Effect.flatMap(s.dispose)),
|
||||
),
|
||||
)
|
||||
yield* Effect.promise(() => Bun.sleep(100))
|
||||
yield* svc.remove({ directory: info.directory })
|
||||
}),
|
||||
@@ -156,7 +161,11 @@ describe("Worktree", () => {
|
||||
expect(info.branch).toBe("opencode/test-workspace")
|
||||
|
||||
yield* Effect.promise(() => ready)
|
||||
yield* Effect.promise(() => Instance.dispose()).pipe(provideInstance(info.directory))
|
||||
yield* Effect.promise(() =>
|
||||
InstanceStore.runtime.runPromise((s) =>
|
||||
s.load({ directory: info.directory }).pipe(Effect.flatMap(s.dispose)),
|
||||
),
|
||||
)
|
||||
yield* Effect.promise(() => Bun.sleep(100))
|
||||
yield* svc.remove({ directory: info.directory })
|
||||
}),
|
||||
|
||||
259
packages/opencode/test/provider/models.test.ts
Normal file
259
packages/opencode/test/provider/models.test.ts
Normal file
@@ -0,0 +1,259 @@
|
||||
import { describe, expect, beforeAll, beforeEach, afterAll } from "bun:test"
|
||||
import { Effect, Layer, Ref } from "effect"
|
||||
import { HttpClient, HttpClientResponse } from "effect/unstable/http"
|
||||
import { AppFileSystem } from "@opencode-ai/core/filesystem"
|
||||
import { Flag } from "@opencode-ai/core/flag/flag"
|
||||
import { Global } from "@opencode-ai/core/global"
|
||||
import { ModelsDev } from "../../src/provider/models"
|
||||
import { it } from "../lib/effect"
|
||||
import { rm, writeFile, utimes, mkdir } from "fs/promises"
|
||||
import path from "path"
|
||||
|
||||
// test/preload.ts pins OPENCODE_MODELS_PATH to a fixture so other tests can
|
||||
// resolve providers without network. These tests need to drive the on-disk
|
||||
// cache themselves and silence the eager refresh fork. Save/restore around
|
||||
// the suite — never leak the mutation to subsequent test files in the same
|
||||
// bun process.
|
||||
const ORIGINAL_MODELS_PATH = Flag.OPENCODE_MODELS_PATH
|
||||
const ORIGINAL_DISABLE_FETCH = Flag.OPENCODE_DISABLE_MODELS_FETCH
|
||||
beforeAll(() => {
|
||||
Flag.OPENCODE_MODELS_PATH = undefined
|
||||
Flag.OPENCODE_DISABLE_MODELS_FETCH = true
|
||||
})
|
||||
afterAll(() => {
|
||||
Flag.OPENCODE_MODELS_PATH = ORIGINAL_MODELS_PATH
|
||||
Flag.OPENCODE_DISABLE_MODELS_FETCH = ORIGINAL_DISABLE_FETCH
|
||||
})
|
||||
|
||||
const cacheFile = path.join(Global.Path.cache, "models.json")
|
||||
|
||||
const fixture: Record<string, ModelsDev.Provider> = {
|
||||
acme: {
|
||||
id: "acme",
|
||||
name: "Acme",
|
||||
env: ["ACME_API_KEY"],
|
||||
models: {
|
||||
"acme-1": {
|
||||
id: "acme-1",
|
||||
name: "Acme One",
|
||||
release_date: "2026-01-01",
|
||||
attachment: false,
|
||||
reasoning: false,
|
||||
temperature: true,
|
||||
tool_call: true,
|
||||
limit: { context: 128000, output: 8192 },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
const fixture2: Record<string, ModelsDev.Provider> = {
|
||||
beta: {
|
||||
id: "beta",
|
||||
name: "Beta",
|
||||
env: ["BETA_API_KEY"],
|
||||
models: {
|
||||
"beta-1": {
|
||||
id: "beta-1",
|
||||
name: "Beta One",
|
||||
release_date: "2026-02-01",
|
||||
attachment: false,
|
||||
reasoning: true,
|
||||
temperature: false,
|
||||
tool_call: false,
|
||||
limit: { context: 64000, output: 4096 },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
interface MockState {
|
||||
body: string
|
||||
status: number
|
||||
calls: Array<{ url: string }>
|
||||
}
|
||||
|
||||
const makeMockClient = (state: Ref.Ref<MockState>) =>
|
||||
HttpClient.make((request) =>
|
||||
Effect.gen(function* () {
|
||||
yield* Ref.update(state, (s) => ({ ...s, calls: [...s.calls, { url: request.url }] }))
|
||||
const s = yield* Ref.get(state)
|
||||
return HttpClientResponse.fromWeb(request, new Response(s.body, { status: s.status }))
|
||||
}),
|
||||
)
|
||||
|
||||
const buildLayer = (state: Ref.Ref<MockState>) =>
|
||||
// Layer.fresh is required: ModelsDev.layer is a module-level Layer constant,
|
||||
// and Effect.provide uses a process-global MemoMap by default — without fresh,
|
||||
// every test would reuse the cachedInvalidateWithTTL state from the first run.
|
||||
Layer.fresh(ModelsDev.layer).pipe(
|
||||
Layer.provide(Layer.succeed(HttpClient.HttpClient, makeMockClient(state))),
|
||||
Layer.provide(AppFileSystem.defaultLayer),
|
||||
)
|
||||
|
||||
const writeCache = (data: object, mtimeMs?: number) =>
|
||||
Effect.promise(async () => {
|
||||
await mkdir(Global.Path.cache, { recursive: true })
|
||||
await writeFile(cacheFile, JSON.stringify(data))
|
||||
if (mtimeMs !== undefined) {
|
||||
const t = mtimeMs / 1000
|
||||
await utimes(cacheFile, t, t)
|
||||
}
|
||||
})
|
||||
|
||||
const provided = <A, E>(state: Ref.Ref<MockState>, eff: Effect.Effect<A, E, ModelsDev.Service>) =>
|
||||
eff.pipe(Effect.provide(buildLayer(state)))
|
||||
|
||||
beforeEach(async () => {
|
||||
await rm(cacheFile, { force: true })
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
await rm(cacheFile, { force: true })
|
||||
})
|
||||
|
||||
const initialState: MockState = {
|
||||
body: JSON.stringify(fixture),
|
||||
status: 200,
|
||||
calls: [],
|
||||
}
|
||||
|
||||
describe("ModelsDev Service", () => {
|
||||
it.live("get() returns providers from disk when cache file exists", () =>
|
||||
Effect.gen(function* () {
|
||||
yield* writeCache(fixture)
|
||||
const state = yield* Ref.make(initialState)
|
||||
const result = yield* provided(
|
||||
state,
|
||||
ModelsDev.Service.use((s) => s.get()),
|
||||
)
|
||||
expect(result).toEqual(fixture)
|
||||
const final = yield* Ref.get(state)
|
||||
expect(final.calls).toEqual([])
|
||||
}),
|
||||
)
|
||||
|
||||
it.live("get() returns {} when disk empty and fetch disabled", () =>
|
||||
Effect.gen(function* () {
|
||||
const state = yield* Ref.make(initialState)
|
||||
const result = yield* provided(
|
||||
state,
|
||||
ModelsDev.Service.use((s) => s.get()),
|
||||
)
|
||||
expect(result).toEqual({})
|
||||
const final = yield* Ref.get(state)
|
||||
expect(final.calls).toEqual([])
|
||||
}),
|
||||
)
|
||||
|
||||
it.live("get() is single-flight under concurrent calls", () =>
|
||||
Effect.gen(function* () {
|
||||
yield* writeCache(fixture)
|
||||
const state = yield* Ref.make(initialState)
|
||||
const results = yield* provided(
|
||||
state,
|
||||
Effect.gen(function* () {
|
||||
const svc = yield* ModelsDev.Service
|
||||
return yield* Effect.all([svc.get(), svc.get(), svc.get(), svc.get(), svc.get()], {
|
||||
concurrency: "unbounded",
|
||||
})
|
||||
}),
|
||||
)
|
||||
for (const result of results) expect(result).toEqual(fixture)
|
||||
}),
|
||||
)
|
||||
|
||||
it.live("get() caches across calls (later disk writes are ignored until invalidate)", () =>
|
||||
Effect.gen(function* () {
|
||||
yield* writeCache(fixture)
|
||||
const state = yield* Ref.make(initialState)
|
||||
const first = yield* provided(
|
||||
state,
|
||||
Effect.gen(function* () {
|
||||
const svc = yield* ModelsDev.Service
|
||||
const a = yield* svc.get()
|
||||
// mutate disk between calls — cache should mask the change
|
||||
yield* writeCache(fixture2)
|
||||
const b = yield* svc.get()
|
||||
return { a, b }
|
||||
}),
|
||||
)
|
||||
expect(first.a).toEqual(fixture)
|
||||
expect(first.b).toEqual(fixture)
|
||||
}),
|
||||
)
|
||||
|
||||
it.live("refresh(true) fetches via HttpClient and updates the cache", () =>
|
||||
Effect.gen(function* () {
|
||||
yield* writeCache(fixture)
|
||||
const state = yield* Ref.make({ ...initialState, body: JSON.stringify(fixture2) })
|
||||
const result = yield* provided(
|
||||
state,
|
||||
Effect.gen(function* () {
|
||||
const svc = yield* ModelsDev.Service
|
||||
const before = yield* svc.get()
|
||||
yield* svc.refresh(true)
|
||||
const after = yield* svc.get()
|
||||
return { before, after }
|
||||
}),
|
||||
)
|
||||
expect(result.before).toEqual(fixture)
|
||||
expect(result.after).toEqual(fixture2)
|
||||
const final = yield* Ref.get(state)
|
||||
expect(final.calls.length).toBe(1)
|
||||
expect(final.calls[0].url).toContain("/api.json")
|
||||
}),
|
||||
)
|
||||
|
||||
it.live("refresh(false) skips fetch when on-disk file is fresh", () =>
|
||||
Effect.gen(function* () {
|
||||
// Fresh: mtime within the 5-minute TTL.
|
||||
yield* writeCache(fixture, Date.now() - 1000)
|
||||
const state = yield* Ref.make({ ...initialState, body: JSON.stringify(fixture2) })
|
||||
yield* provided(
|
||||
state,
|
||||
ModelsDev.Service.use((s) => s.refresh(false)),
|
||||
)
|
||||
const final = yield* Ref.get(state)
|
||||
expect(final.calls).toEqual([])
|
||||
}),
|
||||
)
|
||||
|
||||
it.live("refresh(false) fetches when on-disk file is stale", () =>
|
||||
Effect.gen(function* () {
|
||||
// Stale: mtime 10 minutes ago, beyond the 5-minute TTL.
|
||||
yield* writeCache(fixture, Date.now() - 10 * 60 * 1000)
|
||||
const state = yield* Ref.make({ ...initialState, body: JSON.stringify(fixture2) })
|
||||
const after = yield* provided(
|
||||
state,
|
||||
Effect.gen(function* () {
|
||||
const svc = yield* ModelsDev.Service
|
||||
yield* svc.refresh(false)
|
||||
return yield* svc.get()
|
||||
}),
|
||||
)
|
||||
const final = yield* Ref.get(state)
|
||||
expect(final.calls.length).toBe(1)
|
||||
expect(after).toEqual(fixture2)
|
||||
}),
|
||||
)
|
||||
|
||||
it.live("refresh swallows HTTP errors and leaves cache intact", () =>
|
||||
Effect.gen(function* () {
|
||||
yield* writeCache(fixture)
|
||||
const state = yield* Ref.make({ ...initialState, status: 500, body: "boom" })
|
||||
const result = yield* provided(
|
||||
state,
|
||||
Effect.gen(function* () {
|
||||
const svc = yield* ModelsDev.Service
|
||||
yield* svc.refresh(true)
|
||||
return yield* svc.get()
|
||||
}),
|
||||
)
|
||||
expect(result).toEqual(fixture)
|
||||
// withTransientReadRetry retries 5xx, so calls may be > 1.
|
||||
const final = yield* Ref.get(state)
|
||||
expect(final.calls.length).toBeGreaterThanOrEqual(1)
|
||||
}),
|
||||
)
|
||||
})
|
||||
@@ -1,6 +1,7 @@
|
||||
import { afterEach, test, expect } from "bun:test"
|
||||
import { Question } from "../../src/question"
|
||||
import { Instance } from "../../src/project/instance"
|
||||
import { InstanceStore } from "../../src/project/instance-store"
|
||||
import { QuestionID } from "../../src/question/schema"
|
||||
import { disposeAllInstances, tmpdir } from "../fixture/fixture"
|
||||
import { SessionID } from "../../src/session/schema"
|
||||
@@ -421,7 +422,7 @@ test("pending question rejects on instance dispose", async () => {
|
||||
fn: async () => {
|
||||
const items = await list()
|
||||
expect(items).toHaveLength(1)
|
||||
await Instance.dispose()
|
||||
await InstanceStore.disposeInstance(Instance.current)
|
||||
},
|
||||
})
|
||||
|
||||
@@ -456,7 +457,7 @@ test("pending question rejects on instance reload", async () => {
|
||||
fn: async () => {
|
||||
const items = await list()
|
||||
expect(items).toHaveLength(1)
|
||||
await Instance.reload({ directory: tmp.path })
|
||||
await InstanceStore.reloadInstance({ directory: tmp.path })
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import { Flag } from "@opencode-ai/core/flag/flag"
|
||||
import { ExperimentalHttpApiServer } from "../../src/server/routes/instance/httpapi/server"
|
||||
import { McpPaths } from "../../src/server/routes/instance/httpapi/groups/mcp"
|
||||
import { Instance } from "../../src/project/instance"
|
||||
import { InstanceStore } from "../../src/project/instance-store"
|
||||
import { Server } from "../../src/server/server"
|
||||
import * as Log from "@opencode-ai/core/util/log"
|
||||
import { resetDatabase } from "../fixture/db"
|
||||
@@ -57,7 +58,9 @@ function withMcpProject<A, E, R>(self: (dir: string) => Effect.Effect<A, E, R>)
|
||||
}),
|
||||
)
|
||||
yield* Effect.addFinalizer(() =>
|
||||
Effect.promise(() => Instance.provide({ directory: dir, fn: () => Instance.dispose() })).pipe(Effect.ignore),
|
||||
Effect.promise(() =>
|
||||
Instance.provide({ directory: dir, fn: () => InstanceStore.disposeInstance(Instance.current) }),
|
||||
).pipe(Effect.ignore),
|
||||
)
|
||||
|
||||
return yield* self(dir).pipe(provideInstance(dir))
|
||||
|
||||
@@ -3,6 +3,7 @@ import { Effect, FileSystem, Layer, Path } from "effect"
|
||||
import { NodeFileSystem, NodePath } from "@effect/platform-node"
|
||||
import { Flag } from "@opencode-ai/core/flag/flag"
|
||||
import { Instance } from "../../src/project/instance"
|
||||
import { InstanceStore } from "../../src/project/instance-store"
|
||||
import { Server } from "../../src/server/server"
|
||||
import * as Log from "@opencode-ai/core/util/log"
|
||||
import { resetDatabase } from "../fixture/db"
|
||||
@@ -89,7 +90,9 @@ function withProviderProject<A, E, R>(self: (dir: string) => Effect.Effect<A, E,
|
||||
)
|
||||
yield* writeProviderAuthPlugin(dir)
|
||||
yield* Effect.addFinalizer(() =>
|
||||
Effect.promise(() => Instance.provide({ directory: dir, fn: () => Instance.dispose() })).pipe(Effect.ignore),
|
||||
Effect.promise(() =>
|
||||
Instance.provide({ directory: dir, fn: () => InstanceStore.disposeInstance(Instance.current) }),
|
||||
).pipe(Effect.ignore),
|
||||
)
|
||||
|
||||
return yield* self(dir).pipe(provideInstance(dir))
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
import { afterEach, describe, expect, spyOn, test } from "bun:test"
|
||||
import { afterEach, describe, expect, test } from "bun:test"
|
||||
import { Effect } from "effect"
|
||||
import path from "path"
|
||||
import { GlobalBus } from "../../src/bus/global"
|
||||
import { Snapshot } from "../../src/snapshot"
|
||||
import { Instance } from "../../src/project/instance"
|
||||
import { Server } from "../../src/server/server"
|
||||
import { Filesystem } from "@/util/filesystem"
|
||||
import * as Log from "@opencode-ai/core/util/log"
|
||||
@@ -16,6 +15,9 @@ afterEach(async () => {
|
||||
await resetDatabase()
|
||||
})
|
||||
|
||||
const disposedEvents = (seen: { directory?: string; payload: { type: string } }[], dir: string) =>
|
||||
seen.filter((evt) => evt.directory === dir && evt.payload.type === "server.instance.disposed").length
|
||||
|
||||
describe("project.initGit endpoint", () => {
|
||||
test("initializes git and reloads immediately", async () => {
|
||||
await using tmp = await tmpdir()
|
||||
@@ -24,8 +26,6 @@ describe("project.initGit endpoint", () => {
|
||||
const fn = (evt: { directory?: string; payload: { type: string } }) => {
|
||||
seen.push(evt)
|
||||
}
|
||||
const reload = Instance.reload
|
||||
const reloadSpy = spyOn(Instance, "reload").mockImplementation((input) => reload(input))
|
||||
GlobalBus.on("event", fn)
|
||||
|
||||
try {
|
||||
@@ -42,10 +42,8 @@ describe("project.initGit endpoint", () => {
|
||||
vcs: "git",
|
||||
worktree: tmp.path,
|
||||
})
|
||||
expect(reloadSpy).toHaveBeenCalledTimes(1)
|
||||
expect(seen.some((evt) => evt.directory === tmp.path && evt.payload.type === "server.instance.disposed")).toBe(
|
||||
true,
|
||||
)
|
||||
// Reload behavior: bus emits exactly one server.instance.disposed for the directory.
|
||||
expect(disposedEvents(seen, tmp.path)).toBe(1)
|
||||
expect(await Filesystem.exists(path.join(tmp.path, ".git", "opencode"))).toBe(false)
|
||||
|
||||
const current = await app.request("/project/current", {
|
||||
@@ -70,7 +68,6 @@ describe("project.initGit endpoint", () => {
|
||||
).toBeTruthy()
|
||||
} finally {
|
||||
await disposeAllInstances()
|
||||
reloadSpy.mockRestore()
|
||||
GlobalBus.off("event", fn)
|
||||
}
|
||||
})
|
||||
@@ -82,8 +79,6 @@ describe("project.initGit endpoint", () => {
|
||||
const fn = (evt: { directory?: string; payload: { type: string } }) => {
|
||||
seen.push(evt)
|
||||
}
|
||||
const reload = Instance.reload
|
||||
const reloadSpy = spyOn(Instance, "reload").mockImplementation((input) => reload(input))
|
||||
GlobalBus.on("event", fn)
|
||||
|
||||
try {
|
||||
@@ -98,10 +93,7 @@ describe("project.initGit endpoint", () => {
|
||||
vcs: "git",
|
||||
worktree: tmp.path,
|
||||
})
|
||||
expect(
|
||||
seen.filter((evt) => evt.directory === tmp.path && evt.payload.type === "server.instance.disposed").length,
|
||||
).toBe(0)
|
||||
expect(reloadSpy).toHaveBeenCalledTimes(0)
|
||||
expect(disposedEvents(seen, tmp.path)).toBe(0)
|
||||
|
||||
const current = await app.request("/project/current", {
|
||||
headers: {
|
||||
@@ -115,7 +107,6 @@ describe("project.initGit endpoint", () => {
|
||||
})
|
||||
} finally {
|
||||
await disposeAllInstances()
|
||||
reloadSpy.mockRestore()
|
||||
GlobalBus.off("event", fn)
|
||||
}
|
||||
})
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://json.schemastore.org/package.json",
|
||||
"name": "@opencode-ai/plugin",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://json.schemastore.org/package.json",
|
||||
"name": "@opencode-ai/sdk",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
|
||||
@@ -33,6 +33,13 @@ export type EventProjectUpdated = {
|
||||
properties: Project
|
||||
}
|
||||
|
||||
export type EventServerInstanceDisposed = {
|
||||
type: "server.instance.disposed"
|
||||
properties: {
|
||||
directory: string
|
||||
}
|
||||
}
|
||||
|
||||
export type EventServerConnected = {
|
||||
type: "server.connected"
|
||||
properties: {
|
||||
@@ -47,10 +54,18 @@ export type EventGlobalDisposed = {
|
||||
}
|
||||
}
|
||||
|
||||
export type EventServerInstanceDisposed = {
|
||||
type: "server.instance.disposed"
|
||||
export type EventFileEdited = {
|
||||
type: "file.edited"
|
||||
properties: {
|
||||
directory: string
|
||||
file: string
|
||||
}
|
||||
}
|
||||
|
||||
export type EventFileWatcherUpdated = {
|
||||
type: "file.watcher.updated"
|
||||
properties: {
|
||||
file: string
|
||||
event: "add" | "change" | "unlink"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -215,53 +230,6 @@ export type EventInstallationUpdateAvailable = {
|
||||
}
|
||||
}
|
||||
|
||||
export type EventWorkspaceReady = {
|
||||
type: "workspace.ready"
|
||||
properties: {
|
||||
name: string
|
||||
}
|
||||
}
|
||||
|
||||
export type EventWorkspaceFailed = {
|
||||
type: "workspace.failed"
|
||||
properties: {
|
||||
message: string
|
||||
}
|
||||
}
|
||||
|
||||
export type EventWorkspaceRestore = {
|
||||
type: "workspace.restore"
|
||||
properties: {
|
||||
workspaceID: string
|
||||
sessionID: string
|
||||
total: number
|
||||
step: number
|
||||
}
|
||||
}
|
||||
|
||||
export type EventWorkspaceStatus = {
|
||||
type: "workspace.status"
|
||||
properties: {
|
||||
workspaceID: string
|
||||
status: "connected" | "connecting" | "disconnected" | "error"
|
||||
}
|
||||
}
|
||||
|
||||
export type EventFileEdited = {
|
||||
type: "file.edited"
|
||||
properties: {
|
||||
file: string
|
||||
}
|
||||
}
|
||||
|
||||
export type EventFileWatcherUpdated = {
|
||||
type: "file.watcher.updated"
|
||||
properties: {
|
||||
file: string
|
||||
event: "add" | "change" | "unlink"
|
||||
}
|
||||
}
|
||||
|
||||
export type QuestionOption = {
|
||||
/**
|
||||
* Display text (1-5 words, concise)
|
||||
@@ -484,6 +452,38 @@ export type EventVcsBranchUpdated = {
|
||||
}
|
||||
}
|
||||
|
||||
export type EventWorkspaceReady = {
|
||||
type: "workspace.ready"
|
||||
properties: {
|
||||
name: string
|
||||
}
|
||||
}
|
||||
|
||||
export type EventWorkspaceFailed = {
|
||||
type: "workspace.failed"
|
||||
properties: {
|
||||
message: string
|
||||
}
|
||||
}
|
||||
|
||||
export type EventWorkspaceRestore = {
|
||||
type: "workspace.restore"
|
||||
properties: {
|
||||
workspaceID: string
|
||||
sessionID: string
|
||||
total: number
|
||||
step: number
|
||||
}
|
||||
}
|
||||
|
||||
export type EventWorkspaceStatus = {
|
||||
type: "workspace.status"
|
||||
properties: {
|
||||
workspaceID: string
|
||||
status: "connected" | "connecting" | "disconnected" | "error"
|
||||
}
|
||||
}
|
||||
|
||||
export type EventWorktreeReady = {
|
||||
type: "worktree.ready"
|
||||
properties: {
|
||||
@@ -1112,9 +1112,11 @@ export type GlobalEvent = {
|
||||
workspace?: string
|
||||
payload:
|
||||
| EventProjectUpdated
|
||||
| EventServerInstanceDisposed
|
||||
| EventServerConnected
|
||||
| EventGlobalDisposed
|
||||
| EventServerInstanceDisposed
|
||||
| EventFileEdited
|
||||
| EventFileWatcherUpdated
|
||||
| EventLspClientDiagnostics
|
||||
| EventLspUpdated
|
||||
| EventMessagePartDelta
|
||||
@@ -1124,12 +1126,6 @@ export type GlobalEvent = {
|
||||
| EventSessionError
|
||||
| EventInstallationUpdated
|
||||
| EventInstallationUpdateAvailable
|
||||
| EventWorkspaceReady
|
||||
| EventWorkspaceFailed
|
||||
| EventWorkspaceRestore
|
||||
| EventWorkspaceStatus
|
||||
| EventFileEdited
|
||||
| EventFileWatcherUpdated
|
||||
| EventQuestionAsked
|
||||
| EventQuestionReplied
|
||||
| EventQuestionRejected
|
||||
@@ -1145,6 +1141,10 @@ export type GlobalEvent = {
|
||||
| EventMcpBrowserOpenFailed
|
||||
| EventCommandExecuted
|
||||
| EventVcsBranchUpdated
|
||||
| EventWorkspaceReady
|
||||
| EventWorkspaceFailed
|
||||
| EventWorkspaceRestore
|
||||
| EventWorkspaceStatus
|
||||
| EventWorktreeReady
|
||||
| EventWorktreeFailed
|
||||
| EventPtyCreated
|
||||
@@ -2055,9 +2055,11 @@ export type File = {
|
||||
|
||||
export type Event =
|
||||
| EventProjectUpdated
|
||||
| EventServerInstanceDisposed
|
||||
| EventServerConnected
|
||||
| EventGlobalDisposed
|
||||
| EventServerInstanceDisposed
|
||||
| EventFileEdited
|
||||
| EventFileWatcherUpdated
|
||||
| EventLspClientDiagnostics
|
||||
| EventLspUpdated
|
||||
| EventMessagePartDelta
|
||||
@@ -2067,12 +2069,6 @@ export type Event =
|
||||
| EventSessionError
|
||||
| EventInstallationUpdated
|
||||
| EventInstallationUpdateAvailable
|
||||
| EventWorkspaceReady
|
||||
| EventWorkspaceFailed
|
||||
| EventWorkspaceRestore
|
||||
| EventWorkspaceStatus
|
||||
| EventFileEdited
|
||||
| EventFileWatcherUpdated
|
||||
| EventQuestionAsked
|
||||
| EventQuestionReplied
|
||||
| EventQuestionRejected
|
||||
@@ -2088,6 +2084,10 @@ export type Event =
|
||||
| EventMcpBrowserOpenFailed
|
||||
| EventCommandExecuted
|
||||
| EventVcsBranchUpdated
|
||||
| EventWorkspaceReady
|
||||
| EventWorkspaceFailed
|
||||
| EventWorkspaceRestore
|
||||
| EventWorkspaceStatus
|
||||
| EventWorktreeReady
|
||||
| EventWorktreeFailed
|
||||
| EventPtyCreated
|
||||
|
||||
@@ -7674,6 +7674,25 @@
|
||||
},
|
||||
"required": ["type", "properties"]
|
||||
},
|
||||
"Event.server.instance.disposed": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"const": "server.instance.disposed"
|
||||
},
|
||||
"properties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"directory": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": ["directory"]
|
||||
}
|
||||
},
|
||||
"required": ["type", "properties"]
|
||||
},
|
||||
"Event.server.connected": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -7702,21 +7721,44 @@
|
||||
},
|
||||
"required": ["type", "properties"]
|
||||
},
|
||||
"Event.server.instance.disposed": {
|
||||
"Event.file.edited": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"const": "server.instance.disposed"
|
||||
"const": "file.edited"
|
||||
},
|
||||
"properties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"directory": {
|
||||
"file": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": ["directory"]
|
||||
"required": ["file"]
|
||||
}
|
||||
},
|
||||
"required": ["type", "properties"]
|
||||
},
|
||||
"Event.file.watcher.updated": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"const": "file.watcher.updated"
|
||||
},
|
||||
"properties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"file": {
|
||||
"type": "string"
|
||||
},
|
||||
"event": {
|
||||
"type": "string",
|
||||
"enum": ["add", "change", "unlink"]
|
||||
}
|
||||
},
|
||||
"required": ["file", "event"]
|
||||
}
|
||||
},
|
||||
"required": ["type", "properties"]
|
||||
@@ -8183,144 +8225,6 @@
|
||||
},
|
||||
"required": ["type", "properties"]
|
||||
},
|
||||
"Event.workspace.ready": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"const": "workspace.ready"
|
||||
},
|
||||
"properties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": ["name"]
|
||||
}
|
||||
},
|
||||
"required": ["type", "properties"]
|
||||
},
|
||||
"Event.workspace.failed": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"const": "workspace.failed"
|
||||
},
|
||||
"properties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"message": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": ["message"]
|
||||
}
|
||||
},
|
||||
"required": ["type", "properties"]
|
||||
},
|
||||
"Event.workspace.restore": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"const": "workspace.restore"
|
||||
},
|
||||
"properties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"workspaceID": {
|
||||
"type": "string",
|
||||
"pattern": "^wrk.*"
|
||||
},
|
||||
"sessionID": {
|
||||
"type": "string",
|
||||
"pattern": "^ses.*"
|
||||
},
|
||||
"total": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"maximum": 9007199254740991
|
||||
},
|
||||
"step": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"maximum": 9007199254740991
|
||||
}
|
||||
},
|
||||
"required": ["workspaceID", "sessionID", "total", "step"]
|
||||
}
|
||||
},
|
||||
"required": ["type", "properties"]
|
||||
},
|
||||
"Event.workspace.status": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"const": "workspace.status"
|
||||
},
|
||||
"properties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"workspaceID": {
|
||||
"type": "string",
|
||||
"pattern": "^wrk.*"
|
||||
},
|
||||
"status": {
|
||||
"type": "string",
|
||||
"enum": ["connected", "connecting", "disconnected", "error"]
|
||||
}
|
||||
},
|
||||
"required": ["workspaceID", "status"]
|
||||
}
|
||||
},
|
||||
"required": ["type", "properties"]
|
||||
},
|
||||
"Event.file.edited": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"const": "file.edited"
|
||||
},
|
||||
"properties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"file": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": ["file"]
|
||||
}
|
||||
},
|
||||
"required": ["type", "properties"]
|
||||
},
|
||||
"Event.file.watcher.updated": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"const": "file.watcher.updated"
|
||||
},
|
||||
"properties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"file": {
|
||||
"type": "string"
|
||||
},
|
||||
"event": {
|
||||
"type": "string",
|
||||
"enum": ["add", "change", "unlink"]
|
||||
}
|
||||
},
|
||||
"required": ["file", "event"]
|
||||
}
|
||||
},
|
||||
"required": ["type", "properties"]
|
||||
},
|
||||
"QuestionOption": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -8839,6 +8743,102 @@
|
||||
},
|
||||
"required": ["type", "properties"]
|
||||
},
|
||||
"Event.workspace.ready": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"const": "workspace.ready"
|
||||
},
|
||||
"properties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": ["name"]
|
||||
}
|
||||
},
|
||||
"required": ["type", "properties"]
|
||||
},
|
||||
"Event.workspace.failed": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"const": "workspace.failed"
|
||||
},
|
||||
"properties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"message": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": ["message"]
|
||||
}
|
||||
},
|
||||
"required": ["type", "properties"]
|
||||
},
|
||||
"Event.workspace.restore": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"const": "workspace.restore"
|
||||
},
|
||||
"properties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"workspaceID": {
|
||||
"type": "string",
|
||||
"pattern": "^wrk.*"
|
||||
},
|
||||
"sessionID": {
|
||||
"type": "string",
|
||||
"pattern": "^ses.*"
|
||||
},
|
||||
"total": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"maximum": 9007199254740991
|
||||
},
|
||||
"step": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"maximum": 9007199254740991
|
||||
}
|
||||
},
|
||||
"required": ["workspaceID", "sessionID", "total", "step"]
|
||||
}
|
||||
},
|
||||
"required": ["type", "properties"]
|
||||
},
|
||||
"Event.workspace.status": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"const": "workspace.status"
|
||||
},
|
||||
"properties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"workspaceID": {
|
||||
"type": "string",
|
||||
"pattern": "^wrk.*"
|
||||
},
|
||||
"status": {
|
||||
"type": "string",
|
||||
"enum": ["connected", "connecting", "disconnected", "error"]
|
||||
}
|
||||
},
|
||||
"required": ["workspaceID", "status"]
|
||||
}
|
||||
},
|
||||
"required": ["type", "properties"]
|
||||
},
|
||||
"Event.worktree.ready": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -10960,6 +10960,9 @@
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.project.updated"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.server.instance.disposed"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.server.connected"
|
||||
},
|
||||
@@ -10967,7 +10970,10 @@
|
||||
"$ref": "#/components/schemas/Event.global.disposed"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.server.instance.disposed"
|
||||
"$ref": "#/components/schemas/Event.file.edited"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.file.watcher.updated"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.lsp.client.diagnostics"
|
||||
@@ -10996,24 +11002,6 @@
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.installation.update-available"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.workspace.ready"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.workspace.failed"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.workspace.restore"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.workspace.status"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.file.edited"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.file.watcher.updated"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.question.asked"
|
||||
},
|
||||
@@ -11059,6 +11047,18 @@
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.vcs.branch.updated"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.workspace.ready"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.workspace.failed"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.workspace.restore"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.workspace.status"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.worktree.ready"
|
||||
},
|
||||
@@ -13253,6 +13253,9 @@
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.project.updated"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.server.instance.disposed"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.server.connected"
|
||||
},
|
||||
@@ -13260,7 +13263,10 @@
|
||||
"$ref": "#/components/schemas/Event.global.disposed"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.server.instance.disposed"
|
||||
"$ref": "#/components/schemas/Event.file.edited"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.file.watcher.updated"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.lsp.client.diagnostics"
|
||||
@@ -13289,24 +13295,6 @@
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.installation.update-available"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.workspace.ready"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.workspace.failed"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.workspace.restore"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.workspace.status"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.file.edited"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.file.watcher.updated"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.question.asked"
|
||||
},
|
||||
@@ -13352,6 +13340,18 @@
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.vcs.branch.updated"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.workspace.ready"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.workspace.failed"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.workspace.restore"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.workspace.status"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/Event.worktree.ready"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@opencode-ai/slack",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@opencode-ai/ui",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"exports": {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "@opencode-ai/web",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev",
|
||||
|
||||
@@ -29,16 +29,16 @@ opencode [project]
|
||||
|
||||
#### الخيارات
|
||||
|
||||
| الخيار | المختصر | الوصف |
|
||||
| ------------ | ------- | ----------------------------------------------------------------- |
|
||||
| `--continue` | `-c` | متابعة الجلسة الأخيرة |
|
||||
| `--session` | `-s` | معرّف الجلسة للمتابعة |
|
||||
| `--fork` | | تفريع الجلسة عند المتابعة (يستخدم مع `--continue` أو `--session`) |
|
||||
| `--prompt` | | الموجّه المراد استخدامه |
|
||||
| `--model` | `-m` | النموذج المراد استخدامه بصيغة provider/model |
|
||||
| `--agent` | | الوكيل المراد استخدامه |
|
||||
| `--port` | | المنفذ الذي يتم الاستماع عليه |
|
||||
| `--hostname` | | اسم المضيف الذي يتم الاستماع عليه |
|
||||
| الخيار | المختصر | الوصف |
|
||||
| ---------------------------------------- | ------- | ----------------------------------------------------------------- |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | متابعة الجلسة الأخيرة |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | معرّف الجلسة للمتابعة |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | تفريع الجلسة عند المتابعة (يستخدم مع `--continue` أو `--session`) |
|
||||
| <nobr><code>{"--prompt"}</code></nobr> | | الموجّه المراد استخدامه |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | النموذج المراد استخدامه بصيغة provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | الوكيل المراد استخدامه |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | المنفذ الذي يتم الاستماع عليه |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | | اسم المضيف الذي يتم الاستماع عليه |
|
||||
|
||||
---
|
||||
|
||||
@@ -78,10 +78,14 @@ opencode attach http://10.20.30.40:4096
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | المختصر | الوصف |
|
||||
| ----------- | ------- | ----------------------------------- |
|
||||
| `--dir` | | دليل العمل الذي ستبدأ منه واجهة TUI |
|
||||
| `--session` | `-s` | معرّف الجلسة للمتابعة |
|
||||
| الراية | المختصر | الوصف |
|
||||
| ---------------------------------------- | ------- | --------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | دليل العمل الذي ستبدأ منه واجهة TUI |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | متابعة آخر جلسة |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | معرّف الجلسة للمتابعة |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | تفريع الجلسة عند المتابعة (استخدمه مع `--continue` أو `--session`) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | كلمة مرور المصادقة الأساسية (الافتراضي `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | اسم مستخدم المصادقة الأساسية (الافتراضي `OPENCODE_SERVER_USERNAME` أو `opencode`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -187,10 +191,10 @@ opencode github run
|
||||
|
||||
##### الرايات
|
||||
|
||||
| الراية | الوصف |
|
||||
| --------- | ------------------------------------ |
|
||||
| `--event` | حدث GitHub مُحاكى لتشغيل الوكيل عليه |
|
||||
| `--token` | رمز وصول شخصي لـ GitHub |
|
||||
| الراية | الوصف |
|
||||
| ------------------------------------- | ------------------------------------ |
|
||||
| <nobr><code>{"--event"}</code></nobr> | حدث GitHub مُحاكى لتشغيل الوكيل عليه |
|
||||
| <nobr><code>{"--token"}</code></nobr> | رمز وصول شخصي لـ GitHub |
|
||||
|
||||
---
|
||||
|
||||
@@ -296,10 +300,10 @@ opencode models anthropic
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | الوصف |
|
||||
| ----------- | ------------------------------------------------------------- |
|
||||
| `--refresh` | تحديث ذاكرة التخزين المؤقت للنماذج من models.dev |
|
||||
| `--verbose` | استخدام مخرجات أكثر تفصيلا للنماذج (تشمل بيانات مثل التكاليف) |
|
||||
| الراية | الوصف |
|
||||
| --------------------------------------- | ------------------------------------------------------------- |
|
||||
| <nobr><code>{"--refresh"}</code></nobr> | تحديث ذاكرة التخزين المؤقت للنماذج من models.dev |
|
||||
| <nobr><code>{"--verbose"}</code></nobr> | استخدام مخرجات أكثر تفصيلا للنماذج (تشمل بيانات مثل التكاليف) |
|
||||
|
||||
استخدم الراية `--refresh` لتحديث قائمة النماذج المخزنة مؤقتا. يفيد ذلك عند إضافة نماذج جديدة إلى مزود وتريد رؤيتها في OpenCode.
|
||||
|
||||
@@ -335,20 +339,25 @@ opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | المختصر | الوصف |
|
||||
| ------------ | ------- | ----------------------------------------------------------------- |
|
||||
| `--command` | | الأمر المراد تشغيله؛ استخدم الرسالة كوسائط |
|
||||
| `--continue` | `-c` | متابعة الجلسة الأخيرة |
|
||||
| `--session` | `-s` | معرّف الجلسة للمتابعة |
|
||||
| `--fork` | | تفريع الجلسة عند المتابعة (يستخدم مع `--continue` أو `--session`) |
|
||||
| `--share` | | مشاركة الجلسة |
|
||||
| `--model` | `-m` | النموذج المراد استخدامه بصيغة provider/model |
|
||||
| `--agent` | | الوكيل المراد استخدامه |
|
||||
| `--file` | `-f` | ملف/ملفات لإرفاقها بالرسالة |
|
||||
| `--format` | | التنسيق: default (منسق) أو json (أحداث JSON خام) |
|
||||
| `--title` | | عنوان للجلسة (يستخدم موجهًا مقتطعًا إن لم تُحدَّد قيمة) |
|
||||
| `--attach` | | الإرفاق بخادم opencode قيد التشغيل (مثل http://localhost:4096) |
|
||||
| `--port` | | منفذ الخادم المحلي (الافتراضي منفذ عشوائي) |
|
||||
| الراية | المختصر | الوصف |
|
||||
| ---------------------------------------- | ------- | --------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--command"}</code></nobr> | | الأمر المراد تشغيله؛ استخدم الرسالة كوسائط |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | متابعة الجلسة الأخيرة |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | معرّف الجلسة للمتابعة |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | تفريع الجلسة عند المتابعة (يستخدم مع `--continue` أو `--session`) |
|
||||
| <nobr><code>{"--share"}</code></nobr> | | مشاركة الجلسة |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | النموذج المراد استخدامه بصيغة provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | الوكيل المراد استخدامه |
|
||||
| <nobr><code>{"--file"}</code></nobr> | `-f` | ملف/ملفات لإرفاقها بالرسالة |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | التنسيق: default (منسق) أو json (أحداث JSON خام) |
|
||||
| <nobr><code>{"--title"}</code></nobr> | | عنوان للجلسة (يستخدم موجهًا مقتطعًا إن لم تُحدَّد قيمة) |
|
||||
| <nobr><code>{"--attach"}</code></nobr> | | الإرفاق بخادم opencode قيد التشغيل (مثل http://localhost:4096) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | كلمة مرور المصادقة الأساسية (الافتراضي `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | اسم مستخدم المصادقة الأساسية (الافتراضي `OPENCODE_SERVER_USERNAME` أو `opencode`) |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | دليل التشغيل، أو المسار على الخادم البعيد عند الإرفاق |
|
||||
| <nobr><code>{"--variant"}</code></nobr> | | متغير النموذج (جهد الاستدلال الخاص بالمزود) |
|
||||
| <nobr><code>{"--thinking"}</code></nobr> | | عرض كتل التفكير |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | منفذ الخادم المحلي (الافتراضي منفذ عشوائي) |
|
||||
|
||||
---
|
||||
|
||||
@@ -364,12 +373,12 @@ opencode serve
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | الوصف |
|
||||
| ------------ | ----------------------------------------- |
|
||||
| `--port` | المنفذ الذي يتم الاستماع عليه |
|
||||
| `--hostname` | اسم المضيف الذي يتم الاستماع عليه |
|
||||
| `--mdns` | تفعيل اكتشاف mDNS |
|
||||
| `--cors` | أصول/منشأات إضافية للمتصفح للسماح بـ CORS |
|
||||
| الراية | الوصف |
|
||||
| ---------------------------------------- | ----------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | المنفذ الذي يتم الاستماع عليه |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | اسم المضيف الذي يتم الاستماع عليه |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | تفعيل اكتشاف mDNS |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | أصول/منشأات إضافية للمتصفح للسماح بـ CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -393,10 +402,10 @@ opencode session list
|
||||
|
||||
##### الرايات
|
||||
|
||||
| الراية | المختصر | الوصف |
|
||||
| ------------- | ------- | ------------------------------------- |
|
||||
| `--max-count` | `-n` | حصر النتائج في أحدث N جلسات |
|
||||
| `--format` | | تنسيق المخرجات: table أو json (table) |
|
||||
| الراية | المختصر | الوصف |
|
||||
| ----------------------------------------- | ------- | ------------------------------------- |
|
||||
| <nobr><code>{"--max-count"}</code></nobr> | `-n` | حصر النتائج في أحدث N جلسات |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | تنسيق المخرجات: table أو json (table) |
|
||||
|
||||
---
|
||||
|
||||
@@ -410,12 +419,12 @@ opencode stats
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | الوصف |
|
||||
| ----------- | ------------------------------------------------------------------------- |
|
||||
| `--days` | عرض الإحصاءات لآخر N يومًا (الافتراضي: كل الوقت) |
|
||||
| `--tools` | عدد الأدوات المطلوب عرضها (الافتراضي: الكل) |
|
||||
| `--models` | عرض تفصيل استخدام النماذج (مخفي افتراضيا). مرّر رقمًا لعرض أعلى N |
|
||||
| `--project` | التصفية حسب المشروع (الافتراضي: كل المشاريع، سلسلة فارغة: المشروع الحالي) |
|
||||
| الراية | الوصف |
|
||||
| --------------------------------------- | ------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--days"}</code></nobr> | عرض الإحصاءات لآخر N يومًا (الافتراضي: كل الوقت) |
|
||||
| <nobr><code>{"--tools"}</code></nobr> | عدد الأدوات المطلوب عرضها (الافتراضي: الكل) |
|
||||
| <nobr><code>{"--models"}</code></nobr> | عرض تفصيل استخدام النماذج (مخفي افتراضيا). مرّر رقمًا لعرض أعلى N |
|
||||
| <nobr><code>{"--project"}</code></nobr> | التصفية حسب المشروع (الافتراضي: كل المشاريع، سلسلة فارغة: المشروع الحالي) |
|
||||
|
||||
---
|
||||
|
||||
@@ -460,12 +469,12 @@ opencode web
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | الوصف |
|
||||
| ------------ | ----------------------------------------- |
|
||||
| `--port` | المنفذ الذي يتم الاستماع عليه |
|
||||
| `--hostname` | اسم المضيف الذي يتم الاستماع عليه |
|
||||
| `--mdns` | تفعيل اكتشاف mDNS |
|
||||
| `--cors` | أصول/منشأات إضافية للمتصفح للسماح بـ CORS |
|
||||
| الراية | الوصف |
|
||||
| ---------------------------------------- | ----------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | المنفذ الذي يتم الاستماع عليه |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | اسم المضيف الذي يتم الاستماع عليه |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | تفعيل اكتشاف mDNS |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | أصول/منشأات إضافية للمتصفح للسماح بـ CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -481,11 +490,11 @@ opencode acp
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | الوصف |
|
||||
| ------------ | --------------------------------- |
|
||||
| `--cwd` | دليل العمل |
|
||||
| `--port` | المنفذ الذي يتم الاستماع عليه |
|
||||
| `--hostname` | اسم المضيف الذي يتم الاستماع عليه |
|
||||
| الراية | الوصف |
|
||||
| ---------------------------------------- | --------------------------------- |
|
||||
| <nobr><code>{"--cwd"}</code></nobr> | دليل العمل |
|
||||
| <nobr><code>{"--port"}</code></nobr> | المنفذ الذي يتم الاستماع عليه |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | اسم المضيف الذي يتم الاستماع عليه |
|
||||
|
||||
---
|
||||
|
||||
@@ -499,12 +508,12 @@ opencode uninstall
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | المختصر | الوصف |
|
||||
| --------------- | ------- | ----------------------------------- |
|
||||
| `--keep-config` | `-c` | الإبقاء على ملفات التهيئة |
|
||||
| `--keep-data` | `-d` | الإبقاء على بيانات الجلسات واللقطات |
|
||||
| `--dry-run` | | عرض ما سيتم حذفه دون تنفيذ الحذف |
|
||||
| `--force` | `-f` | تخطي مطالبات التأكيد |
|
||||
| الراية | المختصر | الوصف |
|
||||
| ------------------------------------------- | ------- | ----------------------------------- |
|
||||
| <nobr><code>{"--keep-config"}</code></nobr> | `-c` | الإبقاء على ملفات التهيئة |
|
||||
| <nobr><code>{"--keep-data"}</code></nobr> | `-d` | الإبقاء على بيانات الجلسات واللقطات |
|
||||
| <nobr><code>{"--dry-run"}</code></nobr> | | عرض ما سيتم حذفه دون تنفيذ الحذف |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | تخطي مطالبات التأكيد |
|
||||
|
||||
---
|
||||
|
||||
@@ -530,9 +539,9 @@ opencode upgrade v0.1.48
|
||||
|
||||
#### الرايات
|
||||
|
||||
| الراية | المختصر | الوصف |
|
||||
| ---------- | ------- | ----------------------------------------------------------- |
|
||||
| `--method` | `-m` | طريقة التثبيت المستخدمة: curl أو npm أو pnpm أو bun أو brew |
|
||||
| الراية | المختصر | الوصف |
|
||||
| -------------------------------------- | ------- | ----------------------------------------------------------- |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | طريقة التثبيت المستخدمة: curl أو npm أو pnpm أو bun أو brew |
|
||||
|
||||
---
|
||||
|
||||
@@ -540,12 +549,12 @@ opencode upgrade v0.1.48
|
||||
|
||||
يدعم سطر أوامر opencode الخيارات العامة التالية.
|
||||
|
||||
| الراية | المختصر | الوصف |
|
||||
| -------------- | ------- | -------------------------------------- |
|
||||
| `--help` | `-h` | عرض المساعدة |
|
||||
| `--version` | `-v` | طباعة رقم الإصدار |
|
||||
| `--print-logs` | | طباعة السجلات إلى stderr |
|
||||
| `--log-level` | | مستوى السجل (DEBUG, INFO, WARN, ERROR) |
|
||||
| الراية | المختصر | الوصف |
|
||||
| ------------------------------------------ | ------- | -------------------------------------- |
|
||||
| <nobr><code>{"--help"}</code></nobr> | `-h` | عرض المساعدة |
|
||||
| <nobr><code>{"--version"}</code></nobr> | `-v` | طباعة رقم الإصدار |
|
||||
| <nobr><code>{"--print-logs"}</code></nobr> | | طباعة السجلات إلى stderr |
|
||||
| <nobr><code>{"--log-level"}</code></nobr> | | مستوى السجل (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -29,16 +29,16 @@ opencode [project]
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Kratko | Opis |
|
||||
| ------------ | ------ | ------------------------------------------------------------------------ |
|
||||
| `--continue` | `-c` | Nastavite posljednju sesiju |
|
||||
| `--session` | `-s` | ID sesije za nastavak |
|
||||
| `--fork` | | Forkujte sesiju pri nastavku (koristiti sa `--continue` ili `--session`) |
|
||||
| `--prompt` | | Prompt za upotrebu |
|
||||
| `--model` | `-m` | Model za korištenje u obliku provider/model |
|
||||
| `--agent` | | Agent za korištenje |
|
||||
| `--port` | | Port na kojem treba slušati |
|
||||
| `--hostname` | | Hostname na kojem treba slušati |
|
||||
| Opcija | Kratko | Opis |
|
||||
| ---------------------------------------- | ------ | ------------------------------------------------------------------------ |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Nastavite posljednju sesiju |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | ID sesije za nastavak |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Forkujte sesiju pri nastavku (koristiti sa `--continue` ili `--session`) |
|
||||
| <nobr><code>{"--prompt"}</code></nobr> | | Prompt za upotrebu |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Model za korištenje u obliku provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Agent za korištenje |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Port na kojem treba slušati |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | | Hostname na kojem treba slušati |
|
||||
|
||||
---
|
||||
|
||||
@@ -78,10 +78,14 @@ opencode attach http://10.20.30.40:4096
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Kratko | Opis |
|
||||
| ----------- | ------ | ------------------------------------ |
|
||||
| `--dir` | | Radni direktorij za pokretanje TUI-a |
|
||||
| `--session` | `-s` | ID sesije za nastavak |
|
||||
| Opcija | Kratko | Opis |
|
||||
| ---------------------------------------- | ------ | --------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Radni direktorij za pokretanje TUI-a |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Nastavi posljednju sesiju |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | ID sesije za nastavak |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Forkuj sesiju prilikom nastavka (koristite sa `--continue` ili `--session`) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Lozinka za osnovnu autentifikaciju (zadano: `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Korisničko ime za osnovnu autentifikaciju (zadano: `OPENCODE_SERVER_USERNAME` ili `opencode`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -187,10 +191,10 @@ opencode github run
|
||||
|
||||
##### Opcije
|
||||
|
||||
| Opcija | Opis |
|
||||
| --------- | -------------------------------------- |
|
||||
| `--event` | GitHub mock event za pokretanje agenta |
|
||||
| `--token` | GitHub Personal Access Token |
|
||||
| Opcija | Opis |
|
||||
| ------------------------------------- | -------------------------------------- |
|
||||
| <nobr><code>{"--event"}</code></nobr> | GitHub mock event za pokretanje agenta |
|
||||
| <nobr><code>{"--token"}</code></nobr> | GitHub Personal Access Token |
|
||||
|
||||
---
|
||||
|
||||
@@ -293,10 +297,10 @@ opencode models anthropic
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Opis |
|
||||
| ----------- | ------------------------------------------------------------------------ |
|
||||
| `--refresh` | Osvježite keš modela sa models.dev |
|
||||
| `--verbose` | Koristite detaljniji izlaz modela (uključuje metapodatke poput troškova) |
|
||||
| Opcija | Opis |
|
||||
| --------------------------------------- | ------------------------------------------------------------------------ |
|
||||
| <nobr><code>{"--refresh"}</code></nobr> | Osvježite keš modela sa models.dev |
|
||||
| <nobr><code>{"--verbose"}</code></nobr> | Koristite detaljniji izlaz modela (uključuje metapodatke poput troškova) |
|
||||
|
||||
Koristite `--refresh` zastavicu da ažurirate keširanu listu modela. Ovo je korisno kada su novi modeli dodani provajderu i želite da ih vidite u OpenCode.
|
||||
|
||||
@@ -332,20 +336,25 @@ opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Kratko | Opis |
|
||||
| ------------ | ------ | ------------------------------------------------------------------------ |
|
||||
| `--command` | | Naredba za pokretanje, koristite poruku za argumente |
|
||||
| `--continue` | `-c` | Nastavite posljednju sesiju |
|
||||
| `--session` | `-s` | ID sesije za nastavak |
|
||||
| `--fork` | | Forkujte sesiju pri nastavku (koristiti sa `--continue` ili `--session`) |
|
||||
| `--share` | | Podijelite sesiju |
|
||||
| `--model` | `-m` | Model za korištenje u obliku provider/model |
|
||||
| `--agent` | | Agent za korištenje |
|
||||
| `--file` | `-f` | Fajlovi koje treba priložiti poruci |
|
||||
| `--format` | | Format: default (formatiran) ili json (sirovi JSON događaji) |
|
||||
| `--title` | | Naslov sesije (koristi skraćeni prompt ako nije navedena vrijednost) |
|
||||
| `--attach` | | Priključite na pokrenuti OpenCode server (npr. http://localhost:4096) |
|
||||
| `--port` | | Port za lokalni server (zadano na nasumični port) |
|
||||
| Opcija | Kratko | Opis |
|
||||
| ---------------------------------------- | ------ | --------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--command"}</code></nobr> | | Naredba za pokretanje, koristite poruku za argumente |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Nastavite posljednju sesiju |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | ID sesije za nastavak |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Forkujte sesiju pri nastavku (koristiti sa `--continue` ili `--session`) |
|
||||
| <nobr><code>{"--share"}</code></nobr> | | Podijelite sesiju |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Model za korištenje u obliku provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Agent za korištenje |
|
||||
| <nobr><code>{"--file"}</code></nobr> | `-f` | Fajlovi koje treba priložiti poruci |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Format: default (formatiran) ili json (sirovi JSON događaji) |
|
||||
| <nobr><code>{"--title"}</code></nobr> | | Naslov sesije (koristi skraćeni prompt ako nije navedena vrijednost) |
|
||||
| <nobr><code>{"--attach"}</code></nobr> | | Priključite na pokrenuti OpenCode server (npr. http://localhost:4096) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Lozinka za osnovnu autentifikaciju (zadano: `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Korisničko ime za osnovnu autentifikaciju (zadano: `OPENCODE_SERVER_USERNAME` ili `opencode`) |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Direktorij za pokretanje, ili putanja na udaljenom serveru pri spajanju |
|
||||
| <nobr><code>{"--variant"}</code></nobr> | | Varijanta modela (napor zaključivanja specifičan za provajdera) |
|
||||
| <nobr><code>{"--thinking"}</code></nobr> | | Prikaži blokove razmišljanja |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Port za lokalni server (zadano na nasumični port) |
|
||||
|
||||
---
|
||||
|
||||
@@ -361,12 +370,12 @@ Ovo pokreće HTTP server koji pruža API pristup funkcionalnosti OpenCode-a bez
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Opis |
|
||||
| ------------ | ----------------------------------------------------- |
|
||||
| `--port` | Port na kojem treba slušati |
|
||||
| `--hostname` | Hostname na kojem treba slušati |
|
||||
| `--mdns` | Omogući mDNS otkrivanje |
|
||||
| `--cors` | Dodatni origin(i) pretraživača koji dozvoljavaju CORS |
|
||||
| Opcija | Opis |
|
||||
| ---------------------------------------- | ----------------------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port na kojem treba slušati |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Hostname na kojem treba slušati |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Omogući mDNS otkrivanje |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Dodatni origin(i) pretraživača koji dozvoljavaju CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -390,10 +399,10 @@ opencode session list
|
||||
|
||||
##### Opcije
|
||||
|
||||
| Opcija | Kratko | Opis |
|
||||
| ------------- | ------ | -------------------------------------- |
|
||||
| `--max-count` | `-n` | Ograničenje na N najnovijih sesija |
|
||||
| `--format` | | Izlazni format: table ili json (table) |
|
||||
| Opcija | Kratko | Opis |
|
||||
| ----------------------------------------- | ------ | -------------------------------------- |
|
||||
| <nobr><code>{"--max-count"}</code></nobr> | `-n` | Ograničenje na N najnovijih sesija |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Izlazni format: table ili json (table) |
|
||||
|
||||
---
|
||||
|
||||
@@ -407,12 +416,12 @@ opencode stats
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Opis |
|
||||
| ----------- | ---------------------------------------------------------------------------------------------------------- |
|
||||
| `--days` | Prikaži statistiku za zadnjih N dana (sva vremena) |
|
||||
| `--tools` | Broj alata za prikaz (svi) |
|
||||
| `--models` | Prikaži raščlambu korištenja modela (skriveno prema zadanim postavkama). Proslijedite broj za prikaz top N |
|
||||
| `--project` | Filtriraj po projektu (svi projekti, prazan niz: trenutni projekt) |
|
||||
| Opcija | Opis |
|
||||
| --------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--days"}</code></nobr> | Prikaži statistiku za zadnjih N dana (sva vremena) |
|
||||
| <nobr><code>{"--tools"}</code></nobr> | Broj alata za prikaz (svi) |
|
||||
| <nobr><code>{"--models"}</code></nobr> | Prikaži raščlambu korištenja modela (skriveno prema zadanim postavkama). Proslijedite broj za prikaz top N |
|
||||
| <nobr><code>{"--project"}</code></nobr> | Filtriraj po projektu (svi projekti, prazan niz: trenutni projekt) |
|
||||
|
||||
---
|
||||
|
||||
@@ -457,12 +466,12 @@ Ovo pokreće HTTP server i otvara web pretraživač za pristup OpenCode-u preko
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Opis |
|
||||
| ------------ | ----------------------------------------------------- |
|
||||
| `--port` | Port na kojem treba slušati |
|
||||
| `--hostname` | Hostname na kojem treba slušati |
|
||||
| `--mdns` | Omogući mDNS otkrivanje |
|
||||
| `--cors` | Dodatni origin(i) pretraživača koji dozvoljavaju CORS |
|
||||
| Opcija | Opis |
|
||||
| ---------------------------------------- | ----------------------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port na kojem treba slušati |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Hostname na kojem treba slušati |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Omogući mDNS otkrivanje |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Dodatni origin(i) pretraživača koji dozvoljavaju CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -478,11 +487,11 @@ Ova naredba pokreće ACP server koji komunicira preko stdin/stdout koristeći nd
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Opis |
|
||||
| ------------ | --------------------------- |
|
||||
| `--cwd` | Radni direktorij |
|
||||
| `--port` | Port na kojem treba slušati |
|
||||
| `--hostname` | Hostname na kojem slušati |
|
||||
| Opcija | Opis |
|
||||
| ---------------------------------------- | --------------------------- |
|
||||
| <nobr><code>{"--cwd"}</code></nobr> | Radni direktorij |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port na kojem treba slušati |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Hostname na kojem slušati |
|
||||
|
||||
---
|
||||
|
||||
@@ -496,12 +505,12 @@ opencode uninstall
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Kratko | Opis |
|
||||
| --------------- | ------ | --------------------------------------------- |
|
||||
| `--keep-config` | `-c` | Sačuvajte konfiguracijske datoteke |
|
||||
| `--keep-data` | `-d` | Sačuvajte podatke i snimke sesije |
|
||||
| `--dry-run` | | Pokažite šta bi bilo uklonjeno bez uklanjanja |
|
||||
| `--force` | `-f` | Preskoči upite za potvrdu |
|
||||
| Opcija | Kratko | Opis |
|
||||
| ------------------------------------------- | ------ | --------------------------------------------- |
|
||||
| <nobr><code>{"--keep-config"}</code></nobr> | `-c` | Sačuvajte konfiguracijske datoteke |
|
||||
| <nobr><code>{"--keep-data"}</code></nobr> | `-d` | Sačuvajte podatke i snimke sesije |
|
||||
| <nobr><code>{"--dry-run"}</code></nobr> | | Pokažite šta bi bilo uklonjeno bez uklanjanja |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | Preskoči upite za potvrdu |
|
||||
|
||||
---
|
||||
|
||||
@@ -527,9 +536,9 @@ opencode upgrade v0.1.48
|
||||
|
||||
#### Opcije
|
||||
|
||||
| Opcija | Kratko | Opis |
|
||||
| ---------- | ------ | ------------------------------------------------------- |
|
||||
| `--method` | `-m` | Korišteni način instalacije; curl, npm, pnpm, bun, brew |
|
||||
| Opcija | Kratko | Opis |
|
||||
| -------------------------------------- | ------ | ------------------------------------------------------- |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | Korišteni način instalacije; curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
@@ -537,12 +546,12 @@ opencode upgrade v0.1.48
|
||||
|
||||
OpenCode CLI prihvata sljedeće globalne zastavice.
|
||||
|
||||
| Opcija | Kratko | Opis |
|
||||
| -------------- | ------ | ----------------------------------------- |
|
||||
| `--help` | `-h` | Prikaži pomoć |
|
||||
| `--version` | `-v` | Ispiši broj verzije |
|
||||
| `--print-logs` | | Ispis logova u stderr |
|
||||
| `--log-level` | | Nivo logovanja (DEBUG, INFO, WARN, ERROR) |
|
||||
| Opcija | Kratko | Opis |
|
||||
| ------------------------------------------ | ------ | ----------------------------------------- |
|
||||
| <nobr><code>{"--help"}</code></nobr> | `-h` | Prikaži pomoć |
|
||||
| <nobr><code>{"--version"}</code></nobr> | `-v` | Ispiši broj verzije |
|
||||
| <nobr><code>{"--print-logs"}</code></nobr> | | Ispis logova u stderr |
|
||||
| <nobr><code>{"--log-level"}</code></nobr> | | Nivo logovanja (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -29,16 +29,19 @@ opencode [project]
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Short | Description |
|
||||
| ------------ | ----- | ----------------------------------------------------------------------- |
|
||||
| `--continue` | `-c` | Continue the last session |
|
||||
| `--session` | `-s` | Session ID to continue |
|
||||
| `--fork` | | Fork the session when continuing (use with `--continue` or `--session`) |
|
||||
| `--prompt` | | Prompt to use |
|
||||
| `--model` | `-m` | Model to use in the form of provider/model |
|
||||
| `--agent` | | Agent to use |
|
||||
| `--port` | | Port to listen on |
|
||||
| `--hostname` | | Hostname to listen on |
|
||||
| Flag | Short | Description |
|
||||
| ------------------------------------------- | ----- | ----------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Continue the last session |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Session ID to continue |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Fork the session when continuing (use with `--continue` or `--session`) |
|
||||
| <nobr><code>{"--prompt"}</code></nobr> | | Prompt to use |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Model to use in the form of provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Agent to use |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Port to listen on |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | | Hostname to listen on |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | | Enable mDNS discovery |
|
||||
| <nobr><code>{"--mdns-domain"}</code></nobr> | | Custom mDNS domain name |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | | Additional browser origin(s) to allow CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -78,10 +81,14 @@ opencode attach http://10.20.30.40:4096
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Short | Description |
|
||||
| ----------- | ----- | --------------------------------- |
|
||||
| `--dir` | | Working directory to start TUI in |
|
||||
| `--session` | `-s` | Session ID to continue |
|
||||
| Flag | Short | Description |
|
||||
| ---------------------------------------- | ----- | -------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Working directory to start TUI in |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Continue the last session |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Session ID to continue |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Fork the session when continuing (use with `--continue` or `--session`) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Basic auth password (defaults to `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Basic auth username (defaults to `OPENCODE_SERVER_USERNAME` or `opencode`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -97,13 +104,13 @@ This command will guide you through creating a new agent with a custom system pr
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Description |
|
||||
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `--path` | Directory to write the agent file to (defaults to global or `.opencode/agent` based on the prompt) |
|
||||
| `--description` | What the agent should do |
|
||||
| `--mode` | Agent mode: `all`, `primary`, or `subagent` |
|
||||
| `--permissions` | Comma-separated list of permissions to allow (default: all). Available: `bash`, `read`, `edit`, `glob`, `grep`, `webfetch`, `task`, `todowrite`, `websearch`, `lsp`, `skill`. Anything omitted is denied. Alias: `--tools` |
|
||||
| `--model`, `-m` | Model to use, in `provider/model` format |
|
||||
| Flag | Short | Description |
|
||||
| ------------------------------------------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--path"}</code></nobr> | | Directory to write the agent file to (defaults to global or `.opencode/agent` based on the prompt) |
|
||||
| <nobr><code>{"--description"}</code></nobr> | | What the agent should do |
|
||||
| <nobr><code>{"--mode"}</code></nobr> | | Agent mode: `all`, `primary`, or `subagent` |
|
||||
| <nobr><code>{"--permissions"}</code></nobr> | | Comma-separated list of permissions to allow (default: all). Available: `bash`, `read`, `edit`, `glob`, `grep`, `webfetch`, `task`, `todowrite`, `websearch`, `lsp`, `skill`. Anything omitted is denied. Alias: `--tools` |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Model to use, in `provider/model` format |
|
||||
|
||||
Passing all of `--path`, `--description`, `--mode`, and `--permissions` runs the command non-interactively.
|
||||
|
||||
@@ -139,6 +146,13 @@ opencode auth login
|
||||
|
||||
When OpenCode starts up it loads the providers from the credentials file. And if there are any keys defined in your environments or a `.env` file in your project.
|
||||
|
||||
##### Flags
|
||||
|
||||
| Flag | Short | Description |
|
||||
| ---------------------------------------- | ----- | ---------------------------------------------------- |
|
||||
| <nobr><code>{"--provider"}</code></nobr> | `-p` | Provider ID or name to log in to |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | Login method label to use, skipping method selection |
|
||||
|
||||
---
|
||||
|
||||
#### list
|
||||
@@ -199,10 +213,10 @@ opencode github run
|
||||
|
||||
##### Flags
|
||||
|
||||
| Flag | Description |
|
||||
| --------- | -------------------------------------- |
|
||||
| `--event` | GitHub mock event to run the agent for |
|
||||
| `--token` | GitHub personal access token |
|
||||
| Flag | Description |
|
||||
| ------------------------------------- | -------------------------------------- |
|
||||
| <nobr><code>{"--event"}</code></nobr> | GitHub mock event to run the agent for |
|
||||
| <nobr><code>{"--token"}</code></nobr> | GitHub personal access token |
|
||||
|
||||
---
|
||||
|
||||
@@ -308,10 +322,10 @@ opencode models anthropic
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Description |
|
||||
| ----------- | ------------------------------------------------------------ |
|
||||
| `--refresh` | Refresh the models cache from models.dev |
|
||||
| `--verbose` | Use more verbose model output (includes metadata like costs) |
|
||||
| Flag | Description |
|
||||
| --------------------------------------- | ------------------------------------------------------------ |
|
||||
| <nobr><code>{"--refresh"}</code></nobr> | Refresh the models cache from models.dev |
|
||||
| <nobr><code>{"--verbose"}</code></nobr> | Use more verbose model output (includes metadata like costs) |
|
||||
|
||||
Use the `--refresh` flag to update the cached model list. This is useful when new models have been added to a provider and you want to see them in OpenCode.
|
||||
|
||||
@@ -347,21 +361,26 @@ opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Short | Description |
|
||||
| -------------------------------- | ----- | ----------------------------------------------------------------------- |
|
||||
| `--command` | | The command to run, use message for args |
|
||||
| `--continue` | `-c` | Continue the last session |
|
||||
| `--session` | `-s` | Session ID to continue |
|
||||
| `--fork` | | Fork the session when continuing (use with `--continue` or `--session`) |
|
||||
| `--share` | | Share the session |
|
||||
| `--model` | `-m` | Model to use in the form of provider/model |
|
||||
| `--agent` | | Agent to use |
|
||||
| `--file` | `-f` | File(s) to attach to message |
|
||||
| `--format` | | Format: default (formatted) or json (raw JSON events) |
|
||||
| `--title` | | Title for the session (uses truncated prompt if no value provided) |
|
||||
| `--attach` | | Attach to a running opencode server (e.g., http://localhost:4096) |
|
||||
| `--port` | | Port for the local server (defaults to random port) |
|
||||
| `--dangerously-skip-permissions` | | Auto-approve permissions that are not explicitly denied (dangerous!) |
|
||||
| Flag | Short | Description |
|
||||
| ------------------------------------------------------------ | ----- | -------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--command"}</code></nobr> | | The command to run, use message for args |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Continue the last session |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Session ID to continue |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Fork the session when continuing (use with `--continue` or `--session`) |
|
||||
| <nobr><code>{"--share"}</code></nobr> | | Share the session |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Model to use in the form of provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Agent to use |
|
||||
| <nobr><code>{"--file"}</code></nobr> | `-f` | File(s) to attach to message |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Format: default (formatted) or json (raw JSON events) |
|
||||
| <nobr><code>{"--title"}</code></nobr> | | Title for the session (uses truncated prompt if no value provided) |
|
||||
| <nobr><code>{"--attach"}</code></nobr> | | Attach to a running opencode server (e.g., http://localhost:4096) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Basic auth password (defaults to `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Basic auth username (defaults to `OPENCODE_SERVER_USERNAME` or `opencode`) |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Directory to run in, or path on the remote server when attaching |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Port for the local server (defaults to random port) |
|
||||
| <nobr><code>{"--variant"}</code></nobr> | | Model variant (provider-specific reasoning effort) |
|
||||
| <nobr><code>{"--thinking"}</code></nobr> | | Show thinking blocks |
|
||||
| <nobr><code>{"--dangerously-skip-permissions"}</code></nobr> | | Auto-approve permissions that are not explicitly denied (dangerous!) |
|
||||
|
||||
---
|
||||
|
||||
@@ -377,12 +396,13 @@ This starts an HTTP server that provides API access to opencode functionality wi
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Description |
|
||||
| ------------ | ------------------------------------------ |
|
||||
| `--port` | Port to listen on |
|
||||
| `--hostname` | Hostname to listen on |
|
||||
| `--mdns` | Enable mDNS discovery |
|
||||
| `--cors` | Additional browser origin(s) to allow CORS |
|
||||
| Flag | Description |
|
||||
| ------------------------------------------- | ------------------------------------------ |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port to listen on |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Hostname to listen on |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Enable mDNS discovery |
|
||||
| <nobr><code>{"--mdns-domain"}</code></nobr> | Custom mDNS domain name |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Additional browser origin(s) to allow CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -406,10 +426,20 @@ opencode session list
|
||||
|
||||
##### Flags
|
||||
|
||||
| Flag | Short | Description |
|
||||
| ------------- | ----- | ------------------------------------ |
|
||||
| `--max-count` | `-n` | Limit to N most recent sessions |
|
||||
| `--format` | | Output format: table or json (table) |
|
||||
| Flag | Short | Description |
|
||||
| ----------------------------------------- | ----- | ------------------------------------ |
|
||||
| <nobr><code>{"--max-count"}</code></nobr> | `-n` | Limit to N most recent sessions |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Output format: table or json (table) |
|
||||
|
||||
---
|
||||
|
||||
#### delete
|
||||
|
||||
Delete an OpenCode session.
|
||||
|
||||
```bash
|
||||
opencode session delete <sessionID>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -423,12 +453,12 @@ opencode stats
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Description |
|
||||
| ----------- | --------------------------------------------------------------------------- |
|
||||
| `--days` | Show stats for the last N days (all time) |
|
||||
| `--tools` | Number of tools to show (all) |
|
||||
| `--models` | Show model usage breakdown (hidden by default). Pass a number to show top N |
|
||||
| `--project` | Filter by project (all projects, empty string: current project) |
|
||||
| Flag | Description |
|
||||
| --------------------------------------- | --------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--days"}</code></nobr> | Show stats for the last N days (all time) |
|
||||
| <nobr><code>{"--tools"}</code></nobr> | Number of tools to show (all) |
|
||||
| <nobr><code>{"--models"}</code></nobr> | Show model usage breakdown (hidden by default). Pass a number to show top N |
|
||||
| <nobr><code>{"--project"}</code></nobr> | Filter by project (all projects, empty string: current project) |
|
||||
|
||||
---
|
||||
|
||||
@@ -442,6 +472,12 @@ opencode export [sessionID]
|
||||
|
||||
If you don't provide a session ID, you'll be prompted to select from available sessions.
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Description |
|
||||
| ---------------------------------------- | ------------------------------------- |
|
||||
| <nobr><code>{"--sanitize"}</code></nobr> | Redact sensitive transcript/file data |
|
||||
|
||||
---
|
||||
|
||||
### import
|
||||
@@ -473,12 +509,13 @@ This starts an HTTP server and opens a web browser to access OpenCode through a
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Description |
|
||||
| ------------ | ------------------------------------------ |
|
||||
| `--port` | Port to listen on |
|
||||
| `--hostname` | Hostname to listen on |
|
||||
| `--mdns` | Enable mDNS discovery |
|
||||
| `--cors` | Additional browser origin(s) to allow CORS |
|
||||
| Flag | Description |
|
||||
| ------------------------------------------- | ------------------------------------------ |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port to listen on |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Hostname to listen on |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Enable mDNS discovery |
|
||||
| <nobr><code>{"--mdns-domain"}</code></nobr> | Custom mDNS domain name |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Additional browser origin(s) to allow CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -494,11 +531,83 @@ This command starts an ACP server that communicates via stdin/stdout using nd-JS
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Description |
|
||||
| ------------ | --------------------- |
|
||||
| `--cwd` | Working directory |
|
||||
| `--port` | Port to listen on |
|
||||
| `--hostname` | Hostname to listen on |
|
||||
| Flag | Description |
|
||||
| ------------------------------------------- | ------------------------------------------ |
|
||||
| <nobr><code>{"--cwd"}</code></nobr> | Working directory |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port to listen on |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Hostname to listen on |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Enable mDNS discovery |
|
||||
| <nobr><code>{"--mdns-domain"}</code></nobr> | Custom mDNS domain name |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Additional browser origin(s) to allow CORS |
|
||||
|
||||
---
|
||||
|
||||
### plugin
|
||||
|
||||
Install a plugin and update your config.
|
||||
|
||||
```bash
|
||||
opencode plugin <module>
|
||||
```
|
||||
|
||||
Or use the alias.
|
||||
|
||||
```bash
|
||||
opencode plug <module>
|
||||
```
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Short | Description |
|
||||
| -------------------------------------- | ----- | ------------------------------- |
|
||||
| <nobr><code>{"--global"}</code></nobr> | `-g` | Install in global config |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | Replace existing plugin version |
|
||||
|
||||
---
|
||||
|
||||
### pr
|
||||
|
||||
Fetch and checkout a GitHub PR branch, then run OpenCode.
|
||||
|
||||
```bash
|
||||
opencode pr <number>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### db
|
||||
|
||||
Database tools.
|
||||
|
||||
```bash
|
||||
opencode db [query]
|
||||
```
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Description |
|
||||
| -------------------------------------- | ------------------------------ |
|
||||
| <nobr><code>{"--format"}</code></nobr> | Output format: `json` or `tsv` |
|
||||
|
||||
---
|
||||
|
||||
#### path
|
||||
|
||||
Print the database path.
|
||||
|
||||
```bash
|
||||
opencode db path
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### debug
|
||||
|
||||
Debugging and troubleshooting tools.
|
||||
|
||||
```bash
|
||||
opencode debug [command]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -512,12 +621,12 @@ opencode uninstall
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Short | Description |
|
||||
| --------------- | ----- | ------------------------------------------- |
|
||||
| `--keep-config` | `-c` | Keep configuration files |
|
||||
| `--keep-data` | `-d` | Keep session data and snapshots |
|
||||
| `--dry-run` | | Show what would be removed without removing |
|
||||
| `--force` | `-f` | Skip confirmation prompts |
|
||||
| Flag | Short | Description |
|
||||
| ------------------------------------------- | ----- | ------------------------------------------- |
|
||||
| <nobr><code>{"--keep-config"}</code></nobr> | `-c` | Keep configuration files |
|
||||
| <nobr><code>{"--keep-data"}</code></nobr> | `-d` | Keep session data and snapshots |
|
||||
| <nobr><code>{"--dry-run"}</code></nobr> | | Show what would be removed without removing |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | Skip confirmation prompts |
|
||||
|
||||
---
|
||||
|
||||
@@ -543,9 +652,9 @@ opencode upgrade v0.1.48
|
||||
|
||||
#### Flags
|
||||
|
||||
| Flag | Short | Description |
|
||||
| ---------- | ----- | ----------------------------------------------------------------- |
|
||||
| `--method` | `-m` | The installation method that was used; curl, npm, pnpm, bun, brew |
|
||||
| Flag | Short | Description |
|
||||
| -------------------------------------- | ----- | ----------------------------------------------------------------- |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | The installation method that was used; curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
@@ -553,12 +662,13 @@ opencode upgrade v0.1.48
|
||||
|
||||
The opencode CLI takes the following global flags.
|
||||
|
||||
| Flag | Short | Description |
|
||||
| -------------- | ----- | ------------------------------------ |
|
||||
| `--help` | `-h` | Display help |
|
||||
| `--version` | `-v` | Print version number |
|
||||
| `--print-logs` | | Print logs to stderr |
|
||||
| `--log-level` | | Log level (DEBUG, INFO, WARN, ERROR) |
|
||||
| Flag | Short | Description |
|
||||
| ------------------------------------------ | ----- | ------------------------------------ |
|
||||
| <nobr><code>{"--help"}</code></nobr> | `-h` | Display help |
|
||||
| <nobr><code>{"--version"}</code></nobr> | `-v` | Print version number |
|
||||
| <nobr><code>{"--print-logs"}</code></nobr> | | Print logs to stderr |
|
||||
| <nobr><code>{"--log-level"}</code></nobr> | | Log level (DEBUG, INFO, WARN, ERROR) |
|
||||
| <nobr><code>{"--pure"}</code></nobr> | | Run without external plugins |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -29,16 +29,16 @@ opencode [project]
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| ------------ | ---- | ---------------------------------------------------------------------------- |
|
||||
| `--continue` | `-c` | Fortsæt sidste session |
|
||||
| `--session` | `-s` | Sessions-id for at fortsætte |
|
||||
| `--fork` | | Forgren sessionen ved fortsættelse (brug med `--continue` eller `--session`) |
|
||||
| `--prompt` | | Spørg om at bruge |
|
||||
| `--model` | `-m` | Model til brug i form af provider/model |
|
||||
| `--agent` | | Agent hos bruge |
|
||||
| `--port` | | Port at lytte på |
|
||||
| `--hostname` | | Værtsnavn at lytte på |
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| ---------------------------------------- | ---- | ---------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Fortsæt sidste session |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Sessions-id for at fortsætte |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Forgren sessionen ved fortsættelse (brug med `--continue` eller `--session`) |
|
||||
| <nobr><code>{"--prompt"}</code></nobr> | | Spørg om at bruge |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Model til brug i form af provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Agent hos bruge |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Port at lytte på |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | | Værtsnavn at lytte på |
|
||||
|
||||
---
|
||||
|
||||
@@ -78,10 +78,14 @@ opencode attach http://10.20.30.40:4096
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| ----------- | ---- | -------------------------------- |
|
||||
| `--dir` | | Arbejdsmappe til at starte TUI i |
|
||||
| `--session` | `-s` | Sessions-id for at fortsætte |
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| ---------------------------------------- | ---- | --------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Arbejdsmappe til at starte TUI i |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Fortsæt den seneste session |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Sessions-id for at fortsætte |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Forgren sessionen ved fortsættelse (brug med `--continue` eller `--session`) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Adgangskode til basic auth (standard: `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Brugernavn til basic auth (standard: `OPENCODE_SERVER_USERNAME` eller `opencode`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -187,10 +191,10 @@ opencode github run
|
||||
|
||||
##### Flag
|
||||
|
||||
| Flag | Beskrivelse |
|
||||
| --------- | ---------------------------------------------- |
|
||||
| `--event` | GitHub mock begivenhed for at køre agenten for |
|
||||
| `--token` | GitHub personlig adgangstoken |
|
||||
| Flag | Beskrivelse |
|
||||
| ------------------------------------- | ---------------------------------------------- |
|
||||
| <nobr><code>{"--event"}</code></nobr> | GitHub mock begivenhed for at køre agenten for |
|
||||
| <nobr><code>{"--token"}</code></nobr> | GitHub personlig adgangstoken |
|
||||
|
||||
---
|
||||
|
||||
@@ -296,10 +300,10 @@ opencode models anthropic
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Beskrivelse |
|
||||
| ----------- | ----------------------------------------------------------------------- |
|
||||
| `--refresh` | Opdater modelcachen fra models.dev |
|
||||
| `--verbose` | Brug mere detaljeret modeloutput (inkluderer metadata som omkostninger) |
|
||||
| Flag | Beskrivelse |
|
||||
| --------------------------------------- | ----------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--refresh"}</code></nobr> | Opdater modelcachen fra models.dev |
|
||||
| <nobr><code>{"--verbose"}</code></nobr> | Brug mere detaljeret modeloutput (inkluderer metadata som omkostninger) |
|
||||
|
||||
Brug flaget `--refresh` til at opdatere den cachelagrede modelliste. Dette er nyttigt, når nye modeller er blevet tilføjet til en udbyder, og du vil se dem i OpenCode.
|
||||
|
||||
@@ -335,20 +339,25 @@ opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| ------------ | ---- | ----------------------------------------------------------------------------------- |
|
||||
| `--command` | | Kommandoen til at køre, brug besked til args |
|
||||
| `--continue` | `-c` | Fortsæt sidste session |
|
||||
| `--session` | `-s` | Sessions-id for at fortsætte |
|
||||
| `--fork` | | Forgren sessionen ved fortsættelse (brug med `--continue` eller `--session`) |
|
||||
| `--share` | | Del sessionen |
|
||||
| `--model` | `-m` | Model til brug i form af provider/model |
|
||||
| `--agent` | | Agent til brug |
|
||||
| `--file` | `-f` | Fil(er), der skal vedhæftes til meddelelsen |
|
||||
| `--format` | | Format: standard (formateret) eller json (rå JSON hændelser) |
|
||||
| `--title` | | Titel for sessionen (bruger trunkeret prompt, hvis der ikke er angivet nogen værdi) |
|
||||
| `--attach` | | Tilslut til en kørende opencode-server (f.eks. http://localhost:4096) |
|
||||
| `--port` | | Port til den lokale server (standard til vilkårlig port) |
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| ---------------------------------------- | ---- | ----------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--command"}</code></nobr> | | Kommandoen til at køre, brug besked til args |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Fortsæt sidste session |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Sessions-id for at fortsætte |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Forgren sessionen ved fortsættelse (brug med `--continue` eller `--session`) |
|
||||
| <nobr><code>{"--share"}</code></nobr> | | Del sessionen |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Model til brug i form af provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Agent til brug |
|
||||
| <nobr><code>{"--file"}</code></nobr> | `-f` | Fil(er), der skal vedhæftes til meddelelsen |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Format: standard (formateret) eller json (rå JSON hændelser) |
|
||||
| <nobr><code>{"--title"}</code></nobr> | | Titel for sessionen (bruger trunkeret prompt, hvis der ikke er angivet nogen værdi) |
|
||||
| <nobr><code>{"--attach"}</code></nobr> | | Tilslut til en kørende opencode-server (f.eks. http://localhost:4096) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Adgangskode til basic auth (standard: `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Brugernavn til basic auth (standard: `OPENCODE_SERVER_USERNAME` eller `opencode`) |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Mappe at køre i, eller sti på fjernserveren ved tilkobling |
|
||||
| <nobr><code>{"--variant"}</code></nobr> | | Modelvariant (udbyder-specifik ræsonneringsindsats) |
|
||||
| <nobr><code>{"--thinking"}</code></nobr> | | Vis tænkeblokke |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Port til den lokale server (standard til vilkårlig port) |
|
||||
|
||||
---
|
||||
|
||||
@@ -364,12 +373,12 @@ Dette starter en HTTP-server, der giver API-adgang til opencode-funktionalitet u
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Beskrivelse |
|
||||
| ------------ | ------------------------------------------------ |
|
||||
| `--port` | Port at lytte på |
|
||||
| `--hostname` | Værtsnavn at lytte på |
|
||||
| `--mdns` | Aktiver mDNS-opdagelse |
|
||||
| `--cors` | Yderligere browseroprindelse til at tillade CORS |
|
||||
| Flag | Beskrivelse |
|
||||
| ---------------------------------------- | ------------------------------------------------ |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port at lytte på |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Værtsnavn at lytte på |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Aktiver mDNS-opdagelse |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Yderligere browseroprindelse til at tillade CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -393,10 +402,10 @@ opencode session list
|
||||
|
||||
##### Flag
|
||||
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| ------------- | ---- | -------------------------------------- |
|
||||
| `--max-count` | `-n` | Begræns til N seneste sessioner |
|
||||
| `--format` | | Outputformat: tabel eller json (tabel) |
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| ----------------------------------------- | ---- | -------------------------------------- |
|
||||
| <nobr><code>{"--max-count"}</code></nobr> | `-n` | Begræns til N seneste sessioner |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Outputformat: tabel eller json (tabel) |
|
||||
|
||||
---
|
||||
|
||||
@@ -410,12 +419,12 @@ opencode stats
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Beskrivelse |
|
||||
| ----------- | --------------------------------------------------------------------------- |
|
||||
| `--days` | Vis statistik for de sidste N dage (hele tiden) |
|
||||
| `--tools` | Antal værktøjer, der skal vises (alle) |
|
||||
| `--models` | Vis modelbrugsopdeling (skjult som standard). Send et tal for at vise top N |
|
||||
| `--project` | Filtre efter projekt (alle projekter, tom streng: nuværende projekt) |
|
||||
| Flag | Beskrivelse |
|
||||
| --------------------------------------- | --------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--days"}</code></nobr> | Vis statistik for de sidste N dage (hele tiden) |
|
||||
| <nobr><code>{"--tools"}</code></nobr> | Antal værktøjer, der skal vises (alle) |
|
||||
| <nobr><code>{"--models"}</code></nobr> | Vis modelbrugsopdeling (skjult som standard). Send et tal for at vise top N |
|
||||
| <nobr><code>{"--project"}</code></nobr> | Filtre efter projekt (alle projekter, tom streng: nuværende projekt) |
|
||||
|
||||
---
|
||||
|
||||
@@ -460,12 +469,12 @@ Dette starter en HTTP-server og åbner en webbrowser for at få adgang til OpenC
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Beskrivelse |
|
||||
| ------------ | ------------------------------------------------ |
|
||||
| `--port` | Port at lytte på |
|
||||
| `--hostname` | Værtsnavn at lytte på |
|
||||
| `--mdns` | Aktiver mDNS-opdagelse |
|
||||
| `--cors` | Yderligere browseroprindelse til at tillade CORS |
|
||||
| Flag | Beskrivelse |
|
||||
| ---------------------------------------- | ------------------------------------------------ |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port at lytte på |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Værtsnavn at lytte på |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Aktiver mDNS-opdagelse |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Yderligere browseroprindelse til at tillade CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -481,11 +490,11 @@ Denne kommando starter en ACP-server, der kommunikerer via stdin/stdout ved hjæ
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Beskrivelse |
|
||||
| ------------ | --------------------- |
|
||||
| `--cwd` | Arbejdsmappe |
|
||||
| `--port` | Port at lytte på |
|
||||
| `--hostname` | Værtsnavn at lytte på |
|
||||
| Flag | Beskrivelse |
|
||||
| ---------------------------------------- | --------------------- |
|
||||
| <nobr><code>{"--cwd"}</code></nobr> | Arbejdsmappe |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port at lytte på |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Værtsnavn at lytte på |
|
||||
|
||||
---
|
||||
|
||||
@@ -499,12 +508,12 @@ opencode uninstall
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| --------------- | ---- | ------------------------------------------------ |
|
||||
| `--keep-config` | `-c` | Se konfigurationsfiler |
|
||||
| `--keep-data` | `-d` | Gem sessionsdata og snapshots |
|
||||
| `--dry-run` | | Vis, hvad der ville blive fjernet uden at fjerne |
|
||||
| `--force` | `-f` | Spring bekræftelsesspørgsmål over |
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| ------------------------------------------- | ---- | ------------------------------------------------ |
|
||||
| <nobr><code>{"--keep-config"}</code></nobr> | `-c` | Se konfigurationsfiler |
|
||||
| <nobr><code>{"--keep-data"}</code></nobr> | `-d` | Gem sessionsdata og snapshots |
|
||||
| <nobr><code>{"--dry-run"}</code></nobr> | | Vis, hvad der ville blive fjernet uden at fjerne |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | Spring bekræftelsesspørgsmål over |
|
||||
|
||||
---
|
||||
|
||||
@@ -530,9 +539,9 @@ opencode upgrade v0.1.48
|
||||
|
||||
#### upgrade
|
||||
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| ---------- | ---- | ---------------------------------------------------------------- |
|
||||
| `--method` | `-m` | Installationsmetoden, der blev brugt; curl, npm, pnpm, bun, brew |
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| -------------------------------------- | ---- | ---------------------------------------------------------------- |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | Installationsmetoden, der blev brugt; curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
@@ -540,12 +549,12 @@ opencode upgrade v0.1.48
|
||||
|
||||
opencode CLI tager følgende globale flag.
|
||||
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| -------------- | ---- | ------------------------------------ |
|
||||
| `--help` | `-h` | Vis hjælp |
|
||||
| `--version` | `-v` | Udskriftsversionsnummer |
|
||||
| `--print-logs` | | Udskriv logfiler til stderr |
|
||||
| `--log-level` | | Logniveau (DEBUG, INFO, WARN, ERROR) |
|
||||
| Flag | Kort | Beskrivelse |
|
||||
| ------------------------------------------ | ---- | ------------------------------------ |
|
||||
| <nobr><code>{"--help"}</code></nobr> | `-h` | Vis hjælp |
|
||||
| <nobr><code>{"--version"}</code></nobr> | `-v` | Udskriftsversionsnummer |
|
||||
| <nobr><code>{"--print-logs"}</code></nobr> | | Udskriv logfiler til stderr |
|
||||
| <nobr><code>{"--log-level"}</code></nobr> | | Logniveau (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -29,16 +29,16 @@ opencode [project]
|
||||
|
||||
#### Optionen
|
||||
|
||||
| Flag | Kurz | Beschreibung |
|
||||
| ------------ | ---- | ---------------------------------------------------------------------- |
|
||||
| `--continue` | `-c` | Setzen Sie die letzte Sitzung fort |
|
||||
| `--session` | `-s` | Session-ID zum Fortfahren |
|
||||
| `--fork` | | Sitzung beim Fortsetzen verzweigen (mit `--continue` oder `--session`) |
|
||||
| `--prompt` | | Prompt zur Verwendung |
|
||||
| `--model` | `-m` | Zu verwendendes Modell in der Form provider/model |
|
||||
| `--agent` | | Zu verwendender Agent |
|
||||
| `--port` | | Port zum Abhören |
|
||||
| `--hostname` | | Hostname zum Abhören |
|
||||
| Flag | Kurz | Beschreibung |
|
||||
| ---------------------------------------- | ---- | ---------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Setzen Sie die letzte Sitzung fort |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Session-ID zum Fortfahren |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Sitzung beim Fortsetzen verzweigen (mit `--continue` oder `--session`) |
|
||||
| <nobr><code>{"--prompt"}</code></nobr> | | Prompt zur Verwendung |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Zu verwendendes Modell in der Form provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Zu verwendender Agent |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Port zum Abhören |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | | Hostname zum Abhören |
|
||||
|
||||
---
|
||||
|
||||
@@ -78,10 +78,14 @@ opencode attach http://10.20.30.40:4096
|
||||
|
||||
#### Optionen
|
||||
|
||||
| Flag | Kurz | Beschreibung |
|
||||
| ----------- | ---- | ----------------------------------------- |
|
||||
| `--dir` | | Arbeitsverzeichnis zum Starten von TUI in |
|
||||
| `--session` | `-s` | Session-ID zum Fortfahren |
|
||||
| Flag | Kurz | Beschreibung |
|
||||
| ---------------------------------------- | ---- | ---------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Arbeitsverzeichnis zum Starten von TUI in |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Letzte Sitzung fortsetzen |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Session-ID zum Fortfahren |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Sitzung beim Fortsetzen abzweigen (mit `--continue` oder `--session` verwenden) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Basic-Auth-Passwort (standardmäßig `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Basic-Auth-Benutzername (standardmäßig `OPENCODE_SERVER_USERNAME` oder `opencode`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -187,10 +191,10 @@ opencode github run
|
||||
|
||||
##### Optionen
|
||||
|
||||
| Flag | Beschreibung |
|
||||
| --------- | --------------------------------------------------- |
|
||||
| `--event` | GitHub Scheinereignis zum Ausführen des Agenten für |
|
||||
| `--token` | GitHub persönliches Zugriffstoken |
|
||||
| Flag | Beschreibung |
|
||||
| ------------------------------------- | --------------------------------------------------- |
|
||||
| <nobr><code>{"--event"}</code></nobr> | GitHub Scheinereignis zum Ausführen des Agenten für |
|
||||
| <nobr><code>{"--token"}</code></nobr> | GitHub persönliches Zugriffstoken |
|
||||
|
||||
---
|
||||
|
||||
@@ -296,10 +300,10 @@ opencode models anthropic
|
||||
|
||||
#### Optionen
|
||||
|
||||
| Flag | Beschreibung |
|
||||
| ----------- | ------------------------------------------------------------------------------------- |
|
||||
| `--refresh` | Aktualisieren Sie den Modellcache von models.dev |
|
||||
| `--verbose` | Verwenden Sie eine ausführlichere Modellausgabe (einschließlich Metadaten wie Kosten) |
|
||||
| Flag | Beschreibung |
|
||||
| --------------------------------------- | ------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--refresh"}</code></nobr> | Aktualisieren Sie den Modellcache von models.dev |
|
||||
| <nobr><code>{"--verbose"}</code></nobr> | Verwenden Sie eine ausführlichere Modellausgabe (einschließlich Metadaten wie Kosten) |
|
||||
|
||||
Verwenden Sie das Flag `--refresh`, um die zwischengespeicherte Modellliste zu aktualisieren. Dies ist nützlich, wenn einem Anbieter neue Modelle hinzugefügt wurden und Sie diese in OpenCode sehen möchten.
|
||||
|
||||
@@ -335,20 +339,25 @@ opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
|
||||
#### Optionen
|
||||
|
||||
| Flag | Kurz | Beschreibung |
|
||||
| ------------ | ---- | --------------------------------------------------------------------------------------------------- |
|
||||
| `--command` | | Der auszuführende Befehl, Argumente als Nachricht verwenden |
|
||||
| `--continue` | `-c` | Setzen Sie die letzte Sitzung fort |
|
||||
| `--session` | `-s` | Session-ID zum Fortfahren |
|
||||
| `--fork` | | Sitzung beim Fortsetzen verzweigen (mit `--continue` oder `--session` verwenden) |
|
||||
| `--share` | | Teilen Sie die Sitzung |
|
||||
| `--model` | `-m` | Zu verwendendes Modell in der Form provider/model |
|
||||
| `--agent` | | Zu verwendender Agent |
|
||||
| `--file` | `-f` | Datei(en) zum Anhängen an die Nachricht |
|
||||
| `--format` | | Format: default (formatiert) oder json (rohe JSON-Ereignisse) |
|
||||
| `--title` | | Titel für die Sitzung (verwendet eine verkürzte Eingabeaufforderung, wenn kein Wert angegeben wird) |
|
||||
| `--attach` | | An einen laufenden OpenCode-Server anschließen (z.B. http://localhost:4096) |
|
||||
| `--port` | | Port für den lokalen Server (standardmäßig zufälliger Port) |
|
||||
| Flag | Kurz | Beschreibung |
|
||||
| ---------------------------------------- | ---- | --------------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--command"}</code></nobr> | | Der auszuführende Befehl, Argumente als Nachricht verwenden |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Setzen Sie die letzte Sitzung fort |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Session-ID zum Fortfahren |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Sitzung beim Fortsetzen verzweigen (mit `--continue` oder `--session` verwenden) |
|
||||
| <nobr><code>{"--share"}</code></nobr> | | Teilen Sie die Sitzung |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Zu verwendendes Modell in der Form provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Zu verwendender Agent |
|
||||
| <nobr><code>{"--file"}</code></nobr> | `-f` | Datei(en) zum Anhängen an die Nachricht |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Format: default (formatiert) oder json (rohe JSON-Ereignisse) |
|
||||
| <nobr><code>{"--title"}</code></nobr> | | Titel für die Sitzung (verwendet eine verkürzte Eingabeaufforderung, wenn kein Wert angegeben wird) |
|
||||
| <nobr><code>{"--attach"}</code></nobr> | | An einen laufenden OpenCode-Server anschließen (z.B. http://localhost:4096) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Basic-Auth-Passwort (standardmäßig `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Basic-Auth-Benutzername (standardmäßig `OPENCODE_SERVER_USERNAME` oder `opencode`) |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Verzeichnis für die Ausführung, oder Pfad auf dem Remote-Server beim Anhängen |
|
||||
| <nobr><code>{"--variant"}</code></nobr> | | Modellvariante (anbieterspezifischer Reasoning-Aufwand) |
|
||||
| <nobr><code>{"--thinking"}</code></nobr> | | Denkblöcke anzeigen |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Port für den lokalen Server (standardmäßig zufälliger Port) |
|
||||
|
||||
---
|
||||
|
||||
@@ -364,12 +373,12 @@ Dadurch wird ein HTTP-Server gestartet, der API-Zugriff auf OpenCode-Funktionali
|
||||
|
||||
#### Optionen
|
||||
|
||||
| Flag | Beschreibung |
|
||||
| ------------ | ----------------------------------------------- |
|
||||
| `--port` | Port zum Abhören |
|
||||
| `--hostname` | Hostname zum Abhören |
|
||||
| `--mdns` | mDNS-Discovery aktivieren |
|
||||
| `--cors` | Zusätzliche Browser-Ursprünge für CORS zulassen |
|
||||
| Flag | Beschreibung |
|
||||
| ---------------------------------------- | ----------------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port zum Abhören |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Hostname zum Abhören |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | mDNS-Discovery aktivieren |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Zusätzliche Browser-Ursprünge für CORS zulassen |
|
||||
|
||||
---
|
||||
|
||||
@@ -393,10 +402,10 @@ opencode session list
|
||||
|
||||
##### Optionen
|
||||
|
||||
| Flag | Kurz | Beschreibung |
|
||||
| ------------- | ---- | ---------------------------------------- |
|
||||
| `--max-count` | `-n` | Beschränken auf die N neuesten Sitzungen |
|
||||
| `--format` | | Ausgabeformat: table oder json (table) |
|
||||
| Flag | Kurz | Beschreibung |
|
||||
| ----------------------------------------- | ---- | ---------------------------------------- |
|
||||
| <nobr><code>{"--max-count"}</code></nobr> | `-n` | Beschränken auf die N neuesten Sitzungen |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Ausgabeformat: table oder json (table) |
|
||||
|
||||
---
|
||||
|
||||
@@ -410,12 +419,12 @@ opencode stats
|
||||
|
||||
#### Optionen
|
||||
|
||||
| Flag | Beschreibung |
|
||||
| ----------- | ------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `--days` | Statistiken für die letzten N Tage anzeigen (alle Zeiten) |
|
||||
| `--tools` | Anzahl der angebotenen Werkzeuge (alle) |
|
||||
| `--models` | Aufschlüsselung der Modellnutzung anzeigen (standardmäßig ausgeblendet). Übergeben Sie eine Zahl, um die obersten N anzuzeigen |
|
||||
| `--project` | Nach Projekt filtern (alle Projekte, leere Zeichenfolge: aktuelles Projekt) |
|
||||
| Flag | Beschreibung |
|
||||
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| <nobr><code>{"--days"}</code></nobr> | Statistiken für die letzten N Tage anzeigen (alle Zeiten) |
|
||||
| <nobr><code>{"--tools"}</code></nobr> | Anzahl der angebotenen Werkzeuge (alle) |
|
||||
| <nobr><code>{"--models"}</code></nobr> | Aufschlüsselung der Modellnutzung anzeigen (standardmäßig ausgeblendet). Übergeben Sie eine Zahl, um die obersten N anzuzeigen |
|
||||
| <nobr><code>{"--project"}</code></nobr> | Nach Projekt filtern (alle Projekte, leere Zeichenfolge: aktuelles Projekt) |
|
||||
|
||||
---
|
||||
|
||||
@@ -460,12 +469,12 @@ Dadurch wird ein HTTP-Server gestartet und ein Webbrowser geöffnet, um über ei
|
||||
|
||||
#### Optionen
|
||||
|
||||
| Flag | Beschreibung |
|
||||
| ------------ | ----------------------------------------------- |
|
||||
| `--port` | Port zum Abhören |
|
||||
| `--hostname` | Hostname zum Abhören |
|
||||
| `--mdns` | mDNS-Discovery aktivieren |
|
||||
| `--cors` | Zusätzliche Browser-Ursprünge für CORS zulassen |
|
||||
| Flag | Beschreibung |
|
||||
| ---------------------------------------- | ----------------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port zum Abhören |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Hostname zum Abhören |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | mDNS-Discovery aktivieren |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Zusätzliche Browser-Ursprünge für CORS zulassen |
|
||||
|
||||
---
|
||||
|
||||
@@ -481,11 +490,11 @@ Dieser Befehl startet einen ACP-Server, der über stdin/stdout unter Verwendung
|
||||
|
||||
#### Optionen
|
||||
|
||||
| Flag | Beschreibung |
|
||||
| ------------ | -------------------- |
|
||||
| `--cwd` | Arbeitsverzeichnis |
|
||||
| `--port` | Port zum Abhören |
|
||||
| `--hostname` | Hostname zum Abhören |
|
||||
| Flag | Beschreibung |
|
||||
| ---------------------------------------- | -------------------- |
|
||||
| <nobr><code>{"--cwd"}</code></nobr> | Arbeitsverzeichnis |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port zum Abhören |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Hostname zum Abhören |
|
||||
|
||||
---
|
||||
|
||||
@@ -499,12 +508,12 @@ opencode uninstall
|
||||
|
||||
#### Optionen
|
||||
|
||||
| Flag | Kurz | Beschreibung |
|
||||
| --------------- | ---- | --------------------------------------------------- |
|
||||
| `--keep-config` | `-c` | Konfigurationsdateien behalten |
|
||||
| `--keep-data` | `-d` | Sitzungsdaten und Snapshots aufbewahren |
|
||||
| `--dry-run` | | Zeigt, was entfernt werden würde, ohne zu entfernen |
|
||||
| `--force` | `-f` | Bestätigungsaufforderungen überspringen |
|
||||
| Flag | Kurz | Beschreibung |
|
||||
| ------------------------------------------- | ---- | --------------------------------------------------- |
|
||||
| <nobr><code>{"--keep-config"}</code></nobr> | `-c` | Konfigurationsdateien behalten |
|
||||
| <nobr><code>{"--keep-data"}</code></nobr> | `-d` | Sitzungsdaten und Snapshots aufbewahren |
|
||||
| <nobr><code>{"--dry-run"}</code></nobr> | | Zeigt, was entfernt werden würde, ohne zu entfernen |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | Bestätigungsaufforderungen überspringen |
|
||||
|
||||
---
|
||||
|
||||
@@ -530,9 +539,9 @@ opencode upgrade v0.1.48
|
||||
|
||||
#### Optionen
|
||||
|
||||
| Flag | Kurz | Beschreibung |
|
||||
| ---------- | ---- | ------------------------------------------------------------------- |
|
||||
| `--method` | `-m` | Die zu verwendende Installationsmethode; curl, npm, pnpm, bun, brew |
|
||||
| Flag | Kurz | Beschreibung |
|
||||
| -------------------------------------- | ---- | ------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | Die zu verwendende Installationsmethode; curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
@@ -540,12 +549,12 @@ opencode upgrade v0.1.48
|
||||
|
||||
Der OpenCode CLI akzeptiert die folgenden globalen Flags.
|
||||
|
||||
| Flag | Kurz | Beschreibung |
|
||||
| -------------- | ---- | ----------------------------------------- |
|
||||
| `--help` | `-h` | Hilfe anzeigen |
|
||||
| `--version` | `-v` | Versionsnummer drucken |
|
||||
| `--print-logs` | | Protokolle nach stderr drucken |
|
||||
| `--log-level` | | Protokollebene (DEBUG, INFO, WARN, ERROR) |
|
||||
| Flag | Kurz | Beschreibung |
|
||||
| ------------------------------------------ | ---- | ----------------------------------------- |
|
||||
| <nobr><code>{"--help"}</code></nobr> | `-h` | Hilfe anzeigen |
|
||||
| <nobr><code>{"--version"}</code></nobr> | `-v` | Versionsnummer drucken |
|
||||
| <nobr><code>{"--print-logs"}</code></nobr> | | Protokolle nach stderr drucken |
|
||||
| <nobr><code>{"--log-level"}</code></nobr> | | Protokollebene (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -29,16 +29,16 @@ opencode [project]
|
||||
|
||||
#### Opciones
|
||||
|
||||
| Opción | Corta | Descripción |
|
||||
| ------------ | ----- | --------------------------------------------------------------------- |
|
||||
| `--continue` | `-c` | Continuar la última sesión |
|
||||
| `--session` | `-s` | ID de sesión para continuar |
|
||||
| `--fork` | | Bifurcar la sesión al continuar (usar con `--continue` o `--session`) |
|
||||
| `--prompt` | | Aviso de uso |
|
||||
| `--model` | `-m` | Modelo a utilizar en forma de proveedor/modelo |
|
||||
| `--agent` | | Agente a utilizar |
|
||||
| `--port` | | Puerto para escuchar |
|
||||
| `--hostname` | | Nombre de host para escuchar |
|
||||
| Opción | Corta | Descripción |
|
||||
| ---------------------------------------- | ----- | --------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Continuar la última sesión |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | ID de sesión para continuar |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Bifurcar la sesión al continuar (usar con `--continue` o `--session`) |
|
||||
| <nobr><code>{"--prompt"}</code></nobr> | | Aviso de uso |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Modelo a utilizar en forma de proveedor/modelo |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Agente a utilizar |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Puerto para escuchar |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | | Nombre de host para escuchar |
|
||||
|
||||
---
|
||||
|
||||
@@ -78,10 +78,14 @@ opencode attach http://10.20.30.40:4096
|
||||
|
||||
#### Opciones
|
||||
|
||||
| Opción | Corta | Descripción |
|
||||
| ----------- | ----- | ----------------------------------------- |
|
||||
| `--dir` | | Directorio de trabajo para iniciar TUI en |
|
||||
| `--session` | `-s` | ID de sesión para continuar |
|
||||
| Opción | Corta | Descripción |
|
||||
| ---------------------------------------- | ----- | ----------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Directorio de trabajo para iniciar TUI en |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Continuar la última sesión |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | ID de sesión para continuar |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Bifurcar la sesión al continuar (usar con `--continue` o `--session`) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Contraseña de autenticación básica (predeterminada: `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Usuario de autenticación básica (predeterminado: `OPENCODE_SERVER_USERNAME` u `opencode`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -187,10 +191,10 @@ opencode github run
|
||||
|
||||
##### Opciones
|
||||
|
||||
| Opción | Descripción |
|
||||
| --------- | ---------------------------------------------- |
|
||||
| `--event` | GitHub evento simulado para ejecutar el agente |
|
||||
| `--token` | GitHub token de acceso personal |
|
||||
| Opción | Descripción |
|
||||
| ------------------------------------- | ---------------------------------------------- |
|
||||
| <nobr><code>{"--event"}</code></nobr> | GitHub evento simulado para ejecutar el agente |
|
||||
| <nobr><code>{"--token"}</code></nobr> | GitHub token de acceso personal |
|
||||
|
||||
---
|
||||
|
||||
@@ -296,10 +300,10 @@ opencode models anthropic
|
||||
|
||||
#### Opciones
|
||||
|
||||
| Opción | Descripción |
|
||||
| ----------- | --------------------------------------------------------------------------- |
|
||||
| `--refresh` | Actualizar la caché de modelos desde models.dev |
|
||||
| `--verbose` | Utilice una salida del modelo más detallada (incluye metadatos como costos) |
|
||||
| Opción | Descripción |
|
||||
| --------------------------------------- | --------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--refresh"}</code></nobr> | Actualizar la caché de modelos desde models.dev |
|
||||
| <nobr><code>{"--verbose"}</code></nobr> | Utilice una salida del modelo más detallada (incluye metadatos como costos) |
|
||||
|
||||
Utilice el indicador `--refresh` para actualizar la lista de modelos almacenados en caché. Esto es útil cuando se han agregado nuevos modelos a un proveedor y desea verlos en OpenCode.
|
||||
|
||||
@@ -335,20 +339,25 @@ opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
|
||||
#### Opciones
|
||||
|
||||
| Opción | Corta | Descripción |
|
||||
| ------------ | ----- | ----------------------------------------------------------------------------------- |
|
||||
| `--command` | | El comando a ejecutar, use mensaje para args |
|
||||
| `--continue` | `-c` | Continuar la última sesión |
|
||||
| `--session` | `-s` | ID de sesión para continuar |
|
||||
| `--fork` | | Bifurcar la sesión al continuar (usar con `--continue` o `--session`) |
|
||||
| `--share` | | Comparte la sesión |
|
||||
| `--model` | `-m` | Modelo a utilizar en forma de proveedor/modelo |
|
||||
| `--agent` | | Agente a utilizar |
|
||||
| `--file` | `-f` | Archivo(s) para adjuntar al mensaje |
|
||||
| `--format` | | Formato: predeterminado (formateado) o json (eventos JSON sin formato) |
|
||||
| `--title` | | Título de la sesión (utiliza un mensaje truncado si no se proporciona ningún valor) |
|
||||
| `--attach` | | Adjuntar a un servidor opencode en ejecución (por ejemplo, http://localhost:4096) |
|
||||
| `--port` | | Puerto para el servidor local (el puerto predeterminado es aleatorio) |
|
||||
| Opción | Corta | Descripción |
|
||||
| ---------------------------------------- | ----- | ----------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--command"}</code></nobr> | | El comando a ejecutar, use mensaje para args |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Continuar la última sesión |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | ID de sesión para continuar |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Bifurcar la sesión al continuar (usar con `--continue` o `--session`) |
|
||||
| <nobr><code>{"--share"}</code></nobr> | | Comparte la sesión |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Modelo a utilizar en forma de proveedor/modelo |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Agente a utilizar |
|
||||
| <nobr><code>{"--file"}</code></nobr> | `-f` | Archivo(s) para adjuntar al mensaje |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Formato: predeterminado (formateado) o json (eventos JSON sin formato) |
|
||||
| <nobr><code>{"--title"}</code></nobr> | | Título de la sesión (utiliza un mensaje truncado si no se proporciona ningún valor) |
|
||||
| <nobr><code>{"--attach"}</code></nobr> | | Adjuntar a un servidor opencode en ejecución (por ejemplo, http://localhost:4096) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Contraseña de autenticación básica (predeterminada: `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Usuario de autenticación básica (predeterminado: `OPENCODE_SERVER_USERNAME` u `opencode`) |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Directorio de ejecución, o ruta en el servidor remoto al adjuntar |
|
||||
| <nobr><code>{"--variant"}</code></nobr> | | Variante del modelo (esfuerzo de razonamiento específico del proveedor) |
|
||||
| <nobr><code>{"--thinking"}</code></nobr> | | Mostrar bloques de pensamiento |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Puerto para el servidor local (el puerto predeterminado es aleatorio) |
|
||||
|
||||
---
|
||||
|
||||
@@ -364,12 +373,12 @@ Esto inicia un servidor HTTP que proporciona acceso API a la funcionalidad openc
|
||||
|
||||
#### Opciones
|
||||
|
||||
| Opción | Descripción |
|
||||
| ------------ | ---------------------------------------------------- |
|
||||
| `--port` | Puerto para escuchar |
|
||||
| `--hostname` | Nombre de host para escuchar |
|
||||
| `--mdns` | Habilitar el descubrimiento de mDNS |
|
||||
| `--cors` | Orígenes de navegador adicionales para permitir CORS |
|
||||
| Opción | Descripción |
|
||||
| ---------------------------------------- | ---------------------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Puerto para escuchar |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Nombre de host para escuchar |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Habilitar el descubrimiento de mDNS |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Orígenes de navegador adicionales para permitir CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -393,10 +402,10 @@ opencode session list
|
||||
|
||||
##### Opciones
|
||||
|
||||
| Opción | Corta | Descripción |
|
||||
| ------------- | ----- | --------------------------------------- |
|
||||
| `--max-count` | `-n` | Limitar a N sesiones más recientes |
|
||||
| `--format` | | Formato de salida: tabla o json (tabla) |
|
||||
| Opción | Corta | Descripción |
|
||||
| ----------------------------------------- | ----- | --------------------------------------- |
|
||||
| <nobr><code>{"--max-count"}</code></nobr> | `-n` | Limitar a N sesiones más recientes |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Formato de salida: tabla o json (tabla) |
|
||||
|
||||
---
|
||||
|
||||
@@ -410,12 +419,12 @@ opencode stats
|
||||
|
||||
#### Opciones
|
||||
|
||||
| Opción | Descripción |
|
||||
| ----------- | ------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `--days` | Mostrar estadísticas de los últimos N días (todo el tiempo) |
|
||||
| `--tools` | Número de herramientas para mostrar (todas) |
|
||||
| `--models` | Mostrar el desglose del uso del modelo (oculto de forma predeterminada). Pase un número para mostrar la parte superior N |
|
||||
| `--project` | Filtrar por proyecto (todos los proyectos, cadena vacía: proyecto actual) |
|
||||
| Opción | Descripción |
|
||||
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
|
||||
| <nobr><code>{"--days"}</code></nobr> | Mostrar estadísticas de los últimos N días (todo el tiempo) |
|
||||
| <nobr><code>{"--tools"}</code></nobr> | Número de herramientas para mostrar (todas) |
|
||||
| <nobr><code>{"--models"}</code></nobr> | Mostrar el desglose del uso del modelo (oculto de forma predeterminada). Pase un número para mostrar la parte superior N |
|
||||
| <nobr><code>{"--project"}</code></nobr> | Filtrar por proyecto (todos los proyectos, cadena vacía: proyecto actual) |
|
||||
|
||||
---
|
||||
|
||||
@@ -460,12 +469,12 @@ Esto inicia un servidor HTTP y abre un navegador web para acceder a OpenCode a t
|
||||
|
||||
#### Opciones
|
||||
|
||||
| Opción | Descripción |
|
||||
| ------------ | ---------------------------------------------------- |
|
||||
| `--port` | Puerto para escuchar |
|
||||
| `--hostname` | Nombre de host para escuchar |
|
||||
| `--mdns` | Habilitar el descubrimiento de mDNS |
|
||||
| `--cors` | Orígenes de navegador adicionales para permitir CORS |
|
||||
| Opción | Descripción |
|
||||
| ---------------------------------------- | ---------------------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Puerto para escuchar |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Nombre de host para escuchar |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Habilitar el descubrimiento de mDNS |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Orígenes de navegador adicionales para permitir CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -481,11 +490,11 @@ Este comando inicia un servidor ACP que se comunica a través de stdin/stdout us
|
||||
|
||||
#### Opciones
|
||||
|
||||
| Opción | Descripción |
|
||||
| ------------ | ---------------------------- |
|
||||
| `--cwd` | Directorio de trabajo |
|
||||
| `--port` | Puerto para escuchar |
|
||||
| `--hostname` | Nombre de host para escuchar |
|
||||
| Opción | Descripción |
|
||||
| ---------------------------------------- | ---------------------------- |
|
||||
| <nobr><code>{"--cwd"}</code></nobr> | Directorio de trabajo |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Puerto para escuchar |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Nombre de host para escuchar |
|
||||
|
||||
---
|
||||
|
||||
@@ -499,12 +508,12 @@ opencode uninstall
|
||||
|
||||
#### Opciones
|
||||
|
||||
| Opción | Corta | Descripción |
|
||||
| --------------- | ----- | ----------------------------------------- |
|
||||
| `--keep-config` | `-c` | Mantener archivos de configuración |
|
||||
| `--keep-data` | `-d` | Conservar datos de sesión e instantáneas |
|
||||
| `--dry-run` | | Mostrar lo que se eliminaría sin eliminar |
|
||||
| `--force` | `-f` | Saltar mensajes de confirmación |
|
||||
| Opción | Corta | Descripción |
|
||||
| ------------------------------------------- | ----- | ----------------------------------------- |
|
||||
| <nobr><code>{"--keep-config"}</code></nobr> | `-c` | Mantener archivos de configuración |
|
||||
| <nobr><code>{"--keep-data"}</code></nobr> | `-d` | Conservar datos de sesión e instantáneas |
|
||||
| <nobr><code>{"--dry-run"}</code></nobr> | | Mostrar lo que se eliminaría sin eliminar |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | Saltar mensajes de confirmación |
|
||||
|
||||
---
|
||||
|
||||
@@ -530,9 +539,9 @@ opencode upgrade v0.1.48
|
||||
|
||||
#### Opciones
|
||||
|
||||
| Opción | Corta | Descripción |
|
||||
| ---------- | ----- | ------------------------------------------------------------------- |
|
||||
| `--method` | `-m` | El método de instalación que se utilizó; curl, npm, pnpm, bun, brew |
|
||||
| Opción | Corta | Descripción |
|
||||
| -------------------------------------- | ----- | ------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | El método de instalación que se utilizó; curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
@@ -540,12 +549,12 @@ opencode upgrade v0.1.48
|
||||
|
||||
La CLI de OpenCode toma las siguientes banderas globales.
|
||||
|
||||
| Opción | Corta | Descripción |
|
||||
| -------------- | ----- | -------------------------------------------- |
|
||||
| `--help` | `-h` | Mostrar ayuda |
|
||||
| `--version` | `-v` | Número de versión de impresión |
|
||||
| `--print-logs` | | Imprimir registros en stderr |
|
||||
| `--log-level` | | Nivel de registro (DEBUG, INFO, WARN, ERROR) |
|
||||
| Opción | Corta | Descripción |
|
||||
| ------------------------------------------ | ----- | -------------------------------------------- |
|
||||
| <nobr><code>{"--help"}</code></nobr> | `-h` | Mostrar ayuda |
|
||||
| <nobr><code>{"--version"}</code></nobr> | `-v` | Número de versión de impresión |
|
||||
| <nobr><code>{"--print-logs"}</code></nobr> | | Imprimir registros en stderr |
|
||||
| <nobr><code>{"--log-level"}</code></nobr> | | Nivel de registro (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -29,16 +29,16 @@ opencode [project]
|
||||
|
||||
#### Options
|
||||
|
||||
| Option | Court | Description |
|
||||
| ------------ | ----- | ----------------------------------------------------------------------------- |
|
||||
| `--continue` | `-c` | Continuer la dernière session |
|
||||
| `--session` | `-s` | ID de session pour continuer |
|
||||
| `--fork` | | Forker la session en continuant (à utiliser avec `--continue` ou `--session`) |
|
||||
| `--prompt` | | Prompt à utiliser |
|
||||
| `--model` | `-m` | Modèle à utiliser sous forme de fournisseur/modèle |
|
||||
| `--agent` | | Agent à utiliser |
|
||||
| `--port` | | Port d'écoute |
|
||||
| `--hostname` | | Nom d'hôte d'écoute |
|
||||
| Option | Court | Description |
|
||||
| ---------------------------------------- | ----- | ----------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Continuer la dernière session |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | ID de session pour continuer |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Forker la session en continuant (à utiliser avec `--continue` ou `--session`) |
|
||||
| <nobr><code>{"--prompt"}</code></nobr> | | Prompt à utiliser |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Modèle à utiliser sous forme de fournisseur/modèle |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Agent à utiliser |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Port d'écoute |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | | Nom d'hôte d'écoute |
|
||||
|
||||
---
|
||||
|
||||
@@ -78,10 +78,14 @@ opencode attach http://10.20.30.40:4096
|
||||
|
||||
#### Options
|
||||
|
||||
| Option | Court | Description |
|
||||
| ----------- | ----- | ---------------------------------------------- |
|
||||
| `--dir` | | Répertoire de travail dans lequel démarrer TUI |
|
||||
| `--session` | `-s` | ID de session pour continuer |
|
||||
| Option | Court | Description |
|
||||
| ---------------------------------------- | ----- | -------------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Répertoire de travail dans lequel démarrer TUI |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Continuer la dernière session |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | ID de session pour continuer |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Dupliquer la session lors de la reprise (à utiliser avec `--continue` ou `--session`) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Mot de passe d'authentification de base (par défaut `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Nom d'utilisateur d'authentification de base (par défaut `OPENCODE_SERVER_USERNAME` ou `opencode`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -187,10 +191,10 @@ opencode github run
|
||||
|
||||
##### Options
|
||||
|
||||
| Option | Description |
|
||||
| --------- | ---------------------------------------------------- |
|
||||
| `--event` | Événement simulé GitHub pour lequel exécuter l'agent |
|
||||
| `--token` | Jeton d'accès personnel GitHub |
|
||||
| Option | Description |
|
||||
| ------------------------------------- | ---------------------------------------------------- |
|
||||
| <nobr><code>{"--event"}</code></nobr> | Événement simulé GitHub pour lequel exécuter l'agent |
|
||||
| <nobr><code>{"--token"}</code></nobr> | Jeton d'accès personnel GitHub |
|
||||
|
||||
---
|
||||
|
||||
@@ -296,10 +300,10 @@ opencode models anthropic
|
||||
|
||||
#### Options
|
||||
|
||||
| Option | Description |
|
||||
| ----------- | ------------------------------------------------------------------------------------------ |
|
||||
| `--refresh` | Actualisez le cache des modèles à partir de models.dev |
|
||||
| `--verbose` | Utiliser une sortie de modèle plus détaillée (inclut des métadonnées telles que les coûts) |
|
||||
| Option | Description |
|
||||
| --------------------------------------- | ------------------------------------------------------------------------------------------ |
|
||||
| <nobr><code>{"--refresh"}</code></nobr> | Actualisez le cache des modèles à partir de models.dev |
|
||||
| <nobr><code>{"--verbose"}</code></nobr> | Utiliser une sortie de modèle plus détaillée (inclut des métadonnées telles que les coûts) |
|
||||
|
||||
Utilisez l'option `--refresh` pour mettre à jour la liste des modèles mis en cache. Ceci est utile lorsque de nouveaux modèles ont été ajoutés à un fournisseur et que vous souhaitez les voir dans OpenCode.
|
||||
|
||||
@@ -335,20 +339,25 @@ opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
|
||||
#### Options
|
||||
|
||||
| Option | Court | Description |
|
||||
| ------------ | ----- | ---------------------------------------------------------------------------------------------- |
|
||||
| `--command` | | La commande à exécuter, utilisez le message pour les arguments |
|
||||
| `--continue` | `-c` | Continuer la dernière session |
|
||||
| `--session` | `-s` | ID de session pour continuer |
|
||||
| `--fork` | | Forker la session en continuant (à utiliser avec `--continue` ou `--session`) |
|
||||
| `--share` | | Partager la session |
|
||||
| `--model` | `-m` | Modèle à utiliser sous forme de fournisseur/modèle |
|
||||
| `--agent` | | Agent à utiliser |
|
||||
| `--file` | `-f` | Fichier(s) à joindre au message |
|
||||
| `--format` | | Format : par défaut (formaté) ou json (événements JSON bruts) |
|
||||
| `--title` | | Titre de la session (utilise un prompt tronqué si aucune valeur n'est fournie) |
|
||||
| `--attach` | | Connectez-vous à un serveur opencode en cours d'exécution (par exemple, http://localhost:4096) |
|
||||
| `--port` | | Port du serveur local (port aléatoire par défaut) |
|
||||
| Option | Court | Description |
|
||||
| ---------------------------------------- | ----- | -------------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--command"}</code></nobr> | | La commande à exécuter, utilisez le message pour les arguments |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Continuer la dernière session |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | ID de session pour continuer |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Forker la session en continuant (à utiliser avec `--continue` ou `--session`) |
|
||||
| <nobr><code>{"--share"}</code></nobr> | | Partager la session |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Modèle à utiliser sous forme de fournisseur/modèle |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Agent à utiliser |
|
||||
| <nobr><code>{"--file"}</code></nobr> | `-f` | Fichier(s) à joindre au message |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Format : par défaut (formaté) ou json (événements JSON bruts) |
|
||||
| <nobr><code>{"--title"}</code></nobr> | | Titre de la session (utilise un prompt tronqué si aucune valeur n'est fournie) |
|
||||
| <nobr><code>{"--attach"}</code></nobr> | | Connectez-vous à un serveur opencode en cours d'exécution (par exemple, http://localhost:4096) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Mot de passe d'authentification de base (par défaut `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Nom d'utilisateur d'authentification de base (par défaut `OPENCODE_SERVER_USERNAME` ou `opencode`) |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Répertoire d'exécution, ou chemin sur le serveur distant lors de l'attachement |
|
||||
| <nobr><code>{"--variant"}</code></nobr> | | Variante du modèle (effort de raisonnement spécifique au fournisseur) |
|
||||
| <nobr><code>{"--thinking"}</code></nobr> | | Afficher les blocs de réflexion |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Port du serveur local (port aléatoire par défaut) |
|
||||
|
||||
---
|
||||
|
||||
@@ -364,12 +373,12 @@ Cela démarre un serveur HTTP qui fournit un accès API aux fonctionnalités d'O
|
||||
|
||||
#### Options
|
||||
|
||||
| Option | Description |
|
||||
| ------------ | ---------------------------------------------------------- |
|
||||
| `--port` | Port d'écoute |
|
||||
| `--hostname` | Nom d'hôte d'écoute |
|
||||
| `--mdns` | Activer la découverte mDNS |
|
||||
| `--cors` | Origines de navigateur supplémentaires pour autoriser CORS |
|
||||
| Option | Description |
|
||||
| ---------------------------------------- | ---------------------------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port d'écoute |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Nom d'hôte d'écoute |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Activer la découverte mDNS |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Origines de navigateur supplémentaires pour autoriser CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -393,10 +402,10 @@ opencode session list
|
||||
|
||||
##### Options
|
||||
|
||||
| Option | Court | Description |
|
||||
| ------------- | ----- | -------------------------------------------- |
|
||||
| `--max-count` | `-n` | Limiter aux N sessions les plus récentes |
|
||||
| `--format` | | Format de sortie : tableau ou json (tableau) |
|
||||
| Option | Court | Description |
|
||||
| ----------------------------------------- | ----- | -------------------------------------------- |
|
||||
| <nobr><code>{"--max-count"}</code></nobr> | `-n` | Limiter aux N sessions les plus récentes |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Format de sortie : tableau ou json (tableau) |
|
||||
|
||||
---
|
||||
|
||||
@@ -410,12 +419,12 @@ opencode stats
|
||||
|
||||
#### Options
|
||||
|
||||
| Option | Description |
|
||||
| ----------- | --------------------------------------------------------------------------------------------------------------------- |
|
||||
| `--days` | Afficher les statistiques des N derniers jours (depuis le début) |
|
||||
| `--tools` | Nombre d'outils à afficher (tous) |
|
||||
| `--models` | Afficher la répartition de l'utilisation du modèle (masqué par défaut). Passez un numéro pour afficher les N premiers |
|
||||
| `--project` | Filtrer par projet (tous les projets, chaîne vide : projet actuel) |
|
||||
| Option | Description |
|
||||
| --------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--days"}</code></nobr> | Afficher les statistiques des N derniers jours (depuis le début) |
|
||||
| <nobr><code>{"--tools"}</code></nobr> | Nombre d'outils à afficher (tous) |
|
||||
| <nobr><code>{"--models"}</code></nobr> | Afficher la répartition de l'utilisation du modèle (masqué par défaut). Passez un numéro pour afficher les N premiers |
|
||||
| <nobr><code>{"--project"}</code></nobr> | Filtrer par projet (tous les projets, chaîne vide : projet actuel) |
|
||||
|
||||
---
|
||||
|
||||
@@ -460,12 +469,12 @@ Cela démarre un serveur HTTP et ouvre un navigateur Web pour accéder à OpenCo
|
||||
|
||||
#### Options
|
||||
|
||||
| Option | Description |
|
||||
| ------------ | ---------------------------------------------------------- |
|
||||
| `--port` | Port d'écoute |
|
||||
| `--hostname` | Nom d'hôte d'écoute |
|
||||
| `--mdns` | Activer la découverte mDNS |
|
||||
| `--cors` | Origines de navigateur supplémentaires pour autoriser CORS |
|
||||
| Option | Description |
|
||||
| ---------------------------------------- | ---------------------------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port d'écoute |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Nom d'hôte d'écoute |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Activer la découverte mDNS |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Origines de navigateur supplémentaires pour autoriser CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -481,11 +490,11 @@ Cette commande démarre un serveur ACP qui communique via stdin/stdout en utilis
|
||||
|
||||
#### Options
|
||||
|
||||
| Option | Description |
|
||||
| ------------ | --------------------- |
|
||||
| `--cwd` | Répertoire de travail |
|
||||
| `--port` | Port d'écoute |
|
||||
| `--hostname` | Nom d'hôte d'écoute |
|
||||
| Option | Description |
|
||||
| ---------------------------------------- | --------------------- |
|
||||
| <nobr><code>{"--cwd"}</code></nobr> | Répertoire de travail |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port d'écoute |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Nom d'hôte d'écoute |
|
||||
|
||||
---
|
||||
|
||||
@@ -499,12 +508,12 @@ opencode uninstall
|
||||
|
||||
#### Options
|
||||
|
||||
| Option | Court | Description |
|
||||
| --------------- | ----- | --------------------------------------------------- |
|
||||
| `--keep-config` | `-c` | Conserver les fichiers de configuration |
|
||||
| `--keep-data` | `-d` | Conserver les données de session et les instantanés |
|
||||
| `--dry-run` | | Afficher ce qui serait supprimé sans supprimer |
|
||||
| `--force` | `-f` | Ignorer les invites de confirmation |
|
||||
| Option | Court | Description |
|
||||
| ------------------------------------------- | ----- | --------------------------------------------------- |
|
||||
| <nobr><code>{"--keep-config"}</code></nobr> | `-c` | Conserver les fichiers de configuration |
|
||||
| <nobr><code>{"--keep-data"}</code></nobr> | `-d` | Conserver les données de session et les instantanés |
|
||||
| <nobr><code>{"--dry-run"}</code></nobr> | | Afficher ce qui serait supprimé sans supprimer |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | Ignorer les invites de confirmation |
|
||||
|
||||
---
|
||||
|
||||
@@ -530,9 +539,9 @@ opencode upgrade v0.1.48
|
||||
|
||||
#### Options
|
||||
|
||||
| Option | Court | Description |
|
||||
| ---------- | ----- | --------------------------------------------------------------- |
|
||||
| `--method` | `-m` | La méthode d'installation utilisée ; curl, npm, pnpm, bun, brew |
|
||||
| Option | Court | Description |
|
||||
| -------------------------------------- | ----- | --------------------------------------------------------------- |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | La méthode d'installation utilisée ; curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
@@ -540,12 +549,12 @@ opencode upgrade v0.1.48
|
||||
|
||||
La CLI opencode prend les flags globaux suivants.
|
||||
|
||||
| Option | Court | Description |
|
||||
| -------------- | ----- | ---------------------------------------- |
|
||||
| `--help` | `-h` | Afficher l'aide |
|
||||
| `--version` | `-v` | Afficher le numéro de version |
|
||||
| `--print-logs` | | Afficher les logs sur stderr |
|
||||
| `--log-level` | | Niveau de log (DEBUG, INFO, WARN, ERROR) |
|
||||
| Option | Court | Description |
|
||||
| ------------------------------------------ | ----- | ---------------------------------------- |
|
||||
| <nobr><code>{"--help"}</code></nobr> | `-h` | Afficher l'aide |
|
||||
| <nobr><code>{"--version"}</code></nobr> | `-v` | Afficher le numéro de version |
|
||||
| <nobr><code>{"--print-logs"}</code></nobr> | | Afficher les logs sur stderr |
|
||||
| <nobr><code>{"--log-level"}</code></nobr> | | Niveau de log (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -29,16 +29,16 @@ opencode [project]
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Breve | Descrizione |
|
||||
| ------------ | ----- | ------------------------------------------------------------------------ |
|
||||
| `--continue` | `-c` | Continua l'ultima sessione |
|
||||
| `--session` | `-s` | ID sessione da continuare |
|
||||
| `--fork` | | Duplica la sessione quando continui (usa con `--continue` o `--session`) |
|
||||
| `--prompt` | | Prompt da usare |
|
||||
| `--model` | `-m` | Modello nel formato provider/model |
|
||||
| `--agent` | | Agente da usare |
|
||||
| `--port` | | Porta su cui mettersi in ascolto |
|
||||
| `--hostname` | | Hostname su cui mettersi in ascolto |
|
||||
| Flag | Breve | Descrizione |
|
||||
| ---------------------------------------- | ----- | ------------------------------------------------------------------------ |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Continua l'ultima sessione |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | ID sessione da continuare |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Duplica la sessione quando continui (usa con `--continue` o `--session`) |
|
||||
| <nobr><code>{"--prompt"}</code></nobr> | | Prompt da usare |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Modello nel formato provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Agente da usare |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Porta su cui mettersi in ascolto |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | | Hostname su cui mettersi in ascolto |
|
||||
|
||||
---
|
||||
|
||||
@@ -78,10 +78,14 @@ opencode attach http://10.20.30.40:4096
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Breve | Descrizione |
|
||||
| ----------- | ----- | --------------------------------------- |
|
||||
| `--dir` | | Working directory in cui avviare la TUI |
|
||||
| `--session` | `-s` | ID sessione da continuare |
|
||||
| Flag | Breve | Descrizione |
|
||||
| ---------------------------------------- | ----- | ----------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Working directory in cui avviare la TUI |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Continua l'ultima sessione |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | ID sessione da continuare |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Crea un fork della sessione durante la continuazione (usa con `--continue` o `--session`) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Password per l'autenticazione di base (predefinita: `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Nome utente per l'autenticazione di base (predefinito: `OPENCODE_SERVER_USERNAME` o `opencode`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -187,10 +191,10 @@ opencode github run
|
||||
|
||||
##### Flag
|
||||
|
||||
| Flag | Descrizione |
|
||||
| --------- | -------------------------------------------- |
|
||||
| `--event` | Evento GitHub mock per cui eseguire l'agente |
|
||||
| `--token` | GitHub personal access token |
|
||||
| Flag | Descrizione |
|
||||
| ------------------------------------- | -------------------------------------------- |
|
||||
| <nobr><code>{"--event"}</code></nobr> | Evento GitHub mock per cui eseguire l'agente |
|
||||
| <nobr><code>{"--token"}</code></nobr> | GitHub personal access token |
|
||||
|
||||
---
|
||||
|
||||
@@ -296,10 +300,10 @@ opencode models anthropic
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Descrizione |
|
||||
| ----------- | -------------------------------------------------- |
|
||||
| `--refresh` | Aggiorna la cache modelli da models.dev |
|
||||
| `--verbose` | Output più verboso (include metadati come i costi) |
|
||||
| Flag | Descrizione |
|
||||
| --------------------------------------- | -------------------------------------------------- |
|
||||
| <nobr><code>{"--refresh"}</code></nobr> | Aggiorna la cache modelli da models.dev |
|
||||
| <nobr><code>{"--verbose"}</code></nobr> | Output più verboso (include metadati come i costi) |
|
||||
|
||||
Usa `--refresh` per aggiornare l'elenco modelli in cache. È utile quando nuovi modelli vengono aggiunti a un provider e vuoi vederli in OpenCode.
|
||||
|
||||
@@ -335,20 +339,25 @@ opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Breve | Descrizione |
|
||||
| ------------ | ----- | ------------------------------------------------------------------------ |
|
||||
| `--command` | | Il comando da eseguire; usa message per gli argomenti |
|
||||
| `--continue` | `-c` | Continua l'ultima sessione |
|
||||
| `--session` | `-s` | ID sessione da continuare |
|
||||
| `--fork` | | Duplica la sessione quando continui (usa con `--continue` o `--session`) |
|
||||
| `--share` | | Condividi la sessione |
|
||||
| `--model` | `-m` | Modello nel formato provider/model |
|
||||
| `--agent` | | Agente da usare |
|
||||
| `--file` | `-f` | File da allegare al messaggio |
|
||||
| `--format` | | Formato: default (formattato) o json (eventi JSON grezzi) |
|
||||
| `--title` | | Titolo sessione (usa prompt troncato se non viene fornito un valore) |
|
||||
| `--attach` | | Attach a un server opencode in esecuzione (es. http://localhost:4096) |
|
||||
| `--port` | | Porta per il server locale (di default una porta casuale) |
|
||||
| Flag | Breve | Descrizione |
|
||||
| ---------------------------------------- | ----- | ----------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--command"}</code></nobr> | | Il comando da eseguire; usa message per gli argomenti |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Continua l'ultima sessione |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | ID sessione da continuare |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Duplica la sessione quando continui (usa con `--continue` o `--session`) |
|
||||
| <nobr><code>{"--share"}</code></nobr> | | Condividi la sessione |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Modello nel formato provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Agente da usare |
|
||||
| <nobr><code>{"--file"}</code></nobr> | `-f` | File da allegare al messaggio |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Formato: default (formattato) o json (eventi JSON grezzi) |
|
||||
| <nobr><code>{"--title"}</code></nobr> | | Titolo sessione (usa prompt troncato se non viene fornito un valore) |
|
||||
| <nobr><code>{"--attach"}</code></nobr> | | Attach a un server opencode in esecuzione (es. http://localhost:4096) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Password per l'autenticazione di base (predefinita: `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Nome utente per l'autenticazione di base (predefinito: `OPENCODE_SERVER_USERNAME` o `opencode`) |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Directory di esecuzione, o percorso sul server remoto durante il collegamento |
|
||||
| <nobr><code>{"--variant"}</code></nobr> | | Variante del modello (sforzo di ragionamento specifico del provider) |
|
||||
| <nobr><code>{"--thinking"}</code></nobr> | | Mostra blocchi di pensiero |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Porta per il server locale (di default una porta casuale) |
|
||||
|
||||
---
|
||||
|
||||
@@ -364,12 +373,12 @@ Avvia un server HTTP che espone accesso API alle funzionalità di opencode senza
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Descrizione |
|
||||
| ------------ | ---------------------------------------------- |
|
||||
| `--port` | Porta su cui mettersi in ascolto |
|
||||
| `--hostname` | Hostname su cui mettersi in ascolto |
|
||||
| `--mdns` | Abilita discovery mDNS |
|
||||
| `--cors` | Origin browser addizionali per consentire CORS |
|
||||
| Flag | Descrizione |
|
||||
| ---------------------------------------- | ---------------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Porta su cui mettersi in ascolto |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Hostname su cui mettersi in ascolto |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Abilita discovery mDNS |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Origin browser addizionali per consentire CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -393,10 +402,10 @@ opencode session list
|
||||
|
||||
##### Flag
|
||||
|
||||
| Flag | Breve | Descrizione |
|
||||
| ------------- | ----- | ------------------------------------ |
|
||||
| `--max-count` | `-n` | Limita alle N sessioni più recenti |
|
||||
| `--format` | | Formato output: table o json (table) |
|
||||
| Flag | Breve | Descrizione |
|
||||
| ----------------------------------------- | ----- | ------------------------------------ |
|
||||
| <nobr><code>{"--max-count"}</code></nobr> | `-n` | Limita alle N sessioni più recenti |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Formato output: table o json (table) |
|
||||
|
||||
---
|
||||
|
||||
@@ -410,12 +419,12 @@ opencode stats
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Descrizione |
|
||||
| ----------- | ------------------------------------------------------------------------------------- |
|
||||
| `--days` | Mostra statistiche per gli ultimi N giorni (all time) |
|
||||
| `--tools` | Numero di strumenti da mostrare (all) |
|
||||
| `--models` | Mostra breakdown di utilizzo modelli (nascosto di default). Passa un numero per top N |
|
||||
| `--project` | Filtra per progetto (tutti i progetti; stringa vuota: progetto corrente) |
|
||||
| Flag | Descrizione |
|
||||
| --------------------------------------- | ------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--days"}</code></nobr> | Mostra statistiche per gli ultimi N giorni (all time) |
|
||||
| <nobr><code>{"--tools"}</code></nobr> | Numero di strumenti da mostrare (all) |
|
||||
| <nobr><code>{"--models"}</code></nobr> | Mostra breakdown di utilizzo modelli (nascosto di default). Passa un numero per top N |
|
||||
| <nobr><code>{"--project"}</code></nobr> | Filtra per progetto (tutti i progetti; stringa vuota: progetto corrente) |
|
||||
|
||||
---
|
||||
|
||||
@@ -460,12 +469,12 @@ Avvia un server HTTP e apre un browser per accedere a OpenCode tramite interfacc
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Descrizione |
|
||||
| ------------ | ---------------------------------------------- |
|
||||
| `--port` | Porta su cui mettersi in ascolto |
|
||||
| `--hostname` | Hostname su cui mettersi in ascolto |
|
||||
| `--mdns` | Abilita discovery mDNS |
|
||||
| `--cors` | Origin browser addizionali per consentire CORS |
|
||||
| Flag | Descrizione |
|
||||
| ---------------------------------------- | ---------------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Porta su cui mettersi in ascolto |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Hostname su cui mettersi in ascolto |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Abilita discovery mDNS |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Origin browser addizionali per consentire CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -481,11 +490,11 @@ Questo comando avvia un server ACP che comunica via stdin/stdout usando nd-JSON.
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Descrizione |
|
||||
| ------------ | ----------------------------------- |
|
||||
| `--cwd` | Directory di lavoro |
|
||||
| `--port` | Porta su cui mettersi in ascolto |
|
||||
| `--hostname` | Hostname su cui mettersi in ascolto |
|
||||
| Flag | Descrizione |
|
||||
| ---------------------------------------- | ----------------------------------- |
|
||||
| <nobr><code>{"--cwd"}</code></nobr> | Directory di lavoro |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Porta su cui mettersi in ascolto |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Hostname su cui mettersi in ascolto |
|
||||
|
||||
---
|
||||
|
||||
@@ -499,12 +508,12 @@ opencode uninstall
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Breve | Descrizione |
|
||||
| --------------- | ----- | -------------------------------------------- |
|
||||
| `--keep-config` | `-c` | Mantieni i file di configurazione |
|
||||
| `--keep-data` | `-d` | Mantieni dati di sessione e snapshot |
|
||||
| `--dry-run` | | Mostra cosa verrebbe rimosso senza rimuovere |
|
||||
| `--force` | `-f` | Salta le richieste di conferma |
|
||||
| Flag | Breve | Descrizione |
|
||||
| ------------------------------------------- | ----- | -------------------------------------------- |
|
||||
| <nobr><code>{"--keep-config"}</code></nobr> | `-c` | Mantieni i file di configurazione |
|
||||
| <nobr><code>{"--keep-data"}</code></nobr> | `-d` | Mantieni dati di sessione e snapshot |
|
||||
| <nobr><code>{"--dry-run"}</code></nobr> | | Mostra cosa verrebbe rimosso senza rimuovere |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | Salta le richieste di conferma |
|
||||
|
||||
---
|
||||
|
||||
@@ -530,9 +539,9 @@ opencode upgrade v0.1.48
|
||||
|
||||
#### Flag
|
||||
|
||||
| Flag | Breve | Descrizione |
|
||||
| ---------- | ----- | --------------------------------------------------------- |
|
||||
| `--method` | `-m` | Metodo di installazione usato: curl, npm, pnpm, bun, brew |
|
||||
| Flag | Breve | Descrizione |
|
||||
| -------------------------------------- | ----- | --------------------------------------------------------- |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | Metodo di installazione usato: curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
@@ -540,12 +549,12 @@ opencode upgrade v0.1.48
|
||||
|
||||
La CLI di opencode accetta i seguenti flag globali.
|
||||
|
||||
| Flag | Breve | Descrizione |
|
||||
| -------------- | ----- | -------------------------------------- |
|
||||
| `--help` | `-h` | Mostra l'help |
|
||||
| `--version` | `-v` | Stampa il numero di versione |
|
||||
| `--print-logs` | | Stampa i log su stderr |
|
||||
| `--log-level` | | Livello log (DEBUG, INFO, WARN, ERROR) |
|
||||
| Flag | Breve | Descrizione |
|
||||
| ------------------------------------------ | ----- | -------------------------------------- |
|
||||
| <nobr><code>{"--help"}</code></nobr> | `-h` | Mostra l'help |
|
||||
| <nobr><code>{"--version"}</code></nobr> | `-v` | Stampa il numero di versione |
|
||||
| <nobr><code>{"--print-logs"}</code></nobr> | | Stampa i log su stderr |
|
||||
| <nobr><code>{"--log-level"}</code></nobr> | | Livello log (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -29,16 +29,16 @@ opencode [project]
|
||||
|
||||
#### フラグ
|
||||
|
||||
| フラグ | ショート | 説明 |
|
||||
| ------------ | ----------- | ---------------------------------------------------------- |
|
||||
| `--continue` | `-c` | 最後のセッションを続行 |
|
||||
| `--session` | | 続行時にセッションをフォーク (`-s` または `--fork` と併用) |
|
||||
| `--continue` | `--session` | 続行するセッション ID |
|
||||
| `--prompt` | | 使用のプロンプト |
|
||||
| `--model` | `-m` | プロバイダー/モデルの形式で使用するモデル |
|
||||
| `--agent` | | 使用するエージェント |
|
||||
| `--port` | | リッスンするポート |
|
||||
| `--hostname` | | リッスンするホスト名 |
|
||||
| フラグ | ショート | 説明 |
|
||||
| ---------------------------------------- | --------------------------------------- | ---------------------------------------------------------- |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | 最後のセッションを続行 |
|
||||
| <nobr><code>{"--session"}</code></nobr> | | 続行時にセッションをフォーク (`-s` または `--fork` と併用) |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | <nobr><code>{"--session"}</code></nobr> | 続行するセッション ID |
|
||||
| <nobr><code>{"--prompt"}</code></nobr> | | 使用のプロンプト |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | プロバイダー/モデルの形式で使用するモデル |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | 使用するエージェント |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | リッスンするポート |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | | リッスンするホスト名 |
|
||||
|
||||
---
|
||||
|
||||
@@ -78,10 +78,14 @@ opencode attach http://10.20.30.40:4096
|
||||
|
||||
#### フラグ
|
||||
|
||||
| フラグ | ショート | 説明 |
|
||||
| ----------- | -------- | ------------------------------ |
|
||||
| `--dir` | | TUI を開始する作業ディレクトリ |
|
||||
| `--session` | `-s` | 続行するセッション ID |
|
||||
| フラグ | ショート | 説明 |
|
||||
| ---------------------------------------- | -------- | --------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | TUI を開始する作業ディレクトリ |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | 最後のセッションを続行 |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | 続行するセッション ID |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | 続行時にセッションをフォーク(`--continue` または `--session` と使用) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Basic 認証パスワード(デフォルトは `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Basic 認証ユーザー名(デフォルトは `OPENCODE_SERVER_USERNAME` または `opencode`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -187,10 +191,10 @@ opencode github run
|
||||
|
||||
##### フラグ
|
||||
|
||||
| フラグ | 説明 |
|
||||
| --------- | --------------------------------------------------- |
|
||||
| `--event` | エージェントを実行するための GitHub モック イベント |
|
||||
| `--token` | GitHub 個人アクセストークン |
|
||||
| フラグ | 説明 |
|
||||
| ------------------------------------- | --------------------------------------------------- |
|
||||
| <nobr><code>{"--event"}</code></nobr> | エージェントを実行するための GitHub モック イベント |
|
||||
| <nobr><code>{"--token"}</code></nobr> | GitHub 個人アクセストークン |
|
||||
|
||||
---
|
||||
|
||||
@@ -296,10 +300,10 @@ opencode models anthropic
|
||||
|
||||
#### フラグ
|
||||
|
||||
| フラグ | 説明 |
|
||||
| ----------- | --------------------------------------------------------------- |
|
||||
| `--refresh` | models.dev からモデルキャッシュを更新します。 |
|
||||
| `--verbose` | より詳細なモデル出力を使用します (コストなどのメタデータを含む) |
|
||||
| フラグ | 説明 |
|
||||
| --------------------------------------- | --------------------------------------------------------------- |
|
||||
| <nobr><code>{"--refresh"}</code></nobr> | models.dev からモデルキャッシュを更新します。 |
|
||||
| <nobr><code>{"--verbose"}</code></nobr> | より詳細なモデル出力を使用します (コストなどのメタデータを含む) |
|
||||
|
||||
`--refresh` フラグを使用して、キャッシュされたモデルリストを更新します。これは、新しいモデルがプロバイダーに追加され、それを OpenCode で確認したい場合に便利です。
|
||||
|
||||
@@ -335,20 +339,25 @@ opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
|
||||
#### フラグ
|
||||
|
||||
| フラグ | ショート | 説明 |
|
||||
| ------------ | -------- | ----------------------------------------------------------------------------------------- |
|
||||
| `--command` | | 実行するコマンド。引数には message を使用します。 |
|
||||
| `--continue` | `-c` | 最後のセッションを続行 |
|
||||
| `--session` | `-s` | 続行するセッション ID |
|
||||
| `--fork` | | 続行時にセッションをフォーク (`--continue` または `--session` と併用) |
|
||||
| `--share` | | セッションを共有する |
|
||||
| `--model` | `-m` | プロバイダー/モデルの形式で使用するモデル |
|
||||
| `--agent` | | 使用するエージェント |
|
||||
| `--file` | `-f` | メッセージに添付するファイル |
|
||||
| `--format` | | 形式: デフォルト (フォーマット済み) または json (生の JSON イベント) |
|
||||
| `--title` | | セッションのタイトル (値が指定されていない場合は、切り詰められたプロンプトが使用されます) |
|
||||
| `--attach` | | 実行中の opencode サーバー (http://localhost:4096 など) に接続します。 |
|
||||
| `--port` | | ローカルサーバーのポート (デフォルトはランダムポート) |
|
||||
| フラグ | ショート | 説明 |
|
||||
| ---------------------------------------- | -------- | ----------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--command"}</code></nobr> | | 実行するコマンド。引数には message を使用します。 |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | 最後のセッションを続行 |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | 続行するセッション ID |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | 続行時にセッションをフォーク (`--continue` または `--session` と併用) |
|
||||
| <nobr><code>{"--share"}</code></nobr> | | セッションを共有する |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | プロバイダー/モデルの形式で使用するモデル |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | 使用するエージェント |
|
||||
| <nobr><code>{"--file"}</code></nobr> | `-f` | メッセージに添付するファイル |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | 形式: デフォルト (フォーマット済み) または json (生の JSON イベント) |
|
||||
| <nobr><code>{"--title"}</code></nobr> | | セッションのタイトル (値が指定されていない場合は、切り詰められたプロンプトが使用されます) |
|
||||
| <nobr><code>{"--attach"}</code></nobr> | | 実行中の opencode サーバー (http://localhost:4096 など) に接続します。 |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Basic 認証パスワード(デフォルトは `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Basic 認証ユーザー名(デフォルトは `OPENCODE_SERVER_USERNAME` または `opencode`) |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | 実行ディレクトリ、またはアタッチ時のリモートサーバー上のパス |
|
||||
| <nobr><code>{"--variant"}</code></nobr> | | モデルバリアント(プロバイダー固有の推論レベル) |
|
||||
| <nobr><code>{"--thinking"}</code></nobr> | | 思考ブロックを表示 |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | ローカルサーバーのポート (デフォルトはランダムポート) |
|
||||
|
||||
---
|
||||
|
||||
@@ -364,12 +373,12 @@ opencode serve
|
||||
|
||||
#### フラグ
|
||||
|
||||
| フラグ | 説明 |
|
||||
| ------------ | --------------------------------------- |
|
||||
| `--port` | リッスンするポート |
|
||||
| `--hostname` | リッスンするホスト名 |
|
||||
| `--mdns` | mDNS 検出を有効にする |
|
||||
| `--cors` | CORS を許可する追加のブラウザーオリジン |
|
||||
| フラグ | 説明 |
|
||||
| ---------------------------------------- | --------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | リッスンするポート |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | リッスンするホスト名 |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | mDNS 検出を有効にする |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | CORS を許可する追加のブラウザーオリジン |
|
||||
|
||||
---
|
||||
|
||||
@@ -393,10 +402,10 @@ opencode session list
|
||||
|
||||
##### フラグ
|
||||
|
||||
| フラグ | ショート | 説明 |
|
||||
| ------------- | -------- | ---------------------------------------- |
|
||||
| `--max-count` | `-n` | 最新のセッションを N 個に制限 |
|
||||
| `--format` | | 出力形式: テーブルまたは json (テーブル) |
|
||||
| フラグ | ショート | 説明 |
|
||||
| ----------------------------------------- | -------- | ---------------------------------------- |
|
||||
| <nobr><code>{"--max-count"}</code></nobr> | `-n` | 最新のセッションを N 個に制限 |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | 出力形式: テーブルまたは json (テーブル) |
|
||||
|
||||
---
|
||||
|
||||
@@ -410,12 +419,12 @@ opencode stats
|
||||
|
||||
#### フラグ
|
||||
|
||||
| フラグ | 説明 |
|
||||
| ----------- | ------------------------------------------------------------------------------------------ |
|
||||
| `--days` | 過去 N 日間の統計を表示 (全期間) |
|
||||
| `--tools` | 表示するツールの数 (すべて) |
|
||||
| `--models` | モデルの使用状況の内訳を表示 (デフォルトでは非表示)。上位 N 件を表示するには数値を渡します |
|
||||
| `--project` | プロジェクトでフィルタリング (全プロジェクト、空文字列: 現在のプロジェクト) |
|
||||
| フラグ | 説明 |
|
||||
| --------------------------------------- | ------------------------------------------------------------------------------------------ |
|
||||
| <nobr><code>{"--days"}</code></nobr> | 過去 N 日間の統計を表示 (全期間) |
|
||||
| <nobr><code>{"--tools"}</code></nobr> | 表示するツールの数 (すべて) |
|
||||
| <nobr><code>{"--models"}</code></nobr> | モデルの使用状況の内訳を表示 (デフォルトでは非表示)。上位 N 件を表示するには数値を渡します |
|
||||
| <nobr><code>{"--project"}</code></nobr> | プロジェクトでフィルタリング (全プロジェクト、空文字列: 現在のプロジェクト) |
|
||||
|
||||
---
|
||||
|
||||
@@ -460,12 +469,12 @@ opencode web
|
||||
|
||||
#### フラグ
|
||||
|
||||
| フラグ | 説明 |
|
||||
| ------------ | --------------------------------------- |
|
||||
| `--port` | リッスンするポート |
|
||||
| `--hostname` | リッスンするホスト名 |
|
||||
| `--mdns` | mDNS 検出を有効にする |
|
||||
| `--cors` | CORS を許可する追加のブラウザーオリジン |
|
||||
| フラグ | 説明 |
|
||||
| ---------------------------------------- | --------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | リッスンするポート |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | リッスンするホスト名 |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | mDNS 検出を有効にする |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | CORS を許可する追加のブラウザーオリジン |
|
||||
|
||||
---
|
||||
|
||||
@@ -481,11 +490,11 @@ opencode acp
|
||||
|
||||
#### フラグ
|
||||
|
||||
| フラグ | 説明 |
|
||||
| ------------ | -------------------- |
|
||||
| `--cwd` | 作業ディレクトリ |
|
||||
| `--port` | リッスンするポート |
|
||||
| `--hostname` | リッスンするホスト名 |
|
||||
| フラグ | 説明 |
|
||||
| ---------------------------------------- | -------------------- |
|
||||
| <nobr><code>{"--cwd"}</code></nobr> | 作業ディレクトリ |
|
||||
| <nobr><code>{"--port"}</code></nobr> | リッスンするポート |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | リッスンするホスト名 |
|
||||
|
||||
---
|
||||
|
||||
@@ -499,12 +508,12 @@ opencode uninstall
|
||||
|
||||
#### フラグ
|
||||
|
||||
| フラグ | ショート | 説明 |
|
||||
| --------------- | -------- | -------------------------------------------- |
|
||||
| `--keep-config` | `-c` | 構成ファイルを保持する |
|
||||
| `--keep-data` | `-d` | セッションデータとスナップショットを保持する |
|
||||
| `--dry-run` | | 削除せずに削除される内容を表示する |
|
||||
| `--force` | `-f` | 確認プロンプトをスキップする |
|
||||
| フラグ | ショート | 説明 |
|
||||
| ------------------------------------------- | -------- | -------------------------------------------- |
|
||||
| <nobr><code>{"--keep-config"}</code></nobr> | `-c` | 構成ファイルを保持する |
|
||||
| <nobr><code>{"--keep-data"}</code></nobr> | `-d` | セッションデータとスナップショットを保持する |
|
||||
| <nobr><code>{"--dry-run"}</code></nobr> | | 削除せずに削除される内容を表示する |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | 確認プロンプトをスキップする |
|
||||
|
||||
---
|
||||
|
||||
@@ -530,9 +539,9 @@ opencode upgrade v0.1.48
|
||||
|
||||
#### フラグ
|
||||
|
||||
| フラグ | ショート | 説明 |
|
||||
| ---------- | -------- | ------------------------------------------------------ |
|
||||
| `--method` | `-m` | 使用されたインストール方法。curl, npm, pnpm, bun, brew |
|
||||
| フラグ | ショート | 説明 |
|
||||
| -------------------------------------- | -------- | ------------------------------------------------------ |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | 使用されたインストール方法。curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
@@ -540,12 +549,12 @@ opencode upgrade v0.1.48
|
||||
|
||||
opencode CLI は次のグローバルフラグを受け取ります。
|
||||
|
||||
| フラグ | ショート | 説明 |
|
||||
| -------------- | -------- | ------------------------------------- |
|
||||
| `--help` | `-h` | ヘルプを表示 |
|
||||
| `--version` | `-v` | バージョン番号を出力 |
|
||||
| `--print-logs` | | ログを標準エラー出力に出力 |
|
||||
| `--log-level` | | ログレベル (DEBUG、INFO、WARN、ERROR) |
|
||||
| フラグ | ショート | 説明 |
|
||||
| ------------------------------------------ | -------- | ------------------------------------- |
|
||||
| <nobr><code>{"--help"}</code></nobr> | `-h` | ヘルプを表示 |
|
||||
| <nobr><code>{"--version"}</code></nobr> | `-v` | バージョン番号を出力 |
|
||||
| <nobr><code>{"--print-logs"}</code></nobr> | | ログを標準エラー出力に出力 |
|
||||
| <nobr><code>{"--log-level"}</code></nobr> | | ログレベル (DEBUG、INFO、WARN、ERROR) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -29,16 +29,16 @@ opencode [project]
|
||||
|
||||
#### 플래그
|
||||
|
||||
| 플래그 | 축약 | 설명 |
|
||||
| ------------ | ---- | ---------------------------------------------------------------------- |
|
||||
| `--continue` | `-c` | 마지막 세션 이어서 실행 |
|
||||
| `--session` | `-s` | 이어서 실행할 세션 ID |
|
||||
| `--fork` | | 세션을 이어갈 때 포크 생성 (`--continue` 또는 `--session`과 함께 사용) |
|
||||
| `--prompt` | | 사용할 프롬프트 |
|
||||
| `--model` | `-m` | 사용할 모델 (`provider/model` 형식) |
|
||||
| `--agent` | | 사용할 에이전트 |
|
||||
| `--port` | | 수신 포트 |
|
||||
| `--hostname` | | 수신 호스트명 |
|
||||
| 플래그 | 축약 | 설명 |
|
||||
| ---------------------------------------- | ---- | ---------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | 마지막 세션 이어서 실행 |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | 이어서 실행할 세션 ID |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | 세션을 이어갈 때 포크 생성 (`--continue` 또는 `--session`과 함께 사용) |
|
||||
| <nobr><code>{"--prompt"}</code></nobr> | | 사용할 프롬프트 |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | 사용할 모델 (`provider/model` 형식) |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | 사용할 에이전트 |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | 수신 포트 |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | | 수신 호스트명 |
|
||||
|
||||
---
|
||||
|
||||
@@ -78,10 +78,14 @@ opencode attach http://10.20.30.40:4096
|
||||
|
||||
#### 플래그
|
||||
|
||||
| 플래그 | 축약 | 설명 |
|
||||
| ----------- | ---- | -------------------------- |
|
||||
| `--dir` | | TUI를 시작할 작업 디렉터리 |
|
||||
| `--session` | `-s` | 이어서 실행할 세션 ID |
|
||||
| 플래그 | 축약 | 설명 |
|
||||
| ---------------------------------------- | ---- | -------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | TUI를 시작할 작업 디렉터리 |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | 마지막 세션 이어서 실행 |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | 이어서 실행할 세션 ID |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | 이어서 실행할 때 세션 포크 (`--continue` 또는 `--session`과 함께 사용) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | 기본 인증 비밀번호 (기본값: `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | 기본 인증 사용자 이름 (기본값: `OPENCODE_SERVER_USERNAME` 또는 `opencode`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -187,10 +191,10 @@ opencode github run
|
||||
|
||||
##### 플래그
|
||||
|
||||
| 플래그 | 설명 |
|
||||
| --------- | ------------------------- |
|
||||
| `--event` | 실행할 GitHub 모의 이벤트 |
|
||||
| `--token` | GitHub 개인 액세스 토큰 |
|
||||
| 플래그 | 설명 |
|
||||
| ------------------------------------- | ------------------------- |
|
||||
| <nobr><code>{"--event"}</code></nobr> | 실행할 GitHub 모의 이벤트 |
|
||||
| <nobr><code>{"--token"}</code></nobr> | GitHub 개인 액세스 토큰 |
|
||||
|
||||
---
|
||||
|
||||
@@ -296,10 +300,10 @@ opencode models anthropic
|
||||
|
||||
#### 플래그
|
||||
|
||||
| 플래그 | 설명 |
|
||||
| ----------- | ------------------------------------------------- |
|
||||
| `--refresh` | models.dev에서 모델 캐시 새로고침 |
|
||||
| `--verbose` | 더 자세한 모델 출력 사용(비용 등 메타데이터 포함) |
|
||||
| 플래그 | 설명 |
|
||||
| --------------------------------------- | ------------------------------------------------- |
|
||||
| <nobr><code>{"--refresh"}</code></nobr> | models.dev에서 모델 캐시 새로고침 |
|
||||
| <nobr><code>{"--verbose"}</code></nobr> | 더 자세한 모델 출력 사용(비용 등 메타데이터 포함) |
|
||||
|
||||
`--refresh` 플래그를 사용하면 캐시된 모델 목록을 갱신할 수 있습니다. provider에 새 모델이 추가된 뒤 OpenCode에서 바로 확인하고 싶을 때 유용합니다.
|
||||
|
||||
@@ -335,20 +339,25 @@ opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
|
||||
#### 플래그
|
||||
|
||||
| 플래그 | 축약 | 설명 |
|
||||
| ------------ | ---- | ---------------------------------------------------------------------- |
|
||||
| `--command` | | 실행할 명령(인수는 message로 전달) |
|
||||
| `--continue` | `-c` | 마지막 세션 이어서 실행 |
|
||||
| `--session` | `-s` | 이어서 실행할 세션 ID |
|
||||
| `--fork` | | 세션을 이어갈 때 포크 생성 (`--continue` 또는 `--session`과 함께 사용) |
|
||||
| `--share` | | 세션 공유 |
|
||||
| `--model` | `-m` | 사용할 모델 (`provider/model` 형식) |
|
||||
| `--agent` | | 사용할 에이전트 |
|
||||
| `--file` | `-f` | 메시지에 첨부할 파일 |
|
||||
| `--format` | | 출력 형식: default(포맷됨) 또는 json(원시 JSON 이벤트) |
|
||||
| `--title` | | 세션 제목(값이 없으면 프롬프트를 잘라 자동 생성) |
|
||||
| `--attach` | | 실행 중인 opencode 서버에 연결(예: http://localhost:4096) |
|
||||
| `--port` | | 로컬 서버 포트(기본값: 랜덤 포트) |
|
||||
| 플래그 | 축약 | 설명 |
|
||||
| ---------------------------------------- | ---- | -------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--command"}</code></nobr> | | 실행할 명령(인수는 message로 전달) |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | 마지막 세션 이어서 실행 |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | 이어서 실행할 세션 ID |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | 세션을 이어갈 때 포크 생성 (`--continue` 또는 `--session`과 함께 사용) |
|
||||
| <nobr><code>{"--share"}</code></nobr> | | 세션 공유 |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | 사용할 모델 (`provider/model` 형식) |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | 사용할 에이전트 |
|
||||
| <nobr><code>{"--file"}</code></nobr> | `-f` | 메시지에 첨부할 파일 |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | 출력 형식: default(포맷됨) 또는 json(원시 JSON 이벤트) |
|
||||
| <nobr><code>{"--title"}</code></nobr> | | 세션 제목(값이 없으면 프롬프트를 잘라 자동 생성) |
|
||||
| <nobr><code>{"--attach"}</code></nobr> | | 실행 중인 opencode 서버에 연결(예: http://localhost:4096) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | 기본 인증 비밀번호 (기본값: `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | 기본 인증 사용자 이름 (기본값: `OPENCODE_SERVER_USERNAME` 또는 `opencode`) |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | 실행할 디렉터리, 또는 연결 시 원격 서버 경로 |
|
||||
| <nobr><code>{"--variant"}</code></nobr> | | 모델 변형 (제공자별 추론 수준) |
|
||||
| <nobr><code>{"--thinking"}</code></nobr> | | 사고 블록 표시 |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | 로컬 서버 포트(기본값: 랜덤 포트) |
|
||||
|
||||
---
|
||||
|
||||
@@ -364,12 +373,12 @@ opencode serve
|
||||
|
||||
#### 플래그
|
||||
|
||||
| 플래그 | 설명 |
|
||||
| ------------ | --------------------------------- |
|
||||
| `--port` | 수신 포트 |
|
||||
| `--hostname` | 수신 호스트명 |
|
||||
| `--mdns` | mDNS 검색 활성화 |
|
||||
| `--cors` | 허용할 추가 브라우저 origin(CORS) |
|
||||
| 플래그 | 설명 |
|
||||
| ---------------------------------------- | --------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | 수신 포트 |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | 수신 호스트명 |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | mDNS 검색 활성화 |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | 허용할 추가 브라우저 origin(CORS) |
|
||||
|
||||
---
|
||||
|
||||
@@ -393,10 +402,10 @@ opencode session list
|
||||
|
||||
##### 플래그
|
||||
|
||||
| 플래그 | 축약 | 설명 |
|
||||
| ------------- | ---- | -------------------------------------- |
|
||||
| `--max-count` | `-n` | 최근 N개 세션만 표시 |
|
||||
| `--format` | | 출력 형식: table 또는 json(기본 table) |
|
||||
| 플래그 | 축약 | 설명 |
|
||||
| ----------------------------------------- | ---- | -------------------------------------- |
|
||||
| <nobr><code>{"--max-count"}</code></nobr> | `-n` | 최근 N개 세션만 표시 |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | 출력 형식: table 또는 json(기본 table) |
|
||||
|
||||
---
|
||||
|
||||
@@ -410,12 +419,12 @@ opencode stats
|
||||
|
||||
#### 플래그
|
||||
|
||||
| 플래그 | 설명 |
|
||||
| ----------- | ------------------------------------------------------------ |
|
||||
| `--days` | 최근 N일 통계 표시(기본값: 전체 기간) |
|
||||
| `--tools` | 표시할 도구 개수(기본값: 전체) |
|
||||
| `--models` | 모델 사용량 상세 표시(기본 숨김). 숫자를 주면 상위 N개 표시 |
|
||||
| `--project` | 프로젝트 필터(기본: 전체 프로젝트, 빈 문자열: 현재 프로젝트) |
|
||||
| 플래그 | 설명 |
|
||||
| --------------------------------------- | ------------------------------------------------------------ |
|
||||
| <nobr><code>{"--days"}</code></nobr> | 최근 N일 통계 표시(기본값: 전체 기간) |
|
||||
| <nobr><code>{"--tools"}</code></nobr> | 표시할 도구 개수(기본값: 전체) |
|
||||
| <nobr><code>{"--models"}</code></nobr> | 모델 사용량 상세 표시(기본 숨김). 숫자를 주면 상위 N개 표시 |
|
||||
| <nobr><code>{"--project"}</code></nobr> | 프로젝트 필터(기본: 전체 프로젝트, 빈 문자열: 현재 프로젝트) |
|
||||
|
||||
---
|
||||
|
||||
@@ -460,12 +469,12 @@ opencode web
|
||||
|
||||
#### 플래그
|
||||
|
||||
| 플래그 | 설명 |
|
||||
| ------------ | --------------------------------- |
|
||||
| `--port` | 수신 포트 |
|
||||
| `--hostname` | 수신 호스트명 |
|
||||
| `--mdns` | mDNS 검색 활성화 |
|
||||
| `--cors` | 허용할 추가 브라우저 origin(CORS) |
|
||||
| 플래그 | 설명 |
|
||||
| ---------------------------------------- | --------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | 수신 포트 |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | 수신 호스트명 |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | mDNS 검색 활성화 |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | 허용할 추가 브라우저 origin(CORS) |
|
||||
|
||||
---
|
||||
|
||||
@@ -481,11 +490,11 @@ opencode acp
|
||||
|
||||
#### 플래그
|
||||
|
||||
| 플래그 | 설명 |
|
||||
| ------------ | ------------- |
|
||||
| `--cwd` | 작업 디렉터리 |
|
||||
| `--port` | 수신 포트 |
|
||||
| `--hostname` | 수신 호스트명 |
|
||||
| 플래그 | 설명 |
|
||||
| ---------------------------------------- | ------------- |
|
||||
| <nobr><code>{"--cwd"}</code></nobr> | 작업 디렉터리 |
|
||||
| <nobr><code>{"--port"}</code></nobr> | 수신 포트 |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | 수신 호스트명 |
|
||||
|
||||
---
|
||||
|
||||
@@ -499,12 +508,12 @@ opencode uninstall
|
||||
|
||||
#### 플래그
|
||||
|
||||
| 플래그 | 축약 | 설명 |
|
||||
| --------------- | ---- | ------------------------------- |
|
||||
| `--keep-config` | `-c` | 설정 파일 유지 |
|
||||
| `--keep-data` | `-d` | 세션 데이터와 스냅샷 유지 |
|
||||
| `--dry-run` | | 실제 삭제 없이 삭제 대상만 표시 |
|
||||
| `--force` | `-f` | 확인 프롬프트 건너뛰기 |
|
||||
| 플래그 | 축약 | 설명 |
|
||||
| ------------------------------------------- | ---- | ------------------------------- |
|
||||
| <nobr><code>{"--keep-config"}</code></nobr> | `-c` | 설정 파일 유지 |
|
||||
| <nobr><code>{"--keep-data"}</code></nobr> | `-d` | 세션 데이터와 스냅샷 유지 |
|
||||
| <nobr><code>{"--dry-run"}</code></nobr> | | 실제 삭제 없이 삭제 대상만 표시 |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | 확인 프롬프트 건너뛰기 |
|
||||
|
||||
---
|
||||
|
||||
@@ -530,9 +539,9 @@ opencode upgrade v0.1.48
|
||||
|
||||
#### 플래그
|
||||
|
||||
| 플래그 | 축약 | 설명 |
|
||||
| ---------- | ---- | ------------------------------------------ |
|
||||
| `--method` | `-m` | 설치 방식 지정: curl, npm, pnpm, bun, brew |
|
||||
| 플래그 | 축약 | 설명 |
|
||||
| -------------------------------------- | ---- | ------------------------------------------ |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | 설치 방식 지정: curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
@@ -540,12 +549,12 @@ opencode upgrade v0.1.48
|
||||
|
||||
opencode CLI는 아래 전역 플래그를 지원합니다.
|
||||
|
||||
| 플래그 | 축약 | 설명 |
|
||||
| -------------- | ---- | ----------------------------------- |
|
||||
| `--help` | `-h` | 도움말 표시 |
|
||||
| `--version` | `-v` | 버전 출력 |
|
||||
| `--print-logs` | | 로그를 stderr로 출력 |
|
||||
| `--log-level` | | 로그 레벨(DEBUG, INFO, WARN, ERROR) |
|
||||
| 플래그 | 축약 | 설명 |
|
||||
| ------------------------------------------ | ---- | ----------------------------------- |
|
||||
| <nobr><code>{"--help"}</code></nobr> | `-h` | 도움말 표시 |
|
||||
| <nobr><code>{"--version"}</code></nobr> | `-v` | 버전 출력 |
|
||||
| <nobr><code>{"--print-logs"}</code></nobr> | | 로그를 stderr로 출력 |
|
||||
| <nobr><code>{"--log-level"}</code></nobr> | | 로그 레벨(DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -29,16 +29,16 @@ opencode [project]
|
||||
|
||||
#### Flagg
|
||||
|
||||
| Flagg | Kort | Beskrivelse |
|
||||
| ------------ | ---- | ------------------------------------------------------------------------ |
|
||||
| `--continue` | `-c` | Fortsett siste økt |
|
||||
| `--session` | `-s` | Økt ID for å fortsette |
|
||||
| `--fork` | | Forgren økten ved fortsettelse (bruk med `--continue` eller `--session`) |
|
||||
| `--prompt` | | Ledetekst som skal brukes |
|
||||
| `--model` | `-m` | Modell å bruke i form av leverandør/modell |
|
||||
| `--agent` | | Agent som skal brukes |
|
||||
| `--port` | | Port å lytte på |
|
||||
| `--hostname` | | Vertsnavn å lytte på |
|
||||
| Flagg | Kort | Beskrivelse |
|
||||
| ---------------------------------------- | ---- | ------------------------------------------------------------------------ |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Fortsett siste økt |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Økt ID for å fortsette |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Forgren økten ved fortsettelse (bruk med `--continue` eller `--session`) |
|
||||
| <nobr><code>{"--prompt"}</code></nobr> | | Ledetekst som skal brukes |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Modell å bruke i form av leverandør/modell |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Agent som skal brukes |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Port å lytte på |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | | Vertsnavn å lytte på |
|
||||
|
||||
---
|
||||
|
||||
@@ -78,10 +78,14 @@ opencode attach http://10.20.30.40:4096
|
||||
|
||||
#### Flagg
|
||||
|
||||
| Flagg | Kort | Beskrivelse |
|
||||
| ----------- | ---- | --------------------------------- |
|
||||
| `--dir` | | Arbeidskatalog for å starte TUI i |
|
||||
| `--session` | `-s` | Økt ID for å fortsette |
|
||||
| Flagg | Kort | Beskrivelse |
|
||||
| ---------------------------------------- | ---- | -------------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Arbeidskatalog for å starte TUI i |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Fortsett siste økt |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Økt ID for å fortsette |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Forgren økten ved fortsettelse (bruk med `--continue` eller `--session`) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Passord for grunnleggende autentisering (standard: `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Brukernavn for grunnleggende autentisering (standard: `OPENCODE_SERVER_USERNAME` eller `opencode`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -187,10 +191,10 @@ opencode github run
|
||||
|
||||
##### Flagg
|
||||
|
||||
| Flagg | Beskrivelse |
|
||||
| --------- | -------------------------------------------- |
|
||||
| `--event` | GitHub mock-hendelse agenten skal kjøres for |
|
||||
| `--token` | GitHub personlig tilgangsnøkkel |
|
||||
| Flagg | Beskrivelse |
|
||||
| ------------------------------------- | -------------------------------------------- |
|
||||
| <nobr><code>{"--event"}</code></nobr> | GitHub mock-hendelse agenten skal kjøres for |
|
||||
| <nobr><code>{"--token"}</code></nobr> | GitHub personlig tilgangsnøkkel |
|
||||
|
||||
---
|
||||
|
||||
@@ -296,10 +300,10 @@ opencode models anthropic
|
||||
|
||||
#### Flagg
|
||||
|
||||
| Flagg | Beskrivelse |
|
||||
| ----------- | ------------------------------------------------------------------- |
|
||||
| `--refresh` | Oppdater modellbufferen fra models.dev |
|
||||
| `--verbose` | Bruk mer detaljert modellutdata (inkluderer metadata som kostnader) |
|
||||
| Flagg | Beskrivelse |
|
||||
| --------------------------------------- | ------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--refresh"}</code></nobr> | Oppdater modellbufferen fra models.dev |
|
||||
| <nobr><code>{"--verbose"}</code></nobr> | Bruk mer detaljert modellutdata (inkluderer metadata som kostnader) |
|
||||
|
||||
Bruk `--refresh`-flagget for å oppdatere den bufrede modelllisten. Dette er nyttig når nye modeller er lagt til en leverandør og du vil se dem i OpenCode.
|
||||
|
||||
@@ -335,20 +339,25 @@ opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
|
||||
#### Flagg
|
||||
|
||||
| Flagg | Kort | Beskrivelse |
|
||||
| ------------ | ---- | ------------------------------------------------------------------------ |
|
||||
| `--command` | | Kommandoen for å kjøre, bruk melding for args |
|
||||
| `--continue` | `-c` | Fortsett siste økt |
|
||||
| `--session` | `-s` | Økt ID for å fortsette |
|
||||
| `--fork` | | Forgren økten ved fortsettelse (bruk med `--continue` eller `--session`) |
|
||||
| `--share` | | Del økten |
|
||||
| `--model` | `-m` | Modell å bruke i form av leverandør/modell |
|
||||
| `--agent` | | Agent å bruke |
|
||||
| `--file` | `-f` | Fil(er) som skal legges ved meldingen |
|
||||
| `--format` | | Format: standard (formatert) eller json (rå JSON hendelser) |
|
||||
| `--title` | | Tittel for økten (bruker avkortet ledetekst hvis ingen verdi er oppgitt) |
|
||||
| `--attach` | | Koble til en kjørende OpenCode-server (f.eks. http://localhost:4096) |
|
||||
| `--port` | | Port for den lokale serveren (standard til tilfeldig port) |
|
||||
| Flagg | Kort | Beskrivelse |
|
||||
| ---------------------------------------- | ---- | -------------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--command"}</code></nobr> | | Kommandoen for å kjøre, bruk melding for args |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Fortsett siste økt |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Økt ID for å fortsette |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Forgren økten ved fortsettelse (bruk med `--continue` eller `--session`) |
|
||||
| <nobr><code>{"--share"}</code></nobr> | | Del økten |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Modell å bruke i form av leverandør/modell |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Agent å bruke |
|
||||
| <nobr><code>{"--file"}</code></nobr> | `-f` | Fil(er) som skal legges ved meldingen |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Format: standard (formatert) eller json (rå JSON hendelser) |
|
||||
| <nobr><code>{"--title"}</code></nobr> | | Tittel for økten (bruker avkortet ledetekst hvis ingen verdi er oppgitt) |
|
||||
| <nobr><code>{"--attach"}</code></nobr> | | Koble til en kjørende OpenCode-server (f.eks. http://localhost:4096) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Passord for grunnleggende autentisering (standard: `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Brukernavn for grunnleggende autentisering (standard: `OPENCODE_SERVER_USERNAME` eller `opencode`) |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Katalog å kjøre i, eller sti på fjernserveren ved tilkobling |
|
||||
| <nobr><code>{"--variant"}</code></nobr> | | Modellvariant (leverandørspesifikk resonneringsinnsats) |
|
||||
| <nobr><code>{"--thinking"}</code></nobr> | | Vis tenkeblokker |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Port for den lokale serveren (standard til tilfeldig port) |
|
||||
|
||||
---
|
||||
|
||||
@@ -364,12 +373,12 @@ Dette starter en HTTP-server som gir API tilgang til OpenCode-funksjonalitet ute
|
||||
|
||||
#### Flagg
|
||||
|
||||
| Flagg | Beskrivelse |
|
||||
| ------------ | -------------------------------------------------- |
|
||||
| `--port` | Port å lytte på |
|
||||
| `--hostname` | Vertsnavn å lytte på |
|
||||
| `--mdns` | Aktiver mDNS-oppdagelse |
|
||||
| `--cors` | Ytterligere nettleseropprinnelse som tillater CORS |
|
||||
| Flagg | Beskrivelse |
|
||||
| ---------------------------------------- | -------------------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port å lytte på |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Vertsnavn å lytte på |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Aktiver mDNS-oppdagelse |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Ytterligere nettleseropprinnelse som tillater CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -393,10 +402,10 @@ opencode session list
|
||||
|
||||
##### Flagg
|
||||
|
||||
| Flagg | Kort | Beskrivelse |
|
||||
| ------------- | ---- | ---------------------------------------- |
|
||||
| `--max-count` | `-n` | Begrens til N siste økter |
|
||||
| `--format` | | Utdataformat: tabell eller json (tabell) |
|
||||
| Flagg | Kort | Beskrivelse |
|
||||
| ----------------------------------------- | ---- | ---------------------------------------- |
|
||||
| <nobr><code>{"--max-count"}</code></nobr> | `-n` | Begrens til N siste økter |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Utdataformat: tabell eller json (tabell) |
|
||||
|
||||
---
|
||||
|
||||
@@ -410,12 +419,12 @@ opencode stats
|
||||
|
||||
#### Flagg
|
||||
|
||||
| Flagg | Beskrivelse |
|
||||
| ----------- | -------------------------------------------------------------------------------- |
|
||||
| `--days` | Vis statistikk for de siste N dagene (hele tiden) |
|
||||
| `--tools` | Antall verktøy som skal vises (alle) |
|
||||
| `--models` | Vis oversikt over modellbruk (skjult som standard). Gi et tall for å vise topp N |
|
||||
| `--project` | Filtrer etter prosjekt (alle prosjekter, tom streng: gjeldende prosjekt) |
|
||||
| Flagg | Beskrivelse |
|
||||
| --------------------------------------- | -------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--days"}</code></nobr> | Vis statistikk for de siste N dagene (hele tiden) |
|
||||
| <nobr><code>{"--tools"}</code></nobr> | Antall verktøy som skal vises (alle) |
|
||||
| <nobr><code>{"--models"}</code></nobr> | Vis oversikt over modellbruk (skjult som standard). Gi et tall for å vise topp N |
|
||||
| <nobr><code>{"--project"}</code></nobr> | Filtrer etter prosjekt (alle prosjekter, tom streng: gjeldende prosjekt) |
|
||||
|
||||
---
|
||||
|
||||
@@ -460,12 +469,12 @@ Dette starter en HTTP-server og åpner en nettleser for å få tilgang til OpenC
|
||||
|
||||
#### Flagg
|
||||
|
||||
| Flagg | Beskrivelse |
|
||||
| ------------ | -------------------------------------------------- |
|
||||
| `--port` | Port å lytte på |
|
||||
| `--hostname` | Vertsnavn å lytte på |
|
||||
| `--mdns` | Aktiver mDNS-oppdagelse |
|
||||
| `--cors` | Ytterligere nettleseropprinnelse som tillater CORS |
|
||||
| Flagg | Beskrivelse |
|
||||
| ---------------------------------------- | -------------------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port å lytte på |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Vertsnavn å lytte på |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Aktiver mDNS-oppdagelse |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Ytterligere nettleseropprinnelse som tillater CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -481,11 +490,11 @@ Denne kommandoen starter en ACP-server som kommuniserer via stdin/stdout ved å
|
||||
|
||||
#### Flagg
|
||||
|
||||
| Flagg | Beskrivelse |
|
||||
| ------------ | -------------------- |
|
||||
| `--cwd` | Arbeidskatalog |
|
||||
| `--port` | Port å lytte på |
|
||||
| `--hostname` | Vertsnavn å lytte på |
|
||||
| Flagg | Beskrivelse |
|
||||
| ---------------------------------------- | -------------------- |
|
||||
| <nobr><code>{"--cwd"}</code></nobr> | Arbeidskatalog |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port å lytte på |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Vertsnavn å lytte på |
|
||||
|
||||
---
|
||||
|
||||
@@ -499,12 +508,12 @@ opencode uninstall
|
||||
|
||||
#### Flagg
|
||||
|
||||
| Flagg | Kort | Beskrivelse |
|
||||
| --------------- | ---- | --------------------------------------------- |
|
||||
| `--keep-config` | `-c` | Behold konfigurasjonsfiler |
|
||||
| `--keep-data` | `-d` | Behold øktdata og øyeblikksbilder |
|
||||
| `--dry-run` | | Vis hva som ville blitt fjernet uten å fjerne |
|
||||
| `--force` | `-f` | Hopp over bekreftelsesforespørsler |
|
||||
| Flagg | Kort | Beskrivelse |
|
||||
| ------------------------------------------- | ---- | --------------------------------------------- |
|
||||
| <nobr><code>{"--keep-config"}</code></nobr> | `-c` | Behold konfigurasjonsfiler |
|
||||
| <nobr><code>{"--keep-data"}</code></nobr> | `-d` | Behold øktdata og øyeblikksbilder |
|
||||
| <nobr><code>{"--dry-run"}</code></nobr> | | Vis hva som ville blitt fjernet uten å fjerne |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | Hopp over bekreftelsesforespørsler |
|
||||
|
||||
---
|
||||
|
||||
@@ -530,9 +539,9 @@ opencode upgrade v0.1.48
|
||||
|
||||
#### Flagg
|
||||
|
||||
| Flagg | Kort | Beskrivelse |
|
||||
| ---------- | ---- | -------------------------------------------------------------- |
|
||||
| `--method` | `-m` | Installasjonsmetoden som ble brukt: curl, npm, pnpm, bun, brew |
|
||||
| Flagg | Kort | Beskrivelse |
|
||||
| -------------------------------------- | ---- | -------------------------------------------------------------- |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | Installasjonsmetoden som ble brukt: curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
@@ -540,12 +549,12 @@ opencode upgrade v0.1.48
|
||||
|
||||
OpenCode CLI bruker følgende globale flagg.
|
||||
|
||||
| Flagg | Kort | Beskrivelse |
|
||||
| -------------- | ---- | ----------------------------------- |
|
||||
| `--help` | `-h` | Vis hjelp |
|
||||
| `--version` | `-v` | Skriv ut versjonsnummer |
|
||||
| `--print-logs` | | Skriv ut logger til stderr |
|
||||
| `--log-level` | | Loggnivå (DEBUG, INFO, WARN, ERROR) |
|
||||
| Flagg | Kort | Beskrivelse |
|
||||
| ------------------------------------------ | ---- | ----------------------------------- |
|
||||
| <nobr><code>{"--help"}</code></nobr> | `-h` | Vis hjelp |
|
||||
| <nobr><code>{"--version"}</code></nobr> | `-v` | Skriv ut versjonsnummer |
|
||||
| <nobr><code>{"--print-logs"}</code></nobr> | | Skriv ut logger til stderr |
|
||||
| <nobr><code>{"--log-level"}</code></nobr> | | Loggnivå (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -29,16 +29,16 @@ opencode [project]
|
||||
|
||||
#### Flagi
|
||||
|
||||
| Flaga | Skrót | Opis |
|
||||
| ------------ | ----- | ----------------------------------------------------------------------- |
|
||||
| `--continue` | `-c` | Kontynuuj ostatnią sesję |
|
||||
| `--session` | `-s` | Identyfikator sesji do kontynuowania |
|
||||
| `--fork` | | Sklonuj sesję podczas kontynuacji (użyj z `--continue` lub `--session`) |
|
||||
| `--prompt` | | Monit do użycia |
|
||||
| `--model` | `-m` | Model do użycia w formacie dostawca/model |
|
||||
| `--agent` | | Agent do użycia |
|
||||
| `--port` | | Port do nasłuchiwania |
|
||||
| `--hostname` | | Nazwa hosta, do której należy się powiązać |
|
||||
| Flaga | Skrót | Opis |
|
||||
| ---------------------------------------- | ----- | ----------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Kontynuuj ostatnią sesję |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Identyfikator sesji do kontynuowania |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Sklonuj sesję podczas kontynuacji (użyj z `--continue` lub `--session`) |
|
||||
| <nobr><code>{"--prompt"}</code></nobr> | | Monit do użycia |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Model do użycia w formacie dostawca/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Agent do użycia |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Port do nasłuchiwania |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | | Nazwa hosta, do której należy się powiązać |
|
||||
|
||||
---
|
||||
|
||||
@@ -78,10 +78,14 @@ opencode attach http://10.20.30.40:4096
|
||||
|
||||
#### Flagi
|
||||
|
||||
| Flaga | Skrót | Opis |
|
||||
| ----------- | ----- | --------------------------------------- |
|
||||
| `--dir` | | Katalog roboczy, w którym uruchomić TUI |
|
||||
| `--session` | `-s` | Identyfikator sesji do kontynuowania |
|
||||
| Flaga | Skrót | Opis |
|
||||
| ---------------------------------------- | ----- | ----------------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Katalog roboczy, w którym uruchomić TUI |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Kontynuuj ostatnią sesję |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Identyfikator sesji do kontynuowania |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Rozgałęź sesję podczas kontynuowania (użyj z `--continue` lub `--session`) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Hasło uwierzytelniania podstawowego (domyślnie `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Nazwa użytkownika uwierzytelniania podstawowego (domyślnie `OPENCODE_SERVER_USERNAME` lub `opencode`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -187,10 +191,10 @@ opencode github run
|
||||
|
||||
##### Flagi
|
||||
|
||||
| Flaga | Opis |
|
||||
| --------- | ---------------------------------------- |
|
||||
| `--event` | Zdarzenie GitHub, które wyzwoliło agenta |
|
||||
| `--token` | Osobisty token dostępu GitHub |
|
||||
| Flaga | Opis |
|
||||
| ------------------------------------- | ---------------------------------------- |
|
||||
| <nobr><code>{"--event"}</code></nobr> | Zdarzenie GitHub, które wyzwoliło agenta |
|
||||
| <nobr><code>{"--token"}</code></nobr> | Osobisty token dostępu GitHub |
|
||||
|
||||
---
|
||||
|
||||
@@ -296,10 +300,10 @@ opencode models anthropic
|
||||
|
||||
#### Flagi
|
||||
|
||||
| Flaga | Opis |
|
||||
| ----------- | ------------------------------------------------------------------------------- |
|
||||
| `--refresh` | Odśwież pamięć podręczną modeli |
|
||||
| `--verbose` | Bardziej szczegółowe dane wyjściowe modelu (zawiera metadane, takie jak koszty) |
|
||||
| Flaga | Opis |
|
||||
| --------------------------------------- | ------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--refresh"}</code></nobr> | Odśwież pamięć podręczną modeli |
|
||||
| <nobr><code>{"--verbose"}</code></nobr> | Bardziej szczegółowe dane wyjściowe modelu (zawiera metadane, takie jak koszty) |
|
||||
|
||||
Użyj flagi `--refresh`, aby zaktualizować listę modeli w pamięci podręcznej. Jest to przydatne, gdy dostawca dodał nowe modele, które chcesz zobaczyć w OpenCode.
|
||||
|
||||
@@ -335,20 +339,25 @@ opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
|
||||
#### Flagi
|
||||
|
||||
| Flaga | Skrót | Opis |
|
||||
| ------------ | ----- | ----------------------------------------------------------------------- |
|
||||
| `--command` | | Polecenie do uruchomienia, reszta to argumenty |
|
||||
| `--continue` | `-c` | Kontynuuj ostatnią sesję |
|
||||
| `--session` | `-s` | Identyfikator sesji do kontynuowania |
|
||||
| `--fork` | | Sklonuj sesję podczas kontynuacji (użyj z `--continue` lub `--session`) |
|
||||
| `--share` | | Udostępnij sesję po zakończeniu |
|
||||
| `--model` | `-m` | Model do użycia w formacie dostawca/model |
|
||||
| `--agent` | | Agent do użycia |
|
||||
| `--file` | `-f` | Pliki do załączenia do wiadomości |
|
||||
| `--format` | | Format wyjściowy: `default` (sformatowany) lub `json` (surowy JSON) |
|
||||
| `--title` | | Tytuł sesji (jeśli nie podano, zostanie wygenerowany z promptu) |
|
||||
| `--attach` | | Dołącz do działającego serwera OpenCode (np. http://localhost:4096) |
|
||||
| `--port` | | Port dla serwera lokalnego (domyślnie losowy) |
|
||||
| Flaga | Skrót | Opis |
|
||||
| ---------------------------------------- | ----- | ----------------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--command"}</code></nobr> | | Polecenie do uruchomienia, reszta to argumenty |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Kontynuuj ostatnią sesję |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Identyfikator sesji do kontynuowania |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Sklonuj sesję podczas kontynuacji (użyj z `--continue` lub `--session`) |
|
||||
| <nobr><code>{"--share"}</code></nobr> | | Udostępnij sesję po zakończeniu |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Model do użycia w formacie dostawca/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Agent do użycia |
|
||||
| <nobr><code>{"--file"}</code></nobr> | `-f` | Pliki do załączenia do wiadomości |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Format wyjściowy: `default` (sformatowany) lub `json` (surowy JSON) |
|
||||
| <nobr><code>{"--title"}</code></nobr> | | Tytuł sesji (jeśli nie podano, zostanie wygenerowany z promptu) |
|
||||
| <nobr><code>{"--attach"}</code></nobr> | | Dołącz do działającego serwera OpenCode (np. http://localhost:4096) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Hasło uwierzytelniania podstawowego (domyślnie `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Nazwa użytkownika uwierzytelniania podstawowego (domyślnie `OPENCODE_SERVER_USERNAME` lub `opencode`) |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Katalog do uruchomienia lub ścieżka na zdalnym serwerze podczas dołączania |
|
||||
| <nobr><code>{"--variant"}</code></nobr> | | Wariant modelu (poziom wnioskowania specyficzny dla dostawcy) |
|
||||
| <nobr><code>{"--thinking"}</code></nobr> | | Pokaż bloki myślenia |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Port dla serwera lokalnego (domyślnie losowy) |
|
||||
|
||||
---
|
||||
|
||||
@@ -364,12 +373,12 @@ Uruchamia to serwer HTTP, który zapewnia dostęp do API OpenCode bez interfejsu
|
||||
|
||||
#### Flagi
|
||||
|
||||
| Flaga | Opis |
|
||||
| ------------ | ------------------------------------------ |
|
||||
| `--port` | Port do nasłuchiwania |
|
||||
| `--hostname` | Nazwa hosta, do której należy się powiązać |
|
||||
| `--mdns` | Włącz wykrywanie mDNS |
|
||||
| `--cors` | Dodatkowe dozwolone źródła CORS |
|
||||
| Flaga | Opis |
|
||||
| ---------------------------------------- | ------------------------------------------ |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port do nasłuchiwania |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Nazwa hosta, do której należy się powiązać |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Włącz wykrywanie mDNS |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Dodatkowe dozwolone źródła CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -393,10 +402,10 @@ opencode session list
|
||||
|
||||
##### Flagi
|
||||
|
||||
| Flaga | Skrót | Opis |
|
||||
| ------------- | ----- | ------------------------------------------ |
|
||||
| `--max-count` | `-n` | Ogranicz do ostatnich N sesji |
|
||||
| `--format` | | Format wyjściowy: tabela lub json (tabela) |
|
||||
| Flaga | Skrót | Opis |
|
||||
| ----------------------------------------- | ----- | ------------------------------------------ |
|
||||
| <nobr><code>{"--max-count"}</code></nobr> | `-n` | Ogranicz do ostatnich N sesji |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Format wyjściowy: tabela lub json (tabela) |
|
||||
|
||||
---
|
||||
|
||||
@@ -410,12 +419,12 @@ opencode stats
|
||||
|
||||
#### Flagi
|
||||
|
||||
| Flaga | Opis |
|
||||
| ----------- | ------------------------------------------------------------------------------------- |
|
||||
| `--days` | Pokaż statystyki z ostatnich N dni (domyślnie: cały czas) |
|
||||
| `--tools` | Pokaż użycie poszczególnych narzędzi (domyślnie: wszystkie) |
|
||||
| `--models` | Pokaż podział na modele (domyślnie ukryty). Podaj liczbę, aby pokazać N najczęstszych |
|
||||
| `--project` | Filtruj według projektu (domyślnie: wszystkie projekty, pusty ciąg: bieżący projekt) |
|
||||
| Flaga | Opis |
|
||||
| --------------------------------------- | ------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--days"}</code></nobr> | Pokaż statystyki z ostatnich N dni (domyślnie: cały czas) |
|
||||
| <nobr><code>{"--tools"}</code></nobr> | Pokaż użycie poszczególnych narzędzi (domyślnie: wszystkie) |
|
||||
| <nobr><code>{"--models"}</code></nobr> | Pokaż podział na modele (domyślnie ukryty). Podaj liczbę, aby pokazać N najczęstszych |
|
||||
| <nobr><code>{"--project"}</code></nobr> | Filtruj według projektu (domyślnie: wszystkie projekty, pusty ciąg: bieżący projekt) |
|
||||
|
||||
---
|
||||
|
||||
@@ -460,12 +469,12 @@ Uruchamia to serwer HTTP i udostępnia OpenCode przez interfejs przeglądarkowy.
|
||||
|
||||
#### Flagi
|
||||
|
||||
| Flaga | Opis |
|
||||
| ------------ | ------------------------------------------ |
|
||||
| `--port` | Port do nasłuchiwania |
|
||||
| `--hostname` | Nazwa hosta, do której należy się powiązać |
|
||||
| `--mdns` | Włącz wykrywanie mDNS |
|
||||
| `--cors` | Dodatkowe dozwolone źródła CORS |
|
||||
| Flaga | Opis |
|
||||
| ---------------------------------------- | ------------------------------------------ |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port do nasłuchiwania |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Nazwa hosta, do której należy się powiązać |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Włącz wykrywanie mDNS |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Dodatkowe dozwolone źródła CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -481,11 +490,11 @@ Uruchamia serwer ACP, który komunikuje się przez stdin/stdout przy użyciu JSO
|
||||
|
||||
#### Flagi
|
||||
|
||||
| Flaga | Opis |
|
||||
| ------------ | ------------------------------------------ |
|
||||
| `--cwd` | Katalog roboczy |
|
||||
| `--port` | Port do nasłuchiwania |
|
||||
| `--hostname` | Nazwa hosta, do której należy się powiązać |
|
||||
| Flaga | Opis |
|
||||
| ---------------------------------------- | ------------------------------------------ |
|
||||
| <nobr><code>{"--cwd"}</code></nobr> | Katalog roboczy |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Port do nasłuchiwania |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Nazwa hosta, do której należy się powiązać |
|
||||
|
||||
---
|
||||
|
||||
@@ -499,12 +508,12 @@ opencode uninstall
|
||||
|
||||
#### Flagi
|
||||
|
||||
| Flaga | Skrót | Opis |
|
||||
| --------------- | ----- | ----------------------------- |
|
||||
| `--keep-config` | `-c` | Zachowaj pliki konfiguracyjne |
|
||||
| `--keep-data` | `-d` | Zachowaj dane sesji i migawki |
|
||||
| `--dry-run` | | Pokaż co zostanie usunięte |
|
||||
| `--force` | `-f` | Pomiń monity o potwierdzenie |
|
||||
| Flaga | Skrót | Opis |
|
||||
| ------------------------------------------- | ----- | ----------------------------- |
|
||||
| <nobr><code>{"--keep-config"}</code></nobr> | `-c` | Zachowaj pliki konfiguracyjne |
|
||||
| <nobr><code>{"--keep-data"}</code></nobr> | `-d` | Zachowaj dane sesji i migawki |
|
||||
| <nobr><code>{"--dry-run"}</code></nobr> | | Pokaż co zostanie usunięte |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | Pomiń monity o potwierdzenie |
|
||||
|
||||
---
|
||||
|
||||
@@ -530,9 +539,9 @@ opencode upgrade v0.1.48
|
||||
|
||||
#### Flagi
|
||||
|
||||
| Flaga | Skrót | Opis |
|
||||
| ---------- | ----- | --------------------------------------------------- |
|
||||
| `--method` | `-m` | Wymuś metodę instalacji: curl, npm, pnpm, bun, brew |
|
||||
| Flaga | Skrót | Opis |
|
||||
| -------------------------------------- | ----- | --------------------------------------------------- |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | Wymuś metodę instalacji: curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
@@ -540,12 +549,12 @@ opencode upgrade v0.1.48
|
||||
|
||||
Interfejs CLI OpenCode przyjmuje następujące flagi globalne dla każdego polecenia.
|
||||
|
||||
| Flaga | Skrót | Opis |
|
||||
| -------------- | ----- | ------------------------------------------- |
|
||||
| `--help` | `-h` | Wyświetl pomoc |
|
||||
| `--version` | `-v` | Wydrukuj numer wersji |
|
||||
| `--print-logs` | | Drukuj logi na stderr |
|
||||
| `--log-level` | | Poziom logowania (DEBUG, INFO, WARN, ERROR) |
|
||||
| Flaga | Skrót | Opis |
|
||||
| ------------------------------------------ | ----- | ------------------------------------------- |
|
||||
| <nobr><code>{"--help"}</code></nobr> | `-h` | Wyświetl pomoc |
|
||||
| <nobr><code>{"--version"}</code></nobr> | `-v` | Wydrukuj numer wersji |
|
||||
| <nobr><code>{"--print-logs"}</code></nobr> | | Drukuj logi na stderr |
|
||||
| <nobr><code>{"--log-level"}</code></nobr> | | Poziom logowania (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -29,16 +29,16 @@ opencode [project]
|
||||
|
||||
#### Opções
|
||||
|
||||
| Flag | Curto | Descrição |
|
||||
| ------------ | ----- | -------------------------------------------------------------------------- |
|
||||
| `--continue` | `-c` | Continue a última sessão |
|
||||
| `--session` | `-s` | ID da sessão para continuar |
|
||||
| `--fork` | | Criar um fork da sessão ao continuar (use com `--continue` ou `--session`) |
|
||||
| `--prompt` | | Prompt a ser usado |
|
||||
| `--model` | `-m` | Modelo a ser usado na forma de provider/model |
|
||||
| `--agent` | | Agente a ser usado |
|
||||
| `--port` | | Porta para escutar |
|
||||
| `--hostname` | | Nome do host para escutar |
|
||||
| Flag | Curto | Descrição |
|
||||
| ---------------------------------------- | ----- | -------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Continue a última sessão |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | ID da sessão para continuar |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Criar um fork da sessão ao continuar (use com `--continue` ou `--session`) |
|
||||
| <nobr><code>{"--prompt"}</code></nobr> | | Prompt a ser usado |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Modelo a ser usado na forma de provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Agente a ser usado |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Porta para escutar |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | | Nome do host para escutar |
|
||||
|
||||
---
|
||||
|
||||
@@ -78,10 +78,14 @@ opencode attach http://10.20.30.40:4096
|
||||
|
||||
#### Opções
|
||||
|
||||
| Flag | Curto | Descrição |
|
||||
| ----------- | ----- | ---------------------------------------- |
|
||||
| `--dir` | | Diretório de trabalho para iniciar o TUI |
|
||||
| `--session` | `-s` | ID da sessão para continuar |
|
||||
| Flag | Curto | Descrição |
|
||||
| ---------------------------------------- | ----- | --------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Diretório de trabalho para iniciar o TUI |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Continuar a última sessão |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | ID da sessão para continuar |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Bifurcar a sessão ao continuar (use com `--continue` ou `--session`) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Senha de autenticação básica (padrão: `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Usuário de autenticação básica (padrão: `OPENCODE_SERVER_USERNAME` ou `opencode`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -187,10 +191,10 @@ opencode github run
|
||||
|
||||
##### Opções
|
||||
|
||||
| Flag | Descrição |
|
||||
| --------- | ------------------------------------------------ |
|
||||
| `--event` | Evento simulado do GitHub para executar o agente |
|
||||
| `--token` | Token de acesso pessoal do GitHub |
|
||||
| Flag | Descrição |
|
||||
| ------------------------------------- | ------------------------------------------------ |
|
||||
| <nobr><code>{"--event"}</code></nobr> | Evento simulado do GitHub para executar o agente |
|
||||
| <nobr><code>{"--token"}</code></nobr> | Token de acesso pessoal do GitHub |
|
||||
|
||||
---
|
||||
|
||||
@@ -296,10 +300,10 @@ opencode models anthropic
|
||||
|
||||
#### Opções
|
||||
|
||||
| Flag | Descrição |
|
||||
| ----------- | --------------------------------------------------------------------- |
|
||||
| `--refresh` | Atualiza o cache de modelos a partir do models.dev |
|
||||
| `--verbose` | Use uma saída de modelo mais detalhada (inclui metadados como custos) |
|
||||
| Flag | Descrição |
|
||||
| --------------------------------------- | --------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--refresh"}</code></nobr> | Atualiza o cache de modelos a partir do models.dev |
|
||||
| <nobr><code>{"--verbose"}</code></nobr> | Use uma saída de modelo mais detalhada (inclui metadados como custos) |
|
||||
|
||||
Use a flag `--refresh` para atualizar a lista de modelos em cache. Isso é útil quando novos modelos foram adicionados a um provedor e você deseja vê-los no opencode.
|
||||
|
||||
@@ -335,20 +339,25 @@ opencode run --attach http://localhost:4096 "Explique async/await em JavaScript"
|
||||
|
||||
#### Opções
|
||||
|
||||
| Flag | Curto | Descrição |
|
||||
| ------------ | ----- | ----------------------------------------------------------------------------- |
|
||||
| `--command` | | O comando a ser executado, use mensagem para argumentos |
|
||||
| `--continue` | `-c` | Continue a última sessão |
|
||||
| `--session` | `-s` | ID da sessão para continuar |
|
||||
| `--fork` | | Criar um fork da sessão ao continuar (use com `--continue` ou `--session`) |
|
||||
| `--share` | | Compartilhe a sessão |
|
||||
| `--model` | `-m` | Modelo a ser usado na forma de provider/model |
|
||||
| `--agent` | | Agente a ser usado |
|
||||
| `--file` | `-f` | Arquivo(s) a serem anexados à mensagem |
|
||||
| `--format` | | Formato: padrão (formatado) ou json (eventos JSON brutos) |
|
||||
| `--title` | | Título para a sessão (usa o prompt truncado se nenhum valor for fornecido) |
|
||||
| `--attach` | | Anexe a um servidor opencode em execução (por exemplo, http://localhost:4096) |
|
||||
| `--port` | | Porta para o servidor local (padrão para porta aleatória) |
|
||||
| Flag | Curto | Descrição |
|
||||
| ---------------------------------------- | ----- | --------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--command"}</code></nobr> | | O comando a ser executado, use mensagem para argumentos |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Continue a última sessão |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | ID da sessão para continuar |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Criar um fork da sessão ao continuar (use com `--continue` ou `--session`) |
|
||||
| <nobr><code>{"--share"}</code></nobr> | | Compartilhe a sessão |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Modelo a ser usado na forma de provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Agente a ser usado |
|
||||
| <nobr><code>{"--file"}</code></nobr> | `-f` | Arquivo(s) a serem anexados à mensagem |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Formato: padrão (formatado) ou json (eventos JSON brutos) |
|
||||
| <nobr><code>{"--title"}</code></nobr> | | Título para a sessão (usa o prompt truncado se nenhum valor for fornecido) |
|
||||
| <nobr><code>{"--attach"}</code></nobr> | | Anexe a um servidor opencode em execução (por exemplo, http://localhost:4096) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Senha de autenticação básica (padrão: `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Usuário de autenticação básica (padrão: `OPENCODE_SERVER_USERNAME` ou `opencode`) |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Diretório de execução, ou caminho no servidor remoto ao anexar |
|
||||
| <nobr><code>{"--variant"}</code></nobr> | | Variante do modelo (nível de raciocínio específico do provedor) |
|
||||
| <nobr><code>{"--thinking"}</code></nobr> | | Mostrar blocos de pensamento |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Porta para o servidor local (padrão para porta aleatória) |
|
||||
|
||||
---
|
||||
|
||||
@@ -364,12 +373,12 @@ Isso inicia um servidor HTTP que fornece acesso à funcionalidade do opencode se
|
||||
|
||||
#### Opções
|
||||
|
||||
| Flag | Descrição |
|
||||
| ------------ | ----------------------------------------------------- |
|
||||
| `--port` | Porta para escutar |
|
||||
| `--hostname` | Nome do host para escutar |
|
||||
| `--mdns` | Habilitar descoberta mDNS |
|
||||
| `--cors` | Origem(ns) de navegador adicionais para permitir CORS |
|
||||
| Flag | Descrição |
|
||||
| ---------------------------------------- | ----------------------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Porta para escutar |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Nome do host para escutar |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Habilitar descoberta mDNS |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Origem(ns) de navegador adicionais para permitir CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -393,10 +402,10 @@ opencode session list
|
||||
|
||||
##### Opções
|
||||
|
||||
| Flag | Curto | Descrição |
|
||||
| ------------- | ----- | ----------------------------------------- |
|
||||
| `--max-count` | `-n` | Limitar às N sessões mais recentes |
|
||||
| `--format` | | Formato de saída: tabela ou json (tabela) |
|
||||
| Flag | Curto | Descrição |
|
||||
| ----------------------------------------- | ----- | ----------------------------------------- |
|
||||
| <nobr><code>{"--max-count"}</code></nobr> | `-n` | Limitar às N sessões mais recentes |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Formato de saída: tabela ou json (tabela) |
|
||||
|
||||
---
|
||||
|
||||
@@ -410,12 +419,12 @@ opencode stats
|
||||
|
||||
#### Opções
|
||||
|
||||
| Flag | Descrição |
|
||||
| ----------- | ---------------------------------------------------------------------------------------------------- |
|
||||
| `--days` | Mostre estatísticas dos últimos N dias (todo o tempo) |
|
||||
| `--tools` | Número de ferramentas a serem mostradas (todas) |
|
||||
| `--models` | Mostre a divisão do uso de modelos (oculto por padrão). Passe um número para mostrar os N principais |
|
||||
| `--project` | Filtrar por projeto (todos os projetos, string vazia: projeto atual) |
|
||||
| Flag | Descrição |
|
||||
| --------------------------------------- | ---------------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--days"}</code></nobr> | Mostre estatísticas dos últimos N dias (todo o tempo) |
|
||||
| <nobr><code>{"--tools"}</code></nobr> | Número de ferramentas a serem mostradas (todas) |
|
||||
| <nobr><code>{"--models"}</code></nobr> | Mostre a divisão do uso de modelos (oculto por padrão). Passe um número para mostrar os N principais |
|
||||
| <nobr><code>{"--project"}</code></nobr> | Filtrar por projeto (todos os projetos, string vazia: projeto atual) |
|
||||
|
||||
---
|
||||
|
||||
@@ -460,12 +469,12 @@ Isso inicia um servidor HTTP e abre um navegador para acessar o opencode atravé
|
||||
|
||||
#### Opções
|
||||
|
||||
| Flag | Descrição |
|
||||
| ------------ | ----------------------------------------------------- |
|
||||
| `--port` | Porta para escutar |
|
||||
| `--hostname` | Nome do host para escutar |
|
||||
| `--mdns` | Habilitar descoberta mDNS |
|
||||
| `--cors` | Origem(ns) de navegador adicionais para permitir CORS |
|
||||
| Flag | Descrição |
|
||||
| ---------------------------------------- | ----------------------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Porta para escutar |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Nome do host para escutar |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Habilitar descoberta mDNS |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Origem(ns) de navegador adicionais para permitir CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -481,11 +490,11 @@ Este comando inicia um servidor ACP que se comunica via stdin/stdout usando nd-J
|
||||
|
||||
#### Opções
|
||||
|
||||
| Flag | Descrição |
|
||||
| ------------ | ------------------------- |
|
||||
| `--cwd` | Diretório de trabalho |
|
||||
| `--port` | Porta para escutar |
|
||||
| `--hostname` | Nome do host para escutar |
|
||||
| Flag | Descrição |
|
||||
| ---------------------------------------- | ------------------------- |
|
||||
| <nobr><code>{"--cwd"}</code></nobr> | Diretório de trabalho |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Porta para escutar |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Nome do host para escutar |
|
||||
|
||||
---
|
||||
|
||||
@@ -499,12 +508,12 @@ opencode uninstall
|
||||
|
||||
#### Opções
|
||||
|
||||
| Flag | Curto | Descrição |
|
||||
| --------------- | ----- | ---------------------------------------- |
|
||||
| `--keep-config` | `-c` | Manter arquivos de configuração |
|
||||
| `--keep-data` | `-d` | Manter dados de sessão e snapshots |
|
||||
| `--dry-run` | | Mostrar o que seria removido sem remover |
|
||||
| `--force` | `-f` | Pular prompts de confirmação |
|
||||
| Flag | Curto | Descrição |
|
||||
| ------------------------------------------- | ----- | ---------------------------------------- |
|
||||
| <nobr><code>{"--keep-config"}</code></nobr> | `-c` | Manter arquivos de configuração |
|
||||
| <nobr><code>{"--keep-data"}</code></nobr> | `-d` | Manter dados de sessão e snapshots |
|
||||
| <nobr><code>{"--dry-run"}</code></nobr> | | Mostrar o que seria removido sem remover |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | Pular prompts de confirmação |
|
||||
|
||||
---
|
||||
|
||||
@@ -530,9 +539,9 @@ opencode upgrade v0.1.48
|
||||
|
||||
#### Opções
|
||||
|
||||
| Flag | Curto | Descrição |
|
||||
| ---------- | ----- | ---------------------------------------------------------------- |
|
||||
| `--method` | `-m` | O método de instalação que foi usado; curl, npm, pnpm, bun, brew |
|
||||
| Flag | Curto | Descrição |
|
||||
| -------------------------------------- | ----- | ---------------------------------------------------------------- |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | O método de instalação que foi usado; curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
@@ -540,12 +549,12 @@ opencode upgrade v0.1.48
|
||||
|
||||
A CLI do opencode aceita as seguintes flags globais.
|
||||
|
||||
| Flag | Curto | Descrição |
|
||||
| -------------- | ----- | --------------------------------------- |
|
||||
| `--help` | `-h` | Exibir ajuda |
|
||||
| `--version` | `-v` | Imprimir número da versão |
|
||||
| `--print-logs` | | Imprimir logs no stderr |
|
||||
| `--log-level` | | Nível de log (DEBUG, INFO, WARN, ERROR) |
|
||||
| Flag | Curto | Descrição |
|
||||
| ------------------------------------------ | ----- | --------------------------------------- |
|
||||
| <nobr><code>{"--help"}</code></nobr> | `-h` | Exibir ajuda |
|
||||
| <nobr><code>{"--version"}</code></nobr> | `-v` | Imprimir número da versão |
|
||||
| <nobr><code>{"--print-logs"}</code></nobr> | | Imprimir logs no stderr |
|
||||
| <nobr><code>{"--log-level"}</code></nobr> | | Nível de log (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -29,16 +29,16 @@ opencode [project]
|
||||
|
||||
#### Флаги
|
||||
|
||||
| Флаг | Короткий | Описание |
|
||||
| ------------ | -------- | ----------------------------------------------------------------------------- |
|
||||
| `--continue` | `-c` | Продолжить последний сеанс |
|
||||
| `--session` | `-s` | Идентификатор сеанса для продолжения |
|
||||
| `--fork` | | Разветвить сеанс при продолжении (используйте с `--continue` или `--session`) |
|
||||
| `--prompt` | | Промпт для использования |
|
||||
| `--model` | `-m` | Модель для использования в виде поставщика/модели. |
|
||||
| `--agent` | | Агент для использования |
|
||||
| `--port` | | Порт для прослушивания |
|
||||
| `--hostname` | | Имя хоста для прослушивания |
|
||||
| Флаг | Короткий | Описание |
|
||||
| ---------------------------------------- | -------- | ----------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Продолжить последний сеанс |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Идентификатор сеанса для продолжения |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Разветвить сеанс при продолжении (используйте с `--continue` или `--session`) |
|
||||
| <nobr><code>{"--prompt"}</code></nobr> | | Промпт для использования |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Модель для использования в виде поставщика/модели. |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Агент для использования |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Порт для прослушивания |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | | Имя хоста для прослушивания |
|
||||
|
||||
---
|
||||
|
||||
@@ -78,10 +78,14 @@ opencode attach http://10.20.30.40:4096
|
||||
|
||||
#### Флаги
|
||||
|
||||
| Флаг | Короткий | Описание |
|
||||
| ----------- | -------- | ------------------------------------ |
|
||||
| `--dir` | | Рабочий каталог для запуска TUI |
|
||||
| `--session` | `-s` | Идентификатор сеанса для продолжения |
|
||||
| Флаг | Короткий | Описание |
|
||||
| ---------------------------------------- | -------- | ------------------------------------------------------------------------------------------------ |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Рабочий каталог для запуска TUI |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Продолжить последний сеанс |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Идентификатор сеанса для продолжения |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Создать ответвление сеанса при продолжении (используйте с `--continue` или `--session`) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Пароль базовой аутентификации (по умолчанию `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Имя пользователя базовой аутентификации (по умолчанию `OPENCODE_SERVER_USERNAME` или `opencode`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -187,10 +191,10 @@ opencode github run
|
||||
|
||||
##### Флаги
|
||||
|
||||
| Флаг | Описание |
|
||||
| --------- | --------------------------------------------- |
|
||||
| `--event` | Имитирующее событие GitHub для запуска агента |
|
||||
| `--token` | Токен личного доступа GitHub |
|
||||
| Флаг | Описание |
|
||||
| ------------------------------------- | --------------------------------------------- |
|
||||
| <nobr><code>{"--event"}</code></nobr> | Имитирующее событие GitHub для запуска агента |
|
||||
| <nobr><code>{"--token"}</code></nobr> | Токен личного доступа GitHub |
|
||||
|
||||
---
|
||||
|
||||
@@ -296,10 +300,10 @@ opencode models anthropic
|
||||
|
||||
#### Флаги
|
||||
|
||||
| Флаг | Описание |
|
||||
| ----------- | --------------------------------------------------------------------------------- |
|
||||
| `--refresh` | Обновите кеш моделей на сайте models.dev. |
|
||||
| `--verbose` | Используйте более подробный вывод модели (включая метаданные, такие как затраты). |
|
||||
| Флаг | Описание |
|
||||
| --------------------------------------- | --------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--refresh"}</code></nobr> | Обновите кеш моделей на сайте models.dev. |
|
||||
| <nobr><code>{"--verbose"}</code></nobr> | Используйте более подробный вывод модели (включая метаданные, такие как затраты). |
|
||||
|
||||
Используйте флаг `--refresh` для обновления списка кэшированных моделей. Это полезно, когда к поставщику добавлены новые модели и вы хотите увидеть их в opencode.
|
||||
|
||||
@@ -335,20 +339,25 @@ opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
|
||||
#### Флаги
|
||||
|
||||
| Флаг | Короткий | Описание |
|
||||
| ------------ | -------- | -------------------------------------------------------------------------------- |
|
||||
| `--command` | | Команда для запуска, используйте сообщение для аргументов |
|
||||
| `--continue` | `-c` | Продолжить последний сеанс |
|
||||
| `--session` | `-s` | Идентификатор сеанса для продолжения |
|
||||
| `--fork` | | Разветвить сеанс при продолжении (используйте с `--continue` или `--session`) |
|
||||
| `--share` | | Поделиться сеансом |
|
||||
| `--model` | `-m` | Модель для использования в виде поставщика/модели. |
|
||||
| `--agent` | | Агент для использования |
|
||||
| `--file` | `-f` | Файл(ы) для прикрепления к сообщению |
|
||||
| `--format` | | Формат: по умолчанию (отформатированный) или json (необработанные события JSON). |
|
||||
| `--title` | | Название сеанса (использует усеченное приглашение, если значение не указано) |
|
||||
| `--attach` | | Подключитесь к работающему серверу opencode (например, http://localhost:4096) |
|
||||
| `--port` | | Порт локального сервера (по умолчанию случайный порт) |
|
||||
| Флаг | Короткий | Описание |
|
||||
| ---------------------------------------- | -------- | ------------------------------------------------------------------------------------------------ |
|
||||
| <nobr><code>{"--command"}</code></nobr> | | Команда для запуска, используйте сообщение для аргументов |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Продолжить последний сеанс |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Идентификатор сеанса для продолжения |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Разветвить сеанс при продолжении (используйте с `--continue` или `--session`) |
|
||||
| <nobr><code>{"--share"}</code></nobr> | | Поделиться сеансом |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | Модель для использования в виде поставщика/модели. |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Агент для использования |
|
||||
| <nobr><code>{"--file"}</code></nobr> | `-f` | Файл(ы) для прикрепления к сообщению |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Формат: по умолчанию (отформатированный) или json (необработанные события JSON). |
|
||||
| <nobr><code>{"--title"}</code></nobr> | | Название сеанса (использует усеченное приглашение, если значение не указано) |
|
||||
| <nobr><code>{"--attach"}</code></nobr> | | Подключитесь к работающему серверу opencode (например, http://localhost:4096) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Пароль базовой аутентификации (по умолчанию `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Имя пользователя базовой аутентификации (по умолчанию `OPENCODE_SERVER_USERNAME` или `opencode`) |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Каталог для выполнения или путь на удалённом сервере при подключении |
|
||||
| <nobr><code>{"--variant"}</code></nobr> | | Вариант модели (уровень рассуждений для провайдера) |
|
||||
| <nobr><code>{"--thinking"}</code></nobr> | | Показать блоки размышлений |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Порт локального сервера (по умолчанию случайный порт) |
|
||||
|
||||
---
|
||||
|
||||
@@ -364,12 +373,12 @@ opencode serve
|
||||
|
||||
#### Флаги
|
||||
|
||||
| Флаг | Описание |
|
||||
| ------------ | ------------------------------------------------------------- |
|
||||
| `--port` | Порт для прослушивания |
|
||||
| `--hostname` | Имя хоста для прослушивания |
|
||||
| `--mdns` | Включить обнаружение mDNS |
|
||||
| `--cors` | Дополнительные источники браузера, позволяющие разрешить CORS |
|
||||
| Флаг | Описание |
|
||||
| ---------------------------------------- | ------------------------------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Порт для прослушивания |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Имя хоста для прослушивания |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Включить обнаружение mDNS |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Дополнительные источники браузера, позволяющие разрешить CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -393,10 +402,10 @@ opencode session list
|
||||
|
||||
##### Флаги
|
||||
|
||||
| Флаг | Короткий | Описание |
|
||||
| ------------- | -------- | ----------------------------------------- |
|
||||
| `--max-count` | `-n` | Ограничить N последних сеансов. |
|
||||
| `--format` | | Формат вывода: таблица или json (таблица) |
|
||||
| Флаг | Короткий | Описание |
|
||||
| ----------------------------------------- | -------- | ----------------------------------------- |
|
||||
| <nobr><code>{"--max-count"}</code></nobr> | `-n` | Ограничить N последних сеансов. |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Формат вывода: таблица или json (таблица) |
|
||||
|
||||
---
|
||||
|
||||
@@ -410,12 +419,12 @@ opencode stats
|
||||
|
||||
#### Флаги
|
||||
|
||||
| Флаг | Описание |
|
||||
| ----------- | ---------------------------------------------------------------------------------------------------------- |
|
||||
| `--days` | Показать статистику за последние N дней (все время) |
|
||||
| `--tools` | Количество инструментов для отображения (все) |
|
||||
| `--models` | Показать разбивку по использованию модели (по умолчанию скрыто). Передайте номер, чтобы показать верхнюю N |
|
||||
| `--project` | Фильтровать по проекту (все проекты, пустая строка: текущий проект) |
|
||||
| Флаг | Описание |
|
||||
| --------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--days"}</code></nobr> | Показать статистику за последние N дней (все время) |
|
||||
| <nobr><code>{"--tools"}</code></nobr> | Количество инструментов для отображения (все) |
|
||||
| <nobr><code>{"--models"}</code></nobr> | Показать разбивку по использованию модели (по умолчанию скрыто). Передайте номер, чтобы показать верхнюю N |
|
||||
| <nobr><code>{"--project"}</code></nobr> | Фильтровать по проекту (все проекты, пустая строка: текущий проект) |
|
||||
|
||||
---
|
||||
|
||||
@@ -460,12 +469,12 @@ opencode web
|
||||
|
||||
#### Флаги
|
||||
|
||||
| Флаг | Описание |
|
||||
| ------------ | ------------------------------------------------------------- |
|
||||
| `--port` | Порт для прослушивания |
|
||||
| `--hostname` | Имя хоста для прослушивания |
|
||||
| `--mdns` | Включить обнаружение mDNS |
|
||||
| `--cors` | Дополнительные источники браузера, позволяющие разрешить CORS |
|
||||
| Флаг | Описание |
|
||||
| ---------------------------------------- | ------------------------------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Порт для прослушивания |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Имя хоста для прослушивания |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | Включить обнаружение mDNS |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | Дополнительные источники браузера, позволяющие разрешить CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -481,11 +490,11 @@ opencode acp
|
||||
|
||||
#### Флаги
|
||||
|
||||
| Флаг | Описание |
|
||||
| ------------ | --------------------------- |
|
||||
| `--cwd` | Рабочий каталог |
|
||||
| `--port` | Порт для прослушивания |
|
||||
| `--hostname` | Имя хоста для прослушивания |
|
||||
| Флаг | Описание |
|
||||
| ---------------------------------------- | --------------------------- |
|
||||
| <nobr><code>{"--cwd"}</code></nobr> | Рабочий каталог |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Порт для прослушивания |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Имя хоста для прослушивания |
|
||||
|
||||
---
|
||||
|
||||
@@ -499,12 +508,12 @@ opencode uninstall
|
||||
|
||||
#### Флаги
|
||||
|
||||
| Флаг | Короткий | Описание |
|
||||
| --------------- | -------- | ------------------------------------------ |
|
||||
| `--keep-config` | `-c` | Сохраняйте файлы конфигурации |
|
||||
| `--keep-data` | `-d` | Храните данные сеанса и снимки |
|
||||
| `--dry-run` | | Покажите, что было бы удалено без удаления |
|
||||
| `--force` | `-f` | Пропустить запросы подтверждения |
|
||||
| Флаг | Короткий | Описание |
|
||||
| ------------------------------------------- | -------- | ------------------------------------------ |
|
||||
| <nobr><code>{"--keep-config"}</code></nobr> | `-c` | Сохраняйте файлы конфигурации |
|
||||
| <nobr><code>{"--keep-data"}</code></nobr> | `-d` | Храните данные сеанса и снимки |
|
||||
| <nobr><code>{"--dry-run"}</code></nobr> | | Покажите, что было бы удалено без удаления |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | Пропустить запросы подтверждения |
|
||||
|
||||
---
|
||||
|
||||
@@ -530,9 +539,9 @@ opencode upgrade v0.1.48
|
||||
|
||||
#### Флаги
|
||||
|
||||
| Флаг | Короткий | Описание |
|
||||
| ---------- | -------- | --------------------------------------------------------- |
|
||||
| `--method` | `-m` | Используемый метод установки: local, npm, pnpm, bun, brew |
|
||||
| Флаг | Короткий | Описание |
|
||||
| -------------------------------------- | -------- | --------------------------------------------------------- |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | Используемый метод установки: local, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
@@ -540,12 +549,12 @@ opencode upgrade v0.1.48
|
||||
|
||||
CLI opencode принимает следующие глобальные флаги.
|
||||
|
||||
| Флаг | Короткий | Описание |
|
||||
| -------------- | -------- | ------------------------------------------ |
|
||||
| `--help` | `-h` | Отобразить справку |
|
||||
| `--version` | `-v` | Распечатать номер версии |
|
||||
| `--print-logs` | | Печать журналов в stderr |
|
||||
| `--log-level` | | Уровень журнала (DEBUG, INFO, WARN, ERROR) |
|
||||
| Флаг | Короткий | Описание |
|
||||
| ------------------------------------------ | -------- | ------------------------------------------ |
|
||||
| <nobr><code>{"--help"}</code></nobr> | `-h` | Отобразить справку |
|
||||
| <nobr><code>{"--version"}</code></nobr> | `-v` | Распечатать номер версии |
|
||||
| <nobr><code>{"--print-logs"}</code></nobr> | | Печать журналов в stderr |
|
||||
| <nobr><code>{"--log-level"}</code></nobr> | | Уровень журнала (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -29,16 +29,16 @@ opencode [project]
|
||||
|
||||
#### แฟล็ก
|
||||
|
||||
| แฟล็ก | สั้น | คำอธิบาย |
|
||||
| ------------ | ---- | ---------------------------------------------------------- |
|
||||
| `--continue` | `-c` | ดำเนินการต่อจากเซสชันล่าสุด |
|
||||
| `--session` | `-s` | ID เซสชันเพื่อดำเนินการต่อ |
|
||||
| `--fork` | | แยกเซสชันเมื่อทำต่อ (ใช้กับ `--continue` หรือ `--session`) |
|
||||
| `--prompt` | | พรอมต์เริ่มต้นที่จะใช้ |
|
||||
| `--model` | `-m` | โมเดลที่จะใช้ในรูปแบบ provider/model |
|
||||
| `--agent` | | เอเจนต์ที่จะใช้ |
|
||||
| `--port` | | พอร์ตที่จะฟัง |
|
||||
| `--hostname` | | ชื่อโฮสต์ที่จะฟัง |
|
||||
| แฟล็ก | สั้น | คำอธิบาย |
|
||||
| ---------------------------------------- | ---- | ---------------------------------------------------------- |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | ดำเนินการต่อจากเซสชันล่าสุด |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | ID เซสชันเพื่อดำเนินการต่อ |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | แยกเซสชันเมื่อทำต่อ (ใช้กับ `--continue` หรือ `--session`) |
|
||||
| <nobr><code>{"--prompt"}</code></nobr> | | พรอมต์เริ่มต้นที่จะใช้ |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | โมเดลที่จะใช้ในรูปแบบ provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | เอเจนต์ที่จะใช้ |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | พอร์ตที่จะฟัง |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | | ชื่อโฮสต์ที่จะฟัง |
|
||||
|
||||
---
|
||||
|
||||
@@ -78,10 +78,14 @@ opencode attach http://10.20.30.40:4096
|
||||
|
||||
#### แฟล็ก
|
||||
|
||||
| แฟล็ก | สั้น | คำอธิบาย |
|
||||
| ----------- | ---- | -------------------------------------- |
|
||||
| `--dir` | | ไดเร็กทอรีการทำงานเพื่อเริ่มต้น TUI ใน |
|
||||
| `--session` | `-s` | ID เซสชันเพื่อดำเนินการต่อ |
|
||||
| แฟล็ก | สั้น | คำอธิบาย |
|
||||
| ---------------------------------------- | ---- | ------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | ไดเร็กทอรีการทำงานเพื่อเริ่มต้น TUI ใน |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | ดำเนินการต่อจากเซสชันล่าสุด |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | ID เซสชันเพื่อดำเนินการต่อ |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | แยกเซสชันเมื่อดำเนินการต่อ (ใช้กับ `--continue` หรือ `--session`) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | รหัสผ่านการยืนยันตัวตนพื้นฐาน (ค่าเริ่มต้นคือ `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | ชื่อผู้ใช้การยืนยันตัวตนพื้นฐาน (ค่าเริ่มต้นคือ `OPENCODE_SERVER_USERNAME` หรือ `opencode`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -187,10 +191,10 @@ opencode github run
|
||||
|
||||
##### แฟล็ก
|
||||
|
||||
| แฟล็ก | คำอธิบาย |
|
||||
| --------- | -------------------------------------- |
|
||||
| `--event` | เหตุการณ์ GitHub เพื่อทริกเกอร์เอเจนต์ |
|
||||
| `--token` | GitHub token |
|
||||
| แฟล็ก | คำอธิบาย |
|
||||
| ------------------------------------- | -------------------------------------- |
|
||||
| <nobr><code>{"--event"}</code></nobr> | เหตุการณ์ GitHub เพื่อทริกเกอร์เอเจนต์ |
|
||||
| <nobr><code>{"--token"}</code></nobr> | GitHub token |
|
||||
|
||||
---
|
||||
|
||||
@@ -296,11 +300,11 @@ opencode models anthropic
|
||||
|
||||
#### แฟล็ก
|
||||
|
||||
| แฟล็ก | คำอธิบาย |
|
||||
| ----------- | ------------------------------------------------------ |
|
||||
| `--refresh` | รีเฟรชแคชโมเดลจาก models.dev |
|
||||
| `--verbose` | แสดงรายละเอียดโมเดลเพิ่มเติม (รวมข้อมูลเมตาเช่นต้นทุน) |
|
||||
| `--json` | แสดงผลลัพธ์เป็น JSON |
|
||||
| แฟล็ก | คำอธิบาย |
|
||||
| --------------------------------------- | ------------------------------------------------------ |
|
||||
| <nobr><code>{"--refresh"}</code></nobr> | รีเฟรชแคชโมเดลจาก models.dev |
|
||||
| <nobr><code>{"--verbose"}</code></nobr> | แสดงรายละเอียดโมเดลเพิ่มเติม (รวมข้อมูลเมตาเช่นต้นทุน) |
|
||||
| <nobr><code>{"--json"}</code></nobr> | แสดงผลลัพธ์เป็น JSON |
|
||||
|
||||
ใช้แฟล็ก `--refresh` เพื่ออัปเดตรายการโมเดลที่แคชไว้ มีประโยชน์เมื่อมีการเพิ่มโมเดลใหม่ให้กับผู้ให้บริการและคุณต้องการเห็นใน OpenCode
|
||||
|
||||
@@ -336,20 +340,25 @@ opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
|
||||
#### แฟล็ก
|
||||
|
||||
| แฟล็ก | สั้น | คำอธิบาย |
|
||||
| ------------ | ---- | ---------------------------------------------------------------------- |
|
||||
| `--command` | | คำสั่งที่จะรัน (ใช้ส่วนที่เหลือของ args เป็นอาร์กิวเมนต์) |
|
||||
| `--continue` | `-c` | ดำเนินการต่อจากเซสชันล่าสุด |
|
||||
| `--session` | `-s` | ID เซสชันเพื่อดำเนินการต่อ |
|
||||
| `--fork` | | แยกเซสชันเมื่อทำต่อ (ใช้กับ `--continue` หรือ `--session`) |
|
||||
| `--share` | | สร้างลิงก์แชร์สำหรับเซสชัน |
|
||||
| `--model` | `-m` | โมเดลที่จะใช้ในรูปแบบ provider/model |
|
||||
| `--agent` | | เอเจนต์ที่จะใช้ |
|
||||
| `--file` | `-f` | แนบไฟล์ไปกับข้อความ |
|
||||
| `--format` | | รูปแบบเอาต์พุต: text (จัดรูปแบบ) หรือ json (JSON ดิบ) |
|
||||
| `--title` | | ชื่อสำหรับเซสชัน (หากไม่ได้ระบุ จะสร้างจากพรอมต์) |
|
||||
| `--attach` | | แนบไปกับเซิร์ฟเวอร์ opencode ที่ทำงานอยู่ (เช่น http://localhost:4096) |
|
||||
| `--port` | | พอร์ตสำหรับเซิร์ฟเวอร์ภายในเครื่อง (หากไม่ได้ระบุ จะใช้พอร์ตสุ่ม) |
|
||||
| แฟล็ก | สั้น | คำอธิบาย |
|
||||
| ---------------------------------------- | ---- | ------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--command"}</code></nobr> | | คำสั่งที่จะรัน (ใช้ส่วนที่เหลือของ args เป็นอาร์กิวเมนต์) |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | ดำเนินการต่อจากเซสชันล่าสุด |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | ID เซสชันเพื่อดำเนินการต่อ |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | แยกเซสชันเมื่อทำต่อ (ใช้กับ `--continue` หรือ `--session`) |
|
||||
| <nobr><code>{"--share"}</code></nobr> | | สร้างลิงก์แชร์สำหรับเซสชัน |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | โมเดลที่จะใช้ในรูปแบบ provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | เอเจนต์ที่จะใช้ |
|
||||
| <nobr><code>{"--file"}</code></nobr> | `-f` | แนบไฟล์ไปกับข้อความ |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | รูปแบบเอาต์พุต: text (จัดรูปแบบ) หรือ json (JSON ดิบ) |
|
||||
| <nobr><code>{"--title"}</code></nobr> | | ชื่อสำหรับเซสชัน (หากไม่ได้ระบุ จะสร้างจากพรอมต์) |
|
||||
| <nobr><code>{"--attach"}</code></nobr> | | แนบไปกับเซิร์ฟเวอร์ opencode ที่ทำงานอยู่ (เช่น http://localhost:4096) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | รหัสผ่านการยืนยันตัวตนพื้นฐาน (ค่าเริ่มต้นคือ `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | ชื่อผู้ใช้การยืนยันตัวตนพื้นฐาน (ค่าเริ่มต้นคือ `OPENCODE_SERVER_USERNAME` หรือ `opencode`) |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | ไดเร็กทอรีสำหรับรัน หรือเส้นทางบนเซิร์ฟเวอร์ระยะไกลเมื่อแนบ |
|
||||
| <nobr><code>{"--variant"}</code></nobr> | | ตัวแปรโมเดล (ระดับการใช้เหตุผลเฉพาะผู้ให้บริการ) |
|
||||
| <nobr><code>{"--thinking"}</code></nobr> | | แสดงบล็อกความคิด |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | พอร์ตสำหรับเซิร์ฟเวอร์ภายในเครื่อง (หากไม่ได้ระบุ จะใช้พอร์ตสุ่ม) |
|
||||
|
||||
---
|
||||
|
||||
@@ -365,12 +374,12 @@ opencode serve
|
||||
|
||||
#### แฟล็ก
|
||||
|
||||
| แฟล็ก | คำอธิบาย |
|
||||
| ------------ | -------------------------------------- |
|
||||
| `--port` | พอร์ตที่จะฟัง |
|
||||
| `--hostname` | ชื่อโฮสต์ที่จะฟัง |
|
||||
| `--mdns` | เปิดใช้งานการค้นหา mDNS |
|
||||
| `--cors` | ต้นกำเนิดเพิ่มเติมที่อนุญาตสำหรับ CORS |
|
||||
| แฟล็ก | คำอธิบาย |
|
||||
| ---------------------------------------- | -------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | พอร์ตที่จะฟัง |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | ชื่อโฮสต์ที่จะฟัง |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | เปิดใช้งานการค้นหา mDNS |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | ต้นกำเนิดเพิ่มเติมที่อนุญาตสำหรับ CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -394,10 +403,10 @@ opencode session list
|
||||
|
||||
##### แฟล็ก
|
||||
|
||||
| แฟล็ก | สั้น | คำอธิบาย |
|
||||
| ------------- | ---- | ----------------------------- |
|
||||
| `--max-count` | `-n` | จำกัดการแสดงผล N รายการล่าสุด |
|
||||
| `--format` | | รูปแบบ table หรือ json |
|
||||
| แฟล็ก | สั้น | คำอธิบาย |
|
||||
| ----------------------------------------- | ---- | ----------------------------- |
|
||||
| <nobr><code>{"--max-count"}</code></nobr> | `-n` | จำกัดการแสดงผล N รายการล่าสุด |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | รูปแบบ table หรือ json |
|
||||
|
||||
---
|
||||
|
||||
@@ -411,12 +420,12 @@ opencode stats
|
||||
|
||||
#### แฟล็ก
|
||||
|
||||
| แฟล็ก | คำอธิบาย |
|
||||
| ----------- | ---------------------------------------------------- |
|
||||
| `--days` | แสดงสถิติของ N วันที่ผ่านมา (ค่าเริ่มต้น: ตลอดเวลา) |
|
||||
| `--tools` | แสดงสถิติการใช้เครื่องมือ |
|
||||
| `--models` | แสดงรายละเอียดการใช้งานโมเดล (ซ่อนไว้ตามค่าเริ่มต้น) |
|
||||
| `--project` | กรองตามโครงการ (ค่าเริ่มต้น: โครงการปัจจุบัน) |
|
||||
| แฟล็ก | คำอธิบาย |
|
||||
| --------------------------------------- | ---------------------------------------------------- |
|
||||
| <nobr><code>{"--days"}</code></nobr> | แสดงสถิติของ N วันที่ผ่านมา (ค่าเริ่มต้น: ตลอดเวลา) |
|
||||
| <nobr><code>{"--tools"}</code></nobr> | แสดงสถิติการใช้เครื่องมือ |
|
||||
| <nobr><code>{"--models"}</code></nobr> | แสดงรายละเอียดการใช้งานโมเดล (ซ่อนไว้ตามค่าเริ่มต้น) |
|
||||
| <nobr><code>{"--project"}</code></nobr> | กรองตามโครงการ (ค่าเริ่มต้น: โครงการปัจจุบัน) |
|
||||
|
||||
---
|
||||
|
||||
@@ -461,12 +470,12 @@ opencode web
|
||||
|
||||
#### แฟล็ก
|
||||
|
||||
| แฟล็ก | คำอธิบาย |
|
||||
| ------------ | -------------------------------------- |
|
||||
| `--port` | พอร์ตที่จะฟัง |
|
||||
| `--hostname` | ชื่อโฮสต์ที่จะฟัง |
|
||||
| `--mdns` | เปิดใช้งานการค้นหา mDNS |
|
||||
| `--cors` | ต้นกำเนิดเพิ่มเติมที่อนุญาตสำหรับ CORS |
|
||||
| แฟล็ก | คำอธิบาย |
|
||||
| ---------------------------------------- | -------------------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | พอร์ตที่จะฟัง |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | ชื่อโฮสต์ที่จะฟัง |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | เปิดใช้งานการค้นหา mDNS |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | ต้นกำเนิดเพิ่มเติมที่อนุญาตสำหรับ CORS |
|
||||
|
||||
---
|
||||
|
||||
@@ -482,11 +491,11 @@ opencode acp
|
||||
|
||||
#### แฟล็ก
|
||||
|
||||
| แฟล็ก | คำอธิบาย |
|
||||
| ------------ | ------------------ |
|
||||
| `--cwd` | ไดเร็กทอรีการทำงาน |
|
||||
| `--port` | พอร์ตที่จะฟัง |
|
||||
| `--hostname` | ชื่อโฮสต์ที่จะฟัง |
|
||||
| แฟล็ก | คำอธิบาย |
|
||||
| ---------------------------------------- | ------------------ |
|
||||
| <nobr><code>{"--cwd"}</code></nobr> | ไดเร็กทอรีการทำงาน |
|
||||
| <nobr><code>{"--port"}</code></nobr> | พอร์ตที่จะฟัง |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | ชื่อโฮสต์ที่จะฟัง |
|
||||
|
||||
---
|
||||
|
||||
@@ -500,12 +509,12 @@ opencode uninstall
|
||||
|
||||
#### แฟล็ก
|
||||
|
||||
| แฟล็ก | สั้น | คำอธิบาย |
|
||||
| --------------- | ---- | ----------------------------------- |
|
||||
| `--keep-config` | `-c` | เก็บไฟล์การกำหนดค่าไว้ |
|
||||
| `--keep-data` | `-d` | เก็บไฟล์ข้อมูล (เซสชันและสแน็ปช็อต) |
|
||||
| `--dry-run` | | แสดงสิ่งที่จะลบออกโดยไม่ต้องทำจริง |
|
||||
| `--force` | `-f` | บังคับลบโดยไม่มีการแจ้งเตือน |
|
||||
| แฟล็ก | สั้น | คำอธิบาย |
|
||||
| ------------------------------------------- | ---- | ----------------------------------- |
|
||||
| <nobr><code>{"--keep-config"}</code></nobr> | `-c` | เก็บไฟล์การกำหนดค่าไว้ |
|
||||
| <nobr><code>{"--keep-data"}</code></nobr> | `-d` | เก็บไฟล์ข้อมูล (เซสชันและสแน็ปช็อต) |
|
||||
| <nobr><code>{"--dry-run"}</code></nobr> | | แสดงสิ่งที่จะลบออกโดยไม่ต้องทำจริง |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | บังคับลบโดยไม่มีการแจ้งเตือน |
|
||||
|
||||
---
|
||||
|
||||
@@ -531,9 +540,9 @@ opencode upgrade v0.1.48
|
||||
|
||||
#### แฟล็ก
|
||||
|
||||
| แฟล็ก | สั้น | คำอธิบาย |
|
||||
| ---------- | ---- | ----------------------------------------------- |
|
||||
| `--method` | `-m` | วิธีการติดตั้งที่ใช้ curl, npm, pnpm, bun, brew |
|
||||
| แฟล็ก | สั้น | คำอธิบาย |
|
||||
| -------------------------------------- | ---- | ----------------------------------------------- |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | วิธีการติดตั้งที่ใช้ curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
@@ -541,12 +550,12 @@ opencode upgrade v0.1.48
|
||||
|
||||
OpenCode CLI ยอมรับแฟล็กสากลต่อไปนี้สำหรับทุกคำสั่ง
|
||||
|
||||
| แฟล็ก | สั้น | คำอธิบาย |
|
||||
| -------------- | ---- | ----------------------------------------- |
|
||||
| `--help` | `-h` | แสดงความช่วยเหลือ |
|
||||
| `--version` | `-v` | พิมพ์เวอร์ชัน |
|
||||
| `--print-logs` | | พิมพ์บันทึกไปยัง stderr |
|
||||
| `--log-level` | | ระดับการบันทึก (DEBUG, INFO, WARN, ERROR) |
|
||||
| แฟล็ก | สั้น | คำอธิบาย |
|
||||
| ------------------------------------------ | ---- | ----------------------------------------- |
|
||||
| <nobr><code>{"--help"}</code></nobr> | `-h` | แสดงความช่วยเหลือ |
|
||||
| <nobr><code>{"--version"}</code></nobr> | `-v` | พิมพ์เวอร์ชัน |
|
||||
| <nobr><code>{"--print-logs"}</code></nobr> | | พิมพ์บันทึกไปยัง stderr |
|
||||
| <nobr><code>{"--log-level"}</code></nobr> | | ระดับการบันทึก (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -29,16 +29,16 @@ opencode [project]
|
||||
|
||||
#### Bayraklar
|
||||
|
||||
| Bayrak | Kısa | Açıklama |
|
||||
| ------------ | ---- | --------------------------------------------------------------------------- |
|
||||
| `--continue` | `-c` | Son oturuma devam et |
|
||||
| `--session` | `-s` | Devam edecek oturum kimliği |
|
||||
| `--fork` | | Devam ederken oturumu fork'lar (`--continue` veya `--session` ile kullanın) |
|
||||
| `--prompt` | | Kullanılacak prompt |
|
||||
| `--model` | `-m` | provider/model biçiminde kullanılacak model |
|
||||
| `--agent` | | Kullanılacak agent |
|
||||
| `--port` | | Dinlenecek port |
|
||||
| `--hostname` | | Dinlenecek host adı |
|
||||
| Bayrak | Kısa | Açıklama |
|
||||
| ---------------------------------------- | ---- | --------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Son oturuma devam et |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Devam edecek oturum kimliği |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Devam ederken oturumu fork'lar (`--continue` veya `--session` ile kullanın) |
|
||||
| <nobr><code>{"--prompt"}</code></nobr> | | Kullanılacak prompt |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | provider/model biçiminde kullanılacak model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Kullanılacak agent |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Dinlenecek port |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | | Dinlenecek host adı |
|
||||
|
||||
---
|
||||
|
||||
@@ -78,10 +78,14 @@ opencode attach http://10.20.30.40:4096
|
||||
|
||||
#### Bayraklar
|
||||
|
||||
| Bayrak | Kısa | Tanım |
|
||||
| ----------- | ---- | ------------------------------------ |
|
||||
| `--dir` | | TUI'yi başlatmak için çalışma dizini |
|
||||
| `--session` | `-s` | Devam edecek oturum açma bilgileri |
|
||||
| Bayrak | Kısa | Tanım |
|
||||
| ---------------------------------------- | ---- | --------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | TUI'yi başlatmak için çalışma dizini |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Son oturuma devam et |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Devam edecek oturum açma bilgileri |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Devam ederken oturumu çatalla (`--continue` veya `--session` ile kullanın) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Temel kimlik doğrulama parolası (varsayılan: `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Temel kimlik doğrulama kullanıcı adı (varsayılan: `OPENCODE_SERVER_USERNAME` veya `opencode`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -187,10 +191,10 @@ opencode github run
|
||||
|
||||
##### Bayraklar
|
||||
|
||||
| Bayrak | Açıklama |
|
||||
| --------- | ------------------------------------------- |
|
||||
| `--event` | Aracıyı çalıştırmak için GitHub sahte olayı |
|
||||
| `--token` | GitHub personal access token |
|
||||
| Bayrak | Açıklama |
|
||||
| ------------------------------------- | ------------------------------------------- |
|
||||
| <nobr><code>{"--event"}</code></nobr> | Aracıyı çalıştırmak için GitHub sahte olayı |
|
||||
| <nobr><code>{"--token"}</code></nobr> | GitHub personal access token |
|
||||
|
||||
---
|
||||
|
||||
@@ -296,10 +300,10 @@ opencode models anthropic
|
||||
|
||||
#### Bayraklar
|
||||
|
||||
| Bayrak | Tanım |
|
||||
| ----------- | --------------------------------------------------------------------------- |
|
||||
| `--refresh` | Modeller.dev'den model önbelleğini yenileyin |
|
||||
| `--verbose` | Daha ayrıntılı model çıktısı kullanın (maliyetler gibi meta veriler içerir) |
|
||||
| Bayrak | Tanım |
|
||||
| --------------------------------------- | --------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--refresh"}</code></nobr> | Modeller.dev'den model önbelleğini yenileyin |
|
||||
| <nobr><code>{"--verbose"}</code></nobr> | Daha ayrıntılı model çıktısı kullanın (maliyetler gibi meta veriler içerir) |
|
||||
|
||||
Önbelleğe alınan model listesini güncellemek için `--refresh` bayrağını kullanın. Bu, bir sağlayıcıya yeni modeller eklendiğinde ve bunları opencode'da görmek istediğinizde kullanışlıdır.
|
||||
|
||||
@@ -335,20 +339,25 @@ opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
|
||||
#### Bayraklar
|
||||
|
||||
| Bayrak | Kısa | Açıklama |
|
||||
| ------------ | ---- | --------------------------------------------------------------------------------- |
|
||||
| `--command` | | Çalıştırılacak komut, args için mesajı kullanın |
|
||||
| `--continue` | `-c` | Son oturuma devam et |
|
||||
| `--session` | `-s` | Devam edecek oturum kimliği |
|
||||
| `--fork` | | Devam ederken oturumu fork'lar (`--continue` veya `--session` ile kullanın) |
|
||||
| `--share` | | Oturumu paylaşın |
|
||||
| `--model` | `-m` | provider/model biçiminde kullanılacak model |
|
||||
| `--agent` | | Kullanılacak temsilci |
|
||||
| `--file` | `-f` | Mesaja eklenecek dosya(lar) |
|
||||
| `--format` | | Biçim: varsayılan (biçimlendirilmiş) veya json (ham JSON olayları) |
|
||||
| `--title` | | Oturumun başlığı (değer sağlanmazsa kısaltılmış bilgi istemi kullanılır) |
|
||||
| `--attach` | | Çalışan bir opencode sunucusuna ekleyin (ör. http://localhost:4096) |
|
||||
| `--port` | | Yerel sunucunun bağlantı noktası (varsayılan olarak rastgele bağlantı noktasıdır) |
|
||||
| Bayrak | Kısa | Açıklama |
|
||||
| ---------------------------------------- | ---- | --------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--command"}</code></nobr> | | Çalıştırılacak komut, args için mesajı kullanın |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | Son oturuma devam et |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | Devam edecek oturum kimliği |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | Devam ederken oturumu fork'lar (`--continue` veya `--session` ile kullanın) |
|
||||
| <nobr><code>{"--share"}</code></nobr> | | Oturumu paylaşın |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | provider/model biçiminde kullanılacak model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | Kullanılacak temsilci |
|
||||
| <nobr><code>{"--file"}</code></nobr> | `-f` | Mesaja eklenecek dosya(lar) |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Biçim: varsayılan (biçimlendirilmiş) veya json (ham JSON olayları) |
|
||||
| <nobr><code>{"--title"}</code></nobr> | | Oturumun başlığı (değer sağlanmazsa kısaltılmış bilgi istemi kullanılır) |
|
||||
| <nobr><code>{"--attach"}</code></nobr> | | Çalışan bir opencode sunucusuna ekleyin (ör. http://localhost:4096) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | Temel kimlik doğrulama parolası (varsayılan: `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | Temel kimlik doğrulama kullanıcı adı (varsayılan: `OPENCODE_SERVER_USERNAME` veya `opencode`) |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | Çalıştırılacak dizin veya bağlanırken uzak sunucudaki yol |
|
||||
| <nobr><code>{"--variant"}</code></nobr> | | Model varyantı (sağlayıcıya özgü muhakeme düzeyi) |
|
||||
| <nobr><code>{"--thinking"}</code></nobr> | | Düşünme bloklarını göster |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | Yerel sunucunun bağlantı noktası (varsayılan olarak rastgele bağlantı noktasıdır) |
|
||||
|
||||
---
|
||||
|
||||
@@ -364,12 +373,12 @@ Bu, TUI arayüzü olmadan opencode işlevselliğine API erişimi sağlayan bir H
|
||||
|
||||
#### Bayraklar
|
||||
|
||||
| Bayrak | Tanım |
|
||||
| ------------ | ------------------------------------------ |
|
||||
| `--port` | Dinlenecek bağlantı noktası |
|
||||
| `--hostname` | Dinlenecek ana bilgisayar adı |
|
||||
| `--mdns` | mDNS bulmayı etkinleştir |
|
||||
| `--cors` | CORS'a izin verecek ek tarayıcı kaynakları |
|
||||
| Bayrak | Tanım |
|
||||
| ---------------------------------------- | ------------------------------------------ |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Dinlenecek bağlantı noktası |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Dinlenecek ana bilgisayar adı |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | mDNS bulmayı etkinleştir |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | CORS'a izin verecek ek tarayıcı kaynakları |
|
||||
|
||||
---
|
||||
|
||||
@@ -393,10 +402,10 @@ opencode session list
|
||||
|
||||
##### Bayraklar
|
||||
|
||||
| Bayrak | Kısa | Tanım |
|
||||
| ------------- | ---- | -------------------------------------- |
|
||||
| `--max-count` | `-n` | En son N oturumla sınırla |
|
||||
| `--format` | | Çıkış formatı: tablo veya json (tablo) |
|
||||
| Bayrak | Kısa | Tanım |
|
||||
| ----------------------------------------- | ---- | -------------------------------------- |
|
||||
| <nobr><code>{"--max-count"}</code></nobr> | `-n` | En son N oturumla sınırla |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | Çıkış formatı: tablo veya json (tablo) |
|
||||
|
||||
---
|
||||
|
||||
@@ -410,12 +419,12 @@ opencode stats
|
||||
|
||||
#### Bayraklar
|
||||
|
||||
| Bayrak | Açıklama |
|
||||
| ----------- | ----------------------------------------------------------------------------------------------------------- |
|
||||
| `--days` | Son N güne ait istatistikleri göster (tüm zamanlar) |
|
||||
| `--tools` | Gösterilecek araç sayısı (tümü) |
|
||||
| `--models` | Model kullanım dökümünü göster (varsayılan olarak gizlidir). En üstteki N'yi göstermek için bir sayı iletin |
|
||||
| `--project` | Projeye göre filtrele (tüm projeler, boş değer: mevcut proje) |
|
||||
| Bayrak | Açıklama |
|
||||
| --------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--days"}</code></nobr> | Son N güne ait istatistikleri göster (tüm zamanlar) |
|
||||
| <nobr><code>{"--tools"}</code></nobr> | Gösterilecek araç sayısı (tümü) |
|
||||
| <nobr><code>{"--models"}</code></nobr> | Model kullanım dökümünü göster (varsayılan olarak gizlidir). En üstteki N'yi göstermek için bir sayı iletin |
|
||||
| <nobr><code>{"--project"}</code></nobr> | Projeye göre filtrele (tüm projeler, boş değer: mevcut proje) |
|
||||
|
||||
---
|
||||
|
||||
@@ -460,12 +469,12 @@ Bu, bir HTTP sunucusunu başlatır ve bir web arayüzü aracılığıyla opencod
|
||||
|
||||
#### Bayraklar
|
||||
|
||||
| Bayrak | Tanım |
|
||||
| ------------ | ------------------------------------------ |
|
||||
| `--port` | Dinlenecek bağlantı noktası |
|
||||
| `--hostname` | Dinlenecek ana bilgisayar adı |
|
||||
| `--mdns` | mDNS bulmayı etkinleştir |
|
||||
| `--cors` | CORS'a izin verecek ek tarayıcı kaynakları |
|
||||
| Bayrak | Tanım |
|
||||
| ---------------------------------------- | ------------------------------------------ |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Dinlenecek bağlantı noktası |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Dinlenecek ana bilgisayar adı |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | mDNS bulmayı etkinleştir |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | CORS'a izin verecek ek tarayıcı kaynakları |
|
||||
|
||||
---
|
||||
|
||||
@@ -481,11 +490,11 @@ Bu komut, nd-JSON kullanarak stdin/stdout aracılığıyla iletişim kuran bir A
|
||||
|
||||
#### Bayraklar
|
||||
|
||||
| Bayrak | Açıklama |
|
||||
| ------------ | ------------------- |
|
||||
| `--cwd` | Çalışma dizini |
|
||||
| `--port` | Dinlenecek port |
|
||||
| `--hostname` | Dinlenecek host adı |
|
||||
| Bayrak | Açıklama |
|
||||
| ---------------------------------------- | ------------------- |
|
||||
| <nobr><code>{"--cwd"}</code></nobr> | Çalışma dizini |
|
||||
| <nobr><code>{"--port"}</code></nobr> | Dinlenecek port |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | Dinlenecek host adı |
|
||||
|
||||
---
|
||||
|
||||
@@ -499,12 +508,12 @@ opencode uninstall
|
||||
|
||||
#### Bayraklar
|
||||
|
||||
| Bayrak | Kısa | Tanım |
|
||||
| --------------- | ---- | ----------------------------------------------- |
|
||||
| `--keep-config` | `-c` | Yapılandırma dosyalarını sakla |
|
||||
| `--keep-data` | `-d` | Oturum verilerini ve anlık görüntüleri saklayın |
|
||||
| `--dry-run` | | Nelerin kaldırılmadan kaldırılacağı göster |
|
||||
| `--force` | `-f` | Onay istemlerini atla |
|
||||
| Bayrak | Kısa | Tanım |
|
||||
| ------------------------------------------- | ---- | ----------------------------------------------- |
|
||||
| <nobr><code>{"--keep-config"}</code></nobr> | `-c` | Yapılandırma dosyalarını sakla |
|
||||
| <nobr><code>{"--keep-data"}</code></nobr> | `-d` | Oturum verilerini ve anlık görüntüleri saklayın |
|
||||
| <nobr><code>{"--dry-run"}</code></nobr> | | Nelerin kaldırılmadan kaldırılacağı göster |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | Onay istemlerini atla |
|
||||
|
||||
---
|
||||
|
||||
@@ -530,9 +539,9 @@ opencode upgrade v0.1.48
|
||||
|
||||
#### Bayraklar
|
||||
|
||||
| Bayrak | Kısa | Açıklama |
|
||||
| ---------- | ---- | ------------------------------------------------------ |
|
||||
| `--method` | `-m` | Kullanılan kurulum yöntemi: curl, npm, pnpm, bun, brew |
|
||||
| Bayrak | Kısa | Açıklama |
|
||||
| -------------------------------------- | ---- | ------------------------------------------------------ |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | Kullanılan kurulum yöntemi: curl, npm, pnpm, bun, brew |
|
||||
|
||||
---
|
||||
|
||||
@@ -540,12 +549,12 @@ opencode upgrade v0.1.48
|
||||
|
||||
opencode CLI aşağıdaki global bayrakları destekler.
|
||||
|
||||
| Bayrak | Kısa | Tanım |
|
||||
| -------------- | ---- | ---------------------------------------- |
|
||||
| `--help` | `-h` | Yardımı görüntüle |
|
||||
| `--version` | `-v` | Sürüm numarasını yazdır |
|
||||
| `--print-logs` | | Günlükleri stderr'e yazdır |
|
||||
| `--log-level` | | Günlük düzeyi (DEBUG, INFO, WARN, ERROR) |
|
||||
| Bayrak | Kısa | Tanım |
|
||||
| ------------------------------------------ | ---- | ---------------------------------------- |
|
||||
| <nobr><code>{"--help"}</code></nobr> | `-h` | Yardımı görüntüle |
|
||||
| <nobr><code>{"--version"}</code></nobr> | `-v` | Sürüm numarasını yazdır |
|
||||
| <nobr><code>{"--print-logs"}</code></nobr> | | Günlükleri stderr'e yazdır |
|
||||
| <nobr><code>{"--log-level"}</code></nobr> | | Günlük düzeyi (DEBUG, INFO, WARN, ERROR) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -29,16 +29,16 @@ opencode [project]
|
||||
|
||||
#### 标志
|
||||
|
||||
| 标志 | 简写 | 描述 |
|
||||
| ------------ | ---- | --------------------------------------------------------- |
|
||||
| `--continue` | `-c` | 继续上一个会话 |
|
||||
| `--session` | `-s` | 要继续的会话 ID |
|
||||
| `--fork` | | 继续时分叉会话(与 `--continue` 或 `--session` 配合使用) |
|
||||
| `--prompt` | | 要使用的提示词 |
|
||||
| `--model` | `-m` | 要使用的模型,格式为 provider/model |
|
||||
| `--agent` | | 要使用的代理 |
|
||||
| `--port` | | 监听端口 |
|
||||
| `--hostname` | | 监听主机名 |
|
||||
| 标志 | 简写 | 描述 |
|
||||
| ---------------------------------------- | ---- | --------------------------------------------------------- |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | 继续上一个会话 |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | 要继续的会话 ID |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | 继续时分叉会话(与 `--continue` 或 `--session` 配合使用) |
|
||||
| <nobr><code>{"--prompt"}</code></nobr> | | 要使用的提示词 |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | 要使用的模型,格式为 provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | 要使用的代理 |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | 监听端口 |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | | 监听主机名 |
|
||||
|
||||
---
|
||||
|
||||
@@ -78,10 +78,14 @@ opencode attach http://10.20.30.40:4096
|
||||
|
||||
#### 标志
|
||||
|
||||
| 标志 | 简写 | 描述 |
|
||||
| ----------- | ---- | ------------------- |
|
||||
| `--dir` | | 启动 TUI 的工作目录 |
|
||||
| `--session` | `-s` | 要继续的会话 ID |
|
||||
| 标志 | 简写 | 描述 |
|
||||
| ---------------------------------------- | ---- | ------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | 启动 TUI 的工作目录 |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | 继续上一个会话 |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | 要继续的会话 ID |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | 继续时派生会话(与 `--continue` 或 `--session` 一起使用) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | 基本认证密码(默认使用 `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | 基本认证用户名(默认使用 `OPENCODE_SERVER_USERNAME` 或 `opencode`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -187,10 +191,10 @@ opencode github run
|
||||
|
||||
##### 标志
|
||||
|
||||
| 标志 | 描述 |
|
||||
| --------- | ------------------------------ |
|
||||
| `--event` | 用于运行代理的 GitHub 模拟事件 |
|
||||
| `--token` | GitHub 个人访问令牌 |
|
||||
| 标志 | 描述 |
|
||||
| ------------------------------------- | ------------------------------ |
|
||||
| <nobr><code>{"--event"}</code></nobr> | 用于运行代理的 GitHub 模拟事件 |
|
||||
| <nobr><code>{"--token"}</code></nobr> | GitHub 个人访问令牌 |
|
||||
|
||||
---
|
||||
|
||||
@@ -296,10 +300,10 @@ opencode models anthropic
|
||||
|
||||
#### 标志
|
||||
|
||||
| 标志 | 描述 |
|
||||
| ----------- | ---------------------------------------- |
|
||||
| `--refresh` | 从 models.dev 刷新模型缓存 |
|
||||
| `--verbose` | 使用更详细的模型输出(包含费用等元数据) |
|
||||
| 标志 | 描述 |
|
||||
| --------------------------------------- | ---------------------------------------- |
|
||||
| <nobr><code>{"--refresh"}</code></nobr> | 从 models.dev 刷新模型缓存 |
|
||||
| <nobr><code>{"--verbose"}</code></nobr> | 使用更详细的模型输出(包含费用等元数据) |
|
||||
|
||||
使用 `--refresh` 标志可以更新缓存的模型列表。当提供商新增了模型并且您希望在 OpenCode 中看到它们时,此功能非常有用。
|
||||
|
||||
@@ -335,20 +339,25 @@ opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
|
||||
#### 标志
|
||||
|
||||
| 标志 | 简写 | 描述 |
|
||||
| ------------ | ---- | -------------------------------------------------------------- |
|
||||
| `--command` | | 要运行的命令,使用 message 作为参数 |
|
||||
| `--continue` | `-c` | 继续上一个会话 |
|
||||
| `--session` | `-s` | 要继续的会话 ID |
|
||||
| `--fork` | | 继续时分叉会话(与 `--continue` 或 `--session` 配合使用) |
|
||||
| `--share` | | 分享会话 |
|
||||
| `--model` | `-m` | 要使用的模型,格式为 provider/model |
|
||||
| `--agent` | | 要使用的代理 |
|
||||
| `--file` | `-f` | 附加到消息的文件 |
|
||||
| `--format` | | 格式:default(格式化输出)或 json(原始 JSON 事件) |
|
||||
| `--title` | | 会话标题(未提供值时使用截断的提示词) |
|
||||
| `--attach` | | 连接到正在运行的 opencode 服务器(例如 http://localhost:4096) |
|
||||
| `--port` | | 本地服务器端口(默认为随机端口) |
|
||||
| 标志 | 简写 | 描述 |
|
||||
| ---------------------------------------- | ---- | ------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--command"}</code></nobr> | | 要运行的命令,使用 message 作为参数 |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | 继续上一个会话 |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | 要继续的会话 ID |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | 继续时分叉会话(与 `--continue` 或 `--session` 配合使用) |
|
||||
| <nobr><code>{"--share"}</code></nobr> | | 分享会话 |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | 要使用的模型,格式为 provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | 要使用的代理 |
|
||||
| <nobr><code>{"--file"}</code></nobr> | `-f` | 附加到消息的文件 |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | 格式:default(格式化输出)或 json(原始 JSON 事件) |
|
||||
| <nobr><code>{"--title"}</code></nobr> | | 会话标题(未提供值时使用截断的提示词) |
|
||||
| <nobr><code>{"--attach"}</code></nobr> | | 连接到正在运行的 opencode 服务器(例如 http://localhost:4096) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | 基本认证密码(默认使用 `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | 基本认证用户名(默认使用 `OPENCODE_SERVER_USERNAME` 或 `opencode`) |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | 运行目录,或附加时远程服务器上的路径 |
|
||||
| <nobr><code>{"--variant"}</code></nobr> | | 模型变体(特定于提供商的推理级别) |
|
||||
| <nobr><code>{"--thinking"}</code></nobr> | | 显示思考块 |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | 本地服务器端口(默认为随机端口) |
|
||||
|
||||
---
|
||||
|
||||
@@ -364,12 +373,12 @@ opencode serve
|
||||
|
||||
#### 标志
|
||||
|
||||
| 标志 | 描述 |
|
||||
| ------------ | -------------------------- |
|
||||
| `--port` | 监听端口 |
|
||||
| `--hostname` | 监听主机名 |
|
||||
| `--mdns` | 启用 mDNS 发现 |
|
||||
| `--cors` | 允许 CORS 的额外浏览器来源 |
|
||||
| 标志 | 描述 |
|
||||
| ---------------------------------------- | -------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | 监听端口 |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | 监听主机名 |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | 启用 mDNS 发现 |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | 允许 CORS 的额外浏览器来源 |
|
||||
|
||||
---
|
||||
|
||||
@@ -393,10 +402,10 @@ opencode session list
|
||||
|
||||
##### 标志
|
||||
|
||||
| 标志 | 简写 | 描述 |
|
||||
| ------------- | ---- | ------------------------------------- |
|
||||
| `--max-count` | `-n` | 限制为最近 N 个会话 |
|
||||
| `--format` | | 输出格式:table 或 json(默认 table) |
|
||||
| 标志 | 简写 | 描述 |
|
||||
| ----------------------------------------- | ---- | ------------------------------------- |
|
||||
| <nobr><code>{"--max-count"}</code></nobr> | `-n` | 限制为最近 N 个会话 |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | 输出格式:table 或 json(默认 table) |
|
||||
|
||||
---
|
||||
|
||||
@@ -410,12 +419,12 @@ opencode stats
|
||||
|
||||
#### 标志
|
||||
|
||||
| 标志 | 描述 |
|
||||
| ----------- | ------------------------------------------------------ |
|
||||
| `--days` | 显示最近 N 天的统计信息(默认为所有时间) |
|
||||
| `--tools` | 显示的工具数量(默认为全部) |
|
||||
| `--models` | 显示模型用量明细(默认隐藏)。传入数字可显示前 N 个 |
|
||||
| `--project` | 按项目筛选(默认为所有项目,传入空字符串表示当前项目) |
|
||||
| 标志 | 描述 |
|
||||
| --------------------------------------- | ------------------------------------------------------ |
|
||||
| <nobr><code>{"--days"}</code></nobr> | 显示最近 N 天的统计信息(默认为所有时间) |
|
||||
| <nobr><code>{"--tools"}</code></nobr> | 显示的工具数量(默认为全部) |
|
||||
| <nobr><code>{"--models"}</code></nobr> | 显示模型用量明细(默认隐藏)。传入数字可显示前 N 个 |
|
||||
| <nobr><code>{"--project"}</code></nobr> | 按项目筛选(默认为所有项目,传入空字符串表示当前项目) |
|
||||
|
||||
---
|
||||
|
||||
@@ -460,12 +469,12 @@ opencode web
|
||||
|
||||
#### 标志
|
||||
|
||||
| 标志 | 描述 |
|
||||
| ------------ | -------------------------- |
|
||||
| `--port` | 监听端口 |
|
||||
| `--hostname` | 监听主机名 |
|
||||
| `--mdns` | 启用 mDNS 发现 |
|
||||
| `--cors` | 允许 CORS 的额外浏览器来源 |
|
||||
| 标志 | 描述 |
|
||||
| ---------------------------------------- | -------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | 监听端口 |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | 监听主机名 |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | 启用 mDNS 发现 |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | 允许 CORS 的额外浏览器来源 |
|
||||
|
||||
---
|
||||
|
||||
@@ -481,11 +490,11 @@ opencode acp
|
||||
|
||||
#### 标志
|
||||
|
||||
| 标志 | 描述 |
|
||||
| ------------ | ---------- |
|
||||
| `--cwd` | 工作目录 |
|
||||
| `--port` | 监听端口 |
|
||||
| `--hostname` | 监听主机名 |
|
||||
| 标志 | 描述 |
|
||||
| ---------------------------------------- | ---------- |
|
||||
| <nobr><code>{"--cwd"}</code></nobr> | 工作目录 |
|
||||
| <nobr><code>{"--port"}</code></nobr> | 监听端口 |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | 监听主机名 |
|
||||
|
||||
---
|
||||
|
||||
@@ -499,12 +508,12 @@ opencode uninstall
|
||||
|
||||
#### 标志
|
||||
|
||||
| 标志 | 简写 | 描述 |
|
||||
| --------------- | ---- | ------------------------------ |
|
||||
| `--keep-config` | `-c` | 保留配置文件 |
|
||||
| `--keep-data` | `-d` | 保留会话数据和快照 |
|
||||
| `--dry-run` | | 显示将被删除的内容但不实际删除 |
|
||||
| `--force` | `-f` | 跳过确认提示 |
|
||||
| 标志 | 简写 | 描述 |
|
||||
| ------------------------------------------- | ---- | ------------------------------ |
|
||||
| <nobr><code>{"--keep-config"}</code></nobr> | `-c` | 保留配置文件 |
|
||||
| <nobr><code>{"--keep-data"}</code></nobr> | `-d` | 保留会话数据和快照 |
|
||||
| <nobr><code>{"--dry-run"}</code></nobr> | | 显示将被删除的内容但不实际删除 |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | 跳过确认提示 |
|
||||
|
||||
---
|
||||
|
||||
@@ -530,9 +539,9 @@ opencode upgrade v0.1.48
|
||||
|
||||
#### 标志
|
||||
|
||||
| 标志 | 简写 | 描述 |
|
||||
| ---------- | ---- | ------------------------------------------ |
|
||||
| `--method` | `-m` | 使用的安装方式:curl、npm、pnpm、bun、brew |
|
||||
| 标志 | 简写 | 描述 |
|
||||
| -------------------------------------- | ---- | ------------------------------------------ |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | 使用的安装方式:curl、npm、pnpm、bun、brew |
|
||||
|
||||
---
|
||||
|
||||
@@ -540,12 +549,12 @@ opencode upgrade v0.1.48
|
||||
|
||||
OpenCode CLI 接受以下全局标志。
|
||||
|
||||
| 标志 | 简写 | 描述 |
|
||||
| -------------- | ---- | ------------------------------------ |
|
||||
| `--help` | `-h` | 显示帮助信息 |
|
||||
| `--version` | `-v` | 打印版本号 |
|
||||
| `--print-logs` | | 将日志输出到 stderr |
|
||||
| `--log-level` | | 日志级别(DEBUG、INFO、WARN、ERROR) |
|
||||
| 标志 | 简写 | 描述 |
|
||||
| ------------------------------------------ | ---- | ------------------------------------ |
|
||||
| <nobr><code>{"--help"}</code></nobr> | `-h` | 显示帮助信息 |
|
||||
| <nobr><code>{"--version"}</code></nobr> | `-v` | 打印版本号 |
|
||||
| <nobr><code>{"--print-logs"}</code></nobr> | | 将日志输出到 stderr |
|
||||
| <nobr><code>{"--log-level"}</code></nobr> | | 日志级别(DEBUG、INFO、WARN、ERROR) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -29,16 +29,16 @@ opencode [project]
|
||||
|
||||
#### 旗標
|
||||
|
||||
| 旗標 | 簡寫 | 說明 |
|
||||
| ------------ | ---- | ------------------------------------------------------------- |
|
||||
| `--continue` | `-c` | 繼續上一個工作階段 |
|
||||
| `--session` | `-s` | 要繼續的工作階段 ID |
|
||||
| `--fork` | | 繼續時分岔工作階段(與 `--continue` 或 `--session` 搭配使用) |
|
||||
| `--prompt` | | 要使用的提示詞 |
|
||||
| `--model` | `-m` | 要使用的模型,格式為 provider/model |
|
||||
| `--agent` | | 要使用的代理 |
|
||||
| `--port` | | 監聽連接埠 |
|
||||
| `--hostname` | | 監聽主機名稱 |
|
||||
| 旗標 | 簡寫 | 說明 |
|
||||
| ---------------------------------------- | ---- | ------------------------------------------------------------- |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | 繼續上一個工作階段 |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | 要繼續的工作階段 ID |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | 繼續時分岔工作階段(與 `--continue` 或 `--session` 搭配使用) |
|
||||
| <nobr><code>{"--prompt"}</code></nobr> | | 要使用的提示詞 |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | 要使用的模型,格式為 provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | 要使用的代理 |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | 監聽連接埠 |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | | 監聽主機名稱 |
|
||||
|
||||
---
|
||||
|
||||
@@ -78,10 +78,14 @@ opencode attach http://10.20.30.40:4096
|
||||
|
||||
#### 旗標
|
||||
|
||||
| 旗標 | 簡寫 | 說明 |
|
||||
| ----------- | ---- | ------------------- |
|
||||
| `--dir` | | 啟動 TUI 的工作目錄 |
|
||||
| `--session` | `-s` | 要繼續的工作階段 ID |
|
||||
| 旗標 | 簡寫 | 說明 |
|
||||
| ---------------------------------------- | ---- | ----------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | 啟動 TUI 的工作目錄 |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | 繼續上一個工作階段 |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | 要繼續的工作階段 ID |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | 繼續時分支工作階段(與 `--continue` 或 `--session` 一起使用) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | 基本驗證密碼(預設使用 `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | 基本驗證使用者名稱(預設使用 `OPENCODE_SERVER_USERNAME` 或 `opencode`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -187,10 +191,10 @@ opencode github run
|
||||
|
||||
##### 旗標
|
||||
|
||||
| 旗標 | 說明 |
|
||||
| --------- | ------------------------------ |
|
||||
| `--event` | 用於執行代理的 GitHub 模擬事件 |
|
||||
| `--token` | GitHub 個人存取權杖 |
|
||||
| 旗標 | 說明 |
|
||||
| ------------------------------------- | ------------------------------ |
|
||||
| <nobr><code>{"--event"}</code></nobr> | 用於執行代理的 GitHub 模擬事件 |
|
||||
| <nobr><code>{"--token"}</code></nobr> | GitHub 個人存取權杖 |
|
||||
|
||||
---
|
||||
|
||||
@@ -296,10 +300,10 @@ opencode models anthropic
|
||||
|
||||
#### 旗標
|
||||
|
||||
| 旗標 | 說明 |
|
||||
| ----------- | ------------------------------------------ |
|
||||
| `--refresh` | 從 models.dev 重新整理模型快取 |
|
||||
| `--verbose` | 使用更詳細的模型輸出(包含費用等中繼資料) |
|
||||
| 旗標 | 說明 |
|
||||
| --------------------------------------- | ------------------------------------------ |
|
||||
| <nobr><code>{"--refresh"}</code></nobr> | 從 models.dev 重新整理模型快取 |
|
||||
| <nobr><code>{"--verbose"}</code></nobr> | 使用更詳細的模型輸出(包含費用等中繼資料) |
|
||||
|
||||
使用 `--refresh` 旗標可以更新快取的模型列表。當供應商新增了模型並且您希望在 OpenCode 中看到它們時,此功能非常有用。
|
||||
|
||||
@@ -335,20 +339,25 @@ opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
|
||||
|
||||
#### 旗標
|
||||
|
||||
| 旗標 | 簡寫 | 說明 |
|
||||
| ------------ | ---- | -------------------------------------------------------------- |
|
||||
| `--command` | | 要執行的指令,使用 message 作為參數 |
|
||||
| `--continue` | `-c` | 繼續上一個工作階段 |
|
||||
| `--session` | `-s` | 要繼續的工作階段 ID |
|
||||
| `--fork` | | 繼續時分岔工作階段(與 `--continue` 或 `--session` 搭配使用) |
|
||||
| `--share` | | 分享工作階段 |
|
||||
| `--model` | `-m` | 要使用的模型,格式為 provider/model |
|
||||
| `--agent` | | 要使用的代理 |
|
||||
| `--file` | `-f` | 附加到訊息的檔案 |
|
||||
| `--format` | | 格式:default(格式化輸出)或 json(原始 JSON 事件) |
|
||||
| `--title` | | 工作階段標題(未提供值時使用截斷的提示詞) |
|
||||
| `--attach` | | 連接到正在執行的 opencode 伺服器(例如 http://localhost:4096) |
|
||||
| `--port` | | 本地伺服器連接埠(預設為隨機連接埠) |
|
||||
| 旗標 | 簡寫 | 說明 |
|
||||
| ---------------------------------------- | ---- | ----------------------------------------------------------------------- |
|
||||
| <nobr><code>{"--command"}</code></nobr> | | 要執行的指令,使用 message 作為參數 |
|
||||
| <nobr><code>{"--continue"}</code></nobr> | `-c` | 繼續上一個工作階段 |
|
||||
| <nobr><code>{"--session"}</code></nobr> | `-s` | 要繼續的工作階段 ID |
|
||||
| <nobr><code>{"--fork"}</code></nobr> | | 繼續時分岔工作階段(與 `--continue` 或 `--session` 搭配使用) |
|
||||
| <nobr><code>{"--share"}</code></nobr> | | 分享工作階段 |
|
||||
| <nobr><code>{"--model"}</code></nobr> | `-m` | 要使用的模型,格式為 provider/model |
|
||||
| <nobr><code>{"--agent"}</code></nobr> | | 要使用的代理 |
|
||||
| <nobr><code>{"--file"}</code></nobr> | `-f` | 附加到訊息的檔案 |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | 格式:default(格式化輸出)或 json(原始 JSON 事件) |
|
||||
| <nobr><code>{"--title"}</code></nobr> | | 工作階段標題(未提供值時使用截斷的提示詞) |
|
||||
| <nobr><code>{"--attach"}</code></nobr> | | 連接到正在執行的 opencode 伺服器(例如 http://localhost:4096) |
|
||||
| <nobr><code>{"--password"}</code></nobr> | `-p` | 基本驗證密碼(預設使用 `OPENCODE_SERVER_PASSWORD`) |
|
||||
| <nobr><code>{"--username"}</code></nobr> | `-u` | 基本驗證使用者名稱(預設使用 `OPENCODE_SERVER_USERNAME` 或 `opencode`) |
|
||||
| <nobr><code>{"--dir"}</code></nobr> | | 執行目錄,或附加時遠端伺服器上的路徑 |
|
||||
| <nobr><code>{"--variant"}</code></nobr> | | 模型變體(特定於提供者的推理級別) |
|
||||
| <nobr><code>{"--thinking"}</code></nobr> | | 顯示思考區塊 |
|
||||
| <nobr><code>{"--port"}</code></nobr> | | 本地伺服器連接埠(預設為隨機連接埠) |
|
||||
|
||||
---
|
||||
|
||||
@@ -364,12 +373,12 @@ opencode serve
|
||||
|
||||
#### 旗標
|
||||
|
||||
| 旗標 | 說明 |
|
||||
| ------------ | -------------------------- |
|
||||
| `--port` | 監聽連接埠 |
|
||||
| `--hostname` | 監聽主機名稱 |
|
||||
| `--mdns` | 啟用 mDNS 探索 |
|
||||
| `--cors` | 允許 CORS 的額外瀏覽器來源 |
|
||||
| 旗標 | 說明 |
|
||||
| ---------------------------------------- | -------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | 監聽連接埠 |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | 監聽主機名稱 |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | 啟用 mDNS 探索 |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | 允許 CORS 的額外瀏覽器來源 |
|
||||
|
||||
---
|
||||
|
||||
@@ -393,10 +402,10 @@ opencode session list
|
||||
|
||||
##### 旗標
|
||||
|
||||
| 旗標 | 簡寫 | 說明 |
|
||||
| ------------- | ---- | ------------------------------------- |
|
||||
| `--max-count` | `-n` | 限制為最近 N 個工作階段 |
|
||||
| `--format` | | 輸出格式:table 或 json(預設 table) |
|
||||
| 旗標 | 簡寫 | 說明 |
|
||||
| ----------------------------------------- | ---- | ------------------------------------- |
|
||||
| <nobr><code>{"--max-count"}</code></nobr> | `-n` | 限制為最近 N 個工作階段 |
|
||||
| <nobr><code>{"--format"}</code></nobr> | | 輸出格式:table 或 json(預設 table) |
|
||||
|
||||
---
|
||||
|
||||
@@ -410,12 +419,12 @@ opencode stats
|
||||
|
||||
#### 旗標
|
||||
|
||||
| 旗標 | 說明 |
|
||||
| ----------- | ---------------------------------------------------- |
|
||||
| `--days` | 顯示最近 N 天的統計資訊(預設為所有時間) |
|
||||
| `--tools` | 顯示的工具數量(預設為全部) |
|
||||
| `--models` | 顯示模型用量明細(預設隱藏)。傳入數字可顯示前 N 個 |
|
||||
| `--project` | 按專案篩選(預設為所有專案,傳入空字串表示當前專案) |
|
||||
| 旗標 | 說明 |
|
||||
| --------------------------------------- | ---------------------------------------------------- |
|
||||
| <nobr><code>{"--days"}</code></nobr> | 顯示最近 N 天的統計資訊(預設為所有時間) |
|
||||
| <nobr><code>{"--tools"}</code></nobr> | 顯示的工具數量(預設為全部) |
|
||||
| <nobr><code>{"--models"}</code></nobr> | 顯示模型用量明細(預設隱藏)。傳入數字可顯示前 N 個 |
|
||||
| <nobr><code>{"--project"}</code></nobr> | 按專案篩選(預設為所有專案,傳入空字串表示當前專案) |
|
||||
|
||||
---
|
||||
|
||||
@@ -460,12 +469,12 @@ opencode web
|
||||
|
||||
#### 旗標
|
||||
|
||||
| 旗標 | 說明 |
|
||||
| ------------ | -------------------------- |
|
||||
| `--port` | 監聽連接埠 |
|
||||
| `--hostname` | 監聽主機名稱 |
|
||||
| `--mdns` | 啟用 mDNS 探索 |
|
||||
| `--cors` | 允許 CORS 的額外瀏覽器來源 |
|
||||
| 旗標 | 說明 |
|
||||
| ---------------------------------------- | -------------------------- |
|
||||
| <nobr><code>{"--port"}</code></nobr> | 監聽連接埠 |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | 監聽主機名稱 |
|
||||
| <nobr><code>{"--mdns"}</code></nobr> | 啟用 mDNS 探索 |
|
||||
| <nobr><code>{"--cors"}</code></nobr> | 允許 CORS 的額外瀏覽器來源 |
|
||||
|
||||
---
|
||||
|
||||
@@ -481,11 +490,11 @@ opencode acp
|
||||
|
||||
#### 旗標
|
||||
|
||||
| 旗標 | 說明 |
|
||||
| ------------ | ------------ |
|
||||
| `--cwd` | 工作目錄 |
|
||||
| `--port` | 監聽連接埠 |
|
||||
| `--hostname` | 監聽主機名稱 |
|
||||
| 旗標 | 說明 |
|
||||
| ---------------------------------------- | ------------ |
|
||||
| <nobr><code>{"--cwd"}</code></nobr> | 工作目錄 |
|
||||
| <nobr><code>{"--port"}</code></nobr> | 監聽連接埠 |
|
||||
| <nobr><code>{"--hostname"}</code></nobr> | 監聽主機名稱 |
|
||||
|
||||
---
|
||||
|
||||
@@ -499,12 +508,12 @@ opencode uninstall
|
||||
|
||||
#### 旗標
|
||||
|
||||
| 旗標 | 簡寫 | 說明 |
|
||||
| --------------- | ---- | ------------------------------ |
|
||||
| `--keep-config` | `-c` | 保留設定檔 |
|
||||
| `--keep-data` | `-d` | 保留工作階段資料和快照 |
|
||||
| `--dry-run` | | 顯示將被刪除的內容但不實際刪除 |
|
||||
| `--force` | `-f` | 跳過確認提示 |
|
||||
| 旗標 | 簡寫 | 說明 |
|
||||
| ------------------------------------------- | ---- | ------------------------------ |
|
||||
| <nobr><code>{"--keep-config"}</code></nobr> | `-c` | 保留設定檔 |
|
||||
| <nobr><code>{"--keep-data"}</code></nobr> | `-d` | 保留工作階段資料和快照 |
|
||||
| <nobr><code>{"--dry-run"}</code></nobr> | | 顯示將被刪除的內容但不實際刪除 |
|
||||
| <nobr><code>{"--force"}</code></nobr> | `-f` | 跳過確認提示 |
|
||||
|
||||
---
|
||||
|
||||
@@ -530,9 +539,9 @@ opencode upgrade v0.1.48
|
||||
|
||||
#### 旗標
|
||||
|
||||
| 旗標 | 簡寫 | 說明 |
|
||||
| ---------- | ---- | ------------------------------------------ |
|
||||
| `--method` | `-m` | 使用的安裝方式:curl、npm、pnpm、bun、brew |
|
||||
| 旗標 | 簡寫 | 說明 |
|
||||
| -------------------------------------- | ---- | ------------------------------------------ |
|
||||
| <nobr><code>{"--method"}</code></nobr> | `-m` | 使用的安裝方式:curl、npm、pnpm、bun、brew |
|
||||
|
||||
---
|
||||
|
||||
@@ -540,12 +549,12 @@ opencode upgrade v0.1.48
|
||||
|
||||
OpenCode CLI 接受以下全域旗標。
|
||||
|
||||
| 旗標 | 簡寫 | 說明 |
|
||||
| -------------- | ---- | ------------------------------------ |
|
||||
| `--help` | `-h` | 顯示說明資訊 |
|
||||
| `--version` | `-v` | 印出版本號 |
|
||||
| `--print-logs` | | 將日誌輸出到 stderr |
|
||||
| `--log-level` | | 日誌等級(DEBUG、INFO、WARN、ERROR) |
|
||||
| 旗標 | 簡寫 | 說明 |
|
||||
| ------------------------------------------ | ---- | ------------------------------------ |
|
||||
| <nobr><code>{"--help"}</code></nobr> | `-h` | 顯示說明資訊 |
|
||||
| <nobr><code>{"--version"}</code></nobr> | `-v` | 印出版本號 |
|
||||
| <nobr><code>{"--print-logs"}</code></nobr> | | 將日誌輸出到 stderr |
|
||||
| <nobr><code>{"--log-level"}</code></nobr> | | 日誌等級(DEBUG、INFO、WARN、ERROR) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "opencode",
|
||||
"displayName": "opencode",
|
||||
"description": "opencode for VS Code",
|
||||
"version": "1.14.31",
|
||||
"version": "1.14.33",
|
||||
"publisher": "sst-dev",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
Reference in New Issue
Block a user