SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
0dbc9de verified
Raw
History Blame Contribute Delete
20.8 kB
---
title: SDK
description: opencode ์„œ๋ฒ„๋ฅผ ์œ„ํ•œ ํƒ€์ž… ์•ˆ์ „ํ•œ JS ํด๋ผ์ด์–ธํŠธ.
---
import config from "../../../../config.mjs"
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
opencode JS/TS SDK๋Š” ์„œ๋ฒ„์™€ ์ƒํ˜ธ ์ž‘์šฉ์„ ์œ„ํ•œ ์œ ํ˜• ์•ˆ์ „ํ•œ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
ํ†ตํ•ฉ ๋ฐ ์ œ์–ด opencode programmatically๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
[Learn more](/docs/server) ์„œ๋ฒ„๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋‚˜์š”? ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์˜ํ•ด ๊ตฌ์ถ• ๋œ [projects](/docs/ecosystem#projects)๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
---
## ์„ค์น˜
npm์—์„œ SDK ์„ค์น˜:
```bash
npm install @opencode-ai/sdk
```
---
## ํด๋ผ์ด์–ธํŠธ ๋งŒ๋“ค๊ธฐ
opencode์˜ ์ธ์Šคํ„ด์Šค ๋งŒ๋“ค๊ธฐ:
```javascript
import { createOpencode } from "@opencode-ai/sdk"
const { client } = await createOpencode()
```
์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋‘ ์‹œ์ž‘
#### ์˜ต์…˜
| ์˜ต์…˜ | ์œ ํ˜• | ์„ค๋ช… | ๊ธฐ๋ณธ |
| ---------- | ------------- | ----------------------- | ----------- |
| `hostname` | `string` | ์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ๋ช… | `127.0.0.1` |
| `port` | `number` | ์„œ๋ฒ„ํฌํŠธ | `4096` |
| `signal` | `AbortSignal` | ์ทจ์†Œ ์‹ ํ˜ธ | `undefined` |
| `timeout` | `number` | ์„œ๋ฒ„ ์‹œ์ž‘์‹œ์˜ ์‹œ๊ฐ„ ์•„์›ƒ | `5000` |
| `config` | `Config` | ๊ตฌ์„ฑ ๊ฐ์ฒด | `{}` |
---
## ๊ตฌ์„ฑ
๊ตฌ์„ฑ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๋Š” ์—ฌ์ „ํžˆ `opencode.json`๋ฅผ ์„ ํƒํ•˜์ง€๋งŒ ๊ตฌ์„ฑ ์ธ๋ผ์ธ์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```javascript
import { createOpencode } from "@opencode-ai/sdk"
const opencode = await createOpencode({
hostname: "127.0.0.1",
port: 4096,
config: {
model: "anthropic/claude-3-5-sonnet-20241022",
},
})
console.log(`Server running at ${opencode.server.url}`)
opencode.server.close()
```
## ํด๋ผ์ด์–ธํŠธ๋งŒ
opencode์˜ ์‹คํ–‰ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ด๋ฏธ ์žˆ๋‹ค๋ฉด ํด๋ผ์ด์–ธํŠธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```javascript
import { createOpencodeClient } from "@opencode-ai/sdk"
const client = createOpencodeClient({
baseUrl: "http://localhost:4096",
})
```
#### ์˜ต์…˜
| ์˜ต์…˜ | ์œ ํ˜• | ์„ค๋ช… | ๊ธฐ๋ณธ |
| --------------- | ---------- | --------------------------------- | ----------------------- |
| `baseUrl` | `string` | ์„œ๋ฒ„์˜ URL | `http://localhost:4096` |
| `fetch` | `function` | ์‚ฌ์šฉ์ž ์ •์˜ fetch ๊ตฌํ˜„ | `globalThis.fetch` |
| `parseAs` | `string` | ์‘๋‹ต ํŒŒ์‹ฑ ๋ฐฉ๋ฒ• | `auto` |
| `responseStyle` | `string` | ๋ฐ˜ํ’ˆ ์Šคํƒ€์ผ: `data` ๋˜๋Š” `fields` | `fields` |
| `throwOnError` | `boolean` | ๋ฐ˜ํ’ˆ ์‹œ ์˜ค๋ฅ˜ | `false` |
---
## ํƒ€์ž…
SDK์—๋Š” ๋ชจ๋“  API ์œ ํ˜•์˜ TypeScript ์ •์˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ง์ ‘ ๊ฐ€์ ธ ์˜ค๊ธฐ :
```typescript
import type { Session, Message, Part } from "@opencode-ai/sdk"
```
๋ชจ๋“  ์œ ํ˜•์€ ์„œ๋ฒ„์˜ OpenAPI ์‚ฌ์–‘์—์„œ ์ƒ์„ฑ๋˜๋ฉฐ <a href={typesUrl}>types ํŒŒ์ผ</a>์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
---
## ์˜ค๋ฅ˜
SDK๋Š” ์žก์„ ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋ฅผ ๋˜์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
```typescript
try {
await client.session.get({ path: { id: "invalid-id" } })
} catch (error) {
console.error("Failed to get session:", (error as Error).message)
}
```
---
## ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ
JSON ์Šคํ‚ค๋งˆ์™€ ํ•จ๊ป˜ `format`์„ ์ง€์ •ํ•˜์—ฌ ๋ชจ๋ธ์—์„œ ๊ตฌ์กฐํ™”๋œ JSON ์ถœ๋ ฅ์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ์€ `StructuredOutput` ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํ‚ค๋งˆ์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒ€์ฆ๋œ JSON์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
### ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•
```typescript
const result = await client.session.prompt({
path: { id: sessionId },
body: {
parts: [{ type: "text", text: "Research Anthropic and provide company info" }],
format: {
type: "json_schema",
schema: {
type: "object",
properties: {
company: { type: "string", description: "Company name" },
founded: { type: "number", description: "Year founded" },
products: {
type: "array",
items: { type: "string" },
description: "Main products",
},
},
required: ["company", "founded"],
},
},
},
})
// Access the structured output
console.log(result.data.info.structured_output)
// { company: "Anthropic", founded: 2021, products: ["Claude", "Claude API"] }
```
### ์ถœ๋ ฅ ํ˜•์‹ ์œ ํ˜•
| ์œ ํ˜• | ์„ค๋ช… |
| ------------- | ------------------------------------------------- |
| `text` | ๊ธฐ๋ณธ๊ฐ’. ํ‘œ์ค€ ํ…์ŠคํŠธ ์‘๋‹ต (๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ ์—†์Œ) |
| `json_schema` | ์ œ๊ณต๋œ ์Šคํ‚ค๋งˆ์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒ€์ฆ๋œ JSON์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค |
### JSON ์Šคํ‚ค๋งˆ ํ˜•์‹
`type: 'json_schema'`๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋‹ค์Œ์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค:
| ํ•„๋“œ | ์œ ํ˜• | ์„ค๋ช… |
| ------------ | --------------- | ------------------------------------------- |
| `type` | `'json_schema'` | ํ•„์ˆ˜. JSON ์Šคํ‚ค๋งˆ ๋ชจ๋“œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค |
| `schema` | `object` | ํ•„์ˆ˜. ์ถœ๋ ฅ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” JSON ์Šคํ‚ค๋งˆ ๊ฐ์ฒด |
| `retryCount` | `number` | ์„ ํƒ ์‚ฌํ•ญ. ๊ฒ€์ฆ ์žฌ์‹œ๋„ ํšŸ์ˆ˜ (๊ธฐ๋ณธ๊ฐ’: 2) |
### ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ
๋ชจ๋ธ์ด ๋ชจ๋“  ์žฌ์‹œ๋„ ํ›„์—๋„ ์œ ํšจํ•œ ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ•˜๋ฉด ์‘๋‹ต์— `StructuredOutputError`๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค:
```typescript
if (result.data.info.error?.name === "StructuredOutputError") {
console.error("Failed to produce structured output:", result.data.info.error.message)
console.error("Attempts:", result.data.info.error.retries)
}
```
### ๋ชจ๋ฒ” ์‚ฌ๋ก€
1. **๋ช…ํ™•ํ•œ ์„ค๋ช… ์ œ๊ณต**: ๋ชจ๋ธ์ด ์ถ”์ถœํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋„๋ก ์Šคํ‚ค๋งˆ ์†์„ฑ์— ๋ช…ํ™•ํ•œ ์„ค๋ช…์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.
2. **`required` ์‚ฌ์šฉ**: ํ•„์ˆ˜ ํ•„๋“œ๋ฅผ ์ง€์ •ํ•˜๋ ค๋ฉด `required`๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
3. **์Šคํ‚ค๋งˆ๋ฅผ ์ง‘์ค‘์ ์œผ๋กœ ์œ ์ง€**: ๋ณต์žกํ•œ ์ค‘์ฒฉ ์Šคํ‚ค๋งˆ๋Š” ๋ชจ๋ธ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฑ„์šฐ๊ธฐ ๋” ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
4. **์ ์ ˆํ•œ `retryCount` ์„ค์ •**: ๋ณต์žกํ•œ ์Šคํ‚ค๋งˆ์˜ ๊ฒฝ์šฐ ๋Š˜๋ฆฌ๊ณ  ๋‹จ์ˆœํ•œ ์Šคํ‚ค๋งˆ์˜ ๊ฒฝ์šฐ ์ค„์ด์‹ญ์‹œ์˜ค.
---
## API
SDK๋Š” type-safe ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์„œ๋ฒ„ API๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
---
### ๊ธ€๋กœ๋ฒŒ
| ๋ฉ”์„œ๋“œ | ์„ค๋ช… | ์‘๋‹ต |
| ----------------- | ---------------------- | ------------------------------------ |
| `global.health()` | ์„œ๋ฒ„ ๊ฑด๊ฐ• ๋ฐ ๋ฒ„์ „ ํ™•์ธ | `{ healthy: true, version: string }` |
---
#### ์˜ˆ์ œ
```javascript
const health = await client.global.health()
console.log(health.data.version)
```
---
### ์•ฑ
| ๋ฐฉ๋ฒ• | ์„ค๋ช… | ์‘๋‹ต |
| -------------- | ------------------------- | ------------------------------------------- |
| `app.log()` | ๋กœ๊ทธ ํ•ญ๋ชฉ ์ž‘์„ฑ | `boolean` |
| `app.agents()` | ์ด์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์—์ด์ „ํŠธ | <a href={typesUrl}><code>Agent[]</code></a> |
---
#### ์˜ˆ์ œ
```javascript
// Write a log entry
await client.app.log({
body: {
service: "my-app",
level: "info",
message: "Operation completed",
},
})
// List available agents
const agents = await client.app.agents()
```
---
### ํ”„๋กœ์ ํŠธ
| ๋ฐฉ๋ฒ• | ์„ค๋ช… | ์‘๋‹ต |
| ------------------- | ----------------------- | --------------------------------------------- |
| `project.list()` | ๋ชจ๋“  ํ”„๋กœ์ ํŠธ ๋ณด๊ธฐ | <a href={typesUrl}><code>Project[]</code></a> |
| `project.current()` | ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ๊ฐ€์ ธ ์˜ค๊ธฐ | <a href={typesUrl}><code>Project</code></a> |
---
#### ์˜ˆ์ œ
```javascript
// List all projects
const projects = await client.project.list()
// Get current project
const currentProject = await client.project.current()
```
---
### ๊ฒฝ๋กœ
| ๋ฐฉ๋ฒ• | ์„ค๋ช… | ์‘๋‹ต |
| ------------ | ------------------- | ---------------------------------------- |
| `path.get()` | ํ˜„์žฌ ๊ฒฝ๋กœ ๊ฐ€์ ธ ์˜ค๊ธฐ | <a href={typesUrl}><code>Path</code></a> |
---
#### ์˜ˆ์ œ
```javascript
// Get current path information
const pathInfo = await client.path.get()
```
---
### ๊ตฌ์„ฑ
| ๋ฐฉ๋ฒ• | ์„ค๋ช… | ์‘๋‹ต |
| -------------------- | -------------------------- | ----------------------------------------------------------------------------------------------------- |
| `config.get()` | ๊ตฌ์„ฑ ์ •๋ณด | <a href={typesUrl}><code>Config</code></a> |
| `config.providers()` | ๋ชฉ๋ก ์ œ๊ณต์—…์ฒด ๋ฐ ๊ธฐ๋ณธ ๋ชจ๋ธ | `{ providers: `<a href={typesUrl}><code>Provider[]</code></a>`, default: { [key: string]: string } }` |
---
#### ์˜ˆ์ œ
```javascript
const config = await client.config.get()
const { providers, default: defaults } = await client.config.providers()
```
---
### ์„ธ์…˜
| ๋ฉ”์„œ๋“œ | ์„ค๋ช… | ๋น„๊ณ  |
| ---------------------------------------------------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `session.list()` | ์„ธ์…˜ ์ผ๋žŒ | <a href={typesUrl}><code>Session[]</code></a> |
| `session.get({ path })` | ์„ธ์…˜ ๊ฐ€์ ธ ์˜ค๊ธฐ | <a href={typesUrl}><code>Session</code></a> |
| `session.children({ path })` | ํ•˜์œ„ ์„ธ์…˜ ๋ชฉ๋ก | ๋ฐ˜ํ’ˆ <a href={typesUrl}><code>Session</code></a> |
| `session.create({ body })` | ์„ธ์…˜ ๋งŒ๋“ค๊ธฐ | ๋ฆฌํ„ด <a href={typesUrl}><code>Session</code></a> |
| `session.delete({ path })` | ์„ธ์…˜ ์‚ญ์ œ | `boolean` ๋ฐ˜ํ’ˆ |
| `session.update({ path, body })` | ์—…๋ฐ์ดํŠธ ์„ธ์…˜ ์†์„ฑ | ๋ฐ˜ํ’ˆ <a href={typesUrl}><code>Session</code></a> |
| `session.init({ path, body })` | ์•ฑ ์ดˆ๊ธฐํ™” ๋ฐ `AGENTS.md` ๋ถ„์„ | `boolean`๋ฅผ ๋ฐ˜ํ™˜ |
| `session.abort({ path })` | ์šด์˜ ์ค‘์ธ ์„ธ์…˜ | ๋ฐ˜ํ’ˆ `boolean` |
| `session.share({ path })` | ๊ณต์œ  ์„ธ์…˜ | ๋ฐ˜ํ’ˆ <a href={typesUrl}><code>Session</code></a> |
| `session.unshare({ path })` | ๊ณต์œ  ์„ธ์…˜ ์ทจ์†Œ | ๋ฐ˜ํ’ˆ <a href={typesUrl}><code>Session</code></a> |
| `session.summarize({ path, body })` | ์„ธ์…˜ ์š”์•ฝ | ๋ฐ˜ํ’ˆ `boolean` |
| `session.messages({ path })` | ์„ธ์…˜์˜ ๋ฉ”์‹œ์ง€ ๋ชฉ๋ก | `{ info: `<a href={typesUrl}><code>Message</code></a>`, parts: `<a href={typesUrl}><code>Part</code></a>`}[]` |
| `session.message({ path })` | ๋ฉ”์‹œ์ง€ ์ƒ์„ธ์ •๋ณด | ๋ฐ˜ํ’ˆ `{ info: `<a href={typesUrl}><code>Message</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}` |
| `session.prompt({ path, body })` | prompt ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ | `body.noReply: true`๋Š” UserMessage(์ปจํ…์ŠคํŠธ ์ „์šฉ)๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ AI ์‘๋‹ต๊ณผ ํ•จ๊ป˜ <a href={typesUrl}><code>AssistantMessage</code></a>๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. [๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ](#๊ตฌ์กฐํ™”๋œ-์ถœ๋ ฅ)์„ ์œ„ํ•œ `body.outputFormat`์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค |
| `session.command({ path, body })` | ์„ธ์…˜์œผ๋กœ ๋ช…๋ น์„ ์ „์†ก | `{ info: `<a href={typesUrl}><code>AssistantMessage</code></a>`, parts: `<a href={typesUrl}><code>Part[]</code></a>`}` |
| `session.shell({ path, body })` | shell ๋ช…๋ น์„ ์‹คํ–‰ | <a href={typesUrl}><code>AssistantMessage</code></a> |
| `session.revert({ path, body })` | ๋ฉ”์‹œ์ง€ ๋‹ค์‹œ ๋ณ€ํ™˜ | <a href={typesUrl}><code>Session</code></a> |
| `session.unrevert({ path })` | ๋ฉ”์‹œ์ง€ ๋˜๋Œ๋ฆฌ๊ธฐ ์ทจ์†Œ | ๋ฐ˜ํ’ˆ <a href={typesUrl}><code>Session</code></a> |
| `postSessionByIdPermissionsByPermissionId({ path, body })` | ํ—ˆ๊ฐ€ ์š”์ฒญ ๋Œ€์‘ | ๋ฐ˜ํ’ˆ `boolean` |
---
#### ์˜ˆ์ œ
```javascript
// Create and manage sessions
const session = await client.session.create({
body: { title: "My session" },
})
const sessions = await client.session.list()
// Send a prompt message
const result = await client.session.prompt({
path: { id: session.id },
body: {
model: { providerID: "anthropic", modelID: "claude-3-5-sonnet-20241022" },
parts: [{ type: "text", text: "Hello!" }],
},
})
// Inject context without triggering AI response (useful for plugins)
await client.session.prompt({
path: { id: session.id },
body: {
noReply: true,
parts: [{ type: "text", text: "You are a helpful assistant." }],
},
})
```
---
### ํŒŒ์ผ
| ๋ฐฉ๋ฒ• | ์„ค๋ช… | ์‘๋‹ต |
| ------------------------- | ---------------------------- | -------------------------------------------------------------------------------------- |
| `find.text({ query })` | ํŒŒ์ผ์—์„œ ํ…์ŠคํŠธ ๊ฒ€์ƒ‰ | `path`, `lines`, `line_number`, `absolute_offset`, `submatches`์™€ ์ผ์น˜ํ•˜๋Š” ๊ฐœ์ฒด์˜ ๋ฐฐ์—ด |
| `find.files({ query })` | ์ด๋ฆ„์˜ ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ ์ฐพ๊ธฐ | `string[]` (๊ฒฝ๋กœ) |
| `find.symbols({ query })` | ์ž‘์—… ๊ณต๊ฐ„ ์‹ฌ๋ณผ ์ฐพ๊ธฐ | <a href={typesUrl}><code>Symbol[]</code></a> |
| `file.read({ query })` | ํŒŒ์ผ ๋ณด๊ธฐ | `{ type: "raw" \| "patch", content: string }` |
| `file.status({ query? })` | ํŠธ๋ž™ ๋œ ํŒŒ์ผ ์ƒํƒœ๋ฅผ ํ™•์ธ | <a href={typesUrl}><code>File[]</code></a> |
`find.files`๋Š” ๋ช‡๋ช‡ ์„ ํƒ์ ์ธ ์กฐํšŒ ๋ถ„์•ผ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:
- `type`: `"file"` ๋˜๋Š” `"directory"`
- `directory`: ๊ฒ€์ƒ‰์— ๋Œ€ํ•œ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ๋ฅผ override
- `limit`: ์ตœ๋Œ€ ๊ฒฐ๊ณผ (1-200)
---
#### ์˜ˆ์ œ
```javascript
// Search and read files
const textResults = await client.find.text({
query: { pattern: "function.*opencode" },
})
const files = await client.find.files({
query: { query: "*.ts", type: "file" },
})
const directories = await client.find.files({
query: { query: "packages", type: "directory", limit: 20 },
})
const content = await client.file.read({
query: { path: "src/index.ts" },
})
```
---
### TUI
| ๋ฐฉ๋ฒ• | ์„ค๋ช… | ์‘๋‹ต |
| ------------------------------ | ------------------------ | --------- |
| `tui.appendPrompt({ body })` | ํ”„๋กฌํ”„ํŠธ์— ํ…์ŠคํŠธ๋ฅผ ๋ถ€์—ฌ | `boolean` |
| `tui.openHelp()` | ๋„์›€๋ง ์—ด๊ธฐ | `boolean` |
| `tui.openSessions()` | ์„ธ์…˜ ์„ ํƒ ์•ˆ๋‚ด | `boolean` |
| `tui.openThemes()` | ํ…Œ๋งˆ ์„ ํƒ ์—ด๊ธฐ | `boolean` |
| `tui.openModels()` | ๋ชจ๋ธ ์„ ํƒ ์•ˆ๋‚ด | `boolean` |
| `tui.submitPrompt()` | ํ˜„์žฌ ํ”„๋กฌํ”„ํŠธ ์ œ์ถœ | `boolean` |
| `tui.clearPrompt()` | ํ”„๋กฌํ”„ํŠธ ํด๋ฆฌ์–ด | `boolean` |
| `tui.executeCommand({ body })` | ๋ช…๋ น์–ด ์‹คํ–‰ | `boolean` |
| `tui.showToast({ body })` | ํ† ์ŠคํŠธ ์•Œ๋ฆผ ํ‘œ์‹œ | `boolean` |
---
#### ์˜ˆ์ œ
```javascript
// Control TUI interface
await client.tui.appendPrompt({
body: { text: "Add this to prompt" },
})
await client.tui.showToast({
body: { message: "Task completed", variant: "success" },
})
```
---
### ์ธ์ฆ
| ๋ฐฉ๋ฒ• | ์„ค๋ช… | ์‘๋‹ต |
| ------------------- | -------------- | --------- |
| `auth.set({ ... })` | ์ธ์ฆ ์ž๊ฒฉ ์ฆ๋ช… | `boolean` |
---
#### ์˜ˆ์ œ
```javascript
await client.auth.set({
path: { id: "anthropic" },
body: { type: "api", key: "your-api-key" },
})
```
---
### ์ด๋ฒคํŠธ
| ๋ฐฉ๋ฒ• | ์„ค๋ช… | ์‘๋‹ต |
| ------------------- | ----------------------- | ----------------------- |
| `event.subscribe()` | ์„œ๋ฒ„-sent ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ | ์„œ๋ฒ„-sent ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ |
---
#### ์˜ˆ์ œ
```javascript
// Listen to real-time events
const events = await client.event.subscribe()
for await (const event of events.stream) {
console.log("Event:", event.type, event.properties)
}
```