@happyvertical/smrt-jobs 0.51.37 → 0.51.39

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.
@@ -8,7 +8,7 @@ import { AsyncLocalStorage } from "node:async_hooks";
8
8
  import { EventEmitter } from "node:events";
9
9
  import { Worker } from "node:worker_threads";
10
10
  //#region src/__smrt-register__.ts
11
- ObjectRegistry.registerPackageManifest(JSON.parse("{\"version\":\"1.0.0\",\"timestamp\":0,\"packageName\":\"@happyvertical/smrt-jobs\",\"packageVersion\":\"0.51.37\",\"objects\":{\"@happyvertical/smrt-jobs:ForgeDelivery\":{\"name\":\"forgedelivery\",\"className\":\"ForgeDelivery\",\"qualifiedName\":\"@happyvertical/smrt-jobs:ForgeDelivery\",\"collection\":\"forgedeliveries\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/forge-projection.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"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}}},\"provider\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"deliveryId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"installationKey\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"repositoryKey\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"eventName\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"payload\":{\"type\":\"json\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":true,\"default\":\"pending\",\"_meta\":{\"required\":true,\"default\":\"pending\"}},\"attempts\":{\"type\":\"integer\",\"required\":true,\"default\":0,\"_meta\":{\"required\":true,\"default\":0}},\"maxAttempts\":{\"type\":\"integer\",\"required\":true,\"default\":5,\"_meta\":{\"required\":true,\"default\":5}},\"receivedAt\":{\"type\":\"datetime\",\"required\":true,\"_meta\":{\"required\":true}},\"nextAttemptAt\":{\"type\":\"datetime\",\"required\":true,\"_meta\":{\"required\":true}},\"leaseOwner\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"leaseToken\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"leaseExpiresAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"lastError\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"completedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"replayCount\":{\"type\":\"integer\",\"required\":true,\"default\":0,\"_meta\":{\"required\":true,\"default\":0}}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"_smrt_forge_deliveries\",\"conflictColumns\":[\"tenant_id\",\"provider\",\"delivery_id\"],\"api\":false,\"cli\":false,\"mcp\":false,\"indexes\":[{\"name\":\"_smrt_forge_deliveries_status_next_attempt_at_idx\",\"columns\":[\"status\",\"nextAttemptAt\"]},{\"name\":\"_smrt_forge_deliveries_status_lease_expires_at_idx\",\"columns\":[\"status\",\"leaseExpiresAt\"]}],\"tenantScoped\":{\"mode\":\"required\"}},\"extends\":\"SmrtObject\",\"exportName\":\"ForgeDelivery\",\"collectionExportName\":\"ForgeDeliveryCollection\",\"validationRules\":[{\"field\":\"provider\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"deliveryId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"eventName\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"status\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"attempts\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"maxAttempts\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"receivedAt\",\"rule\":\"required\",\"fieldType\":\"datetime\"},{\"field\":\"nextAttemptAt\",\"rule\":\"required\",\"fieldType\":\"datetime\"},{\"field\":\"replayCount\",\"rule\":\"required\",\"fieldType\":\"integer\"}],\"schema\":{\"tableName\":\"_smrt_forge_deliveries\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_forge_deliveries\\\" (\\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 \\\"provider\\\" TEXT NOT NULL,\\n \\\"delivery_id\\\" TEXT NOT NULL,\\n \\\"installation_key\\\" TEXT,\\n \\\"repository_key\\\" TEXT,\\n \\\"event_name\\\" TEXT NOT NULL,\\n \\\"payload\\\" JSON,\\n \\\"status\\\" TEXT NOT NULL DEFAULT 'pending',\\n \\\"attempts\\\" INTEGER NOT NULL DEFAULT 0,\\n \\\"max_attempts\\\" INTEGER NOT NULL DEFAULT 5,\\n \\\"received_at\\\" TIMESTAMP NOT NULL,\\n \\\"next_attempt_at\\\" TIMESTAMP NOT NULL,\\n \\\"lease_owner\\\" TEXT,\\n \\\"lease_token\\\" TEXT,\\n \\\"lease_expires_at\\\" TIMESTAMP,\\n \\\"last_error\\\" TEXT,\\n \\\"completed_at\\\" TIMESTAMP,\\n \\\"replay_count\\\" INTEGER NOT NULL DEFAULT 0\\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},\"provider\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"delivery_id\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"installation_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"repository_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"event_name\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"payload\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"pending\"},\"attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":0},\"max_attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":5},\"received_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false},\"next_attempt_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false},\"lease_owner\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"lease_token\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"lease_expires_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"last_error\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"completed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"replay_count\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":0}},\"indexes\":[{\"name\":\"_smrt_forge_deliveries_tenant_id_provider_idx\",\"columns\":[\"tenant_id\",\"provider\",\"delivery_id\"],\"unique\":true},{\"name\":\"_smrt_forge_deliveries_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"_smrt_forge_deliveries_status_next_attempt_at_idx\",\"columns\":[\"status\",\"next_attempt_at\"]},{\"name\":\"_smrt_forge_deliveries_status_lease_expires_at_idx\",\"columns\":[\"status\",\"lease_expires_at\"]},{\"name\":\"_smrt_forge_deliveries_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]}],\"version\":\"38d3f476\"},\"importPath\":\"@happyvertical/smrt-jobs\"},\"@happyvertical/smrt-jobs:ForgeProjectionCheckpoint\":{\"name\":\"forgeprojectioncheckpoint\",\"className\":\"ForgeProjectionCheckpoint\",\"qualifiedName\":\"@happyvertical/smrt-jobs:ForgeProjectionCheckpoint\",\"collection\":\"forgeprojectioncheckpoints\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/forge-projection.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"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}}},\"projection\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"subjectKey\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"observationVersion\":{\"type\":\"integer\",\"required\":true,\"_meta\":{\"required\":true}},\"deliveryId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"observedAt\":{\"type\":\"datetime\",\"required\":true,\"_meta\":{\"required\":true}}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"_smrt_forge_projection_checkpoints\",\"conflictColumns\":[\"tenant_id\",\"projection\",\"subject_key\"],\"api\":false,\"cli\":false,\"mcp\":false,\"tenantScoped\":{\"mode\":\"required\"}},\"extends\":\"SmrtObject\",\"exportName\":\"ForgeProjectionCheckpoint\",\"collectionExportName\":\"ForgeProjectionCheckpointCollection\",\"validationRules\":[{\"field\":\"projection\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"subjectKey\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"observationVersion\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"deliveryId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"observedAt\",\"rule\":\"required\",\"fieldType\":\"datetime\"}],\"schema\":{\"tableName\":\"_smrt_forge_projection_checkpoints\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_forge_projection_checkpoints\\\" (\\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 \\\"projection\\\" TEXT NOT NULL,\\n \\\"subject_key\\\" TEXT NOT NULL,\\n \\\"observation_version\\\" INTEGER NOT NULL,\\n \\\"delivery_id\\\" TEXT NOT NULL,\\n \\\"observed_at\\\" TIMESTAMP 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\":true,\"unique\":false},\"projection\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"subject_key\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"observation_version\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false},\"delivery_id\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"observed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_forge_projection_checkpoints_tenant_id_projection_idx\",\"columns\":[\"tenant_id\",\"projection\",\"subject_key\"],\"unique\":true},{\"name\":\"_smrt_forge_projection_checkpoints_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"_smrt_forge_projection_checkpoints_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]}],\"version\":\"39c12493\"},\"importPath\":\"@happyvertical/smrt-jobs\"},\"@happyvertical/smrt-jobs:ForgeDeliveryCollection\":{\"name\":\"forgedeliverycollection\",\"className\":\"ForgeDeliveryCollection\",\"qualifiedName\":\"@happyvertical/smrt-jobs:ForgeDeliveryCollection\",\"collection\":\"forgedeliveries\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/forge-projection.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{},\"methods\":{\"accept\":{\"name\":\"accept\",\"async\":true,\"parameters\":[{\"name\":\"input\",\"type\":\"AcceptForgeDeliveryInput\",\"optional\":false},{\"name\":\"audit\",\"type\":\"ForgeProjectionAuditHook\",\"optional\":true}],\"returnType\":\"Promise<AcceptedForgeDelivery>\",\"isStatic\":false,\"isPublic\":true},\"claimReady\":{\"name\":\"claimReady\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"ClaimForgeDeliveryOptions\",\"optional\":false},{\"name\":\"audit\",\"type\":\"ForgeProjectionAuditHook\",\"optional\":true}],\"returnType\":\"Promise<ForgeDelivery | null>\",\"isStatic\":false,\"isPublic\":true},\"replay\":{\"name\":\"replay\",\"async\":true,\"parameters\":[{\"name\":\"id\",\"type\":\"string\",\"optional\":false},{\"name\":\"audit\",\"type\":\"ForgeProjectionAuditHook\",\"optional\":true}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":false,\"cli\":false,\"mcp\":false,\"tableName\":\"_smrt_forge_deliveries\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"ForgeDelivery\",\"exportName\":\"ForgeDeliveryCollection\",\"collectionExportName\":\"ForgeDeliveryCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_forge_deliveries\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_forge_deliveries\\\" (\\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 \\\"provider\\\" TEXT NOT NULL,\\n \\\"delivery_id\\\" TEXT NOT NULL,\\n \\\"installation_key\\\" TEXT,\\n \\\"repository_key\\\" TEXT,\\n \\\"event_name\\\" TEXT NOT NULL,\\n \\\"payload\\\" JSON,\\n \\\"status\\\" TEXT NOT NULL DEFAULT 'pending',\\n \\\"attempts\\\" INTEGER NOT NULL DEFAULT 0,\\n \\\"max_attempts\\\" INTEGER NOT NULL DEFAULT 5,\\n \\\"received_at\\\" TIMESTAMP NOT NULL,\\n \\\"next_attempt_at\\\" TIMESTAMP NOT NULL,\\n \\\"lease_owner\\\" TEXT,\\n \\\"lease_token\\\" TEXT,\\n \\\"lease_expires_at\\\" TIMESTAMP,\\n \\\"last_error\\\" TEXT,\\n \\\"completed_at\\\" TIMESTAMP,\\n \\\"replay_count\\\" INTEGER NOT NULL DEFAULT 0\\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},\"provider\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"delivery_id\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"installation_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"repository_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"event_name\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"payload\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"pending\"},\"attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":0},\"max_attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":5},\"received_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false},\"next_attempt_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false},\"lease_owner\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"lease_token\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"lease_expires_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"last_error\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"completed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"replay_count\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":0}},\"indexes\":[{\"name\":\"_smrt_forge_deliveries_tenant_id_provider_idx\",\"columns\":[\"tenant_id\",\"provider\",\"delivery_id\"],\"unique\":true},{\"name\":\"_smrt_forge_deliveries_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"_smrt_forge_deliveries_status_next_attempt_at_idx\",\"columns\":[\"status\",\"next_attempt_at\"]},{\"name\":\"_smrt_forge_deliveries_status_lease_expires_at_idx\",\"columns\":[\"status\",\"lease_expires_at\"]},{\"name\":\"_smrt_forge_deliveries_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]}],\"version\":\"38d3f476\"},\"importPath\":\"@happyvertical/smrt-jobs\"},\"@happyvertical/smrt-jobs:SmrtJobEvent\":{\"name\":\"smrtjobevent\",\"className\":\"SmrtJobEvent\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtJobEvent\",\"collection\":\"smrtjobevents\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/smrt-job-event.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"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}}},\"jobId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SmrtJob\",\"_meta\":{\"required\":true,\"constraint\":false}},\"type\":{\"type\":\"text\",\"required\":true,\"default\":\"log\",\"_meta\":{\"required\":true,\"default\":\"log\"}},\"level\":{\"type\":\"text\",\"required\":true,\"default\":\"info\",\"_meta\":{\"required\":true,\"default\":\"info\"}},\"stage\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"progress\":{\"type\":\"integer\",\"required\":false,\"_meta\":{\"nullable\":true}},\"message\":{\"type\":\"text\",\"required\":true,\"default\":\"\",\"_meta\":{\"required\":true,\"default\":\"\"}},\"data\":{\"type\":\"json\",\"required\":false,\"_meta\":{}},\"createdAt\":{\"type\":\"datetime\",\"required\":true,\"_meta\":{\"required\":true}}},\"methods\":{\"toCursor\":{\"name\":\"toCursor\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_job_events\",\"api\":false,\"cli\":{\"include\":[\"list\",\"get\"],\"http\":false,\"skipApiCheck\":true},\"mcp\":false,\"tenantScoped\":{\"mode\":\"optional\"},\"conflictColumns\":[\"tenant_id\",\"slug\",\"context\"]},\"extends\":\"SmrtObject\",\"exportName\":\"SmrtJobEvent\",\"collectionExportName\":\"SmrtJobEventCollection\",\"validationRules\":[{\"field\":\"jobId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"type\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"level\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"message\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"createdAt\",\"rule\":\"required\",\"fieldType\":\"datetime\"}],\"schema\":{\"tableName\":\"_smrt_job_events\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_job_events\\\" (\\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 \\\"job_id\\\" UUID NOT NULL,\\n \\\"type\\\" TEXT NOT NULL DEFAULT 'log',\\n \\\"level\\\" TEXT NOT NULL DEFAULT 'info',\\n \\\"stage\\\" TEXT,\\n \\\"progress\\\" INTEGER,\\n \\\"message\\\" TEXT NOT NULL DEFAULT '',\\n \\\"data\\\" 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\":false,\"unique\":false},\"job_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"type\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"log\"},\"level\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"info\"},\"stage\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"progress\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false},\"message\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"\"},\"data\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_job_events_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true,\"nullsNotDistinct\":true},{\"name\":\"_smrt_job_events_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"_smrt_job_events_job_id_idx\",\"columns\":[\"job_id\"]}],\"version\":\"8a9faeec\"},\"importPath\":\"@happyvertical/smrt-jobs\"},\"@happyvertical/smrt-jobs:SmrtJobEventCollection\":{\"name\":\"smrtjobeventcollection\",\"className\":\"SmrtJobEventCollection\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtJobEventCollection\",\"collection\":\"smrtjobevents\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/smrt-job-event.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{},\"methods\":{\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<this>\",\"isStatic\":false,\"isPublic\":true},\"append\":{\"name\":\"append\",\"async\":true,\"parameters\":[{\"name\":\"input\",\"type\":\"SmrtJobEventData\",\"optional\":false}],\"returnType\":\"Promise<SmrtJobEvent>\",\"isStatic\":false,\"isPublic\":true},\"listByJob\":{\"name\":\"listByJob\",\"async\":true,\"parameters\":[{\"name\":\"jobId\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"ListJobEventsOptions\",\"optional\":true}],\"returnType\":\"Promise<SmrtJobEvent[]>\",\"isStatic\":false,\"isPublic\":true},\"listSinceCursor\":{\"name\":\"listSinceCursor\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"any\",\"optional\":true,\"typeUnresolved\":true}],\"returnType\":\"Promise<SmrtJobEvent[]>\",\"isStatic\":false,\"isPublic\":true},\"latestProgressByJobIds\":{\"name\":\"latestProgressByJobIds\",\"async\":true,\"parameters\":[{\"name\":\"jobIds\",\"type\":\"string[]\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true,\"memberTypes\":[\"string | null\"]}],\"returnType\":\"Promise<Map<string, SmrtJobEvent>>\",\"isStatic\":false,\"isPublic\":true},\"cleanup\":{\"name\":\"cleanup\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false,\"memberTypes\":[\"Date\",\"boolean\"]}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_job_events\",\"api\":false,\"mcp\":false},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SmrtJobEvent\",\"exportName\":\"SmrtJobEventCollection\",\"collectionExportName\":\"SmrtJobEventCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_job_events\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_job_events\\\" (\\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 \\\"job_id\\\" UUID NOT NULL,\\n \\\"type\\\" TEXT NOT NULL DEFAULT 'log',\\n \\\"level\\\" TEXT NOT NULL DEFAULT 'info',\\n \\\"stage\\\" TEXT,\\n \\\"progress\\\" INTEGER,\\n \\\"message\\\" TEXT NOT NULL DEFAULT '',\\n \\\"data\\\" 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\":false,\"unique\":false},\"job_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"type\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"log\"},\"level\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"info\"},\"stage\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"progress\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false},\"message\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"\"},\"data\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_job_events_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true,\"nullsNotDistinct\":true},{\"name\":\"_smrt_job_events_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"_smrt_job_events_job_id_idx\",\"columns\":[\"job_id\"]}],\"version\":\"8a9faeec\"},\"importPath\":\"@happyvertical/smrt-jobs\"},\"@happyvertical/smrt-jobs:SmrtJob\":{\"name\":\"smrtjob\",\"className\":\"SmrtJob\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtJob\",\"collection\":\"smrtjobs\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/smrt-job.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"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}}},\"queue\":{\"type\":\"text\",\"required\":true,\"default\":\"default\",\"_meta\":{\"required\":true,\"default\":\"default\"}},\"objectType\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"objectId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"method\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"args\":{\"type\":\"json\",\"required\":false,\"_meta\":{}},\"runAt\":{\"type\":\"datetime\",\"required\":true,\"_meta\":{\"required\":true,\"indexed\":true}},\"priority\":{\"type\":\"integer\",\"required\":true,\"default\":50,\"_meta\":{\"required\":true,\"default\":50}},\"status\":{\"type\":\"text\",\"required\":true,\"default\":\"pending\",\"_meta\":{\"required\":true,\"default\":\"pending\",\"indexed\":true}},\"attempts\":{\"type\":\"integer\",\"required\":true,\"default\":0,\"_meta\":{\"required\":true,\"default\":0}},\"maxAttempts\":{\"type\":\"integer\",\"required\":true,\"default\":3,\"_meta\":{\"required\":true,\"default\":3}},\"timeout\":{\"type\":\"integer\",\"required\":true,\"default\":300000,\"_meta\":{\"required\":true,\"default\":300000}},\"timeoutBehavior\":{\"type\":\"text\",\"required\":true,\"default\":\"fail\",\"_meta\":{\"required\":true,\"default\":\"fail\"}},\"startedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"completedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"lastError\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"resultPointer\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"taskId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true,\"unique\":true}},\"taskOwnerId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"taskResult\":{\"type\":\"json\",\"required\":false,\"_meta\":{\"nullable\":true}},\"taskInputRequests\":{\"type\":\"json\",\"required\":false,\"_meta\":{\"nullable\":true}},\"taskInputResponses\":{\"type\":\"json\",\"required\":false,\"_meta\":{\"nullable\":true}},\"retryStrategy\":{\"type\":\"json\",\"required\":false,\"_meta\":{}},\"workerId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"workerHeartbeat\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}}},\"methods\":{\"save\":{\"name\":\"save\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<this>\",\"isStatic\":false,\"isPublic\":true},\"retry\":{\"name\":\"retry\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"cancel\":{\"name\":\"cancel\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getDescription\":{\"name\":\"getDescription\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_jobs\",\"api\":false,\"cli\":{\"include\":[\"list\",\"get\",\"retry\",\"cancel\"],\"skipApiCheck\":true,\"http\":false},\"mcp\":false,\"indexes\":[{\"name\":\"_smrt_jobs_status_run_at_idx\",\"columns\":[\"status\",\"runAt\"]}],\"tenantScoped\":{\"mode\":\"optional\"},\"conflictColumns\":[\"tenant_id\",\"slug\",\"context\"]},\"extends\":\"SmrtObject\",\"exportName\":\"SmrtJob\",\"collectionExportName\":\"SmrtJobCollection\",\"validationRules\":[{\"field\":\"queue\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"objectType\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"method\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"runAt\",\"rule\":\"required\",\"fieldType\":\"datetime\"},{\"field\":\"priority\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"status\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"attempts\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"maxAttempts\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"timeout\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"timeoutBehavior\",\"rule\":\"required\",\"fieldType\":\"text\"}],\"schema\":{\"tableName\":\"_smrt_jobs\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_jobs\\\" (\\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 \\\"queue\\\" TEXT NOT NULL DEFAULT 'default',\\n \\\"object_type\\\" TEXT NOT NULL,\\n \\\"object_id\\\" TEXT,\\n \\\"method\\\" TEXT NOT NULL,\\n \\\"args\\\" JSON,\\n \\\"run_at\\\" TIMESTAMP NOT NULL,\\n \\\"priority\\\" INTEGER NOT NULL DEFAULT 50,\\n \\\"status\\\" TEXT NOT NULL DEFAULT 'pending',\\n \\\"attempts\\\" INTEGER NOT NULL DEFAULT 0,\\n \\\"max_attempts\\\" INTEGER NOT NULL DEFAULT 3,\\n \\\"timeout\\\" INTEGER NOT NULL DEFAULT 300000,\\n \\\"timeout_behavior\\\" TEXT NOT NULL DEFAULT 'fail',\\n \\\"started_at\\\" TIMESTAMP,\\n \\\"completed_at\\\" TIMESTAMP,\\n \\\"last_error\\\" TEXT,\\n \\\"result_pointer\\\" TEXT,\\n \\\"task_id\\\" TEXT UNIQUE,\\n \\\"task_owner_id\\\" TEXT,\\n \\\"task_result\\\" JSON,\\n \\\"task_input_requests\\\" JSON,\\n \\\"task_input_responses\\\" JSON,\\n \\\"retry_strategy\\\" JSON,\\n \\\"worker_id\\\" TEXT,\\n \\\"worker_heartbeat\\\" TIMESTAMP\\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},\"queue\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"default\"},\"object_type\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"object_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"method\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"args\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"run_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false},\"priority\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":50},\"status\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"pending\"},\"attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":0},\"max_attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":3},\"timeout\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":300000},\"timeout_behavior\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"fail\"},\"started_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"completed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"last_error\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"result_pointer\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"task_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":true},\"task_owner_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"task_result\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"task_input_requests\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"task_input_responses\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"retry_strategy\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"worker_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"worker_heartbeat\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_jobs_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true,\"nullsNotDistinct\":true},{\"name\":\"_smrt_jobs_run_at_idx\",\"columns\":[\"run_at\"]},{\"name\":\"_smrt_jobs_status_idx\",\"columns\":[\"status\"]},{\"name\":\"_smrt_jobs_status_run_at_idx\",\"columns\":[\"status\",\"run_at\"]},{\"name\":\"_smrt_jobs_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]}],\"version\":\"43e1324f\"},\"importPath\":\"@happyvertical/smrt-jobs\"},\"@happyvertical/smrt-jobs:SmrtJobCollection\":{\"name\":\"smrtjobcollection\",\"className\":\"SmrtJobCollection\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtJobCollection\",\"collection\":\"smrtjobs\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/smrt-job.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{},\"methods\":{\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<this>\",\"isStatic\":false,\"isPublic\":true},\"listByStatus\":{\"name\":\"listByStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"JobStatus | JobStatus[]\",\"optional\":false,\"unionBranches\":[{\"type\":\"JobStatus\"},{\"type\":\"JobStatus[]\"}]},{\"name\":\"options\",\"type\":\"object\",\"optional\":true,\"memberTypes\":[\"number\",\"string\"]}],\"returnType\":\"Promise<SmrtJob[]>\",\"isStatic\":false,\"isPublic\":true},\"listReady\":{\"name\":\"listReady\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":true,\"memberTypes\":[\"number\",\"string[]\"]}],\"returnType\":\"Promise<SmrtJob[]>\",\"isStatic\":false,\"isPublic\":true},\"claimReady\":{\"name\":\"claimReady\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"ClaimReadyOptions\",\"optional\":false}],\"returnType\":\"Promise<SmrtJob[]>\",\"isStatic\":false,\"isPublic\":true},\"countInFlightForTenant\":{\"name\":\"countInFlightForTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string | null\",\"optional\":false,\"unionBranches\":[{\"type\":\"string\"},{\"type\":\"null\"}]}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"enqueueJob\":{\"name\":\"enqueueJob\",\"async\":true,\"parameters\":[{\"name\":\"data\",\"type\":\"SmrtJobData\",\"optional\":false},{\"name\":\"options\",\"type\":\"EnqueueJobOptions\",\"optional\":true}],\"returnType\":\"Promise<SmrtJob>\",\"isStatic\":false,\"isPublic\":true},\"stats\":{\"name\":\"stats\",\"async\":true,\"parameters\":[{\"name\":\"queue\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true},\"cleanup\":{\"name\":\"cleanup\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false,\"memberTypes\":[\"Date\",\"number\",\"boolean\"]}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_jobs\",\"api\":false,\"mcp\":false},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SmrtJob\",\"exportName\":\"SmrtJobCollection\",\"collectionExportName\":\"SmrtJobCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_jobs\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_jobs\\\" (\\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 \\\"queue\\\" TEXT NOT NULL DEFAULT 'default',\\n \\\"object_type\\\" TEXT NOT NULL,\\n \\\"object_id\\\" TEXT,\\n \\\"method\\\" TEXT NOT NULL,\\n \\\"args\\\" JSON,\\n \\\"run_at\\\" TIMESTAMP NOT NULL,\\n \\\"priority\\\" INTEGER NOT NULL DEFAULT 50,\\n \\\"status\\\" TEXT NOT NULL DEFAULT 'pending',\\n \\\"attempts\\\" INTEGER NOT NULL DEFAULT 0,\\n \\\"max_attempts\\\" INTEGER NOT NULL DEFAULT 3,\\n \\\"timeout\\\" INTEGER NOT NULL DEFAULT 300000,\\n \\\"timeout_behavior\\\" TEXT NOT NULL DEFAULT 'fail',\\n \\\"started_at\\\" TIMESTAMP,\\n \\\"completed_at\\\" TIMESTAMP,\\n \\\"last_error\\\" TEXT,\\n \\\"result_pointer\\\" TEXT,\\n \\\"task_id\\\" TEXT UNIQUE,\\n \\\"task_owner_id\\\" TEXT,\\n \\\"task_result\\\" JSON,\\n \\\"task_input_requests\\\" JSON,\\n \\\"task_input_responses\\\" JSON,\\n \\\"retry_strategy\\\" JSON,\\n \\\"worker_id\\\" TEXT,\\n \\\"worker_heartbeat\\\" TIMESTAMP\\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},\"queue\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"default\"},\"object_type\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"object_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"method\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"args\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"run_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false},\"priority\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":50},\"status\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"pending\"},\"attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":0},\"max_attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":3},\"timeout\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":300000},\"timeout_behavior\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"fail\"},\"started_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"completed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"last_error\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"result_pointer\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"task_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":true},\"task_owner_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"task_result\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"task_input_requests\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"task_input_responses\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"retry_strategy\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"worker_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"worker_heartbeat\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_jobs_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true,\"nullsNotDistinct\":true},{\"name\":\"_smrt_jobs_run_at_idx\",\"columns\":[\"run_at\"]},{\"name\":\"_smrt_jobs_status_idx\",\"columns\":[\"status\"]},{\"name\":\"_smrt_jobs_status_run_at_idx\",\"columns\":[\"status\",\"run_at\"]},{\"name\":\"_smrt_jobs_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]}],\"version\":\"43e1324f\"},\"importPath\":\"@happyvertical/smrt-jobs\"},\"@happyvertical/smrt-jobs:SmrtWorker\":{\"name\":\"smrtworker\",\"className\":\"SmrtWorker\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtWorker\",\"collection\":\"smrtworkers\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/smrt-worker.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{\"workerId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"pid\":{\"type\":\"integer\",\"required\":false,\"_meta\":{\"nullable\":true}},\"hostname\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"startedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"heartbeatAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"leaseExpiresAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"status\":{\"type\":\"text\",\"required\":true,\"default\":\"running\",\"_meta\":{\"required\":true,\"default\":\"running\"}}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"_smrt_workers\",\"conflictColumns\":[\"worker_id\"],\"api\":false,\"cli\":false,\"mcp\":false},\"extends\":\"SmrtObject\",\"exportName\":\"SmrtWorker\",\"collectionExportName\":\"SmrtWorkerCollection\",\"validationRules\":[{\"field\":\"workerId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"status\",\"rule\":\"required\",\"fieldType\":\"text\"}],\"schema\":{\"tableName\":\"_smrt_workers\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_workers\\\" (\\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 \\\"worker_id\\\" TEXT NOT NULL,\\n \\\"pid\\\" INTEGER,\\n \\\"hostname\\\" TEXT,\\n \\\"started_at\\\" TIMESTAMP,\\n \\\"heartbeat_at\\\" TIMESTAMP,\\n \\\"lease_expires_at\\\" TIMESTAMP,\\n \\\"status\\\" TEXT NOT NULL DEFAULT 'running'\\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\"},\"worker_id\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"pid\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false},\"hostname\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"started_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"heartbeat_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"lease_expires_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"running\"}},\"indexes\":[{\"name\":\"_smrt_workers_worker_id_idx\",\"columns\":[\"worker_id\"],\"unique\":true},{\"name\":\"_smrt_workers_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"_smrt_workers_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"bfaad669\"},\"importPath\":\"@happyvertical/smrt-jobs\"},\"@happyvertical/smrt-jobs:SmrtWorkerCollection\":{\"name\":\"smrtworkercollection\",\"className\":\"SmrtWorkerCollection\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtWorkerCollection\",\"collection\":\"smrtworkers\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/smrt-worker.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{},\"methods\":{\"assertReady\":{\"name\":\"assertReady\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"tableReady\":{\"name\":\"tableReady\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"registerWorker\":{\"name\":\"registerWorker\",\"async\":true,\"parameters\":[{\"name\":\"input\",\"type\":\"RegisterWorkerInput\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"renewLease\":{\"name\":\"renewLease\",\"async\":true,\"parameters\":[{\"name\":\"workerKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"leaseTtlMs\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"expireWorker\":{\"name\":\"expireWorker\",\"async\":true,\"parameters\":[{\"name\":\"workerKey\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"freshLeaseWorkerKeys\":{\"name\":\"freshLeaseWorkerKeys\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Set<string>>\",\"isStatic\":false,\"isPublic\":true},\"pruneExpired\":{\"name\":\"pruneExpired\",\"async\":true,\"parameters\":[{\"name\":\"graceMs\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_workers\",\"api\":false,\"mcp\":false,\"cli\":false},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SmrtWorker\",\"exportName\":\"SmrtWorkerCollection\",\"collectionExportName\":\"SmrtWorkerCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_workers\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_workers\\\" (\\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 \\\"worker_id\\\" TEXT NOT NULL,\\n \\\"pid\\\" INTEGER,\\n \\\"hostname\\\" TEXT,\\n \\\"started_at\\\" TIMESTAMP,\\n \\\"heartbeat_at\\\" TIMESTAMP,\\n \\\"lease_expires_at\\\" TIMESTAMP,\\n \\\"status\\\" TEXT NOT NULL DEFAULT 'running'\\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\"},\"worker_id\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"pid\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false},\"hostname\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"started_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"heartbeat_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"lease_expires_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"running\"}},\"indexes\":[{\"name\":\"_smrt_workers_worker_id_idx\",\"columns\":[\"worker_id\"],\"unique\":true},{\"name\":\"_smrt_workers_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"_smrt_workers_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"bfaad669\"},\"importPath\":\"@happyvertical/smrt-jobs\"}},\"moduleType\":\"smrt\",\"smrtDependencies\":[\"@happyvertical/smrt-core\",\"@happyvertical/smrt-tenancy\"]}"));
11
+ ObjectRegistry.registerPackageManifest(JSON.parse("{\"version\":\"1.0.0\",\"timestamp\":0,\"packageName\":\"@happyvertical/smrt-jobs\",\"packageVersion\":\"0.51.39\",\"objects\":{\"@happyvertical/smrt-jobs:ForgeDelivery\":{\"name\":\"forgedelivery\",\"className\":\"ForgeDelivery\",\"qualifiedName\":\"@happyvertical/smrt-jobs:ForgeDelivery\",\"collection\":\"forgedeliveries\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/forge-projection.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"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}}},\"provider\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"deliveryId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"installationKey\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"repositoryKey\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"eventName\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"payload\":{\"type\":\"json\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":true,\"default\":\"pending\",\"_meta\":{\"required\":true,\"default\":\"pending\"}},\"attempts\":{\"type\":\"integer\",\"required\":true,\"default\":0,\"_meta\":{\"required\":true,\"default\":0}},\"maxAttempts\":{\"type\":\"integer\",\"required\":true,\"default\":5,\"_meta\":{\"required\":true,\"default\":5}},\"receivedAt\":{\"type\":\"datetime\",\"required\":true,\"_meta\":{\"required\":true}},\"nextAttemptAt\":{\"type\":\"datetime\",\"required\":true,\"_meta\":{\"required\":true}},\"leaseOwner\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"leaseToken\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"leaseExpiresAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"lastError\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"completedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"replayCount\":{\"type\":\"integer\",\"required\":true,\"default\":0,\"_meta\":{\"required\":true,\"default\":0}}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"_smrt_forge_deliveries\",\"conflictColumns\":[\"tenant_id\",\"provider\",\"delivery_id\"],\"api\":false,\"cli\":false,\"mcp\":false,\"indexes\":[{\"name\":\"_smrt_forge_deliveries_status_next_attempt_at_idx\",\"columns\":[\"status\",\"nextAttemptAt\"]},{\"name\":\"_smrt_forge_deliveries_status_lease_expires_at_idx\",\"columns\":[\"status\",\"leaseExpiresAt\"]}],\"tenantScoped\":{\"mode\":\"required\"}},\"extends\":\"SmrtObject\",\"exportName\":\"ForgeDelivery\",\"collectionExportName\":\"ForgeDeliveryCollection\",\"validationRules\":[{\"field\":\"provider\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"deliveryId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"eventName\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"status\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"attempts\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"maxAttempts\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"receivedAt\",\"rule\":\"required\",\"fieldType\":\"datetime\"},{\"field\":\"nextAttemptAt\",\"rule\":\"required\",\"fieldType\":\"datetime\"},{\"field\":\"replayCount\",\"rule\":\"required\",\"fieldType\":\"integer\"}],\"schema\":{\"tableName\":\"_smrt_forge_deliveries\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_forge_deliveries\\\" (\\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 \\\"provider\\\" TEXT NOT NULL,\\n \\\"delivery_id\\\" TEXT NOT NULL,\\n \\\"installation_key\\\" TEXT,\\n \\\"repository_key\\\" TEXT,\\n \\\"event_name\\\" TEXT NOT NULL,\\n \\\"payload\\\" JSON,\\n \\\"status\\\" TEXT NOT NULL DEFAULT 'pending',\\n \\\"attempts\\\" INTEGER NOT NULL DEFAULT 0,\\n \\\"max_attempts\\\" INTEGER NOT NULL DEFAULT 5,\\n \\\"received_at\\\" TIMESTAMP NOT NULL,\\n \\\"next_attempt_at\\\" TIMESTAMP NOT NULL,\\n \\\"lease_owner\\\" TEXT,\\n \\\"lease_token\\\" TEXT,\\n \\\"lease_expires_at\\\" TIMESTAMP,\\n \\\"last_error\\\" TEXT,\\n \\\"completed_at\\\" TIMESTAMP,\\n \\\"replay_count\\\" INTEGER NOT NULL DEFAULT 0\\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},\"provider\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"delivery_id\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"installation_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"repository_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"event_name\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"payload\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"pending\"},\"attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":0},\"max_attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":5},\"received_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false},\"next_attempt_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false},\"lease_owner\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"lease_token\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"lease_expires_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"last_error\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"completed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"replay_count\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":0}},\"indexes\":[{\"name\":\"_smrt_forge_deliveries_tenant_id_provider_idx\",\"columns\":[\"tenant_id\",\"provider\",\"delivery_id\"],\"unique\":true},{\"name\":\"_smrt_forge_deliveries_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"_smrt_forge_deliveries_status_next_attempt_at_idx\",\"columns\":[\"status\",\"next_attempt_at\"]},{\"name\":\"_smrt_forge_deliveries_status_lease_expires_at_idx\",\"columns\":[\"status\",\"lease_expires_at\"]},{\"name\":\"_smrt_forge_deliveries_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]}],\"version\":\"38d3f476\"},\"importPath\":\"@happyvertical/smrt-jobs\"},\"@happyvertical/smrt-jobs:ForgeProjectionCheckpoint\":{\"name\":\"forgeprojectioncheckpoint\",\"className\":\"ForgeProjectionCheckpoint\",\"qualifiedName\":\"@happyvertical/smrt-jobs:ForgeProjectionCheckpoint\",\"collection\":\"forgeprojectioncheckpoints\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/forge-projection.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"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}}},\"projection\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"subjectKey\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"observationVersion\":{\"type\":\"integer\",\"required\":true,\"_meta\":{\"required\":true}},\"deliveryId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"observedAt\":{\"type\":\"datetime\",\"required\":true,\"_meta\":{\"required\":true}}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"_smrt_forge_projection_checkpoints\",\"conflictColumns\":[\"tenant_id\",\"projection\",\"subject_key\"],\"api\":false,\"cli\":false,\"mcp\":false,\"tenantScoped\":{\"mode\":\"required\"}},\"extends\":\"SmrtObject\",\"exportName\":\"ForgeProjectionCheckpoint\",\"collectionExportName\":\"ForgeProjectionCheckpointCollection\",\"validationRules\":[{\"field\":\"projection\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"subjectKey\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"observationVersion\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"deliveryId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"observedAt\",\"rule\":\"required\",\"fieldType\":\"datetime\"}],\"schema\":{\"tableName\":\"_smrt_forge_projection_checkpoints\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_forge_projection_checkpoints\\\" (\\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 \\\"projection\\\" TEXT NOT NULL,\\n \\\"subject_key\\\" TEXT NOT NULL,\\n \\\"observation_version\\\" INTEGER NOT NULL,\\n \\\"delivery_id\\\" TEXT NOT NULL,\\n \\\"observed_at\\\" TIMESTAMP 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\":true,\"unique\":false},\"projection\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"subject_key\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"observation_version\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false},\"delivery_id\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"observed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_forge_projection_checkpoints_tenant_id_projection_idx\",\"columns\":[\"tenant_id\",\"projection\",\"subject_key\"],\"unique\":true},{\"name\":\"_smrt_forge_projection_checkpoints_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"_smrt_forge_projection_checkpoints_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]}],\"version\":\"39c12493\"},\"importPath\":\"@happyvertical/smrt-jobs\"},\"@happyvertical/smrt-jobs:ForgeDeliveryCollection\":{\"name\":\"forgedeliverycollection\",\"className\":\"ForgeDeliveryCollection\",\"qualifiedName\":\"@happyvertical/smrt-jobs:ForgeDeliveryCollection\",\"collection\":\"forgedeliveries\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/forge-projection.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{},\"methods\":{\"accept\":{\"name\":\"accept\",\"async\":true,\"parameters\":[{\"name\":\"input\",\"type\":\"AcceptForgeDeliveryInput\",\"optional\":false},{\"name\":\"audit\",\"type\":\"ForgeProjectionAuditHook\",\"optional\":true}],\"returnType\":\"Promise<AcceptedForgeDelivery>\",\"isStatic\":false,\"isPublic\":true},\"claimReady\":{\"name\":\"claimReady\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"ClaimForgeDeliveryOptions\",\"optional\":false},{\"name\":\"audit\",\"type\":\"ForgeProjectionAuditHook\",\"optional\":true}],\"returnType\":\"Promise<ForgeDelivery | null>\",\"isStatic\":false,\"isPublic\":true},\"replay\":{\"name\":\"replay\",\"async\":true,\"parameters\":[{\"name\":\"id\",\"type\":\"string\",\"optional\":false},{\"name\":\"audit\",\"type\":\"ForgeProjectionAuditHook\",\"optional\":true}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":false,\"cli\":false,\"mcp\":false,\"tableName\":\"_smrt_forge_deliveries\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"ForgeDelivery\",\"exportName\":\"ForgeDeliveryCollection\",\"collectionExportName\":\"ForgeDeliveryCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_forge_deliveries\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_forge_deliveries\\\" (\\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 \\\"provider\\\" TEXT NOT NULL,\\n \\\"delivery_id\\\" TEXT NOT NULL,\\n \\\"installation_key\\\" TEXT,\\n \\\"repository_key\\\" TEXT,\\n \\\"event_name\\\" TEXT NOT NULL,\\n \\\"payload\\\" JSON,\\n \\\"status\\\" TEXT NOT NULL DEFAULT 'pending',\\n \\\"attempts\\\" INTEGER NOT NULL DEFAULT 0,\\n \\\"max_attempts\\\" INTEGER NOT NULL DEFAULT 5,\\n \\\"received_at\\\" TIMESTAMP NOT NULL,\\n \\\"next_attempt_at\\\" TIMESTAMP NOT NULL,\\n \\\"lease_owner\\\" TEXT,\\n \\\"lease_token\\\" TEXT,\\n \\\"lease_expires_at\\\" TIMESTAMP,\\n \\\"last_error\\\" TEXT,\\n \\\"completed_at\\\" TIMESTAMP,\\n \\\"replay_count\\\" INTEGER NOT NULL DEFAULT 0\\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},\"provider\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"delivery_id\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"installation_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"repository_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"event_name\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"payload\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"pending\"},\"attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":0},\"max_attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":5},\"received_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false},\"next_attempt_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false},\"lease_owner\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"lease_token\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"lease_expires_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"last_error\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"completed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"replay_count\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":0}},\"indexes\":[{\"name\":\"_smrt_forge_deliveries_tenant_id_provider_idx\",\"columns\":[\"tenant_id\",\"provider\",\"delivery_id\"],\"unique\":true},{\"name\":\"_smrt_forge_deliveries_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"_smrt_forge_deliveries_status_next_attempt_at_idx\",\"columns\":[\"status\",\"next_attempt_at\"]},{\"name\":\"_smrt_forge_deliveries_status_lease_expires_at_idx\",\"columns\":[\"status\",\"lease_expires_at\"]},{\"name\":\"_smrt_forge_deliveries_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]}],\"version\":\"38d3f476\"},\"importPath\":\"@happyvertical/smrt-jobs\"},\"@happyvertical/smrt-jobs:SmrtJobEvent\":{\"name\":\"smrtjobevent\",\"className\":\"SmrtJobEvent\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtJobEvent\",\"collection\":\"smrtjobevents\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/smrt-job-event.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"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}}},\"jobId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SmrtJob\",\"_meta\":{\"required\":true,\"constraint\":false}},\"type\":{\"type\":\"text\",\"required\":true,\"default\":\"log\",\"_meta\":{\"required\":true,\"default\":\"log\"}},\"level\":{\"type\":\"text\",\"required\":true,\"default\":\"info\",\"_meta\":{\"required\":true,\"default\":\"info\"}},\"stage\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"progress\":{\"type\":\"integer\",\"required\":false,\"_meta\":{\"nullable\":true}},\"message\":{\"type\":\"text\",\"required\":true,\"default\":\"\",\"_meta\":{\"required\":true,\"default\":\"\"}},\"data\":{\"type\":\"json\",\"required\":false,\"_meta\":{}},\"createdAt\":{\"type\":\"datetime\",\"required\":true,\"_meta\":{\"required\":true}}},\"methods\":{\"toCursor\":{\"name\":\"toCursor\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_job_events\",\"api\":false,\"cli\":{\"include\":[\"list\",\"get\"],\"http\":false,\"skipApiCheck\":true},\"mcp\":false,\"tenantScoped\":{\"mode\":\"optional\"},\"conflictColumns\":[\"tenant_id\",\"slug\",\"context\"]},\"extends\":\"SmrtObject\",\"exportName\":\"SmrtJobEvent\",\"collectionExportName\":\"SmrtJobEventCollection\",\"validationRules\":[{\"field\":\"jobId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"type\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"level\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"message\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"createdAt\",\"rule\":\"required\",\"fieldType\":\"datetime\"}],\"schema\":{\"tableName\":\"_smrt_job_events\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_job_events\\\" (\\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 \\\"job_id\\\" UUID NOT NULL,\\n \\\"type\\\" TEXT NOT NULL DEFAULT 'log',\\n \\\"level\\\" TEXT NOT NULL DEFAULT 'info',\\n \\\"stage\\\" TEXT,\\n \\\"progress\\\" INTEGER,\\n \\\"message\\\" TEXT NOT NULL DEFAULT '',\\n \\\"data\\\" 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\":false,\"unique\":false},\"job_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"type\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"log\"},\"level\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"info\"},\"stage\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"progress\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false},\"message\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"\"},\"data\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_job_events_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true,\"nullsNotDistinct\":true},{\"name\":\"_smrt_job_events_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"_smrt_job_events_job_id_idx\",\"columns\":[\"job_id\"]}],\"version\":\"8a9faeec\"},\"importPath\":\"@happyvertical/smrt-jobs\"},\"@happyvertical/smrt-jobs:SmrtJobEventCollection\":{\"name\":\"smrtjobeventcollection\",\"className\":\"SmrtJobEventCollection\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtJobEventCollection\",\"collection\":\"smrtjobevents\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/smrt-job-event.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{},\"methods\":{\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<this>\",\"isStatic\":false,\"isPublic\":true},\"append\":{\"name\":\"append\",\"async\":true,\"parameters\":[{\"name\":\"input\",\"type\":\"SmrtJobEventData\",\"optional\":false}],\"returnType\":\"Promise<SmrtJobEvent>\",\"isStatic\":false,\"isPublic\":true},\"listByJob\":{\"name\":\"listByJob\",\"async\":true,\"parameters\":[{\"name\":\"jobId\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"ListJobEventsOptions\",\"optional\":true}],\"returnType\":\"Promise<SmrtJobEvent[]>\",\"isStatic\":false,\"isPublic\":true},\"listSinceCursor\":{\"name\":\"listSinceCursor\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"any\",\"optional\":true,\"typeUnresolved\":true}],\"returnType\":\"Promise<SmrtJobEvent[]>\",\"isStatic\":false,\"isPublic\":true},\"latestProgressByJobIds\":{\"name\":\"latestProgressByJobIds\",\"async\":true,\"parameters\":[{\"name\":\"jobIds\",\"type\":\"string[]\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true,\"memberTypes\":[\"string | null\"]}],\"returnType\":\"Promise<Map<string, SmrtJobEvent>>\",\"isStatic\":false,\"isPublic\":true},\"cleanup\":{\"name\":\"cleanup\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false,\"memberTypes\":[\"Date\",\"boolean\"]}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_job_events\",\"api\":false,\"mcp\":false},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SmrtJobEvent\",\"exportName\":\"SmrtJobEventCollection\",\"collectionExportName\":\"SmrtJobEventCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_job_events\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_job_events\\\" (\\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 \\\"job_id\\\" UUID NOT NULL,\\n \\\"type\\\" TEXT NOT NULL DEFAULT 'log',\\n \\\"level\\\" TEXT NOT NULL DEFAULT 'info',\\n \\\"stage\\\" TEXT,\\n \\\"progress\\\" INTEGER,\\n \\\"message\\\" TEXT NOT NULL DEFAULT '',\\n \\\"data\\\" 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\":false,\"unique\":false},\"job_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"type\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"log\"},\"level\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"info\"},\"stage\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"progress\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false},\"message\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"\"},\"data\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_job_events_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true,\"nullsNotDistinct\":true},{\"name\":\"_smrt_job_events_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"_smrt_job_events_job_id_idx\",\"columns\":[\"job_id\"]}],\"version\":\"8a9faeec\"},\"importPath\":\"@happyvertical/smrt-jobs\"},\"@happyvertical/smrt-jobs:SmrtJob\":{\"name\":\"smrtjob\",\"className\":\"SmrtJob\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtJob\",\"collection\":\"smrtjobs\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/smrt-job.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"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}}},\"queue\":{\"type\":\"text\",\"required\":true,\"default\":\"default\",\"_meta\":{\"required\":true,\"default\":\"default\"}},\"objectType\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"objectId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"method\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"args\":{\"type\":\"json\",\"required\":false,\"_meta\":{}},\"runAt\":{\"type\":\"datetime\",\"required\":true,\"_meta\":{\"required\":true,\"indexed\":true}},\"priority\":{\"type\":\"integer\",\"required\":true,\"default\":50,\"_meta\":{\"required\":true,\"default\":50}},\"status\":{\"type\":\"text\",\"required\":true,\"default\":\"pending\",\"_meta\":{\"required\":true,\"default\":\"pending\",\"indexed\":true}},\"attempts\":{\"type\":\"integer\",\"required\":true,\"default\":0,\"_meta\":{\"required\":true,\"default\":0}},\"maxAttempts\":{\"type\":\"integer\",\"required\":true,\"default\":3,\"_meta\":{\"required\":true,\"default\":3}},\"timeout\":{\"type\":\"integer\",\"required\":true,\"default\":300000,\"_meta\":{\"required\":true,\"default\":300000}},\"timeoutBehavior\":{\"type\":\"text\",\"required\":true,\"default\":\"fail\",\"_meta\":{\"required\":true,\"default\":\"fail\"}},\"startedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"completedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"lastError\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"resultPointer\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"taskId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true,\"unique\":true}},\"taskOwnerId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"taskResult\":{\"type\":\"json\",\"required\":false,\"_meta\":{\"nullable\":true}},\"taskInputRequests\":{\"type\":\"json\",\"required\":false,\"_meta\":{\"nullable\":true}},\"taskInputResponses\":{\"type\":\"json\",\"required\":false,\"_meta\":{\"nullable\":true}},\"retryStrategy\":{\"type\":\"json\",\"required\":false,\"_meta\":{}},\"workerId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"workerHeartbeat\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}}},\"methods\":{\"save\":{\"name\":\"save\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<this>\",\"isStatic\":false,\"isPublic\":true},\"retry\":{\"name\":\"retry\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"cancel\":{\"name\":\"cancel\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getDescription\":{\"name\":\"getDescription\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_jobs\",\"api\":false,\"cli\":{\"include\":[\"list\",\"get\",\"retry\",\"cancel\"],\"skipApiCheck\":true,\"http\":false},\"mcp\":false,\"indexes\":[{\"name\":\"_smrt_jobs_status_run_at_idx\",\"columns\":[\"status\",\"runAt\"]},{\"name\":\"_smrt_jobs_ready_idx\",\"columns\":[\"status\",\"runAt\"],\"where\":\"status = 'pending' AND (task_input_requests IS NULL OR task_input_responses IS NOT NULL)\"}],\"tenantScoped\":{\"mode\":\"optional\"},\"conflictColumns\":[\"tenant_id\",\"slug\",\"context\"]},\"extends\":\"SmrtObject\",\"exportName\":\"SmrtJob\",\"collectionExportName\":\"SmrtJobCollection\",\"validationRules\":[{\"field\":\"queue\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"objectType\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"method\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"runAt\",\"rule\":\"required\",\"fieldType\":\"datetime\"},{\"field\":\"priority\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"status\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"attempts\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"maxAttempts\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"timeout\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"timeoutBehavior\",\"rule\":\"required\",\"fieldType\":\"text\"}],\"schema\":{\"tableName\":\"_smrt_jobs\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_jobs\\\" (\\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 \\\"queue\\\" TEXT NOT NULL DEFAULT 'default',\\n \\\"object_type\\\" TEXT NOT NULL,\\n \\\"object_id\\\" TEXT,\\n \\\"method\\\" TEXT NOT NULL,\\n \\\"args\\\" JSON,\\n \\\"run_at\\\" TIMESTAMP NOT NULL,\\n \\\"priority\\\" INTEGER NOT NULL DEFAULT 50,\\n \\\"status\\\" TEXT NOT NULL DEFAULT 'pending',\\n \\\"attempts\\\" INTEGER NOT NULL DEFAULT 0,\\n \\\"max_attempts\\\" INTEGER NOT NULL DEFAULT 3,\\n \\\"timeout\\\" INTEGER NOT NULL DEFAULT 300000,\\n \\\"timeout_behavior\\\" TEXT NOT NULL DEFAULT 'fail',\\n \\\"started_at\\\" TIMESTAMP,\\n \\\"completed_at\\\" TIMESTAMP,\\n \\\"last_error\\\" TEXT,\\n \\\"result_pointer\\\" TEXT,\\n \\\"task_id\\\" TEXT UNIQUE,\\n \\\"task_owner_id\\\" TEXT,\\n \\\"task_result\\\" JSON,\\n \\\"task_input_requests\\\" JSON,\\n \\\"task_input_responses\\\" JSON,\\n \\\"retry_strategy\\\" JSON,\\n \\\"worker_id\\\" TEXT,\\n \\\"worker_heartbeat\\\" TIMESTAMP\\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},\"queue\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"default\"},\"object_type\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"object_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"method\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"args\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"run_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false},\"priority\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":50},\"status\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"pending\"},\"attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":0},\"max_attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":3},\"timeout\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":300000},\"timeout_behavior\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"fail\"},\"started_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"completed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"last_error\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"result_pointer\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"task_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":true},\"task_owner_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"task_result\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"task_input_requests\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"task_input_responses\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"retry_strategy\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"worker_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"worker_heartbeat\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_jobs_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true,\"nullsNotDistinct\":true},{\"name\":\"_smrt_jobs_run_at_idx\",\"columns\":[\"run_at\"]},{\"name\":\"_smrt_jobs_status_idx\",\"columns\":[\"status\"]},{\"name\":\"_smrt_jobs_status_run_at_idx\",\"columns\":[\"status\",\"run_at\"]},{\"name\":\"_smrt_jobs_ready_idx\",\"columns\":[\"status\",\"run_at\"],\"where\":\"status = 'pending' AND (task_input_requests IS NULL OR task_input_responses IS NOT NULL)\"},{\"name\":\"_smrt_jobs_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]}],\"version\":\"43e1324f\"},\"importPath\":\"@happyvertical/smrt-jobs\"},\"@happyvertical/smrt-jobs:SmrtJobCollection\":{\"name\":\"smrtjobcollection\",\"className\":\"SmrtJobCollection\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtJobCollection\",\"collection\":\"smrtjobs\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/smrt-job.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{},\"methods\":{\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<this>\",\"isStatic\":false,\"isPublic\":true},\"listByStatus\":{\"name\":\"listByStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"JobStatus | JobStatus[]\",\"optional\":false,\"unionBranches\":[{\"type\":\"JobStatus\"},{\"type\":\"JobStatus[]\"}]},{\"name\":\"options\",\"type\":\"object\",\"optional\":true,\"memberTypes\":[\"number\",\"string\"]}],\"returnType\":\"Promise<SmrtJob[]>\",\"isStatic\":false,\"isPublic\":true},\"listReady\":{\"name\":\"listReady\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":true,\"memberTypes\":[\"number\",\"string[]\"]}],\"returnType\":\"Promise<SmrtJob[]>\",\"isStatic\":false,\"isPublic\":true},\"claimReady\":{\"name\":\"claimReady\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"ClaimReadyOptions\",\"optional\":false}],\"returnType\":\"Promise<SmrtJob[]>\",\"isStatic\":false,\"isPublic\":true},\"countInFlightForTenant\":{\"name\":\"countInFlightForTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string | null\",\"optional\":false,\"unionBranches\":[{\"type\":\"string\"},{\"type\":\"null\"}]}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"enqueueJob\":{\"name\":\"enqueueJob\",\"async\":true,\"parameters\":[{\"name\":\"data\",\"type\":\"SmrtJobData\",\"optional\":false},{\"name\":\"options\",\"type\":\"EnqueueJobOptions\",\"optional\":true}],\"returnType\":\"Promise<SmrtJob>\",\"isStatic\":false,\"isPublic\":true},\"stats\":{\"name\":\"stats\",\"async\":true,\"parameters\":[{\"name\":\"queue\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true},\"cleanup\":{\"name\":\"cleanup\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false,\"memberTypes\":[\"Date\",\"number\",\"boolean\"]}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_jobs\",\"api\":false,\"mcp\":false},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SmrtJob\",\"exportName\":\"SmrtJobCollection\",\"collectionExportName\":\"SmrtJobCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_jobs\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_jobs\\\" (\\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 \\\"queue\\\" TEXT NOT NULL DEFAULT 'default',\\n \\\"object_type\\\" TEXT NOT NULL,\\n \\\"object_id\\\" TEXT,\\n \\\"method\\\" TEXT NOT NULL,\\n \\\"args\\\" JSON,\\n \\\"run_at\\\" TIMESTAMP NOT NULL,\\n \\\"priority\\\" INTEGER NOT NULL DEFAULT 50,\\n \\\"status\\\" TEXT NOT NULL DEFAULT 'pending',\\n \\\"attempts\\\" INTEGER NOT NULL DEFAULT 0,\\n \\\"max_attempts\\\" INTEGER NOT NULL DEFAULT 3,\\n \\\"timeout\\\" INTEGER NOT NULL DEFAULT 300000,\\n \\\"timeout_behavior\\\" TEXT NOT NULL DEFAULT 'fail',\\n \\\"started_at\\\" TIMESTAMP,\\n \\\"completed_at\\\" TIMESTAMP,\\n \\\"last_error\\\" TEXT,\\n \\\"result_pointer\\\" TEXT,\\n \\\"task_id\\\" TEXT UNIQUE,\\n \\\"task_owner_id\\\" TEXT,\\n \\\"task_result\\\" JSON,\\n \\\"task_input_requests\\\" JSON,\\n \\\"task_input_responses\\\" JSON,\\n \\\"retry_strategy\\\" JSON,\\n \\\"worker_id\\\" TEXT,\\n \\\"worker_heartbeat\\\" TIMESTAMP\\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},\"queue\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"default\"},\"object_type\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"object_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"method\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"args\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"run_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false},\"priority\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":50},\"status\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"pending\"},\"attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":0},\"max_attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":3},\"timeout\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":300000},\"timeout_behavior\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"fail\"},\"started_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"completed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"last_error\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"result_pointer\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"task_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":true},\"task_owner_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"task_result\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"task_input_requests\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"task_input_responses\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"retry_strategy\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"worker_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"worker_heartbeat\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_jobs_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true,\"nullsNotDistinct\":true},{\"name\":\"_smrt_jobs_run_at_idx\",\"columns\":[\"run_at\"]},{\"name\":\"_smrt_jobs_status_idx\",\"columns\":[\"status\"]},{\"name\":\"_smrt_jobs_status_run_at_idx\",\"columns\":[\"status\",\"run_at\"]},{\"name\":\"_smrt_jobs_ready_idx\",\"columns\":[\"status\",\"run_at\"],\"where\":\"status = 'pending' AND (task_input_requests IS NULL OR task_input_responses IS NOT NULL)\"},{\"name\":\"_smrt_jobs_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]}],\"version\":\"43e1324f\"},\"importPath\":\"@happyvertical/smrt-jobs\"},\"@happyvertical/smrt-jobs:SmrtWorker\":{\"name\":\"smrtworker\",\"className\":\"SmrtWorker\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtWorker\",\"collection\":\"smrtworkers\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/smrt-worker.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{\"workerId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"pid\":{\"type\":\"integer\",\"required\":false,\"_meta\":{\"nullable\":true}},\"hostname\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"startedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"heartbeatAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"leaseExpiresAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"status\":{\"type\":\"text\",\"required\":true,\"default\":\"running\",\"_meta\":{\"required\":true,\"default\":\"running\"}}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"_smrt_workers\",\"conflictColumns\":[\"worker_id\"],\"api\":false,\"cli\":false,\"mcp\":false},\"extends\":\"SmrtObject\",\"exportName\":\"SmrtWorker\",\"collectionExportName\":\"SmrtWorkerCollection\",\"validationRules\":[{\"field\":\"workerId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"status\",\"rule\":\"required\",\"fieldType\":\"text\"}],\"schema\":{\"tableName\":\"_smrt_workers\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_workers\\\" (\\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 \\\"worker_id\\\" TEXT NOT NULL,\\n \\\"pid\\\" INTEGER,\\n \\\"hostname\\\" TEXT,\\n \\\"started_at\\\" TIMESTAMP,\\n \\\"heartbeat_at\\\" TIMESTAMP,\\n \\\"lease_expires_at\\\" TIMESTAMP,\\n \\\"status\\\" TEXT NOT NULL DEFAULT 'running'\\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\"},\"worker_id\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"pid\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false},\"hostname\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"started_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"heartbeat_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"lease_expires_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"running\"}},\"indexes\":[{\"name\":\"_smrt_workers_worker_id_idx\",\"columns\":[\"worker_id\"],\"unique\":true},{\"name\":\"_smrt_workers_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"_smrt_workers_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"bfaad669\"},\"importPath\":\"@happyvertical/smrt-jobs\"},\"@happyvertical/smrt-jobs:SmrtWorkerCollection\":{\"name\":\"smrtworkercollection\",\"className\":\"SmrtWorkerCollection\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtWorkerCollection\",\"collection\":\"smrtworkers\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/smrt-worker.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{},\"methods\":{\"assertReady\":{\"name\":\"assertReady\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"tableReady\":{\"name\":\"tableReady\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"registerWorker\":{\"name\":\"registerWorker\",\"async\":true,\"parameters\":[{\"name\":\"input\",\"type\":\"RegisterWorkerInput\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"renewLease\":{\"name\":\"renewLease\",\"async\":true,\"parameters\":[{\"name\":\"workerKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"leaseTtlMs\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"expireWorker\":{\"name\":\"expireWorker\",\"async\":true,\"parameters\":[{\"name\":\"workerKey\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"freshLeaseWorkerKeys\":{\"name\":\"freshLeaseWorkerKeys\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Set<string>>\",\"isStatic\":false,\"isPublic\":true},\"pruneExpired\":{\"name\":\"pruneExpired\",\"async\":true,\"parameters\":[{\"name\":\"graceMs\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_workers\",\"api\":false,\"mcp\":false,\"cli\":false},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SmrtWorker\",\"exportName\":\"SmrtWorkerCollection\",\"collectionExportName\":\"SmrtWorkerCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_workers\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_workers\\\" (\\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 \\\"worker_id\\\" TEXT NOT NULL,\\n \\\"pid\\\" INTEGER,\\n \\\"hostname\\\" TEXT,\\n \\\"started_at\\\" TIMESTAMP,\\n \\\"heartbeat_at\\\" TIMESTAMP,\\n \\\"lease_expires_at\\\" TIMESTAMP,\\n \\\"status\\\" TEXT NOT NULL DEFAULT 'running'\\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\"},\"worker_id\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"pid\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false},\"hostname\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"started_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"heartbeat_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"lease_expires_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"running\"}},\"indexes\":[{\"name\":\"_smrt_workers_worker_id_idx\",\"columns\":[\"worker_id\"],\"unique\":true},{\"name\":\"_smrt_workers_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"_smrt_workers_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"bfaad669\"},\"importPath\":\"@happyvertical/smrt-jobs\"}},\"moduleType\":\"smrt\",\"smrtDependencies\":[\"@happyvertical/smrt-core\",\"@happyvertical/smrt-tenancy\"]}"));
12
12
  //#endregion
