@soederpop/luca 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +71 -0
- package/README.md +78 -0
- package/bun.lock +2928 -0
- package/bunfig.toml +3 -0
- package/commands/audit-docs.ts +740 -0
- package/commands/build-scaffolds.ts +154 -0
- package/commands/generate-api-docs.ts +114 -0
- package/commands/update-introspection.ts +67 -0
- package/docs/CLI.md +335 -0
- package/docs/README.md +88 -0
- package/docs/TABLE-OF-CONTENTS.md +157 -0
- package/docs/apis/clients/elevenlabs.md +84 -0
- package/docs/apis/clients/graph.md +56 -0
- package/docs/apis/clients/openai.md +69 -0
- package/docs/apis/clients/rest.md +41 -0
- package/docs/apis/clients/websocket.md +107 -0
- package/docs/apis/features/agi/assistant.md +471 -0
- package/docs/apis/features/agi/assistants-manager.md +154 -0
- package/docs/apis/features/agi/claude-code.md +602 -0
- package/docs/apis/features/agi/conversation-history.md +352 -0
- package/docs/apis/features/agi/conversation.md +333 -0
- package/docs/apis/features/agi/docs-reader.md +121 -0
- package/docs/apis/features/agi/openai-codex.md +318 -0
- package/docs/apis/features/agi/openapi.md +138 -0
- package/docs/apis/features/agi/semantic-search.md +387 -0
- package/docs/apis/features/agi/skills-library.md +216 -0
- package/docs/apis/features/node/container-link.md +133 -0
- package/docs/apis/features/node/content-db.md +313 -0
- package/docs/apis/features/node/disk-cache.md +379 -0
- package/docs/apis/features/node/dns.md +651 -0
- package/docs/apis/features/node/docker.md +705 -0
- package/docs/apis/features/node/downloader.md +81 -0
- package/docs/apis/features/node/esbuild.md +59 -0
- package/docs/apis/features/node/file-manager.md +182 -0
- package/docs/apis/features/node/fs.md +581 -0
- package/docs/apis/features/node/git.md +330 -0
- package/docs/apis/features/node/google-auth.md +174 -0
- package/docs/apis/features/node/google-calendar.md +187 -0
- package/docs/apis/features/node/google-docs.md +151 -0
- package/docs/apis/features/node/google-drive.md +225 -0
- package/docs/apis/features/node/google-sheets.md +179 -0
- package/docs/apis/features/node/grep.md +290 -0
- package/docs/apis/features/node/helpers.md +135 -0
- package/docs/apis/features/node/ink.md +334 -0
- package/docs/apis/features/node/ipc-socket.md +260 -0
- package/docs/apis/features/node/json-tree.md +86 -0
- package/docs/apis/features/node/launcher-app-command-listener.md +145 -0
- package/docs/apis/features/node/networking.md +281 -0
- package/docs/apis/features/node/nlp.md +133 -0
- package/docs/apis/features/node/opener.md +97 -0
- package/docs/apis/features/node/os.md +118 -0
- package/docs/apis/features/node/package-finder.md +402 -0
- package/docs/apis/features/node/postgres.md +212 -0
- package/docs/apis/features/node/proc.md +430 -0
- package/docs/apis/features/node/process-manager.md +210 -0
- package/docs/apis/features/node/python.md +278 -0
- package/docs/apis/features/node/repl.md +88 -0
- package/docs/apis/features/node/runpod.md +673 -0
- package/docs/apis/features/node/secure-shell.md +169 -0
- package/docs/apis/features/node/semantic-search.md +401 -0
- package/docs/apis/features/node/sqlite.md +211 -0
- package/docs/apis/features/node/telegram.md +254 -0
- package/docs/apis/features/node/tts.md +118 -0
- package/docs/apis/features/node/ui.md +703 -0
- package/docs/apis/features/node/vault.md +64 -0
- package/docs/apis/features/node/vm.md +84 -0
- package/docs/apis/features/node/window-manager.md +337 -0
- package/docs/apis/features/node/yaml-tree.md +85 -0
- package/docs/apis/features/node/yaml.md +176 -0
- package/docs/apis/features/web/asset-loader.md +47 -0
- package/docs/apis/features/web/container-link.md +133 -0
- package/docs/apis/features/web/esbuild.md +59 -0
- package/docs/apis/features/web/helpers.md +135 -0
- package/docs/apis/features/web/network.md +30 -0
- package/docs/apis/features/web/speech.md +55 -0
- package/docs/apis/features/web/vault.md +64 -0
- package/docs/apis/features/web/vm.md +84 -0
- package/docs/apis/features/web/voice.md +67 -0
- package/docs/apis/servers/express.md +127 -0
- package/docs/apis/servers/mcp.md +213 -0
- package/docs/apis/servers/websocket.md +99 -0
- package/docs/documentation-audit.md +134 -0
- package/docs/examples/content-db.md +77 -0
- package/docs/examples/disk-cache.md +83 -0
- package/docs/examples/docker.md +101 -0
- package/docs/examples/downloader.md +70 -0
- package/docs/examples/esbuild.md +80 -0
- package/docs/examples/file-manager.md +82 -0
- package/docs/examples/fs.md +83 -0
- package/docs/examples/git.md +85 -0
- package/docs/examples/google-auth.md +88 -0
- package/docs/examples/google-calendar.md +94 -0
- package/docs/examples/google-docs.md +82 -0
- package/docs/examples/google-drive.md +96 -0
- package/docs/examples/google-sheets.md +95 -0
- package/docs/examples/grep.md +85 -0
- package/docs/examples/ink-blocks.md +75 -0
- package/docs/examples/ink-renderer.md +41 -0
- package/docs/examples/ink.md +103 -0
- package/docs/examples/ipc-socket.md +103 -0
- package/docs/examples/json-tree.md +91 -0
- package/docs/examples/launcher-app-command-listener.md +120 -0
- package/docs/examples/networking.md +58 -0
- package/docs/examples/nlp.md +91 -0
- package/docs/examples/opener.md +78 -0
- package/docs/examples/os.md +72 -0
- package/docs/examples/package-finder.md +89 -0
- package/docs/examples/port-exposer.md +89 -0
- package/docs/examples/postgres.md +91 -0
- package/docs/examples/proc.md +81 -0
- package/docs/examples/process-manager.md +79 -0
- package/docs/examples/python.md +91 -0
- package/docs/examples/repl.md +93 -0
- package/docs/examples/runpod.md +119 -0
- package/docs/examples/secure-shell.md +92 -0
- package/docs/examples/sqlite.md +86 -0
- package/docs/examples/telegram.md +77 -0
- package/docs/examples/tts.md +86 -0
- package/docs/examples/ui.md +80 -0
- package/docs/examples/vault.md +70 -0
- package/docs/examples/vm.md +86 -0
- package/docs/examples/window-manager.md +125 -0
- package/docs/examples/yaml-tree.md +93 -0
- package/docs/examples/yaml.md +104 -0
- package/docs/ideas/class-registration-refactor-possibilities.md +197 -0
- package/docs/ideas/container-use-api.md +9 -0
- package/docs/ideas/easy-auth-for-express-servers-and-luca-serve.md +0 -0
- package/docs/ideas/feature-stacks.md +22 -0
- package/docs/ideas/luca-cli-self-sufficiency-demo.md +23 -0
- package/docs/ideas/mcp-design.md +9 -0
- package/docs/ideas/web-container-debugging-feature.md +13 -0
- package/docs/introspection-audit.md +49 -0
- package/docs/introspection.md +154 -0
- package/docs/mcp/readme.md +162 -0
- package/docs/models.ts +38 -0
- package/docs/philosophy.md +85 -0
- package/docs/principles.md +7 -0
- package/docs/prompts/audit-codebase-for-failures-to-use-the-container.md +34 -0
- package/docs/prompts/mcp-test-easy-command.md +27 -0
- package/docs/reports/assistant-bugs.md +38 -0
- package/docs/reports/attach-pattern-usage.md +18 -0
- package/docs/reports/code-audit-results.md +391 -0
- package/docs/reports/introspection-audit-tasks.md +378 -0
- package/docs/reports/luca-mcp-improvements.md +128 -0
- package/docs/scaffolds/client.md +140 -0
- package/docs/scaffolds/command.md +106 -0
- package/docs/scaffolds/endpoint.md +176 -0
- package/docs/scaffolds/feature.md +148 -0
- package/docs/scaffolds/server.md +187 -0
- package/docs/tasks/web-container-helper-discovery.md +71 -0
- package/docs/todos.md +1 -0
- package/docs/tutorials/01-getting-started.md +106 -0
- package/docs/tutorials/02-container.md +210 -0
- package/docs/tutorials/03-scripts.md +194 -0
- package/docs/tutorials/04-features-overview.md +196 -0
- package/docs/tutorials/05-state-and-events.md +171 -0
- package/docs/tutorials/06-servers.md +157 -0
- package/docs/tutorials/07-endpoints.md +198 -0
- package/docs/tutorials/08-commands.md +171 -0
- package/docs/tutorials/09-clients.md +162 -0
- package/docs/tutorials/10-creating-features.md +198 -0
- package/docs/tutorials/11-contentbase.md +191 -0
- package/docs/tutorials/12-assistants.md +215 -0
- package/docs/tutorials/13-introspection.md +147 -0
- package/docs/tutorials/14-type-system.md +174 -0
- package/docs/tutorials/15-project-patterns.md +222 -0
- package/docs/tutorials/16-google-features.md +534 -0
- package/docs/tutorials/17-tui-blocks.md +530 -0
- package/docs/tutorials/18-semantic-search.md +334 -0
- package/index.ts +1 -0
- package/luca.console.ts +9 -0
- package/main.py +6 -0
- package/package.json +154 -0
- package/pyproject.toml +7 -0
- package/scripts/animations/chrome-glitch.ts +55 -0
- package/scripts/animations/index.ts +16 -0
- package/scripts/animations/neon-pulse.ts +64 -0
- package/scripts/animations/types.ts +6 -0
- package/scripts/build-web.ts +28 -0
- package/scripts/examples/ask-luca-expert.ts +42 -0
- package/scripts/examples/assistant-questions.ts +12 -0
- package/scripts/examples/excalidraw-expert.ts +75 -0
- package/scripts/examples/expert-chat.ts +0 -0
- package/scripts/examples/file-manager.ts +14 -0
- package/scripts/examples/ideas.ts +12 -0
- package/scripts/examples/interactive-chat.ts +20 -0
- package/scripts/examples/openai-tool-calls.ts +113 -0
- package/scripts/examples/opening-a-web-browser.ts +5 -0
- package/scripts/examples/telegram-bot.ts +79 -0
- package/scripts/examples/telegram-ink-ui.ts +302 -0
- package/scripts/examples/using-assistant-with-mcp.ts +560 -0
- package/scripts/examples/using-claude-code.ts +10 -0
- package/scripts/examples/using-contentdb.ts +35 -0
- package/scripts/examples/using-conversations.ts +35 -0
- package/scripts/examples/using-disk-cache.ts +10 -0
- package/scripts/examples/using-docker-shell.ts +75 -0
- package/scripts/examples/using-elevenlabs.ts +25 -0
- package/scripts/examples/using-google-calendar.ts +57 -0
- package/scripts/examples/using-google-docs.ts +74 -0
- package/scripts/examples/using-google-drive.ts +74 -0
- package/scripts/examples/using-google-sheets.ts +89 -0
- package/scripts/examples/using-nlp.ts +55 -0
- package/scripts/examples/using-ollama.ts +10 -0
- package/scripts/examples/using-openai-codex.ts +23 -0
- package/scripts/examples/using-postgres.ts +55 -0
- package/scripts/examples/using-runpod.ts +32 -0
- package/scripts/examples/using-tts.ts +40 -0
- package/scripts/examples/vm-loading-esm-modules.ts +16 -0
- package/scripts/scaffold.ts +391 -0
- package/scripts/scratch.ts +15 -0
- package/scripts/test-command-listener.ts +123 -0
- package/scripts/test-window-manager-lifecycle.ts +86 -0
- package/scripts/test-window-manager.ts +43 -0
- package/scripts/update-introspection-data.ts +58 -0
- package/src/agi/README.md +14 -0
- package/src/agi/container.server.ts +114 -0
- package/src/agi/endpoints/ask.ts +60 -0
- package/src/agi/endpoints/conversations/[id].ts +45 -0
- package/src/agi/endpoints/conversations.ts +31 -0
- package/src/agi/endpoints/experts.ts +37 -0
- package/src/agi/features/assistant.ts +767 -0
- package/src/agi/features/assistants-manager.ts +260 -0
- package/src/agi/features/claude-code.ts +1111 -0
- package/src/agi/features/conversation-history.ts +497 -0
- package/src/agi/features/conversation.ts +799 -0
- package/src/agi/features/openai-codex.ts +631 -0
- package/src/agi/features/openapi.ts +438 -0
- package/src/agi/features/skills-library.ts +425 -0
- package/src/agi/index.ts +6 -0
- package/src/agi/lib/token-counter.ts +122 -0
- package/src/browser.ts +25 -0
- package/src/bus.ts +100 -0
- package/src/cli/cli.ts +70 -0
- package/src/client.ts +461 -0
- package/src/clients/civitai/index.ts +541 -0
- package/src/clients/client-template.ts +41 -0
- package/src/clients/comfyui/index.ts +597 -0
- package/src/clients/elevenlabs/index.ts +291 -0
- package/src/clients/openai/index.ts +451 -0
- package/src/clients/supabase/index.ts +366 -0
- package/src/command.ts +164 -0
- package/src/commands/chat.ts +182 -0
- package/src/commands/console.ts +192 -0
- package/src/commands/describe.ts +433 -0
- package/src/commands/eval.ts +116 -0
- package/src/commands/help.ts +214 -0
- package/src/commands/index.ts +14 -0
- package/src/commands/mcp.ts +64 -0
- package/src/commands/prompt.ts +807 -0
- package/src/commands/run.ts +257 -0
- package/src/commands/sandbox-mcp.ts +439 -0
- package/src/commands/scaffold.ts +79 -0
- package/src/commands/serve.ts +172 -0
- package/src/container.ts +781 -0
- package/src/endpoint.ts +340 -0
- package/src/feature.ts +75 -0
- package/src/hash-object.ts +97 -0
- package/src/helper.ts +543 -0
- package/src/introspection/generated.agi.ts +23388 -0
- package/src/introspection/generated.node.ts +18899 -0
- package/src/introspection/generated.web.ts +2021 -0
- package/src/introspection/index.ts +256 -0
- package/src/introspection/scan.ts +912 -0
- package/src/node/container.ts +354 -0
- package/src/node/feature.ts +13 -0
- package/src/node/features/container-link.ts +558 -0
- package/src/node/features/content-db.ts +475 -0
- package/src/node/features/disk-cache.ts +382 -0
- package/src/node/features/dns.ts +655 -0
- package/src/node/features/docker.ts +912 -0
- package/src/node/features/downloader.ts +92 -0
- package/src/node/features/esbuild.ts +68 -0
- package/src/node/features/file-manager.ts +357 -0
- package/src/node/features/fs.ts +534 -0
- package/src/node/features/git.ts +492 -0
- package/src/node/features/google-auth.ts +502 -0
- package/src/node/features/google-calendar.ts +300 -0
- package/src/node/features/google-docs.ts +404 -0
- package/src/node/features/google-drive.ts +339 -0
- package/src/node/features/google-sheets.ts +279 -0
- package/src/node/features/grep.ts +406 -0
- package/src/node/features/helpers.ts +374 -0
- package/src/node/features/ink.ts +490 -0
- package/src/node/features/ipc-socket.ts +459 -0
- package/src/node/features/json-tree.ts +188 -0
- package/src/node/features/launcher-app-command-listener.ts +388 -0
- package/src/node/features/networking.ts +925 -0
- package/src/node/features/nlp.ts +211 -0
- package/src/node/features/opener.ts +166 -0
- package/src/node/features/os.ts +157 -0
- package/src/node/features/package-finder.ts +539 -0
- package/src/node/features/port-exposer.ts +342 -0
- package/src/node/features/postgres.ts +273 -0
- package/src/node/features/proc.ts +502 -0
- package/src/node/features/process-manager.ts +542 -0
- package/src/node/features/python.ts +444 -0
- package/src/node/features/repl.ts +194 -0
- package/src/node/features/runpod.ts +802 -0
- package/src/node/features/secure-shell.ts +248 -0
- package/src/node/features/semantic-search.ts +924 -0
- package/src/node/features/sqlite.ts +289 -0
- package/src/node/features/telegram.ts +342 -0
- package/src/node/features/tts.ts +184 -0
- package/src/node/features/ui.ts +857 -0
- package/src/node/features/vault.ts +164 -0
- package/src/node/features/vm.ts +312 -0
- package/src/node/features/window-manager.ts +804 -0
- package/src/node/features/yaml-tree.ts +149 -0
- package/src/node/features/yaml.ts +132 -0
- package/src/node.ts +70 -0
- package/src/react/index.ts +175 -0
- package/src/registry.ts +199 -0
- package/src/scaffolds/generated.ts +1613 -0
- package/src/scaffolds/template.ts +37 -0
- package/src/schemas/base.ts +255 -0
- package/src/server.ts +135 -0
- package/src/servers/express.ts +209 -0
- package/src/servers/mcp.ts +805 -0
- package/src/servers/socket.ts +120 -0
- package/src/state.ts +101 -0
- package/src/web/clients/socket.ts +82 -0
- package/src/web/container.ts +74 -0
- package/src/web/extension.ts +30 -0
- package/src/web/feature.ts +12 -0
- package/src/web/features/asset-loader.ts +64 -0
- package/src/web/features/container-link.ts +385 -0
- package/src/web/features/esbuild.ts +79 -0
- package/src/web/features/helpers.ts +267 -0
- package/src/web/features/network.ts +61 -0
- package/src/web/features/speech.ts +87 -0
- package/src/web/features/vault.ts +189 -0
- package/src/web/features/vm.ts +78 -0
- package/src/web/features/voice-recognition.ts +129 -0
- package/src/web/shims/isomorphic-vm.ts +149 -0
- package/test/bus.test.ts +134 -0
- package/test/clients-servers.test.ts +216 -0
- package/test/container-link.test.ts +274 -0
- package/test/features.test.ts +160 -0
- package/test/integration.test.ts +787 -0
- package/test/node-container.test.ts +121 -0
- package/test/rate-limit.test.ts +272 -0
- package/test/semantic-search.test.ts +550 -0
- package/test/state.test.ts +121 -0
- package/test-integration/assistant.test.ts +138 -0
- package/test-integration/assistants-manager.test.ts +123 -0
- package/test-integration/claude-code.test.ts +98 -0
- package/test-integration/conversation-history.test.ts +205 -0
- package/test-integration/conversation.test.ts +137 -0
- package/test-integration/elevenlabs.test.ts +55 -0
- package/test-integration/google-services.test.ts +80 -0
- package/test-integration/helpers.ts +89 -0
- package/test-integration/openai-codex.test.ts +93 -0
- package/test-integration/runpod.test.ts +58 -0
- package/test-integration/server-endpoints.test.ts +97 -0
- package/test-integration/skills-library.test.ts +157 -0
- package/test-integration/telegram.test.ts +46 -0
- package/tsconfig.json +58 -0
- package/uv.lock +8 -0
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
# ConversationHistory (features.conversationHistory)
|
|
2
|
+
|
|
3
|
+
No description provided
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('conversationHistory', {
|
|
9
|
+
// Custom cache directory for conversation storage
|
|
10
|
+
cachePath,
|
|
11
|
+
// Namespace prefix for cache keys to isolate datasets
|
|
12
|
+
namespace,
|
|
13
|
+
})
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Options (Zod v4 schema)
|
|
17
|
+
|
|
18
|
+
| Property | Type | Description |
|
|
19
|
+
|----------|------|-------------|
|
|
20
|
+
| `cachePath` | `string` | Custom cache directory for conversation storage |
|
|
21
|
+
| `namespace` | `string` | Namespace prefix for cache keys to isolate datasets |
|
|
22
|
+
|
|
23
|
+
## Methods
|
|
24
|
+
|
|
25
|
+
### save
|
|
26
|
+
|
|
27
|
+
Save a conversation. Creates or overwrites by ID.
|
|
28
|
+
|
|
29
|
+
**Parameters:**
|
|
30
|
+
|
|
31
|
+
| Name | Type | Required | Description |
|
|
32
|
+
|------|------|----------|-------------|
|
|
33
|
+
| `record` | `ConversationRecord` | ✓ | The full conversation record to persist |
|
|
34
|
+
|
|
35
|
+
`ConversationRecord` properties:
|
|
36
|
+
|
|
37
|
+
| Property | Type | Description |
|
|
38
|
+
|----------|------|-------------|
|
|
39
|
+
| `id` | `string` | |
|
|
40
|
+
| `title` | `string` | |
|
|
41
|
+
| `model` | `string` | |
|
|
42
|
+
| `messages` | `Message[]` | |
|
|
43
|
+
| `tags` | `string[]` | |
|
|
44
|
+
| `thread` | `string` | |
|
|
45
|
+
| `createdAt` | `string` | |
|
|
46
|
+
| `updatedAt` | `string` | |
|
|
47
|
+
| `messageCount` | `number` | |
|
|
48
|
+
| `metadata` | `Record<string, any>` | |
|
|
49
|
+
|
|
50
|
+
**Returns:** `Promise<void>`
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
### create
|
|
55
|
+
|
|
56
|
+
Create a new conversation from messages, returning the saved record.
|
|
57
|
+
|
|
58
|
+
**Parameters:**
|
|
59
|
+
|
|
60
|
+
| Name | Type | Required | Description |
|
|
61
|
+
|------|------|----------|-------------|
|
|
62
|
+
| `opts` | `{
|
|
63
|
+
id?: string
|
|
64
|
+
title?: string
|
|
65
|
+
model?: string
|
|
66
|
+
messages: Message[]
|
|
67
|
+
tags?: string[]
|
|
68
|
+
thread?: string
|
|
69
|
+
metadata?: Record<string, any>
|
|
70
|
+
}` | ✓ | Creation options including messages, optional title, model, tags, thread, and metadata |
|
|
71
|
+
|
|
72
|
+
**Returns:** `Promise<ConversationRecord>`
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
### load
|
|
77
|
+
|
|
78
|
+
Load a full conversation by ID, including all messages.
|
|
79
|
+
|
|
80
|
+
**Parameters:**
|
|
81
|
+
|
|
82
|
+
| Name | Type | Required | Description |
|
|
83
|
+
|------|------|----------|-------------|
|
|
84
|
+
| `id` | `string` | ✓ | The conversation ID |
|
|
85
|
+
|
|
86
|
+
**Returns:** `Promise<ConversationRecord | null>`
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
### getMeta
|
|
91
|
+
|
|
92
|
+
Load just the metadata for a conversation (no messages).
|
|
93
|
+
|
|
94
|
+
**Parameters:**
|
|
95
|
+
|
|
96
|
+
| Name | Type | Required | Description |
|
|
97
|
+
|------|------|----------|-------------|
|
|
98
|
+
| `id` | `string` | ✓ | The conversation ID |
|
|
99
|
+
|
|
100
|
+
**Returns:** `Promise<ConversationMeta | null>`
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
### append
|
|
105
|
+
|
|
106
|
+
Append messages to an existing conversation.
|
|
107
|
+
|
|
108
|
+
**Parameters:**
|
|
109
|
+
|
|
110
|
+
| Name | Type | Required | Description |
|
|
111
|
+
|------|------|----------|-------------|
|
|
112
|
+
| `id` | `string` | ✓ | The conversation ID to append to |
|
|
113
|
+
| `messages` | `Message[]` | ✓ | The messages to append |
|
|
114
|
+
|
|
115
|
+
**Returns:** `Promise<ConversationRecord | null>`
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
### delete
|
|
120
|
+
|
|
121
|
+
Delete a conversation by ID.
|
|
122
|
+
|
|
123
|
+
**Parameters:**
|
|
124
|
+
|
|
125
|
+
| Name | Type | Required | Description |
|
|
126
|
+
|------|------|----------|-------------|
|
|
127
|
+
| `id` | `string` | ✓ | The conversation ID to delete |
|
|
128
|
+
|
|
129
|
+
**Returns:** `Promise<boolean>`
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
### list
|
|
134
|
+
|
|
135
|
+
List all conversation metadata, with optional search/filter. Loads only the lightweight meta records, never the full messages.
|
|
136
|
+
|
|
137
|
+
**Parameters:**
|
|
138
|
+
|
|
139
|
+
| Name | Type | Required | Description |
|
|
140
|
+
|------|------|----------|-------------|
|
|
141
|
+
| `options` | `SearchOptions` | | Optional filters for tag, thread, model, date range, and text query |
|
|
142
|
+
|
|
143
|
+
`SearchOptions` properties:
|
|
144
|
+
|
|
145
|
+
| Property | Type | Description |
|
|
146
|
+
|----------|------|-------------|
|
|
147
|
+
| `tag` | `string` | |
|
|
148
|
+
| `tags` | `string[]` | |
|
|
149
|
+
| `thread` | `string` | |
|
|
150
|
+
| `model` | `string` | |
|
|
151
|
+
| `before` | `string | Date` | |
|
|
152
|
+
| `after` | `string | Date` | |
|
|
153
|
+
| `query` | `string` | |
|
|
154
|
+
| `limit` | `number` | |
|
|
155
|
+
| `offset` | `number` | |
|
|
156
|
+
|
|
157
|
+
**Returns:** `Promise<ConversationMeta[]>`
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
### search
|
|
162
|
+
|
|
163
|
+
Search conversations by text query across titles, tags, and metadata. Also supports filtering by tag, thread, model, and date range.
|
|
164
|
+
|
|
165
|
+
**Parameters:**
|
|
166
|
+
|
|
167
|
+
| Name | Type | Required | Description |
|
|
168
|
+
|------|------|----------|-------------|
|
|
169
|
+
| `options` | `SearchOptions` | ✓ | Search and filter criteria |
|
|
170
|
+
|
|
171
|
+
`SearchOptions` properties:
|
|
172
|
+
|
|
173
|
+
| Property | Type | Description |
|
|
174
|
+
|----------|------|-------------|
|
|
175
|
+
| `tag` | `string` | |
|
|
176
|
+
| `tags` | `string[]` | |
|
|
177
|
+
| `thread` | `string` | |
|
|
178
|
+
| `model` | `string` | |
|
|
179
|
+
| `before` | `string | Date` | |
|
|
180
|
+
| `after` | `string | Date` | |
|
|
181
|
+
| `query` | `string` | |
|
|
182
|
+
| `limit` | `number` | |
|
|
183
|
+
| `offset` | `number` | |
|
|
184
|
+
|
|
185
|
+
**Returns:** `Promise<ConversationMeta[]>`
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
### allTags
|
|
190
|
+
|
|
191
|
+
Get all unique tags across all conversations.
|
|
192
|
+
|
|
193
|
+
**Returns:** `Promise<string[]>`
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
### allThreads
|
|
198
|
+
|
|
199
|
+
Get all unique threads across all conversations.
|
|
200
|
+
|
|
201
|
+
**Returns:** `Promise<string[]>`
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
### tag
|
|
206
|
+
|
|
207
|
+
Tag a conversation. Adds tags without duplicates.
|
|
208
|
+
|
|
209
|
+
**Parameters:**
|
|
210
|
+
|
|
211
|
+
| Name | Type | Required | Description |
|
|
212
|
+
|------|------|----------|-------------|
|
|
213
|
+
| `id` | `string` | ✓ | The conversation ID |
|
|
214
|
+
| `tags` | `string[]` | ✓ | One or more tags to add |
|
|
215
|
+
|
|
216
|
+
**Returns:** `Promise<boolean>`
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
### untag
|
|
221
|
+
|
|
222
|
+
Remove tags from a conversation.
|
|
223
|
+
|
|
224
|
+
**Parameters:**
|
|
225
|
+
|
|
226
|
+
| Name | Type | Required | Description |
|
|
227
|
+
|------|------|----------|-------------|
|
|
228
|
+
| `id` | `string` | ✓ | The conversation ID |
|
|
229
|
+
| `tags` | `string[]` | ✓ | One or more tags to remove |
|
|
230
|
+
|
|
231
|
+
**Returns:** `Promise<boolean>`
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
### updateMeta
|
|
236
|
+
|
|
237
|
+
Update metadata on a conversation without touching messages.
|
|
238
|
+
|
|
239
|
+
**Parameters:**
|
|
240
|
+
|
|
241
|
+
| Name | Type | Required | Description |
|
|
242
|
+
|------|------|----------|-------------|
|
|
243
|
+
| `id` | `string` | ✓ | The conversation ID |
|
|
244
|
+
| `updates` | `Partial<Pick<ConversationRecord, 'title' | 'tags' | 'thread' | 'metadata'>>` | ✓ | Partial updates for title, tags, thread, and/or metadata |
|
|
245
|
+
|
|
246
|
+
**Returns:** `Promise<boolean>`
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
### findByThread
|
|
251
|
+
|
|
252
|
+
Find the most recent conversation for an exact thread ID.
|
|
253
|
+
|
|
254
|
+
**Parameters:**
|
|
255
|
+
|
|
256
|
+
| Name | Type | Required | Description |
|
|
257
|
+
|------|------|----------|-------------|
|
|
258
|
+
| `thread` | `string` | ✓ | The exact thread ID to match |
|
|
259
|
+
|
|
260
|
+
**Returns:** `Promise<ConversationRecord | null>`
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
### findByThreadPrefix
|
|
265
|
+
|
|
266
|
+
Find all conversations whose thread starts with a prefix.
|
|
267
|
+
|
|
268
|
+
**Parameters:**
|
|
269
|
+
|
|
270
|
+
| Name | Type | Required | Description |
|
|
271
|
+
|------|------|----------|-------------|
|
|
272
|
+
| `prefix` | `string` | ✓ | The thread prefix to match |
|
|
273
|
+
|
|
274
|
+
**Returns:** `Promise<ConversationMeta[]>`
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
### deleteThread
|
|
279
|
+
|
|
280
|
+
Delete all conversations for an exact thread.
|
|
281
|
+
|
|
282
|
+
**Parameters:**
|
|
283
|
+
|
|
284
|
+
| Name | Type | Required | Description |
|
|
285
|
+
|------|------|----------|-------------|
|
|
286
|
+
| `thread` | `string` | ✓ | The exact thread ID |
|
|
287
|
+
|
|
288
|
+
**Returns:** `Promise<number>`
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
### deleteByThreadPrefix
|
|
293
|
+
|
|
294
|
+
Delete all conversations matching a thread prefix.
|
|
295
|
+
|
|
296
|
+
**Parameters:**
|
|
297
|
+
|
|
298
|
+
| Name | Type | Required | Description |
|
|
299
|
+
|------|------|----------|-------------|
|
|
300
|
+
| `prefix` | `string` | ✓ | The thread prefix to match |
|
|
301
|
+
|
|
302
|
+
**Returns:** `Promise<number>`
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
## Getters
|
|
307
|
+
|
|
308
|
+
| Property | Type | Description |
|
|
309
|
+
|----------|------|-------------|
|
|
310
|
+
| `diskCache` | `DiskCache` | |
|
|
311
|
+
| `namespace` | `string` | |
|
|
312
|
+
|
|
313
|
+
## Events (Zod v4 schema)
|
|
314
|
+
|
|
315
|
+
### saved
|
|
316
|
+
|
|
317
|
+
Event emitted by ConversationHistory
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
### deleted
|
|
322
|
+
|
|
323
|
+
Event emitted by ConversationHistory
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
## State (Zod v4 schema)
|
|
328
|
+
|
|
329
|
+
| Property | Type | Description |
|
|
330
|
+
|----------|------|-------------|
|
|
331
|
+
| `enabled` | `boolean` | Whether this feature is currently enabled |
|
|
332
|
+
| `conversationCount` | `number` | Total number of stored conversations |
|
|
333
|
+
| `lastSaved` | `string` | ISO timestamp of the last save operation |
|
|
334
|
+
|
|
335
|
+
## Examples
|
|
336
|
+
|
|
337
|
+
**features.conversationHistory**
|
|
338
|
+
|
|
339
|
+
```ts
|
|
340
|
+
const history = container.feature('conversationHistory', {
|
|
341
|
+
namespace: 'my-app',
|
|
342
|
+
cachePath: '/tmp/conversations'
|
|
343
|
+
})
|
|
344
|
+
|
|
345
|
+
// Create and retrieve conversations
|
|
346
|
+
const record = await history.create({ messages, title: 'My Chat' })
|
|
347
|
+
const loaded = await history.load(record.id)
|
|
348
|
+
|
|
349
|
+
// Search and filter
|
|
350
|
+
const results = await history.search({ tag: 'important', limit: 10 })
|
|
351
|
+
```
|
|
352
|
+
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
# Conversation (features.conversation)
|
|
2
|
+
|
|
3
|
+
No description provided
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('conversation', {
|
|
9
|
+
// A unique identifier for the conversation
|
|
10
|
+
id,
|
|
11
|
+
// A human-readable title for the conversation
|
|
12
|
+
title,
|
|
13
|
+
// A unique identifier for threads, an arbitrary grouping mechanism
|
|
14
|
+
thread,
|
|
15
|
+
// Any available OpenAI model
|
|
16
|
+
model,
|
|
17
|
+
// Initial message history to seed the conversation
|
|
18
|
+
history,
|
|
19
|
+
// Tools the model can call during conversation
|
|
20
|
+
tools,
|
|
21
|
+
// Remote MCP servers keyed by server label
|
|
22
|
+
mcpServers,
|
|
23
|
+
// Completion API mode. auto uses Responses unless local=true
|
|
24
|
+
api,
|
|
25
|
+
// Tags for categorizing and searching this conversation
|
|
26
|
+
tags,
|
|
27
|
+
// Arbitrary metadata to attach to this conversation
|
|
28
|
+
metadata,
|
|
29
|
+
// Options for the OpenAI client
|
|
30
|
+
clientOptions,
|
|
31
|
+
// Whether to use the local ollama models instead of the remote OpenAI models
|
|
32
|
+
local,
|
|
33
|
+
// Maximum number of output tokens per completion
|
|
34
|
+
maxTokens,
|
|
35
|
+
// Enable automatic compaction when input tokens approach the context limit
|
|
36
|
+
autoCompact,
|
|
37
|
+
// Fraction of context window at which auto-compact triggers (default 0.8)
|
|
38
|
+
compactThreshold,
|
|
39
|
+
// Override the inferred context window size for this model
|
|
40
|
+
contextWindow,
|
|
41
|
+
// Number of recent messages to preserve after compaction (default 4)
|
|
42
|
+
compactKeepRecent,
|
|
43
|
+
})
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Options (Zod v4 schema)
|
|
47
|
+
|
|
48
|
+
| Property | Type | Description |
|
|
49
|
+
|----------|------|-------------|
|
|
50
|
+
| `id` | `string` | A unique identifier for the conversation |
|
|
51
|
+
| `title` | `string` | A human-readable title for the conversation |
|
|
52
|
+
| `thread` | `string` | A unique identifier for threads, an arbitrary grouping mechanism |
|
|
53
|
+
| `model` | `string` | Any available OpenAI model |
|
|
54
|
+
| `history` | `array` | Initial message history to seed the conversation |
|
|
55
|
+
| `tools` | `object` | Tools the model can call during conversation |
|
|
56
|
+
| `mcpServers` | `object` | Remote MCP servers keyed by server label |
|
|
57
|
+
| `api` | `string` | Completion API mode. auto uses Responses unless local=true |
|
|
58
|
+
| `tags` | `array` | Tags for categorizing and searching this conversation |
|
|
59
|
+
| `metadata` | `object` | Arbitrary metadata to attach to this conversation |
|
|
60
|
+
| `clientOptions` | `object` | Options for the OpenAI client |
|
|
61
|
+
| `local` | `boolean` | Whether to use the local ollama models instead of the remote OpenAI models |
|
|
62
|
+
| `maxTokens` | `number` | Maximum number of output tokens per completion |
|
|
63
|
+
| `autoCompact` | `boolean` | Enable automatic compaction when input tokens approach the context limit |
|
|
64
|
+
| `compactThreshold` | `number` | Fraction of context window at which auto-compact triggers (default 0.8) |
|
|
65
|
+
| `contextWindow` | `number` | Override the inferred context window size for this model |
|
|
66
|
+
| `compactKeepRecent` | `number` | Number of recent messages to preserve after compaction (default 4) |
|
|
67
|
+
|
|
68
|
+
## Methods
|
|
69
|
+
|
|
70
|
+
### estimateTokens
|
|
71
|
+
|
|
72
|
+
Estimate the input token count for the current messages array using the js-tiktoken tokenizer. Updates state.
|
|
73
|
+
|
|
74
|
+
**Returns:** `number`
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
### summarize
|
|
79
|
+
|
|
80
|
+
Generate a summary of the conversation so far using the LLM. Read-only — does not modify messages.
|
|
81
|
+
|
|
82
|
+
**Returns:** `Promise<string>`
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
### compact
|
|
87
|
+
|
|
88
|
+
Compact the conversation by summarizing old messages and replacing them with a summary message. Keeps the system message (if any) and the most recent N messages.
|
|
89
|
+
|
|
90
|
+
**Parameters:**
|
|
91
|
+
|
|
92
|
+
| Name | Type | Required | Description |
|
|
93
|
+
|------|------|----------|-------------|
|
|
94
|
+
| `options` | `{ keepRecent?: number }` | | Parameter options |
|
|
95
|
+
|
|
96
|
+
**Returns:** `Promise<{ summary: string; removedCount: number; estimatedTokens: number }>`
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
### ask
|
|
101
|
+
|
|
102
|
+
Send a message and get a streamed response. Automatically handles tool calls by invoking the registered handlers and feeding results back to the model until a final text response is produced.
|
|
103
|
+
|
|
104
|
+
**Parameters:**
|
|
105
|
+
|
|
106
|
+
| Name | Type | Required | Description |
|
|
107
|
+
|------|------|----------|-------------|
|
|
108
|
+
| `content` | `string | ContentPart[]` | ✓ | The user message, either a string or array of content parts (text + images) |
|
|
109
|
+
| `options` | `AskOptions` | | Parameter options |
|
|
110
|
+
|
|
111
|
+
`AskOptions` properties:
|
|
112
|
+
|
|
113
|
+
| Property | Type | Description |
|
|
114
|
+
|----------|------|-------------|
|
|
115
|
+
| `maxTokens` | `number` | |
|
|
116
|
+
|
|
117
|
+
**Returns:** `Promise<string>`
|
|
118
|
+
|
|
119
|
+
```ts
|
|
120
|
+
const reply = await conversation.ask("What's the weather in SF?")
|
|
121
|
+
// With image:
|
|
122
|
+
const reply = await conversation.ask([
|
|
123
|
+
{ type: 'text', text: 'What is in this diagram?' },
|
|
124
|
+
{ type: 'image_url', image_url: { url: 'data:image/png;base64,...' } }
|
|
125
|
+
])
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
### save
|
|
131
|
+
|
|
132
|
+
Persist this conversation to disk via conversationHistory. Creates a new record if this conversation hasn't been saved before, or updates the existing one.
|
|
133
|
+
|
|
134
|
+
**Parameters:**
|
|
135
|
+
|
|
136
|
+
| Name | Type | Required | Description |
|
|
137
|
+
|------|------|----------|-------------|
|
|
138
|
+
| `opts` | `{ title?: string; tags?: string[]; thread?: string; metadata?: Record<string, any> }` | | Optional overrides for title, tags, thread, or metadata |
|
|
139
|
+
|
|
140
|
+
**Returns:** `void`
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
### pushMessage
|
|
145
|
+
|
|
146
|
+
Append a message to the conversation state.
|
|
147
|
+
|
|
148
|
+
**Parameters:**
|
|
149
|
+
|
|
150
|
+
| Name | Type | Required | Description |
|
|
151
|
+
|------|------|----------|-------------|
|
|
152
|
+
| `message` | `Message` | ✓ | The message to append |
|
|
153
|
+
|
|
154
|
+
**Returns:** `void`
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
## Getters
|
|
159
|
+
|
|
160
|
+
| Property | Type | Description |
|
|
161
|
+
|----------|------|-------------|
|
|
162
|
+
| `tools` | `Record<string, any>` | Returns the registered tools available for the model to call. |
|
|
163
|
+
| `mcpServers` | `Record<string, ConversationMCPServer>` | Returns configured remote MCP servers keyed by server label. |
|
|
164
|
+
| `messages` | `Message[]` | Returns the full message history of the conversation. |
|
|
165
|
+
| `model` | `string` | Returns the OpenAI model name being used for completions. |
|
|
166
|
+
| `apiMode` | `'responses' | 'chat'` | Returns the active completion API mode after resolving auto/local behavior. |
|
|
167
|
+
| `isStreaming` | `boolean` | Whether a streaming response is currently in progress. |
|
|
168
|
+
| `contextWindow` | `number` | The context window size for the current model (from options override or auto-detected). |
|
|
169
|
+
| `isNearContextLimit` | `boolean` | Whether the conversation is approaching the context limit. |
|
|
170
|
+
| `openai` | `any` | Returns the OpenAI client instance from the container. |
|
|
171
|
+
| `history` | `ConversationHistory` | Returns the conversationHistory feature for persistence. |
|
|
172
|
+
|
|
173
|
+
## Events (Zod v4 schema)
|
|
174
|
+
|
|
175
|
+
### summarizeStart
|
|
176
|
+
|
|
177
|
+
Event emitted by Conversation
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
### summarizeEnd
|
|
182
|
+
|
|
183
|
+
Event emitted by Conversation
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
### compactStart
|
|
188
|
+
|
|
189
|
+
Event emitted by Conversation
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
### compactEnd
|
|
194
|
+
|
|
195
|
+
Event emitted by Conversation
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
### autoCompactTriggered
|
|
200
|
+
|
|
201
|
+
Event emitted by Conversation
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
### userMessage
|
|
206
|
+
|
|
207
|
+
Event emitted by Conversation
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
### turnStart
|
|
212
|
+
|
|
213
|
+
Event emitted by Conversation
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
### rawEvent
|
|
218
|
+
|
|
219
|
+
Event emitted by Conversation
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
### mcpEvent
|
|
224
|
+
|
|
225
|
+
Event emitted by Conversation
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
### chunk
|
|
230
|
+
|
|
231
|
+
Event emitted by Conversation
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
### preview
|
|
236
|
+
|
|
237
|
+
Event emitted by Conversation
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
### responseCompleted
|
|
242
|
+
|
|
243
|
+
Event emitted by Conversation
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
### toolCallsStart
|
|
248
|
+
|
|
249
|
+
Event emitted by Conversation
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
### toolError
|
|
254
|
+
|
|
255
|
+
Event emitted by Conversation
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
### toolCall
|
|
260
|
+
|
|
261
|
+
Event emitted by Conversation
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
### toolResult
|
|
266
|
+
|
|
267
|
+
Event emitted by Conversation
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
### toolCallsEnd
|
|
272
|
+
|
|
273
|
+
Event emitted by Conversation
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
### turnEnd
|
|
278
|
+
|
|
279
|
+
Event emitted by Conversation
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
### response
|
|
284
|
+
|
|
285
|
+
Event emitted by Conversation
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
## State (Zod v4 schema)
|
|
290
|
+
|
|
291
|
+
| Property | Type | Description |
|
|
292
|
+
|----------|------|-------------|
|
|
293
|
+
| `enabled` | `boolean` | Whether this feature is currently enabled |
|
|
294
|
+
| `id` | `string` | Unique identifier for this conversation instance |
|
|
295
|
+
| `thread` | `string` | Thread identifier for grouping conversations |
|
|
296
|
+
| `model` | `string` | The OpenAI model being used |
|
|
297
|
+
| `messages` | `array` | Full message history of the conversation |
|
|
298
|
+
| `streaming` | `boolean` | Whether a streaming response is currently in progress |
|
|
299
|
+
| `lastResponse` | `string` | The last assistant response text |
|
|
300
|
+
| `toolCalls` | `number` | Total number of tool calls made in this conversation |
|
|
301
|
+
| `api` | `string` | Which completion API is active for this conversation |
|
|
302
|
+
| `lastResponseId` | `any` | Most recent OpenAI Responses API response ID for continuing conversation state |
|
|
303
|
+
| `tokenUsage` | `object` | Cumulative token usage statistics |
|
|
304
|
+
| `estimatedInputTokens` | `number` | Estimated input token count for the current messages array |
|
|
305
|
+
| `compactionCount` | `number` | Number of times compact() has been called |
|
|
306
|
+
| `contextWindow` | `number` | The context window size for the current model |
|
|
307
|
+
|
|
308
|
+
## Examples
|
|
309
|
+
|
|
310
|
+
**features.conversation**
|
|
311
|
+
|
|
312
|
+
```ts
|
|
313
|
+
const conversation = container.feature('conversation', {
|
|
314
|
+
model: 'gpt-4.1',
|
|
315
|
+
tools: myToolMap,
|
|
316
|
+
history: [{ role: 'system', content: 'You are a helpful assistant.' }]
|
|
317
|
+
})
|
|
318
|
+
const reply = await conversation.ask('What is the meaning of life?')
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
**ask**
|
|
324
|
+
|
|
325
|
+
```ts
|
|
326
|
+
const reply = await conversation.ask("What's the weather in SF?")
|
|
327
|
+
// With image:
|
|
328
|
+
const reply = await conversation.ask([
|
|
329
|
+
{ type: 'text', text: 'What is in this diagram?' },
|
|
330
|
+
{ type: 'image_url', image_url: { url: 'data:image/png;base64,...' } }
|
|
331
|
+
])
|
|
332
|
+
```
|
|
333
|
+
|