@happyvertical/smrt-agents 0.51.31 → 0.51.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/agent.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- import { Logger } from '@happyvertical/logger';
2
- import { ConfigResolver, DispatchBus, DispatchMetadata, LearningEpisode, LearningMemory, LearningMemoryRecord, LearningOutcome, LearningSemanticSearch, SmrtObject, SmrtObjectOptions } from '@happyvertical/smrt-core';
3
- import { AgentAIOptions } from './ai-config.js';
4
- import { AgentWithInterestsOptions, InterestOptions, InterestResult, ObjectFilter } from './interests.js';
5
- import { AgentLearningDeclaration } from './learning.js';
6
- import { AgentStatusType } from './types.js';
7
- import { AgentAdminRoute, AgentUISlots } from './ui.js';
1
+ import { type Logger } from '@happyvertical/logger';
2
+ import { type ConfigResolver, type DispatchBus, type DispatchMetadata, type LearningEpisode, LearningMemory, type LearningMemoryRecord, type LearningOutcome, type LearningSemanticSearch, SmrtObject, type SmrtObjectOptions } from '@happyvertical/smrt-core';
3
+ import { type AgentAIOptions } from './ai-config.js';
4
+ import type { AgentWithInterestsOptions, InterestOptions, InterestResult, ObjectFilter } from './interests.js';
5
+ import { type AgentLearningDeclaration } from './learning.js';
6
+ import type { AgentStatusType } from './types.js';
7
+ import type { AgentAdminRoute, AgentUISlots } from './ui.js';
8
8
  /**
9
9
  * Agent constructor options
10
10
  */
@@ -1,5 +1,5 @@
1
- import { AIClientOptions } from '@happyvertical/ai';
2
- import { DatabaseInterface } from '@happyvertical/sql';
1
+ import type { AIClientOptions } from '@happyvertical/ai';
2
+ import type { DatabaseInterface } from '@happyvertical/sql';
3
3
  export type AgentAISecretFallback = 'none' | 'ancestors';
