@nghyane/arcane 0.1.12 → 0.1.14
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/company.ts +2 -7
- package/src/exa/index.ts +1 -35
- package/src/exa/linkedin.ts +2 -7
- package/src/exa/mcp-client.ts +21 -11
- package/src/exa/render.ts +30 -190
- package/src/exa/researcher.ts +2 -12
- package/src/exa/search.ts +5 -25
- package/src/exa/types.ts +3 -3
- package/src/exec/bash-executor.ts +2 -1
- package/src/exec/non-interactive-env.ts +43 -0
- 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 +48 -113
- package/src/modes/components/bordered-loader.ts +1 -1
- package/src/modes/components/branch-summary-message.ts +13 -10
- package/src/modes/components/compaction-summary-message.ts +14 -13
- 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 +2 -2
- package/src/modes/components/extensions/extension-list.ts +1 -1
- package/src/modes/components/extensions/inspector-panel.ts +8 -3
- 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 +49 -92
- 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/frontmatter.md +1 -1
- package/src/prompts/agents/init.md +2 -2
- package/src/prompts/agents/librarian.md +30 -21
- package/src/prompts/agents/oracle.md +9 -2
- package/src/prompts/agents/reviewer.md +15 -49
- package/src/prompts/agents/task.md +17 -9
- package/src/prompts/compaction/branch-summary-context.md +1 -1
- package/src/prompts/compaction/branch-summary-preamble.md +1 -1
- package/src/prompts/compaction/branch-summary.md +4 -1
- package/src/prompts/compaction/compaction-short-summary.md +1 -1
- package/src/prompts/compaction/compaction-summary-context.md +1 -1
- package/src/prompts/compaction/compaction-summary.md +4 -1
- package/src/prompts/compaction/compaction-turn-prefix.md +1 -1
- package/src/prompts/compaction/compaction-update-summary.md +1 -1
- package/src/prompts/memories/consolidation.md +1 -1
- package/src/prompts/memories/read_path.md +1 -1
- package/src/prompts/memories/stage_one_input.md +1 -1
- package/src/prompts/memories/stage_one_system.md +1 -1
- package/src/prompts/review-request.md +1 -1
- package/src/prompts/system/agent-creation-architect.md +1 -1
- package/src/prompts/system/agent-creation-user.md +1 -1
- package/src/prompts/system/custom-system-prompt.md +1 -1
- package/src/prompts/system/file-operations.md +1 -1
- package/src/prompts/system/subagent-system-prompt.md +2 -2
- package/src/prompts/system/summarization-system.md +1 -1
- package/src/prompts/system/system-prompt.md +163 -178
- package/src/prompts/system/title-system.md +1 -1
- package/src/prompts/system/ttsr-interrupt.md +1 -1
- package/src/prompts/system/verification-reminder.md +6 -0
- package/src/prompts/system/web-search.md +1 -1
- package/src/sdk.ts +0 -9
- package/src/session/agent-session.ts +244 -1459
- package/src/session/auth-storage.ts +5 -0
- 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/ssh/connection-manager.ts +1 -0
- 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 +4 -47
- 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 +85 -49
- 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
package/src/exa/render.ts
CHANGED
|
@@ -5,41 +5,13 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { Component } from "@nghyane/arcane-tui";
|
|
7
7
|
import { Text } from "@nghyane/arcane-tui";
|
|
8
|
-
import { logger } from "@nghyane/arcane-utils";
|
|
9
8
|
import type { RenderResultOptions } from "../extensibility/custom-tools/types";
|
|
10
|
-
import type { Theme } from "../
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
formatExpandHint,
|
|
14
|
-
formatMoreItems,
|
|
15
|
-
formatStatusIcon,
|
|
16
|
-
getDomain,
|
|
17
|
-
getPreviewLines,
|
|
18
|
-
PREVIEW_LIMITS,
|
|
19
|
-
TRUNCATE_LENGTHS,
|
|
20
|
-
truncateToWidth,
|
|
21
|
-
} from "../tools/render-utils";
|
|
9
|
+
import type { Theme } from "../theme/theme";
|
|
10
|
+
import { renderStatusLine } from "../tui";
|
|
11
|
+
import { formatCount, formatMoreItems, getDomain, truncateToWidth } from "../ui/render-utils";
|
|
22
12
|
import type { ExaRenderDetails } from "./types";
|
|
23
13
|
|
|
24
|
-
const
|
|
25
|
-
const COLLAPSED_PREVIEW_LINE_LEN = TRUNCATE_LENGTHS.LONG;
|
|
26
|
-
const EXPANDED_TEXT_LINES = 5;
|
|
27
|
-
const EXPANDED_TEXT_LINE_LEN = 90;
|
|
28
|
-
const MAX_TITLE_LEN = TRUNCATE_LENGTHS.TITLE;
|
|
29
|
-
const MAX_HIGHLIGHT_LEN = TRUNCATE_LENGTHS.CONTENT;
|
|
30
|
-
|
|
31
|
-
function renderErrorMessage(message: string, theme: Theme): Text {
|
|
32
|
-
const clean = message.replace(/^Error:\s*/, "").trim();
|
|
33
|
-
return new Text(
|
|
34
|
-
`${formatStatusIcon("error", theme)} ${theme.fg("error", `Error: ${clean || "Unknown error"}`)}`,
|
|
35
|
-
0,
|
|
36
|
-
0,
|
|
37
|
-
);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function renderEmptyMessage(message: string, theme: Theme): Text {
|
|
41
|
-
return new Text(`${formatStatusIcon("warning", theme)} ${theme.fg("muted", message)}`, 0, 0);
|
|
42
|
-
}
|
|
14
|
+
const MAX_COLLAPSED_RESULTS = 5;
|
|
43
15
|
|
|
44
16
|
/** Render Exa result with tree-based layout */
|
|
45
17
|
export function renderExaResult(
|
|
@@ -47,183 +19,51 @@ export function renderExaResult(
|
|
|
47
19
|
options: RenderResultOptions,
|
|
48
20
|
uiTheme: Theme,
|
|
49
21
|
): Component {
|
|
50
|
-
const { expanded } = options;
|
|
51
22
|
const details = result.details;
|
|
52
|
-
|
|
53
|
-
if (details?.error) {
|
|
54
|
-
logger.error("Exa render error", { error: details.error, toolName: details.toolName });
|
|
55
|
-
return renderErrorMessage(details.error, uiTheme);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
23
|
const response = details?.response;
|
|
59
|
-
|
|
60
|
-
if (details?.raw) {
|
|
61
|
-
const rawText = typeof details.raw === "string" ? details.raw : JSON.stringify(details.raw, null, 2);
|
|
62
|
-
const rawLines = rawText.split("\n").filter(l => l.trim());
|
|
63
|
-
const maxLines = expanded ? rawLines.length : Math.min(rawLines.length, COLLAPSED_PREVIEW_LINES);
|
|
64
|
-
const displayLines = rawLines.slice(0, maxLines);
|
|
65
|
-
const remaining = rawLines.length - maxLines;
|
|
66
|
-
const expandHint = formatExpandHint(uiTheme, expanded, remaining > 0);
|
|
67
|
-
|
|
68
|
-
let text = `${formatStatusIcon("info", uiTheme)} ${uiTheme.fg("dim", "Raw response")}${expandHint}`;
|
|
69
|
-
|
|
70
|
-
for (let i = 0; i < displayLines.length; i++) {
|
|
71
|
-
const isLast = i === displayLines.length - 1 && remaining === 0;
|
|
72
|
-
const branch = isLast ? uiTheme.tree.last : uiTheme.tree.branch;
|
|
73
|
-
text += `\n ${uiTheme.fg("dim", branch)} ${uiTheme.fg(
|
|
74
|
-
"toolOutput",
|
|
75
|
-
truncateToWidth(displayLines[i], COLLAPSED_PREVIEW_LINE_LEN),
|
|
76
|
-
)}`;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
if (remaining > 0) {
|
|
80
|
-
text += `\n ${uiTheme.fg("dim", uiTheme.tree.last)} ${uiTheme.fg(
|
|
81
|
-
"muted",
|
|
82
|
-
formatMoreItems(remaining, "line"),
|
|
83
|
-
)}`;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
return new Text(text, 0, 0);
|
|
87
|
-
}
|
|
88
|
-
return renderEmptyMessage("No response data", uiTheme);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
const results = response.results ?? [];
|
|
24
|
+
const results = response?.results ?? [];
|
|
92
25
|
const resultCount = results.length;
|
|
93
|
-
const cost = response.costDollars?.total;
|
|
94
|
-
const time = response.searchTime;
|
|
95
|
-
|
|
96
|
-
const icon = formatStatusIcon(resultCount > 0 ? "success" : "warning", uiTheme);
|
|
97
26
|
|
|
98
|
-
const
|
|
99
|
-
if (cost !== undefined) metaParts.push(`cost:$${cost.toFixed(4)}`);
|
|
100
|
-
if (time !== undefined) metaParts.push(`time:${time.toFixed(2)}s`);
|
|
101
|
-
const summaryText = metaParts.join(uiTheme.sep.dot);
|
|
27
|
+
const icon = details?.error ? "error" : resultCount > 0 ? "success" : "warning";
|
|
102
28
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
let text = `${icon} ${uiTheme.fg("dim", summaryText)}${expandHint}`;
|
|
112
|
-
|
|
113
|
-
if (!expanded) {
|
|
114
|
-
if (resultCount === 0) {
|
|
115
|
-
text += `\n ${uiTheme.fg("dim", uiTheme.tree.last)} ${uiTheme.fg("muted", "No results")}`;
|
|
116
|
-
return new Text(text, 0, 0);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
const first = results[0];
|
|
120
|
-
const previewText = first.text ?? first.title ?? "";
|
|
121
|
-
const previewLines = previewText
|
|
122
|
-
? getPreviewLines(previewText, COLLAPSED_PREVIEW_LINES, COLLAPSED_PREVIEW_LINE_LEN)
|
|
123
|
-
: [];
|
|
124
|
-
const safePreviewLines = previewLines.length > 0 ? previewLines : ["No preview text"];
|
|
125
|
-
const totalLines = previewText.split("\n").filter(l => l.trim()).length;
|
|
126
|
-
const remainingLines = Math.max(0, totalLines - previewLines.length);
|
|
127
|
-
const extraItems: string[] = [];
|
|
128
|
-
if (remainingLines > 0) {
|
|
129
|
-
extraItems.push(formatMoreItems(remainingLines, "line"));
|
|
130
|
-
}
|
|
131
|
-
if (resultCount > 1) {
|
|
132
|
-
extraItems.push(formatMoreItems(resultCount - 1, "result"));
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
for (let i = 0; i < safePreviewLines.length; i++) {
|
|
136
|
-
const isLast = i === safePreviewLines.length - 1 && extraItems.length === 0;
|
|
137
|
-
const branch = isLast ? uiTheme.tree.last : uiTheme.tree.branch;
|
|
138
|
-
const line = safePreviewLines[i];
|
|
139
|
-
const color = line === "No preview text" ? "muted" : "toolOutput";
|
|
140
|
-
text += `\n ${uiTheme.fg("dim", branch)} ${uiTheme.fg(color, line)}`;
|
|
141
|
-
}
|
|
29
|
+
const header = renderStatusLine(
|
|
30
|
+
{
|
|
31
|
+
icon,
|
|
32
|
+
title: "Exa Search",
|
|
33
|
+
meta: [formatCount("result", resultCount)],
|
|
34
|
+
},
|
|
35
|
+
uiTheme,
|
|
36
|
+
);
|
|
142
37
|
|
|
143
|
-
|
|
144
|
-
const isLast = i === extraItems.length - 1;
|
|
145
|
-
const branch = isLast ? uiTheme.tree.last : uiTheme.tree.branch;
|
|
146
|
-
text += `\n ${uiTheme.fg("dim", branch)} ${uiTheme.fg("muted", extraItems[i])}`;
|
|
147
|
-
}
|
|
38
|
+
let text = header;
|
|
148
39
|
|
|
40
|
+
if (details?.error) {
|
|
41
|
+
const clean = details.error.replace(/^Error:\s*/, "").trim();
|
|
42
|
+
text += `\n ${uiTheme.fg("dim", uiTheme.tree.last)} ${uiTheme.fg("error", clean || "Unknown error")}`;
|
|
149
43
|
return new Text(text, 0, 0);
|
|
150
44
|
}
|
|
151
45
|
|
|
152
|
-
if (resultCount === 0) {
|
|
46
|
+
if (!response || resultCount === 0) {
|
|
153
47
|
text += `\n ${uiTheme.fg("dim", uiTheme.tree.last)} ${uiTheme.fg("muted", "No results")}`;
|
|
154
48
|
return new Text(text, 0, 0);
|
|
155
49
|
}
|
|
156
50
|
|
|
157
|
-
|
|
51
|
+
const { expanded } = options;
|
|
52
|
+
const maxItems = expanded ? results.length : Math.min(results.length, MAX_COLLAPSED_RESULTS);
|
|
53
|
+
const remaining = results.length - maxItems;
|
|
54
|
+
|
|
55
|
+
for (let i = 0; i < maxItems; i++) {
|
|
158
56
|
const res = results[i];
|
|
159
|
-
const isLast = i ===
|
|
57
|
+
const isLast = i === maxItems - 1 && remaining === 0;
|
|
160
58
|
const branch = isLast ? uiTheme.tree.last : uiTheme.tree.branch;
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
const title = truncateToWidth(res.title ?? "Untitled", MAX_TITLE_LEN);
|
|
59
|
+
const title = truncateToWidth(res.title ?? "Untitled", 70);
|
|
164
60
|
const domain = res.url ? getDomain(res.url) : "";
|
|
165
|
-
const domainPart = domain ? uiTheme.fg("dim", `
|
|
166
|
-
|
|
61
|
+
const domainPart = domain ? ` ${uiTheme.fg("dim", `(${domain})`)}` : "";
|
|
167
62
|
text += `\n ${uiTheme.fg("dim", branch)} ${uiTheme.fg("accent", title)}${domainPart}`;
|
|
63
|
+
}
|
|
168
64
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
"mdLinkUrl",
|
|
172
|
-
res.url,
|
|
173
|
-
)}`;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
if (res.author) {
|
|
177
|
-
text += `\n ${uiTheme.fg("dim", cont)} ${uiTheme.fg("dim", uiTheme.tree.hook)} ${uiTheme.fg(
|
|
178
|
-
"muted",
|
|
179
|
-
`Author: ${res.author}`,
|
|
180
|
-
)}`;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
if (res.publishedDate) {
|
|
184
|
-
text += `\n ${uiTheme.fg("dim", cont)} ${uiTheme.fg("dim", uiTheme.tree.hook)} ${uiTheme.fg(
|
|
185
|
-
"muted",
|
|
186
|
-
`Published: ${res.publishedDate}`,
|
|
187
|
-
)}`;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
if (res.text) {
|
|
191
|
-
const textLines = res.text.split("\n").filter(l => l.trim());
|
|
192
|
-
const displayLines = textLines.slice(0, EXPANDED_TEXT_LINES);
|
|
193
|
-
for (const line of displayLines) {
|
|
194
|
-
text += `\n ${uiTheme.fg("dim", cont)} ${uiTheme.fg("dim", uiTheme.tree.hook)} ${uiTheme.fg(
|
|
195
|
-
"toolOutput",
|
|
196
|
-
truncateToWidth(line.trim(), EXPANDED_TEXT_LINE_LEN),
|
|
197
|
-
)}`;
|
|
198
|
-
}
|
|
199
|
-
if (textLines.length > EXPANDED_TEXT_LINES) {
|
|
200
|
-
text += `\n ${uiTheme.fg("dim", cont)} ${uiTheme.fg("dim", uiTheme.tree.hook)} ${uiTheme.fg(
|
|
201
|
-
"muted",
|
|
202
|
-
formatMoreItems(textLines.length - EXPANDED_TEXT_LINES, "line"),
|
|
203
|
-
)}`;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
if (res.highlights?.length) {
|
|
208
|
-
text += `\n ${uiTheme.fg("dim", cont)} ${uiTheme.fg("dim", uiTheme.tree.hook)} ${uiTheme.fg(
|
|
209
|
-
"accent",
|
|
210
|
-
"Highlights",
|
|
211
|
-
)}`;
|
|
212
|
-
const maxHighlights = Math.min(res.highlights.length, 3);
|
|
213
|
-
for (let j = 0; j < maxHighlights; j++) {
|
|
214
|
-
const h = res.highlights[j];
|
|
215
|
-
text += `\n ${uiTheme.fg("dim", cont)} ${uiTheme.fg("dim", uiTheme.tree.hook)} ${uiTheme.fg(
|
|
216
|
-
"muted",
|
|
217
|
-
`${uiTheme.format.dash} ${truncateToWidth(h, MAX_HIGHLIGHT_LEN)}`,
|
|
218
|
-
)}`;
|
|
219
|
-
}
|
|
220
|
-
if (res.highlights.length > maxHighlights) {
|
|
221
|
-
text += `\n ${uiTheme.fg("dim", cont)} ${uiTheme.fg("dim", uiTheme.tree.hook)} ${uiTheme.fg(
|
|
222
|
-
"muted",
|
|
223
|
-
formatMoreItems(res.highlights.length - maxHighlights, "highlight"),
|
|
224
|
-
)}`;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
65
|
+
if (remaining > 0) {
|
|
66
|
+
text += `\n ${uiTheme.fg("dim", uiTheme.tree.last)} ${uiTheme.fg("muted", formatMoreItems(remaining, "result"))}`;
|
|
227
67
|
}
|
|
228
68
|
|
|
229
69
|
return new Text(text, 0, 0);
|
package/src/exa/researcher.ts
CHANGED
|
@@ -33,12 +33,7 @@ const researcherStartTool: CustomTool<any, ExaRenderDetails> = {
|
|
|
33
33
|
async execute(_toolCallId, params, _onUpdate, _ctx, _signal) {
|
|
34
34
|
try {
|
|
35
35
|
const apiKey = await findApiKey();
|
|
36
|
-
|
|
37
|
-
return {
|
|
38
|
-
content: [{ type: "text" as const, text: "Error: EXA_API_KEY not found" }],
|
|
39
|
-
details: { error: "EXA_API_KEY not found", toolName: "exa_researcher_start" },
|
|
40
|
-
};
|
|
41
|
-
}
|
|
36
|
+
// Exa MCP endpoint is publicly accessible; API key is optional
|
|
42
37
|
const result = await callExaTool("deep_researcher_start", params as Record<string, unknown>, apiKey);
|
|
43
38
|
return {
|
|
44
39
|
content: [{ type: "text" as const, text: JSON.stringify(result, null, 2) }],
|
|
@@ -65,12 +60,7 @@ const researcherPollTool: CustomTool<any, ExaRenderDetails> = {
|
|
|
65
60
|
async execute(_toolCallId, params, _onUpdate, _ctx, _signal) {
|
|
66
61
|
try {
|
|
67
62
|
const apiKey = await findApiKey();
|
|
68
|
-
|
|
69
|
-
return {
|
|
70
|
-
content: [{ type: "text" as const, text: "Error: EXA_API_KEY not found" }],
|
|
71
|
-
details: { error: "EXA_API_KEY not found", toolName: "exa_researcher_poll" },
|
|
72
|
-
};
|
|
73
|
-
}
|
|
63
|
+
// Exa MCP endpoint is publicly accessible; API key is optional
|
|
74
64
|
const result = await callExaTool("deep_researcher_check", params as Record<string, unknown>, apiKey);
|
|
75
65
|
return {
|
|
76
66
|
content: [{ type: "text" as const, text: JSON.stringify(result, null, 2) }],
|
package/src/exa/search.ts
CHANGED
|
@@ -83,12 +83,7 @@ Parameters:
|
|
|
83
83
|
async execute(_toolCallId, params, _onUpdate, _ctx, _signal) {
|
|
84
84
|
try {
|
|
85
85
|
const apiKey = await findApiKey();
|
|
86
|
-
|
|
87
|
-
return {
|
|
88
|
-
content: [{ type: "text" as const, text: "Error: EXA_API_KEY not found" }],
|
|
89
|
-
details: { error: "EXA_API_KEY not found", toolName: "exa_search" },
|
|
90
|
-
};
|
|
91
|
-
}
|
|
86
|
+
// Exa MCP endpoint is publicly accessible; API key is optional
|
|
92
87
|
const response = await callExaTool("web_search_exa", params, apiKey);
|
|
93
88
|
|
|
94
89
|
if (isSearchResponse(response)) {
|
|
@@ -177,12 +172,7 @@ Similar parameters to exa_search, optimized for research depth.`,
|
|
|
177
172
|
async execute(_toolCallId, params, _onUpdate, _ctx, _signal) {
|
|
178
173
|
try {
|
|
179
174
|
const apiKey = await findApiKey();
|
|
180
|
-
|
|
181
|
-
return {
|
|
182
|
-
content: [{ type: "text" as const, text: "Error: EXA_API_KEY not found" }],
|
|
183
|
-
details: { error: "EXA_API_KEY not found", toolName: "exa_search_deep" },
|
|
184
|
-
};
|
|
185
|
-
}
|
|
175
|
+
// Exa MCP endpoint is publicly accessible; API key is optional
|
|
186
176
|
const args = { ...params, type: "deep" };
|
|
187
177
|
const response = await callExaTool("web_search_exa", args, apiKey);
|
|
188
178
|
|
|
@@ -232,12 +222,7 @@ Parameters:
|
|
|
232
222
|
async execute(_toolCallId, params, _onUpdate, _ctx, _signal) {
|
|
233
223
|
try {
|
|
234
224
|
const apiKey = await findApiKey();
|
|
235
|
-
|
|
236
|
-
return {
|
|
237
|
-
content: [{ type: "text" as const, text: "Error: EXA_API_KEY not found" }],
|
|
238
|
-
details: { error: "EXA_API_KEY not found", toolName: "exa_search_code" },
|
|
239
|
-
};
|
|
240
|
-
}
|
|
225
|
+
// Exa MCP endpoint is publicly accessible; API key is optional
|
|
241
226
|
const response = await callExaTool("get_code_context_exa", params, apiKey);
|
|
242
227
|
|
|
243
228
|
if (isSearchResponse(response)) {
|
|
@@ -292,13 +277,8 @@ Parameters:
|
|
|
292
277
|
async execute(_toolCallId, params, _onUpdate, _ctx, _signal) {
|
|
293
278
|
try {
|
|
294
279
|
const apiKey = await findApiKey();
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
content: [{ type: "text" as const, text: "Error: EXA_API_KEY not found" }],
|
|
298
|
-
details: { error: "EXA_API_KEY not found", toolName: "exa_crawl" },
|
|
299
|
-
};
|
|
300
|
-
}
|
|
301
|
-
const response = await callExaTool("crawling", params, apiKey);
|
|
280
|
+
// Exa MCP endpoint is publicly accessible; API key is optional
|
|
281
|
+
const response = await callExaTool("crawling_exa", params, apiKey);
|
|
302
282
|
|
|
303
283
|
if (isSearchResponse(response)) {
|
|
304
284
|
const formatted = formatSearchResults(response);
|
package/src/exa/types.ts
CHANGED
|
@@ -122,11 +122,11 @@ export const EXA_TOOL_MAPPINGS = {
|
|
|
122
122
|
// Search tools
|
|
123
123
|
web_search_exa: "exa_search",
|
|
124
124
|
get_code_context_exa: "exa_search_code",
|
|
125
|
-
|
|
125
|
+
crawling_exa: "exa_crawl",
|
|
126
126
|
// LinkedIn
|
|
127
|
-
|
|
127
|
+
linkedin_search_exa: "exa_linkedin",
|
|
128
128
|
// Company
|
|
129
|
-
|
|
129
|
+
company_research_exa: "exa_company",
|
|
130
130
|
// Researcher
|
|
131
131
|
deep_researcher_start: "exa_researcher_start",
|
|
132
132
|
deep_researcher_check: "exa_researcher_poll",
|
|
@@ -7,6 +7,7 @@ import { Shell } from "@nghyane/arcane-natives";
|
|
|
7
7
|
import { Settings } from "../config/settings";
|
|
8
8
|
import { OutputSink } from "../session/streaming-output";
|
|
9
9
|
import { getOrCreateSnapshot } from "../utils/shell-snapshot";
|
|
10
|
+
import { NON_INTERACTIVE_ENV } from "./non-interactive-env";
|
|
10
11
|
|
|
11
12
|
export interface BashExecutorOptions {
|
|
12
13
|
cwd?: string;
|
|
@@ -97,7 +98,7 @@ export async function executeBash(command: string, options?: BashExecutorOptions
|
|
|
97
98
|
{
|
|
98
99
|
command: finalCommand,
|
|
99
100
|
cwd: options?.cwd,
|
|
100
|
-
env: options?.env,
|
|
101
|
+
env: options?.env ? { ...NON_INTERACTIVE_ENV, ...options.env } : NON_INTERACTIVE_ENV,
|
|
101
102
|
timeoutMs: options?.timeout,
|
|
102
103
|
signal,
|
|
103
104
|
},
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export const NON_INTERACTIVE_ENV: Readonly<Record<string, string>> = {
|
|
2
|
+
// Disable pagers so commands don't block on interactive views.
|
|
3
|
+
PAGER: "cat",
|
|
4
|
+
GIT_PAGER: "cat",
|
|
5
|
+
MANPAGER: "cat",
|
|
6
|
+
SYSTEMD_PAGER: "cat",
|
|
7
|
+
BAT_PAGER: "cat",
|
|
8
|
+
DELTA_PAGER: "cat",
|
|
9
|
+
GH_PAGER: "cat",
|
|
10
|
+
GLAB_PAGER: "cat",
|
|
11
|
+
PSQL_PAGER: "cat",
|
|
12
|
+
MYSQL_PAGER: "cat",
|
|
13
|
+
AWS_PAGER: "",
|
|
14
|
+
HOMEBREW_PAGER: "cat",
|
|
15
|
+
LESS: "FRX",
|
|
16
|
+
// Disable editor and terminal credential prompts.
|
|
17
|
+
GIT_EDITOR: "true",
|
|
18
|
+
VISUAL: "true",
|
|
19
|
+
EDITOR: "true",
|
|
20
|
+
GIT_TERMINAL_PROMPT: "0",
|
|
21
|
+
SSH_ASKPASS: "/usr/bin/false",
|
|
22
|
+
CI: "1",
|
|
23
|
+
// Package manager defaults for unattended execution.
|
|
24
|
+
npm_config_yes: "true",
|
|
25
|
+
npm_config_update_notifier: "false",
|
|
26
|
+
npm_config_fund: "false",
|
|
27
|
+
npm_config_audit: "false",
|
|
28
|
+
npm_config_progress: "false",
|
|
29
|
+
PNPM_DISABLE_SELF_UPDATE_CHECK: "true",
|
|
30
|
+
PNPM_UPDATE_NOTIFIER: "false",
|
|
31
|
+
YARN_ENABLE_TELEMETRY: "0",
|
|
32
|
+
YARN_ENABLE_PROGRESS_BARS: "0",
|
|
33
|
+
// Cross-language/tooling non-interactive defaults.
|
|
34
|
+
CARGO_TERM_PROGRESS_WHEN: "never",
|
|
35
|
+
DEBIAN_FRONTEND: "noninteractive",
|
|
36
|
+
PIP_NO_INPUT: "1",
|
|
37
|
+
PIP_DISABLE_PIP_VERSION_CHECK: "1",
|
|
38
|
+
TF_INPUT: "0",
|
|
39
|
+
TF_IN_AUTOMATION: "1",
|
|
40
|
+
GH_PROMPT_DISABLED: "1",
|
|
41
|
+
COMPOSER_NO_INTERACTION: "1",
|
|
42
|
+
CLOUDSDK_CORE_DISABLE_PROMPTS: "1",
|
|
43
|
+
};
|
package/src/export/html/index.ts
CHANGED
|
@@ -2,8 +2,8 @@ import * as path from "node:path";
|
|
|
2
2
|
import type { AgentState } from "@nghyane/arcane-agent";
|
|
3
3
|
import { isEnoent } from "@nghyane/arcane-utils";
|
|
4
4
|
import { APP_NAME } from "@nghyane/arcane-utils/dirs";
|
|
5
|
-
import { getResolvedThemeColors, getThemeExportColors } from "../../modes/theme/theme";
|
|
6
5
|
import { type SessionEntry, type SessionHeader, SessionManager } from "../../session/session-manager";
|
|
6
|
+
import { getResolvedThemeColors, getThemeExportColors } from "../../theme/theme";
|
|
7
7
|
// Pre-generated template (created by scripts/generate-template.ts at publish time)
|
|
8
8
|
import { TEMPLATE } from "./template.generated";
|
|
9
9
|
|
|
@@ -15,7 +15,7 @@ import type { ExecOptions } from "../../exec/exec";
|
|
|
15
15
|
import { execCommand } from "../../exec/exec";
|
|
16
16
|
import type { HookUIContext } from "../../extensibility/hooks/types";
|
|
17
17
|
import { getAllPluginToolPaths } from "../../extensibility/plugins/loader";
|
|
18
|
-
import { theme } from "../../
|
|
18
|
+
import { theme } from "../../theme/theme";
|
|
19
19
|
import type { CustomToolAPI, CustomToolFactory, LoadedCustomTool, ToolLoadError } from "./types";
|
|
20
20
|
|
|
21
21
|
/**
|
|
@@ -12,9 +12,9 @@ import type { Rule } from "../../capability/rule";
|
|
|
12
12
|
import type { ModelRegistry } from "../../config/model-registry";
|
|
13
13
|
import type { ExecOptions, ExecResult } from "../../exec/exec";
|
|
14
14
|
import type { HookUIContext } from "../../extensibility/hooks/types";
|
|
15
|
-
import type { Theme } from "../../modes/theme/theme";
|
|
16
15
|
import type { CompactionResult } from "../../session/compaction";
|
|
17
16
|
import type { ReadonlySessionManager } from "../../session/session-manager";
|
|
17
|
+
import type { Theme } from "../../theme/theme";
|
|
18
18
|
import type { TodoItem } from "../../tools/todo-write";
|
|
19
19
|
|
|
20
20
|
/** Alias for clarity */
|
|
@@ -114,6 +114,10 @@ export interface RenderResultOptions {
|
|
|
114
114
|
isPartial: boolean;
|
|
115
115
|
/** Current spinner frame index for animated elements (0-9, only provided during partial results) */
|
|
116
116
|
spinnerFrame?: number;
|
|
117
|
+
/** Tool display label (used by default renderer) */
|
|
118
|
+
label?: string;
|
|
119
|
+
/** Extra rendering context from ToolExecutionComponent (bash output, edit diff, etc.) */
|
|
120
|
+
renderContext?: Record<string, unknown>;
|
|
117
121
|
}
|
|
118
122
|
|
|
119
123
|
export type CustomToolResult<TDetails = any> = AgentToolResult<TDetails>;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { AgentTool, AgentToolUpdateCallback } from "@nghyane/arcane-agent";
|
|
5
5
|
import type { Static, TSchema } from "@sinclair/typebox";
|
|
6
|
-
import type { Theme } from "../../
|
|
6
|
+
import type { Theme } from "../../theme/theme";
|
|
7
7
|
import { applyToolProxy } from "../tool-proxy";
|
|
8
8
|
import type { CustomTool, CustomToolContext } from "./types";
|
|
9
9
|
|
|
@@ -6,8 +6,8 @@ import type { ImageContent, Model } from "@nghyane/arcane-ai";
|
|
|
6
6
|
import type { KeyId } from "@nghyane/arcane-tui";
|
|
7
7
|
import { logger } from "@nghyane/arcane-utils";
|
|
8
8
|
import type { ModelRegistry } from "../../config/model-registry";
|
|
9
|
-
import { type Theme, theme } from "../../modes/theme/theme";
|
|
10
9
|
import type { SessionManager } from "../../session/session-manager";
|
|
10
|
+
import { type Theme, theme } from "../../theme/theme";
|
|
11
11
|
import type {
|
|
12
12
|
BeforeAgentStartEvent,
|
|
13
13
|
BeforeAgentStartEventResult,
|
|
@@ -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";
|