@stackmemoryai/stackmemory 0.5.44 → 0.5.45
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.
|
@@ -91,21 +91,24 @@ class FallbackMonitor {
|
|
|
91
91
|
Object.assign(env, fallbackEnv);
|
|
92
92
|
this.currentProvider = this.routerConfig.fallback?.provider || "qwen";
|
|
93
93
|
}
|
|
94
|
+
const isTTY = process.stdout.isTTY;
|
|
94
95
|
currentProcess = spawn(command, args, {
|
|
95
|
-
stdio: ["inherit", "pipe", "pipe"],
|
|
96
|
+
stdio: isTTY ? "inherit" : ["inherit", "pipe", "pipe"],
|
|
96
97
|
env,
|
|
97
98
|
cwd: options.cwd
|
|
98
99
|
});
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
100
|
+
if (!isTTY) {
|
|
101
|
+
currentProcess.stdout?.on("data", (data) => {
|
|
102
|
+
const text = data.toString();
|
|
103
|
+
process.stdout.write(data);
|
|
104
|
+
this.checkForErrors(text);
|
|
105
|
+
});
|
|
106
|
+
currentProcess.stderr?.on("data", (data) => {
|
|
107
|
+
const text = data.toString();
|
|
108
|
+
process.stderr.write(data);
|
|
109
|
+
this.checkForErrors(text);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
109
112
|
currentProcess.on("exit", (code, _signal) => {
|
|
110
113
|
if (stopped) return;
|
|
111
114
|
if (code !== 0 && this.shouldRestart()) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/core/models/fallback-monitor.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Fallback Monitor - Watches Claude output for errors and triggers automatic fallback\n * Restarts session with Qwen when Claude fails\n */\n\nimport { spawn, ChildProcess } from 'child_process';\nimport {\n loadModelRouterConfig,\n buildModelEnv,\n type ModelProvider,\n} from './model-router.js';\n\nexport interface FallbackMonitorConfig {\n enabled: boolean;\n maxRestarts: number;\n restartDelayMs: number;\n errorPatterns: RegExp[];\n onFallback?: (provider: ModelProvider, reason: string) => void;\n onRestore?: (provider: ModelProvider) => void;\n}\n\nconst DEFAULT_ERROR_PATTERNS = [\n /rate.?limit/i,\n /429/,\n /too.?many.?requests/i,\n /overloaded/i,\n /capacity/i,\n /temporarily.?unavailable/i,\n /503/,\n /502/,\n /500/,\n /internal.?server.?error/i,\n /timeout/i,\n /ETIMEDOUT/,\n /ESOCKETTIMEDOUT/,\n /ECONNRESET/,\n /ECONNREFUSED/,\n];\n\n/**\n * FallbackMonitor watches a Claude process and restarts with fallback on errors\n */\nexport class FallbackMonitor {\n private config: FallbackMonitorConfig;\n private routerConfig = loadModelRouterConfig();\n private currentProvider: ModelProvider = 'anthropic';\n private restartCount = 0;\n private inFallback = false;\n private errorBuffer = '';\n private lastErrorTime = 0;\n private errorCount = 0;\n\n constructor(config: Partial<FallbackMonitorConfig> = {}) {\n this.config = {\n enabled: true,\n maxRestarts: 3,\n restartDelayMs: 2000,\n errorPatterns: DEFAULT_ERROR_PATTERNS,\n ...config,\n };\n }\n\n /**\n * Check if text contains error patterns that should trigger fallback\n */\n detectError(text: string): { shouldFallback: boolean; reason: string } {\n for (const pattern of this.config.errorPatterns) {\n if (pattern.test(text)) {\n return {\n shouldFallback: true,\n reason: pattern.source,\n };\n }\n }\n return { shouldFallback: false, reason: '' };\n }\n\n /**\n * Get environment variables for fallback provider\n */\n getFallbackEnv(): Record<string, string> {\n const fallbackProvider = this.routerConfig.fallback?.provider || 'qwen';\n const providerConfig = this.routerConfig.providers[fallbackProvider];\n\n if (!providerConfig) {\n console.error(`[fallback] Provider not configured: ${fallbackProvider}`);\n return {};\n }\n\n return buildModelEnv(providerConfig);\n }\n\n /**\n * Check if fallback is available (has API key)\n */\n isFallbackAvailable(): boolean {\n const fallbackProvider = this.routerConfig.fallback?.provider || 'qwen';\n const providerConfig = this.routerConfig.providers[fallbackProvider];\n\n if (!providerConfig) return false;\n\n return !!process.env[providerConfig.apiKeyEnv];\n }\n\n /**\n * Wrap a Claude process with fallback monitoring\n * Returns a function to spawn the process with automatic restart on failure\n */\n wrapProcess(\n command: string,\n args: string[],\n options: { env?: NodeJS.ProcessEnv; cwd?: string } = {}\n ): {\n start: () => ChildProcess;\n stop: () => void;\n isInFallback: () => boolean;\n getCurrentProvider: () => ModelProvider;\n } {\n let currentProcess: ChildProcess | null = null;\n let stopped = false;\n\n const startProcess = (): ChildProcess => {\n const env = { ...process.env, ...options.env };\n\n // Apply fallback env if in fallback mode\n if (this.inFallback) {\n const fallbackEnv = this.getFallbackEnv();\n Object.assign(env, fallbackEnv);\n this.currentProvider = this.routerConfig.fallback?.provider || 'qwen';\n }\n\n currentProcess = spawn(command, args, {\n stdio: ['inherit', 'pipe', 'pipe'],\n env,\n cwd: options.cwd,\n });\n\n // Monitor stdout\n
|
|
5
|
-
"mappings": ";;;;AAKA,SAAS,aAA2B;AACpC;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AAWP,MAAM,yBAAyB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKO,MAAM,gBAAgB;AAAA,EACnB;AAAA,EACA,eAAe,sBAAsB;AAAA,EACrC,kBAAiC;AAAA,EACjC,eAAe;AAAA,EACf,aAAa;AAAA,EACb,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,aAAa;AAAA,EAErB,YAAY,SAAyC,CAAC,GAAG;AACvD,SAAK,SAAS;AAAA,MACZ,SAAS;AAAA,MACT,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,GAAG;AAAA,IACL;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,MAA2D;AACrE,eAAW,WAAW,KAAK,OAAO,eAAe;AAC/C,UAAI,QAAQ,KAAK,IAAI,GAAG;AACtB,eAAO;AAAA,UACL,gBAAgB;AAAA,UAChB,QAAQ,QAAQ;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AACA,WAAO,EAAE,gBAAgB,OAAO,QAAQ,GAAG;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAyC;AACvC,UAAM,mBAAmB,KAAK,aAAa,UAAU,YAAY;AACjE,UAAM,iBAAiB,KAAK,aAAa,UAAU,gBAAgB;AAEnE,QAAI,CAAC,gBAAgB;AACnB,cAAQ,MAAM,uCAAuC,gBAAgB,EAAE;AACvE,aAAO,CAAC;AAAA,IACV;AAEA,WAAO,cAAc,cAAc;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,sBAA+B;AAC7B,UAAM,mBAAmB,KAAK,aAAa,UAAU,YAAY;AACjE,UAAM,iBAAiB,KAAK,aAAa,UAAU,gBAAgB;AAEnE,QAAI,CAAC,eAAgB,QAAO;AAE5B,WAAO,CAAC,CAAC,QAAQ,IAAI,eAAe,SAAS;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YACE,SACA,MACA,UAAqD,CAAC,GAMtD;AACA,QAAI,iBAAsC;AAC1C,QAAI,UAAU;AAEd,UAAM,eAAe,MAAoB;AACvC,YAAM,MAAM,EAAE,GAAG,QAAQ,KAAK,GAAG,QAAQ,IAAI;AAG7C,UAAI,KAAK,YAAY;AACnB,cAAM,cAAc,KAAK,eAAe;AACxC,eAAO,OAAO,KAAK,WAAW;AAC9B,aAAK,kBAAkB,KAAK,aAAa,UAAU,YAAY;AAAA,MACjE;
|
|
4
|
+
"sourcesContent": ["/**\n * Fallback Monitor - Watches Claude output for errors and triggers automatic fallback\n * Restarts session with Qwen when Claude fails\n */\n\nimport { spawn, ChildProcess } from 'child_process';\nimport {\n loadModelRouterConfig,\n buildModelEnv,\n type ModelProvider,\n} from './model-router.js';\n\nexport interface FallbackMonitorConfig {\n enabled: boolean;\n maxRestarts: number;\n restartDelayMs: number;\n errorPatterns: RegExp[];\n onFallback?: (provider: ModelProvider, reason: string) => void;\n onRestore?: (provider: ModelProvider) => void;\n}\n\nconst DEFAULT_ERROR_PATTERNS = [\n /rate.?limit/i,\n /429/,\n /too.?many.?requests/i,\n /overloaded/i,\n /capacity/i,\n /temporarily.?unavailable/i,\n /503/,\n /502/,\n /500/,\n /internal.?server.?error/i,\n /timeout/i,\n /ETIMEDOUT/,\n /ESOCKETTIMEDOUT/,\n /ECONNRESET/,\n /ECONNREFUSED/,\n];\n\n/**\n * FallbackMonitor watches a Claude process and restarts with fallback on errors\n */\nexport class FallbackMonitor {\n private config: FallbackMonitorConfig;\n private routerConfig = loadModelRouterConfig();\n private currentProvider: ModelProvider = 'anthropic';\n private restartCount = 0;\n private inFallback = false;\n private errorBuffer = '';\n private lastErrorTime = 0;\n private errorCount = 0;\n\n constructor(config: Partial<FallbackMonitorConfig> = {}) {\n this.config = {\n enabled: true,\n maxRestarts: 3,\n restartDelayMs: 2000,\n errorPatterns: DEFAULT_ERROR_PATTERNS,\n ...config,\n };\n }\n\n /**\n * Check if text contains error patterns that should trigger fallback\n */\n detectError(text: string): { shouldFallback: boolean; reason: string } {\n for (const pattern of this.config.errorPatterns) {\n if (pattern.test(text)) {\n return {\n shouldFallback: true,\n reason: pattern.source,\n };\n }\n }\n return { shouldFallback: false, reason: '' };\n }\n\n /**\n * Get environment variables for fallback provider\n */\n getFallbackEnv(): Record<string, string> {\n const fallbackProvider = this.routerConfig.fallback?.provider || 'qwen';\n const providerConfig = this.routerConfig.providers[fallbackProvider];\n\n if (!providerConfig) {\n console.error(`[fallback] Provider not configured: ${fallbackProvider}`);\n return {};\n }\n\n return buildModelEnv(providerConfig);\n }\n\n /**\n * Check if fallback is available (has API key)\n */\n isFallbackAvailable(): boolean {\n const fallbackProvider = this.routerConfig.fallback?.provider || 'qwen';\n const providerConfig = this.routerConfig.providers[fallbackProvider];\n\n if (!providerConfig) return false;\n\n return !!process.env[providerConfig.apiKeyEnv];\n }\n\n /**\n * Wrap a Claude process with fallback monitoring\n * Returns a function to spawn the process with automatic restart on failure\n */\n wrapProcess(\n command: string,\n args: string[],\n options: { env?: NodeJS.ProcessEnv; cwd?: string } = {}\n ): {\n start: () => ChildProcess;\n stop: () => void;\n isInFallback: () => boolean;\n getCurrentProvider: () => ModelProvider;\n } {\n let currentProcess: ChildProcess | null = null;\n let stopped = false;\n\n const startProcess = (): ChildProcess => {\n const env = { ...process.env, ...options.env };\n\n // Apply fallback env if in fallback mode\n if (this.inFallback) {\n const fallbackEnv = this.getFallbackEnv();\n Object.assign(env, fallbackEnv);\n this.currentProvider = this.routerConfig.fallback?.provider || 'qwen';\n }\n\n // Use 'inherit' for TTY to preserve interactive mode\n // Claude CLI checks stdout TTY to decide interactive vs print mode\n const isTTY = process.stdout.isTTY;\n\n currentProcess = spawn(command, args, {\n stdio: isTTY ? 'inherit' : ['inherit', 'pipe', 'pipe'],\n env,\n cwd: options.cwd,\n });\n\n // Only monitor output in non-TTY mode (fallback detection still works via exit code)\n if (!isTTY) {\n // Monitor stdout\n currentProcess.stdout?.on('data', (data: Buffer) => {\n const text = data.toString();\n process.stdout.write(data);\n this.checkForErrors(text);\n });\n\n // Monitor stderr\n currentProcess.stderr?.on('data', (data: Buffer) => {\n const text = data.toString();\n process.stderr.write(data);\n this.checkForErrors(text);\n });\n }\n\n // Handle exit\n currentProcess.on('exit', (code, _signal) => {\n if (stopped) return;\n\n // Check if we should restart with fallback\n if (code !== 0 && this.shouldRestart()) {\n console.log(\n `\\n[fallback] Process exited with code ${code}, restarting with fallback...`\n );\n this.activateFallback('exit_code');\n setTimeout(() => {\n if (!stopped) {\n startProcess();\n }\n }, this.config.restartDelayMs);\n }\n });\n\n return currentProcess;\n };\n\n return {\n start: startProcess,\n stop: () => {\n stopped = true;\n currentProcess?.kill();\n },\n isInFallback: () => this.inFallback,\n getCurrentProvider: () => this.currentProvider,\n };\n }\n\n /**\n * Check output text for errors and trigger fallback if needed\n */\n private checkForErrors(text: string): void {\n this.errorBuffer += text;\n\n // Keep buffer manageable\n if (this.errorBuffer.length > 10000) {\n this.errorBuffer = this.errorBuffer.slice(-5000);\n }\n\n const { shouldFallback, reason } = this.detectError(text);\n\n if (shouldFallback) {\n const now = Date.now();\n\n // Debounce rapid errors\n if (now - this.lastErrorTime < 1000) {\n this.errorCount++;\n } else {\n this.errorCount = 1;\n }\n this.lastErrorTime = now;\n\n // Trigger fallback after multiple rapid errors\n if (\n this.errorCount >= 2 &&\n !this.inFallback &&\n this.isFallbackAvailable()\n ) {\n console.log(`\\n[fallback] Detected error pattern: ${reason}`);\n this.activateFallback(reason);\n }\n }\n }\n\n /**\n * Activate fallback mode\n */\n private activateFallback(reason: string): void {\n if (this.inFallback) return;\n\n this.inFallback = true;\n this.restartCount++;\n this.currentProvider = this.routerConfig.fallback?.provider || 'qwen';\n\n console.log(\n `[fallback] Switching to ${this.currentProvider} (reason: ${reason})`\n );\n\n if (this.config.onFallback) {\n this.config.onFallback(this.currentProvider, reason);\n }\n }\n\n /**\n * Check if we should restart\n */\n private shouldRestart(): boolean {\n return (\n this.config.enabled &&\n this.restartCount < this.config.maxRestarts &&\n this.isFallbackAvailable()\n );\n }\n\n /**\n * Reset fallback state\n */\n reset(): void {\n this.inFallback = false;\n this.restartCount = 0;\n this.errorCount = 0;\n this.errorBuffer = '';\n this.currentProvider = 'anthropic';\n }\n\n /**\n * Get current status\n */\n getStatus(): {\n inFallback: boolean;\n currentProvider: ModelProvider;\n restartCount: number;\n fallbackAvailable: boolean;\n } {\n return {\n inFallback: this.inFallback,\n currentProvider: this.currentProvider,\n restartCount: this.restartCount,\n fallbackAvailable: this.isFallbackAvailable(),\n };\n }\n}\n\n/**\n * Create a simple fallback-aware spawn function\n */\nexport function spawnWithFallback(\n command: string,\n args: string[],\n options: {\n env?: NodeJS.ProcessEnv;\n cwd?: string;\n onFallback?: (provider: ModelProvider, reason: string) => void;\n } = {}\n): ChildProcess {\n const monitor = new FallbackMonitor({\n onFallback: options.onFallback,\n });\n\n const wrapper = monitor.wrapProcess(command, args, options);\n return wrapper.start();\n}\n\n/**\n * Quick helper to get env vars with fallback pre-configured\n */\nexport function getEnvWithFallback(): Record<string, string> {\n const config = loadModelRouterConfig();\n const env: Record<string, string> = {};\n\n // Set fallback provider info for error recovery\n if (config.fallback?.enabled) {\n const fallbackProvider = config.providers[config.fallback.provider];\n if (fallbackProvider) {\n env['STACKMEMORY_FALLBACK_PROVIDER'] = config.fallback.provider;\n env['STACKMEMORY_FALLBACK_MODEL'] = fallbackProvider.model;\n env['STACKMEMORY_FALLBACK_URL'] = fallbackProvider.baseUrl || '';\n env['STACKMEMORY_FALLBACK_KEY_ENV'] = fallbackProvider.apiKeyEnv;\n }\n }\n\n return env;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stackmemoryai/stackmemory",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.45",
|
|
4
4
|
"description": "Lossless memory runtime for AI coding tools - organizes context as a call stack instead of linear chat logs, with team collaboration and infinite retention",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=20.0.0",
|