opencode-account-manager 0.4.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 (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +266 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +183 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/core/accounts.d.ts +19 -0
  8. package/dist/core/accounts.d.ts.map +1 -0
  9. package/dist/core/accounts.js +181 -0
  10. package/dist/core/accounts.js.map +1 -0
  11. package/dist/core/config-store.d.ts +48 -0
  12. package/dist/core/config-store.d.ts.map +1 -0
  13. package/dist/core/config-store.js +206 -0
  14. package/dist/core/config-store.js.map +1 -0
  15. package/dist/core/crypto.d.ts +40 -0
  16. package/dist/core/crypto.d.ts.map +1 -0
  17. package/dist/core/crypto.js +172 -0
  18. package/dist/core/crypto.js.map +1 -0
  19. package/dist/core/importers/amJson.d.ts +17 -0
  20. package/dist/core/importers/amJson.d.ts.map +1 -0
  21. package/dist/core/importers/amJson.js +131 -0
  22. package/dist/core/importers/amJson.js.map +1 -0
  23. package/dist/core/opencode-config.d.ts +92 -0
  24. package/dist/core/opencode-config.d.ts.map +1 -0
  25. package/dist/core/opencode-config.js +148 -0
  26. package/dist/core/opencode-config.js.map +1 -0
  27. package/dist/core/paths.d.ts +5 -0
  28. package/dist/core/paths.d.ts.map +1 -0
  29. package/dist/core/paths.js +38 -0
  30. package/dist/core/paths.js.map +1 -0
  31. package/dist/core/types.d.ts +74 -0
  32. package/dist/core/types.d.ts.map +1 -0
  33. package/dist/core/types.js +30 -0
  34. package/dist/core/types.js.map +1 -0
  35. package/dist/core/utils.d.ts +5 -0
  36. package/dist/core/utils.d.ts.map +1 -0
  37. package/dist/core/utils.js +35 -0
  38. package/dist/core/utils.js.map +1 -0
  39. package/dist/tui/Dashboard.d.ts +7 -0
  40. package/dist/tui/Dashboard.d.ts.map +1 -0
  41. package/dist/tui/Dashboard.js +331 -0
  42. package/dist/tui/Dashboard.js.map +1 -0
  43. package/dist/tui/components/AccountList.d.ts +18 -0
  44. package/dist/tui/components/AccountList.d.ts.map +1 -0
  45. package/dist/tui/components/AccountList.js +92 -0
  46. package/dist/tui/components/AccountList.js.map +1 -0
  47. package/dist/tui/components/Box.d.ts +11 -0
  48. package/dist/tui/components/Box.d.ts.map +1 -0
  49. package/dist/tui/components/Box.js +15 -0
  50. package/dist/tui/components/Box.js.map +1 -0
  51. package/dist/tui/components/ExportModal.d.ts +10 -0
  52. package/dist/tui/components/ExportModal.d.ts.map +1 -0
  53. package/dist/tui/components/ExportModal.js +192 -0
  54. package/dist/tui/components/ExportModal.js.map +1 -0
  55. package/dist/tui/components/FileBrowser.d.ts +12 -0
  56. package/dist/tui/components/FileBrowser.d.ts.map +1 -0
  57. package/dist/tui/components/FileBrowser.js +349 -0
  58. package/dist/tui/components/FileBrowser.js.map +1 -0
  59. package/dist/tui/components/Header.d.ts +8 -0
  60. package/dist/tui/components/Header.d.ts.map +1 -0
  61. package/dist/tui/components/Header.js +20 -0
  62. package/dist/tui/components/Header.js.map +1 -0
  63. package/dist/tui/components/ImportModal.d.ts +10 -0
  64. package/dist/tui/components/ImportModal.d.ts.map +1 -0
  65. package/dist/tui/components/ImportModal.js +215 -0
  66. package/dist/tui/components/ImportModal.js.map +1 -0
  67. package/dist/tui/components/McpServerList.d.ts +8 -0
  68. package/dist/tui/components/McpServerList.d.ts.map +1 -0
  69. package/dist/tui/components/McpServerList.js +35 -0
  70. package/dist/tui/components/McpServerList.js.map +1 -0
  71. package/dist/tui/components/Menu.d.ts +10 -0
  72. package/dist/tui/components/Menu.d.ts.map +1 -0
  73. package/dist/tui/components/Menu.js +83 -0
  74. package/dist/tui/components/Menu.js.map +1 -0
  75. package/dist/tui/components/PasswordInput.d.ts +12 -0
  76. package/dist/tui/components/PasswordInput.d.ts.map +1 -0
  77. package/dist/tui/components/PasswordInput.js +130 -0
  78. package/dist/tui/components/PasswordInput.js.map +1 -0
  79. package/dist/tui/components/ProviderList.d.ts +8 -0
  80. package/dist/tui/components/ProviderList.d.ts.map +1 -0
  81. package/dist/tui/components/ProviderList.js +37 -0
  82. package/dist/tui/components/ProviderList.js.map +1 -0
  83. package/dist/tui/components/SectionBox.d.ts +10 -0
  84. package/dist/tui/components/SectionBox.d.ts.map +1 -0
  85. package/dist/tui/components/SectionBox.js +16 -0
  86. package/dist/tui/components/SectionBox.js.map +1 -0
  87. package/dist/tui/components/StatsRow.d.ts +13 -0
  88. package/dist/tui/components/StatsRow.d.ts.map +1 -0
  89. package/dist/tui/components/StatsRow.js +18 -0
  90. package/dist/tui/components/StatsRow.js.map +1 -0
  91. package/dist/tui/components/StatusBadge.d.ts +8 -0
  92. package/dist/tui/components/StatusBadge.d.ts.map +1 -0
  93. package/dist/tui/components/StatusBadge.js +30 -0
  94. package/dist/tui/components/StatusBadge.js.map +1 -0
  95. package/dist/tui/components/index.d.ts +14 -0
  96. package/dist/tui/components/index.d.ts.map +1 -0
  97. package/dist/tui/components/index.js +32 -0
  98. package/dist/tui/components/index.js.map +1 -0
  99. package/dist/tui/index.d.ts +5 -0
  100. package/dist/tui/index.d.ts.map +1 -0
  101. package/dist/tui/index.js +13 -0
  102. package/dist/tui/index.js.map +1 -0
  103. package/docs/BLUEPRINT.md +476 -0
  104. package/docs/ROADMAP.md +74 -0
  105. package/package.json +38 -0
  106. package/src/cli.ts +207 -0
  107. package/src/core/accounts.ts +215 -0
  108. package/src/core/config-store.ts +212 -0
  109. package/src/core/crypto.ts +162 -0
  110. package/src/core/importers/amJson.ts +185 -0
  111. package/src/core/opencode-config.ts +217 -0
  112. package/src/core/paths.ts +32 -0
  113. package/src/core/types.ts +118 -0
  114. package/src/core/utils.ts +28 -0
  115. package/src/tui/Dashboard.tsx +431 -0
  116. package/src/tui/components/AccountList.tsx +155 -0
  117. package/src/tui/components/Box.tsx +37 -0
  118. package/src/tui/components/ExportModal.tsx +255 -0
  119. package/src/tui/components/FileBrowser.tsx +393 -0
  120. package/src/tui/components/Header.tsx +26 -0
  121. package/src/tui/components/ImportModal.tsx +288 -0
  122. package/src/tui/components/McpServerList.tsx +67 -0
  123. package/src/tui/components/Menu.tsx +103 -0
  124. package/src/tui/components/PasswordInput.tsx +159 -0
  125. package/src/tui/components/ProviderList.tsx +61 -0
  126. package/src/tui/components/SectionBox.tsx +35 -0
  127. package/src/tui/components/StatsRow.tsx +33 -0
  128. package/src/tui/components/StatusBadge.tsx +33 -0
  129. package/src/tui/components/index.ts +13 -0
  130. package/src/tui/index.tsx +11 -0
  131. package/tsconfig.json +20 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/core/crypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Import accounts from Antigravity Manager JSON files
3
+ *
4
+ * AM Structure:
5
+ * ~/.antigravity_tools/
6
+ * accounts.json - index file with account list
7
+ * accounts/<id>.json - detail files with tokens
8
+ */
9
+ import { Account } from "../types";
10
+ export interface ImportFromAmResult {
11
+ accounts: Account[];
12
+ skipped: string[];
13
+ errors: string[];
14
+ }
15
+ export declare function importFromAmFolder(amPath?: string): ImportFromAmResult;
16
+ export declare function isAmFolder(folderPath: string): boolean;
17
+ //# sourceMappingURL=amJson.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amJson.d.ts","sourceRoot":"","sources":["../../../src/core/importers/amJson.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AA8EnC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAmFtE;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAItD"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ /**
3
+ * Import accounts from Antigravity Manager JSON files
4
+ *
5
+ * AM Structure:
6
+ * ~/.antigravity_tools/
7
+ * accounts.json - index file with account list
8
+ * accounts/<id>.json - detail files with tokens
9
+ */
10
+ var __importDefault = (this && this.__importDefault) || function (mod) {
11
+ return (mod && mod.__esModule) ? mod : { "default": mod };
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.importFromAmFolder = importFromAmFolder;
15
+ exports.isAmFolder = isAmFolder;
16
+ const fs_1 = __importDefault(require("fs"));
17
+ const path_1 = __importDefault(require("path"));
18
+ const paths_1 = require("../paths");
19
+ function generateFingerprint() {
20
+ const randomHex = (len) => {
21
+ let result = "";
22
+ for (let i = 0; i < len; i++) {
23
+ result += Math.floor(Math.random() * 16).toString(16);
24
+ }
25
+ return result;
26
+ };
27
+ const platforms = ["win32/x64", "win32/arm64", "darwin/x64", "darwin/arm64"];
28
+ const ides = ["ANDROID_STUDIO", "INTELLIJ", "IDE_UNSPECIFIED"];
29
+ const clients = [
30
+ "google-cloud-sdk android-studio/2024.1",
31
+ "google-cloud-sdk intellij/2024.1",
32
+ "google-cloud-sdk vscode/1.87.0",
33
+ ];
34
+ const platform = platforms[Math.floor(Math.random() * platforms.length)];
35
+ return {
36
+ deviceId: crypto.randomUUID(),
37
+ sessionToken: randomHex(32),
38
+ userAgent: `antigravity/1.15.8 ${platform}`,
39
+ apiClient: clients[Math.floor(Math.random() * clients.length)],
40
+ clientMetadata: {
41
+ ideType: ides[Math.floor(Math.random() * ides.length)],
42
+ platform: platform.startsWith("darwin") ? "MACOS" : "WINDOWS",
43
+ pluginType: "GEMINI",
44
+ osVersion: platform.startsWith("darwin") ? "14.2.1" : "10.0.19042",
45
+ arch: platform.split("/")[1],
46
+ sqmId: `{${crypto.randomUUID().toUpperCase()}}`,
47
+ },
48
+ quotaUser: `device-${randomHex(16)}`,
49
+ createdAt: Date.now(),
50
+ };
51
+ }
52
+ function importFromAmFolder(amPath) {
53
+ const folderPath = amPath || (0, paths_1.getAmFolderPath)();
54
+ const result = {
55
+ accounts: [],
56
+ skipped: [],
57
+ errors: [],
58
+ };
59
+ // Check if folder exists
60
+ if (!fs_1.default.existsSync(folderPath)) {
61
+ result.errors.push(`AM folder not found: ${folderPath}`);
62
+ return result;
63
+ }
64
+ // Read index file
65
+ const indexPath = path_1.default.join(folderPath, "accounts.json");
66
+ if (!fs_1.default.existsSync(indexPath)) {
67
+ result.errors.push(`AM accounts.json not found: ${indexPath}`);
68
+ return result;
69
+ }
70
+ let index;
71
+ try {
72
+ const content = fs_1.default.readFileSync(indexPath, "utf-8");
73
+ index = JSON.parse(content);
74
+ }
75
+ catch (err) {
76
+ result.errors.push(`Failed to parse accounts.json: ${err}`);
77
+ return result;
78
+ }
79
+ // Process each account
80
+ const accountsDir = path_1.default.join(folderPath, "accounts");
81
+ for (const entry of index.accounts) {
82
+ // Skip disabled accounts
83
+ if (entry.disabled || entry.proxy_disabled) {
84
+ result.skipped.push(`${entry.email} (disabled)`);
85
+ continue;
86
+ }
87
+ // Read detail file
88
+ const detailPath = path_1.default.join(accountsDir, `${entry.id}.json`);
89
+ if (!fs_1.default.existsSync(detailPath)) {
90
+ result.skipped.push(`${entry.email} (no detail file)`);
91
+ continue;
92
+ }
93
+ let detail;
94
+ try {
95
+ const content = fs_1.default.readFileSync(detailPath, "utf-8");
96
+ detail = JSON.parse(content);
97
+ }
98
+ catch (err) {
99
+ result.skipped.push(`${entry.email} (parse error)`);
100
+ continue;
101
+ }
102
+ // Check if has refresh token
103
+ if (!detail.token?.refresh_token) {
104
+ result.skipped.push(`${entry.email} (no refresh token)`);
105
+ continue;
106
+ }
107
+ // Check proxy_disabled in detail file (AM GUI only updates detail file!)
108
+ if (detail.proxy_disabled) {
109
+ result.skipped.push(`${entry.email} (proxy disabled)`);
110
+ continue;
111
+ }
112
+ // Convert to Plugin account format
113
+ const account = {
114
+ email: detail.email,
115
+ refreshToken: detail.token.refresh_token,
116
+ projectId: detail.token.project_id,
117
+ managedProjectId: detail.token.project_id,
118
+ addedAt: Date.now(),
119
+ lastUsed: Date.now(),
120
+ fingerprint: generateFingerprint(),
121
+ };
122
+ result.accounts.push(account);
123
+ }
124
+ return result;
125
+ }
126
+ function isAmFolder(folderPath) {
127
+ const indexPath = path_1.default.join(folderPath, "accounts.json");
128
+ const accountsDir = path_1.default.join(folderPath, "accounts");
129
+ return fs_1.default.existsSync(indexPath) && fs_1.default.existsSync(accountsDir);
130
+ }
131
+ //# sourceMappingURL=amJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amJson.js","sourceRoot":"","sources":["../../../src/core/importers/amJson.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ export interface ModelLimit {
2
+ context: number;
3
+ output: number;
4
+ }
5
+ export interface ModelModalities {
6
+ input: string[];
7
+ output: string[];
8
+ }
9
+ export interface ModelVariant {
10
+ thinkingLevel?: string;
11
+ thinkingConfig?: {
12
+ thinkingBudget?: number;
13
+ };
14
+ }
15
+ export interface ModelConfig {
16
+ name: string;
17
+ limit?: ModelLimit;
18
+ modalities?: ModelModalities;
19
+ variants?: Record<string, ModelVariant>;
20
+ }
21
+ export interface ProviderConfig {
22
+ npm?: string;
23
+ name?: string;
24
+ options?: {
25
+ baseURL?: string;
26
+ apiKey?: string;
27
+ };
28
+ models: Record<string, ModelConfig>;
29
+ }
30
+ export interface McpServerConfig {
31
+ type: "local" | "remote";
32
+ command?: string[];
33
+ url?: string;
34
+ environment?: Record<string, string>;
35
+ enabled?: boolean;
36
+ }
37
+ export interface OpencodeConfig {
38
+ $schema?: string;
39
+ plugin?: string[];
40
+ mcp?: Record<string, McpServerConfig>;
41
+ provider?: Record<string, ProviderConfig>;
42
+ }
43
+ export interface ProviderInfo {
44
+ id: string;
45
+ name: string;
46
+ modelCount: number;
47
+ models: string[];
48
+ type: "builtin" | "custom";
49
+ baseURL?: string;
50
+ }
51
+ export interface McpServerInfo {
52
+ id: string;
53
+ command: string;
54
+ enabled: boolean;
55
+ hasEnvVars: boolean;
56
+ envVarCount: number;
57
+ }
58
+ export interface PluginInfo {
59
+ name: string;
60
+ version?: string;
61
+ }
62
+ export interface OpencodeInfo {
63
+ configPath: string;
64
+ exists: boolean;
65
+ providers: ProviderInfo[];
66
+ mcpServers: McpServerInfo[];
67
+ plugins: PluginInfo[];
68
+ totalModels: number;
69
+ }
70
+ /**
71
+ * Get the path to opencode.json
72
+ */
73
+ export declare function getOpencodeConfigPath(): string;
74
+ /**
75
+ * Read and parse opencode.json
76
+ */
77
+ export declare function readOpencodeConfig(configPath?: string): OpencodeConfig | null;
78
+ /**
79
+ * Parse opencode.json into display-friendly info
80
+ */
81
+ export declare function parseOpencodeInfo(configPath?: string): OpencodeInfo;
82
+ /**
83
+ * Get summary stats
84
+ */
85
+ export declare function getConfigSummary(info: OpencodeInfo): {
86
+ providers: number;
87
+ models: number;
88
+ mcpEnabled: number;
89
+ mcpDisabled: number;
90
+ plugins: number;
91
+ };
92
+ //# sourceMappingURL=opencode-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-config.d.ts","sourceRoot":"","sources":["../../src/core/opencode-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getOpencodeConfigPath = getOpencodeConfigPath;
37
+ exports.readOpencodeConfig = readOpencodeConfig;
38
+ exports.parseOpencodeInfo = parseOpencodeInfo;
39
+ exports.getConfigSummary = getConfigSummary;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const os = __importStar(require("os"));
43
+ // ============================================================================
44
+ // Functions
45
+ // ============================================================================
46
+ /**
47
+ * Get the path to opencode.json
48
+ */
49
+ function getOpencodeConfigPath() {
50
+ const home = os.homedir();
51
+ // Check .config/opencode first (Unix-style)
52
+ const unixPath = path.join(home, ".config", "opencode", "opencode.json");
53
+ if (fs.existsSync(unixPath)) {
54
+ return unixPath;
55
+ }
56
+ // Fallback to AppData on Windows
57
+ const appData = process.env.APPDATA || path.join(home, "AppData", "Roaming");
58
+ return path.join(appData, "opencode", "opencode.json");
59
+ }
60
+ /**
61
+ * Read and parse opencode.json
62
+ */
63
+ function readOpencodeConfig(configPath) {
64
+ const resolvedPath = configPath || getOpencodeConfigPath();
65
+ if (!fs.existsSync(resolvedPath)) {
66
+ return null;
67
+ }
68
+ try {
69
+ const content = fs.readFileSync(resolvedPath, "utf-8");
70
+ return JSON.parse(content);
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ }
76
+ /**
77
+ * Parse opencode.json into display-friendly info
78
+ */
79
+ function parseOpencodeInfo(configPath) {
80
+ const resolvedPath = configPath || getOpencodeConfigPath();
81
+ const config = readOpencodeConfig(resolvedPath);
82
+ const info = {
83
+ configPath: resolvedPath,
84
+ exists: config !== null,
85
+ providers: [],
86
+ mcpServers: [],
87
+ plugins: [],
88
+ totalModels: 0,
89
+ };
90
+ if (!config) {
91
+ return info;
92
+ }
93
+ // Parse plugins
94
+ if (config.plugin) {
95
+ info.plugins = config.plugin.map((p) => {
96
+ const match = p.match(/^(.+?)(@(.+))?$/);
97
+ return {
98
+ name: match?.[1] || p,
99
+ version: match?.[3],
100
+ };
101
+ });
102
+ }
103
+ // Parse MCP servers
104
+ if (config.mcp) {
105
+ info.mcpServers = Object.entries(config.mcp).map(([id, server]) => {
106
+ const cmd = server.command?.join(" ") || server.url || "N/A";
107
+ return {
108
+ id,
109
+ command: cmd,
110
+ enabled: server.enabled !== false,
111
+ hasEnvVars: !!server.environment,
112
+ envVarCount: server.environment ? Object.keys(server.environment).length : 0,
113
+ };
114
+ });
115
+ }
116
+ // Parse providers
117
+ if (config.provider) {
118
+ info.providers = Object.entries(config.provider).map(([id, provider]) => {
119
+ const modelIds = Object.keys(provider.models);
120
+ const isBuiltin = id === "google" && !provider.npm;
121
+ return {
122
+ id,
123
+ name: provider.name || id,
124
+ modelCount: modelIds.length,
125
+ models: modelIds,
126
+ type: isBuiltin ? "builtin" : "custom",
127
+ baseURL: provider.options?.baseURL,
128
+ };
129
+ });
130
+ info.totalModels = info.providers.reduce((sum, p) => sum + p.modelCount, 0);
131
+ }
132
+ return info;
133
+ }
134
+ /**
135
+ * Get summary stats
136
+ */
137
+ function getConfigSummary(info) {
138
+ const mcpEnabled = info.mcpServers.filter((m) => m.enabled).length;
139
+ const mcpDisabled = info.mcpServers.length - mcpEnabled;
140
+ return {
141
+ providers: info.providers.length,
142
+ models: info.totalModels,
143
+ mcpEnabled,
144
+ mcpDisabled,
145
+ plugins: info.plugins.length,
146
+ };
147
+ }
148
+ //# sourceMappingURL=opencode-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-config.js","sourceRoot":"","sources":["../../src/core/opencode-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function getConfigRoot(): string;
2
+ export declare function getPluginAccountsPath(customPath?: string): string;
3
+ export declare function getAmFolderPath(): string;
4
+ export declare function getAmDbPath(customPath?: string): string;
5
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"AAGA,wBAAgB,aAAa,IAAI,MAAM,CAQtC;AAGD,wBAAgB,qBAAqB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAKjE;AAGD,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAKvD"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getConfigRoot = getConfigRoot;
7
+ exports.getPluginAccountsPath = getPluginAccountsPath;
8
+ exports.getAmFolderPath = getAmFolderPath;
9
+ exports.getAmDbPath = getAmDbPath;
10
+ const os_1 = __importDefault(require("os"));
11
+ const path_1 = __importDefault(require("path"));
12
+ function getConfigRoot() {
13
+ if (process.env.APPDATA) {
14
+ return process.env.APPDATA;
15
+ }
16
+ if (process.platform === "darwin") {
17
+ return path_1.default.join(os_1.default.homedir(), "Library", "Application Support");
18
+ }
19
+ return process.env.XDG_CONFIG_HOME || path_1.default.join(os_1.default.homedir(), ".config");
20
+ }
21
+ // Plugin ALWAYS uses ~/.config/opencode on ALL platforms (including Windows)
22
+ function getPluginAccountsPath(customPath) {
23
+ if (customPath && customPath.trim().length > 0) {
24
+ return path_1.default.resolve(customPath);
25
+ }
26
+ return path_1.default.join(os_1.default.homedir(), ".config", "opencode", "antigravity-accounts.json");
27
+ }
28
+ // AM uses ~/.antigravity_tools on ALL platforms
29
+ function getAmFolderPath() {
30
+ return path_1.default.join(os_1.default.homedir(), ".antigravity_tools");
31
+ }
32
+ function getAmDbPath(customPath) {
33
+ if (customPath && customPath.trim().length > 0) {
34
+ return path_1.default.resolve(customPath);
35
+ }
36
+ return path_1.default.join(getConfigRoot(), "antigravity-manager", "accounts.db");
37
+ }
38
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":";;;;;AAGA,sCAQC;AAGD,sDAKC;AAGD,0CAEC;AAED,kCAKC;AA/BD,4CAAoB;AACpB,gDAAwB;AAExB,SAAgB,aAAa;IAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAC3E,CAAC;AAED,6EAA6E;AAC7E,SAAgB,qBAAqB,CAAC,UAAmB;IACvD,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,2BAA2B,CAAC,CAAC;AACrF,CAAC;AAED,gDAAgD;AAChD,SAAgB,eAAe;IAC7B,OAAO,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,oBAAoB,CAAC,CAAC;AACvD,CAAC;AAED,SAAgB,WAAW,CAAC,UAAmB;IAC7C,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,qBAAqB,EAAE,aAAa,CAAC,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,74 @@
1
+ export type RateLimitResetTimes = Record<string, number>;
2
+ export interface AccountFingerprint {
3
+ deviceId?: string;
4
+ sessionToken?: string;
5
+ userAgent?: string;
6
+ apiClient?: string;
7
+ clientMetadata?: Record<string, unknown>;
8
+ quotaUser?: string;
9
+ createdAt?: number;
10
+ }
11
+ export interface FingerprintHistoryEntry {
12
+ fingerprint: AccountFingerprint;
13
+ timestamp: number;
14
+ reason?: string;
15
+ }
16
+ export interface Account {
17
+ email: string;
18
+ refreshToken?: string;
19
+ projectId?: string;
20
+ managedProjectId?: string;
21
+ addedAt?: number;
22
+ lastUsed?: number;
23
+ rateLimitResetTimes?: RateLimitResetTimes;
24
+ fingerprint?: AccountFingerprint;
25
+ fingerprintHistory?: FingerprintHistoryEntry[];
26
+ enabled?: boolean;
27
+ }
28
+ export interface PluginAccountsFile {
29
+ version: number;
30
+ accounts: Account[];
31
+ activeIndex?: number;
32
+ activeIndexByFamily?: Record<string, number>;
33
+ }
34
+ export interface PortableExportFile {
35
+ version: number;
36
+ exportedAt: number;
37
+ exportedFrom: "opencode-account-manager" | "antigravity-sync";
38
+ accounts: Account[];
39
+ }
40
+ export interface EncryptedExportFile {
41
+ version: 1;
42
+ format: "encrypted";
43
+ algorithm: "aes-256-gcm";
44
+ salt: string;
45
+ iv: string;
46
+ authTag: string;
47
+ data: string;
48
+ exportedAt: number;
49
+ accountCount: number;
50
+ exportedFrom: "opencode-account-manager";
51
+ }
52
+ /**
53
+ * Type guard to check if data is an encrypted export file
54
+ */
55
+ export declare function isEncryptedExportFile(data: unknown): data is EncryptedExportFile;
56
+ /**
57
+ * Type guard to check if data is a portable export file
58
+ */
59
+ export declare function isPortableExportFile(data: unknown): data is PortableExportFile;
60
+ export type ExportFormat = "encrypted" | "plain";
61
+ export interface ExportOptions {
62
+ format: ExportFormat;
63
+ folder: string;
64
+ password?: string;
65
+ accounts: Account[];
66
+ }
67
+ export interface ImportResult {
68
+ success: boolean;
69
+ accounts: Account[];
70
+ newCount: number;
71
+ overwrittenCount: number;
72
+ error?: string;
73
+ }
74
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEzD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,kBAAkB,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,kBAAkB,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,0BAA0B,GAAG,kBAAkB,CAAC;IAC9D,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAMD,MAAM,WAAW,mBAAmB;IAElC,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,aAAa,CAAC;IAGzB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAGhB,IAAI,EAAE,MAAM,CAAC;IAGb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,0BAA0B,CAAC;CAC1C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,mBAAmB,CAWhF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,kBAAkB,CAQ9E;AAMD,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;AAEjD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isEncryptedExportFile = isEncryptedExportFile;
4
+ exports.isPortableExportFile = isPortableExportFile;
5
+ /**
6
+ * Type guard to check if data is an encrypted export file
7
+ */
8
+ function isEncryptedExportFile(data) {
9
+ if (typeof data !== "object" || data === null)
10
+ return false;
11
+ const obj = data;
12
+ return (obj.format === "encrypted" &&
13
+ obj.algorithm === "aes-256-gcm" &&
14
+ typeof obj.salt === "string" &&
15
+ typeof obj.iv === "string" &&
16
+ typeof obj.authTag === "string" &&
17
+ typeof obj.data === "string");
18
+ }
19
+ /**
20
+ * Type guard to check if data is a portable export file
21
+ */
22
+ function isPortableExportFile(data) {
23
+ if (typeof data !== "object" || data === null)
24
+ return false;
25
+ const obj = data;
26
+ return (typeof obj.version === "number" &&
27
+ typeof obj.exportedAt === "number" &&
28
+ Array.isArray(obj.accounts));
29
+ }
30
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":";;AAwEA,sDAWC;AAKD,oDAQC;AA3BD;;GAEG;AACH,SAAgB,qBAAqB,CAAC,IAAa;IACjD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5D,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,OAAO,CACL,GAAG,CAAC,MAAM,KAAK,WAAW;QAC1B,GAAG,CAAC,SAAS,KAAK,aAAa;QAC/B,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ;QAC1B,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;QAC/B,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAC7B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,IAAa;IAChD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5D,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,OAAO,CACL,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;QAC/B,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;QAClC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAC5B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function readJsonFile<T>(filePath: string): T;
2
+ export declare function writeJsonFile(filePath: string, data: unknown): void;
3
+ export declare function safeParseJson(input: string): unknown;
4
+ export declare function toLowerTrim(input: string): string;
5
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAGnD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAOnE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMpD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.readJsonFile = readJsonFile;
7
+ exports.writeJsonFile = writeJsonFile;
8
+ exports.safeParseJson = safeParseJson;
9
+ exports.toLowerTrim = toLowerTrim;
10
+ const fs_1 = __importDefault(require("fs"));
11
+ const path_1 = __importDefault(require("path"));
12
+ function readJsonFile(filePath) {
13
+ const raw = fs_1.default.readFileSync(filePath, "utf8");
14
+ return JSON.parse(raw);
15
+ }
16
+ function writeJsonFile(filePath, data) {
17
+ const dir = path_1.default.dirname(filePath);
18
+ if (!fs_1.default.existsSync(dir)) {
19
+ fs_1.default.mkdirSync(dir, { recursive: true });
20
+ }
21
+ const raw = JSON.stringify(data, null, 2);
22
+ fs_1.default.writeFileSync(filePath, raw, "utf8");
23
+ }
24
+ function safeParseJson(input) {
25
+ try {
26
+ return JSON.parse(input);
27
+ }
28
+ catch {
29
+ return undefined;
30
+ }
31
+ }
32
+ function toLowerTrim(input) {
33
+ return input.trim().toLowerCase();
34
+ }
35
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":";;;;;AAGA,oCAGC;AAED,sCAOC;AAED,sCAMC;AAED,kCAEC;AA3BD,4CAAoB;AACpB,gDAAwB;AAExB,SAAgB,YAAY,CAAI,QAAgB;IAC9C,MAAM,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;AAC9B,CAAC;AAED,SAAgB,aAAa,CAAC,QAAgB,EAAE,IAAa;IAC3D,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,YAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1C,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,aAAa,CAAC,KAAa;IACzC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAgB,WAAW,CAAC,KAAa;IACvC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ interface DashboardProps {
3
+ pluginPath?: string;
4
+ }
5
+ export declare function Dashboard({ pluginPath }: DashboardProps): React.JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=Dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../src/tui/Dashboard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AA8BnD,UAAU,cAAc;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAaD,wBAAgB,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,cAAc,qBAiYvD"}