lonny-agent 0.1.2 → 0.1.9
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/.kilo/plans/1780064105789-mighty-pixel.md +171 -0
- package/.lonny/fix-new-command-session-cleanup.md +65 -0
- package/.lonny/tui-autocomplete-above.md +62 -0
- package/dist/agent/__tests__/compaction.test.js +6 -4
- package/dist/agent/__tests__/compaction.test.js.map +1 -1
- package/dist/agent/llm.d.ts +1 -1
- package/dist/agent/llm.d.ts.map +1 -1
- package/dist/agent/prompt-builder.d.ts.map +1 -1
- package/dist/agent/prompt-builder.js +26 -8
- package/dist/agent/prompt-builder.js.map +1 -1
- package/dist/agent/providers/anthropic.d.ts +1 -1
- package/dist/agent/providers/anthropic.d.ts.map +1 -1
- package/dist/agent/providers/anthropic.js +2 -2
- package/dist/agent/providers/anthropic.js.map +1 -1
- package/dist/agent/providers/google.d.ts +1 -1
- package/dist/agent/providers/google.d.ts.map +1 -1
- package/dist/agent/providers/google.js +2 -1
- package/dist/agent/providers/google.js.map +1 -1
- package/dist/agent/providers/ollama.d.ts +1 -1
- package/dist/agent/providers/ollama.d.ts.map +1 -1
- package/dist/agent/providers/ollama.js +2 -1
- package/dist/agent/providers/ollama.js.map +1 -1
- package/dist/agent/providers/openai.d.ts +1 -1
- package/dist/agent/providers/openai.d.ts.map +1 -1
- package/dist/agent/providers/openai.js +2 -2
- package/dist/agent/providers/openai.js.map +1 -1
- package/dist/agent/session.d.ts +1 -0
- package/dist/agent/session.d.ts.map +1 -1
- package/dist/agent/session.js +8 -2
- package/dist/agent/session.js.map +1 -1
- package/dist/pi-tui/autocomplete.d.ts +54 -0
- package/dist/pi-tui/autocomplete.d.ts.map +1 -0
- package/dist/pi-tui/autocomplete.js +636 -0
- package/dist/pi-tui/autocomplete.js.map +1 -0
- package/dist/pi-tui/components/box.d.ts +22 -0
- package/dist/pi-tui/components/box.d.ts.map +1 -0
- package/dist/pi-tui/components/box.js +104 -0
- package/dist/pi-tui/components/box.js.map +1 -0
- package/dist/pi-tui/components/cancellable-loader.d.ts +22 -0
- package/dist/pi-tui/components/cancellable-loader.d.ts.map +1 -0
- package/dist/pi-tui/components/cancellable-loader.js +35 -0
- package/dist/pi-tui/components/cancellable-loader.js.map +1 -0
- package/dist/pi-tui/components/editor.d.ts +249 -0
- package/dist/pi-tui/components/editor.d.ts.map +1 -0
- package/dist/pi-tui/components/editor.js +1883 -0
- package/dist/pi-tui/components/editor.js.map +1 -0
- package/dist/pi-tui/components/image.d.ts +28 -0
- package/dist/pi-tui/components/image.d.ts.map +1 -0
- package/dist/pi-tui/components/image.js +90 -0
- package/dist/pi-tui/components/image.js.map +1 -0
- package/dist/pi-tui/components/input.d.ts +37 -0
- package/dist/pi-tui/components/input.d.ts.map +1 -0
- package/dist/pi-tui/components/input.js +382 -0
- package/dist/pi-tui/components/input.js.map +1 -0
- package/dist/pi-tui/components/loader.d.ts +31 -0
- package/dist/pi-tui/components/loader.d.ts.map +1 -0
- package/dist/pi-tui/components/loader.js +70 -0
- package/dist/pi-tui/components/loader.js.map +1 -0
- package/dist/pi-tui/components/markdown.d.ts +96 -0
- package/dist/pi-tui/components/markdown.d.ts.map +1 -0
- package/dist/pi-tui/components/markdown.js +647 -0
- package/dist/pi-tui/components/markdown.js.map +1 -0
- package/dist/pi-tui/components/select-list.d.ts +50 -0
- package/dist/pi-tui/components/select-list.d.ts.map +1 -0
- package/dist/pi-tui/components/select-list.js +167 -0
- package/dist/pi-tui/components/select-list.js.map +1 -0
- package/dist/pi-tui/components/settings-list.d.ts +50 -0
- package/dist/pi-tui/components/settings-list.d.ts.map +1 -0
- package/dist/pi-tui/components/settings-list.js +189 -0
- package/dist/pi-tui/components/settings-list.js.map +1 -0
- package/dist/pi-tui/components/spacer.d.ts +12 -0
- package/dist/pi-tui/components/spacer.d.ts.map +1 -0
- package/dist/pi-tui/components/spacer.js +23 -0
- package/dist/pi-tui/components/spacer.js.map +1 -0
- package/dist/pi-tui/components/text.d.ts +19 -0
- package/dist/pi-tui/components/text.d.ts.map +1 -0
- package/dist/pi-tui/components/text.js +91 -0
- package/dist/pi-tui/components/text.js.map +1 -0
- package/dist/pi-tui/components/truncated-text.d.ts +13 -0
- package/dist/pi-tui/components/truncated-text.d.ts.map +1 -0
- package/dist/pi-tui/components/truncated-text.js +51 -0
- package/dist/pi-tui/components/truncated-text.js.map +1 -0
- package/dist/pi-tui/editor-component.d.ts +39 -0
- package/dist/pi-tui/editor-component.d.ts.map +1 -0
- package/dist/pi-tui/editor-component.js +2 -0
- package/dist/pi-tui/editor-component.js.map +1 -0
- package/dist/pi-tui/fuzzy.d.ts +16 -0
- package/dist/pi-tui/fuzzy.d.ts.map +1 -0
- package/dist/pi-tui/fuzzy.js +110 -0
- package/dist/pi-tui/fuzzy.js.map +1 -0
- package/dist/pi-tui/index.d.ts +23 -0
- package/dist/pi-tui/index.d.ts.map +1 -0
- package/dist/pi-tui/index.js +32 -0
- package/dist/pi-tui/index.js.map +1 -0
- package/dist/pi-tui/keybindings.d.ts +193 -0
- package/dist/pi-tui/keybindings.d.ts.map +1 -0
- package/dist/pi-tui/keybindings.js +174 -0
- package/dist/pi-tui/keybindings.js.map +1 -0
- package/dist/pi-tui/keys.d.ts +184 -0
- package/dist/pi-tui/keys.d.ts.map +1 -0
- package/dist/pi-tui/keys.js +1182 -0
- package/dist/pi-tui/keys.js.map +1 -0
- package/dist/pi-tui/kill-ring.d.ts +28 -0
- package/dist/pi-tui/kill-ring.d.ts.map +1 -0
- package/dist/pi-tui/kill-ring.js +44 -0
- package/dist/pi-tui/kill-ring.js.map +1 -0
- package/dist/pi-tui/native/darwin/prebuilds/darwin-arm64/darwin-modifiers.node +0 -0
- package/dist/pi-tui/native/darwin/prebuilds/darwin-x64/darwin-modifiers.node +0 -0
- package/dist/pi-tui/native/win32/prebuilds/win32-arm64/win32-console-mode.node +0 -0
- package/dist/pi-tui/native/win32/prebuilds/win32-x64/win32-console-mode.node +0 -0
- package/dist/pi-tui/native-modifiers.d.ts +3 -0
- package/dist/pi-tui/native-modifiers.d.ts.map +1 -0
- package/dist/pi-tui/native-modifiers.js +53 -0
- package/dist/pi-tui/native-modifiers.js.map +1 -0
- package/dist/pi-tui/stdin-buffer.d.ts +50 -0
- package/dist/pi-tui/stdin-buffer.d.ts.map +1 -0
- package/dist/pi-tui/stdin-buffer.js +361 -0
- package/dist/pi-tui/stdin-buffer.js.map +1 -0
- package/dist/pi-tui/terminal-image.d.ts +90 -0
- package/dist/pi-tui/terminal-image.d.ts.map +1 -0
- package/dist/pi-tui/terminal-image.js +343 -0
- package/dist/pi-tui/terminal-image.js.map +1 -0
- package/dist/pi-tui/terminal.d.ts +113 -0
- package/dist/pi-tui/terminal.d.ts.map +1 -0
- package/dist/pi-tui/terminal.js +478 -0
- package/dist/pi-tui/terminal.js.map +1 -0
- package/dist/pi-tui/tui.d.ts +227 -0
- package/dist/pi-tui/tui.d.ts.map +1 -0
- package/dist/pi-tui/tui.js +1091 -0
- package/dist/pi-tui/tui.js.map +1 -0
- package/dist/pi-tui/undo-stack.d.ts +17 -0
- package/dist/pi-tui/undo-stack.d.ts.map +1 -0
- package/dist/pi-tui/undo-stack.js +25 -0
- package/dist/pi-tui/undo-stack.js.map +1 -0
- package/dist/pi-tui/utils.d.ts +84 -0
- package/dist/pi-tui/utils.d.ts.map +1 -0
- package/dist/pi-tui/utils.js +1024 -0
- package/dist/pi-tui/utils.js.map +1 -0
- package/dist/pi-tui/word-navigation.d.ts +25 -0
- package/dist/pi-tui/word-navigation.d.ts.map +1 -0
- package/dist/pi-tui/word-navigation.js +98 -0
- package/dist/pi-tui/word-navigation.js.map +1 -0
- package/dist/tools/__tests__/edit.test.js +85 -0
- package/dist/tools/__tests__/edit.test.js.map +1 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +23 -1
- package/dist/tools/edit.js.map +1 -1
- package/dist/tui/components.d.ts +1 -1
- package/dist/tui/components.d.ts.map +1 -1
- package/dist/tui/components.js +1 -1
- package/dist/tui/components.js.map +1 -1
- package/dist/tui/editor-patch.d.ts +13 -0
- package/dist/tui/editor-patch.d.ts.map +1 -0
- package/dist/tui/editor-patch.js +41 -0
- package/dist/tui/editor-patch.js.map +1 -0
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +15 -3
- package/dist/tui/index.js.map +1 -1
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +9 -2
- package/dist/web/index.js.map +1 -1
- package/dist/web/public/app.js +65 -4
- package/dist/web/public/style.css +49 -0
- package/dist/web/session-bridge.d.ts +0 -4
- package/dist/web/session-bridge.d.ts.map +1 -1
- package/dist/web/session-bridge.js +16 -2
- package/dist/web/session-bridge.js.map +1 -1
- package/package.json +5 -3
- package/src/agent/__tests__/compaction.test.ts +6 -4
- package/src/agent/llm.ts +5 -1
- package/src/agent/prompt-builder.ts +27 -8
- package/src/agent/providers/anthropic.ts +15 -8
- package/src/agent/providers/google.ts +6 -1
- package/src/agent/providers/ollama.ts +6 -1
- package/src/agent/providers/openai.ts +21 -12
- package/src/agent/session.ts +12 -2
- package/src/pi-tui/autocomplete.ts +808 -0
- package/src/pi-tui/components/box.ts +137 -0
- package/src/pi-tui/components/cancellable-loader.ts +40 -0
- package/src/pi-tui/components/editor.ts +2321 -0
- package/src/pi-tui/components/image.ts +130 -0
- package/src/pi-tui/components/input.ts +456 -0
- package/src/pi-tui/components/loader.ts +93 -0
- package/src/pi-tui/components/markdown.ts +839 -0
- package/src/pi-tui/components/select-list.ts +263 -0
- package/src/pi-tui/components/settings-list.ts +264 -0
- package/src/pi-tui/components/spacer.ts +28 -0
- package/src/pi-tui/components/text.ts +113 -0
- package/src/pi-tui/components/truncated-text.ts +65 -0
- package/src/pi-tui/editor-component.ts +74 -0
- package/src/pi-tui/fuzzy.ts +137 -0
- package/src/pi-tui/index.ts +115 -0
- package/src/pi-tui/keybindings.ts +245 -0
- package/src/pi-tui/keys.ts +1440 -0
- package/src/pi-tui/kill-ring.ts +46 -0
- package/src/pi-tui/native/darwin/prebuilds/darwin-arm64/darwin-modifiers.node +0 -0
- package/src/pi-tui/native/darwin/prebuilds/darwin-x64/darwin-modifiers.node +0 -0
- package/src/pi-tui/native/win32/prebuilds/win32-arm64/win32-console-mode.node +0 -0
- package/src/pi-tui/native/win32/prebuilds/win32-x64/win32-console-mode.node +0 -0
- package/src/pi-tui/native-modifiers.ts +65 -0
- package/src/pi-tui/stdin-buffer.ts +434 -0
- package/src/pi-tui/terminal-image.ts +469 -0
- package/src/pi-tui/terminal.ts +594 -0
- package/src/pi-tui/tui.ts +1376 -0
- package/src/pi-tui/undo-stack.ts +28 -0
- package/src/pi-tui/utils.ts +1176 -0
- package/src/pi-tui/word-navigation.ts +127 -0
- package/src/tools/__tests__/edit.test.ts +91 -0
- package/src/tools/edit.ts +27 -1
- package/src/tui/components.ts +2 -2
- package/src/tui/index.ts +24 -10
- package/src/web/index.ts +9 -2
- package/src/web/public/app.js +65 -4
- package/src/web/public/style.css +49 -0
- package/src/web/session-bridge.ts +13 -2
- package/tsconfig.json +2 -2
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# Plan: Vendor `@earendil-works/pi-tui` source
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
|
|
5
|
+
Replace the `@earendil-works/pi-tui` npm dependency with vendored source code from [pi/packages/tui](https://github.com/earendil-works/pi/tree/main/packages/tui), so the project no longer depends on that npm package.
|
|
6
|
+
|
|
7
|
+
## Current state
|
|
8
|
+
|
|
9
|
+
- `package.json` depends on `"@earendil-works/pi-tui": "0.75.5"`
|
|
10
|
+
- A patch file `patches/@earendil-works+pi-tui+0.75.5.patch` applies 2 modifications (autocomplete above editor, alternate screen buffer on start/stop)
|
|
11
|
+
- `patch-package` is in devDependencies for applying the patch
|
|
12
|
+
- Only 2 source files import from `@earendil-works/pi-tui`:
|
|
13
|
+
- `src/tui/index.ts` (type imports + 11 class exports)
|
|
14
|
+
- `src/tui/components.ts` (Component type + SelectList class)
|
|
15
|
+
- Internal Editor access: `(editor as any).killRing`, `.undoStack`, `.history`
|
|
16
|
+
|
|
17
|
+
## Steps
|
|
18
|
+
|
|
19
|
+
### 1. Download pi-tui source from GitHub
|
|
20
|
+
|
|
21
|
+
Clone a shallow copy of the repo to get the source at the matching version or the main branch:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# From project root temp dir
|
|
25
|
+
git clone --depth 1 --branch main https://github.com/earendil-works/pi.git /tmp/pi-source
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Alternatively, if git clone is not feasible, download each file individually from GitHub.
|
|
29
|
+
|
|
30
|
+
Source files needed from `packages/tui/src/`:
|
|
31
|
+
```
|
|
32
|
+
src/
|
|
33
|
+
index.ts - barrel exports
|
|
34
|
+
autocomplete.ts - CombinedAutocompleteProvider, AutocompleteProvider, etc.
|
|
35
|
+
editor-component.ts - EditorComponent type
|
|
36
|
+
fuzzy.ts - fuzzyFilter, fuzzyMatch
|
|
37
|
+
keybindings.ts - KeybindingsManager, TUI_KEYBINDINGS, etc.
|
|
38
|
+
keys.ts - Key, matchesKey, parseKey, etc.
|
|
39
|
+
kill-ring.ts - KillRing
|
|
40
|
+
native-modifiers.ts - native keyboard modifiers
|
|
41
|
+
stdin-buffer.ts - StdinBuffer
|
|
42
|
+
terminal-image.ts - image rendering
|
|
43
|
+
terminal.ts - ProcessTerminal, Terminal interface
|
|
44
|
+
tui.ts - TUI, Container, Component, OverlayHandle, OverlayOptions, Focusable, CURSOR_MARKER, etc.
|
|
45
|
+
undo-stack.ts - UndoStack
|
|
46
|
+
utils.ts - visibleWidth, truncateToWidth, wrapTextWithAnsi, etc.
|
|
47
|
+
word-navigation.ts - word boundary navigation
|
|
48
|
+
components/
|
|
49
|
+
box.ts
|
|
50
|
+
cancellable-loader.ts
|
|
51
|
+
editor.ts
|
|
52
|
+
image.ts
|
|
53
|
+
input.ts
|
|
54
|
+
loader.ts
|
|
55
|
+
markdown.ts
|
|
56
|
+
select-list.ts
|
|
57
|
+
settings-list.ts
|
|
58
|
+
spacer.ts
|
|
59
|
+
text.ts
|
|
60
|
+
truncated-text.ts
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Also copy `native/` directory (Windows VT input helper):
|
|
64
|
+
```
|
|
65
|
+
native/win32/prebuilds/win32-x64/win32-console-mode.node
|
|
66
|
+
native/win32/prebuilds/win32-arm64/win32-console-mode.node
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 2. Place vendored code at `src/pi-tui/`
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
src/
|
|
73
|
+
pi-tui/
|
|
74
|
+
index.ts
|
|
75
|
+
autocomplete.ts
|
|
76
|
+
editor-component.ts
|
|
77
|
+
fuzzy.ts
|
|
78
|
+
keybindings.ts
|
|
79
|
+
keys.ts
|
|
80
|
+
kill-ring.ts
|
|
81
|
+
native-modifiers.ts
|
|
82
|
+
stdin-buffer.ts
|
|
83
|
+
terminal-image.ts
|
|
84
|
+
terminal.ts
|
|
85
|
+
tui.ts
|
|
86
|
+
undo-stack.ts
|
|
87
|
+
utils.ts
|
|
88
|
+
word-navigation.ts
|
|
89
|
+
components/
|
|
90
|
+
box.ts
|
|
91
|
+
cancellable-loader.ts
|
|
92
|
+
editor.ts
|
|
93
|
+
image.ts
|
|
94
|
+
input.ts
|
|
95
|
+
loader.ts
|
|
96
|
+
markdown.ts
|
|
97
|
+
select-list.ts
|
|
98
|
+
settings-list.ts
|
|
99
|
+
spacer.ts
|
|
100
|
+
text.ts
|
|
101
|
+
truncated-text.ts
|
|
102
|
+
native/
|
|
103
|
+
win32/prebuilds/win32-x64/win32-console-mode.node
|
|
104
|
+
win32/prebuilds/win32-arm64/win32-console-mode.node
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 3. Apply the two manual patches to the vendored source
|
|
108
|
+
|
|
109
|
+
The patch file modifies the **compiled dist JS**, but we need to apply equivalent changes to the **TypeScript source**:
|
|
110
|
+
|
|
111
|
+
**Patch 1** — `components/editor.ts`: Move autocomplete rendering above the editor
|
|
112
|
+
- Find the `render()` method where autocomplete lines are appended
|
|
113
|
+
- Change `result.push(...acLines)` → `result.unshift(...acLines)` (or equivalent logic)
|
|
114
|
+
|
|
115
|
+
**Patch 2** — `tui.ts`: Add alternate screen buffer on start/stop
|
|
116
|
+
- In `start()`: add `this.terminal.write("\x1b[?1049h");` before `this.terminal.start(…)`
|
|
117
|
+
- In `stop()`: add `this.terminal.write("\x1b[?1049l");` before cursor/timer cleanup
|
|
118
|
+
|
|
119
|
+
### 4. Update import paths
|
|
120
|
+
|
|
121
|
+
**`src/tui/index.ts`** — change:
|
|
122
|
+
```ts
|
|
123
|
+
import type { EditorTheme, MarkdownTheme, OverlayHandle, SelectItem, SelectListTheme, SlashCommand } from '@earendil-works/pi-tui'
|
|
124
|
+
import { Box, CombinedAutocompleteProvider, Container, Editor, Loader, Markdown, ProcessTerminal, Text, TUI } from '@earendil-works/pi-tui'
|
|
125
|
+
```
|
|
126
|
+
to:
|
|
127
|
+
```ts
|
|
128
|
+
import type { EditorTheme, MarkdownTheme, OverlayHandle, SelectItem, SelectListTheme, SlashCommand } from '../pi-tui/index.js'
|
|
129
|
+
import { Box, CombinedAutocompleteProvider, Container, Editor, Loader, Markdown, ProcessTerminal, Text, TUI } from '../pi-tui/index.js'
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**`src/tui/components.ts`** — change:
|
|
133
|
+
```ts
|
|
134
|
+
import type { Component, SelectItem, SelectListTheme } from '@earendil-works/pi-tui'
|
|
135
|
+
import { SelectList } from '@earendil-works/pi-tui'
|
|
136
|
+
```
|
|
137
|
+
to:
|
|
138
|
+
```ts
|
|
139
|
+
import type { Component, SelectItem, SelectListTheme } from '../pi-tui/index.js'
|
|
140
|
+
import { SelectList } from '../pi-tui/index.js'
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 5. Keep `marked` and `get-east-asian-width` as runtime dependencies
|
|
144
|
+
|
|
145
|
+
These are pi-tui's own runtime dependencies used by `Markdown` and `visibleWidth` respectively. They remain in `dependencies`.
|
|
146
|
+
|
|
147
|
+
### 6. Remove pi-tui-related npm setup
|
|
148
|
+
|
|
149
|
+
- `package.json`: Remove `"@earendil-works/pi-tui": "0.75.5"` from `dependencies`
|
|
150
|
+
- `package.json`: Remove `"patch-package": "^8.0.1"` from `devDependencies` (only existed for pi-tui patching)
|
|
151
|
+
- `package.json`: Change `"postinstall": "npx patch-package"` to `"postinstall": "husky"` (or remove entirely if not needed)
|
|
152
|
+
- Delete `patches/@earendil-works+pi-tui+0.75.5.patch`
|
|
153
|
+
- Delete `patches/` directory if empty
|
|
154
|
+
- Run `npm uninstall @earendil-works/pi-tui` and `npm uninstall patch-package` to update lockfile
|
|
155
|
+
|
|
156
|
+
### 7. Update `package-lock.json`
|
|
157
|
+
|
|
158
|
+
Run `npm install` to regenerate `package-lock.json` without pi-tui/patch-package.
|
|
159
|
+
|
|
160
|
+
### 8. Verify
|
|
161
|
+
|
|
162
|
+
- `npm run build` — tsc should compile successfully
|
|
163
|
+
- `npm run lint` — biome should pass
|
|
164
|
+
- `npm test` — vitest tests should pass
|
|
165
|
+
- Verify the TUI starts correctly with `npm run dev`
|
|
166
|
+
|
|
167
|
+
## Open questions
|
|
168
|
+
|
|
169
|
+
1. Should we use the exact version `0.75.5` source (may need to checkout a tag) or the latest `main` branch source? **Answer: main branch is fine unless it introduces breaking changes.**
|
|
170
|
+
2. The `native-modifiers.ts` file on GitHub may export functions used by `terminal.ts`. If unavailable, we can stub it or inline the native module loading logic.
|
|
171
|
+
3. If the GitHub raw URLs are flaky, alternative: download from npm tarball and reverse-engineer from dist JS (less ideal).
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Plan: Fix /new Command Session Cleanup Issues
|
|
2
|
+
|
|
3
|
+
## Analysis
|
|
4
|
+
|
|
5
|
+
Reviewing `src/tui/index.ts` lines 485-496, the `/new` command has two issues:
|
|
6
|
+
|
|
7
|
+
### Issue 1: No `session.stop()` when agent is running
|
|
8
|
+
|
|
9
|
+
The slash command handler intentionally allows all commands even when `isRunning === true` (see comment on line 471: "Allow slash commands even when agent is running (critical for /stop)"). However, `/new` creates a **new** `Session` object while the **old** session's `session.chat()` promise may still be in-flight:
|
|
10
|
+
|
|
11
|
+
- The old session continues consuming API tokens via its pending LLM stream
|
|
12
|
+
- When the old `chat()` promise resolves, it writes to `chatContent` via the `output.write` closure — but `chatContent` was just cleared by `/new`, causing stale output to pollute the fresh chat display
|
|
13
|
+
- The old promise's `.then()` callback sets `isRunning = false` and calls `updateFooter()` etc. (harmless but messy)
|
|
14
|
+
|
|
15
|
+
### Issue 2: Editor internal state not fully reset
|
|
16
|
+
|
|
17
|
+
`editor.setText('')` (called at line 468 before the slash command handler) resets the text, cursor, and `scrollOffset`. But it does NOT clear:
|
|
18
|
+
|
|
19
|
+
- `undoStack` — pressing Ctrl+Z after `/new` could restore old session content
|
|
20
|
+
- `history` (command history for up/down navigation) — old commands linger
|
|
21
|
+
- `killRing` (Emacs kill/yank ring) — old killed text is still accessible
|
|
22
|
+
|
|
23
|
+
The Editor class declares these as `private` (see `editor.d.ts` lines 57-59, 64), so we need `(editor as any)` casts to access them at runtime.
|
|
24
|
+
|
|
25
|
+
## Fix
|
|
26
|
+
|
|
27
|
+
Edit `src/tui/index.ts` lines 485-496, replacing the `/new` handler with:
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
if (cmd === 'new') {
|
|
31
|
+
// If the agent is running, stop the old session gracefully first.
|
|
32
|
+
// Without this, the pending chat() promise would continue consuming
|
|
33
|
+
// tokens and write stale output into the freshly cleared chat display.
|
|
34
|
+
if (isRunning) {
|
|
35
|
+
session.stop()
|
|
36
|
+
isRunning = false
|
|
37
|
+
loader.setMessage('')
|
|
38
|
+
tui.setShowHardwareCursor(true)
|
|
39
|
+
}
|
|
40
|
+
Session.clearSavedSession(config.cwd)
|
|
41
|
+
resetTokenUsage(config.cwd)
|
|
42
|
+
resetGlobalEventBus()
|
|
43
|
+
session = new Session(config, output)
|
|
44
|
+
session.onPlanWritten = planCb
|
|
45
|
+
chatContent = ''
|
|
46
|
+
chatMarkdown.setText('')
|
|
47
|
+
plansList.clearFilter()
|
|
48
|
+
// Reset editor internal state that setText('') doesn't clear
|
|
49
|
+
;(editor as any).undoStack.clear()
|
|
50
|
+
;(editor as any).history = []
|
|
51
|
+
;(editor as any).killRing = new (require('@earendil-works/pi-tui').KillRing)()
|
|
52
|
+
updateFooter()
|
|
53
|
+
return
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
> **Note about `KillRing` import**: The `KillRing` class is internal to pi-tui and not exported in the public types. Using `require('@earendil-works/pi-tui').KillRing` at runtime works because the package exports it internally. An alternative is to just set `(editor as any).killRing = { length: 0, ring: [], push: () => {}, peek: () => null, rotate: () => {} }` as a mock.
|
|
58
|
+
|
|
59
|
+
> **Actual implementation**: Used `(editor as any).killRing.ring = []` instead of replacing the whole KillRing instance — simpler and avoids ESM `require` issues.
|
|
60
|
+
|
|
61
|
+
## Todo List
|
|
62
|
+
|
|
63
|
+
- [x] Replace the `/new` command handler in `src/tui/index.ts` (around line 485) with the version above that calls `session.stop()` if running and resets editor internal state
|
|
64
|
+
- [x] Run `npm run build` to verify compilation
|
|
65
|
+
- [x] Test: start agent, let it run, type `/new`, verify no stale output appears and editor history/undo is clean
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Plan: Adjust TUI Autocomplete to Render Above the Editor (Matching Web Style)
|
|
2
|
+
|
|
3
|
+
## Problem
|
|
4
|
+
|
|
5
|
+
The TUI's slash command autocomplete list currently renders **below** the editor input area (after the bottom border). The web version displays command hints **above** the input (`bottom: 100%` via CSS). The user wants the TUI behavior to match the web — "向上的" (upward/above).
|
|
6
|
+
|
|
7
|
+
## Root Cause
|
|
8
|
+
|
|
9
|
+
The `Editor` component from `@earendil-works/pi-tui` (`node_modules/@earendil-works/pi-tui/dist/components/editor.js`) appends the autocomplete `SelectList` lines **after** the editor's bottom border in its `render()` method (lines 418-426). To get the "above" behavior, these lines need to appear **before** the editor's top border instead.
|
|
10
|
+
|
|
11
|
+
## Approach (Final: patch-package + direct node_modules edit)
|
|
12
|
+
|
|
13
|
+
Instead of monkey-patching at runtime (which had clipping issues with `maxHeight`), we:
|
|
14
|
+
|
|
15
|
+
1. **Directly edit** `node_modules/@earendil-works/pi-tui/dist/components/editor.js` to use `result.unshift(...acLines)` instead of `result.push(...)` — placing autocomplete BEFORE the top border
|
|
16
|
+
2. **Increase `maxHeight`** from 6 to 12 in `src/tui/index.ts` to accommodate both autocomplete and editor content
|
|
17
|
+
3. **Use `patch-package`** to persist the node_modules change across `npm install`
|
|
18
|
+
|
|
19
|
+
This approach:
|
|
20
|
+
- Renders autocomplete ABOVE the editor (matching web UI)
|
|
21
|
+
- Eliminates the clipping bug (autocomplete no longer competes with editor content for the 6-line overlay)
|
|
22
|
+
- Survives `npm install` via patch-package
|
|
23
|
+
|
|
24
|
+
## Files Changed
|
|
25
|
+
|
|
26
|
+
### 1. `node_modules/@earendil-works/pi-tui/dist/components/editor.js` (patched)
|
|
27
|
+
|
|
28
|
+
Changed `result.push(...acLines)` to `result.unshift(...acLines)` so autocomplete renders BEFORE the top border.
|
|
29
|
+
|
|
30
|
+
### 2. `src/tui/index.ts`
|
|
31
|
+
|
|
32
|
+
- Increased `maxHeight` from 6 to 12 on both editor overlay instances
|
|
33
|
+
- Removed `applyEditorPatch()` import and call (old monkey-patch approach)
|
|
34
|
+
- Deleted `src/tui/editor-patch.ts`
|
|
35
|
+
|
|
36
|
+
### 3. `package.json`
|
|
37
|
+
|
|
38
|
+
- Added `"postinstall": "patch-package"` script
|
|
39
|
+
- Added `patch-package` devDependency
|
|
40
|
+
|
|
41
|
+
### 4. `patches/@earendil-works+pi-tui+0.75.5.patch` (new)
|
|
42
|
+
|
|
43
|
+
Created by `patch-package` to persist both changes:
|
|
44
|
+
- `editor.js`: autocomplete unshifted to before top border
|
|
45
|
+
- `tui.js`: alternate screen buffer handling
|
|
46
|
+
|
|
47
|
+
## Edge Cases Considered
|
|
48
|
+
|
|
49
|
+
1. **No autocomplete active** → `unshift` on empty array is a no-op; render output is unchanged
|
|
50
|
+
2. **Scrolled editor** → autocomplete still renders above the top border/indicator line
|
|
51
|
+
3. **Multiple autocomplete lines** → all moved above correctly
|
|
52
|
+
4. **Resize** → render is called again with new width, positioning stays correct
|
|
53
|
+
5. **npm install** → patch-package automatically reapplies the node_modules change
|
|
54
|
+
|
|
55
|
+
## Todo List
|
|
56
|
+
|
|
57
|
+
- [x] Step 1: Edit `node_modules/@earendil-works/pi-tui/dist/components/editor.js` to use `unshift` instead of `push` for autocomplete lines
|
|
58
|
+
- [x] Step 2: Increase `maxHeight` from 6 to 12 in `src/tui/index.ts`
|
|
59
|
+
- [x] Step 3: Remove old monkey-patch (`editor-patch.ts`, `applyEditorPatch()` import/call)
|
|
60
|
+
- [x] Step 4: Install `patch-package` and create patch file
|
|
61
|
+
- [x] Step 5: Add `postinstall` script to `package.json`
|
|
62
|
+
- [x] Step 6: Build and verify (`npm run build` succeeds)
|
|
@@ -82,9 +82,10 @@ describe('compact', () => {
|
|
|
82
82
|
// Should have: system + summary + 5 recent
|
|
83
83
|
expect(result.newCount).toBeLessThan(result.originalCount);
|
|
84
84
|
expect(result.messages[0].role).toBe('system');
|
|
85
|
-
//
|
|
86
|
-
|
|
87
|
-
expect(
|
|
85
|
+
// Last message should be the summary (appended at end for prompt cache stability)
|
|
86
|
+
const summaryMsg = result.messages[result.messages.length - 1];
|
|
87
|
+
expect(summaryMsg.role).toBe('system');
|
|
88
|
+
expect(summaryMsg.content).toContain('Conversation History Summary');
|
|
88
89
|
});
|
|
89
90
|
test('preserves tool-call cycles when cutting off', () => {
|
|
90
91
|
// Create: system, user, assistant(tool), tool, assistant(tool), tool, ... recent
|
|
@@ -117,7 +118,8 @@ describe('compact', () => {
|
|
|
117
118
|
messages.push(toolResult('edit'));
|
|
118
119
|
const result = compact(messages, 100, 5);
|
|
119
120
|
if (result.compressed) {
|
|
120
|
-
|
|
121
|
+
// Summary is always the last message (appended at end for prompt cache stability)
|
|
122
|
+
const summary = result.messages[result.messages.length - 1].content || '';
|
|
121
123
|
expect(summary).toContain('Total exchanges');
|
|
122
124
|
}
|
|
123
125
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compaction.test.js","sourceRoot":"","sources":["../../../src/agent/__tests__/compaction.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"compaction.test.js","sourceRoot":"","sources":["../../../src/agent/__tests__/compaction.test.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/llm.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export interface LLMMessage {
|
|
|
8
8
|
reasoning_content?: string;
|
|
9
9
|
}
|
|
10
10
|
export interface LLMProvider {
|
|
11
|
-
chat(messages: LLMMessage[], tools: ToolDefinition[]): AsyncGenerator<LLMChunk>;
|
|
11
|
+
chat(messages: LLMMessage[], tools: ToolDefinition[], signal?: AbortSignal): AsyncGenerator<LLMChunk>;
|
|
12
12
|
}
|
|
13
13
|
export interface TokenUsage {
|
|
14
14
|
input_tokens: number;
|
package/dist/agent/llm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../src/agent/llm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEjE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAA;IAC9C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,
|
|
1
|
+
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../src/agent/llm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEjE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAA;IAC9C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CACF,QAAQ,EAAE,UAAU,EAAE,EACtB,KAAK,EAAE,cAAc,EAAE,EACvB,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,QAAQ,CAAC,CAAA;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,CAAA;IACtC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,QAAQ,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,KAAK,CAAC,EAAE,UAAU,CAAA;CACnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/agent/prompt-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAGhD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/agent/prompt-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAGhD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAkIxD"}
|
|
@@ -22,7 +22,19 @@ export function buildSystemPrompt(config) {
|
|
|
22
22
|
- \`search\`: Search the web using Tavily (query: string, search_depth?: string, include_answer?: boolean, max_results?: number, topic?: string, days?: number)
|
|
23
23
|
`;
|
|
24
24
|
}
|
|
25
|
-
|
|
25
|
+
if (mode === 'plan') {
|
|
26
|
+
return `Available tools (read-only investigation + write_plan):
|
|
27
|
+
- \`read\`: Read file contents (paths: string[])
|
|
28
|
+
- \`glob\`: Find files by glob pattern (pattern: string)
|
|
29
|
+
- \`grep\`: Search file content by regex (pattern: string, include?: string, path?: string)
|
|
30
|
+
- \`ls\`: List directory (path?: string)
|
|
31
|
+
- \`bash\`: Execute read-only shell commands for investigation (NEVER modify files)
|
|
32
|
+
- \`find\`: Find files by name pattern (pattern: string, path?: string, maxResults?: number)
|
|
33
|
+
- \`git\`: Run read-only git commands (command: string)
|
|
34
|
+
- \`search\`: Search the web using Tavily (query: string, search_depth?: string, include_answer?: boolean, max_results?: number, topic?: string, days?: number)
|
|
35
|
+
- \`write_plan\`: Save plan/todo markdown into .lonny/ folder
|
|
36
|
+
`;
|
|
37
|
+
}
|
|
26
38
|
return `Available tools:
|
|
27
39
|
- \`read\`: Read file contents (paths: string[])
|
|
28
40
|
- \`glob\`: Find files by glob pattern (pattern: string)
|
|
@@ -30,7 +42,7 @@ export function buildSystemPrompt(config) {
|
|
|
30
42
|
- \`ls\`: List directory (path?: string)
|
|
31
43
|
- \`bash\`: Execute a shell command
|
|
32
44
|
- \`edit\`: Replace text in files — call with {"edits": [{"file_path", "old_string", "new_string"}]} (array required)
|
|
33
|
-
|
|
45
|
+
- \`install_skill\`: Install an npm package as a skill — fetches package info from npm, runs npm install, and creates a .lonny/skills/ file with usage instructions for the AI
|
|
34
46
|
- \`find\`: Find files by name pattern (pattern: string, path?: string, maxResults?: number)
|
|
35
47
|
- \`git\`: Run read-only git commands (command: string)
|
|
36
48
|
- \`search\`: Search the web using Tavily (query: string, search_depth?: string, include_answer?: boolean, max_results?: number, topic?: string, days?: number)
|
|
@@ -52,10 +64,12 @@ ${getToolListForMode(config.mode)}`;
|
|
|
52
64
|
|
|
53
65
|
RULES (plan-specific):
|
|
54
66
|
1. Read first: Use read/grep/glob tools to gather all context you need before planning.
|
|
55
|
-
2. You
|
|
56
|
-
3. Use \`bash\` for
|
|
57
|
-
4.
|
|
58
|
-
5. You MUST
|
|
67
|
+
2. You NEVER edit source files. You ONLY use read-only tools (read/glob/grep/ls/find/git/search) and bash (read-only commands only). You do NOT have access to edit, install_skill, or exec.
|
|
68
|
+
3. Use \`bash\` for investigation only — NEVER to modify files, install packages, or run write operations.
|
|
69
|
+
4. Your ONLY output is a plan file saved via \`write_plan\`. You CANNOT modify the codebase directly.
|
|
70
|
+
5. You MUST persist the final plan AND todo list to a file in \`.lonny/\` using \`write_plan\`. The \`write_plan\` content MUST include both ## Plan and ## Todo List sections.
|
|
71
|
+
6. You MUST also include the todo list in your text response to the user (not just in the file).
|
|
72
|
+
7. If the user asks you to modify files, run write commands, or install packages — refuse and explain they need to switch to code mode (\`/mode code\`).
|
|
59
73
|
|
|
60
74
|
OUTPUT FORMAT (you MUST include both in write_plan AND in your response text):
|
|
61
75
|
|
|
@@ -104,9 +118,13 @@ RULES (code-specific):
|
|
|
104
118
|
- Available shell commands: ${isWindows ? 'PowerShell (cmd is also available but PowerShell is preferred)' : 'bash'}
|
|
105
119
|
${isWindows ? ' - Use PowerShell. Do NOT use Unix commands like `cat`, `ls`, `grep`, `which`, `chmod`, `mv`, `cp`, `rm`, `touch`, `mkdir`, `uname`, etc.' : ''}
|
|
106
120
|
${isWindows ? ' - Use `type` instead of `cat`, `dir` instead of `ls`, `where` instead of `which`' : ''}`;
|
|
121
|
+
// Plan mode uses its own standalone tool list inside modeInstructions — skip sharedRules
|
|
122
|
+
const rulesSection = config.mode === 'plan'
|
|
123
|
+
? ''
|
|
124
|
+
: `
|
|
125
|
+
${sharedRules}`;
|
|
107
126
|
return `${modeInstructions}
|
|
108
127
|
|
|
109
|
-
${envSection}
|
|
110
|
-
${sharedRules}${skillsSection}`;
|
|
128
|
+
${envSection}${rulesSection}${skillsSection}`;
|
|
111
129
|
}
|
|
112
130
|
//# sourceMappingURL=prompt-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../src/agent/prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAE7B,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE/D;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;IAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAA;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,SAAS,CAAA;IACnE,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAA;IACtB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;IACtB,MAAM,SAAS,GAAG,QAAQ,KAAK,OAAO,CAAA;IAEtC,0EAA0E;IAC1E,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAA;IAEnD,yEAAyE;IACzE,SAAS,kBAAkB,CAAC,IAAY;QACtC,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,OAAO;;;CAGZ,CAAA;QACG,CAAC;QACD,
|
|
1
|
+
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../src/agent/prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAE7B,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE/D;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;IAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAA;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,SAAS,CAAA;IACnE,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAA;IACtB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;IACtB,MAAM,SAAS,GAAG,QAAQ,KAAK,OAAO,CAAA;IAEtC,0EAA0E;IAC1E,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAA;IAEnD,yEAAyE;IACzE,SAAS,kBAAkB,CAAC,IAAY;QACtC,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,OAAO;;;CAGZ,CAAA;QACG,CAAC;QACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO;;;;;;;;;;CAUZ,CAAA;QACG,CAAC;QACD,OAAO;;;;;;;;;;;;CAYV,CAAA;IACC,CAAC;IAED,4EAA4E;IAC5E,MAAM,WAAW,GAAG;;;;;;;EAOpB,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA;IAEjC,4EAA4E;IAC5E,MAAM,gBAAgB,GACpB,MAAM,CAAC,IAAI,KAAK,MAAM;QACpB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;sHAwB8G;QAChH,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK;YACrB,CAAC,CAAC;;;;;;;;;yHAS+G;YACjH,CAAC,CAAC;;;;;;;;;;;;mPAYyO,CAAA;IAEjP,4EAA4E;IAC5E,MAAM,UAAU,GAAG;cACP,QAAQ,IAAI,OAAO,KAAK,IAAI;WAC/B,KAAK;uBACO,GAAG;QAClB,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa;8BACf,SAAS,CAAC,CAAC,CAAC,gEAAgE,CAAC,CAAC,CAAC,MAAM;EACjH,SAAS,CAAC,CAAC,CAAC,4IAA4I,CAAC,CAAC,CAAC,EAAE;EAC7J,SAAS,CAAC,CAAC,CAAC,oFAAoF,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;IAEvG,yFAAyF;IACzF,MAAM,YAAY,GAChB,MAAM,CAAC,IAAI,KAAK,MAAM;QACpB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC;EACN,WAAW,EAAE,CAAA;IACb,OAAO,GAAG,gBAAgB;;EAE1B,UAAU,GAAG,YAAY,GAAG,aAAa,EAAE,CAAA;AAC7C,CAAC"}
|
|
@@ -4,6 +4,6 @@ export declare class AnthropicProvider implements LLMProvider {
|
|
|
4
4
|
private client;
|
|
5
5
|
private model;
|
|
6
6
|
constructor(apiKey: string, baseURL?: string, model?: string);
|
|
7
|
-
chat(messages: LLMMessage[], tools: ToolDefinition[]): AsyncGenerator<LLMChunk>;
|
|
7
|
+
chat(messages: LLMMessage[], tools: ToolDefinition[], signal?: AbortSignal): AsyncGenerator<LLMChunk>;
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/anthropic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAElE,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,KAAK,CAAQ;gBAET,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAKrD,IAAI,
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/anthropic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAElE,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,KAAK,CAAQ;gBAET,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAKrD,IAAI,CACT,QAAQ,EAAE,UAAU,EAAE,EACtB,KAAK,EAAE,cAAc,EAAE,EACvB,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,QAAQ,CAAC;CA6I5B"}
|
|
@@ -6,7 +6,7 @@ export class AnthropicProvider {
|
|
|
6
6
|
this.client = new Anthropic({ apiKey, baseURL });
|
|
7
7
|
this.model = model || 'claude-sonnet-4-20250514';
|
|
8
8
|
}
|
|
9
|
-
async *chat(messages, tools) {
|
|
9
|
+
async *chat(messages, tools, signal) {
|
|
10
10
|
const anthropicTools = tools.map(t => {
|
|
11
11
|
const properties = {};
|
|
12
12
|
for (const [key, param] of Object.entries(t.parameters)) {
|
|
@@ -68,7 +68,7 @@ export class AnthropicProvider {
|
|
|
68
68
|
messages: anthropicMessages,
|
|
69
69
|
tools: anthropicTools.length > 0 ? anthropicTools : undefined,
|
|
70
70
|
max_tokens: 8192,
|
|
71
|
-
});
|
|
71
|
+
}, signal ? { signal } : undefined);
|
|
72
72
|
let currentToolUse = null;
|
|
73
73
|
let inputTokens = 0;
|
|
74
74
|
let outputTokens = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/agent/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAA;AAKzC,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAW;IACjB,KAAK,CAAQ;IAErB,YAAY,MAAc,EAAE,OAAgB,EAAE,KAAc;QAC1D,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;QAChD,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,0BAA0B,CAAA;IAClD,CAAC;IAED,KAAK,CAAC,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/agent/providers/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,6 @@ export declare class GoogleProvider implements LLMProvider {
|
|
|
5
5
|
private model;
|
|
6
6
|
private baseUrl;
|
|
7
7
|
constructor(apiKey: string, baseURL?: string, model?: string);
|
|
8
|
-
chat(messages: LLMMessage[], tools: ToolDefinition[]): AsyncGenerator<LLMChunk>;
|
|
8
|
+
chat(messages: LLMMessage[], tools: ToolDefinition[], signal?: AbortSignal): AsyncGenerator<LLMChunk>;
|
|
9
9
|
}
|
|
10
10
|
//# sourceMappingURL=google.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/google.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAsClE,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,OAAO,CAAQ;gBAEX,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAMrD,IAAI,
|
|
1
|
+
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/google.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAsClE,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,OAAO,CAAQ;gBAEX,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAMrD,IAAI,CACT,QAAQ,EAAE,UAAU,EAAE,EACtB,KAAK,EAAE,cAAc,EAAE,EACvB,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,QAAQ,CAAC;CA4J5B"}
|
|
@@ -7,7 +7,7 @@ export class GoogleProvider {
|
|
|
7
7
|
this.model = model || 'gemini-2.0-flash';
|
|
8
8
|
this.baseUrl = baseURL || 'https://generativelanguage.googleapis.com/v1beta';
|
|
9
9
|
}
|
|
10
|
-
async *chat(messages, tools) {
|
|
10
|
+
async *chat(messages, tools, signal) {
|
|
11
11
|
const systemInstruction = messages.find(m => m.role === 'system')?.content || '';
|
|
12
12
|
const nonSystemMessages = messages.filter(m => m.role !== 'system');
|
|
13
13
|
// Build Google-format contents
|
|
@@ -90,6 +90,7 @@ export class GoogleProvider {
|
|
|
90
90
|
'Content-Type': 'application/json',
|
|
91
91
|
'x-goog-api-key': this.apiKey,
|
|
92
92
|
},
|
|
93
|
+
signal,
|
|
93
94
|
body: JSON.stringify(body),
|
|
94
95
|
});
|
|
95
96
|
if (!response.ok) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../../src/agent/providers/google.ts"],"names":[],"mappings":"AAuCA,MAAM,OAAO,cAAc;IACjB,MAAM,CAAQ;IACd,KAAK,CAAQ;IACb,OAAO,CAAQ;IAEvB,YAAY,MAAc,EAAE,OAAgB,EAAE,KAAc;QAC1D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,kBAAkB,CAAA;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,kDAAkD,CAAA;IAC9E,CAAC;IAED,KAAK,CAAC,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../../src/agent/providers/google.ts"],"names":[],"mappings":"AAuCA,MAAM,OAAO,cAAc;IACjB,MAAM,CAAQ;IACd,KAAK,CAAQ;IACb,OAAO,CAAQ;IAEvB,YAAY,MAAc,EAAE,OAAgB,EAAE,KAAc;QAC1D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,kBAAkB,CAAA;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,kDAAkD,CAAA;IAC9E,CAAC;IAED,KAAK,CAAC,CAAC,IAAI,CACT,QAAsB,EACtB,KAAuB,EACvB,MAAoB;QAEpB,MAAM,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,OAAO,IAAI,EAAE,CAAA;QAChF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;QAEnE,+BAA+B;QAC/B,MAAM,QAAQ,GAAoB,EAAE,CAAA;QAEpC,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;YAClC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACtB,MAAM,KAAK,GAA2B,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAA;gBACjE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;YACxC,CAAC;iBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAClC,MAAM,KAAK,GAA2B,EAAE,CAAA;gBACxC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;oBACd,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;gBACjC,CAAC;gBACD,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;oBACjB,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;wBAC9B,KAAK,CAAC,IAAI,CAAC;4BACT,YAAY,EAAE;gCACZ,IAAI,EAAE,EAAE,CAAC,IAAI;gCACb,IAAI,EAAE,EAAE,CAAC,KAAgC;6BAC1C;yBACF,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;YACzC,CAAC;iBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC7B,8DAA8D;gBAC9D,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE;wBACL;4BACE,gBAAgB,EAAE;gCAChB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;gCAClB,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE;6BACvC;yBACF;qBACF;iBACF,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,cAAc;QACd,MAAM,WAAW,GACf,KAAK,CAAC,MAAM,GAAG,CAAC;YACd,CAAC,CAAC;gBACE;oBACE,oBAAoB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;wBAClC,MAAM,UAAU,GAA4B,EAAE,CAAA;wBAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;4BACxD,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAA;4BACtC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;wBACxB,CAAC;wBACD,OAAO;4BACL,IAAI,EAAE,CAAC,CAAC,IAAI;4BACZ,WAAW,EAAE,CAAC,CAAC,WAAW;4BAC1B,UAAU,EAAE;gCACV,IAAI,EAAE,QAAQ;gCACd,UAAU;gCACV,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;qCACnC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;qCAC7B,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;6BACnB;yBACF,CAAA;oBACH,CAAC,CAAC;iBACH;aACF;YACH,CAAC,CAAC,SAAS,CAAA;QAEf,qBAAqB;QACrB,MAAM,IAAI,GAA4B;YACpC,QAAQ;YACR,KAAK,EAAE,WAAW;SACnB,CAAA;QACD,IAAI,iBAAiB,EAAE,CAAC;YACtB,IAAI,CAAC,kBAAkB,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAA;QACpE,CAAC;QAED,0BAA0B;QAC1B,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,WAAW,IAAI,CAAC,KAAK,gCAAgC,CAAA;QAChF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,gBAAgB,EAAE,IAAI,CAAC,MAAM;aAC9B;YACD,MAAM;YACN,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YACrC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,MAAM,OAAO,EAAE,CAAC,CAAA;QACtE,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAA;QACzC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;QAEhD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;QACjC,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,IAAI,WAAW,GAAG,CAAC,CAAA;QAEnB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;YAC3C,IAAI,IAAI;gBAAE,MAAK;YAEf,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;YACjD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAChC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAA;YAE1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAAE,SAAQ;gBACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;gBACpC,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ;oBAAE,SAAQ;gBAE9C,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB,CAAA;oBACtD,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;wBACxB,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,gBAAgB,IAAI,CAAC,CAAA;wBACtD,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,oBAAoB,IAAI,CAAC,CAAA;oBAC7D,CAAC;oBAED,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;wBAAE,SAAQ;oBACpC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;oBACrC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;oBAE1C,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;wBACf,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;oBACzC,CAAC;oBAED,IAAI,IAAI,EAAE,YAAY,EAAE,CAAC;wBACvB,MAAM;4BACJ,IAAI,EAAE,UAAU;4BAChB,SAAS,EAAE;gCACT,EAAE,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;gCAChD,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;gCAC5B,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;6BAC9B;yBACF,CAAA;oBACH,CAAC;oBAED,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;wBAC3B,MAAM;4BACJ,IAAI,EAAE,UAAU;4BAChB,aAAa,EAAE,SAAS,CAAC,YAAY;4BACrC,KAAK,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE;yBAChE,CAAA;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,sBAAsB;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -4,6 +4,6 @@ export declare class OllamaProvider implements LLMProvider {
|
|
|
4
4
|
private baseUrl;
|
|
5
5
|
private model;
|
|
6
6
|
constructor(_apiKey: string, baseURL?: string, model?: string);
|
|
7
|
-
chat(messages: LLMMessage[], tools: ToolDefinition[]): AsyncGenerator<LLMChunk>;
|
|
7
|
+
chat(messages: LLMMessage[], tools: ToolDefinition[], signal?: AbortSignal): AsyncGenerator<LLMChunk>;
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=ollama.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/ollama.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAgClE,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,KAAK,CAAQ;gBAET,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAKtD,IAAI,
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/ollama.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAgClE,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,KAAK,CAAQ;gBAET,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAKtD,IAAI,CACT,QAAQ,EAAE,UAAU,EAAE,EACtB,KAAK,EAAE,cAAc,EAAE,EACvB,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,QAAQ,CAAC;CAuI5B"}
|
|
@@ -5,7 +5,7 @@ export class OllamaProvider {
|
|
|
5
5
|
this.baseUrl = baseURL || 'http://localhost:11434';
|
|
6
6
|
this.model = model || 'llama3.2';
|
|
7
7
|
}
|
|
8
|
-
async *chat(messages, tools) {
|
|
8
|
+
async *chat(messages, tools, signal) {
|
|
9
9
|
// Build Ollama-format messages
|
|
10
10
|
const ollamaMessages = messages.map(m => {
|
|
11
11
|
if (m.role === 'system') {
|
|
@@ -69,6 +69,7 @@ export class OllamaProvider {
|
|
|
69
69
|
const response = await fetch(`${this.baseUrl}/api/chat`, {
|
|
70
70
|
method: 'POST',
|
|
71
71
|
headers: { 'Content-Type': 'application/json' },
|
|
72
|
+
signal,
|
|
72
73
|
body: JSON.stringify(body),
|
|
73
74
|
});
|
|
74
75
|
if (!response.ok) {
|