@office-ai/aioncli-core 0.30.0 → 0.30.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 (325) hide show
  1. package/dist/docs/assets/theme-ansi-dark.png +0 -0
  2. package/dist/docs/assets/theme-atom-one-dark.png +0 -0
  3. package/dist/docs/assets/theme-ayu-dark.png +0 -0
  4. package/dist/docs/assets/theme-default-dark.png +0 -0
  5. package/dist/docs/assets/theme-dracula-dark.png +0 -0
  6. package/dist/docs/assets/theme-github-dark.png +0 -0
  7. package/dist/docs/assets/theme-holiday-dark.png +0 -0
  8. package/dist/docs/assets/theme-shades-of-purple-dark.png +0 -0
  9. package/dist/docs/assets/theme-solarized-dark.png +0 -0
  10. package/dist/docs/assets/theme-solarized-light.png +0 -0
  11. package/dist/docs/cli/notifications.md +58 -0
  12. package/dist/docs/redirects.json +20 -0
  13. package/dist/docs/reference/commands.md +563 -0
  14. package/dist/docs/reference/configuration.md +1804 -0
  15. package/dist/docs/reference/keyboard-shortcuts.md +168 -0
  16. package/dist/docs/reference/memport.md +246 -0
  17. package/dist/docs/reference/policy-engine.md +386 -0
  18. package/dist/docs/reference/tools.md +106 -0
  19. package/dist/docs/resources/faq.md +175 -0
  20. package/dist/docs/resources/quota-and-pricing.md +199 -0
  21. package/dist/docs/resources/tos-privacy.md +102 -0
  22. package/dist/docs/resources/troubleshooting.md +176 -0
  23. package/dist/docs/resources/uninstall.md +56 -0
  24. package/dist/src/agents/a2a-errors.d.ts +65 -0
  25. package/dist/src/agents/a2a-errors.js +164 -0
  26. package/dist/src/agents/a2a-errors.js.map +1 -0
  27. package/dist/src/agents/a2a-errors.test.d.ts +6 -0
  28. package/dist/src/agents/a2a-errors.test.js +183 -0
  29. package/dist/src/agents/a2a-errors.test.js.map +1 -0
  30. package/dist/src/agents/auth-provider/api-key-provider.d.ts +30 -0
  31. package/dist/src/agents/auth-provider/api-key-provider.js +66 -0
  32. package/dist/src/agents/auth-provider/api-key-provider.js.map +1 -0
  33. package/dist/src/agents/auth-provider/api-key-provider.test.d.ts +6 -0
  34. package/dist/src/agents/auth-provider/api-key-provider.test.js +130 -0
  35. package/dist/src/agents/auth-provider/api-key-provider.test.js.map +1 -0
  36. package/dist/src/agents/auth-provider/http-provider.d.ts +28 -0
  37. package/dist/src/agents/auth-provider/http-provider.js +73 -0
  38. package/dist/src/agents/auth-provider/http-provider.js.map +1 -0
  39. package/dist/src/agents/auth-provider/http-provider.test.d.ts +6 -0
  40. package/dist/src/agents/auth-provider/http-provider.test.js +112 -0
  41. package/dist/src/agents/auth-provider/http-provider.test.js.map +1 -0
  42. package/dist/src/agents/auth-provider/oauth2-provider.d.ts +65 -0
  43. package/dist/src/agents/auth-provider/oauth2-provider.js +233 -0
  44. package/dist/src/agents/auth-provider/oauth2-provider.js.map +1 -0
  45. package/dist/src/agents/auth-provider/oauth2-provider.test.d.ts +6 -0
  46. package/dist/src/agents/auth-provider/oauth2-provider.test.js +490 -0
  47. package/dist/src/agents/auth-provider/oauth2-provider.test.js.map +1 -0
  48. package/dist/src/agents/browser/analyzeScreenshot.d.ts +35 -0
  49. package/dist/src/agents/browser/analyzeScreenshot.js +183 -0
  50. package/dist/src/agents/browser/analyzeScreenshot.js.map +1 -0
  51. package/dist/src/agents/browser/analyzeScreenshot.test.d.ts +6 -0
  52. package/dist/src/agents/browser/analyzeScreenshot.test.js +161 -0
  53. package/dist/src/agents/browser/analyzeScreenshot.test.js.map +1 -0
  54. package/dist/src/agents/browser/automationOverlay.d.ts +26 -0
  55. package/dist/src/agents/browser/automationOverlay.js +100 -0
  56. package/dist/src/agents/browser/automationOverlay.js.map +1 -0
  57. package/dist/src/agents/browser/browserAgentDefinition.d.ts +50 -0
  58. package/dist/src/agents/browser/browserAgentDefinition.js +141 -0
  59. package/dist/src/agents/browser/browserAgentDefinition.js.map +1 -0
  60. package/dist/src/agents/browser/browserAgentFactory.d.ts +42 -0
  61. package/dist/src/agents/browser/browserAgentFactory.js +116 -0
  62. package/dist/src/agents/browser/browserAgentFactory.js.map +1 -0
  63. package/dist/src/agents/browser/browserAgentFactory.test.d.ts +6 -0
  64. package/dist/src/agents/browser/browserAgentFactory.test.js +240 -0
  65. package/dist/src/agents/browser/browserAgentFactory.test.js.map +1 -0
  66. package/dist/src/agents/browser/browserAgentInvocation.d.ts +34 -0
  67. package/dist/src/agents/browser/browserAgentInvocation.js +386 -0
  68. package/dist/src/agents/browser/browserAgentInvocation.js.map +1 -0
  69. package/dist/src/agents/browser/browserAgentInvocation.test.d.ts +6 -0
  70. package/dist/src/agents/browser/browserAgentInvocation.test.js +382 -0
  71. package/dist/src/agents/browser/browserAgentInvocation.test.js.map +1 -0
  72. package/dist/src/agents/browser/browserManager.d.ts +115 -0
  73. package/dist/src/agents/browser/browserManager.js +370 -0
  74. package/dist/src/agents/browser/browserManager.js.map +1 -0
  75. package/dist/src/agents/browser/browserManager.test.d.ts +6 -0
  76. package/dist/src/agents/browser/browserManager.test.js +382 -0
  77. package/dist/src/agents/browser/browserManager.test.js.map +1 -0
  78. package/dist/src/agents/browser/mcpToolWrapper.d.ts +45 -0
  79. package/dist/src/agents/browser/mcpToolWrapper.js +358 -0
  80. package/dist/src/agents/browser/mcpToolWrapper.js.map +1 -0
  81. package/dist/src/agents/browser/mcpToolWrapper.test.d.ts +6 -0
  82. package/dist/src/agents/browser/mcpToolWrapper.test.js +126 -0
  83. package/dist/src/agents/browser/mcpToolWrapper.test.js.map +1 -0
  84. package/dist/src/agents/browser/mcpToolWrapperConfirmation.test.d.ts +6 -0
  85. package/dist/src/agents/browser/mcpToolWrapperConfirmation.test.js +59 -0
  86. package/dist/src/agents/browser/mcpToolWrapperConfirmation.test.js.map +1 -0
  87. package/dist/src/agents/browser/modelAvailability.d.ts +23 -0
  88. package/dist/src/agents/browser/modelAvailability.js +23 -0
  89. package/dist/src/agents/browser/modelAvailability.js.map +1 -0
  90. package/dist/src/agents/cli-help-agent.d.ts +2 -2
  91. package/dist/src/billing/billing.d.ts +80 -0
  92. package/dist/src/billing/billing.js +128 -0
  93. package/dist/src/billing/billing.js.map +1 -0
  94. package/dist/src/billing/billing.test.d.ts +6 -0
  95. package/dist/src/billing/billing.test.js +182 -0
  96. package/dist/src/billing/billing.test.js.map +1 -0
  97. package/dist/src/billing/index.d.ts +6 -0
  98. package/dist/src/billing/index.js +7 -0
  99. package/dist/src/billing/index.js.map +1 -0
  100. package/dist/src/code_assist/oauth2.d.ts +1 -1
  101. package/dist/src/code_assist/types.d.ts +26 -26
  102. package/dist/src/config/agent-loop-context.d.ts +22 -0
  103. package/dist/src/config/agent-loop-context.js +7 -0
  104. package/dist/src/config/agent-loop-context.js.map +1 -0
  105. package/dist/src/config/trackerFeatureFlag.test.d.ts +6 -0
  106. package/dist/src/config/trackerFeatureFlag.test.js +43 -0
  107. package/dist/src/config/trackerFeatureFlag.test.js.map +1 -0
  108. package/dist/src/config/userHintService.d.ts +46 -0
  109. package/dist/src/config/userHintService.js +81 -0
  110. package/dist/src/config/userHintService.js.map +1 -0
  111. package/dist/src/config/userHintService.test.d.ts +6 -0
  112. package/dist/src/config/userHintService.test.js +62 -0
  113. package/dist/src/config/userHintService.test.js.map +1 -0
  114. package/dist/src/core/localLiteRtLmClient.d.ts +24 -0
  115. package/dist/src/core/localLiteRtLmClient.js +77 -0
  116. package/dist/src/core/localLiteRtLmClient.js.map +1 -0
  117. package/dist/src/core/localLiteRtLmClient.test.d.ts +6 -0
  118. package/dist/src/core/localLiteRtLmClient.test.js +87 -0
  119. package/dist/src/core/localLiteRtLmClient.test.js.map +1 -0
  120. package/dist/src/core/openaiContentGenerator.d.ts +1 -0
  121. package/dist/src/core/openaiContentGenerator.js +13 -13
  122. package/dist/src/core/openaiContentGenerator.js.map +1 -1
  123. package/dist/src/hooks/runtimeHooks.test.d.ts +6 -0
  124. package/dist/src/hooks/runtimeHooks.test.js +100 -0
  125. package/dist/src/hooks/runtimeHooks.test.js.map +1 -0
  126. package/dist/src/ide/types.d.ts +6 -6
  127. package/dist/src/mcp/mcp-oauth-provider.d.ts +43 -0
  128. package/dist/src/mcp/mcp-oauth-provider.js +67 -0
  129. package/dist/src/mcp/mcp-oauth-provider.js.map +1 -0
  130. package/dist/src/mcp/mcp-oauth-provider.test.d.ts +6 -0
  131. package/dist/src/mcp/mcp-oauth-provider.test.js +63 -0
  132. package/dist/src/mcp/mcp-oauth-provider.test.js.map +1 -0
  133. package/dist/src/policy/integrity.d.ts +45 -0
  134. package/dist/src/policy/integrity.js +121 -0
  135. package/dist/src/policy/integrity.js.map +1 -0
  136. package/dist/src/policy/integrity.test.d.ts +6 -0
  137. package/dist/src/policy/integrity.test.js +132 -0
  138. package/dist/src/policy/integrity.test.js.map +1 -0
  139. package/dist/src/policy/policies/conseca.toml +6 -0
  140. package/dist/src/policy/workspace-policy.test.js +231 -0
  141. package/dist/src/policy/workspace-policy.test.js.map +1 -0
  142. package/dist/src/routing/strategies/approvalModeStrategy.d.ts +18 -0
  143. package/dist/src/routing/strategies/approvalModeStrategy.js +59 -0
  144. package/dist/src/routing/strategies/approvalModeStrategy.js.map +1 -0
  145. package/dist/src/routing/strategies/approvalModeStrategy.test.d.ts +6 -0
  146. package/dist/src/routing/strategies/approvalModeStrategy.test.js +140 -0
  147. package/dist/src/routing/strategies/approvalModeStrategy.test.js.map +1 -0
  148. package/dist/src/routing/strategies/gemmaClassifierStrategy.d.ts +14 -0
  149. package/dist/src/routing/strategies/gemmaClassifierStrategy.js +182 -0
  150. package/dist/src/routing/strategies/gemmaClassifierStrategy.js.map +1 -0
  151. package/dist/src/routing/strategies/gemmaClassifierStrategy.test.d.ts +6 -0
  152. package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js +218 -0
  153. package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js.map +1 -0
  154. package/dist/src/safety/conseca/conseca.d.ts +31 -0
  155. package/dist/src/safety/conseca/conseca.js +105 -0
  156. package/dist/src/safety/conseca/conseca.js.map +1 -0
  157. package/dist/src/safety/conseca/conseca.test.js +226 -0
  158. package/dist/src/safety/conseca/conseca.test.js.map +1 -0
  159. package/dist/src/safety/conseca/integration.test.js +19 -0
  160. package/dist/src/safety/conseca/integration.test.js.map +1 -0
  161. package/dist/src/safety/conseca/policy-enforcer.d.ts +13 -0
  162. package/dist/src/safety/conseca/policy-enforcer.js +135 -0
  163. package/dist/src/safety/conseca/policy-enforcer.js.map +1 -0
  164. package/dist/src/safety/conseca/policy-enforcer.test.js +141 -0
  165. package/dist/src/safety/conseca/policy-enforcer.test.js.map +1 -0
  166. package/dist/src/safety/conseca/policy-generator.d.ts +15 -0
  167. package/dist/src/safety/conseca/policy-generator.js +144 -0
  168. package/dist/src/safety/conseca/policy-generator.js.map +1 -0
  169. package/dist/src/safety/conseca/policy-generator.test.d.ts +6 -0
  170. package/dist/src/safety/conseca/policy-generator.test.js +84 -0
  171. package/dist/src/safety/conseca/policy-generator.test.js.map +1 -0
  172. package/dist/src/safety/conseca/types.d.ts +15 -0
  173. package/dist/src/safety/conseca/types.js +7 -0
  174. package/dist/src/safety/conseca/types.js.map +1 -0
  175. package/dist/src/scheduler/scheduler_parallel.test.d.ts +6 -0
  176. package/dist/src/scheduler/scheduler_parallel.test.js +401 -0
  177. package/dist/src/scheduler/scheduler_parallel.test.js.map +1 -0
  178. package/dist/src/services/FolderTrustDiscoveryService.d.ts +32 -0
  179. package/dist/src/services/FolderTrustDiscoveryService.js +169 -0
  180. package/dist/src/services/FolderTrustDiscoveryService.js.map +1 -0
  181. package/dist/src/services/FolderTrustDiscoveryService.test.d.ts +6 -0
  182. package/dist/src/services/FolderTrustDiscoveryService.test.js +118 -0
  183. package/dist/src/services/FolderTrustDiscoveryService.test.js.map +1 -0
  184. package/dist/src/services/fileKeychain.d.ts +24 -0
  185. package/dist/src/services/fileKeychain.js +123 -0
  186. package/dist/src/services/fileKeychain.js.map +1 -0
  187. package/dist/src/services/keychainService.d.ts +51 -0
  188. package/dist/src/services/keychainService.js +133 -0
  189. package/dist/src/services/keychainService.js.map +1 -0
  190. package/dist/src/services/keychainService.test.d.ts +6 -0
  191. package/dist/src/services/keychainService.test.js +150 -0
  192. package/dist/src/services/keychainService.test.js.map +1 -0
  193. package/dist/src/services/keychainTypes.d.ts +41 -0
  194. package/dist/src/services/keychainTypes.js +18 -0
  195. package/dist/src/services/keychainTypes.js.map +1 -0
  196. package/dist/src/services/trackerService.d.ts +49 -0
  197. package/dist/src/services/trackerService.js +193 -0
  198. package/dist/src/services/trackerService.js.map +1 -0
  199. package/dist/src/services/trackerService.test.d.ts +6 -0
  200. package/dist/src/services/trackerService.test.js +117 -0
  201. package/dist/src/services/trackerService.test.js.map +1 -0
  202. package/dist/src/services/trackerTypes.d.ts +51 -0
  203. package/dist/src/services/trackerTypes.js +33 -0
  204. package/dist/src/services/trackerTypes.js.map +1 -0
  205. package/dist/src/telemetry/billingEvents.d.ts +75 -0
  206. package/dist/src/telemetry/billingEvents.js +181 -0
  207. package/dist/src/telemetry/billingEvents.js.map +1 -0
  208. package/dist/src/telemetry/billingEvents.test.d.ts +6 -0
  209. package/dist/src/telemetry/billingEvents.test.js +139 -0
  210. package/dist/src/telemetry/billingEvents.test.js.map +1 -0
  211. package/dist/src/telemetry/conseca-logger.d.ts +9 -0
  212. package/dist/src/telemetry/conseca-logger.js +91 -0
  213. package/dist/src/telemetry/conseca-logger.js.map +1 -0
  214. package/dist/src/telemetry/conseca-logger.test.d.ts +6 -0
  215. package/dist/src/telemetry/conseca-logger.test.js +90 -0
  216. package/dist/src/telemetry/conseca-logger.test.js.map +1 -0
  217. package/dist/src/telemetry/trace.test.d.ts +6 -0
  218. package/dist/src/telemetry/trace.test.js +116 -0
  219. package/dist/src/telemetry/trace.test.js.map +1 -0
  220. package/dist/src/tools/definitions/trackerTools.d.ts +12 -0
  221. package/dist/src/tools/definitions/trackerTools.js +146 -0
  222. package/dist/src/tools/definitions/trackerTools.js.map +1 -0
  223. package/dist/src/tools/diff-utils.d.ts +9 -0
  224. package/dist/src/tools/diff-utils.js +66 -0
  225. package/dist/src/tools/diff-utils.js.map +1 -0
  226. package/dist/src/tools/diff-utils.test.d.ts +6 -0
  227. package/dist/src/tools/diff-utils.test.js +53 -0
  228. package/dist/src/tools/diff-utils.test.js.map +1 -0
  229. package/dist/src/tools/grep-utils.d.ts +49 -0
  230. package/dist/src/tools/grep-utils.js +147 -0
  231. package/dist/src/tools/grep-utils.js.map +1 -0
  232. package/dist/src/tools/omissionPlaceholderDetector.d.ts +15 -0
  233. package/dist/src/tools/omissionPlaceholderDetector.js +90 -0
  234. package/dist/src/tools/omissionPlaceholderDetector.js.map +1 -0
  235. package/dist/src/tools/omissionPlaceholderDetector.test.d.ts +6 -0
  236. package/dist/src/tools/omissionPlaceholderDetector.test.js +49 -0
  237. package/dist/src/tools/omissionPlaceholderDetector.test.js.map +1 -0
  238. package/dist/src/tools/trackerTools.d.ts +122 -0
  239. package/dist/src/tools/trackerTools.js +365 -0
  240. package/dist/src/tools/trackerTools.js.map +1 -0
  241. package/dist/src/tools/trackerTools.test.d.ts +6 -0
  242. package/dist/src/tools/trackerTools.test.js +97 -0
  243. package/dist/src/tools/trackerTools.test.js.map +1 -0
  244. package/dist/src/utils/approvalModeUtils.d.ts +14 -0
  245. package/dist/src/utils/approvalModeUtils.js +35 -0
  246. package/dist/src/utils/approvalModeUtils.js.map +1 -0
  247. package/dist/src/utils/approvalModeUtils.test.d.ts +6 -0
  248. package/dist/src/utils/approvalModeUtils.test.js +36 -0
  249. package/dist/src/utils/approvalModeUtils.test.js.map +1 -0
  250. package/dist/src/utils/cache.d.ts +63 -0
  251. package/dist/src/utils/cache.js +103 -0
  252. package/dist/src/utils/cache.js.map +1 -0
  253. package/dist/src/utils/cache.test.d.ts +6 -0
  254. package/dist/src/utils/cache.test.js +158 -0
  255. package/dist/src/utils/cache.test.js.map +1 -0
  256. package/dist/src/utils/checkpointUtils.d.ts +2 -2
  257. package/dist/src/utils/compatibility.d.ts +41 -0
  258. package/dist/src/utils/compatibility.js +112 -0
  259. package/dist/src/utils/compatibility.js.map +1 -0
  260. package/dist/src/utils/compatibility.test.d.ts +6 -0
  261. package/dist/src/utils/compatibility.test.js +233 -0
  262. package/dist/src/utils/compatibility.test.js.map +1 -0
  263. package/dist/src/utils/envExpansion.d.ts +18 -0
  264. package/dist/src/utils/envExpansion.js +46 -0
  265. package/dist/src/utils/envExpansion.js.map +1 -0
  266. package/dist/src/utils/envExpansion.test.d.ts +6 -0
  267. package/dist/src/utils/envExpansion.test.js +110 -0
  268. package/dist/src/utils/envExpansion.test.js.map +1 -0
  269. package/dist/src/utils/errors_timeout.test.d.ts +6 -0
  270. package/dist/src/utils/errors_timeout.test.js +40 -0
  271. package/dist/src/utils/errors_timeout.test.js.map +1 -0
  272. package/dist/src/utils/fetch.test.d.ts +6 -0
  273. package/dist/src/utils/fetch.test.js +206 -0
  274. package/dist/src/utils/fetch.test.js.map +1 -0
  275. package/dist/src/utils/markdownUtils.d.ts +22 -0
  276. package/dist/src/utils/markdownUtils.js +126 -0
  277. package/dist/src/utils/markdownUtils.js.map +1 -0
  278. package/dist/src/utils/markdownUtils.test.d.ts +6 -0
  279. package/dist/src/utils/markdownUtils.test.js +107 -0
  280. package/dist/src/utils/markdownUtils.test.js.map +1 -0
  281. package/dist/src/utils/oauth-flow.d.ts +105 -0
  282. package/dist/src/utils/oauth-flow.js +370 -0
  283. package/dist/src/utils/oauth-flow.js.map +1 -0
  284. package/dist/src/utils/oauth-flow.test.d.ts +6 -0
  285. package/dist/src/utils/oauth-flow.test.js +360 -0
  286. package/dist/src/utils/oauth-flow.test.js.map +1 -0
  287. package/dist/src/utils/sessionUtils.d.ts +14 -0
  288. package/dist/src/utils/sessionUtils.js +122 -0
  289. package/dist/src/utils/sessionUtils.js.map +1 -0
  290. package/dist/src/utils/sessionUtils.test.d.ts +1 -0
  291. package/dist/src/utils/sessionUtils.test.js +171 -0
  292. package/dist/src/utils/sessionUtils.test.js.map +1 -0
  293. package/dist/src/voice/responseFormatter.d.ts +38 -0
  294. package/dist/src/voice/responseFormatter.js +130 -0
  295. package/dist/src/voice/responseFormatter.js.map +1 -0
  296. package/dist/src/voice/responseFormatter.test.d.ts +6 -0
  297. package/dist/src/voice/responseFormatter.test.js +214 -0
  298. package/dist/src/voice/responseFormatter.test.js.map +1 -0
  299. package/dist/tsconfig.tsbuildinfo +1 -1
  300. package/package.json +1 -1
  301. package/dist/docs/CONTRIBUTING.md +0 -555
  302. package/dist/src/agents/executor.d.ts +0 -114
  303. package/dist/src/agents/executor.js +0 -779
  304. package/dist/src/agents/executor.js.map +0 -1
  305. package/dist/src/agents/executor.test.js +0 -1362
  306. package/dist/src/agents/executor.test.js.map +0 -1
  307. package/dist/src/agents/invocation.d.ts +0 -46
  308. package/dist/src/agents/invocation.js +0 -102
  309. package/dist/src/agents/invocation.js.map +0 -1
  310. package/dist/src/agents/invocation.test.js +0 -215
  311. package/dist/src/agents/invocation.test.js.map +0 -1
  312. package/dist/src/core/subagent.d.ts +0 -236
  313. package/dist/src/core/subagent.js +0 -482
  314. package/dist/src/core/subagent.js.map +0 -1
  315. package/dist/src/core/subagent.test.js +0 -530
  316. package/dist/src/core/subagent.test.js.map +0 -1
  317. package/dist/src/tools/smart-edit.d.ts +0 -78
  318. package/dist/src/tools/smart-edit.js +0 -717
  319. package/dist/src/tools/smart-edit.js.map +0 -1
  320. package/dist/src/tools/smart-edit.test.js +0 -592
  321. package/dist/src/tools/smart-edit.test.js.map +0 -1
  322. /package/dist/src/{agents/executor.test.d.ts → policy/workspace-policy.test.d.ts} +0 -0
  323. /package/dist/src/{agents/invocation.test.d.ts → safety/conseca/conseca.test.d.ts} +0 -0
  324. /package/dist/src/{core/subagent.test.d.ts → safety/conseca/integration.test.d.ts} +0 -0
  325. /package/dist/src/{tools/smart-edit.test.d.ts → safety/conseca/policy-enforcer.test.d.ts} +0 -0
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { z } from 'zod';
7
+ /**
8
+ * Interface for OS-level secure storage operations.
9
+ * Note: Method names must match the underlying library (e.g. keytar)
10
+ * to support correct dynamic loading and schema validation.
11
+ */
12
+ export interface Keychain {
13
+ getPassword(service: string, account: string): Promise<string | null>;
14
+ setPassword(service: string, account: string, password: string): Promise<void>;
15
+ deletePassword(service: string, account: string): Promise<boolean>;
16
+ findCredentials(service: string): Promise<Array<{
17
+ account: string;
18
+ password: string;
19
+ }>>;
20
+ }
21
+ /**
22
+ * Zod schema to validate that a module satisfies the Keychain interface.
23
+ */
24
+ export declare const KeychainSchema: z.ZodObject<{
25
+ getPassword: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>;
26
+ setPassword: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>;
27
+ deletePassword: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>;
28
+ findCredentials: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>;
29
+ }, "strip", z.ZodTypeAny, {
30
+ getPassword: (...args: unknown[]) => unknown;
31
+ setPassword: (...args: unknown[]) => unknown;
32
+ deletePassword: (...args: unknown[]) => unknown;
33
+ findCredentials: (...args: unknown[]) => unknown;
34
+ }, {
35
+ getPassword: (...args: unknown[]) => unknown;
36
+ setPassword: (...args: unknown[]) => unknown;
37
+ deletePassword: (...args: unknown[]) => unknown;
38
+ findCredentials: (...args: unknown[]) => unknown;
39
+ }>;
40
+ export declare const KEYCHAIN_TEST_PREFIX = "__keychain_test__";
41
+ export declare const SECRET_PREFIX = "__secret__";
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { z } from 'zod';
7
+ /**
8
+ * Zod schema to validate that a module satisfies the Keychain interface.
9
+ */
10
+ export const KeychainSchema = z.object({
11
+ getPassword: z.function(),
12
+ setPassword: z.function(),
13
+ deletePassword: z.function(),
14
+ findCredentials: z.function(),
15
+ });
16
+ export const KEYCHAIN_TEST_PREFIX = '__keychain_test__';
17
+ export const SECRET_PREFIX = '__secret__';
18
+ //# sourceMappingURL=keychainTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keychainTypes.js","sourceRoot":"","sources":["../../../src/services/keychainTypes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoBxB;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,WAAW,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzB,WAAW,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzB,cAAc,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC5B,eAAe,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,mBAAmB,CAAC;AACxD,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { type TrackerTask } from './trackerTypes.js';
7
+ export declare class TrackerService {
8
+ readonly trackerDir: string;
9
+ private readonly tasksDir;
10
+ private initialized;
11
+ constructor(trackerDir: string);
12
+ private ensureInitialized;
13
+ /**
14
+ * Generates a 6-character hex ID.
15
+ */
16
+ private generateId;
17
+ /**
18
+ * Creates a new task and saves it to disk.
19
+ */
20
+ createTask(taskData: Omit<TrackerTask, 'id'>): Promise<TrackerTask>;
21
+ /**
22
+ * Helper to read and validate a JSON file.
23
+ */
24
+ private readJsonFile;
25
+ /**
26
+ * Reads a task by ID.
27
+ */
28
+ getTask(id: string): Promise<TrackerTask | null>;
29
+ /**
30
+ * Lists all tasks in the tracker.
31
+ */
32
+ listTasks(): Promise<TrackerTask[]>;
33
+ /**
34
+ * Updates an existing task and saves it to disk.
35
+ */
36
+ updateTask(id: string, updates: Partial<TrackerTask>): Promise<TrackerTask>;
37
+ /**
38
+ * Saves a task to disk.
39
+ */
40
+ private saveTask;
41
+ /**
42
+ * Validates that a task can be closed (all dependencies must be closed).
43
+ */
44
+ private validateCanClose;
45
+ /**
46
+ * Validates that there are no circular dependencies.
47
+ */
48
+ private validateNoCircularDependencies;
49
+ }
@@ -0,0 +1,193 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import fs from 'node:fs/promises';
7
+ import path from 'node:path';
8
+ import { randomBytes } from 'node:crypto';
9
+ import { debugLogger } from '../utils/debugLogger.js';
10
+ import { coreEvents } from '../utils/events.js';
11
+ import { TrackerTaskSchema, TaskStatus, } from './trackerTypes.js';
12
+ import {} from 'zod';
13
+ export class TrackerService {
14
+ trackerDir;
15
+ tasksDir;
16
+ initialized = false;
17
+ constructor(trackerDir) {
18
+ this.trackerDir = trackerDir;
19
+ this.tasksDir = trackerDir;
20
+ }
21
+ async ensureInitialized() {
22
+ if (!this.initialized) {
23
+ await fs.mkdir(this.tasksDir, { recursive: true });
24
+ this.initialized = true;
25
+ }
26
+ }
27
+ /**
28
+ * Generates a 6-character hex ID.
29
+ */
30
+ generateId() {
31
+ return randomBytes(3).toString('hex');
32
+ }
33
+ /**
34
+ * Creates a new task and saves it to disk.
35
+ */
36
+ async createTask(taskData) {
37
+ await this.ensureInitialized();
38
+ const id = this.generateId();
39
+ const task = {
40
+ ...taskData,
41
+ id,
42
+ };
43
+ if (task.parentId) {
44
+ const parentList = await this.listTasks();
45
+ if (!parentList.find((t) => t.id === task.parentId)) {
46
+ throw new Error(`Parent task with ID ${task.parentId} not found.`);
47
+ }
48
+ }
49
+ TrackerTaskSchema.parse(task);
50
+ await this.saveTask(task);
51
+ return task;
52
+ }
53
+ /**
54
+ * Helper to read and validate a JSON file.
55
+ */
56
+ async readJsonFile(filePath, schema) {
57
+ try {
58
+ const content = await fs.readFile(filePath, 'utf8');
59
+ const data = JSON.parse(content);
60
+ return schema.parse(data);
61
+ }
62
+ catch (error) {
63
+ if (error &&
64
+ typeof error === 'object' &&
65
+ 'code' in error &&
66
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
67
+ error.code === 'ENOENT') {
68
+ return null;
69
+ }
70
+ const fileName = path.basename(filePath);
71
+ debugLogger.warn(`Failed to read or parse task file ${fileName}:`, error);
72
+ coreEvents.emitFeedback('warning', `Task tracker encountered an issue reading ${fileName}. The data might be corrupted.`, error);
73
+ throw error;
74
+ }
75
+ }
76
+ /**
77
+ * Reads a task by ID.
78
+ */
79
+ async getTask(id) {
80
+ await this.ensureInitialized();
81
+ const taskPath = path.join(this.tasksDir, `${id}.json`);
82
+ return this.readJsonFile(taskPath, TrackerTaskSchema);
83
+ }
84
+ /**
85
+ * Lists all tasks in the tracker.
86
+ */
87
+ async listTasks() {
88
+ await this.ensureInitialized();
89
+ try {
90
+ const files = await fs.readdir(this.tasksDir);
91
+ const jsonFiles = files.filter((f) => f.endsWith('.json'));
92
+ const tasks = await Promise.all(jsonFiles.map(async (f) => {
93
+ const taskPath = path.join(this.tasksDir, f);
94
+ return this.readJsonFile(taskPath, TrackerTaskSchema);
95
+ }));
96
+ return tasks.filter((t) => t !== null);
97
+ }
98
+ catch (error) {
99
+ if (error &&
100
+ typeof error === 'object' &&
101
+ 'code' in error &&
102
+ error.code === 'ENOENT') {
103
+ return [];
104
+ }
105
+ throw error;
106
+ }
107
+ }
108
+ /**
109
+ * Updates an existing task and saves it to disk.
110
+ */
111
+ async updateTask(id, updates) {
112
+ const isClosing = updates.status === TaskStatus.CLOSED;
113
+ const changingDependencies = updates.dependencies !== undefined;
114
+ let taskMap;
115
+ if (isClosing || changingDependencies) {
116
+ const allTasks = await this.listTasks();
117
+ taskMap = new Map(allTasks.map((t) => [t.id, t]));
118
+ }
119
+ const task = taskMap ? taskMap.get(id) : await this.getTask(id);
120
+ if (!task) {
121
+ throw new Error(`Task with ID ${id} not found.`);
122
+ }
123
+ const updatedTask = { ...task, ...updates, id: task.id };
124
+ if (updatedTask.parentId) {
125
+ const parentExists = taskMap
126
+ ? taskMap.has(updatedTask.parentId)
127
+ : !!(await this.getTask(updatedTask.parentId));
128
+ if (!parentExists) {
129
+ throw new Error(`Parent task with ID ${updatedTask.parentId} not found.`);
130
+ }
131
+ }
132
+ if (taskMap) {
133
+ if (isClosing && task.status !== TaskStatus.CLOSED) {
134
+ this.validateCanClose(updatedTask, taskMap);
135
+ }
136
+ if (changingDependencies) {
137
+ taskMap.set(updatedTask.id, updatedTask);
138
+ this.validateNoCircularDependencies(updatedTask, taskMap);
139
+ }
140
+ }
141
+ TrackerTaskSchema.parse(updatedTask);
142
+ await this.saveTask(updatedTask);
143
+ return updatedTask;
144
+ }
145
+ /**
146
+ * Saves a task to disk.
147
+ */
148
+ async saveTask(task) {
149
+ const taskPath = path.join(this.tasksDir, `${task.id}.json`);
150
+ await fs.writeFile(taskPath, JSON.stringify(task, null, 2), 'utf8');
151
+ }
152
+ /**
153
+ * Validates that a task can be closed (all dependencies must be closed).
154
+ */
155
+ validateCanClose(task, taskMap) {
156
+ for (const depId of task.dependencies) {
157
+ const dep = taskMap.get(depId);
158
+ if (!dep) {
159
+ throw new Error(`Dependency ${depId} not found for task ${task.id}.`);
160
+ }
161
+ if (dep.status !== TaskStatus.CLOSED) {
162
+ throw new Error(`Cannot close task ${task.id} because dependency ${depId} is still ${dep.status}.`);
163
+ }
164
+ }
165
+ }
166
+ /**
167
+ * Validates that there are no circular dependencies.
168
+ */
169
+ validateNoCircularDependencies(task, taskMap) {
170
+ const visited = new Set();
171
+ const stack = new Set();
172
+ const check = (currentId) => {
173
+ if (stack.has(currentId)) {
174
+ throw new Error(`Circular dependency detected involving task ${currentId}.`);
175
+ }
176
+ if (visited.has(currentId)) {
177
+ return;
178
+ }
179
+ visited.add(currentId);
180
+ stack.add(currentId);
181
+ const currentTask = taskMap.get(currentId);
182
+ if (!currentTask) {
183
+ throw new Error(`Dependency ${currentId} not found.`);
184
+ }
185
+ for (const depId of currentTask.dependencies) {
186
+ check(depId);
187
+ }
188
+ stack.delete(currentId);
189
+ };
190
+ check(task.id);
191
+ }
192
+ }
193
+ //# sourceMappingURL=trackerService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackerService.js","sourceRoot":"","sources":["../../../src/services/trackerService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,117 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
7
+ import * as fs from 'node:fs/promises';
8
+ import * as os from 'node:os';
9
+ import * as path from 'node:path';
10
+ import { TrackerService } from './trackerService.js';
11
+ import { TaskStatus, TaskType } from './trackerTypes.js';
12
+ describe('TrackerService', () => {
13
+ let testTrackerDir;
14
+ let service;
15
+ beforeEach(async () => {
16
+ testTrackerDir = await fs.mkdtemp(path.join(os.tmpdir(), 'tracker-service-test-'));
17
+ service = new TrackerService(testTrackerDir);
18
+ });
19
+ afterEach(async () => {
20
+ await fs.rm(testTrackerDir, { recursive: true, force: true });
21
+ });
22
+ it('should create a task with a generated 6-char hex ID', async () => {
23
+ const taskData = {
24
+ title: 'Test Task',
25
+ description: 'Test Description',
26
+ type: TaskType.TASK,
27
+ status: TaskStatus.OPEN,
28
+ dependencies: [],
29
+ };
30
+ const task = await service.createTask(taskData);
31
+ expect(task.id).toMatch(/^[0-9a-f]{6}$/);
32
+ expect(task.title).toBe(taskData.title);
33
+ const savedTask = await service.getTask(task.id);
34
+ expect(savedTask).toEqual(task);
35
+ });
36
+ it('should list all tasks', async () => {
37
+ await service.createTask({
38
+ title: 'Task 1',
39
+ description: 'Desc 1',
40
+ type: TaskType.TASK,
41
+ status: TaskStatus.OPEN,
42
+ dependencies: [],
43
+ });
44
+ await service.createTask({
45
+ title: 'Task 2',
46
+ description: 'Desc 2',
47
+ type: TaskType.TASK,
48
+ status: TaskStatus.OPEN,
49
+ dependencies: [],
50
+ });
51
+ const tasks = await service.listTasks();
52
+ expect(tasks.length).toBe(2);
53
+ expect(tasks.map((t) => t.title)).toContain('Task 1');
54
+ expect(tasks.map((t) => t.title)).toContain('Task 2');
55
+ });
56
+ it('should update a task', async () => {
57
+ const task = await service.createTask({
58
+ title: 'Original Title',
59
+ description: 'Original Desc',
60
+ type: TaskType.TASK,
61
+ status: TaskStatus.OPEN,
62
+ dependencies: [],
63
+ });
64
+ const updated = await service.updateTask(task.id, {
65
+ title: 'New Title',
66
+ status: TaskStatus.IN_PROGRESS,
67
+ });
68
+ expect(updated.title).toBe('New Title');
69
+ expect(updated.status).toBe('in_progress');
70
+ expect(updated.description).toBe('Original Desc');
71
+ const retrieved = await service.getTask(task.id);
72
+ expect(retrieved).toEqual(updated);
73
+ });
74
+ it('should prevent closing a task if dependencies are not closed', async () => {
75
+ const dep = await service.createTask({
76
+ title: 'Dependency',
77
+ description: 'Must be closed first',
78
+ type: TaskType.TASK,
79
+ status: TaskStatus.OPEN,
80
+ dependencies: [],
81
+ });
82
+ const task = await service.createTask({
83
+ title: 'Main Task',
84
+ description: 'Depends on dep',
85
+ type: TaskType.TASK,
86
+ status: TaskStatus.OPEN,
87
+ dependencies: [dep.id],
88
+ });
89
+ await expect(service.updateTask(task.id, { status: TaskStatus.CLOSED })).rejects.toThrow(/Cannot close task/);
90
+ // Close dependency
91
+ await service.updateTask(dep.id, { status: TaskStatus.CLOSED });
92
+ // Now it should work
93
+ const updated = await service.updateTask(task.id, {
94
+ status: TaskStatus.CLOSED,
95
+ });
96
+ expect(updated.status).toBe('closed');
97
+ });
98
+ it('should detect circular dependencies', async () => {
99
+ const taskA = await service.createTask({
100
+ title: 'Task A',
101
+ description: 'A',
102
+ type: TaskType.TASK,
103
+ status: TaskStatus.OPEN,
104
+ dependencies: [],
105
+ });
106
+ const taskB = await service.createTask({
107
+ title: 'Task B',
108
+ description: 'B',
109
+ type: TaskType.TASK,
110
+ status: TaskStatus.OPEN,
111
+ dependencies: [taskA.id],
112
+ });
113
+ // Try to make A depend on B
114
+ await expect(service.updateTask(taskA.id, { dependencies: [taskB.id] })).rejects.toThrow(/Circular dependency detected/);
115
+ });
116
+ });
117
+ //# sourceMappingURL=trackerService.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackerService.test.js","sourceRoot":"","sources":["../../../src/services/trackerService.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { z } from 'zod';
7
+ export declare enum TaskType {
8
+ EPIC = "epic",
9
+ TASK = "task",
10
+ BUG = "bug"
11
+ }
12
+ export declare const TaskTypeSchema: z.ZodNativeEnum<typeof TaskType>;
13
+ export declare enum TaskStatus {
14
+ OPEN = "open",
15
+ IN_PROGRESS = "in_progress",
16
+ BLOCKED = "blocked",
17
+ CLOSED = "closed"
18
+ }
19
+ export declare const TaskStatusSchema: z.ZodNativeEnum<typeof TaskStatus>;
20
+ export declare const TrackerTaskSchema: z.ZodObject<{
21
+ id: z.ZodString;
22
+ title: z.ZodString;
23
+ description: z.ZodString;
24
+ type: z.ZodNativeEnum<typeof TaskType>;
25
+ status: z.ZodNativeEnum<typeof TaskStatus>;
26
+ parentId: z.ZodOptional<z.ZodString>;
27
+ dependencies: z.ZodArray<z.ZodString, "many">;
28
+ subagentSessionId: z.ZodOptional<z.ZodString>;
29
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
30
+ }, "strip", z.ZodTypeAny, {
31
+ description: string;
32
+ type: TaskType;
33
+ status: TaskStatus;
34
+ id: string;
35
+ title: string;
36
+ dependencies: string[];
37
+ metadata?: Record<string, unknown> | undefined;
38
+ parentId?: string | undefined;
39
+ subagentSessionId?: string | undefined;
40
+ }, {
41
+ description: string;
42
+ type: TaskType;
43
+ status: TaskStatus;
44
+ id: string;
45
+ title: string;
46
+ dependencies: string[];
47
+ metadata?: Record<string, unknown> | undefined;
48
+ parentId?: string | undefined;
49
+ subagentSessionId?: string | undefined;
50
+ }>;
51
+ export type TrackerTask = z.infer<typeof TrackerTaskSchema>;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { z } from 'zod';
7
+ export var TaskType;
8
+ (function (TaskType) {
9
+ TaskType["EPIC"] = "epic";
10
+ TaskType["TASK"] = "task";
11
+ TaskType["BUG"] = "bug";
12
+ })(TaskType || (TaskType = {}));
13
+ export const TaskTypeSchema = z.nativeEnum(TaskType);
14
+ export var TaskStatus;
15
+ (function (TaskStatus) {
16
+ TaskStatus["OPEN"] = "open";
17
+ TaskStatus["IN_PROGRESS"] = "in_progress";
18
+ TaskStatus["BLOCKED"] = "blocked";
19
+ TaskStatus["CLOSED"] = "closed";
20
+ })(TaskStatus || (TaskStatus = {}));
21
+ export const TaskStatusSchema = z.nativeEnum(TaskStatus);
22
+ export const TrackerTaskSchema = z.object({
23
+ id: z.string().length(6),
24
+ title: z.string(),
25
+ description: z.string(),
26
+ type: TaskTypeSchema,
27
+ status: TaskStatusSchema,
28
+ parentId: z.string().optional(),
29
+ dependencies: z.array(z.string()),
30
+ subagentSessionId: z.string().optional(),
31
+ metadata: z.record(z.unknown()).optional(),
32
+ });
33
+ //# sourceMappingURL=trackerTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackerTypes.js","sourceRoot":"","sources":["../../../src/services/trackerTypes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAN,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,uBAAW,CAAA;AACb,CAAC,EAJW,QAAQ,KAAR,QAAQ,QAInB;AACD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAErD,MAAM,CAAN,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,2BAAa,CAAA;IACb,yCAA2B,CAAA;IAC3B,iCAAmB,CAAA;IACnB,+BAAiB,CAAA;AACnB,CAAC,EALW,UAAU,KAAV,UAAU,QAKrB;AACD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAEzD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACxB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,gBAAgB;IACxB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACjC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACxC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { Config } from '../config/config.js';
7
+ import type { LogAttributes } from '@opentelemetry/api-logs';
8
+ import type { BaseTelemetryEvent } from './types.js';
9
+ import type { OverageStrategy } from '../billing/billing.js';
10
+ /** Overage menu option that can be selected by the user */
11
+ export type OverageOption = 'use_credits' | 'use_fallback' | 'manage' | 'stop' | 'get_credits';
12
+ export declare const EVENT_OVERAGE_MENU_SHOWN = "gemini_cli.overage_menu_shown";
13
+ export declare class OverageMenuShownEvent implements BaseTelemetryEvent {
14
+ 'event.name': 'overage_menu_shown';
15
+ 'event.timestamp': string;
16
+ model: string;
17
+ credit_balance: number;
18
+ overage_strategy: OverageStrategy;
19
+ constructor(model: string, creditBalance: number, overageStrategy: OverageStrategy);
20
+ toOpenTelemetryAttributes(config: Config): LogAttributes;
21
+ toLogBody(): string;
22
+ }
23
+ export declare const EVENT_OVERAGE_OPTION_SELECTED = "gemini_cli.overage_option_selected";
24
+ export declare class OverageOptionSelectedEvent implements BaseTelemetryEvent {
25
+ 'event.name': 'overage_option_selected';
26
+ 'event.timestamp': string;
27
+ model: string;
28
+ selected_option: OverageOption;
29
+ credit_balance: number;
30
+ constructor(model: string, selectedOption: OverageOption, creditBalance: number);
31
+ toOpenTelemetryAttributes(config: Config): LogAttributes;
32
+ toLogBody(): string;
33
+ }
34
+ export declare const EVENT_EMPTY_WALLET_MENU_SHOWN = "gemini_cli.empty_wallet_menu_shown";
35
+ export declare class EmptyWalletMenuShownEvent implements BaseTelemetryEvent {
36
+ 'event.name': 'empty_wallet_menu_shown';
37
+ 'event.timestamp': string;
38
+ model: string;
39
+ constructor(model: string);
40
+ toOpenTelemetryAttributes(config: Config): LogAttributes;
41
+ toLogBody(): string;
42
+ }
43
+ export declare const EVENT_CREDIT_PURCHASE_CLICK = "gemini_cli.credit_purchase_click";
44
+ export declare class CreditPurchaseClickEvent implements BaseTelemetryEvent {
45
+ 'event.name': 'credit_purchase_click';
46
+ 'event.timestamp': string;
47
+ source: 'overage_menu' | 'empty_wallet_menu' | 'manage';
48
+ model: string;
49
+ constructor(source: 'overage_menu' | 'empty_wallet_menu' | 'manage', model: string);
50
+ toOpenTelemetryAttributes(config: Config): LogAttributes;
51
+ toLogBody(): string;
52
+ }
53
+ export declare const EVENT_CREDITS_USED = "gemini_cli.credits_used";
54
+ export declare class CreditsUsedEvent implements BaseTelemetryEvent {
55
+ 'event.name': 'credits_used';
56
+ 'event.timestamp': string;
57
+ model: string;
58
+ credits_consumed: number;
59
+ credits_remaining: number;
60
+ constructor(model: string, creditsConsumed: number, creditsRemaining: number);
61
+ toOpenTelemetryAttributes(config: Config): LogAttributes;
62
+ toLogBody(): string;
63
+ }
64
+ export declare const EVENT_API_KEY_UPDATED = "gemini_cli.api_key_updated";
65
+ export declare class ApiKeyUpdatedEvent implements BaseTelemetryEvent {
66
+ 'event.name': 'api_key_updated';
67
+ 'event.timestamp': string;
68
+ previous_auth_type: string;
69
+ new_auth_type: string;
70
+ constructor(previousAuthType: string, newAuthType: string);
71
+ toOpenTelemetryAttributes(config: Config): LogAttributes;
72
+ toLogBody(): string;
73
+ }
74
+ /** Union type of all billing-related telemetry events */
75
+ export type BillingTelemetryEvent = OverageMenuShownEvent | OverageOptionSelectedEvent | EmptyWalletMenuShownEvent | CreditPurchaseClickEvent | CreditsUsedEvent | ApiKeyUpdatedEvent;