@happyvertical/smrt-agents 0.54.2 → 0.54.4

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.
@@ -29,12 +29,19 @@ function parseTenantAgentConfigOwnerId(ownerId, tenantId) {
29
29
  //#region src/config.ts
30
30
  var __defProp = Object.defineProperty;
31
31
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
32
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
33
+ enumerable: true,
34
+ configurable: true,
35
+ writable: true,
36
+ value
37
+ }) : obj[key] = value;
32
38
  var __decorateClass = (decorators, target, key, kind) => {
33
39
  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
34
40
  for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
35
41
  if (kind && result) __defProp(target, key, result);
36
42
  return result;
37
43
  };
44
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
38
45
  var AgentConfig = class extends SmrtObject {
39
46
  tenantId = null;
40
47
  agentId = "";
@@ -121,6 +128,7 @@ var AgentConfig = class extends SmrtObject {
121
128
  return config;
122
129
  }
123
130
  };
131
+ __publicField(AgentConfig, "__smrtPackage__", "@happyvertical/smrt-agents");
124
132
  __decorateClass([tenantId({ nullable: true })], AgentConfig.prototype, "tenantId", 2);
125
133
  __decorateClass([field({ type: "text" })], AgentConfig.prototype, "agentId", 2);
126
134
  __decorateClass([field({ type: "text" })], AgentConfig.prototype, "agentClass", 2);
