opencode-qwen-cli-auth 2.1.0 → 2.2.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.
Files changed (47) hide show
  1. package/dist/index.js +1 -0
  2. package/package.json +1 -1
  3. package/dist/lib/prompts/fallback/opencode-qwen-prompt.txt +0 -109
  4. package/dist/lib/prompts/opencode-qwen.d.ts +0 -14
  5. package/dist/lib/prompts/opencode-qwen.d.ts.map +0 -1
  6. package/dist/lib/prompts/opencode-qwen.js +0 -121
  7. package/dist/lib/prompts/opencode-qwen.js.map +0 -1
  8. package/dist/lib/prompts/qwen-code.d.ts +0 -25
  9. package/dist/lib/prompts/qwen-code.d.ts.map +0 -1
  10. package/dist/lib/prompts/qwen-code.js +0 -307
  11. package/dist/lib/prompts/qwen-code.js.map +0 -1
  12. package/dist/lib/prompts/qwen-opencode-bridge.d.ts +0 -15
  13. package/dist/lib/prompts/qwen-opencode-bridge.d.ts.map +0 -1
  14. package/dist/lib/prompts/qwen-opencode-bridge.js +0 -81
  15. package/dist/lib/prompts/qwen-opencode-bridge.js.map +0 -1
  16. package/dist/lib/request/fetch-helpers.d.ts +0 -19
  17. package/dist/lib/request/fetch-helpers.d.ts.map +0 -1
  18. package/dist/lib/request/fetch-helpers.js +0 -50
  19. package/dist/lib/request/fetch-helpers.js.map +0 -1
  20. package/dist/lib/request/header-utils.d.ts +0 -38
  21. package/dist/lib/request/header-utils.d.ts.map +0 -1
  22. package/dist/lib/request/header-utils.js +0 -75
  23. package/dist/lib/request/header-utils.js.map +0 -1
  24. package/dist/lib/request/openai-chunk-builder.d.ts +0 -68
  25. package/dist/lib/request/openai-chunk-builder.d.ts.map +0 -1
  26. package/dist/lib/request/openai-chunk-builder.js +0 -110
  27. package/dist/lib/request/openai-chunk-builder.js.map +0 -1
  28. package/dist/lib/request/payload-analyzer.d.ts +0 -34
  29. package/dist/lib/request/payload-analyzer.d.ts.map +0 -1
  30. package/dist/lib/request/payload-analyzer.js +0 -114
  31. package/dist/lib/request/payload-analyzer.js.map +0 -1
  32. package/dist/lib/request/request-transformer.d.ts +0 -39
  33. package/dist/lib/request/request-transformer.d.ts.map +0 -1
  34. package/dist/lib/request/request-transformer.js +0 -108
  35. package/dist/lib/request/request-transformer.js.map +0 -1
  36. package/dist/lib/request/response-handler.d.ts +0 -15
  37. package/dist/lib/request/response-handler.d.ts.map +0 -1
  38. package/dist/lib/request/response-handler.js +0 -90
  39. package/dist/lib/request/response-handler.js.map +0 -1
  40. package/dist/lib/request/sse-parser.d.ts +0 -36
  41. package/dist/lib/request/sse-parser.d.ts.map +0 -1
  42. package/dist/lib/request/sse-parser.js +0 -85
  43. package/dist/lib/request/sse-parser.js.map +0 -1
  44. package/dist/lib/request/stream-normalizer.d.ts +0 -18
  45. package/dist/lib/request/stream-normalizer.d.ts.map +0 -1
  46. package/dist/lib/request/stream-normalizer.js +0 -140
  47. package/dist/lib/request/stream-normalizer.js.map +0 -1
