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,122 +0,0 @@
1
- /**
2
- * Interactive mode UI functions
3
- *
4
- * Provides display and visual functions for the interactive REPL.
5
- */
6
- import chalk from 'chalk';
7
- import { header, info, error, divider } from '../utils/ui.js';
8
- import { loadAllWorkflows } from '../config/index.js';
9
- /** Clear screen */
10
- export function clearScreen() {
11
- console.clear();
12
- }
13
- /** Print welcome banner */
14
- export function printWelcome(state) {
15
- console.log(chalk.bold.cyan('═'.repeat(60)));
16
- console.log(chalk.bold.cyan(' TAKT Interactive Mode'));
17
- console.log(chalk.bold.cyan('═'.repeat(60)));
18
- console.log(chalk.gray(`Project: ${state.cwd}`));
19
- console.log(chalk.gray(`Workflow: ${state.workflowName}`));
20
- if (state.sacrificeMyPcMode) {
21
- console.log(chalk.red.bold('Mode: SACRIFICE-MY-PC 💀 (auto-approve all)'));
22
- }
23
- console.log(chalk.gray('Type /help for commands, /quit to exit'));
24
- console.log(chalk.bold.cyan('═'.repeat(60)));
25
- console.log();
26
- }
27
- /** Print help message */
28
- export function printHelp() {
29
- header('TAKT Commands');
30
- console.log(`
31
- ${chalk.bold.yellow('Basic Operations:')}
32
- [message] Send message to current workflow
33
- Up/Down Arrow Navigate input history (persisted across sessions)
34
- Enter Submit input (execute)
35
-
36
- ${chalk.bold.cyan('Multi-line input:')}
37
- 末尾に \\ 行末にバックスラッシュで継続 (mac Terminal.app推奨)
38
- Ctrl+J 改行を挿入 (全ターミナルで動作)
39
- Ctrl+Enter 改行を挿入 (対応ターミナルのみ)
40
- Option+Enter 改行を挿入 (iTerm2等)
41
-
42
- /help, /h Show this help
43
- /quit, /exit, /q Exit takt
44
-
45
- ${chalk.bold.yellow('Workflow Management:')}
46
- /switch, /sw Switch workflow (interactive selection)
47
- /workflow [name] Show or change current workflow
48
- /workflows List available workflows
49
-
50
- ${chalk.bold.yellow('Session Management:')}
51
- /clear Clear session and start fresh
52
- /cls Clear screen only (keep session)
53
- /reset Full reset (session + workflow)
54
- /status Show current session info
55
- /history Show conversation history
56
-
57
- ${chalk.bold.yellow('Agent Operations:')}
58
- /agents List available agents
59
- /agent <name> Run a single agent with next input
60
-
61
- ${chalk.bold.yellow('Task Execution:')}
62
- /task, /t Show task list
63
- /task run Execute next task
64
- /task run <name> Execute specified task
65
-
66
- ${chalk.bold.yellow('Mode Control:')}
67
- /sacrifice, /yolo Toggle sacrifice-my-pc mode (auto-approve all)
68
- /safe Disable sacrifice mode
69
-
70
- ${chalk.bold.yellow('Workflows:')}
71
- default Coder -> Architect loop (default)
72
-
73
- ${chalk.bold.cyan('Examples:')}
74
- Implement a login feature
75
- Review src/auth.ts and suggest improvements
76
- Add tests for the previous code
77
- `);
78
- }
79
- /** Show workflow selector UI */
80
- export async function selectWorkflow(state, rl) {
81
- const workflows = loadAllWorkflows();
82
- const workflowList = Array.from(workflows.entries()).sort((a, b) => a[0].localeCompare(b[0]));
83
- if (workflowList.length === 0) {
84
- error('No workflows available');
85
- return null;
86
- }
87
- console.log();
88
- divider('═', 60);
89
- console.log(chalk.bold.magenta(' Workflow Selection'));
90
- divider('═', 60);
91
- console.log();
92
- workflowList.forEach(([name, workflow], index) => {
93
- const current = name === state.workflowName ? chalk.green(' (current)') : '';
94
- const desc = workflow.description || `${name} workflow`;
95
- console.log(chalk.cyan(` [${index + 1}] ${name}${current}`));
96
- console.log(chalk.gray(` ${desc}`));
97
- });
98
- console.log(chalk.yellow(` [0] Cancel`));
99
- console.log();
100
- divider('═', 60);
101
- return new Promise((resolve) => {
102
- rl.question(chalk.cyan('Select workflow (number)> '), (input) => {
103
- const trimmed = input.trim();
104
- if (!trimmed || trimmed === '0') {
105
- info('Cancelled');
106
- resolve(null);
107
- return;
108
- }
109
- const index = parseInt(trimmed, 10) - 1;
110
- const entry = workflowList[index];
111
- if (index >= 0 && entry) {
112
- const [name] = entry;
113
- resolve(name);
114
- }
115
- else {
116
- error('Invalid selection');
117
- resolve(null);
118
- }
119
- });
120
- });
121
- }
122
- //# sourceMappingURL=ui.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/interactive/ui.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- /**
2
- * User input request handlers for workflow execution
3
- *
4
- * Handles user input prompts when an agent is blocked
5
- * or iteration limits are reached.
6
- */
7
- import type { InputHistoryManager } from './input.js';
8
- import { createReadlineInterface } from './input.js';
9
- import type { UserInputRequest, IterationLimitRequest } from '../workflow/engine.js';
10
- /**
11
- * Request user input for blocked workflow step.
12
- *
13
- * Displays the blocked message and prompts the user for additional information.
14
- * Returns null if the user cancels or provides empty input.
15
- */
16
- export declare function requestUserInput(request: UserInputRequest, rl: ReturnType<typeof createReadlineInterface>, historyManager: InputHistoryManager): Promise<string | null>;
17
- /**
18
- * Handle iteration limit reached.
19
- * Ask user if they want to continue and how many additional iterations.
20
- *
21
- * Returns:
22
- * - number: The number of additional iterations to continue
23
- * - null: User chose to stop the workflow
24
- */
25
- export declare function requestIterationContinue(request: IterationLimitRequest, rl: ReturnType<typeof createReadlineInterface>, historyManager: InputHistoryManager): Promise<number | null>;
26
- //# sourceMappingURL=user-input.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-input.d.ts","sourceRoot":"","sources":["../../src/interactive/user-input.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAqB,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAIrF;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,gBAAgB,EACzB,EAAE,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,EAC9C,cAAc,EAAE,mBAAmB,GAClC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoCxB;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,qBAAqB,EAC9B,EAAE,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,EAC9C,cAAc,EAAE,mBAAmB,GAClC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2DxB"}
@@ -1,115 +0,0 @@
1
- /**
2
- * User input request handlers for workflow execution
3
- *
4
- * Handles user input prompts when an agent is blocked
5
- * or iteration limits are reached.
6
- */
7
- import chalk from 'chalk';
8
- import { multiLineQuestion } from './input.js';
9
- import { info } from '../utils/ui.js';
10
- import { playInfoSound } from '../utils/notification.js';
11
- /**
12
- * Request user input for blocked workflow step.
13
- *
14
- * Displays the blocked message and prompts the user for additional information.
15
- * Returns null if the user cancels or provides empty input.
16
- */
17
- export async function requestUserInput(request, rl, historyManager) {
18
- // Play notification sound to alert user
19
- playInfoSound();
20
- console.log();
21
- console.log(chalk.yellow('━'.repeat(60)));
22
- console.log(chalk.yellow.bold('❓ エージェントからの質問'));
23
- console.log(chalk.gray(`ステップ: ${request.step.name} (${request.step.agentDisplayName})`));
24
- console.log();
25
- console.log(chalk.white(request.response.content));
26
- console.log(chalk.yellow('━'.repeat(60)));
27
- console.log();
28
- console.log(chalk.cyan('回答を入力してください(キャンセル: Ctrl+C)'));
29
- console.log();
30
- return new Promise((resolve) => {
31
- multiLineQuestion(rl, {
32
- promptStr: chalk.magenta('回答> '),
33
- onCtrlC: () => {
34
- console.log();
35
- info('ユーザー入力がキャンセルされました');
36
- resolve(null);
37
- return true; // Cancel input
38
- },
39
- historyManager,
40
- }).then((input) => {
41
- if (input.trim() === '') {
42
- info('空の入力のためキャンセルされました');
43
- resolve(null);
44
- }
45
- else {
46
- resolve(input);
47
- }
48
- }).catch(() => {
49
- resolve(null);
50
- });
51
- });
52
- }
53
- /**
54
- * Handle iteration limit reached.
55
- * Ask user if they want to continue and how many additional iterations.
56
- *
57
- * Returns:
58
- * - number: The number of additional iterations to continue
59
- * - null: User chose to stop the workflow
60
- */
61
- export async function requestIterationContinue(request, rl, historyManager) {
62
- // Play notification sound to alert user
63
- playInfoSound();
64
- console.log();
65
- console.log(chalk.yellow('━'.repeat(60)));
66
- console.log(chalk.yellow.bold('⏸ イテレーション上限に達しました'));
67
- console.log(chalk.gray(`現在: ${request.currentIteration}/${request.maxIterations} イテレーション`));
68
- console.log(chalk.gray(`ステップ: ${request.currentStep}`));
69
- console.log(chalk.yellow('━'.repeat(60)));
70
- console.log();
71
- console.log(chalk.cyan('続けますか?'));
72
- console.log(chalk.gray(' - 数字を入力: 追加イテレーション数(例: 5)'));
73
- console.log(chalk.gray(' - Enter: デフォルト10イテレーション追加'));
74
- console.log(chalk.gray(' - Ctrl+C または "n": 終了'));
75
- console.log();
76
- return new Promise((resolve) => {
77
- multiLineQuestion(rl, {
78
- promptStr: chalk.magenta('追加イテレーション> '),
79
- onCtrlC: () => {
80
- console.log();
81
- info('ワークフローを終了します');
82
- resolve(null);
83
- return true;
84
- },
85
- historyManager,
86
- }).then((input) => {
87
- const trimmed = input.trim().toLowerCase();
88
- // User wants to stop
89
- if (trimmed === 'n' || trimmed === 'no' || trimmed === 'q' || trimmed === 'quit') {
90
- info('ワークフローを終了します');
91
- resolve(null);
92
- return;
93
- }
94
- // Empty input = default 10 iterations
95
- if (trimmed === '' || trimmed === 'y' || trimmed === 'yes') {
96
- info('10 イテレーション追加します');
97
- resolve(10);
98
- return;
99
- }
100
- // Try to parse as number
101
- const num = parseInt(trimmed, 10);
102
- if (!isNaN(num) && num > 0 && num <= 100) {
103
- info(`${num} イテレーション追加します`);
104
- resolve(num);
105
- return;
106
- }
107
- // Invalid input, treat as continue with default
108
- info('10 イテレーション追加します');
109
- resolve(10);
110
- }).catch(() => {
111
- resolve(null);
112
- });
113
- });
114
- }
115
- //# sourceMappingURL=user-input.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-input.js","sourceRoot":"","sources":["../../src/interactive/user-input.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- /**
2
- * Workflow executor for interactive mode
3
- *
4
- * Handles the execution of multi-agent workflows,
5
- * including streaming output and state management.
6
- */
7
- import { createReadlineInterface } from './input.js';
8
- import type { InteractiveState } from './types.js';
9
- /**
10
- * Execute multi-agent workflow with streaming output.
11
- *
12
- * This is the main workflow execution function that:
13
- * - Loads and validates the workflow configuration
14
- * - Sets up stream handlers for real-time output
15
- * - Manages agent sessions for conversation continuity
16
- * - Handles blocked states and user input requests
17
- * - Logs session data for debugging
18
- */
19
- export declare function executeMultiAgentWorkflow(message: string, state: InteractiveState, rl: ReturnType<typeof createReadlineInterface>, requestedIterations?: number): Promise<string>;
20
- //# sourceMappingURL=workflow-executor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow-executor.d.ts","sourceRoot":"","sources":["../../src/interactive/workflow-executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8BH,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAYrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAInD;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,gBAAgB,EACvB,EAAE,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,EAC9C,mBAAmB,GAAE,MAAW,GAC/B,OAAO,CAAC,MAAM,CAAC,CA2LjB"}
@@ -1,200 +0,0 @@
1
- /**
2
- * Workflow executor for interactive mode
3
- *
4
- * Handles the execution of multi-agent workflows,
5
- * including streaming output and state management.
6
- */
7
- import chalk from 'chalk';
8
- import { loadWorkflow, getBuiltinWorkflow, } from '../config/index.js';
9
- import { loadAgentSessions, updateAgentSession, } from '../config/paths.js';
10
- import { WorkflowEngine } from '../workflow/engine.js';
11
- import { info, error, success, StreamDisplay, } from '../utils/ui.js';
12
- import { playWarningSound, notifySuccess, notifyError, notifyWarning, } from '../utils/notification.js';
13
- import { createSessionLog, addToSessionLog, finalizeSessionLog, saveSessionLog, } from '../utils/session.js';
14
- import { createInteractivePermissionHandler, createPermissionState, resetPermissionStateForIteration, } from './permission.js';
15
- import { createAgentAnswerHandler, createAskUserQuestionHandler, createSacrificeModeQuestionHandler, } from './handlers.js';
16
- import { requestUserInput, requestIterationContinue } from './user-input.js';
17
- /**
18
- * Execute multi-agent workflow with streaming output.
19
- *
20
- * This is the main workflow execution function that:
21
- * - Loads and validates the workflow configuration
22
- * - Sets up stream handlers for real-time output
23
- * - Manages agent sessions for conversation continuity
24
- * - Handles blocked states and user input requests
25
- * - Logs session data for debugging
26
- */
27
- export async function executeMultiAgentWorkflow(message, state, rl, requestedIterations = 10) {
28
- const builtin = getBuiltinWorkflow(state.workflowName);
29
- let config = builtin || loadWorkflow(state.workflowName);
30
- if (!config) {
31
- error(`Workflow "${state.workflowName}" not found.`);
32
- info('Available workflows: /workflow list');
33
- return `[ERROR] Workflow "${state.workflowName}" not found`;
34
- }
35
- // Apply requested iteration count
36
- if (requestedIterations !== config.maxIterations) {
37
- config = { ...config, maxIterations: requestedIterations };
38
- }
39
- const sessionLog = createSessionLog(message, state.cwd, config.name);
40
- // Track current display for streaming
41
- const displayRef = { current: null };
42
- // Create stream handler that delegates to current display
43
- const streamHandler = (event) => {
44
- if (!displayRef.current)
45
- return;
46
- if (event.type === 'result')
47
- return;
48
- displayRef.current.createHandler()(event);
49
- };
50
- // Create user input handler for blocked state
51
- const userInputHandler = async (request) => {
52
- // In sacrifice mode, auto-skip blocked states
53
- if (state.sacrificeMyPcMode) {
54
- info('[SACRIFICE MODE] Auto-skipping blocked state');
55
- return null;
56
- }
57
- // Flush current display before prompting
58
- if (displayRef.current) {
59
- displayRef.current.flushThinking();
60
- displayRef.current.flushText();
61
- displayRef.current = null;
62
- }
63
- return requestUserInput(request, rl, state.historyManager);
64
- };
65
- // Create iteration limit handler
66
- // Note: Even in sacrifice mode, we ask user for iteration continuation
67
- // to prevent runaway execution
68
- const iterationLimitHandler = async (request) => {
69
- // Flush current display before prompting
70
- if (displayRef.current) {
71
- displayRef.current.flushThinking();
72
- displayRef.current.flushText();
73
- displayRef.current = null;
74
- }
75
- return requestIterationContinue(request, rl, state.historyManager);
76
- };
77
- // Load saved agent sessions for session resumption
78
- const savedSessions = loadAgentSessions(state.cwd);
79
- // Session update handler - persist session IDs when they change
80
- const sessionUpdateHandler = (agentName, sessionId) => {
81
- updateAgentSession(state.cwd, agentName, sessionId);
82
- };
83
- // Create permission state for iteration-scoped permissions
84
- const permissionState = createPermissionState();
85
- // Create interactive permission handler (sacrifice mode uses bypassPermissions)
86
- const permissionHandler = state.sacrificeMyPcMode
87
- ? undefined // No handler needed - we'll use bypassPermissions mode
88
- : createInteractivePermissionHandler(rl, permissionState);
89
- // Create AskUserQuestion handler
90
- // Priority: sacrifice mode > answerAgent > interactive user input
91
- let askUserQuestionHandler;
92
- if (state.sacrificeMyPcMode) {
93
- askUserQuestionHandler = createSacrificeModeQuestionHandler();
94
- }
95
- else if (config.answerAgent) {
96
- // Use another agent to answer questions
97
- info(`質問回答エージェント: ${config.answerAgent}`);
98
- askUserQuestionHandler = createAgentAnswerHandler(config.answerAgent, state.cwd);
99
- }
100
- else {
101
- // Interactive user input
102
- askUserQuestionHandler = createAskUserQuestionHandler(rl, state.historyManager);
103
- }
104
- const engine = new WorkflowEngine(config, state.cwd, message, {
105
- onStream: streamHandler,
106
- onUserInput: userInputHandler,
107
- initialSessions: savedSessions,
108
- onSessionUpdate: sessionUpdateHandler,
109
- onPermissionRequest: permissionHandler,
110
- initialUserInputs: state.sharedUserInputs,
111
- onAskUserQuestion: askUserQuestionHandler,
112
- onIterationLimit: iterationLimitHandler,
113
- bypassPermissions: state.sacrificeMyPcMode,
114
- });
115
- engine.on('step:start', (step, iteration) => {
116
- // Reset iteration-scoped permission state at start of each step
117
- resetPermissionStateForIteration(permissionState);
118
- info(`[${iteration}/${config.maxIterations}] ${step.name} (${step.agentDisplayName})`);
119
- displayRef.current = new StreamDisplay(step.agentDisplayName);
120
- });
121
- engine.on('step:complete', (step, stepResponse) => {
122
- if (displayRef.current) {
123
- displayRef.current.flushThinking();
124
- displayRef.current.flushText();
125
- displayRef.current = null;
126
- }
127
- console.log();
128
- addToSessionLog(sessionLog, step.name, stepResponse);
129
- });
130
- // Handle user input event (after user provides input for blocked step)
131
- engine.on('step:user_input', (step, userInput) => {
132
- console.log();
133
- info(`ユーザー入力を受け取りました。${step.name} を再実行します...`);
134
- console.log(chalk.gray(`入力内容: ${userInput.slice(0, 100)}${userInput.length > 100 ? '...' : ''}`));
135
- console.log();
136
- });
137
- let wasInterrupted = false;
138
- let loopDetected = false;
139
- let wasBlocked = false;
140
- engine.on('workflow:abort', (_, reason) => {
141
- if (displayRef.current) {
142
- displayRef.current.flushThinking();
143
- displayRef.current.flushText();
144
- displayRef.current = null;
145
- }
146
- if (reason?.includes('interrupted')) {
147
- wasInterrupted = true;
148
- }
149
- if (reason?.includes('Loop detected')) {
150
- loopDetected = true;
151
- }
152
- if (reason?.includes('blocked') || reason?.includes('no user input')) {
153
- wasBlocked = true;
154
- }
155
- });
156
- try {
157
- const finalState = await engine.run();
158
- const statusVal = finalState.status === 'completed' ? 'completed' : 'aborted';
159
- finalizeSessionLog(sessionLog, statusVal);
160
- saveSessionLog(sessionLog, state.sessionId, state.cwd);
161
- if (finalState.status === 'completed') {
162
- success('Workflow completed!');
163
- notifySuccess('TAKT', `ワークフロー完了 (${finalState.iteration} iterations)`);
164
- return '[WORKFLOW COMPLETE]';
165
- }
166
- else if (wasInterrupted) {
167
- info('Workflow interrupted by user');
168
- // User intentionally interrupted - sound only, no system notification needed
169
- playWarningSound();
170
- return '[WORKFLOW INTERRUPTED]';
171
- }
172
- else if (loopDetected) {
173
- error('Workflow aborted due to loop detection');
174
- info('Tip: ループが検出されました。タスクを見直すか、/agent coder を直接使用してください。');
175
- notifyError('TAKT', 'ループ検出により中断されました');
176
- return '[WORKFLOW ABORTED: Loop detected]';
177
- }
178
- else if (wasBlocked) {
179
- info('Workflow aborted: エージェントがブロックされ、ユーザー入力が提供されませんでした');
180
- notifyWarning('TAKT', 'ユーザー入力待ちで中断されました');
181
- return '[WORKFLOW ABORTED: Blocked]';
182
- }
183
- else {
184
- error('Workflow aborted');
185
- notifyError('TAKT', 'ワークフローが中断されました');
186
- return '[WORKFLOW ABORTED]';
187
- }
188
- }
189
- catch (err) {
190
- if (displayRef.current) {
191
- displayRef.current.flushThinking();
192
- displayRef.current.flushText();
193
- }
194
- const errMsg = `[ERROR] ${err instanceof Error ? err.message : String(err)}`;
195
- error(errMsg);
196
- notifyError('TAKT', `エラー: ${err instanceof Error ? err.message : String(err)}`);
197
- return errMsg;
198
- }
199
- }
200
- //# sourceMappingURL=workflow-executor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow-executor.js","sourceRoot":"","sources":["../../src/interactive/workflow-executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,YAAY,EACZ,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAqD,MAAM,uBAAuB,CAAC;AAC1G,OAAO,EACL,IAAI,EACJ,KAAK,EACL,OAAO,EACP,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,kCAAkC,EAClC,qBAAqB,EACrB,gCAAgC,GACjC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,kCAAkC,GACnC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAK7E;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAe,EACf,KAAuB,EACvB,EAA8C,EAC9C,sBAA8B,EAAE;IAEhC,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACvD,IAAI,MAAM,GACR,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,aAAa,KAAK,CAAC,YAAY,cAAc,CAAC,CAAC;QACrD,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAC5C,OAAO,qBAAqB,KAAK,CAAC,YAAY,aAAa,CAAC;IAC9D,CAAC;IAED,kCAAkC;IAClC,IAAI,mBAAmB,KAAK,MAAM,CAAC,aAAa,EAAE,CAAC;QACjD,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,mBAAmB,EAAE,CAAC;IAC7D,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAErE,sCAAsC;IACtC,MAAM,UAAU,GAAsC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAExE,0DAA0D;IAC1D,MAAM,aAAa,GAAG,CACpB,KAAgE,EAC1D,EAAE;QACR,IAAI,CAAC,UAAU,CAAC,OAAO;YAAE,OAAO;QAChC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO;QACpC,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,8CAA8C;IAC9C,MAAM,gBAAgB,GAAG,KAAK,EAAE,OAAyB,EAA0B,EAAE;QACnF,8CAA8C;QAC9C,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC,8CAA8C,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,yCAAyC;QACzC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YACnC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC/B,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,OAAO,gBAAgB,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAC7D,CAAC,CAAC;IAEF,iCAAiC;IACjC,uEAAuE;IACvE,+BAA+B;IAC/B,MAAM,qBAAqB,GAAG,KAAK,EAAE,OAA8B,EAA0B,EAAE;QAC7F,yCAAyC;QACzC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YACnC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC/B,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,OAAO,wBAAwB,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACrE,CAAC,CAAC;IAEF,mDAAmD;IACnD,MAAM,aAAa,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEnD,gEAAgE;IAChE,MAAM,oBAAoB,GAAG,CAAC,SAAiB,EAAE,SAAiB,EAAQ,EAAE;QAC1E,kBAAkB,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF,2DAA2D;IAC3D,MAAM,eAAe,GAAG,qBAAqB,EAAE,CAAC;IAEhD,gFAAgF;IAChF,MAAM,iBAAiB,GAAG,KAAK,CAAC,iBAAiB;QAC/C,CAAC,CAAC,SAAS,CAAE,uDAAuD;QACpE,CAAC,CAAC,kCAAkC,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;IAE5D,iCAAiC;IACjC,kEAAkE;IAClE,IAAI,sBAA8C,CAAC;IACnD,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC5B,sBAAsB,GAAG,kCAAkC,EAAE,CAAC;IAChE,CAAC;SAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QAC9B,wCAAwC;QACxC,IAAI,CAAC,eAAe,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1C,sBAAsB,GAAG,wBAAwB,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACnF,CAAC;SAAM,CAAC;QACN,yBAAyB;QACzB,sBAAsB,GAAG,4BAA4B,CAAC,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE;QAC5D,QAAQ,EAAE,aAAa;QACvB,WAAW,EAAE,gBAAgB;QAC7B,eAAe,EAAE,aAAa;QAC9B,eAAe,EAAE,oBAAoB;QACrC,mBAAmB,EAAE,iBAAiB;QACtC,iBAAiB,EAAE,KAAK,CAAC,gBAAgB;QACzC,iBAAiB,EAAE,sBAAsB;QACzC,gBAAgB,EAAE,qBAAqB;QACvC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;KAC3C,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;QAC1C,gEAAgE;QAChE,gCAAgC,CAAC,eAAe,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,SAAS,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QACvF,UAAU,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE;QAChD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YACnC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC/B,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,uEAAuE;IACvE,MAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;QAC/C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAClG,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACxC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YACnC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC/B,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,IAAI,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACpC,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,IAAI,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACtC,YAAY,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,IAAI,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACrE,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;QAEtC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,kBAAkB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC1C,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAEvD,IAAI,UAAU,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACtC,OAAO,CAAC,qBAAqB,CAAC,CAAC;YAC/B,aAAa,CAAC,MAAM,EAAE,aAAa,UAAU,CAAC,SAAS,cAAc,CAAC,CAAC;YACvE,OAAO,qBAAqB,CAAC;QAC/B,CAAC;aAAM,IAAI,cAAc,EAAE,CAAC;YAC1B,IAAI,CAAC,8BAA8B,CAAC,CAAC;YACrC,6EAA6E;YAC7E,gBAAgB,EAAE,CAAC;YACnB,OAAO,wBAAwB,CAAC;QAClC,CAAC;aAAM,IAAI,YAAY,EAAE,CAAC;YACxB,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAChD,IAAI,CAAC,qDAAqD,CAAC,CAAC;YAC5D,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;YACvC,OAAO,mCAAmC,CAAC;QAC7C,CAAC;aAAM,IAAI,UAAU,EAAE,CAAC;YACtB,IAAI,CAAC,mDAAmD,CAAC,CAAC;YAC1D,aAAa,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;YAC1C,OAAO,6BAA6B,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAC1B,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;YACtC,OAAO,oBAAoB,CAAC;QAC9B,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YACnC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACjC,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7E,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,WAAW,CAAC,MAAM,EAAE,QAAQ,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChF,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC"}