@elevasis/core 0.15.0 → 0.16.0

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.
Files changed (88) hide show
  1. package/dist/index.d.ts +1718 -19
  2. package/dist/index.js +369 -25
  3. package/dist/organization-model/index.d.ts +1718 -19
  4. package/dist/organization-model/index.js +369 -25
  5. package/dist/test-utils/index.d.ts +1108 -371
  6. package/dist/test-utils/index.js +357 -17
  7. package/package.json +5 -1
  8. package/src/__tests__/publish.test.ts +14 -13
  9. package/src/__tests__/template-core-compatibility.test.ts +4 -4
  10. package/src/_gen/__tests__/__snapshots__/contracts.md.snap +1109 -882
  11. package/src/auth/multi-tenancy/index.ts +3 -0
  12. package/src/auth/multi-tenancy/theme-presets.ts +45 -0
  13. package/src/auth/multi-tenancy/types.ts +57 -83
  14. package/src/auth/multi-tenancy/users/api-schemas.ts +165 -194
  15. package/src/business/acquisition/activity-events.ts +13 -4
  16. package/src/business/acquisition/api-schemas.test.ts +315 -4
  17. package/src/business/acquisition/api-schemas.ts +122 -8
  18. package/src/business/acquisition/build-templates.ts +44 -0
  19. package/src/business/acquisition/crm-next-action.test.ts +262 -0
  20. package/src/business/acquisition/crm-next-action.ts +220 -0
  21. package/src/business/acquisition/crm-priority.test.ts +216 -0
  22. package/src/business/acquisition/crm-priority.ts +349 -0
  23. package/src/business/acquisition/crm-state-actions.test.ts +151 -160
  24. package/src/business/acquisition/deal-ownership.test.ts +351 -0
  25. package/src/business/acquisition/deal-ownership.ts +120 -0
  26. package/src/business/acquisition/derive-actions.test.ts +101 -37
  27. package/src/business/acquisition/derive-actions.ts +102 -87
  28. package/src/business/acquisition/index.ts +10 -0
  29. package/src/business/acquisition/types.ts +400 -366
  30. package/src/business/crm/api-schemas.ts +40 -0
  31. package/src/business/crm/index.ts +1 -0
  32. package/src/business/deals/api-schemas.ts +79 -0
  33. package/src/business/deals/index.ts +1 -0
  34. package/src/business/projects/types.ts +124 -88
  35. package/src/execution/core/runner-types.ts +61 -80
  36. package/src/execution/engine/index.ts +4 -3
  37. package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-tools.ts +105 -104
  38. package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-tools.ts +1474 -1473
  39. package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-tools.ts +103 -102
  40. package/src/execution/engine/tools/integration/server/adapters/signature-api/signature-api-tools.ts +182 -179
  41. package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-tools.ts +310 -309
  42. package/src/execution/engine/tools/integration/tool.ts +255 -253
  43. package/src/execution/engine/tools/lead-service-types.ts +939 -924
  44. package/src/execution/engine/tools/messages.ts +43 -0
  45. package/src/execution/engine/tools/platform/acquisition/list-tools.ts +6 -5
  46. package/src/execution/engine/tools/platform/acquisition/types.ts +5 -2
  47. package/src/execution/engine/tools/platform/email/types.ts +97 -96
  48. package/src/execution/engine/tools/registry.ts +4 -3
  49. package/src/execution/engine/tools/tool-maps.ts +3 -1
  50. package/src/execution/engine/tools/types.ts +234 -233
  51. package/src/execution/engine/workflow/types.ts +195 -193
  52. package/src/execution/external/api-schemas.ts +40 -0
  53. package/src/execution/external/index.ts +1 -0
  54. package/src/knowledge/README.md +32 -0
  55. package/src/knowledge/__tests__/queries.test.ts +504 -0
  56. package/src/knowledge/format.ts +99 -0
  57. package/src/knowledge/index.ts +5 -0
  58. package/src/knowledge/queries.ts +256 -0
  59. package/src/organization-model/__tests__/defaults.test.ts +172 -172
  60. package/src/organization-model/__tests__/foundation.test.ts +7 -7
  61. package/src/organization-model/__tests__/icons.test.ts +27 -0
  62. package/src/organization-model/__tests__/knowledge.test.ts +214 -0
  63. package/src/organization-model/contracts.ts +17 -15
  64. package/src/organization-model/defaults.ts +74 -19
  65. package/src/organization-model/domains/knowledge.ts +53 -0
  66. package/src/organization-model/domains/navigation.ts +416 -399
  67. package/src/organization-model/domains/prospecting.ts +204 -1
  68. package/src/organization-model/domains/sales.test.ts +29 -0
  69. package/src/organization-model/domains/sales.ts +102 -0
  70. package/src/organization-model/domains/shared.ts +6 -5
  71. package/src/organization-model/foundation.ts +10 -6
  72. package/src/organization-model/graph/build.ts +209 -182
  73. package/src/organization-model/graph/schema.ts +37 -34
  74. package/src/organization-model/graph/types.ts +47 -31
  75. package/src/organization-model/icons.ts +81 -0
  76. package/src/organization-model/index.ts +8 -3
  77. package/src/organization-model/organization-model.mdx +1 -1
  78. package/src/organization-model/published.ts +103 -86
  79. package/src/organization-model/schema.ts +90 -85
  80. package/src/organization-model/types.ts +42 -35
  81. package/src/platform/constants/versions.ts +1 -1
  82. package/src/platform/index.ts +23 -27
  83. package/src/platform/registry/index.ts +0 -4
  84. package/src/platform/registry/resource-registry.ts +0 -77
  85. package/src/platform/registry/serialized-types.ts +148 -219
  86. package/src/platform/registry/stats-types.ts +60 -60
  87. package/src/reference/_generated/contracts.md +829 -595
  88. package/src/supabase/database.types.ts +2978 -2958
