@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.
Files changed (204) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +583 -0
  3. package/bin/_exit.js +12 -0
  4. package/bin/dev.js +7 -0
  5. package/bin/run.js +7 -0
  6. package/dist/chat/chat-engine.d.ts +213 -0
  7. package/dist/chat/chat-engine.d.ts.map +1 -0
  8. package/dist/chat/chat-engine.js +636 -0
  9. package/dist/chat/chat-engine.js.map +1 -0
  10. package/dist/chat/index.d.ts +10 -0
  11. package/dist/chat/index.d.ts.map +1 -0
  12. package/dist/chat/index.js +14 -0
  13. package/dist/chat/index.js.map +1 -0
  14. package/dist/chat/providers/anthropic.d.ts +52 -0
  15. package/dist/chat/providers/anthropic.d.ts.map +1 -0
  16. package/dist/chat/providers/anthropic.js +292 -0
  17. package/dist/chat/providers/anthropic.js.map +1 -0
  18. package/dist/chat/providers/gemini.d.ts +52 -0
  19. package/dist/chat/providers/gemini.d.ts.map +1 -0
  20. package/dist/chat/providers/gemini.js +284 -0
  21. package/dist/chat/providers/gemini.js.map +1 -0
  22. package/dist/chat/providers/index.d.ts +19 -0
  23. package/dist/chat/providers/index.d.ts.map +1 -0
  24. package/dist/chat/providers/index.js +23 -0
  25. package/dist/chat/providers/index.js.map +1 -0
  26. package/dist/chat/providers/local.d.ts +37 -0
  27. package/dist/chat/providers/local.d.ts.map +1 -0
  28. package/dist/chat/providers/local.js +130 -0
  29. package/dist/chat/providers/local.js.map +1 -0
  30. package/dist/chat/providers/openai-compatible.d.ts +155 -0
  31. package/dist/chat/providers/openai-compatible.d.ts.map +1 -0
  32. package/dist/chat/providers/openai-compatible.js +264 -0
  33. package/dist/chat/providers/openai-compatible.js.map +1 -0
  34. package/dist/chat/providers/openai.d.ts +24 -0
  35. package/dist/chat/providers/openai.d.ts.map +1 -0
  36. package/dist/chat/providers/openai.js +62 -0
  37. package/dist/chat/providers/openai.js.map +1 -0
  38. package/dist/chat/providers/openrouter.d.ts +26 -0
  39. package/dist/chat/providers/openrouter.d.ts.map +1 -0
  40. package/dist/chat/providers/openrouter.js +65 -0
  41. package/dist/chat/providers/openrouter.js.map +1 -0
  42. package/dist/chat/providers/provider-fetch.d.ts +15 -0
  43. package/dist/chat/providers/provider-fetch.d.ts.map +1 -0
  44. package/dist/chat/providers/provider-fetch.js +35 -0
  45. package/dist/chat/providers/provider-fetch.js.map +1 -0
  46. package/dist/chat/providers/provider.d.ts +214 -0
  47. package/dist/chat/providers/provider.d.ts.map +1 -0
  48. package/dist/chat/providers/provider.js +166 -0
  49. package/dist/chat/providers/provider.js.map +1 -0
  50. package/dist/chat/providers/sse-reader.d.ts +21 -0
  51. package/dist/chat/providers/sse-reader.d.ts.map +1 -0
  52. package/dist/chat/providers/sse-reader.js +48 -0
  53. package/dist/chat/providers/sse-reader.js.map +1 -0
  54. package/dist/chat/system-prompt.d.ts +33 -0
  55. package/dist/chat/system-prompt.d.ts.map +1 -0
  56. package/dist/chat/system-prompt.js +166 -0
  57. package/dist/chat/system-prompt.js.map +1 -0
  58. package/dist/chat/tool-envelope.d.ts +72 -0
  59. package/dist/chat/tool-envelope.d.ts.map +1 -0
  60. package/dist/chat/tool-envelope.js +263 -0
  61. package/dist/chat/tool-envelope.js.map +1 -0
  62. package/dist/commands/abilities/info.d.ts +21 -0
  63. package/dist/commands/abilities/info.d.ts.map +1 -0
  64. package/dist/commands/abilities/info.js +80 -0
  65. package/dist/commands/abilities/info.js.map +1 -0
  66. package/dist/commands/abilities/list.d.ts +19 -0
  67. package/dist/commands/abilities/list.d.ts.map +1 -0
  68. package/dist/commands/abilities/list.js +98 -0
  69. package/dist/commands/abilities/list.js.map +1 -0
  70. package/dist/commands/abilities/run.d.ts +75 -0
  71. package/dist/commands/abilities/run.d.ts.map +1 -0
  72. package/dist/commands/abilities/run.js +468 -0
  73. package/dist/commands/abilities/run.js.map +1 -0
  74. package/dist/commands/chat.d.ts +54 -0
  75. package/dist/commands/chat.d.ts.map +1 -0
  76. package/dist/commands/chat.js +384 -0
  77. package/dist/commands/chat.js.map +1 -0
  78. package/dist/commands/config/show.d.ts +54 -0
  79. package/dist/commands/config/show.d.ts.map +1 -0
  80. package/dist/commands/config/show.js +324 -0
  81. package/dist/commands/config/show.js.map +1 -0
  82. package/dist/commands/doctor.d.ts +77 -0
  83. package/dist/commands/doctor.d.ts.map +1 -0
  84. package/dist/commands/doctor.js +412 -0
  85. package/dist/commands/doctor.js.map +1 -0
  86. package/dist/commands/jobs/watch.d.ts +50 -0
  87. package/dist/commands/jobs/watch.d.ts.map +1 -0
  88. package/dist/commands/jobs/watch.js +269 -0
  89. package/dist/commands/jobs/watch.js.map +1 -0
  90. package/dist/commands/login.d.ts +25 -0
  91. package/dist/commands/login.d.ts.map +1 -0
  92. package/dist/commands/login.js +165 -0
  93. package/dist/commands/login.js.map +1 -0
  94. package/dist/commands/profile/delete.d.ts +22 -0
  95. package/dist/commands/profile/delete.d.ts.map +1 -0
  96. package/dist/commands/profile/delete.js +57 -0
  97. package/dist/commands/profile/delete.js.map +1 -0
  98. package/dist/commands/profile/list.d.ts +19 -0
  99. package/dist/commands/profile/list.d.ts.map +1 -0
  100. package/dist/commands/profile/list.js +53 -0
  101. package/dist/commands/profile/list.js.map +1 -0
  102. package/dist/commands/profile/use.d.ts +22 -0
  103. package/dist/commands/profile/use.d.ts.map +1 -0
  104. package/dist/commands/profile/use.js +46 -0
  105. package/dist/commands/profile/use.js.map +1 -0
  106. package/dist/config/fs-utils.d.ts +14 -0
  107. package/dist/config/fs-utils.d.ts.map +1 -0
  108. package/dist/config/fs-utils.js +31 -0
  109. package/dist/config/fs-utils.js.map +1 -0
  110. package/dist/config/keychain.d.ts +53 -0
  111. package/dist/config/keychain.d.ts.map +1 -0
  112. package/dist/config/keychain.js +175 -0
  113. package/dist/config/keychain.js.map +1 -0
  114. package/dist/config/profile-store.d.ts +85 -0
  115. package/dist/config/profile-store.d.ts.map +1 -0
  116. package/dist/config/profile-store.js +228 -0
  117. package/dist/config/profile-store.js.map +1 -0
  118. package/dist/config/settings.d.ts +71 -0
  119. package/dist/config/settings.d.ts.map +1 -0
  120. package/dist/config/settings.js +151 -0
  121. package/dist/config/settings.js.map +1 -0
  122. package/dist/core/abilities-executor.d.ts +126 -0
  123. package/dist/core/abilities-executor.d.ts.map +1 -0
  124. package/dist/core/abilities-executor.js +264 -0
  125. package/dist/core/abilities-executor.js.map +1 -0
  126. package/dist/core/batch-manager.d.ts +113 -0
  127. package/dist/core/batch-manager.d.ts.map +1 -0
  128. package/dist/core/batch-manager.js +244 -0
  129. package/dist/core/batch-manager.js.map +1 -0
  130. package/dist/core/http-client.d.ts +111 -0
  131. package/dist/core/http-client.d.ts.map +1 -0
  132. package/dist/core/http-client.js +329 -0
  133. package/dist/core/http-client.js.map +1 -0
  134. package/dist/core/safety-controller.d.ts +114 -0
  135. package/dist/core/safety-controller.d.ts.map +1 -0
  136. package/dist/core/safety-controller.js +229 -0
  137. package/dist/core/safety-controller.js.map +1 -0
  138. package/dist/hooks/command-not-found.d.ts +12 -0
  139. package/dist/hooks/command-not-found.d.ts.map +1 -0
  140. package/dist/hooks/command-not-found.js +58 -0
  141. package/dist/hooks/command-not-found.js.map +1 -0
  142. package/dist/index.d.ts +7 -0
  143. package/dist/index.d.ts.map +1 -0
  144. package/dist/index.js +7 -0
  145. package/dist/index.js.map +1 -0
  146. package/dist/lib/base-command.d.ts +123 -0
  147. package/dist/lib/base-command.d.ts.map +1 -0
  148. package/dist/lib/base-command.js +285 -0
  149. package/dist/lib/base-command.js.map +1 -0
  150. package/dist/output/formatter.d.ts +48 -0
  151. package/dist/output/formatter.d.ts.map +1 -0
  152. package/dist/output/formatter.js +138 -0
  153. package/dist/output/formatter.js.map +1 -0
  154. package/dist/output/json-envelope.d.ts +43 -0
  155. package/dist/output/json-envelope.d.ts.map +1 -0
  156. package/dist/output/json-envelope.js +73 -0
  157. package/dist/output/json-envelope.js.map +1 -0
  158. package/dist/utils/audit-logger.d.ts +97 -0
  159. package/dist/utils/audit-logger.d.ts.map +1 -0
  160. package/dist/utils/audit-logger.js +169 -0
  161. package/dist/utils/audit-logger.js.map +1 -0
  162. package/dist/utils/colors.d.ts +29 -0
  163. package/dist/utils/colors.d.ts.map +1 -0
  164. package/dist/utils/colors.js +36 -0
  165. package/dist/utils/colors.js.map +1 -0
  166. package/dist/utils/errors.d.ts +107 -0
  167. package/dist/utils/errors.d.ts.map +1 -0
  168. package/dist/utils/errors.js +149 -0
  169. package/dist/utils/errors.js.map +1 -0
  170. package/dist/utils/exit-codes.d.ts +21 -0
  171. package/dist/utils/exit-codes.d.ts.map +1 -0
  172. package/dist/utils/exit-codes.js +20 -0
  173. package/dist/utils/exit-codes.js.map +1 -0
  174. package/dist/utils/format.d.ts +64 -0
  175. package/dist/utils/format.d.ts.map +1 -0
  176. package/dist/utils/format.js +69 -0
  177. package/dist/utils/format.js.map +1 -0
  178. package/dist/utils/prompt.d.ts +34 -0
  179. package/dist/utils/prompt.d.ts.map +1 -0
  180. package/dist/utils/prompt.js +132 -0
  181. package/dist/utils/prompt.js.map +1 -0
  182. package/dist/utils/retry.d.ts +59 -0
  183. package/dist/utils/retry.d.ts.map +1 -0
  184. package/dist/utils/retry.js +96 -0
  185. package/dist/utils/retry.js.map +1 -0
  186. package/dist/utils/terminal-sanitizer.d.ts +60 -0
  187. package/dist/utils/terminal-sanitizer.d.ts.map +1 -0
  188. package/dist/utils/terminal-sanitizer.js +166 -0
  189. package/dist/utils/terminal-sanitizer.js.map +1 -0
  190. package/dist/validation/input-sanitizer.d.ts +76 -0
  191. package/dist/validation/input-sanitizer.d.ts.map +1 -0
  192. package/dist/validation/input-sanitizer.js +199 -0
  193. package/dist/validation/input-sanitizer.js.map +1 -0
  194. package/dist/validation/schema-validator.d.ts +75 -0
  195. package/dist/validation/schema-validator.d.ts.map +1 -0
  196. package/dist/validation/schema-validator.js +147 -0
  197. package/dist/validation/schema-validator.js.map +1 -0
  198. package/oclif.manifest.json +857 -0
  199. package/package.json +101 -0
  200. package/scripts/completions/README.md +221 -0
  201. package/scripts/completions/mainwpcontrol.bash +193 -0
  202. package/scripts/completions/mainwpcontrol.zsh +267 -0
  203. package/scripts/completions/profile-completer.sh +35 -0
  204. 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"}