4
4
  export interface AgentAIOptions extends AIClientOptions {
5
5
  /**
package/dist/config.d.ts CHANGED
@@ -1,4 +1,12 @@
1
- import { SmrtClassOptions, SmrtCollection, SmrtObject } from '@happyvertical/smrt-core';
1
+ /**
2
+ * AgentConfig - Persistent configuration storage for agents
3
+ *
4
+ * This module provides database-backed configuration for agents,
5
+ * enabling consuming apps to persist agent settings.
6
+ *
7
+ * @module
8
+ */
9
+ import { type SmrtClassOptions, SmrtCollection, SmrtObject } from '@happyvertical/smrt-core';
2
10
  /**
3
11
  * AgentConfig stores agent configuration in the database
4
12
  *
@@ -1,7 +1,15 @@
1
- import { SmrtClassOptions } from '@happyvertical/smrt-core';
2
- import { DataQueryFieldDescriptor, DataQueryRequest, DataQueryResult, DataQueryRow, DataQuerySchema } from '@happyvertical/smrt-types';
3
- import { PrincipalRun } from './execute-as-principal.js';
4
- import { PrincipalTool } from './invoke-agent.js';
1
+ /**
2
+ * Principal-bound, read-only data-surface tools (#2447).
3
+ *
4
+ * This module deliberately does not know how an application discovers or
5
+ * executes a surface. Applications provide a small, server-side catalog and
6
+ * executor; this package supplies the principal, allow-list, catalog/RBAC,
7
+ * tenant, projection, ordering, and result-boundary enforcement around them.
8
+ */
9
+ import { type SmrtClassOptions } from '@happyvertical/smrt-core';
10
+ import type { DataQueryFieldDescriptor, DataQueryRequest, DataQueryResult, DataQueryRow, DataQuerySchema } from '@happyvertical/smrt-types';
11
+ import type { PrincipalRun } from './execute-as-principal.js';
12
+ import type { PrincipalTool } from './invoke-agent.js';
5
13
  export declare const DATA_DISCOVER_TOOL_SLUG = "data.discover";
6
14
  export declare const DATA_INSPECT_TOOL_SLUG = "data.inspect";
7
15
  export declare const DATA_QUERY_TOOL_SLUG = "data.query";
@@ -1,6 +1,38 @@
1
- import { Logger } from '@happyvertical/logger';
2
- import { SmrtClassOptions } from '@happyvertical/smrt-core';
3
- import { OperationPermissionCollectionInput, OperationPermissionDecision, PermissionResolver, SessionPermissionRuntimeContext } from '@happyvertical/smrt-users';
1
+ /**
2
+ * ExecuteAsPrincipal — run an agent's work AS its persona's bound user.
3
+ *
4
+ * This is deliberately NOT a new authorization layer. It reuses the framework's
5
+ * existing principal-context machinery:
6
+ *
7
+ * - {@link withPrincipalPermissionContext} resolves the bound user's *live*
8
+ * permission set (the standard {@link PermissionResolver} cascade) and
9
+ * publishes `(smrt.user_id, smrt.tenant_id, smrt.permissions[])` onto the DB
10
+ * session. With Postgres RLS enabled, the manifest-derived policies then bound
11
+ * every query the agent makes per-`(table, action)` and per-tenant — through
12
+ * any door (in-process "side door", REST, MCP), with no per-call re-checking.
13
+ *
14
+ * - Because RLS is Postgres-only and opt-in, the exec/tool seam must ALSO assert
15
+ * the catalog permission for the `(collection, action)` when RLS is off
16
+ * (SQLite/dev). {@link PrincipalRun.assertOperation} wraps
17
+ * `assertOperationPermission` for exactly that, so the authority bound holds
18
+ * on every adapter.
19
+ *
20
+ * The effective authority of an agent action is therefore:
21
+ *
22
+ * bound-user RBAC ∩ agent-class capability ceiling ∩ persona allowedTools
23
+ *
24
+ * where the RBAC half is enforced at the data layer (RLS) or the catalog seam
25
+ * (`assertOperation`), and the tool half is enforced by
26
+ * {@link PrincipalRun.assertToolAllowed} against `allowedTools` — which a
27
+ * resolved persona has already intersected with the `TenantAgent` ceiling.
28
+ *
29
+ * Actions audit as on-behalf-of the originating user (see {@link PrincipalAuditEntry}).
30
+ *
31
+ * @packageDocumentation
32
+ */
33
+ import { type Logger } from '@happyvertical/logger';
34
+ import type { SmrtClassOptions } from '@happyvertical/smrt-core';
35
+ import { type OperationPermissionCollectionInput, type OperationPermissionDecision, type PermissionResolver, type SessionPermissionRuntimeContext } from '@happyvertical/smrt-users';
4
36
  /**
5
37
  * The bound principal an agent runs as. A resolved persona structurally
6
38
  * satisfies this once its optional `runAsUserId` has been narrowed to a
package/dist/index.d.ts CHANGED
@@ -1,3 +1,70 @@
1
+ /**
2
+ * @have/agents - Agent framework for building autonomous actors
3
+ *
4
+ * Provides a base Agent class that extends SmrtObject with:
5
+ * - Status tracking
6
+ * - Configuration management integration
7
+ * - Structured logging
8
+ * - Lifecycle hooks
9
+ * - Automatic signal handling for graceful shutdown
10
+ * - Interest-based object discovery via interesting() method
11
+ *
12
+ * Agents can define their own properties for state management - since they extend
13
+ * SmrtObject, any properties defined will be automatically persisted to the database.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * import { Agent, type AgentOptions } from '@have/agents';
18
+ * import { getModuleConfig } from '@have/config';
19
+ * import { smrt } from '@happyvertical/smrt-core';
20
+ *
21
+ * @smrt()
22
+ * class MyAgent extends Agent {
23
+ * protected config = getModuleConfig('my-agent', {
24
+ * cronSchedule: '0 2 * * *',
25
+ * maxRetries: 3
26
+ * });
27
+ *
28
+ * // Define your own state properties (automatically persisted)
29
+ * itemsProcessed: number = 0;
30
+ *
31
+ * constructor(options: AgentOptions = {}) {
32
+ * super({
33
+ * ...options,
34
+ * interests: {
35
+ * filter: { status: 'active' },
36
+ * objects: {
37
+ * Meeting: { sort: 'scheduled_at DESC', limit: 10 },
38
+ * Document: { filter: { 'type in': ['agenda', 'minutes'] } }
39
+ * }
40
+ * }
41
+ * });
42
+ * }
43
+ *
44
+ * async validate(): Promise<void> {
45
+ * if (!this.config.cronSchedule) {
46
+ * throw new Error('cronSchedule is required');
47
+ * }
48
+ * }
49
+ *
50
+ * async run(): Promise<void> {
51
+ * // Query objects the agent is interested in
52
+ * const items = await this.interesting();
53
+ * for (const { type, data } of items) {
54
+ * console.log(`Processing ${type}: ${data.id}`);
55
+ * }
56
+ * this.itemsProcessed = items.length;
57
+ * await this.save(); // Persist state
58
+ * }
59
+ * }
60
+ *
61
+ * const agent = new MyAgent({ name: 'my-agent' });
62
+ * await agent.execute();
63
+ * ```
64
+ *
65
+ * @module @have/agents
66
+ */
67
+ import './__smrt-register__.js';
1
68
  export type { ConfigResolver, LazyConfigSentinel, ResolveLazyConfigOptions, } from '@happyvertical/smrt-core';
2
69
  export { getClassConfigResolvers, getConfigResolver, isLazyConfigSentinel, listConfigResolvers, registerConfigResolver, resetConfigResolvers, resolveLazyConfig, unregisterConfigResolver, } from '@happyvertical/smrt-core';
3
70
  export { Agent, type AgentOptions } from './agent.js';
package/dist/index.js CHANGED
@@ -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.51.31\",\"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\":[],\"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.51.33\",\"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\":[],\"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\"]}"));
15
15
  //#endregion
16
16
  //#region src/ai-config.ts
