takt 0.1.0 → 0.1.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/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +2 -1
- package/dist/agents/runner.js.map +1 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +7 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/config.d.ts +33 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +110 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/workflow.js +1 -1
- package/dist/commands/workflow.js.map +1 -1
- package/dist/config/initialization.js +1 -1
- package/dist/config/initialization.js.map +1 -1
- package/dist/config/projectConfig.d.ts +12 -1
- package/dist/config/projectConfig.d.ts.map +1 -1
- package/dist/config/projectConfig.js +1 -0
- package/dist/config/projectConfig.js.map +1 -1
- package/dist/{interactive/prompt.d.ts → prompt/index.d.ts} +3 -1
- package/dist/prompt/index.d.ts.map +1 -0
- package/dist/{interactive/prompt.js → prompt/index.js} +11 -1
- package/dist/prompt/index.js.map +1 -0
- package/package.json +1 -1
- package/dist/cli/agentExecution.d.ts +0 -16
- package/dist/cli/agentExecution.d.ts.map +0 -1
- package/dist/cli/agentExecution.js +0 -40
- package/dist/cli/agentExecution.js.map +0 -1
- package/dist/cli/help.d.ts +0 -8
- package/dist/cli/help.d.ts.map +0 -1
- package/dist/cli/help.js +0 -46
- package/dist/cli/help.js.map +0 -1
- package/dist/cli/index.d.ts +0 -8
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -8
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/taskBatch.d.ts +0 -8
- package/dist/cli/taskBatch.d.ts.map +0 -1
- package/dist/cli/taskBatch.js +0 -69
- package/dist/cli/taskBatch.js.map +0 -1
- package/dist/cli/workflowExecution.d.ts +0 -18
- package/dist/cli/workflowExecution.d.ts.map +0 -1
- package/dist/cli/workflowExecution.js +0 -112
- package/dist/cli/workflowExecution.js.map +0 -1
- package/dist/commands/agentExecution.d.ts +0 -8
- package/dist/commands/agentExecution.d.ts.map +0 -1
- package/dist/commands/agentExecution.js +0 -44
- package/dist/commands/agentExecution.js.map +0 -1
- package/dist/interactive/commands/agent.d.ts +0 -7
- package/dist/interactive/commands/agent.d.ts.map +0 -1
- package/dist/interactive/commands/agent.js +0 -65
- package/dist/interactive/commands/agent.js.map +0 -1
- package/dist/interactive/commands/basic.d.ts +0 -7
- package/dist/interactive/commands/basic.d.ts.map +0 -1
- package/dist/interactive/commands/basic.js +0 -81
- package/dist/interactive/commands/basic.js.map +0 -1
- package/dist/interactive/commands/index.d.ts +0 -12
- package/dist/interactive/commands/index.d.ts.map +0 -1
- package/dist/interactive/commands/index.js +0 -14
- package/dist/interactive/commands/index.js.map +0 -1
- package/dist/interactive/commands/registry.d.ts +0 -41
- package/dist/interactive/commands/registry.d.ts.map +0 -1
- package/dist/interactive/commands/registry.js +0 -37
- package/dist/interactive/commands/registry.js.map +0 -1
- package/dist/interactive/commands/session.d.ts +0 -7
- package/dist/interactive/commands/session.d.ts.map +0 -1
- package/dist/interactive/commands/session.js +0 -75
- package/dist/interactive/commands/session.js.map +0 -1
- package/dist/interactive/commands/task.d.ts +0 -7
- package/dist/interactive/commands/task.d.ts.map +0 -1
- package/dist/interactive/commands/task.js +0 -156
- package/dist/interactive/commands/task.js.map +0 -1
- package/dist/interactive/commands/workflow.d.ts +0 -7
- package/dist/interactive/commands/workflow.d.ts.map +0 -1
- package/dist/interactive/commands/workflow.js +0 -56
- package/dist/interactive/commands/workflow.js.map +0 -1
- package/dist/interactive/escape-tracker.d.ts +0 -37
- package/dist/interactive/escape-tracker.d.ts.map +0 -1
- package/dist/interactive/escape-tracker.js +0 -52
- package/dist/interactive/escape-tracker.js.map +0 -1
- package/dist/interactive/handlers.d.ts +0 -24
- package/dist/interactive/handlers.d.ts.map +0 -1
- package/dist/interactive/handlers.js +0 -191
- package/dist/interactive/handlers.js.map +0 -1
- package/dist/interactive/history-manager.d.ts +0 -45
- package/dist/interactive/history-manager.d.ts.map +0 -1
- package/dist/interactive/history-manager.js +0 -91
- package/dist/interactive/history-manager.js.map +0 -1
- package/dist/interactive/index.d.ts +0 -8
- package/dist/interactive/index.d.ts.map +0 -1
- package/dist/interactive/index.js +0 -8
- package/dist/interactive/index.js.map +0 -1
- package/dist/interactive/ink/components/App.d.ts +0 -16
- package/dist/interactive/ink/components/App.d.ts.map +0 -1
- package/dist/interactive/ink/components/App.js +0 -123
- package/dist/interactive/ink/components/App.js.map +0 -1
- package/dist/interactive/ink/components/AskUserQuestion.d.ts +0 -16
- package/dist/interactive/ink/components/AskUserQuestion.d.ts.map +0 -1
- package/dist/interactive/ink/components/AskUserQuestion.js +0 -139
- package/dist/interactive/ink/components/AskUserQuestion.js.map +0 -1
- package/dist/interactive/ink/components/Header.d.ts +0 -20
- package/dist/interactive/ink/components/Header.d.ts.map +0 -1
- package/dist/interactive/ink/components/Header.js +0 -7
- package/dist/interactive/ink/components/Header.js.map +0 -1
- package/dist/interactive/ink/components/HelpView.d.ts +0 -13
- package/dist/interactive/ink/components/HelpView.d.ts.map +0 -1
- package/dist/interactive/ink/components/HelpView.js +0 -45
- package/dist/interactive/ink/components/HelpView.js.map +0 -1
- package/dist/interactive/ink/components/IterationLimit.d.ts +0 -19
- package/dist/interactive/ink/components/IterationLimit.d.ts.map +0 -1
- package/dist/interactive/ink/components/IterationLimit.js +0 -59
- package/dist/interactive/ink/components/IterationLimit.js.map +0 -1
- package/dist/interactive/ink/components/ModalRouter.d.ts +0 -11
- package/dist/interactive/ink/components/ModalRouter.d.ts.map +0 -1
- package/dist/interactive/ink/components/ModalRouter.js +0 -71
- package/dist/interactive/ink/components/ModalRouter.js.map +0 -1
- package/dist/interactive/ink/components/PermissionPrompt.d.ts +0 -17
- package/dist/interactive/ink/components/PermissionPrompt.d.ts.map +0 -1
- package/dist/interactive/ink/components/PermissionPrompt.js +0 -102
- package/dist/interactive/ink/components/PermissionPrompt.js.map +0 -1
- package/dist/interactive/ink/components/PromptInput.d.ts +0 -26
- package/dist/interactive/ink/components/PromptInput.d.ts.map +0 -1
- package/dist/interactive/ink/components/PromptInput.js +0 -70
- package/dist/interactive/ink/components/PromptInput.js.map +0 -1
- package/dist/interactive/ink/components/Spinner.d.ts +0 -14
- package/dist/interactive/ink/components/Spinner.d.ts.map +0 -1
- package/dist/interactive/ink/components/Spinner.js +0 -8
- package/dist/interactive/ink/components/Spinner.js.map +0 -1
- package/dist/interactive/ink/components/StreamingOutput.d.ts +0 -25
- package/dist/interactive/ink/components/StreamingOutput.d.ts.map +0 -1
- package/dist/interactive/ink/components/StreamingOutput.js +0 -8
- package/dist/interactive/ink/components/StreamingOutput.js.map +0 -1
- package/dist/interactive/ink/components/UserInputPrompt.d.ts +0 -18
- package/dist/interactive/ink/components/UserInputPrompt.d.ts.map +0 -1
- package/dist/interactive/ink/components/UserInputPrompt.js +0 -30
- package/dist/interactive/ink/components/UserInputPrompt.js.map +0 -1
- package/dist/interactive/ink/components/WorkflowSelector.d.ts +0 -18
- package/dist/interactive/ink/components/WorkflowSelector.d.ts.map +0 -1
- package/dist/interactive/ink/components/WorkflowSelector.js +0 -65
- package/dist/interactive/ink/components/WorkflowSelector.js.map +0 -1
- package/dist/interactive/ink/constants.d.ts +0 -8
- package/dist/interactive/ink/constants.d.ts.map +0 -1
- package/dist/interactive/ink/constants.js +0 -8
- package/dist/interactive/ink/constants.js.map +0 -1
- package/dist/interactive/ink/context/AppContext.d.ts +0 -26
- package/dist/interactive/ink/context/AppContext.d.ts.map +0 -1
- package/dist/interactive/ink/context/AppContext.js +0 -30
- package/dist/interactive/ink/context/AppContext.js.map +0 -1
- package/dist/interactive/ink/context/appReducer.d.ts +0 -13
- package/dist/interactive/ink/context/appReducer.d.ts.map +0 -1
- package/dist/interactive/ink/context/appReducer.js +0 -183
- package/dist/interactive/ink/context/appReducer.js.map +0 -1
- package/dist/interactive/ink/context/types.d.ts +0 -144
- package/dist/interactive/ink/context/types.d.ts.map +0 -1
- package/dist/interactive/ink/context/types.js +0 -5
- package/dist/interactive/ink/context/types.js.map +0 -1
- package/dist/interactive/ink/hooks/keyDetection.d.ts +0 -116
- package/dist/interactive/ink/hooks/keyDetection.d.ts.map +0 -1
- package/dist/interactive/ink/hooks/keyDetection.js +0 -183
- package/dist/interactive/ink/hooks/keyDetection.js.map +0 -1
- package/dist/interactive/ink/hooks/multilineInputLogic.d.ts +0 -50
- package/dist/interactive/ink/hooks/multilineInputLogic.d.ts.map +0 -1
- package/dist/interactive/ink/hooks/multilineInputLogic.js +0 -150
- package/dist/interactive/ink/hooks/multilineInputLogic.js.map +0 -1
- package/dist/interactive/ink/hooks/useCommands.d.ts +0 -20
- package/dist/interactive/ink/hooks/useCommands.d.ts.map +0 -1
- package/dist/interactive/ink/hooks/useCommands.js +0 -129
- package/dist/interactive/ink/hooks/useCommands.js.map +0 -1
- package/dist/interactive/ink/hooks/useHistory.d.ts +0 -28
- package/dist/interactive/ink/hooks/useHistory.d.ts.map +0 -1
- package/dist/interactive/ink/hooks/useHistory.js +0 -59
- package/dist/interactive/ink/hooks/useHistory.js.map +0 -1
- package/dist/interactive/ink/hooks/useMultilineInput.d.ts +0 -49
- package/dist/interactive/ink/hooks/useMultilineInput.d.ts.map +0 -1
- package/dist/interactive/ink/hooks/useMultilineInput.js +0 -106
- package/dist/interactive/ink/hooks/useMultilineInput.js.map +0 -1
- package/dist/interactive/ink/hooks/usePermissionHandlers.d.ts +0 -16
- package/dist/interactive/ink/hooks/usePermissionHandlers.d.ts.map +0 -1
- package/dist/interactive/ink/hooks/usePermissionHandlers.js +0 -172
- package/dist/interactive/ink/hooks/usePermissionHandlers.js.map +0 -1
- package/dist/interactive/ink/hooks/useRawKeypress.d.ts +0 -41
- package/dist/interactive/ink/hooks/useRawKeypress.d.ts.map +0 -1
- package/dist/interactive/ink/hooks/useRawKeypress.js +0 -79
- package/dist/interactive/ink/hooks/useRawKeypress.js.map +0 -1
- package/dist/interactive/ink/hooks/useTaskQueue.d.ts +0 -32
- package/dist/interactive/ink/hooks/useTaskQueue.d.ts.map +0 -1
- package/dist/interactive/ink/hooks/useTaskQueue.js +0 -68
- package/dist/interactive/ink/hooks/useTaskQueue.js.map +0 -1
- package/dist/interactive/ink/hooks/useWorkflow.d.ts +0 -45
- package/dist/interactive/ink/hooks/useWorkflow.d.ts.map +0 -1
- package/dist/interactive/ink/hooks/useWorkflow.js +0 -93
- package/dist/interactive/ink/hooks/useWorkflow.js.map +0 -1
- package/dist/interactive/ink/hooks/useWorkflowExecution.d.ts +0 -14
- package/dist/interactive/ink/hooks/useWorkflowExecution.d.ts.map +0 -1
- package/dist/interactive/ink/hooks/useWorkflowExecution.js +0 -144
- package/dist/interactive/ink/hooks/useWorkflowExecution.js.map +0 -1
- package/dist/interactive/ink/index.d.ts +0 -30
- package/dist/interactive/ink/index.d.ts.map +0 -1
- package/dist/interactive/ink/index.js +0 -33
- package/dist/interactive/ink/index.js.map +0 -1
- package/dist/interactive/ink/utils/workflow.d.ts +0 -11
- package/dist/interactive/ink/utils/workflow.d.ts.map +0 -1
- package/dist/interactive/ink/utils/workflow.js +0 -19
- package/dist/interactive/ink/utils/workflow.js.map +0 -1
- package/dist/interactive/input-buffer.d.ts +0 -67
- package/dist/interactive/input-buffer.d.ts.map +0 -1
- package/dist/interactive/input-buffer.js +0 -162
- package/dist/interactive/input-buffer.js.map +0 -1
- package/dist/interactive/input-handlers.d.ts +0 -50
- package/dist/interactive/input-handlers.d.ts.map +0 -1
- package/dist/interactive/input-handlers.js +0 -170
- package/dist/interactive/input-handlers.js.map +0 -1
- package/dist/interactive/input.d.ts +0 -43
- package/dist/interactive/input.d.ts.map +0 -1
- package/dist/interactive/input.js +0 -74
- package/dist/interactive/input.js.map +0 -1
- package/dist/interactive/keyDetection.d.ts +0 -85
- package/dist/interactive/keyDetection.d.ts.map +0 -1
- package/dist/interactive/keyDetection.js +0 -167
- package/dist/interactive/keyDetection.js.map +0 -1
- package/dist/interactive/multilineInputLogic.d.ts +0 -30
- package/dist/interactive/multilineInputLogic.d.ts.map +0 -1
- package/dist/interactive/multilineInputLogic.js +0 -143
- package/dist/interactive/multilineInputLogic.js.map +0 -1
- package/dist/interactive/passthrough.d.ts +0 -30
- package/dist/interactive/passthrough.d.ts.map +0 -1
- package/dist/interactive/passthrough.js +0 -94
- package/dist/interactive/passthrough.js.map +0 -1
- package/dist/interactive/permission.d.ts +0 -33
- package/dist/interactive/permission.d.ts.map +0 -1
- package/dist/interactive/permission.js +0 -231
- package/dist/interactive/permission.js.map +0 -1
- package/dist/interactive/prompt.d.ts.map +0 -1
- package/dist/interactive/prompt.js.map +0 -1
- package/dist/interactive/repl.d.ts +0 -13
- package/dist/interactive/repl.d.ts.map +0 -1
- package/dist/interactive/repl.js +0 -202
- package/dist/interactive/repl.js.map +0 -1
- package/dist/interactive/types.d.ts +0 -35
- package/dist/interactive/types.d.ts.map +0 -1
- package/dist/interactive/types.js +0 -5
- package/dist/interactive/types.js.map +0 -1
- package/dist/interactive/ui.d.ts +0 -16
- package/dist/interactive/ui.d.ts.map +0 -1
- package/dist/interactive/ui.js +0 -122
- package/dist/interactive/ui.js.map +0 -1
- package/dist/interactive/user-input.d.ts +0 -26
- package/dist/interactive/user-input.d.ts.map +0 -1
- package/dist/interactive/user-input.js +0 -115
- package/dist/interactive/user-input.js.map +0 -1
- package/dist/interactive/workflow-executor.d.ts +0 -20
- package/dist/interactive/workflow-executor.d.ts.map +0 -1
- package/dist/interactive/workflow-executor.js +0 -200
- package/dist/interactive/workflow-executor.js.map +0 -1
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Custom hook for multiline input handling
|
|
3
|
-
*
|
|
4
|
-
* Uses useRawKeypress exclusively for all key input handling.
|
|
5
|
-
* The state transformation logic is in multilineInputLogic.ts.
|
|
6
|
-
*
|
|
7
|
-
* This design eliminates the dual-handling approach (useRawKeypress + useInput)
|
|
8
|
-
* which was prone to timing issues and race conditions.
|
|
9
|
-
*/
|
|
10
|
-
import { type MultilineInputState } from './multilineInputLogic.js';
|
|
11
|
-
import { type KeyAction } from './useRawKeypress.js';
|
|
12
|
-
export type { MultilineInputState } from './multilineInputLogic.js';
|
|
13
|
-
export interface UseMultilineInputOptions {
|
|
14
|
-
/** Callback when input is submitted */
|
|
15
|
-
onSubmit: (input: string) => void;
|
|
16
|
-
/** Callback when input is cancelled (Ctrl+C) */
|
|
17
|
-
onCancel?: () => void;
|
|
18
|
-
/** Whether input is disabled */
|
|
19
|
-
disabled?: boolean;
|
|
20
|
-
/** Whether the component is focused */
|
|
21
|
-
isFocused: boolean;
|
|
22
|
-
/** Custom key handlers to run before default handling */
|
|
23
|
-
onKeyAction?: (action: KeyAction) => boolean;
|
|
24
|
-
}
|
|
25
|
-
export interface UseMultilineInputResult extends MultilineInputState {
|
|
26
|
-
/** Set all lines (for history navigation) */
|
|
27
|
-
setLines: (lines: string[]) => void;
|
|
28
|
-
/** Set current line index */
|
|
29
|
-
setCurrentLine: (line: number) => void;
|
|
30
|
-
/** Set cursor position */
|
|
31
|
-
setCursor: (pos: number) => void;
|
|
32
|
-
/** Reset input to empty state */
|
|
33
|
-
reset: () => void;
|
|
34
|
-
/** Get full input as single string */
|
|
35
|
-
getFullInput: () => string;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Hook for multiline text input with keyboard navigation
|
|
39
|
-
*
|
|
40
|
-
* Controls:
|
|
41
|
-
* - Enter: Submit input
|
|
42
|
-
* - Shift+Enter, Option+Enter, Ctrl+O: Add new line
|
|
43
|
-
* - Ctrl+J: Submit (legacy)
|
|
44
|
-
* - Ctrl+C: Cancel
|
|
45
|
-
* - Arrow keys: Navigate
|
|
46
|
-
* - Backspace: Delete character or merge lines
|
|
47
|
-
*/
|
|
48
|
-
export declare function useMultilineInput(options: UseMultilineInputOptions): UseMultilineInputResult;
|
|
49
|
-
//# sourceMappingURL=useMultilineInput.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMultilineInput.d.ts","sourceRoot":"","sources":["../../../../src/interactive/ink/hooks/useMultilineInput.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,KAAK,mBAAmB,EAUzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrE,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,WAAW,wBAAwB;IACvC,uCAAuC;IACvC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,yDAAyD;IACzD,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC;CAC9C;AAED,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,6CAA6C;IAC7C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACpC,6BAA6B;IAC7B,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,0BAA0B;IAC1B,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,iCAAiC;IACjC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,sCAAsC;IACtC,YAAY,EAAE,MAAM,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,uBAAuB,CA4F5F"}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Custom hook for multiline input handling
|
|
3
|
-
*
|
|
4
|
-
* Uses useRawKeypress exclusively for all key input handling.
|
|
5
|
-
* The state transformation logic is in multilineInputLogic.ts.
|
|
6
|
-
*
|
|
7
|
-
* This design eliminates the dual-handling approach (useRawKeypress + useInput)
|
|
8
|
-
* which was prone to timing issues and race conditions.
|
|
9
|
-
*/
|
|
10
|
-
import { useState, useCallback } from 'react';
|
|
11
|
-
import { handleNewLine, handleCharacterInput, handleBackspace, handleLeftArrow, handleRightArrow, handleUpArrow, handleDownArrow, getFullInput, createInitialState, } from './multilineInputLogic.js';
|
|
12
|
-
import { useRawKeypress } from './useRawKeypress.js';
|
|
13
|
-
/**
|
|
14
|
-
* Hook for multiline text input with keyboard navigation
|
|
15
|
-
*
|
|
16
|
-
* Controls:
|
|
17
|
-
* - Enter: Submit input
|
|
18
|
-
* - Shift+Enter, Option+Enter, Ctrl+O: Add new line
|
|
19
|
-
* - Ctrl+J: Submit (legacy)
|
|
20
|
-
* - Ctrl+C: Cancel
|
|
21
|
-
* - Arrow keys: Navigate
|
|
22
|
-
* - Backspace: Delete character or merge lines
|
|
23
|
-
*/
|
|
24
|
-
export function useMultilineInput(options) {
|
|
25
|
-
const { onSubmit, onCancel, disabled = false, isFocused, onKeyAction } = options;
|
|
26
|
-
const [state, setState] = useState(createInitialState);
|
|
27
|
-
const reset = useCallback(() => {
|
|
28
|
-
setState(createInitialState());
|
|
29
|
-
}, []);
|
|
30
|
-
const getCurrentFullInput = useCallback(() => {
|
|
31
|
-
return getFullInput(state);
|
|
32
|
-
}, [state]);
|
|
33
|
-
// Handler for newline
|
|
34
|
-
const handleNewLineAction = useCallback(() => {
|
|
35
|
-
setState(prev => handleNewLine(prev));
|
|
36
|
-
}, []);
|
|
37
|
-
// Handler for submit
|
|
38
|
-
const handleSubmitAction = useCallback(() => {
|
|
39
|
-
const fullInput = getFullInput(state);
|
|
40
|
-
if (fullInput) {
|
|
41
|
-
onSubmit(fullInput);
|
|
42
|
-
setState(createInitialState());
|
|
43
|
-
}
|
|
44
|
-
}, [state, onSubmit]);
|
|
45
|
-
// Handler for cancel
|
|
46
|
-
const handleCancelAction = useCallback(() => {
|
|
47
|
-
onCancel?.();
|
|
48
|
-
}, [onCancel]);
|
|
49
|
-
// Handler for character input
|
|
50
|
-
const handleCharacterAction = useCallback((char) => {
|
|
51
|
-
setState(prev => handleCharacterInput(prev, char));
|
|
52
|
-
}, []);
|
|
53
|
-
// Handler for backspace
|
|
54
|
-
const handleBackspaceAction = useCallback(() => {
|
|
55
|
-
setState(prev => handleBackspace(prev));
|
|
56
|
-
}, []);
|
|
57
|
-
// Handler for navigation
|
|
58
|
-
const handleNavigationAction = useCallback((direction) => {
|
|
59
|
-
switch (direction) {
|
|
60
|
-
case 'up':
|
|
61
|
-
setState(prev => handleUpArrow(prev));
|
|
62
|
-
break;
|
|
63
|
-
case 'down':
|
|
64
|
-
setState(prev => handleDownArrow(prev));
|
|
65
|
-
break;
|
|
66
|
-
case 'left':
|
|
67
|
-
setState(prev => handleLeftArrow(prev));
|
|
68
|
-
break;
|
|
69
|
-
case 'right':
|
|
70
|
-
setState(prev => handleRightArrow(prev));
|
|
71
|
-
break;
|
|
72
|
-
}
|
|
73
|
-
}, []);
|
|
74
|
-
// Handler for key actions (allows custom interception)
|
|
75
|
-
const handleKeyActionWrapper = useCallback((action) => {
|
|
76
|
-
// Allow custom handlers to intercept
|
|
77
|
-
if (onKeyAction) {
|
|
78
|
-
const handled = onKeyAction(action);
|
|
79
|
-
if (handled)
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
// Default handling is done via individual callbacks
|
|
83
|
-
}, [onKeyAction]);
|
|
84
|
-
// Use raw keypress for all key input handling
|
|
85
|
-
useRawKeypress({
|
|
86
|
-
isActive: isFocused && !disabled,
|
|
87
|
-
onNewLine: handleNewLineAction,
|
|
88
|
-
onSubmit: handleSubmitAction,
|
|
89
|
-
onCancel: handleCancelAction,
|
|
90
|
-
onCharacter: handleCharacterAction,
|
|
91
|
-
onBackspace: handleBackspaceAction,
|
|
92
|
-
onNavigation: handleNavigationAction,
|
|
93
|
-
onKeyAction: handleKeyActionWrapper,
|
|
94
|
-
});
|
|
95
|
-
return {
|
|
96
|
-
lines: state.lines,
|
|
97
|
-
currentLine: state.currentLine,
|
|
98
|
-
cursor: state.cursor,
|
|
99
|
-
setLines: (lines) => setState(prev => ({ ...prev, lines })),
|
|
100
|
-
setCurrentLine: (currentLine) => setState(prev => ({ ...prev, currentLine })),
|
|
101
|
-
setCursor: (cursor) => setState(prev => ({ ...prev, cursor })),
|
|
102
|
-
reset,
|
|
103
|
-
getFullInput: getCurrentFullInput,
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
//# sourceMappingURL=useMultilineInput.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMultilineInput.js","sourceRoot":"","sources":["../../../../src/interactive/ink/hooks/useMultilineInput.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Permission and user input handlers hook
|
|
3
|
-
*/
|
|
4
|
-
import type { PermissionHandler, AskUserQuestionHandler } from '../../../claude/process.js';
|
|
5
|
-
import type { UserInputRequest, IterationLimitRequest } from '../../../workflow/engine.js';
|
|
6
|
-
export interface PermissionHandlersResult {
|
|
7
|
-
handlePermissionRequest: PermissionHandler;
|
|
8
|
-
handleAskUserQuestion: AskUserQuestionHandler;
|
|
9
|
-
handleUserInput: (request: UserInputRequest) => Promise<string | null>;
|
|
10
|
-
handleIterationLimit: (request: IterationLimitRequest) => Promise<number | null>;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Hook providing permission and user input handlers
|
|
14
|
-
*/
|
|
15
|
-
export declare function usePermissionHandlers(): PermissionHandlersResult;
|
|
16
|
-
//# sourceMappingURL=usePermissionHandlers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usePermissionHandlers.d.ts","sourceRoot":"","sources":["../../../../src/interactive/ink/hooks/usePermissionHandlers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAA2C,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAErI,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAmC3F,MAAM,WAAW,wBAAwB;IACvC,uBAAuB,EAAE,iBAAiB,CAAC;IAC3C,qBAAqB,EAAE,sBAAsB,CAAC;IAC9C,eAAe,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvE,oBAAoB,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAClF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,wBAAwB,CAsJhE"}
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Permission and user input handlers hook
|
|
3
|
-
*/
|
|
4
|
-
import { useCallback } from 'react';
|
|
5
|
-
import { useApp } from '../context/AppContext.js';
|
|
6
|
-
import { DEFAULT_ADDITIONAL_ITERATIONS } from '../constants.js';
|
|
7
|
-
/**
|
|
8
|
-
* Escape special characters in permission rule patterns.
|
|
9
|
-
* These characters have special meaning in permission matching and must be escaped.
|
|
10
|
-
*/
|
|
11
|
-
function escapePermissionPattern(str) {
|
|
12
|
-
// Escape characters that have special meaning in permission rules:
|
|
13
|
-
// ( ) - grouping
|
|
14
|
-
// * - wildcard
|
|
15
|
-
// \ - escape character itself
|
|
16
|
-
return str.replace(/[\\()*]/g, '\\$&');
|
|
17
|
-
}
|
|
18
|
-
/** Build permission rule for the tool with specific args */
|
|
19
|
-
function buildPermissionRuleExact(toolName, input) {
|
|
20
|
-
if (toolName === 'Bash') {
|
|
21
|
-
const command = input.command || '';
|
|
22
|
-
// Escape special characters for exact match
|
|
23
|
-
return `Bash(${escapePermissionPattern(command)})`;
|
|
24
|
-
}
|
|
25
|
-
return toolName;
|
|
26
|
-
}
|
|
27
|
-
/** Build permission rule for the tool command (any args) */
|
|
28
|
-
function buildPermissionRuleCommand(toolName, input) {
|
|
29
|
-
if (toolName === 'Bash') {
|
|
30
|
-
const command = input.command || '';
|
|
31
|
-
const firstWord = command.split(/\s+/)[0] || command;
|
|
32
|
-
return `Bash(${firstWord}*)`;
|
|
33
|
-
}
|
|
34
|
-
// For other tools, allow all uses
|
|
35
|
-
return `${toolName}(*)`;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Hook providing permission and user input handlers
|
|
39
|
-
*/
|
|
40
|
-
export function usePermissionHandlers() {
|
|
41
|
-
const { state, dispatch, setResolver, clearResolver } = useApp();
|
|
42
|
-
// Handle permission requests
|
|
43
|
-
const handlePermissionRequest = useCallback(async (request) => {
|
|
44
|
-
// In sacrifice mode, auto-approve
|
|
45
|
-
if (state.sacrificeMode) {
|
|
46
|
-
return { behavior: 'allow' };
|
|
47
|
-
}
|
|
48
|
-
return new Promise((resolve) => {
|
|
49
|
-
const handleResponse = (response) => {
|
|
50
|
-
dispatch({ type: 'HIDE_MODAL' });
|
|
51
|
-
clearResolver('permission');
|
|
52
|
-
switch (response) {
|
|
53
|
-
case 'allow':
|
|
54
|
-
resolve({ behavior: 'allow' });
|
|
55
|
-
break;
|
|
56
|
-
case 'deny':
|
|
57
|
-
resolve({ behavior: 'deny', message: 'User denied permission' });
|
|
58
|
-
break;
|
|
59
|
-
case 'always': {
|
|
60
|
-
// Allow this exact tool+args
|
|
61
|
-
const rule = buildPermissionRuleExact(request.toolName, request.input);
|
|
62
|
-
const updatedPermissions = [
|
|
63
|
-
{
|
|
64
|
-
type: 'addRules',
|
|
65
|
-
rules: [{ toolName: request.toolName, ruleContent: rule }],
|
|
66
|
-
behavior: 'allow',
|
|
67
|
-
destination: 'session',
|
|
68
|
-
},
|
|
69
|
-
];
|
|
70
|
-
resolve({ behavior: 'allow', updatedPermissions });
|
|
71
|
-
break;
|
|
72
|
-
}
|
|
73
|
-
case 'always_command': {
|
|
74
|
-
// Allow this command with any args
|
|
75
|
-
const rule = buildPermissionRuleCommand(request.toolName, request.input);
|
|
76
|
-
const updatedPermissions = [
|
|
77
|
-
{
|
|
78
|
-
type: 'addRules',
|
|
79
|
-
rules: [{ toolName: request.toolName, ruleContent: rule }],
|
|
80
|
-
behavior: 'allow',
|
|
81
|
-
destination: 'session',
|
|
82
|
-
},
|
|
83
|
-
];
|
|
84
|
-
resolve({ behavior: 'allow', updatedPermissions });
|
|
85
|
-
break;
|
|
86
|
-
}
|
|
87
|
-
case 'sacrifice':
|
|
88
|
-
// Enable sacrifice mode and allow
|
|
89
|
-
dispatch({ type: 'TOGGLE_SACRIFICE_MODE' });
|
|
90
|
-
resolve({ behavior: 'allow' });
|
|
91
|
-
break;
|
|
92
|
-
default:
|
|
93
|
-
resolve({ behavior: 'deny', message: 'Unknown response' });
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
setResolver('permission', handleResponse);
|
|
97
|
-
dispatch({
|
|
98
|
-
type: 'SHOW_MODAL',
|
|
99
|
-
payload: { type: 'permission', request },
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
}, [state.sacrificeMode, dispatch, setResolver, clearResolver]);
|
|
103
|
-
// Handle AskUserQuestion
|
|
104
|
-
const handleAskUserQuestion = useCallback(async (input) => {
|
|
105
|
-
// In sacrifice mode, return empty answers
|
|
106
|
-
if (state.sacrificeMode) {
|
|
107
|
-
return {};
|
|
108
|
-
}
|
|
109
|
-
return new Promise((resolve) => {
|
|
110
|
-
const handleComplete = (answers) => {
|
|
111
|
-
dispatch({ type: 'HIDE_MODAL' });
|
|
112
|
-
clearResolver('askUserQuestion');
|
|
113
|
-
resolve(answers);
|
|
114
|
-
};
|
|
115
|
-
setResolver('askUserQuestion', handleComplete);
|
|
116
|
-
dispatch({
|
|
117
|
-
type: 'SHOW_MODAL',
|
|
118
|
-
payload: { type: 'askUserQuestion', input },
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
}, [state.sacrificeMode, dispatch, setResolver, clearResolver]);
|
|
122
|
-
// Handle user input request (blocked state)
|
|
123
|
-
const handleUserInput = useCallback(async (request) => {
|
|
124
|
-
// In sacrifice mode, auto-skip
|
|
125
|
-
if (state.sacrificeMode) {
|
|
126
|
-
return null;
|
|
127
|
-
}
|
|
128
|
-
return new Promise((resolve) => {
|
|
129
|
-
const handleSubmit = (input) => {
|
|
130
|
-
dispatch({ type: 'HIDE_MODAL' });
|
|
131
|
-
clearResolver('userInput');
|
|
132
|
-
resolve(input);
|
|
133
|
-
};
|
|
134
|
-
setResolver('userInput', handleSubmit);
|
|
135
|
-
dispatch({
|
|
136
|
-
type: 'SHOW_MODAL',
|
|
137
|
-
payload: { type: 'userInput', step: request.step, response: request.response },
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
}, [state.sacrificeMode, dispatch, setResolver, clearResolver]);
|
|
141
|
-
// Handle iteration limit
|
|
142
|
-
const handleIterationLimit = useCallback(async (request) => {
|
|
143
|
-
// In sacrifice mode, auto-continue
|
|
144
|
-
if (state.sacrificeMode) {
|
|
145
|
-
return DEFAULT_ADDITIONAL_ITERATIONS;
|
|
146
|
-
}
|
|
147
|
-
return new Promise((resolve) => {
|
|
148
|
-
const handleDecision = (additional) => {
|
|
149
|
-
dispatch({ type: 'HIDE_MODAL' });
|
|
150
|
-
clearResolver('iterationLimit');
|
|
151
|
-
resolve(additional);
|
|
152
|
-
};
|
|
153
|
-
setResolver('iterationLimit', handleDecision);
|
|
154
|
-
dispatch({
|
|
155
|
-
type: 'SHOW_MODAL',
|
|
156
|
-
payload: {
|
|
157
|
-
type: 'iterationLimit',
|
|
158
|
-
currentIteration: request.currentIteration,
|
|
159
|
-
maxIterations: request.maxIterations,
|
|
160
|
-
currentStep: request.currentStep,
|
|
161
|
-
},
|
|
162
|
-
});
|
|
163
|
-
});
|
|
164
|
-
}, [state.sacrificeMode, dispatch, setResolver, clearResolver]);
|
|
165
|
-
return {
|
|
166
|
-
handlePermissionRequest,
|
|
167
|
-
handleAskUserQuestion,
|
|
168
|
-
handleUserInput,
|
|
169
|
-
handleIterationLimit,
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
//# sourceMappingURL=usePermissionHandlers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usePermissionHandlers.js","sourceRoot":"","sources":["../../../../src/interactive/ink/hooks/usePermissionHandlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Raw keypress handling hook for ink
|
|
3
|
-
*
|
|
4
|
-
* Uses Node.js stdin keypress events directly to capture escape sequences
|
|
5
|
-
* and modifier combinations that ink's useInput cannot detect.
|
|
6
|
-
*
|
|
7
|
-
* Key detection logic is in keyDetection.ts for reusability and testing.
|
|
8
|
-
*/
|
|
9
|
-
import { type KeyAction } from './keyDetection.js';
|
|
10
|
-
export type { RawKeyEvent, KeyAction } from './keyDetection.js';
|
|
11
|
-
export { EscapeSequenceTracker, isNewLineTrigger, isSubmitTrigger, isCancelTrigger, isNavigationKey, isBackspaceKey, classifyKeyEvent, } from './keyDetection.js';
|
|
12
|
-
export interface UseRawKeypressOptions {
|
|
13
|
-
/** Whether the hook is active */
|
|
14
|
-
isActive: boolean;
|
|
15
|
-
/** Callback for newline trigger */
|
|
16
|
-
onNewLine?: () => void;
|
|
17
|
-
/** Callback for submit trigger (plain Enter) */
|
|
18
|
-
onSubmit?: () => void;
|
|
19
|
-
/** Callback for cancel (Ctrl+C) */
|
|
20
|
-
onCancel?: () => void;
|
|
21
|
-
/** Callback for character input */
|
|
22
|
-
onCharacter?: (char: string) => void;
|
|
23
|
-
/** Callback for backspace */
|
|
24
|
-
onBackspace?: () => void;
|
|
25
|
-
/** Callback for navigation */
|
|
26
|
-
onNavigation?: (direction: 'up' | 'down' | 'left' | 'right') => void;
|
|
27
|
-
/** Callback for any key action (for debugging) */
|
|
28
|
-
onKeyAction?: (action: KeyAction) => void;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Hook to handle raw keypress events from stdin
|
|
32
|
-
*
|
|
33
|
-
* This provides accurate detection of:
|
|
34
|
-
* - Shift+Enter, Option+Enter, Ctrl+Enter for newline
|
|
35
|
-
* - iTerm2-style Option+Enter (Escape + Enter)
|
|
36
|
-
* - Escape sequences (\x1b\r, \x1bOM)
|
|
37
|
-
* - Ctrl+O for newline
|
|
38
|
-
* - All character input, navigation, and backspace
|
|
39
|
-
*/
|
|
40
|
-
export declare function useRawKeypress(options: UseRawKeypressOptions): void;
|
|
41
|
-
//# sourceMappingURL=useRawKeypress.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useRawKeypress.d.ts","sourceRoot":"","sources":["../../../../src/interactive/ink/hooks/useRawKeypress.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAEL,KAAK,SAAS,EAIf,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,qBAAqB;IACpC,iCAAiC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,mCAAmC;IACnC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,6BAA6B;IAC7B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,8BAA8B;IAC9B,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,KAAK,IAAI,CAAC;IACrE,kDAAkD;IAClD,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;CAC3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CA2EnE"}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Raw keypress handling hook for ink
|
|
3
|
-
*
|
|
4
|
-
* Uses Node.js stdin keypress events directly to capture escape sequences
|
|
5
|
-
* and modifier combinations that ink's useInput cannot detect.
|
|
6
|
-
*
|
|
7
|
-
* Key detection logic is in keyDetection.ts for reusability and testing.
|
|
8
|
-
*/
|
|
9
|
-
import { useEffect, useRef, useCallback } from 'react';
|
|
10
|
-
import { emitKeypressEvents } from 'node:readline';
|
|
11
|
-
import { EscapeSequenceTracker, classifyKeyEvent, KEYPRESS_INIT_DELAY_MS, } from './keyDetection.js';
|
|
12
|
-
export { EscapeSequenceTracker, isNewLineTrigger, isSubmitTrigger, isCancelTrigger, isNavigationKey, isBackspaceKey, classifyKeyEvent, } from './keyDetection.js';
|
|
13
|
-
/**
|
|
14
|
-
* Hook to handle raw keypress events from stdin
|
|
15
|
-
*
|
|
16
|
-
* This provides accurate detection of:
|
|
17
|
-
* - Shift+Enter, Option+Enter, Ctrl+Enter for newline
|
|
18
|
-
* - iTerm2-style Option+Enter (Escape + Enter)
|
|
19
|
-
* - Escape sequences (\x1b\r, \x1bOM)
|
|
20
|
-
* - Ctrl+O for newline
|
|
21
|
-
* - All character input, navigation, and backspace
|
|
22
|
-
*/
|
|
23
|
-
export function useRawKeypress(options) {
|
|
24
|
-
const { isActive, onNewLine, onSubmit, onCancel, onCharacter, onBackspace, onNavigation, onKeyAction, } = options;
|
|
25
|
-
// Use ref to maintain escape tracker across renders
|
|
26
|
-
const escapeTrackerRef = useRef(new EscapeSequenceTracker());
|
|
27
|
-
const handleKeypress = useCallback((str, key) => {
|
|
28
|
-
if (!key || !isActive)
|
|
29
|
-
return;
|
|
30
|
-
const action = classifyKeyEvent(str, key, escapeTrackerRef.current);
|
|
31
|
-
onKeyAction?.(action);
|
|
32
|
-
switch (action.type) {
|
|
33
|
-
case 'newline':
|
|
34
|
-
onNewLine?.();
|
|
35
|
-
break;
|
|
36
|
-
case 'submit':
|
|
37
|
-
onSubmit?.();
|
|
38
|
-
break;
|
|
39
|
-
case 'cancel':
|
|
40
|
-
onCancel?.();
|
|
41
|
-
break;
|
|
42
|
-
case 'character':
|
|
43
|
-
onCharacter?.(action.char);
|
|
44
|
-
break;
|
|
45
|
-
case 'backspace':
|
|
46
|
-
onBackspace?.();
|
|
47
|
-
break;
|
|
48
|
-
case 'navigation':
|
|
49
|
-
onNavigation?.(action.direction);
|
|
50
|
-
break;
|
|
51
|
-
// 'escape' and 'ignored' are not dispatched to callbacks
|
|
52
|
-
}
|
|
53
|
-
}, [isActive, onNewLine, onSubmit, onCancel, onCharacter, onBackspace, onNavigation, onKeyAction]);
|
|
54
|
-
// Store handleKeypress in a ref to avoid recreating listener on every render
|
|
55
|
-
const handleKeypressRef = useRef(handleKeypress);
|
|
56
|
-
handleKeypressRef.current = handleKeypress;
|
|
57
|
-
useEffect(() => {
|
|
58
|
-
// Safety check: ensure stdin exists and is a TTY
|
|
59
|
-
if (!isActive || !process.stdin?.isTTY)
|
|
60
|
-
return;
|
|
61
|
-
// Wrapper function that calls current handler via ref
|
|
62
|
-
const listener = (str, key) => {
|
|
63
|
-
handleKeypressRef.current(str, key);
|
|
64
|
-
};
|
|
65
|
-
// Delay enabling keypress events to allow Ink to complete initial render
|
|
66
|
-
const timeoutId = setTimeout(() => {
|
|
67
|
-
// Enable keypress events on stdin
|
|
68
|
-
// Note: emitKeypressEvents is idempotent - safe to call multiple times
|
|
69
|
-
emitKeypressEvents(process.stdin);
|
|
70
|
-
// Add listener
|
|
71
|
-
process.stdin.on('keypress', listener);
|
|
72
|
-
}, KEYPRESS_INIT_DELAY_MS);
|
|
73
|
-
return () => {
|
|
74
|
-
clearTimeout(timeoutId);
|
|
75
|
-
process.stdin.removeListener('keypress', listener);
|
|
76
|
-
};
|
|
77
|
-
}, [isActive]); // Only depend on isActive, not handleKeypress
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=useRawKeypress.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useRawKeypress.js","sourceRoot":"","sources":["../../../../src/interactive/ink/hooks/useRawKeypress.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAGL,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAqB3B;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,OAA8B;IAC3D,MAAM,EACJ,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,GAAG,OAAO,CAAC;IAEZ,oDAAoD;IACpD,MAAM,gBAAgB,GAAG,MAAM,CAAwB,IAAI,qBAAqB,EAAE,CAAC,CAAC;IAEpF,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,GAAuB,EAAE,GAA4B,EAAE,EAAE;QACxD,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE9B,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACpE,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC;QAEtB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,SAAS;gBACZ,SAAS,EAAE,EAAE,CAAC;gBACd,MAAM;YACR,KAAK,QAAQ;gBACX,QAAQ,EAAE,EAAE,CAAC;gBACb,MAAM;YACR,KAAK,QAAQ;gBACX,QAAQ,EAAE,EAAE,CAAC;gBACb,MAAM;YACR,KAAK,WAAW;gBACd,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC3B,MAAM;YACR,KAAK,WAAW;gBACd,WAAW,EAAE,EAAE,CAAC;gBAChB,MAAM;YACR,KAAK,YAAY;gBACf,YAAY,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACjC,MAAM;YACR,yDAAyD;QAC3D,CAAC;IACH,CAAC,EACD,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC,CAC/F,CAAC;IAEF,6EAA6E;IAC7E,MAAM,iBAAiB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,iBAAiB,CAAC,OAAO,GAAG,cAAc,CAAC;IAE3C,SAAS,CAAC,GAAG,EAAE;QACb,iDAAiD;QACjD,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK;YAAE,OAAO;QAE/C,sDAAsD;QACtD,MAAM,QAAQ,GAAG,CAAC,GAAuB,EAAE,GAA4B,EAAE,EAAE;YACzE,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC,CAAC;QAEF,yEAAyE;QACzE,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,kCAAkC;YAClC,uEAAuE;YACvE,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAElC,eAAe;YACf,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACzC,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAE3B,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,8CAA8C;AAChE,CAAC"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Task queue management hook
|
|
3
|
-
*
|
|
4
|
-
* Manages sequential execution of multiple tasks.
|
|
5
|
-
*/
|
|
6
|
-
/** Task queue item */
|
|
7
|
-
export interface TaskQueueItem {
|
|
8
|
-
name: string;
|
|
9
|
-
content: string;
|
|
10
|
-
}
|
|
11
|
-
interface UseTaskQueueOptions {
|
|
12
|
-
/** Callback to execute a task */
|
|
13
|
-
executeTask: (name: string, content: string) => void;
|
|
14
|
-
/** Whether the current task is being processed */
|
|
15
|
-
isProcessing: boolean;
|
|
16
|
-
}
|
|
17
|
-
interface UseTaskQueueResult {
|
|
18
|
-
/** Enqueue tasks for execution (clears existing queue and starts fresh) */
|
|
19
|
-
enqueueTasks: (tasks: TaskQueueItem[]) => void;
|
|
20
|
-
/** Number of remaining tasks in the queue */
|
|
21
|
-
remainingCount: number;
|
|
22
|
-
/** Clear the task queue */
|
|
23
|
-
clearQueue: () => void;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Hook for managing task queue execution
|
|
27
|
-
*
|
|
28
|
-
* Handles sequential task execution with race condition prevention.
|
|
29
|
-
*/
|
|
30
|
-
export declare function useTaskQueue({ executeTask, isProcessing, }: UseTaskQueueOptions): UseTaskQueueResult;
|
|
31
|
-
export {};
|
|
32
|
-
//# sourceMappingURL=useTaskQueue.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useTaskQueue.d.ts","sourceRoot":"","sources":["../../../../src/interactive/ink/hooks/useTaskQueue.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,sBAAsB;AACtB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,mBAAmB;IAC3B,iCAAiC;IACjC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,kDAAkD;IAClD,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,UAAU,kBAAkB;IAC1B,2EAA2E;IAC3E,YAAY,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;IAC/C,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,WAAW,EACX,YAAY,GACb,EAAE,mBAAmB,GAAG,kBAAkB,CA4D1C"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Task queue management hook
|
|
3
|
-
*
|
|
4
|
-
* Manages sequential execution of multiple tasks.
|
|
5
|
-
*/
|
|
6
|
-
import { useState, useCallback, useEffect, useRef } from 'react';
|
|
7
|
-
/**
|
|
8
|
-
* Hook for managing task queue execution
|
|
9
|
-
*
|
|
10
|
-
* Handles sequential task execution with race condition prevention.
|
|
11
|
-
*/
|
|
12
|
-
export function useTaskQueue({ executeTask, isProcessing, }) {
|
|
13
|
-
const [queue, setQueue] = useState([]);
|
|
14
|
-
const isExecutingRef = useRef(false);
|
|
15
|
-
// Track if we've scheduled next task execution to prevent double execution
|
|
16
|
-
const pendingExecutionRef = useRef(false);
|
|
17
|
-
// Use ref to avoid stale closure in useEffect
|
|
18
|
-
const executeTaskRef = useRef(executeTask);
|
|
19
|
-
useEffect(() => {
|
|
20
|
-
executeTaskRef.current = executeTask;
|
|
21
|
-
}, [executeTask]);
|
|
22
|
-
// Enqueue tasks and start execution
|
|
23
|
-
const enqueueTasks = useCallback((tasks) => {
|
|
24
|
-
if (tasks.length === 0)
|
|
25
|
-
return;
|
|
26
|
-
// Set queue first, then schedule execution in next effect cycle
|
|
27
|
-
isExecutingRef.current = true;
|
|
28
|
-
pendingExecutionRef.current = true;
|
|
29
|
-
setQueue(tasks);
|
|
30
|
-
}, []);
|
|
31
|
-
// Clear queue
|
|
32
|
-
const clearQueue = useCallback(() => {
|
|
33
|
-
setQueue([]);
|
|
34
|
-
isExecutingRef.current = false;
|
|
35
|
-
pendingExecutionRef.current = false;
|
|
36
|
-
}, []);
|
|
37
|
-
// Execute first task when queue is initially populated
|
|
38
|
-
useEffect(() => {
|
|
39
|
-
if (pendingExecutionRef.current && queue.length > 0) {
|
|
40
|
-
pendingExecutionRef.current = false;
|
|
41
|
-
const [first, ...rest] = queue;
|
|
42
|
-
if (first) {
|
|
43
|
-
setQueue(rest);
|
|
44
|
-
executeTaskRef.current(first.name, first.content);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}, [queue]);
|
|
48
|
-
// Execute next task when current completes
|
|
49
|
-
useEffect(() => {
|
|
50
|
-
// Guard: Only proceed if we were executing, not pending, and processing has completed
|
|
51
|
-
if (!isProcessing && isExecutingRef.current && !pendingExecutionRef.current && queue.length > 0) {
|
|
52
|
-
const [next, ...rest] = queue;
|
|
53
|
-
if (next) {
|
|
54
|
-
setQueue(rest);
|
|
55
|
-
executeTaskRef.current(next.name, next.content);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
else if (!isProcessing && queue.length === 0 && !pendingExecutionRef.current) {
|
|
59
|
-
isExecutingRef.current = false;
|
|
60
|
-
}
|
|
61
|
-
}, [isProcessing, queue]);
|
|
62
|
-
return {
|
|
63
|
-
enqueueTasks,
|
|
64
|
-
remainingCount: queue.length,
|
|
65
|
-
clearQueue,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
//# sourceMappingURL=useTaskQueue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useTaskQueue.js","sourceRoot":"","sources":["../../../../src/interactive/ink/hooks/useTaskQueue.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAwBjE;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,WAAW,EACX,YAAY,GACQ;IACpB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAkB,EAAE,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACrC,2EAA2E;IAC3E,MAAM,mBAAmB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE1C,8CAA8C;IAC9C,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAC3C,SAAS,CAAC,GAAG,EAAE;QACb,cAAc,CAAC,OAAO,GAAG,WAAW,CAAC;IACvC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,oCAAoC;IACpC,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,KAAsB,EAAE,EAAE;QAC1D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE/B,gEAAgE;QAChE,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAC9B,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAC;QACnC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,cAAc;IACd,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,cAAc,CAAC,OAAO,GAAG,KAAK,CAAC;QAC/B,mBAAmB,CAAC,OAAO,GAAG,KAAK,CAAC;IACtC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,uDAAuD;IACvD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,mBAAmB,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,mBAAmB,CAAC,OAAO,GAAG,KAAK,CAAC;YACpC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;YAC/B,IAAI,KAAK,EAAE,CAAC;gBACV,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACf,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,2CAA2C;IAC3C,SAAS,CAAC,GAAG,EAAE;QACb,sFAAsF;QACtF,IAAI,CAAC,YAAY,IAAI,cAAc,CAAC,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChG,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;YAC9B,IAAI,IAAI,EAAE,CAAC;gBACT,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACf,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;YAC/E,cAAc,CAAC,OAAO,GAAG,KAAK,CAAC;QACjC,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;IAE1B,OAAO;QACL,YAAY;QACZ,cAAc,EAAE,KAAK,CAAC,MAAM;QAC5B,UAAU;KACX,CAAC;AACJ,CAAC"}
|