@@ -242,4 +250,4 @@ async function executeAsPrincipal(options, fn) {
242
250
  //#endregion
243
251
  export { getAgentClassName as a, instanceScopedSubscriber as c, AgentConfigCollection as i, parseTenantAgentConfigOwnerId as l, executeAsPrincipal as n, getAgentTypeAliases as o, AgentConfig as r, getAgentTypeName as s, PrincipalToolNotAllowedError as t, tenantAgentConfigOwnerId as u };
244
252
 
245
- //# sourceMappingURL=execute-as-principal-DtwCUq2t.js.map
253
+ //# sourceMappingURL=execute-as-principal-tnjcjKIp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute-as-principal-tnjcjKIp.js","names":["tenantId"],"sources":["../../src/identity.ts","../../src/config.ts","../../src/execute-as-principal.ts"],"sourcesContent":["import { getClassName, ObjectRegistry } from '@happyvertical/smrt-core';\n\n/**\n * Return the canonical agent type identifier for storage and dispatch routing.\n *\n * Uses the registry's qualified name when available and falls back to the input\n * name for dynamically defined or unregistered classes.\n */\nexport function getAgentTypeName(name: string): string {\n const registered = ObjectRegistry.getClass(name);\n return registered?.qualifiedName || registered?.name || name;\n}\n\n/**\n * Return the human-readable class name for UI and logs.\n */\nexport function getAgentClassName(name: string): string {\n const registered = ObjectRegistry.getClass(name);\n return registered?.name || getClassName(name);\n}\n\n/**\n * Return all meaningful aliases for an agent type.\n *\n * The qualified name is first so persistence lookups prefer canonical rows,\n * while the simple class name keeps legacy rows discoverable during migration.\n */\nexport function getAgentTypeAliases(name: string): string[] {\n return Array.from(\n new Set([getAgentTypeName(name), getAgentClassName(name)].filter(Boolean)),\n );\n}\n\n/**\n * Compose a per-instance dispatch subscriber identity from an agent type and an\n * optional instance key (#1890).\n *\n * Multiple durable instances of one agent class each need their own subscriber\n * name so their dispatch subscriptions and pending dispatches never collide —\n * that is what keeps two instances from double-processing each other's work.\n *\n * Returns the bare `agentType` when `instanceKey` is nullish/empty, so a\n * **singleton** agent's subscriber is byte-for-byte unchanged (the N=1 default).\n * When a key is present the identity is `` `${agentType}#${instanceKey}` `` — a\n * stable, reversible composition (the type never contains `#`).\n */\nexport function instanceScopedSubscriber(\n agentType: string,\n instanceKey?: string | null,\n): string {\n return instanceKey ? `${agentType}#${instanceKey}` : agentType;\n}\n\n/**\n * The `agent_configs.agent_id` that owns a tenant-bound agent's slot config\n * when the binding has no persisted Agent row: `<tenantId>:<agentType>`,\n * with the type canonicalized through {@link getAgentTypeName} (qualified\n * `@scope/package:Class` when the class is registered).\n *\n * `serializeResolvedAgent()` gives a resolved agent this id, and the admin\n * settings panels read and save slot configs under it, so seeders, schedule\n * sync, and any other writer must compose it with this helper rather than by\n * hand. Before smrt #1092 the id used the bare class name\n * (`<tenant>:Praeco`); `repairTenantAgentConfigKeys()` moves such rows.\n */\nexport function tenantAgentConfigOwnerId(\n tenantId: string,\n agentType: string,\n): string {\n return `${tenantId}:${getAgentTypeName(agentType)}`;\n}\n\n/**\n * Split a {@link tenantAgentConfigOwnerId} for a known tenant: the stored\n * agent type after `<tenantId>:`, or null when the owner id is not\n * tenant-derived (a persona id, an Agent row id, another tenant's key).\n */\nexport function parseTenantAgentConfigOwnerId(\n ownerId: string,\n tenantId: string,\n): string | null {\n if (!tenantId) return null;\n const prefix = `${tenantId}:`;\n if (!ownerId.startsWith(prefix)) return null;\n const agentType = ownerId.slice(prefix.length);\n return agentType || null;\n}\n","/**\n * AgentConfig - Persistent configuration storage for agents\n *\n * This module provides database-backed configuration for agents,\n * enabling consuming apps to persist agent settings.\n *\n * @module\n */\n\nimport {\n field,\n type SmrtClassOptions,\n SmrtCollection,\n SmrtObject,\n smrt,\n} from '@happyvertical/smrt-core';\nimport {\n queryGlobal,\n queryWithGlobals,\n TenantScoped,\n tenantId,\n} from '@happyvertical/smrt-tenancy';\nimport { getAgentTypeName } from './identity.js';\n\n/**\n * AgentConfig stores agent configuration in the database\n *\n * Each config record maps to a UI slot for an agent configuration owner:\n * - agentId: The durable config owner ID (persona ID for persona-backed\n * instances; Agent STI row ID for legacy/singleton instances)\n * - agentClass: The canonical agent type (qualified name when available)\n * - slotId: The configuration slot (e.g., 'sources', 'settings')\n * - configData: JSON object containing the configuration\n *\n * @example\n * ```typescript\n * // Save config for an agent slot\n * const config = new AgentConfig({\n * agentId: agent.id,\n * agentClass: 'Praeco',\n * slotId: 'sources',\n * configData: { scrapers: ['civicweb', 'govstack'] },\n * db: options.db\n * });\n * await config.initialize();\n * await config.save();\n * ```\n */\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableName: 'agent_configs',\n api: { include: ['list', 'get', 'create', 'update', 'delete'] },\n mcp: { include: ['list', 'get'] },\n cli: { skipApiCheck: true },\n})\nexport class AgentConfig extends SmrtObject { static __smrtPackage__ = \"@happyvertical/smrt-agents\";\n /**\n * Tenant ID for multi-tenant isolation\n * Nullable to support both tenant-scoped and global agent configs\n */\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n /**\n * Durable configuration owner ID.\n *\n * The database column retains the historical `agent_id` name for backward\n * compatibility. Persona-backed runtimes store their `AgentPersona.id` here;\n * legacy runtimes store the persisted Agent STI row id.\n */\n @field({ type: 'text' })\n agentId: string = '';\n\n /**\n * Canonical agent type for this config (qualified name when available)\n */\n @field({ type: 'text' })\n agentClass: string = '';\n\n /**\n * UI slot ID (e.g., 'sources', 'settings', 'reports')\n */\n @field({ type: 'text' })\n slotId: string = '';\n\n /**\n * Configuration data stored as JSON\n *\n * Sensitive (#1540) for backward compatibility with legacy blobs, so this is\n * excluded from generated API/MCP responses and rejected as a `where` filter\n * key. New settings schemas must keep credentials in a dedicated secrets\n * service rather than this field.\n */\n @field({ type: 'json', sensitive: true })\n configData: Record<string, unknown> = {};\n\n /**\n * Schema version for future migrations\n */\n @field({ type: 'integer' })\n schemaVersion: number = 1;\n\n /**\n * Load all configs for a specific agent\n *\n * @param agentId - Agent instance ID\n * @param options - Database options\n * @returns Map of slotId → configData\n */\n static async forAgent(\n agentId: string,\n options: SmrtClassOptions,\n ): Promise<Map<string, Record<string, unknown>>> {\n const configsByAgent = await AgentConfig.forAgents([agentId], options);\n return configsByAgent.get(agentId) ?? new Map();\n }\n\n /**\n * Load configs for multiple agents in a single query.\n *\n * @param agentIds - Agent instance IDs\n * @param options - Database options\n * @returns Map of agentId -> (slotId -> configData)\n */\n static async forAgents(\n agentIds: string[],\n options: SmrtClassOptions,\n ): Promise<Map<string, Map<string, Record<string, unknown>>>> {\n const configsByAgent = new Map<\n string,\n Map<string, Record<string, unknown>>\n >();\n if (agentIds.length === 0) {\n return configsByAgent;\n }\n\n const collection = await AgentConfigCollection.create(options);\n const configs = await collection.list({\n where: { 'agentId in': agentIds },\n });\n\n for (const config of configs) {\n if (!configsByAgent.has(config.agentId)) {\n configsByAgent.set(config.agentId, new Map());\n }\n configsByAgent.get(config.agentId)?.set(config.slotId, config.configData);\n }\n\n return configsByAgent;\n }\n\n /**\n * Load config for a specific agent and slot\n *\n * @param agentId - Agent instance ID\n * @param slotId - UI slot ID\n * @param options - Database options\n * @returns Config data or undefined if not found\n */\n static async forSlot(\n agentId: string,\n slotId: string,\n options: SmrtClassOptions,\n ): Promise<Record<string, unknown> | undefined> {\n const collection = await AgentConfigCollection.create(options);\n const configs = await collection.list({\n where: { agentId, slotId },\n limit: 1,\n });\n return configs[0]?.configData;\n }\n\n /**\n * Save or update config for an agent slot\n *\n * @param data - Config data including agentId, agentClass, slotId, configData\n * @param options - Database options\n * @returns Saved AgentConfig instance\n */\n static async saveSlot(\n data: {\n agentId: string;\n agentClass: string;\n slotId: string;\n configData: Record<string, unknown>;\n },\n options: SmrtClassOptions,\n ): Promise<AgentConfig> {\n const normalizedAgentClass = getAgentTypeName(data.agentClass);\n const collection = await AgentConfigCollection.create(options);\n\n // Check for existing config using list with where clause\n const existingConfigs = await collection.list({\n where: { agentId: data.agentId, slotId: data.slotId },\n limit: 1,\n });\n\n if (existingConfigs.length > 0) {\n // Update existing\n const existing = existingConfigs[0];\n existing.configData = data.configData;\n existing.agentClass = normalizedAgentClass;\n await existing.save();\n return existing;\n }\n\n // Create new\n const config = await collection.create({\n agentId: data.agentId,\n agentClass: normalizedAgentClass,\n slotId: data.slotId,\n configData: data.configData,\n slug: `${data.agentId}-${data.slotId}`,\n });\n await config.save();\n return config;\n }\n}\n\n/**\n * Collection for AgentConfig objects\n */\nexport class AgentConfigCollection extends SmrtCollection<AgentConfig> {\n static readonly _itemClass = AgentConfig;\n\n /**\n * Find all configs for a specific tenant\n * @param tenantId - Tenant ID to filter by\n * @returns Array of AgentConfig objects for the tenant\n */\n async findByTenant(tenantId: string): Promise<AgentConfig[]> {\n return this.list({ where: { tenantId } });\n }\n\n /**\n * Find all global configs (not associated with any tenant).\n *\n * Routes through the shared tenant-global helper so it does not throw under\n * an active tenant context (an explicit `tenant_id IS NULL` filter would be\n * flagged as an isolation violation). (#1600)\n *\n * @returns Array of global AgentConfig objects\n */\n async findGlobal(): Promise<AgentConfig[]> {\n return queryGlobal<AgentConfig>(this);\n }\n\n /**\n * Find configs for a tenant including global configs.\n *\n * Fails closed if an active tenant context requests a different tenant's\n * rows; the admin/system path keeps the cross-tenant capability. (#1600)\n *\n * @param tenantId - Tenant ID to include\n * @returns Array of AgentConfig objects for the tenant and global configs\n */\n async findWithGlobals(tenantId: string): Promise<AgentConfig[]> {\n return queryWithGlobals<AgentConfig>(\n this,\n tenantId,\n 'AgentConfig.findWithGlobals',\n );\n }\n}\n","/**\n * ExecuteAsPrincipal — run an agent's work AS its persona's bound user.\n *\n * This is deliberately NOT a new authorization layer. It reuses the framework's\n * existing principal-context machinery:\n *\n * - {@link withPrincipalPermissionContext} resolves the bound user's *live*\n * permission set (the standard {@link PermissionResolver} cascade) and\n * publishes `(smrt.user_id, smrt.tenant_id, smrt.permissions[])` onto the DB\n * session. With Postgres RLS enabled, the manifest-derived policies then bound\n * every query the agent makes per-`(table, action)` and per-tenant — through\n * any door (in-process \"side door\", REST, MCP), with no per-call re-checking.\n *\n * - Because RLS is Postgres-only and opt-in, the exec/tool seam must ALSO assert\n * the catalog permission for the `(collection, action)` when RLS is off\n * (SQLite/dev). {@link PrincipalRun.assertOperation} wraps\n * `assertOperationPermission` for exactly that, so the authority bound holds\n * on every adapter.\n *\n * The effective authority of an agent action is therefore:\n *\n * bound-user RBAC ∩ agent-class capability ceiling ∩ persona allowedTools\n *\n * where the RBAC half is enforced at the data layer (RLS) or the catalog seam\n * (`assertOperation`), and the tool half is enforced by\n * {@link PrincipalRun.assertToolAllowed} against `allowedTools` — which a\n * resolved persona has already intersected with the `TenantAgent` ceiling.\n *\n * Actions audit as on-behalf-of the originating user (see {@link PrincipalAuditEntry}).\n *\n * @packageDocumentation\n */\n\nimport { createLogger, type Logger } from '@happyvertical/logger';\nimport type { SmrtClassOptions } from '@happyvertical/smrt-core';\nimport {\n assertOperationPermission,\n type OperationPermissionCollectionInput,\n type OperationPermissionDecision,\n type PermissionResolver,\n type SessionPermissionRuntimeContext,\n withPrincipalPermissionContext,\n} from '@happyvertical/smrt-users';\n\n/**\n * The bound principal an agent runs as. A resolved persona structurally\n * satisfies this once its optional `runAsUserId` has been narrowed to a\n * concrete id — `allowedTools` on a `ResolvedPersona` is already the persona's\n * tools intersected with the `TenantAgent` capability ceiling.\n */\nexport interface PrincipalBinding {\n /** The user whose live permissions bound this execution. Required. */\n runAsUserId: string;\n /** Tenant the principal acts within. */\n tenantId: string | null;\n /**\n * The persona's tool allow-list (already capped by the agent-class ceiling).\n * This is a **fail-closed** whitelist, mirroring\n * `@happyvertical/smrt-chat`'s `AgentSession.isToolAllowed()` (S5 #1392): an\n * absent (`undefined`) or empty allow-list permits **NO** tools, never all of\n * them, so forgetting to pass it can only tighten authority. Resolved personas\n * always provide a concrete `string[]`.\n */\n allowedTools?: string[];\n /** Optional acting `Bot` profile id, recorded in the audit entry. */\n actsAsProfileId?: string | null;\n}\n\n/**\n * A single audit record describing an agent action performed by the bound\n * principal (`actorUserId`) on behalf of the originating user\n * (`onBehalfOfUserId`).\n */\nexport interface PrincipalAuditEntry {\n /** Action label, e.g. `'agent.run'`. */\n action: string;\n /** The persona's bound user the work ran as. */\n actorUserId: string;\n /** The user who triggered the agent, if known. */\n onBehalfOfUserId: string | null;\n /** Tenant the action ran within. */\n tenantId: string | null;\n /** Canonical agent class, when the caller supplies it. */\n agentClass?: string;\n /** Acting profile id, when the persona sets one. */\n actsAsProfileId?: string | null;\n /** Free-form additional context. */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Sink that records a {@link PrincipalAuditEntry}. Provide one to persist audit\n * rows (e.g. via `AuditLog.record`); when omitted, the entry is emitted as a\n * structured log line.\n */\nexport type PrincipalAuditSink = (\n entry: PrincipalAuditEntry,\n) => void | Promise<void>;\n\n/**\n * Options for {@link executeAsPrincipal}.\n */\nexport interface ExecuteAsPrincipalOptions extends SmrtClassOptions {\n /** The bound principal to run as. */\n principal: PrincipalBinding;\n /** The originating user the action is performed on behalf of (for audit). */\n onBehalfOfUserId?: string | null;\n /** Canonical agent class, recorded in the audit entry. */\n agentClass?: string;\n /** Audit action label. Defaults to `'agent.run'`. */\n action?: string;\n /** Extra audit metadata merged into the emitted entry. */\n auditMetadata?: Record<string, unknown>;\n /**\n * Pre-resolved permission slugs. When omitted, the principal's permissions\n * are resolved live so role changes reflect on the next execution.\n */\n permissions?: string[];\n /** Reuse an initialized resolver across executions. */\n resolver?: PermissionResolver;\n /** Opt into Postgres RLS transaction wrapping (defaults to package config). */\n postgresRls?: boolean;\n /**\n * Enter tenant context so tenant auto-filtering applies on every adapter.\n * Defaults to `true` whenever the principal has a tenant.\n */\n enterTenantContext?: boolean;\n /** Audit sink. Defaults to a structured log line. */\n audit?: PrincipalAuditSink;\n /** Logger used for the default audit sink. */\n logger?: Logger;\n}\n\n/**\n * Thrown when the persona attempts a tool outside its `allowedTools`.\n */\nexport class PrincipalToolNotAllowedError extends Error {\n readonly tool: string;\n readonly status = 403;\n\n constructor(tool: string) {\n super(`Tool '${tool}' is not permitted for this persona.`);\n this.name = 'PrincipalToolNotAllowedError';\n this.tool = tool;\n }\n}\n\n/**\n * The handle passed to the {@link executeAsPrincipal} body. Its\n * session-permission {@link context} is already published for the principal, so\n * data operations are bounded by RLS on Postgres. The assertions enforce the\n * remaining two authority dimensions.\n */\nexport interface PrincipalRun {\n /** The published session-permission runtime context for the principal. */\n context: SessionPermissionRuntimeContext;\n /** The principal's published (snapshot) permission slugs. */\n permissions: string[];\n /**\n * Present only when the caller bound this run to an explicit `permissions`\n * snapshot (rather than live resolution). Delegation carries it forward as a\n * ceiling so a narrowed run cannot widen through a worker (#2978).\n */\n permissionSnapshot?: readonly string[];\n /**\n * The effective, fail-closed tool allow-list — always a concrete array (an\n * absent binding allow-list normalizes to `[]`, i.e. no tools).\n */\n allowedTools: string[];\n /**\n * Whether `tool` is within the fail-closed allow-list. An empty allow-list,\n * or an empty/non-string tool name, permits nothing.\n */\n isToolAllowed(tool: string): boolean;\n /** Throw {@link PrincipalToolNotAllowedError} unless `tool` is allowed. */\n assertToolAllowed(tool: string): void;\n /**\n * Assert the principal holds the catalog permission for `(collection,\n * action)`, authorizing against the **published** principal set\n * (`context.permissionSet`) — the same snapshot the RLS session enforces — so\n * the bound is adapter-independent. This is the door-agnostic teeth for the\n * RLS-off adapters; under Postgres RLS it is a redundant (but harmless)\n * second gate. Throws `OperationPermissionError` on denial.\n */\n assertOperation(\n collection: OperationPermissionCollectionInput,\n action: string,\n extraOptions?: SmrtClassOptions,\n ): Promise<OperationPermissionDecision>;\n}\n\nasync function emitAudit(\n entry: PrincipalAuditEntry,\n audit: PrincipalAuditSink | undefined,\n logger: Logger | undefined,\n): Promise<void> {\n if (audit) {\n await audit(entry);\n return;\n }\n const log = logger ?? createLogger({ level: 'info' });\n log.info('agent action executed on behalf of originating user', {\n ...entry,\n });\n}\n\n/**\n * Run `fn` AS the persona's bound principal.\n *\n * Resolves the bound user's live permissions, publishes them onto the DB\n * session (so Postgres RLS bounds every query per-`(table, action)`), emits an\n * on-behalf-of audit entry, and hands `fn` a {@link PrincipalRun} whose\n * assertions enforce the persona tool ceiling and the RLS-off catalog gate.\n *\n * @example\n * ```typescript\n * await executeAsPrincipal(\n * {\n * db,\n * principal: {\n * runAsUserId: persona.runAsUserId,\n * tenantId: persona.tenantId,\n * allowedTools: persona.allowedTools,\n * },\n * onBehalfOfUserId: triggeringUserId,\n * agentClass: persona.agentClass,\n * },\n * async (run) => {\n * run.assertToolAllowed('articles.publish');\n * await run.assertOperation('articles', 'update');\n * await agent.run();\n * },\n * );\n * ```\n */\nexport async function executeAsPrincipal<T>(\n options: ExecuteAsPrincipalOptions,\n fn: (run: PrincipalRun) => Promise<T>,\n): Promise<T> {\n const {\n principal,\n onBehalfOfUserId = null,\n agentClass,\n action = 'agent.run',\n auditMetadata,\n permissions,\n resolver,\n postgresRls,\n enterTenantContext,\n audit,\n logger,\n ...smrtOptions\n } = options;\n\n const { runAsUserId, tenantId, actsAsProfileId = null } = principal;\n\n // Fail-closed tool allow-list (mirrors chat's AgentSession, S5 #1392): an\n // absent or non-array binding allow-list normalizes to `[]` — no tools — so a\n // missing ceiling can only tighten authority, never open it up.\n const toolWhitelist = Array.isArray(principal.allowedTools)\n ? principal.allowedTools\n : [];\n const isToolAllowed = (tool: string): boolean =>\n typeof tool === 'string' && tool.length > 0 && toolWhitelist.includes(tool);\n\n await emitAudit(\n {\n action,\n actorUserId: runAsUserId,\n onBehalfOfUserId,\n tenantId,\n agentClass,\n actsAsProfileId,\n metadata: auditMetadata,\n },\n audit,\n logger,\n );\n\n return withPrincipalPermissionContext(\n {\n ...smrtOptions,\n userId: runAsUserId,\n tenantId,\n permissions,\n resolver,\n postgresRls,\n enterTenantContext: enterTenantContext ?? tenantId !== null,\n },\n async (context) => {\n const run: PrincipalRun = {\n context,\n permissions: context.permissions,\n ...(permissions !== undefined\n ? { permissionSnapshot: [...context.permissions] }\n : {}),\n allowedTools: toolWhitelist,\n isToolAllowed,\n assertToolAllowed(tool: string): void {\n if (!isToolAllowed(tool)) {\n throw new PrincipalToolNotAllowedError(tool);\n }\n },\n async assertOperation(\n collection: OperationPermissionCollectionInput,\n operationAction: string,\n extraOptions?: SmrtClassOptions,\n ): Promise<OperationPermissionDecision> {\n return assertOperationPermission({\n ...smrtOptions,\n ...extraOptions,\n collection,\n action: operationAction,\n // Authorize against the PUBLISHED principal set (the same snapshot\n // Postgres RLS enforces for this context), not a fresh live\n // re-resolve — keeps the RLS-off gate adapter-independent.\n permissionSet: context.permissionSet,\n });\n },\n };\n return fn(run);\n },\n );\n}\n"],"mappings":";;;;;AAQO,SAAS,iBAAiB,MAAsB;CACrD,MAAM,aAAa,eAAe,SAAS,IAAI;CAC/C,OAAO,YAAY,iBAAiB,YAAY,QAAQ;AAC1D;AAKO,SAAS,kBAAkB,MAAsB;CAEtD,OADmB,eAAe,SAAS,IACpC,CAAA,EAAY,QAAQ,aAAa,IAAI;AAC9C;AAQO,SAAS,oBAAoB,MAAwB;CAC1D,OAAO,MAAM,KACX,IAAI,IAAI,CAAC,iBAAiB,IAAI,GAAG,kBAAkB,IAAI,CAAC,CAAA,CAAE,OAAO,OAAO,CAAC,CAC3E;AACF;AAeO,SAAS,yBACd,WACA,aACQ;CACR,OAAO,cAAc,GAAG,UAAS,GAAI,gBAAgB;AACvD;AAcO,SAAS,yBACd,UACA,WACQ;CACR,OAAO,GAAG,SAAQ,GAAI,iBAAiB,SAAS;AAClD;AAOO,SAAS,8BACd,SACA,UACe;CACf,IAAI,CAAC,UAAU,OAAO;CACtB,MAAM,SAAS,GAAG,SAAQ;CAC1B,IAAI,CAAC,QAAQ,WAAW,MAAM,GAAG,OAAO;CAExC,OADkB,QAAQ,MAAM,OAAO,MAChC,KAAa;AACtB;;;;;;;;;;;;;;;;;;AC/BO,IAAM,cAAN,cAA0B,WAAW;CAM1C,WAA0B;CAU1B,UAAkB;CAMlB,aAAqB;CAMrB,SAAiB;CAWjB,aAAsC,CAAC;CAMvC,gBAAwB;;;;;;;;CASxB,aAAa,SACX,SACA,SAC+C;EAE/C,QAAO,MADsB,YAAY,UAAU,CAAC,OAAO,GAAG,OAAO,EAAA,CAC/C,IAAI,OAAO,qBAAK,IAAI,IAAI;CAChD;;;;;;;;CASA,aAAa,UACX,UACA,SAC4D;EAC5D,MAAM,iCAAiB,IAAI,IAGzB;EACF,IAAI,SAAS,WAAW,GACtB,OAAO;EAIT,MAAM,UAAU,OAAM,MADG,sBAAsB,OAAO,OAAO,EAAA,CAC5B,KAAK,EACpC,OAAO,EAAE,cAAc,SAAS,EAClC,CAAC;EAED,KAAA,MAAW,UAAU,SAAS;GAC5B,IAAI,CAAC,eAAe,IAAI,OAAO,OAAO,GACpC,eAAe,IAAI,OAAO,yBAAS,IAAI,IAAI,CAAC;GAE9C,eAAe,IAAI,OAAO,OAAO,CAAA,EAAG,IAAI,OAAO,QAAQ,OAAO,UAAU;EAC1E;EAEA,OAAO;CACT;;;;;;;;;CAUA,aAAa,QACX,SACA,QACA,SAC8C;EAM9C,QAAO,OAJe,MADG,sBAAsB,OAAO,OAAO,EAAA,CAC5B,KAAK;GACpC,OAAO;IAAE;IAAS;GAAO;GACzB,OAAO;EACT,CAAC,EAAA,CACc,EAAC,EAAG;CACrB;;;;;;;;CASA,aAAa,SACX,MAMA,SACsB;EACtB,MAAM,uBAAuB,iBAAiB,KAAK,UAAU;EAC7D,MAAM,aAAa,MAAM,sBAAsB,OAAO,OAAO;EAG7D,MAAM,kBAAkB,MAAM,WAAW,KAAK;GAC5C,OAAO;IAAE,SAAS,KAAK;IAAS,QAAQ,KAAK;GAAO;GACpD,OAAO;EACT,CAAC;EAED,IAAI,gBAAgB,SAAS,GAAG;GAE9B,MAAM,WAAW,gBAAgB;GACjC,SAAS,aAAa,KAAK;GAC3B,SAAS,aAAa;GACtB,MAAM,SAAS,KAAK;GACpB,OAAO;EACT;EAGA,MAAM,SAAS,MAAM,WAAW,OAAO;GACrC,SAAS,KAAK;GACd,YAAY;GACZ,QAAQ,KAAK;GACb,YAAY,KAAK;GACjB,MAAM,GAAG,KAAK,QAAO,GAAI,KAAK;EAChC,CAAC;EACD,MAAM,OAAO,KAAK;EAClB,OAAO;CACT;AACF;AAlK8C,cAAjC,aAAwC,mBAAkB,4BAAA;AAMrE,gBAAA,CADC,SAAS,EAAE,UAAU,KAAK,CAAC,CAAA,GALjB,YAMX,WAAA,YAAA,CAAA;AAUA,gBAAA,CADC,MAAM,EAAE,MAAM,OAAO,CAAC,CAAA,GAfZ,YAgBX,WAAA,WAAA,CAAA;AAMA,gBAAA,CADC,MAAM,EAAE,MAAM,OAAO,CAAC,CAAA,GArBZ,YAsBX,WAAA,cAAA,CAAA;AAMA,gBAAA,CADC,MAAM,EAAE,MAAM,OAAO,CAAC,CAAA,GA3BZ,YA4BX,WAAA,UAAA,CAAA;AAWA,gBAAA,CADC,MAAM;CAAE,MAAM;CAAQ,WAAW;AAAK,CAAC,CAAA,GAtC7B,YAuCX,WAAA,cAAA,CAAA;AAMA,gBAAA,CADC,MAAM,EAAE,MAAM,UAAU,CAAC,CAAA,GA5Cf,YA6CX,WAAA,iBAAA,CAAA;AA7CW,cAAN,gBAAA,CAPN,aAAa,EAAE,MAAM,WAAW,CAAC,GACjC,KAAK;CACJ,WAAW;CACX,KAAK,EAAE,SAAS;EAAC;EAAQ;EAAO;EAAU;EAAU;CAAQ,EAAE;CAC9D,KAAK,EAAE,SAAS,CAAC,QAAQ,KAAK,EAAE;CAChC,KAAK,EAAE,cAAc,KAAK;AAC5B,CAAC,CAAA,GACY,WAAA;AAuKN,IAAM,wBAAN,cAAoC,eAA4B;CACrE,OAAgB,aAAa;;;;;;CAO7B,MAAM,aAAaA,WAA0C;EAC3D,OAAO,KAAK,KAAK,EAAE,OAAO,EAAE,UAAAA,UAAS,EAAE,CAAC;CAC1C;;;;;;;;;;CAWA,MAAM,aAAqC;EACzC,OAAO,YAAyB,IAAI;CACtC;;;;;;;;;;CAWA,MAAM,gBAAgBA,WAA0C;EAC9D,OAAO,iBACL,MACAA,WACA,6BACF;CACF;AACF;;;AC/HO,IAAM,+BAAN,cAA2C,MAAM;CAC7C;CACA,SAAS;CAElB,YAAY,MAAc;EACxB,MAAM,SAAS,KAAI,qCAAsC;EACzD,KAAK,OAAO;EACZ,KAAK,OAAO;CACd;AACF;AA8CA,eAAe,UACb,OACA,OACA,QACe;CACf,IAAI,OAAO;EACT,MAAM,MAAM,KAAK;EACjB;CACF;CAEA,CADY,UAAU,aAAa,EAAE,OAAO,OAAO,CAAC,EAAA,CAChD,KAAK,uDAAuD,EAC9D,GAAG,MACL,CAAC;AACH;AA+BA,eAAsB,mBACpB,SACA,IACY;CACZ,MAAM,EACJ,WACA,mBAAmB,MACnB,YACA,SAAS,aACT,eACA,aACA,UACA,aACA,oBACA,OACA,QACA,GAAG,gBACD;CAEJ,MAAM,EAAE,aAAa,UAAU,kBAAkB,SAAS;CAK1D,MAAM,gBAAgB,MAAM,QAAQ,UAAU,YAAY,IACtD,UAAU,eACV,CAAC;CACL,MAAM,iBAAiB,SACrB,OAAO,SAAS,YAAY,KAAK,SAAS,KAAK,cAAc,SAAS,IAAI;CAE5E,MAAM,UACJ;EACE;EACA,aAAa;EACb;EACA;EACA;EACA;EACA,UAAU;CACZ,GACA,OACA,MACF;CAEA,OAAO,+BACL;EACE,GAAG;EACH,QAAQ;EACR;EACA;EACA;EACA;EACA,oBAAoB,sBAAsB,aAAa;CACzD,GACA,OAAO,YAAY;EA+BjB,OAAO,GAAG;GA7BR;GACA,aAAa,QAAQ;GACrB,GAAI,gBAAgB,KAAA,IAChB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,WAAW,EAAE,IAC/C,CAAC;GACL,cAAc;GACd;GACA,kBAAkB,MAAoB;IACpC,IAAI,CAAC,cAAc,IAAI,GACrB,MAAM,IAAI,6BAA6B,IAAI;GAE/C;GACA,MAAM,gBACJ,YACA,iBACA,cACsC;IACtC,OAAO,0BAA0B;KAC/B,GAAG;KACH,GAAG;KACH;KACA,QAAQ;KAIR,eAAe,QAAQ;IACzB,CAAC;GACH;EAEQ,CAAG;CACf,CACF;AACF"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
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-DtwCUq2t.js";
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
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";
4
4
  import { createLogger } from "@happyvertical/logger";
@@ -11,7 +11,7 @@ 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
13
  //#region src/__smrt-register__.ts
14
- ObjectRegistry.registerPackageManifest(JSON.parse("{\"version\":\"1.0.0\",\"timestamp\":0,\"packageName\":\"@happyvertical/smrt-agents\",\"packageVersion\":\"0.54.2\",\"objects\":{\"@happyvertical/smrt-agents:Agent\":{\"name\":\"agent\",\"className\":\"Agent\",\"qualifiedName\":\"@happyvertical/smrt-agents:Agent\",\"collection\":\"agents\",\"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\"}},\"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\",\"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\",\"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\",\"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\":{}},\"lastRun\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"nextRun\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"lastStatus\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"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},\"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\",\"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\",\"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\":{}},\"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\",\"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}},\"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\"]}"));
14
+ ObjectRegistry.registerPackageManifest(JSON.parse(`{"version":"1.0.0","timestamp":0,"packageName":"@happyvertical/smrt-agents","packageVersion":"0.54.4","objects":{"@happyvertical/smrt-agents:Agent":{"name":"agent","className":"Agent","qualifiedName":"@happyvertical/smrt-agents:Agent","collection":"agents","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"}},"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","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","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","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":{}},"lastRun":{"type":"datetime","required":false,"_meta":{"nullable":true}},"nextRun":{"type":"datetime","required":false,"_meta":{"nullable":true}},"lastStatus":{"type":"text","required":false,"_meta":{"nullable":true}},"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},"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","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","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":{}},"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","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}},"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"],"stampsConstructors":true}`));
15
15
  //#endregion
