@happyvertical/smrt-agents 0.57.32 → 0.57.33

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/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { a as getAgentClassName, c as instanceScopedSubscriber, i as AgentConfigCollection, l as parseTenantAgentConfigOwnerId, n as executeAsPrincipal, o as getAgentTypeAliases, r as AgentConfig, s as getAgentTypeName, t as PrincipalToolNotAllowedError, u as tenantAgentConfigOwnerId } from "./chunks/execute-as-principal-tnjcjKIp.js";
2
2
  import { AgentUIRegistry, createUIRegistry, isAgentCreateEntryAvailable, resolveAgentCreateEntries } from "./ui.js";
3
- import { DEFAULT_DATA_QUERY_RESULT_BYTES, DataQueryValidationError, LearningMemory, MAX_DATA_QUERY_FILTERS, MAX_DATA_QUERY_OFFSET, MAX_DATA_QUERY_REQUEST_BYTES, ObjectRegistry, SmrtCollection, SmrtObject, canonicalizeDataQuery, createDataQueryFingerprint, createDispatchBus, detectEngine, field, getClassConfigResolvers, getClassName, getConfigResolver, isLazyConfigSentinel, listConfigResolvers, normalizeDataQueryRequest, normalizeDataQueryResult, normalizeDataQuerySchema, registerConfigResolver, resetConfigResolvers, resolveDispatchTenantScope, resolveLazyConfig, smrt, toSnakeCase, unregisterConfigResolver } from "@happyvertical/smrt-core";
3
+ import { DEFAULT_DATA_QUERY_RESULT_BYTES, DataQueryValidationError, LearningMemory, MAX_DATA_QUERY_FILTERS, MAX_DATA_QUERY_OFFSET, MAX_DATA_QUERY_REQUEST_BYTES, ObjectRegistry, SmrtCollection, SmrtObject, canonicalizeDataQuery, createDataQueryFingerprint, createDispatchBus, detectEngine, field, getClassConfigResolvers, getClassName, getConfigResolver, isLazyConfigSentinel, listConfigResolvers, normalizeDataQueryFieldValues, normalizeDataQueryRequest, normalizeDataQueryResult, normalizeDataQuerySchema, registerConfigResolver, resetConfigResolvers, resolveDispatchTenantScope, resolveLazyConfig, smrt, toSnakeCase, unregisterConfigResolver } from "@happyvertical/smrt-core";
4
4
  import { createLogger } from "@happyvertical/logger";
5
5
  import { getDefaultAIKeyEnvName, sanitizeConfig } from "@happyvertical/smrt-config";
6
6
  import { TenantScoped, getCurrentTenant, getTenantScopedConfig, isSuperAdminBypass, isSystemContext, isTenancyEnabled, isTenantScopedClass, queryGlobal, queryWithGlobals, tenantId, withTenant } from "@happyvertical/smrt-tenancy";
@@ -12,7 +12,7 @@ import { createServerStepEvaluator, preflightPlaybook } from "@happyvertical/smr
12
12
  import { applyReportExport, applyReportRefresh, buildReportAdapterDescriptor, buildReportDrilldownQuery, createReportExportRequest, createReportExportSnapshot, previewReportExport, previewReportRefresh, queryReportMaterializedRows } from "@happyvertical/smrt-reports";
13
13
  import { getNextCronDate } from "@happyvertical/smrt-jobs";
14
14
  //#region src/__smrt-register__.ts
