wave-code 0.14.4 → 0.15.1
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/dist/acp/agent.d.ts.map +1 -1
- package/dist/acp/agent.js +10 -0
- package/dist/components/BackgroundTaskManager.d.ts.map +1 -1
- package/dist/components/BackgroundTaskManager.js +17 -53
- package/dist/components/CommandSelector.d.ts.map +1 -1
- package/dist/components/CommandSelector.js +38 -28
- package/dist/components/ConfirmationSelector.d.ts.map +1 -1
- package/dist/components/ConfirmationSelector.js +18 -196
- package/dist/components/DiscoverView.d.ts.map +1 -1
- package/dist/components/DiscoverView.js +19 -11
- package/dist/components/FileSelector.d.ts.map +1 -1
- package/dist/components/FileSelector.js +29 -25
- package/dist/components/HelpView.d.ts.map +1 -1
- package/dist/components/HelpView.js +24 -28
- package/dist/components/HistorySearch.d.ts.map +1 -1
- package/dist/components/HistorySearch.js +26 -28
- package/dist/components/InputBox.d.ts.map +1 -1
- package/dist/components/InputBox.js +14 -6
- package/dist/components/InstalledView.d.ts.map +1 -1
- package/dist/components/InstalledView.js +19 -11
- package/dist/components/MarketplaceDetail.d.ts.map +1 -1
- package/dist/components/MarketplaceDetail.js +35 -16
- package/dist/components/MarketplaceView.d.ts.map +1 -1
- package/dist/components/MarketplaceView.js +21 -12
- package/dist/components/McpManager.d.ts.map +1 -1
- package/dist/components/McpManager.js +27 -46
- package/dist/components/ModelSelector.d.ts.map +1 -1
- package/dist/components/ModelSelector.js +27 -17
- package/dist/components/PluginDetail.d.ts.map +1 -1
- package/dist/components/PluginDetail.js +39 -26
- package/dist/components/RewindCommand.d.ts.map +1 -1
- package/dist/components/RewindCommand.js +27 -21
- package/dist/components/SessionSelector.d.ts.map +1 -1
- package/dist/components/SessionSelector.js +21 -16
- package/dist/components/StatusLine.d.ts.map +1 -1
- package/dist/components/StatusLine.js +5 -1
- package/dist/components/WorktreeExitPrompt.d.ts.map +1 -1
- package/dist/components/WorktreeExitPrompt.js +21 -12
- package/dist/contexts/useChat.d.ts +0 -1
- package/dist/contexts/useChat.d.ts.map +1 -1
- package/dist/contexts/useChat.js +13 -20
- package/dist/hooks/useInputManager.d.ts +5 -19
- package/dist/hooks/useInputManager.d.ts.map +1 -1
- package/dist/hooks/useInputManager.js +222 -79
- package/dist/managers/inputHandlers.d.ts +1 -1
- package/dist/managers/inputHandlers.d.ts.map +1 -1
- package/dist/managers/inputHandlers.js +3 -6
- package/dist/managers/inputReducer.d.ts +46 -4
- package/dist/managers/inputReducer.d.ts.map +1 -1
- package/dist/managers/inputReducer.js +519 -4
- package/dist/print-cli.d.ts.map +1 -1
- package/dist/print-cli.js +21 -9
- package/dist/reducers/backgroundTaskManagerReducer.d.ts +20 -0
- package/dist/reducers/backgroundTaskManagerReducer.d.ts.map +1 -1
- package/dist/reducers/backgroundTaskManagerReducer.js +83 -0
- package/dist/reducers/confirmationReducer.d.ts +11 -0
- package/dist/reducers/confirmationReducer.d.ts.map +1 -1
- package/dist/reducers/confirmationReducer.js +146 -0
- package/dist/reducers/helpSelectorReducer.d.ts +26 -0
- package/dist/reducers/helpSelectorReducer.d.ts.map +1 -0
- package/dist/reducers/helpSelectorReducer.js +52 -0
- package/dist/reducers/mcpManagerReducer.d.ts +22 -0
- package/dist/reducers/mcpManagerReducer.d.ts.map +1 -1
- package/dist/reducers/mcpManagerReducer.js +57 -0
- package/dist/reducers/pluginDetailReducer.d.ts +8 -0
- package/dist/reducers/pluginDetailReducer.d.ts.map +1 -1
- package/dist/reducers/pluginDetailReducer.js +32 -0
- package/dist/reducers/questionReducer.d.ts +21 -0
- package/dist/reducers/questionReducer.d.ts.map +1 -1
- package/dist/reducers/questionReducer.js +177 -0
- package/dist/reducers/rewindSelectorReducer.d.ts +22 -0
- package/dist/reducers/rewindSelectorReducer.d.ts.map +1 -0
- package/dist/reducers/rewindSelectorReducer.js +37 -0
- package/dist/reducers/selectorReducer.d.ts +22 -0
- package/dist/reducers/selectorReducer.d.ts.map +1 -0
- package/dist/reducers/selectorReducer.js +40 -0
- package/dist/utils/inputUtils.d.ts +18 -0
- package/dist/utils/inputUtils.d.ts.map +1 -0
- package/dist/utils/inputUtils.js +67 -0
- package/dist/utils/worktree.d.ts.map +1 -1
- package/dist/utils/worktree.js +1 -2
- package/package.json +2 -2
- package/src/acp/agent.ts +10 -0
- package/src/components/BackgroundTaskManager.tsx +19 -58
- package/src/components/CommandSelector.tsx +53 -44
- package/src/components/ConfirmationSelector.tsx +18 -202
- package/src/components/DiscoverView.tsx +21 -11
- package/src/components/FileSelector.tsx +40 -35
- package/src/components/HelpView.tsx +37 -43
- package/src/components/HistorySearch.tsx +29 -36
- package/src/components/InputBox.tsx +14 -7
- package/src/components/InstalledView.tsx +21 -11
- package/src/components/MarketplaceDetail.tsx +48 -24
- package/src/components/MarketplaceView.tsx +25 -10
- package/src/components/McpManager.tsx +29 -54
- package/src/components/ModelSelector.tsx +30 -23
- package/src/components/PluginDetail.tsx +50 -27
- package/src/components/RewindCommand.tsx +38 -32
- package/src/components/SessionSelector.tsx +23 -20
- package/src/components/StatusLine.tsx +10 -1
- package/src/components/WorktreeExitPrompt.tsx +23 -13
- package/src/contexts/useChat.tsx +13 -31
- package/src/hooks/useInputManager.ts +273 -141
- package/src/managers/inputHandlers.ts +1 -6
- package/src/managers/inputReducer.ts +675 -7
- package/src/print-cli.ts +20 -11
- package/src/reducers/backgroundTaskManagerReducer.ts +110 -1
- package/src/reducers/confirmationReducer.ts +173 -1
- package/src/reducers/helpSelectorReducer.ts +77 -0
- package/src/reducers/mcpManagerReducer.ts +82 -1
- package/src/reducers/pluginDetailReducer.ts +42 -1
- package/src/reducers/questionReducer.ts +204 -0
- package/src/reducers/rewindSelectorReducer.ts +54 -0
- package/src/reducers/selectorReducer.ts +57 -0
- package/src/utils/inputUtils.ts +94 -0
- package/src/utils/worktree.ts +1 -7
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Key } from "ink";
|
|
1
2
|
export interface Task {
|
|
2
3
|
id: string;
|
|
3
4
|
type: string;
|
|
@@ -14,12 +15,19 @@ export interface DetailOutput {
|
|
|
14
15
|
status: string;
|
|
15
16
|
outputPath?: string;
|
|
16
17
|
}
|
|
18
|
+
export type PendingEffect = {
|
|
19
|
+
type: "CANCEL";
|
|
20
|
+
} | {
|
|
21
|
+
type: "STOP_TASK";
|
|
22
|
+
taskId: string;
|
|
23
|
+
};
|
|
17
24
|
export interface BackgroundTaskManagerState {
|
|
18
25
|
tasks: Task[];
|
|
19
26
|
selectedIndex: number;
|
|
20
27
|
viewMode: "list" | "detail";
|
|
21
28
|
detailTaskId: string | null;
|
|
22
29
|
detailOutput: DetailOutput | null;
|
|
30
|
+
pendingEffect: PendingEffect | null;
|
|
23
31
|
}
|
|
24
32
|
export type BackgroundTaskManagerAction = {
|
|
25
33
|
type: "SET_TASKS";
|
|
@@ -27,6 +35,12 @@ export type BackgroundTaskManagerAction = {
|
|
|
27
35
|
} | {
|
|
28
36
|
type: "SELECT_INDEX";
|
|
29
37
|
index: number;
|
|
38
|
+
} | {
|
|
39
|
+
type: "MOVE_UP";
|
|
40
|
+
} | {
|
|
41
|
+
type: "MOVE_DOWN";
|
|
42
|
+
} | {
|
|
43
|
+
type: "SELECT_CURRENT";
|
|
30
44
|
} | {
|
|
31
45
|
type: "SET_VIEW_MODE";
|
|
32
46
|
mode: "list" | "detail";
|
|
@@ -38,6 +52,12 @@ export type BackgroundTaskManagerAction = {
|
|
|
38
52
|
output: DetailOutput | null;
|
|
39
53
|
} | {
|
|
40
54
|
type: "RESET_DETAIL";
|
|
55
|
+
} | {
|
|
56
|
+
type: "HANDLE_KEY";
|
|
57
|
+
input: string;
|
|
58
|
+
key: Key;
|
|
59
|
+
} | {
|
|
60
|
+
type: "CLEAR_PENDING_EFFECT";
|
|
41
61
|
};
|
|
42
62
|
export declare function backgroundTaskManagerReducer(state: BackgroundTaskManagerState, action: BackgroundTaskManagerAction): BackgroundTaskManagerState;
|
|
43
63
|
//# sourceMappingURL=backgroundTaskManagerReducer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backgroundTaskManagerReducer.d.ts","sourceRoot":"","sources":["../../src/reducers/backgroundTaskManagerReducer.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"backgroundTaskManagerReducer.d.ts","sourceRoot":"","sources":["../../src/reducers/backgroundTaskManagerReducer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1C,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,MAAM,2BAA2B,GACnC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAErC,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,0BAA0B,EACjC,MAAM,EAAE,2BAA2B,GAClC,0BAA0B,CAuH5B"}
|
|
@@ -4,6 +4,22 @@ export function backgroundTaskManagerReducer(state, action) {
|
|
|
4
4
|
return { ...state, tasks: action.tasks };
|
|
5
5
|
case "SELECT_INDEX":
|
|
6
6
|
return { ...state, selectedIndex: action.index };
|
|
7
|
+
case "MOVE_UP":
|
|
8
|
+
return { ...state, selectedIndex: Math.max(0, state.selectedIndex - 1) };
|
|
9
|
+
case "MOVE_DOWN":
|
|
10
|
+
return {
|
|
11
|
+
...state,
|
|
12
|
+
selectedIndex: Math.min(state.tasks.length > 0 ? state.tasks.length - 1 : 0, state.selectedIndex + 1),
|
|
13
|
+
};
|
|
14
|
+
case "SELECT_CURRENT":
|
|
15
|
+
if (state.tasks.length > 0 && state.selectedIndex < state.tasks.length) {
|
|
16
|
+
return {
|
|
17
|
+
...state,
|
|
18
|
+
detailTaskId: state.tasks[state.selectedIndex].id,
|
|
19
|
+
viewMode: "detail",
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
return state;
|
|
7
23
|
case "SET_VIEW_MODE":
|
|
8
24
|
return { ...state, viewMode: action.mode };
|
|
9
25
|
case "SET_DETAIL_TASK_ID":
|
|
@@ -17,6 +33,73 @@ export function backgroundTaskManagerReducer(state, action) {
|
|
|
17
33
|
detailTaskId: null,
|
|
18
34
|
detailOutput: null,
|
|
19
35
|
};
|
|
36
|
+
case "HANDLE_KEY": {
|
|
37
|
+
const { input, key } = action;
|
|
38
|
+
if (state.viewMode === "list") {
|
|
39
|
+
if (key.return) {
|
|
40
|
+
if (state.tasks.length > 0 &&
|
|
41
|
+
state.selectedIndex < state.tasks.length) {
|
|
42
|
+
return {
|
|
43
|
+
...state,
|
|
44
|
+
detailTaskId: state.tasks[state.selectedIndex].id,
|
|
45
|
+
viewMode: "detail",
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return state;
|
|
49
|
+
}
|
|
50
|
+
if (key.escape) {
|
|
51
|
+
return { ...state, pendingEffect: { type: "CANCEL" } };
|
|
52
|
+
}
|
|
53
|
+
if (key.upArrow) {
|
|
54
|
+
return {
|
|
55
|
+
...state,
|
|
56
|
+
selectedIndex: Math.max(0, state.selectedIndex - 1),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
if (key.downArrow) {
|
|
60
|
+
return {
|
|
61
|
+
...state,
|
|
62
|
+
selectedIndex: Math.min(state.tasks.length > 0 ? state.tasks.length - 1 : 0, state.selectedIndex + 1),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (input === "k") {
|
|
66
|
+
if (state.tasks.length > 0 &&
|
|
67
|
+
state.selectedIndex < state.tasks.length) {
|
|
68
|
+
const selectedTask = state.tasks[state.selectedIndex];
|
|
69
|
+
if (selectedTask.status === "running") {
|
|
70
|
+
return {
|
|
71
|
+
...state,
|
|
72
|
+
pendingEffect: { type: "STOP_TASK", taskId: selectedTask.id },
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return state;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else if (state.viewMode === "detail") {
|
|
80
|
+
if (key.escape) {
|
|
81
|
+
return {
|
|
82
|
+
...state,
|
|
83
|
+
viewMode: "list",
|
|
84
|
+
detailTaskId: null,
|
|
85
|
+
detailOutput: null,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
if (input === "k" && state.detailTaskId) {
|
|
89
|
+
const task = state.tasks.find((t) => t.id === state.detailTaskId);
|
|
90
|
+
if (task && task.status === "running") {
|
|
91
|
+
return {
|
|
92
|
+
...state,
|
|
93
|
+
pendingEffect: { type: "STOP_TASK", taskId: state.detailTaskId },
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
return state;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return state;
|
|
100
|
+
}
|
|
101
|
+
case "CLEAR_PENDING_EFFECT":
|
|
102
|
+
return { ...state, pendingEffect: null };
|
|
20
103
|
default:
|
|
21
104
|
return state;
|
|
22
105
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Key } from "ink";
|
|
1
2
|
import type { PermissionDecision } from "wave-agent-sdk";
|
|
2
3
|
export interface ConfirmationState {
|
|
3
4
|
selectedOption: "clear" | "auto" | "allow" | "alternative";
|
|
@@ -21,6 +22,16 @@ export type ConfirmationAction = {
|
|
|
21
22
|
} | {
|
|
22
23
|
type: "CONFIRM";
|
|
23
24
|
decision: PermissionDecision;
|
|
25
|
+
} | {
|
|
26
|
+
type: "CLEAR_DECISION";
|
|
27
|
+
} | {
|
|
28
|
+
type: "HANDLE_KEY";
|
|
29
|
+
input: string;
|
|
30
|
+
key: Key;
|
|
31
|
+
toolName: string;
|
|
32
|
+
toolInput?: Record<string, unknown>;
|
|
33
|
+
suggestedPrefix?: string;
|
|
34
|
+
hidePersistentOption?: boolean;
|
|
24
35
|
};
|
|
25
36
|
export declare function confirmationReducer(state: ConfirmationState, action: ConfirmationAction): ConfirmationState;
|
|
26
37
|
//# sourceMappingURL=confirmationReducer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirmationReducer.d.ts","sourceRoot":"","sources":["../../src/reducers/confirmationReducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"confirmationReducer.d.ts","sourceRoot":"","sources":["../../src/reducers/confirmationReducer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAOzD,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,aAAa,CAAC;IAC3D,eAAe,EAAE,MAAM,CAAC;IACxB,yBAAyB,EAAE,MAAM,CAAC;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEN,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,kBAAkB,GACzB,iBAAiB,CAgNnB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BASH_TOOL_NAME, EXIT_PLAN_MODE_TOOL_NAME, ENTER_PLAN_MODE_TOOL_NAME, } from "wave-agent-sdk";
|
|
1
2
|
export function confirmationReducer(state, action) {
|
|
2
3
|
switch (action.type) {
|
|
3
4
|
case "SELECT_OPTION":
|
|
@@ -39,6 +40,151 @@ export function confirmationReducer(state, action) {
|
|
|
39
40
|
};
|
|
40
41
|
case "CONFIRM":
|
|
41
42
|
return { ...state, decision: action.decision };
|
|
43
|
+
case "CLEAR_DECISION":
|
|
44
|
+
return { ...state, decision: null };
|
|
45
|
+
case "HANDLE_KEY": {
|
|
46
|
+
const { input, key, toolName, toolInput, suggestedPrefix, hidePersistentOption, } = action;
|
|
47
|
+
if (key.return) {
|
|
48
|
+
let decision = null;
|
|
49
|
+
if (state.selectedOption === "clear") {
|
|
50
|
+
decision = {
|
|
51
|
+
behavior: "allow",
|
|
52
|
+
newPermissionMode: "acceptEdits",
|
|
53
|
+
clearContext: true,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
else if (state.selectedOption === "allow") {
|
|
57
|
+
if (toolName === EXIT_PLAN_MODE_TOOL_NAME) {
|
|
58
|
+
decision = { behavior: "allow", newPermissionMode: "default" };
|
|
59
|
+
}
|
|
60
|
+
else if (toolName === ENTER_PLAN_MODE_TOOL_NAME) {
|
|
61
|
+
decision = { behavior: "allow", newPermissionMode: "plan" };
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
decision = { behavior: "allow" };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else if (state.selectedOption === "auto") {
|
|
68
|
+
if (toolName === BASH_TOOL_NAME) {
|
|
69
|
+
const command = toolInput?.command || "";
|
|
70
|
+
if (command.trim().startsWith("mkdir")) {
|
|
71
|
+
decision = {
|
|
72
|
+
behavior: "allow",
|
|
73
|
+
newPermissionMode: "acceptEdits",
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
const rule = suggestedPrefix
|
|
78
|
+
? `Bash(${suggestedPrefix})`
|
|
79
|
+
: `Bash(${toolInput?.command})`;
|
|
80
|
+
decision = { behavior: "allow", newPermissionRule: rule };
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else if (toolName === ENTER_PLAN_MODE_TOOL_NAME) {
|
|
84
|
+
decision = { behavior: "allow", newPermissionMode: "plan" };
|
|
85
|
+
}
|
|
86
|
+
else if (toolName.startsWith("mcp__")) {
|
|
87
|
+
decision = { behavior: "allow", newPermissionRule: toolName };
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
decision = { behavior: "allow", newPermissionMode: "acceptEdits" };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else if (state.alternativeText.trim()) {
|
|
94
|
+
decision = {
|
|
95
|
+
behavior: "deny",
|
|
96
|
+
message: state.alternativeText.trim(),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
else if (toolName === ENTER_PLAN_MODE_TOOL_NAME) {
|
|
100
|
+
decision = {
|
|
101
|
+
behavior: "deny",
|
|
102
|
+
message: "User chose not to enter plan mode",
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
if (decision) {
|
|
106
|
+
return { ...state, decision };
|
|
107
|
+
}
|
|
108
|
+
return state;
|
|
109
|
+
}
|
|
110
|
+
if (state.selectedOption === "alternative") {
|
|
111
|
+
if (key.leftArrow) {
|
|
112
|
+
return {
|
|
113
|
+
...state,
|
|
114
|
+
alternativeCursorPosition: Math.max(0, state.alternativeCursorPosition - 1),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
if (key.rightArrow) {
|
|
118
|
+
return {
|
|
119
|
+
...state,
|
|
120
|
+
alternativeCursorPosition: Math.min(state.alternativeText.length, state.alternativeCursorPosition + 1),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const availableOptions = [];
|
|
125
|
+
if (toolName === EXIT_PLAN_MODE_TOOL_NAME)
|
|
126
|
+
availableOptions.push("clear");
|
|
127
|
+
availableOptions.push("allow");
|
|
128
|
+
if (!hidePersistentOption)
|
|
129
|
+
availableOptions.push("auto");
|
|
130
|
+
availableOptions.push("alternative");
|
|
131
|
+
if (key.upArrow) {
|
|
132
|
+
const currentIndex = availableOptions.indexOf(state.selectedOption);
|
|
133
|
+
if (currentIndex > 0) {
|
|
134
|
+
return {
|
|
135
|
+
...state,
|
|
136
|
+
selectedOption: availableOptions[currentIndex - 1],
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
return state;
|
|
140
|
+
}
|
|
141
|
+
if (key.downArrow) {
|
|
142
|
+
const currentIndex = availableOptions.indexOf(state.selectedOption);
|
|
143
|
+
if (currentIndex < availableOptions.length - 1) {
|
|
144
|
+
return {
|
|
145
|
+
...state,
|
|
146
|
+
selectedOption: availableOptions[currentIndex + 1],
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
return state;
|
|
150
|
+
}
|
|
151
|
+
if (key.tab) {
|
|
152
|
+
const currentIndex = availableOptions.indexOf(state.selectedOption);
|
|
153
|
+
const direction = key.shift ? -1 : 1;
|
|
154
|
+
let nextIndex = currentIndex + direction;
|
|
155
|
+
if (nextIndex < 0)
|
|
156
|
+
nextIndex = availableOptions.length - 1;
|
|
157
|
+
if (nextIndex >= availableOptions.length)
|
|
158
|
+
nextIndex = 0;
|
|
159
|
+
return { ...state, selectedOption: availableOptions[nextIndex] };
|
|
160
|
+
}
|
|
161
|
+
if (input && !key.ctrl && !key.meta && !("alt" in key && key.alt)) {
|
|
162
|
+
const nextText = state.alternativeText.slice(0, state.alternativeCursorPosition) +
|
|
163
|
+
input +
|
|
164
|
+
state.alternativeText.slice(state.alternativeCursorPosition);
|
|
165
|
+
return {
|
|
166
|
+
...state,
|
|
167
|
+
selectedOption: "alternative",
|
|
168
|
+
alternativeText: nextText,
|
|
169
|
+
alternativeCursorPosition: state.alternativeCursorPosition + input.length,
|
|
170
|
+
hasUserInput: true,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
if (key.backspace || key.delete) {
|
|
174
|
+
if (state.alternativeCursorPosition <= 0)
|
|
175
|
+
return state;
|
|
176
|
+
const nextText = state.alternativeText.slice(0, state.alternativeCursorPosition - 1) +
|
|
177
|
+
state.alternativeText.slice(state.alternativeCursorPosition);
|
|
178
|
+
return {
|
|
179
|
+
...state,
|
|
180
|
+
selectedOption: "alternative",
|
|
181
|
+
alternativeText: nextText,
|
|
182
|
+
alternativeCursorPosition: state.alternativeCursorPosition - 1,
|
|
183
|
+
hasUserInput: nextText.length > 0,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
return state;
|
|
187
|
+
}
|
|
42
188
|
default:
|
|
43
189
|
return state;
|
|
44
190
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Key } from "ink";
|
|
2
|
+
export interface SelectorState {
|
|
3
|
+
selectedIndex: number;
|
|
4
|
+
activeTab: "general" | "commands" | "custom-commands";
|
|
5
|
+
pendingDecision: "select" | "insert" | "cancel" | "tab-switch" | null;
|
|
6
|
+
}
|
|
7
|
+
export type SelectorAction = {
|
|
8
|
+
type: "MOVE_UP";
|
|
9
|
+
} | {
|
|
10
|
+
type: "MOVE_DOWN";
|
|
11
|
+
maxIndex: number;
|
|
12
|
+
} | {
|
|
13
|
+
type: "RESET_INDEX";
|
|
14
|
+
} | {
|
|
15
|
+
type: "SWITCH_TAB";
|
|
16
|
+
tabs: string[];
|
|
17
|
+
} | {
|
|
18
|
+
type: "HANDLE_KEY";
|
|
19
|
+
key: Key;
|
|
20
|
+
maxIndex: number;
|
|
21
|
+
tabs: string[];
|
|
22
|
+
} | {
|
|
23
|
+
type: "CLEAR_DECISION";
|
|
24
|
+
};
|
|
25
|
+
export declare function helpSelectorReducer(state: SelectorState, action: SelectorAction): SelectorState;
|
|
26
|
+
//# sourceMappingURL=helpSelectorReducer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpSelectorReducer.d.ts","sourceRoot":"","sources":["../../src/reducers/helpSelectorReducer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,iBAAiB,CAAC;IACtD,eAAe,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,IAAI,CAAC;CACvE;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,GAAG,EAAE,GAAG,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE/B,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,cAAc,GACrB,aAAa,CAyDf"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export function helpSelectorReducer(state, action) {
|
|
2
|
+
switch (action.type) {
|
|
3
|
+
case "MOVE_UP":
|
|
4
|
+
return { ...state, selectedIndex: Math.max(0, state.selectedIndex - 1) };
|
|
5
|
+
case "MOVE_DOWN":
|
|
6
|
+
return {
|
|
7
|
+
...state,
|
|
8
|
+
selectedIndex: Math.min(action.maxIndex, state.selectedIndex + 1),
|
|
9
|
+
};
|
|
10
|
+
case "RESET_INDEX":
|
|
11
|
+
return { ...state, selectedIndex: 0 };
|
|
12
|
+
case "SWITCH_TAB": {
|
|
13
|
+
const currentIndex = action.tabs.indexOf(state.activeTab);
|
|
14
|
+
const nextIndex = (currentIndex + 1) % action.tabs.length;
|
|
15
|
+
return {
|
|
16
|
+
...state,
|
|
17
|
+
activeTab: action.tabs[nextIndex],
|
|
18
|
+
selectedIndex: 0,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
case "HANDLE_KEY":
|
|
22
|
+
if (action.key.upArrow) {
|
|
23
|
+
return {
|
|
24
|
+
...state,
|
|
25
|
+
selectedIndex: Math.max(0, state.selectedIndex - 1),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
if (action.key.downArrow) {
|
|
29
|
+
return {
|
|
30
|
+
...state,
|
|
31
|
+
selectedIndex: Math.min(action.maxIndex, state.selectedIndex + 1),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
if (action.key.tab) {
|
|
35
|
+
const currentIndex = action.tabs.indexOf(state.activeTab);
|
|
36
|
+
const nextIndex = (currentIndex + 1) % action.tabs.length;
|
|
37
|
+
return {
|
|
38
|
+
...state,
|
|
39
|
+
activeTab: action.tabs[nextIndex],
|
|
40
|
+
selectedIndex: 0,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (action.key.escape) {
|
|
44
|
+
return { ...state, pendingDecision: "cancel" };
|
|
45
|
+
}
|
|
46
|
+
return state;
|
|
47
|
+
case "CLEAR_DECISION":
|
|
48
|
+
return { ...state, pendingDecision: null };
|
|
49
|
+
default:
|
|
50
|
+
return state;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -1,6 +1,17 @@
|
|
|
1
|
+
import { Key } from "ink";
|
|
2
|
+
export type PendingEffect = {
|
|
3
|
+
type: "CANCEL";
|
|
4
|
+
} | {
|
|
5
|
+
type: "CONNECT_SERVER";
|
|
6
|
+
serverName: string;
|
|
7
|
+
} | {
|
|
8
|
+
type: "DISCONNECT_SERVER";
|
|
9
|
+
serverName: string;
|
|
10
|
+
};
|
|
1
11
|
export interface McpManagerState {
|
|
2
12
|
selectedIndex: number;
|
|
3
13
|
viewMode: "list" | "detail";
|
|
14
|
+
pendingEffect: PendingEffect | null;
|
|
4
15
|
}
|
|
5
16
|
export type McpManagerAction = {
|
|
6
17
|
type: "MOVE_UP";
|
|
@@ -11,6 +22,17 @@ export type McpManagerAction = {
|
|
|
11
22
|
} | {
|
|
12
23
|
type: "SET_VIEW_MODE";
|
|
13
24
|
viewMode: "list" | "detail";
|
|
25
|
+
} | {
|
|
26
|
+
type: "HANDLE_KEY";
|
|
27
|
+
input: string;
|
|
28
|
+
key: Key;
|
|
29
|
+
serverCount: number;
|
|
30
|
+
servers: Array<{
|
|
31
|
+
name: string;
|
|
32
|
+
status: string;
|
|
33
|
+
}>;
|
|
34
|
+
} | {
|
|
35
|
+
type: "CLEAR_PENDING_EFFECT";
|
|
14
36
|
};
|
|
15
37
|
export declare function mcpManagerReducer(state: McpManagerState, action: McpManagerAction): McpManagerState;
|
|
16
38
|
//# sourceMappingURL=mcpManagerReducer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcpManagerReducer.d.ts","sourceRoot":"","sources":["../../src/reducers/mcpManagerReducer.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"mcpManagerReducer.d.ts","sourceRoot":"","sources":["../../src/reducers/mcpManagerReducer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAA;CAAE,GACtD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,GAAG,CAAC;IACT,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD,GACD;IAAE,IAAI,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAErC,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,gBAAgB,GACvB,eAAe,CAkFjB"}
|
|
@@ -9,6 +9,63 @@ export function mcpManagerReducer(state, action) {
|
|
|
9
9
|
};
|
|
10
10
|
case "SET_VIEW_MODE":
|
|
11
11
|
return { ...state, viewMode: action.viewMode };
|
|
12
|
+
case "HANDLE_KEY": {
|
|
13
|
+
const { input, key, serverCount, servers } = action;
|
|
14
|
+
if (key.return) {
|
|
15
|
+
if (state.viewMode === "list") {
|
|
16
|
+
return { ...state, viewMode: "detail" };
|
|
17
|
+
}
|
|
18
|
+
return state;
|
|
19
|
+
}
|
|
20
|
+
if (key.escape) {
|
|
21
|
+
if (state.viewMode === "detail") {
|
|
22
|
+
return { ...state, viewMode: "list" };
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
return { ...state, pendingEffect: { type: "CANCEL" } };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (key.upArrow) {
|
|
29
|
+
return {
|
|
30
|
+
...state,
|
|
31
|
+
selectedIndex: Math.max(0, state.selectedIndex - 1),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
if (key.downArrow) {
|
|
35
|
+
return {
|
|
36
|
+
...state,
|
|
37
|
+
selectedIndex: Math.min(serverCount - 1, state.selectedIndex + 1),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// Hotkeys for server actions
|
|
41
|
+
if (input === "c") {
|
|
42
|
+
const server = servers[state.selectedIndex];
|
|
43
|
+
if (server &&
|
|
44
|
+
(server.status === "disconnected" || server.status === "error")) {
|
|
45
|
+
return {
|
|
46
|
+
...state,
|
|
47
|
+
pendingEffect: { type: "CONNECT_SERVER", serverName: server.name },
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return state;
|
|
51
|
+
}
|
|
52
|
+
if (input === "d") {
|
|
53
|
+
const server = servers[state.selectedIndex];
|
|
54
|
+
if (server && server.status === "connected") {
|
|
55
|
+
return {
|
|
56
|
+
...state,
|
|
57
|
+
pendingEffect: {
|
|
58
|
+
type: "DISCONNECT_SERVER",
|
|
59
|
+
serverName: server.name,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
return state;
|
|
64
|
+
}
|
|
65
|
+
return state;
|
|
66
|
+
}
|
|
67
|
+
case "CLEAR_PENDING_EFFECT":
|
|
68
|
+
return { ...state, pendingEffect: null };
|
|
12
69
|
default:
|
|
13
70
|
return state;
|
|
14
71
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { Key } from "ink";
|
|
1
2
|
export interface PluginDetailState {
|
|
2
3
|
selectedScopeIndex: number;
|
|
3
4
|
selectedActionIndex: number;
|
|
5
|
+
pendingDecision: "select" | "cancel" | null;
|
|
4
6
|
}
|
|
5
7
|
export type PluginDetailAction = {
|
|
6
8
|
type: "SELECT_SCOPE_INDEX";
|
|
@@ -20,6 +22,12 @@ export type PluginDetailAction = {
|
|
|
20
22
|
} | {
|
|
21
23
|
type: "MOVE_ACTION_DOWN";
|
|
22
24
|
maxIndex: number;
|
|
25
|
+
} | {
|
|
26
|
+
type: "HANDLE_KEY";
|
|
27
|
+
key: Key;
|
|
28
|
+
maxIndex: number;
|
|
29
|
+
} | {
|
|
30
|
+
type: "CLEAR_DECISION";
|
|
23
31
|
};
|
|
24
32
|
export declare function pluginDetailReducer(state: PluginDetailState, action: PluginDetailAction): PluginDetailState;
|
|
25
33
|
//# sourceMappingURL=pluginDetailReducer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pluginDetailReducer.d.ts","sourceRoot":"","sources":["../../src/reducers/pluginDetailReducer.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"pluginDetailReducer.d.ts","sourceRoot":"","sources":["../../src/reducers/pluginDetailReducer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,WAAW,iBAAiB;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;CAC7C;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,GAAG,EAAE,GAAG,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE/B,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,kBAAkB,GACzB,iBAAiB,CA6EnB"}
|
|
@@ -32,6 +32,38 @@ export function pluginDetailReducer(state, action) {
|
|
|
32
32
|
? state.selectedActionIndex + 1
|
|
33
33
|
: 0,
|
|
34
34
|
};
|
|
35
|
+
case "HANDLE_KEY":
|
|
36
|
+
if (action.key.upArrow) {
|
|
37
|
+
return {
|
|
38
|
+
...state,
|
|
39
|
+
selectedScopeIndex: state.selectedScopeIndex > 0
|
|
40
|
+
? state.selectedScopeIndex - 1
|
|
41
|
+
: action.maxIndex,
|
|
42
|
+
selectedActionIndex: state.selectedActionIndex > 0
|
|
43
|
+
? state.selectedActionIndex - 1
|
|
44
|
+
: action.maxIndex,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (action.key.downArrow) {
|
|
48
|
+
return {
|
|
49
|
+
...state,
|
|
50
|
+
selectedScopeIndex: state.selectedScopeIndex < action.maxIndex
|
|
51
|
+
? state.selectedScopeIndex + 1
|
|
52
|
+
: 0,
|
|
53
|
+
selectedActionIndex: state.selectedActionIndex < action.maxIndex
|
|
54
|
+
? state.selectedActionIndex + 1
|
|
55
|
+
: 0,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
if (action.key.return) {
|
|
59
|
+
return { ...state, pendingDecision: "select" };
|
|
60
|
+
}
|
|
61
|
+
if (action.key.escape) {
|
|
62
|
+
return { ...state, pendingDecision: "cancel" };
|
|
63
|
+
}
|
|
64
|
+
return state;
|
|
65
|
+
case "CLEAR_DECISION":
|
|
66
|
+
return { ...state, pendingDecision: null };
|
|
35
67
|
default:
|
|
36
68
|
return state;
|
|
37
69
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Key } from "ink";
|
|
1
2
|
import type { PermissionDecision } from "wave-agent-sdk";
|
|
2
3
|
export interface QuestionSavedState {
|
|
3
4
|
selectedOptionIndex: number;
|
|
@@ -64,6 +65,26 @@ export type QuestionAction = {
|
|
|
64
65
|
}>;
|
|
65
66
|
multiSelect?: boolean;
|
|
66
67
|
}>;
|
|
68
|
+
} | {
|
|
69
|
+
type: "CLEAR_DECISION";
|
|
70
|
+
} | {
|
|
71
|
+
type: "HANDLE_KEY";
|
|
72
|
+
input: string;
|
|
73
|
+
key: Key;
|
|
74
|
+
currentQuestion: {
|
|
75
|
+
question: string;
|
|
76
|
+
options: Array<{
|
|
77
|
+
label: string;
|
|
78
|
+
}>;
|
|
79
|
+
multiSelect?: boolean;
|
|
80
|
+
};
|
|
81
|
+
questions: Array<{
|
|
82
|
+
question: string;
|
|
83
|
+
options: Array<{
|
|
84
|
+
label: string;
|
|
85
|
+
}>;
|
|
86
|
+
multiSelect?: boolean;
|
|
87
|
+
}>;
|
|
67
88
|
};
|
|
68
89
|
export declare function questionReducer(state: QuestionState, action: QuestionAction): QuestionState;
|
|
69
90
|
//# sourceMappingURL=questionReducer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"questionReducer.d.ts","sourceRoot":"","sources":["../../src/reducers/questionReducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,MAAM,WAAW,kBAAkB;IACjC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAChD,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC9C;IACE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB,GACD;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACnD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,eAAe,EAAE;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAClC,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC;IACF,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClC,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAClC,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC,CAAC;CACJ,CAAC;AA+BN,wBAAgB,eAAe,CAC7B,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,cAAc,GACrB,aAAa,
|
|
1
|
+
{"version":3,"file":"questionReducer.d.ts","sourceRoot":"","sources":["../../src/reducers/questionReducer.ts"],"names":[],"mappings":"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"}
|