@memberjunction/ng-dashboards 6.2.0-edge.6 → 6.2.0-edge.8
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.
- package/README.md +23 -16
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +2 -2
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-management.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-management.component.js +3 -1
- package/dist/AI/components/analytics/realtime/realtime-management.component.js.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-overview.component.d.ts +1 -1
- package/dist/AI/components/analytics/realtime/realtime-overview.component.js +3 -3
- package/dist/AI/components/analytics/realtime/realtime-overview.component.js.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts +6 -4
- package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-session-data.js +8 -2
- package/dist/AI/components/analytics/realtime/realtime-session-data.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +31 -10
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/autotagging/components/classify-item-grid.component.js +1 -1
- package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -1
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +1 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -1
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +1 -0
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -1
- package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1 -0
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +2 -2
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +14 -24
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +14 -7
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js +4 -2
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/Actions/action-result-code.d.ts +80 -0
- package/dist/Actions/action-result-code.d.ts.map +1 -0
- package/dist/Actions/action-result-code.js +163 -0
- package/dist/Actions/action-result-code.js.map +1 -0
- package/dist/Actions/components/actions-overview.component.d.ts +8 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +12 -9
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +29 -9
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +65 -42
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.js +5 -4
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts +92 -130
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts.map +1 -1
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.js +189 -274
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.js.map +1 -1
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts +29 -0
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js +666 -0
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts +56 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.js +515 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts +14 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js +39 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts +17 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.js +485 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts +139 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.js +602 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.js.map +1 -0
- package/dist/ChiefOfStaff/index.d.ts +4 -1
- package/dist/ChiefOfStaff/index.d.ts.map +1 -1
- package/dist/ChiefOfStaff/index.js +4 -1
- package/dist/ChiefOfStaff/index.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +3 -3
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +3 -3
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +2 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.js +3 -0
- package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +21 -2
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +32 -5
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +2 -2
- package/dist/DevTools/lazy-module-status.component.js +2 -2
- package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -1
- package/dist/FormBuilder/form-builder-resource.component.js +5 -0
- package/dist/FormBuilder/form-builder-resource.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +2 -2
- package/dist/Integration/services/integration-data.service.d.ts +1 -1
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +4 -3
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +11 -3
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +16 -16
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/visualize/semantic-graph/semantic-graph-explorer.component.d.ts +113 -0
- package/dist/KnowledgeHub/components/visualize/semantic-graph/semantic-graph-explorer.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/visualize/semantic-graph/semantic-graph-explorer.component.js +1184 -0
- package/dist/KnowledgeHub/components/visualize/semantic-graph/semantic-graph-explorer.component.js.map +1 -0
- package/dist/KnowledgeHub/components/visualize/visualize-agent-context.d.ts +1 -1
- package/dist/KnowledgeHub/components/visualize/visualize-agent-context.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/visualize/visualize-agent-context.js +1 -1
- package/dist/KnowledgeHub/components/visualize/visualize-agent-context.js.map +1 -1
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts +1 -1
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js +21 -10
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -1
- package/dist/LoginStudio/login-studio-resource.component.js +1 -0
- package/dist/LoginStudio/login-studio-resource.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.js +1 -0
- package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +2 -2
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +3 -0
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -1
- package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts.map +1 -1
- package/dist/PredictiveStudio/engine/predictive-studio.engine.js +1 -0
- package/dist/PredictiveStudio/engine/predictive-studio.engine.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +1 -0
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +26 -0
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +375 -252
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +4 -2
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/UserRoutines/user-routines-resource.component.d.ts +8 -1
- package/dist/UserRoutines/user-routines-resource.component.d.ts.map +1 -1
- package/dist/UserRoutines/user-routines-resource.component.js +22 -4
- package/dist/UserRoutines/user-routines-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +1 -0
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts +162 -0
- package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-archetype-editor.component.js +1105 -0
- package/dist/VideoStudio/components/vs-archetype-editor.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-audio-options.component.d.ts +27 -0
- package/dist/VideoStudio/components/vs-audio-options.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-audio-options.component.js +119 -0
- package/dist/VideoStudio/components/vs-audio-options.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts +105 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.js +560 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-production-brief.component.d.ts +163 -0
- package/dist/VideoStudio/components/vs-production-brief.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-production-brief.component.js +1054 -0
- package/dist/VideoStudio/components/vs-production-brief.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts +43 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.js +412 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts +73 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.js +271 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.js.map +1 -0
- package/dist/VideoStudio/index.d.ts +12 -0
- package/dist/VideoStudio/index.d.ts.map +1 -0
- package/dist/VideoStudio/index.js +12 -0
- package/dist/VideoStudio/index.js.map +1 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts +118 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts.map +1 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js +964 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js.map +1 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts +70 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts.map +1 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js +600 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js.map +1 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts +182 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts.map +1 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.js +1481 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.js.map +1 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts +102 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts.map +1 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js +240 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js.map +1 -0
- package/dist/VideoStudio/video-studio-agent-context.d.ts +495 -0
- package/dist/VideoStudio/video-studio-agent-context.d.ts.map +1 -0
- package/dist/VideoStudio/video-studio-agent-context.js +992 -0
- package/dist/VideoStudio/video-studio-agent-context.js.map +1 -0
- package/dist/ai-dashboards.module.d.ts +46 -41
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +33 -7
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/module.d.ts +13 -12
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +7 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +8 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +10 -2
- package/dist/public-api.js.map +1 -1
- package/dist/shared/action-scheduled-job.d.ts.map +1 -1
- package/dist/shared/action-scheduled-job.js +2 -0
- package/dist/shared/action-scheduled-job.js.map +1 -1
- package/dist/video-studio-dashboards.module.d.ts +40 -0
- package/dist/video-studio-dashboards.module.d.ts.map +1 -0
- package/dist/video-studio-dashboards.module.js +159 -0
- package/dist/video-studio-dashboards.module.js.map +1 -0
- package/package.json +78 -71
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts +0 -195
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts.map +0 -1
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js +0 -2910
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chief-of-staff-agent-context.js","sourceRoot":"","sources":["../../src/ChiefOfStaff/chief-of-staff-agent-context.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Pure, unit-testable helpers for the \"My Chief of Staff\" Executive Cockpit's\n * agent context + client tools.\n *\n * 🚨 SAFETY BOUNDARY 🚨\n * The Chief of Staff Cockpit exposes ONLY navigation / tab-switch / filter / search /\n * refresh / detail-view tools to the co-agent. DELIBERATELY NOT exposed as client tools\n * (mutations stay human-driven in the UI):\n * - Approving or rejecting `MJ: AI Agent Requests`\n * - Modifying or saving `MJ: AI Agent User Policies` governance toggles / thresholds\n * - Triggering \"Wake Now\" or pausing/resuming `MJ: User Routines`\n *\n * Published context exposes only aggregate counts, active tab/filter state, governance\n * mode summaries, and bounded display names (capped at 25) — never raw request payloads,\n * custom instructions overrides, or private message content.\n */\n\nimport type {\n MJAIAgentUserPolicyEntity,\n MJUserRoutineEntity,\n MJAIAgentRequestEntity,\n} from '@memberjunction/core-entities';\nimport { CompositeKey, type EntityInfo, type RunViewParams } from '@memberjunction/core';\nimport { EscapeSQLString, GroupByUUID, UUIDsEqual } from '@memberjunction/global';\nimport {\n AGENT_CONTEXT_NAME_LIST_CAP,\n BoundNameList,\n ValidateEnumParam,\n ValidateStringParam,\n type AgentToolResult,\n} from '../shared/agent-tool-validation';\n\n/**\n * The cockpit serves one agent, identified by its metadata name. The id is resolved at runtime\n * through `AIEngineBase.GetAgentByName`, never hardcoded.\n */\nexport const CHIEF_OF_STAFF_AGENT_NAME = 'Chief of Staff';\n\nexport type ChiefOfStaffTab = 'overview' | 'priorities' | 'approvals-wakes' | 'governance';\nexport const VALID_CHIEF_OF_STAFF_TABS: readonly ChiefOfStaffTab[] = [\n 'overview',\n 'priorities',\n 'approvals-wakes',\n 'governance',\n] as const;\n\nexport type TaskHealthStatus = 'OnTrack' | 'AtRisk' | 'OffTrack' | 'Completed' | 'Paused';\nexport type HealthFilter = 'all' | TaskHealthStatus;\nexport const VALID_HEALTH_FILTERS: readonly HealthFilter[] = [\n 'all',\n 'OnTrack',\n 'AtRisk',\n 'OffTrack',\n 'Completed',\n 'Paused',\n] as const;\n\nexport type PolicyStatusValue = MJAIAgentUserPolicyEntity['Status'];\nexport type PolicyCoordinationModeValue = MJAIAgentUserPolicyEntity['CoordinationMode'];\nexport type PolicyDataAccessModeValue = MJAIAgentUserPolicyEntity['DefaultDataAccessMode'];\nexport type PolicyEmailChannelModeValue = MJAIAgentUserPolicyEntity['EmailChannelMode'];\nexport type PolicyCalendarChannelModeValue = MJAIAgentUserPolicyEntity['CalendarChannelMode'];\nexport type PolicyPhoneChannelModeValue = MJAIAgentUserPolicyEntity['PhoneChannelMode'];\nexport type PolicyMessagingChannelModeValue = MJAIAgentUserPolicyEntity['MessagingChannelMode'];\nexport type RoutineStatusValue = MJUserRoutineEntity['Status'];\nexport type RequestStatusValue = MJAIAgentRequestEntity['Status'];\n\n/**\n * Projection shape for rows returned from `MJ_BizApps_Tasks: Tasks` (`[__mj_BizAppsTasks].[vwTasks]`).\n */\nexport interface BizAppsTaskRecordLike {\n ID: string;\n ParentID: string | null;\n Name: string;\n Description: string | null;\n Status: string;\n Priority: string | null;\n IsPriority: boolean | number | null;\n HealthStatus: TaskHealthStatus | null;\n ConfidenceScore: number | null;\n PercentComplete: number | null;\n CheckInCadence: string | null;\n PlanningPeriod: string | null;\n BaselineValue: number | null;\n TargetValue: number | null;\n CurrentValue: number | null;\n UnitOfMeasure: string | null;\n MetricDirection: string | null;\n DueAt: Date | string | null;\n LastCheckInAt: Date | string | null;\n NextCheckInDueAt: Date | string | null;\n TypeID?: string | null;\n Type?: string | null;\n TaskType?: string | null;\n}\n\n/**\n * Grouped priority objective card with its child milestones/tasks and computed progress.\n */\nexport interface PriorityObjectiveCardViewModel {\n Task: BizAppsTaskRecordLike;\n Subtasks: BizAppsTaskRecordLike[];\n CompletedSubtaskCount: number;\n EffectivePercentComplete: number;\n EffectiveHealth: TaskHealthStatus;\n MetricProgressLabel: string | null;\n IsOverdue: boolean;\n}\n\nexport interface RoutineSummaryItem {\n ID: string;\n Name: string;\n Status: RoutineStatusValue;\n ScheduleMode: MJUserRoutineEntity['ScheduleMode'];\n CronExpression: string | null;\n NextRunAt: Date | string | null;\n LastRunAt: Date | string | null;\n LastRunStatus: MJUserRoutineEntity['LastRunStatus'];\n}\n\nexport interface RequestSummaryItem {\n ID: string;\n Request: string;\n Status: RequestStatusValue;\n Priority: number;\n RequestedAt: Date | string;\n ExpiresAt: Date | string | null;\n RequestType?: MJAIAgentRequestEntity['RequestType'];\n RequestTypeID?: MJAIAgentRequestEntity['RequestTypeID'];\n}\n\nexport interface PolicyGovernanceSummary {\n HasPolicyRecord: boolean;\n DisplayName: string;\n Status: PolicyStatusValue;\n OnboardingStatus: MJAIAgentUserPolicyEntity['OnboardingStatus'];\n CoordinationMode: PolicyCoordinationModeValue;\n DefaultDataAccessMode: PolicyDataAccessModeValue;\n EmailChannelMode: PolicyEmailChannelModeValue;\n CalendarChannelMode: PolicyCalendarChannelModeValue;\n PhoneChannelMode: PolicyPhoneChannelModeValue;\n MessagingChannelMode: PolicyMessagingChannelModeValue;\n AllowInterAgentCoordination: boolean;\n RequireApprovalForExternalComms: boolean;\n RequireApprovalForFinancials: boolean;\n RequireApprovalForDestructiveActions: boolean;\n AutoApproveAmountThreshold: number | null;\n}\n\nexport interface ChiefOfStaffMetrics {\n TotalTaskCount: number;\n PriorityObjectiveCount: number;\n SubtaskCount: number;\n OnTrackCount: number;\n AtRiskCount: number;\n OffTrackCount: number;\n CompletedPriorityCount: number;\n AverageConfidenceScore: number | null;\n AveragePriorityProgress: number;\n PendingApprovalCount: number;\n HighPriorityPendingCount: number;\n ActiveWakeRoutineCount: number;\n NextScheduledWakeAt: Date | null;\n PriorityCards: PriorityObjectiveCardViewModel[];\n}\n\nexport interface ChiefOfStaffAgentContextInput {\n ActiveTab: ChiefOfStaffTab;\n SearchText: string;\n HealthFilter: HealthFilter;\n Metrics: ChiefOfStaffMetrics;\n Governance: PolicyGovernanceSummary;\n Routines: readonly RoutineSummaryItem[];\n PendingRequests: readonly RequestSummaryItem[];\n}\n\nexport type AgentContextScalar = string | number | boolean | null;\nexport type AgentContextRecord = Record<\n string,\n AgentContextScalar | string[] | Record<string, AgentContextScalar>\n>;\n\n/**\n * Returns `true` when an `MJ: AI Agent Requests` row represents an actionable approval or\n * review request for the Executive Cockpit's Pending Approvals queue, and `false` when it\n * is a conversational `Information` turn created by `BaseAgent` when ending a chat turn.\n */\nexport function IsApprovalRequest(req: {\n RequestType?: MJAIAgentRequestEntity['RequestType'] | undefined;\n RequestTypeID?: MJAIAgentRequestEntity['RequestTypeID'] | undefined;\n}): boolean {\n // The RequestType virtual field carries the type name; classify on it alone.\n const typeName = req.RequestType?.trim().toLowerCase() ?? '';\n return typeName !== 'information';\n}\n\nexport function ParseOptionalDate(val: Date | string | null | undefined): Date | null {\n if (!val) {\n return null;\n }\n if (val instanceof Date) {\n return isNaN(val.getTime()) ? null : val;\n }\n const parsed = new Date(val);\n return isNaN(parsed.getTime()) ? null : parsed;\n}\n\n/**\n * Builds the primary key of a BizApps task from the entity's own primary key column(s) and the\n * in-memory row. Tasks is an OpenApp entity, so neither the column name nor the column count is\n * assumed; the same key feeds `OpenEntityRecord` and the `PrimaryKey` parameter of `Update Record`.\n */\nexport function BuildTaskRecordKey(entityInfo: EntityInfo, task: BizAppsTaskRecordLike): CompositeKey {\n return CompositeKey.FromEntityRecord(entityInfo, { ...task });\n}\n\nexport function IsTaskPriorityObjective(task: BizAppsTaskRecordLike): boolean {\n if (task.IsPriority === true || task.IsPriority === 1) {\n return true;\n }\n const typeLabel = (task.Type ?? task.TaskType ?? '').toLowerCase();\n if (\n typeLabel.includes('priority') ||\n typeLabel.includes('objective') ||\n typeLabel.includes('okr')\n ) {\n return true;\n }\n return task.ParentID == null && (task.HealthStatus != null || task.PlanningPeriod != null);\n}\n\nexport function NormalizeTaskHealth(task: BizAppsTaskRecordLike): TaskHealthStatus {\n if (task.Status === 'Completed' || task.Status === 'Done' || task.HealthStatus === 'Completed') {\n return 'Completed';\n }\n if (task.HealthStatus === 'AtRisk' || task.HealthStatus === 'OffTrack' || task.HealthStatus === 'Paused') {\n return task.HealthStatus;\n }\n return 'OnTrack';\n}\n\n/**\n * Percent progress from `BaselineValue` toward `TargetValue`, clamped to 0-100.\n * Honors `MetricDirection` implicitly: a Down target (target < baseline) measures reduction.\n * Returns null when there is no target or the target equals the baseline (no measurable span).\n */\nexport function ComputeTaskMetricPercent(task: BizAppsTaskRecordLike): number | null {\n if (task.TargetValue == null) {\n return null;\n }\n const baseline = task.BaselineValue ?? 0;\n const span = task.TargetValue - baseline;\n if (span === 0) {\n return null;\n }\n const current = task.CurrentValue ?? baseline;\n const raw = ((current - baseline) / span) * 100;\n return Math.max(0, Math.min(100, Math.round(raw)));\n}\n\n/** ExtraFilters for the cockpit's three core-entity queries. Every clause is bound to the current user: the cockpit never shows another user's Chief of Staff data. */\nexport interface CockpitScopeFilters {\n Policy: string;\n Routines: string;\n Requests: string;\n}\n\nexport function BuildCockpitScopeFilters(currentUserId: string, chiefOfStaffAgentId: string): CockpitScopeFilters {\n const user = EscapeSQLString(currentUserId);\n const agent = EscapeSQLString(chiefOfStaffAgentId);\n return {\n Policy: `AgentID = '${agent}' AND UserID = '${user}'`,\n Routines: `UserID = '${user}' AND (RoutineType = 'AgentWake' OR TargetID = '${agent}')`,\n Requests: `AgentID = '${agent}' AND RequestForUserID = '${user}' AND (RequestType IS NULL OR RequestType <> 'Information')`,\n };\n}\n\n/** OpenApp entity holding the person linked to the signed-in MJ user (`LinkedUserID`). */\nexport const BIZAPPS_PEOPLE_ENTITY_NAME = 'MJ_BizApps_Common: People';\n/** OpenApp entity linking tasks to the people assigned to them. */\nexport const BIZAPPS_TASK_ASSIGNMENTS_ENTITY_NAME = 'MJ_BizApps_Tasks: Task Assignments';\n\n/** CSS modifier for a task priority badge, keyed by the Tasks `Priority` value list (Critical/High/Medium/Low). */\nexport function GetTaskPriorityClass(priority: string | null): string {\n switch ((priority ?? '').toLowerCase()) {\n case 'critical':\n return 'priority-critical';\n case 'high':\n return 'priority-high';\n case 'low':\n return 'priority-low';\n default:\n return 'priority-normal';\n }\n}\n\n/** Minimal RunView surface the task-scope resolver needs; `RunView` from @memberjunction/core satisfies it. */\nexport interface TaskScopeQueryRunner {\n RunView<T>(params: RunViewParams): Promise<{ Success: boolean; Results: T[]; ErrorMessage?: string }>;\n}\n\nexport type PersonTaskScope =\n | { HasLinkedPerson: false }\n | { HasLinkedPerson: true; PersonID: string; Filter: string };\n\n/**\n * Resolve the BizApps person linked to `currentUserId` and the filter that limits the Tasks query to work\n * that person created or is assigned to. Throws when either lookup fails so the caller can show the error.\n */\nexport async function ResolvePersonTaskScope(\n runner: TaskScopeQueryRunner,\n currentUserId: string,\n): Promise<PersonTaskScope> {\n const people = await runner.RunView<{ ID: string }>({\n EntityName: BIZAPPS_PEOPLE_ENTITY_NAME,\n ExtraFilter: `LinkedUserID = '${EscapeSQLString(currentUserId)}'`,\n Fields: ['ID'],\n MaxRows: 1,\n ResultType: 'simple',\n });\n if (!people.Success) {\n throw new Error(people.ErrorMessage ?? 'Failed to resolve the linked person.');\n }\n const personID = people.Results[0]?.ID;\n if (!personID) {\n return { HasLinkedPerson: false };\n }\n const assignments = await runner.RunView<{ TaskID: string }>({\n EntityName: BIZAPPS_TASK_ASSIGNMENTS_ENTITY_NAME,\n ExtraFilter: `PersonID = '${EscapeSQLString(personID)}'`,\n Fields: ['TaskID'],\n ResultType: 'simple',\n });\n if (!assignments.Success) {\n throw new Error(assignments.ErrorMessage ?? 'Failed to load task assignments.');\n }\n const assignedTaskIDs = assignments.Results.map((a) => a.TaskID).filter((id) => !!id);\n return { HasLinkedPerson: true, PersonID: personID, Filter: BuildPersonScopedTaskFilter(personID, assignedTaskIDs) };\n}\n\n/**\n * ExtraFilter for `MJ_BizApps_Tasks: Tasks` limiting rows to work the given person created or is assigned to.\n * `assignedTaskIDs` come from `MJ_BizApps_Tasks: Task Assignments` for the same person.\n */\nexport function BuildPersonScopedTaskFilter(personID: string, assignedTaskIDs: readonly string[]): string {\n const createdClause = `CreatedByPersonID = '${EscapeSQLString(personID)}'`;\n if (assignedTaskIDs.length === 0) {\n return createdClause;\n }\n const idList = assignedTaskIDs.map((id) => `'${EscapeSQLString(id)}'`).join(', ');\n return `${createdClause} OR ID IN (${idList})`;\n}\n\nexport function FormatTaskMetricProgress(task: BizAppsTaskRecordLike): string | null {\n if (task.TargetValue == null && task.CurrentValue == null) {\n return null;\n }\n const unit = task.UnitOfMeasure ? ` ${task.UnitOfMeasure}` : '';\n const current = task.CurrentValue ?? task.BaselineValue ?? 0;\n if (task.TargetValue != null) {\n return `${current}${unit} / ${task.TargetValue}${unit}`;\n }\n return `${current}${unit}`;\n}\n\nexport function CalculateChiefOfStaffMetrics(\n tasks: readonly BizAppsTaskRecordLike[],\n routines: readonly RoutineSummaryItem[],\n requests: readonly RequestSummaryItem[],\n now: Date = new Date(),\n): ChiefOfStaffMetrics {\n const subtasksByParent = GroupByUUID(\n tasks.filter((t) => !!t.ParentID),\n (t) => t.ParentID,\n );\n const priorityTasks: BizAppsTaskRecordLike[] = [];\n\n for (const task of tasks) {\n const hasChildren = subtasksByParent.Has(task.ID);\n if (!task.ParentID && (IsTaskPriorityObjective(task) || hasChildren)) {\n priorityTasks.push(task);\n }\n }\n\n // Only qualifying objectives are shown; an empty list renders the tab's empty state rather than unrelated root tasks.\n const rootsToDisplay = priorityTasks;\n\n let onTrackCount = 0;\n let atRiskCount = 0;\n let offTrackCount = 0;\n let completedPriorityCount = 0;\n let confidenceSum = 0;\n let confidenceCount = 0;\n let progressSum = 0;\n\n const priorityCards: PriorityObjectiveCardViewModel[] = rootsToDisplay.map((root) => {\n const children = subtasksByParent.Get(root.ID) ?? [];\n const completedChildren = children.filter(\n (c) => c.Status === 'Completed' || c.Status === 'Done' || (c.PercentComplete ?? 0) >= 100,\n ).length;\n\n const metricPercent = ComputeTaskMetricPercent(root);\n const rawPercent =\n metricPercent !== null\n ? metricPercent\n : typeof root.PercentComplete === 'number' && root.PercentComplete > 0\n ? root.PercentComplete\n : children.length > 0\n ? Math.round((completedChildren / children.length) * 100)\n : root.Status === 'Completed' || root.Status === 'Done'\n ? 100\n : 0;\n const effectivePercent = Math.max(0, Math.min(100, rawPercent));\n const effectiveHealth = NormalizeTaskHealth(root);\n\n if (effectiveHealth === 'OnTrack') onTrackCount++;\n else if (effectiveHealth === 'AtRisk') atRiskCount++;\n else if (effectiveHealth === 'OffTrack') offTrackCount++;\n else if (effectiveHealth === 'Completed') completedPriorityCount++;\n\n if (typeof root.ConfidenceScore === 'number' && Number.isFinite(root.ConfidenceScore)) {\n confidenceSum += root.ConfidenceScore;\n confidenceCount++;\n }\n progressSum += effectivePercent;\n\n const dueDate = ParseOptionalDate(root.DueAt);\n const isOverdue =\n dueDate !== null &&\n dueDate.getTime() < now.getTime() &&\n effectiveHealth !== 'Completed';\n\n return {\n Task: root,\n Subtasks: children,\n CompletedSubtaskCount: completedChildren,\n EffectivePercentComplete: effectivePercent,\n EffectiveHealth: effectiveHealth,\n MetricProgressLabel: FormatTaskMetricProgress(root),\n IsOverdue: isOverdue,\n };\n });\n\n const pendingRequests = requests.filter(\n (r) => r.Status === 'Requested' && IsApprovalRequest(r),\n );\n const highPriorityPending = pendingRequests.filter((r) => r.Priority >= 51);\n\n const activeWakeRoutines = routines.filter((r) => r.Status === 'Active');\n let nextScheduledWakeAt: Date | null = null;\n for (const routine of activeWakeRoutines) {\n const nextRun = ParseOptionalDate(routine.NextRunAt);\n if (nextRun && (!nextScheduledWakeAt || nextRun.getTime() < nextScheduledWakeAt.getTime())) {\n nextScheduledWakeAt = nextRun;\n }\n }\n\n const totalSubtasks = tasks.filter((t) => !!t.ParentID).length;\n\n return {\n TotalTaskCount: tasks.length,\n PriorityObjectiveCount: priorityCards.length,\n SubtaskCount: totalSubtasks,\n OnTrackCount: onTrackCount,\n AtRiskCount: atRiskCount,\n OffTrackCount: offTrackCount,\n CompletedPriorityCount: completedPriorityCount,\n AverageConfidenceScore:\n confidenceCount > 0 ? Math.round((confidenceSum / confidenceCount) * 10) / 10 : null,\n AveragePriorityProgress:\n priorityCards.length > 0 ? Math.round(progressSum / priorityCards.length) : 0,\n PendingApprovalCount: pendingRequests.length,\n HighPriorityPendingCount: highPriorityPending.length,\n ActiveWakeRoutineCount: activeWakeRoutines.length,\n NextScheduledWakeAt: nextScheduledWakeAt,\n PriorityCards: priorityCards,\n };\n}\n\nexport function BuildChiefOfStaffAgentContext(\n input: ChiefOfStaffAgentContextInput,\n): AgentContextRecord {\n const priorityNames = input.Metrics.PriorityCards.map((c) => c.Task.Name).filter((n) => !!n);\n const boundedPriorityNames = BoundNameList(priorityNames, AGENT_CONTEXT_NAME_LIST_CAP);\n\n const routineNames = input.Routines.map((r) => `${r.Name} (${r.Status})`).filter((n) => !!n);\n const boundedRoutineNames = BoundNameList(routineNames, AGENT_CONTEXT_NAME_LIST_CAP);\n\n const context: AgentContextRecord = {\n Surface: 'ChiefOfStaffDashboard',\n ActiveTab: input.ActiveTab,\n SearchText: input.SearchText,\n HealthFilter: input.HealthFilter,\n PriorityObjectiveCount: input.Metrics.PriorityObjectiveCount,\n SubtaskCount: input.Metrics.SubtaskCount,\n OnTrackCount: input.Metrics.OnTrackCount,\n AtRiskCount: input.Metrics.AtRiskCount,\n OffTrackCount: input.Metrics.OffTrackCount,\n CompletedPriorityCount: input.Metrics.CompletedPriorityCount,\n AveragePriorityProgressPercent: input.Metrics.AveragePriorityProgress,\n PendingApprovalCount: input.Metrics.PendingApprovalCount,\n HighPriorityPendingCount: input.Metrics.HighPriorityPendingCount,\n ActiveWakeRoutineCount: input.Metrics.ActiveWakeRoutineCount,\n NextScheduledWakeAt: input.Metrics.NextScheduledWakeAt\n ? input.Metrics.NextScheduledWakeAt.toISOString()\n : null,\n GovernanceSummary: {\n DisplayName: input.Governance.DisplayName,\n Status: input.Governance.Status,\n OnboardingStatus: input.Governance.OnboardingStatus,\n CoordinationMode: input.Governance.CoordinationMode,\n DefaultDataAccessMode: input.Governance.DefaultDataAccessMode,\n EmailChannelMode: input.Governance.EmailChannelMode,\n CalendarChannelMode: input.Governance.CalendarChannelMode,\n PhoneChannelMode: input.Governance.PhoneChannelMode,\n MessagingChannelMode: input.Governance.MessagingChannelMode,\n AllowInterAgentCoordination: input.Governance.AllowInterAgentCoordination,\n RequireApprovalForExternalComms: input.Governance.RequireApprovalForExternalComms,\n RequireApprovalForFinancials: input.Governance.RequireApprovalForFinancials,\n RequireApprovalForDestructiveActions:\n input.Governance.RequireApprovalForDestructiveActions,\n AutoApproveAmountThreshold: input.Governance.AutoApproveAmountThreshold,\n },\n VisiblePriorityObjectiveNames: boundedPriorityNames,\n VisibleWakeRoutineNames: boundedRoutineNames,\n };\n\n if (priorityNames.length > boundedPriorityNames.length) {\n context['VisiblePriorityObjectiveNamesTruncated'] = true;\n context['VisiblePriorityObjectiveNamesTotal'] = priorityNames.length;\n }\n\n return context;\n}\n\nexport function ValidateChiefOfStaffTabParam(\n raw: string | number | boolean | null | undefined,\n): { ok: true; value: ChiefOfStaffTab } | { ok: false; result: AgentToolResult } {\n return ValidateEnumParam(raw, VALID_CHIEF_OF_STAFF_TABS, 'tab');\n}\n\nexport function ValidateHealthFilterParam(\n raw: string | number | boolean | null | undefined,\n): { ok: true; value: HealthFilter } | { ok: false; result: AgentToolResult } {\n return ValidateEnumParam(raw, VALID_HEALTH_FILTERS, 'health');\n}\n\nexport function ValidateSearchQueryParam(\n raw: string | number | boolean | null | undefined,\n): { ok: true; value: string } | { ok: false; result: AgentToolResult } {\n return ValidateStringParam(raw, 'query');\n}\n\nexport function ResolvePriorityObjectiveByIDOrName(\n cards: readonly PriorityObjectiveCardViewModel[],\n rawRef: string | number | boolean | null | undefined,\n): { ok: true; value: PriorityObjectiveCardViewModel } | { ok: false; error: string } {\n if (typeof rawRef !== 'string' || rawRef.trim().length === 0) {\n return {\n ok: false,\n error: `Provide a priority objective ID or name. ${availableObjectiveNames(cards)}`,\n };\n }\n const ref = rawRef.trim();\n const byId = cards.find((c) => UUIDsEqual(c.Task.ID, ref));\n if (byId) {\n return { ok: true, value: byId };\n }\n const byName = cards.find((c) => c.Task.Name.trim().toLowerCase() === ref.toLowerCase());\n if (byName) {\n return { ok: true, value: byName };\n }\n const partial = cards.filter((c) => c.Task.Name.toLowerCase().includes(ref.toLowerCase()));\n if (partial.length === 1) {\n return { ok: true, value: partial[0] };\n }\n if (partial.length > 1) {\n const names = partial\n .slice(0, AGENT_CONTEXT_NAME_LIST_CAP)\n .map((c) => c.Task.Name)\n .join(', ');\n return {\n ok: false,\n error: `'${ref}' matches multiple priority objectives: ${names}. Be more specific.`,\n };\n }\n return {\n ok: false,\n error: `No priority objective matches '${ref}'. ${availableObjectiveNames(cards)}`,\n };\n}\n\nfunction availableObjectiveNames(cards: readonly PriorityObjectiveCardViewModel[]): string {\n if (cards.length === 0) {\n return 'There are no priority objectives loaded.';\n }\n const names = cards.slice(0, AGENT_CONTEXT_NAME_LIST_CAP).map((c) => c.Task.Name);\n const suffix = cards.length > AGENT_CONTEXT_NAME_LIST_CAP ? ', …' : '';\n return `Available priority objectives: ${names.join(', ')}${suffix}`;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"chief-of-staff-agent-context.js","sourceRoot":"","sources":["../../src/ChiefOfStaff/chief-of-staff-agent-context.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Pure, unit-testable helpers for the Chief of Staff application's pages (Overview,\n * Approvals & Wakes, Governance): their agent context, client tools and policy drafts.\n *\n * Core only: everything here reads core entities (`MJ: AI Agent User Policies`,\n * `MJ: User Routines`, `MJ: AI Agent Requests`). Business data such as priorities, tasks and\n * to-dos comes from Open Apps that add their own nav items to the Chief of Staff application\n * through `NavItem.*` application settings; core never names an Open App's entities.\n *\n * 🚨 SAFETY BOUNDARY 🚨\n * The Chief of Staff pages expose ONLY navigation / search /\n * refresh / detail-view tools to the co-agent. DELIBERATELY NOT exposed as client tools\n * (mutations stay human-driven in the UI):\n * - Approving or rejecting `MJ: AI Agent Requests`\n * - Modifying or saving `MJ: AI Agent User Policies` governance toggles / thresholds\n * - Triggering \"Wake Now\" or pausing/resuming `MJ: User Routines`\n *\n * Published context exposes only aggregate counts, the current page and search, governance\n * mode summaries, and bounded display names (capped at 25) — never raw request payloads,\n * custom instructions overrides, or private message content.\n */\n\nimport type {\n MJAIAgentUserPolicyEntity,\n MJUserRoutineEntity,\n MJAIAgentRequestEntity,\n} from '@memberjunction/core-entities';\nimport { EscapeSQLString } from '@memberjunction/global';\nimport {\n AGENT_CONTEXT_NAME_LIST_CAP,\n BoundNameList,\n ValidateEnumParam,\n ValidateStringParam,\n type AgentToolResult,\n} from '../shared/agent-tool-validation';\n\n/**\n * The pages serve one agent, identified by its metadata name. The id is resolved at runtime\n * through `AIEngineBase.GetAgentByName`, never hardcoded.\n */\nexport const CHIEF_OF_STAFF_AGENT_NAME = 'Chief of Staff';\n\n/** The name of the Chief of Staff application whose nav items open the pages. */\nexport const CHIEF_OF_STAFF_APP_NAME = 'Chief of Staff';\n\n/** The Chief of Staff application's own pages; each is one nav item. */\nexport type ChiefOfStaffPage = 'overview' | 'approvals-wakes' | 'governance';\nexport const CHIEF_OF_STAFF_PAGES: readonly ChiefOfStaffPage[] = [\n 'overview',\n 'approvals-wakes',\n 'governance',\n] as const;\n\n/** Each page's nav item label; must match the application's `DefaultNavItems`. */\nexport const CHIEF_OF_STAFF_PAGE_LABELS: Readonly<Record<ChiefOfStaffPage, string>> = {\n overview: 'Overview',\n 'approvals-wakes': 'Approvals & Wakes',\n governance: 'Governance',\n};\n\n/** Each page's Font Awesome icon; matches the application's `DefaultNavItems`. */\nexport const CHIEF_OF_STAFF_PAGE_ICONS: Readonly<Record<ChiefOfStaffPage, string>> = {\n overview: 'fa-solid fa-compass',\n 'approvals-wakes': 'fa-solid fa-bell-concierge',\n governance: 'fa-solid fa-shield-halved',\n};\n\nexport type PolicyStatusValue = MJAIAgentUserPolicyEntity['Status'];\nexport type PolicyCoordinationModeValue = MJAIAgentUserPolicyEntity['CoordinationMode'];\nexport type PolicyDataAccessModeValue = MJAIAgentUserPolicyEntity['DefaultDataAccessMode'];\nexport type PolicyEmailChannelModeValue = MJAIAgentUserPolicyEntity['EmailChannelMode'];\nexport type PolicyCalendarChannelModeValue = MJAIAgentUserPolicyEntity['CalendarChannelMode'];\nexport type PolicyPhoneChannelModeValue = MJAIAgentUserPolicyEntity['PhoneChannelMode'];\nexport type PolicyMessagingChannelModeValue = MJAIAgentUserPolicyEntity['MessagingChannelMode'];\nexport type RoutineStatusValue = MJUserRoutineEntity['Status'];\nexport type RequestStatusValue = MJAIAgentRequestEntity['Status'];\n\nexport interface RoutineSummaryItem {\n ID: string;\n Name: string;\n Status: RoutineStatusValue;\n ScheduleMode: MJUserRoutineEntity['ScheduleMode'];\n CronExpression: string | null;\n NextRunAt: Date | string | null;\n LastRunAt: Date | string | null;\n LastRunStatus: MJUserRoutineEntity['LastRunStatus'];\n}\n\n/** The status label the pages show for a routine: the entity's Status, or 'Fired' for a spent one-shot. */\nexport type RoutineDisplayStatusValue = RoutineSummaryItem['Status'] | 'Fired';\n\n/**\n * True for a one-shot routine that has run and has no next time: the dispatcher disables a one-shot\n * once it fires, so \"Disabled\" here means \"done\", not \"broken\". A one-shot still waiting for its\n * time is not spent, whatever it has run before (a manual run keeps the schedule); a one-shot that\n * was disabled before ever running is just disabled; a recurring routine is never spent.\n */\nexport function IsSpentOneShotRoutine(routine: Pick<RoutineSummaryItem, 'ScheduleMode' | 'NextRunAt' | 'LastRunAt' | 'Status'>): boolean {\n return routine.ScheduleMode === 'OneShot'\n && routine.Status === 'Disabled'\n && routine.NextRunAt == null\n && routine.LastRunAt != null;\n}\n\n/** 'Fired' for a spent one-shot, otherwise the routine's own Status. */\nexport function RoutineDisplayStatus(routine: Pick<RoutineSummaryItem, 'ScheduleMode' | 'NextRunAt' | 'LastRunAt' | 'Status'>): RoutineDisplayStatusValue {\n return IsSpentOneShotRoutine(routine) ? 'Fired' : routine.Status;\n}\n\n/**\n * Display order for the wake schedule: routines with a next wake first, soonest first; then the\n * unscheduled (paused, or disabled before ever running); spent one-shots last, most recent first.\n * Returns a new array.\n */\nexport function SortRoutinesForDisplay<T extends Pick<RoutineSummaryItem, 'ScheduleMode' | 'NextRunAt' | 'LastRunAt' | 'Status'>>(routines: readonly T[]): T[] {\n const rank = (r: T): number => (IsSpentOneShotRoutine(r) ? 2 : r.NextRunAt != null ? 0 : 1);\n const time = (value: Date | string | null): number => {\n const parsed = ParseOptionalDate(value);\n return parsed ? parsed.getTime() : Number.POSITIVE_INFINITY;\n };\n return [...routines].sort((a, b) => {\n const ra = rank(a);\n const rb = rank(b);\n if (ra !== rb) return ra - rb;\n if (ra === 0) return time(a.NextRunAt) - time(b.NextRunAt);\n if (ra === 2) return time(b.LastRunAt) - time(a.LastRunAt);\n return 0;\n });\n}\n\n/**\n * An outbound email waiting for approval, as the email action records it in the request's\n * `Comments` (JSON with Operation / From / To / CCRecipients / Subject / Body).\n */\nexport interface EmailApprovalDraft {\n Operation: 'Send' | 'Reply' | 'Forward';\n From: string | null;\n To: string;\n CC: string[];\n Subject: string;\n Body: string;\n}\n\n/**\n * Reads the email draft out of an approval request's Comments. Returns null when the comments are\n * empty, not JSON, or not an email (a call brief, say), so callers can show the draft only when\n * there is one. An older payload without `Operation` counts as a `Send` when To and Subject exist.\n */\nexport function ParseEmailApprovalPayload(comments: string | null | undefined): EmailApprovalDraft | null {\n const text = comments?.trim();\n if (!text || !text.startsWith('{')) {\n return null;\n }\n let raw: unknown;\n try {\n raw = JSON.parse(text);\n } catch {\n return null;\n }\n if (!raw || typeof raw !== 'object') {\n return null;\n }\n const record = raw as Record<string, unknown>;\n const to = stringField(record, 'To');\n const subject = stringField(record, 'Subject');\n const body = stringField(record, 'Body');\n if (to == null || subject == null || body == null) {\n return null;\n }\n const operation = stringField(record, 'Operation');\n const op: EmailApprovalDraft['Operation'] = operation === 'Reply' || operation === 'Forward' ? operation : 'Send';\n const cc = Array.isArray(record['CCRecipients'])\n ? (record['CCRecipients'] as unknown[]).filter((c): c is string => typeof c === 'string' && c.trim().length > 0)\n : [];\n return { Operation: op, From: stringField(record, 'From'), To: to, CC: cc, Subject: subject, Body: body };\n}\n\n/** The draft as plain text for a mail client: headers, a blank line, then the body. */\nexport function FormatEmailDraftForClipboard(draft: EmailApprovalDraft): string {\n const lines = [`To: ${draft.To}`];\n if (draft.CC.length > 0) {\n lines.push(`CC: ${draft.CC.join(', ')}`);\n }\n lines.push(`Subject: ${draft.Subject}`, '', draft.Body);\n return lines.join('\\n');\n}\n\nfunction stringField(record: Record<string, unknown>, key: string): string | null {\n const value = record[key];\n return typeof value === 'string' ? value : null;\n}\n\nexport interface RequestSummaryItem {\n ID: string;\n Request: string;\n Status: RequestStatusValue;\n Priority: number;\n RequestedAt: Date | string;\n ExpiresAt: Date | string | null;\n RequestType?: MJAIAgentRequestEntity['RequestType'];\n RequestTypeID?: MJAIAgentRequestEntity['RequestTypeID'];\n}\n\nexport interface PolicyGovernanceSummary {\n HasPolicyRecord: boolean;\n DisplayName: string;\n Status: PolicyStatusValue;\n OnboardingStatus: MJAIAgentUserPolicyEntity['OnboardingStatus'];\n CoordinationMode: PolicyCoordinationModeValue;\n DefaultDataAccessMode: PolicyDataAccessModeValue;\n EmailChannelMode: PolicyEmailChannelModeValue;\n CalendarChannelMode: PolicyCalendarChannelModeValue;\n PhoneChannelMode: PolicyPhoneChannelModeValue;\n MessagingChannelMode: PolicyMessagingChannelModeValue;\n AllowInterAgentCoordination: boolean;\n RequireApprovalForExternalComms: boolean;\n RequireApprovalForFinancials: boolean;\n RequireApprovalForDestructiveActions: boolean;\n AutoApproveAmountThreshold: number | null;\n}\n\n/** The Governance page's editable copy of the user's policy. */\nexport interface GovernancePolicyDraft {\n DisplayNameOverride: string;\n Status: PolicyStatusValue;\n OnboardingStatus: MJAIAgentUserPolicyEntity['OnboardingStatus'];\n CoordinationMode: PolicyCoordinationModeValue;\n DefaultDataAccessMode: PolicyDataAccessModeValue;\n EmailChannelMode: PolicyEmailChannelModeValue;\n CalendarChannelMode: PolicyCalendarChannelModeValue;\n PhoneChannelMode: PolicyPhoneChannelModeValue;\n MessagingChannelMode: PolicyMessagingChannelModeValue;\n AllowInterAgentCoordination: boolean;\n RequireApprovalForExternalComms: boolean;\n RequireApprovalForFinancials: boolean;\n RequireApprovalForDestructiveActions: boolean;\n AutoApproveAmountThreshold: number | null;\n InstructionsOverride: string;\n}\n\n/** The draft shown before the user has a policy record. */\nexport function CreateDefaultPolicyDraft(): GovernancePolicyDraft {\n return {\n DisplayNameOverride: 'Chief of Staff',\n Status: 'Active',\n OnboardingStatus: 'Completed',\n CoordinationMode: 'Coordinator',\n DefaultDataAccessMode: 'UserCeiling',\n EmailChannelMode: 'DraftOnly',\n CalendarChannelMode: 'ProposeWithApproval',\n PhoneChannelMode: 'Disabled',\n MessagingChannelMode: 'Enabled',\n AllowInterAgentCoordination: true,\n RequireApprovalForExternalComms: true,\n RequireApprovalForFinancials: true,\n RequireApprovalForDestructiveActions: true,\n AutoApproveAmountThreshold: 0,\n InstructionsOverride: '',\n };\n}\n\n/** A draft copied from the user's policy record, or the default draft when there is none. */\nexport function BuildPolicyDraftFromEntity(entity: MJAIAgentUserPolicyEntity | null): GovernancePolicyDraft {\n if (!entity) {\n return CreateDefaultPolicyDraft();\n }\n return {\n DisplayNameOverride: entity.DisplayNameOverride ?? '',\n Status: entity.Status,\n OnboardingStatus: entity.OnboardingStatus,\n CoordinationMode: entity.CoordinationMode,\n DefaultDataAccessMode: entity.DefaultDataAccessMode,\n EmailChannelMode: entity.EmailChannelMode,\n CalendarChannelMode: entity.CalendarChannelMode,\n PhoneChannelMode: entity.PhoneChannelMode,\n MessagingChannelMode: entity.MessagingChannelMode,\n AllowInterAgentCoordination: entity.AllowInterAgentCoordination,\n RequireApprovalForExternalComms: entity.RequireApprovalForExternalComms,\n RequireApprovalForFinancials: entity.RequireApprovalForFinancials,\n RequireApprovalForDestructiveActions: entity.RequireApprovalForDestructiveActions,\n AutoApproveAmountThreshold: entity.AutoApproveAmountThreshold,\n InstructionsOverride: entity.InstructionsOverride ?? '',\n };\n}\n\n/** The display name: the draft's override, or 'My Chief of Staff'. */\nexport function ChiefOfStaffDisplayName(draft: Pick<GovernancePolicyDraft, 'DisplayNameOverride'>): string {\n const override = draft.DisplayNameOverride.trim();\n return override.length > 0 ? override : 'My Chief of Staff';\n}\n\n/** The governance summary published in the agent context. */\nexport function BuildGovernanceSummary(draft: GovernancePolicyDraft, hasPolicyRecord: boolean): PolicyGovernanceSummary {\n return {\n HasPolicyRecord: hasPolicyRecord,\n DisplayName: ChiefOfStaffDisplayName(draft),\n Status: draft.Status,\n OnboardingStatus: draft.OnboardingStatus,\n CoordinationMode: draft.CoordinationMode,\n DefaultDataAccessMode: draft.DefaultDataAccessMode,\n EmailChannelMode: draft.EmailChannelMode,\n CalendarChannelMode: draft.CalendarChannelMode,\n PhoneChannelMode: draft.PhoneChannelMode,\n MessagingChannelMode: draft.MessagingChannelMode,\n AllowInterAgentCoordination: draft.AllowInterAgentCoordination,\n RequireApprovalForExternalComms: draft.RequireApprovalForExternalComms,\n RequireApprovalForFinancials: draft.RequireApprovalForFinancials,\n RequireApprovalForDestructiveActions: draft.RequireApprovalForDestructiveActions,\n AutoApproveAmountThreshold: draft.AutoApproveAmountThreshold,\n };\n}\n\nexport interface ChiefOfStaffMetrics {\n PendingApprovalCount: number;\n HighPriorityPendingCount: number;\n ActiveWakeRoutineCount: number;\n NextScheduledWakeAt: Date | null;\n}\n\nexport interface ChiefOfStaffAgentContextInput {\n Page: ChiefOfStaffPage;\n SearchText: string;\n Metrics: ChiefOfStaffMetrics;\n Governance: PolicyGovernanceSummary;\n Routines: readonly RoutineSummaryItem[];\n PendingRequests: readonly RequestSummaryItem[];\n}\n\nexport type AgentContextScalar = string | number | boolean | null;\nexport type AgentContextRecord = Record<\n string,\n AgentContextScalar | string[] | Record<string, AgentContextScalar>\n>;\n\n/**\n * Returns `true` when an `MJ: AI Agent Requests` row represents an actionable approval or\n * review request for the Chief of Staff's Pending Approvals queue, and `false` when it\n * is a conversational `Information` turn created by `BaseAgent` when ending a chat turn.\n */\nexport function IsApprovalRequest(req: {\n RequestType?: MJAIAgentRequestEntity['RequestType'] | undefined;\n RequestTypeID?: MJAIAgentRequestEntity['RequestTypeID'] | undefined;\n}): boolean {\n // The RequestType virtual field carries the type name; classify on it alone.\n const typeName = req.RequestType?.trim().toLowerCase() ?? '';\n return typeName !== 'information';\n}\n\nexport function ParseOptionalDate(val: Date | string | null | undefined): Date | null {\n if (!val) {\n return null;\n }\n if (val instanceof Date) {\n return isNaN(val.getTime()) ? null : val;\n }\n const parsed = new Date(val);\n return isNaN(parsed.getTime()) ? null : parsed;\n}\n\n/** ExtraFilters for the pages' three core-entity queries. Every clause is bound to the current user: the pages never show another user's Chief of Staff data. */\nexport interface ChiefOfStaffScopeFilters {\n Policy: string;\n Routines: string;\n Requests: string;\n}\n\nexport function BuildChiefOfStaffScopeFilters(currentUserId: string, chiefOfStaffAgentId: string): ChiefOfStaffScopeFilters {\n const user = EscapeSQLString(currentUserId);\n const agent = EscapeSQLString(chiefOfStaffAgentId);\n return {\n Policy: `AgentID = '${agent}' AND UserID = '${user}'`,\n Routines: `UserID = '${user}' AND (RoutineType = 'AgentWake' OR TargetID = '${agent}')`,\n Requests: `AgentID = '${agent}' AND RequestForUserID = '${user}' AND (RequestType IS NULL OR RequestType <> 'Information')`,\n };\n}\n\n\n/** The core counts: pending approvals and active wakes. */\nexport function CalculateChiefOfStaffMetrics(\n routines: readonly RoutineSummaryItem[],\n requests: readonly RequestSummaryItem[],\n): ChiefOfStaffMetrics {\n const pendingRequests = requests.filter(\n (r) => r.Status === 'Requested' && IsApprovalRequest(r),\n );\n const highPriorityPending = pendingRequests.filter((r) => r.Priority >= 51);\n\n const activeWakeRoutines = routines.filter((r) => r.Status === 'Active');\n let nextScheduledWakeAt: Date | null = null;\n for (const routine of activeWakeRoutines) {\n const nextRun = ParseOptionalDate(routine.NextRunAt);\n if (nextRun && (!nextScheduledWakeAt || nextRun.getTime() < nextScheduledWakeAt.getTime())) {\n nextScheduledWakeAt = nextRun;\n }\n }\n\n return {\n PendingApprovalCount: pendingRequests.length,\n HighPriorityPendingCount: highPriorityPending.length,\n ActiveWakeRoutineCount: activeWakeRoutines.length,\n NextScheduledWakeAt: nextScheduledWakeAt,\n };\n}\n\nexport function BuildChiefOfStaffAgentContext(\n input: ChiefOfStaffAgentContextInput,\n): AgentContextRecord {\n const routineNames = input.Routines.map((r) => `${r.Name} (${r.Status})`).filter((n) => !!n);\n const boundedRoutineNames = BoundNameList(routineNames, AGENT_CONTEXT_NAME_LIST_CAP);\n\n return {\n Surface: 'ChiefOfStaff',\n Page: input.Page,\n SearchText: input.SearchText,\n PendingApprovalCount: input.Metrics.PendingApprovalCount,\n HighPriorityPendingCount: input.Metrics.HighPriorityPendingCount,\n ActiveWakeRoutineCount: input.Metrics.ActiveWakeRoutineCount,\n NextScheduledWakeAt: input.Metrics.NextScheduledWakeAt\n ? input.Metrics.NextScheduledWakeAt.toISOString()\n : null,\n GovernanceSummary: {\n DisplayName: input.Governance.DisplayName,\n Status: input.Governance.Status,\n OnboardingStatus: input.Governance.OnboardingStatus,\n CoordinationMode: input.Governance.CoordinationMode,\n DefaultDataAccessMode: input.Governance.DefaultDataAccessMode,\n EmailChannelMode: input.Governance.EmailChannelMode,\n CalendarChannelMode: input.Governance.CalendarChannelMode,\n PhoneChannelMode: input.Governance.PhoneChannelMode,\n MessagingChannelMode: input.Governance.MessagingChannelMode,\n AllowInterAgentCoordination: input.Governance.AllowInterAgentCoordination,\n RequireApprovalForExternalComms: input.Governance.RequireApprovalForExternalComms,\n RequireApprovalForFinancials: input.Governance.RequireApprovalForFinancials,\n RequireApprovalForDestructiveActions:\n input.Governance.RequireApprovalForDestructiveActions,\n AutoApproveAmountThreshold: input.Governance.AutoApproveAmountThreshold,\n },\n VisibleWakeRoutineNames: boundedRoutineNames,\n };\n}\n\n/** Validates a page parameter against the Chief of Staff application's own pages. */\nexport function ValidateChiefOfStaffPageParam(\n raw: string | number | boolean | null | undefined,\n): { ok: true; value: ChiefOfStaffPage } | { ok: false; result: AgentToolResult } {\n return ValidateEnumParam(raw, CHIEF_OF_STAFF_PAGES, 'page');\n}\n\nexport function ValidateSearchQueryParam(\n raw: string | number | boolean | null | undefined,\n): { ok: true; value: string } | { ok: false; result: AgentToolResult } {\n return ValidateStringParam(raw, 'query');\n}\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { MJAIAgentRequestEntity, MJUserRoutineEntity } from '@memberjunction/core-entities';
|
|
2
|
+
import { ChiefOfStaffPage } from './chief-of-staff-agent-context';
|
|
3
|
+
import { BaseChiefOfStaffPage, ChiefOfStaffClientTool } from './chief-of-staff-page-base';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* The Chief of Staff application's Approvals & Wakes page: every pending approval with its
|
|
7
|
+
* recent decisions, and every wake routine with Wake Now, pause and its briefings. The search
|
|
8
|
+
* box filters both lists and round-trips through the `search` query param.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ChiefOfStaffApprovalsComponent extends BaseChiefOfStaffPage {
|
|
11
|
+
protected readonly Page: ChiefOfStaffPage;
|
|
12
|
+
private initialParamsApplied;
|
|
13
|
+
/** When true, the wake list also shows spent one-shots (reminders that have fired). Off by default. */
|
|
14
|
+
ShowFiredRoutines: boolean;
|
|
15
|
+
get RecentResolvedRequests(): MJAIAgentRequestEntity[];
|
|
16
|
+
/** Spent one-shots: reminders and one-time wakes that have already fired. */
|
|
17
|
+
get FiredRoutineCount(): number;
|
|
18
|
+
get FilteredRoutines(): MJUserRoutineEntity[];
|
|
19
|
+
ToggleShowFiredRoutines(): void;
|
|
20
|
+
OnSearchChange(value: string): void;
|
|
21
|
+
protected OnPageInit(): void;
|
|
22
|
+
protected OnQueryParamsChanged(params: Record<string, string>, _source: 'popstate' | 'deeplink'): void;
|
|
23
|
+
private syncQueryParams;
|
|
24
|
+
protected PageAgentTools(): ChiefOfStaffClientTool[];
|
|
25
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ChiefOfStaffApprovalsComponent, never>;
|
|
26
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChiefOfStaffApprovalsComponent, "mj-chief-of-staff-approvals", never, {}, {}, never, never, false, never>;
|
|
27
|
+
}
|
|
28
|
+
export declare function LoadChiefOfStaffApprovals(): void;
|
|
29
|
+
//# sourceMappingURL=chief-of-staff-approvals.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chief-of-staff-approvals.component.d.ts","sourceRoot":"","sources":["../../src/ChiefOfStaff/chief-of-staff-approvals.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAG5F,OAAO,EAAE,gBAAgB,EAAsE,MAAM,gCAAgC,CAAC;AACtI,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;;AAE1F;;;;GAIG;AACH,qBAQa,8BAA+B,SAAQ,oBAAoB;IACpE,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAqB;IAC9D,OAAO,CAAC,oBAAoB,CAAS;IAErC,uGAAuG;IAChG,iBAAiB,UAAS;IAEjC,IAAW,sBAAsB,IAAI,sBAAsB,EAAE,CAE5D;IAED,6EAA6E;IAC7E,IAAW,iBAAiB,IAAI,MAAM,CAErC;IAED,IAAW,gBAAgB,IAAI,mBAAmB,EAAE,CAWnD;IAEM,uBAAuB,IAAI,IAAI;IAK/B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;cAOvB,UAAU,IAAI,IAAI;cAKlB,oBAAoB,CACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,OAAO,EAAE,UAAU,GAAG,UAAU,GACjC,IAAI;IAMP,OAAO,CAAC,eAAe;cASJ,cAAc,IAAI,sBAAsB,EAAE;yCAhEpD,8BAA8B;2CAA9B,8BAA8B;CAkG1C;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
|