5f4f4c0af8
## Summary - Implements real tools for the dashboard-building skill to create and manage dashboards through the AI chat interface - Adds 6 new dashboard tools: `create_complete_dashboard`, `list_dashboards`, `get_dashboard`, `add_dashboard_widget`, `update_dashboard_widget`, `delete_dashboard_widget` - Improves widget configuration robustness with typed Zod schemas and discriminated unions for graph types ## Key Changes **New Dashboard Tools:** - `create_complete_dashboard` - Creates a dashboard with layout, tab, and widgets in a single call - `list_dashboards` - Lists all dashboards in the workspace - `get_dashboard` - Gets full dashboard details including tabs and widget configurations - `add_dashboard_widget` - Adds a widget to an existing dashboard tab - `update_dashboard_widget` - Updates widget properties or configuration - `delete_dashboard_widget` - Removes a widget from a dashboard **Widget Configuration Improvements:** - Typed Zod schemas for each chart type (AGGREGATE, BAR, LINE, PIE) - Discriminated union validation based on `graphType` - Widget-level error handling for partial success when creating dashboards - Clear documentation about required `objectMetadataId` and field UUIDs **Skill Documentation Updates:** - Updated `dashboard-building.skill.ts` with critical guidance about looking up field metadata first - Added workflow instructions: use `list_object_metadata_items` before creating GRAPH widgets - Practical grid layout recommendations ## Test plan - [ ] Create a new dashboard via AI chat - [ ] Verify widgets display data correctly when proper field IDs are provided - [ ] Test adding/updating/deleting widgets on existing dashboards - [ ] Verify error messages are helpful when configuration is incorrect
29 lines
1.0 KiB
TypeScript
29 lines
1.0 KiB
TypeScript
import { Global, Module } from '@nestjs/common';
|
|
|
|
import { ApplicationModule } from 'src/engine/core-modules/application/application.module';
|
|
import { RecordPositionModule } from 'src/engine/core-modules/record-position/record-position.module';
|
|
import { DASHBOARD_TOOL_SERVICE_TOKEN } from 'src/engine/core-modules/tool-provider/constants/dashboard-tool-service.token';
|
|
import { PageLayoutModule } from 'src/engine/metadata-modules/page-layout/page-layout.module';
|
|
import { TwentyORMModule } from 'src/engine/twenty-orm/twenty-orm.module';
|
|
|
|
import { DashboardToolWorkspaceService } from './services/dashboard-tool.workspace-service';
|
|
|
|
@Global()
|
|
@Module({
|
|
imports: [
|
|
PageLayoutModule,
|
|
RecordPositionModule,
|
|
TwentyORMModule,
|
|
ApplicationModule,
|
|
],
|
|
providers: [
|
|
DashboardToolWorkspaceService,
|
|
{
|
|
provide: DASHBOARD_TOOL_SERVICE_TOKEN,
|
|
useExisting: DashboardToolWorkspaceService,
|
|
},
|
|
],
|
|
exports: [DashboardToolWorkspaceService, DASHBOARD_TOOL_SERVICE_TOKEN],
|
|
})
|
|
export class DashboardToolsModule {}
|