@machina.ai/cell-cli-core 1.16.0-rc2 → 1.19.4-rc1

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 (277) hide show
  1. package/dist/package.json +6 -4
  2. package/dist/src/agents/codebase-investigator.js +1 -1
  3. package/dist/src/agents/executor.js +12 -21
  4. package/dist/src/agents/executor.js.map +1 -1
  5. package/dist/src/agents/executor.test.js +53 -57
  6. package/dist/src/agents/executor.test.js.map +1 -1
  7. package/dist/src/agents/registry.d.ts +4 -0
  8. package/dist/src/agents/registry.js +23 -0
  9. package/dist/src/agents/registry.js.map +1 -1
  10. package/dist/src/agents/registry.test.js +30 -16
  11. package/dist/src/agents/registry.test.js.map +1 -1
  12. package/dist/src/availability/modelAvailabilityService.d.ts +34 -0
  13. package/dist/src/availability/modelAvailabilityService.js +84 -0
  14. package/dist/src/availability/modelAvailabilityService.js.map +1 -0
  15. package/dist/src/availability/modelAvailabilityService.test.d.ts +6 -0
  16. package/dist/src/availability/modelAvailabilityService.test.js +140 -0
  17. package/dist/src/availability/modelAvailabilityService.test.js.map +1 -0
  18. package/dist/src/availability/modelPolicy.d.ts +42 -0
  19. package/dist/src/availability/modelPolicy.js +7 -0
  20. package/dist/src/availability/modelPolicy.js.map +1 -0
  21. package/dist/src/availability/policyCatalog.d.ts +20 -0
  22. package/dist/src/availability/policyCatalog.js +83 -0
  23. package/dist/src/availability/policyCatalog.js.map +1 -0
  24. package/dist/src/availability/policyCatalog.test.d.ts +6 -0
  25. package/dist/src/availability/policyCatalog.test.js +70 -0
  26. package/dist/src/availability/policyCatalog.test.js.map +1 -0
  27. package/dist/src/code_assist/codeAssist.js +1 -1
  28. package/dist/src/code_assist/codeAssist.test.js +3 -3
  29. package/dist/src/code_assist/oauth-credential-storage.test.js +1 -0
  30. package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
  31. package/dist/src/code_assist/oauth2.js +106 -53
  32. package/dist/src/code_assist/oauth2.js.map +1 -1
  33. package/dist/src/code_assist/oauth2.test.js +25 -12
  34. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  35. package/dist/src/config/config.d.ts +18 -5
  36. package/dist/src/config/config.js +51 -19
  37. package/dist/src/config/config.js.map +1 -1
  38. package/dist/src/config/config.test.js +14 -79
  39. package/dist/src/config/config.test.js.map +1 -1
  40. package/dist/src/config/defaultModelConfigs.js +56 -4
  41. package/dist/src/config/defaultModelConfigs.js.map +1 -1
  42. package/dist/src/confirmation-bus/message-bus.d.ts +6 -0
  43. package/dist/src/confirmation-bus/message-bus.js +63 -2
  44. package/dist/src/confirmation-bus/message-bus.js.map +1 -1
  45. package/dist/src/confirmation-bus/types.d.ts +25 -2
  46. package/dist/src/confirmation-bus/types.js +3 -0
  47. package/dist/src/confirmation-bus/types.js.map +1 -1
  48. package/dist/src/core/AuthenticatedContentGenerator.d.ts +20 -0
  49. package/dist/src/core/AuthenticatedContentGenerator.js +115 -0
  50. package/dist/src/core/AuthenticatedContentGenerator.js.map +1 -0
  51. package/dist/src/core/baseLlmClient.d.ts +27 -1
  52. package/dist/src/core/baseLlmClient.js +66 -45
  53. package/dist/src/core/baseLlmClient.js.map +1 -1
  54. package/dist/src/core/baseLlmClient.test.js +94 -6
  55. package/dist/src/core/baseLlmClient.test.js.map +1 -1
  56. package/dist/src/core/client.d.ts +1 -2
  57. package/dist/src/core/client.js +89 -29
  58. package/dist/src/core/client.js.map +1 -1
  59. package/dist/src/core/client.test.js +82 -41
  60. package/dist/src/core/client.test.js.map +1 -1
  61. package/dist/src/core/clientHookTriggers.d.ts +36 -0
  62. package/dist/src/core/clientHookTriggers.js +76 -0
  63. package/dist/src/core/clientHookTriggers.js.map +1 -0
  64. package/dist/src/core/contentGenerator.d.ts +2 -1
  65. package/dist/src/core/contentGenerator.js +12 -5
  66. package/dist/src/core/contentGenerator.js.map +1 -1
  67. package/dist/src/core/contentGenerator.test.js +119 -1
  68. package/dist/src/core/contentGenerator.test.js.map +1 -1
  69. package/dist/src/core/coreToolScheduler.d.ts +0 -2
  70. package/dist/src/core/coreToolScheduler.js +1 -3
  71. package/dist/src/core/coreToolScheduler.js.map +1 -1
  72. package/dist/src/core/coreToolScheduler.test.js +3 -18
  73. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  74. package/dist/src/core/geminiChat.d.ts +10 -5
  75. package/dist/src/core/geminiChat.js +57 -22
  76. package/dist/src/core/geminiChat.js.map +1 -1
  77. package/dist/src/core/geminiChat.test.js +188 -55
  78. package/dist/src/core/geminiChat.test.js.map +1 -1
  79. package/dist/src/core/logger.test.js +12 -11
  80. package/dist/src/core/logger.test.js.map +1 -1
  81. package/dist/src/core/nonInteractiveToolExecutor.js +6 -2
  82. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  83. package/dist/src/core/nonInteractiveToolExecutor.test.js +10 -2
  84. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  85. package/dist/src/core/prompts.js +21 -6
  86. package/dist/src/core/prompts.js.map +1 -1
  87. package/dist/src/core/prompts.test.js +79 -93
  88. package/dist/src/core/prompts.test.js.map +1 -1
  89. package/dist/src/core/turn.d.ts +14 -3
  90. package/dist/src/core/turn.js +13 -7
  91. package/dist/src/core/turn.js.map +1 -1
  92. package/dist/src/core/turn.test.js +73 -139
  93. package/dist/src/core/turn.test.js.map +1 -1
  94. package/dist/src/fallback/handler.js +10 -5
  95. package/dist/src/fallback/handler.js.map +1 -1
  96. package/dist/src/fallback/handler.test.js +79 -17
  97. package/dist/src/fallback/handler.test.js.map +1 -1
  98. package/dist/src/generated/git-commit.d.ts +2 -2
  99. package/dist/src/generated/git-commit.js +2 -2
  100. package/dist/src/hooks/hookEventHandler.d.ts +109 -0
  101. package/dist/src/hooks/hookEventHandler.js +486 -0
  102. package/dist/src/hooks/hookEventHandler.js.map +1 -0
  103. package/dist/src/hooks/hookEventHandler.test.d.ts +6 -0
  104. package/dist/src/hooks/hookEventHandler.test.js +384 -0
  105. package/dist/src/hooks/hookEventHandler.test.js.map +1 -0
  106. package/dist/src/hooks/hookSystem.d.ts +48 -0
  107. package/dist/src/hooks/hookSystem.js +83 -0
  108. package/dist/src/hooks/hookSystem.js.map +1 -0
  109. package/dist/src/hooks/hookSystem.test.d.ts +6 -0
  110. package/dist/src/hooks/hookSystem.test.js +213 -0
  111. package/dist/src/hooks/hookSystem.test.js.map +1 -0
  112. package/dist/src/hooks/index.d.ts +15 -0
  113. package/dist/src/hooks/index.js +15 -0
  114. package/dist/src/hooks/index.js.map +1 -0
  115. package/dist/src/index.d.ts +4 -0
  116. package/dist/src/index.js +6 -0
  117. package/dist/src/index.js.map +1 -1
  118. package/dist/src/mcp/oauth-provider.test.js +1 -0
  119. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  120. package/dist/src/policy/policy-engine.d.ts +17 -1
  121. package/dist/src/policy/policy-engine.js +90 -1
  122. package/dist/src/policy/policy-engine.js.map +1 -1
  123. package/dist/src/policy/policy-engine.test.js +222 -0
  124. package/dist/src/policy/policy-engine.test.js.map +1 -1
  125. package/dist/src/policy/types.d.ts +51 -1
  126. package/dist/src/policy/types.js +21 -0
  127. package/dist/src/policy/types.js.map +1 -1
  128. package/dist/src/prompts/mcp-prompts.test.js +0 -1
  129. package/dist/src/prompts/mcp-prompts.test.js.map +1 -1
  130. package/dist/src/prompts/prompt-registry.test.js +0 -15
  131. package/dist/src/prompts/prompt-registry.test.js.map +1 -1
  132. package/dist/src/routing/modelRouterService.js +1 -1
  133. package/dist/src/routing/modelRouterService.js.map +1 -1
  134. package/dist/src/routing/strategies/classifierStrategy.test.js +4 -3
  135. package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
  136. package/dist/src/services/chatCompressionService.d.ts +2 -1
  137. package/dist/src/services/chatCompressionService.js +23 -7
  138. package/dist/src/services/chatCompressionService.js.map +1 -1
  139. package/dist/src/services/chatCompressionService.test.js +27 -32
  140. package/dist/src/services/chatCompressionService.test.js.map +1 -1
  141. package/dist/src/services/chatRecordingService.d.ts +1 -1
  142. package/dist/src/services/gitService.js +3 -1
  143. package/dist/src/services/gitService.js.map +1 -1
  144. package/dist/src/services/gitService.test.js +10 -0
  145. package/dist/src/services/gitService.test.js.map +1 -1
  146. package/dist/src/services/modelConfig.integration.test.js +34 -0
  147. package/dist/src/services/modelConfig.integration.test.js.map +1 -1
  148. package/dist/src/services/modelConfigService.d.ts +3 -0
  149. package/dist/src/services/modelConfigService.js +12 -3
  150. package/dist/src/services/modelConfigService.js.map +1 -1
  151. package/dist/src/services/modelConfigService.test.js +133 -0
  152. package/dist/src/services/modelConfigService.test.js.map +1 -1
  153. package/dist/src/services/shellExecutionService.d.ts +2 -0
  154. package/dist/src/services/shellExecutionService.js +35 -6
  155. package/dist/src/services/shellExecutionService.js.map +1 -1
  156. package/dist/src/services/shellExecutionService.test.js +78 -1
  157. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  158. package/dist/src/services/test-data/resolved-aliases.golden.json +57 -4
  159. package/dist/src/telemetry/activity-monitor.test.js +4 -1
  160. package/dist/src/telemetry/activity-monitor.test.js.map +1 -1
  161. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +2 -1
  162. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +97 -51
  163. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  164. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +24 -16
  165. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  166. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +2 -0
  167. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +5 -1
  168. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  169. package/dist/src/telemetry/loggers.d.ts +2 -1
  170. package/dist/src/telemetry/loggers.js +14 -3
  171. package/dist/src/telemetry/loggers.js.map +1 -1
  172. package/dist/src/telemetry/loggers.test.js +2 -5
  173. package/dist/src/telemetry/loggers.test.js.map +1 -1
  174. package/dist/src/telemetry/metrics.d.ts +26 -8
  175. package/dist/src/telemetry/metrics.js +37 -11
  176. package/dist/src/telemetry/metrics.js.map +1 -1
  177. package/dist/src/telemetry/metrics.test.js +61 -39
  178. package/dist/src/telemetry/metrics.test.js.map +1 -1
  179. package/dist/src/telemetry/sanitize.d.ts +25 -0
  180. package/dist/src/telemetry/sanitize.js +48 -0
  181. package/dist/src/telemetry/sanitize.js.map +1 -0
  182. package/dist/src/telemetry/sanitize.test.d.ts +6 -0
  183. package/dist/src/telemetry/sanitize.test.js +279 -0
  184. package/dist/src/telemetry/sanitize.test.js.map +1 -0
  185. package/dist/src/telemetry/semantic.js +1 -1
  186. package/dist/src/telemetry/semantic.js.map +1 -1
  187. package/dist/src/telemetry/types.d.ts +19 -0
  188. package/dist/src/telemetry/types.js +65 -0
  189. package/dist/src/telemetry/types.js.map +1 -1
  190. package/dist/src/test-utils/config.d.ts +1 -1
  191. package/dist/src/test-utils/config.js +1 -1
  192. package/dist/src/test-utils/mock-message-bus.d.ts +60 -0
  193. package/dist/src/test-utils/mock-message-bus.js +131 -0
  194. package/dist/src/test-utils/mock-message-bus.js.map +1 -0
  195. package/dist/src/test-utils/mock-tool.js +1 -1
  196. package/dist/src/test-utils/mock-tool.js.map +1 -1
  197. package/dist/src/tools/edit.test.js +203 -200
  198. package/dist/src/tools/edit.test.js.map +1 -1
  199. package/dist/src/tools/mcp-client.d.ts +4 -2
  200. package/dist/src/tools/mcp-client.js +226 -114
  201. package/dist/src/tools/mcp-client.js.map +1 -1
  202. package/dist/src/tools/mcp-client.test.js +128 -54
  203. package/dist/src/tools/mcp-client.test.js.map +1 -1
  204. package/dist/src/tools/mcp-tool.test.js +186 -273
  205. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  206. package/dist/src/tools/modifiable-tool.d.ts +1 -1
  207. package/dist/src/tools/modifiable-tool.js +2 -2
  208. package/dist/src/tools/modifiable-tool.js.map +1 -1
  209. package/dist/src/tools/modifiable-tool.test.js +12 -11
  210. package/dist/src/tools/modifiable-tool.test.js.map +1 -1
  211. package/dist/src/tools/ripGrep.test.js +84 -126
  212. package/dist/src/tools/ripGrep.test.js.map +1 -1
  213. package/dist/src/tools/smart-edit.test.js +93 -112
  214. package/dist/src/tools/smart-edit.test.js.map +1 -1
  215. package/dist/src/tools/tool-registry.test.js +59 -90
  216. package/dist/src/tools/tool-registry.test.js.map +1 -1
  217. package/dist/src/tools/web-fetch.test.js +121 -179
  218. package/dist/src/tools/web-fetch.test.js.map +1 -1
  219. package/dist/src/tools/write-file.test.js +105 -116
  220. package/dist/src/tools/write-file.test.js.map +1 -1
  221. package/dist/src/tools/write-todos.d.ts +1 -1
  222. package/dist/src/tools/write-todos.js +1 -1
  223. package/dist/src/utils/customHeaderUtils.d.ts +9 -0
  224. package/dist/src/utils/customHeaderUtils.js +34 -0
  225. package/dist/src/utils/customHeaderUtils.js.map +1 -0
  226. package/dist/src/utils/customHeaderUtils.test.d.ts +6 -0
  227. package/dist/src/utils/customHeaderUtils.test.js +77 -0
  228. package/dist/src/utils/customHeaderUtils.test.js.map +1 -0
  229. package/dist/src/utils/debugLogger.test.js +27 -25
  230. package/dist/src/utils/debugLogger.test.js.map +1 -1
  231. package/dist/src/utils/editor.d.ts +1 -1
  232. package/dist/src/utils/editor.js +3 -2
  233. package/dist/src/utils/editor.js.map +1 -1
  234. package/dist/src/utils/editor.test.js +7 -46
  235. package/dist/src/utils/editor.test.js.map +1 -1
  236. package/dist/src/utils/events.d.ts +33 -3
  237. package/dist/src/utils/events.js +35 -15
  238. package/dist/src/utils/events.js.map +1 -1
  239. package/dist/src/utils/events.test.js +86 -5
  240. package/dist/src/utils/events.test.js.map +1 -1
  241. package/dist/src/utils/filesearch/fileSearch.js +1 -1
  242. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  243. package/dist/src/utils/installationManager.test.js +2 -1
  244. package/dist/src/utils/installationManager.test.js.map +1 -1
  245. package/dist/src/utils/llm-edit-fixer.test.js +2 -1
  246. package/dist/src/utils/llm-edit-fixer.test.js.map +1 -1
  247. package/dist/src/utils/memoryDiscovery.test.js +3 -2
  248. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  249. package/dist/src/utils/memoryImportProcessor.js +1 -1
  250. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  251. package/dist/src/utils/memoryImportProcessor.test.js +8 -14
  252. package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
  253. package/dist/src/utils/nextSpeakerChecker.test.js +3 -1
  254. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
  255. package/dist/src/utils/package.d.ts +14 -0
  256. package/dist/src/utils/package.js +15 -2
  257. package/dist/src/utils/package.js.map +1 -1
  258. package/dist/src/utils/schemaValidator.d.ts +1 -1
  259. package/dist/src/utils/schemaValidator.js +1 -1
  260. package/dist/src/utils/shell-utils.js +1 -1
  261. package/dist/src/utils/stdio.d.ts +32 -0
  262. package/dist/src/utils/stdio.js +85 -0
  263. package/dist/src/utils/stdio.js.map +1 -0
  264. package/dist/src/utils/stdio.test.d.ts +6 -0
  265. package/dist/src/utils/stdio.test.js +47 -0
  266. package/dist/src/utils/stdio.test.js.map +1 -0
  267. package/dist/src/utils/systemEncoding.test.js +2 -1
  268. package/dist/src/utils/systemEncoding.test.js.map +1 -1
  269. package/dist/src/utils/terminal.d.ts +14 -0
  270. package/dist/src/utils/terminal.js +38 -0
  271. package/dist/src/utils/terminal.js.map +1 -0
  272. package/dist/src/utils/userAccountManager.test.js +7 -6
  273. package/dist/src/utils/userAccountManager.test.js.map +1 -1
  274. package/dist/src/utils/workspaceContext.test.js +5 -4
  275. package/dist/src/utils/workspaceContext.test.js.map +1 -1
  276. package/dist/tsconfig.tsbuildinfo +1 -1
  277. package/package.json +6 -4
