@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
@@ -1,63 +0,0 @@
1
- import test from 'ava';
2
- import { extractCopilotTextDelta } from './model.js';
3
- test('extractCopilotTextDelta - pure deltas', t => {
4
- let accumulated = '';
5
- let delta = extractCopilotTextDelta(accumulated, 'Hello');
6
- t.is(delta, 'Hello');
7
- accumulated += delta;
8
- delta = extractCopilotTextDelta(accumulated, ' World');
9
- t.is(delta, ' World');
10
- accumulated += delta;
11
- t.is(accumulated, 'Hello World');
12
- });
13
- test('extractCopilotTextDelta - accumulated chunks', t => {
14
- let accumulated = '';
15
- let delta = extractCopilotTextDelta(accumulated, 'Hello');
16
- t.is(delta, 'Hello');
17
- accumulated += delta;
18
- delta = extractCopilotTextDelta(accumulated, 'Hello World');
19
- t.is(delta, ' World');
20
- accumulated += delta;
21
- t.is(accumulated, 'Hello World');
22
- });
23
- test('extractCopilotTextDelta - duplicate chunks', t => {
24
- let accumulated = '';
25
- let delta = extractCopilotTextDelta(accumulated, 'Hello');
26
- t.is(delta, 'Hello');
27
- accumulated += delta;
28
- delta = extractCopilotTextDelta(accumulated, 'Hello');
29
- t.is(delta, '');
30
- accumulated += delta;
31
- t.is(accumulated, 'Hello');
32
- });
33
- test('extractCopilotTextDelta - empty chunks', t => {
34
- let accumulated = '';
35
- let delta = extractCopilotTextDelta(accumulated, 'Hello');
36
- t.is(delta, 'Hello');
37
- accumulated += delta;
38
- delta = extractCopilotTextDelta(accumulated, '');
39
- t.is(delta, '');
40
- accumulated += delta;
41
- t.is(accumulated, 'Hello');
42
- });
43
- test('extractCopilotTextDelta - tricky overlap', t => {
44
- // If it's pure deltas but one delta happens to be a suffix that looks like accumulated?
45
- // This shouldn't happen in reality but let's check.
46
- let accumulated = 'Hello';
47
- let incoming = 'Hello'; // This is a NEW delta "Hello"
48
- let delta = extractCopilotTextDelta(accumulated, incoming);
49
- t.is(delta, ''); // With overlap detection, "Hello" overlaps completely with "Hello"
50
- });
51
- test('extractCopilotTextDelta - partial overlap', t => {
52
- let accumulated = 'Hello';
53
- let incoming = 'lo World'; // Delta that overlaps by 'lo'
54
- let delta = extractCopilotTextDelta(accumulated, incoming);
55
- t.is(delta, ' World');
56
- });
57
- test('extractCopilotTextDelta - real world repeat', t => {
58
- let accumulated = 'I can help you with that.';
59
- let incoming = 'that. Let me see...'; // Overlaps by 'that.'
60
- let delta = extractCopilotTextDelta(accumulated, incoming);
61
- t.is(delta, ' Let me see...');
62
- });
63
- //# sourceMappingURL=model.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model.test.js","sourceRoot":"","sources":["../../../source/providers/github-copilot/model.test.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { type ModelProvider, type Model } from '@openai/agents-core';
2
- import type { ILoggingService, ISettingsService } from '../../services/service-interfaces.js';
3
- export declare class GitHubCopilotProvider implements ModelProvider {
4
- #private;
5
- constructor(deps: {
6
- settingsService: ISettingsService;
7
- loggingService: ILoggingService;
8
- });
9
- getModel(modelName?: string): Promise<Model> | Model;
10
- }
11
- export declare function createGitHubCopilotProvider(deps: {
12
- settingsService: ISettingsService;
13
- loggingService: ILoggingService;
14
- }): GitHubCopilotProvider;
15
- //# sourceMappingURL=provider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../source/providers/github-copilot/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,KAAK,EACR,eAAe,EACf,gBAAgB,EACnB,MAAM,sCAAsC,CAAC;AAG9C,qBAAa,qBAAsB,YAAW,aAAa;;gBAM3C,IAAI,EAAE;QACd,eAAe,EAAE,gBAAgB,CAAC;QAClC,cAAc,EAAE,eAAe,CAAC;KACnC;IAKD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK;CASvD;AAGD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAC9C,eAAe,EAAE,gBAAgB,CAAC;IAClC,cAAc,EAAE,eAAe,CAAC;CACnC,GAAG,qBAAqB,CAExB"}
@@ -1,25 +0,0 @@
1
- import { GitHubCopilotModel } from './model.js';
2
- export class GitHubCopilotProvider {
3
- #settingsService;
4
- #loggingService;
5
- #sessionMap = new Map(); // Mapping of responseId -> sessionId
6
- #activeSessions = new Map(); // Cache of sessionId -> actual session object
7
- constructor(deps) {
8
- this.#settingsService = deps.settingsService;
9
- this.#loggingService = deps.loggingService;
10
- }
11
- getModel(modelName) {
12
- return new GitHubCopilotModel({
13
- settingsService: this.#settingsService,
14
- loggingService: this.#loggingService,
15
- modelId: modelName,
16
- sessionMap: this.#sessionMap,
17
- activeSessions: this.#activeSessions,
18
- });
19
- }
20
- }
21
- // Export factory function for dependency injection
22
- export function createGitHubCopilotProvider(deps) {
23
- return new GitHubCopilotProvider(deps);
24
- }
25
- //# sourceMappingURL=provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../source/providers/github-copilot/provider.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,OAAO,qBAAqB;IAC9B,gBAAgB,CAAmB;IACnC,eAAe,CAAkB;IACjC,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,qCAAqC;IAC9E,eAAe,GAAG,IAAI,GAAG,EAA0B,CAAC,CAAC,8CAA8C;IAEnG,YAAY,IAGX;QACG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC;QAC7C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC;IAC/C,CAAC;IAED,QAAQ,CAAC,SAAkB;QACvB,OAAO,IAAI,kBAAkB,CAAC;YAC1B,eAAe,EAAE,IAAI,CAAC,gBAAgB;YACtC,cAAc,EAAE,IAAI,CAAC,eAAe;YACpC,OAAO,EAAE,SAAS;YAClB,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,cAAc,EAAE,IAAI,CAAC,eAAe;SACvC,CAAC,CAAC;IACP,CAAC;CACJ;AAED,mDAAmD;AACnD,MAAM,UAAU,2BAA2B,CAAC,IAG3C;IACG,OAAO,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=provider.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.test.d.ts","sourceRoot":"","sources":["../../../source/providers/github-copilot/provider.test.ts"],"names":[],"mappings":""}
@@ -1,52 +0,0 @@
1
- import test from 'ava';
2
- import { GitHubCopilotProvider, createGitHubCopilotProvider } from './provider.js';
3
- // Mock services
4
- const mockSettingsService = {
5
- get: (key) => {
6
- if (key === 'agent.model')
7
- return 'gpt-4o';
8
- if (key === 'agent.github-copilot.model')
9
- return 'gpt-4o';
10
- return undefined;
11
- },
12
- set: () => { },
13
- };
14
- const mockLoggingService = {
15
- info: () => { },
16
- warn: () => { },
17
- error: () => { },
18
- debug: () => { },
19
- security: () => { },
20
- setCorrelationId: () => { },
21
- getCorrelationId: () => undefined,
22
- clearCorrelationId: () => { },
23
- };
24
- test('GitHubCopilotProvider - getModel returns GitHubCopilotModel', async (t) => {
25
- const provider = new GitHubCopilotProvider({
26
- settingsService: mockSettingsService,
27
- loggingService: mockLoggingService,
28
- });
29
- const model = await provider.getModel();
30
- t.truthy(model);
31
- // Check that it's our model by verifying the name property we add
32
- t.is(model.name, 'GitHubCopilot');
33
- });
34
- test('GitHubCopilotProvider - getModel accepts model override', async (t) => {
35
- const provider = new GitHubCopilotProvider({
36
- settingsService: mockSettingsService,
37
- loggingService: mockLoggingService,
38
- });
39
- const model = await provider.getModel('claude-3.5-sonnet');
40
- t.truthy(model);
41
- // Check that it's our model by verifying the name property we add
42
- t.is(model.name, 'GitHubCopilot');
43
- });
44
- test('createGitHubCopilotProvider - factory function works', (t) => {
45
- const provider = createGitHubCopilotProvider({
46
- settingsService: mockSettingsService,
47
- loggingService: mockLoggingService,
48
- });
49
- t.truthy(provider);
50
- t.true(provider instanceof GitHubCopilotProvider);
51
- });
52
- //# sourceMappingURL=provider.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.test.js","sourceRoot":"","sources":["../../../source/providers/github-copilot/provider.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAGnF,gBAAgB;AAChB,MAAM,mBAAmB,GAAqB;IAC1C,GAAG,EAAE,CAAI,GAAW,EAAK,EAAE;QACvB,IAAI,GAAG,KAAK,aAAa;YAAE,OAAO,QAAa,CAAC;QAChD,IAAI,GAAG,KAAK,4BAA4B;YAAE,OAAO,QAAa,CAAC;QAC/D,OAAO,SAAc,CAAC;IAC1B,CAAC;IACD,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;CAChB,CAAC;AAEF,MAAM,kBAAkB,GAAoB;IACxC,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;IACf,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;IACf,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;IAClB,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC1B,gBAAgB,EAAE,GAAG,EAAE,CAAC,SAAS;IACjC,kBAAkB,EAAE,GAAG,EAAE,GAAE,CAAC;CAC/B,CAAC;AAEF,IAAI,CAAC,6DAA6D,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC5E,MAAM,QAAQ,GAAG,IAAI,qBAAqB,CAAC;QACvC,eAAe,EAAE,mBAAmB;QACpC,cAAc,EAAE,kBAAkB;KACrC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAExC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChB,kEAAkE;IAClE,CAAC,CAAC,EAAE,CAAE,KAAa,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yDAAyD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACxE,MAAM,QAAQ,GAAG,IAAI,qBAAqB,CAAC;QACvC,eAAe,EAAE,mBAAmB;QACpC,cAAc,EAAE,kBAAkB;KACrC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAE3D,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChB,kEAAkE;IAClE,CAAC,CAAC,EAAE,CAAE,KAAa,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sDAAsD,EAAE,CAAC,CAAC,EAAE,EAAE;IAC/D,MAAM,QAAQ,GAAG,2BAA2B,CAAC;QACzC,eAAe,EAAE,mBAAmB;QACpC,cAAc,EAAE,kBAAkB;KACrC,CAAC,CAAC;IAEH,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC,CAAC,IAAI,CAAC,QAAQ,YAAY,qBAAqB,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC"}
@@ -1,20 +0,0 @@
1
- /**
2
- * Check if the GitHub Copilot CLI is available.
3
- * Supports both standalone `copilot` command and `gh copilot` extension.
4
- * This is the synchronous version, which may block the Event Loop.
5
- */
6
- export declare function isCopilotCliAvailable(): boolean;
7
- /**
8
- * Async version of isCopilotCliAvailable.
9
- */
10
- export declare function isCopilotCliAvailableAsync(): Promise<boolean>;
11
- /**
12
- * Verify that the CLI is authenticated.
13
- * This is the synchronous version, which may block the Event Loop.
14
- */
15
- export declare function isGhAuthenticated(): boolean;
16
- /**
17
- * Async version of isGhAuthenticated.
18
- */
19
- export declare function isGhAuthenticatedAsync(): Promise<boolean>;
20
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../source/providers/github-copilot/utils.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CA4C/C;AAED;;GAEG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,OAAO,CAAC,CA6BnE;AAOD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAgC3C;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAsB/D"}
@@ -1,142 +0,0 @@
1
- import { spawnSync, spawn } from 'node:child_process';
2
- /**
3
- * Check if the GitHub Copilot CLI is available.
4
- * Supports both standalone `copilot` command and `gh copilot` extension.
5
- */
6
- let copilotAvailableCache = null;
7
- /**
8
- * Check if the GitHub Copilot CLI is available.
9
- * Supports both standalone `copilot` command and `gh copilot` extension.
10
- * This is the synchronous version, which may block the Event Loop.
11
- */
12
- export function isCopilotCliAvailable() {
13
- if (copilotAvailableCache !== null) {
14
- return copilotAvailableCache;
15
- }
16
- try {
17
- // Check for standalone copilot command first
18
- const copilotResult = spawnSync('copilot', ['--version'], {
19
- encoding: 'utf-8',
20
- timeout: 5000,
21
- stdio: ['ignore', 'pipe', 'pipe'],
22
- });
23
- if (copilotResult.status === 0) {
24
- copilotAvailableCache = true;
25
- return true;
26
- }
27
- // Fallback: Check if gh CLI is installed
28
- const ghResult = spawnSync('gh', ['--version'], {
29
- encoding: 'utf-8',
30
- timeout: 5000,
31
- stdio: ['ignore', 'pipe', 'pipe'],
32
- });
33
- if (ghResult.status !== 0) {
34
- copilotAvailableCache = false;
35
- return false;
36
- }
37
- // Check if copilot extension is installed
38
- const ghCopilotResult = spawnSync('gh', ['copilot', '--help'], {
39
- encoding: 'utf-8',
40
- timeout: 5000,
41
- stdio: ['ignore', 'pipe', 'pipe'],
42
- });
43
- const result = ghCopilotResult.status === 0;
44
- copilotAvailableCache = result;
45
- return result;
46
- }
47
- catch {
48
- copilotAvailableCache = false;
49
- return false;
50
- }
51
- }
52
- /**
53
- * Async version of isCopilotCliAvailable.
54
- */
55
- export async function isCopilotCliAvailableAsync() {
56
- if (copilotAvailableCache !== null) {
57
- return copilotAvailableCache;
58
- }
59
- const checkCommand = (command, args) => {
60
- return new Promise((resolve) => {
61
- const child = spawn(command, args, { stdio: 'ignore' });
62
- child.on('error', () => resolve(false));
63
- child.on('close', (code) => resolve(code === 0));
64
- });
65
- };
66
- // Check for standalone copilot command first
67
- if (await checkCommand('copilot', ['--version'])) {
68
- copilotAvailableCache = true;
69
- return true;
70
- }
71
- // Fallback: Check if gh CLI is installed
72
- if (!(await checkCommand('gh', ['--version']))) {
73
- copilotAvailableCache = false;
74
- return false;
75
- }
76
- // Check if copilot extension is installed
77
- const result = await checkCommand('gh', ['copilot', '--help']);
78
- copilotAvailableCache = result;
79
- return result;
80
- }
81
- /**
82
- * Verify that the CLI is authenticated.
83
- */
84
- let ghAuthenticatedCache = null;
85
- /**
86
- * Verify that the CLI is authenticated.
87
- * This is the synchronous version, which may block the Event Loop.
88
- */
89
- export function isGhAuthenticated() {
90
- if (ghAuthenticatedCache !== null) {
91
- return ghAuthenticatedCache;
92
- }
93
- try {
94
- // If we have standalone copilot, we consider it authenticated if it exists
95
- // as there's no standardized 'auth status' for the standalone version yet.
96
- const copilotResult = spawnSync('copilot', ['--version'], {
97
- encoding: 'utf-8',
98
- timeout: 5000,
99
- stdio: ['ignore', 'pipe', 'pipe'],
100
- });
101
- if (copilotResult.status === 0) {
102
- ghAuthenticatedCache = true;
103
- return true;
104
- }
105
- const result = spawnSync('gh', ['auth', 'status'], {
106
- encoding: 'utf-8',
107
- timeout: 5000,
108
- stdio: ['ignore', 'pipe', 'pipe'],
109
- });
110
- const status = result.status === 0;
111
- ghAuthenticatedCache = status;
112
- return status;
113
- }
114
- catch {
115
- ghAuthenticatedCache = false;
116
- return false;
117
- }
118
- }
119
- /**
120
- * Async version of isGhAuthenticated.
121
- */
122
- export async function isGhAuthenticatedAsync() {
123
- if (ghAuthenticatedCache !== null) {
124
- return ghAuthenticatedCache;
125
- }
126
- const checkCommand = (command, args) => {
127
- return new Promise((resolve) => {
128
- const child = spawn(command, args, { stdio: 'ignore' });
129
- child.on('error', () => resolve(false));
130
- child.on('close', (code) => resolve(code === 0));
131
- });
132
- };
133
- // If we have standalone copilot, we consider it authenticated if it exists
134
- if (await checkCommand('copilot', ['--version'])) {
135
- ghAuthenticatedCache = true;
136
- return true;
137
- }
138
- const result = await checkCommand('gh', ['auth', 'status']);
139
- ghAuthenticatedCache = result;
140
- return result;
141
- }
142
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../source/providers/github-copilot/utils.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=utils.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../../source/providers/github-copilot/utils.test.ts"],"names":[],"mappings":""}
@@ -1,21 +0,0 @@
1
- import test from 'ava';
2
- import { isCopilotCliAvailable, isGhAuthenticated, isCopilotCliAvailableAsync, isGhAuthenticatedAsync, } from './utils.js';
3
- // Note: These tests verify the function signatures work correctly.
4
- // The actual behavior depends on the system state (whether gh CLI is installed).
5
- test('isCopilotCliAvailable - returns boolean', (t) => {
6
- const result = isCopilotCliAvailable();
7
- t.is(typeof result, 'boolean');
8
- });
9
- test('isGhAuthenticated - returns boolean', (t) => {
10
- const result = isGhAuthenticated();
11
- t.is(typeof result, 'boolean');
12
- });
13
- test('isCopilotCliAvailableAsync - returns Promise<boolean>', async (t) => {
14
- const result = await isCopilotCliAvailableAsync();
15
- t.is(typeof result, 'boolean');
16
- });
17
- test('isGhAuthenticatedAsync - returns Promise<boolean>', async (t) => {
18
- const result = await isGhAuthenticatedAsync();
19
- t.is(typeof result, 'boolean');
20
- });
21
- //# sourceMappingURL=utils.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../../source/providers/github-copilot/utils.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EACH,qBAAqB,EACrB,iBAAiB,EACjB,0BAA0B,EAC1B,sBAAsB,GACzB,MAAM,YAAY,CAAC;AAEpB,mEAAmE;AACnE,iFAAiF;AAEjF,IAAI,CAAC,yCAAyC,EAAE,CAAC,CAAC,EAAE,EAAE;IAClD,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;IACvC,CAAC,CAAC,EAAE,CAAC,OAAO,MAAM,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qCAAqC,EAAE,CAAC,CAAC,EAAE,EAAE;IAC9C,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACnC,CAAC,CAAC,EAAE,CAAC,OAAO,MAAM,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uDAAuD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACtE,MAAM,MAAM,GAAG,MAAM,0BAA0B,EAAE,CAAC;IAClD,CAAC,CAAC,EAAE,CAAC,OAAO,MAAM,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mDAAmD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAClE,MAAM,MAAM,GAAG,MAAM,sBAAsB,EAAE,CAAC;IAC9C,CAAC,CAAC,EAAE,CAAC,OAAO,MAAM,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC"}
@@ -1,57 +0,0 @@
1
- import { OpenAI } from 'openai';
2
- const client = new OpenAI();
3
-
4
- /**
5
- * Evaluates if a bash command is safe to execute automatically
6
- * @param {string} command - The bash command to evaluate
7
- * @returns {Promise<{safe: boolean, reason: string}>}
8
- */
9
- export async function isSafeCommand(command) {
10
- try {
11
- const response = await client.chat.completions.create({
12
- model: 'gpt-4.1-mini',
13
- messages: [{
14
- role: 'system',
15
- content: `You are a security expert evaluating bash commands for safety.
16
- Analyze if the command is safe to execute automatically without user approval.
17
-
18
- Consider DANGEROUS:
19
- - Commands that delete, remove, or modify files/directories (rm, rmdir, mv to overwrite, >)
20
- - Commands that change system configuration (chmod, chown, systemctl, etc.)
21
- - Commands that install/uninstall software (apt, yum, npm install -g, pip install, etc.)
22
- - Commands that modify user accounts or permissions
23
- - Commands that interact with network in destructive ways (curl with -X DELETE, wget with -O to system files)
24
- - Commands that execute arbitrary code from network sources
25
- - Commands with sudo or elevated privileges
26
- - Commands that shut down or reboot the system
27
- - Commands that modify environment permanently (.bashrc, .profile, etc.)
28
- - Commands that access sensitive files (/etc/passwd, ~/.ssh/, etc.)
29
-
30
- Consider SAFE:
31
- - Read-only commands (ls, cat, head, tail, grep, find without -exec, pwd, echo, etc.)
32
- - Non-destructive information gathering (ps, top, df, du, whoami, uname, date, etc.)
33
- - Simple calculations or text processing (wc, sort, uniq, awk for display, sed for display)
34
- - Git read operations (git status, git log, git diff, git branch without creation)
35
- - Package queries without installation (npm list, pip list, apt list)
36
- - Commands that create new files in user directories (touch, echo >, mkdir in ~/)
37
-
38
- Respond with ONLY a JSON object: {"safe": true/false, "reason": "brief explanation"}`
39
- }, {
40
- role: 'user',
41
- content: `Evaluate this command: ${command}`
42
- }],
43
- temperature: 0,
44
- response_format: {
45
- type: 'json_object'
46
- }
47
- });
48
- const result = JSON.parse(response.choices[0].message.content);
49
- return result;
50
- } catch (error) {
51
- // If safety check fails, default to requiring approval (safe fallback)
52
- return {
53
- safe: false,
54
- reason: `Safety check failed: ${error.message}`
55
- };
56
- }
57
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=check_mock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check_mock.d.ts","sourceRoot":"","sources":["../../source/services/check_mock.ts"],"names":[],"mappings":""}
@@ -1,22 +0,0 @@
1
- import { createMockSettingsService } from './settings-service.mock.js';
2
- console.log('--- Tesing MockSettingsService ---');
3
- try {
4
- // Test 1: Check if overrides work with nested object (expected to work)
5
- const service1 = createMockSettingsService({
6
- agent: { model: 'nested-model' }
7
- });
8
- console.log(`Nested override 'agent.model': ${service1.get('agent.model')}`);
9
- // Test 2: Check if overrides work with dot notation (likely to fail based on my analysis)
10
- const service2 = createMockSettingsService({
11
- 'agent.model': 'flat-model'
12
- });
13
- console.log(`Dot-notation override 'agent.model': ${service2.get('agent.model')}`);
14
- // Test 3: Check directory creation
15
- // We need to inspect the settingsDir of the service.
16
- // We can't access private 'settingsDir', but we can check the known path if we know tmpdir
17
- // actually, let's just see if we can infer anything or just rely on code analysis for that part.
18
- }
19
- catch (err) {
20
- console.error(err);
21
- }
22
- //# sourceMappingURL=check_mock.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check_mock.js","sourceRoot":"","sources":["../../source/services/check_mock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAIvE,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;AAElD,IAAI,CAAC;IACH,wEAAwE;IACxE,MAAM,QAAQ,GAAG,yBAAyB,CAAC;QACvC,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;KACnC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,kCAAkC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAE7E,0FAA0F;IAC1F,MAAM,QAAQ,GAAG,yBAAyB,CAAC;QACvC,aAAa,EAAE,YAAY;KAC9B,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,wCAAwC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAEnF,mCAAmC;IACnC,qDAAqD;IACrD,2FAA2F;IAC3F,iGAAiG;AAEnG,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=conversation-service.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conversation-service.test.d.ts","sourceRoot":"","sources":["../../source/services/conversation-service.test.ts"],"names":[],"mappings":""}
@@ -1,156 +0,0 @@
1
- import test from 'ava';
2
- import { ConversationService } from './conversation-service.js';
3
- class MockStream {
4
- constructor(events) {
5
- this.events = events;
6
- this.completed = Promise.resolve();
7
- this.lastResponseId = 'resp_test';
8
- this.interruptions = [];
9
- this.state = {};
10
- this.newItems = [];
11
- this.history = [];
12
- this.finalOutput = '';
13
- }
14
- async *[Symbol.asyncIterator]() {
15
- for (const event of this.events) {
16
- yield event;
17
- }
18
- }
19
- }
20
- test('emits live text chunks for response.output_text.delta events', async (t) => {
21
- t.plan(3);
22
- const events = [
23
- { type: 'response.output_text.delta', delta: 'Hello' },
24
- { type: 'response.output_text.delta', delta: ' world' },
25
- ];
26
- const mockClient = {
27
- async startStream() {
28
- return new MockStream(events);
29
- },
30
- };
31
- const chunks = [];
32
- const service = new ConversationService({ agentClient: mockClient });
33
- const result = await service.sendMessage('hi', {
34
- onTextChunk(full, chunk) {
35
- chunks.push({ full, chunk });
36
- },
37
- });
38
- t.deepEqual(chunks, [
39
- { full: 'Hello', chunk: 'Hello' },
40
- { full: 'Hello world', chunk: ' world' },
41
- ]);
42
- t.is(result.type, 'response');
43
- t.is(result.finalText, 'Hello world');
44
- });
45
- test('passes previous response ids into subsequent runs', async (t) => {
46
- const streams = [new MockStream([]), new MockStream([])];
47
- streams[0].lastResponseId = 'resp-1';
48
- streams[0].finalOutput = 'First run done.';
49
- streams[1].lastResponseId = 'resp-2';
50
- streams[1].finalOutput = 'Second run done.';
51
- const startCalls = [];
52
- const mockClient = {
53
- async startStream(text, options) {
54
- const index = startCalls.length;
55
- startCalls.push({ text, options });
56
- return streams[index];
57
- },
58
- };
59
- const service = new ConversationService({ agentClient: mockClient });
60
- await service.sendMessage('first');
61
- const secondResult = await service.sendMessage('second');
62
- t.deepEqual(startCalls, [
63
- { text: 'first', options: { previousResponseId: null } },
64
- { text: 'second', options: { previousResponseId: 'resp-1' } },
65
- ]);
66
- t.is(secondResult.type, 'response');
67
- t.is(secondResult.finalText, 'Second run done.');
68
- });
69
- test('emits approval interruptions and resumes after approval', async (t) => {
70
- const interruption = {
71
- name: 'bash',
72
- agent: { name: 'CLI Agent' },
73
- arguments: JSON.stringify({ command: 'echo hi' }),
74
- };
75
- const initialStream = new MockStream([]);
76
- initialStream.interruptions = [interruption];
77
- initialStream.state = {
78
- approveCalls: [],
79
- rejectCalls: [],
80
- approve(arg) {
81
- this.approveCalls.push(arg);
82
- },
83
- reject(arg) {
84
- this.rejectCalls.push(arg);
85
- },
86
- };
87
- const continuationStream = new MockStream([
88
- { type: 'response.output_text.delta', delta: 'Approved run' },
89
- ]);
90
- continuationStream.finalOutput = 'Approved run';
91
- const mockClient = {
92
- async startStream() {
93
- return initialStream;
94
- },
95
- async continueRunStream(state) {
96
- t.is(state, initialStream.state);
97
- return continuationStream;
98
- },
99
- };
100
- const service = new ConversationService({ agentClient: mockClient });
101
- const approvalResult = await service.sendMessage('run command');
102
- t.is(approvalResult.type, 'approval_required');
103
- t.is(approvalResult.approval.toolName, 'bash');
104
- t.is(approvalResult.approval.argumentsText, 'echo hi');
105
- const finalResult = await service.handleApprovalDecision('y');
106
- t.truthy(finalResult);
107
- t.is(finalResult.type, 'response');
108
- t.is(finalResult.finalText, 'Approved run');
109
- t.deepEqual(initialStream.state.approveCalls, [interruption]);
110
- t.deepEqual(initialStream.state.rejectCalls, []);
111
- });
112
- test('dedupes command messages emitted live from run events', async (t) => {
113
- const commandPayload = JSON.stringify({
114
- command: 'ls',
115
- stdout: 'file.txt',
116
- success: true,
117
- });
118
- const rawItem = {
119
- id: 'call-123',
120
- type: 'function_call_result',
121
- name: 'bash',
122
- arguments: JSON.stringify({ command: 'ls' }),
123
- };
124
- const commandItem = {
125
- type: 'tool_call_output_item',
126
- name: 'bash',
127
- output: commandPayload,
128
- rawItem,
129
- };
130
- const events = [{ type: 'run_item_stream_event', item: commandItem }];
131
- const stream = new MockStream(events);
132
- stream.newItems = [commandItem];
133
- const emitted = [];
134
- const mockClient = {
135
- async startStream() {
136
- return stream;
137
- },
138
- };
139
- const service = new ConversationService({ agentClient: mockClient });
140
- const result = await service.sendMessage('run bash', {
141
- onCommandMessage(message) {
142
- emitted.push(message);
143
- },
144
- });
145
- t.deepEqual(emitted, [
146
- {
147
- id: 'call-123',
148
- sender: 'command',
149
- command: 'ls',
150
- output: 'file.txt',
151
- success: true,
152
- },
153
- ]);
154
- t.deepEqual(result.commandMessages, []);
155
- });
156
- //# sourceMappingURL=conversation-service.test.js.map