@botiverse/oar 0.75.0 → 0.76.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/README.md +16 -9
- package/dist/community/morph/session.d.ts.map +1 -1
- package/dist/community/morph/session.js +1 -0
- package/dist/community/morph/session.js.map +1 -1
- package/dist/contracts/control.d.ts +26 -0
- package/dist/contracts/control.d.ts.map +1 -0
- package/dist/contracts/control.js +2 -0
- package/dist/contracts/control.js.map +1 -0
- package/dist/contracts/goal.d.ts +36 -0
- package/dist/contracts/goal.d.ts.map +1 -0
- package/dist/contracts/goal.js +2 -0
- package/dist/contracts/goal.js.map +1 -0
- package/dist/contracts/index.d.ts +1 -0
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/input.d.ts +9 -0
- package/dist/contracts/input.d.ts.map +1 -1
- package/dist/contracts/login.d.ts +10 -5
- package/dist/contracts/login.d.ts.map +1 -1
- package/dist/contracts/records.d.ts +15 -12
- package/dist/contracts/records.d.ts.map +1 -1
- package/dist/contracts/runtime.d.ts +1 -1
- package/dist/contracts/runtime.d.ts.map +1 -1
- package/dist/contracts/session-options.d.ts +7 -0
- package/dist/contracts/session-options.d.ts.map +1 -1
- package/dist/contracts/session.d.ts +9 -25
- package/dist/contracts/session.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/observe/agent-status.d.ts.map +1 -1
- package/dist/observe/agent-status.js +1 -0
- package/dist/observe/agent-status.js.map +1 -1
- package/dist/observe/display-text.d.ts.map +1 -1
- package/dist/observe/display-text.js +3 -0
- package/dist/observe/display-text.js.map +1 -1
- package/dist/observe/session-view-events.d.ts.map +1 -1
- package/dist/observe/session-view-events.js +3 -0
- package/dist/observe/session-view-events.js.map +1 -1
- package/dist/runtimes/antigravity/options.d.ts.map +1 -1
- package/dist/runtimes/antigravity/options.js +1 -0
- package/dist/runtimes/antigravity/options.js.map +1 -1
- package/dist/runtimes/claude/index.d.ts +1 -0
- package/dist/runtimes/claude/index.d.ts.map +1 -1
- package/dist/runtimes/claude/index.js +2 -0
- package/dist/runtimes/claude/index.js.map +1 -1
- package/dist/runtimes/claude/launch-args.d.ts +2 -0
- package/dist/runtimes/claude/launch-args.d.ts.map +1 -1
- package/dist/runtimes/claude/launch-args.js +27 -2
- package/dist/runtimes/claude/launch-args.js.map +1 -1
- package/dist/runtimes/claude/launch.d.ts.map +1 -1
- package/dist/runtimes/claude/launch.js +7 -8
- package/dist/runtimes/claude/launch.js.map +1 -1
- package/dist/runtimes/claude/options.d.ts +3 -0
- package/dist/runtimes/claude/options.d.ts.map +1 -0
- package/dist/runtimes/claude/options.js +4 -0
- package/dist/runtimes/claude/options.js.map +1 -0
- package/dist/runtimes/codex/failure.d.ts.map +1 -1
- package/dist/runtimes/codex/failure.js +2 -1
- package/dist/runtimes/codex/failure.js.map +1 -1
- package/dist/runtimes/codex/goal.d.ts +13 -0
- package/dist/runtimes/codex/goal.d.ts.map +1 -0
- package/dist/runtimes/codex/goal.js +81 -0
- package/dist/runtimes/codex/goal.js.map +1 -0
- package/dist/runtimes/codex/projection.d.ts.map +1 -1
- package/dist/runtimes/codex/projection.js +5 -0
- package/dist/runtimes/codex/projection.js.map +1 -1
- package/dist/runtimes/codex/rpc-control.d.ts +3 -3
- package/dist/runtimes/codex/rpc-control.d.ts.map +1 -1
- package/dist/runtimes/codex/rpc-control.js +4 -5
- package/dist/runtimes/codex/rpc-control.js.map +1 -1
- package/dist/runtimes/codex/session.d.ts.map +1 -1
- package/dist/runtimes/codex/session.js +237 -229
- package/dist/runtimes/codex/session.js.map +1 -1
- package/dist/runtimes/codex/tool-denials.d.ts +1 -1
- package/dist/runtimes/codex/tool-denials.d.ts.map +1 -1
- package/dist/runtimes/codex/tool-denials.js +3 -10
- package/dist/runtimes/codex/tool-denials.js.map +1 -1
- package/dist/runtimes/cursor/model.d.ts.map +1 -1
- package/dist/runtimes/cursor/model.js +1 -0
- package/dist/runtimes/cursor/model.js.map +1 -1
- package/dist/runtimes/grok/options.d.ts.map +1 -1
- package/dist/runtimes/grok/options.js +1 -0
- package/dist/runtimes/grok/options.js.map +1 -1
- package/dist/runtimes/kimi/auth-status.d.ts +10 -0
- package/dist/runtimes/kimi/auth-status.d.ts.map +1 -0
- package/dist/runtimes/kimi/auth-status.js +73 -0
- package/dist/runtimes/kimi/auth-status.js.map +1 -0
- package/dist/runtimes/kimi/index.d.ts +4 -0
- package/dist/runtimes/kimi/index.d.ts.map +1 -1
- package/dist/runtimes/kimi/index.js +3 -0
- package/dist/runtimes/kimi/index.js.map +1 -1
- package/dist/runtimes/kimi/login-browser.d.ts +9 -0
- package/dist/runtimes/kimi/login-browser.d.ts.map +1 -0
- package/dist/runtimes/kimi/login-browser.js +42 -0
- package/dist/runtimes/kimi/login-browser.js.map +1 -0
- package/dist/runtimes/kimi/login.d.ts +10 -0
- package/dist/runtimes/kimi/login.d.ts.map +1 -0
- package/dist/runtimes/kimi/login.js +104 -0
- package/dist/runtimes/kimi/login.js.map +1 -0
- package/dist/runtimes/kimi/logout.d.ts +5 -0
- package/dist/runtimes/kimi/logout.d.ts.map +1 -0
- package/dist/runtimes/kimi/logout.js +20 -0
- package/dist/runtimes/kimi/logout.js.map +1 -0
- package/dist/runtimes/kimi/options.d.ts.map +1 -1
- package/dist/runtimes/kimi/options.js +1 -0
- package/dist/runtimes/kimi/options.js.map +1 -1
- package/dist/runtimes/opencode/options.d.ts.map +1 -1
- package/dist/runtimes/opencode/options.js +1 -0
- package/dist/runtimes/opencode/options.js.map +1 -1
- package/dist/runtimes/pi/open.d.ts.map +1 -1
- package/dist/runtimes/pi/open.js +1 -0
- package/dist/runtimes/pi/open.js.map +1 -1
- package/dist/runtimes/pi-durable/options.d.ts.map +1 -1
- package/dist/runtimes/pi-durable/options.js +1 -0
- package/dist/runtimes/pi-durable/options.js.map +1 -1
- package/dist/runtimes/qoder/options.d.ts.map +1 -1
- package/dist/runtimes/qoder/options.js +1 -0
- package/dist/runtimes/qoder/options.js.map +1 -1
- package/dist/runtimes/qwen/auth-files.d.ts +15 -0
- package/dist/runtimes/qwen/auth-files.d.ts.map +1 -0
- package/dist/runtimes/qwen/auth-files.js +91 -0
- package/dist/runtimes/qwen/auth-files.js.map +1 -0
- package/dist/runtimes/qwen/auth-status.d.ts +4 -0
- package/dist/runtimes/qwen/auth-status.d.ts.map +1 -0
- package/dist/runtimes/qwen/auth-status.js +114 -0
- package/dist/runtimes/qwen/auth-status.js.map +1 -0
- package/dist/runtimes/qwen/index.d.ts +5 -0
- package/dist/runtimes/qwen/index.d.ts.map +1 -1
- package/dist/runtimes/qwen/index.js +5 -0
- package/dist/runtimes/qwen/index.js.map +1 -1
- package/dist/runtimes/qwen/options.d.ts.map +1 -1
- package/dist/runtimes/qwen/options.js +1 -0
- package/dist/runtimes/qwen/options.js.map +1 -1
- package/dist/runtimes/qwen/provider-auth-rpc.d.ts +4 -0
- package/dist/runtimes/qwen/provider-auth-rpc.d.ts.map +1 -0
- package/dist/runtimes/qwen/provider-auth-rpc.js +134 -0
- package/dist/runtimes/qwen/provider-auth-rpc.js.map +1 -0
- package/dist/runtimes/qwen/provider-auth.d.ts +66 -0
- package/dist/runtimes/qwen/provider-auth.d.ts.map +1 -0
- package/dist/runtimes/qwen/provider-auth.js +19 -0
- package/dist/runtimes/qwen/provider-auth.js.map +1 -0
- package/dist/shared/acp/process.d.ts +7 -1
- package/dist/shared/acp/process.d.ts.map +1 -1
- package/dist/shared/acp/process.js +18 -1
- package/dist/shared/acp/process.js.map +1 -1
- package/dist/shared/seal-session.d.ts.map +1 -1
- package/dist/shared/seal-session.js +6 -0
- package/dist/shared/seal-session.js.map +1 -1
- package/dist/shared/session-credentials.d.ts.map +1 -1
- package/dist/shared/session-credentials.js +5 -0
- package/dist/shared/session-credentials.js.map +1 -1
- package/dist/shared/session-options.d.ts.map +1 -1
- package/dist/shared/session-options.js +4 -1
- package/dist/shared/session-options.js.map +1 -1
- package/package.json +3 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { UnsupportedOptionError } from "../../contracts/errors.js";
|
|
2
2
|
export const qoderRefusedSessionOptions = {
|
|
3
|
+
goals: "This runtime interface exposes no structured native goal controls",
|
|
3
4
|
serviceTier: "Qoder has no verified service-tier option",
|
|
4
5
|
outputSchema: "Qoder has no verified structured-output option for long-lived sessions",
|
|
5
6
|
userConfiguration: "Qoder has no verified way to exclude user configuration while preserving native credentials and history",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sources":["../../../src/runtimes/qoder/options.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,CAAC,MAAM,0BAA0B,GAA0B;IAC/D,WAAW,EAAE,2CAA2C;IACxD,YAAY,EAAE,wEAAwE;IACtF,iBAAiB,EAAE,yGAAyG;IAC5H,IAAI,EAAE,wDAAwD;CAC/D,CAAC;AACF,MAAM,UAAU,oBAAoB,CAAC,IAAmC;IACtE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI;QAC7I,gBAAgB,EAAE,UAAU,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,QAAQ,EAAE,IAAI;QACvI,wBAAwB,EAAE,2BAA2B,EAAE,IAAI,CAAC,CAAC,CAAC;IAChE,KAAK,MAAM,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QACzC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,sBAAsB,CAAC,YAAY,EAAE,oCAAoC,IAAI,8CAA8C,CAAC,CAAC;QAAC,CAAC;IACpK,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"options.js","sources":["../../../src/runtimes/qoder/options.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,CAAC,MAAM,0BAA0B,GAA0B;IAC/D,KAAK,EAAE,mEAAmE;IAC1E,WAAW,EAAE,2CAA2C;IACxD,YAAY,EAAE,wEAAwE;IACtF,iBAAiB,EAAE,yGAAyG;IAC5H,IAAI,EAAE,wDAAwD;CAC/D,CAAC;AACF,MAAM,UAAU,oBAAoB,CAAC,IAAmC;IACtE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI;QAC7I,gBAAgB,EAAE,UAAU,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,QAAQ,EAAE,IAAI;QACvI,wBAAwB,EAAE,2BAA2B,EAAE,IAAI,CAAC,CAAC,CAAC;IAChE,KAAK,MAAM,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QACzC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,sBAAsB,CAAC,YAAY,EAAE,oCAAoC,IAAI,8CAA8C,CAAC,CAAC;QAAC,CAAC;IACpK,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type JsonRecord } from "../../shared/json.js";
|
|
2
|
+
export interface QwenSettingsLayer {
|
|
3
|
+
readonly source: string;
|
|
4
|
+
readonly value: JsonRecord;
|
|
5
|
+
}
|
|
6
|
+
export interface QwenAuthFiles {
|
|
7
|
+
readonly home: string;
|
|
8
|
+
readonly qwenHome: string;
|
|
9
|
+
readonly layers: readonly QwenSettingsLayer[];
|
|
10
|
+
readonly dotenv: readonly Readonly<Record<string, string>>[];
|
|
11
|
+
}
|
|
12
|
+
export declare function qwenCredentialFileExists(file: string, signal: AbortSignal): Promise<boolean>;
|
|
13
|
+
/** Qwen 0.26.2 user/system scope only. No workspace walk, migration, backup or write. */
|
|
14
|
+
export declare function readQwenAuthFiles(env: Readonly<NodeJS.ProcessEnv>, signal: AbortSignal): Promise<QwenAuthFiles>;
|
|
15
|
+
//# sourceMappingURL=auth-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-files.d.ts","sources":["../../../src/runtimes/qwen/auth-files.ts"],"names":[],"mappings":"AAMA,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAAE;AAC1F,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;CAC9D;AAeD,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAWlG;AAOD,yFAAyF;AACzF,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAiCrH"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { readFile, stat } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { parse } from "dotenv";
|
|
4
|
+
import stripJsonComments from "strip-json-comments";
|
|
5
|
+
import { environmentValue } from "../../shared/environment.js";
|
|
6
|
+
import { environmentHome } from "../../shared/environment-home.js";
|
|
7
|
+
import { asRecord } from "../../shared/json.js";
|
|
8
|
+
/** Read configuration, never a token file; unreadable/non-regular files stay unknown. */
|
|
9
|
+
async function readConfiguration(file, signal) {
|
|
10
|
+
signal.throwIfAborted();
|
|
11
|
+
try {
|
|
12
|
+
const info = await stat(file);
|
|
13
|
+
signal.throwIfAborted();
|
|
14
|
+
if (!info.isFile() || info.size > 4 * 1024 * 1024) {
|
|
15
|
+
throw new Error("Unsupported Qwen configuration file");
|
|
16
|
+
}
|
|
17
|
+
return await readFile(file, { encoding: "utf8", signal });
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
throw new Error("Qwen configuration could not be read", { cause: error });
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export async function qwenCredentialFileExists(file, signal) {
|
|
27
|
+
try {
|
|
28
|
+
signal.throwIfAborted();
|
|
29
|
+
const info = await stat(file);
|
|
30
|
+
signal.throwIfAborted();
|
|
31
|
+
return info.isFile();
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
throw new Error("Credential metadata could not be read", { cause: error });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function configDirectory(value, home) {
|
|
41
|
+
if (value === undefined || value === "") {
|
|
42
|
+
return path.join(home, ".qwen");
|
|
43
|
+
}
|
|
44
|
+
return value === "~" || value.startsWith("~/") || value.startsWith("~\\")
|
|
45
|
+
? path.join(home, ...value.slice(2).split(/[/\\]+/u).filter(Boolean)) : path.resolve(value);
|
|
46
|
+
}
|
|
47
|
+
/** Qwen 0.26.2 user/system scope only. No workspace walk, migration, backup or write. */
|
|
48
|
+
export async function readQwenAuthFiles(env, signal) {
|
|
49
|
+
const home = environmentHome(env);
|
|
50
|
+
const initial = environmentValue(env, "QWEN_HOME");
|
|
51
|
+
let qwenHome = configDirectory(initial, home);
|
|
52
|
+
const readEnv = async (file) => parse(await readConfiguration(file, signal) ?? "");
|
|
53
|
+
// Native bootstrap reads QWEN_HOME before locating settings. An explicitly
|
|
54
|
+
// present empty value prevents this bootstrap assignment too.
|
|
55
|
+
if (initial === undefined) {
|
|
56
|
+
for (const file of [path.join(qwenHome, ".env"), path.join(home, ".env")]) {
|
|
57
|
+
const value = environmentValue(await readEnv(file), "QWEN_HOME");
|
|
58
|
+
if (value !== undefined && value !== "") {
|
|
59
|
+
qwenHome = configDirectory(value, home);
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const defaultSystem = process.platform === "darwin" ? "/Library/Application Support/QwenCode/settings.json"
|
|
65
|
+
: (process.platform === "win32" ? String.raw `C:\ProgramData\qwen-code\settings.json` : "/etc/qwen-code/settings.json");
|
|
66
|
+
const systemOverride = environmentValue(env, "QWEN_CODE_SYSTEM_SETTINGS_PATH");
|
|
67
|
+
const system = systemOverride === undefined || systemOverride === "" ? defaultSystem : systemOverride;
|
|
68
|
+
const defaultsOverride = environmentValue(env, "QWEN_CODE_SYSTEM_DEFAULTS_PATH");
|
|
69
|
+
const defaults = defaultsOverride === undefined || defaultsOverride === "" ? path.join(path.dirname(system), "system-defaults.json") : defaultsOverride;
|
|
70
|
+
const layers = [];
|
|
71
|
+
for (const [source, file] of [["system defaults", defaults], ["user settings", path.join(qwenHome, "settings.json")], ["system settings", system]]) {
|
|
72
|
+
const content = await readConfiguration(file, signal);
|
|
73
|
+
if (content === undefined) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const parsed = JSON.parse(stripJsonComments(content.replace(/^\uFEFF/u, "")));
|
|
77
|
+
const value = asRecord(parsed);
|
|
78
|
+
if (value === null) {
|
|
79
|
+
throw new Error("Qwen settings is not an object");
|
|
80
|
+
}
|
|
81
|
+
const version = value.$version;
|
|
82
|
+
if (version !== undefined && (!Number.isInteger(version) || typeof version !== "number" || version < 1 || version > 4)) {
|
|
83
|
+
throw new Error("Unknown Qwen settings version");
|
|
84
|
+
}
|
|
85
|
+
layers.push({ source, value });
|
|
86
|
+
}
|
|
87
|
+
const files = [...new Set([path.join(qwenHome, ".env"), path.join(home, ".qwen", ".env"), path.join(home, ".env")])];
|
|
88
|
+
const dotenv = await Promise.all(files.map(async (file) => { const value = await readEnv(file); return value; }));
|
|
89
|
+
return { home, qwenHome, layers, dotenv };
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=auth-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-files.js","sources":["../../../src/runtimes/qwen/auth-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-status.d.ts","sources":["../../../src/runtimes/qwen/auth-status.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiC,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AA4EhG,2FAA2F;AAC3F,eAAO,MAAM,cAAc,EAAE,gBAiBG,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { environmentValue, sessionEnvironment } from "../../shared/environment.js";
|
|
3
|
+
import { asRecord, asRecordList } from "../../shared/json.js";
|
|
4
|
+
import { qwenCredentialFileExists, readQwenAuthFiles } from "./auth-files.js";
|
|
5
|
+
const SOURCE = "Qwen user/system credential configuration";
|
|
6
|
+
const SCOPE = "Project settings, workspace .env files and launch arguments may still supply credentials.";
|
|
7
|
+
// Native auth protocols plus the provider presets shipped in Qwen 0.26.2.
|
|
8
|
+
const KEY_NAMES = ["OPENAI_API_KEY", "ANTHROPIC_API_KEY", "GEMINI_API_KEY", "GOOGLE_API_KEY", "BAILIAN_CODING_PLAN_API_KEY", "BAILIAN_TOKEN_PLAN_API_KEY", "OPENROUTER_API_KEY", "REQUESTY_API_KEY", "DASHSCOPE_API_KEY", "QWENCLOUD_API_KEY", "QWENCLOUD_TOKEN_PLAN_API_KEY", "MOONSHOT_API_KEY", "IDEALAB_API_KEY", "MODELSCOPE_API_KEY", "MINIMAX_API_KEY", "ZAI_API_KEY", "DEEPSEEK_API_KEY", "XAI_API_KEY"];
|
|
9
|
+
const AUTH_TYPES = new Set(["openai", "openai-responses", "anthropic", "gemini", "vertex-ai", "qwen-oauth"]);
|
|
10
|
+
const present = (value) => typeof value === "string" && value.length > 0;
|
|
11
|
+
const unknown = (detail) => ({ kind: "unknown", source: SOURCE, detail });
|
|
12
|
+
function configuredSources(env, files) {
|
|
13
|
+
// This is a presence audit, not a second native credential resolver. A
|
|
14
|
+
// configured source stays unknown even if another layer shadows it.
|
|
15
|
+
const keys = new Set(KEY_NAMES);
|
|
16
|
+
const sources = new Set();
|
|
17
|
+
const settingsEnv = [];
|
|
18
|
+
for (const { source, value } of files.layers) {
|
|
19
|
+
const auth = asRecord(asRecord(value.security)?.auth);
|
|
20
|
+
const selected = auth?.selectedType ?? value.selectedAuthType;
|
|
21
|
+
const type = typeof selected === "string" && AUTH_TYPES.has(selected) ? ` (${selected})` : "";
|
|
22
|
+
if (present(auth?.apiKey)) {
|
|
23
|
+
sources.add(`${source}: security.auth.apiKey${type}`);
|
|
24
|
+
}
|
|
25
|
+
if (selected === "vertex-ai" || selected === "qwen-oauth") {
|
|
26
|
+
sources.add(`${source}: selectedType${type}; cached or external credentials are not validated`);
|
|
27
|
+
}
|
|
28
|
+
else if (present(selected) && type === "") {
|
|
29
|
+
sources.add(`${source}: unrecognized selectedType`);
|
|
30
|
+
}
|
|
31
|
+
if (auth?.useExternal === true || value.useExternalAuth === true) {
|
|
32
|
+
sources.add(`${source}: external authentication configured`);
|
|
33
|
+
}
|
|
34
|
+
const entries = Object.entries(asRecord(value.env) ?? {});
|
|
35
|
+
settingsEnv.push(Object.fromEntries(entries.filter((entry) => typeof entry[1] === "string")));
|
|
36
|
+
for (const models of Object.values(asRecord(value.modelProviders) ?? {})) {
|
|
37
|
+
for (const model of asRecordList(models)) {
|
|
38
|
+
if (present(model.envKey)) {
|
|
39
|
+
keys.add(model.envKey);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const value = (name) => {
|
|
45
|
+
for (const map of [env, ...files.dotenv, ...settingsEnv.toReversed()]) {
|
|
46
|
+
const found = environmentValue(map, name);
|
|
47
|
+
if (present(found)) {
|
|
48
|
+
return found;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return undefined;
|
|
52
|
+
};
|
|
53
|
+
for (const name of keys) {
|
|
54
|
+
if (!present(value(name))) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const label = /^[A-Za-z_][\w]{0,127}$/u.test(name) ? name : "custom modelProviders envKey";
|
|
58
|
+
const origin = present(environmentValue(env, name)) ? "environment" : "user .env or settings.env";
|
|
59
|
+
sources.add(`${origin}: ${label}`);
|
|
60
|
+
}
|
|
61
|
+
return { sources: [...sources], value };
|
|
62
|
+
}
|
|
63
|
+
async function inspectCredentials(env, signal) {
|
|
64
|
+
const files = await readQwenAuthFiles(env, signal);
|
|
65
|
+
const { sources, value } = configuredSources(env, files);
|
|
66
|
+
const observed = [...sources];
|
|
67
|
+
// ADC may come from a file, federation executable or metadata service.
|
|
68
|
+
// Inspect only file presence; never load the Google client or read a token.
|
|
69
|
+
const explicitAdc = value("GOOGLE_APPLICATION_CREDENTIALS");
|
|
70
|
+
if (explicitAdc !== undefined) {
|
|
71
|
+
const exists = await qwenCredentialFileExists(explicitAdc, signal);
|
|
72
|
+
observed.push(`GOOGLE_APPLICATION_CREDENTIALS file ${exists ? "exists" : "not found"}; contents and validity were not read`);
|
|
73
|
+
}
|
|
74
|
+
if (present(value("QWEN_OAUTH"))) {
|
|
75
|
+
observed.push("QWEN_OAUTH requests legacy OAuth; cached credentials were not validated");
|
|
76
|
+
}
|
|
77
|
+
if (present(value("GOOGLE_CLOUD_PROJECT"))) {
|
|
78
|
+
observed.push("GOOGLE_CLOUD_PROJECT: Vertex ADC may use external credentials");
|
|
79
|
+
}
|
|
80
|
+
const appData = value("APPDATA");
|
|
81
|
+
const adc = process.platform === "win32"
|
|
82
|
+
? (appData === undefined ? undefined : path.join(appData, "gcloud", "application_default_credentials.json"))
|
|
83
|
+
: path.join(files.home, ".config", "gcloud", "application_default_credentials.json");
|
|
84
|
+
if (adc !== undefined && await qwenCredentialFileExists(adc, signal)) {
|
|
85
|
+
observed.push("Vertex ADC file exists; contents and validity were not read");
|
|
86
|
+
}
|
|
87
|
+
if (await qwenCredentialFileExists(path.join(files.qwenHome, "oauth_creds.json"), signal)) {
|
|
88
|
+
observed.push("legacy Qwen OAuth credential file exists; free tier discontinued 2026-04-15");
|
|
89
|
+
}
|
|
90
|
+
signal.throwIfAborted();
|
|
91
|
+
return observed.length > 0
|
|
92
|
+
? unknown(`Configured sources: ${observed.join("; ")}. No credential was validated. ${SCOPE}`)
|
|
93
|
+
: { kind: "logged_out", source: SOURCE, detail: `No user/system provider credential found. Configure OPENAI_API_KEY + OPENAI_BASE_URL + OPENAI_MODEL, or BAILIAN_CODING_PLAN_API_KEY / BAILIAN_TOKEN_PLAN_API_KEY with the region's plan URL, or OPENROUTER_API_KEY / REQUESTY_API_KEY with its provider URL. ${SCOPE}` };
|
|
94
|
+
}
|
|
95
|
+
/** Presence only. Never starts Qwen, sends requests, refreshes or reads token contents. */
|
|
96
|
+
export const qwenAuthStatus = Object.assign(async (_installation, options = {}) => {
|
|
97
|
+
const abort = new AbortController();
|
|
98
|
+
const deadline = Promise.withResolvers();
|
|
99
|
+
const timer = setTimeout(() => {
|
|
100
|
+
abort.abort();
|
|
101
|
+
deadline.reject(new Error("Qwen credential inspection timed out"));
|
|
102
|
+
}, options.timeoutMs ?? 20_000);
|
|
103
|
+
timer.unref();
|
|
104
|
+
try {
|
|
105
|
+
return await Promise.race([inspectCredentials(sessionEnvironment(options.env), abort.signal), deadline.promise]);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return unknown(abort.signal.aborted ? "Qwen local credential inspection timed out" : "Qwen user/system configuration could not be completely inspected; credentials may be configured");
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
clearTimeout(timer);
|
|
112
|
+
}
|
|
113
|
+
}, { localOnly: true });
|
|
114
|
+
//# sourceMappingURL=auth-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-status.js","sources":["../../../src/runtimes/qwen/auth-status.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAsB,MAAM,iBAAiB,CAAC;AAElG,MAAM,MAAM,GAAG,2CAA2C,CAAC;AAC3D,MAAM,KAAK,GAAG,2FAA2F,CAAC;AAC1G,0EAA0E;AAC1E,MAAM,SAAS,GAAG,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC;AACjZ,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;AAC7G,MAAM,OAAO,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACnG,MAAM,OAAO,GAAG,CAAC,MAAc,EAAc,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAE9F,SAAS,iBAAiB,CAAC,GAAgC,EAAE,KAAoB;IAC/E,uEAAuE;IACvE,oEAAoE;IACpE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,WAAW,GAAkC,EAAE,CAAC;IACtD,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,EAAE,YAAY,IAAI,KAAK,CAAC,gBAAgB,CAAC;QAC9D,MAAM,IAAI,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,yBAAyB,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QACrF,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,iBAAiB,IAAI,oDAAoD,CAAC,CAAC;QAAC,CAAC;aAC1J,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,6BAA6B,CAAC,CAAC;QAAC,CAAC;QACnG,IAAI,IAAI,EAAE,WAAW,KAAK,IAAI,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,sCAAsC,CAAC,CAAC;QAAC,CAAC;QACnI,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAA6B,EAAE,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzH,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACzE,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;oBAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,IAAY,EAAsB,EAAE;QACjD,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;YACtE,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC1C,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAC,OAAO,KAAK,CAAC;YAAC,CAAC;QACvC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QACxC,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,8BAA8B,CAAC;QAC3F,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,2BAA2B,CAAC;QAClG,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,GAAgC,EAAE,MAAmB;IACrF,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAC9B,uEAAuE;IACvE,4EAA4E;IAC5E,MAAM,WAAW,GAAG,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC5D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACnE,QAAQ,CAAC,IAAI,CAAC,uCAAuC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,uCAAuC,CAAC,CAAC;IAC/H,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;IAAC,CAAC;IAC/H,IAAI,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;IAAC,CAAC;IAC/H,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;QACtC,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,sCAAsC,CAAC,CAAC;QAC5G,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,sCAAsC,CAAC,CAAC;IACvF,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,wBAAwB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAAC,CAAC;IACvJ,IAAI,MAAM,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;IAAC,CAAC;IAC5L,MAAM,CAAC,cAAc,EAAE,CAAC;IACxB,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC;QACxB,CAAC,CAAC,OAAO,CAAC,uBAAuB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,kCAAkC,KAAK,EAAE,CAAC;QAC9F,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gQAAgQ,KAAK,EAAE,EAAE,CAAC;AAC9T,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,MAAM,cAAc,GAAqB,MAAM,CAAC,MAAM,CAAC,KAAK,EACjE,aAAoC,EAAE,OAAO,GAAsB,EAAE,EAChD,EAAE;IACvB,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAS,CAAC;IAChD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAC;IACrE,CAAC,EAAE,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;IAChC,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACnH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,iGAAiG,CAAC,CAAC;IAC1L,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC,EAAE,EAAE,SAAS,EAAE,IAAa,EAAE,CAAC,CAAC"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export { createQwenProviderAuth, QwenProviderAuthError } from "./provider-auth.js";
|
|
2
|
+
export type { QwenProvider, QwenProviderAuth, QwenProviderAuthOptions, QwenProviderAuthErrorKind, QwenProviderConnectOptions, QwenProviderConnectResult } from "./provider-auth.js";
|
|
1
3
|
export declare const qwenRuntime: {
|
|
2
4
|
readonly id: "qwen";
|
|
3
5
|
readonly brand: {
|
|
@@ -10,6 +12,9 @@ export declare const qwenRuntime: {
|
|
|
10
12
|
};
|
|
11
13
|
readonly refusedSessionOptions: Readonly<Partial<Record<import("../../contracts/runtime.js").RefusableSessionOption, string>>>;
|
|
12
14
|
readonly installation: import("../../browser.js").InstallationProbe;
|
|
15
|
+
readonly authStatus: ((installation: import("../../browser.js").AvailableInstallation, options?: import("../../browser.js").AuthStatusOptions | undefined) => Promise<import("../../browser.js").AuthStatus>) & {
|
|
16
|
+
localOnly: true;
|
|
17
|
+
};
|
|
13
18
|
readonly installPlan: import("../../browser.js").InstallPlanner;
|
|
14
19
|
readonly install: import("../../browser.js").Installer;
|
|
15
20
|
readonly listModels: (installation: import("../../browser.js").AvailableInstallation, options?: import("../../browser.js").ListModelsOptions | undefined) => Promise<import("../../browser.js").ListModelsResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sources":["../../../src/runtimes/qwen/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["../../../src/runtimes/qwen/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACnF,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAEpL,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;CAkBtB,CAAC"}
|
|
@@ -4,10 +4,15 @@ import { onFirstCall } from "../../shared/lazy.js";
|
|
|
4
4
|
import { qwenInstallation } from "./installation.js";
|
|
5
5
|
import { qwenInstall, qwenInstallPlan } from "./install.js";
|
|
6
6
|
import { qwenRefusedSessionOptions } from "./options.js";
|
|
7
|
+
export { createQwenProviderAuth, QwenProviderAuthError } from "./provider-auth.js";
|
|
7
8
|
export const qwenRuntime = defineRuntime({
|
|
8
9
|
id: "qwen", brand: runtimeBrands.qwen,
|
|
9
10
|
refusedSessionOptions: qwenRefusedSessionOptions,
|
|
10
11
|
installation: qwenInstallation,
|
|
12
|
+
authStatus: Object.assign(onFirstCall(async () => {
|
|
13
|
+
const { qwenAuthStatus } = await import("./auth-status.js");
|
|
14
|
+
return qwenAuthStatus;
|
|
15
|
+
}), { localOnly: true }),
|
|
11
16
|
installPlan: qwenInstallPlan,
|
|
12
17
|
install: qwenInstall,
|
|
13
18
|
listModels: onFirstCall(async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/runtimes/qwen/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;IACvC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI;IACrC,qBAAqB,EAAE,yBAAyB;IAChD,YAAY,EAAE,gBAAgB;IAC9B,WAAW,EAAE,eAAe;IAC5B,OAAO,EAAE,WAAW;IACpB,UAAU,EAAE,WAAW,CAAC,KAAK,IAAI,EAAE;QACjC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC5D,OAAO,cAAc,CAAC;IACxB,CAAC,CAAC;IACF,OAAO,EAAE,WAAW,CAAC,KAAK,IAAI,EAAE;QAC9B,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACrD,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;CACH,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/runtimes/qwen/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGnF,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;IACvC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI;IACrC,qBAAqB,EAAE,yBAAyB;IAChD,YAAY,EAAE,gBAAgB;IAC9B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;QAC/C,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC5D,OAAO,cAAc,CAAC;IACxB,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAa,EAAE,CAAC;IACjC,WAAW,EAAE,eAAe;IAC5B,OAAO,EAAE,WAAW;IACpB,UAAU,EAAE,WAAW,CAAC,KAAK,IAAI,EAAE;QACjC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC5D,OAAO,cAAc,CAAC;IACxB,CAAC,CAAC;IACF,OAAO,EAAE,WAAW,CAAC,KAAK,IAAI,EAAE;QAC9B,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACrD,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sources":["../../../src/runtimes/qwen/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGxE,eAAO,MAAM,yBAAyB,EAAE,
|
|
1
|
+
{"version":3,"file":"options.d.ts","sources":["../../../src/runtimes/qwen/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGxE,eAAO,MAAM,yBAAyB,EAAE,qBAMvC,CAAC;AAEF,gGAAgG;AAChG,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,CAiB7E"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { UnsupportedOptionError } from "../../contracts/errors.js";
|
|
2
2
|
export const qwenRefusedSessionOptions = {
|
|
3
|
+
goals: "This runtime interface exposes no structured native goal controls",
|
|
3
4
|
userConfiguration: "qwen has no verified separation of user configuration from its native login",
|
|
4
5
|
serviceTier: "Qwen's stream-json interface does not expose a service-tier setting",
|
|
5
6
|
outputSchema: "Qwen rejects --json-schema with its long-lived stream-json input protocol",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sources":["../../../src/runtimes/qwen/options.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,CAAC,MAAM,yBAAyB,GAA0B;IAC9D,iBAAiB,EAAE,6EAA6E;IAChG,WAAW,EAAE,qEAAqE;IAClF,YAAY,EAAE,2EAA2E;IACzF,IAAI,EAAE,sEAAsE;CAC7E,CAAC;AAEF,gGAAgG;AAChG,MAAM,UAAU,mBAAmB,CAAC,IAAmC;IACrE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;QACtB,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI;QACnF,cAAc,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO;QAC/E,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI;QACrE,oBAAoB,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc;QAChE,sBAAsB,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI;KACxD,CAAC,CAAC;IACH,KAAK,MAAM,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YACpE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,sBAAsB,CAAC,YAAY,EAAE,mCAAmC,IAAI,wFAAwF,CAAC,CAAC;QAClL,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"options.js","sources":["../../../src/runtimes/qwen/options.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,CAAC,MAAM,yBAAyB,GAA0B;IAC9D,KAAK,EAAE,mEAAmE;IAC1E,iBAAiB,EAAE,6EAA6E;IAChG,WAAW,EAAE,qEAAqE;IAClF,YAAY,EAAE,2EAA2E;IACzF,IAAI,EAAE,sEAAsE;CAC7E,CAAC;AAEF,gGAAgG;AAChG,MAAM,UAAU,mBAAmB,CAAC,IAAmC;IACrE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;QACtB,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI;QACnF,cAAc,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO;QAC/E,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI;QACrE,oBAAoB,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc;QAChE,sBAAsB,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI;KACxD,CAAC,CAAC;IACH,KAAK,MAAM,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YACpE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,sBAAsB,CAAC,YAAY,EAAE,mCAAmC,IAAI,wFAAwF,CAAC,CAAC;QAClL,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ExecutableInstallation } from "../../contracts/installation.js";
|
|
2
|
+
import { type QwenProviderAuth, type QwenProviderAuthOptions } from "./provider-auth.js";
|
|
3
|
+
export declare function qwenProviderAuth(installation: ExecutableInstallation, options: QwenProviderAuthOptions): QwenProviderAuth;
|
|
4
|
+
//# sourceMappingURL=provider-auth-rpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-auth-rpc.d.ts","sources":["../../../src/runtimes/qwen/provider-auth-rpc.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAM9E,OAAO,EAEc,KAAK,gBAAgB,EAAE,KAAK,uBAAuB,EAEvE,MAAM,oBAAoB,CAAC;AAmD5B,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,sBAAsB,EAAE,OAAO,EAAE,uBAAuB,GAAG,gBAAgB,CAiDzH"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/* oxlint-disable typescript/promise-function-async -- Deadline callbacks forward the official SDK promises. */
|
|
2
|
+
import { RequestError } from "@agentclientprotocol/sdk";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { AcpError } from "../../shared/acp/errors.js";
|
|
5
|
+
import { createAcpClient, methods, startAcpProcess, withAcpDeadline } from "../../shared/acp/process.js";
|
|
6
|
+
import { sessionEnvironment } from "../../shared/environment.js";
|
|
7
|
+
import { asRecord } from "../../shared/json.js";
|
|
8
|
+
import { redactText } from "../../shared/redact-text.js";
|
|
9
|
+
import { QwenProviderAuthError, } from "./provider-auth.js";
|
|
10
|
+
const LIST = "qwen/providers/list";
|
|
11
|
+
const CONNECT = "qwen/providers/connect";
|
|
12
|
+
/** No sessions or host callbacks: consume only response envelopes, never log other native output. */
|
|
13
|
+
function providerResponse(value, pending, redact) {
|
|
14
|
+
const row = asRecord(value);
|
|
15
|
+
if (row === null || row.jsonrpc !== "2.0" || "method" in row || (typeof row.id !== "number" && typeof row.id !== "string") || !pending.has(row.id)) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
const { id } = row;
|
|
19
|
+
const error = asRecord(row.error);
|
|
20
|
+
if (error !== null) {
|
|
21
|
+
if (typeof error.code !== "number") {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
pending.delete(id);
|
|
25
|
+
return { jsonrpc: "2.0", id, error: { code: error.code, message: "Qwen provider request failed" } };
|
|
26
|
+
}
|
|
27
|
+
if (!("result" in row)) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
pending.delete(id);
|
|
31
|
+
return { jsonrpc: "2.0", id, result: redactText(row.result, redact, (text) => redact(text) !== text) };
|
|
32
|
+
}
|
|
33
|
+
function provider(value) {
|
|
34
|
+
const row = asRecord(value);
|
|
35
|
+
if (row === null || typeof row.id !== "string" || typeof row.label !== "string" || typeof row.protocol !== "string") {
|
|
36
|
+
throw new QwenProviderAuthError("invalid_response", LIST);
|
|
37
|
+
}
|
|
38
|
+
const existingConfig = asRecord(row.existingConfig);
|
|
39
|
+
if (row.existingConfig !== undefined && existingConfig === null) {
|
|
40
|
+
throw new QwenProviderAuthError("invalid_response", LIST);
|
|
41
|
+
}
|
|
42
|
+
return { ...row, id: row.id, label: row.label, protocol: row.protocol,
|
|
43
|
+
...(existingConfig === null ? {} : { existingConfig }) };
|
|
44
|
+
}
|
|
45
|
+
function connected(value) {
|
|
46
|
+
const row = asRecord(value);
|
|
47
|
+
if (row?.success !== true || typeof row.providerId !== "string" || typeof row.providerLabel !== "string" || typeof row.authType !== "string"
|
|
48
|
+
|| (row.modelId !== undefined && typeof row.modelId !== "string") || (row.baseUrl !== undefined && typeof row.baseUrl !== "string")) {
|
|
49
|
+
throw new QwenProviderAuthError("invalid_response", CONNECT);
|
|
50
|
+
}
|
|
51
|
+
return { success: true, providerId: row.providerId, providerLabel: row.providerLabel, authType: row.authType,
|
|
52
|
+
...(row.modelId === undefined ? {} : { modelId: row.modelId }), ...(row.baseUrl === undefined ? {} : { baseUrl: row.baseUrl }) };
|
|
53
|
+
}
|
|
54
|
+
function failure(error, method) {
|
|
55
|
+
if (error instanceof QwenProviderAuthError) {
|
|
56
|
+
return error;
|
|
57
|
+
}
|
|
58
|
+
if (error instanceof RequestError) {
|
|
59
|
+
return new QwenProviderAuthError("native", method, error.code);
|
|
60
|
+
}
|
|
61
|
+
if (error instanceof AcpError) {
|
|
62
|
+
return new QwenProviderAuthError(error.kind, method);
|
|
63
|
+
}
|
|
64
|
+
return new QwenProviderAuthError("launch_failed", method);
|
|
65
|
+
}
|
|
66
|
+
export function qwenProviderAuth(installation, options) {
|
|
67
|
+
const timeoutMs = options.timeoutMs ?? 30_000;
|
|
68
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
|
|
69
|
+
throw new RangeError("Qwen provider timeoutMs must be positive and finite");
|
|
70
|
+
}
|
|
71
|
+
const command = installation.command;
|
|
72
|
+
const cwd = resolve(options.cwd ?? process.cwd());
|
|
73
|
+
const overlay = { ...options.env };
|
|
74
|
+
const secrets = new Set();
|
|
75
|
+
const redact = (text) => [...secrets].toSorted((a, b) => b.length - a.length).reduce((result, key) => result.replaceAll(key, "[redacted]"), text);
|
|
76
|
+
const request = async (method, params) => {
|
|
77
|
+
const until = Date.now() + timeoutMs;
|
|
78
|
+
const pending = new Set();
|
|
79
|
+
let child = undefined;
|
|
80
|
+
try {
|
|
81
|
+
const opened = startAcpProcess(command, ["--acp"], createAcpClient({ name: "oar-qwen-provider-auth" }), {
|
|
82
|
+
cwd, env: sessionEnvironment(overlay), redact, inheritStderr: false,
|
|
83
|
+
incoming: (message) => providerResponse(message, pending, redact),
|
|
84
|
+
outgoing: (message) => { if ("id" in message && "method" in message && message.id !== null) {
|
|
85
|
+
pending.add(message.id);
|
|
86
|
+
} },
|
|
87
|
+
});
|
|
88
|
+
child = opened;
|
|
89
|
+
await withAcpDeadline(opened, "initialize", Math.max(1, until - Date.now()), (sendOptions) => opened.connection.agent.request(methods.agent.initialize, {
|
|
90
|
+
protocolVersion: 1, clientCapabilities: { fs: { readTextFile: false, writeTextFile: false }, terminal: false },
|
|
91
|
+
}, sendOptions));
|
|
92
|
+
if (Date.now() >= until) {
|
|
93
|
+
throw new QwenProviderAuthError("timeout", method);
|
|
94
|
+
}
|
|
95
|
+
const result = await withAcpDeadline(opened, method, until - Date.now(), (sendOptions) => opened.connection.agent.request(method, params, sendOptions));
|
|
96
|
+
return redactText(result, redact, (text) => [...secrets].some((key) => text.includes(key)));
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
throw failure(error, method);
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
if (child !== undefined) {
|
|
103
|
+
child.kill();
|
|
104
|
+
await child.exited;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
return {
|
|
109
|
+
async listProviders() {
|
|
110
|
+
const result = asRecord(await request(LIST, {}));
|
|
111
|
+
if (!Array.isArray(result?.providers)) {
|
|
112
|
+
throw new QwenProviderAuthError("invalid_response", LIST);
|
|
113
|
+
}
|
|
114
|
+
return result.providers.map(provider);
|
|
115
|
+
},
|
|
116
|
+
async connect(params) {
|
|
117
|
+
if (typeof params.apiKey === "string" && params.apiKey.length > 0) {
|
|
118
|
+
secrets.add(params.apiKey);
|
|
119
|
+
if (params.apiKey.trim().length > 0) {
|
|
120
|
+
secrets.add(params.apiKey.trim());
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Only declared native fields; no extra runtime options or launch arguments.
|
|
124
|
+
const input = { providerId: params.providerId };
|
|
125
|
+
for (const key of ["apiKey", "baseUrl", "protocol", "wireApi", "modelIds", "scope"]) {
|
|
126
|
+
if (params[key] !== undefined) {
|
|
127
|
+
input[key] = params[key];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return connected(await request(CONNECT, input));
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=provider-auth-rpc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-auth-rpc.js","sources":["../../../src/runtimes/qwen/provider-auth-rpc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { ExecutableInstallation } from "../../contracts/installation.js";
|
|
2
|
+
import type { SessionOptions } from "../../contracts/session-options.js";
|
|
3
|
+
export interface QwenProviderAuthOptions {
|
|
4
|
+
/** Native settings are loaded relative to this directory; defaults to the host cwd. */
|
|
5
|
+
readonly cwd?: string;
|
|
6
|
+
/** The session overlay: strings override, null removes. The host is untouched. */
|
|
7
|
+
readonly env?: SessionOptions["env"];
|
|
8
|
+
/** Total initialization and request budget per operation, default 30 seconds. Cleanup follows. */
|
|
9
|
+
readonly timeoutMs?: number;
|
|
10
|
+
}
|
|
11
|
+
/** Qwen's provider menu metadata. Additional native UI fields are retained as JSON. */
|
|
12
|
+
export interface QwenProvider {
|
|
13
|
+
readonly id: string;
|
|
14
|
+
readonly label: string;
|
|
15
|
+
readonly protocol: string;
|
|
16
|
+
/**
|
|
17
|
+
* Qwen's existing settings-file configuration, returned unchanged. It excludes
|
|
18
|
+
* process environment, .env and security.auth.apiKey, and depends on cwd.
|
|
19
|
+
* Presence (even hasApiKey) is not credential validity; absence is not logout.
|
|
20
|
+
* Use qwenRuntime.authStatus for the broader local credential observation.
|
|
21
|
+
*/
|
|
22
|
+
readonly existingConfig?: Readonly<Record<string, unknown>>;
|
|
23
|
+
readonly [nativeField: string]: unknown;
|
|
24
|
+
}
|
|
25
|
+
export interface QwenProviderConnectOptions {
|
|
26
|
+
readonly providerId: string;
|
|
27
|
+
/** Sent only on ACP stdin. Omit to let Qwen reuse a stored key, if it can. */
|
|
28
|
+
readonly apiKey?: string;
|
|
29
|
+
readonly baseUrl?: string;
|
|
30
|
+
readonly protocol?: "openai" | "anthropic" | "gemini";
|
|
31
|
+
readonly wireApi?: "chat-completions" | "responses";
|
|
32
|
+
readonly modelIds?: readonly string[];
|
|
33
|
+
/** Omit to leave the destination to Qwen; 0.26.2 probes observed user settings. */
|
|
34
|
+
readonly scope?: "user" | "workspace";
|
|
35
|
+
}
|
|
36
|
+
/** Native configuration completion, not a claim that the provider accepts the key. */
|
|
37
|
+
export interface QwenProviderConnectResult {
|
|
38
|
+
readonly success: true;
|
|
39
|
+
readonly providerId: string;
|
|
40
|
+
readonly providerLabel: string;
|
|
41
|
+
readonly authType: string;
|
|
42
|
+
readonly modelId?: string;
|
|
43
|
+
readonly baseUrl?: string;
|
|
44
|
+
}
|
|
45
|
+
/** No OAuth or logout: Qwen's native provider extensions expose neither operation. */
|
|
46
|
+
export interface QwenProviderAuth {
|
|
47
|
+
/** Starts one bounded native ACP reader. Does not create a conversation or send a prompt. */
|
|
48
|
+
listProviders(): Promise<readonly QwenProvider[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Qwen owns validation, persistence and scope. Success means configuration was
|
|
51
|
+
* written, not remote authentication; run a turn to test provider acceptance.
|
|
52
|
+
* A timeout or lost process can leave an unknown write outcome. No automatic retry.
|
|
53
|
+
*/
|
|
54
|
+
connect(options: QwenProviderConnectOptions): Promise<QwenProviderConnectResult>;
|
|
55
|
+
}
|
|
56
|
+
export type QwenProviderAuthErrorKind = "native" | "timeout" | "process_exited" | "launch_failed" | "invalid_response";
|
|
57
|
+
/** Native ACP code is preserved; raw messages, data, stderr and causes may contain stored keys and are omitted. */
|
|
58
|
+
export declare class QwenProviderAuthError extends Error {
|
|
59
|
+
readonly kind: QwenProviderAuthErrorKind;
|
|
60
|
+
readonly method: string;
|
|
61
|
+
readonly code: number | undefined;
|
|
62
|
+
constructor(kind: QwenProviderAuthErrorKind, method: string, code?: number);
|
|
63
|
+
}
|
|
64
|
+
/** Create the native provider-settings facade. Processes are started only by its operations. */
|
|
65
|
+
export declare function createQwenProviderAuth(installation: ExecutableInstallation, options?: QwenProviderAuthOptions): Promise<QwenProviderAuth>;
|
|
66
|
+
//# sourceMappingURL=provider-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-auth.d.ts","sources":["../../../src/runtimes/qwen/provider-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,MAAM,WAAW,uBAAuB;IACtC,uFAAuF;IACvF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,kFAAkF;IAClF,QAAQ,CAAC,GAAG,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;IACrC,kGAAkG;IAClG,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,uFAAuF;AACvF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5D,QAAQ,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;CACzC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtD,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,WAAW,CAAC;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,mFAAmF;IACnF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;CACvC;AAED,sFAAsF;AACtF,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,sFAAsF;AACtF,MAAM,WAAW,gBAAgB;IAC/B,6FAA6F;IAC7F,aAAa,IAAI,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAAC;IAClD;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAClF;AAED,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,SAAS,GAAG,gBAAgB,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAEvH,mHAAmH;AACnH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,YAAY,IAAI,EAAE,yBAAyB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAMzE;CACF;AAED,gGAAgG;AAChG,wBAAsB,sBAAsB,CAC1C,YAAY,EAAE,sBAAsB,EACpC,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,gBAAgB,CAAC,CAG3B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Native ACP code is preserved; raw messages, data, stderr and causes may contain stored keys and are omitted. */
|
|
2
|
+
export class QwenProviderAuthError extends Error {
|
|
3
|
+
kind;
|
|
4
|
+
method;
|
|
5
|
+
code;
|
|
6
|
+
constructor(kind, method, code) {
|
|
7
|
+
super(`Qwen ${method} failed: ${kind}${code === undefined ? "" : ` (ACP ${code})`}`);
|
|
8
|
+
this.name = "QwenProviderAuthError";
|
|
9
|
+
this.kind = kind;
|
|
10
|
+
this.method = method;
|
|
11
|
+
this.code = code;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/** Create the native provider-settings facade. Processes are started only by its operations. */
|
|
15
|
+
export async function createQwenProviderAuth(installation, options = {}) {
|
|
16
|
+
const { qwenProviderAuth } = await import("./provider-auth-rpc.js");
|
|
17
|
+
return qwenProviderAuth(installation, options);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=provider-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-auth.js","sources":["../../../src/runtimes/qwen/provider-auth.ts"],"names":[],"mappings":"AA+DA,mHAAmH;AACnH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACrC,IAAI,CAA4B;IAChC,MAAM,CAAS;IACf,IAAI,CAAqB;IAElC,YAAY,IAA+B,EAAE,MAAc,EAAE,IAAa;QACxE,KAAK,CAAC,QAAQ,MAAM,YAAY,IAAI,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC;QACrF,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,gGAAgG;AAChG,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,YAAoC,EACpC,OAAO,GAA4B,EAAE;IAErC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACpE,OAAO,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC"}
|