@@ -0,0 +1,140 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, expect, it, vi, beforeEach } from 'vitest';
7
+ import { ModelAvailabilityService } from './modelAvailabilityService.js';
8
+ describe('ModelAvailabilityService', () => {
9
+ let service;
10
+ const model = 'test-model';
11
+ beforeEach(() => {
12
+ service = new ModelAvailabilityService();
13
+ vi.useRealTimers();
14
+ });
15
+ it('returns available snapshot when no state recorded', () => {
16
+ expect(service.snapshot(model)).toEqual({ available: true });
17
+ });
18
+ it('tracks retry-once-per-turn failures', () => {
19
+ service.markRetryOncePerTurn(model);
20
+ expect(service.snapshot(model)).toEqual({ available: true });
21
+ service.consumeStickyAttempt(model);
22
+ expect(service.snapshot(model)).toEqual({
23
+ available: false,
24
+ reason: 'retry_once_per_turn',
25
+ });
26
+ service.resetTurn();
27
+ expect(service.snapshot(model)).toEqual({ available: true });
28
+ });
29
+ it('tracks terminal failures', () => {
30
+ service.markTerminal(model, 'quota');
31
+ expect(service.snapshot(model)).toEqual({
32
+ available: false,
33
+ reason: 'quota',
34
+ });
35
+ });
36
+ it('does not override terminal failure with sticky failure', () => {
37
+ service.markTerminal(model, 'quota');
38
+ service.markRetryOncePerTurn(model);
39
+ expect(service.snapshot(model)).toEqual({
40
+ available: false,
41
+ reason: 'quota',
42
+ });
43
+ });
44
+ it('selects models respecting terminal and sticky states', () => {
45
+ const stickyModel = 'stick-model';
46
+ const healthyModel = 'healthy-model';
47
+ service.markTerminal(model, 'capacity');
48
+ service.markRetryOncePerTurn(stickyModel);
49
+ const first = service.selectFirstAvailable([
50
+ model,
51
+ stickyModel,
52
+ healthyModel,
53
+ ]);
54
+ expect(first).toEqual({
55
+ selected: stickyModel,
56
+ attempts: 1,
57
+ skipped: [
58
+ {
59
+ model,
60
+ reason: 'capacity',
61
+ },
62
+ ],
63
+ });
64
+ service.consumeStickyAttempt(stickyModel);
65
+ const second = service.selectFirstAvailable([
66
+ model,
67
+ stickyModel,
68
+ healthyModel,
69
+ ]);
70
+ expect(second).toEqual({
71
+ selected: healthyModel,
72
+ skipped: [
73
+ {
74
+ model,
75
+ reason: 'capacity',
76
+ },
77
+ {
78
+ model: stickyModel,
79
+ reason: 'retry_once_per_turn',
80
+ },
81
+ ],
82
+ });
83
+ service.resetTurn();
84
+ const third = service.selectFirstAvailable([
85
+ model,
86
+ stickyModel,
87
+ healthyModel,
88
+ ]);
89
+ expect(third).toEqual({
90
+ selected: stickyModel,
91
+ attempts: 1,
92
+ skipped: [
93
+ {
94
+ model,
95
+ reason: 'capacity',
96
+ },
97
+ ],
98
+ });
99
+ });
100
+ it('preserves consumed state when marking retry-once-per-turn again', () => {
101
+ service.markRetryOncePerTurn(model);
102
+ service.consumeStickyAttempt(model);
103
+ // It is currently consumed
104
+ expect(service.snapshot(model).available).toBe(false);
105
+ // Marking it again should not reset the consumed flag
106
+ service.markRetryOncePerTurn(model);
107
+ expect(service.snapshot(model).available).toBe(false);
108
+ });
109
+ it('clears consumed state when marked healthy', () => {
110
+ service.markRetryOncePerTurn(model);
111
+ service.consumeStickyAttempt(model);
112
+ expect(service.snapshot(model).available).toBe(false);
113
+ service.markHealthy(model);
114
+ expect(service.snapshot(model).available).toBe(true);
115
+ // If we mark it sticky again, it should be fresh (not consumed)
116
+ service.markRetryOncePerTurn(model);
117
+ expect(service.snapshot(model).available).toBe(true);
118
+ });
119
+ it('resetTurn resets consumed state for multiple sticky models', () => {
120
+ const model2 = 'model-2';
121
+ service.markRetryOncePerTurn(model);
122
+ service.markRetryOncePerTurn(model2);
123
+ service.consumeStickyAttempt(model);
124
+ service.consumeStickyAttempt(model2);
125
+ expect(service.snapshot(model).available).toBe(false);
126
+ expect(service.snapshot(model2).available).toBe(false);
127
+ service.resetTurn();
128
+ expect(service.snapshot(model).available).toBe(true);
129
+ expect(service.snapshot(model2).available).toBe(true);
130
+ });
131
+ it('resetTurn does not affect terminal models', () => {
132
+ service.markTerminal(model, 'quota');
133
+ service.resetTurn();
134
+ expect(service.snapshot(model)).toEqual({
135
+ available: false,
136
+ reason: 'quota',
137
+ });
138
+ });
139
+ });
140
+ //# sourceMappingURL=modelAvailabilityService.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelAvailabilityService.test.js","sourceRoot":"","sources":["../../../src/availability/modelAvailabilityService.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { ModelHealthStatus, ModelId } from './modelAvailabilityService.js';
7
+ /**
8
+ * Whether to prompt the user or fallback silently on a model API failure.
9
+ */
10
+ export type FallbackAction = 'silent' | 'prompt';
11
+ /**
12
+ * Type of possible errors from model API failures.
13
+ */
14
+ export type FailureKind = 'terminal' | 'transient' | 'not_found' | 'unknown';
15
+ /**
16
+ * Map from model API failure reason to user interaction.
17
+ */
18
+ export type ModelPolicyActionMap = Partial<Record<FailureKind, FallbackAction>>;
19
+ /**
20
+ * What state (e.g. Terminal, Sticky Retry) to set a model after failed API call.
21
+ */
22
+ export type ModelPolicyStateMap = Partial<Record<FailureKind, ModelHealthStatus>>;
23
+ /**
24
+ * Defines the policy for a single model in the availability chain.
25
+ *
26
+ * This includes:
27
+ * - Which model this policy applies to.
28
+ * - What actions to take (prompt vs silent fallback) for different failure kinds.
29
+ * - How the model's health status should transition upon failure.
30
+ * - Whether this model is considered a "last resort" (i.e. use if all models are unavailable).
31
+ */
32
+ export interface ModelPolicy {
33
+ model: ModelId;
34
+ actions: ModelPolicyActionMap;
35
+ stateTransitions: ModelPolicyStateMap;
36
+ isLastResort?: boolean;
37
+ }
38
+ /**
39
+ * A chain of model policies defining the priority and fallback behavior.
40
+ * The first model in the chain is the primary model.
41
+ */
42
+ export type ModelPolicyChain = ModelPolicy[];
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=modelPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelPolicy.js","sourceRoot":"","sources":["../../../src/availability/modelPolicy.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { ModelPolicy, ModelPolicyChain } from './modelPolicy.js';
7
+ import type { UserTierId } from '../code_assist/types.js';
8
+ export interface ModelPolicyOptions {
9
+ previewEnabled: boolean;
10
+ userTier?: UserTierId;
11
+ }
12
+ /**
13
+ * Returns the default ordered model policy chain for the user.
14
+ */
15
+ export declare function getModelPolicyChain(options: ModelPolicyOptions): ModelPolicyChain;
16
+ /**
17
+ * Provides a default policy scaffold for models not present in the catalog.
18
+ */
19
+ export declare function createDefaultPolicy(model: string): ModelPolicy;
20
+ export declare function validateModelPolicyChain(chain: ModelPolicyChain): void;
@@ -0,0 +1,83 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_MODEL, PREVIEW_GEMINI_MODEL, } from '../config/models.js';
7
+ const DEFAULT_ACTIONS = {
8
+ terminal: 'prompt',
9
+ transient: 'prompt',
10
+ not_found: 'prompt',
11
+ unknown: 'prompt',
12
+ };
13
+ const DEFAULT_STATE = {
14
+ terminal: 'terminal',
15
+ transient: 'terminal',
16
+ not_found: 'terminal',
17
+ unknown: 'terminal',
18
+ };
19
+ const DEFAULT_CHAIN = [
20
+ definePolicy({ model: DEFAULT_GEMINI_MODEL }),
21
+ definePolicy({ model: DEFAULT_GEMINI_FLASH_MODEL, isLastResort: true }),
22
+ ];
23
+ const PREVIEW_CHAIN = [
24
+ definePolicy({
25
+ model: PREVIEW_GEMINI_MODEL,
26
+ stateTransitions: { transient: 'sticky_retry' },
27
+ }),
28
+ definePolicy({ model: DEFAULT_GEMINI_MODEL }),
29
+ definePolicy({ model: DEFAULT_GEMINI_FLASH_MODEL, isLastResort: true }),
30
+ ];
31
+ /**
32
+ * Returns the default ordered model policy chain for the user.
33
+ */
34
+ export function getModelPolicyChain(options) {
35
+ if (options.previewEnabled) {
36
+ return cloneChain(PREVIEW_CHAIN);
37
+ }
38
+ return cloneChain(DEFAULT_CHAIN);
39
+ }
40
+ /**
41
+ * Provides a default policy scaffold for models not present in the catalog.
42
+ */
43
+ export function createDefaultPolicy(model) {
44
+ return definePolicy({ model });
45
+ }
46
+ export function validateModelPolicyChain(chain) {
47
+ if (chain.length === 0) {
48
+ throw new Error('Model policy chain must include at least one model.');
49
+ }
50
+ const lastResortCount = chain.filter((policy) => policy.isLastResort).length;
51
+ if (lastResortCount === 0) {
52
+ throw new Error('Model policy chain must include an `isLastResort` model.');
53
+ }
54
+ if (lastResortCount > 1) {
55
+ throw new Error('Model policy chain must only have one `isLastResort`.');
56
+ }
57
+ }
58
+ /**
59
+ * Helper to define a ModelPolicy with default actions and state transitions.
60
+ * Ensures every policy is a fresh instance to avoid shared state.
61
+ */
62
+ function definePolicy(config) {
63
+ return {
64
+ model: config.model,
65
+ isLastResort: config.isLastResort,
66
+ actions: { ...DEFAULT_ACTIONS, ...(config.actions ?? {}) },
67
+ stateTransitions: {
68
+ ...DEFAULT_STATE,
69
+ ...(config.stateTransitions ?? {}),
70
+ },
71
+ };
72
+ }
73
+ function clonePolicy(policy) {
74
+ return {
75
+ ...policy,
76
+ actions: { ...policy.actions },
77
+ stateTransitions: { ...policy.stateTransitions },
78
+ };
79
+ }
80
+ function cloneChain(chain) {
81
+ return chain.map(clonePolicy);
82
+ }
83
+ //# sourceMappingURL=policyCatalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policyCatalog.js","sourceRoot":"","sources":["../../../src/availability/policyCatalog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAc7B,MAAM,eAAe,GAAyB;IAC5C,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;IACnB,OAAO,EAAE,QAAQ;CAClB,CAAC;AAEF,MAAM,aAAa,GAAwB;IACzC,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,UAAU;IACrB,SAAS,EAAE,UAAU;IACrB,OAAO,EAAE,UAAU;CACpB,CAAC;AAEF,MAAM,aAAa,GAAqB;IACtC,YAAY,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC7C,YAAY,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;CACxE,CAAC;AAEF,MAAM,aAAa,GAAqB;IACtC,YAAY,CAAC;QACX,KAAK,EAAE,oBAAoB;QAC3B,gBAAgB,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE;KAChD,CAAC;IACF,YAAY,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC7C,YAAY,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;CACxE,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAA2B;IAE3B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAuB;IAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;IAC7E,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,MAAoB;IACxC,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,OAAO,EAAE,EAAE,GAAG,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;QAC1D,gBAAgB,EAAE;YAChB,GAAG,aAAa;YAChB,GAAG,CAAC,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC;SACnC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,MAAmB;IACtC,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE;QAC9B,gBAAgB,EAAE,EAAE,GAAG,MAAM,CAAC,gBAAgB,EAAE;KACjD,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAuB;IACzC,OAAO,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect } from 'vitest';
7
+ import { createDefaultPolicy, getModelPolicyChain, validateModelPolicyChain, } from './policyCatalog.js';
8
+ import { DEFAULT_GEMINI_MODEL, PREVIEW_GEMINI_MODEL, } from '../config/models.js';
9
+ describe('policyCatalog', () => {
10
+ it('returns preview chain when preview enabled', () => {
11
+ const chain = getModelPolicyChain({ previewEnabled: true });
12
+ expect(chain[0]?.model).toBe(PREVIEW_GEMINI_MODEL);
13
+ expect(chain).toHaveLength(3);
14
+ });
15
+ it('returns default chain when preview disabled', () => {
16
+ const chain = getModelPolicyChain({ previewEnabled: false });
17
+ expect(chain[0]?.model).toBe(DEFAULT_GEMINI_MODEL);
18
+ expect(chain).toHaveLength(2);
19
+ });
20
+ it('marks preview transients as sticky retries', () => {
21
+ const [previewPolicy] = getModelPolicyChain({ previewEnabled: true });
22
+ expect(previewPolicy.model).toBe(PREVIEW_GEMINI_MODEL);
23
+ expect(previewPolicy.stateTransitions.transient).toBe('sticky_retry');
24
+ });
25
+ it('applies default actions and state transitions for unspecified kinds', () => {
26
+ const [previewPolicy] = getModelPolicyChain({ previewEnabled: true });
27
+ expect(previewPolicy.stateTransitions.not_found).toBe('terminal');
28
+ expect(previewPolicy.stateTransitions.unknown).toBe('terminal');
29
+ expect(previewPolicy.actions.unknown).toBe('prompt');
30
+ });
31
+ it('clones policy maps so edits do not leak between calls', () => {
32
+ const firstCall = getModelPolicyChain({ previewEnabled: false });
33
+ firstCall[0].actions.terminal = 'silent';
34
+ const secondCall = getModelPolicyChain({ previewEnabled: false });
35
+ expect(secondCall[0].actions.terminal).toBe('prompt');
36
+ });
37
+ it('passes when there is exactly one last-resort policy', () => {
38
+ const validChain = [
39
+ createDefaultPolicy('test-model'),
40
+ { ...createDefaultPolicy('last-resort'), isLastResort: true },
41
+ ];
42
+ expect(() => validateModelPolicyChain(validChain)).not.toThrow();
43
+ });
44
+ it('fails when no policies are marked last-resort', () => {
45
+ const chain = [
46
+ createDefaultPolicy('model-a'),
47
+ createDefaultPolicy('model-b'),
48
+ ];
49
+ expect(() => validateModelPolicyChain(chain)).toThrow('must include an `isLastResort`');
50
+ });
51
+ it('fails when a single-model chain is not last-resort', () => {
52
+ const chain = [createDefaultPolicy('lonely-model')];
53
+ expect(() => validateModelPolicyChain(chain)).toThrow('must include an `isLastResort`');
54
+ });
55
+ it('fails when multiple policies are marked last-resort', () => {
56
+ const chain = [
57
+ { ...createDefaultPolicy('model-a'), isLastResort: true },
58
+ { ...createDefaultPolicy('model-b'), isLastResort: true },
59
+ ];
60
+ expect(() => validateModelPolicyChain(chain)).toThrow('must only have one `isLastResort`');
61
+ });
62
+ it('createDefaultPolicy seeds default actions and states', () => {
63
+ const policy = createDefaultPolicy('custom');
64
+ expect(policy.actions.terminal).toBe('prompt');
65
+ expect(policy.actions.unknown).toBe('prompt');
66
+ expect(policy.stateTransitions.terminal).toBe('terminal');
67
+ expect(policy.stateTransitions.unknown).toBe('terminal');
68
+ });
69
+ });
70
+ //# sourceMappingURL=policyCatalog.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policyCatalog.test.js","sourceRoot":"","sources":["../../../src/availability/policyCatalog.test.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ import { CodeAssistServer } from './server.js';
10
10
  import { LoggingContentGenerator } from '../core/loggingContentGenerator.js';
