From 49401a5318fd45bc0da1b6be1b4b6cab72e8cc69 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 8 Feb 2026 01:43:08 +0000 Subject: [PATCH 1/3] Initial plan From 45fc0551bd0780a28d94ddf74e57df74eebeed75 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 8 Feb 2026 01:46:41 +0000 Subject: [PATCH 2/3] Fix TypeScript import errors for security types in security-scanner.ts Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com> --- packages/core/src/security/security-scanner.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/core/src/security/security-scanner.ts b/packages/core/src/security/security-scanner.ts index 359dd4a08..3a2296080 100644 --- a/packages/core/src/security/security-scanner.ts +++ b/packages/core/src/security/security-scanner.ts @@ -1,6 +1,6 @@ import type { - SecurityVulnerability, - SecurityScanResult + KernelSecurityVulnerability, + KernelSecurityScanResult } from '@objectstack/spec/kernel'; import type { ObjectLogger } from '../logger.js'; @@ -42,10 +42,10 @@ export class PluginSecurityScanner { private logger: ObjectLogger; // Known vulnerabilities database (CVE cache) - private vulnerabilityDb = new Map(); + private vulnerabilityDb = new Map(); // Scan results cache - private scanResults = new Map(); + private scanResults = new Map(); private passThreshold: number = 70; @@ -59,7 +59,7 @@ export class PluginSecurityScanner { /** * Perform a comprehensive security scan on a plugin */ - async scan(target: ScanTarget): Promise { + async scan(target: ScanTarget): Promise { this.logger.info('Starting security scan', { pluginId: target.pluginId, version: target.version @@ -91,7 +91,7 @@ export class PluginSecurityScanner { // Calculate security score (0-100, higher is better) const score = this.calculateSecurityScore(issues); - const result: SecurityScanResult = { + const result: KernelSecurityScanResult = { timestamp: new Date().toISOString(), scanner: { name: 'ObjectStack Security Scanner', version: '1.0.0' }, status: score >= this.passThreshold ? 'passed' : 'failed', @@ -309,7 +309,7 @@ export class PluginSecurityScanner { addVulnerability( packageName: string, version: string, - vulnerability: SecurityVulnerability + vulnerability: KernelSecurityVulnerability ): void { const key = `${packageName}@${version}`; this.vulnerabilityDb.set(key, vulnerability); @@ -324,7 +324,7 @@ export class PluginSecurityScanner { /** * Get scan result from cache */ - getScanResult(pluginId: string, version: string): SecurityScanResult | undefined { + getScanResult(pluginId: string, version: string): KernelSecurityScanResult | undefined { return this.scanResults.get(`${pluginId}:${version}`); } From 4b34cc30835051914564d16452681e0aa8df9f06 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 8 Feb 2026 02:14:39 +0000 Subject: [PATCH 3/3] Fix all CI build errors: type casting issues in metadata and objectql packages Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com> --- packages/metadata/src/loaders/memory-loader.ts | 2 +- packages/metadata/src/loaders/remote-loader.ts | 2 +- packages/metadata/src/metadata-manager.ts | 2 +- packages/objectql/src/engine.ts | 18 +++++++++--------- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/metadata/src/loaders/memory-loader.ts b/packages/metadata/src/loaders/memory-loader.ts index 2f92a3f89..b093ae3e9 100644 --- a/packages/metadata/src/loaders/memory-loader.ts +++ b/packages/metadata/src/loaders/memory-loader.ts @@ -67,7 +67,7 @@ export class MemoryLoader implements MetadataLoader { if (await this.exists(type, name)) { return { size: 0, // In-memory - mtime: new Date(), + mtime: new Date().toISOString(), format: 'json', }; } diff --git a/packages/metadata/src/loaders/remote-loader.ts b/packages/metadata/src/loaders/remote-loader.ts index da03fb7f4..a29ebd25c 100644 --- a/packages/metadata/src/loaders/remote-loader.ts +++ b/packages/metadata/src/loaders/remote-loader.ts @@ -103,7 +103,7 @@ export class RemoteLoader implements MetadataLoader { return { size: Number(response.headers.get('content-length') || 0), - mtime: new Date(response.headers.get('last-modified') || Date.now()), + mtime: new Date(response.headers.get('last-modified') || Date.now()).toISOString(), format: 'json', }; } diff --git a/packages/metadata/src/metadata-manager.ts b/packages/metadata/src/metadata-manager.ts index 5c95ad347..78911e31c 100644 --- a/packages/metadata/src/metadata-manager.ts +++ b/packages/metadata/src/metadata-manager.ts @@ -91,7 +91,7 @@ export class MetadataManager { try { const result = await loader.load(type, name, options); if (result.data) { - return result.data; + return result.data as T; } } catch (e) { this.logger.warn(`Loader ${loader.contract.name} failed to load ${type}:${name}`, { error: e }); diff --git a/packages/objectql/src/engine.ts b/packages/objectql/src/engine.ts index dc64a94af..4dc6eaf6b 100644 --- a/packages/objectql/src/engine.ts +++ b/packages/objectql/src/engine.ts @@ -437,13 +437,13 @@ export class ObjectQL implements IDataEngine { await this.triggerHooks('beforeFind', hookContext); try { - const result = await driver.find(object, hookContext.input.ast, hookContext.input.options); + const result = await driver.find(object, hookContext.input.ast as QueryAST, hookContext.input.options as any); hookContext.event = 'afterFind'; hookContext.result = result; await this.triggerHooks('afterFind', hookContext); - return hookContext.result; + return hookContext.result as any[]; } catch (e) { this.logger.error('Find operation failed', e as Error, { object }); throw e; @@ -480,13 +480,13 @@ export class ObjectQL implements IDataEngine { if (Array.isArray(hookContext.input.data)) { // Bulk Create if (driver.bulkCreate) { - result = await driver.bulkCreate(object, hookContext.input.data, hookContext.input.options); + result = await driver.bulkCreate(object, hookContext.input.data as any[], hookContext.input.options as any); } else { // Fallback loop - result = await Promise.all(hookContext.input.data.map((item: any) => driver.create(object, item, hookContext.input.options))); + result = await Promise.all((hookContext.input.data as any[]).map((item: any) => driver.create(object, item, hookContext.input.options as any))); } } else { - result = await driver.create(object, hookContext.input.data, hookContext.input.options); + result = await driver.create(object, hookContext.input.data, hookContext.input.options as any); } hookContext.event = 'afterInsert'; @@ -529,11 +529,11 @@ export class ObjectQL implements IDataEngine { let result; if (hookContext.input.id) { // Single update by ID - result = await driver.update(object, hookContext.input.id, hookContext.input.data, hookContext.input.options); + result = await driver.update(object, hookContext.input.id as string, hookContext.input.data, hookContext.input.options as any); } else if (options?.multi && driver.updateMany) { // Bulk update by Query const ast = this.toQueryAST(object, { filter: options.filter }); - result = await driver.updateMany(object, ast, hookContext.input.data, hookContext.input.options); + result = await driver.updateMany(object, ast, hookContext.input.data, hookContext.input.options as any); } else { throw new Error('Update requires an ID or options.multi=true'); } @@ -572,10 +572,10 @@ export class ObjectQL implements IDataEngine { try { let result; if (hookContext.input.id) { - result = await driver.delete(object, hookContext.input.id, hookContext.input.options); + result = await driver.delete(object, hookContext.input.id as string, hookContext.input.options as any); } else if (options?.multi && driver.deleteMany) { const ast = this.toQueryAST(object, { filter: options.filter }); - result = await driver.deleteMany(object, ast, hookContext.input.options); + result = await driver.deleteMany(object, ast, hookContext.input.options as any); } else { throw new Error('Delete requires an ID or options.multi=true'); }