@travisennis/acai 0.0.5 → 0.0.6
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/README.md +4 -2
- package/dist/agent/index.d.ts +119 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +406 -0
- package/dist/agent/manual-loop.d.ts +41 -0
- package/dist/agent/manual-loop.d.ts.map +1 -0
- package/dist/agent/manual-loop.js +278 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +27 -33
- package/dist/commands/add-directory-command.d.ts +3 -0
- package/dist/commands/add-directory-command.d.ts.map +1 -0
- package/dist/commands/add-directory-command.js +85 -0
- package/dist/commands/application-log-command.d.ts.map +1 -1
- package/dist/commands/application-log-command.js +34 -0
- package/dist/commands/clear-command.d.ts.map +1 -1
- package/dist/commands/clear-command.js +8 -0
- package/dist/commands/compact-command.d.ts.map +1 -1
- package/dist/commands/compact-command.js +15 -2
- package/dist/commands/context-command.d.ts +3 -0
- package/dist/commands/context-command.d.ts.map +1 -0
- package/dist/commands/context-command.js +183 -0
- package/dist/commands/copy-command.d.ts.map +1 -1
- package/dist/commands/copy-command.js +28 -0
- package/dist/commands/edit-command.d.ts.map +1 -1
- package/dist/commands/edit-command.js +33 -0
- package/dist/commands/edit-prompt-command.d.ts.map +1 -1
- package/dist/commands/edit-prompt-command.js +28 -0
- package/dist/commands/exit-command.d.ts.map +1 -1
- package/dist/commands/exit-command.js +20 -0
- package/dist/commands/files-command.d.ts.map +1 -1
- package/dist/commands/files-command.js +57 -0
- package/dist/commands/generate-rules-command.d.ts.map +1 -1
- package/dist/commands/generate-rules-command.js +311 -1
- package/dist/commands/handoff-command.d.ts +3 -0
- package/dist/commands/handoff-command.d.ts.map +1 -0
- package/dist/commands/handoff-command.js +202 -0
- package/dist/commands/health-command.d.ts.map +1 -1
- package/dist/commands/health-command.js +119 -2
- package/dist/commands/help-command.d.ts.map +1 -1
- package/dist/commands/help-command.js +28 -0
- package/dist/commands/history-command.d.ts +3 -0
- package/dist/commands/history-command.d.ts.map +1 -0
- package/dist/commands/history-command.js +534 -0
- package/dist/commands/init-command.d.ts +1 -1
- package/dist/commands/init-command.d.ts.map +1 -1
- package/dist/commands/init-command.js +55 -18
- package/dist/commands/last-log-command.d.ts.map +1 -1
- package/dist/commands/last-log-command.js +27 -0
- package/dist/commands/list-directories-command.d.ts +3 -0
- package/dist/commands/list-directories-command.d.ts.map +1 -0
- package/dist/commands/list-directories-command.js +48 -0
- package/dist/commands/list-tools-command.d.ts.map +1 -1
- package/dist/commands/list-tools-command.js +66 -3
- package/dist/commands/manager.d.ts +15 -3
- package/dist/commands/manager.d.ts.map +1 -1
- package/dist/commands/manager.js +86 -26
- package/dist/commands/model-command.d.ts +22 -0
- package/dist/commands/model-command.d.ts.map +1 -1
- package/dist/commands/model-command.js +256 -0
- package/dist/commands/paste-command.d.ts.map +1 -1
- package/dist/commands/paste-command.js +92 -0
- package/dist/commands/pickup-command.d.ts +3 -0
- package/dist/commands/pickup-command.d.ts.map +1 -0
- package/dist/commands/pickup-command.js +161 -0
- package/dist/commands/prompt-command.d.ts +1 -1
- package/dist/commands/prompt-command.d.ts.map +1 -1
- package/dist/commands/prompt-command.js +117 -2
- package/dist/commands/remove-directory-command.d.ts +3 -0
- package/dist/commands/remove-directory-command.d.ts.map +1 -0
- package/dist/commands/remove-directory-command.js +87 -0
- package/dist/commands/reset-command.d.ts +1 -1
- package/dist/commands/reset-command.d.ts.map +1 -1
- package/dist/commands/reset-command.js +13 -2
- package/dist/commands/rules-command.d.ts.map +1 -1
- package/dist/commands/rules-command.js +65 -0
- package/dist/commands/save-command.d.ts.map +1 -1
- package/dist/commands/save-command.js +12 -0
- package/dist/commands/shell-command.d.ts.map +1 -1
- package/dist/commands/shell-command.js +68 -0
- package/dist/commands/types.d.ts +9 -4
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/usage-command.d.ts.map +1 -1
- package/dist/commands/usage-command.js +22 -0
- package/dist/config.d.ts +6 -7
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +23 -29
- package/dist/formatting.d.ts +108 -0
- package/dist/formatting.d.ts.map +1 -1
- package/dist/formatting.js +147 -0
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +140 -38
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +47 -18
- package/dist/mentions.d.ts +2 -1
- package/dist/mentions.d.ts.map +1 -1
- package/dist/mentions.js +16 -1
- package/dist/messages.d.ts +8 -0
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +56 -19
- package/dist/middleware/cache.d.ts +3 -0
- package/dist/middleware/cache.d.ts.map +1 -0
- package/dist/middleware/cache.js +53 -0
- package/dist/middleware/index.d.ts +1 -0
- package/dist/middleware/index.d.ts.map +1 -1
- package/dist/middleware/index.js +1 -0
- package/dist/models/ai-config.d.ts +4 -2
- package/dist/models/ai-config.d.ts.map +1 -1
- package/dist/models/ai-config.js +12 -2
- package/dist/models/anthropic-provider.d.ts.map +1 -1
- package/dist/models/anthropic-provider.js +3 -60
- package/dist/models/manager.d.ts +2 -1
- package/dist/models/manager.d.ts.map +1 -1
- package/dist/models/manager.js +26 -2
- package/dist/models/openrouter-provider.d.ts +7 -14
- package/dist/models/openrouter-provider.d.ts.map +1 -1
- package/dist/models/openrouter-provider.js +114 -169
- package/dist/models/providers.d.ts +1 -1
- package/dist/models/providers.d.ts.map +1 -1
- package/dist/prompts.d.ts +1 -0
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +53 -4
- package/dist/repl/display-tool-messages.d.ts +1 -1
- package/dist/repl/display-tool-messages.d.ts.map +1 -1
- package/dist/repl/display-tool-messages.js +47 -44
- package/dist/repl/get-prompt-header.d.ts.map +1 -1
- package/dist/repl/get-prompt-header.js +1 -30
- package/dist/repl/project-status-line.d.ts +2 -0
- package/dist/repl/project-status-line.d.ts.map +1 -0
- package/dist/repl/project-status-line.js +31 -0
- package/dist/repl/prompt.d.ts +21 -0
- package/dist/repl/prompt.d.ts.map +1 -0
- package/dist/{repl-prompt.js → repl/prompt.js} +119 -22
- package/dist/repl/tool-call-repair.d.ts.map +1 -1
- package/dist/repl/tool-call-repair.js +8 -4
- package/dist/repl-new.d.ts +53 -0
- package/dist/repl-new.d.ts.map +1 -0
- package/dist/repl-new.js +374 -0
- package/dist/repl.d.ts +3 -5
- package/dist/repl.d.ts.map +1 -1
- package/dist/repl.js +74 -166
- package/dist/terminal/checkbox-prompt.d.ts.map +1 -1
- package/dist/terminal/checkbox-prompt.js +10 -4
- package/dist/terminal/index.d.ts +7 -0
- package/dist/terminal/index.d.ts.map +1 -1
- package/dist/terminal/index.js +94 -0
- package/dist/terminal/input-prompt.d.ts +2 -1
- package/dist/terminal/input-prompt.d.ts.map +1 -1
- package/dist/terminal/markdown.js +3 -0
- package/dist/terminal/search-prompt.d.ts.map +1 -1
- package/dist/terminal/search-prompt.js +11 -10
- package/dist/terminal/select-prompt.d.ts +2 -2
- package/dist/terminal/select-prompt.d.ts.map +1 -1
- package/dist/terminal/select-prompt.js +47 -39
- package/dist/tokens/threshold.d.ts +35 -0
- package/dist/tokens/threshold.d.ts.map +1 -0
- package/dist/tokens/threshold.js +85 -0
- package/dist/tools/advanced-edit-file.d.ts +69 -0
- package/dist/tools/advanced-edit-file.d.ts.map +1 -0
- package/dist/tools/advanced-edit-file.js +281 -0
- package/dist/tools/agent.d.ts +16 -5
- package/dist/tools/agent.d.ts.map +1 -1
- package/dist/tools/agent.js +71 -58
- package/dist/tools/bash-utils.d.ts +1 -1
- package/dist/tools/bash-utils.d.ts.map +1 -1
- package/dist/tools/bash-utils.js +14 -6
- package/dist/tools/bash.d.ts +21 -12
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +88 -135
- package/dist/tools/code-interpreter.d.ts +21 -9
- package/dist/tools/code-interpreter.d.ts.map +1 -1
- package/dist/tools/code-interpreter.js +138 -137
- package/dist/tools/delete-file.d.ts +17 -10
- package/dist/tools/delete-file.d.ts.map +1 -1
- package/dist/tools/delete-file.js +51 -95
- package/dist/tools/directory-tree.d.ts +17 -6
- package/dist/tools/directory-tree.d.ts.map +1 -1
- package/dist/tools/directory-tree.js +47 -49
- package/dist/tools/dynamic-tool-loader.d.ts +18 -8
- package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
- package/dist/tools/dynamic-tool-loader.js +121 -129
- package/dist/tools/dynamic-tool-parser.d.ts +1 -0
- package/dist/tools/dynamic-tool-parser.d.ts.map +1 -1
- package/dist/tools/dynamic-tool-parser.js +1 -0
- package/dist/tools/edit-file.d.ts +35 -15
- package/dist/tools/edit-file.d.ts.map +1 -1
- package/dist/tools/edit-file.js +112 -112
- package/dist/tools/filesystem-utils.d.ts +2 -1
- package/dist/tools/filesystem-utils.d.ts.map +1 -1
- package/dist/tools/filesystem-utils.js +31 -17
- package/dist/tools/glob.d.ts +36 -0
- package/dist/tools/glob.d.ts.map +1 -0
- package/dist/tools/glob.js +143 -0
- package/dist/tools/grep.d.ts +73 -12
- package/dist/tools/grep.d.ts.map +1 -1
- package/dist/tools/grep.js +413 -168
- package/dist/tools/index.d.ts +204 -124
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +242 -135
- package/dist/tools/llm-edit-fixer.d.ts +25 -0
- package/dist/tools/llm-edit-fixer.d.ts.map +1 -0
- package/dist/tools/llm-edit-fixer.js +150 -0
- package/dist/tools/move-file.d.ts +19 -7
- package/dist/tools/move-file.d.ts.map +1 -1
- package/dist/tools/move-file.js +40 -33
- package/dist/tools/read-file.d.ts +47 -9
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +74 -69
- package/dist/tools/read-multiple-files.d.ts +17 -6
- package/dist/tools/read-multiple-files.d.ts.map +1 -1
- package/dist/tools/read-multiple-files.js +76 -73
- package/dist/tools/save-file.d.ts +45 -12
- package/dist/tools/save-file.d.ts.map +1 -1
- package/dist/tools/save-file.js +58 -101
- package/dist/tools/think.d.ts +15 -7
- package/dist/tools/think.d.ts.map +1 -1
- package/dist/tools/think.js +30 -22
- package/dist/tools/types.d.ts +4 -10
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js +9 -0
- package/dist/tools/utils.d.ts +14 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +16 -0
- package/dist/tools/web-fetch.d.ts +11 -4
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +39 -38
- package/dist/tools/web-search.d.ts +15 -6
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +50 -32
- package/dist/tui/autocomplete.d.ts +44 -0
- package/dist/tui/autocomplete.d.ts.map +1 -0
- package/dist/tui/autocomplete.js +466 -0
- package/dist/tui/components/assistant-message.d.ts +18 -0
- package/dist/tui/components/assistant-message.d.ts.map +1 -0
- package/dist/tui/components/assistant-message.js +29 -0
- package/dist/tui/components/editor.d.ts +51 -0
- package/dist/tui/components/editor.d.ts.map +1 -0
- package/dist/tui/components/editor.js +758 -0
- package/dist/tui/components/footer.d.ts +24 -0
- package/dist/tui/components/footer.d.ts.map +1 -0
- package/dist/tui/components/footer.js +197 -0
- package/dist/tui/components/input.d.ts +14 -0
- package/dist/tui/components/input.d.ts.map +1 -0
- package/dist/tui/components/input.js +122 -0
- package/dist/tui/components/loader.d.ts +19 -0
- package/dist/tui/components/loader.d.ts.map +1 -0
- package/dist/tui/components/loader.js +45 -0
- package/dist/tui/components/markdown.d.ts +103 -0
- package/dist/tui/components/markdown.d.ts.map +1 -0
- package/dist/tui/components/markdown.js +533 -0
- package/dist/tui/components/modal.d.ts +40 -0
- package/dist/tui/components/modal.d.ts.map +1 -0
- package/dist/tui/components/modal.js +292 -0
- package/dist/tui/components/prompt-status.d.ts +16 -0
- package/dist/tui/components/prompt-status.d.ts.map +1 -0
- package/dist/tui/components/prompt-status.js +21 -0
- package/dist/tui/components/select-list.d.ts +22 -0
- package/dist/tui/components/select-list.d.ts.map +1 -0
- package/dist/tui/components/select-list.js +143 -0
- package/dist/tui/components/spacer.d.ts +16 -0
- package/dist/tui/components/spacer.d.ts.map +1 -0
- package/dist/tui/components/spacer.js +27 -0
- package/dist/tui/components/text.d.ts +26 -0
- package/dist/tui/components/text.d.ts.map +1 -0
- package/dist/tui/components/text.js +143 -0
- package/dist/tui/components/thinking-block.d.ts +14 -0
- package/dist/tui/components/thinking-block.d.ts.map +1 -0
- package/dist/tui/components/thinking-block.js +30 -0
- package/dist/tui/components/tool-execution.d.ts +17 -0
- package/dist/tui/components/tool-execution.d.ts.map +1 -0
- package/dist/tui/components/tool-execution.js +153 -0
- package/dist/tui/components/user-message.d.ts +9 -0
- package/dist/tui/components/user-message.d.ts.map +1 -0
- package/dist/tui/components/user-message.js +21 -0
- package/dist/tui/components/welcome.d.ts +6 -0
- package/dist/tui/components/welcome.d.ts.map +1 -0
- package/dist/tui/components/welcome.js +30 -0
- package/dist/tui/index.d.ts +14 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +18 -0
- package/dist/tui/terminal.d.ts +37 -0
- package/dist/tui/terminal.d.ts.map +1 -0
- package/dist/tui/terminal.js +104 -0
- package/dist/tui/tui.d.ts +67 -0
- package/dist/tui/tui.d.ts.map +1 -0
- package/dist/tui/tui.js +184 -0
- package/dist/tui/utils.d.ts +19 -0
- package/dist/tui/utils.d.ts.map +1 -0
- package/dist/tui/utils.js +31 -0
- package/dist/utils/generators.d.ts +3 -0
- package/dist/utils/generators.d.ts.map +1 -0
- package/dist/utils/generators.js +25 -0
- package/dist/utils/iterables.d.ts +2 -0
- package/dist/utils/iterables.d.ts.map +1 -0
- package/dist/utils/iterables.js +6 -0
- package/package.json +16 -16
- package/dist/conversation-analyzer.d.ts +0 -11
- package/dist/conversation-analyzer.d.ts.map +0 -1
- package/dist/conversation-analyzer.js +0 -88
- package/dist/repl-prompt.d.ts +0 -15
- package/dist/repl-prompt.d.ts.map +0 -1
- package/dist/tokens/manage-output.d.ts +0 -34
- package/dist/tokens/manage-output.d.ts.map +0 -1
- package/dist/tokens/manage-output.js +0 -44
- package/dist/tool-executor.d.ts +0 -28
- package/dist/tool-executor.d.ts.map +0 -1
- package/dist/tool-executor.js +0 -74
- package/dist/tools/file-editing-utils.d.ts +0 -2
- package/dist/tools/file-editing-utils.d.ts.map +0 -1
- package/dist/tools/file-editing-utils.js +0 -135
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-prompt-header.d.ts","sourceRoot":"","sources":["../../source/repl/get-prompt-header.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"get-prompt-header.d.ts","sourceRoot":"","sources":["../../source/repl/get-prompt-header.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIrD,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhB"}
|
|
@@ -1,34 +1,5 @@
|
|
|
1
1
|
import style from "../terminal/style.js";
|
|
2
|
-
import {
|
|
3
|
-
async function getProjectStatusLine() {
|
|
4
|
-
const currentDir = process.cwd().split("/").pop() || process.cwd();
|
|
5
|
-
const branch = await getCurrentBranch();
|
|
6
|
-
let gitStatus = "";
|
|
7
|
-
if (branch) {
|
|
8
|
-
const hasChanges = await hasUncommittedChanges();
|
|
9
|
-
const asterisk = hasChanges ? "*" : "";
|
|
10
|
-
gitStatus = ` ${style.gray(branch + asterisk)}`;
|
|
11
|
-
}
|
|
12
|
-
if (await inGitDirectory()) {
|
|
13
|
-
const stats = await getDiffStat();
|
|
14
|
-
const fileChanges = await getGitStatus();
|
|
15
|
-
let fileStatus = "";
|
|
16
|
-
if (fileChanges.added)
|
|
17
|
-
fileStatus += ` +${fileChanges.added}`;
|
|
18
|
-
if (fileChanges.modified)
|
|
19
|
-
fileStatus += ` ~${fileChanges.modified}`;
|
|
20
|
-
if (fileChanges.deleted)
|
|
21
|
-
fileStatus += ` -${fileChanges.deleted}`;
|
|
22
|
-
if (fileChanges.untracked)
|
|
23
|
-
fileStatus += ` ?${fileChanges.untracked}`;
|
|
24
|
-
gitStatus +=
|
|
25
|
-
" " +
|
|
26
|
-
`${style.dim("[")}${style.yellow(fileStatus.trim())} ` +
|
|
27
|
-
`${style.green(`+${stats.insertions}`)} ` +
|
|
28
|
-
`${style.red(`-${stats.deletions}`)}${style.dim("]")}`;
|
|
29
|
-
}
|
|
30
|
-
return `${style.blue(currentDir)}${gitStatus}`;
|
|
31
|
-
}
|
|
2
|
+
import { getProjectStatusLine } from "./project-status-line.js";
|
|
32
3
|
export async function getPromptHeader(args) {
|
|
33
4
|
const { terminal, modelId, contextWindow, currentContextWindow } = args;
|
|
34
5
|
terminal.hr();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-status-line.d.ts","sourceRoot":"","sources":["../../source/repl/project-status-line.ts"],"names":[],"mappings":"AASA,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CA2B5D"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import style from "../terminal/style.js";
|
|
2
|
+
import { getCurrentBranch, getDiffStat, getGitStatus, hasUncommittedChanges, inGitDirectory, } from "../tools/git-utils.js";
|
|
3
|
+
export async function getProjectStatusLine() {
|
|
4
|
+
const currentDir = process.cwd().split("/").pop() || process.cwd();
|
|
5
|
+
const branch = await getCurrentBranch();
|
|
6
|
+
let gitStatus = "";
|
|
7
|
+
if (branch) {
|
|
8
|
+
const hasChanges = await hasUncommittedChanges();
|
|
9
|
+
const asterisk = hasChanges ? "*" : "";
|
|
10
|
+
gitStatus = ` ${style.gray(branch + asterisk)}`;
|
|
11
|
+
}
|
|
12
|
+
if (await inGitDirectory()) {
|
|
13
|
+
const stats = await getDiffStat();
|
|
14
|
+
const fileChanges = await getGitStatus();
|
|
15
|
+
let fileStatus = "";
|
|
16
|
+
if (fileChanges.added)
|
|
17
|
+
fileStatus += ` +${fileChanges.added}`;
|
|
18
|
+
if (fileChanges.modified)
|
|
19
|
+
fileStatus += ` ~${fileChanges.modified}`;
|
|
20
|
+
if (fileChanges.deleted)
|
|
21
|
+
fileStatus += ` -${fileChanges.deleted}`;
|
|
22
|
+
if (fileChanges.untracked)
|
|
23
|
+
fileStatus += ` ?${fileChanges.untracked}`;
|
|
24
|
+
gitStatus +=
|
|
25
|
+
" " +
|
|
26
|
+
`${style.dim("[")}${style.yellow(fileStatus.trim())} ` +
|
|
27
|
+
`${style.green(`+${stats.insertions}`)} ` +
|
|
28
|
+
`${style.red(`-${stats.deletions}`)}${style.dim("]")}`;
|
|
29
|
+
}
|
|
30
|
+
return `${style.blue(currentDir)}${gitStatus}`;
|
|
31
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CommandManager } from "../commands/manager.ts";
|
|
2
|
+
import type { WorkspaceContext } from "../index.ts";
|
|
3
|
+
export declare class ReplPrompt {
|
|
4
|
+
private keypressListener?;
|
|
5
|
+
private rl;
|
|
6
|
+
private history;
|
|
7
|
+
private maxHistory;
|
|
8
|
+
private pasteCounter;
|
|
9
|
+
private pasteStore;
|
|
10
|
+
constructor({ commands, history, workspace, }: {
|
|
11
|
+
commands: CommandManager;
|
|
12
|
+
history: string[];
|
|
13
|
+
workspace: WorkspaceContext;
|
|
14
|
+
});
|
|
15
|
+
input(): Promise<string>;
|
|
16
|
+
getPasteStore(): Map<number, string>;
|
|
17
|
+
resetPasteStore(): void;
|
|
18
|
+
close(): void;
|
|
19
|
+
[Symbol.dispose](): void;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../source/repl/prompt.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAmKpD,qBAAa,UAAU;IAErB,OAAO,CAAC,gBAAgB,CAAC,CAAkC;IAC3D,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAA6B;gBAEnC,EACV,QAAQ,EACR,OAAO,EACP,SAAS,GACV,EAAE;QACD,QAAQ,EAAE,cAAc,CAAC;QACzB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,SAAS,EAAE,gBAAgB,CAAC;KAC7B;IAwGK,KAAK;IAoBX,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAIpC,eAAe,IAAI,IAAI;IAKvB,KAAK;IAQL,CAAC,MAAM,CAAC,OAAO,CAAC;CAGjB"}
|
|
@@ -1,36 +1,82 @@
|
|
|
1
1
|
import { readdir } from "node:fs/promises";
|
|
2
|
-
import { parse, sep } from "node:path";
|
|
2
|
+
import { parse, relative, resolve, sep } from "node:path";
|
|
3
3
|
import { createInterface } from "node:readline/promises";
|
|
4
4
|
import Clipboard from "@crosscopy/clipboard";
|
|
5
5
|
import { asyncTry } from "@travisennis/stdlib/try";
|
|
6
|
-
import { logger } from "
|
|
6
|
+
import { logger } from "../logger.js";
|
|
7
7
|
const whitespaceRegex = /\s+/;
|
|
8
|
-
|
|
8
|
+
// Cache for directory listings to improve performance
|
|
9
|
+
class DirectoryCache {
|
|
10
|
+
cache = new Map();
|
|
11
|
+
ttl = 3000; // 3 seconds
|
|
12
|
+
async get(dir) {
|
|
13
|
+
const cached = this.cache.get(dir);
|
|
14
|
+
if (cached && Date.now() - cached.timestamp < this.ttl) {
|
|
15
|
+
return cached.entries;
|
|
16
|
+
}
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
set(dir, entries) {
|
|
20
|
+
this.cache.set(dir, { entries, timestamp: Date.now() });
|
|
21
|
+
}
|
|
22
|
+
clear() {
|
|
23
|
+
this.cache.clear();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const directoryCache = new DirectoryCache();
|
|
27
|
+
// Helper function to get directory entries with caching
|
|
28
|
+
async function getDirectoryEntries(dir) {
|
|
29
|
+
const cached = await directoryCache.get(dir);
|
|
30
|
+
if (cached) {
|
|
31
|
+
return cached;
|
|
32
|
+
}
|
|
33
|
+
const tryAttempt = await asyncTry(readdir(dir, { withFileTypes: true }));
|
|
34
|
+
if (tryAttempt.isFailure) {
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
const entries = tryAttempt.unwrap();
|
|
38
|
+
directoryCache.set(dir, entries);
|
|
39
|
+
return entries;
|
|
40
|
+
}
|
|
41
|
+
// Helper function to get completions from a specific directory
|
|
42
|
+
async function getCompletionsFromDir(line, dir, workspace) {
|
|
9
43
|
try {
|
|
10
44
|
const words = line.split(" ");
|
|
11
45
|
let last = words.at(-1);
|
|
12
46
|
if (!last) {
|
|
13
|
-
return [
|
|
47
|
+
return [];
|
|
14
48
|
}
|
|
15
49
|
const isAt = last.startsWith("@");
|
|
16
50
|
if (isAt) {
|
|
17
51
|
last = last.slice(1);
|
|
18
52
|
}
|
|
19
|
-
let { dir, base } = parse(last);
|
|
20
|
-
// If
|
|
21
|
-
if (!
|
|
22
|
-
|
|
53
|
+
let { dir: pathDir, base } = parse(last);
|
|
54
|
+
// If pathDir is empty, use current directory
|
|
55
|
+
if (!pathDir) {
|
|
56
|
+
pathDir = ".";
|
|
57
|
+
}
|
|
58
|
+
// Resolve the path relative to the current directory
|
|
59
|
+
const resolvedPath = resolve(dir, pathDir);
|
|
60
|
+
// Check if resolved path is within any allowed directory
|
|
61
|
+
const isWithinAllowed = workspace.allowedDirs.some((allowedDir) => resolvedPath.startsWith(allowedDir));
|
|
62
|
+
if (!isWithinAllowed) {
|
|
63
|
+
return [];
|
|
23
64
|
}
|
|
24
|
-
let
|
|
25
|
-
|
|
26
|
-
|
|
65
|
+
let dirEntries = await getDirectoryEntries(resolvedPath);
|
|
66
|
+
// If we couldn't read the directory, try current directory
|
|
67
|
+
if (dirEntries.length === 0 && pathDir !== ".") {
|
|
68
|
+
dirEntries = await getDirectoryEntries(dir);
|
|
69
|
+
pathDir = ".";
|
|
27
70
|
}
|
|
28
|
-
|
|
29
|
-
// for an exact match that is a directory, read the contents of the directory
|
|
71
|
+
// For an exact match that is a directory, read the contents of the directory
|
|
30
72
|
if (dirEntries.find((entry) => entry.name === base && entry.isDirectory())) {
|
|
31
|
-
|
|
32
|
-
|
|
73
|
+
const newPath = pathDir === "/" || pathDir === sep
|
|
74
|
+
? `${pathDir}${base}`
|
|
75
|
+
: `${pathDir}/${base}`;
|
|
76
|
+
const newResolvedPath = resolve(dir, newPath);
|
|
77
|
+
dirEntries = await getDirectoryEntries(newResolvedPath);
|
|
33
78
|
base = "";
|
|
79
|
+
pathDir = newPath;
|
|
34
80
|
}
|
|
35
81
|
else {
|
|
36
82
|
dirEntries = dirEntries.filter((entry) => entry.name.startsWith(base));
|
|
@@ -38,10 +84,41 @@ async function fileSystemCompleter(line) {
|
|
|
38
84
|
const hits = dirEntries
|
|
39
85
|
.filter((entry) => entry.isFile() || entry.isDirectory())
|
|
40
86
|
.map((entry) => {
|
|
41
|
-
const prefix =
|
|
42
|
-
|
|
87
|
+
const prefix = pathDir === "."
|
|
88
|
+
? ""
|
|
89
|
+
: pathDir === sep || pathDir === "/"
|
|
90
|
+
? ""
|
|
91
|
+
: `${pathDir}/`;
|
|
92
|
+
const fullPath = `${prefix}${entry.name}${entry.isDirectory() && !entry.name.endsWith("/") ? "/" : ""}`;
|
|
93
|
+
// Convert to relative path from primary directory for display
|
|
94
|
+
const absolutePath = resolve(dir, fullPath);
|
|
95
|
+
const relativePath = relative(workspace.primaryDir, absolutePath);
|
|
96
|
+
return `${isAt ? "@" : ""}${relativePath.startsWith("..") ? relativePath : `./${relativePath}`}`;
|
|
43
97
|
});
|
|
44
|
-
return
|
|
98
|
+
return hits;
|
|
99
|
+
}
|
|
100
|
+
catch (_error) {
|
|
101
|
+
return [];
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async function fileSystemCompleter(line, workspace) {
|
|
105
|
+
try {
|
|
106
|
+
const words = line.split(" ");
|
|
107
|
+
let last = words.at(-1);
|
|
108
|
+
if (!last) {
|
|
109
|
+
return [[], line];
|
|
110
|
+
}
|
|
111
|
+
const isAt = last.startsWith("@");
|
|
112
|
+
if (isAt) {
|
|
113
|
+
last = last.slice(1);
|
|
114
|
+
}
|
|
115
|
+
// Search all directories in parallel
|
|
116
|
+
const completionPromises = workspace.allowedDirs.map((dir) => getCompletionsFromDir(line, dir, workspace));
|
|
117
|
+
const allResults = await Promise.all(completionPromises);
|
|
118
|
+
const flattenedResults = allResults.flat();
|
|
119
|
+
// Remove duplicates while preserving order
|
|
120
|
+
const uniqueResults = [...new Set(flattenedResults)];
|
|
121
|
+
return [uniqueResults, `${isAt ? "@" : ""}${last}`];
|
|
45
122
|
}
|
|
46
123
|
catch (_error) {
|
|
47
124
|
logger.error(_error);
|
|
@@ -54,7 +131,9 @@ export class ReplPrompt {
|
|
|
54
131
|
rl;
|
|
55
132
|
history;
|
|
56
133
|
maxHistory = 25;
|
|
57
|
-
|
|
134
|
+
pasteCounter = 0;
|
|
135
|
+
pasteStore = new Map();
|
|
136
|
+
constructor({ commands, history, workspace, }) {
|
|
58
137
|
this.history = history;
|
|
59
138
|
this.rl = createInterface({
|
|
60
139
|
input: process.stdin,
|
|
@@ -79,7 +158,7 @@ export class ReplPrompt {
|
|
|
79
158
|
(words.length === 1 || line.endsWith(" "))) {
|
|
80
159
|
return [matchingCommands, line];
|
|
81
160
|
}
|
|
82
|
-
return fileSystemCompleter(line); // [completions, line];
|
|
161
|
+
return fileSystemCompleter(line, workspace); // [completions, line];
|
|
83
162
|
},
|
|
84
163
|
});
|
|
85
164
|
if (process.stdin.isTTY) {
|
|
@@ -99,11 +178,22 @@ export class ReplPrompt {
|
|
|
99
178
|
const cursorPos = this.rl.cursor;
|
|
100
179
|
const beforeCursor = currentLine.substring(0, cursorPos);
|
|
101
180
|
const afterCursor = currentLine.substring(cursorPos);
|
|
102
|
-
|
|
181
|
+
let textToInsert;
|
|
182
|
+
// Smart paste: use placeholder for text > 50 characters
|
|
183
|
+
if (clipboardText.length > 50) {
|
|
184
|
+
this.pasteCounter++;
|
|
185
|
+
const pasteId = this.pasteCounter;
|
|
186
|
+
this.pasteStore.set(pasteId, clipboardText);
|
|
187
|
+
textToInsert = `[Paste #${pasteId}, ${clipboardText.length} characters]`;
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
textToInsert = clipboardText;
|
|
191
|
+
}
|
|
192
|
+
const newLine = beforeCursor + textToInsert + afterCursor;
|
|
103
193
|
// biome-ignore lint/suspicious/noExplicitAny: Accessing internal readline method
|
|
104
194
|
this.rl.line = newLine;
|
|
105
195
|
// biome-ignore lint/suspicious/noExplicitAny: Accessing internal readline method
|
|
106
|
-
this.rl.cursor = cursorPos +
|
|
196
|
+
this.rl.cursor = cursorPos + textToInsert.length;
|
|
107
197
|
// biome-ignore lint/suspicious/noExplicitAny: Accessing internal readline method
|
|
108
198
|
this.rl._refreshLine();
|
|
109
199
|
}
|
|
@@ -134,6 +224,13 @@ export class ReplPrompt {
|
|
|
134
224
|
}
|
|
135
225
|
return input;
|
|
136
226
|
}
|
|
227
|
+
getPasteStore() {
|
|
228
|
+
return new Map(this.pasteStore);
|
|
229
|
+
}
|
|
230
|
+
resetPasteStore() {
|
|
231
|
+
this.pasteCounter = 0;
|
|
232
|
+
this.pasteStore.clear();
|
|
233
|
+
}
|
|
137
234
|
close() {
|
|
138
235
|
if (this.keypressListener) {
|
|
139
236
|
process.stdin.off("keypress", this.keypressListener);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-call-repair.d.ts","sourceRoot":"","sources":["../../source/repl/tool-call-repair.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,OAAO,EACb,MAAM,IAAI,CAAC;AAIZ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAoCzD,eAAO,MAAM,cAAc,GAAI,cAAc,YAAY,
|
|
1
|
+
{"version":3,"file":"tool-call-repair.d.ts","sourceRoot":"","sources":["../../source/repl/tool-call-repair.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,OAAO,EACb,MAAM,IAAI,CAAC;AAIZ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAoCzD,eAAO,MAAM,cAAc,GAAI,cAAc,YAAY,oCAmDxD,CAAC"}
|
|
@@ -18,8 +18,8 @@ async function remoteToolCallRepair(modelManager, toolCall, tool, inputSchema) {
|
|
|
18
18
|
const localToolCallRepair = async (toolCall, tool) => {
|
|
19
19
|
const schema = tool.inputSchema;
|
|
20
20
|
const repairedArgs = jsonrepair(toolCall.input);
|
|
21
|
-
schema.parse(repairedArgs);
|
|
22
|
-
return { ...toolCall, input: JSON.stringify(
|
|
21
|
+
const validatedArgs = schema.parse(JSON.parse(repairedArgs));
|
|
22
|
+
return { ...toolCall, input: JSON.stringify(validatedArgs) };
|
|
23
23
|
};
|
|
24
24
|
export const toolCallRepair = (modelManager) => {
|
|
25
25
|
const fn = async ({ toolCall, tools, inputSchema, error, }) => {
|
|
@@ -33,12 +33,16 @@ export const toolCallRepair = (modelManager) => {
|
|
|
33
33
|
return null;
|
|
34
34
|
}
|
|
35
35
|
try {
|
|
36
|
-
|
|
36
|
+
const repaired = await localToolCallRepair(toolCall, tool);
|
|
37
|
+
logger.debug(`Tool call repaired with jsonrepair ${repaired.input}`);
|
|
38
|
+
return repaired;
|
|
37
39
|
}
|
|
38
40
|
catch (err) {
|
|
39
41
|
logger.error(err, `Failed to repair tool call locally: ${toolCall.toolName}.`);
|
|
40
42
|
try {
|
|
41
|
-
|
|
43
|
+
const repaired = await remoteToolCallRepair(modelManager, toolCall, tool, inputSchema);
|
|
44
|
+
logger.debug(`Tool call repaired with remote repair ${repaired.input}`);
|
|
45
|
+
return repaired;
|
|
42
46
|
}
|
|
43
47
|
catch (err2) {
|
|
44
48
|
logger.error(err2, `Failed to repair tool call remotely: ${toolCall.toolName}.`);
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { Agent, AgentEvent, AgentState } from "./agent/index.ts";
|
|
2
|
+
import type { CommandManager } from "./commands/manager.ts";
|
|
3
|
+
import type { WorkspaceContext } from "./index.ts";
|
|
4
|
+
import type { MessageHistory } from "./messages.ts";
|
|
5
|
+
import type { ModelManager } from "./models/manager.ts";
|
|
6
|
+
import type { PromptManager } from "./prompts/manager.ts";
|
|
7
|
+
import type { Terminal } from "./terminal/index.ts";
|
|
8
|
+
import type { TokenCounter } from "./tokens/counter.ts";
|
|
9
|
+
import type { TokenTracker } from "./tokens/tracker.ts";
|
|
10
|
+
interface ReplOptions {
|
|
11
|
+
agent: Agent;
|
|
12
|
+
messageHistory: MessageHistory;
|
|
13
|
+
promptManager: PromptManager;
|
|
14
|
+
modelManager: ModelManager;
|
|
15
|
+
tokenTracker: TokenTracker;
|
|
16
|
+
terminal: Terminal;
|
|
17
|
+
commands: CommandManager;
|
|
18
|
+
config: Record<PropertyKey, unknown>;
|
|
19
|
+
tokenCounter: TokenCounter;
|
|
20
|
+
promptHistory: string[];
|
|
21
|
+
workspace: WorkspaceContext;
|
|
22
|
+
}
|
|
23
|
+
export declare class NewRepl {
|
|
24
|
+
private options;
|
|
25
|
+
private tui;
|
|
26
|
+
private welcome;
|
|
27
|
+
private editor;
|
|
28
|
+
private chatContainer;
|
|
29
|
+
private statusContainer;
|
|
30
|
+
private promptStatus;
|
|
31
|
+
private footer;
|
|
32
|
+
private editorContainer;
|
|
33
|
+
private isInitialized;
|
|
34
|
+
private onInputCallback?;
|
|
35
|
+
private loadingAnimation;
|
|
36
|
+
private onInterruptCallback?;
|
|
37
|
+
private lastSigintTime;
|
|
38
|
+
private pendingTools;
|
|
39
|
+
private streamingComponent;
|
|
40
|
+
private thinkingBlockComponent;
|
|
41
|
+
constructor(options: ReplOptions);
|
|
42
|
+
init(): Promise<void>;
|
|
43
|
+
handle(event: AgentEvent, state: AgentState): Promise<void>;
|
|
44
|
+
private addMessageToChat;
|
|
45
|
+
getUserInput(): Promise<string>;
|
|
46
|
+
clearEditor(): void;
|
|
47
|
+
setInterruptCallback(callback: () => void): void;
|
|
48
|
+
rerender(): Promise<void>;
|
|
49
|
+
private handleCtrlC;
|
|
50
|
+
stop(): void;
|
|
51
|
+
}
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=repl-new.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl-new.d.ts","sourceRoot":"","sources":["../source/repl-new.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAkBxD,UAAU,WAAW;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACrC,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;CAC7B;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,eAAe,CAAY;IACnC,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,eAAe,CAAY;IACnC,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,mBAAmB,CAAC,CAAa;IACzC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,YAAY,CAAsC;IAG1D,OAAO,CAAC,kBAAkB,CAA0C;IAGpE,OAAO,CAAC,sBAAsB,CAAuC;gBAEzD,OAAO,EAAE,WAAW;IAqB1B,IAAI;IA6HJ,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU;IA+LjD,OAAO,CAAC,gBAAgB;IAWlB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IASrC,WAAW,IAAI,IAAI;IAKnB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAI1C,QAAQ;IAYd,OAAO,CAAC,WAAW;IAiBnB,IAAI,IAAI,IAAI;CAUb"}
|