@@ -25,7 +25,6 @@ import type {
25
25
  SerializedOrganizationData,
26
26
  SerializedAgentDefinition,
27
27
  SerializedWorkflowDefinition,
28
- SerializedExecutionInterface,
29
28
  CommandViewData
30
29
  } from './serialized-types'
31
30
  import { validateDeploymentSpec, validateRelationships } from './validation'
@@ -838,80 +837,4 @@ export class ResourceRegistry {
838
837
  }
839
838
  return cache.commandView
840
839
  }
841
-
842
- /**
843
- * List resources that have UI interfaces configured
844
- * Used by Execution Runner Catalog UI
845
- *
846
- * @param organizationName - Organization name
847
- * @param environment - Optional environment filter ('dev' or 'prod')
848
- * @returns Array of resources with interfaces
849
- */
850
- listExecutable(
851
- organizationName: string,
852
- environment?: 'dev' | 'prod'
853
- ): Array<{
854
- resourceId: string
855
- resourceName: string
856
- resourceType: 'workflow' | 'agent'
857
- description?: string
858
- status: 'dev' | 'prod'
859
- version: string
860
- interface: SerializedExecutionInterface
861
- }> {
862
- const cache = this.serializedCache.get(organizationName)
863
- if (!cache) {
864
- return []
865
- }
866
-
867
- const results: Array<{
868
- resourceId: string
869
- resourceName: string
870
- resourceType: 'workflow' | 'agent'
871
- description?: string
872
- status: 'dev' | 'prod'
873
- version: string
874
- interface: SerializedExecutionInterface
875
- }> = []
876
-
877
- // Check workflows with interfaces
878
- cache.definitions.workflows.forEach((serializedWorkflow, resourceId) => {
879
- // Skip if no interface defined
880
- if (!serializedWorkflow.interface) return
881
-
882
- // Apply environment filter if specified
883
- if (environment && serializedWorkflow.config.status !== environment) return
884
-
885
- results.push({
886
- resourceId,
887
- resourceName: serializedWorkflow.config.name,
888
- resourceType: 'workflow',
889
- description: serializedWorkflow.config.description,
890
- status: serializedWorkflow.config.status as 'dev' | 'prod',
891
- version: serializedWorkflow.config.version,
892
- interface: serializedWorkflow.interface
893
- })
894
- })
895
-
896
- // Check agents with interfaces
897
- cache.definitions.agents.forEach((serializedAgent, resourceId) => {
898
- // Skip if no interface defined
899
- if (!serializedAgent.interface) return
900
-
901
- // Apply environment filter if specified
902
- if (environment && serializedAgent.config.status !== environment) return
903
-
904
- results.push({
905
- resourceId,
906
- resourceName: serializedAgent.config.name,
907
- resourceType: 'agent',
908
- description: serializedAgent.config.description,
909
- status: serializedAgent.config.status as 'dev' | 'prod',
910
- version: serializedAgent.config.version,
911
- interface: serializedAgent.interface
912
- })
913
- })
914
-
915
- return results
916
- }
917
840
  }
