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.
Files changed (258) hide show
  1. package/dist/agents/runner.d.ts.map +1 -1
  2. package/dist/agents/runner.js +2 -1
  3. package/dist/agents/runner.js.map +1 -1
  4. package/dist/cli.d.ts +1 -0
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +7 -3
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/config.d.ts +33 -0
  9. package/dist/commands/config.d.ts.map +1 -0
  10. package/dist/commands/config.js +110 -0
  11. package/dist/commands/config.js.map +1 -0
  12. package/dist/commands/index.d.ts +1 -0
  13. package/dist/commands/index.d.ts.map +1 -1
  14. package/dist/commands/index.js +1 -0
  15. package/dist/commands/index.js.map +1 -1
  16. package/dist/commands/workflow.js +1 -1
  17. package/dist/commands/workflow.js.map +1 -1
  18. package/dist/config/initialization.js +1 -1
  19. package/dist/config/initialization.js.map +1 -1
  20. package/dist/config/projectConfig.d.ts +12 -1
  21. package/dist/config/projectConfig.d.ts.map +1 -1
  22. package/dist/config/projectConfig.js +1 -0
  23. package/dist/config/projectConfig.js.map +1 -1
  24. package/dist/{interactive/prompt.d.ts → prompt/index.d.ts} +3 -1
  25. package/dist/prompt/index.d.ts.map +1 -0
  26. package/dist/{interactive/prompt.js → prompt/index.js} +11 -1
  27. package/dist/prompt/index.js.map +1 -0
  28. package/package.json +1 -1
  29. package/dist/cli/agentExecution.d.ts +0 -16
  30. package/dist/cli/agentExecution.d.ts.map +0 -1
  31. package/dist/cli/agentExecution.js +0 -40
  32. package/dist/cli/agentExecution.js.map +0 -1
  33. package/dist/cli/help.d.ts +0 -8
  34. package/dist/cli/help.d.ts.map +0 -1
  35. package/dist/cli/help.js +0 -46
  36. package/dist/cli/help.js.map +0 -1
  37. package/dist/cli/index.d.ts +0 -8
  38. package/dist/cli/index.d.ts.map +0 -1
  39. package/dist/cli/index.js +0 -8
  40. package/dist/cli/index.js.map +0 -1
  41. package/dist/cli/taskBatch.d.ts +0 -8
  42. package/dist/cli/taskBatch.d.ts.map +0 -1
  43. package/dist/cli/taskBatch.js +0 -69
  44. package/dist/cli/taskBatch.js.map +0 -1
  45. package/dist/cli/workflowExecution.d.ts +0 -18
  46. package/dist/cli/workflowExecution.d.ts.map +0 -1
  47. package/dist/cli/workflowExecution.js +0 -112
  48. package/dist/cli/workflowExecution.js.map +0 -1
  49. package/dist/commands/agentExecution.d.ts +0 -8
  50. package/dist/commands/agentExecution.d.ts.map +0 -1
  51. package/dist/commands/agentExecution.js +0 -44
  52. package/dist/commands/agentExecution.js.map +0 -1
  53. package/dist/interactive/commands/agent.d.ts +0 -7
  54. package/dist/interactive/commands/agent.d.ts.map +0 -1
  55. package/dist/interactive/commands/agent.js +0 -65
  56. package/dist/interactive/commands/agent.js.map +0 -1
  57. package/dist/interactive/commands/basic.d.ts +0 -7
  58. package/dist/interactive/commands/basic.d.ts.map +0 -1
  59. package/dist/interactive/commands/basic.js +0 -81
  60. package/dist/interactive/commands/basic.js.map +0 -1
  61. package/dist/interactive/commands/index.d.ts +0 -12
  62. package/dist/interactive/commands/index.d.ts.map +0 -1
  63. package/dist/interactive/commands/index.js +0 -14
  64. package/dist/interactive/commands/index.js.map +0 -1
  65. package/dist/interactive/commands/registry.d.ts +0 -41
  66. package/dist/interactive/commands/registry.d.ts.map +0 -1
  67. package/dist/interactive/commands/registry.js +0 -37
  68. package/dist/interactive/commands/registry.js.map +0 -1
  69. package/dist/interactive/commands/session.d.ts +0 -7
  70. package/dist/interactive/commands/session.d.ts.map +0 -1
  71. package/dist/interactive/commands/session.js +0 -75
  72. package/dist/interactive/commands/session.js.map +0 -1
  73. package/dist/interactive/commands/task.d.ts +0 -7
  74. package/dist/interactive/commands/task.d.ts.map +0 -1
  75. package/dist/interactive/commands/task.js +0 -156
  76. package/dist/interactive/commands/task.js.map +0 -1
  77. package/dist/interactive/commands/workflow.d.ts +0 -7
  78. package/dist/interactive/commands/workflow.d.ts.map +0 -1
  79. package/dist/interactive/commands/workflow.js +0 -56
  80. package/dist/interactive/commands/workflow.js.map +0 -1
  81. package/dist/interactive/escape-tracker.d.ts +0 -37
  82. package/dist/interactive/escape-tracker.d.ts.map +0 -1
  83. package/dist/interactive/escape-tracker.js +0 -52
  84. package/dist/interactive/escape-tracker.js.map +0 -1
  85. package/dist/interactive/handlers.d.ts +0 -24
  86. package/dist/interactive/handlers.d.ts.map +0 -1
  87. package/dist/interactive/handlers.js +0 -191
  88. package/dist/interactive/handlers.js.map +0 -1
  89. package/dist/interactive/history-manager.d.ts +0 -45
  90. package/dist/interactive/history-manager.d.ts.map +0 -1
  91. package/dist/interactive/history-manager.js +0 -91
  92. package/dist/interactive/history-manager.js.map +0 -1
  93. package/dist/interactive/index.d.ts +0 -8
  94. package/dist/interactive/index.d.ts.map +0 -1
  95. package/dist/interactive/index.js +0 -8
  96. package/dist/interactive/index.js.map +0 -1
  97. package/dist/interactive/ink/components/App.d.ts +0 -16
  98. package/dist/interactive/ink/components/App.d.ts.map +0 -1
  99. package/dist/interactive/ink/components/App.js +0 -123
  100. package/dist/interactive/ink/components/App.js.map +0 -1
  101. package/dist/interactive/ink/components/AskUserQuestion.d.ts +0 -16
  102. package/dist/interactive/ink/components/AskUserQuestion.d.ts.map +0 -1
  103. package/dist/interactive/ink/components/AskUserQuestion.js +0 -139
  104. package/dist/interactive/ink/components/AskUserQuestion.js.map +0 -1
  105. package/dist/interactive/ink/components/Header.d.ts +0 -20
  106. package/dist/interactive/ink/components/Header.d.ts.map +0 -1
  107. package/dist/interactive/ink/components/Header.js +0 -7
  108. package/dist/interactive/ink/components/Header.js.map +0 -1
  109. package/dist/interactive/ink/components/HelpView.d.ts +0 -13
  110. package/dist/interactive/ink/components/HelpView.d.ts.map +0 -1
  111. package/dist/interactive/ink/components/HelpView.js +0 -45
  112. package/dist/interactive/ink/components/HelpView.js.map +0 -1
  113. package/dist/interactive/ink/components/IterationLimit.d.ts +0 -19
  114. package/dist/interactive/ink/components/IterationLimit.d.ts.map +0 -1
  115. package/dist/interactive/ink/components/IterationLimit.js +0 -59
  116. package/dist/interactive/ink/components/IterationLimit.js.map +0 -1
  117. package/dist/interactive/ink/components/ModalRouter.d.ts +0 -11
  118. package/dist/interactive/ink/components/ModalRouter.d.ts.map +0 -1
  119. package/dist/interactive/ink/components/ModalRouter.js +0 -71
  120. package/dist/interactive/ink/components/ModalRouter.js.map +0 -1
  121. package/dist/interactive/ink/components/PermissionPrompt.d.ts +0 -17
  122. package/dist/interactive/ink/components/PermissionPrompt.d.ts.map +0 -1
  123. package/dist/interactive/ink/components/PermissionPrompt.js +0 -102
  124. package/dist/interactive/ink/components/PermissionPrompt.js.map +0 -1
  125. package/dist/interactive/ink/components/PromptInput.d.ts +0 -26
  126. package/dist/interactive/ink/components/PromptInput.d.ts.map +0 -1
  127. package/dist/interactive/ink/components/PromptInput.js +0 -70
  128. package/dist/interactive/ink/components/PromptInput.js.map +0 -1
  129. package/dist/interactive/ink/components/Spinner.d.ts +0 -14
  130. package/dist/interactive/ink/components/Spinner.d.ts.map +0 -1
  131. package/dist/interactive/ink/components/Spinner.js +0 -8
  132. package/dist/interactive/ink/components/Spinner.js.map +0 -1
  133. package/dist/interactive/ink/components/StreamingOutput.d.ts +0 -25
  134. package/dist/interactive/ink/components/StreamingOutput.d.ts.map +0 -1
  135. package/dist/interactive/ink/components/StreamingOutput.js +0 -8
  136. package/dist/interactive/ink/components/StreamingOutput.js.map +0 -1
  137. package/dist/interactive/ink/components/UserInputPrompt.d.ts +0 -18
  138. package/dist/interactive/ink/components/UserInputPrompt.d.ts.map +0 -1
  139. package/dist/interactive/ink/components/UserInputPrompt.js +0 -30
  140. package/dist/interactive/ink/components/UserInputPrompt.js.map +0 -1
  141. package/dist/interactive/ink/components/WorkflowSelector.d.ts +0 -18
  142. package/dist/interactive/ink/components/WorkflowSelector.d.ts.map +0 -1
  143. package/dist/interactive/ink/components/WorkflowSelector.js +0 -65
  144. package/dist/interactive/ink/components/WorkflowSelector.js.map +0 -1
  145. package/dist/interactive/ink/constants.d.ts +0 -8
  146. package/dist/interactive/ink/constants.d.ts.map +0 -1
  147. package/dist/interactive/ink/constants.js +0 -8
  148. package/dist/interactive/ink/constants.js.map +0 -1
  149. package/dist/interactive/ink/context/AppContext.d.ts +0 -26
  150. package/dist/interactive/ink/context/AppContext.d.ts.map +0 -1
  151. package/dist/interactive/ink/context/AppContext.js +0 -30
  152. package/dist/interactive/ink/context/AppContext.js.map +0 -1
  153. package/dist/interactive/ink/context/appReducer.d.ts +0 -13
  154. package/dist/interactive/ink/context/appReducer.d.ts.map +0 -1
  155. package/dist/interactive/ink/context/appReducer.js +0 -183
  156. package/dist/interactive/ink/context/appReducer.js.map +0 -1
  157. package/dist/interactive/ink/context/types.d.ts +0 -144
  158. package/dist/interactive/ink/context/types.d.ts.map +0 -1
  159. package/dist/interactive/ink/context/types.js +0 -5
  160. package/dist/interactive/ink/context/types.js.map +0 -1
  161. package/dist/interactive/ink/hooks/keyDetection.d.ts +0 -116
  162. package/dist/interactive/ink/hooks/keyDetection.d.ts.map +0 -1
  163. package/dist/interactive/ink/hooks/keyDetection.js +0 -183
  164. package/dist/interactive/ink/hooks/keyDetection.js.map +0 -1
  165. package/dist/interactive/ink/hooks/multilineInputLogic.d.ts +0 -50
  166. package/dist/interactive/ink/hooks/multilineInputLogic.d.ts.map +0 -1
  167. package/dist/interactive/ink/hooks/multilineInputLogic.js +0 -150
  168. package/dist/interactive/ink/hooks/multilineInputLogic.js.map +0 -1
  169. package/dist/interactive/ink/hooks/useCommands.d.ts +0 -20
  170. package/dist/interactive/ink/hooks/useCommands.d.ts.map +0 -1
  171. package/dist/interactive/ink/hooks/useCommands.js +0 -129
  172. package/dist/interactive/ink/hooks/useCommands.js.map +0 -1
  173. package/dist/interactive/ink/hooks/useHistory.d.ts +0 -28
  174. package/dist/interactive/ink/hooks/useHistory.d.ts.map +0 -1
  175. package/dist/interactive/ink/hooks/useHistory.js +0 -59
  176. package/dist/interactive/ink/hooks/useHistory.js.map +0 -1
  177. package/dist/interactive/ink/hooks/useMultilineInput.d.ts +0 -49
  178. package/dist/interactive/ink/hooks/useMultilineInput.d.ts.map +0 -1
  179. package/dist/interactive/ink/hooks/useMultilineInput.js +0 -106
  180. package/dist/interactive/ink/hooks/useMultilineInput.js.map +0 -1
  181. package/dist/interactive/ink/hooks/usePermissionHandlers.d.ts +0 -16
  182. package/dist/interactive/ink/hooks/usePermissionHandlers.d.ts.map +0 -1
  183. package/dist/interactive/ink/hooks/usePermissionHandlers.js +0 -172
  184. package/dist/interactive/ink/hooks/usePermissionHandlers.js.map +0 -1
  185. package/dist/interactive/ink/hooks/useRawKeypress.d.ts +0 -41
  186. package/dist/interactive/ink/hooks/useRawKeypress.d.ts.map +0 -1
  187. package/dist/interactive/ink/hooks/useRawKeypress.js +0 -79
  188. package/dist/interactive/ink/hooks/useRawKeypress.js.map +0 -1
  189. package/dist/interactive/ink/hooks/useTaskQueue.d.ts +0 -32
  190. package/dist/interactive/ink/hooks/useTaskQueue.d.ts.map +0 -1
  191. package/dist/interactive/ink/hooks/useTaskQueue.js +0 -68
  192. package/dist/interactive/ink/hooks/useTaskQueue.js.map +0 -1
  193. package/dist/interactive/ink/hooks/useWorkflow.d.ts +0 -45
  194. package/dist/interactive/ink/hooks/useWorkflow.d.ts.map +0 -1
  195. package/dist/interactive/ink/hooks/useWorkflow.js +0 -93
  196. package/dist/interactive/ink/hooks/useWorkflow.js.map +0 -1
  197. package/dist/interactive/ink/hooks/useWorkflowExecution.d.ts +0 -14
  198. package/dist/interactive/ink/hooks/useWorkflowExecution.d.ts.map +0 -1
  199. package/dist/interactive/ink/hooks/useWorkflowExecution.js +0 -144
  200. package/dist/interactive/ink/hooks/useWorkflowExecution.js.map +0 -1
  201. package/dist/interactive/ink/index.d.ts +0 -30
  202. package/dist/interactive/ink/index.d.ts.map +0 -1
  203. package/dist/interactive/ink/index.js +0 -33
  204. package/dist/interactive/ink/index.js.map +0 -1
  205. package/dist/interactive/ink/utils/workflow.d.ts +0 -11
  206. package/dist/interactive/ink/utils/workflow.d.ts.map +0 -1
  207. package/dist/interactive/ink/utils/workflow.js +0 -19
  208. package/dist/interactive/ink/utils/workflow.js.map +0 -1
  209. package/dist/interactive/input-buffer.d.ts +0 -67
  210. package/dist/interactive/input-buffer.d.ts.map +0 -1
  211. package/dist/interactive/input-buffer.js +0 -162
  212. package/dist/interactive/input-buffer.js.map +0 -1
  213. package/dist/interactive/input-handlers.d.ts +0 -50
  214. package/dist/interactive/input-handlers.d.ts.map +0 -1
  215. package/dist/interactive/input-handlers.js +0 -170
  216. package/dist/interactive/input-handlers.js.map +0 -1
  217. package/dist/interactive/input.d.ts +0 -43
  218. package/dist/interactive/input.d.ts.map +0 -1
  219. package/dist/interactive/input.js +0 -74
  220. package/dist/interactive/input.js.map +0 -1
  221. package/dist/interactive/keyDetection.d.ts +0 -85
  222. package/dist/interactive/keyDetection.d.ts.map +0 -1
  223. package/dist/interactive/keyDetection.js +0 -167
  224. package/dist/interactive/keyDetection.js.map +0 -1
  225. package/dist/interactive/multilineInputLogic.d.ts +0 -30
  226. package/dist/interactive/multilineInputLogic.d.ts.map +0 -1
  227. package/dist/interactive/multilineInputLogic.js +0 -143
  228. package/dist/interactive/multilineInputLogic.js.map +0 -1
  229. package/dist/interactive/passthrough.d.ts +0 -30
  230. package/dist/interactive/passthrough.d.ts.map +0 -1
  231. package/dist/interactive/passthrough.js +0 -94
  232. package/dist/interactive/passthrough.js.map +0 -1
  233. package/dist/interactive/permission.d.ts +0 -33
  234. package/dist/interactive/permission.d.ts.map +0 -1
  235. package/dist/interactive/permission.js +0 -231
  236. package/dist/interactive/permission.js.map +0 -1
  237. package/dist/interactive/prompt.d.ts.map +0 -1
  238. package/dist/interactive/prompt.js.map +0 -1
  239. package/dist/interactive/repl.d.ts +0 -13
  240. package/dist/interactive/repl.d.ts.map +0 -1
  241. package/dist/interactive/repl.js +0 -202
  242. package/dist/interactive/repl.js.map +0 -1
  243. package/dist/interactive/types.d.ts +0 -35
  244. package/dist/interactive/types.d.ts.map +0 -1
  245. package/dist/interactive/types.js +0 -5
  246. package/dist/interactive/types.js.map +0 -1
  247. package/dist/interactive/ui.d.ts +0 -16
  248. package/dist/interactive/ui.d.ts.map +0 -1
  249. package/dist/interactive/ui.js +0 -122
  250. package/dist/interactive/ui.js.map +0 -1
  251. package/dist/interactive/user-input.d.ts +0 -26
  252. package/dist/interactive/user-input.d.ts.map +0 -1
  253. package/dist/interactive/user-input.js +0 -115
  254. package/dist/interactive/user-input.js.map +0 -1
  255. package/dist/interactive/workflow-executor.d.ts +0 -20
  256. package/dist/interactive/workflow-executor.d.ts.map +0 -1
  257. package/dist/interactive/workflow-executor.js +0 -200
  258. 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":"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"}
@@ -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"}