15
- ObjectRegistry.registerPackageManifest(JSON.parse(`{"version":"1.0.0","timestamp":0,"packageName":"@happyvertical/smrt-agents","packageVersion":"0.57.32","objects":{"@happyvertical/smrt-agents:Agent":{"name":"agent","className":"Agent","qualifiedName":"@happyvertical/smrt-agents:Agent","collection":"agents","description":"Base Agent class for building autonomous actors in the SMRT ecosystem","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/agent.ts","packageName":"@happyvertical/smrt-agents","fields":{"created_at":{"type":"datetime","required":false},"updated_at":{"type":"datetime","required":false},"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"status":{"type":"text","required":false,"default":"idle","enum":["idle","initializing","running","error","shutdown"]}},"methods":{"getInstanceKey":{"name":"getInstanceKey","async":false,"parameters":[],"returnType":"string | null","isStatic":false,"isPublic":true},"getConfigOwnerId":{"name":"getConfigOwnerId","async":false,"parameters":[{"name":"slotId","type":"string","optional":true}],"returnType":"string | null","isStatic":false,"isPublic":true},"getDispatchSubscriber":{"name":"getDispatchSubscriber","async":false,"parameters":[],"returnType":"string","isStatic":false,"isPublic":true},"getUISlots":{"name":"getUISlots","async":false,"parameters":[],"returnType":"AgentUISlots","isStatic":false,"isPublic":true},"loadConfigs":{"name":"loadConfigs","async":true,"parameters":[],"returnType":"Promise<Map<string, Record<string, unknown>>>","isStatic":false,"isPublic":true},"saveSlotConfig":{"name":"saveSlotConfig","async":true,"parameters":[{"name":"slotId","type":"string","optional":false},{"name":"data","type":"Record<string, unknown>","optional":false}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"getMergedConfig":{"name":"getMergedConfig","async":true,"parameters":[{"name":"slotId","type":"string","optional":false}],"returnType":"Promise<Record<string, unknown>>","isStatic":false,"isPublic":true},"exportConfig":{"name":"exportConfig","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["boolean"]}],"returnType":"Promise<Record<string, unknown>>","isStatic":false,"isPublic":true},"getDispatch":{"name":"getDispatch","async":true,"parameters":[],"returnType":"Promise<DispatchBus>","isStatic":false,"isPublic":true},"handleDispatch":{"name":"handleDispatch","async":true,"parameters":[{"name":"_payload","type":"unknown","optional":false},{"name":"_metadata","type":"DispatchMetadata","optional":false}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"processDispatches":{"name":"processDispatches","async":true,"parameters":[],"returnType":"Promise<number>","isStatic":false,"isPublic":true},"getLearningMemory":{"name":"getLearningMemory","async":false,"parameters":[],"returnType":"LearningMemory | null","isStatic":false,"isPublic":true},"initialize":{"name":"initialize","async":true,"parameters":[],"returnType":"Promise<this>","isStatic":false,"isPublic":true},"validate":{"name":"validate","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"shutdown":{"name":"shutdown","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"execute":{"name":"execute","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"interesting":{"name":"interesting","async":true,"parameters":[],"returnType":"Promise<InterestResult[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"cli":false,"api":false,"mcp":false,"tableStrategy":"sti","tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context","_meta_type"]},"extends":"SmrtObject","exportName":"Agent","collectionExportName":"AgentCollection","staticProperties":{"uiSlots":{},"adminRoutes":[],"createEntries":[],"signalSubscriptions":[]},"schema":{"tableName":"agents","ddl":"CREATE TABLE IF NOT EXISTS \\"agents\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"status\\" TEXT DEFAULT 'idle'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"status":{"type":"TEXT","notNull":false,"default":"idle"}},"indexes":[{"name":"agents_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"agents_meta_type_idx","columns":["_meta_type"]},{"name":"agents_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"dde8777b"},"importPath":"@happyvertical/smrt-agents"},"@happyvertical/smrt-agents:AgentConfig":{"name":"agentconfig","className":"AgentConfig","qualifiedName":"@happyvertical/smrt-agents:AgentConfig","collection":"agentconfigs","description":"AgentConfig stores agent configuration in the database","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/config.ts","packageName":"@happyvertical/smrt-agents","fields":{"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"agentId":{"type":"text","required":false,"_meta":{}},"agentClass":{"type":"text","required":false,"_meta":{}},"slotId":{"type":"text","required":false,"_meta":{}},"configData":{"type":"json","required":false,"_meta":{"sensitive":true},"sensitive":true},"schemaVersion":{"type":"integer","required":false,"_meta":{}}},"methods":{"forAgent":{"name":"forAgent","async":true,"parameters":[{"name":"agentId","type":"string","optional":false},{"name":"options","type":"SmrtClassOptions","optional":false}],"returnType":"Promise<Map<string, Record<string, unknown>>>","isStatic":true,"isPublic":true},"forAgents":{"name":"forAgents","async":true,"parameters":[{"name":"agentIds","type":"string[]","optional":false},{"name":"options","type":"SmrtClassOptions","optional":false}],"returnType":"Promise<Map<string, Map<string, Record<string, unknown>>>>","isStatic":true,"isPublic":true},"forSlot":{"name":"forSlot","async":true,"parameters":[{"name":"agentId","type":"string","optional":false},{"name":"slotId","type":"string","optional":false},{"name":"options","type":"SmrtClassOptions","optional":false}],"returnType":"Promise<Record<string, unknown> | undefined>","isStatic":true,"isPublic":true},"saveSlot":{"name":"saveSlot","async":true,"parameters":[{"name":"data","type":"object","optional":false,"memberTypes":["string","Record<string, unknown>"]},{"name":"options","type":"SmrtClassOptions","optional":false}],"returnType":"Promise<AgentConfig>","isStatic":true,"isPublic":true}},"decoratorConfig":{"tableName":"agent_configs","api":{"include":["list","get","create","update","delete"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"AgentConfig","collectionExportName":"AgentConfigCollection","schema":{"tableName":"agent_configs","ddl":"CREATE TABLE IF NOT EXISTS \\"agent_configs\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"agent_id\\" TEXT,\\n \\"agent_class\\" TEXT,\\n \\"slot_id\\" TEXT,\\n \\"config_data\\" JSON,\\n \\"schema_version\\" INTEGER\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"agent_id":{"type":"TEXT","notNull":false,"unique":false},"agent_class":{"type":"TEXT","notNull":false,"unique":false},"slot_id":{"type":"TEXT","notNull":false,"unique":false},"config_data":{"type":"JSON","notNull":false,"unique":false},"schema_version":{"type":"INTEGER","notNull":false,"unique":false}},"indexes":[{"name":"agent_configs_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"agent_configs_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"25c6ac4c"},"importPath":"@happyvertical/smrt-agents"},"@happyvertical/smrt-agents:AgentConfigCollection":{"name":"agentconfigcollection","className":"AgentConfigCollection","qualifiedName":"@happyvertical/smrt-agents:AgentConfigCollection","collection":"agentconfigs","description":"Collection for AgentConfig objects","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/config.ts","packageName":"@happyvertical/smrt-agents","fields":{},"methods":{"findByTenant":{"name":"findByTenant","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AgentConfig[]>","isStatic":false,"isPublic":true},"findGlobal":{"name":"findGlobal","async":true,"parameters":[],"returnType":"Promise<AgentConfig[]>","isStatic":false,"isPublic":true},"findWithGlobals":{"name":"findWithGlobals","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AgentConfig[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"agent_configs","api":{"include":["list","get","create","update","delete"]},"mcp":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"AgentConfig","exportName":"AgentConfigCollection","collectionExportName":"AgentConfigCollectionCollection","schema":{"tableName":"agent_configs","ddl":"CREATE TABLE IF NOT EXISTS \\"agent_configs\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"agent_id\\" TEXT,\\n \\"agent_class\\" TEXT,\\n \\"slot_id\\" TEXT,\\n \\"config_data\\" JSON,\\n \\"schema_version\\" INTEGER\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"agent_id":{"type":"TEXT","notNull":false,"unique":false},"agent_class":{"type":"TEXT","notNull":false,"unique":false},"slot_id":{"type":"TEXT","notNull":false,"unique":false},"config_data":{"type":"JSON","notNull":false,"unique":false},"schema_version":{"type":"INTEGER","notNull":false,"unique":false}},"indexes":[{"name":"agent_configs_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"agent_configs_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"25c6ac4c"},"importPath":"@happyvertical/smrt-agents"},"@happyvertical/smrt-agents:AgentSchedule":{"name":"agentschedule","className":"AgentSchedule","qualifiedName":"@happyvertical/smrt-agents:AgentSchedule","collection":"agentschedules","description":"AgentSchedule model for cron-based agent scheduling","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/schedule.ts","packageName":"@happyvertical/smrt-agents","fields":{"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"agentType":{"type":"text","required":false,"_meta":{}},"agentId":{"type":"text","required":false,"_meta":{"nullable":true}},"agentConfig":{"type":"json","required":false,"_meta":{"sqlType":"TEXT","sensitive":true},"sensitive":true},"cron":{"type":"text","required":false,"_meta":{}},"timezone":{"type":"text","required":false,"_meta":{}},"enabled":{"type":"boolean","required":false,"_meta":{}},"status":{"type":"text","required":false,"_meta":{},"enum":["active","paused","disabled","error"]},"lastRun":{"type":"datetime","required":false,"_meta":{"nullable":true}},"nextRun":{"type":"datetime","required":false,"_meta":{"nullable":true}},"lastStatus":{"type":"text","required":false,"_meta":{"nullable":true},"enum":["success","failed"]},"lastError":{"type":"text","required":false,"_meta":{"nullable":true}},"runCount":{"type":"integer","required":false,"_meta":{}},"successCount":{"type":"integer","required":false,"_meta":{}},"failureCount":{"type":"integer","required":false,"_meta":{}},"maxConcurrent":{"type":"integer","required":false,"_meta":{}},"runningCount":{"type":"integer","required":false,"_meta":{}},"timeout":{"type":"integer","required":false,"_meta":{}},"method":{"type":"text","required":false,"_meta":{}},"methodArgs":{"type":"json","required":false,"_meta":{"sqlType":"TEXT"}}},"methods":{"enable":{"name":"enable","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"disable":{"name":"disable","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"pause":{"name":"pause","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"resume":{"name":"resume","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"calculateNextRun":{"name":"calculateNextRun","async":false,"parameters":[],"returnType":"void","isStatic":false,"isPublic":true},"getDescription":{"name":"getDescription","async":false,"parameters":[],"returnType":"string","isStatic":false,"isPublic":true},"save":{"name":"save","async":true,"parameters":[{"name":"options","type":"SaveOptions","optional":true}],"returnType":"Promise<this>","isStatic":false,"isPublic":true},"beforeSave":{"name":"beforeSave","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_agent_schedules","api":{"include":["list","get","create","update","delete"]},"cli":{"include":["list","get","create","update","delete","enable","disable"],"skipApiCheck":true},"mcp":{"include":["list","get"]},"indexes":[{"name":"_smrt_agent_schedules_enabled_status_next_run_idx","columns":["enabled","status","nextRun"]}],"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"AgentSchedule","collectionExportName":"AgentScheduleCollection","schema":{"tableName":"_smrt_agent_schedules","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_agent_schedules\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"agent_type\\" TEXT,\\n \\"agent_id\\" TEXT,\\n \\"agent_config\\" TEXT,\\n \\"cron\\" TEXT,\\n \\"timezone\\" TEXT,\\n \\"enabled\\" BOOLEAN,\\n \\"status\\" TEXT,\\n \\"last_run\\" TIMESTAMP,\\n \\"next_run\\" TIMESTAMP,\\n \\"last_status\\" TEXT,\\n \\"last_error\\" TEXT,\\n \\"run_count\\" INTEGER,\\n \\"success_count\\" INTEGER,\\n \\"failure_count\\" INTEGER,\\n \\"max_concurrent\\" INTEGER,\\n \\"running_count\\" INTEGER,\\n \\"timeout\\" INTEGER,\\n \\"method\\" TEXT,\\n \\"method_args\\" TEXT\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"agent_type":{"type":"TEXT","notNull":false,"unique":false},"agent_id":{"type":"TEXT","notNull":false,"unique":false},"agent_config":{"type":"TEXT","notNull":false,"unique":false},"cron":{"type":"TEXT","notNull":false,"unique":false},"timezone":{"type":"TEXT","notNull":false,"unique":false},"enabled":{"type":"BOOLEAN","notNull":false,"unique":false},"status":{"type":"TEXT","notNull":false,"unique":false},"last_run":{"type":"TIMESTAMP","notNull":false,"unique":false},"next_run":{"type":"TIMESTAMP","notNull":false,"unique":false},"last_status":{"type":"TEXT","notNull":false,"unique":false},"last_error":{"type":"TEXT","notNull":false,"unique":false},"run_count":{"type":"INTEGER","notNull":false,"unique":false},"success_count":{"type":"INTEGER","notNull":false,"unique":false},"failure_count":{"type":"INTEGER","notNull":false,"unique":false},"max_concurrent":{"type":"INTEGER","notNull":false,"unique":false},"running_count":{"type":"INTEGER","notNull":false,"unique":false},"timeout":{"type":"INTEGER","notNull":false,"unique":false},"method":{"type":"TEXT","notNull":false,"unique":false},"method_args":{"type":"TEXT","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_agent_schedules_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_agent_schedules_enabled_status_next_run_idx","columns":["enabled","status","next_run"]},{"name":"_smrt_agent_schedules_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"c21a1f29"},"importPath":"@happyvertical/smrt-agents"},"@happyvertical/smrt-agents:AgentScheduleCollection":{"name":"agentschedulecollection","className":"AgentScheduleCollection","qualifiedName":"@happyvertical/smrt-agents:AgentScheduleCollection","collection":"agentschedules","description":"Collection for managing AgentSchedule objects","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/schedule.ts","packageName":"@happyvertical/smrt-agents","fields":{},"methods":{"findByTenant":{"name":"findByTenant","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AgentSchedule[]>","isStatic":false,"isPublic":true},"findGlobal":{"name":"findGlobal","async":true,"parameters":[],"returnType":"Promise<AgentSchedule[]>","isStatic":false,"isPublic":true},"findWithGlobals":{"name":"findWithGlobals","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AgentSchedule[]>","isStatic":false,"isPublic":true},"listByStatus":{"name":"listByStatus","async":true,"parameters":[{"name":"status","type":"ScheduleStatus | ScheduleStatus[]","optional":false,"unionBranches":[{"type":"ScheduleStatus"},{"type":"ScheduleStatus[]"}]},{"name":"options","type":"object","optional":true,"memberTypes":["number"]}],"returnType":"Promise<AgentSchedule[]>","isStatic":false,"isPublic":true},"listByAgentType":{"name":"listByAgentType","async":true,"parameters":[{"name":"agentType","type":"string","optional":false},{"name":"options","type":"object","optional":true,"memberTypes":["number","boolean"]}],"returnType":"Promise<AgentSchedule[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_agent_schedules","api":{"include":["list","get","create","update","delete"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get","create","update","delete"],"skipApiCheck":true}},"extends":"SmrtCollection","extendsTypeArg":"AgentSchedule","exportName":"AgentScheduleCollection","collectionExportName":"AgentScheduleCollectionCollection","schema":{"tableName":"_smrt_agent_schedules","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_agent_schedules\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"agent_type\\" TEXT,\\n \\"agent_id\\" TEXT,\\n \\"agent_config\\" TEXT,\\n \\"cron\\" TEXT,\\n \\"timezone\\" TEXT,\\n \\"enabled\\" BOOLEAN,\\n \\"status\\" TEXT,\\n \\"last_run\\" TIMESTAMP,\\n \\"next_run\\" TIMESTAMP,\\n \\"last_status\\" TEXT,\\n \\"last_error\\" TEXT,\\n \\"run_count\\" INTEGER,\\n \\"success_count\\" INTEGER,\\n \\"failure_count\\" INTEGER,\\n \\"max_concurrent\\" INTEGER,\\n \\"running_count\\" INTEGER,\\n \\"timeout\\" INTEGER,\\n \\"method\\" TEXT,\\n \\"method_args\\" TEXT\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"agent_type":{"type":"TEXT","notNull":false,"unique":false},"agent_id":{"type":"TEXT","notNull":false,"unique":false},"agent_config":{"type":"TEXT","notNull":false,"unique":false},"cron":{"type":"TEXT","notNull":false,"unique":false},"timezone":{"type":"TEXT","notNull":false,"unique":false},"enabled":{"type":"BOOLEAN","notNull":false,"unique":false},"status":{"type":"TEXT","notNull":false,"unique":false},"last_run":{"type":"TIMESTAMP","notNull":false,"unique":false},"next_run":{"type":"TIMESTAMP","notNull":false,"unique":false},"last_status":{"type":"TEXT","notNull":false,"unique":false},"last_error":{"type":"TEXT","notNull":false,"unique":false},"run_count":{"type":"INTEGER","notNull":false,"unique":false},"success_count":{"type":"INTEGER","notNull":false,"unique":false},"failure_count":{"type":"INTEGER","notNull":false,"unique":false},"max_concurrent":{"type":"INTEGER","notNull":false,"unique":false},"running_count":{"type":"INTEGER","notNull":false,"unique":false},"timeout":{"type":"INTEGER","notNull":false,"unique":false},"method":{"type":"TEXT","notNull":false,"unique":false},"method_args":{"type":"TEXT","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_agent_schedules_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_agent_schedules_enabled_status_next_run_idx","columns":["enabled","status","next_run"]},{"name":"_smrt_agent_schedules_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"c21a1f29"},"importPath":"@happyvertical/smrt-agents"},"@happyvertical/smrt-agents:TenantAgent":{"name":"tenantagent","className":"TenantAgent","qualifiedName":"@happyvertical/smrt-agents:TenantAgent","collection":"tenantagents","description":"TenantAgent SmrtObject \u2014 junction between tenants and agents","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/tenant-agent.ts","packageName":"@happyvertical/smrt-agents","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"agentClass":{"type":"text","required":false,"_meta":{}},"status":{"type":"text","required":false,"_meta":{},"enum":["active","disabled"]},"permissions":{"type":"json","required":false,"_meta":{"nullable":true}},"config":{"type":"json","required":false,"_meta":{"nullable":true,"sensitive":true},"sensitive":true}},"methods":{},"decoratorConfig":{"tableName":"tenant_agents","api":{"include":["list","get","create","update","delete"]},"cli":{"include":["list","get"]},"mcp":{"include":["list","get"]},"conflictColumns":["tenant_id","agent_class"],"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"TenantAgent","collectionExportName":"TenantAgentCollection","validationRules":[],"schema":{"tableName":"tenant_agents","ddl":"CREATE TABLE IF NOT EXISTS \\"tenant_agents\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"agent_class\\" TEXT,\\n \\"status\\" TEXT,\\n \\"permissions\\" JSON,\\n \\"config\\" JSON\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"agent_class":{"type":"TEXT","notNull":false,"unique":false},"status":{"type":"TEXT","notNull":false,"unique":false},"permissions":{"type":"JSON","notNull":false,"unique":false},"config":{"type":"JSON","notNull":false,"unique":false}},"indexes":[{"name":"tenant_agents_tenant_id_agent_class_idx","columns":["tenant_id","agent_class"],"unique":true,"nullsNotDistinct":true},{"name":"tenant_agents_slug_context_idx","columns":["slug","context"]},{"name":"tenant_agents_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"9892a054"},"importPath":"@happyvertical/smrt-agents"},"@happyvertical/smrt-agents:TenantAgentCollection":{"name":"tenantagentcollection","className":"TenantAgentCollection","qualifiedName":"@happyvertical/smrt-agents:TenantAgentCollection","collection":"tenantagents","description":"Collection for managing tenant-agent bindings","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/tenant-agent.ts","packageName":"@happyvertical/smrt-agents","fields":{},"methods":{"resolveForTenant":{"name":"resolveForTenant","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false},{"name":"getAncestorIds","type":"Function","optional":false},{"name":"manifests","type":"Map<string, AgentManifestInfo>","optional":true}],"returnType":"Promise<ResolvedAgentAvailability[]>","isStatic":false,"isPublic":true},"enableAgent":{"name":"enableAgent","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false},{"name":"agentClass","type":"string","optional":false}],"returnType":"Promise<TenantAgent>","isStatic":false,"isPublic":true},"disableAgent":{"name":"disableAgent","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false},{"name":"agentClass","type":"string","optional":false}],"returnType":"Promise<TenantAgent>","isStatic":false,"isPublic":true},"clearOverride":{"name":"clearOverride","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false},{"name":"agentClass","type":"string","optional":false}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"setPermissions":{"name":"setPermissions","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false},{"name":"agentClass","type":"string","optional":false},{"name":"permissions","type":"Record<string, boolean>","optional":false}],"returnType":"Promise<TenantAgent>","isStatic":false,"isPublic":true},"findByTenantAndClass":{"name":"findByTenantAndClass","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false},{"name":"agentClass","type":"string","optional":false}],"returnType":"Promise<TenantAgent | null>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"tenant_agents","api":{"include":["list","get","create","update","delete"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"TenantAgent","exportName":"TenantAgentCollection","collectionExportName":"TenantAgentCollectionCollection","schema":{"tableName":"tenant_agents","ddl":"CREATE TABLE IF NOT EXISTS \\"tenant_agents\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"agent_class\\" TEXT,\\n \\"status\\" TEXT,\\n \\"permissions\\" JSON,\\n \\"config\\" JSON\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"agent_class":{"type":"TEXT","notNull":false,"unique":false},"status":{"type":"TEXT","notNull":false,"unique":false},"permissions":{"type":"JSON","notNull":false,"unique":false},"config":{"type":"JSON","notNull":false,"unique":false}},"indexes":[{"name":"tenant_agents_tenant_id_agent_class_idx","columns":["tenant_id","agent_class"],"unique":true,"nullsNotDistinct":true},{"name":"tenant_agents_slug_context_idx","columns":["slug","context"]},{"name":"tenant_agents_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"9892a054"},"importPath":"@happyvertical/smrt-agents"},"@happyvertical/smrt-agents:SmrtDataSurfaceActionTask":{"name":"smrtdatasurfaceactiontask","className":"SmrtDataSurfaceActionTask","qualifiedName":"@happyvertical/smrt-agents:SmrtDataSurfaceActionTask","collection":"smrtdatasurfaceactiontasks","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/server/jobs-data-surface-action-queue.ts","packageName":"@happyvertical/smrt-agents","fields":{"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"args":{"type":"json","required":true,"_meta":{"required":true}}},"methods":{"run":{"name":"run","async":true,"parameters":[{"name":"args","type":"DataSurfaceActionJobArgs","optional":true},{"name":"context","type":"JobExecutionContext","optional":true}],"returnType":"Promise<DataSurfaceActionResult>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_data_surface_action_tasks","api":false,"cli":false,"mcp":false,"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"SmrtDataSurfaceActionTask","collectionExportName":"SmrtDataSurfaceActionTaskCollection","validationRules":[{"field":"args","rule":"required","fieldType":"json"}],"schema":{"tableName":"_smrt_data_surface_action_tasks","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_data_surface_action_tasks\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"args\\" JSON NOT NULL\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"args":{"type":"JSON","notNull":true,"unique":false}},"indexes":[{"name":"_smrt_data_surface_action_tasks_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_data_surface_action_tasks_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"d1c4adf8"},"importPath":"@happyvertical/smrt-agents/server"},"@happyvertical/smrt-agents:DataSurfaceActionTokenState":{"name":"datasurfaceactiontokenstate","className":"DataSurfaceActionTokenState","qualifiedName":"@happyvertical/smrt-agents:DataSurfaceActionTokenState","collection":"datasurfaceactiontokenstates","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/server/sql-data-surface-action-state.ts","packageName":"@happyvertical/smrt-agents","fields":{"tokenHash":{"type":"text","required":true,"_meta":{"required":true,"unique":true}},"record":{"type":"json","required":true,"_meta":{"required":true}},"consumedBy":{"type":"text","required":false,"_meta":{"nullable":true}}},"methods":{},"decoratorConfig":{"tableName":"_smrt_data_surface_action_tokens","api":false,"cli":false,"mcp":false},"extends":"SmrtObject","exportName":"DataSurfaceActionTokenState","collectionExportName":"DataSurfaceActionTokenStateCollection","validationRules":[{"field":"tokenHash","rule":"required","fieldType":"text"},{"field":"record","rule":"required","fieldType":"json"}],"schema":{"tableName":"_smrt_data_surface_action_tokens","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_data_surface_action_tokens\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"token_hash\\" TEXT NOT NULL UNIQUE,\\n \\"record\\" JSON NOT NULL,\\n \\"consumed_by\\" TEXT\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"token_hash":{"type":"TEXT","notNull":true,"unique":true},"record":{"type":"JSON","notNull":true,"unique":false},"consumed_by":{"type":"TEXT","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_data_surface_action_tokens_slug_context_idx","columns":["slug","context"],"unique":true},{"name":"_smrt_data_surface_action_tokens_created_at_idx","columns":["created_at"]}],"version":"497cf260"},"importPath":"@happyvertical/smrt-agents/server"},"@happyvertical/smrt-agents:DataSurfaceActionIdempotencyState":{"name":"datasurfaceactionidempotencystate","className":"DataSurfaceActionIdempotencyState","qualifiedName":"@happyvertical/smrt-agents:DataSurfaceActionIdempotencyState","collection":"datasurfaceactionidempotencystates","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/server/sql-data-surface-action-state.ts","packageName":"@happyvertical/smrt-agents","fields":{"keyHash":{"type":"text","required":true,"_meta":{"required":true,"unique":true}},"status":{"type":"text","required":true,"_meta":{"required":true},"enum":["reserved","completed"]},"requestFingerprint":{"type":"text","required":true,"_meta":{"required":true}},"ownerHash":{"type":"text","required":false,"_meta":{"nullable":true}},"reservedAt":{"type":"text","required":false,"_meta":{"nullable":true}},"result":{"type":"json","required":false,"_meta":{"nullable":true}},"recovery":{"type":"json","required":false,"_meta":{"nullable":true}}},"methods":{},"decoratorConfig":{"tableName":"_smrt_data_surface_action_idempotency","api":false,"cli":false,"mcp":false},"extends":"SmrtObject","exportName":"DataSurfaceActionIdempotencyState","collectionExportName":"DataSurfaceActionIdempotencyStateCollection","validationRules":[{"field":"keyHash","rule":"required","fieldType":"text"},{"field":"status","rule":"required","fieldType":"text"},{"field":"requestFingerprint","rule":"required","fieldType":"text"}],"schema":{"tableName":"_smrt_data_surface_action_idempotency","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_data_surface_action_idempotency\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"key_hash\\" TEXT NOT NULL UNIQUE,\\n \\"status\\" TEXT NOT NULL,\\n \\"request_fingerprint\\" TEXT NOT NULL,\\n \\"owner_hash\\" TEXT,\\n \\"reserved_at\\" TEXT,\\n \\"result\\" JSON,\\n \\"recovery\\" JSON\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"key_hash":{"type":"TEXT","notNull":true,"unique":true},"status":{"type":"TEXT","notNull":true,"unique":false},"request_fingerprint":{"type":"TEXT","notNull":true,"unique":false},"owner_hash":{"type":"TEXT","notNull":false,"unique":false},"reserved_at":{"type":"TEXT","notNull":false,"unique":false},"result":{"type":"JSON","notNull":false,"unique":false},"recovery":{"type":"JSON","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_data_surface_action_idempotency_slug_context_idx","columns":["slug","context"],"unique":true},{"name":"_smrt_data_surface_action_idempotency_created_at_idx","columns":["created_at"]}],"version":"eb65ff1e"},"importPath":"@happyvertical/smrt-agents/server"}},"moduleType":"smrt","smrtDependencies":["@happyvertical/smrt-core","@happyvertical/smrt-jobs","@happyvertical/smrt-playbooks","@happyvertical/smrt-reports","@happyvertical/smrt-secrets","@happyvertical/smrt-tenancy","@happyvertical/smrt-users"],"browser":{"status":"server-only","issues":["#3615","#3617","#3624","#3625","#3626","#3627"],"reason":"node:crypto in root; core migrations (node:os)","via":["@happyvertical/smrt-jobs","@happyvertical/smrt-profiles","@happyvertical/smrt-reports","@happyvertical/smrt-secrets","@happyvertical/smrt-tenancy","@happyvertical/smrt-users"]},"stampsConstructors":true}`));
15
+ ObjectRegistry.registerPackageManifest(JSON.parse(`{"version":"1.0.0","timestamp":0,"packageName":"@happyvertical/smrt-agents","packageVersion":"0.57.33","objects":{"@happyvertical/smrt-agents:Agent":{"name":"agent","className":"Agent","qualifiedName":"@happyvertical/smrt-agents:Agent","collection":"agents","description":"Base Agent class for building autonomous actors in the SMRT ecosystem","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/agent.ts","packageName":"@happyvertical/smrt-agents","fields":{"created_at":{"type":"datetime","required":false},"updated_at":{"type":"datetime","required":false},"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"status":{"type":"text","required":false,"default":"idle","enum":["idle","initializing","running","error","shutdown"]}},"methods":{"getInstanceKey":{"name":"getInstanceKey","async":false,"parameters":[],"returnType":"string | null","isStatic":false,"isPublic":true},"getConfigOwnerId":{"name":"getConfigOwnerId","async":false,"parameters":[{"name":"slotId","type":"string","optional":true}],"returnType":"string | null","isStatic":false,"isPublic":true},"getDispatchSubscriber":{"name":"getDispatchSubscriber","async":false,"parameters":[],"returnType":"string","isStatic":false,"isPublic":true},"getUISlots":{"name":"getUISlots","async":false,"parameters":[],"returnType":"AgentUISlots","isStatic":false,"isPublic":true},"loadConfigs":{"name":"loadConfigs","async":true,"parameters":[],"returnType":"Promise<Map<string, Record<string, unknown>>>","isStatic":false,"isPublic":true},"saveSlotConfig":{"name":"saveSlotConfig","async":true,"parameters":[{"name":"slotId","type":"string","optional":false},{"name":"data","type":"Record<string, unknown>","optional":false}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"getMergedConfig":{"name":"getMergedConfig","async":true,"parameters":[{"name":"slotId","type":"string","optional":false}],"returnType":"Promise<Record<string, unknown>>","isStatic":false,"isPublic":true},"exportConfig":{"name":"exportConfig","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["boolean"]}],"returnType":"Promise<Record<string, unknown>>","isStatic":false,"isPublic":true},"getDispatch":{"name":"getDispatch","async":true,"parameters":[],"returnType":"Promise<DispatchBus>","isStatic":false,"isPublic":true},"handleDispatch":{"name":"handleDispatch","async":true,"parameters":[{"name":"_payload","type":"unknown","optional":false},{"name":"_metadata","type":"DispatchMetadata","optional":false}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"processDispatches":{"name":"processDispatches","async":true,"parameters":[],"returnType":"Promise<number>","isStatic":false,"isPublic":true},"getLearningMemory":{"name":"getLearningMemory","async":false,"parameters":[],"returnType":"LearningMemory | null","isStatic":false,"isPublic":true},"initialize":{"name":"initialize","async":true,"parameters":[],"returnType":"Promise<this>","isStatic":false,"isPublic":true},"validate":{"name":"validate","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"shutdown":{"name":"shutdown","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"execute":{"name":"execute","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"interesting":{"name":"interesting","async":true,"parameters":[],"returnType":"Promise<InterestResult[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"cli":false,"api":false,"mcp":false,"tableStrategy":"sti","tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context","_meta_type"]},"extends":"SmrtObject","exportName":"Agent","collectionExportName":"AgentCollection","staticProperties":{"uiSlots":{},"adminRoutes":[],"createEntries":[],"signalSubscriptions":[]},"schema":{"tableName":"agents","ddl":"CREATE TABLE IF NOT EXISTS \\"agents\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"status\\" TEXT DEFAULT 'idle'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"status":{"type":"TEXT","notNull":false,"default":"idle"}},"indexes":[{"name":"agents_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"agents_meta_type_idx","columns":["_meta_type"]},{"name":"agents_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"dde8777b"},"importPath":"@happyvertical/smrt-agents"},"@happyvertical/smrt-agents:AgentConfig":{"name":"agentconfig","className":"AgentConfig","qualifiedName":"@happyvertical/smrt-agents:AgentConfig","collection":"agentconfigs","description":"AgentConfig stores agent configuration in the database","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/config.ts","packageName":"@happyvertical/smrt-agents","fields":{"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"agentId":{"type":"text","required":false,"_meta":{}},"agentClass":{"type":"text","required":false,"_meta":{}},"slotId":{"type":"text","required":false,"_meta":{}},"configData":{"type":"json","required":false,"_meta":{"sensitive":true},"sensitive":true},"schemaVersion":{"type":"integer","required":false,"_meta":{}}},"methods":{"forAgent":{"name":"forAgent","async":true,"parameters":[{"name":"agentId","type":"string","optional":false},{"name":"options","type":"SmrtClassOptions","optional":false}],"returnType":"Promise<Map<string, Record<string, unknown>>>","isStatic":true,"isPublic":true},"forAgents":{"name":"forAgents","async":true,"parameters":[{"name":"agentIds","type":"string[]","optional":false},{"name":"options","type":"SmrtClassOptions","optional":false}],"returnType":"Promise<Map<string, Map<string, Record<string, unknown>>>>","isStatic":true,"isPublic":true},"forSlot":{"name":"forSlot","async":true,"parameters":[{"name":"agentId","type":"string","optional":false},{"name":"slotId","type":"string","optional":false},{"name":"options","type":"SmrtClassOptions","optional":false}],"returnType":"Promise<Record<string, unknown> | undefined>","isStatic":true,"isPublic":true},"saveSlot":{"name":"saveSlot","async":true,"parameters":[{"name":"data","type":"object","optional":false,"memberTypes":["string","Record<string, unknown>"]},{"name":"options","type":"SmrtClassOptions","optional":false}],"returnType":"Promise<AgentConfig>","isStatic":true,"isPublic":true}},"decoratorConfig":{"tableName":"agent_configs","api":{"include":["list","get","create","update","delete"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"AgentConfig","collectionExportName":"AgentConfigCollection","schema":{"tableName":"agent_configs","ddl":"CREATE TABLE IF NOT EXISTS \\"agent_configs\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"agent_id\\" TEXT,\\n \\"agent_class\\" TEXT,\\n \\"slot_id\\" TEXT,\\n \\"config_data\\" JSON,\\n \\"schema_version\\" INTEGER\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"agent_id":{"type":"TEXT","notNull":false,"unique":false},"agent_class":{"type":"TEXT","notNull":false,"unique":false},"slot_id":{"type":"TEXT","notNull":false,"unique":false},"config_data":{"type":"JSON","notNull":false,"unique":false},"schema_version":{"type":"INTEGER","notNull":false,"unique":false}},"indexes":[{"name":"agent_configs_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"agent_configs_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"25c6ac4c"},"importPath":"@happyvertical/smrt-agents"},"@happyvertical/smrt-agents:AgentConfigCollection":{"name":"agentconfigcollection","className":"AgentConfigCollection","qualifiedName":"@happyvertical/smrt-agents:AgentConfigCollection","collection":"agentconfigs","description":"Collection for AgentConfig objects","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/config.ts","packageName":"@happyvertical/smrt-agents","fields":{},"methods":{"findByTenant":{"name":"findByTenant","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AgentConfig[]>","isStatic":false,"isPublic":true},"findGlobal":{"name":"findGlobal","async":true,"parameters":[],"returnType":"Promise<AgentConfig[]>","isStatic":false,"isPublic":true},"findWithGlobals":{"name":"findWithGlobals","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AgentConfig[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"agent_configs","api":{"include":["list","get","create","update","delete"]},"mcp":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"AgentConfig","exportName":"AgentConfigCollection","collectionExportName":"AgentConfigCollectionCollection","schema":{"tableName":"agent_configs","ddl":"CREATE TABLE IF NOT EXISTS \\"agent_configs\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"agent_id\\" TEXT,\\n \\"agent_class\\" TEXT,\\n \\"slot_id\\" TEXT,\\n \\"config_data\\" JSON,\\n \\"schema_version\\" INTEGER\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"agent_id":{"type":"TEXT","notNull":false,"unique":false},"agent_class":{"type":"TEXT","notNull":false,"unique":false},"slot_id":{"type":"TEXT","notNull":false,"unique":false},"config_data":{"type":"JSON","notNull":false,"unique":false},"schema_version":{"type":"INTEGER","notNull":false,"unique":false}},"indexes":[{"name":"agent_configs_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"agent_configs_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"25c6ac4c"},"importPath":"@happyvertical/smrt-agents"},"@happyvertical/smrt-agents:AgentSchedule":{"name":"agentschedule","className":"AgentSchedule","qualifiedName":"@happyvertical/smrt-agents:AgentSchedule","collection":"agentschedules","description":"AgentSchedule model for cron-based agent scheduling","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/schedule.ts","packageName":"@happyvertical/smrt-agents","fields":{"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"agentType":{"type":"text","required":false,"_meta":{}},"agentId":{"type":"text","required":false,"_meta":{"nullable":true}},"agentConfig":{"type":"json","required":false,"_meta":{"sqlType":"TEXT","sensitive":true},"sensitive":true},"cron":{"type":"text","required":false,"_meta":{}},"timezone":{"type":"text","required":false,"_meta":{}},"enabled":{"type":"boolean","required":false,"_meta":{}},"status":{"type":"text","required":false,"_meta":{},"enum":["active","paused","disabled","error"]},"lastRun":{"type":"datetime","required":false,"_meta":{"nullable":true}},"nextRun":{"type":"datetime","required":false,"_meta":{"nullable":true}},"lastStatus":{"type":"text","required":false,"_meta":{"nullable":true},"enum":["success","failed"]},"lastError":{"type":"text","required":false,"_meta":{"nullable":true}},"runCount":{"type":"integer","required":false,"_meta":{}},"successCount":{"type":"integer","required":false,"_meta":{}},"failureCount":{"type":"integer","required":false,"_meta":{}},"maxConcurrent":{"type":"integer","required":false,"_meta":{}},"runningCount":{"type":"integer","required":false,"_meta":{}},"timeout":{"type":"integer","required":false,"_meta":{}},"method":{"type":"text","required":false,"_meta":{}},"methodArgs":{"type":"json","required":false,"_meta":{"sqlType":"TEXT"}}},"methods":{"enable":{"name":"enable","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"disable":{"name":"disable","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"pause":{"name":"pause","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"resume":{"name":"resume","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"calculateNextRun":{"name":"calculateNextRun","async":false,"parameters":[],"returnType":"void","isStatic":false,"isPublic":true},"getDescription":{"name":"getDescription","async":false,"parameters":[],"returnType":"string","isStatic":false,"isPublic":true},"save":{"name":"save","async":true,"parameters":[{"name":"options","type":"SaveOptions","optional":true}],"returnType":"Promise<this>","isStatic":false,"isPublic":true},"beforeSave":{"name":"beforeSave","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_agent_schedules","api":{"include":["list","get","create","update","delete"]},"cli":{"include":["list","get","create","update","delete","enable","disable"],"skipApiCheck":true},"mcp":{"include":["list","get"]},"indexes":[{"name":"_smrt_agent_schedules_enabled_status_next_run_idx","columns":["enabled","status","nextRun"]}],"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"AgentSchedule","collectionExportName":"AgentScheduleCollection","schema":{"tableName":"_smrt_agent_schedules","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_agent_schedules\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"agent_type\\" TEXT,\\n \\"agent_id\\" TEXT,\\n \\"agent_config\\" TEXT,\\n \\"cron\\" TEXT,\\n \\"timezone\\" TEXT,\\n \\"enabled\\" BOOLEAN,\\n \\"status\\" TEXT,\\n \\"last_run\\" TIMESTAMP,\\n \\"next_run\\" TIMESTAMP,\\n \\"last_status\\" TEXT,\\n \\"last_error\\" TEXT,\\n \\"run_count\\" INTEGER,\\n \\"success_count\\" INTEGER,\\n \\"failure_count\\" INTEGER,\\n \\"max_concurrent\\" INTEGER,\\n \\"running_count\\" INTEGER,\\n \\"timeout\\" INTEGER,\\n \\"method\\" TEXT,\\n \\"method_args\\" TEXT\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"agent_type":{"type":"TEXT","notNull":false,"unique":false},"agent_id":{"type":"TEXT","notNull":false,"unique":false},"agent_config":{"type":"TEXT","notNull":false,"unique":false},"cron":{"type":"TEXT","notNull":false,"unique":false},"timezone":{"type":"TEXT","notNull":false,"unique":false},"enabled":{"type":"BOOLEAN","notNull":false,"unique":false},"status":{"type":"TEXT","notNull":false,"unique":false},"last_run":{"type":"TIMESTAMP","notNull":false,"unique":false},"next_run":{"type":"TIMESTAMP","notNull":false,"unique":false},"last_status":{"type":"TEXT","notNull":false,"unique":false},"last_error":{"type":"TEXT","notNull":false,"unique":false},"run_count":{"type":"INTEGER","notNull":false,"unique":false},"success_count":{"type":"INTEGER","notNull":false,"unique":false},"failure_count":{"type":"INTEGER","notNull":false,"unique":false},"max_concurrent":{"type":"INTEGER","notNull":false,"unique":false},"running_count":{"type":"INTEGER","notNull":false,"unique":false},"timeout":{"type":"INTEGER","notNull":false,"unique":false},"method":{"type":"TEXT","notNull":false,"unique":false},"method_args":{"type":"TEXT","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_agent_schedules_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_agent_schedules_enabled_status_next_run_idx","columns":["enabled","status","next_run"]},{"name":"_smrt_agent_schedules_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"c21a1f29"},"importPath":"@happyvertical/smrt-agents"},"@happyvertical/smrt-agents:AgentScheduleCollection":{"name":"agentschedulecollection","className":"AgentScheduleCollection","qualifiedName":"@happyvertical/smrt-agents:AgentScheduleCollection","collection":"agentschedules","description":"Collection for managing AgentSchedule objects","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/schedule.ts","packageName":"@happyvertical/smrt-agents","fields":{},"methods":{"findByTenant":{"name":"findByTenant","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AgentSchedule[]>","isStatic":false,"isPublic":true},"findGlobal":{"name":"findGlobal","async":true,"parameters":[],"returnType":"Promise<AgentSchedule[]>","isStatic":false,"isPublic":true},"findWithGlobals":{"name":"findWithGlobals","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AgentSchedule[]>","isStatic":false,"isPublic":true},"listByStatus":{"name":"listByStatus","async":true,"parameters":[{"name":"status","type":"ScheduleStatus | ScheduleStatus[]","optional":false,"unionBranches":[{"type":"ScheduleStatus"},{"type":"ScheduleStatus[]"}]},{"name":"options","type":"object","optional":true,"memberTypes":["number"]}],"returnType":"Promise<AgentSchedule[]>","isStatic":false,"isPublic":true},"listByAgentType":{"name":"listByAgentType","async":true,"parameters":[{"name":"agentType","type":"string","optional":false},{"name":"options","type":"object","optional":true,"memberTypes":["number","boolean"]}],"returnType":"Promise<AgentSchedule[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_agent_schedules","api":{"include":["list","get","create","update","delete"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get","create","update","delete"],"skipApiCheck":true}},"extends":"SmrtCollection","extendsTypeArg":"AgentSchedule","exportName":"AgentScheduleCollection","collectionExportName":"AgentScheduleCollectionCollection","schema":{"tableName":"_smrt_agent_schedules","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_agent_schedules\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"agent_type\\" TEXT,\\n \\"agent_id\\" TEXT,\\n \\"agent_config\\" TEXT,\\n \\"cron\\" TEXT,\\n \\"timezone\\" TEXT,\\n \\"enabled\\" BOOLEAN,\\n \\"status\\" TEXT,\\n \\"last_run\\" TIMESTAMP,\\n \\"next_run\\" TIMESTAMP,\\n \\"last_status\\" TEXT,\\n \\"last_error\\" TEXT,\\n \\"run_count\\" INTEGER,\\n \\"success_count\\" INTEGER,\\n \\"failure_count\\" INTEGER,\\n \\"max_concurrent\\" INTEGER,\\n \\"running_count\\" INTEGER,\\n \\"timeout\\" INTEGER,\\n \\"method\\" TEXT,\\n \\"method_args\\" TEXT\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"agent_type":{"type":"TEXT","notNull":false,"unique":false},"agent_id":{"type":"TEXT","notNull":false,"unique":false},"agent_config":{"type":"TEXT","notNull":false,"unique":false},"cron":{"type":"TEXT","notNull":false,"unique":false},"timezone":{"type":"TEXT","notNull":false,"unique":false},"enabled":{"type":"BOOLEAN","notNull":false,"unique":false},"status":{"type":"TEXT","notNull":false,"unique":false},"last_run":{"type":"TIMESTAMP","notNull":false,"unique":false},"next_run":{"type":"TIMESTAMP","notNull":false,"unique":false},"last_status":{"type":"TEXT","notNull":false,"unique":false},"last_error":{"type":"TEXT","notNull":false,"unique":false},"run_count":{"type":"INTEGER","notNull":false,"unique":false},"success_count":{"type":"INTEGER","notNull":false,"unique":false},"failure_count":{"type":"INTEGER","notNull":false,"unique":false},"max_concurrent":{"type":"INTEGER","notNull":false,"unique":false},"running_count":{"type":"INTEGER","notNull":false,"unique":false},"timeout":{"type":"INTEGER","notNull":false,"unique":false},"method":{"type":"TEXT","notNull":false,"unique":false},"method_args":{"type":"TEXT","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_agent_schedules_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_agent_schedules_enabled_status_next_run_idx","columns":["enabled","status","next_run"]},{"name":"_smrt_agent_schedules_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"c21a1f29"},"importPath":"@happyvertical/smrt-agents"},"@happyvertical/smrt-agents:TenantAgent":{"name":"tenantagent","className":"TenantAgent","qualifiedName":"@happyvertical/smrt-agents:TenantAgent","collection":"tenantagents","description":"TenantAgent SmrtObject \u2014 junction between tenants and agents","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/tenant-agent.ts","packageName":"@happyvertical/smrt-agents","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"agentClass":{"type":"text","required":false,"_meta":{}},"status":{"type":"text","required":false,"_meta":{},"enum":["active","disabled"]},"permissions":{"type":"json","required":false,"_meta":{"nullable":true}},"config":{"type":"json","required":false,"_meta":{"nullable":true,"sensitive":true},"sensitive":true}},"methods":{},"decoratorConfig":{"tableName":"tenant_agents","api":{"include":["list","get","create","update","delete"]},"cli":{"include":["list","get"]},"mcp":{"include":["list","get"]},"conflictColumns":["tenant_id","agent_class"],"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"TenantAgent","collectionExportName":"TenantAgentCollection","validationRules":[],"schema":{"tableName":"tenant_agents","ddl":"CREATE TABLE IF NOT EXISTS \\"tenant_agents\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"agent_class\\" TEXT,\\n \\"status\\" TEXT,\\n \\"permissions\\" JSON,\\n \\"config\\" JSON\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"agent_class":{"type":"TEXT","notNull":false,"unique":false},"status":{"type":"TEXT","notNull":false,"unique":false},"permissions":{"type":"JSON","notNull":false,"unique":false},"config":{"type":"JSON","notNull":false,"unique":false}},"indexes":[{"name":"tenant_agents_tenant_id_agent_class_idx","columns":["tenant_id","agent_class"],"unique":true,"nullsNotDistinct":true},{"name":"tenant_agents_slug_context_idx","columns":["slug","context"]},{"name":"tenant_agents_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"9892a054"},"importPath":"@happyvertical/smrt-agents"},"@happyvertical/smrt-agents:TenantAgentCollection":{"name":"tenantagentcollection","className":"TenantAgentCollection","qualifiedName":"@happyvertical/smrt-agents:TenantAgentCollection","collection":"tenantagents","description":"Collection for managing tenant-agent bindings","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/tenant-agent.ts","packageName":"@happyvertical/smrt-agents","fields":{},"methods":{"resolveForTenant":{"name":"resolveForTenant","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false},{"name":"getAncestorIds","type":"Function","optional":false},{"name":"manifests","type":"Map<string, AgentManifestInfo>","optional":true}],"returnType":"Promise<ResolvedAgentAvailability[]>","isStatic":false,"isPublic":true},"enableAgent":{"name":"enableAgent","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false},{"name":"agentClass","type":"string","optional":false}],"returnType":"Promise<TenantAgent>","isStatic":false,"isPublic":true},"disableAgent":{"name":"disableAgent","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false},{"name":"agentClass","type":"string","optional":false}],"returnType":"Promise<TenantAgent>","isStatic":false,"isPublic":true},"clearOverride":{"name":"clearOverride","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false},{"name":"agentClass","type":"string","optional":false}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"setPermissions":{"name":"setPermissions","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false},{"name":"agentClass","type":"string","optional":false},{"name":"permissions","type":"Record<string, boolean>","optional":false}],"returnType":"Promise<TenantAgent>","isStatic":false,"isPublic":true},"findByTenantAndClass":{"name":"findByTenantAndClass","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false},{"name":"agentClass","type":"string","optional":false}],"returnType":"Promise<TenantAgent | null>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"tenant_agents","api":{"include":["list","get","create","update","delete"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"TenantAgent","exportName":"TenantAgentCollection","collectionExportName":"TenantAgentCollectionCollection","schema":{"tableName":"tenant_agents","ddl":"CREATE TABLE IF NOT EXISTS \\"tenant_agents\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"agent_class\\" TEXT,\\n \\"status\\" TEXT,\\n \\"permissions\\" JSON,\\n \\"config\\" JSON\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"agent_class":{"type":"TEXT","notNull":false,"unique":false},"status":{"type":"TEXT","notNull":false,"unique":false},"permissions":{"type":"JSON","notNull":false,"unique":false},"config":{"type":"JSON","notNull":false,"unique":false}},"indexes":[{"name":"tenant_agents_tenant_id_agent_class_idx","columns":["tenant_id","agent_class"],"unique":true,"nullsNotDistinct":true},{"name":"tenant_agents_slug_context_idx","columns":["slug","context"]},{"name":"tenant_agents_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"9892a054"},"importPath":"@happyvertical/smrt-agents"},"@happyvertical/smrt-agents:SmrtDataSurfaceActionTask":{"name":"smrtdatasurfaceactiontask","className":"SmrtDataSurfaceActionTask","qualifiedName":"@happyvertical/smrt-agents:SmrtDataSurfaceActionTask","collection":"smrtdatasurfaceactiontasks","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/server/jobs-data-surface-action-queue.ts","packageName":"@happyvertical/smrt-agents","fields":{"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"args":{"type":"json","required":true,"_meta":{"required":true}}},"methods":{"run":{"name":"run","async":true,"parameters":[{"name":"args","type":"DataSurfaceActionJobArgs","optional":true},{"name":"context","type":"JobExecutionContext","optional":true}],"returnType":"Promise<DataSurfaceActionResult>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_data_surface_action_tasks","api":false,"cli":false,"mcp":false,"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"SmrtDataSurfaceActionTask","collectionExportName":"SmrtDataSurfaceActionTaskCollection","validationRules":[{"field":"args","rule":"required","fieldType":"json"}],"schema":{"tableName":"_smrt_data_surface_action_tasks","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_data_surface_action_tasks\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"args\\" JSON NOT NULL\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"args":{"type":"JSON","notNull":true,"unique":false}},"indexes":[{"name":"_smrt_data_surface_action_tasks_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_data_surface_action_tasks_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"d1c4adf8"},"importPath":"@happyvertical/smrt-agents/server"},"@happyvertical/smrt-agents:DataSurfaceActionTokenState":{"name":"datasurfaceactiontokenstate","className":"DataSurfaceActionTokenState","qualifiedName":"@happyvertical/smrt-agents:DataSurfaceActionTokenState","collection":"datasurfaceactiontokenstates","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/server/sql-data-surface-action-state.ts","packageName":"@happyvertical/smrt-agents","fields":{"tokenHash":{"type":"text","required":true,"_meta":{"required":true,"unique":true}},"record":{"type":"json","required":true,"_meta":{"required":true}},"consumedBy":{"type":"text","required":false,"_meta":{"nullable":true}}},"methods":{},"decoratorConfig":{"tableName":"_smrt_data_surface_action_tokens","api":false,"cli":false,"mcp":false},"extends":"SmrtObject","exportName":"DataSurfaceActionTokenState","collectionExportName":"DataSurfaceActionTokenStateCollection","validationRules":[{"field":"tokenHash","rule":"required","fieldType":"text"},{"field":"record","rule":"required","fieldType":"json"}],"schema":{"tableName":"_smrt_data_surface_action_tokens","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_data_surface_action_tokens\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"token_hash\\" TEXT NOT NULL UNIQUE,\\n \\"record\\" JSON NOT NULL,\\n \\"consumed_by\\" TEXT\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"token_hash":{"type":"TEXT","notNull":true,"unique":true},"record":{"type":"JSON","notNull":true,"unique":false},"consumed_by":{"type":"TEXT","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_data_surface_action_tokens_slug_context_idx","columns":["slug","context"],"unique":true},{"name":"_smrt_data_surface_action_tokens_created_at_idx","columns":["created_at"]}],"version":"497cf260"},"importPath":"@happyvertical/smrt-agents/server"},"@happyvertical/smrt-agents:DataSurfaceActionIdempotencyState":{"name":"datasurfaceactionidempotencystate","className":"DataSurfaceActionIdempotencyState","qualifiedName":"@happyvertical/smrt-agents:DataSurfaceActionIdempotencyState","collection":"datasurfaceactionidempotencystates","filePath":"/home/runner/work/smrt/smrt/packages/agents/src/server/sql-data-surface-action-state.ts","packageName":"@happyvertical/smrt-agents","fields":{"keyHash":{"type":"text","required":true,"_meta":{"required":true,"unique":true}},"status":{"type":"text","required":true,"_meta":{"required":true},"enum":["reserved","completed"]},"requestFingerprint":{"type":"text","required":true,"_meta":{"required":true}},"ownerHash":{"type":"text","required":false,"_meta":{"nullable":true}},"reservedAt":{"type":"text","required":false,"_meta":{"nullable":true}},"result":{"type":"json","required":false,"_meta":{"nullable":true}},"recovery":{"type":"json","required":false,"_meta":{"nullable":true}}},"methods":{},"decoratorConfig":{"tableName":"_smrt_data_surface_action_idempotency","api":false,"cli":false,"mcp":false},"extends":"SmrtObject","exportName":"DataSurfaceActionIdempotencyState","collectionExportName":"DataSurfaceActionIdempotencyStateCollection","validationRules":[{"field":"keyHash","rule":"required","fieldType":"text"},{"field":"status","rule":"required","fieldType":"text"},{"field":"requestFingerprint","rule":"required","fieldType":"text"}],"schema":{"tableName":"_smrt_data_surface_action_idempotency","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_data_surface_action_idempotency\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"key_hash\\" TEXT NOT NULL UNIQUE,\\n \\"status\\" TEXT NOT NULL,\\n \\"request_fingerprint\\" TEXT NOT NULL,\\n \\"owner_hash\\" TEXT,\\n \\"reserved_at\\" TEXT,\\n \\"result\\" JSON,\\n \\"recovery\\" JSON\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"key_hash":{"type":"TEXT","notNull":true,"unique":true},"status":{"type":"TEXT","notNull":true,"unique":false},"request_fingerprint":{"type":"TEXT","notNull":true,"unique":false},"owner_hash":{"type":"TEXT","notNull":false,"unique":false},"reserved_at":{"type":"TEXT","notNull":false,"unique":false},"result":{"type":"JSON","notNull":false,"unique":false},"recovery":{"type":"JSON","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_data_surface_action_idempotency_slug_context_idx","columns":["slug","context"],"unique":true},{"name":"_smrt_data_surface_action_idempotency_created_at_idx","columns":["created_at"]}],"version":"eb65ff1e"},"importPath":"@happyvertical/smrt-agents/server"}},"moduleType":"smrt","smrtDependencies":["@happyvertical/smrt-core","@happyvertical/smrt-jobs","@happyvertical/smrt-playbooks","@happyvertical/smrt-reports","@happyvertical/smrt-secrets","@happyvertical/smrt-tenancy","@happyvertical/smrt-users"],"browser":{"status":"server-only","issues":["#3615","#3617","#3624","#3625","#3626","#3627"],"reason":"node:crypto in root; core migrations (node:os)","via":["@happyvertical/smrt-jobs","@happyvertical/smrt-profiles","@happyvertical/smrt-reports","@happyvertical/smrt-secrets","@happyvertical/smrt-tenancy","@happyvertical/smrt-users"]},"stampsConstructors":true}`));
16
16
  //#endregion
