@percygfx/opencode-antigravity-auth 0.0.0-stage → 2.0.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 (312) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +896 -3
  3. package/dist/index.d.ts +4 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +3 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/rpc.d.ts +176 -0
  8. package/dist/rpc.d.ts.map +1 -0
  9. package/dist/rpc.js +91 -0
  10. package/dist/rpc.js.map +1 -0
  11. package/dist/server.d.ts +3 -0
  12. package/dist/server.d.ts.map +1 -0
  13. package/dist/server.js +5 -0
  14. package/dist/server.js.map +1 -0
  15. package/dist/src/antigravity/oauth.d.ts +31 -0
  16. package/dist/src/antigravity/oauth.d.ts.map +1 -0
  17. package/dist/src/antigravity/oauth.js +171 -0
  18. package/dist/src/antigravity/oauth.js.map +1 -0
  19. package/dist/src/constants.d.ts +153 -0
  20. package/dist/src/constants.d.ts.map +1 -0
  21. package/dist/src/constants.js +238 -0
  22. package/dist/src/constants.js.map +1 -0
  23. package/dist/src/core/gateway.d.ts +43 -0
  24. package/dist/src/core/gateway.d.ts.map +1 -0
  25. package/dist/src/core/gateway.js +241 -0
  26. package/dist/src/core/gateway.js.map +1 -0
  27. package/dist/src/core/index.d.ts +8 -0
  28. package/dist/src/core/index.d.ts.map +1 -0
  29. package/dist/src/core/index.js +8 -0
  30. package/dist/src/core/index.js.map +1 -0
  31. package/dist/src/core/types.d.ts +60 -0
  32. package/dist/src/core/types.d.ts.map +1 -0
  33. package/dist/src/core/types.js +5 -0
  34. package/dist/src/core/types.js.map +1 -0
  35. package/dist/src/hooks/auto-update-checker/cache.d.ts +3 -0
  36. package/dist/src/hooks/auto-update-checker/cache.d.ts.map +1 -0
  37. package/dist/src/hooks/auto-update-checker/cache.js +71 -0
  38. package/dist/src/hooks/auto-update-checker/cache.js.map +1 -0
  39. package/dist/src/hooks/auto-update-checker/checker.d.ts +16 -0
  40. package/dist/src/hooks/auto-update-checker/checker.d.ts.map +1 -0
  41. package/dist/src/hooks/auto-update-checker/checker.js +234 -0
  42. package/dist/src/hooks/auto-update-checker/checker.js.map +1 -0
  43. package/dist/src/hooks/auto-update-checker/constants.d.ts +11 -0
  44. package/dist/src/hooks/auto-update-checker/constants.d.ts.map +1 -0
  45. package/dist/src/hooks/auto-update-checker/constants.js +26 -0
  46. package/dist/src/hooks/auto-update-checker/constants.js.map +1 -0
  47. package/dist/src/hooks/auto-update-checker/index.d.ts +34 -0
  48. package/dist/src/hooks/auto-update-checker/index.d.ts.map +1 -0
  49. package/dist/src/hooks/auto-update-checker/index.js +122 -0
  50. package/dist/src/hooks/auto-update-checker/index.js.map +1 -0
  51. package/dist/src/hooks/auto-update-checker/logging.d.ts +3 -0
  52. package/dist/src/hooks/auto-update-checker/logging.d.ts.map +1 -0
  53. package/dist/src/hooks/auto-update-checker/logging.js +9 -0
  54. package/dist/src/hooks/auto-update-checker/logging.js.map +1 -0
  55. package/dist/src/hooks/auto-update-checker/types.d.ts +25 -0
  56. package/dist/src/hooks/auto-update-checker/types.d.ts.map +1 -0
  57. package/dist/src/hooks/auto-update-checker/types.js +1 -0
  58. package/dist/src/hooks/auto-update-checker/types.js.map +1 -0
  59. package/dist/src/opencode-v2/accounts.d.ts +24 -0
  60. package/dist/src/opencode-v2/accounts.d.ts.map +1 -0
  61. package/dist/src/opencode-v2/accounts.js +109 -0
  62. package/dist/src/opencode-v2/accounts.js.map +1 -0
  63. package/dist/src/opencode-v2/catalog.d.ts +31 -0
  64. package/dist/src/opencode-v2/catalog.d.ts.map +1 -0
  65. package/dist/src/opencode-v2/catalog.js +68 -0
  66. package/dist/src/opencode-v2/catalog.js.map +1 -0
  67. package/dist/src/opencode-v2/client-shim.d.ts +9 -0
  68. package/dist/src/opencode-v2/client-shim.d.ts.map +1 -0
  69. package/dist/src/opencode-v2/client-shim.js +42 -0
  70. package/dist/src/opencode-v2/client-shim.js.map +1 -0
  71. package/dist/src/opencode-v2/clipboard.d.ts +7 -0
  72. package/dist/src/opencode-v2/clipboard.d.ts.map +1 -0
  73. package/dist/src/opencode-v2/clipboard.js +54 -0
  74. package/dist/src/opencode-v2/clipboard.js.map +1 -0
  75. package/dist/src/opencode-v2/index.d.ts +5 -0
  76. package/dist/src/opencode-v2/index.d.ts.map +1 -0
  77. package/dist/src/opencode-v2/index.js +4 -0
  78. package/dist/src/opencode-v2/index.js.map +1 -0
  79. package/dist/src/opencode-v2/plugin.d.ts +23 -0
  80. package/dist/src/opencode-v2/plugin.d.ts.map +1 -0
  81. package/dist/src/opencode-v2/plugin.js +466 -0
  82. package/dist/src/opencode-v2/plugin.js.map +1 -0
  83. package/dist/src/opencode-v2/proxy.d.ts +23 -0
  84. package/dist/src/opencode-v2/proxy.d.ts.map +1 -0
  85. package/dist/src/opencode-v2/proxy.js +148 -0
  86. package/dist/src/opencode-v2/proxy.js.map +1 -0
  87. package/dist/src/opencode-v2/quota-format.d.ts +19 -0
  88. package/dist/src/opencode-v2/quota-format.d.ts.map +1 -0
  89. package/dist/src/opencode-v2/quota-format.js +71 -0
  90. package/dist/src/opencode-v2/quota-format.js.map +1 -0
  91. package/dist/src/opencode-v2/quota.d.ts +18 -0
  92. package/dist/src/opencode-v2/quota.d.ts.map +1 -0
  93. package/dist/src/opencode-v2/quota.js +118 -0
  94. package/dist/src/opencode-v2/quota.js.map +1 -0
  95. package/dist/src/opencode-v2/sign-in-attempts.d.ts +52 -0
  96. package/dist/src/opencode-v2/sign-in-attempts.d.ts.map +1 -0
  97. package/dist/src/opencode-v2/sign-in-attempts.js +81 -0
  98. package/dist/src/opencode-v2/sign-in-attempts.js.map +1 -0
  99. package/dist/src/plugin/account-models.d.ts +38 -0
  100. package/dist/src/plugin/account-models.d.ts.map +1 -0
  101. package/dist/src/plugin/account-models.js +78 -0
  102. package/dist/src/plugin/account-models.js.map +1 -0
  103. package/dist/src/plugin/accounts.d.ts +186 -0
  104. package/dist/src/plugin/accounts.d.ts.map +1 -0
  105. package/dist/src/plugin/accounts.js +1045 -0
  106. package/dist/src/plugin/accounts.js.map +1 -0
  107. package/dist/src/plugin/auth.d.ts +21 -0
  108. package/dist/src/plugin/auth.d.ts.map +1 -0
  109. package/dist/src/plugin/auth.js +46 -0
  110. package/dist/src/plugin/auth.js.map +1 -0
  111. package/dist/src/plugin/cache/index.d.ts +5 -0
  112. package/dist/src/plugin/cache/index.d.ts.map +1 -0
  113. package/dist/src/plugin/cache/index.js +5 -0
  114. package/dist/src/plugin/cache/index.js.map +1 -0
  115. package/dist/src/plugin/cache/signature-cache.d.ts +111 -0
  116. package/dist/src/plugin/cache/signature-cache.d.ts.map +1 -0
  117. package/dist/src/plugin/cache/signature-cache.js +375 -0
  118. package/dist/src/plugin/cache/signature-cache.js.map +1 -0
  119. package/dist/src/plugin/cache.d.ts +44 -0
  120. package/dist/src/plugin/cache.d.ts.map +1 -0
  121. package/dist/src/plugin/cache.js +200 -0
  122. package/dist/src/plugin/cache.js.map +1 -0
  123. package/dist/src/plugin/cli.d.ts +26 -0
  124. package/dist/src/plugin/cli.d.ts.map +1 -0
  125. package/dist/src/plugin/cli.js +119 -0
  126. package/dist/src/plugin/cli.js.map +1 -0
  127. package/dist/src/plugin/config/index.d.ts +16 -0
  128. package/dist/src/plugin/config/index.d.ts.map +1 -0
  129. package/dist/src/plugin/config/index.js +16 -0
  130. package/dist/src/plugin/config/index.js.map +1 -0
  131. package/dist/src/plugin/config/loader.d.ts +36 -0
  132. package/dist/src/plugin/config/loader.d.ts.map +1 -0
  133. package/dist/src/plugin/config/loader.js +140 -0
  134. package/dist/src/plugin/config/loader.js.map +1 -0
  135. package/dist/src/plugin/config/models.d.ts +41 -0
  136. package/dist/src/plugin/config/models.d.ts.map +1 -0
  137. package/dist/src/plugin/config/models.js +46 -0
  138. package/dist/src/plugin/config/models.js.map +1 -0
  139. package/dist/src/plugin/config/schema.d.ts +135 -0
  140. package/dist/src/plugin/config/schema.d.ts.map +1 -0
  141. package/dist/src/plugin/config/schema.js +438 -0
  142. package/dist/src/plugin/config/schema.js.map +1 -0
  143. package/dist/src/plugin/config/updater.d.ts +55 -0
  144. package/dist/src/plugin/config/updater.d.ts.map +1 -0
  145. package/dist/src/plugin/config/updater.js +125 -0
  146. package/dist/src/plugin/config/updater.js.map +1 -0
  147. package/dist/src/plugin/core/streaming/index.d.ts +3 -0
  148. package/dist/src/plugin/core/streaming/index.d.ts.map +1 -0
  149. package/dist/src/plugin/core/streaming/index.js +3 -0
  150. package/dist/src/plugin/core/streaming/index.js.map +1 -0
  151. package/dist/src/plugin/core/streaming/transformer.d.ts +10 -0
  152. package/dist/src/plugin/core/streaming/transformer.d.ts.map +1 -0
  153. package/dist/src/plugin/core/streaming/transformer.js +271 -0
  154. package/dist/src/plugin/core/streaming/transformer.js.map +1 -0
  155. package/dist/src/plugin/core/streaming/types.d.ts +27 -0
  156. package/dist/src/plugin/core/streaming/types.d.ts.map +1 -0
  157. package/dist/src/plugin/core/streaming/types.js +1 -0
  158. package/dist/src/plugin/core/streaming/types.js.map +1 -0
  159. package/dist/src/plugin/debug.d.ts +94 -0
  160. package/dist/src/plugin/debug.d.ts.map +1 -0
  161. package/dist/src/plugin/debug.js +382 -0
  162. package/dist/src/plugin/debug.js.map +1 -0
  163. package/dist/src/plugin/errors.d.ts +28 -0
  164. package/dist/src/plugin/errors.d.ts.map +1 -0
  165. package/dist/src/plugin/errors.js +42 -0
  166. package/dist/src/plugin/errors.js.map +1 -0
  167. package/dist/src/plugin/fingerprint.d.ts +70 -0
  168. package/dist/src/plugin/fingerprint.d.ts.map +1 -0
  169. package/dist/src/plugin/fingerprint.js +138 -0
  170. package/dist/src/plugin/fingerprint.js.map +1 -0
  171. package/dist/src/plugin/image-saver.d.ts +25 -0
  172. package/dist/src/plugin/image-saver.d.ts.map +1 -0
  173. package/dist/src/plugin/image-saver.js +86 -0
  174. package/dist/src/plugin/image-saver.js.map +1 -0
  175. package/dist/src/plugin/logger.d.ts +36 -0
  176. package/dist/src/plugin/logger.d.ts.map +1 -0
  177. package/dist/src/plugin/logger.js +71 -0
  178. package/dist/src/plugin/logger.js.map +1 -0
  179. package/dist/src/plugin/logging-utils.d.ts +23 -0
  180. package/dist/src/plugin/logging-utils.d.ts.map +1 -0
  181. package/dist/src/plugin/logging-utils.js +92 -0
  182. package/dist/src/plugin/logging-utils.js.map +1 -0
  183. package/dist/src/plugin/model-discovery.d.ts +28 -0
  184. package/dist/src/plugin/model-discovery.d.ts.map +1 -0
  185. package/dist/src/plugin/model-discovery.js +59 -0
  186. package/dist/src/plugin/model-discovery.js.map +1 -0
  187. package/dist/src/plugin/model-registry.d.ts +108 -0
  188. package/dist/src/plugin/model-registry.d.ts.map +1 -0
  189. package/dist/src/plugin/model-registry.js +304 -0
  190. package/dist/src/plugin/model-registry.js.map +1 -0
  191. package/dist/src/plugin/project.d.ts +33 -0
  192. package/dist/src/plugin/project.d.ts.map +1 -0
  193. package/dist/src/plugin/project.js +235 -0
  194. package/dist/src/plugin/project.js.map +1 -0
  195. package/dist/src/plugin/quota.d.ts +58 -0
  196. package/dist/src/plugin/quota.d.ts.map +1 -0
  197. package/dist/src/plugin/quota.js +296 -0
  198. package/dist/src/plugin/quota.js.map +1 -0
  199. package/dist/src/plugin/recovery/constants.d.ts +22 -0
  200. package/dist/src/plugin/recovery/constants.d.ts.map +1 -0
  201. package/dist/src/plugin/recovery/constants.js +43 -0
  202. package/dist/src/plugin/recovery/constants.js.map +1 -0
  203. package/dist/src/plugin/recovery/index.d.ts +12 -0
  204. package/dist/src/plugin/recovery/index.d.ts.map +1 -0
  205. package/dist/src/plugin/recovery/index.js +12 -0
  206. package/dist/src/plugin/recovery/index.js.map +1 -0
  207. package/dist/src/plugin/recovery/storage.d.ts +24 -0
  208. package/dist/src/plugin/recovery/storage.d.ts.map +1 -0
  209. package/dist/src/plugin/recovery/storage.js +354 -0
  210. package/dist/src/plugin/recovery/storage.js.map +1 -0
  211. package/dist/src/plugin/recovery/types.d.ts +116 -0
  212. package/dist/src/plugin/recovery/types.d.ts.map +1 -0
  213. package/dist/src/plugin/recovery/types.js +6 -0
  214. package/dist/src/plugin/recovery/types.js.map +1 -0
  215. package/dist/src/plugin/recovery.d.ts +61 -0
  216. package/dist/src/plugin/recovery.d.ts.map +1 -0
  217. package/dist/src/plugin/recovery.js +381 -0
  218. package/dist/src/plugin/recovery.js.map +1 -0
  219. package/dist/src/plugin/refresh-queue.d.ts +100 -0
  220. package/dist/src/plugin/refresh-queue.d.ts.map +1 -0
  221. package/dist/src/plugin/refresh-queue.js +247 -0
  222. package/dist/src/plugin/refresh-queue.js.map +1 -0
  223. package/dist/src/plugin/request-helpers.d.ts +282 -0
  224. package/dist/src/plugin/request-helpers.d.ts.map +1 -0
  225. package/dist/src/plugin/request-helpers.js +2343 -0
  226. package/dist/src/plugin/request-helpers.js.map +1 -0
  227. package/dist/src/plugin/request.d.ts +95 -0
  228. package/dist/src/plugin/request.d.ts.map +1 -0
  229. package/dist/src/plugin/request.js +1491 -0
  230. package/dist/src/plugin/request.js.map +1 -0
  231. package/dist/src/plugin/rotation.d.ts +169 -0
  232. package/dist/src/plugin/rotation.d.ts.map +1 -0
  233. package/dist/src/plugin/rotation.js +328 -0
  234. package/dist/src/plugin/rotation.js.map +1 -0
  235. package/dist/src/plugin/search.d.ts +32 -0
  236. package/dist/src/plugin/search.d.ts.map +1 -0
  237. package/dist/src/plugin/search.js +195 -0
  238. package/dist/src/plugin/search.js.map +1 -0
  239. package/dist/src/plugin/server.d.ts +23 -0
  240. package/dist/src/plugin/server.d.ts.map +1 -0
  241. package/dist/src/plugin/server.js +324 -0
  242. package/dist/src/plugin/server.js.map +1 -0
  243. package/dist/src/plugin/storage.d.ts +173 -0
  244. package/dist/src/plugin/storage.d.ts.map +1 -0
  245. package/dist/src/plugin/storage.js +674 -0
  246. package/dist/src/plugin/storage.js.map +1 -0
  247. package/dist/src/plugin/stores/signature-store.d.ts +5 -0
  248. package/dist/src/plugin/stores/signature-store.d.ts.map +1 -0
  249. package/dist/src/plugin/stores/signature-store.js +25 -0
  250. package/dist/src/plugin/stores/signature-store.js.map +1 -0
  251. package/dist/src/plugin/thinking-recovery.d.ts +90 -0
  252. package/dist/src/plugin/thinking-recovery.d.ts.map +1 -0
  253. package/dist/src/plugin/thinking-recovery.js +316 -0
  254. package/dist/src/plugin/thinking-recovery.js.map +1 -0
  255. package/dist/src/plugin/token.d.ts +19 -0
  256. package/dist/src/plugin/token.d.ts.map +1 -0
  257. package/dist/src/plugin/token.js +128 -0
  258. package/dist/src/plugin/token.js.map +1 -0
  259. package/dist/src/plugin/transform/claude.d.ts +80 -0
  260. package/dist/src/plugin/transform/claude.d.ts.map +1 -0
  261. package/dist/src/plugin/transform/claude.js +265 -0
  262. package/dist/src/plugin/transform/claude.js.map +1 -0
  263. package/dist/src/plugin/transform/cross-model-sanitizer.d.ts +35 -0
  264. package/dist/src/plugin/transform/cross-model-sanitizer.d.ts.map +1 -0
  265. package/dist/src/plugin/transform/cross-model-sanitizer.js +225 -0
  266. package/dist/src/plugin/transform/cross-model-sanitizer.js.map +1 -0
  267. package/dist/src/plugin/transform/gemini.d.ts +100 -0
  268. package/dist/src/plugin/transform/gemini.d.ts.map +1 -0
  269. package/dist/src/plugin/transform/gemini.js +446 -0
  270. package/dist/src/plugin/transform/gemini.js.map +1 -0
  271. package/dist/src/plugin/transform/index.d.ts +15 -0
  272. package/dist/src/plugin/transform/index.d.ts.map +1 -0
  273. package/dist/src/plugin/transform/index.js +14 -0
  274. package/dist/src/plugin/transform/index.js.map +1 -0
  275. package/dist/src/plugin/transform/model-resolver.d.ts +99 -0
  276. package/dist/src/plugin/transform/model-resolver.d.ts.map +1 -0
  277. package/dist/src/plugin/transform/model-resolver.js +340 -0
  278. package/dist/src/plugin/transform/model-resolver.js.map +1 -0
  279. package/dist/src/plugin/transform/types.d.ts +111 -0
  280. package/dist/src/plugin/transform/types.d.ts.map +1 -0
  281. package/dist/src/plugin/transform/types.js +1 -0
  282. package/dist/src/plugin/transform/types.js.map +1 -0
  283. package/dist/src/plugin/types.d.ts +97 -0
  284. package/dist/src/plugin/types.d.ts.map +1 -0
  285. package/dist/src/plugin/types.js +1 -0
  286. package/dist/src/plugin/types.js.map +1 -0
  287. package/dist/src/plugin/ui/ansi.d.ts +32 -0
  288. package/dist/src/plugin/ui/ansi.d.ts.map +1 -0
  289. package/dist/src/plugin/ui/ansi.js +52 -0
  290. package/dist/src/plugin/ui/ansi.js.map +1 -0
  291. package/dist/src/plugin/ui/auth-menu.d.ts +33 -0
  292. package/dist/src/plugin/ui/auth-menu.d.ts.map +1 -0
  293. package/dist/src/plugin/ui/auth-menu.js +110 -0
  294. package/dist/src/plugin/ui/auth-menu.js.map +1 -0
  295. package/dist/src/plugin/ui/confirm.d.ts +2 -0
  296. package/dist/src/plugin/ui/confirm.d.ts.map +1 -0
  297. package/dist/src/plugin/ui/confirm.js +15 -0
  298. package/dist/src/plugin/ui/confirm.js.map +1 -0
  299. package/dist/src/plugin/ui/select.d.ts +23 -0
  300. package/dist/src/plugin/ui/select.d.ts.map +1 -0
  301. package/dist/src/plugin/ui/select.js +254 -0
  302. package/dist/src/plugin/ui/select.js.map +1 -0
  303. package/dist/src/plugin/version.d.ts +19 -0
  304. package/dist/src/plugin/version.d.ts.map +1 -0
  305. package/dist/src/plugin/version.js +80 -0
  306. package/dist/src/plugin/version.js.map +1 -0
  307. package/dist/src/plugin.d.ts +51 -0
  308. package/dist/src/plugin.d.ts.map +1 -0
  309. package/dist/src/plugin.js +2852 -0
  310. package/dist/src/plugin.js.map +1 -0
  311. package/dist/tui.js +420 -0
  312. package/package.json +99 -6
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Antigravity model registry.
3
+ *
4
+ * The models this plugin offers come from Antigravity itself: `fetchAvailableModels` returns a
5
+ * "Recommended" list with display names, limits and capabilities. The registry turns that list
6
+ * into catalog entries (one entry per model, Low/Medium/High tiers as variants) and answers which
7
+ * upstream model ID and User-Agent a request needs. New models therefore appear, and retired ones
8
+ * disappear, without code changes.
9
+ *
10
+ * Until a discovery has run (before sign-in, offline), a built-in snapshot is used. The latest
11
+ * discovery is cached on disk so later starts have it immediately.
12
+ */
13
+ export type ModelTier = "minimal" | "low" | "medium" | "high";
14
+ export type ModelVendor = "google" | "anthropic" | "openai" | "other";
15
+ /** One entry of `fetchAvailableModels().models`, reduced to what the registry uses. */
16
+ export interface AvailableModelInfo {
17
+ displayName?: string;
18
+ modelProvider?: string;
19
+ supportsImages?: boolean;
20
+ supportsThinking?: boolean;
21
+ maxTokens?: number;
22
+ maxOutputTokens?: number;
23
+ tagTitle?: string;
24
+ tagDescription?: string;
25
+ }
26
+ /** The parts of a `fetchAvailableModels` response the registry reads. */
27
+ export interface AvailableModelsResponse {
28
+ models?: Record<string, AvailableModelInfo | undefined>;
29
+ agentModelSorts?: Array<{
30
+ groups?: Array<{
31
+ modelIds?: string[];
32
+ }>;
33
+ }>;
34
+ }
35
+ export interface RegistryVariant {
36
+ tier: ModelTier;
37
+ upstreamId: string;
38
+ /** Only served to the current Antigravity client (hub User-Agent). */
39
+ hubOnly: boolean;
40
+ }
41
+ export interface RegistryModel {
42
+ /** Catalog ID without the `antigravity-` prefix, e.g. `gemini-3.8-flash`, `claude-opus-4-6-thinking`. */
43
+ id: string;
44
+ /** Display name without the tier, e.g. `Gemini 3.8 Flash`. */
45
+ name: string;
46
+ vendor: ModelVendor;
47
+ /** Upstream ID used when no tier is requested (Antigravity's first-listed tier). */
48
+ upstreamId: string;
49
+ hubOnly: boolean;
50
+ /** Tiers that map to their own upstream IDs; empty for single-ID models. */
51
+ variants: RegistryVariant[];
52
+ supportsImages: boolean;
53
+ supportsThinking: boolean;
54
+ contextLimit: number;
55
+ outputLimit: number;
56
+ /** Antigravity's notice, e.g. "Leaving Soon: Start using Gemini 3.8 Flash". */
57
+ notice?: string;
58
+ leavingSoon: boolean;
59
+ }
60
+ export interface UpstreamModelResolution {
61
+ model: RegistryModel;
62
+ upstreamId: string;
63
+ tier?: ModelTier;
64
+ hubOnly: boolean;
65
+ }
66
+ /**
67
+ * Builds registry models from a `fetchAvailableModels` response made with the hub User-Agent.
68
+ * `legacyIds` are the model IDs the legacy User-Agent sees; IDs missing from it need the hub UA.
69
+ *
70
+ * Entries named "<Name> (Low|Medium|High)" that share a name become one model with variants.
71
+ * A name that appears with a single tier (e.g. "GPT-OSS 120B (Medium)") stays a plain model.
72
+ */
73
+ export declare function buildRegistryModels(hubResponse: AvailableModelsResponse, legacyIds?: ReadonlySet<string>): RegistryModel[];
74
+ /**
75
+ * Combines the lists discovered for several accounts into one catalog. Accounts on different
76
+ * plans see different models (free: Claude 4.6; paid Pro: Claude 5.5, Gemini 4 Argon), so the
77
+ * catalog offers every model at least one account has; request routing then only picks accounts
78
+ * that have the requested model (see `AccountManager`).
79
+ *
80
+ * The first list to mention a model supplies its details. Variants are combined by tier, and an
81
+ * upstream ID counts as hub-only when any account reports it so (the hub User-Agent serves every
82
+ * listed model, the legacy one does not).
83
+ */
84
+ export declare function mergeRegistryModels(lists: readonly (readonly RegistryModel[])[]): RegistryModel[];
85
+ export declare function builtinRegistryModels(): RegistryModel[];
86
+ export declare function getRegistryCachePath(): string;
87
+ /** The models currently offered: the last discovery (memory, then disk cache) or the snapshot. */
88
+ export declare function getRegistryModels(): RegistryModel[];
89
+ /** When the current list was discovered, or undefined for the built-in snapshot. */
90
+ export declare function getRegistryFetchedAt(): number | undefined;
91
+ /** Replaces the current list with a fresh discovery and caches it on disk. */
92
+ export declare function setRegistryModels(models: RegistryModel[], fetchedAt?: number): void;
93
+ /** Test hook: forget the in-memory state so the next read starts over. */
94
+ export declare function resetRegistryForTests(models?: RegistryModel[]): void;
95
+ /**
96
+ * Maps a requested model (catalog ID, with or without `antigravity-`, or an upstream ID) and an
97
+ * optional tier to the upstream model ID to send. Returns undefined for models the registry does
98
+ * not know, which keep the pipeline's own name handling.
99
+ */
100
+ export declare function resolveUpstreamModel(requestedModel: string, tier?: string): UpstreamModelResolution | undefined;
101
+ /**
102
+ * Every upstream ID a requested model can be sent as (its default ID and all tier variants), or
103
+ * undefined for models the registry does not know. Used to check whether an account has a model.
104
+ */
105
+ export declare function modelUpstreamIds(requestedModel: string): string[] | undefined;
106
+ /** True when the upstream ID is only served to the current Antigravity client. */
107
+ export declare function requiresHubUserAgent(upstreamId: string): boolean;
108
+ //# sourceMappingURL=model-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-registry.d.ts","sourceRoot":"","sources":["../../../src/plugin/model-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,304 @@
1
+ /**
2
+ * Antigravity model registry.
3
+ *
4
+ * The models this plugin offers come from Antigravity itself: `fetchAvailableModels` returns a
5
+ * "Recommended" list with display names, limits and capabilities. The registry turns that list
6
+ * into catalog entries (one entry per model, Low/Medium/High tiers as variants) and answers which
7
+ * upstream model ID and User-Agent a request needs. New models therefore appear, and retired ones
8
+ * disappear, without code changes.
9
+ *
10
+ * Until a discovery has run (before sign-in, offline), a built-in snapshot is used. The latest
11
+ * discovery is cached on disk so later starts have it immediately.
12
+ */
13
+ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
14
+ import { homedir } from "node:os";
15
+ import { dirname, join } from "node:path";
16
+ import { createLogger } from "./logger";
17
+ const log = createLogger("model-registry");
18
+ const TIER_ORDER = ["minimal", "low", "medium", "high"];
19
+ const TIER_SUFFIX = /^(.*\S)\s+\((minimal|low|medium|high)\)$/i;
20
+ const FALLBACK_CONTEXT = 200_000;
21
+ const FALLBACK_OUTPUT = 32_000;
22
+ function vendorOf(modelProvider, id) {
23
+ const provider = (modelProvider ?? "").toUpperCase();
24
+ if (provider.includes("GOOGLE") || id.startsWith("gemini"))
25
+ return "google";
26
+ if (provider.includes("ANTHROPIC") || id.startsWith("claude"))
27
+ return "anthropic";
28
+ if (provider.includes("OPENAI") || id.startsWith("gpt"))
29
+ return "openai";
30
+ return "other";
31
+ }
32
+ function slugify(name) {
33
+ return name
34
+ .toLowerCase()
35
+ .replace(/[^a-z0-9.]+/g, "-")
36
+ .replace(/^-+|-+$/g, "");
37
+ }
38
+ /**
39
+ * Placeholders Antigravity lists for models the plan does not include, e.g. "Gemini 4 Argon"
40
+ * (`gemini-4-argon-disabled`, tagged "Unavailable: ... available to Ultra and paid Pro plan
41
+ * subscribers") on free accounts. They cannot be called, so they never enter the catalog.
42
+ */
43
+ function isUnavailablePlaceholder(upstreamId, info) {
44
+ return /-disabled$/i.test(upstreamId) || /^unavailable$/i.test(info.tagTitle?.trim() ?? "");
45
+ }
46
+ function recommendedIds(response) {
47
+ const ids = [];
48
+ for (const sort of response.agentModelSorts ?? []) {
49
+ for (const group of sort.groups ?? []) {
50
+ for (const id of group.modelIds ?? []) {
51
+ if (!ids.includes(id))
52
+ ids.push(id);
53
+ }
54
+ }
55
+ }
56
+ return ids;
57
+ }
58
+ /**
59
+ * Builds registry models from a `fetchAvailableModels` response made with the hub User-Agent.
60
+ * `legacyIds` are the model IDs the legacy User-Agent sees; IDs missing from it need the hub UA.
61
+ *
62
+ * Entries named "<Name> (Low|Medium|High)" that share a name become one model with variants.
63
+ * A name that appears with a single tier (e.g. "GPT-OSS 120B (Medium)") stays a plain model.
64
+ */
65
+ export function buildRegistryModels(hubResponse, legacyIds) {
66
+ const groups = new Map();
67
+ for (const upstreamId of recommendedIds(hubResponse)) {
68
+ const info = hubResponse.models?.[upstreamId];
69
+ if (!info || isUnavailablePlaceholder(upstreamId, info))
70
+ continue;
71
+ const displayName = info.displayName?.trim() || upstreamId;
72
+ const match = TIER_SUFFIX.exec(displayName);
73
+ const base = match?.[1] ?? displayName;
74
+ const tier = match?.[2]?.toLowerCase();
75
+ const members = groups.get(base) ?? [];
76
+ members.push({ upstreamId, tier, info });
77
+ groups.set(base, members);
78
+ }
79
+ const isHubOnly = (upstreamId) => (legacyIds ? !legacyIds.has(upstreamId) : false);
80
+ const models = [];
81
+ for (const [base, members] of groups) {
82
+ const tiered = members.length > 1 && members.every((member) => member.tier);
83
+ const first = members[0];
84
+ const info = first.info;
85
+ const notice = [info.tagTitle, info.tagDescription].filter(Boolean).join(": ") || undefined;
86
+ const variants = tiered
87
+ ? members
88
+ .map((member) => ({
89
+ tier: member.tier,
90
+ upstreamId: member.upstreamId,
91
+ hubOnly: isHubOnly(member.upstreamId),
92
+ }))
93
+ .sort((a, b) => TIER_ORDER.indexOf(a.tier) - TIER_ORDER.indexOf(b.tier))
94
+ : [];
95
+ for (const member of tiered ? [first] : members) {
96
+ const memberInfo = member.info;
97
+ models.push({
98
+ id: tiered ? slugify(base) : member.upstreamId,
99
+ name: tiered ? base : memberInfo.displayName?.trim() || member.upstreamId,
100
+ vendor: vendorOf(memberInfo.modelProvider, member.upstreamId),
101
+ upstreamId: member.upstreamId,
102
+ hubOnly: isHubOnly(member.upstreamId),
103
+ variants,
104
+ supportsImages: Boolean(memberInfo.supportsImages),
105
+ supportsThinking: Boolean(memberInfo.supportsThinking),
106
+ contextLimit: memberInfo.maxTokens ?? FALLBACK_CONTEXT,
107
+ outputLimit: memberInfo.maxOutputTokens ?? FALLBACK_OUTPUT,
108
+ notice,
109
+ leavingSoon: /leaving soon|will be removed|no longer be available/i.test(notice ?? ""),
110
+ });
111
+ }
112
+ }
113
+ return models;
114
+ }
115
+ /**
116
+ * Combines the lists discovered for several accounts into one catalog. Accounts on different
117
+ * plans see different models (free: Claude 4.6; paid Pro: Claude 5.5, Gemini 4 Argon), so the
118
+ * catalog offers every model at least one account has; request routing then only picks accounts
119
+ * that have the requested model (see `AccountManager`).
120
+ *
121
+ * The first list to mention a model supplies its details. Variants are combined by tier, and an
122
+ * upstream ID counts as hub-only when any account reports it so (the hub User-Agent serves every
123
+ * listed model, the legacy one does not).
124
+ */
125
+ export function mergeRegistryModels(lists) {
126
+ const merged = new Map();
127
+ for (const list of lists) {
128
+ for (const model of list) {
129
+ const existing = merged.get(model.id);
130
+ if (!existing) {
131
+ merged.set(model.id, { ...model, variants: model.variants.map((variant) => ({ ...variant })) });
132
+ continue;
133
+ }
134
+ if (model.upstreamId === existing.upstreamId)
135
+ existing.hubOnly ||= model.hubOnly;
136
+ for (const variant of model.variants) {
137
+ const known = existing.variants.find((entry) => entry.tier === variant.tier);
138
+ if (known) {
139
+ if (known.upstreamId === variant.upstreamId)
140
+ known.hubOnly ||= variant.hubOnly;
141
+ }
142
+ else {
143
+ existing.variants.push({ ...variant });
144
+ }
145
+ }
146
+ existing.variants.sort((a, b) => TIER_ORDER.indexOf(a.tier) - TIER_ORDER.indexOf(b.tier));
147
+ }
148
+ }
149
+ return [...merged.values()];
150
+ }
151
+ /**
152
+ * Snapshot of Antigravity's Recommended list (hub User-Agent), taken 2026-10-13. Used until the
153
+ * first discovery succeeds. Refresh it with `node scripts/list-models.mjs --json`.
154
+ */
155
+ const BUILTIN_SNAPSHOT = [
156
+ { id: "gemini-3.8-flash-high", displayName: "Gemini 3.8 Flash (High)", modelProvider: "MODEL_PROVIDER_GOOGLE", supportsImages: true, supportsThinking: true, maxTokens: 1048576, maxOutputTokens: 65536, hubOnly: true },
157
+ { id: "gemini-3.8-flash-medium", displayName: "Gemini 3.8 Flash (Medium)", modelProvider: "MODEL_PROVIDER_GOOGLE", supportsImages: true, supportsThinking: true, maxTokens: 1048576, maxOutputTokens: 65536, hubOnly: true },
158
+ { id: "gemini-3.8-flash-low", displayName: "Gemini 3.8 Flash (Low)", modelProvider: "MODEL_PROVIDER_GOOGLE", supportsImages: true, supportsThinking: true, maxTokens: 1048576, maxOutputTokens: 65536, hubOnly: true },
159
+ { id: "gemini-3.7-flash-high", displayName: "Gemini 3.7 Flash (High)", modelProvider: "MODEL_PROVIDER_GOOGLE", supportsImages: true, supportsThinking: true, maxTokens: 1048576, maxOutputTokens: 65536, hubOnly: true, tagTitle: "Leaving Soon", tagDescription: "Start using Gemini 3.8 Flash, our best Flash model." },
160
+ { id: "gemini-3.7-flash-medium", displayName: "Gemini 3.7 Flash (Medium)", modelProvider: "MODEL_PROVIDER_GOOGLE", supportsImages: true, supportsThinking: true, maxTokens: 1048576, maxOutputTokens: 65536, hubOnly: true, tagTitle: "Leaving Soon", tagDescription: "Start using Gemini 3.8 Flash, our best Flash model." },
161
+ { id: "gemini-3.7-flash-low", displayName: "Gemini 3.7 Flash (Low)", modelProvider: "MODEL_PROVIDER_GOOGLE", supportsImages: true, supportsThinking: true, maxTokens: 1048576, maxOutputTokens: 65536, hubOnly: true, tagTitle: "Leaving Soon", tagDescription: "Start using Gemini 3.8 Flash, our best Flash model." },
162
+ { id: "gemini-3.6-flash-high", displayName: "Gemini 3.6 Flash (High)", modelProvider: "MODEL_PROVIDER_GOOGLE", supportsImages: true, supportsThinking: true, maxTokens: 1048576, maxOutputTokens: 65536, tagTitle: "Leaving Soon", tagDescription: "Start using Gemini 3.8 Flash, our best Flash model." },
163
+ { id: "gemini-3.6-flash-medium", displayName: "Gemini 3.6 Flash (Medium)", modelProvider: "MODEL_PROVIDER_GOOGLE", supportsImages: true, supportsThinking: true, maxTokens: 1048576, maxOutputTokens: 65536, tagTitle: "Leaving Soon", tagDescription: "Start using Gemini 3.8 Flash, our best Flash model." },
164
+ { id: "gemini-3.6-flash-low", displayName: "Gemini 3.6 Flash (Low)", modelProvider: "MODEL_PROVIDER_GOOGLE", supportsImages: true, supportsThinking: true, maxTokens: 1048576, maxOutputTokens: 65536, tagTitle: "Leaving Soon", tagDescription: "Start using Gemini 3.8 Flash, our best Flash model." },
165
+ { id: "gemini-pro-agent", displayName: "Gemini 3.1 Pro (High)", modelProvider: "MODEL_PROVIDER_GOOGLE", supportsImages: true, supportsThinking: true, maxTokens: 1048576, maxOutputTokens: 65536, tagTitle: "Leaving Soon", tagDescription: "Use Gemini 3.8 Flash! As a newer model, it delivers more intelligence at 2x the speed for 70% less cost than Gemini 3.1 Pro." },
166
+ { id: "gemini-3.1-pro-low", displayName: "Gemini 3.1 Pro (Low)", modelProvider: "MODEL_PROVIDER_GOOGLE", supportsImages: true, supportsThinking: true, maxTokens: 1048576, maxOutputTokens: 65536, tagTitle: "Leaving Soon", tagDescription: "Use Gemini 3.8 Flash! As a newer model, it delivers more intelligence at 2x the speed for 70% less cost than Gemini 3.1 Pro." },
167
+ { id: "claude-sonnet-4-6", displayName: "Claude Sonnet 4.6 (Thinking)", modelProvider: "MODEL_PROVIDER_ANTHROPIC", supportsImages: true, supportsThinking: true, maxTokens: 250000, maxOutputTokens: 64000, tagTitle: "Notice", tagDescription: "Sonnet 5.5 is now available on paid Pro and Ultra plans. Third-party model access will no longer be available on your current plan starting on November 2, 2026." },
168
+ { id: "claude-opus-4-6-thinking", displayName: "Claude Opus 4.6 (Thinking)", modelProvider: "MODEL_PROVIDER_ANTHROPIC", supportsImages: true, supportsThinking: true, maxTokens: 250000, maxOutputTokens: 64000, tagTitle: "Notice", tagDescription: "Opus 5.5 is now available on paid Pro and Ultra plans. Third-party model access will no longer be available on your current plan starting on November 2, 2026." },
169
+ { id: "gpt-oss-120b-medium", displayName: "GPT-OSS 120B (Medium)", modelProvider: "MODEL_PROVIDER_OPENAI", supportsImages: false, supportsThinking: true, maxTokens: 131072, maxOutputTokens: 32768, tagTitle: "Notice", tagDescription: "GPT-OSS will be removed from Antigravity on November 2, 2026." },
170
+ ];
171
+ export function builtinRegistryModels() {
172
+ const models = {};
173
+ const legacyIds = new Set();
174
+ for (const { id, hubOnly, ...info } of BUILTIN_SNAPSHOT) {
175
+ models[id] = info;
176
+ if (!hubOnly)
177
+ legacyIds.add(id);
178
+ }
179
+ return buildRegistryModels({ models, agentModelSorts: [{ groups: [{ modelIds: BUILTIN_SNAPSHOT.map((entry) => entry.id) }] }] }, legacyIds);
180
+ }
181
+ // ---------------------------------------------------------------------------
182
+ // Current registry state (process-wide) and its on-disk cache
183
+ // ---------------------------------------------------------------------------
184
+ const CACHE_FILENAME = "antigravity-models.json";
185
+ /** 2: the list combines every account's models (1 held a single account's list). */
186
+ const CACHE_VERSION = 2;
187
+ let current;
188
+ function configDir() {
189
+ if (process.env.OPENCODE_CONFIG_DIR)
190
+ return process.env.OPENCODE_CONFIG_DIR;
191
+ return join(process.env.XDG_CONFIG_HOME || join(homedir(), ".config"), "opencode");
192
+ }
193
+ export function getRegistryCachePath() {
194
+ return join(configDir(), CACHE_FILENAME);
195
+ }
196
+ function isRegistryModel(value) {
197
+ if (!value || typeof value !== "object")
198
+ return false;
199
+ const model = value;
200
+ return typeof model.id === "string" && typeof model.upstreamId === "string" && Array.isArray(model.variants);
201
+ }
202
+ function readCache() {
203
+ const path = getRegistryCachePath();
204
+ if (!existsSync(path))
205
+ return undefined;
206
+ try {
207
+ const parsed = JSON.parse(readFileSync(path, "utf8"));
208
+ if (parsed.version !== CACHE_VERSION || !Array.isArray(parsed.models))
209
+ return undefined;
210
+ const models = parsed.models.filter(isRegistryModel);
211
+ if (models.length === 0)
212
+ return undefined;
213
+ return { models, fetchedAt: typeof parsed.fetchedAt === "number" ? parsed.fetchedAt : 0 };
214
+ }
215
+ catch (error) {
216
+ log.warn("ignoring unreadable model cache", { path, error: String(error) });
217
+ return undefined;
218
+ }
219
+ }
220
+ /** The models currently offered: the last discovery (memory, then disk cache) or the snapshot. */
221
+ export function getRegistryModels() {
222
+ if (!current) {
223
+ current = readCache() ?? { models: builtinRegistryModels() };
224
+ }
225
+ return current.models;
226
+ }
227
+ /** When the current list was discovered, or undefined for the built-in snapshot. */
228
+ export function getRegistryFetchedAt() {
229
+ getRegistryModels();
230
+ return current?.fetchedAt;
231
+ }
232
+ /** Replaces the current list with a fresh discovery and caches it on disk. */
233
+ export function setRegistryModels(models, fetchedAt = Date.now()) {
234
+ if (models.length === 0)
235
+ return;
236
+ current = { models, fetchedAt };
237
+ const path = getRegistryCachePath();
238
+ try {
239
+ mkdirSync(dirname(path), { recursive: true });
240
+ const temp = `${path}.${process.pid}.tmp`;
241
+ writeFileSync(temp, `${JSON.stringify({ version: CACHE_VERSION, fetchedAt, models }, null, 2)}\n`);
242
+ renameSync(temp, path);
243
+ }
244
+ catch (error) {
245
+ log.warn("could not write model cache", { path, error: String(error) });
246
+ }
247
+ }
248
+ /** Test hook: forget the in-memory state so the next read starts over. */
249
+ export function resetRegistryForTests(models) {
250
+ current = models ? { models } : undefined;
251
+ }
252
+ // ---------------------------------------------------------------------------
253
+ // Lookups used by the request pipeline
254
+ // ---------------------------------------------------------------------------
255
+ function normalizeTier(value) {
256
+ const lower = value?.toLowerCase();
257
+ return TIER_ORDER.find((tier) => tier === lower);
258
+ }
259
+ /**
260
+ * Maps a requested model (catalog ID, with or without `antigravity-`, or an upstream ID) and an
261
+ * optional tier to the upstream model ID to send. Returns undefined for models the registry does
262
+ * not know, which keep the pipeline's own name handling.
263
+ */
264
+ export function resolveUpstreamModel(requestedModel, tier) {
265
+ const name = requestedModel.replace(/^antigravity-/i, "").toLowerCase();
266
+ const requestedTier = normalizeTier(tier);
267
+ for (const model of getRegistryModels()) {
268
+ if (model.id.toLowerCase() === name) {
269
+ if (model.variants.length === 0) {
270
+ return { model, upstreamId: model.upstreamId, hubOnly: model.hubOnly };
271
+ }
272
+ const variant = model.variants.find((entry) => entry.tier === requestedTier) ??
273
+ model.variants.find((entry) => entry.upstreamId === model.upstreamId) ??
274
+ model.variants[0];
275
+ return { model, upstreamId: variant.upstreamId, tier: variant.tier, hubOnly: variant.hubOnly };
276
+ }
277
+ const variant = model.variants.find((entry) => entry.upstreamId.toLowerCase() === name);
278
+ if (variant) {
279
+ return { model, upstreamId: variant.upstreamId, tier: variant.tier, hubOnly: variant.hubOnly };
280
+ }
281
+ if (model.variants.length === 0 && model.upstreamId.toLowerCase() === name) {
282
+ return { model, upstreamId: model.upstreamId, hubOnly: model.hubOnly };
283
+ }
284
+ }
285
+ return undefined;
286
+ }
287
+ /**
288
+ * Every upstream ID a requested model can be sent as (its default ID and all tier variants), or
289
+ * undefined for models the registry does not know. Used to check whether an account has a model.
290
+ */
291
+ export function modelUpstreamIds(requestedModel) {
292
+ const resolved = resolveUpstreamModel(requestedModel);
293
+ if (!resolved)
294
+ return undefined;
295
+ const { model } = resolved;
296
+ return [...new Set([model.upstreamId, ...model.variants.map((variant) => variant.upstreamId)])];
297
+ }
298
+ /** True when the upstream ID is only served to the current Antigravity client. */
299
+ export function requiresHubUserAgent(upstreamId) {
300
+ const lower = upstreamId.toLowerCase();
301
+ return getRegistryModels().some((model) => (model.variants.length === 0 && model.hubOnly && model.upstreamId.toLowerCase() === lower) ||
302
+ model.variants.some((variant) => variant.hubOnly && variant.upstreamId.toLowerCase() === lower));
303
+ }
304
+ //# sourceMappingURL=model-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-registry.js","sourceRoot":"","sources":["../../../src/plugin/model-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { OAuthAuthDetails, ProjectContextResult } from "./types";
2
+ interface AntigravityUserTier {
3
+ id?: string;
4
+ isDefault?: boolean;
5
+ userDefinedCloudaicompanionProject?: boolean;
6
+ }
7
+ interface LoadCodeAssistPayload {
8
+ cloudaicompanionProject?: string | {
9
+ id?: string;
10
+ };
11
+ currentTier?: {
12
+ id?: string;
13
+ };
14
+ allowedTiers?: AntigravityUserTier[];
15
+ }
16
+ /**
17
+ * Clears cached project context results and pending promises, globally or for a refresh key.
18
+ */
19
+ export declare function invalidateProjectContextCache(refresh?: string): void;
20
+ /**
21
+ * Loads managed project information for the given access token and optional project.
22
+ */
23
+ export declare function loadManagedProject(accessToken: string, projectId?: string): Promise<LoadCodeAssistPayload | null>;
24
+ /**
25
+ * Onboards a managed project for the user, optionally retrying until completion.
26
+ */
27
+ export declare function onboardManagedProject(accessToken: string, tierId: string, projectId?: string, attempts?: number, delayMs?: number): Promise<string | undefined>;
28
+ /**
29
+ * Resolves an effective project ID for the current auth state, caching results per refresh token.
30
+ */
31
+ export declare function ensureProjectContext(auth: OAuthAuthDetails): Promise<ProjectContextResult>;
32
+ export {};
33
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../../src/plugin/project.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAgBtE,UAAU,mBAAmB;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kCAAkC,CAAC,EAAE,OAAO,CAAC;CAC9C;AAED,UAAU,qBAAqB;IAC7B,uBAAuB,CAAC,EAAE,MAAM,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,WAAW,CAAC,EAAE;QACZ,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;IACF,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACtC;AAqED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAQpE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAqCvC;AAGD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,SAAK,EACb,OAAO,SAAO,GACb,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA8C7B;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAgGhG"}