@bonginkan/maria 4.1.15 → 4.2.1

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.
@@ -454,8 +454,8 @@ var init_startup_display = __esm({
454
454
  var DEFAULT_PROVIDER2, DEFAULT_MODEL2;
455
455
  var init_config = __esm({
456
456
  "src/providers/config.ts"() {
457
- DEFAULT_PROVIDER2 = "openai";
458
- DEFAULT_MODEL2 = process.env.MARIA_DEFAULT_MODEL || "gpt-5-mini-2025-08-07";
457
+ DEFAULT_PROVIDER2 = process.env.DEFAULT_PROVIDER || "openai";
458
+ DEFAULT_MODEL2 = process.env.MARIA_DEFAULT_MODEL || process.env.LMSTUDIO_MODEL || "gpt-5-mini-2025-08-07";
459
459
  }
460
460
  });
461
461
 
@@ -7099,8 +7099,404 @@ var init_base_provider = __esm({
7099
7099
  }
7100
7100
  });
7101
7101
 
7102
+ // src/services/intelligent-model-selector/SecretManagerIntegration.ts
7103
+ var SecretManagerIntegration_exports = {};
7104
+ __export(SecretManagerIntegration_exports, {
7105
+ SecretManagerIntegration: () => SecretManagerIntegration
7106
+ });
7107
+ var import_secret_manager, SecretManagerIntegration;
7108
+ var init_SecretManagerIntegration = __esm({
7109
+ "src/services/intelligent-model-selector/SecretManagerIntegration.ts"() {
7110
+ import_secret_manager = require("@google-cloud/secret-manager");
7111
+ SecretManagerIntegration = class {
7112
+ // 1 hour
7113
+ constructor(config2) {
7114
+ this.config = config2;
7115
+ this.client = new import_secret_manager.SecretManagerServiceClient();
7116
+ }
7117
+ client;
7118
+ cache = /* @__PURE__ */ new Map();
7119
+ cacheExpiry = /* @__PURE__ */ new Map();
7120
+ CACHE_TTL = 36e5;
7121
+ /**
7122
+ * Get API key from Secret Manager with caching
7123
+ */
7124
+ async getApiKey(provider) {
7125
+ const secretName = this.getSecretName(provider);
7126
+ if (!secretName) {
7127
+ return void 0;
7128
+ }
7129
+ const cached = this.getCachedSecret(secretName);
7130
+ if (cached) {
7131
+ return cached;
7132
+ }
7133
+ try {
7134
+ const name2 = `projects/${this.config.projectId}/secrets/${secretName}/versions/latest`;
7135
+ const [version] = await this.client.accessSecretVersion({ name: name2 });
7136
+ const payload = version.payload?.data;
7137
+ if (!payload) {
7138
+ console.error(`Secret ${secretName} has no payload`);
7139
+ return void 0;
7140
+ }
7141
+ const secret = payload.toString();
7142
+ this.cacheSecret(secretName, secret);
7143
+ return secret;
7144
+ } catch (error2) {
7145
+ if (error2.code !== 5) {
7146
+ console.error(`Failed to access secret ${secretName}:`, error2);
7147
+ }
7148
+ return this.getFallbackFromEnv(provider);
7149
+ }
7150
+ }
7151
+ /**
7152
+ * Get all API keys
7153
+ */
7154
+ async getAllApiKeys() {
7155
+ const [googleApiKey, openaiApiKey, anthropicApiKey, groqApiKey] = await Promise.all([
7156
+ this.getApiKey("google"),
7157
+ this.getApiKey("openai"),
7158
+ this.getApiKey("anthropic"),
7159
+ this.getApiKey("groq")
7160
+ ]);
7161
+ return {
7162
+ googleApiKey,
7163
+ openaiApiKey,
7164
+ anthropicApiKey,
7165
+ groqApiKey
7166
+ };
7167
+ }
7168
+ /**
7169
+ * Verify that required secrets exist
7170
+ */
7171
+ async verifySecrets() {
7172
+ const available = [];
7173
+ const missing = [];
7174
+ const providers = ["google", "openai", "anthropic", "groq"];
7175
+ for (const provider of providers) {
7176
+ const secretName = this.getSecretName(provider);
7177
+ if (!secretName) continue;
7178
+ try {
7179
+ const name2 = `projects/${this.config.projectId}/secrets/${secretName}`;
7180
+ await this.client.getSecret({ name: name2 });
7181
+ available.push(provider);
7182
+ } catch (error2) {
7183
+ missing.push(provider);
7184
+ }
7185
+ }
7186
+ return { available, missing };
7187
+ }
7188
+ /**
7189
+ * Create or update a secret
7190
+ */
7191
+ async createOrUpdateSecret(provider, apiKey) {
7192
+ const secretName = this.getSecretName(provider);
7193
+ if (!secretName) {
7194
+ return false;
7195
+ }
7196
+ const secretId = `projects/${this.config.projectId}/secrets/${secretName}`;
7197
+ try {
7198
+ let secretExists = false;
7199
+ try {
7200
+ await this.client.getSecret({ name: secretId });
7201
+ secretExists = true;
7202
+ } catch {
7203
+ secretExists = false;
7204
+ }
7205
+ if (!secretExists) {
7206
+ await this.client.createSecret({
7207
+ parent: `projects/${this.config.projectId}`,
7208
+ secretId: secretName,
7209
+ secret: {
7210
+ replication: {
7211
+ automatic: {}
7212
+ },
7213
+ labels: {
7214
+ service: "ims",
7215
+ provider
7216
+ }
7217
+ }
7218
+ });
7219
+ }
7220
+ await this.client.addSecretVersion({
7221
+ parent: secretId,
7222
+ payload: {
7223
+ data: Buffer.from(apiKey, "utf8")
7224
+ }
7225
+ });
7226
+ this.cache.delete(secretName);
7227
+ this.cacheExpiry.delete(secretName);
7228
+ return true;
7229
+ } catch (error2) {
7230
+ console.error(`Failed to create/update secret ${secretName}:`, error2);
7231
+ return false;
7232
+ }
7233
+ }
7234
+ /**
7235
+ * Get secret name for provider
7236
+ */
7237
+ getSecretName(provider) {
7238
+ switch (provider) {
7239
+ case "google":
7240
+ return this.config.secrets.googleAI || "google-ai-api-key";
7241
+ case "openai":
7242
+ return this.config.secrets.openAI || "openai-api-key";
7243
+ case "anthropic":
7244
+ return this.config.secrets.anthropic || "anthropic-api-key";
7245
+ case "groq":
7246
+ return this.config.secrets.groq || "groq-api-key";
7247
+ default:
7248
+ return void 0;
7249
+ }
7250
+ }
7251
+ /**
7252
+ * Get cached secret if valid
7253
+ */
7254
+ getCachedSecret(secretName) {
7255
+ const expiry = this.cacheExpiry.get(secretName);
7256
+ if (!expiry || Date.now() > expiry) {
7257
+ this.cache.delete(secretName);
7258
+ this.cacheExpiry.delete(secretName);
7259
+ return void 0;
7260
+ }
7261
+ return this.cache.get(secretName);
7262
+ }
7263
+ /**
7264
+ * Cache a secret
7265
+ */
7266
+ cacheSecret(secretName, value) {
7267
+ this.cache.set(secretName, value);
7268
+ this.cacheExpiry.set(secretName, Date.now() + this.CACHE_TTL);
7269
+ }
7270
+ /**
7271
+ * Get fallback from environment variable
7272
+ */
7273
+ getFallbackFromEnv(provider) {
7274
+ switch (provider) {
7275
+ case "google":
7276
+ return process.env.GOOGLE_AI_API_KEY;
7277
+ case "openai":
7278
+ return process.env.OPENAI_API_KEY;
7279
+ case "anthropic":
7280
+ return process.env.ANTHROPIC_API_KEY;
7281
+ case "groq":
7282
+ return process.env.GROQ_API_KEY;
7283
+ default:
7284
+ return void 0;
7285
+ }
7286
+ }
7287
+ /**
7288
+ * Clear cache
7289
+ */
7290
+ clearCache() {
7291
+ this.cache.clear();
7292
+ this.cacheExpiry.clear();
7293
+ }
7294
+ };
7295
+ }
7296
+ });
7297
+
7298
+ // src/providers/groq-provider.ts
7299
+ var groq_provider_exports = {};
7300
+ __export(groq_provider_exports, {
7301
+ GroqProvider: () => GroqProvider
7302
+ });
7303
+ var GroqProvider;
7304
+ var init_groq_provider = __esm({
7305
+ "src/providers/groq-provider.ts"() {
7306
+ init_base_provider();
7307
+ GroqProvider = class extends UnifiedBaseProvider {
7308
+ name = "groq";
7309
+ modelsCache;
7310
+ constructor(apiKey) {
7311
+ super({
7312
+ apiKey,
7313
+ apiBase: "https://api.groq.com/openai/v1"
7314
+ });
7315
+ }
7316
+ async isAvailable() {
7317
+ if (!this.apiKey || this.apiKey.startsWith("gsk_your-groq-")) {
7318
+ return false;
7319
+ }
7320
+ try {
7321
+ await this.makeRequest(`${this.apiBase}/models`, {
7322
+ method: "GET",
7323
+ headers: {
7324
+ Authorization: `Bearer ${this.apiKey}`
7325
+ }
7326
+ });
7327
+ return true;
7328
+ } catch {
7329
+ return false;
7330
+ }
7331
+ }
7332
+ async getModels() {
7333
+ if (this.modelsCache) {
7334
+ return this.modelsCache;
7335
+ }
7336
+ const models = [
7337
+ {
7338
+ id: "llama-3.3-70b-versatile",
7339
+ name: "Llama 3.3 70B",
7340
+ provider: this.name,
7341
+ description: "Most capable Llama _model with versatile performance",
7342
+ contextLength: 32768,
7343
+ capabilities: ["text", "reasoning", "code"],
7344
+ _pricing: { input: 59e-5, output: 79e-5 },
7345
+ available: await this.isAvailable(),
7346
+ recommendedFor: ["complex_reasoning", "coding", "analysis"]
7347
+ },
7348
+ {
7349
+ id: "llama-3.2-90b-vision-preview",
7350
+ name: "Llama 3.2 90B Vision",
7351
+ provider: this.name,
7352
+ description: "Vision-capable Llama _model for multimodal tasks",
7353
+ contextLength: 128e3,
7354
+ capabilities: ["text", "vision", "reasoning"],
7355
+ _pricing: { input: 9e-4, output: 9e-4 },
7356
+ available: await this.isAvailable(),
7357
+ recommendedFor: ["vision_tasks", "multimodal", "analysis"]
7358
+ },
7359
+ {
7360
+ id: "mixtral-8x7b-32768",
7361
+ name: "Mixtral 8x7B",
7362
+ provider: this.name,
7363
+ description: "Mixture of experts _model for balanced performance",
7364
+ contextLength: 32768,
7365
+ capabilities: ["text", "reasoning", "code"],
7366
+ _pricing: { input: 24e-5, output: 24e-5 },
7367
+ available: await this.isAvailable(),
7368
+ recommendedFor: ["balanced_performance", "multilingual"]
7369
+ },
7370
+ {
7371
+ id: "gemma2-9b-it",
7372
+ name: "Gemma 2 9B",
7373
+ provider: this.name,
7374
+ description: "Google's efficient open _model",
7375
+ contextLength: 8192,
7376
+ capabilities: ["text", "reasoning"],
7377
+ _pricing: { input: 2e-4, output: 2e-4 },
7378
+ available: await this.isAvailable(),
7379
+ recommendedFor: ["quick_tasks", "cost_effective"]
7380
+ }
7381
+ ];
7382
+ this.modelsCache = models;
7383
+ return models;
7384
+ }
7385
+ async chat(request) {
7386
+ if (!await this.isAvailable()) {
7387
+ throw new Error("Groq API not available");
7388
+ }
7389
+ const _model = request._model || "mixtral-8x7b-32768";
7390
+ const _startTime = Date.now();
7391
+ const _payload = {
7392
+ _model,
7393
+ messages: request.messages,
7394
+ temperature: request.temperature || 0.7,
7395
+ maxtokens: request.maxTokens || 4e3,
7396
+ _stream: request._stream || false
7397
+ };
7398
+ if (request._stream) {
7399
+ const _stream = await this.makeStreamRequest(
7400
+ `${this.apiBase}/chat/completions`,
7401
+ {
7402
+ method: "POST",
7403
+ headers: {
7404
+ Authorization: `Bearer ${this.apiKey}`
7405
+ },
7406
+ body: JSON.stringify(_payload)
7407
+ }
7408
+ );
7409
+ return {
7410
+ _stream,
7411
+ _model,
7412
+ provider: this.name,
7413
+ responseTime: Date.now() - _startTime
7414
+ };
7415
+ }
7416
+ const _response = await this.makeRequest(
7417
+ `${this.apiBase}/chat/completions`,
7418
+ {
7419
+ method: "POST",
7420
+ headers: {
7421
+ Authorization: `Bearer ${this.apiKey}`
7422
+ },
7423
+ body: JSON.stringify(_payload)
7424
+ }
7425
+ );
7426
+ return {
7427
+ content: _response.choices[0]?.message?.content || "",
7428
+ _model,
7429
+ provider: this.name,
7430
+ usage: {
7431
+ promptTokens: _response.usage?.prompt_tokens || 0,
7432
+ completionTokens: _response.usage?.completion_tokens || 0,
7433
+ totalTokens: _response.usage?.total_tokens || 0
7434
+ },
7435
+ responseTime: Date.now() - _startTime
7436
+ };
7437
+ }
7438
+ async vision(_image, prompt) {
7439
+ if (!await this.isAvailable()) {
7440
+ throw new Error("Groq API not available");
7441
+ }
7442
+ const _base64Image = _image.toString("base64");
7443
+ const _startTime = Date.now();
7444
+ const _payload = {
7445
+ _model: "llama-3.2-90b-vision-preview",
7446
+ messages: [
7447
+ {
7448
+ role: "user",
7449
+ content: [
7450
+ { type: "text", text: prompt },
7451
+ {
7452
+ type: "image_url",
7453
+ imageurl: {
7454
+ url: `data:image/jpeg;base64,${_base64Image}`
7455
+ }
7456
+ }
7457
+ ]
7458
+ }
7459
+ ],
7460
+ maxtokens: 4e3
7461
+ };
7462
+ const _response = await this.makeRequest(
7463
+ `${this.apiBase}/chat/completions`,
7464
+ {
7465
+ method: "POST",
7466
+ headers: {
7467
+ Authorization: `Bearer ${this.apiKey}`
7468
+ },
7469
+ body: JSON.stringify(_payload)
7470
+ }
7471
+ );
7472
+ return {
7473
+ content: _response.choices[0]?.message?.content || "",
7474
+ _model: "llama-3.2-90b-vision-preview",
7475
+ provider: this.name,
7476
+ usage: {
7477
+ promptTokens: _response.usage?.prompt_tokens || 0,
7478
+ completionTokens: _response.usage?.completion_tokens || 0,
7479
+ totalTokens: _response.usage?.total_tokens || 0
7480
+ },
7481
+ responseTime: Date.now() - _startTime
7482
+ };
7483
+ }
7484
+ estimateCost(_tokens, _model = "mixtral-8x7b-32768") {
7485
+ const _pricing = {
7486
+ "llama-3.3-70b-versatile": { input: 59e-5, output: 79e-5 },
7487
+ "llama-3.2-90b-vision-preview": { input: 9e-4, output: 9e-4 },
7488
+ "mixtral-8x7b-32768": { input: 24e-5, output: 24e-5 },
7489
+ "gemma2-9b-it": { input: 2e-4, output: 2e-4 }
7490
+ };
7491
+ const _modelPricing = _pricing[_model] || _pricing["mixtral-8x7b-32768"];
7492
+ return _tokens * 0.75 * _modelPricing.input + _tokens * 0.25 * _modelPricing.output;
7493
+ }
7494
+ };
7495
+ }
7496
+ });
7497
+
7102
7498
  // src/providers/manager.ts
7103
- var UnifiedAIProviderManager, UnifiedOpenAIProvider, UnifiedAnthropicProvider, UnifiedGoogleProvider, UnifiedGrokProvider, UnifiedOllamaProvider, UnifiedLMStudioProvider, UnifiedVLLMProvider;
7499
+ var UnifiedAIProviderManager, UnifiedOpenAIProvider, UnifiedAnthropicProvider, UnifiedGoogleProvider, UnifiedGroqProvider, UnifiedGrokProvider, UnifiedOllamaProvider, UnifiedLMStudioProvider, UnifiedVLLMProvider;
7104
7500
  var init_manager = __esm({
7105
7501
  "src/providers/manager.ts"() {
7106
7502
  init_config();
@@ -7285,15 +7681,36 @@ var init_manager = __esm({
7285
7681
  })
7286
7682
  );
7287
7683
  }
7288
- /** Register adapters based on env keys (OpenAI is real, others placeholder but safe) */
7684
+ /** Register adapters based on Secret Manager or env keys */
7289
7685
  async initializeProviders() {
7290
- const OPENAI_API_KEY = process.env.OPENAI_API_KEY;
7291
- const ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY;
7292
- const GOOGLE_API_KEY = process.env.GOOGLE_API_KEY || process.env.GOOGLE_AI_API_KEY;
7686
+ let OPENAI_API_KEY = process.env.OPENAI_API_KEY;
7687
+ let ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY;
7688
+ let GOOGLE_API_KEY = process.env.GOOGLE_API_KEY || process.env.GOOGLE_AI_API_KEY;
7689
+ let GROQ_API_KEY = process.env.GROQ_API_KEY;
7293
7690
  const GROK_API_KEY = process.env.GROK_API_KEY || process.env.XAI_API_KEY;
7691
+ try {
7692
+ const { SecretManagerIntegration: SecretManagerIntegration2 } = await Promise.resolve().then(() => (init_SecretManagerIntegration(), SecretManagerIntegration_exports));
7693
+ const secretManager = new SecretManagerIntegration2({
7694
+ projectId: process.env.GOOGLE_CLOUD_PROJECT || "maria-code-470602",
7695
+ secrets: {
7696
+ openAI: "openai-api-key",
7697
+ anthropic: "anthropic-api-key",
7698
+ googleAI: "google-ai-api-key",
7699
+ groq: "groq-api-key"
7700
+ }
7701
+ });
7702
+ const keys = await secretManager.getAllApiKeys();
7703
+ OPENAI_API_KEY = keys.openaiApiKey || OPENAI_API_KEY;
7704
+ ANTHROPIC_API_KEY = keys.anthropicApiKey || ANTHROPIC_API_KEY;
7705
+ GOOGLE_API_KEY = keys.googleApiKey || GOOGLE_API_KEY;
7706
+ GROQ_API_KEY = keys.groqApiKey || GROQ_API_KEY;
7707
+ } catch (error2) {
7708
+ console.debug("Secret Manager not available, using environment variables");
7709
+ }
7294
7710
  if (OPENAI_API_KEY) this.register(new UnifiedOpenAIProvider(OPENAI_API_KEY));
7295
7711
  if (ANTHROPIC_API_KEY) this.register(new UnifiedAnthropicProvider(ANTHROPIC_API_KEY));
7296
7712
  if (GOOGLE_API_KEY) this.register(new UnifiedGoogleProvider(GOOGLE_API_KEY));
7713
+ if (GROQ_API_KEY) this.register(new UnifiedGroqProvider(GROQ_API_KEY));
7297
7714
  if (GROK_API_KEY) this.register(new UnifiedGrokProvider(GROK_API_KEY));
7298
7715
  this.register(new UnifiedOllamaProvider());
7299
7716
  this.register(new UnifiedLMStudioProvider());
@@ -7454,6 +7871,75 @@ var init_manager = __esm({
7454
7871
  ];
7455
7872
  }
7456
7873
  };
7874
+ UnifiedGroqProvider = class extends UnifiedBaseProvider {
7875
+ id = "groq";
7876
+ name = "Groq";
7877
+ groqProvider;
7878
+ constructor(apiKey) {
7879
+ super({ apiKey });
7880
+ }
7881
+ async getProvider() {
7882
+ if (!this.groqProvider) {
7883
+ const { GroqProvider: GroqProvider2 } = await Promise.resolve().then(() => (init_groq_provider(), groq_provider_exports));
7884
+ this.groqProvider = new GroqProvider2(this.apiKey);
7885
+ }
7886
+ return this.groqProvider;
7887
+ }
7888
+ async isAvailable() {
7889
+ try {
7890
+ const provider = await this.getProvider();
7891
+ return await provider.isAvailable();
7892
+ } catch {
7893
+ return false;
7894
+ }
7895
+ }
7896
+ async health() {
7897
+ const startTime = Date.now();
7898
+ const isHealthy = await this.isAvailable();
7899
+ return {
7900
+ ok: isHealthy,
7901
+ latencyMs: Date.now() - startTime,
7902
+ timestamp: Date.now()
7903
+ };
7904
+ }
7905
+ async complete(prompt, req) {
7906
+ const provider = await this.getProvider();
7907
+ const response2 = await provider.chat({
7908
+ messages: [{ role: "user", content: prompt }],
7909
+ model: req.model || "mixtral-8x7b-32768",
7910
+ temperature: req.temperature,
7911
+ maxTokens: req.maxTokens,
7912
+ stream: false
7913
+ });
7914
+ return {
7915
+ content: response2.content || "",
7916
+ model: response2.model,
7917
+ usage: response2.usage
7918
+ };
7919
+ }
7920
+ async stream(prompt, req) {
7921
+ const provider = await this.getProvider();
7922
+ const response2 = await provider.chat({
7923
+ messages: [{ role: "user", content: prompt }],
7924
+ model: req.model || "mixtral-8x7b-32768",
7925
+ temperature: req.temperature,
7926
+ maxTokens: req.maxTokens,
7927
+ stream: true
7928
+ });
7929
+ if (response2.stream) {
7930
+ return response2.stream;
7931
+ }
7932
+ async function* fallback() {
7933
+ yield { content: response2.content || "" };
7934
+ }
7935
+ return fallback();
7936
+ }
7937
+ async getModels() {
7938
+ const provider = await this.getProvider();
7939
+ const models = await provider.getModels();
7940
+ return models.map((m2) => m2.id);
7941
+ }
7942
+ };
7457
7943
  UnifiedGrokProvider = class extends UnifiedBaseProvider {
7458
7944
  id = "grok";
7459
7945
  name = "xAI Grok";
@@ -7537,7 +8023,43 @@ var init_manager = __esm({
7537
8023
  return { ok: available, timestamp: Date.now(), reason: available ? void 0 : "LM Studio not running" };
7538
8024
  }
7539
8025
  async complete(prompt, req) {
7540
- return { content: `LM Studio (local) \u2192 ${prompt.slice(0, 60)}` };
8026
+ try {
8027
+ const apiBase = process.env.LMSTUDIO_API_BASE || "http://localhost:1234/v1";
8028
+ const model = req.model || process.env.LMSTUDIO_MODEL || "local-model";
8029
+ const response2 = await fetch(`${apiBase}/chat/completions`, {
8030
+ method: "POST",
8031
+ headers: {
8032
+ "Content-Type": "application/json",
8033
+ "Authorization": "Bearer lm-studio"
8034
+ },
8035
+ body: JSON.stringify({
8036
+ model,
8037
+ messages: [
8038
+ { role: "user", content: prompt }
8039
+ ],
8040
+ temperature: req.temperature || 0.7,
8041
+ max_tokens: req.maxTokens || 2e3,
8042
+ stream: false
8043
+ })
8044
+ });
8045
+ if (!response2.ok) {
8046
+ throw new Error(`LM Studio API error: ${response2.statusText}`);
8047
+ }
8048
+ const data2 = await response2.json();
8049
+ const content = data2.choices?.[0]?.message?.content || "";
8050
+ return {
8051
+ content,
8052
+ model: data2.model,
8053
+ usage: data2.usage ? {
8054
+ promptTokens: data2.usage.prompt_tokens,
8055
+ completionTokens: data2.usage.completion_tokens,
8056
+ totalTokens: data2.usage.total_tokens
8057
+ } : void 0
8058
+ };
8059
+ } catch (error2) {
8060
+ console.error("LM Studio error:", error2);
8061
+ return { content: `[LM Studio offline] Mock response for: ${prompt.slice(0, 60)}` };
8062
+ }
7541
8063
  }
7542
8064
  async stream(prompt, req) {
7543
8065
  async function* g() {
@@ -21245,8 +21767,8 @@ var init_package = __esm({
21245
21767
  "package.json"() {
21246
21768
  package_default = {
21247
21769
  name: "@bonginkan/maria",
21248
- version: "4.1.15",
21249
- description: "\u{1F680} MARIA v4.1.4 - Complete Multimodal AI Integration & Enterprise Platform. Revolutionary voice-to-code, image-to-code, and 73 production-ready commands with advanced memory systems. World's first TypeScript AST-powered code generation with GraphRAG intelligence, multilingual support, and dual-architecture cognitive memory. Features zero-error development, OAuth2.0 + PKCE authentication, and military-grade security. Delivers next-generation multimodal development experience with enterprise-grade performance.",
21770
+ version: "4.2.1",
21771
+ description: "\u{1F680} MARIA v4.2.0 - Enterprise AI Development Platform with 100% Command Availability. Features 74 production-ready commands with comprehensive fallback implementation, local LLM support, and zero external dependencies. Includes natural language coding, AI safety evaluation, intelligent evolution system, episodic memory with PII masking, and real-time monitoring dashboard. Built with TypeScript AST-powered code generation, OAuth2.0 + PKCE authentication, quantum-resistant cryptography, and enterprise-grade performance.",
21250
21772
  keywords: [
21251
21773
  "ai",
21252
21774
  "cli",
@@ -21497,6 +22019,10 @@ var init_package = __esm({
21497
22019
  "test:deps": "cross-env MOCK_DEPS=true vitest run tests/contract/**/*.test.ts",
21498
22020
  "generate:manifest": "tsx scripts/generate-ready-manifest.ts",
21499
22021
  "health:report": "tsx scripts/command-health-report.ts",
22022
+ "ims:deploy": "tsx scripts/deploy-ims-config.ts",
22023
+ "ims:secrets": "tsx scripts/setup-ims-secrets.ts",
22024
+ "ims:test": "tsx scripts/test-ims-integration.ts",
22025
+ "ims:dashboard": "tsx scripts/ims-dashboard.ts",
21500
22026
  "ci:smoke": "pnpm -s build && pnpm -s test:smoke",
21501
22027
  "verify:build": "tsx scripts/verify-manifest-inclusion.ts",
21502
22028
  lint: "eslint --cache 'src/**/*.{ts,tsx}'",
@@ -21597,6 +22123,9 @@ var init_package = __esm({
21597
22123
  dependencies: {
21598
22124
  "@anthropic-ai/sdk": "^0.20.0",
21599
22125
  "@babel/traverse": "^7.28.3",
22126
+ "@google-cloud/bigquery": "^8.1.1",
22127
+ "@google-cloud/firestore": "^7.11.3",
22128
+ "@google-cloud/secret-manager": "^6.1.0",
21600
22129
  "@google/genai": "^1.16.0",
21601
22130
  "@google/generative-ai": "^0.1.0",
21602
22131
  "@langchain/core": "^0.1.0",
@@ -24921,7 +25450,7 @@ var init_ai_response_service = __esm({
24921
25450
  _conversationPersistence;
24922
25451
  telemetry;
24923
25452
  initialized = false;
24924
- // V2 providers
25453
+ // providers
24925
25454
  providerManager;
24926
25455
  constructor() {
24927
25456
  this.chatContext = ChatContextService.getInstance();
@@ -25335,10 +25864,15 @@ var init_command_groups = __esm({
25335
25864
  // Code Quality
25336
25865
  "/bug": {
25337
25866
  name: "/bug",
25338
- description: "Bug analysis and fix suggestions",
25867
+ description: "AI-powered error analysis and solution recommendation system (Enhanced POC #4)",
25339
25868
  category: "quality",
25340
- usage: "/bug [description]",
25341
- examples: ["/bug Function returns undefined", "/bug Memory leak in component"]
25869
+ usage: '/bug "<error message>" [--from-output] [--solution-id <id>] [--dry-run] [--verbose]',
25870
+ examples: [
25871
+ `/bug "Property 'name' does not exist on type 'User'"`,
25872
+ `/bug "Cannot read property 'id' of undefined" --file src/user.ts`,
25873
+ "/bug --from-output --verbose",
25874
+ "/bug --solution-id typescript-fix-0 --dry-run"
25875
+ ]
25342
25876
  },
25343
25877
  "/lint": {
25344
25878
  name: "/lint",
@@ -25468,6 +26002,17 @@ var init_command_groups = __esm({
25468
26002
  examples: ["/signout", "/signout github"]
25469
26003
  },
25470
26004
  // Workflow Automation
26005
+ "/nl": {
26006
+ name: "/nl",
26007
+ description: "Natural language command translation - Convert plain English to executable commands (POC)",
26008
+ category: "workflow",
26009
+ usage: '/nl "<natural language description>" [options]',
26010
+ examples: [
26011
+ '/nl "commit my changes and run tests"',
26012
+ '/nl "fix typescript errors" --dry-run',
26013
+ '/nl "show system status" --explain'
26014
+ ]
26015
+ },
25471
26016
  "/chain": {
25472
26017
  name: "/chain",
25473
26018
  description: "Execute command chains",
@@ -26131,6 +26676,65 @@ var init_command_groups = __esm({
26131
26676
  "/design web --profile=landing --a11y --perf",
26132
26677
  "/design web --profile=site --out ./docs/web-sow.md"
26133
26678
  ]
26679
+ },
26680
+ // POC Commands (Production Ready)
26681
+ "/nl-poc": {
26682
+ name: "/nl-poc",
26683
+ description: "Natural Language Command Translation (POC #1) - Production ready with 0.2ms response time",
26684
+ category: "workflow",
26685
+ usage: '/nl-poc "<natural language description>" [options]',
26686
+ examples: [
26687
+ '/nl-poc "commit my changes and run tests"',
26688
+ '/nl-poc "fix typescript errors" --dry-run',
26689
+ '/nl-poc "show system status" --explain --verbose'
26690
+ ]
26691
+ },
26692
+ "/bug-poc": {
26693
+ name: "/bug-poc",
26694
+ description: "AI-powered error analysis and solution system (POC #4) - 80% accuracy, 0.2ms response time",
26695
+ category: "quality",
26696
+ usage: '/bug-poc "<error message>" [options]',
26697
+ examples: [
26698
+ `/bug-poc "Property 'name' does not exist on type 'User'"`,
26699
+ `/bug-poc "Cannot read property 'id' of undefined" --file src/user.ts`,
26700
+ "/bug-poc --from-output --verbose",
26701
+ "/bug-poc --solution-id typescript-fix-0 --dry-run"
26702
+ ]
26703
+ },
26704
+ // Intelligence System Commands
26705
+ "/intelligence-dashboard": {
26706
+ name: "/intelligence-dashboard",
26707
+ description: "Start real-time MARIA Intelligence monitoring dashboard",
26708
+ category: "intelligence",
26709
+ usage: "/intelligence-dashboard [--format=ascii|html|json] [--duration=<minutes>] [--export=<file>]",
26710
+ examples: [
26711
+ "/intelligence-dashboard",
26712
+ "/intelligence-dashboard --format html --export report.html",
26713
+ "/intelligence-dashboard --duration 5 --format ascii"
26714
+ ]
26715
+ },
26716
+ "/canary": {
26717
+ name: "/canary",
26718
+ description: "Manage MARIA Intelligence canary deployments for zero-downtime releases",
26719
+ category: "intelligence",
26720
+ usage: "/canary <action> [options]",
26721
+ examples: [
26722
+ "/canary deploy v4.2.0 --traffic 20 --duration 15",
26723
+ "/canary status",
26724
+ "/canary stop",
26725
+ "/canary test"
26726
+ ]
26727
+ },
26728
+ "/quality-gate": {
26729
+ name: "/quality-gate",
26730
+ description: "Run MARIA Intelligence quality gate validation with automated testing",
26731
+ category: "intelligence",
26732
+ usage: "/quality-gate [--threshold=<score>] [--verbose] [--report=<file>]",
26733
+ examples: [
26734
+ "/quality-gate",
26735
+ "/quality-gate --threshold 85 --verbose",
26736
+ "/quality-gate --report results.json"
26737
+ ]
26134
26738
  }
26135
26739
  };
26136
26740
  _normToken = (s2) => s2.trim().toLowerCase();
@@ -26750,10 +27354,7 @@ var LEGACY_COMMANDS;
26750
27354
  var init_legacy_shield = __esm({
26751
27355
  "src/slash-commands/shared/legacy-shield.ts"() {
26752
27356
  LEGACY_COMMANDS = /* @__PURE__ */ new Set([
26753
- "/battlecard",
26754
- "/sales-dashboard",
26755
- "/status",
26756
- "/doctor"
27357
+ // Currently no legacy commands - all have been migrated
26757
27358
  ]);
26758
27359
  }
26759
27360
  });
@@ -27329,9 +27930,334 @@ var init_quick_persistence = __esm({
27329
27930
  }
27330
27931
  });
27331
27932
 
27933
+ // src/services/telemetry/bigquery-telemetry.ts
27934
+ async function loadBigQuery() {
27935
+ if (bigQueryLoadAttempted) return BigQuery;
27936
+ bigQueryLoadAttempted = true;
27937
+ try {
27938
+ const bigqueryModule = await import("@google-cloud/bigquery");
27939
+ BigQuery = bigqueryModule.BigQuery;
27940
+ } catch {
27941
+ }
27942
+ return BigQuery;
27943
+ }
27944
+ var import_events, BigQuery, bigQueryLoadAttempted, BigQueryTelemetryService, bigQueryTelemetry;
27945
+ var init_bigquery_telemetry = __esm({
27946
+ "src/services/telemetry/bigquery-telemetry.ts"() {
27947
+ import_events = require("events");
27948
+ BigQuery = null;
27949
+ bigQueryLoadAttempted = false;
27950
+ BigQueryTelemetryService = class _BigQueryTelemetryService extends import_events.EventEmitter {
27951
+ static instance;
27952
+ bigquery = null;
27953
+ telemetryQueue = [];
27954
+ flushTimer = null;
27955
+ isEnabled;
27956
+ httpEndpoint = null;
27957
+ config = {
27958
+ projectId: process.env.GOOGLE_CLOUD_PROJECT || "maria-code-470602",
27959
+ datasetId: "cli",
27960
+ tableName: "command_executions",
27961
+ batchSize: 100,
27962
+ flushIntervalMs: 3e4,
27963
+ // 30 seconds
27964
+ maxRetries: 3
27965
+ };
27966
+ constructor() {
27967
+ super();
27968
+ this.isEnabled = process.env.TELEMETRY_DISABLED !== "true";
27969
+ this.httpEndpoint = process.env.TELEMETRY_ENDPOINT || null;
27970
+ if (this.isEnabled) {
27971
+ this.initialize().catch((error2) => {
27972
+ console.error("[Telemetry] Initialization error:", error2);
27973
+ });
27974
+ }
27975
+ }
27976
+ /**
27977
+ * Get singleton instance
27978
+ */
27979
+ static getInstance() {
27980
+ if (!_BigQueryTelemetryService.instance) {
27981
+ _BigQueryTelemetryService.instance = new _BigQueryTelemetryService();
27982
+ }
27983
+ return _BigQueryTelemetryService.instance;
27984
+ }
27985
+ /**
27986
+ * Initialize BigQuery client or HTTP fallback
27987
+ */
27988
+ async initialize() {
27989
+ const LoadedBigQuery = await loadBigQuery();
27990
+ if (LoadedBigQuery && this.config.projectId) {
27991
+ try {
27992
+ this.bigquery = new LoadedBigQuery({
27993
+ projectId: this.config.projectId,
27994
+ keyFilename: process.env.GOOGLE_APPLICATION_CREDENTIALS
27995
+ });
27996
+ console.log("[Telemetry] BigQuery client initialized");
27997
+ } catch (error2) {
27998
+ console.error("[Telemetry] Failed to initialize BigQuery:", error2);
27999
+ }
28000
+ }
28001
+ this.startFlushTimer();
28002
+ this.setupGracefulShutdown();
28003
+ }
28004
+ /**
28005
+ * Track command execution
28006
+ */
28007
+ async trackCommandExecution(data2) {
28008
+ if (!this.isEnabled) return;
28009
+ const telemetryData = {
28010
+ ...data2,
28011
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
28012
+ version: process.env.npm_package_version || process.env.CLI_VERSION,
28013
+ environment: process.env.NODE_ENV || "production",
28014
+ buildId: process.env.BUILD_ID,
28015
+ region: process.env.REGION,
28016
+ // Limit args to 3 for privacy
28017
+ args: data2.args?.slice(0, 3)
28018
+ };
28019
+ this.telemetryQueue.push(telemetryData);
28020
+ this.emit("command:tracked", telemetryData);
28021
+ if (this.telemetryQueue.length >= this.config.batchSize) {
28022
+ await this.flush();
28023
+ }
28024
+ }
28025
+ /**
28026
+ * Flush telemetry data to BigQuery or HTTP endpoint
28027
+ */
28028
+ async flush() {
28029
+ if (this.telemetryQueue.length === 0) return;
28030
+ const dataToFlush = [...this.telemetryQueue];
28031
+ this.telemetryQueue = [];
28032
+ try {
28033
+ if (this.bigquery) {
28034
+ await this.flushToBigQuery(dataToFlush);
28035
+ } else if (this.httpEndpoint) {
28036
+ await this.flushToHttpEndpoint(dataToFlush);
28037
+ } else {
28038
+ console.debug(`[Telemetry] Discarding ${dataToFlush.length} events (no backend)`);
28039
+ }
28040
+ } catch (error2) {
28041
+ console.error("[Telemetry] Flush failed:", error2);
28042
+ if (this.telemetryQueue.length < this.config.batchSize * 2) {
28043
+ this.telemetryQueue = [...dataToFlush, ...this.telemetryQueue];
28044
+ }
28045
+ }
28046
+ }
28047
+ /**
28048
+ * Flush data to BigQuery
28049
+ */
28050
+ async flushToBigQuery(data2) {
28051
+ if (!this.bigquery) return;
28052
+ const dataset = this.bigquery.dataset(this.config.datasetId);
28053
+ const table = dataset.table(this.config.tableName);
28054
+ const rows = data2.map((item) => ({
28055
+ cmd: item.cmd,
28056
+ status: item.status,
28057
+ latencyMs: item.latencyMs,
28058
+ plan: item.plan,
28059
+ quotaLeft: item.quotaLeft || null,
28060
+ errorType: item.errorType || null,
28061
+ args: item.args || [],
28062
+ timestamp: item.timestamp,
28063
+ version: item.version || null,
28064
+ environment: item.environment || null,
28065
+ buildId: item.buildId || null,
28066
+ region: item.region || null
28067
+ }));
28068
+ let retries = 0;
28069
+ while (retries < this.config.maxRetries) {
28070
+ try {
28071
+ await table.insert(rows, {
28072
+ ignoreUnknownValues: true,
28073
+ skipInvalidRows: false
28074
+ });
28075
+ console.log(`[Telemetry] Flushed ${rows.length} events to BigQuery`);
28076
+ return;
28077
+ } catch (error2) {
28078
+ retries++;
28079
+ if (retries >= this.config.maxRetries) {
28080
+ throw error2;
28081
+ }
28082
+ await new Promise((resolve4) => setTimeout(resolve4, Math.pow(2, retries) * 1e3));
28083
+ }
28084
+ }
28085
+ }
28086
+ /**
28087
+ * Flush data to HTTP endpoint (fallback)
28088
+ */
28089
+ async flushToHttpEndpoint(data2) {
28090
+ if (!this.httpEndpoint) return;
28091
+ const response2 = await fetch(this.httpEndpoint, {
28092
+ method: "POST",
28093
+ headers: {
28094
+ "Content-Type": "application/json",
28095
+ "X-Telemetry-Version": "1.0",
28096
+ "X-CLI-Version": process.env.npm_package_version || "unknown"
28097
+ },
28098
+ body: JSON.stringify({
28099
+ events: data2,
28100
+ metadata: {
28101
+ flushTime: (/* @__PURE__ */ new Date()).toISOString(),
28102
+ eventCount: data2.length
28103
+ }
28104
+ })
28105
+ }).catch((error2) => {
28106
+ console.error("[Telemetry] HTTP flush failed:", error2);
28107
+ throw error2;
28108
+ });
28109
+ if (!response2.ok) {
28110
+ throw new Error(`HTTP flush failed: ${response2.status}`);
28111
+ }
28112
+ console.log(`[Telemetry] Flushed ${data2.length} events via HTTP`);
28113
+ }
28114
+ /**
28115
+ * Start flush timer
28116
+ */
28117
+ startFlushTimer() {
28118
+ if (this.flushTimer) return;
28119
+ this.flushTimer = setInterval(() => {
28120
+ this.flush().catch((error2) => {
28121
+ console.error("[Telemetry] Timer flush failed:", error2);
28122
+ });
28123
+ }, this.config.flushIntervalMs);
28124
+ }
28125
+ /**
28126
+ * Stop flush timer
28127
+ */
28128
+ stopFlushTimer() {
28129
+ if (this.flushTimer) {
28130
+ clearInterval(this.flushTimer);
28131
+ this.flushTimer = null;
28132
+ }
28133
+ }
28134
+ /**
28135
+ * Setup graceful shutdown
28136
+ */
28137
+ setupGracefulShutdown() {
28138
+ const shutdown = async () => {
28139
+ console.log("[Telemetry] Shutting down...");
28140
+ this.stopFlushTimer();
28141
+ await this.flush();
28142
+ process.exit(0);
28143
+ };
28144
+ process.on("SIGINT", shutdown);
28145
+ process.on("SIGTERM", shutdown);
28146
+ }
28147
+ /**
28148
+ * Get analytics queries for dashboard
28149
+ */
28150
+ getAnalyticsQueries() {
28151
+ const dataset = `${this.config.projectId}.${this.config.datasetId}`;
28152
+ const table = `${dataset}.${this.config.tableName}`;
28153
+ return {
28154
+ topErrorCommands: `
28155
+ SELECT
28156
+ cmd,
28157
+ COUNT(*) as total_executions,
28158
+ COUNTIF(status = 'error') as error_count,
28159
+ ROUND(COUNTIF(status = 'error') * 100.0 / COUNT(*), 2) as error_rate_pct,
28160
+ STRING_AGG(DISTINCT errorType ORDER BY errorType) as error_types
28161
+ FROM \`${table}\`
28162
+ WHERE timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
28163
+ GROUP BY cmd
28164
+ HAVING error_count > 0
28165
+ ORDER BY error_rate_pct DESC
28166
+ LIMIT 10
28167
+ `,
28168
+ p95LatencyByCommand: `
28169
+ SELECT
28170
+ cmd,
28171
+ COUNT(*) as executions,
28172
+ ROUND(AVG(latencyMs), 1) as avg_latency_ms,
28173
+ ROUND(APPROX_QUANTILES(latencyMs, 100)[OFFSET(50)], 1) as p50_latency_ms,
28174
+ ROUND(APPROX_QUANTILES(latencyMs, 100)[OFFSET(95)], 1) as p95_latency_ms,
28175
+ ROUND(MAX(latencyMs), 1) as max_latency_ms
28176
+ FROM \`${table}\`
28177
+ WHERE timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
28178
+ AND status = 'success'
28179
+ GROUP BY cmd
28180
+ ORDER BY p95_latency_ms DESC
28181
+ LIMIT 15
28182
+ `,
28183
+ rateLimitAnalysis: `
28184
+ SELECT
28185
+ DATE(timestamp) as date,
28186
+ COUNT(*) as total_requests,
28187
+ COUNTIF(status = 'rate_limited') as rate_limited_count,
28188
+ ROUND(COUNTIF(status = 'rate_limited') * 100.0 / COUNT(*), 2) as rate_limit_pct,
28189
+ COUNT(DISTINCT cmd) as unique_commands_hit
28190
+ FROM \`${table}\`
28191
+ WHERE timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 14 DAY)
28192
+ GROUP BY date
28193
+ ORDER BY date DESC
28194
+ `,
28195
+ planUsageDistribution: `
28196
+ SELECT
28197
+ plan,
28198
+ COUNT(*) as executions,
28199
+ COUNT(DISTINCT cmd) as unique_commands,
28200
+ ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER(), 2) as execution_share_pct,
28201
+ ROUND(AVG(quotaLeft), 0) as avg_quota_remaining
28202
+ FROM \`${table}\`
28203
+ WHERE timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
28204
+ GROUP BY plan
28205
+ ORDER BY executions DESC
28206
+ `,
28207
+ cliVersionHealth: `
28208
+ SELECT
28209
+ version,
28210
+ COUNT(*) as total_executions,
28211
+ COUNTIF(status = 'success') as success_count,
28212
+ COUNTIF(status = 'error') as error_count,
28213
+ ROUND(COUNTIF(status = 'error') * 100.0 / COUNT(*), 2) as error_rate_pct,
28214
+ MIN(timestamp) as first_seen,
28215
+ MAX(timestamp) as last_seen
28216
+ FROM \`${table}\`
28217
+ WHERE timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
28218
+ GROUP BY version
28219
+ ORDER BY first_seen DESC
28220
+ LIMIT 5
28221
+ `
28222
+ };
28223
+ }
28224
+ /**
28225
+ * Check if telemetry is enabled
28226
+ */
28227
+ isActive() {
28228
+ return this.isEnabled;
28229
+ }
28230
+ /**
28231
+ * Disable telemetry
28232
+ */
28233
+ disable() {
28234
+ this.isEnabled = false;
28235
+ this.stopFlushTimer();
28236
+ }
28237
+ /**
28238
+ * Enable telemetry
28239
+ */
28240
+ enable() {
28241
+ this.isEnabled = true;
28242
+ this.startFlushTimer();
28243
+ }
28244
+ };
28245
+ bigQueryTelemetry = BigQueryTelemetryService.getInstance();
28246
+ }
28247
+ });
28248
+
27332
28249
  // src/slash-commands/shared/telemetry-helper.ts
27333
28250
  async function trackCommand(data2) {
27334
28251
  try {
28252
+ await bigQueryTelemetry.trackCommandExecution({
28253
+ cmd: data2.cmd,
28254
+ status: data2.status,
28255
+ latencyMs: data2.latencyMs,
28256
+ plan: data2.plan,
28257
+ quotaLeft: data2.quotaLeft,
28258
+ errorType: data2.errorType,
28259
+ args: data2.args
28260
+ });
27335
28261
  fetch("/v1/telemetry", {
27336
28262
  method: "POST",
27337
28263
  headers: { "Content-Type": "application/json" },
@@ -27361,6 +28287,7 @@ function getNextMonthStart() {
27361
28287
  }
27362
28288
  var init_telemetry_helper = __esm({
27363
28289
  "src/slash-commands/shared/telemetry-helper.ts"() {
28290
+ init_bigquery_telemetry();
27364
28291
  }
27365
28292
  });
27366
28293
 
@@ -28064,9 +28991,9 @@ var init_SlashCommandManager = __esm({
28064
28991
  "/exit": true,
28065
28992
  // ✅ Phase 4 - Core commands migrated
28066
28993
  "/status": true,
28067
- // ✅ Phase 2 - V2 stub implemented
28994
+ // ✅ Phase 2 - standard stub implemented
28068
28995
  "/doctor": true,
28069
- // ✅ Phase 2 - V2 stub implemented
28996
+ // ✅ Phase 2 - standard stub implemented
28070
28997
  "/config": true,
28071
28998
  // ✅ Configuration commands migrated
28072
28999
  "/model": true,
@@ -28974,13 +29901,14 @@ __export(HelpCommand_exports, {
28974
29901
  HelpCommand: () => HelpCommand,
28975
29902
  meta: () => meta
28976
29903
  });
28977
- var HelpCommand, meta;
29904
+ var import_chalk17, HelpCommand, meta;
28978
29905
  var init_HelpCommand = __esm({
28979
29906
  "src/slash-commands/categories/core/handlers/HelpCommand.ts"() {
28980
29907
  init_base_command();
28981
29908
  init_ReadyCommandsService();
28982
29909
  init_telemetry_helper();
28983
29910
  init_subscription_manager();
29911
+ import_chalk17 = __toESM(require("chalk"), 1);
28984
29912
  HelpCommand = class extends BaseCommand {
28985
29913
  name = "help";
28986
29914
  category = "core";
@@ -29095,9 +30023,9 @@ var init_HelpCommand = __esm({
29095
30023
  const stats = await this.readyService.getStatistics();
29096
30024
  const lines = [];
29097
30025
  lines.push("\u2550".repeat(60));
29098
- lines.push("**" + stats.totalReady + " READY Commands** | **" + stats.categoriesCount + " Categories**");
30026
+ lines.push(import_chalk17.default.bold(`${stats.totalReady} READY Commands | ${stats.categoriesCount} Categories`));
29099
30027
  lines.push("");
29100
- lines.push("**Quick Access:**");
30028
+ lines.push(import_chalk17.default.bold("Quick Access:"));
29101
30029
  lines.push(" /help <command> - Detailed help for specific command");
29102
30030
  lines.push(" /help --quickstart - Essential commands for new users");
29103
30031
  lines.push(" /help --stats - Performance statistics");
@@ -29112,22 +30040,19 @@ var init_HelpCommand = __esm({
29112
30040
  }
29113
30041
  globalMaxNameLength = Math.max(globalMaxNameLength, 18) + 1;
29114
30042
  for (const category of categories) {
29115
- lines.push(`**${category.name.toUpperCase()} (${category.count})**`);
30043
+ lines.push(import_chalk17.default.bold(`${category.name.toUpperCase()} (${category.count})`));
29116
30044
  const showCommands = category.commands.slice(0, 4);
29117
30045
  for (const cmd of showCommands) {
29118
30046
  const needsGpu = this.hasGpuRequirement(cmd.description);
29119
30047
  let description = cmd.description;
30048
+ description = description.replace(
30049
+ /\*GPU needed - Local LLM only \(Pro\+ members only\)/g,
30050
+ ""
30051
+ ).trim();
30052
+ const paddedName = `/${cmd.name}`.padEnd(globalMaxNameLength);
30053
+ lines.push(` ${paddedName} - ${description}`);
29120
30054
  if (needsGpu) {
29121
- description = description.replace(
29122
- /\*GPU needed - Local LLM only \(Pro\+ members only\)/g,
29123
- ""
29124
- ).trim();
29125
- const paddedName = `/${cmd.name}`.padEnd(globalMaxNameLength + 5);
29126
- lines.push(` ${paddedName} - ${description}`);
29127
- lines.push(` *GPU needed - Local LLM (Pro+ only)`);
29128
- } else {
29129
- const paddedName = `/${cmd.name}`.padEnd(globalMaxNameLength + 5);
29130
- lines.push(` ${paddedName} - ${description}`);
30055
+ lines.push(` GPU needed - Local LLM (Pro+ only)`);
29131
30056
  }
29132
30057
  }
29133
30058
  if (category.count > 4) {
@@ -29135,7 +30060,7 @@ var init_HelpCommand = __esm({
29135
30060
  }
29136
30061
  lines.push("");
29137
30062
  }
29138
- lines.push("**Pro Tips:**");
30063
+ lines.push(import_chalk17.default.bold("Pro Tips:"));
29139
30064
  lines.push(" \u2022 All listed commands are production-ready");
29140
30065
  lines.push(" \u2022 Use fuzzy search: /help --search confi \u2192 finds /config");
29141
30066
  lines.push(" \u2022 Categories ordered by importance");
@@ -29174,33 +30099,33 @@ var init_HelpCommand = __esm({
29174
30099
  formatCommandHelp(command) {
29175
30100
  const lines = [];
29176
30101
  lines.push("");
29177
- lines.push(`\u{1F4D6} **/${command.name}** - ${command.description}`);
30102
+ lines.push(`\u{1F4D6} ${import_chalk17.default.bold(`/${command.name}`)} - ${command.description}`);
29178
30103
  lines.push("\u2550".repeat(50));
29179
30104
  lines.push("");
29180
- lines.push("**\u2139\uFE0F Information:**");
30105
+ lines.push(import_chalk17.default.bold("\u2139\uFE0F Information:"));
29181
30106
  lines.push(` Category: ${this.readyService["getCategoryEmoji"](command.category)} ${command.category}`);
29182
30107
  lines.push(` Status: \u2705 READY (contract validated)`);
29183
30108
  if (command.aliases && command.aliases.length > 0) {
29184
30109
  lines.push(` Aliases: ${command.aliases.map((a2) => `/${a2}`).join(", ")}`);
29185
30110
  }
29186
30111
  lines.push("");
29187
- lines.push("**\u{1F3AF} Usage:**");
30112
+ lines.push(import_chalk17.default.bold("\u{1F3AF} Usage:"));
29188
30113
  lines.push(` ${command.usage}`);
29189
30114
  lines.push("");
29190
- lines.push("**\u{1F4CB} Contract Validation:**");
30115
+ lines.push(import_chalk17.default.bold("\u{1F4CB} Contract Validation:"));
29191
30116
  lines.push(` \u26A1 Performance: ${command.contract.maxResponseTime}ms (tested)`);
29192
30117
  lines.push(` \u{1F4BB} TTY Mode: ${command.contract.tty ? "\u2705 Supported" : "\u274C Not supported"}`);
29193
30118
  lines.push(` \u{1F527} Non-TTY Mode: ${command.contract.nonTty ? "\u2705 Supported" : "\u274C Not supported"}`);
29194
30119
  lines.push(` \u{1F500} Pipe Mode: ${command.contract.pipe ? "\u2705 Supported" : "\u274C Not supported"}`);
29195
30120
  lines.push("");
29196
30121
  if (command.examples && command.examples.length > 0) {
29197
- lines.push("**\u{1F4DD} Examples:**");
30122
+ lines.push(import_chalk17.default.bold("\u{1F4DD} Examples:"));
29198
30123
  for (const example of command.examples) {
29199
30124
  lines.push(` ${example}`);
29200
30125
  }
29201
30126
  lines.push("");
29202
30127
  }
29203
- lines.push("**\u{1F4A1} Quick Tips:**");
30128
+ lines.push(import_chalk17.default.bold("\u{1F4A1} Quick Tips:"));
29204
30129
  lines.push(` \u2022 This command is production-ready and fully tested`);
29205
30130
  lines.push(` \u2022 Try /${command.name} --help for additional options`);
29206
30131
  if (command.category !== "core") {
@@ -29251,31 +30176,18 @@ var init_HelpCommand = __esm({
29251
30176
  };
29252
30177
  const emoji = emojiMap[categoryName.toLowerCase()] || "\u{1F4CB}";
29253
30178
  lines.push("");
29254
- lines.push(`${emoji} **${categoryName.toUpperCase()} COMMANDS** (${commands.length} READY)`);
30179
+ lines.push(`${emoji} ${import_chalk17.default.bold(categoryName.toUpperCase() + " COMMANDS")} (${commands.length} READY)`);
29255
30180
  lines.push("\u2550".repeat(50));
29256
30181
  lines.push("");
29257
- const responseTimes = commands.map((c) => c.contract.maxResponseTime);
29258
- const avgTime = Math.round(responseTimes.reduce((a2, b) => a2 + b, 0) / responseTimes.length);
29259
- const minTime = Math.min(...responseTimes);
29260
- const maxTime = Math.max(...responseTimes);
29261
- lines.push(`**\u{1F4CA} Performance:** ${avgTime}ms avg (${minTime}-${maxTime}ms range)`);
29262
- lines.push("");
30182
+ const maxNameLength = Math.max(...commands.map((c) => c.name.length)) + 1;
29263
30183
  for (const command of commands) {
29264
- lines.push(`**/${command.name}** [${command.contract.maxResponseTime}ms]`);
29265
- lines.push(` ${command.description}`);
30184
+ const paddedName = `/${command.name}`.padEnd(maxNameLength + 8);
30185
+ lines.push(` ${paddedName} - ${command.description}`);
29266
30186
  if (command.aliases && command.aliases.length > 0) {
29267
- lines.push(` Aliases: ${command.aliases.map((a2) => `/${a2}`).join(", ")}`);
29268
- }
29269
- const compat = [
29270
- command.contract.tty ? "\u{1F4BB}" : "",
29271
- command.contract.nonTty ? "\u{1F527}" : "",
29272
- command.contract.pipe ? "\u{1F500}" : ""
29273
- ].filter(Boolean).join(" ");
29274
- if (compat) {
29275
- lines.push(` Modes: ${compat}`);
30187
+ lines.push(` Aliases: ${command.aliases.map((a2) => `/${a2}`).join(", ")}`);
29276
30188
  }
29277
- lines.push("");
29278
30189
  }
30190
+ lines.push("");
29279
30191
  return lines.join("\n");
29280
30192
  }
29281
30193
  /**
@@ -29298,20 +30210,20 @@ var init_HelpCommand = __esm({
29298
30210
  formatSearchResults(searchTerm, results) {
29299
30211
  const lines = [];
29300
30212
  lines.push("");
29301
- lines.push(`\u{1F50D} **SEARCH RESULTS** for "${searchTerm}" (${results.length} matches)`);
30213
+ lines.push(`\u{1F50D} ${import_chalk17.default.bold("SEARCH RESULTS")} for "${searchTerm}" (${results.length} matches)`);
29302
30214
  lines.push("\u2550".repeat(50));
29303
30215
  lines.push("");
29304
30216
  for (const result of results) {
29305
30217
  const cmd = result.command;
29306
30218
  const matchInfo = `[${result.matchScore}] ${result.matchReasons[0] || "match"}`;
29307
- lines.push(`**/${cmd.name}** (${cmd.category}) ${matchInfo}`);
29308
- lines.push(` ${cmd.description} [${cmd.contract.maxResponseTime}ms]`);
30219
+ lines.push(`/${cmd.name} (${cmd.category}) ${matchInfo}`);
30220
+ lines.push(` ${cmd.description}`);
29309
30221
  if (result.matchReasons.length > 1) {
29310
30222
  lines.push(` Matches: ${result.matchReasons.join(", ")}`);
29311
30223
  }
29312
30224
  lines.push("");
29313
30225
  }
29314
- lines.push("**\u{1F4A1} Tip:** Higher scores indicate better matches");
30226
+ lines.push(import_chalk17.default.bold("\u{1F4A1} Tip:") + " Higher scores indicate better matches");
29315
30227
  lines.push("");
29316
30228
  return lines.join("\n");
29317
30229
  }
@@ -29322,38 +30234,38 @@ var init_HelpCommand = __esm({
29322
30234
  const quickCommands = await this.readyService.getQuickStartCommands();
29323
30235
  const lines = [];
29324
30236
  lines.push("");
29325
- lines.push("\u{1F680} **MARIA QUICKSTART** - Essential Commands");
30237
+ lines.push(`\u{1F680} ${import_chalk17.default.bold("MARIA QUICKSTART")} - Essential Commands`);
29326
30238
  lines.push("\u2550".repeat(50));
29327
30239
  lines.push("");
29328
- lines.push("**\u{1F3AF} Get Started in 3 Steps:**");
30240
+ lines.push(import_chalk17.default.bold("\u{1F3AF} Get Started in 3 Steps:"));
29329
30241
  lines.push("");
29330
- lines.push("**1\uFE0F\u20E3 Configure Your AI Provider**");
30242
+ lines.push(import_chalk17.default.bold("1\uFE0F\u20E3 Configure Your AI Provider"));
29331
30243
  const modelCmd = quickCommands.find((c) => c.name === "model");
29332
30244
  if (modelCmd) {
29333
30245
  lines.push(` /${modelCmd.name} - ${modelCmd.description}`);
29334
30246
  lines.push(` Try: /model set provider=openai key=sk-...`);
29335
30247
  }
29336
30248
  lines.push("");
29337
- lines.push("**2\uFE0F\u20E3 Check System Status**");
30249
+ lines.push(import_chalk17.default.bold("2\uFE0F\u20E3 Check System Status"));
29338
30250
  const statusCmd = quickCommands.find((c) => c.name === "status");
29339
30251
  if (statusCmd) {
29340
30252
  lines.push(` /${statusCmd.name} - ${statusCmd.description}`);
29341
30253
  lines.push(` Try: /status`);
29342
30254
  }
29343
30255
  lines.push("");
29344
- lines.push("**3\uFE0F\u20E3 Start Coding**");
30256
+ lines.push(import_chalk17.default.bold("3\uFE0F\u20E3 Start Coding"));
29345
30257
  const codeCmd = quickCommands.find((c) => c.name === "code");
29346
30258
  if (codeCmd) {
29347
30259
  lines.push(` /${codeCmd.name} - ${codeCmd.description}`);
29348
30260
  lines.push(` Try: /code create a hello world function`);
29349
30261
  }
29350
30262
  lines.push("");
29351
- lines.push("**\u{1F527} Essential Commands:**");
30263
+ lines.push(import_chalk17.default.bold("\u{1F527} Essential Commands:"));
29352
30264
  for (const cmd of quickCommands) {
29353
- lines.push(` /${cmd.name.padEnd(12)} - ${cmd.description} [${cmd.contract.maxResponseTime}ms]`);
30265
+ lines.push(` /${cmd.name.padEnd(12)} - ${cmd.description}`);
29354
30266
  }
29355
30267
  lines.push("");
29356
- lines.push("**\u{1F4A1} Next Steps:**");
30268
+ lines.push(import_chalk17.default.bold("\u{1F4A1} Next Steps:"));
29357
30269
  lines.push(" \u2022 /help --category <name> - Explore command categories");
29358
30270
  lines.push(" \u2022 /help --search <term> - Find specific functionality");
29359
30271
  lines.push(" \u2022 /help <command> - Get detailed command help");
@@ -29368,20 +30280,20 @@ var init_HelpCommand = __esm({
29368
30280
  const categories = await this.readyService.getCategories();
29369
30281
  const lines = [];
29370
30282
  lines.push("");
29371
- lines.push("\u{1F4CA} **READY COMMANDS STATISTICS**");
30283
+ lines.push(`\u{1F4CA} ${import_chalk17.default.bold("READY COMMANDS STATISTICS")}`);
29372
30284
  lines.push("\u2550".repeat(40));
29373
30285
  lines.push("");
29374
- lines.push("**\u{1F3AF} Overall:**");
30286
+ lines.push(import_chalk17.default.bold("\u{1F3AF} Overall:"));
29375
30287
  lines.push(` Total READY Commands: ${stats.totalReady}`);
29376
30288
  lines.push(` Categories: ${stats.categoriesCount}`);
29377
30289
  lines.push(` Last Updated: ${stats.lastUpdated?.toLocaleString() || "Unknown"}`);
29378
30290
  lines.push("");
29379
- lines.push("**\u26A1 Performance:**");
30291
+ lines.push(import_chalk17.default.bold("\u26A1 Performance:"));
29380
30292
  lines.push(` Average Response Time: ${stats.avgResponseTime}ms`);
29381
30293
  lines.push(` Fastest Command: /${stats.fastestCommand}`);
29382
30294
  lines.push(` Slowest Command: /${stats.slowestCommand}`);
29383
30295
  lines.push("");
29384
- lines.push("**\u{1F4CB} By Category:**");
30296
+ lines.push(import_chalk17.default.bold("\u{1F4CB} By Category:"));
29385
30297
  for (const category of categories) {
29386
30298
  const avgTime = Math.round(
29387
30299
  category.commands.reduce((sum, cmd) => sum + cmd.contract.maxResponseTime, 0) / category.commands.length
@@ -29389,7 +30301,7 @@ var init_HelpCommand = __esm({
29389
30301
  lines.push(` ${category.emoji} ${category.name.padEnd(15)}: ${category.count.toString().padStart(2)} commands (${avgTime}ms avg)`);
29390
30302
  }
29391
30303
  lines.push("");
29392
- lines.push("**\u2705 Contract Validation:**");
30304
+ lines.push(import_chalk17.default.bold("\u2705 Contract Validation:"));
29393
30305
  lines.push(" All commands tested for:");
29394
30306
  lines.push(" \u2022 Basic execution without crashes");
29395
30307
  lines.push(" \u2022 TTY/non-TTY/pipe compatibility");
@@ -29606,11 +30518,11 @@ var init_LoginCommand = __esm({
29606
30518
  });
29607
30519
 
29608
30520
  // src/services/model-selector-ui.ts
29609
- var readline4, import_chalk17, ModelSelectorUI;
30521
+ var readline4, import_chalk18, ModelSelectorUI;
29610
30522
  var init_model_selector_ui = __esm({
29611
30523
  "src/services/model-selector-ui.ts"() {
29612
30524
  readline4 = __toESM(require("readline"), 1);
29613
- import_chalk17 = __toESM(require("chalk"), 1);
30525
+ import_chalk18 = __toESM(require("chalk"), 1);
29614
30526
  ModelSelectorUI = class {
29615
30527
  models = [];
29616
30528
  selectedIndex = 0;
@@ -29637,7 +30549,7 @@ var init_model_selector_ui = __esm({
29637
30549
  output: process.stdout,
29638
30550
  terminal: true
29639
30551
  });
29640
- console.log(import_chalk17.default.green(
30552
+ console.log(import_chalk18.default.green(
29641
30553
  "\u250C\u2500[ MODEL MATRIX ]\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"
29642
30554
  ));
29643
30555
  process.stdout.write("\x1B7");
@@ -29705,14 +30617,14 @@ var init_model_selector_ui = __esm({
29705
30617
  }
29706
30618
  renderFromSavedPosition() {
29707
30619
  if (this.isDestroyed) return;
29708
- console.log(import_chalk17.default.green(
29709
- "\u2502 " + import_chalk17.default.greenBright("SELECT MODEL:") + " ".repeat(62) + "\u2502"
30620
+ console.log(import_chalk18.default.green(
30621
+ "\u2502 " + import_chalk18.default.greenBright("SELECT MODEL:") + " ".repeat(62) + "\u2502"
29710
30622
  ));
29711
30623
  this.renderContent();
29712
30624
  const scrollInfo = `[${this.selectedIndex + 1}/${this.models.length}]`;
29713
30625
  const helpText = `\u2193:NEXT \u2191:PREV ENTER:EXEC ESC:ABORT ${scrollInfo}`;
29714
- console.log(import_chalk17.default.green("\u2502 ") + import_chalk17.default.dim.green(helpText.padEnd(76)) + import_chalk17.default.green(" \u2502"));
29715
- console.log(import_chalk17.default.green(
30626
+ console.log(import_chalk18.default.green("\u2502 ") + import_chalk18.default.dim.green(helpText.padEnd(76)) + import_chalk18.default.green(" \u2502"));
30627
+ console.log(import_chalk18.default.green(
29716
30628
  "\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"
29717
30629
  ));
29718
30630
  }
@@ -29753,19 +30665,19 @@ var init_model_selector_ui = __esm({
29753
30665
  const item = displayItems[i2];
29754
30666
  if (item.type === "group") {
29755
30667
  console.log(
29756
- import_chalk17.default.green("\u2502") + import_chalk17.default.dim.green(" \u2501\u2501\u2501 ") + import_chalk17.default.greenBright(item.content.substring(2, item.content.indexOf(" \u2500"))) + import_chalk17.default.dim.green(" " + "\u2501".repeat(71 - item.content.indexOf(" \u2500"))) + import_chalk17.default.green("\u2502")
30668
+ import_chalk18.default.green("\u2502") + import_chalk18.default.dim.green(" \u2501\u2501\u2501 ") + import_chalk18.default.greenBright(item.content.substring(2, item.content.indexOf(" \u2500"))) + import_chalk18.default.dim.green(" " + "\u2501".repeat(71 - item.content.indexOf(" \u2500"))) + import_chalk18.default.green("\u2502")
29757
30669
  );
29758
30670
  } else {
29759
30671
  const isSelected = item.modelIndex === this.selectedIndex;
29760
- const prefix = isSelected ? import_chalk17.default.greenBright("\u25B6 ") : " ";
30672
+ const prefix = isSelected ? import_chalk18.default.greenBright("\u25B6 ") : " ";
29761
30673
  const modelText = item.content;
29762
30674
  if (isSelected) {
29763
30675
  console.log(
29764
- import_chalk17.default.green("\u2502") + prefix + import_chalk17.default.black.bgGreen(modelText.padEnd(75)) + import_chalk17.default.green("\u2502")
30676
+ import_chalk18.default.green("\u2502") + prefix + import_chalk18.default.black.bgGreen(modelText.padEnd(75)) + import_chalk18.default.green("\u2502")
29765
30677
  );
29766
30678
  } else {
29767
30679
  console.log(
29768
- import_chalk17.default.green("\u2502") + prefix + import_chalk17.default.green(modelText.substring(0, 75).padEnd(75)) + import_chalk17.default.green("\u2502")
30680
+ import_chalk18.default.green("\u2502") + prefix + import_chalk18.default.green(modelText.substring(0, 75).padEnd(75)) + import_chalk18.default.green("\u2502")
29769
30681
  );
29770
30682
  }
29771
30683
  }
@@ -29836,7 +30748,7 @@ var init_ModelCommand = __esm({
29836
30748
  usage = "[list|set|info|test|benchmark|cost|current|recommend|ui|session|stats] [model-id] [options]";
29837
30749
  providerManager;
29838
30750
  configManager;
29839
- // V2 Progressive Enhancement Properties
30751
+ // standard Progressive Enhancement Properties
29840
30752
  isV2Enabled = false;
29841
30753
  advancedFeatures;
29842
30754
  examples = [
@@ -29861,7 +30773,7 @@ var init_ModelCommand = __esm({
29861
30773
  input: "/model list --provider openai",
29862
30774
  description: "List models from specific provider"
29863
30775
  },
29864
- // V2 Enhanced functionality (when enabled)
30776
+ // standard Enhanced functionality (when enabled)
29865
30777
  {
29866
30778
  input: "/model recommend --task code",
29867
30779
  description: "AI-powered model recommendations (v2)"
@@ -29889,26 +30801,26 @@ var init_ModelCommand = __esm({
29889
30801
  this.configManager = new ConfigManager();
29890
30802
  this.providerManager = getProviderManager();
29891
30803
  this.initializeV2Features().catch((error2) => {
29892
- logger.warn("V2 features initialization failed:", error2);
30804
+ logger.warn("standard features initialization failed:", error2);
29893
30805
  });
29894
30806
  }
29895
30807
  /**
29896
- * Initialize V2 features if enabled via feature flags (disabled for now)
30808
+ * Initialize standard features if enabled via feature flags (disabled for now)
29897
30809
  */
29898
30810
  async initializeV2Features() {
29899
30811
  try {
29900
30812
  this.isV2Enabled = false;
29901
- logger.debug("\u{1F4E6} ModelCommand running in V1 compatibility mode (V2 disabled)");
30813
+ logger.debug("\u{1F4E6} ModelCommand running in V1 compatibility mode (standard disabled)");
29902
30814
  } catch (error2) {
29903
- logger.warn("\u26A0\uFE0F V2 feature initialization failed, falling back to V1", error2);
30815
+ logger.warn("\u26A0\uFE0F standard feature initialization failed, falling back to V1", error2);
29904
30816
  this.isV2Enabled = false;
29905
30817
  }
29906
30818
  }
29907
30819
  /**
29908
- * Dynamically load V2 modules (disabled for now)
30820
+ * Dynamically load standard modules (disabled for now)
29909
30821
  */
29910
30822
  async loadAdvancedFeatures() {
29911
- logger.debug("V2 features disabled, skipping advanced feature loading");
30823
+ logger.debug("standard features disabled, skipping advanced feature loading");
29912
30824
  this.isV2Enabled = false;
29913
30825
  this.advancedFeatures = void 0;
29914
30826
  }
@@ -30291,10 +31203,10 @@ var init_ModelCommand = __esm({
30291
31203
  }
30292
31204
  }
30293
31205
  // ========================================
30294
- // V2 Progressive Enhancement Methods
31206
+ // standard Progressive Enhancement Methods
30295
31207
  // ========================================
30296
31208
  /**
30297
- * Determine if advanced V2 features should be used
31209
+ * Determine if advanced standard features should be used
30298
31210
  */
30299
31211
  shouldUseAdvanced(action, args) {
30300
31212
  if (!this.isV2Enabled) return false;
@@ -30304,12 +31216,12 @@ var init_ModelCommand = __esm({
30304
31216
  return false;
30305
31217
  }
30306
31218
  /**
30307
- * Execute advanced V2 features
31219
+ * Execute advanced standard features
30308
31220
  */
30309
31221
  async executeAdvanced(action, args, context2) {
30310
31222
  if (!this.advancedFeatures) {
30311
31223
  return this.error(
30312
- "V2 features are enabled but not available. Please check your installation.",
31224
+ "standard features are enabled but not available. Please check your installation.",
30313
31225
  "V2_UNAVAILABLE"
30314
31226
  );
30315
31227
  }
@@ -30324,12 +31236,12 @@ var init_ModelCommand = __esm({
30324
31236
  case "stats":
30325
31237
  return await this.executeStatistics(args, context2);
30326
31238
  default:
30327
- return this.error(`Unknown V2 action: ${action}`);
31239
+ return this.error(`Unknown standard action: ${action}`);
30328
31240
  }
30329
31241
  } catch (error2) {
30330
- logger.error("V2 feature execution failed:", error2);
31242
+ logger.error("standard feature execution failed:", error2);
30331
31243
  return this.error(
30332
- `V2 feature failed: ${error2 instanceof Error ? error2.message : "Unknown error"}`,
31244
+ `standard feature failed: ${error2 instanceof Error ? error2.message : "Unknown error"}`,
30333
31245
  "V2_EXECUTION_ERROR",
30334
31246
  error2
30335
31247
  );
@@ -32017,8 +32929,8 @@ async function loadServices() {
32017
32929
  try {
32018
32930
  const commandName = command.startsWith("/") ? command.slice(1) : command;
32019
32931
  if (commandName === "battlecard") {
32020
- console.log(import_chalk18.default.yellow("\u{1F512} /battlecard is not available on Free plan"));
32021
- console.log(import_chalk18.default.gray(" Join the waitlist for business features: https://maria-code.ai/waitlist"));
32932
+ console.log(import_chalk19.default.yellow("\u{1F512} /battlecard is not available on Free plan"));
32933
+ console.log(import_chalk19.default.gray(" Join the waitlist for business features: https://maria-code.ai/waitlist"));
32022
32934
  return {
32023
32935
  success: false,
32024
32936
  message: "Command not available on Free plan"
@@ -32079,7 +32991,7 @@ async function loadServices() {
32079
32991
  commandManager.setLegacyHandler(legacyHandlerAdapter);
32080
32992
  }
32081
32993
  } catch (e2) {
32082
- console.warn(import_chalk18.default.yellow("\u26A0 Some services unavailable, using fallbacks"));
32994
+ console.warn(import_chalk19.default.yellow("\u26A0 Some services unavailable, using fallbacks"));
32083
32995
  }
32084
32996
  }
32085
32997
  async function init() {
@@ -32193,20 +33105,20 @@ async function enforceAuth(cmd) {
32193
33105
  try {
32194
33106
  const tokens = await authManager.getValidTokens();
32195
33107
  if (!tokens) {
32196
- console.log(import_chalk18.default.red("\u{1F510} Authentication required \xB7 Run: maria /login"));
33108
+ console.log(import_chalk19.default.red("\u{1F510} Authentication required \xB7 Run: maria /login"));
32197
33109
  process.exit(2);
32198
33110
  return false;
32199
33111
  }
32200
33112
  return true;
32201
33113
  } catch (error2) {
32202
33114
  if (error2.code === "AUTH_REQUIRED") {
32203
- console.log(import_chalk18.default.red("\u{1F510} Authentication required \xB7 Run: maria /login"));
33115
+ console.log(import_chalk19.default.red("\u{1F510} Authentication required \xB7 Run: maria /login"));
32204
33116
  process.exit(2);
32205
33117
  } else if (error2.code === "REAUTH_REQUIRED") {
32206
- console.log(import_chalk18.default.yellow("\u{1F504} Please re-authenticate \xB7 Run: maria /login"));
33118
+ console.log(import_chalk19.default.yellow("\u{1F504} Please re-authenticate \xB7 Run: maria /login"));
32207
33119
  process.exit(2);
32208
33120
  } else {
32209
- console.log(import_chalk18.default.red("\u{1F310} Network error, check connection"));
33121
+ console.log(import_chalk19.default.red("\u{1F310} Network error, check connection"));
32210
33122
  process.exit(1);
32211
33123
  }
32212
33124
  return false;
@@ -32246,7 +33158,7 @@ async function handleSlash(input3) {
32246
33158
  console.log(JSON.stringify(result.data, null, 2));
32247
33159
  }
32248
33160
  } else {
32249
- console.log(import_chalk18.default.red(`Help Error: ${result.message}`));
33161
+ console.log(import_chalk19.default.red(`Help Error: ${result.message}`));
32250
33162
  }
32251
33163
  return true;
32252
33164
  }
@@ -32254,7 +33166,7 @@ async function handleSlash(input3) {
32254
33166
  if (process.env.MARIA_DEBUG === "1") {
32255
33167
  console.error("HelpCommand error:", helpError);
32256
33168
  }
32257
- console.log(import_chalk18.default.yellow("\u26A0 Dynamic help unavailable, using fallback"));
33169
+ console.log(import_chalk19.default.yellow("\u26A0 Dynamic help unavailable, using fallback"));
32258
33170
  }
32259
33171
  const help = `
32260
33172
  \u{1F4D6} MARIA CLI Help
@@ -32279,7 +33191,7 @@ Chat:
32279
33191
  session.length = 0;
32280
33192
  if (ctx?.clearContext) ctx.clearContext();
32281
33193
  console.clear();
32282
- console.log(import_chalk18.default.cyan("\u2728 Session cleared"));
33194
+ console.log(import_chalk19.default.cyan("\u2728 Session cleared"));
32283
33195
  return true;
32284
33196
  }
32285
33197
  if (cmd === "code") {
@@ -32287,7 +33199,7 @@ Chat:
32287
33199
  const prompt = args.join(" ").trim();
32288
33200
  if (!prompt) {
32289
33201
  console.log(
32290
- import_chalk18.default.red("Usage: /code <request> e.g. /code build a REST API")
33202
+ import_chalk19.default.red("Usage: /code <request> e.g. /code build a REST API")
32291
33203
  );
32292
33204
  return true;
32293
33205
  }
@@ -32299,7 +33211,7 @@ Chat:
32299
33211
  const prompt = args.join(" ").trim();
32300
33212
  if (!prompt) {
32301
33213
  console.log(
32302
- import_chalk18.default.cyan("\u{1F3A8} **Image Generation**\n") + import_chalk18.default.white("Usage: /image <prompt>\n") + import_chalk18.default.gray("Example: /image \u5BCC\u58EB\u5C71\u306E\u65E5\u306E\u51FA")
33214
+ import_chalk19.default.cyan("\u{1F3A8} **Image Generation**\n") + import_chalk19.default.white("Usage: /image <prompt>\n") + import_chalk19.default.gray("Example: /image \u5BCC\u58EB\u5C71\u306E\u65E5\u306E\u51FA")
32303
33215
  );
32304
33216
  return true;
32305
33217
  }
@@ -32311,14 +33223,14 @@ Chat:
32311
33223
  options: {},
32312
33224
  logger: {
32313
33225
  info: (msg) => console.log(msg),
32314
- error: (msg) => console.error(import_chalk18.default.red(msg)),
32315
- warn: (msg) => console.warn(import_chalk18.default.yellow(msg))
33226
+ error: (msg) => console.error(import_chalk19.default.red(msg)),
33227
+ warn: (msg) => console.warn(import_chalk19.default.yellow(msg))
32316
33228
  }
32317
33229
  };
32318
33230
  await imageCommand2.execute(context2);
32319
33231
  }
32320
33232
  } catch (error2) {
32321
- console.error(import_chalk18.default.red("Image generation failed:"), error2.message);
33233
+ console.error(import_chalk19.default.red("Image generation failed:"), error2.message);
32322
33234
  }
32323
33235
  return true;
32324
33236
  }
@@ -32327,7 +33239,7 @@ Chat:
32327
33239
  const prompt = args.join(" ").trim();
32328
33240
  if (!prompt) {
32329
33241
  console.log(
32330
- import_chalk18.default.cyan("\u{1F3AC} **Video Generation**\n") + import_chalk18.default.white("Usage: /video <prompt>\n") + import_chalk18.default.gray("Example: /video \u6D77\u306E\u6CE2\u304C\u6253\u3061\u5BC4\u305B\u308B\u69D8\u5B50")
33242
+ import_chalk19.default.cyan("\u{1F3AC} **Video Generation**\n") + import_chalk19.default.white("Usage: /video <prompt>\n") + import_chalk19.default.gray("Example: /video \u6D77\u306E\u6CE2\u304C\u6253\u3061\u5BC4\u305B\u308B\u69D8\u5B50")
32331
33243
  );
32332
33244
  return true;
32333
33245
  }
@@ -32339,14 +33251,14 @@ Chat:
32339
33251
  options: {},
32340
33252
  logger: {
32341
33253
  info: (msg) => console.log(msg),
32342
- error: (msg) => console.error(import_chalk18.default.red(msg)),
32343
- warn: (msg) => console.warn(import_chalk18.default.yellow(msg))
33254
+ error: (msg) => console.error(import_chalk19.default.red(msg)),
33255
+ warn: (msg) => console.warn(import_chalk19.default.yellow(msg))
32344
33256
  }
32345
33257
  };
32346
33258
  await videoCommand2.execute(context2);
32347
33259
  }
32348
33260
  } catch (error2) {
32349
- console.error(import_chalk18.default.red("Video generation failed:"), error2.message);
33261
+ console.error(import_chalk19.default.red("Video generation failed:"), error2.message);
32350
33262
  }
32351
33263
  return true;
32352
33264
  }
@@ -32355,7 +33267,7 @@ Chat:
32355
33267
  const prompt = args.join(" ").trim();
32356
33268
  if (!prompt) {
32357
33269
  console.log(
32358
- import_chalk18.default.cyan("\u{1F399}\uFE0F **Voice Synthesis**\n") + import_chalk18.default.white("Usage: /voice <text>\n") + import_chalk18.default.gray("Example: /voice \u3053\u3093\u306B\u3061\u306F\u3001\u5143\u6C17\u3067\u3059\u304B\uFF1F")
33270
+ import_chalk19.default.cyan("\u{1F399}\uFE0F **Voice Synthesis**\n") + import_chalk19.default.white("Usage: /voice <text>\n") + import_chalk19.default.gray("Example: /voice \u3053\u3093\u306B\u3061\u306F\u3001\u5143\u6C17\u3067\u3059\u304B\uFF1F")
32359
33271
  );
32360
33272
  return true;
32361
33273
  }
@@ -32367,14 +33279,14 @@ Chat:
32367
33279
  options: {},
32368
33280
  logger: {
32369
33281
  info: (msg) => console.log(msg),
32370
- error: (msg) => console.error(import_chalk18.default.red(msg)),
32371
- warn: (msg) => console.warn(import_chalk18.default.yellow(msg))
33282
+ error: (msg) => console.error(import_chalk19.default.red(msg)),
33283
+ warn: (msg) => console.warn(import_chalk19.default.yellow(msg))
32372
33284
  }
32373
33285
  };
32374
33286
  await voiceCommand2.execute(context2);
32375
33287
  }
32376
33288
  } catch (error2) {
32377
- console.error(import_chalk18.default.red("Voice synthesis failed:"), error2.message);
33289
+ console.error(import_chalk19.default.red("Voice synthesis failed:"), error2.message);
32378
33290
  }
32379
33291
  return true;
32380
33292
  }
@@ -32393,36 +33305,36 @@ Chat:
32393
33305
  if (args.includes("status")) {
32394
33306
  if (await authManager.isAuthenticated()) {
32395
33307
  const user = await authManager.getCurrentUser();
32396
- console.log(import_chalk18.default.green("\u2705 Authenticated"));
32397
- console.log(import_chalk18.default.white(`\u{1F464} User: ${import_chalk18.default.cyan(user.email)}`));
32398
- console.log(import_chalk18.default.white(`\u{1F4CA} Plan: ${import_chalk18.default.cyan(user.plan)}`));
33308
+ console.log(import_chalk19.default.green("\u2705 Authenticated"));
33309
+ console.log(import_chalk19.default.white(`\u{1F464} User: ${import_chalk19.default.cyan(user.email)}`));
33310
+ console.log(import_chalk19.default.white(`\u{1F4CA} Plan: ${import_chalk19.default.cyan(user.plan)}`));
32399
33311
  } else {
32400
- console.log(import_chalk18.default.yellow("\u26A0\uFE0F Not authenticated"));
32401
- console.log(import_chalk18.default.gray("Use /login to sign in"));
33312
+ console.log(import_chalk19.default.yellow("\u26A0\uFE0F Not authenticated"));
33313
+ console.log(import_chalk19.default.gray("Use /login to sign in"));
32402
33314
  }
32403
33315
  } else {
32404
33316
  const result = await authManager.login(options2);
32405
33317
  if (result.success && result.user) {
32406
- console.log(import_chalk18.default.green("\u2705 Successfully logged in!"));
32407
- console.log(import_chalk18.default.white(`\u{1F464} User: ${import_chalk18.default.cyan(result.user.email)}`));
32408
- console.log(import_chalk18.default.white(`\u{1F4CA} Plan: ${import_chalk18.default.cyan(result.user.plan)}`));
33318
+ console.log(import_chalk19.default.green("\u2705 Successfully logged in!"));
33319
+ console.log(import_chalk19.default.white(`\u{1F464} User: ${import_chalk19.default.cyan(result.user.email)}`));
33320
+ console.log(import_chalk19.default.white(`\u{1F4CA} Plan: ${import_chalk19.default.cyan(result.user.plan)}`));
32409
33321
  } else {
32410
- console.log(import_chalk18.default.red("\u274C Login failed"));
32411
- if (result.error) console.log(import_chalk18.default.gray(result.error));
33322
+ console.log(import_chalk19.default.red("\u274C Login failed"));
33323
+ if (result.error) console.log(import_chalk19.default.gray(result.error));
32412
33324
  }
32413
33325
  }
32414
33326
  }
32415
33327
  } catch (error2) {
32416
- console.error(import_chalk18.default.red("Login error:"), error2.message);
33328
+ console.error(import_chalk19.default.red("Login error:"), error2.message);
32417
33329
  }
32418
33330
  return true;
32419
33331
  }
32420
33332
  if (cmd === "logout" || cmd === "signout") {
32421
33333
  try {
32422
33334
  await authManager.logout();
32423
- console.log(import_chalk18.default.green("\u{1F44B} Signed out. Local credentials removed."));
33335
+ console.log(import_chalk19.default.green("\u{1F44B} Signed out. Local credentials removed."));
32424
33336
  } catch (error2) {
32425
- console.error(import_chalk18.default.red("Logout error:"), error2.message);
33337
+ console.error(import_chalk19.default.red("Logout error:"), error2.message);
32426
33338
  }
32427
33339
  return true;
32428
33340
  }
@@ -32523,11 +33435,11 @@ Chat:
32523
33435
  }
32524
33436
  }
32525
33437
  if (!["battlecard", "sales-dashboard", "tune", "pilot-setup"].includes(cmd)) {
32526
- console.log(import_chalk18.default.red(`\u274C Unknown command: /${cmd}`));
32527
- console.log(import_chalk18.default.yellow("\n\u{1F4A1} Suggestions:"));
32528
- console.log(import_chalk18.default.gray(" \u2022 Type /help to see available commands"));
32529
- console.log(import_chalk18.default.gray(" \u2022 Check if you need to /login first"));
32530
- console.log(import_chalk18.default.gray(` \u2022 Try similar commands: /help --search ${cmd}`));
33438
+ console.log(import_chalk19.default.red(`\u274C Unknown command: /${cmd}`));
33439
+ console.log(import_chalk19.default.yellow("\n\u{1F4A1} Suggestions:"));
33440
+ console.log(import_chalk19.default.gray(" \u2022 Type /help to see available commands"));
33441
+ console.log(import_chalk19.default.gray(" \u2022 Check if you need to /login first"));
33442
+ console.log(import_chalk19.default.gray(` \u2022 Try similar commands: /help --search ${cmd}`));
32531
33443
  }
32532
33444
  return true;
32533
33445
  }
@@ -32795,11 +33707,11 @@ async function handleCodeCommand(prompt) {
32795
33707
  const filepath = path11.resolve(process.cwd(), filename);
32796
33708
  await fs11.writeFile(filepath, code, "utf-8");
32797
33709
  console.log(
32798
- import_chalk18.default.green("\n\u2705 **Code Saved**\n") + import_chalk18.default.white(`\u{1F4C1} **File (Click to open):**
32799
- `) + import_chalk18.default.cyan(`\u2022 [${filename}](file://${filepath})
32800
- `) + import_chalk18.default.gray(` \u{1F4CD} Path: \`${filepath}\`
32801
- `) + import_chalk18.default.white(` \u{1F4DD} Language: ${language}
32802
- `) + import_chalk18.default.dim(`
33710
+ import_chalk19.default.green("\n\u2705 **Code Saved**\n") + import_chalk19.default.white(`\u{1F4C1} **File (Click to open):**
33711
+ `) + import_chalk19.default.cyan(`\u2022 [${filename}](file://${filepath})
33712
+ `) + import_chalk19.default.gray(` \u{1F4CD} Path: \`${filepath}\`
33713
+ `) + import_chalk19.default.white(` \u{1F4DD} Language: ${language}
33714
+ `) + import_chalk19.default.dim(`
32803
33715
  \u{1F4A1} Tip: Command+Click (Mac) or Ctrl+Click (Windows/Linux) to open file`)
32804
33716
  );
32805
33717
  } else {
@@ -32808,11 +33720,11 @@ async function handleCodeCommand(prompt) {
32808
33720
  } catch (e2) {
32809
33721
  spinner.stop();
32810
33722
  if (process.env.MARIA_DEBUG === "1") {
32811
- console.error(import_chalk18.default.red("Code generation error:"), e2.message || e2);
33723
+ console.error(import_chalk19.default.red("Code generation error:"), e2.message || e2);
32812
33724
  }
32813
33725
  const fallbackCode = templateFallback(prompt);
32814
33726
  console.log(
32815
- import_chalk18.default.yellow("\u26A0 AI unavailable, using template fallback:\n")
33727
+ import_chalk19.default.yellow("\u26A0 AI unavailable, using template fallback:\n")
32816
33728
  );
32817
33729
  console.log(fallbackCode);
32818
33730
  try {
@@ -32821,14 +33733,14 @@ async function handleCodeCommand(prompt) {
32821
33733
  const filepath = path11.resolve(process.cwd(), filename);
32822
33734
  await fs11.writeFile(filepath, code, "utf-8");
32823
33735
  console.log(
32824
- import_chalk18.default.green("\n\u2705 **Template Code Saved**\n") + import_chalk18.default.white(`\u{1F4C1} **File (Click to open):**
32825
- `) + import_chalk18.default.cyan(`\u2022 [${filename}](file://${filepath})
32826
- `) + import_chalk18.default.gray(` \u{1F4CD} Path: \`${filepath}\`
32827
- `) + import_chalk18.default.dim(`
33736
+ import_chalk19.default.green("\n\u2705 **Template Code Saved**\n") + import_chalk19.default.white(`\u{1F4C1} **File (Click to open):**
33737
+ `) + import_chalk19.default.cyan(`\u2022 [${filename}](file://${filepath})
33738
+ `) + import_chalk19.default.gray(` \u{1F4CD} Path: \`${filepath}\`
33739
+ `) + import_chalk19.default.dim(`
32828
33740
  \u{1F4A1} Tip: Command+Click (Mac) or Ctrl+Click (Windows/Linux) to open file`)
32829
33741
  );
32830
33742
  } catch (saveError) {
32831
- console.error(import_chalk18.default.red("Failed to save code:"), saveError);
33743
+ console.error(import_chalk19.default.red("Failed to save code:"), saveError);
32832
33744
  }
32833
33745
  }
32834
33746
  }
@@ -32884,7 +33796,7 @@ ${userPrompt}`;
32884
33796
  (seq) => response2.includes(seq)
32885
33797
  );
32886
33798
  if (guidedFlowDetected) {
32887
- console.log(import_chalk18.default.yellow("\u26A0 Guided flow detected, switching to fallback"));
33799
+ console.log(import_chalk19.default.yellow("\u26A0 Guided flow detected, switching to fallback"));
32888
33800
  return null;
32889
33801
  }
32890
33802
  const codeMatch = response2.match(/```[\s\S]*?```/);
@@ -33052,14 +33964,14 @@ async function streamAnswer(text) {
33052
33964
  if (store?.addMessage) await store.addMessage(msg);
33053
33965
  } else {
33054
33966
  animation.stop();
33055
- console.log(import_chalk18.default.yellow("AI service unavailable. Please check your configuration."));
33967
+ console.log(import_chalk19.default.yellow("AI service unavailable. Please check your configuration."));
33056
33968
  }
33057
33969
  } catch (e2) {
33058
33970
  animation.stop();
33059
33971
  if (e2.message?.includes("timeout") || e2.message?.includes("\u23F1\uFE0F")) {
33060
- console.log(import_chalk18.default.yellow(e2.message));
33972
+ console.log(import_chalk19.default.yellow(e2.message));
33061
33973
  } else {
33062
- console.log(import_chalk18.default.red("Error generating response:"), e2.message || e2);
33974
+ console.log(import_chalk19.default.red("Error generating response:"), e2.message || e2);
33063
33975
  }
33064
33976
  }
33065
33977
  }
@@ -33074,9 +33986,9 @@ async function handleLine(line) {
33074
33986
  if (consumed) return;
33075
33987
  const isAuthenticated = await authManager.isAuthenticated();
33076
33988
  if (!isAuthenticated) {
33077
- console.log(import_chalk18.default.yellow("\n\u26A0\uFE0F Authentication required for chat features"));
33078
- console.log(import_chalk18.default.cyan("Please run: /login"));
33079
- console.log(import_chalk18.default.gray("Or use slash commands like /help, /version"));
33989
+ console.log(import_chalk19.default.yellow("\n\u26A0\uFE0F Authentication required for chat features"));
33990
+ console.log(import_chalk19.default.cyan("Please run: /login"));
33991
+ console.log(import_chalk19.default.gray("Or use slash commands like /help, /version"));
33080
33992
  return;
33081
33993
  }
33082
33994
  const user = { role: "user", content: input3, timestamp: /* @__PURE__ */ new Date() };
@@ -33098,7 +34010,7 @@ async function startInteractiveSession() {
33098
34010
  }
33099
34011
  }
33100
34012
  const stop = async () => {
33101
- console.log(import_chalk18.default.cyan("\n\u{1F44B} Goodbye!"));
34013
+ console.log(import_chalk19.default.cyan("\n\u{1F44B} Goodbye!"));
33102
34014
  if (store?.close) await store.close().catch(() => {
33103
34015
  });
33104
34016
  if (interactiveCLI?.cleanup) interactiveCLI.cleanup();
@@ -33108,7 +34020,7 @@ async function startInteractiveSession() {
33108
34020
  process.once("SIGINT", stop);
33109
34021
  process.once("SIGTERM", stop);
33110
34022
  if (!isTTY) {
33111
- console.log(import_chalk18.default.gray("[Pipe mode detected - streaming input/output]"));
34023
+ console.log(import_chalk19.default.gray("[Pipe mode detected - streaming input/output]"));
33112
34024
  const rl = readline5.createInterface({
33113
34025
  input: import_node_process3.stdin,
33114
34026
  output: import_node_process3.stdout,
@@ -33123,7 +34035,7 @@ async function startInteractiveSession() {
33123
34035
  if (interactiveCLI) {
33124
34036
  while (true) {
33125
34037
  try {
33126
- const prompt = import_chalk18.default.gray("> ");
34038
+ const prompt = import_chalk19.default.gray("> ");
33127
34039
  process.stdout.write(prompt);
33128
34040
  const line = await interactiveCLI.question("");
33129
34041
  console.log();
@@ -33138,14 +34050,14 @@ async function startInteractiveSession() {
33138
34050
  await stop();
33139
34051
  return;
33140
34052
  }
33141
- console.error(import_chalk18.default.red("Error:"), error2?.message || error2);
34053
+ console.error(import_chalk19.default.red("Error:"), error2?.message || error2);
33142
34054
  }
33143
34055
  }
33144
34056
  } else {
33145
34057
  const rl = readline5.createInterface({ input: import_node_process3.stdin, output: import_node_process3.stdout });
33146
34058
  while (true) {
33147
34059
  try {
33148
- const prompt = import_chalk18.default.gray("> ");
34060
+ const prompt = import_chalk19.default.gray("> ");
33149
34061
  const line = await rl.question(prompt);
33150
34062
  console.log();
33151
34063
  if (line.toLowerCase() === "exit" || line.toLowerCase() === "quit") {
@@ -33159,7 +34071,7 @@ async function startInteractiveSession() {
33159
34071
  await stop();
33160
34072
  return;
33161
34073
  }
33162
- console.error(import_chalk18.default.red("Error:"), error2?.message || error2);
34074
+ console.error(import_chalk19.default.red("Error:"), error2?.message || error2);
33163
34075
  }
33164
34076
  }
33165
34077
  }
@@ -33169,7 +34081,7 @@ function createCLI() {
33169
34081
  program2.name("maria").description(`\u{1F680} MARIA v${getVersion()} - Intelligent AI Assistant`).version(getVersion()).option("--v3-session", "Use v3 session architecture").option("--no-interactive", "Disable interactive mode for CI/CD").option("--server", "Start HTTP server mode for Cloud Run").action(async (options) => {
33170
34082
  loadEnvironmentVariables();
33171
34083
  if (options.server) {
33172
- console.log(import_chalk18.default.green("\u{1F680} Starting MARIA server mode..."));
34084
+ console.log(import_chalk19.default.green("\u{1F680} Starting MARIA server mode..."));
33173
34085
  try {
33174
34086
  const serverPath = path11.join(process.cwd(), "server.mjs");
33175
34087
  const { spawn } = await import("child_process");
@@ -33178,12 +34090,12 @@ function createCLI() {
33178
34090
  env: process.env
33179
34091
  });
33180
34092
  serverProcess.on("error", (error2) => {
33181
- console.error(import_chalk18.default.red("\u274C Server process error:"), error2);
34093
+ console.error(import_chalk19.default.red("\u274C Server process error:"), error2);
33182
34094
  process.exit(1);
33183
34095
  });
33184
34096
  return;
33185
34097
  } catch (error2) {
33186
- console.error(import_chalk18.default.red("\u274C Failed to start server mode:"), error2);
34098
+ console.error(import_chalk19.default.red("\u274C Failed to start server mode:"), error2);
33187
34099
  process.exit(1);
33188
34100
  }
33189
34101
  }
@@ -33193,7 +34105,7 @@ function createCLI() {
33193
34105
  displayStartupLogo2();
33194
34106
  startupDisplayed = true;
33195
34107
  } catch {
33196
- console.log(import_chalk18.default.cyan(`
34108
+ console.log(import_chalk19.default.cyan(`
33197
34109
  \u{1F680} MARIA v${getVersion()}
33198
34110
  `));
33199
34111
  startupDisplayed = true;
@@ -33202,24 +34114,24 @@ function createCLI() {
33202
34114
  const useV3 = options.v3Session || process.env.MARIA_USE_V3_SESSION === "1";
33203
34115
  if (useV3) {
33204
34116
  try {
33205
- console.log(import_chalk18.default.cyan("\u{1F680} Starting MARIA v3 session..."));
34117
+ console.log(import_chalk19.default.cyan("\u{1F680} Starting MARIA v3 session..."));
33206
34118
  const { MariaAI: MariaAI2 } = await Promise.resolve().then(() => (init_maria_ai(), maria_ai_exports));
33207
34119
  const maria = new MariaAI2();
33208
34120
  await maria.initialize();
33209
34121
  return;
33210
34122
  } catch (e2) {
33211
- console.warn(import_chalk18.default.yellow("\u26A0 V3 session unavailable, using standard mode"));
34123
+ console.warn(import_chalk19.default.yellow("\u26A0 V3 session unavailable, using standard mode"));
33212
34124
  }
33213
34125
  }
33214
34126
  await startInteractiveSession();
33215
34127
  });
33216
34128
  return program2;
33217
34129
  }
33218
- var import_commander, import_chalk18, readline5, import_node_process3, path11, fs11, AIResponseService2, ChatContextService2, ConversationPersistence2, InteractiveCLI2, ai, ctx, store, session, commandManager, startupDisplayed, program;
34130
+ var import_commander, import_chalk19, readline5, import_node_process3, path11, fs11, AIResponseService2, ChatContextService2, ConversationPersistence2, InteractiveCLI2, ai, ctx, store, session, commandManager, startupDisplayed, program;
33219
34131
  var init_cli = __esm({
33220
34132
  "src/cli.ts"() {
33221
34133
  import_commander = require("commander");
33222
- import_chalk18 = __toESM(require("chalk"), 1);
34134
+ import_chalk19 = __toESM(require("chalk"), 1);
33223
34135
  readline5 = __toESM(require("readline/promises"), 1);
33224
34136
  import_node_process3 = require("process");
33225
34137
  path11 = __toESM(require("path"), 1);
@@ -33262,21 +34174,21 @@ function createCLI2() {
33262
34174
  }
33263
34175
  });
33264
34176
  program2.command("setup-ollama").description("Setup Ollama for local AI").action(async () => {
33265
- console.log(import_chalk19.default.cyan("Setting up Ollama..."));
34177
+ console.log(import_chalk20.default.cyan("Setting up Ollama..."));
33266
34178
  console.log(
33267
- import_chalk19.default.yellow("Please run: brew install ollama && ollama serve")
34179
+ import_chalk20.default.yellow("Please run: brew install ollama && ollama serve")
33268
34180
  );
33269
34181
  });
33270
34182
  program2.command("setup-vllm").description("Setup vLLM for local AI").action(async () => {
33271
- console.log(import_chalk19.default.cyan("Setting up vLLM..."));
33272
- console.log(import_chalk19.default.yellow("Please run: pip install vllm"));
34183
+ console.log(import_chalk20.default.cyan("Setting up vLLM..."));
34184
+ console.log(import_chalk20.default.yellow("Please run: pip install vllm"));
33273
34185
  });
33274
34186
  return program2;
33275
34187
  }
33276
- var import_chalk19, import_commander2, MariaAI;
34188
+ var import_chalk20, import_commander2, MariaAI;
33277
34189
  var init_maria_ai = __esm({
33278
34190
  "src/maria-ai.ts"() {
33279
- import_chalk19 = __toESM(require("chalk"), 1);
34191
+ import_chalk20 = __toESM(require("chalk"), 1);
33280
34192
  import_commander2 = require("commander");
33281
34193
  init_startup_display();
33282
34194
  init_provider_selector();
@@ -33299,13 +34211,13 @@ var init_maria_ai = __esm({
33299
34211
  await this.providerSelector.initialize();
33300
34212
  const { provider, model } = await this.providerSelector.selectProvider();
33301
34213
  console.log(
33302
- import_chalk19.default.green(`
34214
+ import_chalk20.default.green(`
33303
34215
  \u2705 Selected: ${provider} with model ${model}`)
33304
34216
  );
33305
34217
  this.config.set("currentProvider", provider);
33306
34218
  this.config.set("currentModel", model);
33307
34219
  await this.config.save();
33308
- console.log(import_chalk19.default.cyan("\n\u{1F9E0} Initializing Intelligent Router..."));
34220
+ console.log(import_chalk20.default.cyan("\n\u{1F9E0} Initializing Intelligent Router..."));
33309
34221
  this.router = new IntelligentRouterService({
33310
34222
  confidenceThreshold: 0.85,
33311
34223
  enableLearning: true,
@@ -33313,12 +34225,12 @@ var init_maria_ai = __esm({
33313
34225
  });
33314
34226
  await this.router.initialize();
33315
34227
  console.log(
33316
- import_chalk19.default.green("\u2705 Intelligent Router initialized successfully\n")
34228
+ import_chalk20.default.green("\u2705 Intelligent Router initialized successfully\n")
33317
34229
  );
33318
34230
  this.session = createInteractiveSession(this);
33319
34231
  await this.session.start();
33320
34232
  } catch (error2) {
33321
- console.error(import_chalk19.default.red("\n\u274C Initialization failed:"), error2);
34233
+ console.error(import_chalk20.default.red("\n\u274C Initialization failed:"), error2);
33322
34234
  process.exit(1);
33323
34235
  }
33324
34236
  }
@@ -33326,7 +34238,7 @@ var init_maria_ai = __esm({
33326
34238
  if (this.session) {
33327
34239
  await this.session.stop();
33328
34240
  }
33329
- console.log(import_chalk19.default.cyan("\n\u{1F44B} Goodbye!"));
34241
+ console.log(import_chalk20.default.cyan("\n\u{1F44B} Goodbye!"));
33330
34242
  }
33331
34243
  };
33332
34244
  }
@@ -33336,7 +34248,7 @@ var init_maria_ai = __esm({
33336
34248
  init_maria_ai();
33337
34249
 
33338
34250
  // src/utils/version-check.ts
33339
- var import_chalk20 = __toESM(require("chalk"), 1);
34251
+ var import_chalk21 = __toESM(require("chalk"), 1);
33340
34252
  var import_semver = __toESM(require("semver"), 1);
33341
34253
  var MINIMUM_NODE_VERSION = "18.0.0";
33342
34254
  var RECOMMENDED_NODE_VERSION = "20.0.0";
@@ -33344,25 +34256,25 @@ function checkNodeVersion() {
33344
34256
  const currentVersion = process.version;
33345
34257
  if (!import_semver.default.satisfies(currentVersion, `>=${MINIMUM_NODE_VERSION}`)) {
33346
34258
  console.error(
33347
- import_chalk20.default.red(`
34259
+ import_chalk21.default.red(`
33348
34260
  \u274C Node.js version ${currentVersion} is not supported.`)
33349
34261
  );
33350
34262
  console.error(
33351
- import_chalk20.default.yellow(`Minimum required version: ${MINIMUM_NODE_VERSION}`)
34263
+ import_chalk21.default.yellow(`Minimum required version: ${MINIMUM_NODE_VERSION}`)
33352
34264
  );
33353
34265
  console.error(
33354
- import_chalk20.default.yellow(
34266
+ import_chalk21.default.yellow(
33355
34267
  `Recommended version: ${RECOMMENDED_NODE_VERSION} or higher`
33356
34268
  )
33357
34269
  );
33358
- console.error(import_chalk20.default.cyan("\nPlease upgrade Node.js:"));
33359
- console.error(import_chalk20.default.gray(" \u2022 Using nvm: nvm install 20 && nvm use 20"));
34270
+ console.error(import_chalk21.default.cyan("\nPlease upgrade Node.js:"));
34271
+ console.error(import_chalk21.default.gray(" \u2022 Using nvm: nvm install 20 && nvm use 20"));
33360
34272
  console.error(
33361
- import_chalk20.default.gray(
34273
+ import_chalk21.default.gray(
33362
34274
  " \u2022 Using nodenv: nodenv install 20.0.0 && nodenv global 20.0.0"
33363
34275
  )
33364
34276
  );
33365
- console.error(import_chalk20.default.gray(" \u2022 Download from: https://nodejs.org/"));
34277
+ console.error(import_chalk21.default.gray(" \u2022 Download from: https://nodejs.org/"));
33366
34278
  process.exit(1);
33367
34279
  }
33368
34280
  }