17
17
  //#region src/ai-config.ts
18
18
  var DEFAULT_SECRET_FALLBACK = "ancestors";
@@ -1153,6 +1153,8 @@ var DATA_INSPECT_FUNCTION_NAME = "data-inspect";
1153
1153
  var DATA_QUERY_FUNCTION_NAME = "data-query";
1154
1154
  var DEFAULT_DATA_SURFACE_DEADLINE_MS = 5e3;
1155
1155
  var MAX_DATA_SURFACE_DEADLINE_MS = 3e4;
1156
+ var MAX_DATA_SURFACE_SUMMARY_DESCRIPTION_CHARS = 160;
1157
+ var MAX_DATA_SURFACE_ROW_COUNT_HINT_CHARS = 32;
1156
1158
  var DataSurfaceDeniedError = class extends Error {
1157
1159
  status = 403;
1158
1160
  constructor() {
@@ -1160,6 +1162,14 @@ var DataSurfaceDeniedError = class extends Error {
1160
1162
  this.name = "DataSurfaceDeniedError";
1161
1163
  }
1162
1164
  };
1165
+ var DataSurfaceActionDeniedError = class extends DataSurfaceDeniedError {
1166
+ code = "DATA_SURFACE_ACTION_DENIED";
1167
+ constructor(action, surfaceId) {
1168
+ super();
1169
+ this.message = `${action === "query" ? "Querying" : "Inspecting"} '${surfaceId}' is not permitted for you; answer without this data or ask an administrator.`;
1170
+ this.name = "DataSurfaceActionDeniedError";
1171
+ }
1172
+ };
1163
1173
  var DataSurfaceDeadlineError = class extends Error {
1164
1174
  status = 504;
1165
1175
  constructor() {
@@ -1222,7 +1232,41 @@ function disallowedCondition(filter, schema, depth = 0) {
1222
1232
  if (found) return found;
1223
1233
  }
1224
1234
  }
1225
- function explainRequestError(error, schema, request) {
1235
+ function validQueryExample(surfaceId, schema, request) {
1236
+ const mode = isRecord$1(request) && (request.mode === "rows" || request.mode === "facets") ? request.mode : "count";
1237
+ const filterable = schema.fields.filter((field2) => (field2.filterOperators?.length ?? 0) > 0);
1238
+ const inField = filterable.find((field2) => field2.filterOperators?.includes("in"));
1239
+ const field = inField ?? filterable[0];
1240
+ const filter = field ? inField ? `,"filter":{"kind":"condition","field":${JSON.stringify(field.id)},"operator":"in","value":["<value>","<value>"]}` : `,"filter":{"kind":"condition","field":${JSON.stringify(field.id)},"operator":${JSON.stringify(field.filterOperators?.[0])},"value":"<value>"}` : "";
1241
+ let body;
1242
+ if (mode === "facets") {
1243
+ const facet = schema.fields.find((candidate) => candidate.facetable);
1244
+ body = facet ? `"mode":"facets","facets":[{"field":${JSON.stringify(facet.id)},"limit":10}]` : `"mode":"count"${filter}`;
1245
+ } else if (mode === "rows") body = `"mode":"rows","projection":[${JSON.stringify(schema.identityField)}]${filter},"page":{"kind":"offset","offset":0,"limit":${Math.min(10, schema.maxPageLimit ?? 10)}}`;
1246
+ else body = `"mode":"count"${filter}`;
1247
+ return `Valid example: {"surfaceId":${JSON.stringify(surfaceId)},"request":{${body}}}`;
1248
+ }
1249
+ var FILTER_KINDS = /* @__PURE__ */ new Set([
1250
+ "condition",
1251
+ "all",
1252
+ "any",
1253
+ "not"
1254
+ ]);
1255
+ function filterKindHint(request) {
1256
+ const seen = /* @__PURE__ */ new Set();
1257
+ const walk = (filter, depth) => {
1258
+ if (!isRecord$1(filter) || depth > 16) return;
1259
+ if (typeof filter.kind === "string" && !FILTER_KINDS.has(filter.kind)) seen.add(filter.kind);
1260
+ const children = Array.isArray(filter.filters) ? filter.filters : [filter.filter];
1261
+ for (const child of children) walk(child, depth + 1);
1262
+ };
1263
+ walk(isRecord$1(request) ? request.filter : void 0, 0);
1264
+ if (seen.size === 0) return "";
1265
+ const operators = [...seen].filter((kind) => DATA_QUERY_OPERATORS.includes(kind));
1266
+ const logical = [...seen].some((kind) => kind === "or" || kind === "and");
1267
+ return "A filter kind is condition, all, any or not. " + (operators.length > 0 ? `${operators.join(", ")} is an operator: use {"kind":"condition","field":f,"operator":${JSON.stringify(operators[0])},"value":v}. ` : "") + (logical ? "For OR use {\"kind\":\"any\",\"filters\":[...]}; for AND use {\"kind\":\"all\",\"filters\":[...]}. " : "");
1268
+ }
1269
+ function explainRequestError(error, schema, request, surfaceId) {
1226
1270
  const reason = error.publicMessage.replace(/\.?$/, ".");
1227
1271
  let hint;
1228
1272
  switch (error.code) {
@@ -1243,20 +1287,23 @@ function explainRequestError(error, schema, request) {
1243
1287
  case "DATA_QUERY_FACET_NOT_ALLOWED":
1244
1288
  hint = listOrNone("Facetable fields", fieldList(schema, (field) => field.facetable === true), "This surface has no facetable fields; use mode \"count\" or \"rows\".");
1245
1289
  break;
1290
+ case "DATA_QUERY_VALUE_NOT_ALLOWED":
1291
+ hint = "Call data.inspect for each field’s values and their labels.";
1292
+ break;
1246
1293
  case "DATA_QUERY_UNSUPPORTED": {
1247
1294
  const supports = schema.supports ?? {};
1248
1295
  hint = `This surface supports offset paging${supports.cursorPagination ? ", cursor paging" : ""}${supports.facets ? ", facets" : ""}${supports.consistency ? ", consistency options" : ""}.`;
1249
1296
  break;
1250
1297
  }
1251
- default: hint = DATA_QUERY_REQUEST_SHAPE_HINT;
1298
+ default: hint = `${filterKindHint(request)}${DATA_QUERY_REQUEST_SHAPE_HINT}`;
1252
1299
  }
1253
- return new DataSurfaceRequestError(`${reason} ${hint}`, error.code);
1300
+ return new DataSurfaceRequestError(`${reason} ${hint} ${validQueryExample(surfaceId, schema, request)}`, error.code);
1254
1301
  }
1255
- function normalizeSurfaceRequest(value, schema) {
1302
+ function normalizeSurfaceRequest(value, schema, surfaceId) {
1256
1303
  try {
1257
1304
  return normalizeDataQueryRequest(value, schema);
1258
1305
  } catch (error) {
1259
- if (error instanceof DataQueryValidationError) throw explainRequestError(error, schema, value);
1306
+ if (error instanceof DataQueryValidationError) throw explainRequestError(error, schema, value, surfaceId);
1260
1307
  throw error;
1261
1308
  }
1262
1309
  }
@@ -1300,12 +1347,52 @@ function visibleSchema(schema, run) {
1300
1347
  fields
1301
1348
  }));
1302
1349
  }
1350
+ var ROW_COUNT_HINT_FORBIDDEN = /[\p{Cc}\p{Cf}\p{Zl}\p{Zp}]/u;
1351
+ var INVISIBLE_CHARACTERS = /[\p{Z}\u115F\u1160\u2800\u3164\uFFA0]/gu;
1352
+ function normalizeDataSurfaceRowCountHint(value) {
1353
+ if (typeof value === "number") return Number.isSafeInteger(value) && value >= 0 ? value : void 0;
1354
+ if (typeof value !== "string" || ROW_COUNT_HINT_FORBIDDEN.test(value)) return;
1355
+ const label = value.trim();
1356
+ if (label.replace(INVISIBLE_CHARACTERS, "").length === 0 || Array.from(label).length > 32) return;
1357
+ return label;
1358
+ }
1359
+ function rowCountHintEntry(surface) {
1360
+ const rowCountHint = normalizeDataSurfaceRowCountHint(surface.rowCountHint);
1361
+ return rowCountHint === void 0 ? {} : { rowCountHint };
1362
+ }
1363
+ var SUMMARY_LINE_BREAK = /\r\n|[\n\v\f\r\u0085\u2028\u2029]/;
1364
+ var FORMAT_CHARACTERS = /\p{Cf}/gu;
1365
+ var CONTROL_CHARACTERS = /\p{Cc}/gu;
1366
+ function firstSummaryLine(text) {
1367
+ if (typeof text !== "string") return void 0;
1368
+ for (const rawLine of text.split(SUMMARY_LINE_BREAK)) {
1369
+ const line = rawLine.replace(FORMAT_CHARACTERS, "").replace(CONTROL_CHARACTERS, " ").trim();
1370
+ if (line.length > 0) return line;
1371
+ }
1372
+ }
1373
+ function summaryDescription(description) {
1374
+ const line = firstSummaryLine(description);
1375
+ if (line === void 0) return void 0;
1376
+ const characters = Array.from(line);
1377
+ if (characters.length <= 160) return line;
1378
+ return `${characters.slice(0, 159).join("").trimEnd()}\u2026`;
1379
+ }
1380
+ function summary(surface) {
1381
+ const description = summaryDescription(surface.description);
1382
+ return {
1383
+ id: surface.id,
1384
+ label: firstSummaryLine(surface.label) ?? surface.id,
1385
+ ...description ? { description } : {},
1386
+ ...rowCountHintEntry(surface)
1387
+ };
1388
+ }
1303
1389
  function descriptor(surface, schema) {
1304
1390
  const metadataByFieldId = new Map(surface.schema.fields.map((field) => [field.id, field.metadata]));
1305
1391
  return {
1306
1392
  id: surface.id,
1307
1393
  label: surface.label ?? surface.id,
1308
1394
  ...surface.description ? { description: surface.description } : {},
1395
+ ...rowCountHintEntry(surface),
1309
1396
  ...surface.metadata ? { metadata: surface.metadata } : {},
1310
1397
  collection: surface.collection,
1311
1398
  identityField: schema.identityField,
@@ -1316,6 +1403,10 @@ function descriptor(surface, schema) {
1316
1403
  sortable: field.sortable === true,
1317
1404
  facetable: field.facetable === true,
1318
1405
  filterOperators: [...field.filterOperators ?? []].sort(),
1406
+ ...field.values ? {
1407
+ values: field.values.map((entry) => ({ ...entry })),
1408
+ valuesEnforced: field.valuesEnforced !== false
1409
+ } : {},
1319
1410
  ...metadataByFieldId.get(field.id) ? { metadata: metadataByFieldId.get(field.id) } : {}
1320
1411
  })),
1321
1412
  supports: schema.supports ?? {},
@@ -1326,8 +1417,8 @@ function descriptor(surface, schema) {
1326
1417
  }
1327
1418
  };
1328
1419
  }
