@nghyane/arcane 0.1.13 → 0.1.15
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/CHANGELOG.md +28 -0
- package/package.json +21 -70
- package/scripts/format-prompts.ts +1 -3
- package/src/cli/args.ts +2 -7
- package/src/cli/config-cli.ts +1 -1
- package/src/cli/plugin-cli.ts +1 -1
- package/src/cli/setup-cli.ts +1 -1
- package/src/cli/update-cli.ts +1 -1
- package/src/cli/web-search-cli.ts +1 -1
- package/src/cli.ts +0 -1
- package/src/commands/config.ts +1 -1
- package/src/commands/grep.ts +1 -1
- package/src/commands/jupyter.ts +1 -1
- package/src/commands/plugin.ts +1 -1
- package/src/commands/setup.ts +1 -1
- package/src/commands/shell.ts +1 -1
- package/src/commands/ssh.ts +1 -1
- package/src/commands/stats.ts +1 -1
- package/src/commands/update.ts +1 -1
- package/src/config/model-registry.ts +3 -4
- package/src/config/model-resolver.ts +36 -9
- package/src/config/prompt-templates.ts +1 -9
- package/src/config/settings-schema.ts +32 -88
- package/src/config/settings.ts +3 -4
- package/src/debug/index.ts +1 -1
- package/src/debug/log-formatting.ts +1 -1
- package/src/debug/log-viewer.ts +2 -2
- package/src/discovery/helpers.ts +13 -3
- package/src/exa/index.ts +1 -35
- package/src/exa/render.ts +30 -190
- package/src/export/html/index.ts +1 -1
- package/src/extensibility/custom-tools/loader.ts +1 -1
- package/src/extensibility/custom-tools/types.ts +5 -1
- package/src/extensibility/custom-tools/wrapper.ts +1 -1
- package/src/extensibility/extensions/runner.ts +1 -1
- package/src/extensibility/extensions/types.ts +1 -1
- package/src/extensibility/extensions/wrapper.ts +7 -15
- package/src/extensibility/hooks/runner.ts +1 -1
- package/src/extensibility/hooks/types.ts +1 -1
- package/src/extensibility/plugins/doctor.ts +1 -1
- package/src/index.ts +13 -13
- package/src/lsp/index.ts +77 -24
- package/src/lsp/render.ts +34 -583
- package/src/lsp/types.ts +3 -3
- package/src/lsp/utils.ts +1 -1
- package/src/main.ts +1 -1
- package/src/mcp/tool-bridge.ts +1 -24
- package/src/modes/components/assistant-message.ts +7 -7
- package/src/modes/components/bash-execution.ts +50 -112
- package/src/modes/components/bordered-loader.ts +1 -1
- package/src/modes/components/branch-summary-message.ts +16 -10
- package/src/modes/components/compaction-summary-message.ts +20 -12
- package/src/modes/components/context-group.ts +106 -0
- package/src/modes/components/custom-message.ts +4 -5
- package/src/modes/components/diff.ts +2 -2
- package/src/modes/components/dynamic-border.ts +1 -1
- package/src/modes/components/extensions/extension-dashboard.ts +1 -1
- package/src/modes/components/extensions/extension-list.ts +1 -1
- package/src/modes/components/extensions/inspector-panel.ts +1 -1
- package/src/modes/components/footer.ts +2 -2
- package/src/modes/components/history-search.ts +1 -1
- package/src/modes/components/hook-editor.ts +1 -1
- package/src/modes/components/hook-input.ts +1 -1
- package/src/modes/components/hook-message.ts +4 -5
- package/src/modes/components/hook-selector.ts +1 -1
- package/src/modes/components/index.ts +0 -2
- package/src/modes/components/keybinding-hints.ts +1 -1
- package/src/modes/components/login-dialog.ts +1 -1
- package/src/modes/components/mcp-add-wizard.ts +1 -1
- package/src/modes/components/model-selector.ts +1 -1
- package/src/modes/components/oauth-selector.ts +1 -1
- package/src/modes/components/plugin-settings.ts +1 -1
- package/src/modes/components/python-execution.ts +51 -91
- package/src/modes/components/queue-mode-selector.ts +1 -1
- package/src/modes/components/session-selector.ts +1 -1
- package/src/modes/components/settings-defs.ts +5 -10
- package/src/modes/components/settings-selector.ts +1 -1
- package/src/modes/components/show-images-selector.ts +1 -1
- package/src/modes/components/skill-message.ts +4 -4
- package/src/modes/components/status-line/segments.ts +2 -2
- package/src/modes/components/status-line/separators.ts +1 -1
- package/src/modes/components/status-line-segment-editor.ts +1 -1
- package/src/modes/components/status-line.ts +1 -1
- package/src/modes/components/theme-selector.ts +1 -1
- package/src/modes/components/thinking-selector.ts +1 -1
- package/src/modes/components/todo-display.ts +2 -4
- package/src/modes/components/todo-reminder.ts +4 -4
- package/src/modes/components/tool-execution.ts +118 -440
- package/src/modes/components/tool-image-display.ts +107 -0
- package/src/modes/components/tree-selector.ts +2 -2
- package/src/modes/components/ttsr-notification.ts +4 -17
- package/src/modes/components/user-message-selector.ts +1 -1
- package/src/modes/components/user-message.ts +9 -10
- package/src/modes/components/welcome.ts +1 -1
- package/src/modes/controllers/command-controller.ts +1 -1
- package/src/modes/controllers/event-controller.ts +58 -187
- package/src/modes/controllers/extension-ui-controller.ts +1 -1
- package/src/modes/controllers/input-controller.ts +3 -1
- package/src/modes/controllers/mcp-command-controller.ts +1 -1
- package/src/modes/controllers/selector-controller.ts +3 -26
- package/src/modes/controllers/ssh-command-controller.ts +1 -1
- package/src/modes/interactive-mode.ts +3 -7
- package/src/modes/print-mode.ts +5 -5
- package/src/modes/rpc/rpc-mode.ts +1 -1
- package/src/modes/types.ts +1 -2
- package/src/modes/utils/ui-helpers.ts +34 -32
- package/src/patch/edit-tool.ts +742 -0
- package/src/patch/index.ts +32 -898
- package/src/patch/schemas.ts +208 -0
- package/src/patch/shared.ts +83 -151
- package/src/prompts/agents/explore.md +22 -37
- package/src/prompts/agents/init.md +1 -1
- package/src/prompts/agents/librarian.md +29 -20
- package/src/prompts/agents/oracle.md +9 -2
- package/src/prompts/agents/reviewer.md +14 -48
- package/src/prompts/agents/task.md +16 -8
- package/src/prompts/compaction/branch-summary.md +4 -1
- package/src/prompts/compaction/compaction-summary.md +4 -1
- package/src/prompts/system/subagent-system-prompt.md +1 -1
- package/src/prompts/system/system-prompt.md +162 -178
- package/src/prompts/system/verification-reminder.md +6 -0
- package/src/sdk.ts +0 -9
- package/src/session/agent-session.ts +244 -1459
- package/src/session/model-controller.ts +406 -0
- package/src/session/retry-utils.ts +71 -0
- package/src/session/session-manager.ts +22 -186
- package/src/session/session-types.ts +312 -0
- package/src/session/stats.ts +387 -0
- package/src/session/streaming-edit.ts +258 -0
- package/src/session/ttsr.ts +213 -0
- package/src/slash-commands/builtin-registry.ts +0 -8
- package/src/stt/recorder.ts +2 -2
- package/src/system-prompt.ts +1 -14
- package/src/task/agents.ts +7 -33
- package/src/task/executor.ts +50 -438
- package/src/task/index.ts +104 -71
- package/src/task/progress-tracker.ts +390 -0
- package/src/task/render.ts +371 -187
- package/src/task/subprocess-tool-registry.ts +1 -1
- package/src/task/types.ts +14 -47
- package/src/tools/ask.ts +31 -42
- package/src/tools/bash-interactive.ts +2 -2
- package/src/tools/bash-interceptor.ts +2 -2
- package/src/tools/bash-normalize.ts +1 -1
- package/src/tools/bash-skill-urls.ts +2 -2
- package/src/tools/bash.ts +87 -136
- package/src/tools/browser.ts +54 -84
- package/src/tools/create-tools.ts +186 -0
- package/src/tools/default-renderer.ts +104 -0
- package/src/tools/explore.ts +11 -10
- package/src/tools/fetch.ts +24 -114
- package/src/tools/find.ts +48 -132
- package/src/tools/gemini-image.ts +5 -15
- package/src/tools/github.ts +450 -0
- package/src/tools/grep.ts +43 -179
- package/src/tools/index.ts +35 -198
- package/src/tools/json-tree.ts +3 -3
- package/src/tools/librarian.ts +18 -18
- package/src/tools/list-limit.ts +2 -2
- package/src/tools/notebook.ts +35 -87
- package/src/tools/oracle.ts +25 -25
- package/src/tools/output-meta.ts +89 -4
- package/src/tools/output-utils.ts +2 -2
- package/src/tools/python.ts +86 -637
- package/src/tools/read.ts +36 -119
- package/src/tools/reviewer-tool.ts +19 -21
- package/src/tools/search-code.ts +128 -0
- package/src/tools/ssh.ts +67 -126
- package/src/tools/subagent-tool.ts +197 -123
- package/src/tools/todo-write.ts +15 -31
- package/src/tools/tool-errors.ts +0 -30
- package/src/tools/undo-edit.ts +30 -67
- package/src/tools/write.ts +78 -127
- package/src/tui/code-cell.ts +4 -4
- package/src/tui/file-list.ts +2 -2
- package/src/tui/output-block.ts +1 -1
- package/src/tui/status-line.ts +1 -1
- package/src/tui/tree-list.ts +2 -2
- package/src/tui/types.ts +1 -1
- package/src/tui/utils.ts +1 -1
- package/src/{tools → ui}/render-utils.ts +87 -126
- package/src/utils/external-editor.ts +4 -4
- package/src/utils/file-mentions.ts +1 -1
- package/src/utils/index.ts +30 -0
- package/src/utils/tools-manager.ts +9 -19
- package/src/web/github-client.ts +290 -0
- package/src/web/scrapers/github.ts +11 -62
- package/src/web/search/auth.ts +1 -3
- package/src/web/search/index.ts +82 -46
- package/src/web/search/provider.ts +11 -16
- package/src/web/search/providers/grep.ts +160 -0
- package/src/web/search/render.ts +48 -235
- package/src/web/search/types.ts +1 -1
- package/src/commands/commit.ts +0 -36
- package/src/commit/agentic/agent.ts +0 -311
- package/src/commit/agentic/fallback.ts +0 -96
- package/src/commit/agentic/index.ts +0 -359
- package/src/commit/agentic/prompts/analyze-file.md +0 -22
- package/src/commit/agentic/prompts/session-user.md +0 -25
- package/src/commit/agentic/prompts/split-confirm.md +0 -1
- package/src/commit/agentic/prompts/system.md +0 -38
- package/src/commit/agentic/state.ts +0 -69
- package/src/commit/agentic/tools/analyze-file.ts +0 -118
- package/src/commit/agentic/tools/git-file-diff.ts +0 -194
- package/src/commit/agentic/tools/git-hunk.ts +0 -50
- package/src/commit/agentic/tools/git-overview.ts +0 -84
- package/src/commit/agentic/tools/index.ts +0 -56
- package/src/commit/agentic/tools/propose-changelog.ts +0 -128
- package/src/commit/agentic/tools/propose-commit.ts +0 -154
- package/src/commit/agentic/tools/recent-commits.ts +0 -81
- package/src/commit/agentic/tools/split-commit.ts +0 -280
- package/src/commit/agentic/topo-sort.ts +0 -44
- package/src/commit/agentic/trivial.ts +0 -51
- package/src/commit/agentic/validation.ts +0 -200
- package/src/commit/analysis/conventional.ts +0 -165
- package/src/commit/analysis/index.ts +0 -4
- package/src/commit/analysis/scope.ts +0 -242
- package/src/commit/analysis/summary.ts +0 -112
- package/src/commit/analysis/validation.ts +0 -66
- package/src/commit/changelog/detect.ts +0 -37
- package/src/commit/changelog/generate.ts +0 -110
- package/src/commit/changelog/index.ts +0 -234
- package/src/commit/changelog/parse.ts +0 -44
- package/src/commit/cli.ts +0 -93
- package/src/commit/git/diff.ts +0 -148
- package/src/commit/git/errors.ts +0 -9
- package/src/commit/git/index.ts +0 -211
- package/src/commit/git/operations.ts +0 -54
- package/src/commit/index.ts +0 -5
- package/src/commit/map-reduce/index.ts +0 -64
- package/src/commit/map-reduce/map-phase.ts +0 -178
- package/src/commit/map-reduce/reduce-phase.ts +0 -145
- package/src/commit/map-reduce/utils.ts +0 -9
- package/src/commit/message.ts +0 -11
- package/src/commit/model-selection.ts +0 -69
- package/src/commit/pipeline.ts +0 -243
- package/src/commit/prompts/analysis-system.md +0 -148
- package/src/commit/prompts/analysis-user.md +0 -38
- package/src/commit/prompts/changelog-system.md +0 -50
- package/src/commit/prompts/changelog-user.md +0 -18
- package/src/commit/prompts/file-observer-system.md +0 -24
- package/src/commit/prompts/file-observer-user.md +0 -8
- package/src/commit/prompts/reduce-system.md +0 -50
- package/src/commit/prompts/reduce-user.md +0 -17
- package/src/commit/prompts/summary-retry.md +0 -3
- package/src/commit/prompts/summary-system.md +0 -38
- package/src/commit/prompts/summary-user.md +0 -13
- package/src/commit/prompts/types-description.md +0 -2
- package/src/commit/types.ts +0 -109
- package/src/commit/utils/exclusions.ts +0 -42
- package/src/mcp/render.ts +0 -123
- package/src/modes/components/agent-dashboard.ts +0 -1130
- package/src/modes/components/codemode-group.ts +0 -369
- package/src/modes/components/read-tool-group.ts +0 -119
- package/src/modes/components/visual-truncate.ts +0 -63
- package/src/prompts/system/subagent-user-prompt.md +0 -8
- package/src/prompts/tools/ask.md +0 -44
- package/src/prompts/tools/bash.md +0 -24
- package/src/prompts/tools/browser.md +0 -33
- package/src/prompts/tools/calculator.md +0 -12
- package/src/prompts/tools/explore.md +0 -29
- package/src/prompts/tools/fetch.md +0 -16
- package/src/prompts/tools/find.md +0 -18
- package/src/prompts/tools/gemini-image.md +0 -23
- package/src/prompts/tools/grep.md +0 -28
- package/src/prompts/tools/hashline.md +0 -232
- package/src/prompts/tools/librarian.md +0 -24
- package/src/prompts/tools/lsp.md +0 -28
- package/src/prompts/tools/oracle.md +0 -26
- package/src/prompts/tools/patch.md +0 -74
- package/src/prompts/tools/python.md +0 -66
- package/src/prompts/tools/read.md +0 -36
- package/src/prompts/tools/replace.md +0 -38
- package/src/prompts/tools/reviewer.md +0 -41
- package/src/prompts/tools/ssh.md +0 -51
- package/src/prompts/tools/task-summary.md +0 -28
- package/src/prompts/tools/task.md +0 -146
- package/src/prompts/tools/todo-write.md +0 -65
- package/src/prompts/tools/undo-edit.md +0 -7
- package/src/prompts/tools/web-search.md +0 -19
- package/src/prompts/tools/write.md +0 -18
- package/src/task/batch.ts +0 -102
- package/src/task/discovery.ts +0 -126
- package/src/task/parallel.ts +0 -84
- package/src/task/template.ts +0 -32
- package/src/tools/calculator.ts +0 -537
- package/src/tools/jtd-to-typescript.ts +0 -198
- package/src/tools/renderers.ts +0 -60
- package/src/tools/tool-result.ts +0 -86
- /package/src/{modes/theme → theme}/dark.json +0 -0
- /package/src/{modes/theme → theme}/defaults/dark-catppuccin.json +0 -0
- /package/src/{modes/theme → theme}/defaults/dark-dracula.json +0 -0
- /package/src/{modes/theme → theme}/defaults/dark-gruvbox.json +0 -0
- /package/src/{modes/theme → theme}/defaults/dark-solarized.json +0 -0
- /package/src/{modes/theme → theme}/defaults/dark-tokyo-night.json +0 -0
- /package/src/{modes/theme → theme}/defaults/index.ts +0 -0
- /package/src/{modes/theme → theme}/defaults/light-catppuccin.json +0 -0
- /package/src/{modes/theme → theme}/defaults/light-github.json +0 -0
- /package/src/{modes/theme → theme}/defaults/light-solarized.json +0 -0
- /package/src/{modes/theme → theme}/light.json +0 -0
- /package/src/{modes/theme → theme}/mermaid-cache.ts +0 -0
- /package/src/{modes/theme → theme}/theme-schema.json +0 -0
- /package/src/{modes/theme → theme}/theme.ts +0 -0
|
@@ -31,7 +31,6 @@ import type { ModelRegistry } from "../../config/model-registry";
|
|
|
31
31
|
import type { BashResult } from "../../exec/bash-executor";
|
|
32
32
|
import type { ExecOptions, ExecResult } from "../../exec/exec";
|
|
33
33
|
import type { PythonResult } from "../../ipy/executor";
|
|
34
|
-
import type { Theme } from "../../modes/theme/theme";
|
|
35
34
|
import type { EditToolDetails } from "../../patch";
|
|
36
35
|
import type { CompactionPreparation, CompactionResult } from "../../session/compaction";
|
|
37
36
|
import type { CustomMessage } from "../../session/messages";
|
|
@@ -42,6 +41,7 @@ import type {
|
|
|
42
41
|
SessionEntry,
|
|
43
42
|
SessionManager,
|
|
44
43
|
} from "../../session/session-manager";
|
|
44
|
+
import type { Theme } from "../../theme/theme";
|
|
45
45
|
import type {
|
|
46
46
|
BashToolDetails,
|
|
47
47
|
BashToolInput,
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
import type { AgentTool, AgentToolContext, AgentToolUpdateCallback } from "@nghyane/arcane-agent";
|
|
5
5
|
import type { ImageContent, TextContent } from "@nghyane/arcane-ai";
|
|
6
6
|
import type { Static, TSchema } from "@sinclair/typebox";
|
|
7
|
-
import type { Theme } from "../../modes/theme/theme";
|
|
8
7
|
import { applyToolProxy } from "../tool-proxy";
|
|
9
8
|
import type { ExtensionRunner } from "./runner";
|
|
10
9
|
import type { RegisteredTool, ToolCallEventResult } from "./types";
|
|
@@ -18,29 +17,22 @@ export class RegisteredToolAdapter implements AgentTool<any, any, any> {
|
|
|
18
17
|
declare parameters: any;
|
|
19
18
|
declare label: string;
|
|
20
19
|
|
|
21
|
-
renderCall?: (args: any, options: any, theme: any) => any;
|
|
22
|
-
renderResult?: (result: any, options: any, theme: any, args?: any) => any;
|
|
23
|
-
|
|
24
20
|
constructor(
|
|
25
21
|
private registeredTool: RegisteredTool,
|
|
26
22
|
private runner: ExtensionRunner,
|
|
27
23
|
) {
|
|
28
24
|
applyToolProxy(registeredTool.definition, this);
|
|
29
25
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
// discards tool result text (extensions without renderers show blank).
|
|
34
|
-
if (registeredTool.definition.renderCall) {
|
|
35
|
-
this.renderCall = (args: any, options: any, theme: any) =>
|
|
36
|
-
registeredTool.definition.renderCall!(args, options, theme as Theme);
|
|
26
|
+
const def = registeredTool.definition;
|
|
27
|
+
if (def.renderCall) {
|
|
28
|
+
(this as any).renderCall = (args: any, options: any, theme: any) => def.renderCall!(args, options, theme);
|
|
37
29
|
}
|
|
38
|
-
if (
|
|
39
|
-
this.renderResult = (result: any, options: any, theme: any, args?: any) =>
|
|
40
|
-
|
|
30
|
+
if (def.renderResult) {
|
|
31
|
+
(this as any).renderResult = (result: any, options: any, theme: any, args?: any) =>
|
|
32
|
+
def.renderResult!(
|
|
41
33
|
result,
|
|
42
34
|
{ expanded: options.expanded, isPartial: options.isPartial, spinnerFrame: options.spinnerFrame },
|
|
43
|
-
theme
|
|
35
|
+
theme,
|
|
44
36
|
args,
|
|
45
37
|
);
|
|
46
38
|
}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
import type { AgentMessage } from "@nghyane/arcane-agent";
|
|
5
5
|
import type { Model } from "@nghyane/arcane-ai";
|
|
6
6
|
import type { ModelRegistry } from "../../config/model-registry";
|
|
7
|
-
import { theme } from "../../modes/theme/theme";
|
|
8
7
|
import type { SessionManager } from "../../session/session-manager";
|
|
8
|
+
import { theme } from "../../theme/theme";
|
|
9
9
|
import type {
|
|
10
10
|
AppendEntryHandler,
|
|
11
11
|
BranchHandler,
|
|
@@ -10,7 +10,6 @@ import type { Component, TUI } from "@nghyane/arcane-tui";
|
|
|
10
10
|
import type { Rule } from "../../capability/rule";
|
|
11
11
|
import type { ModelRegistry } from "../../config/model-registry";
|
|
12
12
|
import type { ExecOptions, ExecResult } from "../../exec/exec";
|
|
13
|
-
import type { Theme } from "../../modes/theme/theme";
|
|
14
13
|
import type { EditToolDetails } from "../../patch";
|
|
15
14
|
import type { CompactionPreparation, CompactionResult } from "../../session/compaction";
|
|
16
15
|
import type { HookMessage } from "../../session/messages";
|
|
@@ -21,6 +20,7 @@ import type {
|
|
|
21
20
|
SessionEntry,
|
|
22
21
|
SessionManager,
|
|
23
22
|
} from "../../session/session-manager";
|
|
23
|
+
import type { Theme } from "../../theme/theme";
|
|
24
24
|
import type { BashToolDetails, FindToolDetails, GrepToolDetails, ReadToolDetails } from "../../tools";
|
|
25
25
|
import type { TodoItem } from "../../tools/todo-write";
|
|
26
26
|
|
package/src/index.ts
CHANGED
|
@@ -136,22 +136,9 @@ export {
|
|
|
136
136
|
ToolExecutionComponent,
|
|
137
137
|
type ToolExecutionOptions,
|
|
138
138
|
TreeSelectorComponent,
|
|
139
|
-
truncateToVisualLines,
|
|
140
139
|
UserMessageComponent,
|
|
141
140
|
UserMessageSelectorComponent,
|
|
142
|
-
type VisualTruncateResult,
|
|
143
141
|
} from "./modes/components";
|
|
144
|
-
// Theme utilities for custom tools
|
|
145
|
-
export {
|
|
146
|
-
getLanguageFromPath,
|
|
147
|
-
getMarkdownTheme,
|
|
148
|
-
getSelectListTheme,
|
|
149
|
-
getSettingsListTheme,
|
|
150
|
-
highlightCode,
|
|
151
|
-
initTheme,
|
|
152
|
-
Theme,
|
|
153
|
-
type ThemeColor,
|
|
154
|
-
} from "./modes/theme/theme";
|
|
155
142
|
export { computeLineHash } from "./patch/hashline";
|
|
156
143
|
// SDK for programmatic usage
|
|
157
144
|
export {
|
|
@@ -242,6 +229,7 @@ export {
|
|
|
242
229
|
type ThinkingLevelChangeEntry,
|
|
243
230
|
} from "./session/session-manager";
|
|
244
231
|
export { runAgent } from "./task/executor";
|
|
232
|
+
export { extractAgentOutput, ProgressTracker } from "./task/progress-tracker";
|
|
245
233
|
export type {
|
|
246
234
|
AgentDefinition,
|
|
247
235
|
AgentProgress,
|
|
@@ -249,6 +237,17 @@ export type {
|
|
|
249
237
|
SingleResult,
|
|
250
238
|
TaskParams,
|
|
251
239
|
} from "./task/types";
|
|
240
|
+
// Theme utilities for custom tools
|
|
241
|
+
export {
|
|
242
|
+
getLanguageFromPath,
|
|
243
|
+
getMarkdownTheme,
|
|
244
|
+
getSelectListTheme,
|
|
245
|
+
getSettingsListTheme,
|
|
246
|
+
highlightCode,
|
|
247
|
+
initTheme,
|
|
248
|
+
Theme,
|
|
249
|
+
type ThemeColor,
|
|
250
|
+
} from "./theme/theme";
|
|
252
251
|
// Tools (detail types and utilities)
|
|
253
252
|
export {
|
|
254
253
|
type BashToolDetails,
|
|
@@ -274,4 +273,5 @@ export {
|
|
|
274
273
|
type WriteToolDetails,
|
|
275
274
|
type WriteToolInput,
|
|
276
275
|
} from "./tools";
|
|
276
|
+
export { EventBus } from "./utils/event-bus";
|
|
277
277
|
export { VERSION } from "./version";
|
package/src/lsp/index.ts
CHANGED
|
@@ -3,9 +3,7 @@ import path from "node:path";
|
|
|
3
3
|
import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@nghyane/arcane-agent";
|
|
4
4
|
import { logger, once, untilAborted } from "@nghyane/arcane-utils";
|
|
5
5
|
import type { BunFile } from "bun";
|
|
6
|
-
import {
|
|
7
|
-
import { type Theme, theme } from "../modes/theme/theme";
|
|
8
|
-
import lspDescription from "../prompts/tools/lsp.md" with { type: "text" };
|
|
6
|
+
import { type Theme, theme } from "../theme/theme";
|
|
9
7
|
import type { ToolSession } from "../tools";
|
|
10
8
|
import { resolveToCwd } from "../tools/path-utils";
|
|
11
9
|
import { ToolAbortError, throwIfAborted } from "../tools/tool-errors";
|
|
@@ -112,7 +110,10 @@ export async function warmupLspServers(cwd: string, options?: LspWarmupOptions):
|
|
|
112
110
|
});
|
|
113
111
|
} else {
|
|
114
112
|
const errorMsg = result.reason?.message ?? String(result.reason);
|
|
115
|
-
logger.warn("LSP server failed to start", {
|
|
113
|
+
logger.warn("LSP server failed to start", {
|
|
114
|
+
server: name,
|
|
115
|
+
error: errorMsg,
|
|
116
|
+
});
|
|
116
117
|
servers.push({
|
|
117
118
|
name,
|
|
118
119
|
status: "error",
|
|
@@ -286,22 +287,38 @@ interface ProjectType {
|
|
|
286
287
|
function detectProjectType(cwd: string): ProjectType {
|
|
287
288
|
// Check for Rust (Cargo.toml)
|
|
288
289
|
if (fs.existsSync(path.join(cwd, "Cargo.toml"))) {
|
|
289
|
-
return {
|
|
290
|
+
return {
|
|
291
|
+
type: "rust",
|
|
292
|
+
command: ["cargo", "check", "--message-format=short"],
|
|
293
|
+
description: "Rust (cargo check)",
|
|
294
|
+
};
|
|
290
295
|
}
|
|
291
296
|
|
|
292
297
|
// Check for TypeScript (tsconfig.json)
|
|
293
298
|
if (fs.existsSync(path.join(cwd, "tsconfig.json"))) {
|
|
294
|
-
return {
|
|
299
|
+
return {
|
|
300
|
+
type: "typescript",
|
|
301
|
+
command: ["npx", "tsc", "--noEmit"],
|
|
302
|
+
description: "TypeScript (tsc --noEmit)",
|
|
303
|
+
};
|
|
295
304
|
}
|
|
296
305
|
|
|
297
306
|
// Check for Go (go.mod)
|
|
298
307
|
if (fs.existsSync(path.join(cwd, "go.mod"))) {
|
|
299
|
-
return {
|
|
308
|
+
return {
|
|
309
|
+
type: "go",
|
|
310
|
+
command: ["go", "build", "./..."],
|
|
311
|
+
description: "Go (go build)",
|
|
312
|
+
};
|
|
300
313
|
}
|
|
301
314
|
|
|
302
315
|
// Check for Python (pyproject.toml or pyrightconfig.json)
|
|
303
316
|
if (fs.existsSync(path.join(cwd, "pyproject.toml")) || fs.existsSync(path.join(cwd, "pyrightconfig.json"))) {
|
|
304
|
-
return {
|
|
317
|
+
return {
|
|
318
|
+
type: "python",
|
|
319
|
+
command: ["pyright"],
|
|
320
|
+
description: "Python (pyright)",
|
|
321
|
+
};
|
|
305
322
|
}
|
|
306
323
|
|
|
307
324
|
return { type: "unknown", description: "Unknown project type" };
|
|
@@ -344,14 +361,20 @@ async function runWorkspaceDiagnostics(
|
|
|
344
361
|
// Limit output length
|
|
345
362
|
const lines = combined.split("\n");
|
|
346
363
|
if (lines.length > 50) {
|
|
347
|
-
return {
|
|
364
|
+
return {
|
|
365
|
+
output: `${lines.slice(0, 50).join("\n")}\n... and ${lines.length - 50} more lines`,
|
|
366
|
+
projectType,
|
|
367
|
+
};
|
|
348
368
|
}
|
|
349
369
|
return { output: combined, projectType };
|
|
350
370
|
} catch (e) {
|
|
351
371
|
if (signal?.aborted) {
|
|
352
372
|
throw new ToolAbortError();
|
|
353
373
|
}
|
|
354
|
-
return {
|
|
374
|
+
return {
|
|
375
|
+
output: `Failed to run ${projectType.command.join(" ")}: ${e}`,
|
|
376
|
+
projectType,
|
|
377
|
+
};
|
|
355
378
|
} finally {
|
|
356
379
|
signal?.removeEventListener("abort", abortHandler);
|
|
357
380
|
}
|
|
@@ -639,7 +662,10 @@ export async function flushLspWritethroughBatch(
|
|
|
639
662
|
return flushWritethroughBatch(Array.from(state.entries.values()), cwd, state.options, signal);
|
|
640
663
|
}
|
|
641
664
|
|
|
642
|
-
function summarizeDiagnosticMessages(messages: string[]): {
|
|
665
|
+
function summarizeDiagnosticMessages(messages: string[]): {
|
|
666
|
+
summary: string;
|
|
667
|
+
errored: boolean;
|
|
668
|
+
} {
|
|
643
669
|
const counts = { error: 0, warning: 0, info: 0, hint: 0 };
|
|
644
670
|
for (const message of messages) {
|
|
645
671
|
const match = message.match(/\[(error|warning|info|hint)\]/i);
|
|
@@ -864,16 +890,13 @@ export function createLspWritethrough(cwd: string, options?: WritethroughOptions
|
|
|
864
890
|
export class LspTool implements AgentTool<typeof lspSchema, LspToolDetails, Theme> {
|
|
865
891
|
readonly name = "lsp";
|
|
866
892
|
readonly label = "LSP";
|
|
867
|
-
readonly description
|
|
893
|
+
readonly description =
|
|
894
|
+
"Run LSP operations: diagnostics, go-to-definition, references, hover, symbols, rename. Output is shown to the user, so do not repeat or summarize the results.";
|
|
868
895
|
readonly parameters = lspSchema;
|
|
869
896
|
readonly renderCall = renderCall;
|
|
870
897
|
readonly renderResult = renderResult;
|
|
871
|
-
readonly mergeCallAndResult = true;
|
|
872
|
-
readonly inline = true;
|
|
873
898
|
|
|
874
|
-
constructor(private readonly session: ToolSession) {
|
|
875
|
-
this.description = renderPromptTemplate(lspDescription);
|
|
876
|
-
}
|
|
899
|
+
constructor(private readonly session: ToolSession) {}
|
|
877
900
|
|
|
878
901
|
static createIf(session: ToolSession): LspTool | null {
|
|
879
902
|
return session.enableLsp === false ? null : new LspTool(session);
|
|
@@ -988,7 +1011,11 @@ export class LspTool implements AgentTool<typeof lspSchema, LspToolDetails, Them
|
|
|
988
1011
|
if (uniqueDiagnostics.length === 0) {
|
|
989
1012
|
return {
|
|
990
1013
|
content: [{ type: "text", text: "No diagnostics" }],
|
|
991
|
-
details: {
|
|
1014
|
+
details: {
|
|
1015
|
+
action,
|
|
1016
|
+
serverName: Array.from(allServerNames).join(", "),
|
|
1017
|
+
success: true,
|
|
1018
|
+
},
|
|
992
1019
|
};
|
|
993
1020
|
}
|
|
994
1021
|
|
|
@@ -997,7 +1024,11 @@ export class LspTool implements AgentTool<typeof lspSchema, LspToolDetails, Them
|
|
|
997
1024
|
const output = `${summary}:\n${formatted.map(f => ` ${f}`).join("\n")}`;
|
|
998
1025
|
return {
|
|
999
1026
|
content: [{ type: "text", text: output }],
|
|
1000
|
-
details: {
|
|
1027
|
+
details: {
|
|
1028
|
+
action,
|
|
1029
|
+
serverName: Array.from(allServerNames).join(", "),
|
|
1030
|
+
success: true,
|
|
1031
|
+
},
|
|
1001
1032
|
};
|
|
1002
1033
|
}
|
|
1003
1034
|
|
|
@@ -1014,7 +1045,11 @@ export class LspTool implements AgentTool<typeof lspSchema, LspToolDetails, Them
|
|
|
1014
1045
|
|
|
1015
1046
|
return {
|
|
1016
1047
|
content: [{ type: "text", text: results.join("\n") }],
|
|
1017
|
-
details: {
|
|
1048
|
+
details: {
|
|
1049
|
+
action,
|
|
1050
|
+
serverName: Array.from(allServerNames).join(", "),
|
|
1051
|
+
success: true,
|
|
1052
|
+
},
|
|
1018
1053
|
};
|
|
1019
1054
|
}
|
|
1020
1055
|
|
|
@@ -1022,7 +1057,12 @@ export class LspTool implements AgentTool<typeof lspSchema, LspToolDetails, Them
|
|
|
1022
1057
|
|
|
1023
1058
|
if (requiresFile) {
|
|
1024
1059
|
return {
|
|
1025
|
-
content: [
|
|
1060
|
+
content: [
|
|
1061
|
+
{
|
|
1062
|
+
type: "text",
|
|
1063
|
+
text: "Error: file parameter required for this action",
|
|
1064
|
+
},
|
|
1065
|
+
],
|
|
1026
1066
|
details: { action, success: false },
|
|
1027
1067
|
};
|
|
1028
1068
|
}
|
|
@@ -1081,7 +1121,12 @@ export class LspTool implements AgentTool<typeof lspSchema, LspToolDetails, Them
|
|
|
1081
1121
|
if ("targetUri" in loc) {
|
|
1082
1122
|
// Use targetSelectionRange (the precise identifier range) with fallback to targetRange
|
|
1083
1123
|
const link = loc as LocationLink;
|
|
1084
|
-
return [
|
|
1124
|
+
return [
|
|
1125
|
+
{
|
|
1126
|
+
uri: link.targetUri,
|
|
1127
|
+
range: link.targetSelectionRange ?? link.targetRange,
|
|
1128
|
+
},
|
|
1129
|
+
];
|
|
1085
1130
|
}
|
|
1086
1131
|
return [];
|
|
1087
1132
|
});
|
|
@@ -1143,7 +1188,10 @@ export class LspTool implements AgentTool<typeof lspSchema, LspToolDetails, Them
|
|
|
1143
1188
|
if (!query) {
|
|
1144
1189
|
return {
|
|
1145
1190
|
content: [
|
|
1146
|
-
{
|
|
1191
|
+
{
|
|
1192
|
+
type: "text",
|
|
1193
|
+
text: "Error: query parameter required for workspace symbol search",
|
|
1194
|
+
},
|
|
1147
1195
|
],
|
|
1148
1196
|
details: { action, serverName, success: false },
|
|
1149
1197
|
};
|
|
@@ -1191,7 +1239,12 @@ export class LspTool implements AgentTool<typeof lspSchema, LspToolDetails, Them
|
|
|
1191
1239
|
case "rename": {
|
|
1192
1240
|
if (!new_name) {
|
|
1193
1241
|
return {
|
|
1194
|
-
content: [
|
|
1242
|
+
content: [
|
|
1243
|
+
{
|
|
1244
|
+
type: "text",
|
|
1245
|
+
text: "Error: new_name parameter required for rename",
|
|
1246
|
+
},
|
|
1247
|
+
],
|
|
1195
1248
|
details: { action, serverName, success: false },
|
|
1196
1249
|
};
|
|
1197
1250
|
}
|