@@ -1,68 +0,0 @@
1
- /**
2
- * OpenAI Chat Completions chunk builder
3
- * Creates properly formatted OpenAI-style streaming chunks
4
- */
5
- /**
6
- * OpenAI chat completion chunk structure
7
- */
8
- export interface OpenAIChunk {
9
- id: string;
10
- object: 'chat.completion.chunk';
11
- created: number;
12
- model: string;
13
- choices: Array<{
14
- index: number;
15
- delta: {
16
- role?: 'assistant';
17
- content?: string;
18
- };
19
- finish_reason: string | null;
20
- }>;
21
- }
22
- /**
23
- * Builder class for creating OpenAI-compatible streaming chunks
24
- */
25
- export declare class OpenAIChunkBuilder {
26
- private chunkId;
27
- private model;
28
- private sentInitialRole;
29
- /**
30
- * Create a new chunk builder
31
- * @param model - Model name to include in chunks
32
- */
33
- constructor(model?: string);
34
- /**
35
- * Create a chunk with role information (first chunk only)
36
- * @returns OpenAI chunk with role
37
- */
38
- createRoleChunk(): OpenAIChunk;
39
- /**
40
- * Create a chunk with content delta
41
- * @param content - Text content to include
42
- * @returns OpenAI chunk with content
43
- */
44
- createContentChunk(content: string): OpenAIChunk;
45
- /**
46
- * Create a finish chunk with completion reason
47
- * @param reason - Finish reason (e.g., 'stop', 'length')
48
- * @returns OpenAI chunk with finish reason
49
- */
50
- createFinishChunk(reason?: string): OpenAIChunk;
51
- /**
52
- * Format a chunk as SSE data line
53
- * @param chunk - OpenAI chunk to format
54
- * @returns Formatted SSE line
55
- */
56
- formatAsSSE(chunk: OpenAIChunk): string;
57
- /**
58
- * Create the [DONE] marker
59
- * @returns Formatted [DONE] SSE line
60
- */
61
- createDoneMarker(): string;
62
- /**
63
- * Check if initial role has been sent
64
- * @returns True if role chunk was already created
65
- */
66
- hasRole(): boolean;
67
- }
68
- //# sourceMappingURL=openai-chunk-builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openai-chunk-builder.d.ts","sourceRoot":"","sources":["../../../lib/request/openai-chunk-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,uBAAuB,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE;YACN,IAAI,CAAC,EAAE,WAAW,CAAC;YACnB,OAAO,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC7B,CAAC,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,eAAe,CAAkB;IAEzC;;;OAGG;gBACS,KAAK,GAAE,MAAsB;IAKzC;;;OAGG;IACH,eAAe,IAAI,WAAW;IAiB9B;;;;OAIG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;IAyBhD;;;;OAIG;IACH,iBAAiB,CAAC,MAAM,GAAE,MAAe,GAAG,WAAW;IAgBvD;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM;IAIvC;;;OAGG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;;OAGG;IACH,OAAO,IAAI,OAAO;CAGlB"}
@@ -1,110 +0,0 @@
1
- /**
2
- * OpenAI Chat Completions chunk builder
3
- * Creates properly formatted OpenAI-style streaming chunks
4
- */
5
- /**
6
- * Builder class for creating OpenAI-compatible streaming chunks
7
- */
8
- export class OpenAIChunkBuilder {
9
- chunkId;
10
- model;
11
- sentInitialRole = false;
12
- /**
13
- * Create a new chunk builder
14
- * @param model - Model name to include in chunks
15
- */
16
- constructor(model = 'coder-model') {
17
- this.chunkId = `chatcmpl_${Math.random().toString(36).slice(2, 12)}`;
18
- this.model = model;
19
- }
20
- /**
21
- * Create a chunk with role information (first chunk only)
22
- * @returns OpenAI chunk with role
23
- */
24
- createRoleChunk() {
25
- this.sentInitialRole = true;
26
- return {
27
- id: this.chunkId,
28
- object: 'chat.completion.chunk',
29
- created: Math.floor(Date.now() / 1000),
30
- model: this.model,
31
- choices: [
32
- {
33
- index: 0,
34
- delta: { role: 'assistant' },
35
- finish_reason: null,
36
- },
37
- ],
38
- };
39
- }
40
- /**
41
- * Create a chunk with content delta
42
- * @param content - Text content to include
43
- * @returns OpenAI chunk with content
44
- */
45
- createContentChunk(content) {
46
- const chunk = {
47
- id: this.chunkId,
48
- object: 'chat.completion.chunk',
49
- created: Math.floor(Date.now() / 1000),
50
- model: this.model,
51
- choices: [
52
- {
53
- index: 0,
54
- delta: {},
55
- finish_reason: null,
56
- },
57
- ],
58
- };
59
- // Include role in first content chunk if not sent separately
60
- if (!this.sentInitialRole) {
61
- chunk.choices[0].delta.role = 'assistant';
62
- this.sentInitialRole = true;
63
- }
64
- chunk.choices[0].delta.content = content;
65
- return chunk;
66
- }
67
- /**
68
- * Create a finish chunk with completion reason
69
- * @param reason - Finish reason (e.g., 'stop', 'length')
70
- * @returns OpenAI chunk with finish reason
71
- */
72
- createFinishChunk(reason = 'stop') {
73
- return {
74
- id: this.chunkId,
75
- object: 'chat.completion.chunk',
76
- created: Math.floor(Date.now() / 1000),
77
- model: this.model,
78
- choices: [
79
- {
80
- index: 0,
81
- delta: {},
82
- finish_reason: reason,
83
- },
84
- ],
85
- };
86
- }
87
- /**
88
- * Format a chunk as SSE data line
89
- * @param chunk - OpenAI chunk to format
90
- * @returns Formatted SSE line
91
- */
92
- formatAsSSE(chunk) {
93
- return `data: ${JSON.stringify(chunk)}\n\n`;
94
- }
95
- /**
96
- * Create the [DONE] marker
97
- * @returns Formatted [DONE] SSE line
98
- */
99
- createDoneMarker() {
100
- return 'data: [DONE]\n\n';
101
- }
102
- /**
103
- * Check if initial role has been sent
104
- * @returns True if role chunk was already created
105
- */
106
- hasRole() {
107
- return this.sentInitialRole;
108
- }
109
- }
110
- //# sourceMappingURL=openai-chunk-builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openai-chunk-builder.js","sourceRoot":"","sources":["../../../lib/request/openai-chunk-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACtB,OAAO,CAAS;IAChB,KAAK,CAAS;IACd,eAAe,GAAY,KAAK,CAAC;IAEzC;;;OAGG;IACH,YAAY,QAAgB,aAAa;QACxC,IAAI,CAAC,OAAO,GAAG,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACrE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,eAAe;QACd,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,OAAO;YACN,EAAE,EAAE,IAAI,CAAC,OAAO;YAChB,MAAM,EAAE,uBAAuB;YAC/B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YACtC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE;gBACR;oBACC,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;oBAC5B,aAAa,EAAE,IAAI;iBACnB;aACD;SACD,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,OAAe;QACjC,MAAM,KAAK,GAAgB;YAC1B,EAAE,EAAE,IAAI,CAAC,OAAO;YAChB,MAAM,EAAE,uBAAuB;YAC/B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YACtC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE;gBACR;oBACC,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,EAAE;oBACT,aAAa,EAAE,IAAI;iBACnB;aACD;SACD,CAAC;QAEF,6DAA6D;QAC7D,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC3B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,WAAW,CAAC;YAC1C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QACzC,OAAO,KAAK,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,SAAiB,MAAM;QACxC,OAAO;YACN,EAAE,EAAE,IAAI,CAAC,OAAO;YAChB,MAAM,EAAE,uBAAuB;YAC/B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YACtC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE;gBACR;oBACC,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,EAAE;oBACT,aAAa,EAAE,MAAM;iBACrB;aACD;SACD,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,KAAkB;QAC7B,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,gBAAgB;QACf,OAAO,kBAAkB,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,OAAO;QACN,OAAO,IAAI,CAAC,eAAe,CAAC;IAC7B,CAAC;CACD"}
@@ -1,34 +0,0 @@
1
- /**
2
- * Payload analysis utilities
3
- * Extracts and analyzes content from various API response formats
4
- */
5
- /**
6
- * Extract text content from a payload with various possible structures
7
- * Handles multiple API response formats (OpenAI, Qwen, etc.)
8
- *
9
- * @param payload - Response payload to analyze
10
- * @returns Extracted text content, or undefined if not found
11
- */
12
- export declare function extractText(payload: unknown): string | undefined;
13
- /**
14
- * Determine if the current text is cumulative (contains all previous text)
15
- * or incremental (only new text)
16
- *
17
- * @param current - Current text from payload
18
- * @param previous - Previously accumulated text
19
- * @returns True if current text is cumulative (starts with previous text)
20
- */
21
- export declare function isCumulative(current: string, previous: string): boolean;
22
- /**
23
- * Calculate the delta (new text) from current and previous text
24
- * Handles both cumulative and incremental formats
25
- *
26
- * @param current - Current text from payload
27
- * @param previous - Previously accumulated text
28
- * @returns Object with new text delta and updated cumulative text
29
- */
30
- export declare function calculateDelta(current: string, previous: string): {
31
- delta: string;
32
- cumulative: string;
33
- };
34
- //# sourceMappingURL=payload-analyzer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"payload-analyzer.d.ts","sourceRoot":"","sources":["../../../lib/request/payload-analyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CA6DhE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGvE;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACd;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAcvC"}
@@ -1,114 +0,0 @@
1
- /**
2
- * Payload analysis utilities
3
- * Extracts and analyzes content from various API response formats
4
- */
5
- /**
6
- * Extract text content from a payload with various possible structures
7
- * Handles multiple API response formats (OpenAI, Qwen, etc.)
8
- *
9
- * @param payload - Response payload to analyze
10
- * @returns Extracted text content, or undefined if not found
11
- */
12
- export function extractText(payload) {
13
- if (!payload || typeof payload !== 'object')
14
- return undefined;
15
- // Type guard to ensure payload is an object
16
- const obj = payload;
17
- // Common direct string fields
18
- if (typeof obj.delta === 'string')
19
- return obj.delta;
20
- if (typeof obj.text === 'string')
21
- return obj.text;
22
- if (typeof obj.output_text === 'string')
23
- return obj.output_text;
24
- // Nested checks with proper type guards
25
- if (obj.response && typeof obj.response === 'object') {
26
- const response = obj.response;
27
- if (typeof response.output_text === 'string')
28
- return response.output_text;
29
- }
30
- if (obj.message && typeof obj.message === 'object') {
31
- const message = obj.message;
32
- if (typeof message.content === 'string')
33
- return message.content;
34
- }
35
- if (Array.isArray(obj.choices) && obj.choices.length > 0) {
36
- const choice = obj.choices[0];
37
- if (choice.delta && typeof choice.delta === 'object') {
38
- const delta = choice.delta;
39
- if (typeof delta.content === 'string')
40
- return delta.content;
41
- }
42
- }
43
- // Nested under delta
44
- if (obj.delta && typeof obj.delta === 'object') {
45
- const delta = obj.delta;
46
- if (typeof delta.text === 'string')
47
- return delta.text;
48
- if (typeof delta.content === 'string')
49
- return delta.content;
50
- }
51
- // Array-shaped content collectors
52
- const candidates = [
53
- obj.message && typeof obj.message === 'object' ? obj.message.content : undefined,
54
- obj.delta && typeof obj.delta === 'object' ? obj.delta.content : undefined,
55
- obj.content
56
- ];
57
- for (const c of candidates) {
58
- if (Array.isArray(c)) {
59
- let combined = '';
60
- for (const item of c) {
61
- if (typeof item === 'string') {
62
- combined += item;
63
- }
64
- else if (item && typeof item === 'object') {
65
- const itemObj = item;
66
- if (typeof itemObj.text === 'string')
67
- combined += itemObj.text;
68
- else if (typeof itemObj.content === 'string')
69
- combined += itemObj.content;
70
- }
71
- }
72
- if (combined)
73
- return combined;
74
- }
75
- }
76
- return undefined;
77
- }
78
- /**
79
- * Determine if the current text is cumulative (contains all previous text)
80
- * or incremental (only new text)
81
- *
82
- * @param current - Current text from payload
83
- * @param previous - Previously accumulated text
84
- * @returns True if current text is cumulative (starts with previous text)
85
- */
86
- export function isCumulative(current, previous) {
87
- if (!previous)
88
- return false;
89
- return current.startsWith(previous);
90
- }
91
- /**
92
- * Calculate the delta (new text) from current and previous text
93
- * Handles both cumulative and incremental formats
94
- *
95
- * @param current - Current text from payload
96
- * @param previous - Previously accumulated text
97
- * @returns Object with new text delta and updated cumulative text
98
- */
99
- export function calculateDelta(current, previous) {
100
- if (!previous) {
101
- // First chunk
102
- return { delta: current, cumulative: current };
103
- }
104
- if (isCumulative(current, previous)) {
105
- // Cumulative style: extract only the new part
106
- const delta = current.slice(previous.length);
107
- return { delta, cumulative: current };
108
- }
109
- else {
110
- // Incremental style: current is already just the delta
111
- return { delta: current, cumulative: previous + current };
112
- }
113
- }
114
- //# sourceMappingURL=payload-analyzer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"payload-analyzer.js","sourceRoot":"","sources":["../../../lib/request/payload-analyzer.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- import type { RequestBody, ChatMessage } from "../types.js";
2
- /**
3
- * Normalize Qwen model names for Portal API (OAuth)
4
- *
5
- * Portal API uses a single 'coder-model' for all coding tasks.
6
- * This function provides backward compatibility for legacy model names.
7
- *
8
- * @param model - Model name from config (e.g., "alibaba/coder-model" or legacy names)
9
- * @returns Normalized model name for Portal API ("coder-model")
10
- */
11
- export declare function normalizeModel(model: string): string;
12
- /**
13
- * Filter OpenCode qwen.txt system prompts from messages
14
- * @param messages - Input messages
15
- * @param openCodeQwenPrompt - OpenCode qwen.txt content for verification
16
- * @returns Filtered messages
17
- */
18
- export declare function filterOpenCodeQwenPrompts(messages: ChatMessage[], openCodeQwenPrompt: string): ChatMessage[];
19
- /**
20
- * Add Qwen-OpenCode bridge message
21
- * @param messages - Input messages
22
- * @returns Messages with bridge prompt added
23
- */
24
- export declare function addQwenBridgeMessage(messages: ChatMessage[]): ChatMessage[];
25
- /**
26
- * Add tool remap message for QWEN_MODE=false
27
- * @param messages - Input messages
28
- * @returns Messages with remap message added
29
- */
30
- export declare function addQwenToolRemapMessage(messages: ChatMessage[]): ChatMessage[];
31
- /**
32
- * Transform request body for Qwen Portal API (OAuth)
33
- * @param body - Original request body
34
- * @param qwenMode - QWEN_MODE setting
35
- * @param openCodeQwenPrompt - OpenCode qwen.txt content (for filtering)
36
- * @returns Transformed request body
37
- */
38
- export declare function transformRequestBody(body: RequestBody, qwenMode: boolean, openCodeQwenPrompt: string): RequestBody;
39
- //# sourceMappingURL=request-transformer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-transformer.d.ts","sourceRoot":"","sources":["../../../lib/request/request-transformer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsBpD;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACxC,QAAQ,EAAE,WAAW,EAAE,EACvB,kBAAkB,EAAE,MAAM,GACxB,WAAW,EAAE,CAOf;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CACnC,QAAQ,EAAE,WAAW,EAAE,GACrB,WAAW,EAAE,CAKf;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACtC,QAAQ,EAAE,WAAW,EAAE,GACrB,WAAW,EAAE,CAKf;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CACnC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,OAAO,EACjB,kBAAkB,EAAE,MAAM,GACxB,WAAW,CA2Cb"}
@@ -1,108 +0,0 @@
1
- import { getQwenCodePrompt } from "../prompts/qwen-code.js";
2
- import { QWEN_OPENCODE_BRIDGE, QWEN_TOOL_REMAP_MESSAGE } from "../prompts/qwen-opencode-bridge.js";
3
- import { isOpenCodeQwenPrompt } from "../prompts/opencode-qwen.js";
4
- /**
5
- * Normalize Qwen model names for Portal API (OAuth)
6
- *
7
- * Portal API uses a single 'coder-model' for all coding tasks.
8
- * This function provides backward compatibility for legacy model names.
9
- *
10
- * @param model - Model name from config (e.g., "alibaba/coder-model" or legacy names)
11
- * @returns Normalized model name for Portal API ("coder-model")
12
- */
13
- export function normalizeModel(model) {
14
- // Remove provider prefix if present (alibaba/coder-model → coder-model)
15
- const modelName = model.includes("/") ? model.split("/")[1] : model;
16
- // Portal API uses 'coder-model' for all coding tasks
17
- // Accept legacy model names for backward compatibility
18
- if (modelName.startsWith("qwen3-coder") ||
19
- modelName.startsWith("qwen-coder") ||
20
- modelName.startsWith("qwen-turbo") ||
21
- modelName.startsWith("qwen-max") ||
22
- modelName.startsWith("qwen-plus") ||
23
- modelName === "coder-model") {
24
- return "coder-model";
25
- }
26
- // Vision model (not applicable for OpenCode, but included for completeness)
27
- if (modelName.includes("vision") || modelName.includes("vl")) {
28
- return "vision-model";
29
- }
30
- // Default to coder-model for any unrecognized model name
31
- return "coder-model";
32
- }
33
- /**
34
- * Filter OpenCode qwen.txt system prompts from messages
35
- * @param messages - Input messages
36
- * @param openCodeQwenPrompt - OpenCode qwen.txt content for verification
37
- * @returns Filtered messages
38
- */
39
- export function filterOpenCodeQwenPrompts(messages, openCodeQwenPrompt) {
40
- return messages.filter(msg => {
41
- if (msg.role !== "system") {
42
- return true;
43
- }
44
- return !isOpenCodeQwenPrompt(msg.content, openCodeQwenPrompt);
45
- });
46
- }
47
- /**
48
- * Add Qwen-OpenCode bridge message
49
- * @param messages - Input messages
50
- * @returns Messages with bridge prompt added
51
- */
52
- export function addQwenBridgeMessage(messages) {
53
- return [
54
- { role: "system", content: QWEN_OPENCODE_BRIDGE },
55
- ...messages,
56
- ];
57
- }
58
- /**
59
- * Add tool remap message for QWEN_MODE=false
60
- * @param messages - Input messages
61
- * @returns Messages with remap message added
62
- */
63
- export function addQwenToolRemapMessage(messages) {
64
- return [
65
- { role: "system", content: QWEN_TOOL_REMAP_MESSAGE },
66
- ...messages,
67
- ];
68
- }
69
- /**
70
- * Transform request body for Qwen Portal API (OAuth)
71
- * @param body - Original request body
72
- * @param qwenMode - QWEN_MODE setting
73
- * @param openCodeQwenPrompt - OpenCode qwen.txt content (for filtering)
74
- * @returns Transformed request body
75
- */
76
- export function transformRequestBody(body, qwenMode, openCodeQwenPrompt) {
77
- const transformed = { ...body };
78
- // Normalize model name for Portal API
79
- if (transformed.model) {
80
- transformed.model = normalizeModel(transformed.model);
81
- }
82
- // Transform messages array
83
- if (transformed.messages && Array.isArray(transformed.messages)) {
84
- if (qwenMode) {
85
- // Filter OpenCode qwen.txt system prompts
86
- transformed.messages = filterOpenCodeQwenPrompts(transformed.messages, openCodeQwenPrompt);
87
- // Add Qwen Code system prompt
88
- const qwenCodePrompt = getQwenCodePrompt();
89
- transformed.messages = [
90
- { role: "system", content: qwenCodePrompt },
91
- ...transformed.messages,
92
- ];
93
- // Add Qwen-OpenCode bridge prompt
94
- transformed.messages = addQwenBridgeMessage(transformed.messages);
95
- }
96
- else {
97
- // QWEN_MODE=false: Use OpenCode qwen.txt (already in messages)
98
- // Just add tool remap message
99
- transformed.messages = addQwenToolRemapMessage(transformed.messages);
100
- }
101
- }
102
- // Remove any Codex-specific fields
103
- delete transformed.instructions;
104
- delete transformed.reasoning_effort;
105
- delete transformed.reasoning_summary;
106
- return transformed;
107
- }
108
- //# sourceMappingURL=request-transformer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-transformer.js","sourceRoot":"","sources":["../../../lib/request/request-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC3C,wEAAwE;IACxE,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAEpE,qDAAqD;IACrD,uDAAuD;IACvD,IAAI,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC;QACnC,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC;QAClC,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC;QAClC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC;QAChC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC;QACjC,SAAS,KAAK,aAAa,EAAE,CAAC;QACjC,OAAO,aAAa,CAAC;IACtB,CAAC;IAED,4EAA4E;IAC5E,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9D,OAAO,cAAc,CAAC;IACvB,CAAC;IAED,yDAAyD;IACzD,OAAO,aAAa,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CACxC,QAAuB,EACvB,kBAA0B;IAE1B,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAC5B,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CACnC,QAAuB;IAEvB,OAAO;QACN,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE;QACjD,GAAG,QAAQ;KACX,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACtC,QAAuB;IAEvB,OAAO;QACN,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,uBAAuB,EAAE;QACpD,GAAG,QAAQ;KACX,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CACnC,IAAiB,EACjB,QAAiB,EACjB,kBAA0B;IAE1B,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAEhC,sCAAsC;IACtC,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;QACvB,WAAW,CAAC,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,2BAA2B;IAC3B,IAAI,WAAW,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjE,IAAI,QAAQ,EAAE,CAAC;YACd,0CAA0C;YAC1C,WAAW,CAAC,QAAQ,GAAG,yBAAyB,CAC/C,WAAW,CAAC,QAAyB,EACrC,kBAAkB,CAClB,CAAC;YAEF,8BAA8B;YAC9B,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;YAC3C,WAAW,CAAC,QAAQ,GAAG;gBACtB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE;gBAC3C,GAAG,WAAW,CAAC,QAAQ;aACvB,CAAC;YAEF,kCAAkC;YAClC,WAAW,CAAC,QAAQ,GAAG,oBAAoB,CAC1C,WAAW,CAAC,QAAyB,CACrC,CAAC;QACH,CAAC;aAAM,CAAC;YACP,+DAA+D;YAC/D,8BAA8B;YAC9B,WAAW,CAAC,QAAQ,GAAG,uBAAuB,CAC7C,WAAW,CAAC,QAAyB,CACrC,CAAC;QACH,CAAC;IACF,CAAC;IAED,mCAAmC;IACnC,OAAQ,WAAmB,CAAC,YAAY,CAAC;IACzC,OAAQ,WAAmB,CAAC,gBAAgB,CAAC;IAC7C,OAAQ,WAAmB,CAAC,iBAAiB,CAAC;IAE9C,OAAO,WAAW,CAAC;AACpB,CAAC"}
@@ -1,15 +0,0 @@
1
- export { normalizeSseToOpenAI } from './stream-normalizer.js';
2
- /**
3
- * Convert SSE stream response to JSON for generateText()
4
- * @param response - Fetch response with SSE stream
5
- * @param headers - Response headers
6
- * @returns Response with JSON body
7
- */
8
- export declare function convertSseToJson(response: Response, headers: Headers): Promise<Response>;
9
- /**
10
- * Ensure response has content-type header
11
- * @param headers - Response headers
12
- * @returns Headers with content-type set
13
- */
14
- export declare function ensureContentType(headers: Headers): Headers;
15
- //# sourceMappingURL=response-handler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"response-handler.d.ts","sourceRoot":"","sources":["../../../lib/request/response-handler.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AA4B9D;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkD9F;AAGD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAQ3D"}
@@ -1,90 +0,0 @@
1
- import { logRequest, LOGGING_ENABLED, logError } from "../logger.js";
2
- // Re-export the new modular stream normalizer
3
- export { normalizeSseToOpenAI } from './stream-normalizer.js';
4
- /**
5
- * Parse SSE stream to extract final response
6
- * @param sseText - Complete SSE stream text
7
- * @returns Final response object or null if not found
8
- */
9
- function parseSseStream(sseText) {
10
- const lines = sseText.split('\n');
11
- for (const line of lines) {
12
- if (line.startsWith('data: ')) {
13
- try {
14
- const data = JSON.parse(line.substring(6));
15
- // Look for response.done event with final data
16
- if (data.type === 'response.done' || data.type === 'response.completed') {
17
- return data.response;
18
- }
19
- }
20
- catch (e) {
21
- // Skip malformed JSON
22
- }
23
- }
24
- }
25
- return null;
26
- }
27
- /**
28
- * Convert SSE stream response to JSON for generateText()
29
- * @param response - Fetch response with SSE stream
30
- * @param headers - Response headers
31
- * @returns Response with JSON body
32
- */
33
- export async function convertSseToJson(response, headers) {
34
- if (!response.body) {
35
- throw new Error('[qwen-oauth-plugin] Response has no body');
36
- }
37
- const reader = response.body.getReader();
38
- const decoder = new TextDecoder();
39
- let fullText = '';
40
- try {
41
- // Consume the entire stream
42
- while (true) {
43
- const { done, value } = await reader.read();
44
- if (done)
45
- break;
46
- fullText += decoder.decode(value, { stream: true });
47
- }
48
- if (LOGGING_ENABLED) {
49
- logRequest("stream-full", { fullContent: fullText });
50
- }
51
- // Parse SSE events to extract the final response
52
- const finalResponse = parseSseStream(fullText);
53
- if (!finalResponse) {
54
- logError('Could not find final response in SSE stream');
55
- logRequest("stream-error", { error: "No response.done event found" });
56
- // Return original stream if we can't parse
57
- return new Response(fullText, {
58
- status: response.status,
59
- statusText: response.statusText,
60
- headers: headers,
61
- });
62
- }
63
- // Return as plain JSON (not SSE)
64
- const jsonHeaders = new Headers(headers);
65
- jsonHeaders.set('content-type', 'application/json; charset=utf-8');
66
- return new Response(JSON.stringify(finalResponse), {
67
- status: response.status,
68
- statusText: response.statusText,
69
- headers: jsonHeaders,
70
- });
71
- }
72
- catch (error) {
73
- logError('Error converting stream:', error);
74
- logRequest("stream-error", { error: String(error) });
75
- throw error;
76
- }
77
- }
78
- /**
79
- * Ensure response has content-type header
80
- * @param headers - Response headers
81
- * @returns Headers with content-type set
82
- */
83
- export function ensureContentType(headers) {
84
- const responseHeaders = new Headers(headers);
85
- if (!responseHeaders.has('content-type')) {
86
- responseHeaders.set('content-type', 'text/event-stream; charset=utf-8');
87
- }
88
- return responseHeaders;
89
- }
90
- //# sourceMappingURL=response-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"response-handler.js","sourceRoot":"","sources":["../../../lib/request/response-handler.ts"],"names":[],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- /**
2
- * Server-Sent Events (SSE) parsing utilities
3
- * Handles parsing of SSE streams into structured events
4
- */
5
- /**
6
- * Represents a parsed SSE event
7
- */
8
- export interface SseEvent {
9
- /** Event type (e.g., 'message', 'response.done') */
10
- type?: string;
11
- /** Event data (parsed JSON or raw string) */
12
- data: unknown;
13
- /** Raw data string before parsing */
14
- rawData: string;
15
- }
16
- /**
17
- * Parse a single SSE frame into events
18
- * A frame is text between double newlines (\n\n)
19
- *
20
- * @param frame - SSE frame text
21
- * @returns Array of parsed events
22
- */
23
- export declare function parseFrame(frame: string): SseEvent[];
24
- /**
25
- * Check if an event indicates stream completion
26
- * @param event - SSE event to check
27
- * @returns True if this is a completion event
28
- */
29
- export declare function isCompletionEvent(event: SseEvent): boolean;
30
- /**
31
- * Check if an event contains content data
32
- * @param event - SSE event to check
33
- * @returns True if this event has content
34
- */
35
- export declare function hasContent(event: SseEvent): boolean;
36
- //# sourceMappingURL=sse-parser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sse-parser.d.ts","sourceRoot":"","sources":["../../../lib/request/sse-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,QAAQ;IACxB,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,IAAI,EAAE,OAAO,CAAC;IACd,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,CA6CpD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAM1D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAkBnD"}