opencode-antigravity-auth-mf 11.3.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 +630 -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 +168 -0
- package/dist/src/antigravity/oauth.js.map +1 -0
- package/dist/src/constants.d.ts +99 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +135 -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 +237 -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 +125 -0
- package/dist/src/hooks/auto-update-checker/index.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 +86 -0
- package/dist/src/plugin/accounts.d.ts.map +1 -0
- package/dist/src/plugin/accounts.js +609 -0
- package/dist/src/plugin/accounts.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 +19 -0
- package/dist/src/plugin/cli.d.ts.map +1 -0
- package/dist/src/plugin/cli.js +59 -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 +37 -0
- package/dist/src/plugin/config/loader.d.ts.map +1 -0
- package/dist/src/plugin/config/loader.js +206 -0
- package/dist/src/plugin/config/loader.js.map +1 -0
- package/dist/src/plugin/config/schema.d.ts +411 -0
- package/dist/src/plugin/config/schema.d.ts.map +1 -0
- package/dist/src/plugin/config/schema.js +339 -0
- package/dist/src/plugin/config/schema.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 +255 -0
- package/dist/src/plugin/core/streaming/transformer.js.map +1 -0
- package/dist/src/plugin/core/streaming/types.d.ts +35 -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 +68 -0
- package/dist/src/plugin/debug.d.ts.map +1 -0
- package/dist/src/plugin/debug.js +325 -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/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 +54 -0
- package/dist/src/plugin/logger.d.ts.map +1 -0
- package/dist/src/plugin/logger.js +120 -0
- package/dist/src/plugin/logger.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/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 +376 -0
- package/dist/src/plugin/recovery.js.map +1 -0
- package/dist/src/plugin/refresh-queue.d.ts +101 -0
- package/dist/src/plugin/refresh-queue.d.ts.map +1 -0
- package/dist/src/plugin/refresh-queue.js +244 -0
- package/dist/src/plugin/refresh-queue.js.map +1 -0
- package/dist/src/plugin/request-helpers.d.ts +278 -0
- package/dist/src/plugin/request-helpers.d.ts.map +1 -0
- package/dist/src/plugin/request-helpers.js +2268 -0
- package/dist/src/plugin/request-helpers.js.map +1 -0
- package/dist/src/plugin/request.d.ts +91 -0
- package/dist/src/plugin/request.d.ts.map +1 -0
- package/dist/src/plugin/request.js +1302 -0
- package/dist/src/plugin/request.js.map +1 -0
- package/dist/src/plugin/rotation.d.ts +168 -0
- package/dist/src/plugin/rotation.d.ts.map +1 -0
- package/dist/src/plugin/rotation.js +302 -0
- package/dist/src/plugin/rotation.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 +92 -0
- package/dist/src/plugin/storage.d.ts.map +1 -0
- package/dist/src/plugin/storage.js +417 -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 +112 -0
- package/dist/src/plugin/transform/gemini.d.ts.map +1 -0
- package/dist/src/plugin/transform/gemini.js +409 -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 +101 -0
- package/dist/src/plugin/transform/model-resolver.d.ts.map +1 -0
- package/dist/src/plugin/transform/model-resolver.js +356 -0
- package/dist/src/plugin/transform/model-resolver.js.map +1 -0
- package/dist/src/plugin/transform/types.d.ts +106 -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 +96 -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/usage-reporter.d.ts +23 -0
- package/dist/src/plugin/usage-reporter.d.ts.map +1 -0
- package/dist/src/plugin/usage-reporter.js +43 -0
- package/dist/src/plugin/usage-reporter.js.map +1 -0
- package/dist/src/plugin.d.ts +8 -0
- package/dist/src/plugin.d.ts.map +1 -0
- package/dist/src/plugin.js +1708 -0
- package/dist/src/plugin.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface SignedThinking {
|
|
2
|
+
text: string;
|
|
3
|
+
signature: string;
|
|
4
|
+
}
|
|
5
|
+
export interface SignatureStore {
|
|
6
|
+
get(sessionKey: string): SignedThinking | undefined;
|
|
7
|
+
set(sessionKey: string, value: SignedThinking): void;
|
|
8
|
+
has(sessionKey: string): boolean;
|
|
9
|
+
delete(sessionKey: string): void;
|
|
10
|
+
}
|
|
11
|
+
export interface UsageMetadata {
|
|
12
|
+
totalTokenCount?: number;
|
|
13
|
+
promptTokenCount?: number;
|
|
14
|
+
candidatesTokenCount?: number;
|
|
15
|
+
cachedContentTokenCount?: number;
|
|
16
|
+
thoughtsTokenCount?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface StreamingCallbacks {
|
|
19
|
+
onCacheSignature?: (sessionKey: string, text: string, signature: string) => void;
|
|
20
|
+
onInjectDebug?: (response: unknown, debugText: string) => unknown;
|
|
21
|
+
transformThinkingParts?: (parts: unknown) => unknown;
|
|
22
|
+
onUsage?: (usage: UsageMetadata) => void;
|
|
23
|
+
}
|
|
24
|
+
export interface StreamingOptions {
|
|
25
|
+
signatureSessionKey?: string;
|
|
26
|
+
debugText?: string;
|
|
27
|
+
cacheSignatures?: boolean;
|
|
28
|
+
displayedThinkingHashes?: Set<string>;
|
|
29
|
+
}
|
|
30
|
+
export interface ThoughtBuffer {
|
|
31
|
+
get(index: number): string | undefined;
|
|
32
|
+
set(index: number, text: string): void;
|
|
33
|
+
clear(): void;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/plugin/core/streaming/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IACpD,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IACrD,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACjF,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAClE,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IACrD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,gBAAgB;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACvC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,KAAK,IAAI,IAAI,CAAC;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/plugin/core/streaming/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { AntigravityConfig } from "./config";
|
|
2
|
+
export declare const DEBUG_MESSAGE_PREFIX = "[opencode-antigravity-auth debug]";
|
|
3
|
+
/**
|
|
4
|
+
* Initialize or reinitialize debug state with the given config.
|
|
5
|
+
* Call this once at plugin startup after loading config.
|
|
6
|
+
*/
|
|
7
|
+
export declare function initializeDebug(config: AntigravityConfig): void;
|
|
8
|
+
export declare function isDebugEnabled(): boolean;
|
|
9
|
+
export declare function isVerboseEnabled(): boolean;
|
|
10
|
+
export declare function getLogFilePath(): string | undefined;
|
|
11
|
+
export interface AntigravityDebugContext {
|
|
12
|
+
id: string;
|
|
13
|
+
streaming: boolean;
|
|
14
|
+
startedAt: number;
|
|
15
|
+
}
|
|
16
|
+
interface AntigravityDebugRequestMeta {
|
|
17
|
+
originalUrl: string;
|
|
18
|
+
resolvedUrl: string;
|
|
19
|
+
method?: string;
|
|
20
|
+
headers?: HeadersInit;
|
|
21
|
+
body?: BodyInit | null;
|
|
22
|
+
streaming: boolean;
|
|
23
|
+
projectId?: string;
|
|
24
|
+
}
|
|
25
|
+
interface AntigravityDebugResponseMeta {
|
|
26
|
+
body?: string;
|
|
27
|
+
note?: string;
|
|
28
|
+
error?: unknown;
|
|
29
|
+
headersOverride?: HeadersInit;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Begins a debug trace for an Antigravity request.
|
|
33
|
+
*/
|
|
34
|
+
export declare function startAntigravityDebugRequest(meta: AntigravityDebugRequestMeta): AntigravityDebugContext | null;
|
|
35
|
+
/**
|
|
36
|
+
* Logs response details for a previously started debug trace.
|
|
37
|
+
*/
|
|
38
|
+
export declare function logAntigravityDebugResponse(context: AntigravityDebugContext | null | undefined, response: Response, meta?: AntigravityDebugResponseMeta): void;
|
|
39
|
+
export interface AccountDebugInfo {
|
|
40
|
+
index: number;
|
|
41
|
+
email?: string;
|
|
42
|
+
family: string;
|
|
43
|
+
totalAccounts: number;
|
|
44
|
+
rateLimitState?: {
|
|
45
|
+
claude?: number;
|
|
46
|
+
gemini?: number;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export declare function logAccountContext(label: string, info: AccountDebugInfo): void;
|
|
50
|
+
export declare function logRateLimitEvent(accountIndex: number, email: string | undefined, family: string, status: number, retryAfterMs: number, bodyInfo: {
|
|
51
|
+
message?: string;
|
|
52
|
+
quotaResetTime?: string;
|
|
53
|
+
retryDelayMs?: number | null;
|
|
54
|
+
reason?: string;
|
|
55
|
+
}): void;
|
|
56
|
+
export declare function logRateLimitSnapshot(family: string, accounts: Array<{
|
|
57
|
+
index: number;
|
|
58
|
+
email?: string;
|
|
59
|
+
rateLimitResetTimes?: {
|
|
60
|
+
claude?: number;
|
|
61
|
+
gemini?: number;
|
|
62
|
+
};
|
|
63
|
+
}>): void;
|
|
64
|
+
export declare function logResponseBody(context: AntigravityDebugContext | null | undefined, response: Response, status: number): Promise<string | undefined>;
|
|
65
|
+
export declare function logModelFamily(url: string, extractedModel: string | null, family: string): void;
|
|
66
|
+
export declare function debugLogToFile(message: string): void;
|
|
67
|
+
export {};
|
|
68
|
+
//# sourceMappingURL=debug.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../src/plugin/debug.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
import { createWriteStream, mkdirSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { env } from "node:process";
|
|
5
|
+
import { ensureGitignoreSync } from "./storage";
|
|
6
|
+
const MAX_BODY_PREVIEW_CHARS = 12000;
|
|
7
|
+
const MAX_BODY_VERBOSE_CHARS = 50000;
|
|
8
|
+
export const DEBUG_MESSAGE_PREFIX = "[opencode-antigravity-auth debug]";
|
|
9
|
+
let debugState = null;
|
|
10
|
+
/**
|
|
11
|
+
* Parse debug level from a flag string.
|
|
12
|
+
* 0 = off, 1 = basic, 2 = verbose (full bodies)
|
|
13
|
+
*/
|
|
14
|
+
function parseDebugLevel(flag) {
|
|
15
|
+
const trimmed = flag.trim();
|
|
16
|
+
if (trimmed === "2" || trimmed === "verbose")
|
|
17
|
+
return 2;
|
|
18
|
+
if (trimmed === "1" || trimmed === "true")
|
|
19
|
+
return 1;
|
|
20
|
+
return 0;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get the OS-specific config directory.
|
|
24
|
+
*/
|
|
25
|
+
function getConfigDir() {
|
|
26
|
+
const platform = process.platform;
|
|
27
|
+
if (platform === "win32") {
|
|
28
|
+
return join(env.APPDATA || join(homedir(), "AppData", "Roaming"), "opencode");
|
|
29
|
+
}
|
|
30
|
+
const xdgConfig = env.XDG_CONFIG_HOME || join(homedir(), ".config");
|
|
31
|
+
return join(xdgConfig, "opencode");
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Returns the logs directory, creating it if needed.
|
|
35
|
+
*/
|
|
36
|
+
function getLogsDir(customLogDir) {
|
|
37
|
+
const logsDir = customLogDir || join(getConfigDir(), "antigravity-logs");
|
|
38
|
+
try {
|
|
39
|
+
mkdirSync(logsDir, { recursive: true });
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Directory may already exist or we don't have permission
|
|
43
|
+
}
|
|
44
|
+
return logsDir;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Builds a timestamped log file path.
|
|
48
|
+
*/
|
|
49
|
+
function createLogFilePath(customLogDir) {
|
|
50
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
51
|
+
return join(getLogsDir(customLogDir), `antigravity-debug-${timestamp}.log`);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Creates a log writer function that writes to a file.
|
|
55
|
+
*/
|
|
56
|
+
function createLogWriter(filePath) {
|
|
57
|
+
if (!filePath) {
|
|
58
|
+
return () => { };
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
const stream = createWriteStream(filePath, { flags: "a" });
|
|
62
|
+
stream.on("error", () => { });
|
|
63
|
+
return (line) => {
|
|
64
|
+
const timestamp = new Date().toISOString();
|
|
65
|
+
const formatted = `[${timestamp}] ${line}`;
|
|
66
|
+
stream.write(`${formatted}\n`);
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return () => { };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Initialize or reinitialize debug state with the given config.
|
|
75
|
+
* Call this once at plugin startup after loading config.
|
|
76
|
+
*/
|
|
77
|
+
export function initializeDebug(config) {
|
|
78
|
+
// Config takes precedence, but env var can force enable for debugging
|
|
79
|
+
const envDebugFlag = env.OPENCODE_ANTIGRAVITY_DEBUG ?? "";
|
|
80
|
+
const debugLevel = config.debug ? (envDebugFlag === "2" || envDebugFlag === "verbose" ? 2 : 1) : parseDebugLevel(envDebugFlag);
|
|
81
|
+
const debugEnabled = debugLevel >= 1;
|
|
82
|
+
const verboseEnabled = debugLevel >= 2;
|
|
83
|
+
const logFilePath = debugEnabled ? createLogFilePath(config.log_dir) : undefined;
|
|
84
|
+
const logWriter = createLogWriter(logFilePath);
|
|
85
|
+
if (debugEnabled) {
|
|
86
|
+
ensureGitignoreSync(getConfigDir());
|
|
87
|
+
}
|
|
88
|
+
debugState = {
|
|
89
|
+
debugLevel,
|
|
90
|
+
debugEnabled,
|
|
91
|
+
verboseEnabled,
|
|
92
|
+
logFilePath,
|
|
93
|
+
logWriter,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get the current debug state, initializing with defaults if needed.
|
|
98
|
+
* This allows the module to work even before initializeDebug is called.
|
|
99
|
+
*/
|
|
100
|
+
function getDebugState() {
|
|
101
|
+
if (!debugState) {
|
|
102
|
+
// Fallback to env-based initialization for backward compatibility
|
|
103
|
+
const envDebugFlag = env.OPENCODE_ANTIGRAVITY_DEBUG ?? "";
|
|
104
|
+
const debugLevel = parseDebugLevel(envDebugFlag);
|
|
105
|
+
const debugEnabled = debugLevel >= 1;
|
|
106
|
+
const verboseEnabled = debugLevel >= 2;
|
|
107
|
+
const logFilePath = debugEnabled ? createLogFilePath() : undefined;
|
|
108
|
+
const logWriter = createLogWriter(logFilePath);
|
|
109
|
+
debugState = {
|
|
110
|
+
debugLevel,
|
|
111
|
+
debugEnabled,
|
|
112
|
+
verboseEnabled,
|
|
113
|
+
logFilePath,
|
|
114
|
+
logWriter,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
return debugState;
|
|
118
|
+
}
|
|
119
|
+
// =============================================================================
|
|
120
|
+
// Public API
|
|
121
|
+
// =============================================================================
|
|
122
|
+
export function isDebugEnabled() {
|
|
123
|
+
return getDebugState().debugEnabled;
|
|
124
|
+
}
|
|
125
|
+
export function isVerboseEnabled() {
|
|
126
|
+
return getDebugState().verboseEnabled;
|
|
127
|
+
}
|
|
128
|
+
export function getLogFilePath() {
|
|
129
|
+
return getDebugState().logFilePath;
|
|
130
|
+
}
|
|
131
|
+
let requestCounter = 0;
|
|
132
|
+
/**
|
|
133
|
+
* Begins a debug trace for an Antigravity request.
|
|
134
|
+
*/
|
|
135
|
+
export function startAntigravityDebugRequest(meta) {
|
|
136
|
+
const state = getDebugState();
|
|
137
|
+
if (!state.debugEnabled) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
const id = `ANTIGRAVITY-${++requestCounter}`;
|
|
141
|
+
const method = meta.method ?? "GET";
|
|
142
|
+
logDebug(`[Antigravity Debug ${id}] ${method} ${meta.resolvedUrl}`);
|
|
143
|
+
if (meta.originalUrl && meta.originalUrl !== meta.resolvedUrl) {
|
|
144
|
+
logDebug(`[Antigravity Debug ${id}] Original URL: ${meta.originalUrl}`);
|
|
145
|
+
}
|
|
146
|
+
if (meta.projectId) {
|
|
147
|
+
logDebug(`[Antigravity Debug ${id}] Project: ${meta.projectId}`);
|
|
148
|
+
}
|
|
149
|
+
logDebug(`[Antigravity Debug ${id}] Streaming: ${meta.streaming ? "yes" : "no"}`);
|
|
150
|
+
logDebug(`[Antigravity Debug ${id}] Headers: ${JSON.stringify(maskHeaders(meta.headers))}`);
|
|
151
|
+
const bodyPreview = formatBodyPreview(meta.body);
|
|
152
|
+
if (bodyPreview) {
|
|
153
|
+
logDebug(`[Antigravity Debug ${id}] Body Preview: ${bodyPreview}`);
|
|
154
|
+
}
|
|
155
|
+
return { id, streaming: meta.streaming, startedAt: Date.now() };
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Logs response details for a previously started debug trace.
|
|
159
|
+
*/
|
|
160
|
+
export function logAntigravityDebugResponse(context, response, meta = {}) {
|
|
161
|
+
const state = getDebugState();
|
|
162
|
+
if (!state.debugEnabled || !context) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const durationMs = Date.now() - context.startedAt;
|
|
166
|
+
logDebug(`[Antigravity Debug ${context.id}] Response ${response.status} ${response.statusText} (${durationMs}ms)`);
|
|
167
|
+
logDebug(`[Antigravity Debug ${context.id}] Response Headers: ${JSON.stringify(maskHeaders(meta.headersOverride ?? response.headers))}`);
|
|
168
|
+
if (meta.note) {
|
|
169
|
+
logDebug(`[Antigravity Debug ${context.id}] Note: ${meta.note}`);
|
|
170
|
+
}
|
|
171
|
+
if (meta.error) {
|
|
172
|
+
logDebug(`[Antigravity Debug ${context.id}] Error: ${formatError(meta.error)}`);
|
|
173
|
+
}
|
|
174
|
+
if (meta.body) {
|
|
175
|
+
logDebug(`[Antigravity Debug ${context.id}] Response Body Preview: ${truncateForLog(meta.body)}`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Obscures sensitive headers and returns a plain object for logging.
|
|
180
|
+
*/
|
|
181
|
+
function maskHeaders(headers) {
|
|
182
|
+
if (!headers) {
|
|
183
|
+
return {};
|
|
184
|
+
}
|
|
185
|
+
const result = {};
|
|
186
|
+
const parsed = headers instanceof Headers ? headers : new Headers(headers);
|
|
187
|
+
parsed.forEach((value, key) => {
|
|
188
|
+
if (key.toLowerCase() === "authorization") {
|
|
189
|
+
result[key] = "[redacted]";
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
result[key] = value;
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
return result;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Produces a short, type-aware preview of a request/response body for logs.
|
|
199
|
+
*/
|
|
200
|
+
function formatBodyPreview(body) {
|
|
201
|
+
if (body == null) {
|
|
202
|
+
return undefined;
|
|
203
|
+
}
|
|
204
|
+
if (typeof body === "string") {
|
|
205
|
+
return truncateForLog(body);
|
|
206
|
+
}
|
|
207
|
+
if (body instanceof URLSearchParams) {
|
|
208
|
+
return truncateForLog(body.toString());
|
|
209
|
+
}
|
|
210
|
+
if (typeof Blob !== "undefined" && body instanceof Blob) {
|
|
211
|
+
return `[Blob size=${body.size}]`;
|
|
212
|
+
}
|
|
213
|
+
if (typeof FormData !== "undefined" && body instanceof FormData) {
|
|
214
|
+
return "[FormData payload omitted]";
|
|
215
|
+
}
|
|
216
|
+
return `[${body.constructor?.name ?? typeof body} payload omitted]`;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Truncates long strings to a fixed preview length for logging.
|
|
220
|
+
*/
|
|
221
|
+
function truncateForLog(text) {
|
|
222
|
+
if (text.length <= MAX_BODY_PREVIEW_CHARS) {
|
|
223
|
+
return text;
|
|
224
|
+
}
|
|
225
|
+
return `${text.slice(0, MAX_BODY_PREVIEW_CHARS)}... (truncated ${text.length - MAX_BODY_PREVIEW_CHARS} chars)`;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Writes a single debug line using the configured writer.
|
|
229
|
+
*/
|
|
230
|
+
function logDebug(line) {
|
|
231
|
+
getDebugState().logWriter(line);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Converts unknown error-like values into printable strings.
|
|
235
|
+
*/
|
|
236
|
+
function formatError(error) {
|
|
237
|
+
if (error instanceof Error) {
|
|
238
|
+
return error.stack ?? error.message;
|
|
239
|
+
}
|
|
240
|
+
try {
|
|
241
|
+
return JSON.stringify(error);
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
return String(error);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
export function logAccountContext(label, info) {
|
|
248
|
+
if (!getDebugState().debugEnabled)
|
|
249
|
+
return;
|
|
250
|
+
const accountLabel = info.email
|
|
251
|
+
? info.email
|
|
252
|
+
: info.index >= 0
|
|
253
|
+
? `Account ${info.index + 1}`
|
|
254
|
+
: "All accounts";
|
|
255
|
+
const indexLabel = info.index >= 0 ? `${info.index + 1}/${info.totalAccounts}` : `-/${info.totalAccounts}`;
|
|
256
|
+
const rateLimitInfo = info.rateLimitState ? ` rateLimits=${JSON.stringify(info.rateLimitState)}` : "";
|
|
257
|
+
logDebug(`[Account] ${label}: ${accountLabel} (${indexLabel}) family=${info.family}${rateLimitInfo}`);
|
|
258
|
+
}
|
|
259
|
+
export function logRateLimitEvent(accountIndex, email, family, status, retryAfterMs, bodyInfo) {
|
|
260
|
+
if (!getDebugState().debugEnabled)
|
|
261
|
+
return;
|
|
262
|
+
const accountLabel = email || `Account ${accountIndex + 1}`;
|
|
263
|
+
logDebug(`[RateLimit] ${status} on ${accountLabel} family=${family} retryAfterMs=${retryAfterMs}`);
|
|
264
|
+
if (bodyInfo.message) {
|
|
265
|
+
logDebug(`[RateLimit] message: ${bodyInfo.message}`);
|
|
266
|
+
}
|
|
267
|
+
if (bodyInfo.quotaResetTime) {
|
|
268
|
+
logDebug(`[RateLimit] quotaResetTime: ${bodyInfo.quotaResetTime}`);
|
|
269
|
+
}
|
|
270
|
+
if (bodyInfo.retryDelayMs !== undefined && bodyInfo.retryDelayMs !== null) {
|
|
271
|
+
logDebug(`[RateLimit] body retryDelayMs: ${bodyInfo.retryDelayMs}`);
|
|
272
|
+
}
|
|
273
|
+
if (bodyInfo.reason) {
|
|
274
|
+
logDebug(`[RateLimit] reason: ${bodyInfo.reason}`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
export function logRateLimitSnapshot(family, accounts) {
|
|
278
|
+
if (!getDebugState().debugEnabled)
|
|
279
|
+
return;
|
|
280
|
+
const now = Date.now();
|
|
281
|
+
const entries = accounts.map((account) => {
|
|
282
|
+
const label = account.email ? account.email : `Account ${account.index + 1}`;
|
|
283
|
+
const reset = account.rateLimitResetTimes?.[family];
|
|
284
|
+
if (typeof reset !== "number") {
|
|
285
|
+
return `${label}=ready`;
|
|
286
|
+
}
|
|
287
|
+
const remaining = Math.max(0, reset - now);
|
|
288
|
+
const seconds = Math.ceil(remaining / 1000);
|
|
289
|
+
return `${label}=wait ${seconds}s`;
|
|
290
|
+
});
|
|
291
|
+
logDebug(`[RateLimit] snapshot family=${family} ${entries.join(" | ")}`);
|
|
292
|
+
}
|
|
293
|
+
export async function logResponseBody(context, response, status) {
|
|
294
|
+
const state = getDebugState();
|
|
295
|
+
if (!state.debugEnabled || !context)
|
|
296
|
+
return undefined;
|
|
297
|
+
const isError = status >= 400;
|
|
298
|
+
const shouldLogBody = state.verboseEnabled || isError;
|
|
299
|
+
if (!shouldLogBody)
|
|
300
|
+
return undefined;
|
|
301
|
+
try {
|
|
302
|
+
const text = await response.clone().text();
|
|
303
|
+
const maxChars = state.verboseEnabled ? MAX_BODY_VERBOSE_CHARS : MAX_BODY_PREVIEW_CHARS;
|
|
304
|
+
const preview = text.length <= maxChars
|
|
305
|
+
? text
|
|
306
|
+
: `${text.slice(0, maxChars)}... (truncated ${text.length - maxChars} chars)`;
|
|
307
|
+
logDebug(`[Antigravity Debug ${context.id}] Response Body (${status}): ${preview}`);
|
|
308
|
+
return text;
|
|
309
|
+
}
|
|
310
|
+
catch (e) {
|
|
311
|
+
logDebug(`[Antigravity Debug ${context.id}] Failed to read response body: ${formatError(e)}`);
|
|
312
|
+
return undefined;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
export function logModelFamily(url, extractedModel, family) {
|
|
316
|
+
if (!getDebugState().debugEnabled)
|
|
317
|
+
return;
|
|
318
|
+
logDebug(`[ModelFamily] url=${url} model=${extractedModel ?? "unknown"} family=${family}`);
|
|
319
|
+
}
|
|
320
|
+
export function debugLogToFile(message) {
|
|
321
|
+
if (!getDebugState().debugEnabled)
|
|
322
|
+
return;
|
|
323
|
+
logDebug(message);
|
|
324
|
+
}
|
|
325
|
+
//# sourceMappingURL=debug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../src/plugin/debug.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom error types for opencode-antigravity-auth plugin.
|
|
3
|
+
*
|
|
4
|
+
* Ported from LLM-API-Key-Proxy for robust error handling.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Error thrown when Antigravity returns an empty response after retry attempts.
|
|
8
|
+
*
|
|
9
|
+
* Empty responses can occur when:
|
|
10
|
+
* - The model has no candidates/choices
|
|
11
|
+
* - The response body is empty or malformed
|
|
12
|
+
* - A temporary service issue prevents generation
|
|
13
|
+
*/
|
|
14
|
+
export declare class EmptyResponseError extends Error {
|
|
15
|
+
readonly provider: string;
|
|
16
|
+
readonly model: string;
|
|
17
|
+
readonly attempts: number;
|
|
18
|
+
constructor(provider: string, model: string, attempts: number, message?: string);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Error thrown when tool ID matching fails and cannot be recovered.
|
|
22
|
+
*/
|
|
23
|
+
export declare class ToolIdMismatchError extends Error {
|
|
24
|
+
readonly expectedIds: string[];
|
|
25
|
+
readonly foundIds: string[];
|
|
26
|
+
constructor(expectedIds: string[], foundIds: string[], message?: string);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/plugin/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAGxB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM;CAYnB;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;gBAEhB,WAAW,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM;CASxE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom error types for opencode-antigravity-auth plugin.
|
|
3
|
+
*
|
|
4
|
+
* Ported from LLM-API-Key-Proxy for robust error handling.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Error thrown when Antigravity returns an empty response after retry attempts.
|
|
8
|
+
*
|
|
9
|
+
* Empty responses can occur when:
|
|
10
|
+
* - The model has no candidates/choices
|
|
11
|
+
* - The response body is empty or malformed
|
|
12
|
+
* - A temporary service issue prevents generation
|
|
13
|
+
*/
|
|
14
|
+
export class EmptyResponseError extends Error {
|
|
15
|
+
provider;
|
|
16
|
+
model;
|
|
17
|
+
attempts;
|
|
18
|
+
constructor(provider, model, attempts, message) {
|
|
19
|
+
super(message ??
|
|
20
|
+
`The model returned an empty response after ${attempts} attempts. ` +
|
|
21
|
+
`This may indicate a temporary service issue. Please try again.`);
|
|
22
|
+
this.name = "EmptyResponseError";
|
|
23
|
+
this.provider = provider;
|
|
24
|
+
this.model = model;
|
|
25
|
+
this.attempts = attempts;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Error thrown when tool ID matching fails and cannot be recovered.
|
|
30
|
+
*/
|
|
31
|
+
export class ToolIdMismatchError extends Error {
|
|
32
|
+
expectedIds;
|
|
33
|
+
foundIds;
|
|
34
|
+
constructor(expectedIds, foundIds, message) {
|
|
35
|
+
super(message ??
|
|
36
|
+
`Tool ID mismatch: expected [${expectedIds.join(", ")}] but found [${foundIds.join(", ")}]`);
|
|
37
|
+
this.name = "ToolIdMismatchError";
|
|
38
|
+
this.expectedIds = expectedIds;
|
|
39
|
+
this.foundIds = foundIds;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/plugin/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,QAAQ,CAAS;IACjB,KAAK,CAAS;IACd,QAAQ,CAAS;IAE1B,YACE,QAAgB,EAChB,KAAa,EACb,QAAgB,EAChB,OAAgB;QAEhB,KAAK,CACH,OAAO;YACL,8CAA8C,QAAQ,aAAa;gBACnE,gEAAgE,CACnE,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,WAAW,CAAW;IACtB,QAAQ,CAAW;IAE5B,YAAY,WAAqB,EAAE,QAAkB,EAAE,OAAgB;QACrE,KAAK,CACH,OAAO;YACL,+BAA+B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC9F,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image Saving Utility
|
|
3
|
+
*
|
|
4
|
+
* Handles saving generated images to disk and returning file paths.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Save base64 image data to disk and return the file path.
|
|
8
|
+
*
|
|
9
|
+
* @param base64Data - The base64-encoded image data
|
|
10
|
+
* @param mimeType - The MIME type of the image (e.g., "image/jpeg")
|
|
11
|
+
* @returns The absolute path to the saved image file
|
|
12
|
+
*/
|
|
13
|
+
export declare function saveImageToDisk(base64Data: string, mimeType: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Process inlineData and return either a file path or base64 data URL.
|
|
16
|
+
* Attempts to save to disk first, falls back to base64 if saving fails.
|
|
17
|
+
*
|
|
18
|
+
* @param inlineData - Object containing mimeType and base64 data
|
|
19
|
+
* @returns Markdown image string with either file path or data URL
|
|
20
|
+
*/
|
|
21
|
+
export declare function processImageData(inlineData: {
|
|
22
|
+
mimeType?: string;
|
|
23
|
+
data?: string;
|
|
24
|
+
}): string | null;
|
|
25
|
+
//# sourceMappingURL=image-saver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-saver.d.ts","sourceRoot":"","sources":["../../../src/plugin/image-saver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0CH;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgB5E;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAkBhG"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image Saving Utility
|
|
3
|
+
*
|
|
4
|
+
* Handles saving generated images to disk and returning file paths.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'fs';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import * as os from 'os';
|
|
9
|
+
/**
|
|
10
|
+
* Default directory for saving generated images.
|
|
11
|
+
* Uses ~/.opencode/generated-images/
|
|
12
|
+
*/
|
|
13
|
+
function getImageOutputDir() {
|
|
14
|
+
const homeDir = os.homedir();
|
|
15
|
+
const outputDir = path.join(homeDir, '.opencode', 'generated-images');
|
|
16
|
+
// Create directory if it doesn't exist
|
|
17
|
+
if (!fs.existsSync(outputDir)) {
|
|
18
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
19
|
+
}
|
|
20
|
+
return outputDir;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Generate a unique filename for the image.
|
|
24
|
+
*/
|
|
25
|
+
function generateImageFilename(mimeType) {
|
|
26
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
27
|
+
const random = Math.random().toString(36).substring(2, 8);
|
|
28
|
+
// Determine extension from mime type
|
|
29
|
+
let ext = 'png';
|
|
30
|
+
if (mimeType.includes('jpeg') || mimeType.includes('jpg')) {
|
|
31
|
+
ext = 'jpg';
|
|
32
|
+
}
|
|
33
|
+
else if (mimeType.includes('gif')) {
|
|
34
|
+
ext = 'gif';
|
|
35
|
+
}
|
|
36
|
+
else if (mimeType.includes('webp')) {
|
|
37
|
+
ext = 'webp';
|
|
38
|
+
}
|
|
39
|
+
return `image-${timestamp}-${random}.${ext}`;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Save base64 image data to disk and return the file path.
|
|
43
|
+
*
|
|
44
|
+
* @param base64Data - The base64-encoded image data
|
|
45
|
+
* @param mimeType - The MIME type of the image (e.g., "image/jpeg")
|
|
46
|
+
* @returns The absolute path to the saved image file
|
|
47
|
+
*/
|
|
48
|
+
export function saveImageToDisk(base64Data, mimeType) {
|
|
49
|
+
try {
|
|
50
|
+
const outputDir = getImageOutputDir();
|
|
51
|
+
const filename = generateImageFilename(mimeType);
|
|
52
|
+
const filePath = path.join(outputDir, filename);
|
|
53
|
+
// Decode base64 and write to file
|
|
54
|
+
const buffer = Buffer.from(base64Data, 'base64');
|
|
55
|
+
fs.writeFileSync(filePath, buffer);
|
|
56
|
+
return filePath;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
// If saving fails, return empty string (caller will fall back to base64)
|
|
60
|
+
console.error('[image-saver] Failed to save image:', error);
|
|
61
|
+
return '';
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Process inlineData and return either a file path or base64 data URL.
|
|
66
|
+
* Attempts to save to disk first, falls back to base64 if saving fails.
|
|
67
|
+
*
|
|
68
|
+
* @param inlineData - Object containing mimeType and base64 data
|
|
69
|
+
* @returns Markdown image string with either file path or data URL
|
|
70
|
+
*/
|
|
71
|
+
export function processImageData(inlineData) {
|
|
72
|
+
const mimeType = inlineData.mimeType || 'image/png';
|
|
73
|
+
const data = inlineData.data;
|
|
74
|
+
if (!data) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
// Try to save to disk first
|
|
78
|
+
const filePath = saveImageToDisk(data, mimeType);
|
|
79
|
+
if (filePath) {
|
|
80
|
+
// Successfully saved - return file path with open command hint
|
|
81
|
+
return `\n\nImage saved to: \`${filePath}\`\n\nTo view: \`open "${filePath}"\``;
|
|
82
|
+
}
|
|
83
|
+
// Fall back to base64 data URL
|
|
84
|
+
return ``;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=image-saver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-saver.js","sourceRoot":"","sources":["../../../src/plugin/image-saver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB;;;GAGG;AACH,SAAS,iBAAiB;IACxB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAEtE,uCAAuC;IACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1D,qCAAqC;IACrC,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,GAAG,GAAG,KAAK,CAAC;IACd,CAAC;SAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,GAAG,GAAG,KAAK,CAAC;IACd,CAAC;SAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IAED,OAAO,SAAS,SAAS,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;AAC/C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB,EAAE,QAAgB;IAClE,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEhD,kCAAkC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACjD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEnC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,yEAAyE;QACzE,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QAC5D,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAgD;IAC/E,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,WAAW,CAAC;IACpD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;IAE7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEjD,IAAI,QAAQ,EAAE,CAAC;QACb,+DAA+D;QAC/D,OAAO,sBAAsB,QAAQ,0BAA0B,QAAQ,0BAA0B,QAAQ,KAAK,CAAC;IACjH,CAAC;IAED,+BAA+B;IAC/B,OAAO,2BAA2B,QAAQ,WAAW,IAAI,GAAG,CAAC;AAC/D,CAAC"}
|