1329
- async function availableSurfaces(options, run) {
1330
- const configured = typeof options.surfaces === "function" ? await options.surfaces(run) : options.surfaces;
1420
+ async function availableSurfaces(options, run, action) {
1421
+ const configured = typeof options.surfaces === "function" ? await options.surfaces(run, { action }) : options.surfaces;
1331
1422
  const result = [];
1332
1423
  for (const surface of configured) {
1333
1424
  if (!surface || !nonEmptyString(surface.id) || !nonEmptyString(surface.collection)) continue;
@@ -1565,10 +1656,62 @@ async function bounded(promise, deadlineMs, controller) {
1565
1656
  if (timer) clearTimeout(timer);
1566
1657
  }
1567
1658
  }
1568
- function requestFromArgs(args) {
1659
+ var DATA_QUERY_REQUEST_KEYS = [
1660
+ "mode",
1661
+ "projection",
1662
+ "filter",
1663
+ "sort",
1664
+ "page",
1665
+ "facets",
1666
+ "version",
1667
+ "requestId"
1668
+ ];
1669
+ var GENERIC_QUERY_EXAMPLE = "Valid example: {\"surfaceId\":\"<surface id from data.discover>\",\"request\":{\"mode\":\"count\",\"filter\":{\"kind\":\"condition\",\"field\":\"<field>\",\"operator\":\"in\",\"value\":[\"<value>\",\"<value>\"]}}}";
1670
+ function placeSurfaceId(args, tool2) {
1671
+ let next = { ...args };
1672
+ if (tool2 === "query" && !Object.hasOwn(next, "request") && isRecord$1(next.query) && Object.keys(next).every((key) => key === "surfaceId" || key === "query")) {
1673
+ const { query, ...rest } = next;
1674
+ next = {
1675
+ ...rest,
1676
+ request: query
1677
+ };
1678
+ }
1679
+ const nested = [];
1680
+ if (isRecord$1(next.request)) {
1681
+ let request = { ...next.request };
1682
+ const keys = Object.keys(request).filter((key) => key !== "surfaceId");
1683
+ if (keys.length === 1 && keys[0] === "query" && isRecord$1(request.query)) {
1684
+ const { query, ...rest } = request;
1685
+ if (Object.hasOwn(query, "surfaceId")) nested.push(query.surfaceId);
1686
+ request = {
1687
+ ...query,
1688
+ ...rest
1689
+ };
1690
+ }
1691
+ if (Object.hasOwn(request, "surfaceId")) {
1692
+ nested.push(request.surfaceId);
1693
+ delete request.surfaceId;
1694
+ }
1695
+ next.request = request;
1696
+ }
1697
+ const top = next.surfaceId;
1698
+ const candidates = [...top !== void 0 && top !== null ? [top] : [], ...nested];
1699
+ const example = tool2 === "inspect" ? "Valid example: {\"surfaceId\":\"<surface id from data.discover>\"}" : GENERIC_QUERY_EXAMPLE;
1700
+ if (candidates.length === 0 || candidates.some((id) => typeof id !== "string" || !id)) throw new DataSurfaceRequestError(`surfaceId is required at the top level${tool2 === "query" ? ", next to request" : ""}, as a surface id string from data.discover. ${example}`, "DATA_QUERY_SURFACE_ID_REQUIRED");
1701
+ if (new Set(candidates).size > 1) throw new DataSurfaceRequestError(`surfaceId was given twice with different values. Give it once, at the top level${tool2 === "query" ? ", next to request" : ""}. ${example}`, "DATA_QUERY_SURFACE_ID_CONFLICT");
1702
+ next.surfaceId = candidates[0];
1703
+ return next;
1704
+ }
1705
+ function requestFromArgs(args, example) {
1569
1706
  let raw;
1570
- if (Object.hasOwn(args, "request")) raw = args.request;
1571
- else {
1707
+ if (Object.hasOwn(args, "request")) {
1708
+ const stray = Object.keys(args).filter((key) => key !== "surfaceId" && key !== "request");
1709
+ if (stray.length > 0) {
1710
+ const misplaced = DATA_QUERY_REQUEST_KEYS.filter((key) => stray.includes(key));
1711
+ throw new DataSurfaceRequestError("data.query accepts only surfaceId and request at the top level" + (misplaced.length > 0 ? `; move ${misplaced.join(", ")} inside request.` : "; put every query option inside request.") + ` ${example()}`, "DATA_QUERY_ARGUMENTS_UNEXPECTED");
1712
+ }
1713
+ raw = args.request;
1714
+ } else {
1572
1715
  const { surfaceId: _surfaceId, ...rest } = args;
1573
1716
  raw = rest;
1574
1717
  }
@@ -1731,6 +1874,8 @@ var DATA_QUERY_TOOL_PARAMETERS = {
1731
1874
  }
1732
1875
  };
1733
1876
  var DATA_QUERY_TOOL_DESCRIPTION = "Run a bounded, read-only query against one data surface. Call data.inspect first: only the fields, operators, sort fields, facets, and page limits it lists are accepted. Use mode \"count\" for how-many questions and mode \"facets\" for breakdowns by value. Example request: {\"mode\":\"rows\",\"projection\":[\"title\",\"updated_at\"],\"filter\":{\"kind\":\"condition\",\"field\":\"status\",\"operator\":\"eq\",\"value\":\"published\"},\"sort\":[{\"field\":\"updated_at\",\"direction\":\"desc\"}],\"page\":{\"kind\":\"offset\",\"offset\":0,\"limit\":10}}. An invalid request fails with a message naming what was wrong and what is allowed.";
1877
+ var DATA_DISCOVER_FULL_TOOL_DESCRIPTION = "List data surfaces and their safe, readable fields.";
1878
+ var DATA_DISCOVER_SUMMARY_TOOL_DESCRIPTION = "List the data surfaces you can read (id, label, short description). Call data.inspect for a surface's fields and operators before querying.";
1734
1879
  function tool(slug, functionName, description, parameters, execute) {
1735
1880
  return {
1736
1881
  slug,
@@ -1763,22 +1908,79 @@ function createDataSurfaceTools(options) {
1763
1908
  };
1764
1909
  const catalog = async (run, action) => {
1765
1910
  try {
1766
- return await availableSurfaces(options, run);
1911
+ return await availableSurfaces(options, run, action);
1767
1912
  } catch (error) {
1768
1913
  await reportFailure(options, run, action, void 0, void 0, error);
1769
1914
  throw new DataSurfaceQueryError();
1770
1915
  }
1771
1916
  };
1917
+ const deny = async (run, action, requestedId, reason, requestId) => {
1918
+ let surfaceId;
1919
+ let finalReason = reason ?? "not_visible";
1920
+ if (!reason && typeof options.surfaces === "function" && typeof requestedId === "string" && requestedId) {
1921
+ const lesser = action === "query" ? [["inspect", DATA_INSPECT_TOOL_SLUG], ["discover", DATA_DISCOVER_TOOL_SLUG]] : [["discover", DATA_DISCOVER_TOOL_SLUG]];
1922
+ for (const [lesserAction, lesserSlug] of lesser) {
1923
+ if (!run.isToolAllowed(lesserSlug)) continue;
1924
+ let visible;
1925
+ try {
1926
+ visible = await availableSurfaces(options, run, lesserAction);
1927
+ } catch (error) {
1928
+ await reportFailure(options, run, lesserAction, void 0, void 0, error);
1929
+ continue;
1930
+ }
1931
+ const entry = findSurface(visible, requestedId);
1932
+ if (entry) {
1933
+ surfaceId = entry.surface.id;
1934
+ finalReason = "action_not_permitted";
1935
+ break;
1936
+ }
1937
+ }
1938
+ }
1939
+ const userId = run.context.userId || void 0;
1940
+ const tenantId = run.context.tenantId ?? null;
1941
+ try {
1942
+ await options.onDenied?.({
1943
+ action,
1944
+ ...surfaceId ? { surfaceId } : {},
1945
+ ...typeof requestId === "string" && requestId ? { requestId: requestId.slice(0, 256) } : {},
1946
+ ...userId ? { userId } : {},
1947
+ tenantId,
1948
+ reason: finalReason
1949
+ });
1950
+ } catch {}
1951
+ if (userId) try {
1952
+ await options.audit?.({
1953
+ action,
1954
+ ...surfaceId ? { surfaceId } : {},
1955
+ userId,
1956
+ tenantId,
1957
+ denied: true,
1958
+ reason: finalReason
1959
+ });
1960
+ } catch (error) {
1961
+ await reportFailure(options, run, action, surfaceId, void 0, error);
1962
+ }
1963
+ return surfaceId && action !== "discover" ? new DataSurfaceActionDeniedError(action, surfaceId) : new DataSurfaceDeniedError();
1964
+ };
1965
+ const assertAllowed = async (run, action, slug) => {
1966
+ try {
1967
+ run.assertToolAllowed(slug);
1968
+ } catch (error) {
1969
+ await deny(run, action, void 0, "tool_not_allowed");
1970
+ throw error;
1971
+ }
1972
+ };
1973
+ const summaryDiscovery = options.discoverDetail === "summary";
1772
1974
  return [
1773
- tool(DATA_DISCOVER_TOOL_SLUG, DATA_DISCOVER_FUNCTION_NAME, "List data surfaces and their safe, readable fields.", {
1975
+ tool(DATA_DISCOVER_TOOL_SLUG, DATA_DISCOVER_FUNCTION_NAME, summaryDiscovery ? DATA_DISCOVER_SUMMARY_TOOL_DESCRIPTION : DATA_DISCOVER_FULL_TOOL_DESCRIPTION, {
1774
1976
  type: "object",
1775
1977
  properties: {},
1776
1978
  additionalProperties: false
1777
1979
  }, async ({ run }) => {
1778
- run.assertToolAllowed(DATA_DISCOVER_TOOL_SLUG);
1980
+ await assertAllowed(run, "discover", DATA_DISCOVER_TOOL_SLUG);
1779
1981
  const entries = await catalog(run, "discover");
1780
1982
  await audit({ action: "discover" }, run);
1781
- return entries.map(({ surface, schema }) => descriptor(surface, schema));
1983
+ return entries.map(({ surface, schema }) => summaryDiscovery ? summary(surface) : descriptor(surface, schema));
1782
1984
  }),
1783
1985
  tool(DATA_INSPECT_TOOL_SLUG, DATA_INSPECT_FUNCTION_NAME, "Inspect one readable data surface schema.", {
1784
1986
  type: "object",
@@ -1786,9 +1988,10 @@ function createDataSurfaceTools(options) {
1786
1988
  properties: { surfaceId: { type: "string" } },
1787
1989
  additionalProperties: false
1788
1990
  }, async ({ run, args }) => {
1789
- run.assertToolAllowed(DATA_INSPECT_TOOL_SLUG);
1790
- const entry = findSurface(await catalog(run, "inspect"), args.surfaceId);
1791
- if (!entry) throw new DataSurfaceDeniedError();
1991
+ await assertAllowed(run, "inspect", DATA_INSPECT_TOOL_SLUG);
1992
+ const placed = placeSurfaceId(args, "inspect");
1993
+ const entry = findSurface(await catalog(run, "inspect"), placed.surfaceId);
1994
+ if (!entry) throw await deny(run, "inspect", placed.surfaceId);
1792
1995
  await audit({
1793
1996
  action: "inspect",
1794
1997
  surfaceId: entry.surface.id
@@ -1796,14 +1999,20 @@ function createDataSurfaceTools(options) {
1796
1999
  return descriptor(entry.surface, entry.schema);
1797
2000
  }),
1798
2001
  tool(DATA_QUERY_TOOL_SLUG, DATA_QUERY_FUNCTION_NAME, DATA_QUERY_TOOL_DESCRIPTION, DATA_QUERY_TOOL_PARAMETERS, async ({ run, args, db }) => {
1799
- run.assertToolAllowed(DATA_QUERY_TOOL_SLUG);
1800
- const entry = findSurface(await catalog(run, "query"), args.surfaceId);
1801
- if (!entry) throw new DataSurfaceDeniedError();
1802
- const request = normalizeSurfaceRequest(requestFromArgs(args), entry.schema);
2002
+ await assertAllowed(run, "query", DATA_QUERY_TOOL_SLUG);
2003
+ const queryArgs = placeSurfaceId(args, "query");
2004
+ const entry = findSurface(await catalog(run, "query"), queryArgs.surfaceId);
2005
+ if (!entry) throw await deny(run, "query", queryArgs.surfaceId, void 0, isRecord$1(queryArgs.request) ? queryArgs.request.requestId : void 0);
2006
+ const surfaceId = entry.surface.id;
2007
+ const example = (raw) => validQueryExample(surfaceId, entry.schema, raw ?? (isRecord$1(queryArgs.request) ? queryArgs.request : queryArgs));
2008
+ const request = normalizeSurfaceRequest(requestFromArgs(queryArgs, () => example()), entry.schema, surfaceId);
1803
2009
  const principal = principalFromRun$1(run);
1804
2010
  const signal = new AbortController();
1805
2011
  const executor = entry.surface.execute ?? options.execute;
1806
- if (!executor) throw new DataSurfaceDeniedError();
2012
+ if (!executor) {
2013
+ await reportFailure(options, run, "query", surfaceId, void 0, /* @__PURE__ */ new Error("Data surface has no executor."));
2014
+ throw new DataSurfaceQueryError();
2015
+ }
1807
2016
  try {
1808
2017
  const internal = buildInternalQuery(request, entry.schema);
1809
2018
  const raw = await bounded(executor(entry.surface, internal.request, {
@@ -1812,7 +2021,7 @@ function createDataSurfaceTools(options) {
1812
2021
  db: run.context.database ?? db,
1813
2022
  signal: signal.signal
1814
2023
  }).catch((error) => {
1815
- if (error instanceof DataQueryValidationError && EXECUTOR_REQUEST_ERROR_CODES.has(error.code)) throw new DataSurfaceRequestError(error.publicMessage, error.code);
2024
+ if (error instanceof DataQueryValidationError && EXECUTOR_REQUEST_ERROR_CODES.has(error.code)) throw new DataSurfaceRequestError(`${error.publicMessage.replace(/\.?$/, ".")} ${example(request)}`, error.code);
1816
2025
  throw error;
1817
2026
  }), deadlineMs, signal);
1818
2027
  const rawRecord = isRecord$1(raw) ? raw : void 0;
@@ -2614,8 +2823,8 @@ function reportCatalogMetadata(definition, descriptor, run, auditAvailable = fal
2614
2823
  } : {}
2615
2824
  };
2616
2825
  }
2617
- async function configuredReports(options, run) {
2618
- return typeof options.reports === "function" ? options.reports(run) : options.reports;
2826
+ async function configuredReports(options, run, context) {
2827
+ return typeof options.reports === "function" ? context ? options.reports(run, context) : options.reports(run) : options.reports;
2619
2828
  }
2620
2829
  async function reportEntry(options, run, reportId) {
2621
2830
  const requested = requiredString(reportId, "reportId");
@@ -2667,6 +2876,7 @@ async function createReportDataSurfaceDefinition(definition, run, auditAvailable
2667
2876
  className: descriptor.reportClassName,
2668
2877
  label: definition.label ?? descriptor.reportClassName,
2669
2878
  ...definition.description ? { description: definition.description } : {},
2879
+ ...definition.rowCountHint !== void 0 ? { rowCountHint: definition.rowCountHint } : {},
2670
2880
  metadata: reportCatalogMetadata(definition, descriptor, run, auditAvailable),
2671
2881
  schema: querySchema(descriptor),
2672
2882
  execute: async (_surface, request, context) => {
@@ -2684,8 +2894,8 @@ async function createReportDataSurfaceDefinition(definition, run, auditAvailable
2684
2894
  }
2685
2895
  };
2686
2896
  }
2687
- async function dataSurfaceCatalog(options, run) {
2688
- return Promise.all((await configuredReports(options, run)).map((definition) => createReportDataSurfaceDefinition(definition, run, typeof options.audit === "function")));
2897
+ async function dataSurfaceCatalog(options, run, context) {
2898
+ return Promise.all((await configuredReports(options, run, context)).map((definition) => createReportDataSurfaceDefinition(definition, run, typeof options.audit === "function")));
2689
2899
  }
2690
2900
  function commandResultIsBound(ack, command) {
2691
2901
  if (typeof ack !== "object" || ack === null) return false;
@@ -2705,7 +2915,7 @@ function lifecycleOptions(db) {
2705
2915
  function createReportDataSurfaceTools(options) {
2706
2916
  const generic = createDataSurfaceTools({
2707
2917
  ...options.dataSurface,
2708
- surfaces: (run) => dataSurfaceCatalog(options, run)
2918
+ surfaces: (run, context) => dataSurfaceCatalog(options, run, context)
2709
2919
  });
2710
2920
  const query = aiTool(REPORT_QUERY_TOOL_SLUG, REPORT_QUERY_FUNCTION_NAME, "Run a bounded report query silently, in the background, or with an acknowledged browser update.", {
2711
2921
  type: "object",
@@ -3296,6 +3506,27 @@ function isTenantField(name, field, tenantField) {
3296
3506
  function isPolicyExcludedField(name, field, tenantField, exclude) {
3297
3507
  return name.startsWith("_") || exclude.has(name) || isRestrictedField(field) || isTransientField(field) || isTenantField(name, field, tenantField);
3298
3508
  }
3509
+ var schemaLogger;
3510
+ function dataSurfaceLog() {
3511
+ schemaLogger ??= createLogger({ level: "info" });
3512
+ return schemaLogger;
3513
+ }
3514
+ function declaredEnumValues(qualifiedName, name, field, type, enforce) {
3515
+ const declared = field.enum ?? meta(field).enum;
3516
+ if (!Array.isArray(declared) || declared.length === 0) return void 0;
3517
+ try {
3518
+ return normalizeDataQueryFieldValues(declared.map((value) => ({ value })), type, name);
3519
+ } catch (error) {
3520
+ if (!(error instanceof DataQueryValidationError)) throw error;
3521
+ const reason = `${qualifiedName}.${name} enum cannot become data-query values: ${error.message}`;
3522
+ if (enforce) throw new Error(`${reason} (enforceDerivedValues is set)`);
3523
+ dataSurfaceLog().warn(`${reason}; the field is advertised without values.`, {
3524
+ qualifiedName,
3525
+ field: name
3526
+ });
3527
+ return;
3528
+ }
3529
+ }
3299
3530
  async function registryFieldPolicyExclusionSet(qualifiedName, exclude) {
3300
3531
  const registered = await ObjectRegistry.getAllFields(qualifiedName);
3301
3532
  const tenantField = getTenantScopedConfig(qualifiedName)?.field ?? "tenantId";
@@ -3313,13 +3544,18 @@ async function buildQuerySchemaForClass(qualifiedName, options) {
3313
3544
  const type = queryFieldType(field.type);
3314
3545
  if (!type) continue;
3315
3546
  const filterOperators = idFields.has(name) ? [...ID_FIELD_FILTER_OPERATORS] : filterOperatorsFor(type);
3547
+ const values = idFields.has(name) ? void 0 : declaredEnumValues(qualifiedName, name, field, type, options.enforceDerivedValues);
3316
3548
  fields.push({
3317
3549
  id: name,
3318
3550
  type,
3319
3551
  projectable: true,
3320
3552
  sortable: type !== "json",
3321
3553
  facetable: name !== options.identityField && (type === "string" || type === "boolean" || type === "number"),
3322
- ...filterOperators ? { filterOperators } : {}
3554
+ ...filterOperators ? { filterOperators } : {},
3555
+ ...values ? {
3556
+ values,
3557
+ ...options.enforceDerivedValues ? {} : { valuesEnforced: false }
3558
+ } : {}
3323
3559
  });
3324
3560
  }
3325
3561
  if (!fields.find((field) => field.id === options.identityField)) throw new Error(`${qualifiedName} does not declare a queryable '${options.identityField}' field`);
@@ -3349,6 +3585,7 @@ function buildDataQuerySchemaForClass(qualifiedName, options = {}) {
3349
3585
  const maxResultBytes = options.maxResultBytes ?? DEFAULT_MAX_RESULT_BYTES;
3350
3586
  const cursorPagination = options.cursorPagination ?? true;
3351
3587
  const facets = options.facets ?? true;
3588
+ const enforceDerivedValues = options.enforceDerivedValues === true;
3352
3589
  const canonicalDefaultSort = (options.defaultSort ?? []).map((term) => `${term.field}:${term.direction}`).join(",");
3353
3590
  const key = [
3354
3591
  qualifiedName,
@@ -3359,7 +3596,8 @@ function buildDataQuerySchemaForClass(qualifiedName, options = {}) {
3359
3596
  maxResultBytes,
3360
3597
  canonicalDefaultSort,
3361
3598
  cursorPagination,
3362
- facets
3599
+ facets,
3600
+ enforceDerivedValues
3363
3601
  ].join("::");
3364
3602
  const cached = schemaCache.get(key);
3365
3603
  if (cached) return cached;
@@ -3371,7 +3609,8 @@ function buildDataQuerySchemaForClass(qualifiedName, options = {}) {
3371
3609
  maxResultBytes,
3372
3610
  defaultSort: options.defaultSort,
3373
3611
  cursorPagination,
3374
- facets
3612
+ facets,
3613
+ enforceDerivedValues
3375
3614
  }).catch((cause) => {
3376
3615
  schemaCache.delete(key);
3377
3616
  throw cause;
@@ -3831,7 +4070,8 @@ async function createSmrtCollectionDataSurfaceDefinition(options) {
3831
4070
  maxResultBytes: options.maxResultBytes,
3832
4071
  defaultSort: options.defaultSort,
3833
4072
  cursorPagination: options.cursorPagination,
3834
- facets: options.facets ?? (typeof options.collection === "function" ? true : typeof options.collection.facets === "function")
4073
+ facets: options.facets ?? (typeof options.collection === "function" ? true : typeof options.collection.facets === "function"),
4074
+ enforceDerivedValues: options.enforceDerivedValues
3835
4075
  });
3836
4076
  const executableSchema = redactedQuerySchema(schema);
3837
4077
  assertSmrtCollectionQuerySchema(executableSchema);
@@ -3841,6 +4081,7 @@ async function createSmrtCollectionDataSurfaceDefinition(options) {
3841
4081
  className: options.qualifiedName,
3842
4082
  label: options.label ?? options.qualifiedName,
3843
4083
  description: options.description ?? "Bounded, tenant-safe rows, counts, facets, and continuations.",
4084
+ ...options.rowCountHint !== void 0 ? { rowCountHint: options.rowCountHint } : {},
3844
4085
  metadata: {
3845
4086
  domain: "smrt-collection",
3846
4087
  adapter: "SmrtCollection",
@@ -4091,6 +4332,6 @@ function getManifestForAgent(manifests, agentTypeOrIdentifier) {
4091
4332
  return manifests.get(agentTypeOrIdentifier) || manifests.get(getAgentClassName(agentTypeOrIdentifier));
4092
4333
  }
4093
4334
  //#endregion
4094
- export { AGENT_COMPLETED_SIGNAL, AGENT_CONFIGS_TABLE, AGENT_INVOKE_SIGNAL, AGENT_SCHEDULE_SLUG_BACKFILL, AGENT_SCHEDULE_TABLE, Agent, AgentConfig, AgentConfigCollection, AgentSchedule, AgentScheduleCollection, AgentScheduleSlugBackfillError, AgentUIRegistry, DATA_DISCOVER_FUNCTION_NAME, DATA_DISCOVER_TOOL_SLUG, DATA_INSPECT_FUNCTION_NAME, DATA_INSPECT_TOOL_SLUG, DATA_QUERY_FUNCTION_NAME, DATA_QUERY_TOOL_PARAMETERS, DATA_QUERY_TOOL_SLUG, DEFAULT_DATA_SURFACE_DEADLINE_MS, DataSurfaceDeadlineError, DataSurfaceDeniedError, DataSurfaceQueryError, DataSurfaceRequestError, DataSurfaceResultOrderError, DelegationDepthExceededError, ID_FIELD_FILTER_OPERATORS, INVOKE_AGENT_FUNCTION_NAME, INVOKE_AGENT_TOOL_SLUG, MAX_DATA_SURFACE_DEADLINE_MS, MAX_DELEGATION_DEPTH, PLAYBOOK_PREFLIGHT_FUNCTION_NAME, PLAYBOOK_PREFLIGHT_TOOL_SLUG, PrincipalToolNotAllowedError, PrincipalWideningError, REPORT_DRILLDOWN_FUNCTION_NAME, REPORT_DRILLDOWN_TOOL_SLUG, REPORT_EXPORT_FUNCTION_NAME, REPORT_EXPORT_TOOL_SLUG, REPORT_QUERY_FUNCTION_NAME, REPORT_QUERY_TOOL_SLUG, REPORT_REFRESH_FUNCTION_NAME, REPORT_REFRESH_TOOL_SLUG, ReportDataSurfaceConfigurationError, ReportDataSurfaceVisibleError, TENANT_AGENTS_TABLE, TenantAgent, TenantAgentCollection, TenantAgentConfigKeyRepairError, agentInvokeSignalType, assertIdFieldConditions, assertPrincipalNotWidened, assertSmrtCollectionQuerySchema, assertWithinDelegationDepth, buildDataQuerySchemaForClass, canonicalScheduleSlug, clearSmrtCollectionQuerySchemaCache, createDataSurfaceQueryFingerprint, createDataSurfaceTools, createDispatchInvokeTransport, createInvokeAgentTool, createPlaybookPreflightTool, createReportDataSurfaceDefinition, createReportDataSurfaceTools, createSmrtCollectionDataSurfaceDefinition, createUIRegistry, dataQueryOrderByTerms, deriveDelegationEnvelope, emitAgentCompletion, executeAsPrincipal, executeDelegatedInvocation, executeSmrtCollectionQuery, filterPlaybooksByPreflight, getAgentClassName, getAgentTypeName, getClassConfigResolvers, getConfigResolver, inlineInvokeAgentTransport, instanceScopedSubscriber, isAgentCreateEntryAvailable, isLazyConfigSentinel, listConfigResolvers, mergeFilters, migrateAgentScheduleSlugs, normalizeSort, parseTenantAgentConfigOwnerId, planAgentScheduleSlugMigration, planTenantAgentConfigKeyRepair, planTenantAgentConfigKeyRepairRows, playbookStepCollection, playbookStepToolSlug, processAgentInvocations, registerConfigResolver, repairTenantAgentConfigKeys, resetConfigResolvers, resolveAgentAIOptions, resolveAgentCreateEntries, resolveAgentLearning, resolveLazyConfig, rootDelegationEnvelope, surfaceAgentCompletions, tenantAgentConfigOwnerId, unregisterConfigResolver, uuidColumnFieldIds };
4335
+ export { AGENT_COMPLETED_SIGNAL, AGENT_CONFIGS_TABLE, AGENT_INVOKE_SIGNAL, AGENT_SCHEDULE_SLUG_BACKFILL, AGENT_SCHEDULE_TABLE, Agent, AgentConfig, AgentConfigCollection, AgentSchedule, AgentScheduleCollection, AgentScheduleSlugBackfillError, AgentUIRegistry, DATA_DISCOVER_FUNCTION_NAME, DATA_DISCOVER_TOOL_SLUG, DATA_INSPECT_FUNCTION_NAME, DATA_INSPECT_TOOL_SLUG, DATA_QUERY_FUNCTION_NAME, DATA_QUERY_TOOL_PARAMETERS, DATA_QUERY_TOOL_SLUG, DEFAULT_DATA_SURFACE_DEADLINE_MS, DataSurfaceActionDeniedError, DataSurfaceDeadlineError, DataSurfaceDeniedError, DataSurfaceQueryError, DataSurfaceRequestError, DataSurfaceResultOrderError, DelegationDepthExceededError, ID_FIELD_FILTER_OPERATORS, INVOKE_AGENT_FUNCTION_NAME, INVOKE_AGENT_TOOL_SLUG, MAX_DATA_SURFACE_DEADLINE_MS, MAX_DATA_SURFACE_ROW_COUNT_HINT_CHARS, MAX_DATA_SURFACE_SUMMARY_DESCRIPTION_CHARS, MAX_DELEGATION_DEPTH, PLAYBOOK_PREFLIGHT_FUNCTION_NAME, PLAYBOOK_PREFLIGHT_TOOL_SLUG, PrincipalToolNotAllowedError, PrincipalWideningError, REPORT_DRILLDOWN_FUNCTION_NAME, REPORT_DRILLDOWN_TOOL_SLUG, REPORT_EXPORT_FUNCTION_NAME, REPORT_EXPORT_TOOL_SLUG, REPORT_QUERY_FUNCTION_NAME, REPORT_QUERY_TOOL_SLUG, REPORT_REFRESH_FUNCTION_NAME, REPORT_REFRESH_TOOL_SLUG, ReportDataSurfaceConfigurationError, ReportDataSurfaceVisibleError, TENANT_AGENTS_TABLE, TenantAgent, TenantAgentCollection, TenantAgentConfigKeyRepairError, agentInvokeSignalType, assertIdFieldConditions, assertPrincipalNotWidened, assertSmrtCollectionQuerySchema, assertWithinDelegationDepth, buildDataQuerySchemaForClass, canonicalScheduleSlug, clearSmrtCollectionQuerySchemaCache, createDataSurfaceQueryFingerprint, createDataSurfaceTools, createDispatchInvokeTransport, createInvokeAgentTool, createPlaybookPreflightTool, createReportDataSurfaceDefinition, createReportDataSurfaceTools, createSmrtCollectionDataSurfaceDefinition, createUIRegistry, dataQueryOrderByTerms, deriveDelegationEnvelope, emitAgentCompletion, executeAsPrincipal, executeDelegatedInvocation, executeSmrtCollectionQuery, filterPlaybooksByPreflight, getAgentClassName, getAgentTypeName, getClassConfigResolvers, getConfigResolver, inlineInvokeAgentTransport, instanceScopedSubscriber, isAgentCreateEntryAvailable, isLazyConfigSentinel, listConfigResolvers, mergeFilters, migrateAgentScheduleSlugs, normalizeDataSurfaceRowCountHint, normalizeSort, parseTenantAgentConfigOwnerId, planAgentScheduleSlugMigration, planTenantAgentConfigKeyRepair, planTenantAgentConfigKeyRepairRows, playbookStepCollection, playbookStepToolSlug, processAgentInvocations, registerConfigResolver, repairTenantAgentConfigKeys, resetConfigResolvers, resolveAgentAIOptions, resolveAgentCreateEntries, resolveAgentLearning, resolveLazyConfig, rootDelegationEnvelope, surfaceAgentCompletions, tenantAgentConfigOwnerId, unregisterConfigResolver, uuidColumnFieldIds };
4095
4336
 
4096
4337
  //# sourceMappingURL=index.js.map