@mainwp/control 1.0.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 +674 -0
- package/README.md +583 -0
- package/bin/_exit.js +12 -0
- package/bin/dev.js +7 -0
- package/bin/run.js +7 -0
- package/dist/chat/chat-engine.d.ts +213 -0
- package/dist/chat/chat-engine.d.ts.map +1 -0
- package/dist/chat/chat-engine.js +636 -0
- package/dist/chat/chat-engine.js.map +1 -0
- package/dist/chat/index.d.ts +10 -0
- package/dist/chat/index.d.ts.map +1 -0
- package/dist/chat/index.js +14 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/providers/anthropic.d.ts +52 -0
- package/dist/chat/providers/anthropic.d.ts.map +1 -0
- package/dist/chat/providers/anthropic.js +292 -0
- package/dist/chat/providers/anthropic.js.map +1 -0
- package/dist/chat/providers/gemini.d.ts +52 -0
- package/dist/chat/providers/gemini.d.ts.map +1 -0
- package/dist/chat/providers/gemini.js +284 -0
- package/dist/chat/providers/gemini.js.map +1 -0
- package/dist/chat/providers/index.d.ts +19 -0
- package/dist/chat/providers/index.d.ts.map +1 -0
- package/dist/chat/providers/index.js +23 -0
- package/dist/chat/providers/index.js.map +1 -0
- package/dist/chat/providers/local.d.ts +37 -0
- package/dist/chat/providers/local.d.ts.map +1 -0
- package/dist/chat/providers/local.js +130 -0
- package/dist/chat/providers/local.js.map +1 -0
- package/dist/chat/providers/openai-compatible.d.ts +155 -0
- package/dist/chat/providers/openai-compatible.d.ts.map +1 -0
- package/dist/chat/providers/openai-compatible.js +264 -0
- package/dist/chat/providers/openai-compatible.js.map +1 -0
- package/dist/chat/providers/openai.d.ts +24 -0
- package/dist/chat/providers/openai.d.ts.map +1 -0
- package/dist/chat/providers/openai.js +62 -0
- package/dist/chat/providers/openai.js.map +1 -0
- package/dist/chat/providers/openrouter.d.ts +26 -0
- package/dist/chat/providers/openrouter.d.ts.map +1 -0
- package/dist/chat/providers/openrouter.js +65 -0
- package/dist/chat/providers/openrouter.js.map +1 -0
- package/dist/chat/providers/provider-fetch.d.ts +15 -0
- package/dist/chat/providers/provider-fetch.d.ts.map +1 -0
- package/dist/chat/providers/provider-fetch.js +35 -0
- package/dist/chat/providers/provider-fetch.js.map +1 -0
- package/dist/chat/providers/provider.d.ts +214 -0
- package/dist/chat/providers/provider.d.ts.map +1 -0
- package/dist/chat/providers/provider.js +166 -0
- package/dist/chat/providers/provider.js.map +1 -0
- package/dist/chat/providers/sse-reader.d.ts +21 -0
- package/dist/chat/providers/sse-reader.d.ts.map +1 -0
- package/dist/chat/providers/sse-reader.js +48 -0
- package/dist/chat/providers/sse-reader.js.map +1 -0
- package/dist/chat/system-prompt.d.ts +33 -0
- package/dist/chat/system-prompt.d.ts.map +1 -0
- package/dist/chat/system-prompt.js +166 -0
- package/dist/chat/system-prompt.js.map +1 -0
- package/dist/chat/tool-envelope.d.ts +72 -0
- package/dist/chat/tool-envelope.d.ts.map +1 -0
- package/dist/chat/tool-envelope.js +263 -0
- package/dist/chat/tool-envelope.js.map +1 -0
- package/dist/commands/abilities/info.d.ts +21 -0
- package/dist/commands/abilities/info.d.ts.map +1 -0
- package/dist/commands/abilities/info.js +80 -0
- package/dist/commands/abilities/info.js.map +1 -0
- package/dist/commands/abilities/list.d.ts +19 -0
- package/dist/commands/abilities/list.d.ts.map +1 -0
- package/dist/commands/abilities/list.js +98 -0
- package/dist/commands/abilities/list.js.map +1 -0
- package/dist/commands/abilities/run.d.ts +75 -0
- package/dist/commands/abilities/run.d.ts.map +1 -0
- package/dist/commands/abilities/run.js +468 -0
- package/dist/commands/abilities/run.js.map +1 -0
- package/dist/commands/chat.d.ts +54 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +384 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/config/show.d.ts +54 -0
- package/dist/commands/config/show.d.ts.map +1 -0
- package/dist/commands/config/show.js +324 -0
- package/dist/commands/config/show.js.map +1 -0
- package/dist/commands/doctor.d.ts +77 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +412 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/jobs/watch.d.ts +50 -0
- package/dist/commands/jobs/watch.d.ts.map +1 -0
- package/dist/commands/jobs/watch.js +269 -0
- package/dist/commands/jobs/watch.js.map +1 -0
- package/dist/commands/login.d.ts +25 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +165 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/profile/delete.d.ts +22 -0
- package/dist/commands/profile/delete.d.ts.map +1 -0
- package/dist/commands/profile/delete.js +57 -0
- package/dist/commands/profile/delete.js.map +1 -0
- package/dist/commands/profile/list.d.ts +19 -0
- package/dist/commands/profile/list.d.ts.map +1 -0
- package/dist/commands/profile/list.js +53 -0
- package/dist/commands/profile/list.js.map +1 -0
- package/dist/commands/profile/use.d.ts +22 -0
- package/dist/commands/profile/use.d.ts.map +1 -0
- package/dist/commands/profile/use.js +46 -0
- package/dist/commands/profile/use.js.map +1 -0
- package/dist/config/fs-utils.d.ts +14 -0
- package/dist/config/fs-utils.d.ts.map +1 -0
- package/dist/config/fs-utils.js +31 -0
- package/dist/config/fs-utils.js.map +1 -0
- package/dist/config/keychain.d.ts +53 -0
- package/dist/config/keychain.d.ts.map +1 -0
- package/dist/config/keychain.js +175 -0
- package/dist/config/keychain.js.map +1 -0
- package/dist/config/profile-store.d.ts +85 -0
- package/dist/config/profile-store.d.ts.map +1 -0
- package/dist/config/profile-store.js +228 -0
- package/dist/config/profile-store.js.map +1 -0
- package/dist/config/settings.d.ts +71 -0
- package/dist/config/settings.d.ts.map +1 -0
- package/dist/config/settings.js +151 -0
- package/dist/config/settings.js.map +1 -0
- package/dist/core/abilities-executor.d.ts +126 -0
- package/dist/core/abilities-executor.d.ts.map +1 -0
- package/dist/core/abilities-executor.js +264 -0
- package/dist/core/abilities-executor.js.map +1 -0
- package/dist/core/batch-manager.d.ts +113 -0
- package/dist/core/batch-manager.d.ts.map +1 -0
- package/dist/core/batch-manager.js +244 -0
- package/dist/core/batch-manager.js.map +1 -0
- package/dist/core/http-client.d.ts +111 -0
- package/dist/core/http-client.d.ts.map +1 -0
- package/dist/core/http-client.js +329 -0
- package/dist/core/http-client.js.map +1 -0
- package/dist/core/safety-controller.d.ts +114 -0
- package/dist/core/safety-controller.d.ts.map +1 -0
- package/dist/core/safety-controller.js +229 -0
- package/dist/core/safety-controller.js.map +1 -0
- package/dist/hooks/command-not-found.d.ts +12 -0
- package/dist/hooks/command-not-found.d.ts.map +1 -0
- package/dist/hooks/command-not-found.js +58 -0
- package/dist/hooks/command-not-found.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/base-command.d.ts +123 -0
- package/dist/lib/base-command.d.ts.map +1 -0
- package/dist/lib/base-command.js +285 -0
- package/dist/lib/base-command.js.map +1 -0
- package/dist/output/formatter.d.ts +48 -0
- package/dist/output/formatter.d.ts.map +1 -0
- package/dist/output/formatter.js +138 -0
- package/dist/output/formatter.js.map +1 -0
- package/dist/output/json-envelope.d.ts +43 -0
- package/dist/output/json-envelope.d.ts.map +1 -0
- package/dist/output/json-envelope.js +73 -0
- package/dist/output/json-envelope.js.map +1 -0
- package/dist/utils/audit-logger.d.ts +97 -0
- package/dist/utils/audit-logger.d.ts.map +1 -0
- package/dist/utils/audit-logger.js +169 -0
- package/dist/utils/audit-logger.js.map +1 -0
- package/dist/utils/colors.d.ts +29 -0
- package/dist/utils/colors.d.ts.map +1 -0
- package/dist/utils/colors.js +36 -0
- package/dist/utils/colors.js.map +1 -0
- package/dist/utils/errors.d.ts +107 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +149 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/exit-codes.d.ts +21 -0
- package/dist/utils/exit-codes.d.ts.map +1 -0
- package/dist/utils/exit-codes.js +20 -0
- package/dist/utils/exit-codes.js.map +1 -0
- package/dist/utils/format.d.ts +64 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +69 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/prompt.d.ts +34 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +132 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/retry.d.ts +59 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +96 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/terminal-sanitizer.d.ts +60 -0
- package/dist/utils/terminal-sanitizer.d.ts.map +1 -0
- package/dist/utils/terminal-sanitizer.js +166 -0
- package/dist/utils/terminal-sanitizer.js.map +1 -0
- package/dist/validation/input-sanitizer.d.ts +76 -0
- package/dist/validation/input-sanitizer.d.ts.map +1 -0
- package/dist/validation/input-sanitizer.js +199 -0
- package/dist/validation/input-sanitizer.js.map +1 -0
- package/dist/validation/schema-validator.d.ts +75 -0
- package/dist/validation/schema-validator.d.ts.map +1 -0
- package/dist/validation/schema-validator.js +147 -0
- package/dist/validation/schema-validator.js.map +1 -0
- package/oclif.manifest.json +857 -0
- package/package.json +101 -0
- package/scripts/completions/README.md +221 -0
- package/scripts/completions/mainwpcontrol.bash +193 -0
- package/scripts/completions/mainwpcontrol.zsh +267 -0
- package/scripts/completions/profile-completer.sh +35 -0
- package/scripts/completions/regenerate.sh +78 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared HTTP fetch utility for LLM providers
|
|
3
|
+
*
|
|
4
|
+
* Extracts the common makeRequest pattern: timeout via AbortController,
|
|
5
|
+
* combined abort signals, JSON POST, error handling.
|
|
6
|
+
*/
|
|
7
|
+
import { stripControlChars } from '../../utils/terminal-sanitizer.js';
|
|
8
|
+
export async function makeProviderRequest(options) {
|
|
9
|
+
const controller = new AbortController();
|
|
10
|
+
const timeoutId = setTimeout(() => controller.abort(), options.timeout);
|
|
11
|
+
const combinedSignal = options.signal
|
|
12
|
+
? AbortSignal.any([options.signal, controller.signal])
|
|
13
|
+
: controller.signal;
|
|
14
|
+
try {
|
|
15
|
+
const response = await fetch(options.url, {
|
|
16
|
+
method: 'POST',
|
|
17
|
+
headers: options.headers,
|
|
18
|
+
body: JSON.stringify(options.body),
|
|
19
|
+
signal: combinedSignal,
|
|
20
|
+
});
|
|
21
|
+
if (!response.ok) {
|
|
22
|
+
const errorText = await response.text();
|
|
23
|
+
// SECURITY: Strip control characters and truncate to prevent exfiltration
|
|
24
|
+
// of large payloads from untrusted API error bodies
|
|
25
|
+
const sanitized = stripControlChars(errorText);
|
|
26
|
+
const truncated = sanitized.length > 500 ? sanitized.slice(0, 500) + '...' : sanitized;
|
|
27
|
+
throw new Error(`${options.providerName} API error: ${response.status} ${truncated}`);
|
|
28
|
+
}
|
|
29
|
+
return (await response.json());
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
clearTimeout(timeoutId);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=provider-fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-fetch.js","sourceRoot":"","sources":["../../../src/chat/providers/provider-fetch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAI,OAO5C;IACC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAExE,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM;QACnC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;IAEtB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;YACxC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;YAClC,MAAM,EAAE,cAAc;SACvB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,0EAA0E;YAC1E,oDAAoD;YACpD,MAAM,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YACvF,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,YAAY,eAAe,QAAQ,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;QACxF,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;IACtC,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Provider Interface for mainwpcontrol
|
|
3
|
+
*
|
|
4
|
+
* Abstract interface for different LLM providers.
|
|
5
|
+
* Supported: OpenAI, Anthropic, Gemini, OpenRouter, Local (OpenAI-compatible)
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Message role in conversation
|
|
9
|
+
*/
|
|
10
|
+
export type MessageRole = 'system' | 'user' | 'assistant' | 'tool';
|
|
11
|
+
/**
|
|
12
|
+
* Chat message
|
|
13
|
+
*/
|
|
14
|
+
export interface Message {
|
|
15
|
+
role: MessageRole;
|
|
16
|
+
content: string;
|
|
17
|
+
/** Tool call ID (for tool responses) */
|
|
18
|
+
toolCallId?: string;
|
|
19
|
+
/** Tool name (for tool responses) */
|
|
20
|
+
toolName?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Tool definition for function calling
|
|
24
|
+
*/
|
|
25
|
+
export interface ToolDefinition {
|
|
26
|
+
name: string;
|
|
27
|
+
description: string;
|
|
28
|
+
parameters: Record<string, unknown>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Tool call from LLM
|
|
32
|
+
*/
|
|
33
|
+
export interface ToolCall {
|
|
34
|
+
id: string;
|
|
35
|
+
name: string;
|
|
36
|
+
arguments: Record<string, unknown>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* LLM response
|
|
40
|
+
*/
|
|
41
|
+
export interface LLMResponse {
|
|
42
|
+
/** Raw content from LLM */
|
|
43
|
+
content: string;
|
|
44
|
+
/** Parsed tool calls (if using function calling API) */
|
|
45
|
+
toolCalls?: ToolCall[] | undefined;
|
|
46
|
+
/** Finish reason */
|
|
47
|
+
finishReason: 'stop' | 'tool_calls' | 'length' | 'content_filter' | 'error';
|
|
48
|
+
/** Usage statistics */
|
|
49
|
+
usage?: {
|
|
50
|
+
promptTokens: number;
|
|
51
|
+
completionTokens: number;
|
|
52
|
+
totalTokens: number;
|
|
53
|
+
} | undefined;
|
|
54
|
+
/** Model used */
|
|
55
|
+
model: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Chat options
|
|
59
|
+
*/
|
|
60
|
+
export interface ChatOptions {
|
|
61
|
+
/** Model to use (provider-specific) */
|
|
62
|
+
model?: string | undefined;
|
|
63
|
+
/** Temperature (0-2) */
|
|
64
|
+
temperature?: number | undefined;
|
|
65
|
+
/** Maximum tokens in response */
|
|
66
|
+
maxTokens?: number | undefined;
|
|
67
|
+
/** Tool definitions for function calling */
|
|
68
|
+
tools?: ToolDefinition[] | undefined;
|
|
69
|
+
/** Whether to use streaming */
|
|
70
|
+
stream?: boolean | undefined;
|
|
71
|
+
/** Abort signal */
|
|
72
|
+
signal?: AbortSignal | undefined;
|
|
73
|
+
/** Stop sequences */
|
|
74
|
+
stop?: string[] | undefined;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Stream chunk for streaming responses
|
|
78
|
+
*/
|
|
79
|
+
export interface StreamChunk {
|
|
80
|
+
/** Content delta */
|
|
81
|
+
content?: string;
|
|
82
|
+
/** Tool call delta */
|
|
83
|
+
toolCall?: Partial<ToolCall>;
|
|
84
|
+
/** Whether this is the final chunk */
|
|
85
|
+
done: boolean;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Provider configuration
|
|
89
|
+
*/
|
|
90
|
+
export interface ProviderConfig {
|
|
91
|
+
/** API key */
|
|
92
|
+
apiKey: string;
|
|
93
|
+
/** Base URL (for custom endpoints) */
|
|
94
|
+
baseUrl?: string | undefined;
|
|
95
|
+
/** Default model */
|
|
96
|
+
defaultModel?: string | undefined;
|
|
97
|
+
/** Request timeout in ms */
|
|
98
|
+
timeout?: number | undefined;
|
|
99
|
+
/** Organization ID (OpenAI) */
|
|
100
|
+
organization?: string | undefined;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Supported provider names
|
|
104
|
+
*/
|
|
105
|
+
export declare const SUPPORTED_PROVIDER_NAMES: readonly ["openai", "anthropic", "gemini", "openrouter", "local"];
|
|
106
|
+
export type ProviderName = typeof SUPPORTED_PROVIDER_NAMES[number];
|
|
107
|
+
export type ProviderSelectionSource = 'flag' | 'env' | 'settings' | 'auto' | 'none';
|
|
108
|
+
export interface ResolvedProviderSelection {
|
|
109
|
+
name?: ProviderName;
|
|
110
|
+
source: ProviderSelectionSource;
|
|
111
|
+
configured: boolean;
|
|
112
|
+
config: ProviderConfig;
|
|
113
|
+
warnings: string[];
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Provider capabilities
|
|
117
|
+
*/
|
|
118
|
+
export interface ProviderCapabilities {
|
|
119
|
+
/** Supports function calling */
|
|
120
|
+
functionCalling: boolean;
|
|
121
|
+
/** Supports streaming */
|
|
122
|
+
streaming: boolean;
|
|
123
|
+
/** Supports system messages */
|
|
124
|
+
systemMessages: boolean;
|
|
125
|
+
/** Supports vision/images */
|
|
126
|
+
vision: boolean;
|
|
127
|
+
/** Maximum context length */
|
|
128
|
+
maxContextLength: number;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* LLM Provider interface
|
|
132
|
+
*/
|
|
133
|
+
export interface LLMProvider {
|
|
134
|
+
/** Provider name */
|
|
135
|
+
readonly name: string;
|
|
136
|
+
/** Provider capabilities */
|
|
137
|
+
readonly capabilities: ProviderCapabilities;
|
|
138
|
+
/**
|
|
139
|
+
* Send chat completion request
|
|
140
|
+
*/
|
|
141
|
+
chat(messages: Message[], options?: ChatOptions): Promise<LLMResponse>;
|
|
142
|
+
/**
|
|
143
|
+
* Send chat completion request with streaming
|
|
144
|
+
*/
|
|
145
|
+
chatStream?(messages: Message[], options?: ChatOptions): AsyncGenerator<StreamChunk, void, undefined>;
|
|
146
|
+
/**
|
|
147
|
+
* Check if provider is configured
|
|
148
|
+
*/
|
|
149
|
+
isConfigured(): boolean;
|
|
150
|
+
/**
|
|
151
|
+
* Get available models
|
|
152
|
+
*/
|
|
153
|
+
getModels(): string[];
|
|
154
|
+
/**
|
|
155
|
+
* Get default model
|
|
156
|
+
*/
|
|
157
|
+
getDefaultModel(): string;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Provider factory function type
|
|
161
|
+
*/
|
|
162
|
+
export type ProviderFactory = (config: ProviderConfig) => LLMProvider;
|
|
163
|
+
/**
|
|
164
|
+
* Register a provider factory
|
|
165
|
+
*/
|
|
166
|
+
export declare function registerProvider(name: string, factory: ProviderFactory): void;
|
|
167
|
+
/**
|
|
168
|
+
* Get a provider factory
|
|
169
|
+
*/
|
|
170
|
+
export declare function getProviderFactory(name: string): ProviderFactory | undefined;
|
|
171
|
+
/**
|
|
172
|
+
* List registered providers
|
|
173
|
+
*/
|
|
174
|
+
export declare function listProviders(): string[];
|
|
175
|
+
/**
|
|
176
|
+
* Check whether a provider name is supported.
|
|
177
|
+
*/
|
|
178
|
+
export declare function isSupportedProviderName(value: string): value is ProviderName;
|
|
179
|
+
/**
|
|
180
|
+
* Create a provider from config
|
|
181
|
+
*/
|
|
182
|
+
export declare function createProvider(name: string, config: ProviderConfig): LLMProvider;
|
|
183
|
+
/**
|
|
184
|
+
* Provider environment variable names
|
|
185
|
+
*/
|
|
186
|
+
export declare const PROVIDER_ENV_VARS: Record<string, {
|
|
187
|
+
key: string;
|
|
188
|
+
url?: string;
|
|
189
|
+
}>;
|
|
190
|
+
/**
|
|
191
|
+
* Get provider config from environment
|
|
192
|
+
*/
|
|
193
|
+
export declare function getProviderConfigFromEnv(providerName: string): Partial<ProviderConfig> | undefined;
|
|
194
|
+
/**
|
|
195
|
+
* Resolve the effective provider selection and merged configuration.
|
|
196
|
+
*/
|
|
197
|
+
export declare function resolveProviderSelection(options: {
|
|
198
|
+
flagProvider?: string | undefined;
|
|
199
|
+
envProvider?: string | undefined;
|
|
200
|
+
settingsProvider?: string | undefined;
|
|
201
|
+
apiKey?: string | undefined;
|
|
202
|
+
baseUrl?: string | undefined;
|
|
203
|
+
model?: string | undefined;
|
|
204
|
+
timeout?: number | undefined;
|
|
205
|
+
}): ResolvedProviderSelection;
|
|
206
|
+
/**
|
|
207
|
+
* Auto-detect configured provider from environment
|
|
208
|
+
*/
|
|
209
|
+
export declare function detectConfiguredProvider(): string | undefined;
|
|
210
|
+
/**
|
|
211
|
+
* Convert ability schema to tool definition
|
|
212
|
+
*/
|
|
213
|
+
export declare function abilityToTool(name: string, description: string, inputSchema: Record<string, unknown> | undefined): ToolDefinition;
|
|
214
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/chat/providers/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Provider Interface for mainwpcontrol
|
|
3
|
+
*
|
|
4
|
+
* Abstract interface for different LLM providers.
|
|
5
|
+
* Supported: OpenAI, Anthropic, Gemini, OpenRouter, Local (OpenAI-compatible)
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Supported provider names
|
|
9
|
+
*/
|
|
10
|
+
export const SUPPORTED_PROVIDER_NAMES = [
|
|
11
|
+
'openai',
|
|
12
|
+
'anthropic',
|
|
13
|
+
'gemini',
|
|
14
|
+
'openrouter',
|
|
15
|
+
'local',
|
|
16
|
+
];
|
|
17
|
+
/**
|
|
18
|
+
* Provider registry
|
|
19
|
+
*/
|
|
20
|
+
const providers = new Map();
|
|
21
|
+
/**
|
|
22
|
+
* Register a provider factory
|
|
23
|
+
*/
|
|
24
|
+
export function registerProvider(name, factory) {
|
|
25
|
+
providers.set(name.toLowerCase(), factory);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get a provider factory
|
|
29
|
+
*/
|
|
30
|
+
export function getProviderFactory(name) {
|
|
31
|
+
return providers.get(name.toLowerCase());
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* List registered providers
|
|
35
|
+
*/
|
|
36
|
+
export function listProviders() {
|
|
37
|
+
return Array.from(providers.keys());
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Check whether a provider name is supported.
|
|
41
|
+
*/
|
|
42
|
+
export function isSupportedProviderName(value) {
|
|
43
|
+
return SUPPORTED_PROVIDER_NAMES.includes(value.toLowerCase());
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a provider from config
|
|
47
|
+
*/
|
|
48
|
+
export function createProvider(name, config) {
|
|
49
|
+
const factory = getProviderFactory(name);
|
|
50
|
+
if (!factory) {
|
|
51
|
+
throw new Error(`Unknown provider: ${name}. Available: ${listProviders().join(', ')}`);
|
|
52
|
+
}
|
|
53
|
+
return factory(config);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Provider environment variable names
|
|
57
|
+
*/
|
|
58
|
+
export const PROVIDER_ENV_VARS = {
|
|
59
|
+
openai: { key: 'OPENAI_API_KEY' },
|
|
60
|
+
anthropic: { key: 'ANTHROPIC_API_KEY' },
|
|
61
|
+
gemini: { key: 'GOOGLE_API_KEY' },
|
|
62
|
+
openrouter: { key: 'OPENROUTER_API_KEY' },
|
|
63
|
+
local: { key: 'LOCAL_LLM_API_KEY', url: 'LOCAL_LLM_URL' },
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Get provider config from environment
|
|
67
|
+
*/
|
|
68
|
+
export function getProviderConfigFromEnv(providerName) {
|
|
69
|
+
const envConfig = PROVIDER_ENV_VARS[providerName.toLowerCase()];
|
|
70
|
+
if (!envConfig)
|
|
71
|
+
return undefined;
|
|
72
|
+
const apiKey = process.env[envConfig.key];
|
|
73
|
+
if (!apiKey)
|
|
74
|
+
return undefined;
|
|
75
|
+
const config = { apiKey };
|
|
76
|
+
if (envConfig.url) {
|
|
77
|
+
const baseUrl = process.env[envConfig.url];
|
|
78
|
+
if (baseUrl) {
|
|
79
|
+
config.baseUrl = baseUrl;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return config;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Resolve the effective provider selection and merged configuration.
|
|
86
|
+
*/
|
|
87
|
+
export function resolveProviderSelection(options) {
|
|
88
|
+
const warnings = [];
|
|
89
|
+
const preferredCandidates = [
|
|
90
|
+
{ value: options.flagProvider, source: 'flag' },
|
|
91
|
+
{ value: options.envProvider, source: 'env' },
|
|
92
|
+
{ value: options.settingsProvider, source: 'settings' },
|
|
93
|
+
];
|
|
94
|
+
let selectedName;
|
|
95
|
+
let source = 'none';
|
|
96
|
+
for (const candidate of preferredCandidates) {
|
|
97
|
+
if (!candidate.value)
|
|
98
|
+
continue;
|
|
99
|
+
const normalized = candidate.value.trim().toLowerCase();
|
|
100
|
+
if (!isSupportedProviderName(normalized)) {
|
|
101
|
+
warnings.push(`Ignoring unsupported LLM provider "${candidate.value}". Available: ${SUPPORTED_PROVIDER_NAMES.join(', ')}`);
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
selectedName = normalized;
|
|
105
|
+
source = candidate.source;
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
if (!selectedName) {
|
|
109
|
+
const detected = detectConfiguredProvider();
|
|
110
|
+
if (detected && isSupportedProviderName(detected)) {
|
|
111
|
+
selectedName = detected;
|
|
112
|
+
source = 'auto';
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (!selectedName) {
|
|
116
|
+
return {
|
|
117
|
+
source: 'none',
|
|
118
|
+
configured: false,
|
|
119
|
+
config: {
|
|
120
|
+
apiKey: '',
|
|
121
|
+
timeout: options.timeout,
|
|
122
|
+
},
|
|
123
|
+
warnings,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
const envConfig = getProviderConfigFromEnv(selectedName) ?? {};
|
|
127
|
+
const apiKey = options.apiKey ?? envConfig.apiKey ?? '';
|
|
128
|
+
const baseUrl = options.baseUrl ?? envConfig.baseUrl;
|
|
129
|
+
return {
|
|
130
|
+
name: selectedName,
|
|
131
|
+
source,
|
|
132
|
+
configured: Boolean(apiKey),
|
|
133
|
+
config: {
|
|
134
|
+
apiKey,
|
|
135
|
+
baseUrl,
|
|
136
|
+
defaultModel: options.model,
|
|
137
|
+
timeout: options.timeout,
|
|
138
|
+
},
|
|
139
|
+
warnings,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Auto-detect configured provider from environment
|
|
144
|
+
*/
|
|
145
|
+
export function detectConfiguredProvider() {
|
|
146
|
+
// Priority order
|
|
147
|
+
const priority = ['anthropic', 'openai', 'gemini', 'openrouter', 'local'];
|
|
148
|
+
for (const provider of priority) {
|
|
149
|
+
const config = getProviderConfigFromEnv(provider);
|
|
150
|
+
if (config?.apiKey) {
|
|
151
|
+
return provider;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return undefined;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Convert ability schema to tool definition
|
|
158
|
+
*/
|
|
159
|
+
export function abilityToTool(name, description, inputSchema) {
|
|
160
|
+
return {
|
|
161
|
+
name,
|
|
162
|
+
description,
|
|
163
|
+
parameters: inputSchema ?? { type: 'object', properties: {} },
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/chat/providers/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared SSE (Server-Sent Events) line reader for LLM providers
|
|
3
|
+
*
|
|
4
|
+
* Handles the common boilerplate: response validation, chunked reading,
|
|
5
|
+
* line buffering, and "data: " prefix stripping. Yields raw JSON strings
|
|
6
|
+
* for provider-specific interpretation.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Make an SSE streaming request and yield raw JSON strings from "data: " lines.
|
|
10
|
+
*
|
|
11
|
+
* Skips the OpenAI "[DONE]" sentinel (yielded as-is so callers can detect it).
|
|
12
|
+
* Invalid JSON is the caller's responsibility to handle.
|
|
13
|
+
*/
|
|
14
|
+
export declare function readSSEStream(options: {
|
|
15
|
+
url: string;
|
|
16
|
+
headers: Record<string, string>;
|
|
17
|
+
body: Record<string, unknown>;
|
|
18
|
+
signal?: AbortSignal | undefined;
|
|
19
|
+
providerName: string;
|
|
20
|
+
}): AsyncGenerator<string, void, undefined>;
|
|
21
|
+
//# sourceMappingURL=sse-reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse-reader.d.ts","sourceRoot":"","sources":["../../../src/chat/providers/sse-reader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;GAKG;AACH,wBAAuB,aAAa,CAAC,OAAO,EAAE;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAuC1C"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared SSE (Server-Sent Events) line reader for LLM providers
|
|
3
|
+
*
|
|
4
|
+
* Handles the common boilerplate: response validation, chunked reading,
|
|
5
|
+
* line buffering, and "data: " prefix stripping. Yields raw JSON strings
|
|
6
|
+
* for provider-specific interpretation.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Make an SSE streaming request and yield raw JSON strings from "data: " lines.
|
|
10
|
+
*
|
|
11
|
+
* Skips the OpenAI "[DONE]" sentinel (yielded as-is so callers can detect it).
|
|
12
|
+
* Invalid JSON is the caller's responsibility to handle.
|
|
13
|
+
*/
|
|
14
|
+
export async function* readSSEStream(options) {
|
|
15
|
+
const fetchOptions = {
|
|
16
|
+
method: 'POST',
|
|
17
|
+
headers: options.headers,
|
|
18
|
+
body: JSON.stringify(options.body),
|
|
19
|
+
};
|
|
20
|
+
if (options.signal) {
|
|
21
|
+
fetchOptions.signal = options.signal;
|
|
22
|
+
}
|
|
23
|
+
const response = await fetch(options.url, fetchOptions);
|
|
24
|
+
if (!response.ok) {
|
|
25
|
+
const error = await response.text();
|
|
26
|
+
throw new Error(`${options.providerName} API error: ${response.status} ${error}`);
|
|
27
|
+
}
|
|
28
|
+
if (!response.body) {
|
|
29
|
+
throw new Error('No response body');
|
|
30
|
+
}
|
|
31
|
+
const reader = response.body.getReader();
|
|
32
|
+
const decoder = new TextDecoder();
|
|
33
|
+
let buffer = '';
|
|
34
|
+
while (true) {
|
|
35
|
+
const { done, value } = await reader.read();
|
|
36
|
+
if (done)
|
|
37
|
+
break;
|
|
38
|
+
buffer += decoder.decode(value, { stream: true });
|
|
39
|
+
const lines = buffer.split('\n');
|
|
40
|
+
buffer = lines.pop() ?? '';
|
|
41
|
+
for (const line of lines) {
|
|
42
|
+
if (!line.startsWith('data: '))
|
|
43
|
+
continue;
|
|
44
|
+
yield line.slice(6);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=sse-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse-reader.js","sourceRoot":"","sources":["../../../src/chat/providers/sse-reader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,aAAa,CAAC,OAMpC;IACC,MAAM,YAAY,GAAgB;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;KACnC,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,YAAY,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACvC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAExD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,YAAY,eAAe,QAAQ,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,IAAI;YAAE,MAAM;QAEhB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACzC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System Prompt for MainWP Control chat
|
|
3
|
+
*
|
|
4
|
+
* Embeds the runtime AI behavior contract from CHAT_PROMPT.md.
|
|
5
|
+
* This is executable configuration, not documentation.
|
|
6
|
+
*
|
|
7
|
+
* INVARIANT: AI is the primary interaction surface, NOT the execution authority.
|
|
8
|
+
*/
|
|
9
|
+
import type { Ability } from '../core/abilities-executor.js';
|
|
10
|
+
/**
|
|
11
|
+
* System prompt configuration
|
|
12
|
+
*/
|
|
13
|
+
export interface SystemPromptConfig {
|
|
14
|
+
/** Maximum number of tool calls per turn */
|
|
15
|
+
maxToolCalls: number;
|
|
16
|
+
/** Maximum JSON parse retries */
|
|
17
|
+
maxParseRetries: number;
|
|
18
|
+
/** Whether to include detailed schemas */
|
|
19
|
+
includeSchemas: boolean;
|
|
20
|
+
/** Maximum messages to keep in context (excluding system prompt). undefined = no limit */
|
|
21
|
+
maxContextMessages?: number;
|
|
22
|
+
/** Maximum estimated tokens in context. Reserved for future use. */
|
|
23
|
+
maxContextTokens?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Default system prompt configuration
|
|
27
|
+
*/
|
|
28
|
+
export declare const defaultConfig: SystemPromptConfig;
|
|
29
|
+
/**
|
|
30
|
+
* Build system prompt with configuration
|
|
31
|
+
*/
|
|
32
|
+
export declare function buildConfiguredPrompt(abilities: Ability[], config?: Partial<SystemPromptConfig>): string;
|
|
33
|
+
//# sourceMappingURL=system-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/chat/system-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAkJ7D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,0CAA0C;IAC1C,cAAc,EAAE,OAAO,CAAC;IACxB,0FAA0F;IAC1F,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,kBAK3B,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,OAAO,EAAE,EACpB,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM,GACvC,MAAM,CAgBR"}
|