@qduc/term2 0.3.0 → 0.3.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 (230) hide show
  1. package/dist/hooks/use-model-selection.d.ts.map +1 -1
  2. package/dist/hooks/use-model-selection.js +32 -11
  3. package/dist/hooks/use-model-selection.js.map +1 -1
  4. package/dist/hooks/use-model-selection.test.js +107 -10
  5. package/dist/hooks/use-model-selection.test.js.map +1 -1
  6. package/dist/providers/ai-sdk-message-normalizer.d.ts +8 -0
  7. package/dist/providers/ai-sdk-message-normalizer.d.ts.map +1 -0
  8. package/dist/providers/ai-sdk-message-normalizer.js +70 -0
  9. package/dist/providers/ai-sdk-message-normalizer.js.map +1 -0
  10. package/dist/providers/ai-sdk-message-normalizer.test.d.ts +2 -0
  11. package/dist/providers/ai-sdk-message-normalizer.test.d.ts.map +1 -0
  12. package/dist/providers/ai-sdk-message-normalizer.test.js +195 -0
  13. package/dist/providers/ai-sdk-message-normalizer.test.js.map +1 -0
  14. package/dist/providers/ai-sdk-openai-compatible.provider.d.ts.map +1 -1
  15. package/dist/providers/ai-sdk-openai-compatible.provider.js +2 -1
  16. package/dist/providers/ai-sdk-openai-compatible.provider.js.map +1 -1
  17. package/dist/providers/ai-sdk-openrouter.provider.d.ts +16 -0
  18. package/dist/providers/ai-sdk-openrouter.provider.d.ts.map +1 -0
  19. package/dist/providers/ai-sdk-openrouter.provider.js +22 -0
  20. package/dist/providers/ai-sdk-openrouter.provider.js.map +1 -0
  21. package/dist/providers/ai-sdk-openrouter.provider.test.d.ts +2 -0
  22. package/dist/providers/ai-sdk-openrouter.provider.test.d.ts.map +1 -0
  23. package/dist/providers/ai-sdk-openrouter.provider.test.js +70 -0
  24. package/dist/providers/ai-sdk-openrouter.provider.test.js.map +1 -0
  25. package/dist/providers/openrouter.provider.js +4 -3
  26. package/dist/providers/openrouter.provider.js.map +1 -1
  27. package/dist/scripts/eval-auto-approval/dataset.d.ts +1 -1
  28. package/dist/services/stream-event-parsing.js +1 -1
  29. package/dist/services/stream-event-parsing.js.map +1 -1
  30. package/dist/services/stream-event-parsing.test.js +13 -0
  31. package/dist/services/stream-event-parsing.test.js.map +1 -1
  32. package/package.json +2 -1
  33. package/readme.md +29 -24
  34. package/dist/agent.lite-mode.test.d.ts +0 -2
  35. package/dist/agent.lite-mode.test.d.ts.map +0 -1
  36. package/dist/agent.lite-mode.test.js +0 -39
  37. package/dist/agent.lite-mode.test.js.map +0 -1
  38. package/dist/components/ModelSelectionMenu.error-tabs.test.d.ts +0 -2
  39. package/dist/components/ModelSelectionMenu.error-tabs.test.d.ts.map +0 -1
  40. package/dist/components/ModelSelectionMenu.error-tabs.test.js +0 -18
  41. package/dist/components/ModelSelectionMenu.error-tabs.test.js.map +0 -1
  42. package/dist/components/TextInput.d.ts +0 -42
  43. package/dist/components/TextInput.d.ts.map +0 -1
  44. package/dist/components/TextInput.js +0 -398
  45. package/dist/components/TextInput.js.map +0 -1
  46. package/dist/components/TextInput.test.d.ts +0 -2
  47. package/dist/components/TextInput.test.d.ts.map +0 -1
  48. package/dist/components/TextInput.test.js +0 -75
  49. package/dist/components/TextInput.test.js.map +0 -1
  50. package/dist/debug_ask_mentor.d.ts +0 -2
  51. package/dist/debug_ask_mentor.d.ts.map +0 -1
  52. package/dist/debug_ask_mentor.js +0 -73
  53. package/dist/debug_ask_mentor.js.map +0 -1
  54. package/dist/lib/shell.d.ts +0 -7
  55. package/dist/lib/shell.d.ts.map +0 -1
  56. package/dist/lib/shell.js +0 -56
  57. package/dist/lib/shell.js.map +0 -1
  58. package/dist/modes/companion/command-index.d.ts +0 -26
  59. package/dist/modes/companion/command-index.d.ts.map +0 -1
  60. package/dist/modes/companion/command-index.js +0 -50
  61. package/dist/modes/companion/command-index.js.map +0 -1
  62. package/dist/modes/companion/command-index.test.d.ts +0 -2
  63. package/dist/modes/companion/command-index.test.d.ts.map +0 -1
  64. package/dist/modes/companion/command-index.test.js +0 -86
  65. package/dist/modes/companion/command-index.test.js.map +0 -1
  66. package/dist/modes/companion/companion-app.d.ts +0 -12
  67. package/dist/modes/companion/companion-app.d.ts.map +0 -1
  68. package/dist/modes/companion/companion-app.js +0 -297
  69. package/dist/modes/companion/companion-app.js.map +0 -1
  70. package/dist/modes/companion/companion-session.d.ts +0 -63
  71. package/dist/modes/companion/companion-session.d.ts.map +0 -1
  72. package/dist/modes/companion/companion-session.js +0 -146
  73. package/dist/modes/companion/companion-session.js.map +0 -1
  74. package/dist/modes/companion/companion-session.test.d.ts +0 -2
  75. package/dist/modes/companion/companion-session.test.d.ts.map +0 -1
  76. package/dist/modes/companion/companion-session.test.js +0 -28
  77. package/dist/modes/companion/companion-session.test.js.map +0 -1
  78. package/dist/modes/companion/components/status-bar.d.ts +0 -13
  79. package/dist/modes/companion/components/status-bar.d.ts.map +0 -1
  80. package/dist/modes/companion/components/status-bar.js +0 -26
  81. package/dist/modes/companion/components/status-bar.js.map +0 -1
  82. package/dist/modes/companion/context-buffer.d.ts +0 -65
  83. package/dist/modes/companion/context-buffer.d.ts.map +0 -1
  84. package/dist/modes/companion/context-buffer.js +0 -156
  85. package/dist/modes/companion/context-buffer.js.map +0 -1
  86. package/dist/modes/companion/context-buffer.test.d.ts +0 -2
  87. package/dist/modes/companion/context-buffer.test.d.ts.map +0 -1
  88. package/dist/modes/companion/context-buffer.test.js +0 -154
  89. package/dist/modes/companion/context-buffer.test.js.map +0 -1
  90. package/dist/modes/companion/event-detector.d.ts +0 -46
  91. package/dist/modes/companion/event-detector.d.ts.map +0 -1
  92. package/dist/modes/companion/event-detector.js +0 -169
  93. package/dist/modes/companion/event-detector.js.map +0 -1
  94. package/dist/modes/companion/event-detector.test.d.ts +0 -2
  95. package/dist/modes/companion/event-detector.test.d.ts.map +0 -1
  96. package/dist/modes/companion/event-detector.test.js +0 -121
  97. package/dist/modes/companion/event-detector.test.js.map +0 -1
  98. package/dist/modes/companion/index.d.ts +0 -33
  99. package/dist/modes/companion/index.d.ts.map +0 -1
  100. package/dist/modes/companion/index.js +0 -21
  101. package/dist/modes/companion/index.js.map +0 -1
  102. package/dist/modes/companion/input-key-mapper.d.ts +0 -3
  103. package/dist/modes/companion/input-key-mapper.d.ts.map +0 -1
  104. package/dist/modes/companion/input-key-mapper.js +0 -31
  105. package/dist/modes/companion/input-key-mapper.js.map +0 -1
  106. package/dist/modes/companion/input-key-mapper.test.d.ts +0 -2
  107. package/dist/modes/companion/input-key-mapper.test.d.ts.map +0 -1
  108. package/dist/modes/companion/input-key-mapper.test.js +0 -26
  109. package/dist/modes/companion/input-key-mapper.test.js.map +0 -1
  110. package/dist/modes/companion/input-parser.d.ts +0 -53
  111. package/dist/modes/companion/input-parser.d.ts.map +0 -1
  112. package/dist/modes/companion/input-parser.js +0 -114
  113. package/dist/modes/companion/input-parser.js.map +0 -1
  114. package/dist/modes/companion/input-parser.test.d.ts +0 -2
  115. package/dist/modes/companion/input-parser.test.d.ts.map +0 -1
  116. package/dist/modes/companion/input-parser.test.js +0 -123
  117. package/dist/modes/companion/input-parser.test.js.map +0 -1
  118. package/dist/modes/companion/mode-manager.d.ts +0 -41
  119. package/dist/modes/companion/mode-manager.d.ts.map +0 -1
  120. package/dist/modes/companion/mode-manager.js +0 -56
  121. package/dist/modes/companion/mode-manager.js.map +0 -1
  122. package/dist/modes/companion/mode-manager.test.d.ts +0 -2
  123. package/dist/modes/companion/mode-manager.test.d.ts.map +0 -1
  124. package/dist/modes/companion/mode-manager.test.js +0 -65
  125. package/dist/modes/companion/mode-manager.test.js.map +0 -1
  126. package/dist/modes/companion/output-classifier.d.ts +0 -15
  127. package/dist/modes/companion/output-classifier.d.ts.map +0 -1
  128. package/dist/modes/companion/output-classifier.js +0 -77
  129. package/dist/modes/companion/output-classifier.js.map +0 -1
  130. package/dist/modes/companion/output-classifier.test.d.ts +0 -2
  131. package/dist/modes/companion/output-classifier.test.d.ts.map +0 -1
  132. package/dist/modes/companion/output-classifier.test.js +0 -133
  133. package/dist/modes/companion/output-classifier.test.js.map +0 -1
  134. package/dist/modes/companion/pty-wrapper.d.ts +0 -46
  135. package/dist/modes/companion/pty-wrapper.d.ts.map +0 -1
  136. package/dist/modes/companion/pty-wrapper.js +0 -143
  137. package/dist/modes/companion/pty-wrapper.js.map +0 -1
  138. package/dist/modes/companion/safety-classifier.d.ts +0 -31
  139. package/dist/modes/companion/safety-classifier.d.ts.map +0 -1
  140. package/dist/modes/companion/safety-classifier.js +0 -140
  141. package/dist/modes/companion/safety-classifier.js.map +0 -1
  142. package/dist/modes/companion/safety-classifier.test.d.ts +0 -2
  143. package/dist/modes/companion/safety-classifier.test.d.ts.map +0 -1
  144. package/dist/modes/companion/safety-classifier.test.js +0 -151
  145. package/dist/modes/companion/safety-classifier.test.js.map +0 -1
  146. package/dist/modes/companion/summarizer.d.ts +0 -24
  147. package/dist/modes/companion/summarizer.d.ts.map +0 -1
  148. package/dist/modes/companion/summarizer.js +0 -132
  149. package/dist/modes/companion/summarizer.js.map +0 -1
  150. package/dist/modes/companion/terminal-history.d.ts +0 -27
  151. package/dist/modes/companion/terminal-history.d.ts.map +0 -1
  152. package/dist/modes/companion/terminal-history.js +0 -142
  153. package/dist/modes/companion/terminal-history.js.map +0 -1
  154. package/dist/prompts/simple-mentor.md +0 -215
  155. package/dist/providers/github-copilot/converters.d.ts +0 -45
  156. package/dist/providers/github-copilot/converters.d.ts.map +0 -1
  157. package/dist/providers/github-copilot/converters.js +0 -118
  158. package/dist/providers/github-copilot/converters.js.map +0 -1
  159. package/dist/providers/github-copilot/converters.test.d.ts +0 -2
  160. package/dist/providers/github-copilot/converters.test.d.ts.map +0 -1
  161. package/dist/providers/github-copilot/converters.test.js +0 -162
  162. package/dist/providers/github-copilot/converters.test.js.map +0 -1
  163. package/dist/providers/github-copilot/github-copilot.provider.d.ts +0 -2
  164. package/dist/providers/github-copilot/github-copilot.provider.d.ts.map +0 -1
  165. package/dist/providers/github-copilot/github-copilot.provider.js +0 -75
  166. package/dist/providers/github-copilot/github-copilot.provider.js.map +0 -1
  167. package/dist/providers/github-copilot/github-copilot.provider.test.d.ts +0 -2
  168. package/dist/providers/github-copilot/github-copilot.provider.test.d.ts.map +0 -1
  169. package/dist/providers/github-copilot/github-copilot.provider.test.js +0 -26
  170. package/dist/providers/github-copilot/github-copilot.provider.test.js.map +0 -1
  171. package/dist/providers/github-copilot/index.d.ts +0 -4
  172. package/dist/providers/github-copilot/index.d.ts.map +0 -1
  173. package/dist/providers/github-copilot/index.js +0 -4
  174. package/dist/providers/github-copilot/index.js.map +0 -1
  175. package/dist/providers/github-copilot/model.d.ts +0 -24
  176. package/dist/providers/github-copilot/model.d.ts.map +0 -1
  177. package/dist/providers/github-copilot/model.delta.test.d.ts +0 -2
  178. package/dist/providers/github-copilot/model.delta.test.d.ts.map +0 -1
  179. package/dist/providers/github-copilot/model.delta.test.js +0 -15
  180. package/dist/providers/github-copilot/model.delta.test.js.map +0 -1
  181. package/dist/providers/github-copilot/model.js +0 -498
  182. package/dist/providers/github-copilot/model.js.map +0 -1
  183. package/dist/providers/github-copilot/model.test.d.ts +0 -2
  184. package/dist/providers/github-copilot/model.test.d.ts.map +0 -1
  185. package/dist/providers/github-copilot/model.test.js +0 -63
  186. package/dist/providers/github-copilot/model.test.js.map +0 -1
  187. package/dist/providers/github-copilot/provider.d.ts +0 -15
  188. package/dist/providers/github-copilot/provider.d.ts.map +0 -1
  189. package/dist/providers/github-copilot/provider.js +0 -25
  190. package/dist/providers/github-copilot/provider.js.map +0 -1
  191. package/dist/providers/github-copilot/provider.test.d.ts +0 -2
  192. package/dist/providers/github-copilot/provider.test.d.ts.map +0 -1
  193. package/dist/providers/github-copilot/provider.test.js +0 -52
  194. package/dist/providers/github-copilot/provider.test.js.map +0 -1
  195. package/dist/providers/github-copilot/utils.d.ts +0 -20
  196. package/dist/providers/github-copilot/utils.d.ts.map +0 -1
  197. package/dist/providers/github-copilot/utils.js +0 -142
  198. package/dist/providers/github-copilot/utils.js.map +0 -1
  199. package/dist/providers/github-copilot/utils.test.d.ts +0 -2
  200. package/dist/providers/github-copilot/utils.test.d.ts.map +0 -1
  201. package/dist/providers/github-copilot/utils.test.js +0 -21
  202. package/dist/providers/github-copilot/utils.test.js.map +0 -1
  203. package/dist/safety-checker.js +0 -57
  204. package/dist/services/check_mock.d.ts +0 -2
  205. package/dist/services/check_mock.d.ts.map +0 -1
  206. package/dist/services/check_mock.js +0 -22
  207. package/dist/services/check_mock.js.map +0 -1
  208. package/dist/services/conversation-service.test.d.ts +0 -2
  209. package/dist/services/conversation-service.test.d.ts.map +0 -1
  210. package/dist/services/conversation-service.test.js +0 -156
  211. package/dist/services/conversation-service.test.js.map +0 -1
  212. package/dist/tools/bash.d.ts +0 -10
  213. package/dist/tools/bash.d.ts.map +0 -1
  214. package/dist/tools/bash.js +0 -55
  215. package/dist/tools/bash.js.map +0 -1
  216. package/dist/utils/command-safety.d.ts +0 -21
  217. package/dist/utils/command-safety.d.ts.map +0 -1
  218. package/dist/utils/command-safety.devnull.test.d.ts +0 -2
  219. package/dist/utils/command-safety.devnull.test.d.ts.map +0 -1
  220. package/dist/utils/command-safety.devnull.test.js +0 -13
  221. package/dist/utils/command-safety.devnull.test.js.map +0 -1
  222. package/dist/utils/command-safety.js +0 -348
  223. package/dist/utils/command-safety.js.map +0 -1
  224. package/dist/utils/extract-command-messages.test.d.ts +0 -2
  225. package/dist/utils/extract-command-messages.test.d.ts.map +0 -1
  226. package/dist/utils/extract-command-messages.test.js +0 -64
  227. package/dist/utils/extract-command-messages.test.js.map +0 -1
  228. package/dist/utils/provider-traffic-extractor.repro.test.d.ts +0 -2
  229. package/dist/utils/provider-traffic-extractor.repro.test.d.ts.map +0 -1
  230. package/dist/utils/provider-traffic-extractor.repro.test.js.map +0 -1
