@defai.digital/ax-cli 2.7.0 → 3.0.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/.ax-cli/checkpoints/2025-11-20/checkpoint-2dd84869-e62d-46c8-9885-7e45f37f36e2.json +69 -0
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-484dc350-353f-4808-9ed1-ebb3cefdab37.json +24 -0
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-74a18b87-6172-4215-962b-44bb9f46a662.json +69 -0
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-870a5fb9-6e82-4ff2-8ec8-af4c251cc514.json +44 -0
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-93946601-0e83-456c-ba47-def9713124dd.json +24 -0
- package/.ax-cli/checkpoints/metadata.json +62 -0
- package/README.md +87 -11
- package/dist/agent/context-manager.d.ts +2 -2
- package/dist/agent/context-manager.js +37 -15
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/dependency-resolver.d.ts +83 -0
- package/dist/agent/dependency-resolver.js +310 -0
- package/dist/agent/dependency-resolver.js.map +1 -0
- package/dist/agent/llm-agent.d.ts +111 -0
- package/dist/agent/llm-agent.js +625 -3
- package/dist/agent/llm-agent.js.map +1 -1
- package/dist/agent/specialized/analysis-agent.d.ts +11 -0
- package/dist/agent/specialized/analysis-agent.js +33 -0
- package/dist/agent/specialized/analysis-agent.js.map +1 -0
- package/dist/agent/specialized/debug-agent.d.ts +11 -0
- package/dist/agent/specialized/debug-agent.js +33 -0
- package/dist/agent/specialized/debug-agent.js.map +1 -0
- package/dist/agent/specialized/documentation-agent.d.ts +11 -0
- package/dist/agent/specialized/documentation-agent.js +33 -0
- package/dist/agent/specialized/documentation-agent.js.map +1 -0
- package/dist/agent/specialized/index.d.ts +11 -0
- package/dist/agent/specialized/index.js +12 -0
- package/dist/agent/specialized/index.js.map +1 -0
- package/dist/agent/specialized/performance-agent.d.ts +11 -0
- package/dist/agent/specialized/performance-agent.js +33 -0
- package/dist/agent/specialized/performance-agent.js.map +1 -0
- package/dist/agent/specialized/refactoring-agent.d.ts +11 -0
- package/dist/agent/specialized/refactoring-agent.js +33 -0
- package/dist/agent/specialized/refactoring-agent.js.map +1 -0
- package/dist/agent/specialized/testing-agent.d.ts +11 -0
- package/dist/agent/specialized/testing-agent.js +33 -0
- package/dist/agent/specialized/testing-agent.js.map +1 -0
- package/dist/agent/subagent-orchestrator.d.ts +128 -0
- package/dist/agent/subagent-orchestrator.js +388 -0
- package/dist/agent/subagent-orchestrator.js.map +1 -0
- package/dist/agent/subagent-types.d.ts +262 -0
- package/dist/agent/subagent-types.js +152 -0
- package/dist/agent/subagent-types.js.map +1 -0
- package/dist/agent/subagent.d.ts +88 -0
- package/dist/agent/subagent.js +426 -0
- package/dist/agent/subagent.js.map +1 -0
- package/dist/checkpoint/index.d.ts +9 -0
- package/dist/checkpoint/index.js +11 -0
- package/dist/checkpoint/index.js.map +1 -0
- package/dist/checkpoint/manager.d.ts +99 -0
- package/dist/checkpoint/manager.js +281 -0
- package/dist/checkpoint/manager.js.map +1 -0
- package/dist/checkpoint/storage.d.ts +31 -0
- package/dist/checkpoint/storage.js +265 -0
- package/dist/checkpoint/storage.js.map +1 -0
- package/dist/checkpoint/types.d.ts +111 -0
- package/dist/checkpoint/types.js +17 -0
- package/dist/checkpoint/types.js.map +1 -0
- package/dist/commands/cache.js +5 -3
- package/dist/commands/cache.js.map +1 -1
- package/dist/commands/memory.js +21 -16
- package/dist/commands/memory.js.map +1 -1
- package/dist/commands/plan.d.ts +43 -0
- package/dist/commands/plan.js +385 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/rewind.d.ts +19 -0
- package/dist/commands/rewind.js +221 -0
- package/dist/commands/rewind.js.map +1 -0
- package/dist/constants.d.ts +28 -0
- package/dist/constants.js +29 -0
- package/dist/constants.js.map +1 -1
- package/dist/hooks/use-enhanced-input.d.ts +5 -1
- package/dist/hooks/use-enhanced-input.js +23 -10
- package/dist/hooks/use-enhanced-input.js.map +1 -1
- package/dist/hooks/use-input-handler.d.ts +11 -1
- package/dist/hooks/use-input-handler.js +294 -2
- package/dist/hooks/use-input-handler.js.map +1 -1
- package/dist/llm/client.js +2 -1
- package/dist/llm/client.js.map +1 -1
- package/dist/llm/tools.d.ts +5 -0
- package/dist/llm/tools.js +57 -6
- package/dist/llm/tools.js.map +1 -1
- package/dist/mcp/client.d.ts +1 -0
- package/dist/mcp/client.js +30 -8
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/transports.d.ts +0 -1
- package/dist/mcp/transports.js +10 -7
- package/dist/mcp/transports.js.map +1 -1
- package/dist/planner/dependency-resolver.d.ts +72 -0
- package/dist/planner/dependency-resolver.js +272 -0
- package/dist/planner/dependency-resolver.js.map +1 -0
- package/dist/planner/index.d.ts +12 -0
- package/dist/planner/index.js +26 -0
- package/dist/planner/index.js.map +1 -0
- package/dist/planner/plan-generator.d.ts +74 -0
- package/dist/planner/plan-generator.js +244 -0
- package/dist/planner/plan-generator.js.map +1 -0
- package/dist/planner/plan-storage.d.ts +98 -0
- package/dist/planner/plan-storage.js +325 -0
- package/dist/planner/plan-storage.js.map +1 -0
- package/dist/planner/prompts/planning-prompt.d.ts +41 -0
- package/dist/planner/prompts/planning-prompt.js +289 -0
- package/dist/planner/prompts/planning-prompt.js.map +1 -0
- package/dist/planner/task-planner.d.ts +135 -0
- package/dist/planner/task-planner.js +493 -0
- package/dist/planner/task-planner.js.map +1 -0
- package/dist/planner/token-estimator.d.ts +63 -0
- package/dist/planner/token-estimator.js +295 -0
- package/dist/planner/token-estimator.js.map +1 -0
- package/dist/planner/types.d.ts +669 -0
- package/dist/planner/types.js +213 -0
- package/dist/planner/types.js.map +1 -0
- package/dist/schemas/api-schemas.js +4 -0
- package/dist/schemas/api-schemas.js.map +1 -1
- package/dist/schemas/confirmation-schemas.d.ts +5 -0
- package/dist/schemas/confirmation-schemas.js +7 -0
- package/dist/schemas/confirmation-schemas.js.map +1 -1
- package/dist/schemas/index.d.ts +4 -4
- package/dist/tools/bash-output.d.ts +25 -0
- package/dist/tools/bash-output.js +145 -0
- package/dist/tools/bash-output.js.map +1 -0
- package/dist/tools/bash.d.ts +46 -2
- package/dist/tools/bash.js +241 -42
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/search.js +34 -9
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/text-editor.d.ts +16 -0
- package/dist/tools/text-editor.js +37 -2
- package/dist/tools/text-editor.js.map +1 -1
- package/dist/ui/components/chat-history.d.ts +1 -0
- package/dist/ui/components/chat-history.js +125 -41
- package/dist/ui/components/chat-history.js.map +1 -1
- package/dist/ui/components/chat-input.js +10 -3
- package/dist/ui/components/chat-input.js.map +1 -1
- package/dist/ui/components/chat-interface.js +154 -45
- package/dist/ui/components/chat-interface.js.map +1 -1
- package/dist/ui/components/collapsible-tool-result.d.ts +26 -0
- package/dist/ui/components/collapsible-tool-result.js +172 -0
- package/dist/ui/components/collapsible-tool-result.js.map +1 -0
- package/dist/ui/components/command-suggestions.js +2 -1
- package/dist/ui/components/command-suggestions.js.map +1 -1
- package/dist/ui/components/confirmation-dialog.js +25 -36
- package/dist/ui/components/confirmation-dialog.js.map +1 -1
- package/dist/ui/components/index.d.ts +8 -0
- package/dist/ui/components/index.js +9 -0
- package/dist/ui/components/index.js.map +1 -1
- package/dist/ui/components/keyboard-hints.d.ts +35 -0
- package/dist/ui/components/keyboard-hints.js +134 -0
- package/dist/ui/components/keyboard-hints.js.map +1 -0
- package/dist/ui/components/loading-spinner.d.ts +2 -1
- package/dist/ui/components/loading-spinner.js +86 -34
- package/dist/ui/components/loading-spinner.js.map +1 -1
- package/dist/ui/components/phase-progress.d.ts +21 -0
- package/dist/ui/components/phase-progress.js +228 -0
- package/dist/ui/components/phase-progress.js.map +1 -0
- package/dist/ui/components/quick-actions.d.ts +12 -0
- package/dist/ui/components/quick-actions.js +122 -0
- package/dist/ui/components/quick-actions.js.map +1 -0
- package/dist/ui/components/reasoning-display.d.ts +0 -80
- package/dist/ui/components/reasoning-display.js +0 -83
- package/dist/ui/components/reasoning-display.js.map +1 -1
- package/dist/ui/components/status-bar.d.ts +25 -0
- package/dist/ui/components/status-bar.js +125 -0
- package/dist/ui/components/status-bar.js.map +1 -0
- package/dist/ui/components/subagent-monitor.d.ts +29 -0
- package/dist/ui/components/subagent-monitor.js +150 -0
- package/dist/ui/components/subagent-monitor.js.map +1 -0
- package/dist/ui/components/toast-notification.d.ts +123 -0
- package/dist/ui/components/toast-notification.js +143 -0
- package/dist/ui/components/toast-notification.js.map +1 -0
- package/dist/ui/components/welcome-panel.d.ts +10 -0
- package/dist/ui/components/welcome-panel.js +107 -0
- package/dist/ui/components/welcome-panel.js.map +1 -0
- package/dist/utils/background-task-manager.d.ts +95 -0
- package/dist/utils/background-task-manager.js +330 -0
- package/dist/utils/background-task-manager.js.map +1 -0
- package/dist/utils/confirmation-service.js +8 -3
- package/dist/utils/confirmation-service.js.map +1 -1
- package/dist/utils/history-manager.d.ts +1 -0
- package/dist/utils/history-manager.js +40 -5
- package/dist/utils/history-manager.js.map +1 -1
- package/dist/utils/json-utils.d.ts +7 -0
- package/dist/utils/json-utils.js +70 -2
- package/dist/utils/json-utils.js.map +1 -1
- package/dist/utils/message-optimizer.d.ts +1 -0
- package/dist/utils/message-optimizer.js +7 -1
- package/dist/utils/message-optimizer.js.map +1 -1
- package/dist/utils/project-analyzer.js +5 -2
- package/dist/utils/project-analyzer.js.map +1 -1
- package/dist/utils/settings-manager.js +12 -10
- package/dist/utils/settings-manager.js.map +1 -1
- package/dist/utils/text-utils.js +3 -3
- package/dist/utils/text-utils.js.map +1 -1
- package/dist/utils/token-counter.d.ts +5 -0
- package/dist/utils/token-counter.js +18 -3
- package/dist/utils/token-counter.js.map +1 -1
- package/package.json +3 -1
|
@@ -3,29 +3,38 @@ import { Box, Text, useInput } from "ink";
|
|
|
3
3
|
import { DiffRenderer } from "./diff-renderer.js";
|
|
4
4
|
export default function ConfirmationDialog({ operation, filename, onConfirm, onReject, showVSCodeOpen = false, content, }) {
|
|
5
5
|
const [selectedOption, setSelectedOption] = useState(0);
|
|
6
|
-
|
|
7
|
-
const [feedback, setFeedback] = useState("");
|
|
6
|
+
// Simplified to 3 options - removed "No, with feedback" as it's rarely used
|
|
8
7
|
const options = [
|
|
9
8
|
"Yes",
|
|
10
9
|
"Yes, and don't ask again this session",
|
|
11
10
|
"No",
|
|
12
|
-
"No, with feedback",
|
|
13
11
|
];
|
|
14
12
|
useInput((input, key) => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
13
|
+
// Quick number key selection (1-3)
|
|
14
|
+
if (input >= "1" && input <= "3") {
|
|
15
|
+
const optionIndex = parseInt(input) - 1;
|
|
16
|
+
if (optionIndex < options.length) {
|
|
17
|
+
if (optionIndex === 0) {
|
|
18
|
+
onConfirm(false);
|
|
19
|
+
}
|
|
20
|
+
else if (optionIndex === 1) {
|
|
21
|
+
onConfirm(true);
|
|
22
|
+
}
|
|
23
|
+
else if (optionIndex === 2) {
|
|
24
|
+
onReject("Operation cancelled by user");
|
|
25
|
+
}
|
|
26
26
|
}
|
|
27
27
|
return;
|
|
28
28
|
}
|
|
29
|
+
// Y/N quick keys
|
|
30
|
+
if (input.toLowerCase() === "y") {
|
|
31
|
+
onConfirm(false);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (input.toLowerCase() === "n") {
|
|
35
|
+
onReject("Operation cancelled by user");
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
29
38
|
if (key.upArrow || (key.shift && key.tab)) {
|
|
30
39
|
setSelectedOption((prev) => (prev > 0 ? prev - 1 : options.length - 1));
|
|
31
40
|
return;
|
|
@@ -44,33 +53,13 @@ export default function ConfirmationDialog({ operation, filename, onConfirm, onR
|
|
|
44
53
|
else if (selectedOption === 2) {
|
|
45
54
|
onReject("Operation cancelled by user");
|
|
46
55
|
}
|
|
47
|
-
else {
|
|
48
|
-
setFeedbackMode(true);
|
|
49
|
-
}
|
|
50
56
|
return;
|
|
51
57
|
}
|
|
52
58
|
if (key.escape) {
|
|
53
|
-
|
|
54
|
-
setFeedbackMode(false);
|
|
55
|
-
setFeedback("");
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
// Cancel the confirmation when escape is pressed from main confirmation
|
|
59
|
-
onReject("Operation cancelled by user (pressed Escape)");
|
|
60
|
-
}
|
|
59
|
+
onReject("Operation cancelled by user (pressed Escape)");
|
|
61
60
|
return;
|
|
62
61
|
}
|
|
63
62
|
});
|
|
64
|
-
if (feedbackMode) {
|
|
65
|
-
return (React.createElement(Box, { flexDirection: "column", padding: 1 },
|
|
66
|
-
React.createElement(Box, { flexDirection: "column", marginBottom: 1 },
|
|
67
|
-
React.createElement(Text, { color: "gray" }, "Type your feedback and press Enter, or press Escape to go back.")),
|
|
68
|
-
React.createElement(Box, { borderStyle: "round", borderColor: "yellow", paddingX: 1, marginTop: 1 },
|
|
69
|
-
React.createElement(Text, { color: "gray" }, "\u276F "),
|
|
70
|
-
React.createElement(Text, null,
|
|
71
|
-
feedback,
|
|
72
|
-
React.createElement(Text, { color: "white" }, "\u2588")))));
|
|
73
|
-
}
|
|
74
63
|
return (React.createElement(Box, { flexDirection: "column" },
|
|
75
64
|
React.createElement(Box, { marginTop: 1 },
|
|
76
65
|
React.createElement(Box, null,
|
|
@@ -100,6 +89,6 @@ export default function ConfirmationDialog({ operation, filename, onConfirm, onR
|
|
|
100
89
|
". ",
|
|
101
90
|
option))))),
|
|
102
91
|
React.createElement(Box, { marginTop: 1 },
|
|
103
|
-
React.createElement(Text, { color: "gray", dimColor: true }, "\u2191\u2193 navigate \u2022 Enter select \u2022 Esc cancel")))));
|
|
92
|
+
React.createElement(Text, { color: "gray", dimColor: true }, "y/n or 1-3 quick select \u2022 \u2191\u2193 navigate \u2022 Enter select \u2022 Esc cancel")))));
|
|
104
93
|
}
|
|
105
94
|
//# sourceMappingURL=confirmation-dialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirmation-dialog.js","sourceRoot":"","sources":["../../../src/ui/components/confirmation-dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAWlD,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EACzC,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,cAAc,GAAG,KAAK,EACtB,OAAO,GACiB;IACxB,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"confirmation-dialog.js","sourceRoot":"","sources":["../../../src/ui/components/confirmation-dialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -8,3 +8,11 @@ export { LoadingSpinner } from './loading-spinner.js';
|
|
|
8
8
|
export { CommandSuggestions } from './command-suggestions.js';
|
|
9
9
|
export { MCPStatus } from './mcp-status.js';
|
|
10
10
|
export { ReasoningDisplay } from './reasoning-display.js';
|
|
11
|
+
export { StatusBar } from './status-bar.js';
|
|
12
|
+
export { QuickActions } from './quick-actions.js';
|
|
13
|
+
export { WelcomePanel } from './welcome-panel.js';
|
|
14
|
+
export { KeyboardHints, KeyboardShortcutGuide, getKeyboardShortcutGuideText, ALL_SHORTCUTS } from './keyboard-hints.js';
|
|
15
|
+
export { CollapsibleToolResult, getToolActionName, getFilePath } from './collapsible-tool-result.js';
|
|
16
|
+
export { ToastNotification, ToastContainer, useToasts, TOAST_MESSAGES } from './toast-notification.js';
|
|
17
|
+
export type { ToastMessage } from './toast-notification.js';
|
|
18
|
+
export { PhaseProgress, PlanSummary } from './phase-progress.js';
|
|
@@ -8,4 +8,13 @@ export { LoadingSpinner } from './loading-spinner.js';
|
|
|
8
8
|
export { CommandSuggestions } from './command-suggestions.js';
|
|
9
9
|
export { MCPStatus } from './mcp-status.js';
|
|
10
10
|
export { ReasoningDisplay } from './reasoning-display.js';
|
|
11
|
+
// New UX-enhanced components
|
|
12
|
+
export { StatusBar } from './status-bar.js';
|
|
13
|
+
export { QuickActions } from './quick-actions.js';
|
|
14
|
+
export { WelcomePanel } from './welcome-panel.js';
|
|
15
|
+
export { KeyboardHints, KeyboardShortcutGuide, getKeyboardShortcutGuideText, ALL_SHORTCUTS } from './keyboard-hints.js';
|
|
16
|
+
export { CollapsibleToolResult, getToolActionName, getFilePath } from './collapsible-tool-result.js';
|
|
17
|
+
export { ToastNotification, ToastContainer, useToasts, TOAST_MESSAGES } from './toast-notification.js';
|
|
18
|
+
// Multi-phase planning components
|
|
19
|
+
export { PhaseProgress, PlanSummary } from './phase-progress.js';
|
|
11
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/components/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/components/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,6BAA6B;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACxH,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACrG,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAGvG,kCAAkC;AAClC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keyboard Hints Component
|
|
3
|
+
* Shows contextual keyboard shortcuts based on current state
|
|
4
|
+
*/
|
|
5
|
+
import React from "react";
|
|
6
|
+
interface KeyboardHintsProps {
|
|
7
|
+
mode: "idle" | "typing" | "processing" | "confirmation" | "menu";
|
|
8
|
+
showExtended?: boolean;
|
|
9
|
+
}
|
|
10
|
+
interface Shortcut {
|
|
11
|
+
keys: string;
|
|
12
|
+
description: string;
|
|
13
|
+
category?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Complete keyboard shortcut reference
|
|
17
|
+
* Organized by category for the full shortcut guide
|
|
18
|
+
*/
|
|
19
|
+
export declare const ALL_SHORTCUTS: Record<string, Shortcut[]>;
|
|
20
|
+
export declare function KeyboardHints({ mode, showExtended, }: KeyboardHintsProps): React.JSX.Element;
|
|
21
|
+
/**
|
|
22
|
+
* Full Keyboard Shortcut Guide Component
|
|
23
|
+
* Shows all available shortcuts organized by category
|
|
24
|
+
* Can be displayed via /shortcuts command or ? key
|
|
25
|
+
*/
|
|
26
|
+
export interface KeyboardShortcutGuideProps {
|
|
27
|
+
onClose?: () => void;
|
|
28
|
+
}
|
|
29
|
+
export declare function KeyboardShortcutGuide({ onClose }: KeyboardShortcutGuideProps): React.JSX.Element;
|
|
30
|
+
/**
|
|
31
|
+
* Generates keyboard shortcut guide as a string
|
|
32
|
+
* Useful for displaying in chat history via /shortcuts command
|
|
33
|
+
*/
|
|
34
|
+
export declare function getKeyboardShortcutGuideText(): string;
|
|
35
|
+
export default KeyboardHints;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keyboard Hints Component
|
|
3
|
+
* Shows contextual keyboard shortcuts based on current state
|
|
4
|
+
*/
|
|
5
|
+
import React from "react";
|
|
6
|
+
import { Box, Text } from "ink";
|
|
7
|
+
const SHORTCUTS_BY_MODE = {
|
|
8
|
+
idle: [
|
|
9
|
+
{ keys: "Enter", description: "send message" },
|
|
10
|
+
{ keys: "Ctrl+K", description: "quick actions" },
|
|
11
|
+
{ keys: "↑/↓", description: "history" },
|
|
12
|
+
{ keys: "Ctrl+C", description: "clear input" },
|
|
13
|
+
],
|
|
14
|
+
typing: [
|
|
15
|
+
{ keys: "Enter", description: "send" },
|
|
16
|
+
{ keys: "Shift+Enter", description: "new line" },
|
|
17
|
+
{ keys: "Tab", description: "complete" },
|
|
18
|
+
{ keys: "Esc", description: "clear" },
|
|
19
|
+
],
|
|
20
|
+
processing: [
|
|
21
|
+
{ keys: "Esc", description: "interrupt" },
|
|
22
|
+
],
|
|
23
|
+
confirmation: [
|
|
24
|
+
{ keys: "1-4", description: "quick select" },
|
|
25
|
+
{ keys: "↑/↓", description: "navigate" },
|
|
26
|
+
{ keys: "Enter", description: "select" },
|
|
27
|
+
{ keys: "Esc", description: "cancel" },
|
|
28
|
+
],
|
|
29
|
+
menu: [
|
|
30
|
+
{ keys: "↑/↓", description: "navigate" },
|
|
31
|
+
{ keys: "Enter", description: "select" },
|
|
32
|
+
{ keys: "Esc", description: "close" },
|
|
33
|
+
{ keys: "Type", description: "search" },
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
const EXTENDED_SHORTCUTS = [
|
|
37
|
+
{ keys: "Shift+Tab", description: "toggle auto-edit" },
|
|
38
|
+
{ keys: "Ctrl+O", description: "toggle verbose" },
|
|
39
|
+
{ keys: "Ctrl+B", description: "background mode" },
|
|
40
|
+
{ keys: "?", description: "all shortcuts" },
|
|
41
|
+
];
|
|
42
|
+
/**
|
|
43
|
+
* Complete keyboard shortcut reference
|
|
44
|
+
* Organized by category for the full shortcut guide
|
|
45
|
+
*/
|
|
46
|
+
export const ALL_SHORTCUTS = {
|
|
47
|
+
"Navigation": [
|
|
48
|
+
{ keys: "↑/↓", description: "Navigate command history" },
|
|
49
|
+
{ keys: "Ctrl+←/→", description: "Move cursor by word" },
|
|
50
|
+
{ keys: "Ctrl+A", description: "Move to line start" },
|
|
51
|
+
{ keys: "Ctrl+E", description: "Move to line end" },
|
|
52
|
+
],
|
|
53
|
+
"Editing": [
|
|
54
|
+
{ keys: "Ctrl+C", description: "Clear current input" },
|
|
55
|
+
{ keys: "Ctrl+X", description: "Clear entire input line" },
|
|
56
|
+
{ keys: "Ctrl+W", description: "Delete word before cursor" },
|
|
57
|
+
{ keys: "Ctrl+U", description: "Delete to start of line" },
|
|
58
|
+
{ keys: "Backspace", description: "Delete character before" },
|
|
59
|
+
{ keys: "Delete", description: "Delete character after" },
|
|
60
|
+
],
|
|
61
|
+
"Modes": [
|
|
62
|
+
{ keys: "Shift+Tab", description: "Toggle auto-edit mode" },
|
|
63
|
+
{ keys: "Ctrl+O", description: "Toggle verbose mode" },
|
|
64
|
+
{ keys: "Ctrl+B", description: "Toggle background mode" },
|
|
65
|
+
],
|
|
66
|
+
"Actions": [
|
|
67
|
+
{ keys: "Enter", description: "Send message / confirm" },
|
|
68
|
+
{ keys: "Shift+Enter", description: "New line (multiline)" },
|
|
69
|
+
{ keys: "Ctrl+K", description: "Open quick actions menu" },
|
|
70
|
+
{ keys: "Ctrl+Y", description: "Copy last response to clipboard" },
|
|
71
|
+
{ keys: "Tab", description: "Complete command suggestion" },
|
|
72
|
+
{ keys: "Esc", description: "Cancel / close menu" },
|
|
73
|
+
],
|
|
74
|
+
"Confirmation Dialog": [
|
|
75
|
+
{ keys: "1-4", description: "Quick select option" },
|
|
76
|
+
{ keys: "↑/↓", description: "Navigate options" },
|
|
77
|
+
{ keys: "Enter", description: "Select highlighted" },
|
|
78
|
+
{ keys: "Esc", description: "Cancel operation" },
|
|
79
|
+
],
|
|
80
|
+
};
|
|
81
|
+
export function KeyboardHints({ mode, showExtended = false, }) {
|
|
82
|
+
const shortcuts = SHORTCUTS_BY_MODE[mode] || SHORTCUTS_BY_MODE.idle;
|
|
83
|
+
return (React.createElement(Box, { flexDirection: "row", flexWrap: "wrap" },
|
|
84
|
+
shortcuts.map((shortcut, index) => (React.createElement(Box, { key: shortcut.keys, marginRight: 2 },
|
|
85
|
+
React.createElement(Text, { color: "yellow", dimColor: true }, shortcut.keys),
|
|
86
|
+
React.createElement(Text, { color: "gray", dimColor: true },
|
|
87
|
+
" ",
|
|
88
|
+
shortcut.description),
|
|
89
|
+
index < shortcuts.length - 1 && (React.createElement(Text, { color: "gray", dimColor: true },
|
|
90
|
+
" ",
|
|
91
|
+
"\u2022"))))),
|
|
92
|
+
showExtended && (React.createElement(React.Fragment, null,
|
|
93
|
+
React.createElement(Text, { color: "gray", dimColor: true },
|
|
94
|
+
" ",
|
|
95
|
+
"|",
|
|
96
|
+
" "),
|
|
97
|
+
EXTENDED_SHORTCUTS.slice(0, 2).map((shortcut) => (React.createElement(Box, { key: shortcut.keys, marginRight: 2 },
|
|
98
|
+
React.createElement(Text, { color: "yellow", dimColor: true }, shortcut.keys),
|
|
99
|
+
React.createElement(Text, { color: "gray", dimColor: true },
|
|
100
|
+
" ",
|
|
101
|
+
shortcut.description))))))));
|
|
102
|
+
}
|
|
103
|
+
export function KeyboardShortcutGuide({ onClose }) {
|
|
104
|
+
return (React.createElement(Box, { flexDirection: "column", paddingX: 2, paddingY: 1 },
|
|
105
|
+
React.createElement(Box, { marginBottom: 1 },
|
|
106
|
+
React.createElement(Text, { color: "cyan", bold: true }, "\u2328\uFE0F Keyboard Shortcuts"),
|
|
107
|
+
onClose && (React.createElement(Text, { color: "gray", dimColor: true }, " (Esc to close)"))),
|
|
108
|
+
Object.entries(ALL_SHORTCUTS).map(([category, shortcuts]) => (React.createElement(Box, { key: category, flexDirection: "column", marginBottom: 1 },
|
|
109
|
+
React.createElement(Text, { color: "yellow", bold: true }, category),
|
|
110
|
+
React.createElement(Box, { flexDirection: "column", paddingLeft: 2 }, shortcuts.map((shortcut) => (React.createElement(Box, { key: shortcut.keys, flexDirection: "row" },
|
|
111
|
+
React.createElement(Box, { width: 16 },
|
|
112
|
+
React.createElement(Text, { color: "white" }, shortcut.keys)),
|
|
113
|
+
React.createElement(Text, { color: "gray" }, shortcut.description)))))))),
|
|
114
|
+
React.createElement(Box, { marginTop: 1, borderStyle: "single", borderColor: "gray", paddingX: 1 },
|
|
115
|
+
React.createElement(Text, { color: "gray", dimColor: true }, "\uD83D\uDCA1 Tip: Use /help for all commands \u2022 Ctrl+K for quick actions"))));
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Generates keyboard shortcut guide as a string
|
|
119
|
+
* Useful for displaying in chat history via /shortcuts command
|
|
120
|
+
*/
|
|
121
|
+
export function getKeyboardShortcutGuideText() {
|
|
122
|
+
let guide = "⌨️ **Keyboard Shortcuts**\n\n";
|
|
123
|
+
for (const [category, shortcuts] of Object.entries(ALL_SHORTCUTS)) {
|
|
124
|
+
guide += `**${category}**\n`;
|
|
125
|
+
for (const shortcut of shortcuts) {
|
|
126
|
+
guide += ` ${shortcut.keys.padEnd(14)} ${shortcut.description}\n`;
|
|
127
|
+
}
|
|
128
|
+
guide += "\n";
|
|
129
|
+
}
|
|
130
|
+
guide += "💡 Tip: Use /help for all commands • Ctrl+K for quick actions";
|
|
131
|
+
return guide;
|
|
132
|
+
}
|
|
133
|
+
export default KeyboardHints;
|
|
134
|
+
//# sourceMappingURL=keyboard-hints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyboard-hints.js","sourceRoot":"","sources":["../../../src/ui/components/keyboard-hints.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ interface LoadingSpinnerProps {
|
|
|
3
3
|
isActive: boolean;
|
|
4
4
|
processingTime: number;
|
|
5
5
|
tokenCount: number;
|
|
6
|
+
currentAction?: "thinking" | "searching" | "editing" | "executing" | "reading" | "writing";
|
|
6
7
|
}
|
|
7
|
-
export declare function LoadingSpinner({ isActive, processingTime, tokenCount, }: LoadingSpinnerProps): React.JSX.Element | null;
|
|
8
|
+
export declare function LoadingSpinner({ isActive, processingTime, tokenCount, currentAction, }: LoadingSpinnerProps): React.JSX.Element | null;
|
|
8
9
|
export {};
|
|
@@ -1,59 +1,111 @@
|
|
|
1
1
|
import React, { useState, useEffect } from "react";
|
|
2
2
|
import { Box, Text } from "ink";
|
|
3
3
|
import { formatTokenCount } from "../../utils/token-counter.js";
|
|
4
|
-
|
|
4
|
+
// Contextual loading messages based on current action
|
|
5
|
+
const loadingTextsByAction = {
|
|
6
|
+
thinking: [
|
|
7
|
+
"Thinking...",
|
|
8
|
+
"Analyzing...",
|
|
9
|
+
"Reasoning...",
|
|
10
|
+
"Considering...",
|
|
11
|
+
"Processing...",
|
|
12
|
+
],
|
|
13
|
+
searching: [
|
|
14
|
+
"Searching codebase...",
|
|
15
|
+
"Scanning files...",
|
|
16
|
+
"Finding matches...",
|
|
17
|
+
"Looking for patterns...",
|
|
18
|
+
],
|
|
19
|
+
editing: [
|
|
20
|
+
"Editing file...",
|
|
21
|
+
"Making changes...",
|
|
22
|
+
"Updating code...",
|
|
23
|
+
"Applying edits...",
|
|
24
|
+
],
|
|
25
|
+
executing: [
|
|
26
|
+
"Running command...",
|
|
27
|
+
"Executing...",
|
|
28
|
+
"Processing command...",
|
|
29
|
+
"Working...",
|
|
30
|
+
],
|
|
31
|
+
reading: [
|
|
32
|
+
"Reading file...",
|
|
33
|
+
"Loading content...",
|
|
34
|
+
"Fetching data...",
|
|
35
|
+
],
|
|
36
|
+
writing: [
|
|
37
|
+
"Writing file...",
|
|
38
|
+
"Saving changes...",
|
|
39
|
+
"Creating file...",
|
|
40
|
+
],
|
|
41
|
+
};
|
|
42
|
+
// Default messages when no specific action
|
|
43
|
+
const defaultLoadingTexts = [
|
|
5
44
|
"Thinking...",
|
|
6
|
-
"Computing...",
|
|
7
|
-
"Analyzing...",
|
|
8
45
|
"Processing...",
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"Optimizing...",
|
|
12
|
-
"Synthesizing...",
|
|
13
|
-
"Decrypting...",
|
|
14
|
-
"Calibrating...",
|
|
15
|
-
"Bootstrapping...",
|
|
16
|
-
"Synchronizing...",
|
|
17
|
-
"Compiling...",
|
|
18
|
-
"Downloading...",
|
|
46
|
+
"Analyzing...",
|
|
47
|
+
"Working...",
|
|
19
48
|
];
|
|
20
|
-
export function LoadingSpinner({ isActive, processingTime, tokenCount, }) {
|
|
49
|
+
export function LoadingSpinner({ isActive, processingTime, tokenCount, currentAction = "thinking", }) {
|
|
21
50
|
const [spinnerFrame, setSpinnerFrame] = useState(0);
|
|
22
51
|
const [loadingTextIndex, setLoadingTextIndex] = useState(0);
|
|
52
|
+
// Get the appropriate loading texts for current action
|
|
53
|
+
const loadingTexts = loadingTextsByAction[currentAction] || defaultLoadingTexts;
|
|
23
54
|
useEffect(() => {
|
|
24
55
|
if (!isActive)
|
|
25
56
|
return;
|
|
26
|
-
const spinnerFrames = ["
|
|
27
|
-
//
|
|
57
|
+
const spinnerFrames = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
58
|
+
// Smooth animation at 80ms intervals
|
|
28
59
|
const interval = setInterval(() => {
|
|
29
60
|
setSpinnerFrame((prev) => (prev + 1) % spinnerFrames.length);
|
|
30
|
-
},
|
|
61
|
+
}, 80);
|
|
31
62
|
return () => clearInterval(interval);
|
|
32
63
|
}, [isActive]);
|
|
33
64
|
useEffect(() => {
|
|
34
65
|
if (!isActive)
|
|
35
66
|
return;
|
|
36
67
|
setLoadingTextIndex(Math.floor(Math.random() * loadingTexts.length));
|
|
37
|
-
//
|
|
68
|
+
// Rotate messages every 3 seconds
|
|
38
69
|
const interval = setInterval(() => {
|
|
39
|
-
setLoadingTextIndex(
|
|
40
|
-
},
|
|
70
|
+
setLoadingTextIndex((prev) => (prev + 1) % loadingTexts.length);
|
|
71
|
+
}, 3000);
|
|
41
72
|
return () => clearInterval(interval);
|
|
42
|
-
}, [isActive]);
|
|
73
|
+
}, [isActive, loadingTexts.length]);
|
|
74
|
+
// Reset loading text index when action changes
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
setLoadingTextIndex(0);
|
|
77
|
+
}, [currentAction]);
|
|
43
78
|
if (!isActive)
|
|
44
79
|
return null;
|
|
45
|
-
const spinnerFrames = ["
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
80
|
+
const spinnerFrames = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
81
|
+
// Format time display
|
|
82
|
+
const formatTime = (seconds) => {
|
|
83
|
+
if (seconds < 60)
|
|
84
|
+
return `${seconds}s`;
|
|
85
|
+
const mins = Math.floor(seconds / 60);
|
|
86
|
+
const secs = seconds % 60;
|
|
87
|
+
return `${mins}m ${secs}s`;
|
|
88
|
+
};
|
|
89
|
+
return (React.createElement(Box, { marginTop: 1, flexDirection: "column" },
|
|
90
|
+
React.createElement(Box, null,
|
|
91
|
+
React.createElement(Text, { color: "cyan", bold: true }, spinnerFrames[spinnerFrame]),
|
|
92
|
+
React.createElement(Text, { color: "cyan" },
|
|
93
|
+
" ",
|
|
94
|
+
loadingTexts[loadingTextIndex % loadingTexts.length] || loadingTexts[0],
|
|
95
|
+
" ")),
|
|
96
|
+
React.createElement(Box, { marginLeft: 2 },
|
|
97
|
+
React.createElement(Text, { color: "gray", dimColor: true },
|
|
98
|
+
formatTime(processingTime),
|
|
99
|
+
" elapsed"),
|
|
100
|
+
tokenCount > 0 && (React.createElement(Text, { color: "gray", dimColor: true },
|
|
101
|
+
" ",
|
|
102
|
+
"\u2022 ",
|
|
103
|
+
formatTokenCount(tokenCount),
|
|
104
|
+
" tokens")),
|
|
105
|
+
React.createElement(Text, { color: "gray", dimColor: true },
|
|
106
|
+
" ",
|
|
107
|
+
"\u2022 ",
|
|
108
|
+
React.createElement(Text, { color: "yellow" }, "esc"),
|
|
109
|
+
" to interrupt"))));
|
|
58
110
|
}
|
|
59
111
|
//# sourceMappingURL=loading-spinner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loading-spinner.js","sourceRoot":"","sources":["../../../src/ui/components/loading-spinner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"loading-spinner.js","sourceRoot":"","sources":["../../../src/ui/components/loading-spinner.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase Progress Component
|
|
3
|
+
*
|
|
4
|
+
* Displays the progress of multi-phase plan execution.
|
|
5
|
+
*/
|
|
6
|
+
import React from "react";
|
|
7
|
+
import { TaskPlan } from "../../planner/types.js";
|
|
8
|
+
interface PhaseProgressProps {
|
|
9
|
+
plan: TaskPlan;
|
|
10
|
+
showDetails?: boolean;
|
|
11
|
+
compact?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function PhaseProgress({ plan, showDetails, compact, }: PhaseProgressProps): React.JSX.Element;
|
|
14
|
+
interface PlanSummaryProps {
|
|
15
|
+
plan: TaskPlan;
|
|
16
|
+
onApprove?: () => void;
|
|
17
|
+
onReject?: () => void;
|
|
18
|
+
onModify?: () => void;
|
|
19
|
+
}
|
|
20
|
+
export declare function PlanSummary({ plan }: PlanSummaryProps): React.JSX.Element;
|
|
21
|
+
export default PhaseProgress;
|