16
16
  //#region src/ai-config.ts
17
17
  var DEFAULT_SECRET_FALLBACK = "ancestors";
@@ -127,7 +127,7 @@ function resolveAgentLearning(declaration) {
127
127
  //#region src/agent.ts
128
128
  var __defProp$2 = Object.defineProperty;
129
129
  var __getOwnPropDesc$2 = Object.getOwnPropertyDescriptor;
130
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp$2(obj, key, {
130
+ var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, {
131
131
  enumerable: true,
132
132
  configurable: true,
133
133
  writable: true,
@@ -139,7 +139,7 @@ var __decorateClass$2 = (decorators, target, key, kind) => {
139
139
  if (kind && result) __defProp$2(target, key, result);
140
140
  return result;
141
141
  };
142
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
142
+ var __publicField$2 = (obj, key, value) => __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
143
143
  var Agent = class extends SmrtObject {
144
144
  tenantId = null;
145
145
  /**
@@ -961,6 +961,7 @@ var Agent = class extends SmrtObject {
961
961
  });
962
962
  }
963
963
  };
964
+ __publicField$2(Agent, "__smrtPackage__", "@happyvertical/smrt-agents");
964
965
  /**
965
966
  * UI slots this agent supports for admin panels
966
967
  *
@@ -987,7 +988,7 @@ var Agent = class extends SmrtObject {
987
988
  * };
988
989
  * ```
989
990
  */
990
- __publicField(Agent, "uiSlots", {});
991
+ __publicField$2(Agent, "uiSlots", {});
991
992
  /**
992
993
  * Admin routes this agent provides
993
994
  *
@@ -1003,7 +1004,7 @@ __publicField(Agent, "uiSlots", {});
1003
1004
  * ];
1004
1005
  * ```
1005
1006
  */
1006
- __publicField(Agent, "adminRoutes", []);
1007
+ __publicField$2(Agent, "adminRoutes", []);
1007
1008
  /**
1008
1009
  * Create options this agent contributes to the host's "create" menu
1009
1010
  * (e.g. "Write about a meeting"). Plain data captured into the agent
@@ -1018,7 +1019,7 @@ __publicField(Agent, "adminRoutes", []);
1018
1019
  * ];
1019
1020
  * ```
1020
1021
  */
1021
- __publicField(Agent, "createEntries", []);
1022
+ __publicField$2(Agent, "createEntries", []);
1022
1023
  /**
1023
1024
  * Signal types this agent subscribes to by default
1024
1025
  *
@@ -1045,7 +1046,7 @@ __publicField(Agent, "createEntries", []);
1045
1046
  * }
1046
1047
  * ```
1047
1048
  */
1048
- __publicField(Agent, "signalSubscriptions", []);
1049
+ __publicField$2(Agent, "signalSubscriptions", []);
1049
1050
  /**
1050
1051
  * Execute-time resolvers for `agent_config` fields that should be computed
1051
1052
  * lazily rather than snapshotted at sync time.
@@ -1075,7 +1076,7 @@ __publicField(Agent, "signalSubscriptions", []);
1075
1076
  * }
1076
1077
  * ```
1077
1078
  */
1078
- __publicField(Agent, "configResolvers", {});
1079
+ __publicField$2(Agent, "configResolvers", {});
1079
1080
  /**
1080
1081
  * Opt-in learning trait declaration (#1886).
1081
1082
  *
@@ -1108,7 +1109,7 @@ __publicField(Agent, "configResolvers", {});
1108
1109
  * }
1109
1110
  * ```
1110
1111
  */
1111
- __publicField(Agent, "learning", false);
1112
+ __publicField$2(Agent, "learning", false);
1112
1113
  /**
1113
1114
  * Opt into multiple durable instances of this agent class per tenant (#1890).
1114
1115
  *
@@ -1128,7 +1129,7 @@ __publicField(Agent, "learning", false);
1128
1129
  * `default` persona reuses the singleton identity (null key), which makes the
1129
1130
  * singleton→multi upgrade non-destructive.
1130
1131
  */
1131
- __publicField(Agent, "multiInstance", false);
1132
+ __publicField$2(Agent, "multiInstance", false);
1132
1133
  __decorateClass$2([tenantId({ nullable: true })], Agent.prototype, "tenantId", 2);
1133
1134
  Agent = __decorateClass$2([TenantScoped({ mode: "optional" }), smrt({
1134
1135
  cli: false,
@@ -2934,12 +2935,19 @@ function createReportDataSurfaceTools(options) {
2934
2935
  //#region src/schedule.ts
2935
2936
  var __defProp$1 = Object.defineProperty;
2936
2937
  var __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor;
2938
+ var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, {
2939
+ enumerable: true,
2940
+ configurable: true,
2941
+ writable: true,
2942
+ value
2943
+ }) : obj[key] = value;
2937
2944
  var __decorateClass$1 = (decorators, target, key, kind) => {
2938
2945
  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1(target, key) : target;
2939
2946
  for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
2940
2947
  if (kind && result) __defProp$1(target, key, result);
2941
2948
  return result;
2942
2949
  };
2950
+ var __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
2943
2951
  var AgentSchedule = class extends SmrtObject {
2944
2952
  tenantId = null;
2945
2953
  agentType = "";
@@ -3027,6 +3035,7 @@ var AgentSchedule = class extends SmrtObject {
3027
3035
  if (!this.nextRun && this.enabled) this.calculateNextRun();
3028
3036
  }
3029
3037
  };
3038
+ __publicField$1(AgentSchedule, "__smrtPackage__", "@happyvertical/smrt-agents");
3030
3039
  __decorateClass$1([tenantId({ nullable: true })], AgentSchedule.prototype, "tenantId", 2);
3031
3040
  __decorateClass$1([field({ type: "text" })], AgentSchedule.prototype, "agentType", 2);
3032
3041
  __decorateClass$1([field({
@@ -3904,12 +3913,19 @@ async function createSmrtCollectionDataSurfaceDefinition(options) {
3904
3913
  //#region src/tenant-agent.ts
3905
3914
  var __defProp = Object.defineProperty;
3906
3915
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3916
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
3917
+ enumerable: true,
3918
+ configurable: true,
3919
+ writable: true,
3920
+ value
3921
+ }) : obj[key] = value;
3907
3922
  var __decorateClass = (decorators, target, key, kind) => {
3908
3923
  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
3909
3924
  for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
3910
3925
  if (kind && result) __defProp(target, key, result);
3911
3926
  return result;
3912
3927
  };
3928
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
3913
3929
  var TenantAgent = class extends SmrtObject {
3914
3930
  tenantId = "";
3915
3931
  agentClass = "";
@@ -3917,6 +3933,7 @@ var TenantAgent = class extends SmrtObject {
3917
3933
  permissions = null;
3918
3934
  config = null;
3919
3935
  };
3936
+ __publicField(TenantAgent, "__smrtPackage__", "@happyvertical/smrt-agents");
3920
3937
  __decorateClass([tenantId()], TenantAgent.prototype, "tenantId", 2);
3921
3938
  __decorateClass([field({ type: "text" })], TenantAgent.prototype, "agentClass", 2);
3922
3939
  __decorateClass([field({ type: "text" })], TenantAgent.prototype, "status", 2);