package/dist/lib/shell.js DELETED
@@ -1,56 +0,0 @@
1
- import { exec } from 'node:child_process';
2
- import { promisify } from 'node:util';
3
- import process from 'node:process';
4
- const execAsync = promisify(exec);
5
- export class LocalShell {
6
- cwd;
7
- constructor(cwd = process.cwd()) {
8
- this.cwd = cwd;
9
- }
10
- async run(action) {
11
- const output = [];
12
- for (const command of action.commands) {
13
- let stdout = '';
14
- let stderr = '';
15
- let exitCode = 0;
16
- let outcome = {
17
- type: 'exit',
18
- exitCode: 0,
19
- };
20
- try {
21
- const { stdout: localStdout, stderr: localStderr } = await execAsync(command, {
22
- cwd: this.cwd,
23
- timeout: action.timeoutMs,
24
- maxBuffer: action.maxOutputLength,
25
- });
26
- stdout = localStdout;
27
- stderr = localStderr;
28
- }
29
- catch (error) {
30
- exitCode = typeof error?.code === 'number' ? error.code : null;
31
- stdout = error?.stdout ?? '';
32
- stderr = error?.stderr ?? '';
33
- outcome =
34
- error?.killed || error?.signal === 'SIGTERM'
35
- ? { type: 'timeout' }
36
- : { type: 'exit', exitCode };
37
- }
38
- output.push({
39
- command,
40
- stdout,
41
- stderr,
42
- outcome,
43
- });
44
- if (outcome.type === 'timeout') {
45
- break;
46
- }
47
- }
48
- return {
49
- output,
50
- providerData: {
51
- working_directory: this.cwd,
52
- },
53
- };
54
- }
55
- }
56
- //# sourceMappingURL=shell.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../source/lib/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,OAAO,MAAM,cAAc,CAAC;AAQnC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,OAAO,UAAU;IACU;IAA7B,YAA6B,MAAc,OAAO,CAAC,GAAG,EAAE;QAA3B,QAAG,GAAH,GAAG,CAAwB;IAAI,CAAC;IAE7D,KAAK,CAAC,GAAG,CAAC,MAAmB;QACzB,MAAM,MAAM,GAA0B,EAAE,CAAC;QAEzC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,QAAQ,GAAkB,CAAC,CAAC;YAChC,IAAI,OAAO,GAAiC;gBACxC,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,CAAC;aACd,CAAC;YACF,IAAI,CAAC;gBACD,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAChE,OAAO,EACP;oBACI,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,OAAO,EAAE,MAAM,CAAC,SAAS;oBACzB,SAAS,EAAE,MAAM,CAAC,eAAe;iBACpC,CACJ,CAAC;gBACF,MAAM,GAAG,WAAW,CAAC;gBACrB,MAAM,GAAG,WAAW,CAAC;YACzB,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBAClB,QAAQ,GAAG,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC/D,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC;gBAC7B,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC;gBAC7B,OAAO;oBACH,KAAK,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,KAAK,SAAS;wBACxC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;wBACrB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACR,OAAO;gBACP,MAAM;gBACN,MAAM;gBACN,OAAO;aACV,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM;YACV,CAAC;QACL,CAAC;QAED,OAAO;YACH,MAAM;YACN,YAAY,EAAE;gBACV,iBAAiB,EAAE,IAAI,CAAC,GAAG;aAC9B;SACJ,CAAC;IACN,CAAC;CACJ"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Command index utilities for companion mode.
3
- * Generates lightweight command summaries for AI context.
4
- */
5
- import type { CommandIndexEntry } from './context-buffer.js';
6
- /**
7
- * Format command index entries for inclusion in AI system prompt.
8
- * Produces a compact, readable representation that uses minimal tokens.
9
- *
10
- * Example output:
11
- * [0] npm test ✗ exit:1 5s ago (542 lines)
12
- * [1] git diff ✓ exit:0 30s ago (23 lines)
13
- * [2] npm install ✓ exit:0 2m ago (891 lines)
14
- */
15
- export declare function formatCommandIndex(entries: CommandIndexEntry[]): string;
16
- /**
17
- * Generate system prompt section for command index.
18
- * This is always included in companion mode AI context.
19
- */
20
- export declare function generateCommandIndexPrompt(entries: CommandIndexEntry[]): string;
21
- /**
22
- * Estimate token count for command index.
23
- * Rough approximation: ~4 characters per token.
24
- */
25
- export declare function estimateTokens(entries: CommandIndexEntry[]): number;
26
- //# sourceMappingURL=command-index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-index.d.ts","sourceRoot":"","sources":["../../../source/modes/companion/command-index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAE3D;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAYvE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACtC,OAAO,EAAE,iBAAiB,EAAE,GAC7B,MAAM,CAYR;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAGnE"}
@@ -1,50 +0,0 @@
1
- /**
2
- * Command index utilities for companion mode.
3
- * Generates lightweight command summaries for AI context.
4
- */
5
- /**
6
- * Format command index entries for inclusion in AI system prompt.
7
- * Produces a compact, readable representation that uses minimal tokens.
8
- *
9
- * Example output:
10
- * [0] npm test ✗ exit:1 5s ago (542 lines)
11
- * [1] git diff ✓ exit:0 30s ago (23 lines)
12
- * [2] npm install ✓ exit:0 2m ago (891 lines)
13
- */
14
- export function formatCommandIndex(entries) {
15
- if (entries.length === 0) {
16
- return 'No recent commands.';
17
- }
18
- return entries
19
- .map(entry => {
20
- const status = entry.exitCode === 0 ? '✓' : '✗';
21
- const cmd = entry.command.padEnd(25).slice(0, 25);
22
- return `[${entry.index}] ${cmd} ${status} exit:${entry.exitCode} ${entry.relativeTime} (${entry.outputLines} lines)`;
23
- })
24
- .join('\n');
25
- }
26
- /**
27
- * Generate system prompt section for command index.
28
- * This is always included in companion mode AI context.
29
- */
30
- export function generateCommandIndexPrompt(entries) {
31
- const indexSection = formatCommandIndex(entries);
32
- return `
33
- ## Terminal Context
34
-
35
- You are observing the user's terminal session. Here are the recent commands:
36
-
37
- ${indexSection}
38
-
39
- Use the terminal_history tool to fetch detailed output when needed.
40
- `;
41
- }
42
- /**
43
- * Estimate token count for command index.
44
- * Rough approximation: ~4 characters per token.
45
- */
46
- export function estimateTokens(entries) {
47
- const formatted = formatCommandIndex(entries);
48
- return Math.ceil(formatted.length / 4);
49
- }
50
- //# sourceMappingURL=command-index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-index.js","sourceRoot":"","sources":["../../../source/modes/companion/command-index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,qBAAqB,CAAC;IACjC,CAAC;IAED,OAAO,OAAO;SACT,GAAG,CAAC,KAAK,CAAC,EAAE;QACT,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAChD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,IAAI,MAAM,SAAS,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,YAAY,MAAM,KAAK,CAAC,WAAW,SAAS,CAAC;IAC3H,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACtC,OAA4B;IAE5B,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAEjD,OAAO;;;;;EAKT,YAAY;;;CAGb,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAA4B;IACvD,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3C,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=command-index.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-index.test.d.ts","sourceRoot":"","sources":["../../../source/modes/companion/command-index.test.ts"],"names":[],"mappings":""}
@@ -1,86 +0,0 @@
1
- import test from 'ava';
2
- import { formatCommandIndex, generateCommandIndexPrompt, estimateTokens, } from './command-index.js';
3
- // Helper to create a test index entry
4
- function createIndexEntry(index, command, exitCode = 0, relativeTime = '5s ago', outputLines = 10, hasErrors = false) {
5
- return {
6
- index,
7
- command,
8
- exitCode,
9
- relativeTime,
10
- outputLines,
11
- hasErrors,
12
- };
13
- }
14
- test('formatCommandIndex returns message for empty array', t => {
15
- const result = formatCommandIndex([]);
16
- t.is(result, 'No recent commands.');
17
- });
18
- test('formatCommandIndex formats single entry', t => {
19
- const entries = [createIndexEntry(0, 'npm test', 0, '5s ago', 100)];
20
- const result = formatCommandIndex(entries);
21
- t.true(result.includes('[0]'));
22
- t.true(result.includes('npm test'));
23
- t.true(result.includes('✓'));
24
- t.true(result.includes('exit:0'));
25
- t.true(result.includes('5s ago'));
26
- t.true(result.includes('100 lines'));
27
- });
28
- test('formatCommandIndex shows ✗ for non-zero exit code', t => {
29
- const entries = [createIndexEntry(0, 'npm test', 1, '5s ago', 100)];
30
- const result = formatCommandIndex(entries);
31
- t.true(result.includes('✗'));
32
- });
33
- test('formatCommandIndex formats multiple entries', t => {
34
- const entries = [
35
- createIndexEntry(0, 'npm test', 1, '5s ago', 100),
36
- createIndexEntry(1, 'git status', 0, '30s ago', 10),
37
- createIndexEntry(2, 'npm install', 0, '2m ago', 500),
38
- ];
39
- const result = formatCommandIndex(entries);
40
- const lines = result.split('\n');
41
- t.is(lines.length, 3);
42
- t.true(lines[0].includes('[0]'));
43
- t.true(lines[1].includes('[1]'));
44
- t.true(lines[2].includes('[2]'));
45
- });
46
- test('formatCommandIndex truncates long commands', t => {
47
- const longCommand = 'npm run very-long-script-name-that-exceeds-width';
48
- const entries = [createIndexEntry(0, longCommand)];
49
- const result = formatCommandIndex(entries);
50
- // Should be truncated to 25 chars
51
- t.true(result.length < longCommand.length + 100);
52
- });
53
- test('generateCommandIndexPrompt includes context header', t => {
54
- const entries = [createIndexEntry(0, 'npm test')];
55
- const result = generateCommandIndexPrompt(entries);
56
- t.true(result.includes('Terminal Context'));
57
- t.true(result.includes('recent commands'));
58
- });
59
- test('generateCommandIndexPrompt includes formatted index', t => {
60
- const entries = [createIndexEntry(0, 'npm test', 0, '5s ago', 100)];
61
- const result = generateCommandIndexPrompt(entries);
62
- t.true(result.includes('npm test'));
63
- t.true(result.includes('[0]'));
64
- });
65
- test('generateCommandIndexPrompt includes tool usage hint', t => {
66
- const entries = [createIndexEntry(0, 'npm test')];
67
- const result = generateCommandIndexPrompt(entries);
68
- t.true(result.includes('terminal_history'));
69
- });
70
- test('estimateTokens returns reasonable estimate', t => {
71
- const entries = [
72
- createIndexEntry(0, 'npm test', 0, '5s ago', 100),
73
- createIndexEntry(1, 'git status', 0, '30s ago', 10),
74
- ];
75
- const tokens = estimateTokens(entries);
76
- // ~4 chars per token, each entry is ~60 chars
77
- t.true(tokens > 20);
78
- t.true(tokens < 100);
79
- });
80
- test('estimateTokens returns 0 for empty index', t => {
81
- const entries = [];
82
- const tokens = estimateTokens(entries);
83
- // "No recent commands." is ~20 chars, ~5 tokens
84
- t.true(tokens < 10);
85
- });
86
- //# sourceMappingURL=command-index.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-index.test.js","sourceRoot":"","sources":["../../../source/modes/companion/command-index.test.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import React from 'react';
2
- import type { ISettingsService, ILoggingService } from '../../services/service-interfaces.js';
3
- export interface CompanionAppProps {
4
- settingsService: ISettingsService;
5
- loggingService: ILoggingService;
6
- }
7
- /**
8
- * Main companion mode application.
9
- * Wraps user's shell in a PTY and provides AI assistance.
10
- */
11
- export declare const CompanionApp: React.FC<CompanionAppProps>;
12
- //# sourceMappingURL=companion-app.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"companion-app.d.ts","sourceRoot":"","sources":["../../../source/modes/companion/companion-app.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAW9D,OAAO,KAAK,EAAC,gBAAgB,EAAE,eAAe,EAAC,MAAM,sCAAsC,CAAC;AAqC5F,MAAM,WAAW,iBAAiB;IAC9B,eAAe,EAAE,gBAAgB,CAAC;IAClC,cAAc,EAAE,eAAe,CAAC;CACnC;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAyTpD,CAAC"}
@@ -1,297 +0,0 @@
1
- import React, { useEffect, useState, useCallback } from 'react';
2
- import { Box, Text, useInput, useApp } from 'ink';
3
- import { PTYWrapper } from './pty-wrapper.js';
4
- import { ContextBuffer } from './context-buffer.js';
5
- import { ModeManager } from './mode-manager.js';
6
- import { EventDetector } from './event-detector.js';
7
- import { Summarizer } from './summarizer.js';
8
- import { StatusBar } from './components/status-bar.js';
9
- import { CompanionSession } from './companion-session.js';
10
- import { parseCompanionInput, CommandOutputBuffer } from './input-parser.js';
11
- import { getPtyInputSequence } from './input-key-mapper.js';
12
- /** Height reserved at bottom of terminal for status bar and AI response */
13
- const STATUS_BAR_RESERVED_ROWS = 4;
14
- /**
15
- * Infer exit code from command output patterns.
16
- * Since PTY doesn't provide per-command exit codes, we use heuristics.
17
- */
18
- function inferExitCodeFromOutput(output) {
19
- const lowerOutput = output.toLowerCase();
20
- // Common error patterns that indicate failure
21
- const errorPatterns = [
22
- /\berror\b/i,
23
- /\bfail(ed|ure)?\b/i,
24
- /\bfatal\b/i,
25
- /\bexception\b/i,
26
- /\bcommand not found\b/i,
27
- /\bno such file\b/i,
28
- /\bpermission denied\b/i,
29
- /\bdoes not exist\b/i,
30
- /\bcannot\b/i,
31
- /\bexit status [1-9]/i,
32
- /\bexit code [1-9]/i,
33
- /\breturned [1-9]/i,
34
- ];
35
- for (const pattern of errorPatterns) {
36
- if (pattern.test(lowerOutput)) {
37
- return 1;
38
- }
39
- }
40
- return 0; // Assume success if no error patterns found
41
- }
42
- /**
43
- * Main companion mode application.
44
- * Wraps user's shell in a PTY and provides AI assistance.
45
- */
46
- export const CompanionApp = ({ settingsService, loggingService, }) => {
47
- const { exit } = useApp();
48
- // Core services
49
- const [ptyWrapper] = useState(() => new PTYWrapper({ logger: loggingService }));
50
- const [contextBuffer] = useState(() => new ContextBuffer({
51
- maxSize: settingsService.get('companion.maxContextBufferSize') || 1048576,
52
- maxCommands: settingsService.get('companion.maxCommandIndexSize') || 10,
53
- }));
54
- const [modeManager] = useState(() => new ModeManager());
55
- const [eventDetector] = useState(() => new EventDetector({
56
- errorCascadeThreshold: settingsService.get('companion.errorCascadeThreshold') || 3,
57
- retryLoopThreshold: settingsService.get('companion.retryLoopThreshold') || 2,
58
- pauseHintDelayMs: settingsService.get('companion.pauseHintDelayMs') || 30000,
59
- }));
60
- const [summarizer] = useState(() => new Summarizer({
61
- settings: settingsService,
62
- logger: loggingService,
63
- }));
64
- const [companionSession] = useState(() => new CompanionSession({
65
- contextBuffer,
66
- summarizer,
67
- settings: settingsService,
68
- logger: loggingService,
69
- }));
70
- const [commandOutputBuffer] = useState(() => new CommandOutputBuffer());
71
- // UI state
72
- const [currentMode, setCurrentMode] = useState(modeManager.mode);
73
- const [hint, setHint] = useState();
74
- const [isProcessing, setIsProcessing] = useState(false);
75
- const [error, setError] = useState();
76
- const [aiResponse, setAiResponse] = useState('');
77
- // Input buffer for detecting ?? and !auto
78
- const [inputLine, setInputLine] = useState('');
79
- // Handle ?? query
80
- const handleQuery = useCallback(async (query) => {
81
- setIsProcessing(true);
82
- setAiResponse('');
83
- setHint(undefined);
84
- try {
85
- for await (const event of companionSession.handleWatchQuery(query)) {
86
- if (event.type === 'text' && event.content) {
87
- setAiResponse(prev => prev + event.content);
88
- }
89
- else if (event.type === 'error') {
90
- loggingService.error('Query failed', { error: event.content });
91
- }
92
- }
93
- }
94
- finally {
95
- setIsProcessing(false);
96
- }
97
- }, [companionSession, loggingService]);
98
- // Handle !auto task
99
- const handleAutoTask = useCallback(async (task) => {
100
- setIsProcessing(true);
101
- setAiResponse('');
102
- setHint(undefined);
103
- modeManager.enterAutoMode();
104
- try {
105
- for await (const event of companionSession.handleAutoTask(task)) {
106
- if (event.type === 'text' && event.content) {
107
- setAiResponse(prev => prev + event.content);
108
- }
109
- else if (event.type === 'tool_call' && event.tool) {
110
- loggingService.info('Tool call', { tool: event.tool, args: event.args });
111
- }
112
- else if (event.type === 'error') {
113
- loggingService.error('Auto task failed', { error: event.content });
114
- }
115
- }
116
- }
117
- finally {
118
- setIsProcessing(false);
119
- modeManager.enterWatchMode();
120
- }
121
- }, [companionSession, modeManager, loggingService]);
122
- // Setup PTY and event handlers
123
- useEffect(() => {
124
- // Mode change handler
125
- modeManager.on('modeChange', (mode) => {
126
- setCurrentMode(mode);
127
- loggingService.info('Mode changed', { mode });
128
- });
129
- // Event detector hint handler
130
- eventDetector.on('hint', (event) => {
131
- if (settingsService.get('companion.showHints') !== false) {
132
- setHint(event.message);
133
- }
134
- });
135
- // PTY output handler
136
- ptyWrapper.on('output', (data) => {
137
- // Pass through to stdout
138
- process.stdout.write(data);
139
- // Process output for command boundary detection
140
- const completed = commandOutputBuffer.processData(data);
141
- if (completed) {
142
- // Infer exit code from output patterns when not available directly
143
- // This is a heuristic since PTY doesn't provide per-command exit codes
144
- const inferredExitCode = inferExitCodeFromOutput(completed.output);
145
- const entry = {
146
- command: completed.command,
147
- output: completed.output,
148
- exitCode: inferredExitCode,
149
- timestamp: Date.now(),
150
- outputLines: completed.output.split('\n').length,
151
- };
152
- contextBuffer.addEntry(entry);
153
- // Check for patterns
154
- const event = eventDetector.processCommand(entry);
155
- if (event && settingsService.get('companion.showHints') !== false) {
156
- setHint(event.message);
157
- }
158
- }
159
- // Mark activity
160
- eventDetector.markActivity();
161
- });
162
- // PTY exit handler
163
- ptyWrapper.on('exit', (exitCode) => {
164
- loggingService.info('PTY exited', { exitCode });
165
- exit();
166
- });
167
- // PTY error handler
168
- ptyWrapper.on('error', (err) => {
169
- loggingService.error('PTY error', { error: err.message });
170
- setError(err.message);
171
- });
172
- // Start PTY
173
- ptyWrapper.start();
174
- process.stdout.write('\x1b[?25h');
175
- // Setup terminal resize handling
176
- const handleResize = () => {
177
- if (process.stdout.columns && process.stdout.rows) {
178
- // Reserve bottom rows for status bar and AI response
179
- ptyWrapper.resize(process.stdout.columns, process.stdout.rows - STATUS_BAR_RESERVED_ROWS);
180
- }
181
- };
182
- process.stdout.on('resize', handleResize);
183
- handleResize();
184
- return () => {
185
- process.stdout.off('resize', handleResize);
186
- ptyWrapper.stop();
187
- process.stdout.write('\x1b[?25h');
188
- };
189
- }, [
190
- ptyWrapper,
191
- contextBuffer,
192
- commandOutputBuffer,
193
- modeManager,
194
- eventDetector,
195
- settingsService,
196
- loggingService,
197
- exit,
198
- ]);
199
- // Handle keyboard input
200
- useInput((input, key) => {
201
- // Ctrl+C to exit or abort
202
- if (key.ctrl && input === 'c') {
203
- if (isProcessing) {
204
- companionSession.abort();
205
- setIsProcessing(false);
206
- }
207
- else {
208
- ptyWrapper.stop();
209
- exit();
210
- }
211
- return;
212
- }
213
- // Clear hint on any input
214
- if (hint) {
215
- setHint(undefined);
216
- }
217
- const isSpecialCommandInput = inputLine.startsWith('??') || inputLine.startsWith('!auto');
218
- const ptySequence = getPtyInputSequence(input, key);
219
- if (key.upArrow || key.downArrow || key.leftArrow || key.rightArrow) {
220
- if (!isSpecialCommandInput && ptySequence) {
221
- ptyWrapper.write(ptySequence);
222
- }
223
- return;
224
- }
225
- // Build up input line to detect ?? and !auto commands
226
- let newInputLine = inputLine;
227
- if (input === '\r' || input === '\n') {
228
- const parsed = parseCompanionInput(inputLine);
229
- if (parsed.type === 'query') {
230
- // ?? query detected - handle with AI instead of passing to shell
231
- handleQuery(parsed.content);
232
- setInputLine('');
233
- // Write newline to keep terminal output clean
234
- process.stdout.write('\n');
235
- return;
236
- }
237
- if (parsed.type === 'auto') {
238
- // !auto command detected - handle with AI instead of passing to shell
239
- handleAutoTask(parsed.content);
240
- setInputLine('');
241
- // Write newline to keep terminal output clean
242
- process.stdout.write('\n');
243
- return;
244
- }
245
- // Normal command - pass Enter to PTY and track for context
246
- ptyWrapper.write(input);
247
- if (inputLine.trim()) {
248
- commandOutputBuffer.startCommand(inputLine.trim());
249
- }
250
- setInputLine('');
251
- return;
252
- }
253
- if (key.backspace || key.delete) {
254
- newInputLine = inputLine.slice(0, -1);
255
- setInputLine(newInputLine);
256
- if (isSpecialCommandInput) {
257
- process.stdout.write('\b \b');
258
- return;
259
- }
260
- if (ptySequence) {
261
- ptyWrapper.write(ptySequence);
262
- }
263
- return;
264
- }
265
- // Accumulate input
266
- newInputLine = inputLine + input;
267
- setInputLine(newInputLine);
268
- // Check if we're building a ?? or !auto command
269
- // If so, echo locally but don't send to PTY yet
270
- if (newInputLine.startsWith('??') || newInputLine.startsWith('!auto')) {
271
- // Echo the character locally (since we're not sending to PTY)
272
- process.stdout.write(input);
273
- }
274
- else {
275
- // Normal input - pass through to PTY
276
- ptyWrapper.write(input);
277
- }
278
- });
279
- if (error) {
280
- return (React.createElement(Box, { flexDirection: "column" },
281
- React.createElement(Text, { color: "red" },
282
- "Error: ",
283
- error),
284
- React.createElement(Text, { color: "gray" }, "Press Ctrl+C to exit")));
285
- }
286
- // The main rendering is handled by PTY direct output to stdout
287
- // We only render the status bar and AI response via Ink
288
- const defaultRows = 24; // Standard terminal height fallback
289
- const marginTop = process.stdout.rows
290
- ? process.stdout.rows - STATUS_BAR_RESERVED_ROWS
291
- : defaultRows - STATUS_BAR_RESERVED_ROWS;
292
- return (React.createElement(Box, { flexDirection: "column", position: "absolute", marginTop: marginTop },
293
- aiResponse && (React.createElement(Box, { borderStyle: "single", borderColor: "cyan", paddingX: 1, marginBottom: 1 },
294
- React.createElement(Text, { color: "cyan" }, aiResponse))),
295
- React.createElement(StatusBar, { mode: currentMode, hint: hint, isProcessing: isProcessing })));
296
- };
297
- //# sourceMappingURL=companion-app.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"companion-app.js","sourceRoot":"","sources":["../../../source/modes/companion/companion-app.tsx"],"names":[],"mappings":"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"}
@@ -1,63 +0,0 @@
1
- import type { ContextBuffer } from './context-buffer.js';
2
- import type { Summarizer } from './summarizer.js';
3
- import type { ISettingsService, ILoggingService } from '../../services/service-interfaces.js';
4
- import type { CompanionMode } from './mode-manager.js';
5
- export interface CompanionAgentClient {
6
- chat: (message: string, options?: {
7
- model?: string;
8
- reasoningEffort?: string;
9
- instructions?: string;
10
- }) => Promise<string>;
11
- startStream: (userInput: string | any[], options?: {
12
- previousResponseId?: string | null;
13
- }) => Promise<any>;
14
- abort: () => void;
15
- }
16
- export interface CompanionSessionDeps {
17
- contextBuffer: ContextBuffer;
18
- summarizer: Summarizer;
19
- settings: ISettingsService;
20
- logger: ILoggingService;
21
- agentClient?: CompanionAgentClient;
22
- }
23
- export interface CompanionEvent {
24
- type: 'text' | 'tool_call' | 'complete' | 'error' | 'approval_required' | 'blocked';
25
- content?: string;
26
- tool?: string;
27
- args?: unknown;
28
- safety?: 'green' | 'yellow' | 'red';
29
- reason?: string;
30
- }
31
- /**
32
- * Lightweight session for companion mode queries.
33
- *
34
- * Unlike chat mode's ConversationSession:
35
- * - No persistent conversation history (each query is standalone)
36
- * - No previousResponseId chaining
37
- * - Simpler approval flow (Auto mode only)
38
- */
39
- export declare class CompanionSession {
40
- #private;
41
- constructor(deps: CompanionSessionDeps);
42
- /**
43
- * Get the summarizer instance (for terminal_history tool integration).
44
- */
45
- get summarizer(): Summarizer;
46
- get mode(): CompanionMode;
47
- setMode(mode: CompanionMode): void;
48
- /**
49
- * Handle a ?? query in Watch mode.
50
- * Creates ephemeral session, streams response, then disposes.
51
- */
52
- handleWatchQuery(query: string): AsyncGenerator<CompanionEvent>;
53
- /**
54
- * Handle !auto task in Auto mode.
55
- * Full agent loop with tool execution.
56
- */
57
- handleAutoTask(task: string): AsyncGenerator<CompanionEvent>;
58
- /**
59
- * Abort the current operation.
60
- */
61
- abort(): void;
62
- }
63
- //# sourceMappingURL=companion-session.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"companion-session.d.ts","sourceRoot":"","sources":["../../../source/modes/companion/companion-session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAC,gBAAgB,EAAE,eAAe,EAAC,MAAM,sCAAsC,CAAC;AAE5F,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,CACF,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;KACzB,KACA,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,WAAW,EAAE,CACT,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE,EACzB,OAAO,CAAC,EAAE;QAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAC,KAC7C,OAAO,CAAC,GAAG,CAAC,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,eAAe,CAAC;IACxB,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,mBAAmB,GAAG,SAAS,CAAC;IACpF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,qBAAa,gBAAgB;;gBAQb,IAAI,EAAE,oBAAoB;IAQtC;;OAEG;IACH,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,IAAI,IAAI,IAAI,aAAa,CAExB;IAED,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAKlC;;;OAGG;IACI,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,cAAc,CAAC;IAmCtE;;;OAGG;IACI,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,cAAc,CAAC;IAqDnE;;OAEG;IACH,KAAK,IAAI,IAAI;CAwBhB"}