Skip to content

Commit db56ca7

Browse files
authored
Merge pull request #238 from objectstack-ai/copilot/redesign-docs-homepage-again
2 parents 3f704f4 + eec91e5 commit db56ca7

11 files changed

Lines changed: 52 additions & 22 deletions

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
"author": "HotCRM Team",
5252
"license": "MIT",
5353
"dependencies": {
54+
"@hotcrm/core": "workspace:*",
5455
"pino": "^10.3.1",
5556
"pino-pretty": "^13.1.3"
5657
},

packages/ai/src/cache-manager.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ export class CacheManager {
9292

9393
logger.info('[Cache] Redis initialization placeholder - using in-memory cache');
9494
} catch (error) {
95-
logger.error('[Cache] Redis initialization failed:', error);
95+
logger.error({ err: error }, '[Cache] Redis initialization failed');
9696

9797
if (this.config.useMemoryFallback) {
9898
logger.info('[Cache] Falling back to in-memory cache');
@@ -136,7 +136,7 @@ export class CacheManager {
136136

137137
return entry.data as T;
138138
} catch (error) {
139-
logger.error('[Cache] Get error:', error);
139+
logger.error({ err: error }, '[Cache] Get error');
140140
return null;
141141
}
142142
}
@@ -169,7 +169,7 @@ export class CacheManager {
169169
// Clean up expired entries periodically
170170
this.cleanupExpired();
171171
} catch (error) {
172-
logger.error('[Cache] Set error:', error);
172+
logger.error({ err: error }, '[Cache] Set error');
173173
}
174174
}
175175

@@ -185,7 +185,7 @@ export class CacheManager {
185185

186186
this.memoryCache.delete(key);
187187
} catch (error) {
188-
logger.error('[Cache] Delete error:', error);
188+
logger.error({ err: error }, '[Cache] Delete error');
189189
}
190190
}
191191

@@ -201,7 +201,7 @@ export class CacheManager {
201201

202202
this.memoryCache.clear();
203203
} catch (error) {
204-
logger.error('[Cache] Clear error:', error);
204+
logger.error({ err: error }, '[Cache] Clear error');
205205
}
206206
}
207207

packages/ai/src/prediction-service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ export class PredictionService {
194194
metadata: result.metadata
195195
}));
196196
} catch (error) {
197-
logger.warn('[PredictionService] Batch prediction failed, falling back to sequential:', error);
197+
logger.warn({ err: error }, '[PredictionService] Batch prediction failed, falling back to sequential');
198198
}
199199
}
200200

@@ -241,7 +241,7 @@ export class PredictionService {
241241
const result = await provider.predict<T>(model.id, { features, context });
242242
return result;
243243
} catch (error) {
244-
logger.warn(`[PredictionService] Provider prediction failed for ${model.id}, falling back to mock:`, error);
244+
logger.warn({ err: error }, `[PredictionService] Provider prediction failed for ${model.id}, falling back to mock`);
245245
}
246246
}
247247

packages/ai/src/providers/aws-sagemaker-provider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export class AWSSageMakerProvider extends BaseMLProvider {
6969

7070
return true;
7171
} catch (error) {
72-
logger.error('[SageMaker] Validation failed:', error);
72+
logger.error({ err: error }, '[SageMaker] Validation failed');
7373
return false;
7474
}
7575
}
@@ -115,7 +115,7 @@ export class AWSSageMakerProvider extends BaseMLProvider {
115115
}
116116
};
117117
} catch (error) {
118-
logger.error('[SageMaker] Prediction error:', error);
118+
logger.error({ err: error }, '[SageMaker] Prediction error');
119119
throw new Error(`SageMaker prediction failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
120120
}
121121
}

packages/ai/src/providers/azure-ml-provider.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ export class AzureMLProvider extends BaseMLProvider {
8686

8787
return true;
8888
} catch (error) {
89-
logger.error('[Azure ML] Validation failed:', error);
89+
logger.error({ err: error }, '[Azure ML] Validation failed');
9090
return false;
9191
}
9292
}
@@ -131,7 +131,7 @@ export class AzureMLProvider extends BaseMLProvider {
131131
}
132132
};
133133
} catch (error) {
134-
logger.error('[Azure ML] Prediction error:', error);
134+
logger.error({ err: error }, '[Azure ML] Prediction error');
135135

136136
const err = error as any;
137137
if (err.isAxiosError) {
@@ -178,7 +178,7 @@ export class AzureMLProvider extends BaseMLProvider {
178178
}
179179
}));
180180
} catch (error) {
181-
logger.error('[Azure ML] Batch prediction error:', error);
181+
logger.error({ err: error }, '[Azure ML] Batch prediction error');
182182
throw new Error(`Azure ML batch prediction failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
183183
}
184184
}