13
13
  //#region src/background-policy.ts
14
14
  var MAX_JOB_RETRIES = 25;
@@ -271,6 +271,10 @@ SmrtJob = __decorateClass$2([smrt({
271
271
  indexes: [{
272
272
  name: "_smrt_jobs_status_run_at_idx",
273
273
  columns: ["status", "runAt"]
274
+ }, {
275
+ name: "_smrt_jobs_ready_idx",
276
+ columns: ["status", "runAt"],
277
+ where: "status = 'pending' AND (task_input_requests IS NULL OR task_input_responses IS NOT NULL)"
274
278
  }]
275
279
  }), TenantScoped({ mode: "optional" })], SmrtJob);
276
280
  var SmrtJobCollection = class extends SmrtCollection {
@@ -297,7 +301,11 @@ var SmrtJobCollection = class extends SmrtCollection {
297
301
  */
298
302
  async listReady(options = {}) {
299
303
  const now = (/* @__PURE__ */ new Date()).toISOString();
300
- const whereConditions = ["status = 'pending'", "run_at <= ?"];
304
+ const whereConditions = [
305
+ "status = 'pending'",
306
+ "run_at <= ?",
307
+ "(task_input_requests IS NULL OR task_input_responses IS NOT NULL)"
308
+ ];
301
309
  const params = [now];
302
310
  if (options.queues?.length) {
303
311
  const placeholders = options.queues.map(() => "?").join(", ");
@@ -327,7 +335,11 @@ var SmrtJobCollection = class extends SmrtCollection {
327
335
  const limit = options.limit ?? 100;
328
336
  if (limit <= 0) return [];
329
337
  const nowIso = (options.now ?? /* @__PURE__ */ new Date()).toISOString();
330
- const whereConditions = ["status = 'pending'", "run_at <= ?"];
338
+ const whereConditions = [
339
+ "status = 'pending'",
340
+ "run_at <= ?",
341
+ "(task_input_requests IS NULL OR task_input_responses IS NOT NULL)"
342
+ ];
331
343
  const whereParams = [nowIso];
332
344
  if (options.queues?.length) {
333
345
  const placeholders = options.queues.map(() => "?").join(", ");
@@ -890,6 +902,7 @@ var JobContextLogger = class {
890
902
  //#endregion
891
903
  //#region src/mcp-task.ts
892
904
  var MCP_TASKS_EXTENSION = "io.modelcontextprotocol/tasks";
905
+ var McpTaskSuspendedError = class extends Error {};
893
906
  function createMcpTaskResult(result) {
894
907
  const publicResult = toPublicTaskData(result) ?? null;
895
908
  return {
@@ -916,11 +929,15 @@ var McpTaskStore = class McpTaskStore {
916
929
  constructor(collection, options) {
917
930
  this.collection = collection;
918
931
  this.ownerId = options.ownerId ?? null;
932
+ this.requireAuthorization = options.requireAuthorization ?? false;
933
+ this.tenantId = options.tenantId ?? null;
919
934
  this.pollIntervalMs = options.pollIntervalMs ?? 250;
920
935
  this.ttlMs = options.ttlMs ?? 864e5;
921
936
  }
922
937
  collection;
923
938
  ownerId;
939
+ requireAuthorization;
940
+ tenantId;
924
941
  pollIntervalMs;
925
942
  ttlMs;
926
943
  static async create(db, options = {}) {
@@ -929,12 +946,20 @@ var McpTaskStore = class McpTaskStore {
929
946
  }
930
947
  /** Create one pending job and return its immediately-pollable task projection. */
931
948
  async createTask(input) {
949
+ if ((input.tenantId ?? null) !== this.tenantId) throw new Error("MCP task tenant does not match active tenant");
950
+ if (this.requireAuthorization && !this.ownerId) throw new Error("Authorized tasks require an owner");
951
+ const continuation = input.continuation ? Object.freeze(validateContinuation(input.continuation)) : void 0;
952
+ if (continuation) {
953
+ if (!this.ownerId) throw new Error("Durable continuation requires an owner");
954
+ }
932
955
  const taskId = createId();
933
956
  const pollIntervalMs = input.pollIntervalMs ?? this.pollIntervalMs;
934
957
  const ttlMs = input.ttlMs ?? this.ttlMs;
935
958
  const args = {
936
959
  _mcpTask: {
937
960
  invocationArgs: input.invocationArgs,
961
+ ...this.requireAuthorization ? { authorizationRequired: true } : {},
962
+ ...continuation ? { continuation } : {},
938
963
  pollIntervalMs,
939
964
  ttlMs
940
965
  },
@@ -948,6 +973,7 @@ var McpTaskStore = class McpTaskStore {
948
973
  method: input.method,
949
974
  args,
950
975
  timeout: input.timeout,
976
+ ...continuation || this.requireAuthorization ? { maxAttempts: 1 } : {},
951
977
  taskId,
952
978
  taskOwnerId: this.ownerId,
953
979
  taskInputRequests: null,
@@ -957,6 +983,21 @@ var McpTaskStore = class McpTaskStore {
957
983
  ttlMs
958
984
  });
959
985
  }
986
+ /**
987
+ * Read a waiting task's application input descriptor for an explicitly declared
988
+ * workflow tool or authenticated form. This is not an MCP protocol extension.
989
+ */
990
+ async getContinuation(taskId) {
991
+ const job = await this.findTaskJob(taskId);
992
+ const binding = getMcpTaskMarker(job)?.continuation;
993
+ if (!binding || job.status !== "pending" || job.taskInputResponses !== null) return null;
994
+ const inputRequests = asRecord(job.taskInputRequests);
995
+ if (!Object.keys(inputRequests).length) return null;
996
+ return {
997
+ binding,
998
+ inputRequests
999
+ };
1000
+ }
960
1001
  /** Get a task only when it belongs to this store's principal. */
961
1002
  async getTask(taskId) {
962
1003
  const job = await this.findTaskJob(taskId);
@@ -972,6 +1013,19 @@ var McpTaskStore = class McpTaskStore {
972
1013
  async updateTask(taskId, inputResponses) {
973
1014
  const job = await this.findTaskJob(taskId);
974
1015
  const requested = asRecord(job.taskInputRequests);
1016
+ if (getMcpTaskMarker(job)?.continuation) {
1017
+ if (!Object.keys(requested).length || !Object.keys(requested).every((key) => Object.hasOwn(inputResponses, key))) return;
1018
+ const selected = Object.fromEntries(Object.keys(requested).map((key) => [key, inputResponses[key]]));
1019
+ await this.collection.query(`UPDATE _smrt_jobs SET task_input_responses = ?, updated_at = ?
1020
+ WHERE id = ? AND task_id = ? AND status = 'pending'
1021
+ AND task_input_responses IS NULL`, [
1022
+ encodeContinuationJson(selected),
1023
+ (/* @__PURE__ */ new Date()).toISOString(),
1024
+ job.id,
1025
+ taskId
1026
+ ], { allowRawOnTenantScoped: true });
1027
+ return;
1028
+ }
975
1029
  if (Object.keys(requested).length === 0) return;
976
1030
  const accepted = { ...asRecord(job.taskInputResponses) };
977
1031
  for (const key of Object.keys(requested)) if (Object.hasOwn(inputResponses, key)) accepted[key] = inputResponses[key];
@@ -1004,7 +1058,9 @@ var McpTaskStore = class McpTaskStore {
1004
1058
  async findTaskJob(taskId) {
1005
1059
  const ownerPredicate = this.ownerId === null ? "task_owner_id IS NULL" : "task_owner_id = ?";
1006
1060
  const params = this.ownerId === null ? [taskId] : [taskId, this.ownerId];
1007
- const job = (await this.collection.query(`SELECT * FROM _smrt_jobs WHERE task_id = ? AND ${ownerPredicate} LIMIT 1`, params, { allowRawOnTenantScoped: true }))[0];
1061
+ const tenantPredicate = this.tenantId === null ? "tenant_id IS NULL" : "tenant_id = ?";
1062
+ if (this.tenantId !== null) params.push(this.tenantId);
1063
+ const job = (await this.collection.query(`SELECT * FROM _smrt_jobs WHERE task_id = ? AND ${ownerPredicate} AND ${tenantPredicate} LIMIT 1`, params, { allowRawOnTenantScoped: true }))[0];
1008
1064
  if (!job) throw new McpTaskNotFoundError(taskId);
1009
1065
  return job;
1010
1066
  }
@@ -1014,10 +1070,57 @@ function getMcpTaskMarker(job) {
1014
1070
  if (!Array.isArray(marker.invocationArgs)) return null;
1015
1071
  return {
1016
1072
  invocationArgs: marker.invocationArgs,
1073
+ ...marker.authorizationRequired === true ? { authorizationRequired: true } : {},
1074
+ ...marker.continuation ? { continuation: validateContinuation(marker.continuation) } : {},
1017
1075
  pollIntervalMs: asPositiveInt(marker.pollIntervalMs, 250),
1018
1076
  ttlMs: asPositiveInt(marker.ttlMs, 864e5)
1019
1077
  };
1020
1078
  }
1079
+ async function requestMcpTaskContinuation(db, job, binding, inputRequest) {
1080
+ validateContinuation(binding);
1081
+ const expected = getMcpTaskMarker(job)?.continuation;
1082
+ if (!expected || expected.recordId !== binding.recordId || expected.revision !== binding.revision || expected.inputKey !== binding.inputKey) throw new Error("MCP continuation binding mismatch");
1083
+ const found = await db.query(`SELECT task_input_responses FROM _smrt_jobs
1084
+ WHERE id = ? AND task_id = ? AND worker_id = ? AND status = 'running'`, job.id, job.taskId, job.workerId);
1085
+ if (found.rows.length !== 1) throw new McpTaskCancelledError(job.taskId ?? "");
1086
+ const answers = asRecord(parseJson(found.rows[0].task_input_responses));
1087
+ if (Object.hasOwn(answers, binding.inputKey)) return answers[binding.inputKey];
1088
+ if ((await db.query(`UPDATE _smrt_jobs SET status = 'pending', worker_id = NULL,
1089
+ worker_heartbeat = NULL, task_input_requests = ?, updated_at = ?
1090
+ WHERE id = ? AND task_id = ? AND worker_id = ? AND status = 'running'
1091
+ RETURNING id`, encodeContinuationJson({ [binding.inputKey]: inputRequest }), (/* @__PURE__ */ new Date()).toISOString(), job.id, job.taskId, job.workerId)).rows.length !== 1) throw new McpTaskCancelledError(job.taskId ?? "");
1092
+ throw new McpTaskSuspendedError("MCP task awaits durable input");
1093
+ }
1094
+ function encodeContinuationJson(value) {
1095
+ try {
1096
+ const json = JSON.stringify(value, (_key, item) => {
1097
+ if (item === void 0 || typeof item === "function" || typeof item === "symbol" || typeof item === "bigint" || typeof item === "number" && !Number.isFinite(item)) throw new Error("Invalid JSON");
1098
+ return item;
1099
+ });
1100
+ if (!json || new TextEncoder().encode(json).byteLength > 65536) throw new Error("Oversized JSON");
1101
+ return json;
1102
+ } catch {
1103
+ throw new Error("MCP continuation input must be JSON within 65536 bytes");
1104
+ }
1105
+ }
1106
+ function validateContinuation(value) {
1107
+ const source = asRecord(value);
1108
+ const record = {
1109
+ recordId: source.recordId,
1110
+ revision: source.revision,
1111
+ inputKey: source.inputKey
1112
+ };
1113
+ for (const key of [
1114
+ "recordId",
1115
+ "revision",
1116
+ "inputKey"
1117
+ ]) if (typeof record[key] !== "string" || !record[key] || record[key].length > 256) throw new Error("Invalid MCP continuation binding");
1118
+ return {
1119
+ recordId: record.recordId,
1120
+ revision: record.revision,
1121
+ inputKey: record.inputKey
1122
+ };
1123
+ }
1021
1124
  async function requestMcpTaskInput(db, job, inputRequests) {
1022
1125
  const jobId = job.id;
1023
1126
  const taskId = job.taskId;
@@ -1070,7 +1173,7 @@ function taskStatusFromJob(job) {
1070
1173
  if (job.status === "completed") return "completed";
1071
1174
  if (job.status === "cancelled") return "cancelled";
1072
1175
  if (job.status === "failed") return "failed";
1073
- if (Object.keys(asRecord(job.taskInputRequests)).length > 0) return "input_required";
1176
+ if (Object.keys(asRecord(job.taskInputRequests)).length > 0 && !(getMcpTaskMarker(job)?.continuation && job.taskInputResponses !== null)) return "input_required";
1074
1177
  return "working";
1075
1178
  }
1076
1179
  function asRecord(value) {
@@ -1263,6 +1366,7 @@ var JobTimeoutError = class extends Error {
1263
1366
  };
1264
1367
  var DEFAULT_CONFIG = {
1265
1368
  id: "",
1369
+ authorizeMcpTask: async () => false,
1266
1370
  concurrency: 5,
1267
1371
  queues: ["default"],
1268
1372
  pollInterval: 1e3,
@@ -1297,6 +1401,8 @@ var TaskRunner = class extends EventEmitter {
1297
1401
  /** Over-claimed job ids whose release back to `pending` has not landed. */
1298
1402
  unreleasedSurplus = /* @__PURE__ */ new Set();
1299
1403
  pollTimer = null;
1404
+ pollPromise = null;
1405
+ pollGeneration = 0;
1300
1406
  idlePollDelayMs;
1301
1407
  heartbeatTimer = null;
1302
1408
  leaseTimer = null;
@@ -1334,6 +1440,7 @@ var TaskRunner = class extends EventEmitter {
1334
1440
  */
1335
1441
  async start() {
1336
1442
  if (this.running) return;
1443
+ if (this.shutdownPromise || this.pollPromise || this.activeJobs.size > 0) throw new Error("TaskRunner shutdown is still draining");
1337
1444
  if (!this.collection || !this.workerCollection) throw new Error("TaskRunner not initialized. Call initialize() first.");
1338
1445
  await this.workerCollection.assertReady();
1339
1446
  if (this.db && resolveEngine(this.db) === "sqlite") await tuneSqliteForConcurrency(this.db);
@@ -1361,6 +1468,7 @@ var TaskRunner = class extends EventEmitter {
1361
1468
  if (!this.running) return;
1362
1469
  if (this.shutdownPromise) return this.shutdownPromise;
1363
1470
  this.running = false;
1471
+ this.pollGeneration++;
1364
1472
  if (this.pollTimer) {
1365
1473
  clearTimeout(this.pollTimer);
1366
1474
  this.pollTimer = null;
@@ -1385,7 +1493,7 @@ var TaskRunner = class extends EventEmitter {
1385
1493
  this.leaseTimer = null;
1386
1494
  }
1387
1495
  unregisterLiveWorker(this.workerKey);
1388
- if (this.activeJobs.size === 0) try {
1496
+ if (this.activeJobs.size === 0 && !this.pollPromise) try {
1389
1497
  await this.workerCollection?.expireWorker(this.workerKey);
1390
1498
  } catch {}
1391
1499
  this.emit("runner:stopped");
@@ -1411,9 +1519,12 @@ var TaskRunner = class extends EventEmitter {
1411
1519
  if (!this.running) return;
1412
1520
  let foundWork = true;
1413
1521
  try {
1414
- foundWork = await this.poll();
1522
+ this.pollPromise = this.poll();
1523
+ foundWork = await this.pollPromise;
1415
1524
  } catch (error) {
1416
1525
  this.emit("runner:error", error);
1526
+ } finally {
1527
+ this.pollPromise = null;
1417
1528
  }
1418
1529
  if (this.running) this.pollTimer = setTimeout(poll, this.nextPollDelay(foundWork));
1419
1530
  };
@@ -1439,6 +1550,7 @@ var TaskRunner = class extends EventEmitter {
1439
1550
  this.idlePollDelayMs = this.config.pollInterval;
1440
1551
  }
1441
1552
  async poll() {
1553
+ const generation = this.pollGeneration;
1442
1554
  if (!this.collection || !this.db) return true;
1443
1555
  await this.recoverStaleJobs();
1444
1556
  await this.retryUnreleasedSurplus();
@@ -1451,7 +1563,11 @@ var TaskRunner = class extends EventEmitter {
1451
1563
  });
1452
1564
  const jobs = claimed.slice(0, available);
1453
1565
  if (claimed.length > available) await this.releaseSurplusClaims(claimed.slice(available));
1454
- for (const job of jobs) {
1566
+ for (const [index, job] of jobs.entries()) {
1567
+ if (generation !== this.pollGeneration) {
1568
+ await this.releaseSurplusClaims(jobs.slice(index), false);
1569
+ return false;
1570
+ }
1455
1571
  if (!job.id) continue;
1456
1572
  this.processJob(job).catch((error) => {
1457
1573
  this.emit("runner:error", error);
@@ -1469,10 +1585,10 @@ var TaskRunner = class extends EventEmitter {
1469
1585
  * and once more by `stop()`. If the process dies first, stale recovery fails
1470
1586
  * those rows as orphaned (it does not requeue them).
1471
1587
  */
1472
- async releaseSurplusClaims(surplus) {
1588
+ async releaseSurplusClaims(surplus, reportExceededLimit = true) {
1473
1589
  const ids = surplus.map((job) => job.id).filter((id) => typeof id === "string" && id.length > 0);
1474
1590
  if (ids.length === 0) return;
1475
- this.emit("runner:error", /* @__PURE__ */ new Error(`claimReady returned ${ids.length} job(s) beyond the concurrency limit (${this.config.concurrency}); releasing them back to pending`));
1591
+ if (reportExceededLimit) this.emit("runner:error", /* @__PURE__ */ new Error(`claimReady returned ${ids.length} job(s) beyond the concurrency limit (${this.config.concurrency}); releasing them back to pending`));
1476
1592
  for (const id of ids) this.unreleasedSurplus.add(id);
1477
1593
  await this.retryUnreleasedSurplus();
1478
1594
  }
@@ -1624,6 +1740,7 @@ var TaskRunner = class extends EventEmitter {
1624
1740
  */
1625
1741
  async executeJob(job) {
1626
1742
  const runJob = async () => {
1743
+ await this.assertMcpTaskAuthority(job);
1627
1744
  const registeredClass = ObjectRegistry.getClass(job.objectType);
1628
1745
  if (!registeredClass) throw new Error(`Unknown object type: ${job.objectType}`);
1629
1746
  const ObjectClass = registeredClass.constructor;
@@ -1685,6 +1802,7 @@ var TaskRunner = class extends EventEmitter {
1685
1802
  * Handle job execution error
1686
1803
  */
1687
1804
  async handleJobError(job, error) {
1805
+ if (error instanceof McpTaskSuspendedError) return;
1688
1806
  const decision = fromConfig(job.retryStrategy).shouldRetry(job.attempts, error);
1689
1807
  const jobId = job.id;
1690
1808
  if (!jobId) return;
@@ -1737,6 +1855,25 @@ var TaskRunner = class extends EventEmitter {
1737
1855
  this.emit("job:failed", job, error);
1738
1856
  }
1739
1857
  }
1858
+ async assertMcpTaskAuthority(job) {
1859
+ const marker = getMcpTaskMarker(job);
1860
+ const continuation = marker?.continuation;
1861
+ if (!continuation && !marker?.authorizationRequired) return;
1862
+ let authorized = false;
1863
+ try {
1864
+ authorized = !!job.taskOwnerId && await this.config.authorizeMcpTask(Object.freeze({
1865
+ ownerId: job.taskOwnerId,
1866
+ tenantId: job.tenantId ?? null,
1867
+ taskId: job.taskId ?? "",
1868
+ objectType: job.objectType,
1869
+ objectId: job.objectId ?? "",
1870
+ method: job.method,
1871
+ ...continuation ? { continuation: Object.freeze({ ...continuation }) } : {}
1872
+ }));
1873
+ } catch {}
1874
+ if (!authorized) throw new Error("MCP task authorization denied");
1875
+ if ((await this.db?.query(`SELECT id FROM _smrt_jobs WHERE id = ? AND worker_id = ? AND status = 'running'`, job.id, job.workerId))?.rows.length !== 1) throw new Error("MCP task is no longer active");
1876
+ }
1740
1877
  createExecutionContext(job, contextLogger) {
1741
1878
  const context = {
1742
1879
  job: {
@@ -1775,7 +1912,16 @@ var TaskRunner = class extends EventEmitter {
1775
1912
  data
1776
1913
  });
1777
1914
  },
1778
- ...job.taskId && this.db ? { task: { requestInput: (inputRequests) => requestMcpTaskInput(this.db, job, inputRequests) } } : {}
1915
+ ...job.taskId && this.db ? { task: {
1916
+ assertAuthorized: () => this.assertMcpTaskAuthority(job),
1917
+ requestContinuation: (binding, inputRequest) => requestMcpTaskContinuation(this.db, job, binding, inputRequest),
1918
+ requestInput: async (inputRequests) => {
1919
+ await this.assertMcpTaskAuthority(job);
1920
+ const answers = await requestMcpTaskInput(this.db, job, inputRequests);
1921
+ await this.assertMcpTaskAuthority(job);
1922
+ return answers;
1923
+ }
1924
+ } } : {}
1779
1925
  };
1780
1926
  runnerExecutionContextIdentities.add(context);
1781
1927
  return context;
@@ -2014,10 +2160,10 @@ var TaskRunner = class extends EventEmitter {
2014
2160
  * Wait for active jobs to complete with timeout
2015
2161
  */
2016
2162
  async waitForActiveJobs() {
2017
- if (this.activeJobs.size === 0) return;
2163
+ if (this.activeJobs.size === 0 && !this.pollPromise) return;
2018
2164
  return new Promise((resolve) => {
2019
2165
  const checkInterval = setInterval(() => {
2020
- if (this.activeJobs.size === 0) {
2166
+ if (this.activeJobs.size === 0 && !this.pollPromise) {
2021
2167
  clearInterval(checkInterval);
2022
2168
  clearTimeout(timeout);
2023
2169
  resolve();
@@ -2035,6 +2181,6 @@ function createTaskRunner(config) {
2035
2181
  return new TaskRunner(config);
2036
2182
  }
2037
2183
  //#endregion
2038
- export { SmrtJobCollection as A, JOB_EVENTS_RETENTION_TASK as C, SmrtJobEvent as D, unregisterJobRetentionTasks as E, backgroundEligible as F, clampRetries as I, getBackgroundEligibleMethods as L, MAX_JOB_RETRIES as M, TenantJobCapExceededError as N, SmrtJobEventCollection as O, assertWithinTenantCreationCap as P, isBackgroundEligibleMethod as R, JOBS_RETENTION_TASK as S, startRetentionSweeper as T, JobContextLogger as _, isRunnerExecutionContext as a, DEFAULT_JOB_RETENTION as b, SmrtWorkerCollection as c, McpTaskNotFoundError as d, McpTaskStore as f, taskFromJob as g, requestMcpTaskInput as h, getActiveJobExecutionContext as i, DEFAULT_TENANT_JOB_CAP as j, SmrtJob as k, MCP_TASKS_EXTENSION as l, getMcpTaskMarker as m, TaskRunner as n, DEFAULT_TASK_HEARTBEAT_INTERVAL_MS as o, createMcpTaskResult as p, createTaskRunner as r, SmrtWorker as s, JobTimeoutError as t, McpTaskCancelledError as u, redactErrorForPersistence as v, registerJobRetentionTasks as w, DEFAULT_RETENTION_SWEEP_INTERVAL_MS as x, redactErrorMessage as y, markBackgroundEligible as z };
2184
+ export { SmrtJobEventCollection as A, isBackgroundEligibleMethod as B, DEFAULT_RETENTION_SWEEP_INTERVAL_MS as C, startRetentionSweeper as D, registerJobRetentionTasks as E, TenantJobCapExceededError as F, assertWithinTenantCreationCap as I, backgroundEligible as L, SmrtJobCollection as M, DEFAULT_TENANT_JOB_CAP as N, unregisterJobRetentionTasks as O, MAX_JOB_RETRIES as P, clampRetries as R, DEFAULT_JOB_RETENTION as S, JOB_EVENTS_RETENTION_TASK as T, markBackgroundEligible as V, requestMcpTaskInput as _, isRunnerExecutionContext as a, redactErrorForPersistence as b, SmrtWorkerCollection as c, McpTaskNotFoundError as d, McpTaskStore as f, requestMcpTaskContinuation as g, getMcpTaskMarker as h, getActiveJobExecutionContext as i, SmrtJob as j, SmrtJobEvent as k, MCP_TASKS_EXTENSION as l, createMcpTaskResult as m, TaskRunner as n, DEFAULT_TASK_HEARTBEAT_INTERVAL_MS as o, McpTaskSuspendedError as p, createTaskRunner as r, SmrtWorker as s, JobTimeoutError as t, McpTaskCancelledError as u, taskFromJob as v, JOBS_RETENTION_TASK as w, redactErrorMessage as x, JobContextLogger as y, getBackgroundEligibleMethods as z };
2039
2185
 
2040
- //# sourceMappingURL=runner-9ZPXsNmw.js.map
2186
+ //# sourceMappingURL=runner-jgI4uv4n.js.map