@benjamolina/opencode-antigravity-guard 1.0.0
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.
- package/LICENSE +21 -0
- package/README.md +773 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/src/antigravity/oauth.d.ts +31 -0
- package/dist/src/antigravity/oauth.d.ts.map +1 -0
- package/dist/src/antigravity/oauth.js +171 -0
- package/dist/src/antigravity/oauth.js.map +1 -0
- package/dist/src/constants.d.ts +139 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +220 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/hooks/auto-update-checker/cache.d.ts +3 -0
- package/dist/src/hooks/auto-update-checker/cache.d.ts.map +1 -0
- package/dist/src/hooks/auto-update-checker/cache.js +71 -0
- package/dist/src/hooks/auto-update-checker/cache.js.map +1 -0
- package/dist/src/hooks/auto-update-checker/checker.d.ts +16 -0
- package/dist/src/hooks/auto-update-checker/checker.d.ts.map +1 -0
- package/dist/src/hooks/auto-update-checker/checker.js +234 -0
- package/dist/src/hooks/auto-update-checker/checker.js.map +1 -0
- package/dist/src/hooks/auto-update-checker/constants.d.ts +9 -0
- package/dist/src/hooks/auto-update-checker/constants.d.ts.map +1 -0
- package/dist/src/hooks/auto-update-checker/constants.js +23 -0
- package/dist/src/hooks/auto-update-checker/constants.js.map +1 -0
- package/dist/src/hooks/auto-update-checker/index.d.ts +34 -0
- package/dist/src/hooks/auto-update-checker/index.d.ts.map +1 -0
- package/dist/src/hooks/auto-update-checker/index.js +122 -0
- package/dist/src/hooks/auto-update-checker/index.js.map +1 -0
- package/dist/src/hooks/auto-update-checker/logging.d.ts +3 -0
- package/dist/src/hooks/auto-update-checker/logging.d.ts.map +1 -0
- package/dist/src/hooks/auto-update-checker/logging.js +9 -0
- package/dist/src/hooks/auto-update-checker/logging.js.map +1 -0
- package/dist/src/hooks/auto-update-checker/types.d.ts +25 -0
- package/dist/src/hooks/auto-update-checker/types.d.ts.map +1 -0
- package/dist/src/hooks/auto-update-checker/types.js +1 -0
- package/dist/src/hooks/auto-update-checker/types.js.map +1 -0
- package/dist/src/plugin/accounts.d.ts +180 -0
- package/dist/src/plugin/accounts.d.ts.map +1 -0
- package/dist/src/plugin/accounts.js +1045 -0
- package/dist/src/plugin/accounts.js.map +1 -0
- package/dist/src/plugin/api-key.d.ts +90 -0
- package/dist/src/plugin/api-key.d.ts.map +1 -0
- package/dist/src/plugin/api-key.js +544 -0
- package/dist/src/plugin/api-key.js.map +1 -0
- package/dist/src/plugin/auth.d.ts +21 -0
- package/dist/src/plugin/auth.d.ts.map +1 -0
- package/dist/src/plugin/auth.js +46 -0
- package/dist/src/plugin/auth.js.map +1 -0
- package/dist/src/plugin/cache/index.d.ts +5 -0
- package/dist/src/plugin/cache/index.d.ts.map +1 -0
- package/dist/src/plugin/cache/index.js +5 -0
- package/dist/src/plugin/cache/index.js.map +1 -0
- package/dist/src/plugin/cache/signature-cache.d.ts +111 -0
- package/dist/src/plugin/cache/signature-cache.d.ts.map +1 -0
- package/dist/src/plugin/cache/signature-cache.js +375 -0
- package/dist/src/plugin/cache/signature-cache.js.map +1 -0
- package/dist/src/plugin/cache.d.ts +44 -0
- package/dist/src/plugin/cache.d.ts.map +1 -0
- package/dist/src/plugin/cache.js +200 -0
- package/dist/src/plugin/cache.js.map +1 -0
- package/dist/src/plugin/cli.d.ts +31 -0
- package/dist/src/plugin/cli.d.ts.map +1 -0
- package/dist/src/plugin/cli.js +135 -0
- package/dist/src/plugin/cli.js.map +1 -0
- package/dist/src/plugin/config/index.d.ts +16 -0
- package/dist/src/plugin/config/index.d.ts.map +1 -0
- package/dist/src/plugin/config/index.js +16 -0
- package/dist/src/plugin/config/index.js.map +1 -0
- package/dist/src/plugin/config/loader.d.ts +36 -0
- package/dist/src/plugin/config/loader.d.ts.map +1 -0
- package/dist/src/plugin/config/loader.js +140 -0
- package/dist/src/plugin/config/loader.js.map +1 -0
- package/dist/src/plugin/config/models.d.ts +43 -0
- package/dist/src/plugin/config/models.d.ts.map +1 -0
- package/dist/src/plugin/config/models.js +176 -0
- package/dist/src/plugin/config/models.js.map +1 -0
- package/dist/src/plugin/config/schema.d.ts +177 -0
- package/dist/src/plugin/config/schema.d.ts.map +1 -0
- package/dist/src/plugin/config/schema.js +507 -0
- package/dist/src/plugin/config/schema.js.map +1 -0
- package/dist/src/plugin/config/updater.d.ts +55 -0
- package/dist/src/plugin/config/updater.d.ts.map +1 -0
- package/dist/src/plugin/config/updater.js +125 -0
- package/dist/src/plugin/config/updater.js.map +1 -0
- package/dist/src/plugin/core/streaming/index.d.ts +3 -0
- package/dist/src/plugin/core/streaming/index.d.ts.map +1 -0
- package/dist/src/plugin/core/streaming/index.js +3 -0
- package/dist/src/plugin/core/streaming/index.js.map +1 -0
- package/dist/src/plugin/core/streaming/transformer.d.ts +10 -0
- package/dist/src/plugin/core/streaming/transformer.d.ts.map +1 -0
- package/dist/src/plugin/core/streaming/transformer.js +271 -0
- package/dist/src/plugin/core/streaming/transformer.js.map +1 -0
- package/dist/src/plugin/core/streaming/types.d.ts +27 -0
- package/dist/src/plugin/core/streaming/types.d.ts.map +1 -0
- package/dist/src/plugin/core/streaming/types.js +1 -0
- package/dist/src/plugin/core/streaming/types.js.map +1 -0
- package/dist/src/plugin/debug.d.ts +99 -0
- package/dist/src/plugin/debug.d.ts.map +1 -0
- package/dist/src/plugin/debug.js +400 -0
- package/dist/src/plugin/debug.js.map +1 -0
- package/dist/src/plugin/errors.d.ts +28 -0
- package/dist/src/plugin/errors.d.ts.map +1 -0
- package/dist/src/plugin/errors.js +42 -0
- package/dist/src/plugin/errors.js.map +1 -0
- package/dist/src/plugin/fingerprint.d.ts +70 -0
- package/dist/src/plugin/fingerprint.d.ts.map +1 -0
- package/dist/src/plugin/fingerprint.js +138 -0
- package/dist/src/plugin/fingerprint.js.map +1 -0
- package/dist/src/plugin/image-saver.d.ts +25 -0
- package/dist/src/plugin/image-saver.d.ts.map +1 -0
- package/dist/src/plugin/image-saver.js +86 -0
- package/dist/src/plugin/image-saver.js.map +1 -0
- package/dist/src/plugin/logger.d.ts +36 -0
- package/dist/src/plugin/logger.d.ts.map +1 -0
- package/dist/src/plugin/logger.js +71 -0
- package/dist/src/plugin/logger.js.map +1 -0
- package/dist/src/plugin/logging-utils.d.ts +23 -0
- package/dist/src/plugin/logging-utils.d.ts.map +1 -0
- package/dist/src/plugin/logging-utils.js +92 -0
- package/dist/src/plugin/logging-utils.js.map +1 -0
- package/dist/src/plugin/project.d.ts +33 -0
- package/dist/src/plugin/project.d.ts.map +1 -0
- package/dist/src/plugin/project.js +234 -0
- package/dist/src/plugin/project.js.map +1 -0
- package/dist/src/plugin/quota.d.ts +59 -0
- package/dist/src/plugin/quota.d.ts.map +1 -0
- package/dist/src/plugin/quota.js +295 -0
- package/dist/src/plugin/quota.js.map +1 -0
- package/dist/src/plugin/recovery/constants.d.ts +22 -0
- package/dist/src/plugin/recovery/constants.d.ts.map +1 -0
- package/dist/src/plugin/recovery/constants.js +43 -0
- package/dist/src/plugin/recovery/constants.js.map +1 -0
- package/dist/src/plugin/recovery/index.d.ts +12 -0
- package/dist/src/plugin/recovery/index.d.ts.map +1 -0
- package/dist/src/plugin/recovery/index.js +12 -0
- package/dist/src/plugin/recovery/index.js.map +1 -0
- package/dist/src/plugin/recovery/storage.d.ts +24 -0
- package/dist/src/plugin/recovery/storage.d.ts.map +1 -0
- package/dist/src/plugin/recovery/storage.js +354 -0
- package/dist/src/plugin/recovery/storage.js.map +1 -0
- package/dist/src/plugin/recovery/types.d.ts +116 -0
- package/dist/src/plugin/recovery/types.d.ts.map +1 -0
- package/dist/src/plugin/recovery/types.js +6 -0
- package/dist/src/plugin/recovery/types.js.map +1 -0
- package/dist/src/plugin/recovery.d.ts +61 -0
- package/dist/src/plugin/recovery.d.ts.map +1 -0
- package/dist/src/plugin/recovery.js +381 -0
- package/dist/src/plugin/recovery.js.map +1 -0
- package/dist/src/plugin/refresh-queue.d.ts +100 -0
- package/dist/src/plugin/refresh-queue.d.ts.map +1 -0
- package/dist/src/plugin/refresh-queue.js +247 -0
- package/dist/src/plugin/refresh-queue.js.map +1 -0
- package/dist/src/plugin/request-helpers.d.ts +270 -0
- package/dist/src/plugin/request-helpers.d.ts.map +1 -0
- package/dist/src/plugin/request-helpers.js +2384 -0
- package/dist/src/plugin/request-helpers.js.map +1 -0
- package/dist/src/plugin/request.d.ts +116 -0
- package/dist/src/plugin/request.d.ts.map +1 -0
- package/dist/src/plugin/request.js +1626 -0
- package/dist/src/plugin/request.js.map +1 -0
- package/dist/src/plugin/rotation.d.ts +169 -0
- package/dist/src/plugin/rotation.d.ts.map +1 -0
- package/dist/src/plugin/rotation.js +328 -0
- package/dist/src/plugin/rotation.js.map +1 -0
- package/dist/src/plugin/search.d.ts +32 -0
- package/dist/src/plugin/search.d.ts.map +1 -0
- package/dist/src/plugin/search.js +195 -0
- package/dist/src/plugin/search.js.map +1 -0
- package/dist/src/plugin/server.d.ts +23 -0
- package/dist/src/plugin/server.d.ts.map +1 -0
- package/dist/src/plugin/server.js +324 -0
- package/dist/src/plugin/server.js.map +1 -0
- package/dist/src/plugin/storage.d.ts +137 -0
- package/dist/src/plugin/storage.d.ts.map +1 -0
- package/dist/src/plugin/storage.js +637 -0
- package/dist/src/plugin/storage.js.map +1 -0
- package/dist/src/plugin/stores/signature-store.d.ts +5 -0
- package/dist/src/plugin/stores/signature-store.d.ts.map +1 -0
- package/dist/src/plugin/stores/signature-store.js +25 -0
- package/dist/src/plugin/stores/signature-store.js.map +1 -0
- package/dist/src/plugin/thinking-recovery.d.ts +90 -0
- package/dist/src/plugin/thinking-recovery.d.ts.map +1 -0
- package/dist/src/plugin/thinking-recovery.js +316 -0
- package/dist/src/plugin/thinking-recovery.js.map +1 -0
- package/dist/src/plugin/token.d.ts +19 -0
- package/dist/src/plugin/token.d.ts.map +1 -0
- package/dist/src/plugin/token.js +128 -0
- package/dist/src/plugin/token.js.map +1 -0
- package/dist/src/plugin/transform/claude.d.ts +80 -0
- package/dist/src/plugin/transform/claude.d.ts.map +1 -0
- package/dist/src/plugin/transform/claude.js +265 -0
- package/dist/src/plugin/transform/claude.js.map +1 -0
- package/dist/src/plugin/transform/cross-model-sanitizer.d.ts +35 -0
- package/dist/src/plugin/transform/cross-model-sanitizer.d.ts.map +1 -0
- package/dist/src/plugin/transform/cross-model-sanitizer.js +225 -0
- package/dist/src/plugin/transform/cross-model-sanitizer.js.map +1 -0
- package/dist/src/plugin/transform/gemini.d.ts +100 -0
- package/dist/src/plugin/transform/gemini.d.ts.map +1 -0
- package/dist/src/plugin/transform/gemini.js +482 -0
- package/dist/src/plugin/transform/gemini.js.map +1 -0
- package/dist/src/plugin/transform/index.d.ts +15 -0
- package/dist/src/plugin/transform/index.d.ts.map +1 -0
- package/dist/src/plugin/transform/index.js +14 -0
- package/dist/src/plugin/transform/index.js.map +1 -0
- package/dist/src/plugin/transform/model-resolver.d.ts +96 -0
- package/dist/src/plugin/transform/model-resolver.d.ts.map +1 -0
- package/dist/src/plugin/transform/model-resolver.js +444 -0
- package/dist/src/plugin/transform/model-resolver.js.map +1 -0
- package/dist/src/plugin/transform/types.d.ts +111 -0
- package/dist/src/plugin/transform/types.d.ts.map +1 -0
- package/dist/src/plugin/transform/types.js +1 -0
- package/dist/src/plugin/transform/types.js.map +1 -0
- package/dist/src/plugin/types.d.ts +105 -0
- package/dist/src/plugin/types.d.ts.map +1 -0
- package/dist/src/plugin/types.js +1 -0
- package/dist/src/plugin/types.js.map +1 -0
- package/dist/src/plugin/ui/ansi.d.ts +32 -0
- package/dist/src/plugin/ui/ansi.d.ts.map +1 -0
- package/dist/src/plugin/ui/ansi.js +52 -0
- package/dist/src/plugin/ui/ansi.js.map +1 -0
- package/dist/src/plugin/ui/auth-menu.d.ts +33 -0
- package/dist/src/plugin/ui/auth-menu.d.ts.map +1 -0
- package/dist/src/plugin/ui/auth-menu.js +110 -0
- package/dist/src/plugin/ui/auth-menu.js.map +1 -0
- package/dist/src/plugin/ui/confirm.d.ts +2 -0
- package/dist/src/plugin/ui/confirm.d.ts.map +1 -0
- package/dist/src/plugin/ui/confirm.js +15 -0
- package/dist/src/plugin/ui/confirm.js.map +1 -0
- package/dist/src/plugin/ui/select.d.ts +23 -0
- package/dist/src/plugin/ui/select.d.ts.map +1 -0
- package/dist/src/plugin/ui/select.js +254 -0
- package/dist/src/plugin/ui/select.js.map +1 -0
- package/dist/src/plugin/version.d.ts +19 -0
- package/dist/src/plugin/version.d.ts.map +1 -0
- package/dist/src/plugin/version.js +80 -0
- package/dist/src/plugin/version.js.map +1 -0
- package/dist/src/plugin.d.ts +50 -0
- package/dist/src/plugin.d.ts.map +1 -0
- package/dist/src/plugin.js +3378 -0
- package/dist/src/plugin.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { accessTokenExpired } from "./auth.js";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
const authCache = new Map();
|
|
4
|
+
/**
|
|
5
|
+
* Produces a stable cache key from a refresh token string.
|
|
6
|
+
*/
|
|
7
|
+
function normalizeRefreshKey(refresh) {
|
|
8
|
+
const key = refresh?.trim();
|
|
9
|
+
return key ? key : undefined;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Returns a cached auth snapshot when available, favoring unexpired tokens.
|
|
13
|
+
*/
|
|
14
|
+
export function resolveCachedAuth(auth) {
|
|
15
|
+
const key = normalizeRefreshKey(auth.refresh);
|
|
16
|
+
if (!key) {
|
|
17
|
+
return auth;
|
|
18
|
+
}
|
|
19
|
+
const cached = authCache.get(key);
|
|
20
|
+
if (!cached) {
|
|
21
|
+
authCache.set(key, auth);
|
|
22
|
+
return auth;
|
|
23
|
+
}
|
|
24
|
+
if (!accessTokenExpired(auth)) {
|
|
25
|
+
authCache.set(key, auth);
|
|
26
|
+
return auth;
|
|
27
|
+
}
|
|
28
|
+
if (!accessTokenExpired(cached)) {
|
|
29
|
+
return cached;
|
|
30
|
+
}
|
|
31
|
+
authCache.set(key, auth);
|
|
32
|
+
return auth;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Stores the latest auth snapshot keyed by refresh token.
|
|
36
|
+
*/
|
|
37
|
+
export function storeCachedAuth(auth) {
|
|
38
|
+
const key = normalizeRefreshKey(auth.refresh);
|
|
39
|
+
if (!key) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
authCache.set(key, auth);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Clears cached auth globally or for a specific refresh token.
|
|
46
|
+
*/
|
|
47
|
+
export function clearCachedAuth(refresh) {
|
|
48
|
+
if (!refresh) {
|
|
49
|
+
authCache.clear();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const key = normalizeRefreshKey(refresh);
|
|
53
|
+
if (key) {
|
|
54
|
+
authCache.delete(key);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// ============================================================================
|
|
58
|
+
// Thinking Signature Cache (for Claude multi-turn conversations)
|
|
59
|
+
// ============================================================================
|
|
60
|
+
import { SignatureCache, createSignatureCache } from "./cache/signature-cache.js";
|
|
61
|
+
// Map: sessionId -> Map<textHash, SignatureEntry>
|
|
62
|
+
const signatureCache = new Map();
|
|
63
|
+
// Cache entries expire after 1 hour
|
|
64
|
+
const SIGNATURE_CACHE_TTL_MS = 60 * 60 * 1000;
|
|
65
|
+
// Maximum entries per session to prevent memory bloat
|
|
66
|
+
const MAX_ENTRIES_PER_SESSION = 100;
|
|
67
|
+
// 16 hex chars = 64-bit key space; keeps memory bounded while making collisions extremely unlikely.
|
|
68
|
+
const SIGNATURE_TEXT_HASH_HEX_LEN = 16;
|
|
69
|
+
// Disk cache instance (initialized via initDiskSignatureCache)
|
|
70
|
+
let diskCache = null;
|
|
71
|
+
/**
|
|
72
|
+
* Initialize the disk-based signature cache.
|
|
73
|
+
* Call this from plugin initialization when keep_thinking is enabled.
|
|
74
|
+
*/
|
|
75
|
+
export function initDiskSignatureCache(config) {
|
|
76
|
+
diskCache = createSignatureCache(config);
|
|
77
|
+
return diskCache;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get the disk cache instance (for testing/debugging).
|
|
81
|
+
*/
|
|
82
|
+
export function getDiskSignatureCache() {
|
|
83
|
+
return diskCache;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Hashes text content into a stable, Unicode-safe key.
|
|
87
|
+
*
|
|
88
|
+
* Uses SHA-256 over UTF-8 bytes and truncates to keep memory usage bounded.
|
|
89
|
+
*/
|
|
90
|
+
function hashText(text) {
|
|
91
|
+
return createHash("sha256").update(text, "utf8").digest("hex").slice(0, SIGNATURE_TEXT_HASH_HEX_LEN);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Create a disk cache key from sessionId and textHash.
|
|
95
|
+
*/
|
|
96
|
+
function makeDiskKey(sessionId, textHash) {
|
|
97
|
+
return `${sessionId}:${textHash}`;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Caches a thinking signature for a given session and text.
|
|
101
|
+
* Used for Claude models that require signed thinking blocks in multi-turn conversations.
|
|
102
|
+
* Also writes to disk cache if enabled.
|
|
103
|
+
*/
|
|
104
|
+
export function cacheSignature(sessionId, text, signature) {
|
|
105
|
+
if (!sessionId || !text || !signature)
|
|
106
|
+
return;
|
|
107
|
+
const textHash = hashText(text);
|
|
108
|
+
// Write to memory cache
|
|
109
|
+
let sessionMemCache = signatureCache.get(sessionId);
|
|
110
|
+
if (!sessionMemCache) {
|
|
111
|
+
sessionMemCache = new Map();
|
|
112
|
+
signatureCache.set(sessionId, sessionMemCache);
|
|
113
|
+
}
|
|
114
|
+
// Evict old entries if we're at capacity
|
|
115
|
+
if (sessionMemCache.size >= MAX_ENTRIES_PER_SESSION) {
|
|
116
|
+
const now = Date.now();
|
|
117
|
+
for (const [key, entry] of sessionMemCache.entries()) {
|
|
118
|
+
if (now - entry.timestamp > SIGNATURE_CACHE_TTL_MS) {
|
|
119
|
+
sessionMemCache.delete(key);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// If still at capacity, remove oldest entries
|
|
123
|
+
if (sessionMemCache.size >= MAX_ENTRIES_PER_SESSION) {
|
|
124
|
+
const entries = Array.from(sessionMemCache.entries())
|
|
125
|
+
.sort((a, b) => a[1].timestamp - b[1].timestamp);
|
|
126
|
+
const toRemove = entries.slice(0, Math.floor(MAX_ENTRIES_PER_SESSION / 4));
|
|
127
|
+
for (const [key] of toRemove) {
|
|
128
|
+
sessionMemCache.delete(key);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
sessionMemCache.set(textHash, { signature, timestamp: Date.now() });
|
|
133
|
+
// Write to disk cache if enabled
|
|
134
|
+
if (diskCache) {
|
|
135
|
+
const diskKey = makeDiskKey(sessionId, textHash);
|
|
136
|
+
diskCache.store(diskKey, signature);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Retrieves a cached signature for a given session and text.
|
|
141
|
+
* Checks memory first, then falls back to disk cache.
|
|
142
|
+
* Returns undefined if not found or expired.
|
|
143
|
+
*/
|
|
144
|
+
export function getCachedSignature(sessionId, text) {
|
|
145
|
+
if (!sessionId || !text)
|
|
146
|
+
return undefined;
|
|
147
|
+
const textHash = hashText(text);
|
|
148
|
+
// Check memory cache first
|
|
149
|
+
const sessionMemCache = signatureCache.get(sessionId);
|
|
150
|
+
if (sessionMemCache) {
|
|
151
|
+
const entry = sessionMemCache.get(textHash);
|
|
152
|
+
if (entry) {
|
|
153
|
+
// Check if expired
|
|
154
|
+
if (Date.now() - entry.timestamp > SIGNATURE_CACHE_TTL_MS) {
|
|
155
|
+
sessionMemCache.delete(textHash);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
return entry.signature;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Fall back to disk cache
|
|
163
|
+
if (diskCache) {
|
|
164
|
+
const diskKey = makeDiskKey(sessionId, textHash);
|
|
165
|
+
const diskValue = diskCache.retrieve(diskKey);
|
|
166
|
+
if (diskValue) {
|
|
167
|
+
// Promote to memory cache for faster subsequent access
|
|
168
|
+
let memCache = signatureCache.get(sessionId);
|
|
169
|
+
if (!memCache) {
|
|
170
|
+
memCache = new Map();
|
|
171
|
+
signatureCache.set(sessionId, memCache);
|
|
172
|
+
}
|
|
173
|
+
memCache.set(textHash, { signature: diskValue, timestamp: Date.now() });
|
|
174
|
+
return diskValue;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return undefined;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Clears signature cache for a specific session or all sessions.
|
|
181
|
+
* Also clears from disk cache if enabled.
|
|
182
|
+
*/
|
|
183
|
+
export function clearSignatureCache(sessionId) {
|
|
184
|
+
if (sessionId) {
|
|
185
|
+
signatureCache.delete(sessionId);
|
|
186
|
+
// Note: We don't clear individual sessions from disk cache to avoid
|
|
187
|
+
// expensive iteration. Disk cache entries will expire naturally.
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
signatureCache.clear();
|
|
191
|
+
// For full clear, we could clear disk cache, but leaving it for now
|
|
192
|
+
// since entries have TTL and will expire naturally.
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// ============================================================================
|
|
196
|
+
// Disk-Persistent Signature Cache (re-export from cache/ folder)
|
|
197
|
+
// ============================================================================
|
|
198
|
+
// Re-export SignatureCache class and factory for direct use
|
|
199
|
+
export { SignatureCache, createSignatureCache } from "./cache/signature-cache.js";
|
|
200
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/plugin/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,SAAS,GAAG,IAAI,GAAG,EAA4B,CAAC;AAEtD;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAgB;IAC3C,MAAM,GAAG,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5B,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAsB;IACtD,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAsB;IACpD,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;IACT,CAAC;IACD,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,GAAG,EAAE,CAAC;QACR,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,iEAAiE;AACjE,+EAA+E;AAE/E,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAQ/E,kDAAkD;AAClD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAuC,CAAC;AAEtE,oCAAoC;AACpC,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9C,sDAAsD;AACtD,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAEpC,oGAAoG;AACpG,MAAM,2BAA2B,GAAG,EAAE,CAAC;AAEvC,+DAA+D;AAC/D,IAAI,SAAS,GAA0B,IAAI,CAAC;AAE5C;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAwC;IAC7E,SAAS,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC;AACvG,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,SAAiB,EAAE,QAAgB;IACtD,OAAO,GAAG,SAAS,IAAI,QAAQ,EAAE,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,IAAY,EAAE,SAAiB;IAC/E,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO;IAE9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEhC,wBAAwB;IACxB,IAAI,eAAe,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;QAC5B,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACjD,CAAC;IAED,yCAAyC;IACzC,IAAI,eAAe,CAAC,IAAI,IAAI,uBAAuB,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,sBAAsB,EAAE,CAAC;gBACnD,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,8CAA8C;QAC9C,IAAI,eAAe,CAAC,IAAI,IAAI,uBAAuB,EAAE,CAAC;YACpD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;iBAClD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,uBAAuB,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3E,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;gBAC7B,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAEpE,iCAAiC;IACjC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACjD,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,IAAY;IAChE,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAE1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEhC,2BAA2B;IAC3B,MAAM,eAAe,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtD,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,KAAK,EAAE,CAAC;YACV,mBAAmB;YACnB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,sBAAsB,EAAE,CAAC;gBAC1D,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,OAAO,KAAK,CAAC,SAAS,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,SAAS,EAAE,CAAC;YACd,uDAAuD;YACvD,IAAI,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;gBACrB,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC1C,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACxE,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAkB;IACpD,IAAI,SAAS,EAAE,CAAC;QACd,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjC,oEAAoE;QACpE,iEAAiE;IACnE,CAAC;SAAM,CAAC;QACN,cAAc,CAAC,KAAK,EAAE,CAAC;QACvB,oEAAoE;QACpE,oDAAoD;IACtD,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,iEAAiE;AACjE,+EAA+E;AAE/E,4DAA4D;AAC5D,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type AccountStatus } from "./ui/auth-menu";
|
|
2
|
+
export declare function promptProjectId(): Promise<string>;
|
|
3
|
+
/**
|
|
4
|
+
* Pause the menu loop so the user can read output that was just printed
|
|
5
|
+
* before the next menu render clears the screen. No-op when stdin is not a TTY.
|
|
6
|
+
*/
|
|
7
|
+
export declare function pressEnterToContinue(message?: string): Promise<void>;
|
|
8
|
+
export declare function promptAddAnotherAccount(currentCount: number): Promise<boolean>;
|
|
9
|
+
export type LoginMode = "add" | "fresh" | "manage" | "check" | "verify" | "verify-all" | "cancel";
|
|
10
|
+
export interface ExistingAccountInfo {
|
|
11
|
+
email?: string;
|
|
12
|
+
index: number;
|
|
13
|
+
addedAt?: number;
|
|
14
|
+
lastUsed?: number;
|
|
15
|
+
status?: AccountStatus;
|
|
16
|
+
isCurrentAccount?: boolean;
|
|
17
|
+
enabled?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface LoginMenuResult {
|
|
20
|
+
mode: LoginMode;
|
|
21
|
+
deleteAccountIndex?: number;
|
|
22
|
+
refreshAccountIndex?: number;
|
|
23
|
+
toggleAccountIndex?: number;
|
|
24
|
+
verifyAccountIndex?: number;
|
|
25
|
+
verifyAll?: boolean;
|
|
26
|
+
deleteAll?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export declare function promptLoginMode(existingAccounts: ExistingAccountInfo[]): Promise<LoginMenuResult>;
|
|
29
|
+
export { isTTY } from "./ui/auth-menu";
|
|
30
|
+
export type { AccountStatus } from "./ui/auth-menu";
|
|
31
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/plugin/cli.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAC;AAGxB,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAQvD;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,SAA0C,GAChD,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAsB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASpF;AAED,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,CAAC;AAElG,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAuCD,wBAAsB,eAAe,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAoEvG;AAED,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { createInterface } from "node:readline/promises";
|
|
2
|
+
import { stdin as input, stdout as output } from "node:process";
|
|
3
|
+
import { showAuthMenu, showAccountDetails, isTTY, } from "./ui/auth-menu.js";
|
|
4
|
+
import { updateOpencodeConfig } from "./config/updater.js";
|
|
5
|
+
export async function promptProjectId() {
|
|
6
|
+
const rl = createInterface({ input, output });
|
|
7
|
+
try {
|
|
8
|
+
const answer = await rl.question("Project ID (leave blank to use your default project): ");
|
|
9
|
+
return answer.trim();
|
|
10
|
+
}
|
|
11
|
+
finally {
|
|
12
|
+
rl.close();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Pause the menu loop so the user can read output that was just printed
|
|
17
|
+
* before the next menu render clears the screen. No-op when stdin is not a TTY.
|
|
18
|
+
*/
|
|
19
|
+
export async function pressEnterToContinue(message = "Press Enter to return to the menu... ") {
|
|
20
|
+
if (!input.isTTY)
|
|
21
|
+
return;
|
|
22
|
+
const rl = createInterface({ input, output });
|
|
23
|
+
try {
|
|
24
|
+
await rl.question(message);
|
|
25
|
+
}
|
|
26
|
+
finally {
|
|
27
|
+
rl.close();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export async function promptAddAnotherAccount(currentCount) {
|
|
31
|
+
const rl = createInterface({ input, output });
|
|
32
|
+
try {
|
|
33
|
+
const answer = await rl.question(`Add another account? (${currentCount} added) (y/n): `);
|
|
34
|
+
const normalized = answer.trim().toLowerCase();
|
|
35
|
+
return normalized === "y" || normalized === "yes";
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
rl.close();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async function promptLoginModeFallback(existingAccounts) {
|
|
42
|
+
const rl = createInterface({ input, output });
|
|
43
|
+
try {
|
|
44
|
+
console.log(`\n${existingAccounts.length} account(s) saved:`);
|
|
45
|
+
for (const acc of existingAccounts) {
|
|
46
|
+
const label = acc.email || `Account ${acc.index + 1}`;
|
|
47
|
+
console.log(` ${acc.index + 1}. ${label}`);
|
|
48
|
+
}
|
|
49
|
+
console.log("");
|
|
50
|
+
while (true) {
|
|
51
|
+
const answer = await rl.question("(a)dd new, (f)resh start, (c)heck quotas, (v)erify account, (va) verify all? [a/f/c/v/va]: ");
|
|
52
|
+
const normalized = answer.trim().toLowerCase();
|
|
53
|
+
if (normalized === "a" || normalized === "add") {
|
|
54
|
+
return { mode: "add" };
|
|
55
|
+
}
|
|
56
|
+
if (normalized === "f" || normalized === "fresh") {
|
|
57
|
+
return { mode: "fresh" };
|
|
58
|
+
}
|
|
59
|
+
if (normalized === "c" || normalized === "check") {
|
|
60
|
+
return { mode: "check" };
|
|
61
|
+
}
|
|
62
|
+
if (normalized === "v" || normalized === "verify") {
|
|
63
|
+
return { mode: "verify" };
|
|
64
|
+
}
|
|
65
|
+
if (normalized === "va" || normalized === "verify-all" || normalized === "all") {
|
|
66
|
+
return { mode: "verify-all", verifyAll: true };
|
|
67
|
+
}
|
|
68
|
+
console.log("Please enter 'a', 'f', 'c', 'v', or 'va'.");
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
rl.close();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export async function promptLoginMode(existingAccounts) {
|
|
76
|
+
if (!isTTY()) {
|
|
77
|
+
return promptLoginModeFallback(existingAccounts);
|
|
78
|
+
}
|
|
79
|
+
const accounts = existingAccounts.map(acc => ({
|
|
80
|
+
email: acc.email,
|
|
81
|
+
index: acc.index,
|
|
82
|
+
addedAt: acc.addedAt,
|
|
83
|
+
lastUsed: acc.lastUsed,
|
|
84
|
+
status: acc.status,
|
|
85
|
+
isCurrentAccount: acc.isCurrentAccount,
|
|
86
|
+
enabled: acc.enabled,
|
|
87
|
+
}));
|
|
88
|
+
console.log("");
|
|
89
|
+
while (true) {
|
|
90
|
+
const action = await showAuthMenu(accounts);
|
|
91
|
+
switch (action.type) {
|
|
92
|
+
case "add":
|
|
93
|
+
return { mode: "add" };
|
|
94
|
+
case "check":
|
|
95
|
+
return { mode: "check" };
|
|
96
|
+
case "verify":
|
|
97
|
+
return { mode: "verify" };
|
|
98
|
+
case "verify-all":
|
|
99
|
+
return { mode: "verify-all", verifyAll: true };
|
|
100
|
+
case "select-account": {
|
|
101
|
+
const accountAction = await showAccountDetails(action.account);
|
|
102
|
+
if (accountAction === "delete") {
|
|
103
|
+
return { mode: "add", deleteAccountIndex: action.account.index };
|
|
104
|
+
}
|
|
105
|
+
if (accountAction === "refresh") {
|
|
106
|
+
return { mode: "add", refreshAccountIndex: action.account.index };
|
|
107
|
+
}
|
|
108
|
+
if (accountAction === "toggle") {
|
|
109
|
+
return { mode: "manage", toggleAccountIndex: action.account.index };
|
|
110
|
+
}
|
|
111
|
+
if (accountAction === "verify") {
|
|
112
|
+
return { mode: "verify", verifyAccountIndex: action.account.index };
|
|
113
|
+
}
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
case "delete-all":
|
|
117
|
+
return { mode: "fresh", deleteAll: true };
|
|
118
|
+
case "configure-models": {
|
|
119
|
+
const result = await updateOpencodeConfig();
|
|
120
|
+
if (result.success) {
|
|
121
|
+
console.log(`\n✓ Models configured in ${result.configPath}\n`);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
console.log(`\n✗ Failed to configure models: ${result.error}\n`);
|
|
125
|
+
}
|
|
126
|
+
await pressEnterToContinue();
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
case "cancel":
|
|
130
|
+
return { mode: "cancel" };
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
export { isTTY } from "./ui/auth-menu.js";
|
|
135
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/plugin/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration module for opencode-antigravity-auth plugin.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```typescript
|
|
6
|
+
* import { loadConfig, type AntigravityConfig } from "./config";
|
|
7
|
+
*
|
|
8
|
+
* const config = loadConfig(directory);
|
|
9
|
+
* if (config.session_recovery) {
|
|
10
|
+
* // Enable session recovery
|
|
11
|
+
* }
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export { AntigravityConfigSchema, SignatureCacheConfigSchema, DEFAULT_CONFIG, type AntigravityConfig, type SignatureCacheConfig, } from "./schema";
|
|
15
|
+
export { loadConfig, getUserConfigPath, getProjectConfigPath, getDefaultLogsDir, configExists, initRuntimeConfig, getKeepThinking, } from "./loader";
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugin/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,eAAe,GAChB,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration module for opencode-antigravity-auth plugin.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```typescript
|
|
6
|
+
* import { loadConfig, type AntigravityConfig } from "./config.js";
|
|
7
|
+
*
|
|
8
|
+
* const config = loadConfig(directory);
|
|
9
|
+
* if (config.session_recovery) {
|
|
10
|
+
* // Enable session recovery
|
|
11
|
+
* }
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export { AntigravityConfigSchema, SignatureCacheConfigSchema, DEFAULT_CONFIG, } from "./schema.js";
|
|
15
|
+
export { loadConfig, getUserConfigPath, getProjectConfigPath, getDefaultLogsDir, configExists, initRuntimeConfig, getKeepThinking, } from "./loader.js";
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugin/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,cAAc,GAGf,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,eAAe,GAChB,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration loader for opencode-antigravity-auth plugin.
|
|
3
|
+
*
|
|
4
|
+
* Loads config from files.
|
|
5
|
+
* Priority (lowest to highest):
|
|
6
|
+
* 1. Schema defaults
|
|
7
|
+
* 2. User config file
|
|
8
|
+
* 3. Project config file
|
|
9
|
+
*/
|
|
10
|
+
import { type AntigravityConfig } from "./schema";
|
|
11
|
+
/**
|
|
12
|
+
* Get the user-level config file path.
|
|
13
|
+
*/
|
|
14
|
+
export declare function getUserConfigPath(): string;
|
|
15
|
+
/**
|
|
16
|
+
* Get the project-level config file path.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getProjectConfigPath(directory: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Load the complete configuration.
|
|
21
|
+
*
|
|
22
|
+
* @param directory - The project directory (for project-level config)
|
|
23
|
+
* @returns Fully resolved configuration
|
|
24
|
+
*/
|
|
25
|
+
export declare function loadConfig(directory: string): AntigravityConfig;
|
|
26
|
+
/**
|
|
27
|
+
* Check if a config file exists at the given path.
|
|
28
|
+
*/
|
|
29
|
+
export declare function configExists(path: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Get the default logs directory.
|
|
32
|
+
*/
|
|
33
|
+
export declare function getDefaultLogsDir(): string;
|
|
34
|
+
export declare function initRuntimeConfig(config: AntigravityConfig): void;
|
|
35
|
+
export declare function getKeepThinking(): boolean;
|
|
36
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../src/plugin/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAA2C,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAyB3F;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9D;AAgED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,CAmB/D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAID,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAEjE;AAED,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration loader for opencode-antigravity-auth plugin.
|
|
3
|
+
*
|
|
4
|
+
* Loads config from files.
|
|
5
|
+
* Priority (lowest to highest):
|
|
6
|
+
* 1. Schema defaults
|
|
7
|
+
* 2. User config file
|
|
8
|
+
* 3. Project config file
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
import { homedir } from "node:os";
|
|
13
|
+
import { AntigravityConfigSchema, DEFAULT_CONFIG } from "./schema.js";
|
|
14
|
+
import { createLogger } from "../logger.js";
|
|
15
|
+
const log = createLogger("config");
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// Path Utilities
|
|
18
|
+
// =============================================================================
|
|
19
|
+
/**
|
|
20
|
+
* Get the config directory path, with the following precedence:
|
|
21
|
+
* 1. OPENCODE_CONFIG_DIR env var (if set)
|
|
22
|
+
* 2. ~/.config/opencode (all platforms, including Windows)
|
|
23
|
+
*/
|
|
24
|
+
function getConfigDir() {
|
|
25
|
+
// 1. Check for explicit override via env var
|
|
26
|
+
if (process.env.OPENCODE_CONFIG_DIR) {
|
|
27
|
+
return process.env.OPENCODE_CONFIG_DIR;
|
|
28
|
+
}
|
|
29
|
+
// 2. Use ~/.config/opencode on all platforms (including Windows)
|
|
30
|
+
const xdgConfig = process.env.XDG_CONFIG_HOME || join(homedir(), ".config");
|
|
31
|
+
return join(xdgConfig, "opencode");
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get the user-level config file path.
|
|
35
|
+
*/
|
|
36
|
+
export function getUserConfigPath() {
|
|
37
|
+
return join(getConfigDir(), "antigravity.json");
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get the project-level config file path.
|
|
41
|
+
*/
|
|
42
|
+
export function getProjectConfigPath(directory) {
|
|
43
|
+
return join(directory, ".opencode", "antigravity.json");
|
|
44
|
+
}
|
|
45
|
+
// =============================================================================
|
|
46
|
+
// Config Loading
|
|
47
|
+
// =============================================================================
|
|
48
|
+
/**
|
|
49
|
+
* Load and parse a config file, returning null if not found or invalid.
|
|
50
|
+
*/
|
|
51
|
+
function loadConfigFile(path) {
|
|
52
|
+
try {
|
|
53
|
+
if (!existsSync(path)) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
const content = readFileSync(path, "utf-8");
|
|
57
|
+
const rawConfig = JSON.parse(content);
|
|
58
|
+
// Validate with Zod (partial - we'll merge with defaults later)
|
|
59
|
+
const result = AntigravityConfigSchema.partial().safeParse(rawConfig);
|
|
60
|
+
if (!result.success) {
|
|
61
|
+
log.warn("Config validation error", {
|
|
62
|
+
path,
|
|
63
|
+
issues: result.error.issues.map(i => `${i.path.join(".")}: ${i.message}`).join(", "),
|
|
64
|
+
});
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
return result.data;
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
if (error instanceof SyntaxError) {
|
|
71
|
+
log.warn("Invalid JSON in config file", { path, error: error.message });
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
log.warn("Failed to load config file", { path, error: String(error) });
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Deep merge two config objects, with override taking precedence.
|
|
81
|
+
*/
|
|
82
|
+
function mergeConfigs(base, override) {
|
|
83
|
+
return {
|
|
84
|
+
...base,
|
|
85
|
+
...override,
|
|
86
|
+
// Deep merge signature_cache if both exist
|
|
87
|
+
signature_cache: override.signature_cache
|
|
88
|
+
? {
|
|
89
|
+
...base.signature_cache,
|
|
90
|
+
...override.signature_cache,
|
|
91
|
+
}
|
|
92
|
+
: base.signature_cache,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
// =============================================================================
|
|
96
|
+
// Main Loader
|
|
97
|
+
// =============================================================================
|
|
98
|
+
/**
|
|
99
|
+
* Load the complete configuration.
|
|
100
|
+
*
|
|
101
|
+
* @param directory - The project directory (for project-level config)
|
|
102
|
+
* @returns Fully resolved configuration
|
|
103
|
+
*/
|
|
104
|
+
export function loadConfig(directory) {
|
|
105
|
+
// Start with defaults
|
|
106
|
+
let config = { ...DEFAULT_CONFIG };
|
|
107
|
+
// Load user config file (if exists)
|
|
108
|
+
const userConfigPath = getUserConfigPath();
|
|
109
|
+
const userConfig = loadConfigFile(userConfigPath);
|
|
110
|
+
if (userConfig) {
|
|
111
|
+
config = mergeConfigs(config, userConfig);
|
|
112
|
+
}
|
|
113
|
+
// Load project config file (if exists) - overrides user config
|
|
114
|
+
const projectConfigPath = getProjectConfigPath(directory);
|
|
115
|
+
const projectConfig = loadConfigFile(projectConfigPath);
|
|
116
|
+
if (projectConfig) {
|
|
117
|
+
config = mergeConfigs(config, projectConfig);
|
|
118
|
+
}
|
|
119
|
+
return config;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Check if a config file exists at the given path.
|
|
123
|
+
*/
|
|
124
|
+
export function configExists(path) {
|
|
125
|
+
return existsSync(path);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get the default logs directory.
|
|
129
|
+
*/
|
|
130
|
+
export function getDefaultLogsDir() {
|
|
131
|
+
return join(getConfigDir(), "antigravity-logs");
|
|
132
|
+
}
|
|
133
|
+
let runtimeConfig = null;
|
|
134
|
+
export function initRuntimeConfig(config) {
|
|
135
|
+
runtimeConfig = config;
|
|
136
|
+
}
|
|
137
|
+
export function getKeepThinking() {
|
|
138
|
+
return runtimeConfig?.keep_thinking ?? false;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../src/plugin/config/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ProviderModel } from "../types";
|
|
2
|
+
export type ModelThinkingLevel = "minimal" | "low" | "medium" | "high";
|
|
3
|
+
export interface ModelThinkingConfig {
|
|
4
|
+
thinkingBudget: number;
|
|
5
|
+
}
|
|
6
|
+
export interface ModelVariant {
|
|
7
|
+
thinkingLevel?: ModelThinkingLevel;
|
|
8
|
+
thinkingConfig?: ModelThinkingConfig;
|
|
9
|
+
}
|
|
10
|
+
export interface ModelLimit {
|
|
11
|
+
context: number;
|
|
12
|
+
output: number;
|
|
13
|
+
}
|
|
14
|
+
export type ModelModality = "text" | "image" | "pdf";
|
|
15
|
+
export interface ModelModalities {
|
|
16
|
+
input: ModelModality[];
|
|
17
|
+
output: ModelModality[];
|
|
18
|
+
}
|
|
19
|
+
export interface OpencodeModelDefinition extends ProviderModel {
|
|
20
|
+
name: string;
|
|
21
|
+
limit: ModelLimit;
|
|
22
|
+
modalities: ModelModalities;
|
|
23
|
+
variants?: Record<string, ModelVariant>;
|
|
24
|
+
}
|
|
25
|
+
export type OpencodeModelDefinitions = Record<string, OpencodeModelDefinition>;
|
|
26
|
+
export interface GeminiApiModel {
|
|
27
|
+
name?: string;
|
|
28
|
+
baseModelId?: string;
|
|
29
|
+
displayName?: string;
|
|
30
|
+
inputTokenLimit?: number;
|
|
31
|
+
outputTokenLimit?: number;
|
|
32
|
+
supportedGenerationMethods?: string[];
|
|
33
|
+
}
|
|
34
|
+
export interface AntigravityAvailableModel {
|
|
35
|
+
displayName?: string;
|
|
36
|
+
modelName?: string;
|
|
37
|
+
}
|
|
38
|
+
export type AntigravityAvailableModels = Record<string, AntigravityAvailableModel>;
|
|
39
|
+
export declare const OPENCODE_MODEL_DEFINITIONS: OpencodeModelDefinitions;
|
|
40
|
+
export declare function modelsFromGeminiApi(models: GeminiApiModel[]): OpencodeModelDefinitions;
|
|
41
|
+
export declare function modelsFromAntigravityAvailableModels(models: AntigravityAvailableModels): OpencodeModelDefinitions;
|
|
42
|
+
export declare function mergeModelDefinitions(...definitions: Record<string, ProviderModel>[]): Record<string, ProviderModel>;
|
|
43
|
+
//# sourceMappingURL=models.d.ts.map
|