11
11
  export async function createCodeAssistContentGenerator(httpOptions, authType, config, sessionId) {
12
12
  if (authType === AuthType.LOGIN_WITH_GOOGLE ||
13
- authType === AuthType.CLOUD_SHELL) {
13
+ authType === AuthType.COMPUTE_ADC) {
14
14
  const authClient = await getOauthClient(authType, config);
15
15
  const userData = await setupUser(authClient);
16
16
  return new CodeAssistServer(authClient, userData.projectId, httpOptions, sessionId, userData.userTier);
@@ -41,11 +41,11 @@ describe('codeAssist', () => {
41
41
  expect(MockedCodeAssistServer).toHaveBeenCalledWith(mockAuthClient, 'test-project', httpOptions, 'session-123', 'free-tier');
42
42
  expect(generator).toBeInstanceOf(MockedCodeAssistServer);
43
43
  });
44
- it('should create a server for CLOUD_SHELL', async () => {
44
+ it('should create a server for COMPUTE_ADC', async () => {
45
45
  mockedGetOauthClient.mockResolvedValue(mockAuthClient);
46
46
  mockedSetupUser.mockResolvedValue(mockUserData);
47
- const generator = await createCodeAssistContentGenerator(httpOptions, AuthType.CLOUD_SHELL, mockConfig);
48
- expect(getOauthClient).toHaveBeenCalledWith(AuthType.CLOUD_SHELL, mockConfig);
47
+ const generator = await createCodeAssistContentGenerator(httpOptions, AuthType.COMPUTE_ADC, mockConfig);
48
+ expect(getOauthClient).toHaveBeenCalledWith(AuthType.COMPUTE_ADC, mockConfig);
49
49
  expect(setupUser).toHaveBeenCalledWith(mockAuthClient);
50
50
  expect(MockedCodeAssistServer).toHaveBeenCalledWith(mockAuthClient, 'test-project', httpOptions, undefined, // No session ID
51
51
  'free-tier');
@@ -30,6 +30,7 @@ vi.mock('node:path');
30
30
  vi.mock('../utils/events.js', () => ({
31
31
  coreEvents: {
32
32
  emitFeedback: vi.fn(),
33
+ emitConsoleLog: vi.fn(),
33
34
  },
34
35
  }));
35
36
  describe('OAuthCredentialStorage', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-credential-storage.test.js","sourceRoot":"","sources":["../../../src/code_assist/oauth-credential-storage.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth-credential-storage.test.js","sourceRoot":"","sources":["../../../src/code_assist/oauth-credential-storage.test.ts"],"names":[],"mappings":"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"}