@mdwrk/extension-gemini-agent 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -0
- package/dist/components/GeminiAgentView.d.ts +3 -0
- package/dist/components/GeminiAgentView.d.ts.map +1 -0
- package/dist/components/GeminiAgentView.js +71 -0
- package/dist/components/GeminiAgentView.js.map +1 -0
- package/dist/constants.d.ts +26 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +41 -0
- package/dist/constants.js.map +1 -0
- package/dist/context.d.ts +7 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +28 -0
- package/dist/context.js.map +1 -0
- package/dist/createGeminiAgentBundledEntry.d.ts +4 -0
- package/dist/createGeminiAgentBundledEntry.d.ts.map +1 -0
- package/dist/createGeminiAgentBundledEntry.js +114 -0
- package/dist/createGeminiAgentBundledEntry.js.map +1 -0
- package/dist/i18n.d.ts +70 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +81 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/locales/en.d.ts +97 -0
- package/dist/locales/en.d.ts.map +1 -0
- package/dist/locales/en.js +97 -0
- package/dist/locales/en.js.map +1 -0
- package/dist/locales/es.d.ts +54 -0
- package/dist/locales/es.d.ts.map +1 -0
- package/dist/locales/es.js +54 -0
- package/dist/locales/es.js.map +1 -0
- package/dist/manifest.d.ts +5 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +254 -0
- package/dist/manifest.js.map +1 -0
- package/dist/prompt.d.ts +3 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +36 -0
- package/dist/prompt.js.map +1 -0
- package/dist/provider.d.ts +21 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +81 -0
- package/dist/provider.js.map +1 -0
- package/dist/service.d.ts +3 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +176 -0
- package/dist/service.js.map +1 -0
- package/dist/settings.d.ts +4 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +31 -0
- package/dist/settings.js.map +1 -0
- package/dist/types.d.ts +103 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +96 -0
package/dist/prompt.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { getPrimarySelectionText } from "./context.js";
|
|
2
|
+
const section = (title, body) => `## ${title}\n${body.trim()}`;
|
|
3
|
+
function serializeContextMetadata(context) {
|
|
4
|
+
return [
|
|
5
|
+
`project: ${context.project?.name ?? "none"}`,
|
|
6
|
+
`file: ${context.file?.path ?? context.file?.name ?? "none"}`,
|
|
7
|
+
`documentUri: ${context.document?.uri ?? "none"}`,
|
|
8
|
+
`selectionCount: ${context.selections.length}`,
|
|
9
|
+
].join("\n");
|
|
10
|
+
}
|
|
11
|
+
export function buildGeminiPrompt(intent, prompt, context, settings) {
|
|
12
|
+
const parts = [section("Workspace context", serializeContextMetadata(context))];
|
|
13
|
+
const selectionText = getPrimarySelectionText(context);
|
|
14
|
+
if (intent === "summarize-current-file") {
|
|
15
|
+
parts.push(section("Task", "Summarize the active markdown document. Focus on main ideas, structure, and action items. Preserve markdown references where useful."));
|
|
16
|
+
parts.push(section("Document", context.document?.content ?? ""));
|
|
17
|
+
return parts.join("\n\n").trim();
|
|
18
|
+
}
|
|
19
|
+
if (intent === "rewrite-selection") {
|
|
20
|
+
parts.push(section("Task", prompt.trim() || "Rewrite the current markdown selection for clarity while preserving meaning and markdown formatting unless a structural change is explicitly required."));
|
|
21
|
+
parts.push(section("Selected markdown", selectionText));
|
|
22
|
+
if (settings.autoAttachDocument && context.document?.content) {
|
|
23
|
+
parts.push(section("Full document for surrounding context", context.document.content));
|
|
24
|
+
}
|
|
25
|
+
return parts.join("\n\n").trim();
|
|
26
|
+
}
|
|
27
|
+
parts.push(section("Task", prompt.trim() || "Respond to the user request using the attached markdown context."));
|
|
28
|
+
if (settings.autoAttachDocument && context.document?.content) {
|
|
29
|
+
parts.push(section("Active markdown document", context.document.content));
|
|
30
|
+
}
|
|
31
|
+
if (settings.autoAttachSelection && selectionText) {
|
|
32
|
+
parts.push(section("Current selection", selectionText));
|
|
33
|
+
}
|
|
34
|
+
return parts.join("\n\n").trim();
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAGvD,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,IAAY,EAAU,EAAE,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AAEvF,SAAS,wBAAwB,CAAC,OAAmC;IACnE,OAAO;QACL,YAAY,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE;QAC7C,SAAS,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,MAAM,EAAE;QAC7D,gBAAgB,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,MAAM,EAAE;QACjD,mBAAmB,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE;KAC/C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAAyB,EACzB,MAAc,EACd,OAAmC,EACnC,QAAqC;IAErC,MAAM,KAAK,GAAa,CAAC,OAAO,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1F,MAAM,aAAa,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAEvD,IAAI,MAAM,KAAK,wBAAwB,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,sIAAsI,CAAC,CAAC,CAAC;QACpK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IAED,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,wJAAwJ,CAAC,CAAC,CAAC;QACvM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC,CAAC;QACxD,IAAI,QAAQ,CAAC,kBAAkB,IAAI,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,uCAAuC,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,kEAAkE,CAAC,CAAC,CAAC;IACjH,IAAI,QAAQ,CAAC,kBAAkB,IAAI,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,QAAQ,CAAC,mBAAmB,IAAI,aAAa,EAAE,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { GeminiAgentRequest, GeminiProviderCreateOptions, GeminiTextProvider } from "./types.js";
|
|
2
|
+
interface GeminiGenerateContentResponse {
|
|
3
|
+
readonly candidates?: ReadonlyArray<{
|
|
4
|
+
readonly content?: {
|
|
5
|
+
readonly parts?: ReadonlyArray<{
|
|
6
|
+
readonly text?: string;
|
|
7
|
+
}>;
|
|
8
|
+
};
|
|
9
|
+
}>;
|
|
10
|
+
readonly usageMetadata?: {
|
|
11
|
+
readonly promptTokenCount?: number;
|
|
12
|
+
readonly candidatesTokenCount?: number;
|
|
13
|
+
readonly totalTokenCount?: number;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export declare function resolveGeminiGenerateContentUrl(request: GeminiAgentRequest): string;
|
|
17
|
+
export declare function buildGeminiGenerateContentBody(request: GeminiAgentRequest): Record<string, unknown>;
|
|
18
|
+
export declare function extractGeminiText(response: GeminiGenerateContentResponse): string;
|
|
19
|
+
export declare function createGeminiTextProvider(options?: GeminiProviderCreateOptions): GeminiTextProvider;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAwC,2BAA2B,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE5I,UAAU,6BAA6B;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC;QAClC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACjB,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC,CAAC;SAC5D,CAAC;KACH,CAAC,CAAC;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE;QACvB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QACnC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;QACvC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;KACnC,CAAC;CACH;AAED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAanF;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBnG;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,6BAA6B,GAAG,MAAM,CAGjF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,2BAAgC,GAAG,kBAAkB,CAiDtG"}
|
package/dist/provider.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export function resolveGeminiGenerateContentUrl(request) {
|
|
2
|
+
const rawEndpoint = request.settings.endpoint.replace(/\/+$/, "");
|
|
3
|
+
const withPath = rawEndpoint.includes(":generateContent")
|
|
4
|
+
? rawEndpoint
|
|
5
|
+
: `${rawEndpoint}/models/${request.settings.model}:generateContent`;
|
|
6
|
+
if (request.settings.authMode !== "api-key" || !request.settings.apiKey) {
|
|
7
|
+
return withPath;
|
|
8
|
+
}
|
|
9
|
+
const url = new URL(withPath);
|
|
10
|
+
url.searchParams.set("key", request.settings.apiKey);
|
|
11
|
+
return url.toString();
|
|
12
|
+
}
|
|
13
|
+
export function buildGeminiGenerateContentBody(request) {
|
|
14
|
+
return {
|
|
15
|
+
system_instruction: request.settings.systemPrompt
|
|
16
|
+
? {
|
|
17
|
+
parts: [{ text: request.settings.systemPrompt }],
|
|
18
|
+
}
|
|
19
|
+
: undefined,
|
|
20
|
+
generationConfig: {
|
|
21
|
+
temperature: request.settings.temperature,
|
|
22
|
+
},
|
|
23
|
+
contents: [
|
|
24
|
+
{
|
|
25
|
+
role: "user",
|
|
26
|
+
parts: [{ text: request.prompt }],
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function extractGeminiText(response) {
|
|
32
|
+
const text = response.candidates?.[0]?.content?.parts?.map((part) => part.text ?? "").join("").trim();
|
|
33
|
+
return text ?? "";
|
|
34
|
+
}
|
|
35
|
+
export function createGeminiTextProvider(options = {}) {
|
|
36
|
+
const fetchImpl = options.fetchImpl ?? (typeof fetch === "function" ? fetch.bind(globalThis) : undefined);
|
|
37
|
+
return {
|
|
38
|
+
id: "gemini",
|
|
39
|
+
async generate(request) {
|
|
40
|
+
if (!fetchImpl) {
|
|
41
|
+
throw new Error("No fetch implementation is available for Gemini requests.");
|
|
42
|
+
}
|
|
43
|
+
const controller = typeof AbortController === "function" ? new AbortController() : undefined;
|
|
44
|
+
const timeout = controller ? setTimeout(() => controller.abort(), request.settings.requestTimeoutMs) : null;
|
|
45
|
+
try {
|
|
46
|
+
const response = await fetchImpl(resolveGeminiGenerateContentUrl(request), {
|
|
47
|
+
method: "POST",
|
|
48
|
+
headers: {
|
|
49
|
+
"content-type": "application/json",
|
|
50
|
+
},
|
|
51
|
+
body: JSON.stringify(buildGeminiGenerateContentBody(request)),
|
|
52
|
+
signal: controller?.signal,
|
|
53
|
+
});
|
|
54
|
+
if (!response.ok) {
|
|
55
|
+
const detail = await response.text();
|
|
56
|
+
throw new Error(`Gemini request failed (${response.status} ${response.statusText}): ${detail}`);
|
|
57
|
+
}
|
|
58
|
+
const json = await response.json();
|
|
59
|
+
const text = extractGeminiText(json);
|
|
60
|
+
if (!text) {
|
|
61
|
+
throw new Error("Gemini response did not include any text candidates.");
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
text,
|
|
65
|
+
model: request.settings.model,
|
|
66
|
+
raw: json,
|
|
67
|
+
usage: {
|
|
68
|
+
promptTokens: json.usageMetadata?.promptTokenCount,
|
|
69
|
+
responseTokens: json.usageMetadata?.candidatesTokenCount,
|
|
70
|
+
totalTokens: json.usageMetadata?.totalTokenCount,
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
if (timeout)
|
|
76
|
+
clearTimeout(timeout);
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,kBAAkB,EAClB,8BAA8B,EAG/B,MAAM,YAAY,CAAC;AAkBpB,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,8BAA8B,GAAG,kBAAkB,CA8KjG"}
|
package/dist/service.js
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { collectGeminiAgentContext, getPrimarySelectionText, hasActiveDocumentContext, hasSelectedTextContext } from "./context.js";
|
|
2
|
+
import { geminiAgentLabels } from "./i18n.js";
|
|
3
|
+
import { buildGeminiPrompt } from "./prompt.js";
|
|
4
|
+
import { readGeminiAgentSettings } from "./settings.js";
|
|
5
|
+
const createSnapshot = () => ({
|
|
6
|
+
busy: false,
|
|
7
|
+
lastIntent: "idle",
|
|
8
|
+
lastPrompt: "",
|
|
9
|
+
lastContext: null,
|
|
10
|
+
lastResponse: null,
|
|
11
|
+
pendingDraft: null,
|
|
12
|
+
lastError: null,
|
|
13
|
+
writebackBlockedReason: null,
|
|
14
|
+
infoMessage: null,
|
|
15
|
+
});
|
|
16
|
+
function formatLabel(formatter, label) {
|
|
17
|
+
return formatter(label);
|
|
18
|
+
}
|
|
19
|
+
export function createGeminiAgentService(deps) {
|
|
20
|
+
let snapshot = createSnapshot();
|
|
21
|
+
const listeners = new Set();
|
|
22
|
+
const emit = () => {
|
|
23
|
+
for (const listener of Array.from(listeners)) {
|
|
24
|
+
listener();
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const setSnapshot = (patch) => {
|
|
28
|
+
snapshot = { ...snapshot, ...patch };
|
|
29
|
+
emit();
|
|
30
|
+
};
|
|
31
|
+
const publishDiagnostic = async (severity, code, label, detail) => {
|
|
32
|
+
await deps.context.host.diagnostics.publish(deps.context.extensionId, {
|
|
33
|
+
severity,
|
|
34
|
+
code,
|
|
35
|
+
message: formatLabel(deps.formatLabel, label),
|
|
36
|
+
detail,
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
const loadSettings = async () => await readGeminiAgentSettings(deps.context.config);
|
|
40
|
+
const refreshContext = async () => {
|
|
41
|
+
const contextSnapshot = await collectGeminiAgentContext(deps.context.host);
|
|
42
|
+
setSnapshot({ lastContext: contextSnapshot });
|
|
43
|
+
return contextSnapshot;
|
|
44
|
+
};
|
|
45
|
+
const ensureRequestPreconditions = async (intent, contextSnapshot) => {
|
|
46
|
+
const settings = await loadSettings();
|
|
47
|
+
if (settings.authMode === "api-key" && !settings.apiKey.trim()) {
|
|
48
|
+
const message = formatLabel(deps.formatLabel, geminiAgentLabels.notificationsMissingConfiguration);
|
|
49
|
+
setSnapshot({ lastError: message, infoMessage: null });
|
|
50
|
+
await publishDiagnostic("warning", "EXT_GEMINI_MISSING_CONFIGURATION", geminiAgentLabels.diagnosticsMissingConfiguration);
|
|
51
|
+
await deps.context.host.notifications.warn(geminiAgentLabels.notificationsMissingConfiguration);
|
|
52
|
+
throw new Error(message);
|
|
53
|
+
}
|
|
54
|
+
if (intent === "summarize-current-file" && !hasActiveDocumentContext(contextSnapshot)) {
|
|
55
|
+
const message = formatLabel(deps.formatLabel, geminiAgentLabels.notificationsNoDocument);
|
|
56
|
+
setSnapshot({ lastError: message, infoMessage: null });
|
|
57
|
+
await publishDiagnostic("warning", "EXT_GEMINI_NO_DOCUMENT", geminiAgentLabels.diagnosticsNoDocument);
|
|
58
|
+
await deps.context.host.notifications.warn(geminiAgentLabels.notificationsNoDocument);
|
|
59
|
+
throw new Error(message);
|
|
60
|
+
}
|
|
61
|
+
if (intent === "rewrite-selection" && !hasSelectedTextContext(contextSnapshot)) {
|
|
62
|
+
const message = formatLabel(deps.formatLabel, geminiAgentLabels.notificationsNoSelection);
|
|
63
|
+
setSnapshot({ lastError: message, infoMessage: null });
|
|
64
|
+
await publishDiagnostic("warning", "EXT_GEMINI_NO_SELECTION", geminiAgentLabels.diagnosticsNoSelection);
|
|
65
|
+
await deps.context.host.notifications.warn(geminiAgentLabels.notificationsNoSelection);
|
|
66
|
+
throw new Error(message);
|
|
67
|
+
}
|
|
68
|
+
return settings;
|
|
69
|
+
};
|
|
70
|
+
const runIntent = async (intent, prompt = "") => {
|
|
71
|
+
setSnapshot({
|
|
72
|
+
busy: true,
|
|
73
|
+
lastIntent: intent,
|
|
74
|
+
lastPrompt: prompt,
|
|
75
|
+
lastError: null,
|
|
76
|
+
infoMessage: formatLabel(deps.formatLabel, geminiAgentLabels.statusRunning),
|
|
77
|
+
writebackBlockedReason: null,
|
|
78
|
+
});
|
|
79
|
+
try {
|
|
80
|
+
const contextSnapshot = await collectGeminiAgentContext(deps.context.host);
|
|
81
|
+
const settings = await ensureRequestPreconditions(intent, contextSnapshot);
|
|
82
|
+
const requestPrompt = buildGeminiPrompt(intent, prompt, contextSnapshot, settings);
|
|
83
|
+
const response = await deps.provider.generate({
|
|
84
|
+
intent,
|
|
85
|
+
prompt: requestPrompt,
|
|
86
|
+
context: contextSnapshot,
|
|
87
|
+
settings,
|
|
88
|
+
});
|
|
89
|
+
const nextDraft = intent === "rewrite-selection" ? response.text : snapshot.pendingDraft;
|
|
90
|
+
setSnapshot({
|
|
91
|
+
busy: false,
|
|
92
|
+
lastContext: contextSnapshot,
|
|
93
|
+
lastResponse: response,
|
|
94
|
+
pendingDraft: nextDraft,
|
|
95
|
+
lastError: null,
|
|
96
|
+
infoMessage: formatLabel(deps.formatLabel, geminiAgentLabels.diagnosticsRequestSucceeded),
|
|
97
|
+
});
|
|
98
|
+
await publishDiagnostic("info", "EXT_GEMINI_REQUEST_SUCCEEDED", geminiAgentLabels.diagnosticsRequestSucceeded);
|
|
99
|
+
return response;
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
103
|
+
setSnapshot({
|
|
104
|
+
busy: false,
|
|
105
|
+
lastError: message,
|
|
106
|
+
infoMessage: null,
|
|
107
|
+
});
|
|
108
|
+
await deps.context.host.diagnostics.publish(deps.context.extensionId, {
|
|
109
|
+
severity: "error",
|
|
110
|
+
code: "EXT_GEMINI_REQUEST_FAILED",
|
|
111
|
+
message,
|
|
112
|
+
detail: error instanceof Error ? error.stack : undefined,
|
|
113
|
+
});
|
|
114
|
+
throw error;
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
const blockWriteback = async () => {
|
|
118
|
+
const reason = formatLabel(deps.formatLabel, geminiAgentLabels.notificationsWritebackBlocked);
|
|
119
|
+
setSnapshot({ writebackBlockedReason: reason, infoMessage: null, lastError: null });
|
|
120
|
+
await publishDiagnostic("warning", "EXT_GEMINI_WRITEBACK_BLOCKED", geminiAgentLabels.diagnosticsWritebackBlocked);
|
|
121
|
+
await deps.context.host.notifications.warn(geminiAgentLabels.notificationsWritebackBlocked);
|
|
122
|
+
return false;
|
|
123
|
+
};
|
|
124
|
+
const applyDraft = async (mode) => {
|
|
125
|
+
const settings = await loadSettings();
|
|
126
|
+
const draft = snapshot.pendingDraft?.trim() ?? "";
|
|
127
|
+
if (!settings.allowWriteBack || !draft) {
|
|
128
|
+
return await blockWriteback();
|
|
129
|
+
}
|
|
130
|
+
if (mode === "selection") {
|
|
131
|
+
const selectionText = getPrimarySelectionText(snapshot.lastContext ?? await collectGeminiAgentContext(deps.context.host));
|
|
132
|
+
if (!selectionText) {
|
|
133
|
+
return await blockWriteback();
|
|
134
|
+
}
|
|
135
|
+
await deps.context.host.editor.replaceSelections(draft);
|
|
136
|
+
setSnapshot({
|
|
137
|
+
writebackBlockedReason: null,
|
|
138
|
+
infoMessage: formatLabel(deps.formatLabel, geminiAgentLabels.notificationsWritebackAppliedSelection),
|
|
139
|
+
});
|
|
140
|
+
await publishDiagnostic("info", "EXT_GEMINI_WRITEBACK_APPLIED", geminiAgentLabels.diagnosticsWritebackApplied);
|
|
141
|
+
await deps.context.host.notifications.info(geminiAgentLabels.notificationsWritebackAppliedSelection);
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
await deps.context.host.editor.setDocumentContent(draft);
|
|
145
|
+
setSnapshot({
|
|
146
|
+
writebackBlockedReason: null,
|
|
147
|
+
infoMessage: formatLabel(deps.formatLabel, geminiAgentLabels.notificationsWritebackAppliedDocument),
|
|
148
|
+
});
|
|
149
|
+
await publishDiagnostic("info", "EXT_GEMINI_WRITEBACK_APPLIED", geminiAgentLabels.diagnosticsWritebackApplied);
|
|
150
|
+
await deps.context.host.notifications.info(geminiAgentLabels.notificationsWritebackAppliedDocument);
|
|
151
|
+
return true;
|
|
152
|
+
};
|
|
153
|
+
return {
|
|
154
|
+
getSnapshot() {
|
|
155
|
+
return snapshot;
|
|
156
|
+
},
|
|
157
|
+
subscribe(listener) {
|
|
158
|
+
listeners.add(listener);
|
|
159
|
+
return () => listeners.delete(listener);
|
|
160
|
+
},
|
|
161
|
+
loadSettings,
|
|
162
|
+
refreshContext,
|
|
163
|
+
runIntent,
|
|
164
|
+
updateDraft(nextDraft) {
|
|
165
|
+
setSnapshot({ pendingDraft: nextDraft, writebackBlockedReason: null });
|
|
166
|
+
},
|
|
167
|
+
clearDraft() {
|
|
168
|
+
setSnapshot({ pendingDraft: null, writebackBlockedReason: null });
|
|
169
|
+
},
|
|
170
|
+
clearResult() {
|
|
171
|
+
setSnapshot({ lastResponse: null, lastError: null, infoMessage: formatLabel(deps.formatLabel, geminiAgentLabels.statusIdle) });
|
|
172
|
+
},
|
|
173
|
+
applyDraft,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ExtensionConfigurationStore } from "@mdwrk/extension-host";
|
|
2
|
+
import type { GeminiAgentResolvedSettings } from "./types.js";
|
|
3
|
+
export declare function readGeminiAgentSettings(config: ExtensionConfigurationStore): Promise<GeminiAgentResolvedSettings>;
|
|
4
|
+
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAczE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAM9D,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAqCvH"}
|
package/dist/settings.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { GEMINI_AGENT_DEFAULT_SETTINGS, GEMINI_AGENT_SETTING_ALLOW_WRITEBACK, GEMINI_AGENT_SETTING_API_KEY, GEMINI_AGENT_SETTING_AUTH_MODE, GEMINI_AGENT_SETTING_AUTO_ATTACH_DOCUMENT, GEMINI_AGENT_SETTING_AUTO_ATTACH_SELECTION, GEMINI_AGENT_SETTING_ENDPOINT, GEMINI_AGENT_SETTING_MODEL, GEMINI_AGENT_SETTING_SYSTEM_PROMPT, GEMINI_AGENT_SETTING_TEMPERATURE, GEMINI_AGENT_SETTING_TIMEOUT_MS, } from "./constants.js";
|
|
2
|
+
const asString = (value, fallback) => typeof value === "string" ? value : fallback;
|
|
3
|
+
const asBoolean = (value, fallback) => typeof value === "boolean" ? value : fallback;
|
|
4
|
+
const asNumber = (value, fallback) => typeof value === "number" && !Number.isNaN(value) ? value : fallback;
|
|
5
|
+
export async function readGeminiAgentSettings(config) {
|
|
6
|
+
const [endpoint, model, authMode, apiKey, systemPrompt, temperature, requestTimeoutMs, autoAttachDocument, autoAttachSelection, allowWriteBack,] = await Promise.all([
|
|
7
|
+
config.get(GEMINI_AGENT_SETTING_ENDPOINT),
|
|
8
|
+
config.get(GEMINI_AGENT_SETTING_MODEL),
|
|
9
|
+
config.get(GEMINI_AGENT_SETTING_AUTH_MODE),
|
|
10
|
+
config.get(GEMINI_AGENT_SETTING_API_KEY),
|
|
11
|
+
config.get(GEMINI_AGENT_SETTING_SYSTEM_PROMPT),
|
|
12
|
+
config.get(GEMINI_AGENT_SETTING_TEMPERATURE),
|
|
13
|
+
config.get(GEMINI_AGENT_SETTING_TIMEOUT_MS),
|
|
14
|
+
config.get(GEMINI_AGENT_SETTING_AUTO_ATTACH_DOCUMENT),
|
|
15
|
+
config.get(GEMINI_AGENT_SETTING_AUTO_ATTACH_SELECTION),
|
|
16
|
+
config.get(GEMINI_AGENT_SETTING_ALLOW_WRITEBACK),
|
|
17
|
+
]);
|
|
18
|
+
return {
|
|
19
|
+
endpoint: asString(endpoint, GEMINI_AGENT_DEFAULT_SETTINGS.endpoint).trim() || GEMINI_AGENT_DEFAULT_SETTINGS.endpoint,
|
|
20
|
+
model: asString(model, GEMINI_AGENT_DEFAULT_SETTINGS.model).trim() || GEMINI_AGENT_DEFAULT_SETTINGS.model,
|
|
21
|
+
authMode: (authMode === "none" ? "none" : GEMINI_AGENT_DEFAULT_SETTINGS.authMode),
|
|
22
|
+
apiKey: asString(apiKey, GEMINI_AGENT_DEFAULT_SETTINGS.apiKey),
|
|
23
|
+
systemPrompt: asString(systemPrompt, GEMINI_AGENT_DEFAULT_SETTINGS.systemPrompt),
|
|
24
|
+
temperature: asNumber(temperature, GEMINI_AGENT_DEFAULT_SETTINGS.temperature),
|
|
25
|
+
requestTimeoutMs: Math.max(1000, asNumber(requestTimeoutMs, GEMINI_AGENT_DEFAULT_SETTINGS.requestTimeoutMs)),
|
|
26
|
+
autoAttachDocument: asBoolean(autoAttachDocument, GEMINI_AGENT_DEFAULT_SETTINGS.autoAttachDocument),
|
|
27
|
+
autoAttachSelection: asBoolean(autoAttachSelection, GEMINI_AGENT_DEFAULT_SETTINGS.autoAttachSelection),
|
|
28
|
+
allowWriteBack: asBoolean(allowWriteBack, GEMINI_AGENT_DEFAULT_SETTINGS.allowWriteBack),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AACA,OAAO,EACL,6BAA6B,EAC7B,oCAAoC,EACpC,4BAA4B,EAC5B,8BAA8B,EAC9B,yCAAyC,EACzC,0CAA0C,EAC1C,6BAA6B,EAC7B,0BAA0B,EAC1B,kCAAkC,EAClC,gCAAgC,EAChC,+BAA+B,GAChC,MAAM,gBAAgB,CAAC;AAGxB,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAE,QAAgB,EAAU,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC5G,MAAM,SAAS,GAAG,CAAC,KAAc,EAAE,QAAiB,EAAW,EAAE,CAAC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChH,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAE,QAAgB,EAAU,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAEpI,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAAmC;IAC/E,MAAM,CACJ,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACf,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpB,MAAM,CAAC,GAAG,CAAS,6BAA6B,CAAC;QACjD,MAAM,CAAC,GAAG,CAAS,0BAA0B,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAS,8BAA8B,CAAC;QAClD,MAAM,CAAC,GAAG,CAAS,4BAA4B,CAAC;QAChD,MAAM,CAAC,GAAG,CAAS,kCAAkC,CAAC;QACtD,MAAM,CAAC,GAAG,CAAS,gCAAgC,CAAC;QACpD,MAAM,CAAC,GAAG,CAAS,+BAA+B,CAAC;QACnD,MAAM,CAAC,GAAG,CAAU,yCAAyC,CAAC;QAC9D,MAAM,CAAC,GAAG,CAAU,0CAA0C,CAAC;QAC/D,MAAM,CAAC,GAAG,CAAU,oCAAoC,CAAC;KAC1D,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,6BAA6B,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,IAAI,6BAA6B,CAAC,QAAQ;QACrH,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,6BAA6B,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,IAAI,6BAA6B,CAAC,KAAK;QACzG,QAAQ,EAAE,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,6BAA6B,CAAC,QAAQ,CAAC;QACjF,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAAC,MAAM,CAAC;QAC9D,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,6BAA6B,CAAC,YAAY,CAAC;QAChF,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,6BAA6B,CAAC,WAAW,CAAC;QAC7E,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,EAAE,6BAA6B,CAAC,gBAAgB,CAAC,CAAC;QAC5G,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,EAAE,6BAA6B,CAAC,kBAAkB,CAAC;QACnG,mBAAmB,EAAE,SAAS,CAAC,mBAAmB,EAAE,6BAA6B,CAAC,mBAAmB,CAAC;QACtG,cAAc,EAAE,SAAS,CAAC,cAAc,EAAE,6BAA6B,CAAC,cAAc,CAAC;KACxF,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import type { I18nLabel } from "@mdwrk/extension-manifest";
|
|
2
|
+
import type { ActiveDocument, ExtensionContext, ExtensionConfigurationStore, SelectionRange, WorkspaceFileSummary, WorkspaceProjectSummary } from "@mdwrk/extension-host";
|
|
3
|
+
export type GeminiAgentIntent = "idle" | "summarize-current-file" | "rewrite-selection" | "custom-prompt";
|
|
4
|
+
export type GeminiAgentWritebackMode = "selection" | "document";
|
|
5
|
+
export type GeminiAgentAuthMode = "api-key" | "none";
|
|
6
|
+
export interface GeminiAgentResolvedSettings {
|
|
7
|
+
readonly endpoint: string;
|
|
8
|
+
readonly model: string;
|
|
9
|
+
readonly authMode: GeminiAgentAuthMode;
|
|
10
|
+
readonly apiKey: string;
|
|
11
|
+
readonly systemPrompt: string;
|
|
12
|
+
readonly temperature: number;
|
|
13
|
+
readonly requestTimeoutMs: number;
|
|
14
|
+
readonly autoAttachDocument: boolean;
|
|
15
|
+
readonly autoAttachSelection: boolean;
|
|
16
|
+
readonly allowWriteBack: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface GeminiAgentContextSnapshot {
|
|
19
|
+
readonly project: WorkspaceProjectSummary | null;
|
|
20
|
+
readonly file: WorkspaceFileSummary | null;
|
|
21
|
+
readonly document: ActiveDocument | null;
|
|
22
|
+
readonly selections: readonly SelectionRange[];
|
|
23
|
+
}
|
|
24
|
+
export interface GeminiAgentRequest {
|
|
25
|
+
readonly intent: GeminiAgentIntent;
|
|
26
|
+
readonly prompt: string;
|
|
27
|
+
readonly context: GeminiAgentContextSnapshot;
|
|
28
|
+
readonly settings: GeminiAgentResolvedSettings;
|
|
29
|
+
}
|
|
30
|
+
export interface GeminiAgentUsage {
|
|
31
|
+
readonly promptTokens?: number;
|
|
32
|
+
readonly responseTokens?: number;
|
|
33
|
+
readonly totalTokens?: number;
|
|
34
|
+
}
|
|
35
|
+
export interface GeminiAgentResponse {
|
|
36
|
+
readonly text: string;
|
|
37
|
+
readonly model: string;
|
|
38
|
+
readonly usage?: GeminiAgentUsage;
|
|
39
|
+
readonly raw?: unknown;
|
|
40
|
+
}
|
|
41
|
+
export interface GeminiAgentServiceSnapshot {
|
|
42
|
+
readonly busy: boolean;
|
|
43
|
+
readonly lastIntent: GeminiAgentIntent;
|
|
44
|
+
readonly lastPrompt: string;
|
|
45
|
+
readonly lastContext: GeminiAgentContextSnapshot | null;
|
|
46
|
+
readonly lastResponse: GeminiAgentResponse | null;
|
|
47
|
+
readonly pendingDraft: string | null;
|
|
48
|
+
readonly lastError: string | null;
|
|
49
|
+
readonly writebackBlockedReason: string | null;
|
|
50
|
+
readonly infoMessage: string | null;
|
|
51
|
+
}
|
|
52
|
+
export interface GeminiAgentService {
|
|
53
|
+
getSnapshot(): GeminiAgentServiceSnapshot;
|
|
54
|
+
subscribe(listener: () => void): () => void;
|
|
55
|
+
loadSettings(): Promise<GeminiAgentResolvedSettings>;
|
|
56
|
+
refreshContext(): Promise<GeminiAgentContextSnapshot>;
|
|
57
|
+
runIntent(intent: GeminiAgentIntent, prompt?: string): Promise<GeminiAgentResponse>;
|
|
58
|
+
updateDraft(nextDraft: string): void;
|
|
59
|
+
clearDraft(): void;
|
|
60
|
+
clearResult(): void;
|
|
61
|
+
applyDraft(mode: GeminiAgentWritebackMode): Promise<boolean>;
|
|
62
|
+
}
|
|
63
|
+
export interface GeminiTextProvider {
|
|
64
|
+
readonly id: string;
|
|
65
|
+
generate(request: GeminiAgentRequest): Promise<GeminiAgentResponse>;
|
|
66
|
+
}
|
|
67
|
+
export interface GeminiProviderCreateOptions {
|
|
68
|
+
readonly fetchImpl?: GeminiFetchLike;
|
|
69
|
+
}
|
|
70
|
+
export interface GeminiAgentEntryOptions {
|
|
71
|
+
readonly provider?: GeminiTextProvider;
|
|
72
|
+
}
|
|
73
|
+
export interface GeminiAgentViewInput {
|
|
74
|
+
readonly intent?: GeminiAgentIntent;
|
|
75
|
+
readonly prompt?: string;
|
|
76
|
+
}
|
|
77
|
+
export interface GeminiAgentViewProps {
|
|
78
|
+
readonly close: () => Promise<void>;
|
|
79
|
+
readonly formatLabel: (label: I18nLabel | string) => string;
|
|
80
|
+
readonly service: GeminiAgentService;
|
|
81
|
+
readonly input?: GeminiAgentViewInput | null;
|
|
82
|
+
}
|
|
83
|
+
export type GeminiFetchLike = (input: string, init?: {
|
|
84
|
+
readonly method?: string;
|
|
85
|
+
readonly headers?: Record<string, string>;
|
|
86
|
+
readonly body?: string;
|
|
87
|
+
readonly signal?: AbortSignal;
|
|
88
|
+
}) => Promise<{
|
|
89
|
+
readonly ok: boolean;
|
|
90
|
+
readonly status: number;
|
|
91
|
+
readonly statusText: string;
|
|
92
|
+
json(): Promise<unknown>;
|
|
93
|
+
text(): Promise<string>;
|
|
94
|
+
}>;
|
|
95
|
+
export interface GeminiAgentServiceDependencies {
|
|
96
|
+
readonly context: ExtensionContext;
|
|
97
|
+
readonly provider: GeminiTextProvider;
|
|
98
|
+
readonly formatLabel: (label: I18nLabel | string) => string;
|
|
99
|
+
}
|
|
100
|
+
export interface GeminiSettingsReadOptions {
|
|
101
|
+
readonly config: ExtensionConfigurationStore;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,2BAA2B,EAC3B,cAAc,EACd,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,wBAAwB,GAAG,mBAAmB,GAAG,eAAe,CAAC;AAC1G,MAAM,MAAM,wBAAwB,GAAG,WAAW,GAAG,UAAU,CAAC;AAChE,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,CAAC;CAChD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;CAChD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,0BAA0B,GAAG,IAAI,CAAC;IACxD,QAAQ,CAAC,YAAY,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,IAAI,0BAA0B,CAAC;IAC1C,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5C,YAAY,IAAI,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACrD,cAAc,IAAI,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACtD,SAAS,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACpF,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,UAAU,IAAI,IAAI,CAAC;IACnB,WAAW,IAAI,IAAI,CAAC;IACpB,UAAU,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAC;CACtC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CACxC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,KAAK,MAAM,CAAC;IAC5D,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC9C;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B,KAAK,OAAO,CAAC;IACZ,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,KAAK,MAAM,CAAC;CAC7D;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAC;CAC9C"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,UAAU,CAAC"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,8BAA8B,GAAG,OAAO,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mdwrk/extension-gemini-agent",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"engines": {
|
|
10
|
+
"node": ">=20 <23"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"README.md"
|
|
15
|
+
],
|
|
16
|
+
"sideEffects": false,
|
|
17
|
+
"keywords": [
|
|
18
|
+
"markdown-workspace",
|
|
19
|
+
"extension",
|
|
20
|
+
"gemini",
|
|
21
|
+
"ai",
|
|
22
|
+
"agent"
|
|
23
|
+
],
|
|
24
|
+
"description": "First-party Gemini workflow extension for Markdown Workspace with read-only document operations, draft-based writeback, and a bundled operator view.",
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@mdwrk/extension-host": "^1.0.1",
|
|
27
|
+
"@mdwrk/extension-manifest": "^1.0.0",
|
|
28
|
+
"@mdwrk/extension-runtime": "^1.0.1"
|
|
29
|
+
},
|
|
30
|
+
"peerDependencies": {
|
|
31
|
+
"react": "^19.0.0",
|
|
32
|
+
"react-dom": "^19.0.0"
|
|
33
|
+
},
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build:deps": "npm run build -w @mdwrk/extension-manifest && npm run build -w @mdwrk/extension-host && npm run build -w @mdwrk/extension-runtime",
|
|
36
|
+
"build": "npm run build:deps && tsc -p tsconfig.json",
|
|
37
|
+
"typecheck": "npm run build:deps && tsc --noEmit -p tsconfig.json",
|
|
38
|
+
"lint": "npm run typecheck",
|
|
39
|
+
"test": "npm run build && node ./tests/run-smoke.mjs",
|
|
40
|
+
"prepack": "npm run build"
|
|
41
|
+
},
|
|
42
|
+
"exports": {
|
|
43
|
+
".": {
|
|
44
|
+
"types": "./dist/index.d.ts",
|
|
45
|
+
"import": "./dist/index.js"
|
|
46
|
+
},
|
|
47
|
+
"./version": {
|
|
48
|
+
"types": "./dist/version.d.ts",
|
|
49
|
+
"import": "./dist/version.js"
|
|
50
|
+
},
|
|
51
|
+
"./types": {
|
|
52
|
+
"types": "./dist/types.d.ts",
|
|
53
|
+
"import": "./dist/types.js"
|
|
54
|
+
},
|
|
55
|
+
"./constants": {
|
|
56
|
+
"types": "./dist/constants.d.ts",
|
|
57
|
+
"import": "./dist/constants.js"
|
|
58
|
+
},
|
|
59
|
+
"./manifest": {
|
|
60
|
+
"types": "./dist/manifest.d.ts",
|
|
61
|
+
"import": "./dist/manifest.js"
|
|
62
|
+
},
|
|
63
|
+
"./i18n": {
|
|
64
|
+
"types": "./dist/i18n.d.ts",
|
|
65
|
+
"import": "./dist/i18n.js"
|
|
66
|
+
},
|
|
67
|
+
"./settings": {
|
|
68
|
+
"types": "./dist/settings.d.ts",
|
|
69
|
+
"import": "./dist/settings.js"
|
|
70
|
+
},
|
|
71
|
+
"./context": {
|
|
72
|
+
"types": "./dist/context.d.ts",
|
|
73
|
+
"import": "./dist/context.js"
|
|
74
|
+
},
|
|
75
|
+
"./prompt": {
|
|
76
|
+
"types": "./dist/prompt.d.ts",
|
|
77
|
+
"import": "./dist/prompt.js"
|
|
78
|
+
},
|
|
79
|
+
"./provider": {
|
|
80
|
+
"types": "./dist/provider.d.ts",
|
|
81
|
+
"import": "./dist/provider.js"
|
|
82
|
+
},
|
|
83
|
+
"./service": {
|
|
84
|
+
"types": "./dist/service.d.ts",
|
|
85
|
+
"import": "./dist/service.js"
|
|
86
|
+
},
|
|
87
|
+
"./bundled": {
|
|
88
|
+
"types": "./dist/createGeminiAgentBundledEntry.d.ts",
|
|
89
|
+
"import": "./dist/createGeminiAgentBundledEntry.js"
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
"main": "./dist/index.js",
|
|
93
|
+
"types": "./dist/index.d.ts",
|
|
94
|
+
"author": "Jacob Stewart <jacob@swarmauri.com>",
|
|
95
|
+
"homepage": "https://mdwrk.com"
|
|
96
|
+
}
|