@slkiser/opencode-quota 4.7.0 → 4.8.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.
- package/README.md +4 -4
- package/dist/lib/api-key-resolver.d.ts +1 -0
- package/dist/lib/api-key-resolver.d.ts.map +1 -1
- package/dist/lib/api-key-resolver.js +2 -1
- package/dist/lib/api-key-resolver.js.map +1 -1
- package/dist/lib/opencode-go-auth.d.ts +14 -0
- package/dist/lib/opencode-go-auth.d.ts.map +1 -0
- package/dist/lib/opencode-go-auth.js +38 -0
- package/dist/lib/opencode-go-auth.js.map +1 -0
- package/dist/lib/opencode-go.d.ts +1 -22
- package/dist/lib/opencode-go.d.ts.map +1 -1
- package/dist/lib/opencode-go.js +109 -160
- package/dist/lib/opencode-go.js.map +1 -1
- package/dist/lib/provider-metadata.d.ts +4 -4
- package/dist/lib/provider-metadata.d.ts.map +1 -1
- package/dist/lib/provider-metadata.js +4 -4
- package/dist/lib/provider-metadata.js.map +1 -1
- package/dist/lib/quota-status.d.ts.map +1 -1
- package/dist/lib/quota-status.js +20 -3
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/lib/types.d.ts +16 -15
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js.map +1 -1
- package/dist/providers/opencode-go.d.ts +0 -6
- package/dist/providers/opencode-go.d.ts.map +1 -1
- package/dist/providers/opencode-go.js +37 -74
- package/dist/providers/opencode-go.js.map +1 -1
- package/package.json +1 -1
- package/dist/lib/opencode-go-config.d.ts +0 -35
- package/dist/lib/opencode-go-config.d.ts.map +0 -1
- package/dist/lib/opencode-go-config.js +0 -124
- package/dist/lib/opencode-go-config.js.map +0 -1
|
@@ -1,41 +1,22 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpenCode Go provider wrapper.
|
|
3
|
-
*
|
|
4
|
-
* Scrapes the OpenCode Go workspace dashboard and reports rolling (~5h),
|
|
5
|
-
* weekly, and monthly usage as percentage-based quota entries.
|
|
6
|
-
*/
|
|
7
1
|
import { queryOpenCodeGoQuota } from "../lib/opencode-go.js";
|
|
8
|
-
import {
|
|
2
|
+
import { DEFAULT_OPENCODE_GO_AUTH_CACHE_MAX_AGE_MS, getOpenCodeGoAuthDiagnostics, resolveOpenCodeGoAuthCached, } from "../lib/opencode-go-auth.js";
|
|
9
3
|
import { normalizeQuotaProviderId } from "../lib/provider-metadata.js";
|
|
10
|
-
import { attemptedErrorResult, attemptedResult,
|
|
4
|
+
import { attemptedErrorResult, attemptedResult, notAttemptedResult, statusDetailsFromRecord, withStatusDetails, } from "./result-helpers.js";
|
|
11
5
|
const OPENCODE_GO_PROVIDER_LABEL = "OpenCode Go";
|
|
12
6
|
const OPENCODE_GO_WINDOW_ORDER = ["rolling", "weekly", "monthly"];
|
|
13
7
|
const OPENCODE_GO_WINDOW_LABELS = {
|
|
14
|
-
rolling: {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
dashboardField: "rollingUsage",
|
|
18
|
-
},
|
|
19
|
-
weekly: {
|
|
20
|
-
name: `${OPENCODE_GO_PROVIDER_LABEL} Weekly`,
|
|
21
|
-
label: "Weekly:",
|
|
22
|
-
dashboardField: "weeklyUsage",
|
|
23
|
-
},
|
|
24
|
-
monthly: {
|
|
25
|
-
name: `${OPENCODE_GO_PROVIDER_LABEL} Monthly`,
|
|
26
|
-
label: "Monthly:",
|
|
27
|
-
dashboardField: "monthlyUsage",
|
|
28
|
-
},
|
|
8
|
+
rolling: { name: `${OPENCODE_GO_PROVIDER_LABEL} 5h`, label: "5h:" },
|
|
9
|
+
weekly: { name: `${OPENCODE_GO_PROVIDER_LABEL} Weekly`, label: "Weekly:" },
|
|
10
|
+
monthly: { name: `${OPENCODE_GO_PROVIDER_LABEL} Monthly`, label: "Monthly:" },
|
|
29
11
|
};
|
|
30
|
-
function
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
.join(", ");
|
|
12
|
+
function authStatusDetails(diagnostics) {
|
|
13
|
+
return statusDetailsFromRecord({
|
|
14
|
+
auth_state: diagnostics.state,
|
|
15
|
+
auth_source: diagnostics.source ?? "(none)",
|
|
16
|
+
auth_checked_paths: diagnostics.checkedPaths.join(" | ") || "(none)",
|
|
17
|
+
auth_paths: diagnostics.authPaths.join(" | ") || "(none)",
|
|
18
|
+
auth_error: diagnostics.state === "invalid" ? diagnostics.error : undefined,
|
|
19
|
+
});
|
|
39
20
|
}
|
|
40
21
|
function buildOpenCodeGoEntries(result, selectedWindows) {
|
|
41
22
|
const selected = new Set(selectedWindows);
|
|
@@ -44,13 +25,11 @@ function buildOpenCodeGoEntries(result, selectedWindows) {
|
|
|
44
25
|
if (!selected.has(window))
|
|
45
26
|
continue;
|
|
46
27
|
const usage = result[window];
|
|
47
|
-
if (!usage)
|
|
48
|
-
continue;
|
|
49
28
|
const labels = OPENCODE_GO_WINDOW_LABELS[window];
|
|
50
29
|
entries.push({
|
|
51
30
|
accounting: {
|
|
52
31
|
resultType: "quota",
|
|
53
|
-
acquisitionMethod: "
|
|
32
|
+
acquisitionMethod: "remote_api",
|
|
54
33
|
ownership: "maintained",
|
|
55
34
|
authority: "provider_reported",
|
|
56
35
|
},
|
|
@@ -66,69 +45,53 @@ function buildOpenCodeGoEntries(result, selectedWindows) {
|
|
|
66
45
|
export const opencodeGoProvider = {
|
|
67
46
|
id: "opencode-go",
|
|
68
47
|
async isAvailable(_ctx) {
|
|
69
|
-
const
|
|
70
|
-
maxAgeMs:
|
|
48
|
+
const auth = await resolveOpenCodeGoAuthCached({
|
|
49
|
+
maxAgeMs: DEFAULT_OPENCODE_GO_AUTH_CACHE_MAX_AGE_MS,
|
|
71
50
|
});
|
|
72
|
-
return
|
|
51
|
+
return auth.state === "configured";
|
|
73
52
|
},
|
|
74
53
|
matchesCurrentModel(model) {
|
|
75
54
|
const [provider] = model.toLowerCase().split("/", 2);
|
|
76
55
|
return normalizeQuotaProviderId(provider) === "opencode-go";
|
|
77
56
|
},
|
|
78
57
|
async fetch(ctx) {
|
|
79
|
-
const diagnostics = await
|
|
58
|
+
const diagnostics = await getOpenCodeGoAuthDiagnostics({
|
|
59
|
+
maxAgeMs: DEFAULT_OPENCODE_GO_AUTH_CACHE_MAX_AGE_MS,
|
|
60
|
+
});
|
|
80
61
|
const windows = ctx.config.opencodeGoWindows ?? OPENCODE_GO_WINDOW_ORDER;
|
|
81
62
|
const statusDetails = [
|
|
82
|
-
...
|
|
63
|
+
...authStatusDetails(diagnostics),
|
|
83
64
|
{ key: "selected_windows", value: windows.join(",") },
|
|
84
65
|
];
|
|
85
|
-
const
|
|
86
|
-
maxAgeMs:
|
|
66
|
+
const auth = await resolveOpenCodeGoAuthCached({
|
|
67
|
+
maxAgeMs: DEFAULT_OPENCODE_GO_AUTH_CACHE_MAX_AGE_MS,
|
|
87
68
|
});
|
|
88
|
-
if (
|
|
69
|
+
if (auth.state === "none") {
|
|
89
70
|
return withStatusDetails(notAttemptedResult(), statusDetails);
|
|
90
71
|
}
|
|
91
|
-
if (
|
|
92
|
-
return withStatusDetails(attemptedErrorResult(OPENCODE_GO_PROVIDER_LABEL,
|
|
72
|
+
if (auth.state === "invalid") {
|
|
73
|
+
return withStatusDetails(attemptedErrorResult(OPENCODE_GO_PROVIDER_LABEL, auth.error), statusDetails);
|
|
93
74
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
const result = await queryOpenCodeGoQuota(config.config.workspaceId, config.config.authCookie, {
|
|
98
|
-
requestTimeoutMs: ctx.config?.requestTimeoutMsConfigured
|
|
99
|
-
? ctx.config.requestTimeoutMs
|
|
100
|
-
: undefined,
|
|
75
|
+
const result = await queryOpenCodeGoQuota(auth.apiKey, {
|
|
76
|
+
requestTimeoutMs: ctx.config.requestTimeoutMs,
|
|
101
77
|
});
|
|
102
|
-
if (!result) {
|
|
103
|
-
return withStatusDetails(notAttemptedResult(), [
|
|
104
|
-
...statusDetails,
|
|
105
|
-
{ key: "live_fetch_error", value: "OpenCode Go returned null" },
|
|
106
|
-
]);
|
|
107
|
-
}
|
|
108
78
|
if (!result.success) {
|
|
109
79
|
return withStatusDetails(attemptedErrorResult(OPENCODE_GO_PROVIDER_LABEL, result.error), [
|
|
110
80
|
...statusDetails,
|
|
111
81
|
{ key: "live_fetch_error", value: result.error },
|
|
112
82
|
]);
|
|
113
83
|
}
|
|
114
|
-
const
|
|
115
|
-
const missingSelectedWindows = windows.filter((window) => !result[window]);
|
|
116
|
-
const liveDetails = OPENCODE_GO_WINDOW_ORDER.flatMap((window) => {
|
|
84
|
+
const liveDetails = OPENCODE_GO_WINDOW_ORDER.map((window) => {
|
|
117
85
|
const usage = result[window];
|
|
118
|
-
return
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
value: `percent_used=${usage.usagePercent} percent_remaining=${usage.percentRemaining} reset_in_sec=${usage.resetInSec} reset_at=${usage.resetTimeIso}`,
|
|
123
|
-
},
|
|
124
|
-
]
|
|
125
|
-
: [];
|
|
86
|
+
return {
|
|
87
|
+
key: `${window}_usage`,
|
|
88
|
+
value: `status=${usage.status} percent_used=${usage.usagePercent} percent_remaining=${usage.percentRemaining} reset_at=${usage.resetTimeIso}`,
|
|
89
|
+
};
|
|
126
90
|
});
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
return withStatusDetails(attemptedResult(entries), [...statusDetails, ...liveDetails]);
|
|
91
|
+
return withStatusDetails(attemptedResult(buildOpenCodeGoEntries(result, windows)), [
|
|
92
|
+
...statusDetails,
|
|
93
|
+
...liveDetails,
|
|
94
|
+
]);
|
|
132
95
|
},
|
|
133
96
|
};
|
|
134
97
|
//# sourceMappingURL=opencode-go.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-go.js","sourceRoot":"","sources":["../../src/providers/opencode-go.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"opencode-go.js","sourceRoot":"","sources":["../../src/providers/opencode-go.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@slkiser/opencode-quota",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.8.1",
|
|
4
4
|
"description": "OpenCode quota & tokens usage with zero context window pollution. Supports GitHub Copilot, OpenAI (Plus/Pro), Qwen Code, Chutes AI, Synthetic, Google Antigravity, Z.ai coding plan and more.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
export interface OpenCodeGoConfig {
|
|
2
|
-
workspaceId: string;
|
|
3
|
-
authCookie: string;
|
|
4
|
-
}
|
|
5
|
-
export type ResolvedOpenCodeGoConfig = {
|
|
6
|
-
state: "none";
|
|
7
|
-
} | {
|
|
8
|
-
state: "configured";
|
|
9
|
-
config: OpenCodeGoConfig;
|
|
10
|
-
source: string;
|
|
11
|
-
} | {
|
|
12
|
-
state: "incomplete";
|
|
13
|
-
source: string;
|
|
14
|
-
missing: string;
|
|
15
|
-
} | {
|
|
16
|
-
state: "invalid";
|
|
17
|
-
source: string;
|
|
18
|
-
error: string;
|
|
19
|
-
};
|
|
20
|
-
export interface OpenCodeGoConfigDiagnostics {
|
|
21
|
-
state: ResolvedOpenCodeGoConfig["state"];
|
|
22
|
-
source: string | null;
|
|
23
|
-
missing: string | null;
|
|
24
|
-
error: string | null;
|
|
25
|
-
checkedPaths: string[];
|
|
26
|
-
}
|
|
27
|
-
export declare function resolveOpenCodeGoConfigFromEnv(env?: NodeJS.ProcessEnv): ResolvedOpenCodeGoConfig | null;
|
|
28
|
-
export declare function resolveOpenCodeGoConfig(): Promise<ResolvedOpenCodeGoConfig>;
|
|
29
|
-
declare const DEFAULT_CACHE_MAX_AGE_MS = 30000;
|
|
30
|
-
export { DEFAULT_CACHE_MAX_AGE_MS as DEFAULT_OPENCODE_GO_CONFIG_CACHE_MAX_AGE_MS };
|
|
31
|
-
export declare function resolveOpenCodeGoConfigCached(params?: {
|
|
32
|
-
maxAgeMs?: number;
|
|
33
|
-
}): Promise<ResolvedOpenCodeGoConfig>;
|
|
34
|
-
export declare function getOpenCodeGoConfigDiagnostics(): Promise<OpenCodeGoConfigDiagnostics>;
|
|
35
|
-
//# sourceMappingURL=opencode-go-config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-go-config.d.ts","sourceRoot":"","sources":["../../src/lib/opencode-go-config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACjB;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAsCD,wBAAgB,8BAA8B,CAC5C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,wBAAwB,GAAG,IAAI,CAmBjC;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,wBAAwB,CAAC,CA8BjF;AAKD,QAAA,MAAM,wBAAwB,QAAS,CAAC;AACxC,OAAO,EAAE,wBAAwB,IAAI,2CAA2C,EAAE,CAAC;AAEnF,wBAAsB,6BAA6B,CAAC,MAAM,CAAC,EAAE;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CASpC;AAED,wBAAsB,8BAA8B,IAAI,OAAO,CAAC,2BAA2B,CAAC,CAmC3F"}
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import { readFile } from "fs/promises";
|
|
2
|
-
import { join } from "path";
|
|
3
|
-
import { getOpencodeRuntimeDirCandidates } from "./opencode-runtime-paths.js";
|
|
4
|
-
function getConfigCandidatePaths() {
|
|
5
|
-
const { configDirs } = getOpencodeRuntimeDirCandidates();
|
|
6
|
-
return configDirs.map((dir) => join(dir, "opencode-quota", "opencode-go.json"));
|
|
7
|
-
}
|
|
8
|
-
function getConfigFileError(error) {
|
|
9
|
-
if (error instanceof SyntaxError) {
|
|
10
|
-
return `Failed to parse JSON: ${error.message}`;
|
|
11
|
-
}
|
|
12
|
-
if (error instanceof Error && error.message) {
|
|
13
|
-
return `Failed to read config file: ${error.message}`;
|
|
14
|
-
}
|
|
15
|
-
return `Failed to read config file: ${String(error)}`;
|
|
16
|
-
}
|
|
17
|
-
async function readConfigFile(path) {
|
|
18
|
-
try {
|
|
19
|
-
const data = await readFile(path, "utf-8");
|
|
20
|
-
const parsed = JSON.parse(data);
|
|
21
|
-
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
22
|
-
return { state: "invalid", error: "Config file must contain a JSON object" };
|
|
23
|
-
}
|
|
24
|
-
return { state: "loaded", config: parsed };
|
|
25
|
-
}
|
|
26
|
-
catch (error) {
|
|
27
|
-
if (error?.code === "ENOENT") {
|
|
28
|
-
return { state: "missing" };
|
|
29
|
-
}
|
|
30
|
-
return { state: "invalid", error: getConfigFileError(error) };
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
export function resolveOpenCodeGoConfigFromEnv(env = process.env) {
|
|
34
|
-
const workspaceId = env.OPENCODE_GO_WORKSPACE_ID?.trim();
|
|
35
|
-
const authCookie = env.OPENCODE_GO_AUTH_COOKIE?.trim();
|
|
36
|
-
if (!workspaceId && !authCookie)
|
|
37
|
-
return null;
|
|
38
|
-
if (workspaceId && authCookie) {
|
|
39
|
-
return {
|
|
40
|
-
state: "configured",
|
|
41
|
-
config: { workspaceId, authCookie },
|
|
42
|
-
source: "env",
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
return {
|
|
46
|
-
state: "incomplete",
|
|
47
|
-
source: "env",
|
|
48
|
-
missing: workspaceId ? "OPENCODE_GO_AUTH_COOKIE" : "OPENCODE_GO_WORKSPACE_ID",
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
export async function resolveOpenCodeGoConfig() {
|
|
52
|
-
const envResult = resolveOpenCodeGoConfigFromEnv();
|
|
53
|
-
if (envResult)
|
|
54
|
-
return envResult;
|
|
55
|
-
const candidates = getConfigCandidatePaths();
|
|
56
|
-
for (const path of candidates) {
|
|
57
|
-
const fileResult = await readConfigFile(path);
|
|
58
|
-
if (fileResult.state === "missing")
|
|
59
|
-
continue;
|
|
60
|
-
if (fileResult.state === "invalid") {
|
|
61
|
-
return { state: "invalid", source: path, error: fileResult.error };
|
|
62
|
-
}
|
|
63
|
-
const config = fileResult.config;
|
|
64
|
-
const workspaceId = typeof config.workspaceId === "string" ? config.workspaceId.trim() : "";
|
|
65
|
-
const authCookie = typeof config.authCookie === "string" ? config.authCookie.trim() : "";
|
|
66
|
-
if (workspaceId && authCookie) {
|
|
67
|
-
return {
|
|
68
|
-
state: "configured",
|
|
69
|
-
config: { workspaceId, authCookie },
|
|
70
|
-
source: path,
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
const missing = !workspaceId ? "workspaceId" : "authCookie";
|
|
74
|
-
return { state: "incomplete", source: path, missing };
|
|
75
|
-
}
|
|
76
|
-
return { state: "none" };
|
|
77
|
-
}
|
|
78
|
-
let cachedConfig = null;
|
|
79
|
-
let cachedAt = 0;
|
|
80
|
-
const DEFAULT_CACHE_MAX_AGE_MS = 30_000;
|
|
81
|
-
export { DEFAULT_CACHE_MAX_AGE_MS as DEFAULT_OPENCODE_GO_CONFIG_CACHE_MAX_AGE_MS };
|
|
82
|
-
export async function resolveOpenCodeGoConfigCached(params) {
|
|
83
|
-
const maxAgeMs = Math.max(0, params?.maxAgeMs ?? DEFAULT_CACHE_MAX_AGE_MS);
|
|
84
|
-
const now = Date.now();
|
|
85
|
-
if (cachedConfig && now - cachedAt < maxAgeMs) {
|
|
86
|
-
return cachedConfig;
|
|
87
|
-
}
|
|
88
|
-
cachedConfig = await resolveOpenCodeGoConfig();
|
|
89
|
-
cachedAt = now;
|
|
90
|
-
return cachedConfig;
|
|
91
|
-
}
|
|
92
|
-
export async function getOpenCodeGoConfigDiagnostics() {
|
|
93
|
-
const resolved = await resolveOpenCodeGoConfig();
|
|
94
|
-
const checkedPaths = getConfigCandidatePaths();
|
|
95
|
-
if (resolved.state === "none") {
|
|
96
|
-
return { state: "none", source: null, missing: null, error: null, checkedPaths };
|
|
97
|
-
}
|
|
98
|
-
if (resolved.state === "incomplete") {
|
|
99
|
-
return {
|
|
100
|
-
state: "incomplete",
|
|
101
|
-
source: resolved.source,
|
|
102
|
-
missing: resolved.missing,
|
|
103
|
-
error: null,
|
|
104
|
-
checkedPaths,
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
if (resolved.state === "invalid") {
|
|
108
|
-
return {
|
|
109
|
-
state: "invalid",
|
|
110
|
-
source: resolved.source,
|
|
111
|
-
missing: null,
|
|
112
|
-
error: resolved.error,
|
|
113
|
-
checkedPaths,
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
return {
|
|
117
|
-
state: "configured",
|
|
118
|
-
source: resolved.source,
|
|
119
|
-
missing: null,
|
|
120
|
-
error: null,
|
|
121
|
-
checkedPaths,
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
//# sourceMappingURL=opencode-go-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-go-config.js","sourceRoot":"","sources":["../../src/lib/opencode-go-config.ts"],"names":[],"mappings":"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"}
|