@@ -1,12 +1,11 @@
1
- /**
2
- * Serialized Registry Types
3
- *
4
- * Pre-computed JSON-safe types for API responses and Command View.
5
- * Serialization happens once at API startup, enabling instant response times.
6
- */
7
-
8
- import type { FormFieldType } from '../../forms/types'
9
- import { CommandViewData } from './command-view'
1
+ /**
2
+ * Serialized Registry Types
3
+ *
4
+ * Pre-computed JSON-safe types for API responses and Command View.
5
+ * Serialization happens once at API startup, enabling instant response times.
6
+ */
7
+
8
+ import { CommandViewData } from './command-view'
10
9
  import type {
11
10
  ResourceDefinition,
12
11
  TriggerDefinition,
@@ -16,221 +15,151 @@ import type {
16
15
  HumanCheckpointDefinition
17
16
  } from './types'
18
17
  import type { ResourceCategory, ResourceLink } from './resource-link'
19
-
20
- // ============================================================================
21
- // Serialized Interface Types (for Execution Runner UI)
22
- // ============================================================================
23
-
24
- /**
25
- * Serialized form field for API responses
26
- */
27
- export interface SerializedFormField {
28
- name: string
29
- label: string
30
- type: FormFieldType
31
- defaultValue?: unknown
32
- required?: boolean
33
- placeholder?: string
34
- description?: string
35
- options?: Array<{ label: string; value: string | number }>
36
- min?: number
37
- max?: number
38
- }
39
-
40
- /**
41
- * Serialized form schema for API responses
42
- */
43
- export interface SerializedFormSchema {
44
- title?: string
45
- description?: string
46
- fields: SerializedFormField[]
47
- layout?: 'vertical' | 'horizontal' | 'grid'
48
- }
49
-
50
- /**
51
- * Serialized execution form schema for API responses
52
- */
53
- export interface SerializedExecutionFormSchema extends SerializedFormSchema {
54
- fieldMappings?: Record<string, string>
55
- submitButton?: {
56
- label?: string
57
- loadingLabel?: string
58
- confirmMessage?: string
59
- }
60
- }
61
-
62
- /**
63
- * Serialized schedule config for API responses
64
- */
65
- export interface SerializedScheduleConfig {
66
- enabled: boolean
67
- defaultSchedule?: string
68
- allowedPatterns?: string[]
69
- }
70
-
71
- /**
72
- * Serialized webhook config for API responses
73
- */
74
- export interface SerializedWebhookConfig {
75
- enabled: boolean
76
- payloadSchema?: unknown
77
- }
78
-
79
- /**
80
- * Serialized execution interface for API responses
81
- */
82
- export interface SerializedExecutionInterface {
83
- form: SerializedExecutionFormSchema
84
- schedule?: SerializedScheduleConfig
85
- webhook?: SerializedWebhookConfig
86
- }
87
-
88
- // ============================================================================
89
- // Serialized Definition Types
90
- // ============================================================================
91
-
92
- /**
93
- * Serialized agent definition (JSON-safe)
94
- * Result of serializeDefinition(AgentDefinition)
95
- */
96
- export interface SerializedAgentDefinition {
97
- config: {
98
- resourceId: string
99
- name: string
100
- description: string
101
- version: string
102
- type: 'agent'
18
+
19
+ // ============================================================================
20
+ // Serialized Definition Types
21
+ // ============================================================================
22
+
23
+ /**
24
+ * Serialized agent definition (JSON-safe)
25
+ * Result of serializeDefinition(AgentDefinition)
26
+ */
27
+ export interface SerializedAgentDefinition {
28
+ config: {
29
+ resourceId: string
30
+ name: string
31
+ description: string
32
+ version: string
33
+ type: 'agent'
103
34
  status: 'dev' | 'prod'
104
35
  links?: ResourceLink[]
105
36
  category?: ResourceCategory
106
37
  /** Whether this resource is archived and should be excluded from registration and deployment */
107
- archived?: boolean
108
- systemPrompt: string
109
- constraints?: {
110
- maxIterations?: number
111
- timeout?: number
112
- maxSessionMemoryKeys?: number
113
- maxMemoryTokens?: number
114
- }
115
- sessionCapable?: boolean
116
- memoryPreferences?: string
117
- }
118
- modelConfig: {
119
- provider: string
120
- model: string
121
- apiKey: string // Redacted: "sk-proj..."
122
- temperature: number
123
- maxOutputTokens: number
124
- topP?: number
125
- modelOptions?: Record<string, unknown>
126
- }
127
- contract: {
128
- inputSchema: object // JSON Schema
129
- outputSchema?: object // JSON Schema
130
- }
131
- tools: Array<{
132
- name: string
133
- description: string
134
- inputSchema?: object // JSON Schema
135
- outputSchema?: object // JSON Schema
136
- }>
137
- knowledgeMap?: {
138
- nodeCount: number
139
- nodes: Array<{
140
- id: string
141
- description: string
142
- loaded: boolean
143
- hasPrompt: boolean
144
- }>
145
- }
146
- metricsConfig?: object
147
- interface?: SerializedExecutionInterface
148
- }
149
-
150
- /**
151
- * Serialized workflow definition (JSON-safe)
152
- * Result of serializeDefinition(WorkflowDefinition)
153
- */
154
- export interface SerializedWorkflowDefinition {
155
- config: {
156
- resourceId: string
157
- name: string
158
- description: string
159
- version: string
160
- type: 'workflow'
38
+ archived?: boolean
39
+ systemPrompt: string
40
+ constraints?: {
41
+ maxIterations?: number
42
+ timeout?: number
43
+ maxSessionMemoryKeys?: number
44
+ maxMemoryTokens?: number
45
+ }
46
+ sessionCapable?: boolean
47
+ memoryPreferences?: string
48
+ }
49
+ modelConfig: {
50
+ provider: string
51
+ model: string
52
+ apiKey: string // Redacted: "sk-proj..."
53
+ temperature: number
54
+ maxOutputTokens: number
55
+ topP?: number
56
+ modelOptions?: Record<string, unknown>
57
+ }
58
+ contract: {
59
+ inputSchema: object // JSON Schema
60
+ outputSchema?: object // JSON Schema
61
+ }
62
+ tools: Array<{
63
+ name: string
64
+ description: string
65
+ inputSchema?: object // JSON Schema
66
+ outputSchema?: object // JSON Schema
67
+ }>
68
+ knowledgeMap?: {
69
+ nodeCount: number
70
+ nodes: Array<{
71
+ id: string
72
+ description: string
73
+ loaded: boolean
74
+ hasPrompt: boolean
75
+ }>
76
+ }
77
+ metricsConfig?: object
78
+ }
79
+
80
+ /**
81
+ * Serialized workflow definition (JSON-safe)
82
+ * Result of serializeDefinition(WorkflowDefinition)
83
+ */
84
+ export interface SerializedWorkflowDefinition {
85
+ config: {
86
+ resourceId: string
87
+ name: string
88
+ description: string
89
+ version: string
90
+ type: 'workflow'
161
91
  status: 'dev' | 'prod'
162
92
  links?: ResourceLink[]
163
93
  category?: ResourceCategory
164
94
  /** Whether this resource is archived and should be excluded from registration and deployment */
165
- archived?: boolean
166
- }
167
- entryPoint: string
168
- steps: Array<{
169
- id: string
170
- name: string
171
- description: string
172
- inputSchema?: object // JSON Schema
173
- outputSchema?: object // JSON Schema
174
- next: {
175
- type: 'linear' | 'conditional'
176
- target?: string
177
- routes?: Array<{ target: string }>
178
- default?: string
179
- } | null
180
- }>
181
- contract: {
182
- inputSchema: object // JSON Schema
183
- outputSchema?: object // JSON Schema
184
- }
185
- metricsConfig?: object
186
- interface?: SerializedExecutionInterface
187
- }
188
-
189
- // ============================================================================
190
- // Command View Types (re-exported from command-view.ts)
191
- // ============================================================================
192
-
193
- export type {
194
- CommandViewAgent,
195
- CommandViewWorkflow,
196
- CommandViewNode,
197
- CommandViewEdge,
198
- CommandViewData,
199
- RelationshipType
200
- } from './command-view'
201
-
202
- // ============================================================================
203
- // Serialized Organization Data
204
- // ============================================================================
205
-
206
- /**
207
- * Complete pre-serialized organization data
208
- * Computed once at startup, served instantly
209
- */
210
- export interface SerializedOrganizationData {
211
- /** Deployment version (semver) */
212
- version: string
213
-
214
- /** Basic resource lists (for /resources endpoint) */
215
- resources: {
216
- workflows: ResourceDefinition[]
217
- agents: ResourceDefinition[]
218
- total: number
219
- }
220
-
221
- /** Full serialized definitions (for /resources/:id/definition endpoint) */
222
- definitions: {
223
- workflows: Map<string, SerializedWorkflowDefinition>
224
- agents: Map<string, SerializedAgentDefinition>
225
- }
226
-
227
- /** Command View data (for /command-view endpoint) */
228
- commandView: CommandViewData
229
-
230
- /** Pass-through manifest data (already JSON-safe) */
231
- triggers: TriggerDefinition[]
232
- integrations: IntegrationDefinition[]
233
- externalResources: ExternalResourceDefinition[]
234
- humanCheckpoints: HumanCheckpointDefinition[]
235
- relationships: ResourceRelationships | undefined
236
- }
95
+ archived?: boolean
96
+ }
97
+ entryPoint: string
98
+ steps: Array<{
99
+ id: string
100
+ name: string
101
+ description: string
102
+ inputSchema?: object // JSON Schema
103
+ outputSchema?: object // JSON Schema
104
+ next: {
105
+ type: 'linear' | 'conditional'
106
+ target?: string
107
+ routes?: Array<{ target: string }>
108
+ default?: string
109
+ } | null
110
+ }>
111
+ contract: {
112
+ inputSchema: object // JSON Schema
113
+ outputSchema?: object // JSON Schema
114
+ }
115
+ metricsConfig?: object
116
+ }
117
+
118
+ // ============================================================================
119
+ // Command View Types (re-exported from command-view.ts)
120
+ // ============================================================================
121
+
122
+ export type {
123
+ CommandViewAgent,
124
+ CommandViewWorkflow,
125
+ CommandViewNode,
126
+ CommandViewEdge,
127
+ CommandViewData,
128
+ RelationshipType
129
+ } from './command-view'
130
+
131
+ // ============================================================================
132
+ // Serialized Organization Data
133
+ // ============================================================================
134
+
135
+ /**
136
+ * Complete pre-serialized organization data
137
+ * Computed once at startup, served instantly
138
+ */
139
+ export interface SerializedOrganizationData {
140
+ /** Deployment version (semver) */
141
+ version: string
142
+
143
+ /** Basic resource lists (for /resources endpoint) */
144
+ resources: {
145
+ workflows: ResourceDefinition[]
146
+ agents: ResourceDefinition[]
147
+ total: number
148
+ }
149
+
150
+ /** Full serialized definitions (for /resources/:id/definition endpoint) */
151
+ definitions: {
152
+ workflows: Map<string, SerializedWorkflowDefinition>
153
+ agents: Map<string, SerializedAgentDefinition>
154
+ }
155
+
156
+ /** Command View data (for /command-view endpoint) */
157
+ commandView: CommandViewData
158
+
159
+ /** Pass-through manifest data (already JSON-safe) */
160
+ triggers: TriggerDefinition[]
161
+ integrations: IntegrationDefinition[]
162
+ externalResources: ExternalResourceDefinition[]
163
+ humanCheckpoints: HumanCheckpointDefinition[]
164
+ relationships: ResourceRelationships | undefined
165
+ }
@@ -1,47 +1,47 @@
1
- import type { ExecutionStatus } from '../../execution/core/sse-executions'
2
- import type { TimeRange } from '../../operations/observability/types'
3
-
4
- /**
5
- * @deprecated Use TimeRange from '@repo/core' directly. Kept as alias for backward compatibility.
6
- */
7
- export type StatsTimeRange = TimeRange
8
-
9
- /** Stats returned by /command-view/stats (counts only, no error details) */
10
- export interface ResourceStats {
11
- resourceId: string
12
- totalRuns: number
13
- successCount: number
14
- failureCount: number // Used for badge: "X failed"
15
- warningCount: number // Completed with warnings (counts toward success)
16
- lastRunAt: string | null
17
- // NO recentErrors or totalErrors - fetched on-demand via /resource-errors
18
- }
19
-
20
- /** Response from /command-view/resource-errors (on-demand) */
21
- export interface ResourceErrorsResponse {
22
- resourceId: string
23
- errors: ErrorSummary[]
24
- totalErrors: number // Total count for "showing 10 of X" display
25
- timeRange: StatsTimeRange
26
- }
27
-
28
- export interface ErrorSummary {
29
- executionId: string
30
- errorType: string
31
- errorMessage: string
32
- occurredAt: string
33
- }
34
-
35
- /** Single execution summary for Recent Executions list in command view */
36
- export interface CommandViewExecution {
37
- executionId: string
38
- status: ExecutionStatus
39
- startedAt: string
40
- completedAt: string | null
41
- errorMessage: string | null // Only present if failed
42
- }
43
-
44
- /** Response from /command-view/resource-executions (on-demand) */
1
+ import type { ExecutionStatus } from '../../execution/core/sse-executions'
2
+ import type { TimeRange } from '../../operations/observability/types'
3
+
4
+ /**
5
+ * @deprecated Use TimeRange from '@elevasis/core' directly. Kept as alias for backward compatibility.
6
+ */
7
+ export type StatsTimeRange = TimeRange
8
+
9
+ /** Stats returned by /command-view/stats (counts only, no error details) */
10
+ export interface ResourceStats {
11
+ resourceId: string
12
+ totalRuns: number
13
+ successCount: number
14
+ failureCount: number // Used for badge: "X failed"
15
+ warningCount: number // Completed with warnings (counts toward success)
16
+ lastRunAt: string | null
17
+ // NO recentErrors or totalErrors - fetched on-demand via /resource-errors
18
+ }
19
+
20
+ /** Response from /command-view/resource-errors (on-demand) */
21
+ export interface ResourceErrorsResponse {
22
+ resourceId: string
23
+ errors: ErrorSummary[]
24
+ totalErrors: number // Total count for "showing 10 of X" display
25
+ timeRange: StatsTimeRange
26
+ }
27
+
28
+ export interface ErrorSummary {
29
+ executionId: string
30
+ errorType: string
31
+ errorMessage: string
32
+ occurredAt: string
33
+ }
34
+
35
+ /** Single execution summary for Recent Executions list in command view */
36
+ export interface CommandViewExecution {
37
+ executionId: string
38
+ status: ExecutionStatus
39
+ startedAt: string
40
+ completedAt: string | null
41
+ errorMessage: string | null // Only present if failed
42
+ }
43
+
44
+ /** Response from /command-view/resource-executions (on-demand) */
45
45
  export interface ResourceExecutionsResponse {
46
46
  resourceId: string
47
47
  executions: CommandViewExecution[]
@@ -50,19 +50,19 @@ export interface ResourceExecutionsResponse {
50
50
  page: number
51
51
  limit: number
52
52
  }
53
-
54
- export interface HumanCheckpointStats {
55
- checkpointId: string
56
- pendingCount: number
57
- completedCount: number
58
- expiredCount: number
59
- lastDecisionAt: string | null
60
- }
61
-
62
- /** Response from /command-view/stats */
63
- export interface CommandViewStatsResponse {
64
- resources: Record<string, ResourceStats>
65
- humanCheckpoints: Record<string, HumanCheckpointStats>
66
- timeRange: StatsTimeRange
67
- generatedAt: string
68
- }
53
+
54
+ export interface HumanCheckpointStats {
55
+ checkpointId: string
56
+ pendingCount: number
57
+ completedCount: number
58
+ expiredCount: number
59
+ lastDecisionAt: string | null
60
+ }
61
+
62
+ /** Response from /command-view/stats */
63
+ export interface CommandViewStatsResponse {
64
+ resources: Record<string, ResourceStats>
65
+ humanCheckpoints: Record<string, HumanCheckpointStats>
66
+ timeRange: StatsTimeRange
67
+ generatedAt: string
68
+ }