From 0fbbc964fec945ad308fe7ddb65cfeb245ae84f3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 31 Jan 2026 13:26:41 +0000 Subject: [PATCH 1/2] Initial plan From 4bdaf10cf4ebd6a43a8ffd0417fad354d14caba1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 31 Jan 2026 13:32:09 +0000 Subject: [PATCH 2/2] fix: resolve TypeScript build errors in support and ui packages - Fix ObjectQL method calls in case.hook.ts: use ctx.db.doc.update() instead of ctx.db.update() - Fix ObjectQL method calls in case.hook.ts: use ctx.db.doc.create() instead of ctx.db.create() - Fix ObjectQL method calls in knowledge.hook.ts: use ctx.db.doc.update() instead of ctx.db.update() - Fix filter syntax in case.hook.ts: use 'Priority' instead of [['Priority', 'asc']] for sort parameter - Fix nullable reference errors in knowledge.hook.ts: add null checks for oldArticle and oldCase - Fix chart type in sales_intelligence.dashboard.ts: use 'table' instead of invalid 'list' type Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com> --- packages/support/src/hooks/case.hook.ts | 18 +++++++++--------- packages/support/src/hooks/knowledge.hook.ts | 6 +++--- .../dashboard/sales_intelligence.dashboard.ts | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/support/src/hooks/case.hook.ts b/packages/support/src/hooks/case.hook.ts index c54e3324c..2ee8bd6a0 100644 --- a/packages/support/src/hooks/case.hook.ts +++ b/packages/support/src/hooks/case.hook.ts @@ -227,13 +227,13 @@ const CaseCommentFirstResponseTrigger: Hook = { const responseTimeMinutes = Math.floor((now.getTime() - createdDate.getTime()) / (1000 * 60)); // Update case with first response info - await ctx.db.update('Case', caseRecord[0].id, { + await ctx.db.doc.update('Case', caseRecord[0].id, { FirstResponseTime: now, ResponseTimeMinutes: responseTimeMinutes }); // Update comment - await ctx.db.update('CaseComment', comment.id, { + await ctx.db.doc.update('CaseComment', comment.id, { IsFirstResponse: true, ResponseTimeMinutes: responseTimeMinutes }); @@ -259,7 +259,7 @@ async function findApplicableSLAPolicy(caseRecord: any, ctx: TriggerContext): Pr ['IsActive', '=', true], ['IsLatestVersion', '=', true] ], - sort: [['Priority', 'asc']], + sort: 'Priority', limit: 100 }); @@ -338,7 +338,7 @@ async function createSLAMilestones(caseRecord: any, policy: any, ctx: TriggerCon // Create milestones for (const milestone of milestones) { - await ctx.db.create('SLAMilestone', milestone); + await ctx.db.doc.create('SLAMilestone', milestone); } } @@ -372,7 +372,7 @@ async function updateSLAViolationStatus(caseRecord: any, ctx: TriggerContext): P async function findMatchingRoutingRule(caseRecord: any, ctx: TriggerContext): Promise { const rules = await ctx.db.find('RoutingRule', { filters: [['IsActive', '=', true]], - sort: [['Priority', 'asc']], + sort: 'Priority', limit: 100 }); @@ -433,7 +433,7 @@ async function findBestAgent(caseRecord: any, routingRule: any, ctx: TriggerCont async function findApplicableEscalationRule(caseRecord: any, ctx: TriggerContext): Promise { const rules = await ctx.db.find('EscalationRule', { filters: [['IsActive', '=', true]], - sort: [['EscalationLevel', 'asc']], + sort: 'EscalationLevel', limit: 100 }); @@ -476,7 +476,7 @@ function shouldAutoEscalate(caseRecord: any, oldCase: any): boolean { async function executeEscalation(caseRecord: any, rule: any, ctx: TriggerContext): Promise { // Update case with escalation info - await ctx.db.update('Case', caseRecord.id, { + await ctx.db.doc.update('Case', caseRecord.id, { IsEscalated: true, EscalatedDate: new Date(), EscalationLevel: (caseRecord.EscalationLevel || 0) + 1, @@ -485,7 +485,7 @@ async function executeEscalation(caseRecord: any, rule: any, ctx: TriggerContext }); // Update rule statistics - await ctx.db.update('EscalationRule', rule.id, { + await ctx.db.doc.update('EscalationRule', rule.id, { TimesTriggered: (rule.TimesTriggered || 0) + 1, LastTriggeredDate: new Date() }); @@ -506,7 +506,7 @@ async function updateSLAMilestone(caseId: string, milestoneType: string, complet const targetDate = new Date(milestone.TargetDateTime); const isViolated = completedDate > targetDate; - await ctx.db.update('SLAMilestone', milestone.id, { + await ctx.db.doc.update('SLAMilestone', milestone.id, { Status: isViolated ? 'Violated' : 'Completed', ActualDateTime: completedDate, IsViolated: isViolated diff --git a/packages/support/src/hooks/knowledge.hook.ts b/packages/support/src/hooks/knowledge.hook.ts index 0856f4b6b..58a234133 100644 --- a/packages/support/src/hooks/knowledge.hook.ts +++ b/packages/support/src/hooks/knowledge.hook.ts @@ -125,7 +125,7 @@ const KnowledgeArticleWorkflowTrigger: Hook = { const oldArticle = ctx.old; // Track status changes - if (oldArticle.Status !== article.Status) { + if (oldArticle && oldArticle.Status !== article.Status) { await trackStatusChange(article, oldArticle, ctx); } @@ -166,7 +166,7 @@ const KnowledgeArticleUsageTracker: Hook = { const oldCase = ctx.old; // Track when case is resolved and knowledge was used - if (caseRecord.Status === 'Resolved' && oldCase.Status !== 'Resolved') { + if (oldCase && caseRecord.Status === 'Resolved' && oldCase.Status !== 'Resolved') { if (caseRecord.AIRelatedKnowledge) { const articleIds = caseRecord.AIRelatedKnowledge.split(','); @@ -517,7 +517,7 @@ async function incrementArticleUsage(articleId: string, ctx: TriggerContext): Pr if (article && article.length > 0) { const currentCount = article[0].CaseResolutionCount || 0; - await ctx.db.update('KnowledgeArticle', articleId, { + await ctx.db.doc.update('KnowledgeArticle', articleId, { CaseResolutionCount: currentCount + 1, LastUsedInCaseDate: new Date() }); diff --git a/packages/ui/src/dashboard/sales_intelligence.dashboard.ts b/packages/ui/src/dashboard/sales_intelligence.dashboard.ts index 0f3936691..061b192c5 100644 --- a/packages/ui/src/dashboard/sales_intelligence.dashboard.ts +++ b/packages/ui/src/dashboard/sales_intelligence.dashboard.ts @@ -306,7 +306,7 @@ const SalesIntelligenceDashboard: Dashboard = { // ======================================================================== { title: '🚨 At-Risk Deals', - type: 'list', + type: 'table', object: 'Opportunity', filter: { $and: [ @@ -346,7 +346,7 @@ const SalesIntelligenceDashboard: Dashboard = { // ======================================================================== { title: '✨ AI-Identified Opportunities', - type: 'list', + type: 'table', object: 'Opportunity', filter: { $and: [