17
17
  var DEFAULT_SECRET_NAMES = {
@@ -1,4 +1,4 @@
1
- import { SmrtClassOptions, SmrtObject } from '@happyvertical/smrt-core';
1
+ import type { SmrtClassOptions, SmrtObject } from '@happyvertical/smrt-core';
2
2
  type AgentLike = {
3
3
  options: SmrtClassOptions;
4
4
  };
@@ -1,8 +1,43 @@
1
- import { AITool } from '@happyvertical/ai';
2
- import { Logger } from '@happyvertical/logger';
3
- import { DispatchBus, SmrtClassOptions } from '@happyvertical/smrt-core';
4
- import { DelegationEnvelope } from './delegation.js';
5
- import { PrincipalAuditSink, PrincipalRun } from './execute-as-principal.js';
1
+ /**
2
+ * invoke-agent — agent orchestration via principal delegation (L3 of the
3
+ * learning-agents epic, #1892).
4
+ *
5
+ * A conversational (orchestrator) agent invokes a worker agent through a
6
+ * standard **`invoke-agent` tool** — gated by the persona's `allowedTools` like
7
+ * any other tool. The tool hands the work to a worker **under the orchestrator's
8
+ * own principal** (`runAsUserId` + `tenantId`), the worker runs via
9
+ * {@link executeAsPrincipal} under that same principal, and reports completion
10
+ * back into the conversation via a **correlated completion dispatch**.
11
+ *
12
+ * This is deliberately **not a new engine**. It is the `invoke-agent` tool plus
13
+ * a completion-dispatch convention on top of the machinery that already ships:
14
+ *
15
+ * - {@link executeAsPrincipal} runs the worker as the delegated principal, so
16
+ * the worker's authority is the originating user's live RBAC — never the
17
+ * worker's own — and every action audits on-behalf-of that user.
18
+ * - The {@link DelegationEnvelope} makes the principal **immutable along the
19
+ * chain** (a worker cannot invoke a further worker under a broader principal)
20
+ * and **bounds delegation depth**.
21
+ * - The DispatchBus carries both the (optional) async invoke signal and the
22
+ * correlated completion, so a worker's result can be surfaced back into the
23
+ * conversation.
24
+ *
25
+ * The **transport is pluggable**. The default {@link inlineInvokeAgentTransport}
26
+ * runs the worker in-process and returns the completion as the tool observation
27
+ * (so it surfaces in the same turn). {@link createDispatchInvokeTransport} emits
28
+ * a DispatchBus `agent.invoke` signal a worker processes out of band
29
+ * ({@link processAgentInvocations}); a job-queue transport (enqueue on the
30
+ * `agents` queue) is a consumer-supplied `InvokeAgentTransport` — orchestration
31
+ * never hard-depends on `@happyvertical/smrt-jobs`, which sits *below* agents in
32
+ * the dependency graph.
33
+ *
34
+ * @module
35
+ */
36
+ import type { AITool } from '@happyvertical/ai';
37
+ import { type Logger } from '@happyvertical/logger';
38
+ import type { DispatchBus, SmrtClassOptions } from '@happyvertical/smrt-core';
39
+ import { type DelegationEnvelope } from './delegation.js';
40
+ import { type PrincipalAuditSink, type PrincipalRun } from './execute-as-principal.js';
6
41
  /** Catalog slug + permission id of the standard invoke-agent tool. */
7
42
  export declare const INVOKE_AGENT_TOOL_SLUG = "agents.invoke";
8
43
  /**
@@ -1,4 +1,15 @@
1
- import { LearningMemoryConfig } from '@happyvertical/smrt-core';
1
+ /**
2
+ * Opt-in Learning trait configuration for {@link Agent} (#1886).
3
+ *
4
+ * The trait is **off by default**: an agent that does not declare
5
+ * `static learning` behaves byte-for-byte as it does today. Declaring it — with
6
+ * a single `static learning = true` (or a config object) — wires a
7
+ * confidence-scored recall-before / capture-after loop into the agent
8
+ * lifecycle, backed by {@link LearningMemory} from `@happyvertical/smrt-core`.
9
+ *
10
+ * @module
11
+ */
12
+ import type { LearningMemoryConfig } from '@happyvertical/smrt-core';
2
13
  /**
3
14
  * Per-agent learning configuration. All fields are optional; omitted
4
15
  * thresholds fall back to {@link LearningMemory}'s defaults (the proven
@@ -2,7 +2,7 @@
2
2
  "version": "1.0.0",
3
3
  "timestamp": 0,
4
4
  "packageName": "@happyvertical/smrt-agents",
5
- "packageVersion": "0.51.31",
5
+ "packageVersion": "0.51.33",
6
6
  "objects": {
7
7
  "@happyvertical/smrt-agents:Agent": {
8
8
  "name": "agent",
@@ -1,4 +1,4 @@
1
- import { DatabaseInterface } from '@happyvertical/sql';
1
+ import type { DatabaseInterface } from '@happyvertical/sql';
2
2
  export declare const AGENT_SCHEDULE_SLUG_BACKFILL = "@happyvertical/smrt-agents:agent-schedule-slugs:v1";
3
3
  export declare const AGENT_SCHEDULE_TABLE = "_smrt_agent_schedules";
4
4
  export interface AgentScheduleSlugBackfillOptions {
@@ -1,8 +1,27 @@
1
- import { SmrtClassOptions } from '@happyvertical/smrt-core';
2
- import { PlaybookIntentResolver, PlaybookOperationClassifier, PlaybookOperationStep } from '@happyvertical/smrt-playbooks';
3
- import { OperationPermissionCollectionInput } from '@happyvertical/smrt-users';
4
- import { PrincipalRun } from './execute-as-principal.js';
5
- import { PrincipalTool } from './invoke-agent.js';
1
+ /**
2
+ * Server-plane playbook preflight as a `PrincipalTool` (issue #2590).
3
+ *
4
+ * Playbooks are not atomic and have no compensation, so the real failure mode
5
+ * is half-execution — five steps started, dead at four. This tool predicts that
6
+ * ahead of time by intersecting each step against the two predicates
7
+ * `PrincipalRun` already exposes:
8
+ *
9
+ * - `isToolAllowed(tool)` — the persona's fail-closed allow-list, the same gate
10
+ * `assertToolAllowed()` throws on;
11
+ * - `assertOperation(collection, action)` — the catalog permission gate, which
12
+ * *evaluates* the operation's permission without performing the operation.
13
+ *
14
+ * **It never executes a step, and it never grants one.** Name gates entry;
15
+ * decomposition gates every step. Preflight computes the intersection ahead of
16
+ * time; it replaces neither gate, and every step is authorized again when the
17
+ * agent actually runs it — so a permission revoked between the prediction and
18
+ * the execution still denies at execution.
19
+ */
20
+ import { type SmrtClassOptions } from '@happyvertical/smrt-core';
21
+ import { type PlaybookIntentResolver, type PlaybookOperationClassifier, type PlaybookOperationStep } from '@happyvertical/smrt-playbooks';
22
+ import { type OperationPermissionCollectionInput } from '@happyvertical/smrt-users';
23
+ import type { PrincipalRun } from './execute-as-principal.js';
24
+ import type { PrincipalTool } from './invoke-agent.js';
6
25
  /** Tool name + permission slug, gated by the persona's `allowedTools`. */
7
26
  export declare const PLAYBOOK_PREFLIGHT_TOOL_SLUG = "playbooks.preflight";
8
27
  /** Provider function name offered to the model. */
@@ -1,8 +1,16 @@
1
- import { applyReportRefresh, buildReportAdapterDescriptor, ReportAdapterDescriptor, ReportAdapterOptions, ReportBackgroundQueryTask, ReportDataQueryResult, ReportExportActionHost, ReportExportSnapshotBinding, ReportQueryOptions, ReportRefreshActionHost } from '@happyvertical/smrt-reports';
2
- import { DataQueryRequest } from '@happyvertical/smrt-types';
3
- import { DataSurfaceDefinition, DataSurfaceExecutionContext, DataSurfaceToolsOptions } from './data-surface.js';
4
- import { PrincipalRun } from './execute-as-principal.js';
5
- import { PrincipalTool } from './invoke-agent.js';
1
+ /**
2
+ * Principal-bound report tools built on the shared data-surface contracts.
3
+ *
4
+ * Reports remain the authority for materialized queries, lifecycle, drilldown,
5
+ * and export validation. This module only binds those contracts to a live
6
+ * PrincipalRun and the generic data-surface catalog. Applications retain
7
+ * authorization, audit, queue, immutable-snapshot, and browser transports.
8
+ */
9
+ import { applyReportRefresh, buildReportAdapterDescriptor, type ReportAdapterDescriptor, type ReportAdapterOptions, type ReportBackgroundQueryTask, type ReportDataQueryResult, type ReportExportActionHost, type ReportExportSnapshotBinding, type ReportQueryOptions, type ReportRefreshActionHost } from '@happyvertical/smrt-reports';
10
+ import type { DataQueryRequest } from '@happyvertical/smrt-types';
11
+ import { type DataSurfaceDefinition, type DataSurfaceExecutionContext, type DataSurfaceToolsOptions } from './data-surface.js';
12
+ import type { PrincipalRun } from './execute-as-principal.js';
13
+ import type { PrincipalTool } from './invoke-agent.js';
6
14
  export declare const REPORT_QUERY_TOOL_SLUG = "reports.query";
7
15
  export declare const REPORT_REFRESH_TOOL_SLUG = "reports.refresh";
8
16
  export declare const REPORT_DRILLDOWN_TOOL_SLUG = "reports.drilldown";
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Type-checked mirror of the code samples in
3
+ * `docs/data-surface-sveltekit-wiring.md` (#2907 review follow-up).
4
+ *
5
+ * This file is never imported or executed — `tsc --noEmit` compiling it as
6
+ * part of the package is the whole point: a doc example that does not
7
+ * type-check here means the guide is wrong. Keep every snippet here in sync
8
+ * with the prose. Real apps do not have `$lib`/SvelteKit-generated types
9
+ * available to this package, so the two SvelteKit-specific route files are
10
+ * represented with the same `(request: Request) => Promise<Response>` shape
11
+ * SvelteKit's generated `RequestHandler` collapses to for a POST-only route —
12
+ * everything upstream of that (the action definition, the adapter wiring,
13
+ * the bulk selection resolver) uses the real framework types.
14
+ */
15
+ import type { PrincipalRun } from '../../execute-as-principal.js';
16
+ import { createDataSurfaceActionAdapter, type DataSurfaceServerActionDefinition, type ResolvedDataSurfaceActions } from '../index.js';
17
+ export declare const approveCandidate: DataSurfaceServerActionDefinition;
18
+ export declare function resolveReferencePhotosSurface(run: PrincipalRun): Promise<ResolvedDataSurfaceActions>;
19
+ export declare function resolveReferencePhotosSelection(invocation: Parameters<NonNullable<Parameters<typeof createDataSurfaceActionAdapter>[0]['resolveSelection']>>[0], selection: Parameters<NonNullable<Parameters<typeof createDataSurfaceActionAdapter>[0]['resolveSelection']>>[1]): Promise<{
20
+ revision: number;
21
+ queryFingerprint: string;
22
+ rowIds: import("@happyvertical/smrt-types").DataSurfaceRowId[];
23
+ }>;
24
+ export declare const referencePhotosAdapter: import("../data-surface-actions.js").DataSurfaceActionAdapter;
25
+ export declare const referencePhotosActionHandlers: import("../sveltekit-data-surface-routes.js").DataSurfaceRouteHandlers;
26
+ type StubRequestHandler = (event: {
27
+ request: Request;
28
+ }) => Promise<Response>;
29
+ export declare const previewRoutePOST: StubRequestHandler;
30
+ export declare const applyRoutePOST: StubRequestHandler;
31
+ export {};
32
+ //# sourceMappingURL=sveltekit-data-surface-routes-doc-examples.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sveltekit-data-surface-routes-doc-examples.d.ts","sourceRoot":"","sources":["../../../src/server/__typecheck__/sveltekit-data-surface-routes-doc-examples.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EACL,8BAA8B,EAI9B,KAAK,iCAAiC,EACtC,KAAK,0BAA0B,EAEhC,MAAM,aAAa,CAAC;AAsCrB,eAAO,MAAM,gBAAgB,EAAE,iCAqC9B,CAAC;AAQF,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,0BAA0B,CAAC,CAMrC;AAED,wBAAsB,+BAA+B,CACnD,UAAU,EAAE,UAAU,CACpB,WAAW,CACT,UAAU,CAAC,OAAO,8BAA8B,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CACzE,CACF,CAAC,CAAC,CAAC,EACJ,SAAS,EAAE,UAAU,CACnB,WAAW,CACT,UAAU,CAAC,OAAO,8BAA8B,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CACzE,CACF,CAAC,CAAC,CAAC;;;;GAqBL;AAgBD,eAAO,MAAM,sBAAsB,+DAajC,CAAC;AAUH,eAAO,MAAM,6BAA6B,wEAItC,CAAC;AAKL,KAAK,kBAAkB,GAAG,CAAC,KAAK,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE7E,eAAO,MAAM,gBAAgB,EAAE,kBACiB,CAAC;AAEjD,eAAO,MAAM,cAAc,EAAE,kBACiB,CAAC"}
@@ -1,4 +1,14 @@
1
- import { PackageManifest } from './manifest-utils.js';
1
+ /**
2
+ * Server-side API route resolution for SMRT agents
3
+ *
4
+ * Reads agent package manifests and builds a route map from resource
5
+ * paths (e.g., 'performers', 'video-contents') to SmrtObject class
6
+ * names and allowed CRUD actions. The catch-all API handler uses this
7
+ * to resolve incoming requests.
8
+ *
9
+ * @module @happyvertical/smrt-agents/server
10
+ */
11
+ import type { PackageManifest } from './manifest-utils.js';
2
12
  /**
3
13
  * Info about a single API route (one SmrtObject with api.include)
4
14
  */
@@ -1,4 +1,12 @@
1
- import { SmrtClassOptions } from '@happyvertical/smrt-core';
1
+ /**
2
+ * Server-side agent config loading utilities
3
+ *
4
+ * Loads slot configurations from the agent_configs table for a set of agents.
5
+ * Agent-specific table loading (e.g., praeco_sources) stays in the host app.
6
+ *
7
+ * @module @happyvertical/smrt-agents/server
8
+ */
9
+ import type { SmrtClassOptions } from '@happyvertical/smrt-core';
2
10
  /**
3
11
  * Load slot configs for multiple agents from the agent_configs table.
4
12
  *
@@ -1,6 +1,6 @@
1
- import { DurableJobPayloadIntegrity } from '@happyvertical/smrt-jobs';
2
- import { DataSurfaceActionDescriptor, DataSurfaceActionResult, DataSurfaceActionWireRequest, DataSurfaceDescriptor, DataSurfaceIdentity, DataSurfaceJsonObject, DataSurfaceJsonValue, DataSurfaceRowId, DataSurfaceSelectionReference } from '@happyvertical/smrt-types';
3
- import { ExecuteAsPrincipalOptions, executeAsPrincipal, PrincipalRun } from '../execute-as-principal.js';
1
+ import { type DurableJobPayloadIntegrity } from '@happyvertical/smrt-jobs';
2
+ import type { DataSurfaceActionDescriptor, DataSurfaceActionResult, DataSurfaceActionWireRequest, DataSurfaceDescriptor, DataSurfaceIdentity, DataSurfaceJsonObject, DataSurfaceJsonValue, DataSurfaceRowId, DataSurfaceSelectionReference } from '@happyvertical/smrt-types';
3
+ import { type ExecuteAsPrincipalOptions, executeAsPrincipal, type PrincipalRun } from '../execute-as-principal.js';
4
4
  export type DataSurfaceConfirmationPolicy = 'required' | 'none';
5
5
  export type DataSurfaceActionExecution = 'foreground' | 'background';
6
6
  export interface DataSurfaceActionEligibility {
@@ -1,8 +1,8 @@
1
1
  import { SmrtObject } from '@happyvertical/smrt-core';
2
- import { JobExecutionContext } from '@happyvertical/smrt-jobs';
3
- import { DataSurfaceActionResult } from '@happyvertical/smrt-types';
4
- import { DatabaseInterface } from '@happyvertical/sql';
5
- import { DataSurfaceBackgroundActionEnvelope, DataSurfaceBackgroundQueue } from './data-surface-actions.js';
2
+ import { type JobExecutionContext } from '@happyvertical/smrt-jobs';
3
+ import type { DataSurfaceActionResult } from '@happyvertical/smrt-types';
4
+ import type { DatabaseInterface } from '@happyvertical/sql';
5
+ import type { DataSurfaceBackgroundActionEnvelope, DataSurfaceBackgroundQueue } from './data-surface-actions.js';
6
6
  export interface DataSurfaceActionJobArgs {
7
7
  version: 1;
8
8
  envelope: DataSurfaceBackgroundActionEnvelope;
@@ -1,4 +1,12 @@
1
- import { AgentManifestInfo } from '../ui.js';
1
+ /**
2
+ * Server-side manifest utilities for SMRT agents
3
+ *
4
+ * Provides functions to extract and register agent manifests on the server,
5
+ * where the Vite virtual module (`virtual:smrt-agent-registrations`) doesn't run.
6
+ *
7
+ * @module @happyvertical/smrt-agents/server
8
+ */
9
+ import { type AgentManifestInfo } from '../ui.js';
2
10
  /**
3
11
  * Shape of a package manifest's `objects` entry
4
12
  */
@@ -1,5 +1,13 @@
1
- import { ResolvedAgentAvailability } from '../tenant-agent.js';
2
- import { AgentAdminRoute, AgentUISlots } from '../ui.js';
1
+ /**
2
+ * Serialization utilities for resolved agents
3
+ *
4
+ * Converts ResolvedAgentAvailability (database + manifest data) into
5
+ * a JSON-safe shape suitable for passing to client components.
6
+ *
7
+ * @module @happyvertical/smrt-agents/server
8
+ */
9
+ import type { ResolvedAgentAvailability } from '../tenant-agent.js';
10
+ import type { AgentAdminRoute, AgentUISlots } from '../ui.js';
3
11
  /**
4
12
  * Serialized agent data for passing to client components.
5
13
  *
@@ -1,7 +1,7 @@
1
1
  import { SmrtObject } from '@happyvertical/smrt-core';
2
- import { DataSurfaceActionResult } from '@happyvertical/smrt-types';
3
- import { DatabaseInterface } from '@happyvertical/sql';
4
- import { DataSurfaceActionStateStore, DataSurfaceIdempotencyRecord, DataSurfaceIdempotencyRecoveryEvidence, DataSurfaceIdempotencyReservation, DataSurfacePreviewTokenRecord } from './data-surface-actions.js';
2
+ import type { DataSurfaceActionResult } from '@happyvertical/smrt-types';
3
+ import type { DatabaseInterface } from '@happyvertical/sql';
4
+ import type { DataSurfaceActionStateStore, DataSurfaceIdempotencyRecord, DataSurfaceIdempotencyRecoveryEvidence, DataSurfaceIdempotencyReservation, DataSurfacePreviewTokenRecord } from './data-surface-actions.js';
5
5
  export declare class DataSurfaceActionTokenState extends SmrtObject {
6
6
  tokenHash: string;
7
7
  record: DataSurfacePreviewTokenRecord;
@@ -1,6 +1,27 @@
1
- import { DataSurfaceRowId } from '@happyvertical/smrt-types';
2
- import { ExecuteAsPrincipalOptions } from '../execute-as-principal.js';
3
- import { DataSurfaceActionAdapter } from './data-surface-actions.js';
1
+ /**
2
+ * SvelteKit `+server.ts` wiring for the data-surface action adapter (#2907).
3
+ *
4
+ * `createDataSurfaceActionAdapter()` and `createJobsDataSurfaceBackgroundQueue()`
5
+ * already carry every principal, idempotency, and durable-queue rule. This
6
+ * module only adapts a plain Web `Request`/`Response` pair (which is what a
7
+ * SvelteKit `RequestHandler` receives/returns) to that adapter, so an app
8
+ * never hand-rolls principal resolution, body parsing, or refusal-to-status
9
+ * mapping per route. It has no `@sveltejs/kit` import and no SvelteKit
10
+ * dependency: any framework whose route handler receives a standard
11
+ * `Request` and returns a `Response` can use it the same way.
12
+ *
13
+ * Keep this module — and everything reachable from
14
+ * `@happyvertical/smrt-agents/server` — free of Svelte imports. This entry is
15
+ * the manifest `importPath` of three objects, so it lands in a consumer's
16
+ * generated `.smrt/register.js`, which the `smrt` CLI loads with a plain
17
+ * `import()` for `db:migrate`. `@happyvertical/smrt-ui/data` is a component
18
+ * barrel that re-exports `.svelte` files and is not loadable that way; the
19
+ * Svelte-free `/data-surface` entry carries the shared protocol limits
20
+ * (#2924).
21
+ */
22
+ import type { DataSurfaceRowId } from '@happyvertical/smrt-types';
23
+ import type { ExecuteAsPrincipalOptions } from '../execute-as-principal.js';
24
+ import type { DataSurfaceActionAdapter } from './data-surface-actions.js';
4
25
  /** Resolves the bound principal for one incoming request. Throw to refuse. */
5
26
  export type DataSurfaceRoutePrincipalResolver = (request: Request) => ExecuteAsPrincipalOptions | Promise<ExecuteAsPrincipalOptions>;
6
27
  export interface DataSurfaceRouteHandlerOptions {
@@ -0,0 +1 @@
1
+ export * from './server/index.js';
@@ -1,5 +1,40 @@
1
- import { DataQueryResult, DataQuerySchema, DataQuerySort } from '@happyvertical/smrt-types';
2
- import { DataSurfaceDefinition, DataSurfaceExecutionContext, DataSurfaceField, DataSurfaceSchema } from './data-surface.js';
1
+ /**
2
+ * Generic `SmrtObject` collection to `DataSurface` adapter (#2905).
3
+ *
4
+ * `@happyvertical/smrt-content`'s `content-list-data-surface.ts` proved the
5
+ * discover/inspect/query shape but is hard-wired to `ContentQueryCollection`
6
+ * and `executeContentQuery`. This module extracts the registry-driven schema
7
+ * building, field-policy redaction, and DNF filter/scope lowering into a
8
+ * generic adapter keyed off `ObjectRegistry.getAllFields()` /
9
+ * `ObjectRegistry.getAllSchemasAsDefinitions()`, so any registered
10
+ * `SmrtObject` collection (events, ad zones, schedules, social accounts, …)
11
+ * can mount a `DataSurfaceDefinition` without a bespoke, hand-written adapter.
12
+ *
13
+ * Placement: `@happyvertical/smrt-agents` already owns the `DataSurface*`
14
+ * contracts (`./data-surface.ts`) and already depends on
15
+ * `@happyvertical/smrt-core` (for `ObjectRegistry`) and
16
+ * `@happyvertical/smrt-tenancy`. `@happyvertical/smrt-content` depends on
17
+ * `@happyvertical/smrt-agents`, not the other way around, so putting this
18
+ * adapter in `content` (or in `core`, which nothing but framework primitives
19
+ * should own) would either create a dependency cycle or force every
20
+ * non-Content consumer (events, ad zones, schedules, …) to pull in
21
+ * `smrt-content`'s unrelated OCR/PDF/image/document dependencies just to
22
+ * mount a generic surface. `agents` is the only package that can depend on
23
+ * `core` for `ObjectRegistry` and expose the `DataSurfaceDefinition` contract
24
+ * without creating a cycle or forcing an unrelated dependency.
25
+ *
26
+ * Follow-up: this module intentionally does NOT port
27
+ * `executeContentQuery`'s per-value byte-shrinking/truncation engine (the
28
+ * "shrink each oversized string/JSON field until the page fits" behavior in
29
+ * `packages/content/src/content-query.ts`). That machinery is tightly coupled
30
+ * to Content's long-text columns and is high-risk to move verbatim; a result
31
+ * that would not fit `maxResultBytes` here fails normalization instead of
32
+ * being shrunk. `createContentListDataSurfaceDefinition` is therefore not
33
+ * reimplemented as a thin wrapper over this adapter in this change — doing so
34
+ * safely needs that engine ported first. Tracked as a follow-up in #2912.
35
+ */
36
+ import type { DataQueryResult, DataQuerySchema, DataQuerySort } from '@happyvertical/smrt-types';
37
+ import type { DataSurfaceDefinition, DataSurfaceExecutionContext, DataSurfaceField, DataSurfaceSchema } from './data-surface.js';
3
38
  /** One AND-ed group of SMRT `where` conditions. */
4
39
  type WhereCondition = Record<string, unknown>;
5
40
  /** Bounded disjunctive-normal-form `where`: outer OR of inner AND groups. */
@@ -3,12 +3,12 @@
3
3
  "sensitiveFieldsExcluded": true,
4
4
  "generatedAt": "1970-01-01T00:00:00.000Z",
5
5
  "packageName": "@happyvertical/smrt-agents",
6
- "packageVersion": "0.51.31",
6
+ "packageVersion": "0.51.33",
7
7
  "sourceManifestPath": "dist/manifest.json",
8
8
  "agentDocPath": "AGENTS.md",
9
9
  "sourceHashes": {
10
- "manifest": "7c253cd8004e61da6469573de923a668f471cad3fa72e4780e6e07e9830ae2be",
11
- "packageJson": "5e65ae69a278b96b1787e87ac1dd6f85dfe13b75e34c4e9310fabadbea91e905",
10
+ "manifest": "88ac3e8c2d5f57fe4c2c2f4eeabdb9ccf5735007f52b409aa0c500c35dba78e5",
11
+ "packageJson": "a4ff6af92513642b03a247aab2496018c21c92c4bdb2a299158db8f80ce040b8",
12
12
  "agents": "1be81e2d00875d09ab8846c9a0c66ec00d5e9d00777cd1aa5167a7b366c234ad"
13
13
  },
14
14
  "exports": [
@@ -25,6 +25,7 @@
25
25
  "dependencies": {
26
26
  "@happyvertical/ai": "catalog:",
27
27
  "@happyvertical/files": "catalog:",
28
+ "@happyvertical/logger": "catalog:",
28
29
  "@happyvertical/smrt-config": "workspace:*",
29
30
  "@happyvertical/smrt-core": "workspace:*",
30
31
  "@happyvertical/smrt-jobs": "workspace:*",
@@ -37,7 +38,6 @@
37
38
  "@happyvertical/smrt-users": "workspace:*",
38
39
  "@happyvertical/sql": "catalog:",
39
40
  "@happyvertical/utils": "catalog:",
40
- "@happyvertical/logger": "catalog:",
41
41
  "@happyvertical/smrt-vitest": "workspace:*",
42
42
  "@sentry/node": "catalog:",
43
43
  "@sveltejs/package": "^2.5.8",
@@ -48,7 +48,7 @@
48
48
  "fast-glob": "3.3.3",
49
49
  "svelte-check": "^4.7.6",
50
50
  "svelte": "^5.57.1",
51
- "typescript": "5.9.3",
51
+ "typescript": "6.0.3",
52
52
  "vite": "8.1.4",
53
53
  "vitest": "4.1.10"
54
54
  },
@@ -1,5 +1,14 @@
1
+ /**
2
+ * TenantAgent - Junction between tenants and agents
3
+ *
4
+ * Represents the binding of an agent class to a specific tenant,
5
+ * with optional permission overrides and status control.
6
+ *
7
+ * The absence of a row means "check parent tenant" — inheritance
8
+ * is a resolution behavior, not stored state.
9
+ */
1
10
  import { SmrtCollection, SmrtObject } from '@happyvertical/smrt-core';
2
- import { AgentManifestInfo } from './ui.js';
11
+ import type { AgentManifestInfo } from './ui.js';
3
12
  /**
4
13
  * Status of a tenant-agent binding
5
14
  */
package/dist/ui.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ModuleComponentType, ModuleUISlot, SmrtModuleMeta } from '@happyvertical/smrt-types';
1
+ import type { ModuleComponentType, ModuleUISlot, SmrtModuleMeta } from '@happyvertical/smrt-types';
2
2
  /**
3
3
  * UI type definitions for SMRT Agents
4
4
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-agents",
3
- "version": "0.51.31",
3
+ "version": "0.51.33",
4
4
  "smrtJsdoc": "strict",
5
5
  "type": "module",
6
6
  "smrtRawPrimitives": "strict",
@@ -59,22 +59,22 @@
59
59
  "dependencies": {
60
60
  "@happyvertical/ai": "^0.94.1",
61
61
  "@happyvertical/files": "^0.94.1",
62
- "@happyvertical/smrt-config": "0.51.31",
63
- "@happyvertical/smrt-core": "0.51.31",
64
- "@happyvertical/smrt-jobs": "0.51.31",
65
- "@happyvertical/smrt-playbooks": "0.51.31",
66
- "@happyvertical/smrt-reports": "0.51.31",
67
- "@happyvertical/smrt-secrets": "0.51.31",
68
- "@happyvertical/smrt-tenancy": "0.51.31",
69
- "@happyvertical/smrt-types": "0.51.31",
70
- "@happyvertical/smrt-ui": "0.51.31",
71
- "@happyvertical/smrt-users": "0.51.31",
62
+ "@happyvertical/logger": "^0.94.1",
63
+ "@happyvertical/smrt-config": "0.51.33",
64
+ "@happyvertical/smrt-core": "0.51.33",
65
+ "@happyvertical/smrt-jobs": "0.51.33",
66
+ "@happyvertical/smrt-playbooks": "0.51.33",
67
+ "@happyvertical/smrt-reports": "0.51.33",
68
+ "@happyvertical/smrt-secrets": "0.51.33",
69
+ "@happyvertical/smrt-tenancy": "0.51.33",
70
+ "@happyvertical/smrt-types": "0.51.33",
71
+ "@happyvertical/smrt-ui": "0.51.33",
72
+ "@happyvertical/smrt-users": "0.51.33",
72
73
  "@happyvertical/sql": "^0.94.1",
73
74
  "@happyvertical/utils": "^0.94.1"
74
75
  },
75
76
  "devDependencies": {
76
- "@happyvertical/logger": "^0.94.1",
77
- "@happyvertical/smrt-vitest": "0.51.31",
77
+ "@happyvertical/smrt-vitest": "0.51.33",
78
78
  "@happyvertical/sql": "^0.94.1",
79
79
  "@sentry/node": "^10.75.0",
80
80
  "@sveltejs/package": "^2.5.8",
@@ -85,7 +85,7 @@
85
85
  "fast-glob": "3.3.3",
86
86
  "svelte-check": "^4.7.6",
87
87
  "svelte": "^5.57.1",
88
- "typescript": "5.9.3",
88
+ "typescript": "6.0.3",
89
89
  "vite": "8.1.4",
90
90
  "vitest": "4.1.10"
91
91
  },