longer-agent 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +227 -0
- package/README.zh-CN.md +227 -0
- package/agent_templates/executor/agent.yaml +22 -0
- package/agent_templates/executor/system_prompt.md +17 -0
- package/agent_templates/explorer/agent.yaml +13 -0
- package/agent_templates/explorer/system_prompt.md +19 -0
- package/agent_templates/main/agent.yaml +7 -0
- package/agent_templates/main/system_prompt.md +45 -0
- package/configExample.yaml +83 -0
- package/dist/agents/agent.d.ts +79 -0
- package/dist/agents/agent.d.ts.map +1 -0
- package/dist/agents/agent.js +156 -0
- package/dist/agents/agent.js.map +1 -0
- package/dist/agents/tool-loop.d.ts +140 -0
- package/dist/agents/tool-loop.d.ts.map +1 -0
- package/dist/agents/tool-loop.js +465 -0
- package/dist/agents/tool-loop.js.map +1 -0
- package/dist/ask.d.ts +81 -0
- package/dist/ask.d.ts.map +1 -0
- package/dist/ask.js +34 -0
- package/dist/ask.js.map +1 -0
- package/dist/auth/openai-oauth.d.ts +66 -0
- package/dist/auth/openai-oauth.d.ts.map +1 -0
- package/dist/auth/openai-oauth.js +640 -0
- package/dist/auth/openai-oauth.js.map +1 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +254 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +118 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +862 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +130 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +648 -0
- package/dist/config.js.map +1 -0
- package/dist/context-rendering.d.ts +69 -0
- package/dist/context-rendering.d.ts.map +1 -0
- package/dist/context-rendering.js +250 -0
- package/dist/context-rendering.js.map +1 -0
- package/dist/document-projection.d.ts +12 -0
- package/dist/document-projection.d.ts.map +1 -0
- package/dist/document-projection.js +75 -0
- package/dist/document-projection.js.map +1 -0
- package/dist/ephemeral-log.d.ts +15 -0
- package/dist/ephemeral-log.d.ts.map +1 -0
- package/dist/ephemeral-log.js +173 -0
- package/dist/ephemeral-log.js.map +1 -0
- package/dist/file-attach.d.ts +89 -0
- package/dist/file-attach.d.ts.map +1 -0
- package/dist/file-attach.js +571 -0
- package/dist/file-attach.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/init-wizard.d.ts +13 -0
- package/dist/init-wizard.d.ts.map +1 -0
- package/dist/init-wizard.js +328 -0
- package/dist/init-wizard.js.map +1 -0
- package/dist/log-entry.d.ts +104 -0
- package/dist/log-entry.d.ts.map +1 -0
- package/dist/log-entry.js +292 -0
- package/dist/log-entry.js.map +1 -0
- package/dist/log-projection.d.ts +73 -0
- package/dist/log-projection.d.ts.map +1 -0
- package/dist/log-projection.js +651 -0
- package/dist/log-projection.js.map +1 -0
- package/dist/mcp-client.d.ts +55 -0
- package/dist/mcp-client.d.ts.map +1 -0
- package/dist/mcp-client.js +402 -0
- package/dist/mcp-client.js.map +1 -0
- package/dist/model-selection.d.ts +16 -0
- package/dist/model-selection.d.ts.map +1 -0
- package/dist/model-selection.js +181 -0
- package/dist/model-selection.js.map +1 -0
- package/dist/network-retry.d.ts +38 -0
- package/dist/network-retry.d.ts.map +1 -0
- package/dist/network-retry.js +140 -0
- package/dist/network-retry.js.map +1 -0
- package/dist/persistence.d.ts +104 -0
- package/dist/persistence.d.ts.map +1 -0
- package/dist/persistence.js +644 -0
- package/dist/persistence.js.map +1 -0
- package/dist/primitives/context.d.ts +29 -0
- package/dist/primitives/context.d.ts.map +1 -0
- package/dist/primitives/context.js +85 -0
- package/dist/primitives/context.js.map +1 -0
- package/dist/progress.d.ts +51 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +229 -0
- package/dist/progress.js.map +1 -0
- package/dist/provider-presets.d.ts +34 -0
- package/dist/provider-presets.d.ts.map +1 -0
- package/dist/provider-presets.js +181 -0
- package/dist/provider-presets.js.map +1 -0
- package/dist/providers/anthropic.d.ts +32 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +450 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/base.d.ts +135 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +104 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/glm.d.ts +18 -0
- package/dist/providers/glm.d.ts.map +1 -0
- package/dist/providers/glm.js +59 -0
- package/dist/providers/glm.js.map +1 -0
- package/dist/providers/kimi.d.ts +23 -0
- package/dist/providers/kimi.d.ts.map +1 -0
- package/dist/providers/kimi.js +89 -0
- package/dist/providers/kimi.js.map +1 -0
- package/dist/providers/minimax.d.ts +20 -0
- package/dist/providers/minimax.d.ts.map +1 -0
- package/dist/providers/minimax.js +192 -0
- package/dist/providers/minimax.js.map +1 -0
- package/dist/providers/openai-chat.d.ts +33 -0
- package/dist/providers/openai-chat.d.ts.map +1 -0
- package/dist/providers/openai-chat.js +543 -0
- package/dist/providers/openai-chat.js.map +1 -0
- package/dist/providers/openai-responses.d.ts +26 -0
- package/dist/providers/openai-responses.d.ts.map +1 -0
- package/dist/providers/openai-responses.js +443 -0
- package/dist/providers/openai-responses.js.map +1 -0
- package/dist/providers/openrouter.d.ts +24 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +177 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/registry.d.ts +7 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +38 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/security/path.d.ts +51 -0
- package/dist/security/path.d.ts.map +1 -0
- package/dist/security/path.js +187 -0
- package/dist/security/path.js.map +1 -0
- package/dist/security/sensitive-files.d.ts +3 -0
- package/dist/security/sensitive-files.d.ts.map +1 -0
- package/dist/security/sensitive-files.js +41 -0
- package/dist/security/sensitive-files.js.map +1 -0
- package/dist/session.d.ts +446 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +4595 -0
- package/dist/session.js.map +1 -0
- package/dist/settings.d.ts +46 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +134 -0
- package/dist/settings.js.map +1 -0
- package/dist/show-context.d.ts +35 -0
- package/dist/show-context.d.ts.map +1 -0
- package/dist/show-context.js +320 -0
- package/dist/show-context.js.map +1 -0
- package/dist/skills/loader.d.ts +49 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +166 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/summarize-context.d.ts +29 -0
- package/dist/summarize-context.d.ts.map +1 -0
- package/dist/summarize-context.js +247 -0
- package/dist/summarize-context.js.map +1 -0
- package/dist/templates/loader.d.ts +104 -0
- package/dist/templates/loader.d.ts.map +1 -0
- package/dist/templates/loader.js +514 -0
- package/dist/templates/loader.js.map +1 -0
- package/dist/tools/basic.d.ts +29 -0
- package/dist/tools/basic.d.ts.map +1 -0
- package/dist/tools/basic.js +2079 -0
- package/dist/tools/basic.js.map +1 -0
- package/dist/tools/comm.d.ts +17 -0
- package/dist/tools/comm.d.ts.map +1 -0
- package/dist/tools/comm.js +192 -0
- package/dist/tools/comm.js.map +1 -0
- package/dist/tools/web-fetch.d.ts +11 -0
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +237 -0
- package/dist/tools/web-fetch.js.map +1 -0
- package/dist/tools/web-search.d.ts +24 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +51 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/tui/app.d.ts +35 -0
- package/dist/tui/app.d.ts.map +1 -0
- package/dist/tui/app.js +1042 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/checkbox-picker.d.ts +35 -0
- package/dist/tui/checkbox-picker.d.ts.map +1 -0
- package/dist/tui/checkbox-picker.js +85 -0
- package/dist/tui/checkbox-picker.js.map +1 -0
- package/dist/tui/command-picker.d.ts +31 -0
- package/dist/tui/command-picker.d.ts.map +1 -0
- package/dist/tui/command-picker.js +113 -0
- package/dist/tui/command-picker.js.map +1 -0
- package/dist/tui/components/ask-panel.d.ts +21 -0
- package/dist/tui/components/ask-panel.d.ts.map +1 -0
- package/dist/tui/components/ask-panel.js +81 -0
- package/dist/tui/components/ask-panel.js.map +1 -0
- package/dist/tui/components/conversation-panel.d.ts +68 -0
- package/dist/tui/components/conversation-panel.d.ts.map +1 -0
- package/dist/tui/components/conversation-panel.js +611 -0
- package/dist/tui/components/conversation-panel.js.map +1 -0
- package/dist/tui/components/input-panel.d.ts +27 -0
- package/dist/tui/components/input-panel.d.ts.map +1 -0
- package/dist/tui/components/input-panel.js +725 -0
- package/dist/tui/components/input-panel.js.map +1 -0
- package/dist/tui/components/logo-panel.d.ts +14 -0
- package/dist/tui/components/logo-panel.d.ts.map +1 -0
- package/dist/tui/components/logo-panel.js +37 -0
- package/dist/tui/components/logo-panel.js.map +1 -0
- package/dist/tui/components/plan-panel.d.ts +10 -0
- package/dist/tui/components/plan-panel.d.ts.map +1 -0
- package/dist/tui/components/plan-panel.js +8 -0
- package/dist/tui/components/plan-panel.js.map +1 -0
- package/dist/tui/components/status-bar.d.ts +24 -0
- package/dist/tui/components/status-bar.d.ts.map +1 -0
- package/dist/tui/components/status-bar.js +80 -0
- package/dist/tui/components/status-bar.js.map +1 -0
- package/dist/tui/input/editor-state.d.ts +22 -0
- package/dist/tui/input/editor-state.d.ts.map +1 -0
- package/dist/tui/input/editor-state.js +157 -0
- package/dist/tui/input/editor-state.js.map +1 -0
- package/dist/tui/input/keymap.d.ts +3 -0
- package/dist/tui/input/keymap.d.ts.map +1 -0
- package/dist/tui/input/keymap.js +72 -0
- package/dist/tui/input/keymap.js.map +1 -0
- package/dist/tui/input/paste-slots.d.ts +17 -0
- package/dist/tui/input/paste-slots.d.ts.map +1 -0
- package/dist/tui/input/paste-slots.js +46 -0
- package/dist/tui/input/paste-slots.js.map +1 -0
- package/dist/tui/input/paste.d.ts +15 -0
- package/dist/tui/input/paste.d.ts.map +1 -0
- package/dist/tui/input/paste.js +35 -0
- package/dist/tui/input/paste.js.map +1 -0
- package/dist/tui/input/protocol.d.ts +9 -0
- package/dist/tui/input/protocol.d.ts.map +1 -0
- package/dist/tui/input/protocol.js +387 -0
- package/dist/tui/input/protocol.js.map +1 -0
- package/dist/tui/input/sanitize.d.ts +6 -0
- package/dist/tui/input/sanitize.d.ts.map +1 -0
- package/dist/tui/input/sanitize.js +20 -0
- package/dist/tui/input/sanitize.js.map +1 -0
- package/dist/tui/input/types.d.ts +18 -0
- package/dist/tui/input/types.d.ts.map +1 -0
- package/dist/tui/input/types.js +2 -0
- package/dist/tui/input/types.js.map +1 -0
- package/dist/tui/launch.d.ts +23 -0
- package/dist/tui/launch.d.ts.map +1 -0
- package/dist/tui/launch.js +104 -0
- package/dist/tui/launch.js.map +1 -0
- package/dist/tui/theme.d.ts +20 -0
- package/dist/tui/theme.d.ts.map +1 -0
- package/dist/tui/theme.js +29 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/tui/types.d.ts +136 -0
- package/dist/tui/types.d.ts.map +1 -0
- package/dist/tui/types.js +9 -0
- package/dist/tui/types.js.map +1 -0
- package/package.json +76 -0
- package/prompts/sections/agents_md.md +23 -0
- package/prompts/sections/important_log.md +16 -0
- package/prompts/sections/system_mechanisms.md +18 -0
- package/prompts/tools/apply_patch.md +31 -0
- package/prompts/tools/ask.md +18 -0
- package/prompts/tools/bash.md +13 -0
- package/prompts/tools/bash_background.md +9 -0
- package/prompts/tools/bash_output.md +9 -0
- package/prompts/tools/check_status.md +3 -0
- package/prompts/tools/diff.md +5 -0
- package/prompts/tools/edit_file.md +11 -0
- package/prompts/tools/glob.md +7 -0
- package/prompts/tools/grep.md +20 -0
- package/prompts/tools/kill_agent.md +3 -0
- package/prompts/tools/kill_shell.md +5 -0
- package/prompts/tools/list_dir.md +5 -0
- package/prompts/tools/plan.md +252 -0
- package/prompts/tools/read_file.md +9 -0
- package/prompts/tools/show_context.md +12 -0
- package/prompts/tools/skill.md +7 -0
- package/prompts/tools/spawn_agent.md +195 -0
- package/prompts/tools/summarize_context.md +122 -0
- package/prompts/tools/test.md +5 -0
- package/prompts/tools/wait.md +17 -0
- package/prompts/tools/web_fetch.md +9 -0
- package/prompts/tools/web_search.md +5 -0
- package/prompts/tools/write_file.md +11 -0
- package/skills/.staging/.gitkeep +0 -0
- package/skills/explain-code/SKILL.md +15 -0
- package/skills/skill-manager/SKILL.md +83 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider abstraction layer — base types and abstract class.
|
|
3
|
+
*
|
|
4
|
+
* Defines the unified interfaces for tool calls, usage tracking,
|
|
5
|
+
* provider responses, and the abstract BaseProvider contract.
|
|
6
|
+
*/
|
|
7
|
+
// ------------------------------------------------------------------
|
|
8
|
+
// Classes with computed properties
|
|
9
|
+
// ------------------------------------------------------------------
|
|
10
|
+
/** Token usage tracker. */
|
|
11
|
+
export class Usage {
|
|
12
|
+
inputTokens;
|
|
13
|
+
outputTokens;
|
|
14
|
+
cacheCreationTokens;
|
|
15
|
+
cacheReadTokens;
|
|
16
|
+
constructor(inputTokens = 0, outputTokens = 0, cacheCreationTokens = 0, cacheReadTokens = 0) {
|
|
17
|
+
this.inputTokens = inputTokens;
|
|
18
|
+
this.outputTokens = outputTokens;
|
|
19
|
+
this.cacheCreationTokens = cacheCreationTokens;
|
|
20
|
+
this.cacheReadTokens = cacheReadTokens;
|
|
21
|
+
}
|
|
22
|
+
get totalTokens() {
|
|
23
|
+
return this.inputTokens + this.outputTokens;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** Unified response from any provider. */
|
|
27
|
+
export class ProviderResponse {
|
|
28
|
+
text;
|
|
29
|
+
toolCalls;
|
|
30
|
+
usage;
|
|
31
|
+
raw;
|
|
32
|
+
reasoningContent;
|
|
33
|
+
reasoningState;
|
|
34
|
+
citations;
|
|
35
|
+
extra;
|
|
36
|
+
constructor(opts = {}) {
|
|
37
|
+
this.text = opts.text ?? "";
|
|
38
|
+
this.toolCalls = opts.toolCalls ?? [];
|
|
39
|
+
this.usage = opts.usage ?? new Usage();
|
|
40
|
+
this.raw = opts.raw ?? null;
|
|
41
|
+
this.reasoningContent = opts.reasoningContent ?? "";
|
|
42
|
+
this.reasoningState = opts.reasoningState ?? null;
|
|
43
|
+
this.citations = opts.citations ?? [];
|
|
44
|
+
this.extra = opts.extra ?? {};
|
|
45
|
+
}
|
|
46
|
+
get hasToolCalls() {
|
|
47
|
+
return this.toolCalls.length > 0;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** Extended tool execution result with optional metadata. */
|
|
51
|
+
export class ToolResult {
|
|
52
|
+
content;
|
|
53
|
+
actionHint;
|
|
54
|
+
tags;
|
|
55
|
+
metadata;
|
|
56
|
+
/**
|
|
57
|
+
* Optional multimodal content blocks for providers that support them
|
|
58
|
+
* (e.g. Anthropic tool_result with image blocks).
|
|
59
|
+
* When present, providers should use these instead of `content` string.
|
|
60
|
+
* The `content` string still serves as the text fallback / TUI display.
|
|
61
|
+
*/
|
|
62
|
+
contentBlocks;
|
|
63
|
+
constructor(opts) {
|
|
64
|
+
this.content = opts.content;
|
|
65
|
+
this.actionHint = opts.actionHint;
|
|
66
|
+
this.tags = opts.tags ?? [];
|
|
67
|
+
this.metadata = opts.metadata ?? {};
|
|
68
|
+
this.contentBlocks = opts.contentBlocks;
|
|
69
|
+
}
|
|
70
|
+
toString() {
|
|
71
|
+
return this.content;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// ------------------------------------------------------------------
|
|
75
|
+
// Abstract base provider
|
|
76
|
+
// ------------------------------------------------------------------
|
|
77
|
+
/**
|
|
78
|
+
* Interface that every provider adapter must implement.
|
|
79
|
+
*/
|
|
80
|
+
export class BaseProvider {
|
|
81
|
+
/**
|
|
82
|
+
* Whether this provider requires strictly alternating user/assistant roles.
|
|
83
|
+
* When true, the rendering pipeline merges consecutive same-role messages.
|
|
84
|
+
*/
|
|
85
|
+
requiresAlternatingRoles = false;
|
|
86
|
+
/**
|
|
87
|
+
* How to calculate the token budget for compact detection.
|
|
88
|
+
* - "subtract_output": budget = contextLength - maxOutputTokens (default)
|
|
89
|
+
* - "full_context": budget = contextLength, check only inputTokens
|
|
90
|
+
*/
|
|
91
|
+
budgetCalcMode = "subtract_output";
|
|
92
|
+
/**
|
|
93
|
+
* Async send with optional streaming callbacks.
|
|
94
|
+
*
|
|
95
|
+
* Delegates to `sendMessage` with the full options object, including
|
|
96
|
+
* streaming callbacks and abort signal. Each provider's `sendMessage`
|
|
97
|
+
* checks for `onTextChunk`/`onReasoningChunk` and routes to its
|
|
98
|
+
* streaming implementation when present.
|
|
99
|
+
*/
|
|
100
|
+
async asyncSendMessage(messages, tools, options) {
|
|
101
|
+
return this.sendMessage(messages, tools, options);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmEH,qEAAqE;AACrE,mCAAmC;AACnC,qEAAqE;AAErE,2BAA2B;AAC3B,MAAM,OAAO,KAAK;IAChB,WAAW,CAAS;IACpB,YAAY,CAAS;IACrB,mBAAmB,CAAS;IAC5B,eAAe,CAAS;IAExB,YAAY,WAAW,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,EAAE,mBAAmB,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC;QACzF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;IAC9C,CAAC;CACF;AAED,0CAA0C;AAC1C,MAAM,OAAO,gBAAgB;IAC3B,IAAI,CAAS;IACb,SAAS,CAAa;IACtB,KAAK,CAAQ;IACb,GAAG,CAAU;IACb,gBAAgB,CAAS;IACzB,cAAc,CAAU;IACxB,SAAS,CAAa;IACtB,KAAK,CAA0B;IAE/B,YAAY,OASR,EAAE;QACJ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,EAAE,CAAC;QACvC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC;QAC5B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC;QACpD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IAChC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,CAAC;CACF;AAED,6DAA6D;AAC7D,MAAM,OAAO,UAAU;IACrB,OAAO,CAAS;IAChB,UAAU,CAAU;IACpB,IAAI,CAAW;IACf,QAAQ,CAA0B;IAClC;;;;;OAKG;IACH,aAAa,CAAkC;IAE/C,YAAY,IAMX;QACC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;IAC1C,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAED,qEAAqE;AACrE,yBAAyB;AACzB,qEAAqE;AAErE;;GAEG;AACH,MAAM,OAAgB,YAAY;IAChC;;;OAGG;IACM,wBAAwB,GAAY,KAAK,CAAC;IAEnD;;;;OAIG;IACM,cAAc,GAAuC,iBAAiB,CAAC;IAWhF;;;;;;;OAOG;IACH,KAAK,CAAC,gBAAgB,CACpB,QAAmB,EACnB,KAAiB,EACjB,OAA4B;QAE5B,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLM (Zhipu AI) provider adapter.
|
|
3
|
+
*
|
|
4
|
+
* Extends OpenAIChatProvider with thinking support and
|
|
5
|
+
* native web_search tool format.
|
|
6
|
+
*/
|
|
7
|
+
import type { ModelConfig } from "../config.js";
|
|
8
|
+
import type { ToolDef } from "./base.js";
|
|
9
|
+
import { OpenAIChatProvider } from "./openai-chat.js";
|
|
10
|
+
export declare class GLMProvider extends OpenAIChatProvider {
|
|
11
|
+
constructor(config: ModelConfig);
|
|
12
|
+
protected _applyThinkingParams(kwargs: Record<string, unknown>, options?: import("./base.js").SendMessageOptions): void;
|
|
13
|
+
protected _convertTools(tools: ToolDef[]): {
|
|
14
|
+
toolsList: Record<string, unknown>[];
|
|
15
|
+
hasNativeWebSearch: boolean;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=glm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glm.d.ts","sourceRoot":"","sources":["../../src/providers/glm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,qBAAa,WAAY,SAAQ,kBAAkB;gBACrC,MAAM,EAAE,WAAW;cAUZ,oBAAoB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE,OAAO,WAAW,EAAE,kBAAkB,GAC/C,IAAI;cAgBY,aAAa,CAC9B,KAAK,EAAE,OAAO,EAAE,GACf;QAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QAAC,kBAAkB,EAAE,OAAO,CAAA;KAAE;CA0BzE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLM (Zhipu AI) provider adapter.
|
|
3
|
+
*
|
|
4
|
+
* Extends OpenAIChatProvider with thinking support and
|
|
5
|
+
* native web_search tool format.
|
|
6
|
+
*/
|
|
7
|
+
import { OpenAIChatProvider } from "./openai-chat.js";
|
|
8
|
+
export class GLMProvider extends OpenAIChatProvider {
|
|
9
|
+
constructor(config) {
|
|
10
|
+
if (!config.baseUrl) {
|
|
11
|
+
throw new Error("GLM provider requires a base_url. " +
|
|
12
|
+
"Use provider 'glm', 'glm-intl', 'glm-code', or 'glm-intl-code' (auto-configured) or set base_url.");
|
|
13
|
+
}
|
|
14
|
+
super(config);
|
|
15
|
+
}
|
|
16
|
+
_applyThinkingParams(kwargs, options) {
|
|
17
|
+
if (!this._config.supportsThinking)
|
|
18
|
+
return;
|
|
19
|
+
const level = options?.thinkingLevel;
|
|
20
|
+
if (level === "off" || level === "none") {
|
|
21
|
+
kwargs["extra_body"] = {
|
|
22
|
+
...(kwargs["extra_body"] || {}),
|
|
23
|
+
thinking: { type: "disabled" },
|
|
24
|
+
};
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
kwargs["extra_body"] = {
|
|
28
|
+
...(kwargs["extra_body"] || {}),
|
|
29
|
+
thinking: { type: "enabled", clear_thinking: false },
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
_convertTools(tools) {
|
|
33
|
+
const result = [];
|
|
34
|
+
for (const t of tools) {
|
|
35
|
+
if (t.name === "web_search") {
|
|
36
|
+
if (this._config.supportsWebSearch) {
|
|
37
|
+
result.push({
|
|
38
|
+
type: "web_search",
|
|
39
|
+
web_search: {
|
|
40
|
+
enable: true,
|
|
41
|
+
search_result: true,
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
result.push({
|
|
48
|
+
type: "function",
|
|
49
|
+
function: {
|
|
50
|
+
name: t.name,
|
|
51
|
+
description: t.description,
|
|
52
|
+
parameters: t.parameters,
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return { toolsList: result, hasNativeWebSearch: false };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=glm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glm.js","sourceRoot":"","sources":["../../src/providers/glm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,OAAO,WAAY,SAAQ,kBAAkB;IACjD,YAAY,MAAmB;QAC7B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,oCAAoC;gBAClC,mGAAmG,CACtG,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAEkB,oBAAoB,CACrC,MAA+B,EAC/B,OAAgD;QAEhD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB;YAAE,OAAO;QAC3C,MAAM,KAAK,GAAG,OAAO,EAAE,aAAa,CAAC;QACrC,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACxC,MAAM,CAAC,YAAY,CAAC,GAAG;gBACrB,GAAG,CAAE,MAAM,CAAC,YAAY,CAA6B,IAAI,EAAE,CAAC;gBAC5D,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;aAC/B,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,CAAC,YAAY,CAAC,GAAG;YACrB,GAAG,CAAE,MAAM,CAAC,YAAY,CAA6B,IAAI,EAAE,CAAC;YAC5D,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE;SACrD,CAAC;IACJ,CAAC;IAEkB,aAAa,CAC9B,KAAgB;QAEhB,MAAM,MAAM,GAA8B,EAAE,CAAC;QAC7C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;oBACnC,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,YAAY;wBAClB,UAAU,EAAE;4BACV,MAAM,EAAE,IAAI;4BACZ,aAAa,EAAE,IAAI;yBACpB;qBACF,CAAC,CAAC;gBACL,CAAC;gBACD,SAAS;YACX,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE;oBACR,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;iBACzB;aACF,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;IAC1D,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kimi (Moonshot) provider adapter.
|
|
3
|
+
*
|
|
4
|
+
* Extends OpenAIChatProvider with:
|
|
5
|
+
* - builtin_function.$web_search tool conversion (echo handled by tool loop)
|
|
6
|
+
* - Forced temperature=1 for thinking mode
|
|
7
|
+
* - reasoning_content enforcement on all assistant messages
|
|
8
|
+
*/
|
|
9
|
+
import type { ModelConfig } from "../config.js";
|
|
10
|
+
import type { Message, ToolDef } from "./base.js";
|
|
11
|
+
import { OpenAIChatProvider } from "./openai-chat.js";
|
|
12
|
+
export declare class KimiProvider extends OpenAIChatProvider {
|
|
13
|
+
private _thinkingEnabledForRequest;
|
|
14
|
+
constructor(config: ModelConfig);
|
|
15
|
+
protected _applyThinkingParams(kwargs: Record<string, unknown>, options?: import("./base.js").SendMessageOptions): void;
|
|
16
|
+
protected _convertMessages(messages: Message[]): Record<string, unknown>[];
|
|
17
|
+
sendMessage(messages: Message[], tools?: ToolDef[], options?: import("./base.js").SendMessageOptions): Promise<import("./base.js").ProviderResponse>;
|
|
18
|
+
protected _convertTools(tools: ToolDef[]): {
|
|
19
|
+
toolsList: Record<string, unknown>[];
|
|
20
|
+
hasNativeWebSearch: boolean;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=kimi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kimi.d.ts","sourceRoot":"","sources":["../../src/providers/kimi.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,qBAAa,YAAa,SAAQ,kBAAkB;IAClD,OAAO,CAAC,0BAA0B,CAAQ;gBAE9B,MAAM,EAAE,WAAW;cAUZ,oBAAoB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE,OAAO,WAAW,EAAE,kBAAkB,GAC/C,IAAI;cAQY,gBAAgB,CACjC,QAAQ,EAAE,OAAO,EAAE,GAClB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IA4Bb,WAAW,CACxB,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,CAAC,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE,OAAO,WAAW,EAAE,kBAAkB,GAC/C,OAAO,CAAC,OAAO,WAAW,EAAE,gBAAgB,CAAC;cAW7B,aAAa,CAC9B,KAAK,EAAE,OAAO,EAAE,GACf;QAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QAAC,kBAAkB,EAAE,OAAO,CAAA;KAAE;CAuBzE"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kimi (Moonshot) provider adapter.
|
|
3
|
+
*
|
|
4
|
+
* Extends OpenAIChatProvider with:
|
|
5
|
+
* - builtin_function.$web_search tool conversion (echo handled by tool loop)
|
|
6
|
+
* - Forced temperature=1 for thinking mode
|
|
7
|
+
* - reasoning_content enforcement on all assistant messages
|
|
8
|
+
*/
|
|
9
|
+
import { OpenAIChatProvider } from "./openai-chat.js";
|
|
10
|
+
export class KimiProvider extends OpenAIChatProvider {
|
|
11
|
+
_thinkingEnabledForRequest = true;
|
|
12
|
+
constructor(config) {
|
|
13
|
+
if (!config.baseUrl) {
|
|
14
|
+
throw new Error("Kimi provider requires a base_url. " +
|
|
15
|
+
"Use provider 'kimi', 'kimi-cn', 'kimi-ai', or 'kimi-code', or set base_url explicitly.");
|
|
16
|
+
}
|
|
17
|
+
super(config);
|
|
18
|
+
}
|
|
19
|
+
_applyThinkingParams(kwargs, options) {
|
|
20
|
+
if (!this._config.supportsThinking)
|
|
21
|
+
return;
|
|
22
|
+
const level = options?.thinkingLevel;
|
|
23
|
+
if (level === "off" || level === "none")
|
|
24
|
+
return;
|
|
25
|
+
// Kimi K2.5 thinking requires temperature=1
|
|
26
|
+
kwargs["temperature"] = 1;
|
|
27
|
+
}
|
|
28
|
+
_convertMessages(messages) {
|
|
29
|
+
const converted = super._convertMessages(messages);
|
|
30
|
+
if (!this._thinkingEnabledForRequest) {
|
|
31
|
+
for (const msg of converted) {
|
|
32
|
+
if (msg["role"] === "assistant") {
|
|
33
|
+
delete msg["reasoning_content"];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return converted;
|
|
37
|
+
}
|
|
38
|
+
// Kimi requires reasoning_content on ALL assistant messages when
|
|
39
|
+
// thinking is active. Ensure a non-empty fallback.
|
|
40
|
+
for (const msg of converted) {
|
|
41
|
+
if (msg["role"] !== "assistant")
|
|
42
|
+
continue;
|
|
43
|
+
const rc = msg["reasoning_content"];
|
|
44
|
+
if (typeof rc === "string" && rc.trim())
|
|
45
|
+
continue;
|
|
46
|
+
const content = msg["content"];
|
|
47
|
+
if (typeof content === "string" && content.trim()) {
|
|
48
|
+
msg["reasoning_content"] = content;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
msg["reasoning_content"] = "[assistant tool call]";
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return converted;
|
|
55
|
+
}
|
|
56
|
+
async sendMessage(messages, tools, options) {
|
|
57
|
+
this._thinkingEnabledForRequest = !(options?.thinkingLevel === "off" || options?.thinkingLevel === "none");
|
|
58
|
+
try {
|
|
59
|
+
return await super.sendMessage(messages, tools, options);
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
this._thinkingEnabledForRequest = true;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
_convertTools(tools) {
|
|
66
|
+
const result = [];
|
|
67
|
+
for (const t of tools) {
|
|
68
|
+
if (t.name === "web_search") {
|
|
69
|
+
if (this._config.supportsWebSearch) {
|
|
70
|
+
result.push({
|
|
71
|
+
type: "builtin_function",
|
|
72
|
+
function: { name: "$web_search" },
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
result.push({
|
|
78
|
+
type: "function",
|
|
79
|
+
function: {
|
|
80
|
+
name: t.name,
|
|
81
|
+
description: t.description,
|
|
82
|
+
parameters: t.parameters,
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return { toolsList: result, hasNativeWebSearch: false };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=kimi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kimi.js","sourceRoot":"","sources":["../../src/providers/kimi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MiniMax provider adapter.
|
|
3
|
+
*
|
|
4
|
+
* Extends OpenAIChatProvider with reasoning_split support.
|
|
5
|
+
* MiniMax embeds reasoning in <think>...</think> tags within content
|
|
6
|
+
* rather than using a separate reasoning_details field.
|
|
7
|
+
*/
|
|
8
|
+
import type { ModelConfig } from "../config.js";
|
|
9
|
+
import { ProviderResponse, type Message, type SendMessageOptions, type ToolDef } from "./base.js";
|
|
10
|
+
import { OpenAIChatProvider } from "./openai-chat.js";
|
|
11
|
+
export declare class MiniMaxProvider extends OpenAIChatProvider {
|
|
12
|
+
constructor(config: ModelConfig);
|
|
13
|
+
protected _applyThinkingParams(kwargs: Record<string, unknown>): void;
|
|
14
|
+
sendMessage(messages: Message[], tools?: ToolDef[], options?: SendMessageOptions): Promise<ProviderResponse>;
|
|
15
|
+
protected _convertMessages(messages: Message[]): Record<string, unknown>[];
|
|
16
|
+
private static _buildAssistantIndexMap;
|
|
17
|
+
private static _collectAssistantProjections;
|
|
18
|
+
private static _projectAssistant;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=minimax.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minimax.d.ts","sourceRoot":"","sources":["../../src/providers/minimax.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EACL,gBAAgB,EAChB,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACvB,KAAK,OAAO,EACb,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAqBtD,qBAAa,eAAgB,SAAQ,kBAAkB;gBACzC,MAAM,EAAE,WAAW;cAUZ,oBAAoB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,IAAI;IAQQ,WAAW,CACxB,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,CAAC,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,gBAAgB,CAAC;cA6CT,gBAAgB,CACjC,QAAQ,EAAE,OAAO,EAAE,GAClB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAiC5B,OAAO,CAAC,MAAM,CAAC,uBAAuB;IA6DtC,OAAO,CAAC,MAAM,CAAC,4BAA4B;IAe3C,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAmCjC"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MiniMax provider adapter.
|
|
3
|
+
*
|
|
4
|
+
* Extends OpenAIChatProvider with reasoning_split support.
|
|
5
|
+
* MiniMax embeds reasoning in <think>...</think> tags within content
|
|
6
|
+
* rather than using a separate reasoning_details field.
|
|
7
|
+
*/
|
|
8
|
+
import { OpenAIChatProvider } from "./openai-chat.js";
|
|
9
|
+
/** Extract <think> block from text. Returns { reasoning, visible } or null if no think block. */
|
|
10
|
+
function extractThinkBlock(text) {
|
|
11
|
+
const trimmed = text.replace(/^\s*/, "");
|
|
12
|
+
if (!trimmed.startsWith("<think>"))
|
|
13
|
+
return null;
|
|
14
|
+
const tagStart = text.indexOf("<think>") + "<think>".length;
|
|
15
|
+
const closeIdx = text.indexOf("</think>", tagStart);
|
|
16
|
+
if (closeIdx < 0)
|
|
17
|
+
return null; // incomplete
|
|
18
|
+
const reasoning = text.slice(tagStart, closeIdx);
|
|
19
|
+
const visible = text.slice(closeIdx + "</think>".length).replace(/^\r?\n+/, "");
|
|
20
|
+
return { reasoning, visible };
|
|
21
|
+
}
|
|
22
|
+
export class MiniMaxProvider extends OpenAIChatProvider {
|
|
23
|
+
constructor(config) {
|
|
24
|
+
if (!config.baseUrl) {
|
|
25
|
+
throw new Error("MiniMax provider requires a base_url. " +
|
|
26
|
+
"Use provider 'minimax' or 'minimax-cn' (auto-configured) or set base_url.");
|
|
27
|
+
}
|
|
28
|
+
super(config);
|
|
29
|
+
}
|
|
30
|
+
_applyThinkingParams(kwargs) {
|
|
31
|
+
if (!this._config.supportsThinking)
|
|
32
|
+
return;
|
|
33
|
+
kwargs["extra_body"] = {
|
|
34
|
+
...(kwargs["extra_body"] || {}),
|
|
35
|
+
reasoning_split: true,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
async sendMessage(messages, tools, options) {
|
|
39
|
+
const result = await super.sendMessage(messages, tools, options);
|
|
40
|
+
// Streaming path: <think> extraction is handled in _callStream.
|
|
41
|
+
// Non-streaming path: extract reasoning from <think> tags in content.
|
|
42
|
+
if (!result.reasoningContent && result.text) {
|
|
43
|
+
const extracted = extractThinkBlock(result.text);
|
|
44
|
+
if (extracted) {
|
|
45
|
+
result.reasoningContent = extracted.reasoning;
|
|
46
|
+
result.reasoningState = extracted.reasoning || null;
|
|
47
|
+
result.text = extracted.visible;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Legacy: also check reasoning_details in raw response (older API versions)
|
|
51
|
+
if (!result.reasoningContent) {
|
|
52
|
+
try {
|
|
53
|
+
const raw = result.raw;
|
|
54
|
+
if (!raw)
|
|
55
|
+
return result;
|
|
56
|
+
const choices = raw["choices"] || [];
|
|
57
|
+
if (choices.length === 0)
|
|
58
|
+
return result;
|
|
59
|
+
const message = choices[0]["message"];
|
|
60
|
+
const details = message?.["reasoning_details"];
|
|
61
|
+
if (details) {
|
|
62
|
+
const reasoningTexts = [];
|
|
63
|
+
for (const item of details) {
|
|
64
|
+
const text = item["content"] || item["text"] || "";
|
|
65
|
+
if (text)
|
|
66
|
+
reasoningTexts.push(text);
|
|
67
|
+
}
|
|
68
|
+
if (reasoningTexts.length > 0) {
|
|
69
|
+
result.reasoningContent = reasoningTexts.join("\n");
|
|
70
|
+
result.reasoningState = details;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// ignore
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
_convertMessages(messages) {
|
|
81
|
+
const converted = super._convertMessages(messages);
|
|
82
|
+
const originalMessages = messages;
|
|
83
|
+
const assistantIndexMap = MiniMaxProvider._buildAssistantIndexMap(originalMessages, converted);
|
|
84
|
+
for (let i = 0; i < converted.length; i++) {
|
|
85
|
+
const msg = converted[i];
|
|
86
|
+
if (msg["role"] !== "assistant")
|
|
87
|
+
continue;
|
|
88
|
+
// Re-embed reasoning as <think> block in content for multi-turn context,
|
|
89
|
+
// since MiniMax expects thinking content in the conversation history.
|
|
90
|
+
const origIdx = assistantIndexMap.get(i);
|
|
91
|
+
if (origIdx == null)
|
|
92
|
+
continue;
|
|
93
|
+
const orig = originalMessages[origIdx];
|
|
94
|
+
const reasoning = orig["reasoning_content"];
|
|
95
|
+
const content = msg["content"] || "";
|
|
96
|
+
if (reasoning && !content.includes("<think>")) {
|
|
97
|
+
msg["content"] = `<think>\n${reasoning}\n</think>\n${content}`;
|
|
98
|
+
}
|
|
99
|
+
// Also accept `_reasoning_state` when the upstream response provides it.
|
|
100
|
+
const blocks = orig["_reasoning_state"];
|
|
101
|
+
if (blocks && Array.isArray(blocks)) {
|
|
102
|
+
converted[i]["reasoning_details"] = blocks;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return converted;
|
|
106
|
+
}
|
|
107
|
+
static _buildAssistantIndexMap(original, converted) {
|
|
108
|
+
const originalAssistants = MiniMaxProvider._collectAssistantProjections(original);
|
|
109
|
+
const convertedAssistants = MiniMaxProvider._collectAssistantProjections(converted);
|
|
110
|
+
const mapped = new Map();
|
|
111
|
+
const usedOriginal = new Set();
|
|
112
|
+
const assignUniqueMatches = (predicate) => {
|
|
113
|
+
for (const conv of convertedAssistants) {
|
|
114
|
+
if (mapped.has(conv.msgIndex))
|
|
115
|
+
continue;
|
|
116
|
+
const candidates = originalAssistants.filter((orig) => !usedOriginal.has(orig.msgIndex) && predicate(orig, conv));
|
|
117
|
+
if (candidates.length === 1) {
|
|
118
|
+
const chosen = candidates[0];
|
|
119
|
+
mapped.set(conv.msgIndex, chosen.msgIndex);
|
|
120
|
+
usedOriginal.add(chosen.msgIndex);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
// 1) Strong match: text + detailed tool signature.
|
|
125
|
+
assignUniqueMatches((orig, conv) => !!orig.toolSignatureKey &&
|
|
126
|
+
orig.toolSignatureKey === conv.toolSignatureKey &&
|
|
127
|
+
orig.text === conv.text);
|
|
128
|
+
// 2) Medium match: text + tool name sequence.
|
|
129
|
+
assignUniqueMatches((orig, conv) => !!orig.toolNamesKey &&
|
|
130
|
+
orig.toolNamesKey === conv.toolNamesKey &&
|
|
131
|
+
orig.text === conv.text);
|
|
132
|
+
// 3) Weak match: text only.
|
|
133
|
+
assignUniqueMatches((orig, conv) => !!orig.text && orig.text === conv.text);
|
|
134
|
+
// 4) Final fallback: preserve order only when the remaining cardinality matches.
|
|
135
|
+
// This avoids the old "always ordinal" misalignment failure mode.
|
|
136
|
+
const remainingConverted = convertedAssistants.filter((conv) => !mapped.has(conv.msgIndex));
|
|
137
|
+
const remainingOriginal = originalAssistants.filter((orig) => !usedOriginal.has(orig.msgIndex));
|
|
138
|
+
if (remainingConverted.length === remainingOriginal.length) {
|
|
139
|
+
for (let i = 0; i < remainingConverted.length; i++) {
|
|
140
|
+
mapped.set(remainingConverted[i].msgIndex, remainingOriginal[i].msgIndex);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return mapped;
|
|
144
|
+
}
|
|
145
|
+
static _collectAssistantProjections(messages) {
|
|
146
|
+
const assistants = [];
|
|
147
|
+
for (let i = 0; i < messages.length; i++) {
|
|
148
|
+
const msg = messages[i];
|
|
149
|
+
if (msg["role"] !== "assistant")
|
|
150
|
+
continue;
|
|
151
|
+
assistants.push({
|
|
152
|
+
msgIndex: i,
|
|
153
|
+
...MiniMaxProvider._projectAssistant(msg),
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
return assistants;
|
|
157
|
+
}
|
|
158
|
+
static _projectAssistant(msg) {
|
|
159
|
+
const text = String(msg["content"] || msg["text"] || "").trim();
|
|
160
|
+
const toolCalls = Array.isArray(msg["tool_calls"])
|
|
161
|
+
? msg["tool_calls"]
|
|
162
|
+
: [];
|
|
163
|
+
const toolNames = [];
|
|
164
|
+
const toolSigs = [];
|
|
165
|
+
for (const tc of toolCalls) {
|
|
166
|
+
const fn = tc["function"];
|
|
167
|
+
const name = String(tc["name"] || fn?.["name"] || "");
|
|
168
|
+
const id = String(tc["id"] || tc["tool_call_id"] || "");
|
|
169
|
+
const argsRaw = tc["arguments"] ?? fn?.["arguments"];
|
|
170
|
+
let args = "";
|
|
171
|
+
if (typeof argsRaw === "string") {
|
|
172
|
+
args = argsRaw;
|
|
173
|
+
}
|
|
174
|
+
else if (argsRaw && typeof argsRaw === "object") {
|
|
175
|
+
try {
|
|
176
|
+
args = JSON.stringify(argsRaw);
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
args = "";
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
toolNames.push(name);
|
|
183
|
+
toolSigs.push(`${name}|${id}|${args}`);
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
text,
|
|
187
|
+
toolNamesKey: toolNames.join("||"),
|
|
188
|
+
toolSignatureKey: toolSigs.join("||"),
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=minimax.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minimax.js","sourceRoot":"","sources":["../../src/providers/minimax.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Chat Completions API provider.
|
|
3
|
+
*
|
|
4
|
+
* Also serves as the base class for Kimi, GLM, MiniMax,
|
|
5
|
+
* and OpenRouter providers that use OpenAI-compatible endpoints.
|
|
6
|
+
*/
|
|
7
|
+
import OpenAI from "openai";
|
|
8
|
+
import type { ModelConfig } from "../config.js";
|
|
9
|
+
import { BaseProvider, ProviderResponse, type Message, type SendMessageOptions, type ToolDef } from "./base.js";
|
|
10
|
+
export declare class OpenAIChatProvider extends BaseProvider {
|
|
11
|
+
protected _config: ModelConfig;
|
|
12
|
+
protected _client: OpenAI;
|
|
13
|
+
private _toolArgsMode;
|
|
14
|
+
constructor(config: ModelConfig);
|
|
15
|
+
protected _buildClient(config: ModelConfig): OpenAI;
|
|
16
|
+
private _resolveToolArgsMode;
|
|
17
|
+
private _mergeToolArgsChunk;
|
|
18
|
+
protected _convertTools(tools: ToolDef[]): {
|
|
19
|
+
toolsList: Record<string, unknown>[];
|
|
20
|
+
hasNativeWebSearch: boolean;
|
|
21
|
+
};
|
|
22
|
+
protected _convertMessages(messages: Message[]): Record<string, unknown>[];
|
|
23
|
+
private _parseResponse;
|
|
24
|
+
protected _applyThinkingParams(kwargs: Record<string, unknown>, options?: SendMessageOptions): void;
|
|
25
|
+
protected _augmentRequestKwargs(_kwargs: Record<string, unknown>, _ctx: {
|
|
26
|
+
hasNativeWebSearch: boolean;
|
|
27
|
+
tools?: ToolDef[];
|
|
28
|
+
options?: SendMessageOptions;
|
|
29
|
+
}): void;
|
|
30
|
+
sendMessage(messages: Message[], tools?: ToolDef[], options?: SendMessageOptions): Promise<ProviderResponse>;
|
|
31
|
+
private _callStream;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=openai-chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-chat.d.ts","sourceRoot":"","sources":["../../src/providers/openai-chat.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EACL,YAAY,EAEZ,gBAAgB,EAGhB,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACvB,KAAK,OAAO,EACb,MAAM,WAAW,CAAC;AAInB,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC;IAC/B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,aAAa,CAAe;gBAExB,MAAM,EAAE,WAAW;IAO/B,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM;IAUnD,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,mBAAmB;IAkB3B,SAAS,CAAC,aAAa,CACrB,KAAK,EAAE,OAAO,EAAE,GACf;QAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QAAC,kBAAkB,EAAE,OAAO,CAAA;KAAE;IA0BxE,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAmG1E,OAAO,CAAC,cAAc;IAgEtB,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI;IAWnG,SAAS,CAAC,qBAAqB,CAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,EAAE;QACJ,kBAAkB,EAAE,OAAO,CAAC;QAC5B,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,EAAE,kBAAkB,CAAC;KAC9B,GACA,IAAI;IAQD,WAAW,CACf,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,CAAC,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,gBAAgB,CAAC;YA+Ed,WAAW;CAyS1B"}
|