@happyvertical/smrt-agents 0.55.23 → 0.55.24

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/AGENTS.md CHANGED
@@ -85,7 +85,7 @@ from `./ui` filters, builds `href`, and sorts. Non-relative routes are dropped.
85
85
 
86
86
  ## AgentSchedule
87
87
 
88
- Cron-based scheduling stored in `_smrt_agent_schedules`. Fields: `agentType`, `cron`, `method` (default: 'run'), `maxConcurrent`, `timeout`. Executed by ScheduleRunner from smrt-jobs.
88
+ Cron-based scheduling stored in `_smrt_agent_schedules`. Fields: `agentType`, `cron`, `timezone` (IANA, default `UTC`; blank → `UTC`), `method` (default: 'run'), `maxConcurrent`, `timeout`. Executed by ScheduleRunner from smrt-jobs. `calculateNextRun()` and the runner re-arm share smrt-jobs' `getNextCronDate(cron, timezone)`, so both evaluate the cron in the row's zone, DST-correct (#3859); an unknown zone sets `status: 'error'` with the parser message in `lastError`.
89
89
 
90
90
  ## Lazy agent_config Resolution (issue #1161)
91
91
 
package/dist/index.js CHANGED
@@ -10,8 +10,9 @@ import { createHash, randomUUID } from "node:crypto";
10
10
  import { BackfillTracker } from "@happyvertical/smrt-core/migrations";
11
11
  import { createServerStepEvaluator, preflightPlaybook } from "@happyvertical/smrt-playbooks";
12
12
  import { applyReportExport, applyReportRefresh, buildReportAdapterDescriptor, buildReportDrilldownQuery, createReportExportRequest, createReportExportSnapshot, previewReportExport, previewReportRefresh, queryReportMaterializedRows } from "@happyvertical/smrt-reports";
13
+ import { getNextCronDate } from "@happyvertical/smrt-jobs";
13
14
  //#region src/__smrt-register__.ts
14
- ObjectRegistry.registerPackageManifest(JSON.parse(`{"version":"1.0.0","timestamp":0,"packageName":"@happyvertical/smrt-agents","packageVersion":"0.55.23","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"},"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"},"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"},"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.55.24","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"},"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"},"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"},"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
16
  //#endregion
16
17
  //#region src/ai-config.ts
17
18
  var DEFAULT_SECRET_FALLBACK = "ancestors";
@@ -3004,7 +3005,8 @@ var AgentSchedule = class extends SmrtObject {
3004
3005
  await this.save();
3005
3006
  }
3006
3007
  /**
3007
- * Calculate the next run time based on cron expression
3008
+ * Calculate the next run time from the cron expression, evaluated in
3009
+ * {@link timezone} (#3859).
3008
3010
  */
3009
3011
  calculateNextRun() {
3010
3012
  if (!this.cron || !this.enabled) {
@@ -3012,12 +3014,11 @@ var AgentSchedule = class extends SmrtObject {
3012
3014
  return;
3013
3015
  }
3014
3016
  try {
3015
- const next = getNextCronDate(this.cron, this.timezone);
3016
- this.nextRun = next;
3017
- } catch {
3017
+ this.nextRun = getNextCronDate(this.cron, this.timezone?.trim() || "UTC");
3018
+ } catch (error) {
3018
3019
  this.nextRun = null;
3019
3020
  this.status = "error";
3020
- this.lastError = `Invalid cron expression: ${this.cron}`;
3021
+ this.lastError = error instanceof Error && error.message ? error.message : `Invalid cron expression: ${this.cron}`;
3021
3022
  }
3022
3023
  }
3023
3024
  /**
@@ -3176,51 +3177,6 @@ var AgentScheduleCollection = class extends SmrtCollection {
3176
3177
  });
3177
3178
  }
3178
3179
  };
3179
- function getNextCronDate(cron, _timezone = "UTC") {
3180
- const parts = cron.trim().split(/\s+/);
3181
- if (parts.length !== 5) throw new Error(`Invalid cron expression: expected 5 fields, got ${parts.length}`);
3182
- const [minuteExpr, hourExpr, dayExpr, monthExpr, dowExpr] = parts;
3183
- const candidate = /* @__PURE__ */ new Date(/* @__PURE__ */ new Date());
3184
- candidate.setSeconds(0);
3185
- candidate.setMilliseconds(0);
3186
- candidate.setMinutes(candidate.getMinutes() + 1);
3187
- const dayIsWildcard = dayExpr === "*";
3188
- const dowIsWildcard = dowExpr === "*";
3189
- const maxIterations = 525600;
3190
- for (let i = 0; i < maxIterations; i++) {
3191
- const dayMatches = matchesCronField(candidate.getDate(), dayExpr);
3192
- const dow = candidate.getDay();
3193
- const dowMatches = matchesCronField(dow, dowExpr) || dow === 0 && matchesCronField(7, dowExpr);
3194
- let dayOfMonthOrWeekMatches;
3195
- if (!dayIsWildcard && !dowIsWildcard) dayOfMonthOrWeekMatches = dayMatches || dowMatches;
3196
- else if (!dayIsWildcard) dayOfMonthOrWeekMatches = dayMatches;
3197
- else if (!dowIsWildcard) dayOfMonthOrWeekMatches = dowMatches;
3198
- else dayOfMonthOrWeekMatches = true;
3199
- if (matchesCronField(candidate.getMonth() + 1, monthExpr) && dayOfMonthOrWeekMatches && matchesCronField(candidate.getHours(), hourExpr) && matchesCronField(candidate.getMinutes(), minuteExpr)) return candidate;
3200
- candidate.setMinutes(candidate.getMinutes() + 1);
3201
- }
3202
- throw new Error(`Could not find next run date for cron: ${cron}`);
3203
- }
3204
- function matchesCronField(value, expr) {
3205
- if (expr === "*") return true;
3206
- if (expr.includes("/")) {
3207
- const [range, stepStr] = expr.split("/");
3208
- const step = parseInt(stepStr, 10);
3209
- if (range === "*") return value % step === 0;
3210
- if (range.includes("-")) {
3211
- const [startStr, endStr] = range.split("-");
3212
- const start = parseInt(startStr, 10);
3213
- if (value < start || value > parseInt(endStr, 10)) return false;
3214
- return (value - start) % step === 0;
3215
- }
3216
- }
3217
- if (expr.includes("-")) {
3218
- const [startStr, endStr] = expr.split("-");
3219
- return value >= parseInt(startStr, 10) && value <= parseInt(endStr, 10);
3220
- }
3221
- if (expr.includes(",")) return expr.split(",").map((v) => parseInt(v.trim(), 10)).includes(value);
3222
- return value === parseInt(expr, 10);
3223
- }
3224
3180
  //#endregion
3225
3181
  //#region src/smrt-collection-data-surface.ts
3226
3182
  var DEFAULT_PAGE_LIMIT = 50;