@autonav/core 1.5.0 → 1.7.0
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 +2 -2
- package/dist/adapter/index.d.ts +3 -3
- package/dist/adapter/index.d.ts.map +1 -1
- package/dist/adapter/index.js +3 -3
- package/dist/adapter/index.js.map +1 -1
- package/dist/adapter/navigator-adapter.d.ts +196 -0
- package/dist/adapter/navigator-adapter.d.ts.map +1 -0
- package/dist/adapter/navigator-adapter.js +579 -0
- package/dist/adapter/navigator-adapter.js.map +1 -0
- package/dist/cli/autonav.d.ts +2 -5
- package/dist/cli/autonav.d.ts.map +1 -1
- package/dist/cli/autonav.js +35 -49
- package/dist/cli/autonav.js.map +1 -1
- package/dist/cli/nav-chat.d.ts +2 -1
- package/dist/cli/nav-chat.d.ts.map +1 -1
- package/dist/cli/nav-chat.js +32 -3
- package/dist/cli/nav-chat.js.map +1 -1
- package/dist/cli/nav-init.d.ts +2 -1
- package/dist/cli/nav-init.d.ts.map +1 -1
- package/dist/cli/nav-init.js +12 -4
- package/dist/cli/nav-init.js.map +1 -1
- package/dist/cli/nav-install.d.ts +2 -1
- package/dist/cli/nav-install.d.ts.map +1 -1
- package/dist/cli/nav-install.js +4 -2
- package/dist/cli/nav-install.js.map +1 -1
- package/dist/cli/nav-memento.d.ts +21 -0
- package/dist/cli/nav-memento.d.ts.map +1 -0
- package/dist/cli/nav-memento.js +185 -0
- package/dist/cli/nav-memento.js.map +1 -0
- package/dist/cli/nav-mend.d.ts +2 -1
- package/dist/cli/nav-mend.d.ts.map +1 -1
- package/dist/cli/nav-mend.js +4 -1
- package/dist/cli/nav-mend.js.map +1 -1
- package/dist/cli/nav-migrate.d.ts +2 -1
- package/dist/cli/nav-migrate.d.ts.map +1 -1
- package/dist/cli/nav-migrate.js +2 -6
- package/dist/cli/nav-migrate.js.map +1 -1
- package/dist/cli/nav-query.d.ts +2 -1
- package/dist/cli/nav-query.d.ts.map +1 -1
- package/dist/cli/nav-query.js +12 -6
- package/dist/cli/nav-query.js.map +1 -1
- package/dist/cli/nav-standup.d.ts +18 -0
- package/dist/cli/nav-standup.d.ts.map +1 -0
- package/dist/cli/nav-standup.js +151 -0
- package/dist/cli/nav-standup.js.map +1 -0
- package/dist/cli/nav-uninstall.d.ts +2 -1
- package/dist/cli/nav-uninstall.d.ts.map +1 -1
- package/dist/cli/nav-uninstall.js +4 -2
- package/dist/cli/nav-uninstall.js.map +1 -1
- package/dist/cli/nav-update.d.ts +2 -1
- package/dist/cli/nav-update.d.ts.map +1 -1
- package/dist/cli/nav-update.js +11 -6
- package/dist/cli/nav-update.js.map +1 -1
- package/dist/conversation/App.d.ts +9 -2
- package/dist/conversation/App.d.ts.map +1 -1
- package/dist/conversation/App.js +304 -111
- package/dist/conversation/App.js.map +1 -1
- package/dist/conversation/index.d.ts +5 -0
- package/dist/conversation/index.d.ts.map +1 -1
- package/dist/conversation/index.js +17 -2
- package/dist/conversation/index.js.map +1 -1
- package/dist/harness/chibi-harness.d.ts +36 -0
- package/dist/harness/chibi-harness.d.ts.map +1 -0
- package/dist/harness/chibi-harness.js +383 -0
- package/dist/harness/chibi-harness.js.map +1 -0
- package/dist/harness/chibi-plugins/get_plugin_config +64 -0
- package/dist/harness/chibi-plugins/query_navigator +114 -0
- package/dist/harness/chibi-plugins/submit_answer +38 -0
- package/dist/harness/chibi-plugins/update_plugin_config +91 -0
- package/dist/harness/claude-code-harness.d.ts +24 -0
- package/dist/harness/claude-code-harness.d.ts.map +1 -0
- package/dist/harness/claude-code-harness.js +242 -0
- package/dist/harness/claude-code-harness.js.map +1 -0
- package/dist/harness/ephemeral-home.d.ts +34 -0
- package/dist/harness/ephemeral-home.d.ts.map +1 -0
- package/dist/harness/ephemeral-home.js +56 -0
- package/dist/harness/ephemeral-home.js.map +1 -0
- package/dist/harness/factory.d.ts +47 -0
- package/dist/harness/factory.d.ts.map +1 -0
- package/dist/harness/factory.js +84 -0
- package/dist/harness/factory.js.map +1 -0
- package/dist/harness/helpers.d.ts +58 -0
- package/dist/harness/helpers.d.ts.map +1 -0
- package/dist/harness/helpers.js +78 -0
- package/dist/harness/helpers.js.map +1 -0
- package/dist/harness/index.d.ts +14 -0
- package/dist/harness/index.d.ts.map +1 -0
- package/dist/harness/index.js +13 -0
- package/dist/harness/index.js.map +1 -0
- package/dist/harness/opencode-harness.d.ts +79 -0
- package/dist/harness/opencode-harness.d.ts.map +1 -0
- package/dist/harness/opencode-harness.js +537 -0
- package/dist/harness/opencode-harness.js.map +1 -0
- package/dist/harness/opencode-tools/get_plugin_config.ts +72 -0
- package/dist/harness/opencode-tools/query_navigator.ts +126 -0
- package/dist/harness/opencode-tools/submit_answer.ts +40 -0
- package/dist/harness/opencode-tools/update_plugin_config.ts +105 -0
- package/dist/harness/sandbox.d.ts +59 -0
- package/dist/harness/sandbox.d.ts.map +1 -0
- package/dist/harness/sandbox.js +152 -0
- package/dist/harness/sandbox.js.map +1 -0
- package/dist/harness/tool-server.d.ts +50 -0
- package/dist/harness/tool-server.d.ts.map +1 -0
- package/dist/harness/tool-server.js +27 -0
- package/dist/harness/tool-server.js.map +1 -0
- package/dist/harness/types.d.ts +168 -0
- package/dist/harness/types.d.ts.map +1 -0
- package/dist/harness/types.js +12 -0
- package/dist/harness/types.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/interview/App.d.ts +4 -2
- package/dist/interview/App.d.ts.map +1 -1
- package/dist/interview/App.js +36 -56
- package/dist/interview/App.js.map +1 -1
- package/dist/interview/index.d.ts +3 -0
- package/dist/interview/index.d.ts.map +1 -1
- package/dist/interview/index.js +1 -0
- package/dist/interview/index.js.map +1 -1
- package/dist/interview/prompts.d.ts +3 -1
- package/dist/interview/prompts.d.ts.map +1 -1
- package/dist/interview/prompts.js +5 -1
- package/dist/interview/prompts.js.map +1 -1
- package/dist/interview/ui/ChatBanner.d.ts +17 -0
- package/dist/interview/ui/ChatBanner.d.ts.map +1 -0
- package/dist/interview/ui/ChatBanner.js +30 -0
- package/dist/interview/ui/ChatBanner.js.map +1 -0
- package/dist/interview/ui/ChatInput.d.ts +36 -0
- package/dist/interview/ui/ChatInput.d.ts.map +1 -0
- package/dist/interview/ui/ChatInput.js +304 -0
- package/dist/interview/ui/ChatInput.js.map +1 -0
- package/dist/interview/ui/MarkdownText.d.ts +13 -0
- package/dist/interview/ui/MarkdownText.d.ts.map +1 -0
- package/dist/interview/ui/MarkdownText.js +107 -0
- package/dist/interview/ui/MarkdownText.js.map +1 -0
- package/dist/interview/ui/index.d.ts +3 -0
- package/dist/interview/ui/index.d.ts.map +1 -1
- package/dist/interview/ui/index.js +3 -0
- package/dist/interview/ui/index.js.map +1 -1
- package/dist/memento/git-operations.d.ts +95 -0
- package/dist/memento/git-operations.d.ts.map +1 -0
- package/dist/memento/git-operations.js +256 -0
- package/dist/memento/git-operations.js.map +1 -0
- package/dist/memento/implementer-agent.d.ts +31 -0
- package/dist/memento/implementer-agent.d.ts.map +1 -0
- package/dist/memento/implementer-agent.js +95 -0
- package/dist/memento/implementer-agent.js.map +1 -0
- package/dist/memento/index.d.ts +32 -0
- package/dist/memento/index.d.ts.map +1 -0
- package/dist/memento/index.js +40 -0
- package/dist/memento/index.js.map +1 -0
- package/dist/memento/loop.d.ts +34 -0
- package/dist/memento/loop.d.ts.map +1 -0
- package/dist/memento/loop.js +1227 -0
- package/dist/memento/loop.js.map +1 -0
- package/dist/memento/matrix-animation.d.ts +103 -0
- package/dist/memento/matrix-animation.d.ts.map +1 -0
- package/dist/memento/matrix-animation.js +303 -0
- package/dist/memento/matrix-animation.js.map +1 -0
- package/dist/memento/nav-protocol.d.ts +30 -0
- package/dist/memento/nav-protocol.d.ts.map +1 -0
- package/dist/memento/nav-protocol.js +75 -0
- package/dist/memento/nav-protocol.js.map +1 -0
- package/dist/memento/prompts.d.ts +57 -0
- package/dist/memento/prompts.d.ts.map +1 -0
- package/dist/memento/prompts.js +208 -0
- package/dist/memento/prompts.js.map +1 -0
- package/dist/memento/rate-limit.d.ts +85 -0
- package/dist/memento/rate-limit.d.ts.map +1 -0
- package/dist/memento/rate-limit.js +221 -0
- package/dist/memento/rate-limit.js.map +1 -0
- package/dist/memento/types.d.ts +123 -0
- package/dist/memento/types.d.ts.map +1 -0
- package/dist/memento/types.js +30 -0
- package/dist/memento/types.js.map +1 -0
- package/dist/memento/worker-agent.d.ts +33 -0
- package/dist/memento/worker-agent.d.ts.map +1 -0
- package/dist/memento/worker-agent.js +93 -0
- package/dist/memento/worker-agent.js.map +1 -0
- package/dist/registry.d.ts +35 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +87 -0
- package/dist/registry.js.map +1 -0
- package/dist/repo-analyzer/index.d.ts +2 -1
- package/dist/repo-analyzer/index.d.ts.map +1 -1
- package/dist/repo-analyzer/index.js +6 -17
- package/dist/repo-analyzer/index.js.map +1 -1
- package/dist/standup/config.d.ts +19 -0
- package/dist/standup/config.d.ts.map +1 -0
- package/dist/standup/config.js +42 -0
- package/dist/standup/config.js.map +1 -0
- package/dist/standup/index.d.ts +24 -0
- package/dist/standup/index.d.ts.map +1 -0
- package/dist/standup/index.js +29 -0
- package/dist/standup/index.js.map +1 -0
- package/dist/standup/loop.d.ts +36 -0
- package/dist/standup/loop.d.ts.map +1 -0
- package/dist/standup/loop.js +508 -0
- package/dist/standup/loop.js.map +1 -0
- package/dist/standup/prompts.d.ts +62 -0
- package/dist/standup/prompts.d.ts.map +1 -0
- package/dist/standup/prompts.js +211 -0
- package/dist/standup/prompts.js.map +1 -0
- package/dist/standup/standup-protocol.d.ts +33 -0
- package/dist/standup/standup-protocol.d.ts.map +1 -0
- package/dist/standup/standup-protocol.js +189 -0
- package/dist/standup/standup-protocol.js.map +1 -0
- package/dist/standup/types.d.ts +185 -0
- package/dist/standup/types.d.ts.map +1 -0
- package/dist/standup/types.js +67 -0
- package/dist/standup/types.js.map +1 -0
- package/dist/tools/cross-nav.d.ts +21 -0
- package/dist/tools/cross-nav.d.ts.map +1 -0
- package/dist/tools/cross-nav.js +93 -0
- package/dist/tools/cross-nav.js.map +1 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/related-navs-config.d.ts +15 -0
- package/dist/tools/related-navs-config.d.ts.map +1 -0
- package/dist/tools/related-navs-config.js +132 -0
- package/dist/tools/related-navs-config.js.map +1 -0
- package/dist/tools/related-navs.d.ts +23 -0
- package/dist/tools/related-navs.d.ts.map +1 -0
- package/dist/tools/related-navs.js +107 -0
- package/dist/tools/related-navs.js.map +1 -0
- package/dist/tools/response.d.ts +3 -2
- package/dist/tools/response.d.ts.map +1 -1
- package/dist/tools/response.js +7 -11
- package/dist/tools/response.js.map +1 -1
- package/dist/tools/self-config.d.ts +2 -1
- package/dist/tools/self-config.d.ts.map +1 -1
- package/dist/tools/self-config.js +5 -9
- package/dist/tools/self-config.js.map +1 -1
- package/package.json +4 -1
|
@@ -118,6 +118,8 @@ async function executeUninstall(navigatorPath, options) {
|
|
|
118
118
|
process.exit(1);
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
|
-
|
|
122
|
-
|
|
121
|
+
/** Run this command with the given args (called by dispatcher) */
|
|
122
|
+
export async function run(args) {
|
|
123
|
+
await program.parseAsync(args, { from: "user" });
|
|
124
|
+
}
|
|
123
125
|
//# sourceMappingURL=nav-uninstall.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-uninstall.js","sourceRoot":"","sources":["../../src/cli/nav-uninstall.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"nav-uninstall.js","sourceRoot":"","sources":["../../src/cli/nav-uninstall.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/nav-update.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-update.d.ts","sourceRoot":"","sources":["../../src/cli/nav-update.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"nav-update.d.ts","sourceRoot":"","sources":["../../src/cli/nav-update.ts"],"names":[],"mappings":";AAqLA,kEAAkE;AAClE,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvD"}
|
package/dist/cli/nav-update.js
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
import { Command } from "commander";
|
|
3
3
|
import chalk from "chalk";
|
|
4
4
|
import ora from "ora";
|
|
5
|
-
import {
|
|
5
|
+
import { NavigatorAdapter } from "../adapter/index.js";
|
|
6
6
|
import { loadNavigator, formatErrorMessage, NavigatorLoadError, } from "../query-engine/index.js";
|
|
7
|
+
import { resolveAndCreateHarness } from "../harness/index.js";
|
|
7
8
|
/**
|
|
8
9
|
* Parse a human-readable duration string into milliseconds
|
|
9
10
|
* Supports formats: "30s", "1m", "1m30s", "90", "90000" (plain ms)
|
|
@@ -52,6 +53,7 @@ program
|
|
|
52
53
|
.option("--timeout <duration>", "Update timeout (e.g., 30s, 1m, 1m30s, or milliseconds)", parseDuration, 120000 // 2 minutes default (longer than query since it may need to write files)
|
|
53
54
|
)
|
|
54
55
|
.option("--verbose", "Show additional debug information")
|
|
56
|
+
.option("--harness <type>", "Agent runtime to use (claude-code|chibi|opencode)")
|
|
55
57
|
.action(async (navigator, message, options) => {
|
|
56
58
|
await executeUpdate(navigator, message, options);
|
|
57
59
|
});
|
|
@@ -72,12 +74,13 @@ async function executeUpdate(navigatorPath, message, options) {
|
|
|
72
74
|
}
|
|
73
75
|
console.error(""); // Blank line
|
|
74
76
|
}
|
|
77
|
+
// Initialize adapter with resolved harness
|
|
78
|
+
const harness = await resolveAndCreateHarness(options.harness);
|
|
79
|
+
const adapter = new NavigatorAdapter({ harness });
|
|
75
80
|
// Show update message
|
|
76
81
|
console.error(chalk.blue("📝") + " Update: " + chalk.italic(message));
|
|
77
82
|
console.error(""); // Blank line
|
|
78
|
-
spinner = ora(
|
|
79
|
-
// Initialize adapter
|
|
80
|
-
const adapter = new ClaudeAdapter();
|
|
83
|
+
spinner = ora(`${harness.displayName} is updating documentation...`).start();
|
|
81
84
|
// Execute update with timeout
|
|
82
85
|
const updatePromise = adapter.update(navigator, message);
|
|
83
86
|
const timeoutPromise = new Promise((_, reject) => {
|
|
@@ -126,6 +129,8 @@ async function executeUpdate(navigatorPath, message, options) {
|
|
|
126
129
|
process.exit(1);
|
|
127
130
|
}
|
|
128
131
|
}
|
|
129
|
-
|
|
130
|
-
|
|
132
|
+
/** Run this command with the given args (called by dispatcher) */
|
|
133
|
+
export async function run(args) {
|
|
134
|
+
await program.parseAsync(args, { from: "user" });
|
|
135
|
+
}
|
|
131
136
|
//# sourceMappingURL=nav-update.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-update.js","sourceRoot":"","sources":["../../src/cli/nav-update.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"nav-update.js","sourceRoot":"","sources":["../../src/cli/nav-update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Ink-based TUI for interactive navigator conversation
|
|
3
3
|
*
|
|
4
|
-
* Uses
|
|
4
|
+
* Uses Harness abstraction for multi-turn conversation, supporting
|
|
5
|
+
* both Claude Code and chibi runtimes. Renders themed UI with markdown
|
|
6
|
+
* support, matrix-style activity animation, and cohesive styling.
|
|
5
7
|
*/
|
|
8
|
+
import { type Harness } from "../harness/index.js";
|
|
6
9
|
interface ConversationAppProps {
|
|
7
10
|
navigatorName: string;
|
|
8
11
|
navigatorPath: string;
|
|
9
12
|
navigatorSystemPrompt: string;
|
|
10
13
|
knowledgeBasePath: string;
|
|
14
|
+
harness?: Harness;
|
|
15
|
+
mcpServers?: Record<string, unknown>;
|
|
16
|
+
/** Whether sandbox is enabled for chat (default: true) */
|
|
17
|
+
sandboxEnabled?: boolean;
|
|
11
18
|
}
|
|
12
|
-
export declare function ConversationApp({ navigatorName, navigatorPath, navigatorSystemPrompt, knowledgeBasePath, }: ConversationAppProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare function ConversationApp({ navigatorName, navigatorPath, navigatorSystemPrompt, knowledgeBasePath, harness, mcpServers, sandboxEnabled, }: ConversationAppProps): import("react/jsx-runtime").JSX.Element;
|
|
13
20
|
export {};
|
|
14
21
|
//# sourceMappingURL=App.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/conversation/App.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/conversation/App.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,KAAK,OAAO,EAA0C,MAAM,qBAAqB,CAAC;AA8L3F,UAAU,oBAAoB;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,0DAA0D;IAC1D,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,EAC9B,aAAa,EACb,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,OAAO,EACP,UAAU,EACV,cAAqB,GACtB,EAAE,oBAAoB,2CAgYtB"}
|
package/dist/conversation/App.js
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
3
|
* Ink-based TUI for interactive navigator conversation
|
|
4
4
|
*
|
|
5
|
-
* Uses
|
|
5
|
+
* Uses Harness abstraction for multi-turn conversation, supporting
|
|
6
|
+
* both Claude Code and chibi runtimes. Renders themed UI with markdown
|
|
7
|
+
* support, matrix-style activity animation, and cohesive styling.
|
|
6
8
|
*/
|
|
7
|
-
import { useState,
|
|
9
|
+
import { useState, useCallback, useRef, useEffect } from "react";
|
|
8
10
|
import { Box, Text, useApp, useInput } from "ink";
|
|
9
|
-
import
|
|
10
|
-
import { query } from "@anthropic-ai/claude-agent-sdk";
|
|
11
|
+
import { ClaudeCodeHarness } from "../harness/index.js";
|
|
11
12
|
import { buildConversationSystemPrompt } from "./prompts.js";
|
|
13
|
+
import { ChatBanner, ChatInput, MarkdownText, UserResponse, SystemMessage, ActivityIndicator, Divider, colors, boxChars, } from "../interview/ui/index.js";
|
|
12
14
|
// Check if debug mode is enabled
|
|
13
15
|
const DEBUG = process.env.AUTONAV_DEBUG === "1" || process.env.DEBUG === "1";
|
|
14
16
|
// Model to use for conversation
|
|
@@ -18,116 +20,254 @@ function debugLog(...args) {
|
|
|
18
20
|
console.error("[DEBUG]", ...args);
|
|
19
21
|
}
|
|
20
22
|
}
|
|
21
|
-
|
|
23
|
+
/** Format tool use into a compact hacker-aesthetic display string */
|
|
24
|
+
function formatToolParams(toolName, input) {
|
|
25
|
+
// Pick the most interesting params for each tool type
|
|
26
|
+
const name = toolName.toLowerCase();
|
|
27
|
+
const parts = [toolName];
|
|
28
|
+
if (name.includes("read") || name === "cat") {
|
|
29
|
+
if (input.file_path)
|
|
30
|
+
parts.push(String(input.file_path));
|
|
31
|
+
}
|
|
32
|
+
else if (name.includes("write") || name.includes("edit")) {
|
|
33
|
+
if (input.file_path)
|
|
34
|
+
parts.push(String(input.file_path));
|
|
35
|
+
}
|
|
36
|
+
else if (name.includes("grep") || name.includes("search")) {
|
|
37
|
+
if (input.pattern)
|
|
38
|
+
parts.push(`/${String(input.pattern)}/`);
|
|
39
|
+
if (input.path)
|
|
40
|
+
parts.push(String(input.path));
|
|
41
|
+
}
|
|
42
|
+
else if (name.includes("glob")) {
|
|
43
|
+
if (input.pattern)
|
|
44
|
+
parts.push(String(input.pattern));
|
|
45
|
+
}
|
|
46
|
+
else if (name.includes("bash")) {
|
|
47
|
+
if (input.command) {
|
|
48
|
+
const cmd = String(input.command);
|
|
49
|
+
parts.push(cmd.length > 60 ? cmd.slice(0, 57) + "..." : cmd);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
// Generic: show first string param value
|
|
54
|
+
for (const val of Object.values(input)) {
|
|
55
|
+
if (typeof val === "string" && val.length > 0) {
|
|
56
|
+
parts.push(val.length > 50 ? val.slice(0, 47) + "..." : val);
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return parts.join(" → ");
|
|
62
|
+
}
|
|
63
|
+
// ── Mood message pools ──────────────────────────────────────────────────────
|
|
64
|
+
const MOOD_START = [
|
|
65
|
+
"Getting oriented...",
|
|
66
|
+
"Surveying the landscape...",
|
|
67
|
+
"Scanning the terrain...",
|
|
68
|
+
];
|
|
69
|
+
const MOOD_EXPLORING = [
|
|
70
|
+
"Deep in thought...",
|
|
71
|
+
"Connecting the dots...",
|
|
72
|
+
"Piecing it together...",
|
|
73
|
+
"Following the thread...",
|
|
74
|
+
"Traversing the knowledge graph...",
|
|
75
|
+
];
|
|
76
|
+
const MOOD_THOROUGH = [
|
|
77
|
+
"Leaving no stone unturned...",
|
|
78
|
+
"Going deeper...",
|
|
79
|
+
"Thoroughly investigating...",
|
|
80
|
+
"Down the rabbit hole...",
|
|
81
|
+
];
|
|
82
|
+
const MOOD_READING = [
|
|
83
|
+
"Studying the blueprints...",
|
|
84
|
+
"Reading between the lines...",
|
|
85
|
+
"Parsing the signal...",
|
|
86
|
+
"Absorbing context...",
|
|
87
|
+
];
|
|
88
|
+
const MOOD_WRITING = [
|
|
89
|
+
"Fingers flying...",
|
|
90
|
+
"In the zone...",
|
|
91
|
+
"Crafting code...",
|
|
92
|
+
"Shaping the solution...",
|
|
93
|
+
"Reshaping reality...",
|
|
94
|
+
];
|
|
95
|
+
const MOOD_BUILDING = [
|
|
96
|
+
"Moment of truth...",
|
|
97
|
+
"Compiling hopes and dreams...",
|
|
98
|
+
"Building...",
|
|
99
|
+
];
|
|
100
|
+
const MOOD_TESTING = [
|
|
101
|
+
"Crossing fingers...",
|
|
102
|
+
"Testing fate...",
|
|
103
|
+
"Validating...",
|
|
104
|
+
];
|
|
105
|
+
const MOOD_FLOWING = [
|
|
106
|
+
"On a roll!",
|
|
107
|
+
"Flow state achieved...",
|
|
108
|
+
"Unstoppable...",
|
|
109
|
+
"In the matrix...",
|
|
110
|
+
];
|
|
111
|
+
const MOOD_ERROR = [
|
|
112
|
+
"Plot twist!",
|
|
113
|
+
"Hmm, that's odd...",
|
|
114
|
+
"Recalibrating...",
|
|
115
|
+
"Unexpected terrain...",
|
|
116
|
+
"Adjusting approach...",
|
|
117
|
+
];
|
|
118
|
+
function randomFrom(pool) {
|
|
119
|
+
return pool[Math.floor(Math.random() * pool.length)] ?? pool[0];
|
|
120
|
+
}
|
|
121
|
+
function isReadTool(toolName) {
|
|
122
|
+
const n = toolName.toLowerCase();
|
|
123
|
+
return n.includes("read") || n === "glob" || n === "grep" || n === "cat";
|
|
124
|
+
}
|
|
125
|
+
function isWriteTool(toolName) {
|
|
126
|
+
const n = toolName.toLowerCase();
|
|
127
|
+
return n.includes("write") || n.includes("edit");
|
|
128
|
+
}
|
|
129
|
+
function isBuildCommand(toolName, input) {
|
|
130
|
+
if (toolName.toLowerCase() !== "bash")
|
|
131
|
+
return false;
|
|
132
|
+
const cmd = String(input.command || "");
|
|
133
|
+
return /\b(build|compile|tsc|webpack|esbuild)\b/.test(cmd);
|
|
134
|
+
}
|
|
135
|
+
function isTestCommand(toolName, input) {
|
|
136
|
+
if (toolName.toLowerCase() !== "bash")
|
|
137
|
+
return false;
|
|
138
|
+
const cmd = String(input.command || "");
|
|
139
|
+
return /\b(test|jest|vitest|check|lint)\b/.test(cmd);
|
|
140
|
+
}
|
|
141
|
+
function pickMood(toolName, input, state) {
|
|
142
|
+
if (state.lastError)
|
|
143
|
+
return randomFrom(MOOD_ERROR);
|
|
144
|
+
if (state.consecutiveSuccess >= 8)
|
|
145
|
+
return randomFrom(MOOD_FLOWING);
|
|
146
|
+
if (state.toolCount <= 2)
|
|
147
|
+
return randomFrom(MOOD_START);
|
|
148
|
+
if (isBuildCommand(toolName, input))
|
|
149
|
+
return randomFrom(MOOD_BUILDING);
|
|
150
|
+
if (isTestCommand(toolName, input))
|
|
151
|
+
return randomFrom(MOOD_TESTING);
|
|
152
|
+
if (isWriteTool(toolName))
|
|
153
|
+
return randomFrom(MOOD_WRITING);
|
|
154
|
+
if (isReadTool(toolName))
|
|
155
|
+
return randomFrom(MOOD_READING);
|
|
156
|
+
if (state.toolCount >= 10)
|
|
157
|
+
return randomFrom(MOOD_THOROUGH);
|
|
158
|
+
return randomFrom(MOOD_EXPLORING);
|
|
159
|
+
}
|
|
160
|
+
export function ConversationApp({ navigatorName, navigatorPath, navigatorSystemPrompt, knowledgeBasePath, harness, mcpServers, sandboxEnabled = true, }) {
|
|
22
161
|
const [messages, setMessages] = useState([]);
|
|
23
162
|
const [input, setInput] = useState("");
|
|
24
163
|
const [isLoading, setIsLoading] = useState(false);
|
|
25
164
|
const [activity, setActivity] = useState(null);
|
|
26
165
|
const [error, setError] = useState(null);
|
|
27
|
-
const
|
|
166
|
+
const sessionRef = useRef(null);
|
|
167
|
+
const harnessRef = useRef(harness ?? new ClaudeCodeHarness());
|
|
168
|
+
const streamingTextRef = useRef("");
|
|
169
|
+
const hadToolsSinceTextRef = useRef(false);
|
|
170
|
+
const moodRef = useRef({ toolCount: 0, lastError: false, consecutiveSuccess: 0 });
|
|
171
|
+
const lastCtrlCRef = useRef(0);
|
|
172
|
+
const exitHintTimerRef = useRef(null);
|
|
173
|
+
const [exitHint, setExitHint] = useState(false);
|
|
28
174
|
const { exit } = useApp();
|
|
29
|
-
// Helper to determine activity type from tool name
|
|
30
|
-
const getActivityFromTool = (toolName) => {
|
|
31
|
-
const name = toolName.toLowerCase();
|
|
32
|
-
if (name.includes("read") || name === "cat") {
|
|
33
|
-
return { type: "reading", detail: toolName };
|
|
34
|
-
}
|
|
35
|
-
if (name.includes("write") || name.includes("edit")) {
|
|
36
|
-
return { type: "writing", detail: toolName };
|
|
37
|
-
}
|
|
38
|
-
if (name.includes("grep") || name.includes("glob") || name.includes("search") || name.includes("find")) {
|
|
39
|
-
return { type: "searching", detail: toolName };
|
|
40
|
-
}
|
|
41
|
-
return { type: "tool", detail: toolName };
|
|
42
|
-
};
|
|
43
|
-
// Format activity for display
|
|
44
|
-
const formatActivity = (act) => {
|
|
45
|
-
switch (act.type) {
|
|
46
|
-
case "thinking":
|
|
47
|
-
return "Thinking...";
|
|
48
|
-
case "reading":
|
|
49
|
-
return `Reading ${act.detail || "file"}...`;
|
|
50
|
-
case "writing":
|
|
51
|
-
return `Writing ${act.detail || "file"}...`;
|
|
52
|
-
case "searching":
|
|
53
|
-
return `Searching ${act.detail || ""}...`;
|
|
54
|
-
case "tool":
|
|
55
|
-
return `Running ${act.detail || "tool"}...`;
|
|
56
|
-
default:
|
|
57
|
-
return "Working...";
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
175
|
// Build the full system prompt
|
|
61
176
|
const systemPrompt = buildConversationSystemPrompt(navigatorName, navigatorSystemPrompt, knowledgeBasePath);
|
|
62
|
-
// Process
|
|
63
|
-
const
|
|
64
|
-
const queryInstance = queryRef.current;
|
|
65
|
-
if (!queryInstance)
|
|
66
|
-
return;
|
|
177
|
+
// Process events from harness session
|
|
178
|
+
const processEvents = useCallback(async (events) => {
|
|
67
179
|
try {
|
|
68
|
-
debugLog("Waiting for
|
|
180
|
+
debugLog("Waiting for response...");
|
|
69
181
|
setActivity({ type: "thinking" });
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
...prev,
|
|
94
|
-
{ role: "assistant", content: text },
|
|
95
|
-
]);
|
|
96
|
-
}
|
|
182
|
+
streamingTextRef.current = "";
|
|
183
|
+
hadToolsSinceTextRef.current = false;
|
|
184
|
+
// Reset mood state for each turn
|
|
185
|
+
moodRef.current = { toolCount: 0, lastError: false, consecutiveSuccess: 0 };
|
|
186
|
+
for await (const event of events) {
|
|
187
|
+
debugLog("Received event type:", event.type);
|
|
188
|
+
if (event.type === "tool_use") {
|
|
189
|
+
moodRef.current.toolCount += 1;
|
|
190
|
+
moodRef.current.consecutiveSuccess += 1;
|
|
191
|
+
moodRef.current.lastError = false;
|
|
192
|
+
const mood = pickMood(event.name, event.input, moodRef.current);
|
|
193
|
+
setActivity({ type: "tool", detail: mood });
|
|
194
|
+
hadToolsSinceTextRef.current = true;
|
|
195
|
+
// Format tool params for display
|
|
196
|
+
const paramSummary = formatToolParams(event.name, event.input);
|
|
197
|
+
setMessages((prev) => [
|
|
198
|
+
...prev,
|
|
199
|
+
{ role: "activity", content: paramSummary },
|
|
200
|
+
]);
|
|
201
|
+
}
|
|
202
|
+
else if (event.type === "tool_result" && event.isError) {
|
|
203
|
+
moodRef.current.lastError = true;
|
|
204
|
+
moodRef.current.consecutiveSuccess = 0;
|
|
97
205
|
}
|
|
98
|
-
else if (
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
206
|
+
else if (event.type === "text") {
|
|
207
|
+
if (event.text && event.text.trim()) {
|
|
208
|
+
setActivity(null);
|
|
209
|
+
// If tools ran since last text, finalize previous message
|
|
210
|
+
// and start a new one so tool calls appear between text blocks
|
|
211
|
+
if (hadToolsSinceTextRef.current && streamingTextRef.current) {
|
|
212
|
+
// Finalize the previous streaming message
|
|
213
|
+
setMessages((prev) => prev.map((m) => m.streaming ? { ...m, streaming: false } : m));
|
|
214
|
+
streamingTextRef.current = "";
|
|
215
|
+
}
|
|
216
|
+
hadToolsSinceTextRef.current = false;
|
|
217
|
+
// Accumulate text for current block
|
|
218
|
+
if (streamingTextRef.current) {
|
|
219
|
+
streamingTextRef.current += "\n\n" + event.text;
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
streamingTextRef.current = event.text;
|
|
223
|
+
}
|
|
224
|
+
const accumulated = streamingTextRef.current;
|
|
225
|
+
setMessages((prev) => {
|
|
226
|
+
// Find existing streaming message to update (search from end)
|
|
227
|
+
let lastStreamingIdx = -1;
|
|
228
|
+
for (let j = prev.length - 1; j >= 0; j--) {
|
|
229
|
+
if (prev[j]?.role === "assistant" && prev[j]?.streaming) {
|
|
230
|
+
lastStreamingIdx = j;
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
if (lastStreamingIdx >= 0) {
|
|
235
|
+
// Update existing streaming message
|
|
236
|
+
const updated = [...prev];
|
|
237
|
+
updated[lastStreamingIdx] = {
|
|
238
|
+
role: "assistant",
|
|
239
|
+
content: accumulated,
|
|
240
|
+
streaming: true,
|
|
241
|
+
};
|
|
242
|
+
return updated;
|
|
243
|
+
}
|
|
244
|
+
// Create new streaming message
|
|
245
|
+
return [
|
|
246
|
+
...prev,
|
|
247
|
+
{ role: "assistant", content: accumulated, streaming: true },
|
|
248
|
+
];
|
|
249
|
+
});
|
|
105
250
|
}
|
|
106
251
|
}
|
|
107
|
-
else if (
|
|
108
|
-
debugLog("Result received:",
|
|
252
|
+
else if (event.type === "result") {
|
|
253
|
+
debugLog("Result received:", event.success);
|
|
254
|
+
// Mark streaming message as complete
|
|
255
|
+
setMessages((prev) => prev.map((m) => m.streaming ? { ...m, streaming: false } : m));
|
|
109
256
|
break;
|
|
110
257
|
}
|
|
111
258
|
}
|
|
259
|
+
streamingTextRef.current = "";
|
|
112
260
|
setActivity(null);
|
|
113
261
|
setIsLoading(false);
|
|
114
262
|
}
|
|
115
263
|
catch (err) {
|
|
116
264
|
debugLog("Error processing response:", err);
|
|
117
265
|
setError(err instanceof Error ? err.message : "Error communicating with Claude");
|
|
266
|
+
streamingTextRef.current = "";
|
|
118
267
|
setActivity(null);
|
|
119
268
|
setIsLoading(false);
|
|
120
269
|
}
|
|
121
|
-
}, [
|
|
122
|
-
// Send initial greeting
|
|
123
|
-
useEffect(() => {
|
|
124
|
-
setMessages([
|
|
125
|
-
{
|
|
126
|
-
role: "system",
|
|
127
|
-
content: `Connected to ${navigatorName}. Type /help for commands, or start chatting.`,
|
|
128
|
-
},
|
|
129
|
-
]);
|
|
130
|
-
}, [navigatorName]);
|
|
270
|
+
}, []);
|
|
131
271
|
// Handle special commands
|
|
132
272
|
const handleCommand = useCallback((command) => {
|
|
133
273
|
const cmd = command.toLowerCase().trim();
|
|
@@ -161,6 +301,11 @@ Model: ${CONVERSATION_MODEL}`,
|
|
|
161
301
|
return true;
|
|
162
302
|
}
|
|
163
303
|
if (cmd === "/clear") {
|
|
304
|
+
// Close existing session so next message starts fresh
|
|
305
|
+
if (sessionRef.current) {
|
|
306
|
+
sessionRef.current.close().catch(() => { });
|
|
307
|
+
sessionRef.current = null;
|
|
308
|
+
}
|
|
164
309
|
setMessages([
|
|
165
310
|
{
|
|
166
311
|
role: "system",
|
|
@@ -170,6 +315,9 @@ Model: ${CONVERSATION_MODEL}`,
|
|
|
170
315
|
return true;
|
|
171
316
|
}
|
|
172
317
|
if (cmd === "/exit") {
|
|
318
|
+
if (sessionRef.current) {
|
|
319
|
+
sessionRef.current.close().catch(() => { });
|
|
320
|
+
}
|
|
173
321
|
exit();
|
|
174
322
|
return true;
|
|
175
323
|
}
|
|
@@ -192,38 +340,83 @@ Model: ${CONVERSATION_MODEL}`,
|
|
|
192
340
|
setError(null);
|
|
193
341
|
try {
|
|
194
342
|
debugLog("Sending user message:", value);
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
const queryInstance = query({
|
|
204
|
-
prompt: fullPrompt,
|
|
205
|
-
options: {
|
|
343
|
+
let events;
|
|
344
|
+
if (sessionRef.current) {
|
|
345
|
+
// Multi-turn: send follow-up to existing session
|
|
346
|
+
events = sessionRef.current.send(value);
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
// First message: create new session
|
|
350
|
+
const session = harnessRef.current.run({
|
|
206
351
|
model: CONVERSATION_MODEL,
|
|
207
352
|
systemPrompt,
|
|
208
|
-
permissionMode: "acceptEdits",
|
|
209
|
-
cwd: navigatorPath,
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
353
|
+
permissionMode: "acceptEdits",
|
|
354
|
+
cwd: navigatorPath,
|
|
355
|
+
mcpServers,
|
|
356
|
+
// Per-nav sandbox: chat defaults to enabled (read-only access)
|
|
357
|
+
...(sandboxEnabled ? {
|
|
358
|
+
sandbox: {
|
|
359
|
+
readPaths: [navigatorPath],
|
|
360
|
+
},
|
|
361
|
+
} : {}),
|
|
362
|
+
}, value);
|
|
363
|
+
sessionRef.current = session;
|
|
364
|
+
events = session;
|
|
365
|
+
}
|
|
366
|
+
await processEvents(events);
|
|
214
367
|
}
|
|
215
368
|
catch (err) {
|
|
216
369
|
debugLog("Error sending message:", err);
|
|
217
370
|
setError(err instanceof Error ? err.message : "Failed to send message");
|
|
218
371
|
setIsLoading(false);
|
|
219
372
|
}
|
|
220
|
-
}, [isLoading,
|
|
221
|
-
// Handle Ctrl+C
|
|
373
|
+
}, [isLoading, systemPrompt, navigatorPath, handleCommand, processEvents]);
|
|
374
|
+
// Handle Ctrl+C / Ctrl+D (double-tap same key within 7s to exit)
|
|
375
|
+
const lastExitKeyRef = useRef(null);
|
|
222
376
|
useInput((input, key) => {
|
|
223
377
|
if (key.ctrl && (input === "c" || input === "d")) {
|
|
224
|
-
|
|
378
|
+
const pressedKey = input;
|
|
379
|
+
const now = Date.now();
|
|
380
|
+
if (now - lastCtrlCRef.current < 7000 && lastExitKeyRef.current === pressedKey) {
|
|
381
|
+
// Second press of same key within 7 seconds — exit
|
|
382
|
+
if (sessionRef.current) {
|
|
383
|
+
sessionRef.current.close().catch(() => { });
|
|
384
|
+
}
|
|
385
|
+
exit();
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
// First press (or switched keys) — show hint matching the key they pressed
|
|
389
|
+
lastCtrlCRef.current = now;
|
|
390
|
+
lastExitKeyRef.current = pressedKey;
|
|
391
|
+
setExitHint(pressedKey);
|
|
392
|
+
if (exitHintTimerRef.current)
|
|
393
|
+
clearTimeout(exitHintTimerRef.current);
|
|
394
|
+
const timer = setTimeout(() => {
|
|
395
|
+
setExitHint(false);
|
|
396
|
+
lastExitKeyRef.current = null;
|
|
397
|
+
}, 7000);
|
|
398
|
+
timer.unref(); // Don't keep the event loop alive after Ink unmounts
|
|
399
|
+
exitHintTimerRef.current = timer;
|
|
400
|
+
}
|
|
225
401
|
}
|
|
226
402
|
});
|
|
227
|
-
|
|
403
|
+
// Clean up timers on unmount so Node can exit
|
|
404
|
+
useEffect(() => {
|
|
405
|
+
return () => {
|
|
406
|
+
if (exitHintTimerRef.current)
|
|
407
|
+
clearTimeout(exitHintTimerRef.current);
|
|
408
|
+
};
|
|
409
|
+
}, []);
|
|
410
|
+
// Determine if we should show the banner (only when no messages yet)
|
|
411
|
+
const showBanner = messages.length === 0;
|
|
412
|
+
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [showBanner && (_jsx(ChatBanner, { navigatorName: navigatorName, model: CONVERSATION_MODEL })), messages.map((msg, i) => {
|
|
413
|
+
// Check if this is the last message before a role switch (for dividers)
|
|
414
|
+
const next = messages[i + 1];
|
|
415
|
+
const isEndOfTurn = msg.role === "assistant" &&
|
|
416
|
+
!msg.streaming &&
|
|
417
|
+
next !== undefined &&
|
|
418
|
+
next.role !== "activity";
|
|
419
|
+
return (_jsxs(Box, { flexDirection: "column", children: [msg.role === "user" ? (_jsx(UserResponse, { content: msg.content })) : msg.role === "assistant" ? (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Box, { marginBottom: 0, children: _jsxs(Text, { color: colors.accent, children: [boxChars.single.vertical, " ", navigatorName] }) }), _jsx(Box, { marginLeft: 2, children: _jsx(MarkdownText, { content: msg.content }) })] })) : msg.role === "activity" ? (_jsx(Box, { marginLeft: 4, marginBottom: 0, children: _jsxs(Text, { color: colors.dimmed, children: [boxChars.single.vertical, " ", "\u2699\uFE0F", " ", msg.content] }) })) : (_jsx(SystemMessage, { content: msg.content })), isEndOfTurn && _jsx(Divider, {})] }, i));
|
|
420
|
+
}), error && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: colors.error, children: ["Error: ", error] }) })), isLoading && activity && (_jsx(Box, { marginBottom: 1, marginLeft: 2, children: _jsx(ActivityIndicator, { lines: 1, width: 30, message: activity.type === "thinking" ? "thinking..." : (activity.detail ?? "working...") }) })), exitHint && (_jsx(Box, { marginBottom: 0, children: _jsxs(Text, { color: colors.warning, children: ["Press Ctrl+", exitHint === "d" ? "D" : "C", " again to exit"] }) })), !isLoading && (_jsx(ChatInput, { value: input, onChange: setInput, onSubmit: handleSubmit, placeholder: "Type a message..." }))] }));
|
|
228
421
|
}
|
|
229
422
|
//# sourceMappingURL=App.js.map
|