packages/ai/src/providers/openai-provider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export class OpenAIProvider extends BaseMLProvider {
8989

9090
return true;
9191
} catch (error) {
92-
logger.error('[OpenAI] Validation failed:', error);
92+
logger.error({ err: error }, '[OpenAI] Validation failed');
9393
return false;
9494
}
9595
}
@@ -131,7 +131,7 @@ export class OpenAIProvider extends BaseMLProvider {
131131
}
132132
};
133133
} catch (error) {
134-
logger.error('[OpenAI] Prediction error:', error);
134+
logger.error({ err: error }, '[OpenAI] Prediction error');
135135

136136
const err = error as any;
137137
if (err.isAxiosError) {

packages/core/src/logger.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,33 @@ export interface LoggerOptions {
2020
level?: LogLevel;
2121
}
2222

23+
/** Flexible logger interface compatible with pino but lenient on call signatures */
24+
export interface Logger {
25+
fatal(msg: string, ...args: any[]): void;
26+
fatal(obj: unknown, msg?: string, ...args: any[]): void;
27+
error(msg: string, ...args: any[]): void;
28+
error(obj: unknown, msg?: string, ...args: any[]): void;
29+
warn(msg: string, ...args: any[]): void;
30+
warn(obj: unknown, msg?: string, ...args: any[]): void;
31+
info(msg: string, ...args: any[]): void;
32+
info(obj: unknown, msg?: string, ...args: any[]): void;
33+
debug(msg: string, ...args: any[]): void;
34+
debug(obj: unknown, msg?: string, ...args: any[]): void;
35+
trace(msg: string, ...args: any[]): void;
36+
trace(obj: unknown, msg?: string, ...args: any[]): void;
37+
child(bindings: Record<string, any>): Logger;
38+
}
39+
2340
/**
2441
* Create a child logger scoped to a specific module.
2542
*
2643
* @param module Hierarchical module name, e.g. 'crm:account' or 'ai:cache'
2744
* @param options Optional overrides
2845
*/
29-
export function createLogger(module: string, options?: LoggerOptions): pino.Logger {
46+
export function createLogger(module: string, options?: LoggerOptions): Logger {
3047
const level = options?.level ?? (process.env.LOG_LEVEL as LogLevel) ?? 'info';
31-
return pino({ name: module, level });
48+
return pino({ name: module, level }) as unknown as Logger;
3249
}
3350

3451
/** Shared root logger instance */
35-
export const logger: pino.Logger = createLogger('hotcrm');
52+
export const logger: Logger = createLogger('hotcrm');

packages/core/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
"extends": "../../base.tsconfig.json",
33
"compilerOptions": {
44
"outDir": "./dist",
5-
"rootDir": "./src"
5+
"rootDir": "./src",
6+
"declaration": true
67
},
78
"include": ["src/**/*"],
89
"exclude": ["node_modules", "dist"]

pnpm-lock.yaml

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pnpm-workspace.yaml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
packages:
22
- 'apps/*'
33
- 'packages/*'
4-
# core and server are internal-only packages (private: true) excluded from
4+
# server is an internal-only package (private: true) excluded from
55
# workspace linking to avoid circular dependency issues during builds.
6-
# They are consumed via tsconfig path aliases instead.
7-
- '!packages/core'
6+
# It is consumed via tsconfig path aliases instead.
87
- '!packages/server'

0 commit comments

Comments
 (0)