@happyvertical/smrt-support 0.41.0 → 0.42.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +6 -5
- package/dist/index.js +1 -1
- package/dist/manifest.json +1 -1
- package/dist/smrt-knowledge.json +5 -5
- package/package.json +10 -10
package/AGENTS.md
CHANGED
|
@@ -252,7 +252,7 @@ that reverted to DECIMAL passes every SQLite suite.
|
|
|
252
252
|
- **Money is integer minor units** (cents) — `$19.99` is `1999`.
|
|
253
253
|
`SupportPlan.availabilityFeeAmount`, `SupportCharge.amount` and
|
|
254
254
|
`SupportCompensation.amount` initialize `= 0`, never `= 0.0`: the integer
|
|
255
|
-
literal is what maps them to INTEGER columns (#2401).
|
|
255
|
+
literal is what maps them to INTEGER columns (BIGINT on fresh PostgreSQL/DuckDB databases; #2401, #2373).
|
|
256
256
|
- **Rates stay DECIMAL but their unit changed.**
|
|
257
257
|
`SupportPlan.overageHourlyRate` / `onCallHourlyRate` and
|
|
258
258
|
`SupportCompensationPlan.hourlyRate` are **minor units per hour**, so
|
|
@@ -265,14 +265,15 @@ that reverted to DECIMAL passes every SQLite suite.
|
|
|
265
265
|
`SupportCharge.amount`.
|
|
266
266
|
- **Migrating an existing database**: `preflightSupportMoneyMinorUnits(db)`
|
|
267
267
|
reports which columns still hold major units and which rows would be rounded
|
|
268
|
-
or
|
|
268
|
+
or exceed JavaScript's safe-integer range; `migrateSupportMoneyToMinorUnits(db)` converts them
|
|
269
269
|
(idempotent via `_smrt_backfills`). The **rate columns are not in that list**
|
|
270
270
|
— their type does not change, but their stored values must still be
|
|
271
271
|
multiplied by the same scale in the same deploy step. Frozen `rateSnapshot`
|
|
272
272
|
JSON on settled charges is history and is left alone. On SQLite the values
|
|
273
|
-
are rescaled but the declared type needs the table-rebuild path (#2370)
|
|
274
|
-
|
|
275
|
-
|
|
273
|
+
are rescaled but the declared type needs the table-rebuild path (#2370).
|
|
274
|
+
Fresh PostgreSQL/DuckDB INTEGER columns are BIGINT and hydration rejects
|
|
275
|
+
values outside JavaScript's safe-integer range; existing PostgreSQL `int4`
|
|
276
|
+
columns require #2424.
|
|
276
277
|
|
|
277
278
|
## Gotchas
|
|
278
279
|
|
package/dist/index.js
CHANGED
|
@@ -19,7 +19,7 @@ var __exportAll = (all, no_symbols) => {
|
|
|
19
19
|
};
|
|
20
20
|
//#endregion
|
|
21
21
|
//#region src/__smrt-register__.ts
|
|
22
|
-
ObjectRegistry.registerPackageManifest(JSON.parse("{\"version\":\"1.0.0\",\"timestamp\":0,\"packageName\":\"@happyvertical/smrt-support\",\"packageVersion\":\"0.41.0\",\"objects\":{\"@happyvertical/smrt-support:ServiceTimeEntry\":{\"name\":\"servicetimeentry\",\"className\":\"ServiceTimeEntry\",\"qualifiedName\":\"@happyvertical/smrt-support:ServiceTimeEntry\",\"collection\":\"servicetimeentries\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/service-time-entry.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"caseId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportCase\"},\"workRefType\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"workRefId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"specialistId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportSpecialist\"},\"participantKind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"participantProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"agentRef\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"source\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"description\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"startedAt\":{\"type\":\"datetime\",\"required\":false},\"endedAt\":{\"type\":\"datetime\",\"required\":false},\"durationSeconds\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"evidence\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"submittedAt\":{\"type\":\"datetime\",\"required\":false},\"submittedByProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"approvedAt\":{\"type\":\"datetime\",\"required\":false},\"approvedByProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"approvalPath\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"rejectedAt\":{\"type\":\"datetime\",\"required\":false},\"rejectedByProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"rejectionReason\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"correctionOfId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"ServiceTimeEntry\"},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"service_time_entries\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"tenantScoped\":{\"mode\":\"optional\"},\"conflictColumns\":[\"tenant_id\",\"slug\",\"context\"]},\"extends\":\"ServiceTimeEntry\",\"exportName\":\"ServiceTimeEntry\",\"collectionExportName\":\"ServiceTimeEntryCollection\",\"schema\":{\"tableName\":\"service_time_entries\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"service_time_entries\\\" (\\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 \\\"case_id\\\" UUID,\\n \\\"work_ref_type\\\" TEXT,\\n \\\"work_ref_id\\\" TEXT,\\n \\\"specialist_id\\\" UUID,\\n \\\"participant_kind\\\" TEXT,\\n \\\"participant_profile_id\\\" UUID,\\n \\\"agent_ref\\\" TEXT,\\n \\\"source\\\" TEXT,\\n \\\"description\\\" TEXT,\\n \\\"started_at\\\" TIMESTAMP,\\n \\\"ended_at\\\" TIMESTAMP,\\n \\\"duration_seconds\\\" INTEGER DEFAULT 0,\\n \\\"evidence\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"submitted_at\\\" TIMESTAMP,\\n \\\"submitted_by_profile_id\\\" UUID,\\n \\\"approved_at\\\" TIMESTAMP,\\n \\\"approved_by_profile_id\\\" UUID,\\n \\\"approval_path\\\" TEXT,\\n \\\"rejected_at\\\" TIMESTAMP,\\n \\\"rejected_by_profile_id\\\" UUID,\\n \\\"rejection_reason\\\" TEXT,\\n \\\"correction_of_id\\\" UUID,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"case_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"work_ref_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"work_ref_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"specialist_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"participant_kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"participant_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"agent_ref\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"source\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"started_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"ended_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"duration_seconds\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"evidence\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"submitted_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"submitted_by_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"approved_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"approved_by_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"approval_path\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"rejected_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"rejected_by_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"rejection_reason\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"correction_of_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"service_time_entries_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true},{\"name\":\"service_time_entries_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"service_time_entries_case_id_idx\",\"columns\":[\"case_id\"]},{\"name\":\"service_time_entries_specialist_id_idx\",\"columns\":[\"specialist_id\"]},{\"name\":\"service_time_entries_participant_profile_id_idx\",\"columns\":[\"participant_profile_id\"]},{\"name\":\"service_time_entries_submitted_by_profile_id_idx\",\"columns\":[\"submitted_by_profile_id\"]},{\"name\":\"service_time_entries_approved_by_profile_id_idx\",\"columns\":[\"approved_by_profile_id\"]},{\"name\":\"service_time_entries_rejected_by_profile_id_idx\",\"columns\":[\"rejected_by_profile_id\"]},{\"name\":\"service_time_entries_correction_of_id_idx\",\"columns\":[\"correction_of_id\"]}],\"version\":\"9367aec5\"}},\"@happyvertical/smrt-support:ServiceTimeEntryCollection\":{\"name\":\"servicetimeentrycollection\",\"className\":\"ServiceTimeEntryCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:ServiceTimeEntryCollection\",\"collection\":\"servicetimeentries\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/service-time-entry.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forCase\":{\"name\":\"forCase\",\"async\":true,\"parameters\":[{\"name\":\"caseId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<ServiceTimeEntry[]>\",\"isStatic\":false,\"isPublic\":true},\"forSpecialist\":{\"name\":\"forSpecialist\",\"async\":true,\"parameters\":[{\"name\":\"specialistId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<ServiceTimeEntry[]>\",\"isStatic\":false,\"isPublic\":true},\"pendingApproval\":{\"name\":\"pendingApproval\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<ServiceTimeEntry[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"service_time_entries\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"ServiceTimeEntry\",\"exportName\":\"ServiceTimeEntryCollection\",\"collectionExportName\":\"ServiceTimeEntryCollectionCollection\",\"schema\":{\"tableName\":\"service_time_entries\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"service_time_entries\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"service_time_entries_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"service_time_entries_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"d9c34ac0\"}},\"@happyvertical/smrt-support:SupportAiRun\":{\"name\":\"supportairun\",\"className\":\"SupportAiRun\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportAiRun\",\"collection\":\"supportairuns\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-ai-run.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"caseId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SupportCase\",\"_meta\":{\"required\":true}},\"interactionId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportInteraction\"},\"phase\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"outcome\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"confidence\":{\"type\":\"decimal\",\"required\":false,\"_meta\":{\"nullable\":true}},\"classification\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"responseInteractionId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportInteraction\"},\"knowledgeRefs\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"toolCalls\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"error\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"correlationId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"model\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"startedAt\":{\"type\":\"datetime\",\"required\":false},\"completedAt\":{\"type\":\"datetime\",\"required\":false},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getClassification\":{\"name\":\"getClassification\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setClassification\":{\"name\":\"setClassification\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getKnowledgeRefs\":{\"name\":\"getKnowledgeRefs\",\"async\":false,\"parameters\":[],\"returnType\":\"Array<Record<string>>\",\"isStatic\":false,\"isPublic\":true},\"setKnowledgeRefs\":{\"name\":\"setKnowledgeRefs\",\"async\":false,\"parameters\":[{\"name\":\"refs\",\"type\":\"Array<Record<string>>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getToolCalls\":{\"name\":\"getToolCalls\",\"async\":false,\"parameters\":[],\"returnType\":\"Array<Record<string>>\",\"isStatic\":false,\"isPublic\":true},\"setToolCalls\":{\"name\":\"setToolCalls\",\"async\":false,\"parameters\":[{\"name\":\"calls\",\"type\":\"Array<Record<string>>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_ai_runs\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"tenantScoped\":{\"mode\":\"optional\"},\"conflictColumns\":[\"tenant_id\",\"slug\",\"context\"]},\"extends\":\"SmrtObject\",\"exportName\":\"SupportAiRun\",\"collectionExportName\":\"SupportAiRunCollection\",\"validationRules\":[{\"field\":\"caseId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_ai_runs\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_ai_runs\\\" (\\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 \\\"case_id\\\" UUID NOT NULL,\\n \\\"interaction_id\\\" UUID,\\n \\\"phase\\\" TEXT,\\n \\\"outcome\\\" TEXT,\\n \\\"confidence\\\" REAL,\\n \\\"classification\\\" TEXT,\\n \\\"response_interaction_id\\\" UUID,\\n \\\"knowledge_refs\\\" TEXT,\\n \\\"tool_calls\\\" TEXT,\\n \\\"error\\\" TEXT,\\n \\\"correlation_id\\\" TEXT,\\n \\\"model\\\" TEXT,\\n \\\"started_at\\\" TIMESTAMP,\\n \\\"completed_at\\\" TIMESTAMP,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"case_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"interaction_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"phase\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"outcome\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"confidence\":{\"type\":\"REAL\",\"notNull\":false,\"unique\":false},\"classification\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"response_interaction_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"knowledge_refs\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"tool_calls\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"error\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"correlation_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"model\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"started_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"completed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_ai_runs_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_ai_runs_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_ai_runs_case_id_idx\",\"columns\":[\"case_id\"]},{\"name\":\"support_ai_runs_interaction_id_idx\",\"columns\":[\"interaction_id\"]},{\"name\":\"support_ai_runs_response_interaction_id_idx\",\"columns\":[\"response_interaction_id\"]}],\"version\":\"0caab968\"}},\"@happyvertical/smrt-support:SupportAiRunCollection\":{\"name\":\"supportairuncollection\",\"className\":\"SupportAiRunCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportAiRunCollection\",\"collection\":\"supportairuns\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-ai-run.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forCase\":{\"name\":\"forCase\",\"async\":true,\"parameters\":[{\"name\":\"caseId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportAiRun[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_ai_runs\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportAiRun\",\"exportName\":\"SupportAiRunCollection\",\"collectionExportName\":\"SupportAiRunCollectionCollection\",\"schema\":{\"tableName\":\"support_ai_runs\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_ai_runs\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_ai_runs_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_ai_runs_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"87728103\"}},\"@happyvertical/smrt-support:SupportCaseEvent\":{\"name\":\"supportcaseevent\",\"className\":\"SupportCaseEvent\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportCaseEvent\",\"collection\":\"supportcaseevents\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-case-event.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"caseId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SupportCase\",\"_meta\":{\"required\":true}},\"eventType\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"actorKind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"actorProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"occurredAt\":{\"type\":\"datetime\",\"required\":false},\"summary\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"payload\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getPayload\":{\"name\":\"getPayload\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setPayload\":{\"name\":\"setPayload\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_case_events\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"tenantScoped\":{\"mode\":\"optional\"},\"conflictColumns\":[\"tenant_id\",\"slug\",\"context\"]},\"extends\":\"SmrtObject\",\"exportName\":\"SupportCaseEvent\",\"collectionExportName\":\"SupportCaseEventCollection\",\"validationRules\":[{\"field\":\"caseId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_case_events\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_case_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 \\\"case_id\\\" UUID NOT NULL,\\n \\\"event_type\\\" TEXT,\\n \\\"actor_kind\\\" TEXT,\\n \\\"actor_profile_id\\\" UUID,\\n \\\"occurred_at\\\" TIMESTAMP,\\n \\\"summary\\\" TEXT,\\n \\\"payload\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"case_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"event_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"actor_kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"actor_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"occurred_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"summary\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"payload\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_case_events_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_case_events_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_case_events_case_id_idx\",\"columns\":[\"case_id\"]},{\"name\":\"support_case_events_actor_profile_id_idx\",\"columns\":[\"actor_profile_id\"]}],\"version\":\"cd3fc7c1\"}},\"@happyvertical/smrt-support:SupportCaseEventCollection\":{\"name\":\"supportcaseeventcollection\",\"className\":\"SupportCaseEventCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportCaseEventCollection\",\"collection\":\"supportcaseevents\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-case-event.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forCase\":{\"name\":\"forCase\",\"async\":true,\"parameters\":[{\"name\":\"caseId\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<SupportCaseEvent[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_case_events\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportCaseEvent\",\"exportName\":\"SupportCaseEventCollection\",\"collectionExportName\":\"SupportCaseEventCollectionCollection\",\"schema\":{\"tableName\":\"support_case_events\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_case_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);\",\"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\"}},\"indexes\":[{\"name\":\"support_case_events_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_case_events_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"15415d2b\"}},\"@happyvertical/smrt-support:SupportCase\":{\"name\":\"supportcase\",\"className\":\"SupportCase\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportCase\",\"collection\":\"supportcases\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-case.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"caseNumber\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"subject\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"description\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"priority\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"severity\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"category\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"sensitive\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"channelKind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"clientProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"openedByProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"projectId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"bindingId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportChannelBinding\"},\"threadKey\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"planId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportPlan\"},\"planSnapshot\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"assignedSpecialistId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportSpecialist\"},\"assignedAt\":{\"type\":\"datetime\",\"required\":false},\"preferredSpecialistId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportSpecialist\"},\"escalationLevel\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"escalatedAt\":{\"type\":\"datetime\",\"required\":false},\"acknowledgedAt\":{\"type\":\"datetime\",\"required\":false},\"firstRespondedAt\":{\"type\":\"datetime\",\"required\":false},\"humanRequestedAt\":{\"type\":\"datetime\",\"required\":false},\"resolvedAt\":{\"type\":\"datetime\",\"required\":false},\"resolvedByProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"resolutionKind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"resolutionSummary\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"closedAt\":{\"type\":\"datetime\",\"required\":false},\"reopenCount\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"lastReopenedAt\":{\"type\":\"datetime\",\"required\":false},\"aiEnabled\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"isOpen\":{\"name\":\"isOpen\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"updateMetadata\":{\"name\":\"updateMetadata\",\"async\":false,\"parameters\":[{\"name\":\"patch\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getPlanSnapshot\":{\"name\":\"getPlanSnapshot\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setPlanSnapshot\":{\"name\":\"setPlanSnapshot\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"save\":{\"name\":\"save\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_cases\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"tenantScoped\":{\"mode\":\"optional\"},\"conflictColumns\":[\"tenant_id\",\"slug\",\"context\"]},\"extends\":\"SmrtObject\",\"exportName\":\"SupportCase\",\"collectionExportName\":\"SupportCaseCollection\",\"schema\":{\"tableName\":\"support_cases\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_cases\\\" (\\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 \\\"case_number\\\" TEXT,\\n \\\"subject\\\" TEXT,\\n \\\"description\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"priority\\\" TEXT,\\n \\\"severity\\\" TEXT,\\n \\\"category\\\" TEXT,\\n \\\"sensitive\\\" BOOLEAN,\\n \\\"channel_kind\\\" TEXT,\\n \\\"client_profile_id\\\" UUID,\\n \\\"opened_by_profile_id\\\" UUID,\\n \\\"project_id\\\" TEXT,\\n \\\"binding_id\\\" UUID,\\n \\\"thread_key\\\" TEXT,\\n \\\"plan_id\\\" UUID,\\n \\\"plan_snapshot\\\" TEXT,\\n \\\"assigned_specialist_id\\\" UUID,\\n \\\"assigned_at\\\" TIMESTAMP,\\n \\\"preferred_specialist_id\\\" UUID,\\n \\\"escalation_level\\\" INTEGER DEFAULT 0,\\n \\\"escalated_at\\\" TIMESTAMP,\\n \\\"acknowledged_at\\\" TIMESTAMP,\\n \\\"first_responded_at\\\" TIMESTAMP,\\n \\\"human_requested_at\\\" TIMESTAMP,\\n \\\"resolved_at\\\" TIMESTAMP,\\n \\\"resolved_by_profile_id\\\" UUID,\\n \\\"resolution_kind\\\" TEXT,\\n \\\"resolution_summary\\\" TEXT,\\n \\\"closed_at\\\" TIMESTAMP,\\n \\\"reopen_count\\\" INTEGER DEFAULT 0,\\n \\\"last_reopened_at\\\" TIMESTAMP,\\n \\\"ai_enabled\\\" BOOLEAN,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"case_number\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"subject\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"priority\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"severity\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"category\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"sensitive\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"channel_kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"client_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"opened_by_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"project_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"binding_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"thread_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"plan_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"plan_snapshot\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"assigned_specialist_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"assigned_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"preferred_specialist_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"escalation_level\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"escalated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"acknowledged_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"first_responded_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"human_requested_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"resolved_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"resolved_by_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"resolution_kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"resolution_summary\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"closed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"reopen_count\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"last_reopened_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"ai_enabled\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_cases_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_cases_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_cases_client_profile_id_idx\",\"columns\":[\"client_profile_id\"]},{\"name\":\"support_cases_opened_by_profile_id_idx\",\"columns\":[\"opened_by_profile_id\"]},{\"name\":\"support_cases_binding_id_idx\",\"columns\":[\"binding_id\"]},{\"name\":\"support_cases_plan_id_idx\",\"columns\":[\"plan_id\"]},{\"name\":\"support_cases_assigned_specialist_id_idx\",\"columns\":[\"assigned_specialist_id\"]},{\"name\":\"support_cases_preferred_specialist_id_idx\",\"columns\":[\"preferred_specialist_id\"]},{\"name\":\"support_cases_resolved_by_profile_id_idx\",\"columns\":[\"resolved_by_profile_id\"]}],\"version\":\"f9609447\"}},\"@happyvertical/smrt-support:SupportCaseCollection\":{\"name\":\"supportcasecollection\",\"className\":\"SupportCaseCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportCaseCollection\",\"collection\":\"supportcases\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-case.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"findOpenByThreadKey\":{\"name\":\"findOpenByThreadKey\",\"async\":true,\"parameters\":[{\"name\":\"threadKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<SupportCase | null>\",\"isStatic\":false,\"isPublic\":true},\"findQueue\":{\"name\":\"findQueue\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<SupportCase[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_cases\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportCase\",\"exportName\":\"SupportCaseCollection\",\"collectionExportName\":\"SupportCaseCollectionCollection\",\"schema\":{\"tableName\":\"support_cases\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_cases\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_cases_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_cases_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"a0ea314b\"}},\"@happyvertical/smrt-support:SupportChannelBinding\":{\"name\":\"supportchannelbinding\",\"className\":\"SupportChannelBinding\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportChannelBinding\",\"collection\":\"supportchannelbindings\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-channel-binding.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"bindingKind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"channelKind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"targetType\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"targetId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"clientProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"projectId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"planId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportPlan\"},\"enabled\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"selfAddresses\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getSelfAddresses\":{\"name\":\"getSelfAddresses\",\"async\":false,\"parameters\":[],\"returnType\":\"string[]\",\"isStatic\":false,\"isPublic\":true},\"setSelfAddresses\":{\"name\":\"setSelfAddresses\",\"async\":false,\"parameters\":[{\"name\":\"addresses\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_channel_bindings\",\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"target_type\",\"target_id\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportChannelBinding\",\"collectionExportName\":\"SupportChannelBindingCollection\",\"schema\":{\"tableName\":\"support_channel_bindings\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_channel_bindings\\\" (\\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 \\\"name\\\" TEXT DEFAULT '',\\n \\\"binding_kind\\\" TEXT,\\n \\\"channel_kind\\\" TEXT,\\n \\\"target_type\\\" TEXT,\\n \\\"target_id\\\" TEXT,\\n \\\"client_profile_id\\\" UUID,\\n \\\"project_id\\\" TEXT,\\n \\\"plan_id\\\" UUID,\\n \\\"enabled\\\" BOOLEAN,\\n \\\"self_addresses\\\" TEXT,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"binding_kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"channel_kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"target_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"target_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"client_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"project_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"plan_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"enabled\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"self_addresses\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_channel_bindings_target_type_target_id_idx\",\"columns\":[\"target_type\",\"target_id\"],\"unique\":true},{\"name\":\"support_channel_bindings_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_channel_bindings_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_channel_bindings_client_profile_id_idx\",\"columns\":[\"client_profile_id\"]},{\"name\":\"support_channel_bindings_plan_id_idx\",\"columns\":[\"plan_id\"]}],\"version\":\"eb6f0d2e\"}},\"@happyvertical/smrt-support:SupportChannelBindingCollection\":{\"name\":\"supportchannelbindingcollection\",\"className\":\"SupportChannelBindingCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportChannelBindingCollection\",\"collection\":\"supportchannelbindings\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-channel-binding.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"findForTarget\":{\"name\":\"findForTarget\",\"async\":true,\"parameters\":[{\"name\":\"targetType\",\"type\":\"string\",\"optional\":false},{\"name\":\"targetId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportChannelBinding | null>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_channel_bindings\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportChannelBinding\",\"exportName\":\"SupportChannelBindingCollection\",\"collectionExportName\":\"SupportChannelBindingCollectionCollection\",\"schema\":{\"tableName\":\"support_channel_bindings\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_channel_bindings\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_channel_bindings_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_channel_bindings_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"662a042a\"}},\"@happyvertical/smrt-support:SupportCompensationPlan\":{\"name\":\"supportcompensationplan\",\"className\":\"SupportCompensationPlan\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportCompensationPlan\",\"collection\":\"supportcompensationplans\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-compensation-plan.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"specialistId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportSpecialist\"},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"hourlyRate\":{\"type\":\"decimal\",\"required\":false,\"default\":0},\"currency\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"effectiveFrom\":{\"type\":\"datetime\",\"required\":false},\"effectiveTo\":{\"type\":\"datetime\",\"required\":false},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"terms\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getTerms\":{\"name\":\"getTerms\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setTerms\":{\"name\":\"setTerms\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"isEffectiveAt\":{\"name\":\"isEffectiveAt\",\"async\":false,\"parameters\":[{\"name\":\"at\",\"type\":\"Date\",\"optional\":true}],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_compensation_plans\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"tenant_id\",\"specialist_id\",\"effective_from\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportCompensationPlan\",\"collectionExportName\":\"SupportCompensationPlanCollection\",\"schema\":{\"tableName\":\"support_compensation_plans\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_compensation_plans\\\" (\\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 \\\"specialist_id\\\" UUID,\\n \\\"name\\\" TEXT DEFAULT '',\\n \\\"hourly_rate\\\" REAL DEFAULT 0,\\n \\\"currency\\\" TEXT,\\n \\\"effective_from\\\" TIMESTAMP,\\n \\\"effective_to\\\" TIMESTAMP,\\n \\\"status\\\" TEXT,\\n \\\"terms\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"specialist_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"hourly_rate\":{\"type\":\"REAL\",\"notNull\":false,\"unique\":false,\"default\":0},\"currency\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"effective_from\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"effective_to\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"terms\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_compensation_plans_tenant_id_specialist_id_idx\",\"columns\":[\"tenant_id\",\"specialist_id\",\"effective_from\"],\"unique\":true},{\"name\":\"support_compensation_plans_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_compensation_plans_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_compensation_plans_specialist_id_idx\",\"columns\":[\"specialist_id\"]}],\"version\":\"818494af\"}},\"@happyvertical/smrt-support:SupportCompensationPlanCollection\":{\"name\":\"supportcompensationplancollection\",\"className\":\"SupportCompensationPlanCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportCompensationPlanCollection\",\"collection\":\"supportcompensationplans\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-compensation-plan.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"resolveForSpecialist\":{\"name\":\"resolveForSpecialist\",\"async\":true,\"parameters\":[{\"name\":\"specialistId\",\"type\":\"string\",\"optional\":false},{\"name\":\"at\",\"type\":\"Date\",\"optional\":true},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<SupportCompensationPlan | null>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_compensation_plans\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportCompensationPlan\",\"exportName\":\"SupportCompensationPlanCollection\",\"collectionExportName\":\"SupportCompensationPlanCollectionCollection\",\"schema\":{\"tableName\":\"support_compensation_plans\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_compensation_plans\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_compensation_plans_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_compensation_plans_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"121b3db1\"}},\"@happyvertical/smrt-support:SupportInteraction\":{\"name\":\"supportinteraction\",\"className\":\"SupportInteraction\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportInteraction\",\"collection\":\"supportinteractions\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-interaction.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"caseId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SupportCase\",\"_meta\":{\"required\":true}},\"direction\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"channelKind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"actorKind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"authorProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"occurredAt\":{\"type\":\"datetime\",\"required\":false},\"body\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"sourceType\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"sourceId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"sourceKey\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"rfcMessageId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_interactions\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"source_key\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportInteraction\",\"collectionExportName\":\"SupportInteractionCollection\",\"validationRules\":[{\"field\":\"caseId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_interactions\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_interactions\\\" (\\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 \\\"case_id\\\" UUID NOT NULL,\\n \\\"direction\\\" TEXT,\\n \\\"channel_kind\\\" TEXT,\\n \\\"actor_kind\\\" TEXT,\\n \\\"author_profile_id\\\" UUID,\\n \\\"occurred_at\\\" TIMESTAMP,\\n \\\"body\\\" TEXT,\\n \\\"source_type\\\" TEXT,\\n \\\"source_id\\\" TEXT,\\n \\\"source_key\\\" TEXT,\\n \\\"rfc_message_id\\\" TEXT,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"case_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"direction\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"channel_kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"actor_kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"author_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"occurred_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"body\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"source_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"source_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"source_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"rfc_message_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_interactions_source_key_idx\",\"columns\":[\"source_key\"],\"unique\":true},{\"name\":\"support_interactions_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_interactions_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_interactions_case_id_idx\",\"columns\":[\"case_id\"]},{\"name\":\"support_interactions_author_profile_id_idx\",\"columns\":[\"author_profile_id\"]}],\"version\":\"5e5f214e\"}},\"@happyvertical/smrt-support:SupportInteractionCollection\":{\"name\":\"supportinteractioncollection\",\"className\":\"SupportInteractionCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportInteractionCollection\",\"collection\":\"supportinteractions\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-interaction.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forCase\":{\"name\":\"forCase\",\"async\":true,\"parameters\":[{\"name\":\"caseId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportInteraction[]>\",\"isStatic\":false,\"isPublic\":true},\"bySourceKey\":{\"name\":\"bySourceKey\",\"async\":true,\"parameters\":[{\"name\":\"sourceKey\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportInteraction | null>\",\"isStatic\":false,\"isPublic\":true},\"byRfcMessageId\":{\"name\":\"byRfcMessageId\",\"async\":true,\"parameters\":[{\"name\":\"rfcMessageId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportInteraction | null>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_interactions\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportInteraction\",\"exportName\":\"SupportInteractionCollection\",\"collectionExportName\":\"SupportInteractionCollectionCollection\",\"schema\":{\"tableName\":\"support_interactions\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_interactions\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_interactions_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_interactions_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"b1c57eb7\"}},\"@happyvertical/smrt-support:SupportPlan\":{\"name\":\"supportplan\",\"className\":\"SupportPlan\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportPlan\",\"collection\":\"supportplans\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-plan.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"planKey\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"description\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"channels\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"timezone\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"coverage\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"holidays\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"severityDefinitions\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"targets\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"pauseStatuses\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"escalationPolicy\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"availabilityFeeAmount\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"currency\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"includedMinutes\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"overageHourlyRate\":{\"type\":\"decimal\",\"required\":false,\"default\":0},\"onCallHourlyRate\":{\"type\":\"decimal\",\"required\":false,\"default\":0},\"timeApprovalPolicy\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"subscriptionPlanKey\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getChannels\":{\"name\":\"getChannels\",\"async\":false,\"parameters\":[],\"returnType\":\"string[]\",\"isStatic\":false,\"isPublic\":true},\"setChannels\":{\"name\":\"setChannels\",\"async\":false,\"parameters\":[{\"name\":\"channels\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getCoverage\":{\"name\":\"getCoverage\",\"async\":false,\"parameters\":[],\"returnType\":\"CoverageWindow[]\",\"isStatic\":false,\"isPublic\":true},\"setCoverage\":{\"name\":\"setCoverage\",\"async\":false,\"parameters\":[{\"name\":\"windows\",\"type\":\"CoverageWindow[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getHolidays\":{\"name\":\"getHolidays\",\"async\":false,\"parameters\":[],\"returnType\":\"string[]\",\"isStatic\":false,\"isPublic\":true},\"setHolidays\":{\"name\":\"setHolidays\",\"async\":false,\"parameters\":[{\"name\":\"dates\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getSeverityDefinitions\":{\"name\":\"getSeverityDefinitions\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string, SeverityDefinition>\",\"isStatic\":false,\"isPublic\":true},\"setSeverityDefinitions\":{\"name\":\"setSeverityDefinitions\",\"async\":false,\"parameters\":[{\"name\":\"defs\",\"type\":\"Record<string, SeverityDefinition>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getTargets\":{\"name\":\"getTargets\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string, Partial<ServiceTargetMinutes>>\",\"isStatic\":false,\"isPublic\":true},\"setTargets\":{\"name\":\"setTargets\",\"async\":false,\"parameters\":[{\"name\":\"targets\",\"type\":\"Record<string, Partial<ServiceTargetMinutes>>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"targetsForSeverity\":{\"name\":\"targetsForSeverity\",\"async\":false,\"parameters\":[{\"name\":\"severity\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"ServiceTargetMinutes\",\"isStatic\":false,\"isPublic\":true},\"getPauseStatuses\":{\"name\":\"getPauseStatuses\",\"async\":false,\"parameters\":[],\"returnType\":\"string[]\",\"isStatic\":false,\"isPublic\":true},\"setPauseStatuses\":{\"name\":\"setPauseStatuses\",\"async\":false,\"parameters\":[{\"name\":\"statuses\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getEscalationPolicy\":{\"name\":\"getEscalationPolicy\",\"async\":false,\"parameters\":[],\"returnType\":\"EscalationStep[]\",\"isStatic\":false,\"isPublic\":true},\"setEscalationPolicy\":{\"name\":\"setEscalationPolicy\",\"async\":false,\"parameters\":[{\"name\":\"steps\",\"type\":\"EscalationStep[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getTimeApprovalPolicy\":{\"name\":\"getTimeApprovalPolicy\",\"async\":false,\"parameters\":[],\"returnType\":\"TimeApprovalPolicy\",\"isStatic\":false,\"isPublic\":true},\"setTimeApprovalPolicy\":{\"name\":\"setTimeApprovalPolicy\",\"async\":false,\"parameters\":[{\"name\":\"policy\",\"type\":\"TimeApprovalPolicy\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"snapshotTerms\":{\"name\":\"snapshotTerms\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_plans\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"tenant_id\",\"plan_key\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportPlan\",\"collectionExportName\":\"SupportPlanCollection\",\"schema\":{\"tableName\":\"support_plans\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_plans\\\" (\\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 \\\"plan_key\\\" TEXT,\\n \\\"name\\\" TEXT DEFAULT '',\\n \\\"description\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"channels\\\" TEXT,\\n \\\"timezone\\\" TEXT,\\n \\\"coverage\\\" TEXT,\\n \\\"holidays\\\" TEXT,\\n \\\"severity_definitions\\\" TEXT,\\n \\\"targets\\\" TEXT,\\n \\\"pause_statuses\\\" TEXT,\\n \\\"escalation_policy\\\" TEXT,\\n \\\"availability_fee_amount\\\" INTEGER DEFAULT 0,\\n \\\"currency\\\" TEXT,\\n \\\"included_minutes\\\" INTEGER DEFAULT 0,\\n \\\"overage_hourly_rate\\\" REAL DEFAULT 0,\\n \\\"on_call_hourly_rate\\\" REAL DEFAULT 0,\\n \\\"time_approval_policy\\\" TEXT,\\n \\\"subscription_plan_key\\\" TEXT,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"plan_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"channels\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"timezone\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"coverage\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"holidays\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"severity_definitions\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"targets\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"pause_statuses\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"escalation_policy\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"availability_fee_amount\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"currency\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"included_minutes\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"overage_hourly_rate\":{\"type\":\"REAL\",\"notNull\":false,\"unique\":false,\"default\":0},\"on_call_hourly_rate\":{\"type\":\"REAL\",\"notNull\":false,\"unique\":false,\"default\":0},\"time_approval_policy\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"subscription_plan_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_plans_tenant_id_plan_key_idx\",\"columns\":[\"tenant_id\",\"plan_key\"],\"unique\":true},{\"name\":\"support_plans_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_plans_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]}],\"version\":\"492a9cf6\"}},\"@happyvertical/smrt-support:SupportPlanCollection\":{\"name\":\"supportplancollection\",\"className\":\"SupportPlanCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportPlanCollection\",\"collection\":\"supportplans\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-plan.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"byPlanKey\":{\"name\":\"byPlanKey\",\"async\":true,\"parameters\":[{\"name\":\"planKey\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportPlan | null>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_plans\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportPlan\",\"exportName\":\"SupportPlanCollection\",\"collectionExportName\":\"SupportPlanCollectionCollection\",\"schema\":{\"tableName\":\"support_plans\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_plans\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_plans_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_plans_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"a2548347\"}},\"@happyvertical/smrt-support:SupportPolicy\":{\"name\":\"supportpolicy\",\"className\":\"SupportPolicy\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportPolicy\",\"collection\":\"supportpolicies\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-policy.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"planId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportPlan\"},\"projectId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"enabled\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"autoAcknowledge\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"autoClassify\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"autoAnswer\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"autoTroubleshoot\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"autoResolve\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"autoResolveMaxSeverity\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"confidenceThreshold\":{\"type\":\"decimal\",\"required\":false,\"default\":0.7},\"maxAutoAttempts\":{\"type\":\"integer\",\"required\":false,\"default\":1},\"autoSendEmailReplies\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"sensitiveCategories\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"allowedTools\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getSensitiveCategories\":{\"name\":\"getSensitiveCategories\",\"async\":false,\"parameters\":[],\"returnType\":\"string[]\",\"isStatic\":false,\"isPublic\":true},\"setSensitiveCategories\":{\"name\":\"setSensitiveCategories\",\"async\":false,\"parameters\":[{\"name\":\"categories\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getAllowedTools\":{\"name\":\"getAllowedTools\",\"async\":false,\"parameters\":[],\"returnType\":\"string[]\",\"isStatic\":false,\"isPublic\":true},\"setAllowedTools\":{\"name\":\"setAllowedTools\",\"async\":false,\"parameters\":[{\"name\":\"tools\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"scopeRank\":{\"name\":\"scopeRank\",\"async\":false,\"parameters\":[],\"returnType\":\"number\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_policies\",\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"tenant_id\",\"name\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportPolicy\",\"collectionExportName\":\"SupportPolicyCollection\",\"schema\":{\"tableName\":\"support_policies\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_policies\\\" (\\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 \\\"name\\\" TEXT DEFAULT '',\\n \\\"plan_id\\\" UUID,\\n \\\"project_id\\\" TEXT,\\n \\\"enabled\\\" BOOLEAN,\\n \\\"auto_acknowledge\\\" BOOLEAN,\\n \\\"auto_classify\\\" BOOLEAN,\\n \\\"auto_answer\\\" BOOLEAN,\\n \\\"auto_troubleshoot\\\" BOOLEAN,\\n \\\"auto_resolve\\\" BOOLEAN,\\n \\\"auto_resolve_max_severity\\\" TEXT,\\n \\\"confidence_threshold\\\" REAL DEFAULT 0.7,\\n \\\"max_auto_attempts\\\" INTEGER DEFAULT 1,\\n \\\"auto_send_email_replies\\\" BOOLEAN,\\n \\\"sensitive_categories\\\" TEXT,\\n \\\"allowed_tools\\\" TEXT,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"plan_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"project_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"enabled\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"auto_acknowledge\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"auto_classify\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"auto_answer\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"auto_troubleshoot\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"auto_resolve\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"auto_resolve_max_severity\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"confidence_threshold\":{\"type\":\"REAL\",\"notNull\":false,\"unique\":false,\"default\":0.7},\"max_auto_attempts\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":1},\"auto_send_email_replies\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"sensitive_categories\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"allowed_tools\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_policies_tenant_id_name_idx\",\"columns\":[\"tenant_id\",\"name\"],\"unique\":true},{\"name\":\"support_policies_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_policies_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_policies_plan_id_idx\",\"columns\":[\"plan_id\"]}],\"version\":\"3bdcc3f5\"}},\"@happyvertical/smrt-support:SupportPolicyCollection\":{\"name\":\"supportpolicycollection\",\"className\":\"SupportPolicyCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportPolicyCollection\",\"collection\":\"supportpolicies\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-policy.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"resolveForScope\":{\"name\":\"resolveForScope\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<SupportPolicy | null>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_policies\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportPolicy\",\"exportName\":\"SupportPolicyCollection\",\"collectionExportName\":\"SupportPolicyCollectionCollection\",\"schema\":{\"tableName\":\"support_policies\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_policies\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_policies_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_policies_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"555a3403\"}},\"@happyvertical/smrt-support:SupportServiceTarget\":{\"name\":\"supportservicetarget\",\"className\":\"SupportServiceTarget\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportServiceTarget\",\"collection\":\"supportservicetargets\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-service-target.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"caseId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SupportCase\",\"_meta\":{\"required\":true}},\"targetType\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"cycle\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"severity\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"baseMinutes\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"startedAt\":{\"type\":\"datetime\",\"required\":false},\"dueAt\":{\"type\":\"datetime\",\"required\":false},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"pausedAt\":{\"type\":\"datetime\",\"required\":false},\"pausedTotalSeconds\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"satisfiedAt\":{\"type\":\"datetime\",\"required\":false},\"breachedAt\":{\"type\":\"datetime\",\"required\":false},\"cancelledAt\":{\"type\":\"datetime\",\"required\":false},\"escalationJobId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"isRunning\":{\"name\":\"isRunning\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"checkAndEscalate\":{\"name\":\"checkAndEscalate\",\"async\":true,\"parameters\":[{\"name\":\"args\",\"type\":\"Record<string>\",\"optional\":true},{\"name\":\"_context\",\"type\":\"any\",\"optional\":true}],\"returnType\":\"Promise<CheckAndEscalateResult>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_service_targets\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"case_id\",\"target_type\",\"cycle\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportServiceTarget\",\"collectionExportName\":\"SupportServiceTargetCollection\",\"validationRules\":[{\"field\":\"caseId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_service_targets\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_service_targets\\\" (\\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 \\\"case_id\\\" UUID NOT NULL,\\n \\\"target_type\\\" TEXT,\\n \\\"cycle\\\" INTEGER DEFAULT 0,\\n \\\"severity\\\" TEXT,\\n \\\"base_minutes\\\" INTEGER DEFAULT 0,\\n \\\"started_at\\\" TIMESTAMP,\\n \\\"due_at\\\" TIMESTAMP,\\n \\\"status\\\" TEXT,\\n \\\"paused_at\\\" TIMESTAMP,\\n \\\"paused_total_seconds\\\" INTEGER DEFAULT 0,\\n \\\"satisfied_at\\\" TIMESTAMP,\\n \\\"breached_at\\\" TIMESTAMP,\\n \\\"cancelled_at\\\" TIMESTAMP,\\n \\\"escalation_job_id\\\" TEXT,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"case_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"target_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"cycle\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"severity\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"base_minutes\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"started_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"due_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"paused_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"paused_total_seconds\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"satisfied_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"breached_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"cancelled_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"escalation_job_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_service_targets_case_id_target_type_idx\",\"columns\":[\"case_id\",\"target_type\",\"cycle\"],\"unique\":true},{\"name\":\"support_service_targets_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_service_targets_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]}],\"version\":\"8af54dc4\"}},\"@happyvertical/smrt-support:SupportServiceTargetCollection\":{\"name\":\"supportservicetargetcollection\",\"className\":\"SupportServiceTargetCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportServiceTargetCollection\",\"collection\":\"supportservicetargets\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-service-target.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forCase\":{\"name\":\"forCase\",\"async\":true,\"parameters\":[{\"name\":\"caseId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportServiceTarget[]>\",\"isStatic\":false,\"isPublic\":true},\"activeTarget\":{\"name\":\"activeTarget\",\"async\":true,\"parameters\":[{\"name\":\"caseId\",\"type\":\"string\",\"optional\":false},{\"name\":\"targetType\",\"type\":\"ServiceTargetType\",\"optional\":false}],\"returnType\":\"Promise<SupportServiceTarget | null>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_service_targets\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportServiceTarget\",\"exportName\":\"SupportServiceTargetCollection\",\"collectionExportName\":\"SupportServiceTargetCollectionCollection\",\"schema\":{\"tableName\":\"support_service_targets\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_service_targets\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_service_targets_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_service_targets_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"f201a103\"}},\"@happyvertical/smrt-support:SupportEscalation\":{\"name\":\"supportescalation\",\"className\":\"SupportEscalation\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportEscalation\",\"collection\":\"supportescalations\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-service-target.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"caseId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SupportCase\",\"_meta\":{\"required\":true}},\"level\":{\"type\":\"integer\",\"required\":false,\"default\":1},\"reason\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"targetId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportServiceTarget\"},\"targetType\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"action\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"fromSpecialistId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportSpecialist\"},\"toSpecialistId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportSpecialist\"},\"notifiedProfileIds\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"occurredAt\":{\"type\":\"datetime\",\"required\":false},\"note\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getNotifiedProfileIds\":{\"name\":\"getNotifiedProfileIds\",\"async\":false,\"parameters\":[],\"returnType\":\"string[]\",\"isStatic\":false,\"isPublic\":true},\"setNotifiedProfileIds\":{\"name\":\"setNotifiedProfileIds\",\"async\":false,\"parameters\":[{\"name\":\"ids\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_escalations\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"tenantScoped\":{\"mode\":\"optional\"},\"conflictColumns\":[\"tenant_id\",\"slug\",\"context\"]},\"extends\":\"SmrtObject\",\"exportName\":\"SupportEscalation\",\"collectionExportName\":\"SupportEscalationCollection\",\"validationRules\":[{\"field\":\"caseId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_escalations\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_escalations\\\" (\\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 \\\"case_id\\\" UUID NOT NULL,\\n \\\"level\\\" INTEGER DEFAULT 1,\\n \\\"reason\\\" TEXT,\\n \\\"target_id\\\" UUID,\\n \\\"target_type\\\" TEXT,\\n \\\"action\\\" TEXT,\\n \\\"from_specialist_id\\\" UUID,\\n \\\"to_specialist_id\\\" UUID,\\n \\\"notified_profile_ids\\\" TEXT,\\n \\\"occurred_at\\\" TIMESTAMP,\\n \\\"note\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"case_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"level\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":1},\"reason\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"target_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"target_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"action\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"from_specialist_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"to_specialist_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"notified_profile_ids\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"occurred_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"note\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_escalations_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_escalations_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_escalations_case_id_idx\",\"columns\":[\"case_id\"]},{\"name\":\"support_escalations_target_id_idx\",\"columns\":[\"target_id\"]},{\"name\":\"support_escalations_from_specialist_id_idx\",\"columns\":[\"from_specialist_id\"]},{\"name\":\"support_escalations_to_specialist_id_idx\",\"columns\":[\"to_specialist_id\"]}],\"version\":\"977ea730\"}},\"@happyvertical/smrt-support:SupportEscalationCollection\":{\"name\":\"supportescalationcollection\",\"className\":\"SupportEscalationCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportEscalationCollection\",\"collection\":\"supportescalations\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-service-target.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forCase\":{\"name\":\"forCase\",\"async\":true,\"parameters\":[{\"name\":\"caseId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportEscalation[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_escalations\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportEscalation\",\"exportName\":\"SupportEscalationCollection\",\"collectionExportName\":\"SupportEscalationCollectionCollection\",\"schema\":{\"tableName\":\"support_escalations\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_escalations\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_escalations_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_escalations_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"f9b3556a\"}},\"@happyvertical/smrt-support:SupportCharge\":{\"name\":\"supportcharge\",\"className\":\"SupportCharge\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportCharge\",\"collection\":\"supportcharges\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-settlement.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"timeEntryId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"ServiceTimeEntry\",\"_meta\":{\"required\":true}},\"caseId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportCase\"},\"planId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportPlan\"},\"amount\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"currency\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"billableSeconds\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"includedSecondsApplied\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"rateSnapshot\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"finalizedAt\":{\"type\":\"datetime\",\"required\":false},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getRateSnapshot\":{\"name\":\"getRateSnapshot\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setRateSnapshot\":{\"name\":\"setRateSnapshot\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_charges\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"time_entry_id\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportCharge\",\"collectionExportName\":\"SupportChargeCollection\",\"validationRules\":[{\"field\":\"timeEntryId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_charges\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_charges\\\" (\\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 \\\"time_entry_id\\\" UUID NOT NULL,\\n \\\"case_id\\\" UUID,\\n \\\"plan_id\\\" UUID,\\n \\\"amount\\\" INTEGER DEFAULT 0,\\n \\\"currency\\\" TEXT,\\n \\\"billable_seconds\\\" INTEGER DEFAULT 0,\\n \\\"included_seconds_applied\\\" INTEGER DEFAULT 0,\\n \\\"rate_snapshot\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"finalized_at\\\" TIMESTAMP,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"time_entry_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"case_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"plan_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"amount\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"currency\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"billable_seconds\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"included_seconds_applied\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"rate_snapshot\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"finalized_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_charges_time_entry_id_idx\",\"columns\":[\"time_entry_id\"],\"unique\":true},{\"name\":\"support_charges_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_charges_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_charges_case_id_idx\",\"columns\":[\"case_id\"]},{\"name\":\"support_charges_plan_id_idx\",\"columns\":[\"plan_id\"]}],\"version\":\"4b8b4db5\"}},\"@happyvertical/smrt-support:SupportChargeCollection\":{\"name\":\"supportchargecollection\",\"className\":\"SupportChargeCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportChargeCollection\",\"collection\":\"supportcharges\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-settlement.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forTimeEntry\":{\"name\":\"forTimeEntry\",\"async\":true,\"parameters\":[{\"name\":\"timeEntryId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportCharge | null>\",\"isStatic\":false,\"isPublic\":true},\"forCase\":{\"name\":\"forCase\",\"async\":true,\"parameters\":[{\"name\":\"caseId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportCharge[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_charges\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportCharge\",\"exportName\":\"SupportChargeCollection\",\"collectionExportName\":\"SupportChargeCollectionCollection\",\"schema\":{\"tableName\":\"support_charges\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_charges\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_charges_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_charges_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"6853d84d\"}},\"@happyvertical/smrt-support:SupportCompensation\":{\"name\":\"supportcompensation\",\"className\":\"SupportCompensation\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportCompensation\",\"collection\":\"supportcompensations\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-settlement.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"timeEntryId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"ServiceTimeEntry\",\"_meta\":{\"required\":true}},\"specialistId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportSpecialist\"},\"compensationPlanId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportCompensationPlan\"},\"amount\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"currency\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"payableSeconds\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"rateSnapshot\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"finalizedAt\":{\"type\":\"datetime\",\"required\":false},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getRateSnapshot\":{\"name\":\"getRateSnapshot\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setRateSnapshot\":{\"name\":\"setRateSnapshot\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_compensations\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"time_entry_id\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportCompensation\",\"collectionExportName\":\"SupportCompensationCollection\",\"validationRules\":[{\"field\":\"timeEntryId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_compensations\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_compensations\\\" (\\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 \\\"time_entry_id\\\" UUID NOT NULL,\\n \\\"specialist_id\\\" UUID,\\n \\\"compensation_plan_id\\\" UUID,\\n \\\"amount\\\" INTEGER DEFAULT 0,\\n \\\"currency\\\" TEXT,\\n \\\"payable_seconds\\\" INTEGER DEFAULT 0,\\n \\\"rate_snapshot\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"finalized_at\\\" TIMESTAMP,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"time_entry_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"specialist_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"compensation_plan_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"amount\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"currency\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"payable_seconds\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"rate_snapshot\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"finalized_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_compensations_time_entry_id_idx\",\"columns\":[\"time_entry_id\"],\"unique\":true},{\"name\":\"support_compensations_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_compensations_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_compensations_specialist_id_idx\",\"columns\":[\"specialist_id\"]},{\"name\":\"support_compensations_compensation_plan_id_idx\",\"columns\":[\"compensation_plan_id\"]}],\"version\":\"1e16b14c\"}},\"@happyvertical/smrt-support:SupportCompensationCollection\":{\"name\":\"supportcompensationcollection\",\"className\":\"SupportCompensationCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportCompensationCollection\",\"collection\":\"supportcompensations\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-settlement.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forTimeEntry\":{\"name\":\"forTimeEntry\",\"async\":true,\"parameters\":[{\"name\":\"timeEntryId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportCompensation | null>\",\"isStatic\":false,\"isPublic\":true},\"forSpecialist\":{\"name\":\"forSpecialist\",\"async\":true,\"parameters\":[{\"name\":\"specialistId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportCompensation[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_compensations\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportCompensation\",\"exportName\":\"SupportCompensationCollection\",\"collectionExportName\":\"SupportCompensationCollectionCollection\",\"schema\":{\"tableName\":\"support_compensations\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_compensations\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_compensations_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_compensations_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"ec88df4e\"}},\"@happyvertical/smrt-support:SupportSpecialist\":{\"name\":\"supportspecialist\",\"className\":\"SupportSpecialist\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportSpecialist\",\"collection\":\"supportspecialists\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-specialist.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"profileId\":{\"type\":\"crossPackageRef\",\"required\":true,\"related\":\"@happyvertical/smrt-profiles:Profile\"},\"displayName\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"languages\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"timezone\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"maxConcurrentCases\":{\"type\":\"integer\",\"required\":false,\"default\":10},\"onCallPriority\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"notes\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getLanguages\":{\"name\":\"getLanguages\",\"async\":false,\"parameters\":[],\"returnType\":\"string[]\",\"isStatic\":false,\"isPublic\":true},\"setLanguages\":{\"name\":\"setLanguages\",\"async\":false,\"parameters\":[{\"name\":\"languages\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"isActive\":{\"name\":\"isActive\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_specialists\",\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"tenant_id\",\"profile_id\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportSpecialist\",\"collectionExportName\":\"SupportSpecialistCollection\",\"validationRules\":[{\"field\":\"profileId\",\"rule\":\"required\",\"fieldType\":\"crossPackageRef\"}],\"schema\":{\"tableName\":\"support_specialists\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_specialists\\\" (\\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 \\\"profile_id\\\" UUID NOT NULL,\\n \\\"display_name\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"languages\\\" TEXT,\\n \\\"timezone\\\" TEXT,\\n \\\"max_concurrent_cases\\\" INTEGER DEFAULT 10,\\n \\\"on_call_priority\\\" INTEGER DEFAULT 0,\\n \\\"notes\\\" TEXT,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":true,\"unique\":false},\"display_name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"languages\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"timezone\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"max_concurrent_cases\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":10},\"on_call_priority\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"notes\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_specialists_tenant_id_profile_id_idx\",\"columns\":[\"tenant_id\",\"profile_id\"],\"unique\":true},{\"name\":\"support_specialists_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_specialists_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_specialists_profile_id_idx\",\"columns\":[\"profile_id\"]}],\"version\":\"ff5305d3\"}},\"@happyvertical/smrt-support:SupportSpecialistCollection\":{\"name\":\"supportspecialistcollection\",\"className\":\"SupportSpecialistCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportSpecialistCollection\",\"collection\":\"supportspecialists\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-specialist.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"findActive\":{\"name\":\"findActive\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<SupportSpecialist[]>\",\"isStatic\":false,\"isPublic\":true},\"byProfile\":{\"name\":\"byProfile\",\"async\":true,\"parameters\":[{\"name\":\"profileId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportSpecialist | null>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_specialists\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportSpecialist\",\"exportName\":\"SupportSpecialistCollection\",\"collectionExportName\":\"SupportSpecialistCollectionCollection\",\"schema\":{\"tableName\":\"support_specialists\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_specialists\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_specialists_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_specialists_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"65dfee96\"}},\"@happyvertical/smrt-support:SupportQualification\":{\"name\":\"supportqualification\",\"className\":\"SupportQualification\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportQualification\",\"collection\":\"supportqualifications\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-specialist.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"specialistId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SupportSpecialist\",\"_meta\":{\"required\":true}},\"projectId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"level\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"effectiveFrom\":{\"type\":\"datetime\",\"required\":false},\"effectiveTo\":{\"type\":\"datetime\",\"required\":false},\"grantedByProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"notes\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"isEffectiveAt\":{\"name\":\"isEffectiveAt\",\"async\":false,\"parameters\":[{\"name\":\"at\",\"type\":\"Date\",\"optional\":true}],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_qualifications\",\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"specialist_id\",\"project_id\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportQualification\",\"collectionExportName\":\"SupportQualificationCollection\",\"validationRules\":[{\"field\":\"specialistId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_qualifications\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_qualifications\\\" (\\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 \\\"specialist_id\\\" UUID NOT NULL,\\n \\\"project_id\\\" TEXT,\\n \\\"level\\\" TEXT,\\n \\\"effective_from\\\" TIMESTAMP,\\n \\\"effective_to\\\" TIMESTAMP,\\n \\\"granted_by_profile_id\\\" UUID,\\n \\\"notes\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"specialist_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"project_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"level\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"effective_from\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"effective_to\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"granted_by_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"notes\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_qualifications_specialist_id_project_id_idx\",\"columns\":[\"specialist_id\",\"project_id\"],\"unique\":true},{\"name\":\"support_qualifications_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_qualifications_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_qualifications_granted_by_profile_id_idx\",\"columns\":[\"granted_by_profile_id\"]}],\"version\":\"7b4f8c26\"}},\"@happyvertical/smrt-support:SupportQualificationCollection\":{\"name\":\"supportqualificationcollection\",\"className\":\"SupportQualificationCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportQualificationCollection\",\"collection\":\"supportqualifications\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-specialist.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forSpecialist\":{\"name\":\"forSpecialist\",\"async\":true,\"parameters\":[{\"name\":\"specialistId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportQualification[]>\",\"isStatic\":false,\"isPublic\":true},\"forProject\":{\"name\":\"forProject\",\"async\":true,\"parameters\":[{\"name\":\"projectId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportQualification[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_qualifications\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportQualification\",\"exportName\":\"SupportQualificationCollection\",\"collectionExportName\":\"SupportQualificationCollectionCollection\",\"schema\":{\"tableName\":\"support_qualifications\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_qualifications\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_qualifications_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_qualifications_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"a0c2e59b\"}},\"@happyvertical/smrt-support:SupportAvailability\":{\"name\":\"supportavailability\",\"className\":\"SupportAvailability\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportAvailability\",\"collection\":\"supportavailabilities\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-specialist.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"specialistId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SupportSpecialist\",\"_meta\":{\"required\":true}},\"kind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"weekday\":{\"type\":\"integer\",\"required\":false,\"_meta\":{\"nullable\":true}},\"startMinute\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"endMinute\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"startsAt\":{\"type\":\"datetime\",\"required\":false},\"endsAt\":{\"type\":\"datetime\",\"required\":false},\"notes\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"support_availability_windows\",\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"tenantScoped\":{\"mode\":\"optional\"},\"conflictColumns\":[\"tenant_id\",\"slug\",\"context\"]},\"extends\":\"SmrtObject\",\"exportName\":\"SupportAvailability\",\"collectionExportName\":\"SupportAvailabilityCollection\",\"validationRules\":[{\"field\":\"specialistId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_availability_windows\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_availability_windows\\\" (\\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 \\\"specialist_id\\\" UUID NOT NULL,\\n \\\"kind\\\" TEXT,\\n \\\"weekday\\\" INTEGER,\\n \\\"start_minute\\\" INTEGER DEFAULT 0,\\n \\\"end_minute\\\" INTEGER DEFAULT 0,\\n \\\"starts_at\\\" TIMESTAMP,\\n \\\"ends_at\\\" TIMESTAMP,\\n \\\"notes\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"specialist_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"weekday\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false},\"start_minute\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"end_minute\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"starts_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"ends_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"notes\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_availability_windows_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_availability_windows_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_availability_windows_specialist_id_idx\",\"columns\":[\"specialist_id\"]}],\"version\":\"3cb42cd3\"}},\"@happyvertical/smrt-support:SupportAvailabilityCollection\":{\"name\":\"supportavailabilitycollection\",\"className\":\"SupportAvailabilityCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportAvailabilityCollection\",\"collection\":\"supportavailabilities\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-specialist.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forSpecialist\":{\"name\":\"forSpecialist\",\"async\":true,\"parameters\":[{\"name\":\"specialistId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportAvailability[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_availability_windows\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportAvailability\",\"exportName\":\"SupportAvailabilityCollection\",\"collectionExportName\":\"SupportAvailabilityCollectionCollection\",\"schema\":{\"tableName\":\"support_availability_windows\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_availability_windows\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_availability_windows_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_availability_windows_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"acd97b79\"}},\"@happyvertical/smrt-support:SupportWorkLink\":{\"name\":\"supportworklink\",\"className\":\"SupportWorkLink\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportWorkLink\",\"collection\":\"supportworklinks\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-work-link.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"caseId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SupportCase\",\"_meta\":{\"required\":true}},\"linkKind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"targetType\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"targetId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"targetLabel\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"externalUrl\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"lastStatusAt\":{\"type\":\"datetime\",\"required\":false},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_work_links\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"case_id\",\"target_type\",\"target_id\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportWorkLink\",\"collectionExportName\":\"SupportWorkLinkCollection\",\"validationRules\":[{\"field\":\"caseId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_work_links\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_work_links\\\" (\\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 \\\"case_id\\\" UUID NOT NULL,\\n \\\"link_kind\\\" TEXT,\\n \\\"target_type\\\" TEXT,\\n \\\"target_id\\\" TEXT,\\n \\\"target_label\\\" TEXT,\\n \\\"external_url\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"last_status_at\\\" TIMESTAMP,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"case_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"link_kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"target_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"target_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"target_label\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"external_url\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"last_status_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_work_links_case_id_target_type_idx\",\"columns\":[\"case_id\",\"target_type\",\"target_id\"],\"unique\":true},{\"name\":\"support_work_links_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_work_links_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]}],\"version\":\"72accaad\"}},\"@happyvertical/smrt-support:SupportWorkLinkCollection\":{\"name\":\"supportworklinkcollection\",\"className\":\"SupportWorkLinkCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportWorkLinkCollection\",\"collection\":\"supportworklinks\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-work-link.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forCase\":{\"name\":\"forCase\",\"async\":true,\"parameters\":[{\"name\":\"caseId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportWorkLink[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_work_links\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportWorkLink\",\"exportName\":\"SupportWorkLinkCollection\",\"collectionExportName\":\"SupportWorkLinkCollectionCollection\",\"schema\":{\"tableName\":\"support_work_links\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_work_links\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_work_links_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_work_links_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"d1147c3e\"}}},\"moduleType\":\"smrt\",\"smrtDependencies\":[\"@happyvertical/smrt-chat\",\"@happyvertical/smrt-core\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-messages\",\"@happyvertical/smrt-projects\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]}"));
|
|
22
|
+
ObjectRegistry.registerPackageManifest(JSON.parse("{\"version\":\"1.0.0\",\"timestamp\":0,\"packageName\":\"@happyvertical/smrt-support\",\"packageVersion\":\"0.42.1\",\"objects\":{\"@happyvertical/smrt-support:ServiceTimeEntry\":{\"name\":\"servicetimeentry\",\"className\":\"ServiceTimeEntry\",\"qualifiedName\":\"@happyvertical/smrt-support:ServiceTimeEntry\",\"collection\":\"servicetimeentries\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/service-time-entry.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"caseId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportCase\"},\"workRefType\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"workRefId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"specialistId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportSpecialist\"},\"participantKind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"participantProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"agentRef\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"source\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"description\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"startedAt\":{\"type\":\"datetime\",\"required\":false},\"endedAt\":{\"type\":\"datetime\",\"required\":false},\"durationSeconds\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"evidence\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"submittedAt\":{\"type\":\"datetime\",\"required\":false},\"submittedByProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"approvedAt\":{\"type\":\"datetime\",\"required\":false},\"approvedByProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"approvalPath\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"rejectedAt\":{\"type\":\"datetime\",\"required\":false},\"rejectedByProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"rejectionReason\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"correctionOfId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"ServiceTimeEntry\"},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"service_time_entries\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"tenantScoped\":{\"mode\":\"optional\"},\"conflictColumns\":[\"tenant_id\",\"slug\",\"context\"]},\"extends\":\"ServiceTimeEntry\",\"exportName\":\"ServiceTimeEntry\",\"collectionExportName\":\"ServiceTimeEntryCollection\",\"schema\":{\"tableName\":\"service_time_entries\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"service_time_entries\\\" (\\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 \\\"case_id\\\" UUID,\\n \\\"work_ref_type\\\" TEXT,\\n \\\"work_ref_id\\\" TEXT,\\n \\\"specialist_id\\\" UUID,\\n \\\"participant_kind\\\" TEXT,\\n \\\"participant_profile_id\\\" UUID,\\n \\\"agent_ref\\\" TEXT,\\n \\\"source\\\" TEXT,\\n \\\"description\\\" TEXT,\\n \\\"started_at\\\" TIMESTAMP,\\n \\\"ended_at\\\" TIMESTAMP,\\n \\\"duration_seconds\\\" INTEGER DEFAULT 0,\\n \\\"evidence\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"submitted_at\\\" TIMESTAMP,\\n \\\"submitted_by_profile_id\\\" UUID,\\n \\\"approved_at\\\" TIMESTAMP,\\n \\\"approved_by_profile_id\\\" UUID,\\n \\\"approval_path\\\" TEXT,\\n \\\"rejected_at\\\" TIMESTAMP,\\n \\\"rejected_by_profile_id\\\" UUID,\\n \\\"rejection_reason\\\" TEXT,\\n \\\"correction_of_id\\\" UUID,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"case_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"work_ref_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"work_ref_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"specialist_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"participant_kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"participant_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"agent_ref\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"source\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"started_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"ended_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"duration_seconds\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"evidence\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"submitted_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"submitted_by_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"approved_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"approved_by_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"approval_path\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"rejected_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"rejected_by_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"rejection_reason\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"correction_of_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"service_time_entries_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true},{\"name\":\"service_time_entries_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"service_time_entries_case_id_idx\",\"columns\":[\"case_id\"]},{\"name\":\"service_time_entries_specialist_id_idx\",\"columns\":[\"specialist_id\"]},{\"name\":\"service_time_entries_participant_profile_id_idx\",\"columns\":[\"participant_profile_id\"]},{\"name\":\"service_time_entries_submitted_by_profile_id_idx\",\"columns\":[\"submitted_by_profile_id\"]},{\"name\":\"service_time_entries_approved_by_profile_id_idx\",\"columns\":[\"approved_by_profile_id\"]},{\"name\":\"service_time_entries_rejected_by_profile_id_idx\",\"columns\":[\"rejected_by_profile_id\"]},{\"name\":\"service_time_entries_correction_of_id_idx\",\"columns\":[\"correction_of_id\"]}],\"version\":\"9367aec5\"}},\"@happyvertical/smrt-support:ServiceTimeEntryCollection\":{\"name\":\"servicetimeentrycollection\",\"className\":\"ServiceTimeEntryCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:ServiceTimeEntryCollection\",\"collection\":\"servicetimeentries\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/service-time-entry.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forCase\":{\"name\":\"forCase\",\"async\":true,\"parameters\":[{\"name\":\"caseId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<ServiceTimeEntry[]>\",\"isStatic\":false,\"isPublic\":true},\"forSpecialist\":{\"name\":\"forSpecialist\",\"async\":true,\"parameters\":[{\"name\":\"specialistId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<ServiceTimeEntry[]>\",\"isStatic\":false,\"isPublic\":true},\"pendingApproval\":{\"name\":\"pendingApproval\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<ServiceTimeEntry[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"service_time_entries\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"ServiceTimeEntry\",\"exportName\":\"ServiceTimeEntryCollection\",\"collectionExportName\":\"ServiceTimeEntryCollectionCollection\",\"schema\":{\"tableName\":\"service_time_entries\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"service_time_entries\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"service_time_entries_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"service_time_entries_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"d9c34ac0\"}},\"@happyvertical/smrt-support:SupportAiRun\":{\"name\":\"supportairun\",\"className\":\"SupportAiRun\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportAiRun\",\"collection\":\"supportairuns\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-ai-run.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"caseId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SupportCase\",\"_meta\":{\"required\":true}},\"interactionId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportInteraction\"},\"phase\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"outcome\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"confidence\":{\"type\":\"decimal\",\"required\":false,\"_meta\":{\"nullable\":true}},\"classification\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"responseInteractionId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportInteraction\"},\"knowledgeRefs\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"toolCalls\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"error\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"correlationId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"model\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"startedAt\":{\"type\":\"datetime\",\"required\":false},\"completedAt\":{\"type\":\"datetime\",\"required\":false},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getClassification\":{\"name\":\"getClassification\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setClassification\":{\"name\":\"setClassification\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getKnowledgeRefs\":{\"name\":\"getKnowledgeRefs\",\"async\":false,\"parameters\":[],\"returnType\":\"Array<Record<string>>\",\"isStatic\":false,\"isPublic\":true},\"setKnowledgeRefs\":{\"name\":\"setKnowledgeRefs\",\"async\":false,\"parameters\":[{\"name\":\"refs\",\"type\":\"Array<Record<string>>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getToolCalls\":{\"name\":\"getToolCalls\",\"async\":false,\"parameters\":[],\"returnType\":\"Array<Record<string>>\",\"isStatic\":false,\"isPublic\":true},\"setToolCalls\":{\"name\":\"setToolCalls\",\"async\":false,\"parameters\":[{\"name\":\"calls\",\"type\":\"Array<Record<string>>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_ai_runs\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"tenantScoped\":{\"mode\":\"optional\"},\"conflictColumns\":[\"tenant_id\",\"slug\",\"context\"]},\"extends\":\"SmrtObject\",\"exportName\":\"SupportAiRun\",\"collectionExportName\":\"SupportAiRunCollection\",\"validationRules\":[{\"field\":\"caseId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_ai_runs\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_ai_runs\\\" (\\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 \\\"case_id\\\" UUID NOT NULL,\\n \\\"interaction_id\\\" UUID,\\n \\\"phase\\\" TEXT,\\n \\\"outcome\\\" TEXT,\\n \\\"confidence\\\" REAL,\\n \\\"classification\\\" TEXT,\\n \\\"response_interaction_id\\\" UUID,\\n \\\"knowledge_refs\\\" TEXT,\\n \\\"tool_calls\\\" TEXT,\\n \\\"error\\\" TEXT,\\n \\\"correlation_id\\\" TEXT,\\n \\\"model\\\" TEXT,\\n \\\"started_at\\\" TIMESTAMP,\\n \\\"completed_at\\\" TIMESTAMP,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"case_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"interaction_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"phase\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"outcome\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"confidence\":{\"type\":\"REAL\",\"notNull\":false,\"unique\":false},\"classification\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"response_interaction_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"knowledge_refs\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"tool_calls\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"error\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"correlation_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"model\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"started_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"completed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_ai_runs_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_ai_runs_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_ai_runs_case_id_idx\",\"columns\":[\"case_id\"]},{\"name\":\"support_ai_runs_interaction_id_idx\",\"columns\":[\"interaction_id\"]},{\"name\":\"support_ai_runs_response_interaction_id_idx\",\"columns\":[\"response_interaction_id\"]}],\"version\":\"0caab968\"}},\"@happyvertical/smrt-support:SupportAiRunCollection\":{\"name\":\"supportairuncollection\",\"className\":\"SupportAiRunCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportAiRunCollection\",\"collection\":\"supportairuns\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-ai-run.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forCase\":{\"name\":\"forCase\",\"async\":true,\"parameters\":[{\"name\":\"caseId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportAiRun[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_ai_runs\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportAiRun\",\"exportName\":\"SupportAiRunCollection\",\"collectionExportName\":\"SupportAiRunCollectionCollection\",\"schema\":{\"tableName\":\"support_ai_runs\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_ai_runs\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_ai_runs_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_ai_runs_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"87728103\"}},\"@happyvertical/smrt-support:SupportCaseEvent\":{\"name\":\"supportcaseevent\",\"className\":\"SupportCaseEvent\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportCaseEvent\",\"collection\":\"supportcaseevents\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-case-event.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"caseId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SupportCase\",\"_meta\":{\"required\":true}},\"eventType\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"actorKind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"actorProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"occurredAt\":{\"type\":\"datetime\",\"required\":false},\"summary\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"payload\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getPayload\":{\"name\":\"getPayload\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setPayload\":{\"name\":\"setPayload\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_case_events\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"tenantScoped\":{\"mode\":\"optional\"},\"conflictColumns\":[\"tenant_id\",\"slug\",\"context\"]},\"extends\":\"SmrtObject\",\"exportName\":\"SupportCaseEvent\",\"collectionExportName\":\"SupportCaseEventCollection\",\"validationRules\":[{\"field\":\"caseId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_case_events\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_case_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 \\\"case_id\\\" UUID NOT NULL,\\n \\\"event_type\\\" TEXT,\\n \\\"actor_kind\\\" TEXT,\\n \\\"actor_profile_id\\\" UUID,\\n \\\"occurred_at\\\" TIMESTAMP,\\n \\\"summary\\\" TEXT,\\n \\\"payload\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"case_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"event_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"actor_kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"actor_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"occurred_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"summary\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"payload\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_case_events_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_case_events_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_case_events_case_id_idx\",\"columns\":[\"case_id\"]},{\"name\":\"support_case_events_actor_profile_id_idx\",\"columns\":[\"actor_profile_id\"]}],\"version\":\"cd3fc7c1\"}},\"@happyvertical/smrt-support:SupportCaseEventCollection\":{\"name\":\"supportcaseeventcollection\",\"className\":\"SupportCaseEventCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportCaseEventCollection\",\"collection\":\"supportcaseevents\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-case-event.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forCase\":{\"name\":\"forCase\",\"async\":true,\"parameters\":[{\"name\":\"caseId\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<SupportCaseEvent[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_case_events\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportCaseEvent\",\"exportName\":\"SupportCaseEventCollection\",\"collectionExportName\":\"SupportCaseEventCollectionCollection\",\"schema\":{\"tableName\":\"support_case_events\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_case_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);\",\"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\"}},\"indexes\":[{\"name\":\"support_case_events_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_case_events_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"15415d2b\"}},\"@happyvertical/smrt-support:SupportCase\":{\"name\":\"supportcase\",\"className\":\"SupportCase\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportCase\",\"collection\":\"supportcases\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-case.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"caseNumber\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"subject\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"description\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"priority\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"severity\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"category\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"sensitive\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"channelKind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"clientProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"openedByProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"projectId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"bindingId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportChannelBinding\"},\"threadKey\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"planId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportPlan\"},\"planSnapshot\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"assignedSpecialistId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportSpecialist\"},\"assignedAt\":{\"type\":\"datetime\",\"required\":false},\"preferredSpecialistId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportSpecialist\"},\"escalationLevel\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"escalatedAt\":{\"type\":\"datetime\",\"required\":false},\"acknowledgedAt\":{\"type\":\"datetime\",\"required\":false},\"firstRespondedAt\":{\"type\":\"datetime\",\"required\":false},\"humanRequestedAt\":{\"type\":\"datetime\",\"required\":false},\"resolvedAt\":{\"type\":\"datetime\",\"required\":false},\"resolvedByProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"resolutionKind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"resolutionSummary\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"closedAt\":{\"type\":\"datetime\",\"required\":false},\"reopenCount\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"lastReopenedAt\":{\"type\":\"datetime\",\"required\":false},\"aiEnabled\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"isOpen\":{\"name\":\"isOpen\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"updateMetadata\":{\"name\":\"updateMetadata\",\"async\":false,\"parameters\":[{\"name\":\"patch\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getPlanSnapshot\":{\"name\":\"getPlanSnapshot\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setPlanSnapshot\":{\"name\":\"setPlanSnapshot\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"save\":{\"name\":\"save\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_cases\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"tenantScoped\":{\"mode\":\"optional\"},\"conflictColumns\":[\"tenant_id\",\"slug\",\"context\"]},\"extends\":\"SmrtObject\",\"exportName\":\"SupportCase\",\"collectionExportName\":\"SupportCaseCollection\",\"schema\":{\"tableName\":\"support_cases\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_cases\\\" (\\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 \\\"case_number\\\" TEXT,\\n \\\"subject\\\" TEXT,\\n \\\"description\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"priority\\\" TEXT,\\n \\\"severity\\\" TEXT,\\n \\\"category\\\" TEXT,\\n \\\"sensitive\\\" BOOLEAN,\\n \\\"channel_kind\\\" TEXT,\\n \\\"client_profile_id\\\" UUID,\\n \\\"opened_by_profile_id\\\" UUID,\\n \\\"project_id\\\" TEXT,\\n \\\"binding_id\\\" UUID,\\n \\\"thread_key\\\" TEXT,\\n \\\"plan_id\\\" UUID,\\n \\\"plan_snapshot\\\" TEXT,\\n \\\"assigned_specialist_id\\\" UUID,\\n \\\"assigned_at\\\" TIMESTAMP,\\n \\\"preferred_specialist_id\\\" UUID,\\n \\\"escalation_level\\\" INTEGER DEFAULT 0,\\n \\\"escalated_at\\\" TIMESTAMP,\\n \\\"acknowledged_at\\\" TIMESTAMP,\\n \\\"first_responded_at\\\" TIMESTAMP,\\n \\\"human_requested_at\\\" TIMESTAMP,\\n \\\"resolved_at\\\" TIMESTAMP,\\n \\\"resolved_by_profile_id\\\" UUID,\\n \\\"resolution_kind\\\" TEXT,\\n \\\"resolution_summary\\\" TEXT,\\n \\\"closed_at\\\" TIMESTAMP,\\n \\\"reopen_count\\\" INTEGER DEFAULT 0,\\n \\\"last_reopened_at\\\" TIMESTAMP,\\n \\\"ai_enabled\\\" BOOLEAN,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"case_number\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"subject\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"priority\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"severity\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"category\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"sensitive\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"channel_kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"client_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"opened_by_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"project_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"binding_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"thread_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"plan_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"plan_snapshot\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"assigned_specialist_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"assigned_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"preferred_specialist_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"escalation_level\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"escalated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"acknowledged_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"first_responded_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"human_requested_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"resolved_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"resolved_by_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"resolution_kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"resolution_summary\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"closed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"reopen_count\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"last_reopened_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"ai_enabled\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_cases_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_cases_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_cases_client_profile_id_idx\",\"columns\":[\"client_profile_id\"]},{\"name\":\"support_cases_opened_by_profile_id_idx\",\"columns\":[\"opened_by_profile_id\"]},{\"name\":\"support_cases_binding_id_idx\",\"columns\":[\"binding_id\"]},{\"name\":\"support_cases_plan_id_idx\",\"columns\":[\"plan_id\"]},{\"name\":\"support_cases_assigned_specialist_id_idx\",\"columns\":[\"assigned_specialist_id\"]},{\"name\":\"support_cases_preferred_specialist_id_idx\",\"columns\":[\"preferred_specialist_id\"]},{\"name\":\"support_cases_resolved_by_profile_id_idx\",\"columns\":[\"resolved_by_profile_id\"]}],\"version\":\"f9609447\"}},\"@happyvertical/smrt-support:SupportCaseCollection\":{\"name\":\"supportcasecollection\",\"className\":\"SupportCaseCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportCaseCollection\",\"collection\":\"supportcases\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-case.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"findOpenByThreadKey\":{\"name\":\"findOpenByThreadKey\",\"async\":true,\"parameters\":[{\"name\":\"threadKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<SupportCase | null>\",\"isStatic\":false,\"isPublic\":true},\"findQueue\":{\"name\":\"findQueue\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<SupportCase[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_cases\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportCase\",\"exportName\":\"SupportCaseCollection\",\"collectionExportName\":\"SupportCaseCollectionCollection\",\"schema\":{\"tableName\":\"support_cases\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_cases\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_cases_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_cases_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"a0ea314b\"}},\"@happyvertical/smrt-support:SupportChannelBinding\":{\"name\":\"supportchannelbinding\",\"className\":\"SupportChannelBinding\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportChannelBinding\",\"collection\":\"supportchannelbindings\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-channel-binding.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"bindingKind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"channelKind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"targetType\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"targetId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"clientProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"projectId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"planId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportPlan\"},\"enabled\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"selfAddresses\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getSelfAddresses\":{\"name\":\"getSelfAddresses\",\"async\":false,\"parameters\":[],\"returnType\":\"string[]\",\"isStatic\":false,\"isPublic\":true},\"setSelfAddresses\":{\"name\":\"setSelfAddresses\",\"async\":false,\"parameters\":[{\"name\":\"addresses\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_channel_bindings\",\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"target_type\",\"target_id\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportChannelBinding\",\"collectionExportName\":\"SupportChannelBindingCollection\",\"schema\":{\"tableName\":\"support_channel_bindings\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_channel_bindings\\\" (\\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 \\\"name\\\" TEXT DEFAULT '',\\n \\\"binding_kind\\\" TEXT,\\n \\\"channel_kind\\\" TEXT,\\n \\\"target_type\\\" TEXT,\\n \\\"target_id\\\" TEXT,\\n \\\"client_profile_id\\\" UUID,\\n \\\"project_id\\\" TEXT,\\n \\\"plan_id\\\" UUID,\\n \\\"enabled\\\" BOOLEAN,\\n \\\"self_addresses\\\" TEXT,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"binding_kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"channel_kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"target_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"target_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"client_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"project_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"plan_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"enabled\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"self_addresses\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_channel_bindings_target_type_target_id_idx\",\"columns\":[\"target_type\",\"target_id\"],\"unique\":true},{\"name\":\"support_channel_bindings_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_channel_bindings_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_channel_bindings_client_profile_id_idx\",\"columns\":[\"client_profile_id\"]},{\"name\":\"support_channel_bindings_plan_id_idx\",\"columns\":[\"plan_id\"]}],\"version\":\"eb6f0d2e\"}},\"@happyvertical/smrt-support:SupportChannelBindingCollection\":{\"name\":\"supportchannelbindingcollection\",\"className\":\"SupportChannelBindingCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportChannelBindingCollection\",\"collection\":\"supportchannelbindings\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-channel-binding.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"findForTarget\":{\"name\":\"findForTarget\",\"async\":true,\"parameters\":[{\"name\":\"targetType\",\"type\":\"string\",\"optional\":false},{\"name\":\"targetId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportChannelBinding | null>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_channel_bindings\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportChannelBinding\",\"exportName\":\"SupportChannelBindingCollection\",\"collectionExportName\":\"SupportChannelBindingCollectionCollection\",\"schema\":{\"tableName\":\"support_channel_bindings\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_channel_bindings\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_channel_bindings_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_channel_bindings_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"662a042a\"}},\"@happyvertical/smrt-support:SupportCompensationPlan\":{\"name\":\"supportcompensationplan\",\"className\":\"SupportCompensationPlan\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportCompensationPlan\",\"collection\":\"supportcompensationplans\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-compensation-plan.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"specialistId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportSpecialist\"},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"hourlyRate\":{\"type\":\"decimal\",\"required\":false,\"default\":0},\"currency\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"effectiveFrom\":{\"type\":\"datetime\",\"required\":false},\"effectiveTo\":{\"type\":\"datetime\",\"required\":false},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"terms\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getTerms\":{\"name\":\"getTerms\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setTerms\":{\"name\":\"setTerms\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"isEffectiveAt\":{\"name\":\"isEffectiveAt\",\"async\":false,\"parameters\":[{\"name\":\"at\",\"type\":\"Date\",\"optional\":true}],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_compensation_plans\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"tenant_id\",\"specialist_id\",\"effective_from\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportCompensationPlan\",\"collectionExportName\":\"SupportCompensationPlanCollection\",\"schema\":{\"tableName\":\"support_compensation_plans\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_compensation_plans\\\" (\\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 \\\"specialist_id\\\" UUID,\\n \\\"name\\\" TEXT DEFAULT '',\\n \\\"hourly_rate\\\" REAL DEFAULT 0,\\n \\\"currency\\\" TEXT,\\n \\\"effective_from\\\" TIMESTAMP,\\n \\\"effective_to\\\" TIMESTAMP,\\n \\\"status\\\" TEXT,\\n \\\"terms\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"specialist_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"hourly_rate\":{\"type\":\"REAL\",\"notNull\":false,\"unique\":false,\"default\":0},\"currency\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"effective_from\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"effective_to\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"terms\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_compensation_plans_tenant_id_specialist_id_idx\",\"columns\":[\"tenant_id\",\"specialist_id\",\"effective_from\"],\"unique\":true},{\"name\":\"support_compensation_plans_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_compensation_plans_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_compensation_plans_specialist_id_idx\",\"columns\":[\"specialist_id\"]}],\"version\":\"818494af\"}},\"@happyvertical/smrt-support:SupportCompensationPlanCollection\":{\"name\":\"supportcompensationplancollection\",\"className\":\"SupportCompensationPlanCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportCompensationPlanCollection\",\"collection\":\"supportcompensationplans\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-compensation-plan.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"resolveForSpecialist\":{\"name\":\"resolveForSpecialist\",\"async\":true,\"parameters\":[{\"name\":\"specialistId\",\"type\":\"string\",\"optional\":false},{\"name\":\"at\",\"type\":\"Date\",\"optional\":true},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<SupportCompensationPlan | null>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_compensation_plans\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportCompensationPlan\",\"exportName\":\"SupportCompensationPlanCollection\",\"collectionExportName\":\"SupportCompensationPlanCollectionCollection\",\"schema\":{\"tableName\":\"support_compensation_plans\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_compensation_plans\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_compensation_plans_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_compensation_plans_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"121b3db1\"}},\"@happyvertical/smrt-support:SupportInteraction\":{\"name\":\"supportinteraction\",\"className\":\"SupportInteraction\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportInteraction\",\"collection\":\"supportinteractions\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-interaction.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"caseId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SupportCase\",\"_meta\":{\"required\":true}},\"direction\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"channelKind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"actorKind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"authorProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"occurredAt\":{\"type\":\"datetime\",\"required\":false},\"body\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"sourceType\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"sourceId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"sourceKey\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"rfcMessageId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_interactions\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"source_key\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportInteraction\",\"collectionExportName\":\"SupportInteractionCollection\",\"validationRules\":[{\"field\":\"caseId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_interactions\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_interactions\\\" (\\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 \\\"case_id\\\" UUID NOT NULL,\\n \\\"direction\\\" TEXT,\\n \\\"channel_kind\\\" TEXT,\\n \\\"actor_kind\\\" TEXT,\\n \\\"author_profile_id\\\" UUID,\\n \\\"occurred_at\\\" TIMESTAMP,\\n \\\"body\\\" TEXT,\\n \\\"source_type\\\" TEXT,\\n \\\"source_id\\\" TEXT,\\n \\\"source_key\\\" TEXT,\\n \\\"rfc_message_id\\\" TEXT,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"case_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"direction\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"channel_kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"actor_kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"author_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"occurred_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"body\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"source_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"source_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"source_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"rfc_message_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_interactions_source_key_idx\",\"columns\":[\"source_key\"],\"unique\":true},{\"name\":\"support_interactions_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_interactions_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_interactions_case_id_idx\",\"columns\":[\"case_id\"]},{\"name\":\"support_interactions_author_profile_id_idx\",\"columns\":[\"author_profile_id\"]}],\"version\":\"5e5f214e\"}},\"@happyvertical/smrt-support:SupportInteractionCollection\":{\"name\":\"supportinteractioncollection\",\"className\":\"SupportInteractionCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportInteractionCollection\",\"collection\":\"supportinteractions\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-interaction.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forCase\":{\"name\":\"forCase\",\"async\":true,\"parameters\":[{\"name\":\"caseId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportInteraction[]>\",\"isStatic\":false,\"isPublic\":true},\"bySourceKey\":{\"name\":\"bySourceKey\",\"async\":true,\"parameters\":[{\"name\":\"sourceKey\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportInteraction | null>\",\"isStatic\":false,\"isPublic\":true},\"byRfcMessageId\":{\"name\":\"byRfcMessageId\",\"async\":true,\"parameters\":[{\"name\":\"rfcMessageId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportInteraction | null>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_interactions\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportInteraction\",\"exportName\":\"SupportInteractionCollection\",\"collectionExportName\":\"SupportInteractionCollectionCollection\",\"schema\":{\"tableName\":\"support_interactions\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_interactions\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_interactions_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_interactions_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"b1c57eb7\"}},\"@happyvertical/smrt-support:SupportPlan\":{\"name\":\"supportplan\",\"className\":\"SupportPlan\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportPlan\",\"collection\":\"supportplans\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-plan.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"planKey\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"description\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"channels\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"timezone\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"coverage\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"holidays\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"severityDefinitions\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"targets\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"pauseStatuses\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"escalationPolicy\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"availabilityFeeAmount\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"currency\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"includedMinutes\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"overageHourlyRate\":{\"type\":\"decimal\",\"required\":false,\"default\":0},\"onCallHourlyRate\":{\"type\":\"decimal\",\"required\":false,\"default\":0},\"timeApprovalPolicy\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"subscriptionPlanKey\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getChannels\":{\"name\":\"getChannels\",\"async\":false,\"parameters\":[],\"returnType\":\"string[]\",\"isStatic\":false,\"isPublic\":true},\"setChannels\":{\"name\":\"setChannels\",\"async\":false,\"parameters\":[{\"name\":\"channels\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getCoverage\":{\"name\":\"getCoverage\",\"async\":false,\"parameters\":[],\"returnType\":\"CoverageWindow[]\",\"isStatic\":false,\"isPublic\":true},\"setCoverage\":{\"name\":\"setCoverage\",\"async\":false,\"parameters\":[{\"name\":\"windows\",\"type\":\"CoverageWindow[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getHolidays\":{\"name\":\"getHolidays\",\"async\":false,\"parameters\":[],\"returnType\":\"string[]\",\"isStatic\":false,\"isPublic\":true},\"setHolidays\":{\"name\":\"setHolidays\",\"async\":false,\"parameters\":[{\"name\":\"dates\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getSeverityDefinitions\":{\"name\":\"getSeverityDefinitions\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string, SeverityDefinition>\",\"isStatic\":false,\"isPublic\":true},\"setSeverityDefinitions\":{\"name\":\"setSeverityDefinitions\",\"async\":false,\"parameters\":[{\"name\":\"defs\",\"type\":\"Record<string, SeverityDefinition>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getTargets\":{\"name\":\"getTargets\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string, Partial<ServiceTargetMinutes>>\",\"isStatic\":false,\"isPublic\":true},\"setTargets\":{\"name\":\"setTargets\",\"async\":false,\"parameters\":[{\"name\":\"targets\",\"type\":\"Record<string, Partial<ServiceTargetMinutes>>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"targetsForSeverity\":{\"name\":\"targetsForSeverity\",\"async\":false,\"parameters\":[{\"name\":\"severity\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"ServiceTargetMinutes\",\"isStatic\":false,\"isPublic\":true},\"getPauseStatuses\":{\"name\":\"getPauseStatuses\",\"async\":false,\"parameters\":[],\"returnType\":\"string[]\",\"isStatic\":false,\"isPublic\":true},\"setPauseStatuses\":{\"name\":\"setPauseStatuses\",\"async\":false,\"parameters\":[{\"name\":\"statuses\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getEscalationPolicy\":{\"name\":\"getEscalationPolicy\",\"async\":false,\"parameters\":[],\"returnType\":\"EscalationStep[]\",\"isStatic\":false,\"isPublic\":true},\"setEscalationPolicy\":{\"name\":\"setEscalationPolicy\",\"async\":false,\"parameters\":[{\"name\":\"steps\",\"type\":\"EscalationStep[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getTimeApprovalPolicy\":{\"name\":\"getTimeApprovalPolicy\",\"async\":false,\"parameters\":[],\"returnType\":\"TimeApprovalPolicy\",\"isStatic\":false,\"isPublic\":true},\"setTimeApprovalPolicy\":{\"name\":\"setTimeApprovalPolicy\",\"async\":false,\"parameters\":[{\"name\":\"policy\",\"type\":\"TimeApprovalPolicy\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"snapshotTerms\":{\"name\":\"snapshotTerms\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_plans\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"tenant_id\",\"plan_key\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportPlan\",\"collectionExportName\":\"SupportPlanCollection\",\"schema\":{\"tableName\":\"support_plans\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_plans\\\" (\\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 \\\"plan_key\\\" TEXT,\\n \\\"name\\\" TEXT DEFAULT '',\\n \\\"description\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"channels\\\" TEXT,\\n \\\"timezone\\\" TEXT,\\n \\\"coverage\\\" TEXT,\\n \\\"holidays\\\" TEXT,\\n \\\"severity_definitions\\\" TEXT,\\n \\\"targets\\\" TEXT,\\n \\\"pause_statuses\\\" TEXT,\\n \\\"escalation_policy\\\" TEXT,\\n \\\"availability_fee_amount\\\" INTEGER DEFAULT 0,\\n \\\"currency\\\" TEXT,\\n \\\"included_minutes\\\" INTEGER DEFAULT 0,\\n \\\"overage_hourly_rate\\\" REAL DEFAULT 0,\\n \\\"on_call_hourly_rate\\\" REAL DEFAULT 0,\\n \\\"time_approval_policy\\\" TEXT,\\n \\\"subscription_plan_key\\\" TEXT,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"plan_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"channels\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"timezone\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"coverage\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"holidays\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"severity_definitions\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"targets\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"pause_statuses\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"escalation_policy\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"availability_fee_amount\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"currency\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"included_minutes\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"overage_hourly_rate\":{\"type\":\"REAL\",\"notNull\":false,\"unique\":false,\"default\":0},\"on_call_hourly_rate\":{\"type\":\"REAL\",\"notNull\":false,\"unique\":false,\"default\":0},\"time_approval_policy\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"subscription_plan_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_plans_tenant_id_plan_key_idx\",\"columns\":[\"tenant_id\",\"plan_key\"],\"unique\":true},{\"name\":\"support_plans_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_plans_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]}],\"version\":\"492a9cf6\"}},\"@happyvertical/smrt-support:SupportPlanCollection\":{\"name\":\"supportplancollection\",\"className\":\"SupportPlanCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportPlanCollection\",\"collection\":\"supportplans\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-plan.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"byPlanKey\":{\"name\":\"byPlanKey\",\"async\":true,\"parameters\":[{\"name\":\"planKey\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportPlan | null>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_plans\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportPlan\",\"exportName\":\"SupportPlanCollection\",\"collectionExportName\":\"SupportPlanCollectionCollection\",\"schema\":{\"tableName\":\"support_plans\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_plans\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_plans_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_plans_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"a2548347\"}},\"@happyvertical/smrt-support:SupportPolicy\":{\"name\":\"supportpolicy\",\"className\":\"SupportPolicy\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportPolicy\",\"collection\":\"supportpolicies\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-policy.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"planId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportPlan\"},\"projectId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"enabled\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"autoAcknowledge\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"autoClassify\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"autoAnswer\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"autoTroubleshoot\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"autoResolve\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"autoResolveMaxSeverity\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"confidenceThreshold\":{\"type\":\"decimal\",\"required\":false,\"default\":0.7},\"maxAutoAttempts\":{\"type\":\"integer\",\"required\":false,\"default\":1},\"autoSendEmailReplies\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{}},\"sensitiveCategories\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"allowedTools\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getSensitiveCategories\":{\"name\":\"getSensitiveCategories\",\"async\":false,\"parameters\":[],\"returnType\":\"string[]\",\"isStatic\":false,\"isPublic\":true},\"setSensitiveCategories\":{\"name\":\"setSensitiveCategories\",\"async\":false,\"parameters\":[{\"name\":\"categories\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getAllowedTools\":{\"name\":\"getAllowedTools\",\"async\":false,\"parameters\":[],\"returnType\":\"string[]\",\"isStatic\":false,\"isPublic\":true},\"setAllowedTools\":{\"name\":\"setAllowedTools\",\"async\":false,\"parameters\":[{\"name\":\"tools\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"scopeRank\":{\"name\":\"scopeRank\",\"async\":false,\"parameters\":[],\"returnType\":\"number\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_policies\",\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"tenant_id\",\"name\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportPolicy\",\"collectionExportName\":\"SupportPolicyCollection\",\"schema\":{\"tableName\":\"support_policies\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_policies\\\" (\\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 \\\"name\\\" TEXT DEFAULT '',\\n \\\"plan_id\\\" UUID,\\n \\\"project_id\\\" TEXT,\\n \\\"enabled\\\" BOOLEAN,\\n \\\"auto_acknowledge\\\" BOOLEAN,\\n \\\"auto_classify\\\" BOOLEAN,\\n \\\"auto_answer\\\" BOOLEAN,\\n \\\"auto_troubleshoot\\\" BOOLEAN,\\n \\\"auto_resolve\\\" BOOLEAN,\\n \\\"auto_resolve_max_severity\\\" TEXT,\\n \\\"confidence_threshold\\\" REAL DEFAULT 0.7,\\n \\\"max_auto_attempts\\\" INTEGER DEFAULT 1,\\n \\\"auto_send_email_replies\\\" BOOLEAN,\\n \\\"sensitive_categories\\\" TEXT,\\n \\\"allowed_tools\\\" TEXT,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"plan_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"project_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"enabled\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"auto_acknowledge\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"auto_classify\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"auto_answer\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"auto_troubleshoot\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"auto_resolve\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"auto_resolve_max_severity\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"confidence_threshold\":{\"type\":\"REAL\",\"notNull\":false,\"unique\":false,\"default\":0.7},\"max_auto_attempts\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":1},\"auto_send_email_replies\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"sensitive_categories\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"allowed_tools\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_policies_tenant_id_name_idx\",\"columns\":[\"tenant_id\",\"name\"],\"unique\":true},{\"name\":\"support_policies_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_policies_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_policies_plan_id_idx\",\"columns\":[\"plan_id\"]}],\"version\":\"3bdcc3f5\"}},\"@happyvertical/smrt-support:SupportPolicyCollection\":{\"name\":\"supportpolicycollection\",\"className\":\"SupportPolicyCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportPolicyCollection\",\"collection\":\"supportpolicies\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-policy.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"resolveForScope\":{\"name\":\"resolveForScope\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<SupportPolicy | null>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_policies\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportPolicy\",\"exportName\":\"SupportPolicyCollection\",\"collectionExportName\":\"SupportPolicyCollectionCollection\",\"schema\":{\"tableName\":\"support_policies\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_policies\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_policies_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_policies_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"555a3403\"}},\"@happyvertical/smrt-support:SupportServiceTarget\":{\"name\":\"supportservicetarget\",\"className\":\"SupportServiceTarget\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportServiceTarget\",\"collection\":\"supportservicetargets\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-service-target.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"caseId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SupportCase\",\"_meta\":{\"required\":true}},\"targetType\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"cycle\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"severity\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"baseMinutes\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"startedAt\":{\"type\":\"datetime\",\"required\":false},\"dueAt\":{\"type\":\"datetime\",\"required\":false},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"pausedAt\":{\"type\":\"datetime\",\"required\":false},\"pausedTotalSeconds\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"satisfiedAt\":{\"type\":\"datetime\",\"required\":false},\"breachedAt\":{\"type\":\"datetime\",\"required\":false},\"cancelledAt\":{\"type\":\"datetime\",\"required\":false},\"escalationJobId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"isRunning\":{\"name\":\"isRunning\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"checkAndEscalate\":{\"name\":\"checkAndEscalate\",\"async\":true,\"parameters\":[{\"name\":\"args\",\"type\":\"Record<string>\",\"optional\":true},{\"name\":\"_context\",\"type\":\"any\",\"optional\":true}],\"returnType\":\"Promise<CheckAndEscalateResult>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_service_targets\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"case_id\",\"target_type\",\"cycle\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportServiceTarget\",\"collectionExportName\":\"SupportServiceTargetCollection\",\"validationRules\":[{\"field\":\"caseId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_service_targets\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_service_targets\\\" (\\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 \\\"case_id\\\" UUID NOT NULL,\\n \\\"target_type\\\" TEXT,\\n \\\"cycle\\\" INTEGER DEFAULT 0,\\n \\\"severity\\\" TEXT,\\n \\\"base_minutes\\\" INTEGER DEFAULT 0,\\n \\\"started_at\\\" TIMESTAMP,\\n \\\"due_at\\\" TIMESTAMP,\\n \\\"status\\\" TEXT,\\n \\\"paused_at\\\" TIMESTAMP,\\n \\\"paused_total_seconds\\\" INTEGER DEFAULT 0,\\n \\\"satisfied_at\\\" TIMESTAMP,\\n \\\"breached_at\\\" TIMESTAMP,\\n \\\"cancelled_at\\\" TIMESTAMP,\\n \\\"escalation_job_id\\\" TEXT,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"case_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"target_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"cycle\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"severity\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"base_minutes\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"started_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"due_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"paused_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"paused_total_seconds\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"satisfied_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"breached_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"cancelled_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"escalation_job_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_service_targets_case_id_target_type_idx\",\"columns\":[\"case_id\",\"target_type\",\"cycle\"],\"unique\":true},{\"name\":\"support_service_targets_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_service_targets_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]}],\"version\":\"8af54dc4\"}},\"@happyvertical/smrt-support:SupportServiceTargetCollection\":{\"name\":\"supportservicetargetcollection\",\"className\":\"SupportServiceTargetCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportServiceTargetCollection\",\"collection\":\"supportservicetargets\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-service-target.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forCase\":{\"name\":\"forCase\",\"async\":true,\"parameters\":[{\"name\":\"caseId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportServiceTarget[]>\",\"isStatic\":false,\"isPublic\":true},\"activeTarget\":{\"name\":\"activeTarget\",\"async\":true,\"parameters\":[{\"name\":\"caseId\",\"type\":\"string\",\"optional\":false},{\"name\":\"targetType\",\"type\":\"ServiceTargetType\",\"optional\":false}],\"returnType\":\"Promise<SupportServiceTarget | null>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_service_targets\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportServiceTarget\",\"exportName\":\"SupportServiceTargetCollection\",\"collectionExportName\":\"SupportServiceTargetCollectionCollection\",\"schema\":{\"tableName\":\"support_service_targets\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_service_targets\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_service_targets_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_service_targets_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"f201a103\"}},\"@happyvertical/smrt-support:SupportEscalation\":{\"name\":\"supportescalation\",\"className\":\"SupportEscalation\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportEscalation\",\"collection\":\"supportescalations\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-service-target.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"caseId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SupportCase\",\"_meta\":{\"required\":true}},\"level\":{\"type\":\"integer\",\"required\":false,\"default\":1},\"reason\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"targetId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportServiceTarget\"},\"targetType\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"action\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"fromSpecialistId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportSpecialist\"},\"toSpecialistId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportSpecialist\"},\"notifiedProfileIds\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"occurredAt\":{\"type\":\"datetime\",\"required\":false},\"note\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getNotifiedProfileIds\":{\"name\":\"getNotifiedProfileIds\",\"async\":false,\"parameters\":[],\"returnType\":\"string[]\",\"isStatic\":false,\"isPublic\":true},\"setNotifiedProfileIds\":{\"name\":\"setNotifiedProfileIds\",\"async\":false,\"parameters\":[{\"name\":\"ids\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_escalations\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"tenantScoped\":{\"mode\":\"optional\"},\"conflictColumns\":[\"tenant_id\",\"slug\",\"context\"]},\"extends\":\"SmrtObject\",\"exportName\":\"SupportEscalation\",\"collectionExportName\":\"SupportEscalationCollection\",\"validationRules\":[{\"field\":\"caseId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_escalations\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_escalations\\\" (\\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 \\\"case_id\\\" UUID NOT NULL,\\n \\\"level\\\" INTEGER DEFAULT 1,\\n \\\"reason\\\" TEXT,\\n \\\"target_id\\\" UUID,\\n \\\"target_type\\\" TEXT,\\n \\\"action\\\" TEXT,\\n \\\"from_specialist_id\\\" UUID,\\n \\\"to_specialist_id\\\" UUID,\\n \\\"notified_profile_ids\\\" TEXT,\\n \\\"occurred_at\\\" TIMESTAMP,\\n \\\"note\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"case_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"level\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":1},\"reason\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"target_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"target_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"action\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"from_specialist_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"to_specialist_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"notified_profile_ids\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"occurred_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"note\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_escalations_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_escalations_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_escalations_case_id_idx\",\"columns\":[\"case_id\"]},{\"name\":\"support_escalations_target_id_idx\",\"columns\":[\"target_id\"]},{\"name\":\"support_escalations_from_specialist_id_idx\",\"columns\":[\"from_specialist_id\"]},{\"name\":\"support_escalations_to_specialist_id_idx\",\"columns\":[\"to_specialist_id\"]}],\"version\":\"977ea730\"}},\"@happyvertical/smrt-support:SupportEscalationCollection\":{\"name\":\"supportescalationcollection\",\"className\":\"SupportEscalationCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportEscalationCollection\",\"collection\":\"supportescalations\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-service-target.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forCase\":{\"name\":\"forCase\",\"async\":true,\"parameters\":[{\"name\":\"caseId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportEscalation[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_escalations\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportEscalation\",\"exportName\":\"SupportEscalationCollection\",\"collectionExportName\":\"SupportEscalationCollectionCollection\",\"schema\":{\"tableName\":\"support_escalations\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_escalations\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_escalations_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_escalations_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"f9b3556a\"}},\"@happyvertical/smrt-support:SupportCharge\":{\"name\":\"supportcharge\",\"className\":\"SupportCharge\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportCharge\",\"collection\":\"supportcharges\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-settlement.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"timeEntryId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"ServiceTimeEntry\",\"_meta\":{\"required\":true}},\"caseId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportCase\"},\"planId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportPlan\"},\"amount\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"currency\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"billableSeconds\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"includedSecondsApplied\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"rateSnapshot\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"finalizedAt\":{\"type\":\"datetime\",\"required\":false},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getRateSnapshot\":{\"name\":\"getRateSnapshot\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setRateSnapshot\":{\"name\":\"setRateSnapshot\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_charges\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"time_entry_id\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportCharge\",\"collectionExportName\":\"SupportChargeCollection\",\"validationRules\":[{\"field\":\"timeEntryId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_charges\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_charges\\\" (\\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 \\\"time_entry_id\\\" UUID NOT NULL,\\n \\\"case_id\\\" UUID,\\n \\\"plan_id\\\" UUID,\\n \\\"amount\\\" INTEGER DEFAULT 0,\\n \\\"currency\\\" TEXT,\\n \\\"billable_seconds\\\" INTEGER DEFAULT 0,\\n \\\"included_seconds_applied\\\" INTEGER DEFAULT 0,\\n \\\"rate_snapshot\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"finalized_at\\\" TIMESTAMP,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"time_entry_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"case_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"plan_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"amount\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"currency\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"billable_seconds\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"included_seconds_applied\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"rate_snapshot\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"finalized_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_charges_time_entry_id_idx\",\"columns\":[\"time_entry_id\"],\"unique\":true},{\"name\":\"support_charges_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_charges_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_charges_case_id_idx\",\"columns\":[\"case_id\"]},{\"name\":\"support_charges_plan_id_idx\",\"columns\":[\"plan_id\"]}],\"version\":\"4b8b4db5\"}},\"@happyvertical/smrt-support:SupportChargeCollection\":{\"name\":\"supportchargecollection\",\"className\":\"SupportChargeCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportChargeCollection\",\"collection\":\"supportcharges\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-settlement.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forTimeEntry\":{\"name\":\"forTimeEntry\",\"async\":true,\"parameters\":[{\"name\":\"timeEntryId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportCharge | null>\",\"isStatic\":false,\"isPublic\":true},\"forCase\":{\"name\":\"forCase\",\"async\":true,\"parameters\":[{\"name\":\"caseId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportCharge[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_charges\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportCharge\",\"exportName\":\"SupportChargeCollection\",\"collectionExportName\":\"SupportChargeCollectionCollection\",\"schema\":{\"tableName\":\"support_charges\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_charges\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_charges_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_charges_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"6853d84d\"}},\"@happyvertical/smrt-support:SupportCompensation\":{\"name\":\"supportcompensation\",\"className\":\"SupportCompensation\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportCompensation\",\"collection\":\"supportcompensations\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-settlement.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"timeEntryId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"ServiceTimeEntry\",\"_meta\":{\"required\":true}},\"specialistId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportSpecialist\"},\"compensationPlanId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"SupportCompensationPlan\"},\"amount\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"currency\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"payableSeconds\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"rateSnapshot\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"finalizedAt\":{\"type\":\"datetime\",\"required\":false},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getRateSnapshot\":{\"name\":\"getRateSnapshot\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setRateSnapshot\":{\"name\":\"setRateSnapshot\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_compensations\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"time_entry_id\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportCompensation\",\"collectionExportName\":\"SupportCompensationCollection\",\"validationRules\":[{\"field\":\"timeEntryId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_compensations\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_compensations\\\" (\\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 \\\"time_entry_id\\\" UUID NOT NULL,\\n \\\"specialist_id\\\" UUID,\\n \\\"compensation_plan_id\\\" UUID,\\n \\\"amount\\\" INTEGER DEFAULT 0,\\n \\\"currency\\\" TEXT,\\n \\\"payable_seconds\\\" INTEGER DEFAULT 0,\\n \\\"rate_snapshot\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"finalized_at\\\" TIMESTAMP,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"time_entry_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"specialist_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"compensation_plan_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"amount\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"currency\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"payable_seconds\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"rate_snapshot\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"finalized_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_compensations_time_entry_id_idx\",\"columns\":[\"time_entry_id\"],\"unique\":true},{\"name\":\"support_compensations_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_compensations_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_compensations_specialist_id_idx\",\"columns\":[\"specialist_id\"]},{\"name\":\"support_compensations_compensation_plan_id_idx\",\"columns\":[\"compensation_plan_id\"]}],\"version\":\"1e16b14c\"}},\"@happyvertical/smrt-support:SupportCompensationCollection\":{\"name\":\"supportcompensationcollection\",\"className\":\"SupportCompensationCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportCompensationCollection\",\"collection\":\"supportcompensations\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-settlement.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forTimeEntry\":{\"name\":\"forTimeEntry\",\"async\":true,\"parameters\":[{\"name\":\"timeEntryId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportCompensation | null>\",\"isStatic\":false,\"isPublic\":true},\"forSpecialist\":{\"name\":\"forSpecialist\",\"async\":true,\"parameters\":[{\"name\":\"specialistId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportCompensation[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_compensations\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportCompensation\",\"exportName\":\"SupportCompensationCollection\",\"collectionExportName\":\"SupportCompensationCollectionCollection\",\"schema\":{\"tableName\":\"support_compensations\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_compensations\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_compensations_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_compensations_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"ec88df4e\"}},\"@happyvertical/smrt-support:SupportSpecialist\":{\"name\":\"supportspecialist\",\"className\":\"SupportSpecialist\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportSpecialist\",\"collection\":\"supportspecialists\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-specialist.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"profileId\":{\"type\":\"crossPackageRef\",\"required\":true,\"related\":\"@happyvertical/smrt-profiles:Profile\"},\"displayName\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"languages\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"timezone\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"maxConcurrentCases\":{\"type\":\"integer\",\"required\":false,\"default\":10},\"onCallPriority\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"notes\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getLanguages\":{\"name\":\"getLanguages\",\"async\":false,\"parameters\":[],\"returnType\":\"string[]\",\"isStatic\":false,\"isPublic\":true},\"setLanguages\":{\"name\":\"setLanguages\",\"async\":false,\"parameters\":[{\"name\":\"languages\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"isActive\":{\"name\":\"isActive\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_specialists\",\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"tenant_id\",\"profile_id\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportSpecialist\",\"collectionExportName\":\"SupportSpecialistCollection\",\"validationRules\":[{\"field\":\"profileId\",\"rule\":\"required\",\"fieldType\":\"crossPackageRef\"}],\"schema\":{\"tableName\":\"support_specialists\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_specialists\\\" (\\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 \\\"profile_id\\\" UUID NOT NULL,\\n \\\"display_name\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"languages\\\" TEXT,\\n \\\"timezone\\\" TEXT,\\n \\\"max_concurrent_cases\\\" INTEGER DEFAULT 10,\\n \\\"on_call_priority\\\" INTEGER DEFAULT 0,\\n \\\"notes\\\" TEXT,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":true,\"unique\":false},\"display_name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"languages\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"timezone\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"max_concurrent_cases\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":10},\"on_call_priority\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"notes\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_specialists_tenant_id_profile_id_idx\",\"columns\":[\"tenant_id\",\"profile_id\"],\"unique\":true},{\"name\":\"support_specialists_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_specialists_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_specialists_profile_id_idx\",\"columns\":[\"profile_id\"]}],\"version\":\"ff5305d3\"}},\"@happyvertical/smrt-support:SupportSpecialistCollection\":{\"name\":\"supportspecialistcollection\",\"className\":\"SupportSpecialistCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportSpecialistCollection\",\"collection\":\"supportspecialists\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-specialist.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"findActive\":{\"name\":\"findActive\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<SupportSpecialist[]>\",\"isStatic\":false,\"isPublic\":true},\"byProfile\":{\"name\":\"byProfile\",\"async\":true,\"parameters\":[{\"name\":\"profileId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportSpecialist | null>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_specialists\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportSpecialist\",\"exportName\":\"SupportSpecialistCollection\",\"collectionExportName\":\"SupportSpecialistCollectionCollection\",\"schema\":{\"tableName\":\"support_specialists\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_specialists\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_specialists_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_specialists_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"65dfee96\"}},\"@happyvertical/smrt-support:SupportQualification\":{\"name\":\"supportqualification\",\"className\":\"SupportQualification\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportQualification\",\"collection\":\"supportqualifications\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-specialist.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"specialistId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SupportSpecialist\",\"_meta\":{\"required\":true}},\"projectId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"level\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"effectiveFrom\":{\"type\":\"datetime\",\"required\":false},\"effectiveTo\":{\"type\":\"datetime\",\"required\":false},\"grantedByProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"nullable\":true}},\"notes\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"isEffectiveAt\":{\"name\":\"isEffectiveAt\",\"async\":false,\"parameters\":[{\"name\":\"at\",\"type\":\"Date\",\"optional\":true}],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_qualifications\",\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"specialist_id\",\"project_id\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportQualification\",\"collectionExportName\":\"SupportQualificationCollection\",\"validationRules\":[{\"field\":\"specialistId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_qualifications\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_qualifications\\\" (\\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 \\\"specialist_id\\\" UUID NOT NULL,\\n \\\"project_id\\\" TEXT,\\n \\\"level\\\" TEXT,\\n \\\"effective_from\\\" TIMESTAMP,\\n \\\"effective_to\\\" TIMESTAMP,\\n \\\"granted_by_profile_id\\\" UUID,\\n \\\"notes\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"specialist_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"project_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"level\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"effective_from\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"effective_to\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"granted_by_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"notes\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_qualifications_specialist_id_project_id_idx\",\"columns\":[\"specialist_id\",\"project_id\"],\"unique\":true},{\"name\":\"support_qualifications_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_qualifications_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_qualifications_granted_by_profile_id_idx\",\"columns\":[\"granted_by_profile_id\"]}],\"version\":\"7b4f8c26\"}},\"@happyvertical/smrt-support:SupportQualificationCollection\":{\"name\":\"supportqualificationcollection\",\"className\":\"SupportQualificationCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportQualificationCollection\",\"collection\":\"supportqualifications\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-specialist.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forSpecialist\":{\"name\":\"forSpecialist\",\"async\":true,\"parameters\":[{\"name\":\"specialistId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportQualification[]>\",\"isStatic\":false,\"isPublic\":true},\"forProject\":{\"name\":\"forProject\",\"async\":true,\"parameters\":[{\"name\":\"projectId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportQualification[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_qualifications\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportQualification\",\"exportName\":\"SupportQualificationCollection\",\"collectionExportName\":\"SupportQualificationCollectionCollection\",\"schema\":{\"tableName\":\"support_qualifications\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_qualifications\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_qualifications_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_qualifications_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"a0c2e59b\"}},\"@happyvertical/smrt-support:SupportAvailability\":{\"name\":\"supportavailability\",\"className\":\"SupportAvailability\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportAvailability\",\"collection\":\"supportavailabilities\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-specialist.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"specialistId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SupportSpecialist\",\"_meta\":{\"required\":true}},\"kind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"weekday\":{\"type\":\"integer\",\"required\":false,\"_meta\":{\"nullable\":true}},\"startMinute\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"endMinute\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"startsAt\":{\"type\":\"datetime\",\"required\":false},\"endsAt\":{\"type\":\"datetime\",\"required\":false},\"notes\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"support_availability_windows\",\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"tenantScoped\":{\"mode\":\"optional\"},\"conflictColumns\":[\"tenant_id\",\"slug\",\"context\"]},\"extends\":\"SmrtObject\",\"exportName\":\"SupportAvailability\",\"collectionExportName\":\"SupportAvailabilityCollection\",\"validationRules\":[{\"field\":\"specialistId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_availability_windows\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_availability_windows\\\" (\\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 \\\"specialist_id\\\" UUID NOT NULL,\\n \\\"kind\\\" TEXT,\\n \\\"weekday\\\" INTEGER,\\n \\\"start_minute\\\" INTEGER DEFAULT 0,\\n \\\"end_minute\\\" INTEGER DEFAULT 0,\\n \\\"starts_at\\\" TIMESTAMP,\\n \\\"ends_at\\\" TIMESTAMP,\\n \\\"notes\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"specialist_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"weekday\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false},\"start_minute\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"end_minute\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"starts_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"ends_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"notes\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_availability_windows_slug_context_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_availability_windows_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"support_availability_windows_specialist_id_idx\",\"columns\":[\"specialist_id\"]}],\"version\":\"3cb42cd3\"}},\"@happyvertical/smrt-support:SupportAvailabilityCollection\":{\"name\":\"supportavailabilitycollection\",\"className\":\"SupportAvailabilityCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportAvailabilityCollection\",\"collection\":\"supportavailabilities\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-specialist.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forSpecialist\":{\"name\":\"forSpecialist\",\"async\":true,\"parameters\":[{\"name\":\"specialistId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportAvailability[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_availability_windows\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportAvailability\",\"exportName\":\"SupportAvailabilityCollection\",\"collectionExportName\":\"SupportAvailabilityCollectionCollection\",\"schema\":{\"tableName\":\"support_availability_windows\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_availability_windows\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_availability_windows_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_availability_windows_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"acd97b79\"}},\"@happyvertical/smrt-support:SupportWorkLink\":{\"name\":\"supportworklink\",\"className\":\"SupportWorkLink\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportWorkLink\",\"collection\":\"supportworklinks\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-work-link.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"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}}},\"caseId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SupportCase\",\"_meta\":{\"required\":true}},\"linkKind\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"targetType\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"targetId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"targetLabel\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"externalUrl\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"lastStatusAt\":{\"type\":\"datetime\",\"required\":false},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_work_links\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"conflictColumns\":[\"case_id\",\"target_type\",\"target_id\"],\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SupportWorkLink\",\"collectionExportName\":\"SupportWorkLinkCollection\",\"validationRules\":[{\"field\":\"caseId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"support_work_links\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_work_links\\\" (\\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 \\\"case_id\\\" UUID NOT NULL,\\n \\\"link_kind\\\" TEXT,\\n \\\"target_type\\\" TEXT,\\n \\\"target_id\\\" TEXT,\\n \\\"target_label\\\" TEXT,\\n \\\"external_url\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"last_status_at\\\" TIMESTAMP,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"case_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"link_kind\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"target_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"target_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"target_label\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"external_url\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"last_status_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"support_work_links_case_id_target_type_idx\",\"columns\":[\"case_id\",\"target_type\",\"target_id\"],\"unique\":true},{\"name\":\"support_work_links_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"support_work_links_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]}],\"version\":\"72accaad\"}},\"@happyvertical/smrt-support:SupportWorkLinkCollection\":{\"name\":\"supportworklinkcollection\",\"className\":\"SupportWorkLinkCollection\",\"qualifiedName\":\"@happyvertical/smrt-support:SupportWorkLinkCollection\",\"collection\":\"supportworklinks\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/support/src/models/support-work-link.ts\",\"packageName\":\"@happyvertical/smrt-support\",\"fields\":{},\"methods\":{\"forCase\":{\"name\":\"forCase\",\"async\":true,\"parameters\":[{\"name\":\"caseId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<SupportWorkLink[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"support_work_links\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SupportWorkLink\",\"exportName\":\"SupportWorkLinkCollection\",\"collectionExportName\":\"SupportWorkLinkCollectionCollection\",\"schema\":{\"tableName\":\"support_work_links\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"support_work_links\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"support_work_links_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"support_work_links_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"d1147c3e\"}}},\"moduleType\":\"smrt\",\"smrtDependencies\":[\"@happyvertical/smrt-chat\",\"@happyvertical/smrt-core\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-messages\",\"@happyvertical/smrt-projects\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]}"));
|
|
23
23
|
//#endregion
|
|
24
24
|
//#region src/permissions.ts
|
|
25
25
|
var REASSIGN_CASE_PERMISSION = "support.reassign-case";
|
package/dist/manifest.json
CHANGED
package/dist/smrt-knowledge.json
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
"sensitiveFieldsExcluded": true,
|
|
4
4
|
"generatedAt": "1970-01-01T00:00:00.000Z",
|
|
5
5
|
"packageName": "@happyvertical/smrt-support",
|
|
6
|
-
"packageVersion": "0.
|
|
6
|
+
"packageVersion": "0.42.1",
|
|
7
7
|
"sourceManifestPath": "dist/manifest.json",
|
|
8
8
|
"agentDocPath": "AGENTS.md",
|
|
9
9
|
"sourceHashes": {
|
|
10
|
-
"manifest": "
|
|
11
|
-
"packageJson": "
|
|
12
|
-
"agents": "
|
|
10
|
+
"manifest": "4a0d664a7749f855c50bc0a1fa1f1f5b3585ddf0a337da7d95ba0c2c23fc3ce9",
|
|
11
|
+
"packageJson": "86eea2801e21b5be082c5003f768f7661ce27c78fc8e1a8b2f56eb9a14fe7aa2",
|
|
12
|
+
"agents": "57d75c4e48c549de0e7e50bfc16d739384cd37f4a0c66f0375d1985b24e6cbdd"
|
|
13
13
|
},
|
|
14
14
|
"exports": [
|
|
15
15
|
".",
|
|
@@ -5085,5 +5085,5 @@
|
|
|
5085
5085
|
"polymorphicAssociations": 0,
|
|
5086
5086
|
"uuidColumns": 92
|
|
5087
5087
|
},
|
|
5088
|
-
"agentDoc": "# @happyvertical/smrt-support\n\nAI-first Support Cases for the SMRT framework (epic #1934). Every inbound\nsupport interaction — chat message or email — creates or joins one canonical,\ntenant-scoped **Support Case**; channels stay transports, never separate\nsystems of record. The package owns the case lifecycle, channel intake, the\nAutomated Support Response workflow with lossless **Human Handoff**,\nProject-qualified routing, **Service Target** clocks with timed escalation,\nand auditable **Service Time Entries** whose client charges and provider\ncompensation stay separate. Since #1955 the canonical `ServiceTimeEntry` class\nis owned by `smrt-projects`; this package exposes a compatibility subtype that\nrestates the shared fields for isolated manifest scanning. Both imports use the\nunchanged `service_time_entries` table, so no data is duplicated.\n\n**Boundary (FR-29a):** Support owns tickets, interactions, routing, and\nservice targets. Delivery Operations owns repository work — a **Delivery\nHandoff** links a case to a Development Work Item (e.g.\n`@happyvertical/smrt-projects:Issue`) via a `SupportWorkLink` without ever\ndriving its execution; the delivery side reports status echoes back.\n\n## Models\n\nCase-side models are **internal**: generated API/CLI/MCP surfaces are\nread-only (`list`/`get`) and every write goes through the service facades\n(the `smrt-chat` `ChatService` idiom). Operational configuration models\n(bindings, policies, specialists, qualifications, availability) expose full\ngenerated CRUD; **commercial terms** (`SupportPlan`,\n`SupportCompensationPlan`) are read-only too — their writes flow through the\n`support.manage-plans`-gated `SupportPlanAdminService`.\n\n### Case core (#1926)\n\n- **SupportCase** (`support_cases`) — canonical ticket: `caseNumber`,\n `subject`, `status` (`new → triaged → assigned → in_progress →\n waiting_on_client|escalated → resolved → closed`, guarded at save time via\n the WeakMap + authoritative-DB-read idiom from S5 #1390), `priority`,\n `severity` (plan-defined key), `category`, `sensitive`, `channelKind`,\n `clientProfileId`/`openedByProfileId` (crossPackageRef → Profile),\n `projectId` (app-defined string — deliberately not an FK), `bindingId`,\n `threadKey` (create-or-join dedup key), `planId` + `planSnapshot` (terms\n frozen at apply time), assignment fields, response stamps\n (`acknowledgedAt`, `firstRespondedAt`), `humanRequestedAt`, resolution\n fields, `reopenCount`/`lastReopenedAt`, `aiEnabled`.\n- **SupportInteraction** (`support_interactions`,\n `conflictColumns: ['source_key']`) — channel-neutral transport record:\n `direction` (`inbound`/`outbound`/`internal`), `channelKind`, `actorKind`\n (`client`/`specialist`/`agent`/`system`), denormalized `body`, and the\n qualified `sourceType`/`sourceId` + globally unique `sourceKey`\n (`chat:<messageId>`, `email:<emailId>`, `manual:<uuid>`) that makes\n re-ingestion idempotent.\n- **SupportCaseEvent** (`support_case_events`) — append-only audit trail\n (transitions, assignments, AI runs, handoffs, escalations, target state,\n work links, reopens). Together with interactions this is the complete\n context a Human Handoff transfers.\n- **SupportChannelBinding** (`support_channel_bindings`,\n `conflictColumns: ['target_type','target_id']`) — marks a container as a\n support intake channel: `bindingKind` (`chat_room`/`email_account`),\n qualified `targetType` + `targetId`, default client/project/plan,\n `selfAddresses` (email direction heuristic). Unbound containers are never\n touched.\n- **SupportWorkLink** (`support_work_links`) — Support/Development Work Item\n links with a read-only `status` echo.\n\n### AI workflow (#1928)\n\n- **SupportPolicy** (`support_policies`) — what the AI may do without a\n human: `autoAcknowledge`/`autoClassify`/`autoAnswer` (on by default),\n `autoTroubleshoot`/`autoResolve` (off by default),\n `autoResolveMaxSeverity`, `confidenceThreshold`, `maxAutoAttempts`,\n `sensitiveCategories`, `allowedTools`, `autoSendEmailReplies` (off —\n email replies are drafted, not sent). Resolution is most-specific-wins on\n `(planId, projectId)`; no row → `DEFAULT_SUPPORT_POLICY` (conservative).\n- **SupportAiRun** (`support_ai_runs`) — append-only audit of each phase\n (`acknowledge`/`classify`/`answer`/`troubleshoot`/`resolve`) with\n `confidence`, classification output, knowledge refs, tool calls, outcome\n (`completed`/`skipped`/`failed`/`handed_off`), and `correlationId`.\n\n### Routing, targets, escalation (#1929)\n\n- **SupportSpecialist** (`support_specialists`) — specialist role record on a\n Profile (the commerce `Customer` role-record idiom): `languages`,\n `timezone`, `maxConcurrentCases`, `onCallPriority`, status.\n- **SupportQualification** (`support_qualifications`) — effective-dated\n Project Support Qualification (`trainee`/`qualified`/`expert`).\n- **SupportAvailability** (`support_availability_windows`) — weekly windows\n plus `on_call`/`time_off` spans.\n- **SupportPlan** (`support_plans`, `conflictColumns:\n ['tenant_id','plan_key']`) — the Managed Support Plan: coverage calendar +\n holidays + timezone, channels, severity definitions, per-severity\n acknowledgement/response/update/resolution target minutes, `pauseStatuses`\n (clocks pause only when the plan says so), escalation policy steps,\n availability fee, `includedMinutes`, `overageHourlyRate`,\n `onCallHourlyRate`, time-approval policy, optional\n `subscriptionPlanKey` binding (string, not a dependency).\n `snapshotTerms()` feeds `SupportCase.planSnapshot`.\n- **SupportServiceTarget** (`support_service_targets`,\n `conflictColumns: ['case_id','target_type','cycle']`) — one clock per\n target type (update clocks recur via `cycle`), with pause accounting and\n `escalationJobId` (the one-shot `_smrt_jobs` row scheduled at `dueAt`,\n cancelled on satisfy).\n- **SupportEscalation** (`support_escalations`) — the audit record of one\n escalation firing.\n- **SupportCompensationPlan** (`support_compensation_plans`) —\n effective-dated Support Specialist earning terms; specialist-specific plan\n wins over the tenant default at the work instant. Deliberately separate\n from `SupportPlan` (client pricing) so margin stays measurable.\n\n### Service time (#1930)\n\n- **ServiceTimeEntry** (`service_time_entries`) — auditable Professional\n Service duration: work-context-generic (`caseId` and/or polymorphic\n `workRefType`/`workRefId`), delivering Participant (`participantKind`\n `human`/`agent` + `participantProfileId`/`agentRef`), `source`\n (`timer`/`manual`/`import`/`agent` — one shared validation/audit\n contract), evidence JSON, and lifecycle `draft → submitted →\n approved|rejected`, `approved → corrected` only. **Approved entries are\n immutable**: the work-defining fields are frozen at save time (the\n `LicenseSale` WeakMap-freeze idiom, backed by an authoritative DB-row\n comparison); disputes create explicit corrections via `correctionOfId`.\n- **SupportCharge** / **SupportCompensation** (`support_charges` /\n `support_compensations`, one per time entry) — derived commercial\n snapshots: client amount from the Managed Support Plan (included-time\n consumption then metered overage) vs provider amount from the Support\n Compensation Plan, each with a frozen `rateSnapshot`. Margin = charge −\n compensation, computed by readers; settlement/invoicing composes at the\n app/accounting boundary (#1925) and is out of scope here.\n\n## Services\n\n- **SupportCaseService** — the closed write facade: `openCase`,\n `recordInteraction` (idempotent on `sourceKey`; stamps\n `acknowledgedAt`/`firstRespondedAt`; inbound un-parks\n `waiting_on_client`), `transition`, `assign`, `resolve`, `close`,\n `reopen` (preserves prior resolution in the reopen event), `requestHuman`,\n `linkWork`/`recordWorkStatus` (Delivery Handoff), `recordEvent`,\n `getTimeline` (merged interactions + events).\n- **SupportIntakeService** — create-or-join intake for both channels:\n `ingestChatMessage` (bound `ChatRoom`; `chat:<roomId>[:<threadId>]` thread\n keys; only `role: 'user'` messages), `ingestEmail` (bound `EmailAccount`;\n RFC-thread joins via `inReplyTo`; `selfAddresses` skip; unresolved senders\n park the case with `metadata.unresolvedClient`), plus\n `registerSupportIntake()` — an opt-in `GlobalInterceptors.afterSave`\n observer keyed on the `ChatMessage`/`Email` class names that never throws\n into the source package's save path. Join semantics: open case → join;\n resolved → reopen; closed → new case.\n- **SupportAiWorkflow** — the Automated Support Response (FR-28a):\n `processIntake`/`processCase` run acknowledge → classify → answer →\n resolve under the resolved `SupportPolicy` (conservative defaults), each\n phase writing a `SupportAiRun` + `ai_run` case event. AI calls go through\n the injected `SupportAiBoundary` (default uses `supportCase.do()` with\n defensive JSON parsing that fails toward the human); knowledge comes from\n the pluggable `SupportKnowledgeProvider` (default no-op). Classification\n never overwrites human triage; email answers are drafted\n (`metadata.draft`) unless the policy allows sending. Handoff triggers —\n `client_request`, `low_confidence`, `high_severity`, `sensitive`,\n `failed_resolution`, `policy` (attempt budget) — are always active.\n- **HumanHandoffService** — the lossless Human Handoff (FR-28b):\n `handoff` assembles the full context package (case state + compact\n timeline + AI runs) into the `handoff` event, stamps\n `metadata.activeHandoff` for the no-repeat guarantee (repeat triggers are\n deduped events), routes through the injected `assignSpecialist` seam\n (#1929's routing service plugs in; default queues `new` cases to\n `triaged`), and `releaseHandoff` clears the flag.\n- **ServiceTargetEngine** — Service Target clocks (FR-30/31):\n `startTargetsForCase` derives per-severity clocks from the case's\n `planSnapshot` (live plan fallback) with due times computed in covered\n time (`coverage-calendar.ts`: timezone-aware weekly windows + holidays;\n empty coverage = 24×7) and schedules one-shot `_smrt_jobs` escalation jobs\n at `dueAt`; `onInteractionRecorded` satisfies acknowledgement/response and\n recurs `update` cycles; `onCaseTransition` pauses/resumes clocks only when\n the plan's `pauseStatuses` say so (recomputing remaining covered minutes)\n and settles targets on resolve. Breach → `SupportServiceTarget.\n checkAndEscalate` (background-eligible, at-least-once-safe) marks the\n breach and escalates through the plan's policy steps (notify/reassign,\n delayed follow-up levels), transitioning the case to `escalated`.\n- **SupportPlanAdminService** — the permission-gated write surface for\n commercial terms: create/update/archive for Managed Support Plans and\n Support Compensation Plans, every act behind `support.manage-plans` with\n cross-tenant writes refused (generated CRUD on both models is read-only).\n- **SupportRoutingService** — explainable ranked routing (FR-30):\n `rankSpecialists` hard-filters on active status, effective Project\n Support Qualification, workload cap, and availability windows (specialist\n timezone), then scores preferred-specialist, qualification level, on-call,\n workload headroom, and language (weights in `ROUTING_WEIGHTS`; every\n factor recorded so ineligible specialists show why); `autoAssign` writes\n the assignment with its rationale; `reassign` is gated by\n `support.reassign-case` and refuses cross-tenant principals.\n- **ServiceTimeEntryService** — the ONE recording contract for all four\n entry sources (FR-40): `record` validates duration (explicit or derived\n from the period; `timer` needs both bounds), participant coherence\n (`human` → `participantProfileId`, `agent` → `agentRef`), and the work\n context (case and/or work ref; case entries copy the tenant and append a\n `time_recorded` event); `submit` stamps the submitter.\n- **TimeEntryApprovalService** — the approval gate and only writer of the\n commercial snapshots (FR-36): `approve` resolves the governing terms (case\n `planSnapshot` first, live plan fallback, zero-rate default), gates by\n policy path (`automatic`/`threshold`/`operator`/`client`; operator paths\n behind `support.approve-time-entry`; cross-tenant principals refused), then\n derives the `SupportCharge` (included time first, then overage/on-call) and\n `SupportCompensation` (effective-dated plan) rows; `reject` and `correct`\n (supersede + linked fresh draft via `correctionOfId`) round out the\n lifecycle. Case events carry the charge amount only — compensation never\n leaks case-side.\n\n## Permissions\n\nContributed to the runtime catalog on import (the\n`personas.activate-directive` pattern): `support.reassign-case`,\n`support.approve-time-entry`, `support.manage-plans`. Privileged service\noperations take a `SupportPrincipal` (`can(slug)`), built from explicit slugs\nor a `PermissionResolver`.\n\n## Svelte UI\n\n`@happyvertical/smrt-support/svelte` ships presentational Svelte 5 surfaces:\n`CaseQueue` (priority/status/assignment/channel at a glance, `onselect`),\n`CaseDetail` (header, meta, linked work, merged timeline), `TargetList`\n(Service Target clocks with due/paused/satisfied/breached badges),\n`RoutingRationale` (ranked specialists with eligibility + factor chips and\nan optional reassign action), and `TimeEntryApprovalQueue`\n(date/hours/description/worker/status/amount with\napprove/reject-with-reason actions on submitted rows). Hosts adapt models\nwith `toSupportCaseView` / `toCaseTimelineItemView` / `toServiceTargetView`\n/ `toSupportTimeEntryView` — the time-entry view's first eight fields\ndeliberately match `smrt-projects`' presentation `TimeEntry` contract.\nComponents use `smrt-ui` primitives (`smrtRawPrimitives: \"strict\"`).\n\n## Dependencies\n\nPackage dependencies: `smrt-core`, `smrt-tenancy`, `smrt-projects`,\n`smrt-chat`, `smrt-messages`, `smrt-jobs`, `smrt-users`, `smrt-ui`,\n`@happyvertical/logger`, `@happyvertical/sql`. Profile and subscriptions\nreferences are `@crossPackageRef` string ids or plain string\nkeys. `smrt-projects` is the intentional shared delivery/evidence edge added\nby #1955. No inter-`smrt-*` `peerDependencies`.\n\n## Validation\n\n```sh\npnpm --filter @happyvertical/smrt-support test\npnpm --filter @happyvertical/smrt-support test:postgres\npnpm --filter @happyvertical/smrt-support typecheck\npnpm --filter @happyvertical/smrt-support build\n```\n\n`test:postgres` is the lane that holds the money/rate line — SQLite's type\naffinity stores a REAL in an INTEGER column without complaint, so a money field\nthat reverted to DECIMAL passes every SQLite suite.\n\n## Money and rates\n\n- **Money is integer minor units** (cents) — `$19.99` is `1999`.\n `SupportPlan.availabilityFeeAmount`, `SupportCharge.amount` and\n `SupportCompensation.amount` initialize `= 0`, never `= 0.0`: the integer\n literal is what maps them to INTEGER columns (#2401).\n- **Rates stay DECIMAL but their unit changed.**\n `SupportPlan.overageHourlyRate` / `onCallHourlyRate` and\n `SupportCompensationPlan.hourlyRate` are **minor units per hour**, so\n `hours * rate` yields minor units. INTEGER would truncate a sub-unit rate to\n zero, which is why they keep a decimal initializer.\n- **`roundMoney()` is the single rate↔money boundary.** It rounds\n `(seconds / 3600) * hourlyRate` to a whole minor unit, which is what lets the\n `thresholdAmount` comparison in `determinePath()` be an exact `>` with no\n tolerance. `TimeApprovalPolicy.thresholdAmount` is in the same unit as\n `SupportCharge.amount`.\n- **Migrating an existing database**: `preflightSupportMoneyMinorUnits(db)`\n reports which columns still hold major units and which rows would be rounded\n or overflow `int4`; `migrateSupportMoneyToMinorUnits(db)` converts them\n (idempotent via `_smrt_backfills`). The **rate columns are not in that list**\n — their type does not change, but their stored values must still be\n multiplied by the same scale in the same deploy step. Frozen `rateSnapshot`\n JSON on settled charges is history and is left alone. On SQLite the values\n are rescaled but the declared type needs the table-rebuild path (#2370); the\n `int4` ceiling is ~2.1e9 minor units (~$21.4M) per column, with BIGINT parked\n in #2373.\n\n## Gotchas\n\n- **Writes go through the facades** — the case-side generated routes are\n read-only on purpose; `create`/`update` on them is not a bug to \"fix\".\n- **`projectId` is an app-defined string** — the consuming app owns the\n Project concept; don't turn it into an FK or a crossPackageRef to\n `smrt-projects:Project` (that class is a provider board, not a client\n initiative).\n- **`SupportCase.threadKey` + `SupportInteraction.sourceKey` carry intake\n correctness** — `sourceKey` is globally unique (`conflictColumns`), so\n replayed transport rows are no-ops; new manual interactions must use a\n fresh `manual:<uuid>` key.\n- **High-volume models avoid the inherited `name` field** (`subject`,\n `displayName`, …) so the default `(slug, context, _meta_type)` unique index\n falls back to id-derived slugs; named config models carry\n `conflictColumns` instead (which replaces that index).\n- **Approved time entries never change** — corrections are new rows linked\n by `correctionOfId`; the original flips to `corrected` with its snapshot\n intact.\n- **Plan edits never rewrite history** — cases keep `planSnapshot`, charges\n and compensation keep `rateSnapshot`.\n- **Create-or-join and included-time consumption serialize in-process** —\n `SupportIntakeService` (per conversation key) and\n `TimeEntryApprovalService` (per case) use a `KeyedMutex`, which covers the\n single-app-process deployment these paths run in. Multi-replica\n deployments must serialize at the app layer (route a conversation's\n intake / a case's approvals through one worker, or add an app-level\n claim) — the framework exposes no cross-adapter transaction primitive at\n this seam. Escalation is additionally idempotent per `(target, level)`,\n so at-least-once job redelivery never stacks duplicate escalations.\n"
|
|
5088
|
+
"agentDoc": "# @happyvertical/smrt-support\n\nAI-first Support Cases for the SMRT framework (epic #1934). Every inbound\nsupport interaction — chat message or email — creates or joins one canonical,\ntenant-scoped **Support Case**; channels stay transports, never separate\nsystems of record. The package owns the case lifecycle, channel intake, the\nAutomated Support Response workflow with lossless **Human Handoff**,\nProject-qualified routing, **Service Target** clocks with timed escalation,\nand auditable **Service Time Entries** whose client charges and provider\ncompensation stay separate. Since #1955 the canonical `ServiceTimeEntry` class\nis owned by `smrt-projects`; this package exposes a compatibility subtype that\nrestates the shared fields for isolated manifest scanning. Both imports use the\nunchanged `service_time_entries` table, so no data is duplicated.\n\n**Boundary (FR-29a):** Support owns tickets, interactions, routing, and\nservice targets. Delivery Operations owns repository work — a **Delivery\nHandoff** links a case to a Development Work Item (e.g.\n`@happyvertical/smrt-projects:Issue`) via a `SupportWorkLink` without ever\ndriving its execution; the delivery side reports status echoes back.\n\n## Models\n\nCase-side models are **internal**: generated API/CLI/MCP surfaces are\nread-only (`list`/`get`) and every write goes through the service facades\n(the `smrt-chat` `ChatService` idiom). Operational configuration models\n(bindings, policies, specialists, qualifications, availability) expose full\ngenerated CRUD; **commercial terms** (`SupportPlan`,\n`SupportCompensationPlan`) are read-only too — their writes flow through the\n`support.manage-plans`-gated `SupportPlanAdminService`.\n\n### Case core (#1926)\n\n- **SupportCase** (`support_cases`) — canonical ticket: `caseNumber`,\n `subject`, `status` (`new → triaged → assigned → in_progress →\n waiting_on_client|escalated → resolved → closed`, guarded at save time via\n the WeakMap + authoritative-DB-read idiom from S5 #1390), `priority`,\n `severity` (plan-defined key), `category`, `sensitive`, `channelKind`,\n `clientProfileId`/`openedByProfileId` (crossPackageRef → Profile),\n `projectId` (app-defined string — deliberately not an FK), `bindingId`,\n `threadKey` (create-or-join dedup key), `planId` + `planSnapshot` (terms\n frozen at apply time), assignment fields, response stamps\n (`acknowledgedAt`, `firstRespondedAt`), `humanRequestedAt`, resolution\n fields, `reopenCount`/`lastReopenedAt`, `aiEnabled`.\n- **SupportInteraction** (`support_interactions`,\n `conflictColumns: ['source_key']`) — channel-neutral transport record:\n `direction` (`inbound`/`outbound`/`internal`), `channelKind`, `actorKind`\n (`client`/`specialist`/`agent`/`system`), denormalized `body`, and the\n qualified `sourceType`/`sourceId` + globally unique `sourceKey`\n (`chat:<messageId>`, `email:<emailId>`, `manual:<uuid>`) that makes\n re-ingestion idempotent.\n- **SupportCaseEvent** (`support_case_events`) — append-only audit trail\n (transitions, assignments, AI runs, handoffs, escalations, target state,\n work links, reopens). Together with interactions this is the complete\n context a Human Handoff transfers.\n- **SupportChannelBinding** (`support_channel_bindings`,\n `conflictColumns: ['target_type','target_id']`) — marks a container as a\n support intake channel: `bindingKind` (`chat_room`/`email_account`),\n qualified `targetType` + `targetId`, default client/project/plan,\n `selfAddresses` (email direction heuristic). Unbound containers are never\n touched.\n- **SupportWorkLink** (`support_work_links`) — Support/Development Work Item\n links with a read-only `status` echo.\n\n### AI workflow (#1928)\n\n- **SupportPolicy** (`support_policies`) — what the AI may do without a\n human: `autoAcknowledge`/`autoClassify`/`autoAnswer` (on by default),\n `autoTroubleshoot`/`autoResolve` (off by default),\n `autoResolveMaxSeverity`, `confidenceThreshold`, `maxAutoAttempts`,\n `sensitiveCategories`, `allowedTools`, `autoSendEmailReplies` (off —\n email replies are drafted, not sent). Resolution is most-specific-wins on\n `(planId, projectId)`; no row → `DEFAULT_SUPPORT_POLICY` (conservative).\n- **SupportAiRun** (`support_ai_runs`) — append-only audit of each phase\n (`acknowledge`/`classify`/`answer`/`troubleshoot`/`resolve`) with\n `confidence`, classification output, knowledge refs, tool calls, outcome\n (`completed`/`skipped`/`failed`/`handed_off`), and `correlationId`.\n\n### Routing, targets, escalation (#1929)\n\n- **SupportSpecialist** (`support_specialists`) — specialist role record on a\n Profile (the commerce `Customer` role-record idiom): `languages`,\n `timezone`, `maxConcurrentCases`, `onCallPriority`, status.\n- **SupportQualification** (`support_qualifications`) — effective-dated\n Project Support Qualification (`trainee`/`qualified`/`expert`).\n- **SupportAvailability** (`support_availability_windows`) — weekly windows\n plus `on_call`/`time_off` spans.\n- **SupportPlan** (`support_plans`, `conflictColumns:\n ['tenant_id','plan_key']`) — the Managed Support Plan: coverage calendar +\n holidays + timezone, channels, severity definitions, per-severity\n acknowledgement/response/update/resolution target minutes, `pauseStatuses`\n (clocks pause only when the plan says so), escalation policy steps,\n availability fee, `includedMinutes`, `overageHourlyRate`,\n `onCallHourlyRate`, time-approval policy, optional\n `subscriptionPlanKey` binding (string, not a dependency).\n `snapshotTerms()` feeds `SupportCase.planSnapshot`.\n- **SupportServiceTarget** (`support_service_targets`,\n `conflictColumns: ['case_id','target_type','cycle']`) — one clock per\n target type (update clocks recur via `cycle`), with pause accounting and\n `escalationJobId` (the one-shot `_smrt_jobs` row scheduled at `dueAt`,\n cancelled on satisfy).\n- **SupportEscalation** (`support_escalations`) — the audit record of one\n escalation firing.\n- **SupportCompensationPlan** (`support_compensation_plans`) —\n effective-dated Support Specialist earning terms; specialist-specific plan\n wins over the tenant default at the work instant. Deliberately separate\n from `SupportPlan` (client pricing) so margin stays measurable.\n\n### Service time (#1930)\n\n- **ServiceTimeEntry** (`service_time_entries`) — auditable Professional\n Service duration: work-context-generic (`caseId` and/or polymorphic\n `workRefType`/`workRefId`), delivering Participant (`participantKind`\n `human`/`agent` + `participantProfileId`/`agentRef`), `source`\n (`timer`/`manual`/`import`/`agent` — one shared validation/audit\n contract), evidence JSON, and lifecycle `draft → submitted →\n approved|rejected`, `approved → corrected` only. **Approved entries are\n immutable**: the work-defining fields are frozen at save time (the\n `LicenseSale` WeakMap-freeze idiom, backed by an authoritative DB-row\n comparison); disputes create explicit corrections via `correctionOfId`.\n- **SupportCharge** / **SupportCompensation** (`support_charges` /\n `support_compensations`, one per time entry) — derived commercial\n snapshots: client amount from the Managed Support Plan (included-time\n consumption then metered overage) vs provider amount from the Support\n Compensation Plan, each with a frozen `rateSnapshot`. Margin = charge −\n compensation, computed by readers; settlement/invoicing composes at the\n app/accounting boundary (#1925) and is out of scope here.\n\n## Services\n\n- **SupportCaseService** — the closed write facade: `openCase`,\n `recordInteraction` (idempotent on `sourceKey`; stamps\n `acknowledgedAt`/`firstRespondedAt`; inbound un-parks\n `waiting_on_client`), `transition`, `assign`, `resolve`, `close`,\n `reopen` (preserves prior resolution in the reopen event), `requestHuman`,\n `linkWork`/`recordWorkStatus` (Delivery Handoff), `recordEvent`,\n `getTimeline` (merged interactions + events).\n- **SupportIntakeService** — create-or-join intake for both channels:\n `ingestChatMessage` (bound `ChatRoom`; `chat:<roomId>[:<threadId>]` thread\n keys; only `role: 'user'` messages), `ingestEmail` (bound `EmailAccount`;\n RFC-thread joins via `inReplyTo`; `selfAddresses` skip; unresolved senders\n park the case with `metadata.unresolvedClient`), plus\n `registerSupportIntake()` — an opt-in `GlobalInterceptors.afterSave`\n observer keyed on the `ChatMessage`/`Email` class names that never throws\n into the source package's save path. Join semantics: open case → join;\n resolved → reopen; closed → new case.\n- **SupportAiWorkflow** — the Automated Support Response (FR-28a):\n `processIntake`/`processCase` run acknowledge → classify → answer →\n resolve under the resolved `SupportPolicy` (conservative defaults), each\n phase writing a `SupportAiRun` + `ai_run` case event. AI calls go through\n the injected `SupportAiBoundary` (default uses `supportCase.do()` with\n defensive JSON parsing that fails toward the human); knowledge comes from\n the pluggable `SupportKnowledgeProvider` (default no-op). Classification\n never overwrites human triage; email answers are drafted\n (`metadata.draft`) unless the policy allows sending. Handoff triggers —\n `client_request`, `low_confidence`, `high_severity`, `sensitive`,\n `failed_resolution`, `policy` (attempt budget) — are always active.\n- **HumanHandoffService** — the lossless Human Handoff (FR-28b):\n `handoff` assembles the full context package (case state + compact\n timeline + AI runs) into the `handoff` event, stamps\n `metadata.activeHandoff` for the no-repeat guarantee (repeat triggers are\n deduped events), routes through the injected `assignSpecialist` seam\n (#1929's routing service plugs in; default queues `new` cases to\n `triaged`), and `releaseHandoff` clears the flag.\n- **ServiceTargetEngine** — Service Target clocks (FR-30/31):\n `startTargetsForCase` derives per-severity clocks from the case's\n `planSnapshot` (live plan fallback) with due times computed in covered\n time (`coverage-calendar.ts`: timezone-aware weekly windows + holidays;\n empty coverage = 24×7) and schedules one-shot `_smrt_jobs` escalation jobs\n at `dueAt`; `onInteractionRecorded` satisfies acknowledgement/response and\n recurs `update` cycles; `onCaseTransition` pauses/resumes clocks only when\n the plan's `pauseStatuses` say so (recomputing remaining covered minutes)\n and settles targets on resolve. Breach → `SupportServiceTarget.\n checkAndEscalate` (background-eligible, at-least-once-safe) marks the\n breach and escalates through the plan's policy steps (notify/reassign,\n delayed follow-up levels), transitioning the case to `escalated`.\n- **SupportPlanAdminService** — the permission-gated write surface for\n commercial terms: create/update/archive for Managed Support Plans and\n Support Compensation Plans, every act behind `support.manage-plans` with\n cross-tenant writes refused (generated CRUD on both models is read-only).\n- **SupportRoutingService** — explainable ranked routing (FR-30):\n `rankSpecialists` hard-filters on active status, effective Project\n Support Qualification, workload cap, and availability windows (specialist\n timezone), then scores preferred-specialist, qualification level, on-call,\n workload headroom, and language (weights in `ROUTING_WEIGHTS`; every\n factor recorded so ineligible specialists show why); `autoAssign` writes\n the assignment with its rationale; `reassign` is gated by\n `support.reassign-case` and refuses cross-tenant principals.\n- **ServiceTimeEntryService** — the ONE recording contract for all four\n entry sources (FR-40): `record` validates duration (explicit or derived\n from the period; `timer` needs both bounds), participant coherence\n (`human` → `participantProfileId`, `agent` → `agentRef`), and the work\n context (case and/or work ref; case entries copy the tenant and append a\n `time_recorded` event); `submit` stamps the submitter.\n- **TimeEntryApprovalService** — the approval gate and only writer of the\n commercial snapshots (FR-36): `approve` resolves the governing terms (case\n `planSnapshot` first, live plan fallback, zero-rate default), gates by\n policy path (`automatic`/`threshold`/`operator`/`client`; operator paths\n behind `support.approve-time-entry`; cross-tenant principals refused), then\n derives the `SupportCharge` (included time first, then overage/on-call) and\n `SupportCompensation` (effective-dated plan) rows; `reject` and `correct`\n (supersede + linked fresh draft via `correctionOfId`) round out the\n lifecycle. Case events carry the charge amount only — compensation never\n leaks case-side.\n\n## Permissions\n\nContributed to the runtime catalog on import (the\n`personas.activate-directive` pattern): `support.reassign-case`,\n`support.approve-time-entry`, `support.manage-plans`. Privileged service\noperations take a `SupportPrincipal` (`can(slug)`), built from explicit slugs\nor a `PermissionResolver`.\n\n## Svelte UI\n\n`@happyvertical/smrt-support/svelte` ships presentational Svelte 5 surfaces:\n`CaseQueue` (priority/status/assignment/channel at a glance, `onselect`),\n`CaseDetail` (header, meta, linked work, merged timeline), `TargetList`\n(Service Target clocks with due/paused/satisfied/breached badges),\n`RoutingRationale` (ranked specialists with eligibility + factor chips and\nan optional reassign action), and `TimeEntryApprovalQueue`\n(date/hours/description/worker/status/amount with\napprove/reject-with-reason actions on submitted rows). Hosts adapt models\nwith `toSupportCaseView` / `toCaseTimelineItemView` / `toServiceTargetView`\n/ `toSupportTimeEntryView` — the time-entry view's first eight fields\ndeliberately match `smrt-projects`' presentation `TimeEntry` contract.\nComponents use `smrt-ui` primitives (`smrtRawPrimitives: \"strict\"`).\n\n## Dependencies\n\nPackage dependencies: `smrt-core`, `smrt-tenancy`, `smrt-projects`,\n`smrt-chat`, `smrt-messages`, `smrt-jobs`, `smrt-users`, `smrt-ui`,\n`@happyvertical/logger`, `@happyvertical/sql`. Profile and subscriptions\nreferences are `@crossPackageRef` string ids or plain string\nkeys. `smrt-projects` is the intentional shared delivery/evidence edge added\nby #1955. No inter-`smrt-*` `peerDependencies`.\n\n## Validation\n\n```sh\npnpm --filter @happyvertical/smrt-support test\npnpm --filter @happyvertical/smrt-support test:postgres\npnpm --filter @happyvertical/smrt-support typecheck\npnpm --filter @happyvertical/smrt-support build\n```\n\n`test:postgres` is the lane that holds the money/rate line — SQLite's type\naffinity stores a REAL in an INTEGER column without complaint, so a money field\nthat reverted to DECIMAL passes every SQLite suite.\n\n## Money and rates\n\n- **Money is integer minor units** (cents) — `$19.99` is `1999`.\n `SupportPlan.availabilityFeeAmount`, `SupportCharge.amount` and\n `SupportCompensation.amount` initialize `= 0`, never `= 0.0`: the integer\n literal is what maps them to INTEGER columns (BIGINT on fresh PostgreSQL/DuckDB databases; #2401, #2373).\n- **Rates stay DECIMAL but their unit changed.**\n `SupportPlan.overageHourlyRate` / `onCallHourlyRate` and\n `SupportCompensationPlan.hourlyRate` are **minor units per hour**, so\n `hours * rate` yields minor units. INTEGER would truncate a sub-unit rate to\n zero, which is why they keep a decimal initializer.\n- **`roundMoney()` is the single rate↔money boundary.** It rounds\n `(seconds / 3600) * hourlyRate` to a whole minor unit, which is what lets the\n `thresholdAmount` comparison in `determinePath()` be an exact `>` with no\n tolerance. `TimeApprovalPolicy.thresholdAmount` is in the same unit as\n `SupportCharge.amount`.\n- **Migrating an existing database**: `preflightSupportMoneyMinorUnits(db)`\n reports which columns still hold major units and which rows would be rounded\n or exceed JavaScript's safe-integer range; `migrateSupportMoneyToMinorUnits(db)` converts them\n (idempotent via `_smrt_backfills`). The **rate columns are not in that list**\n — their type does not change, but their stored values must still be\n multiplied by the same scale in the same deploy step. Frozen `rateSnapshot`\n JSON on settled charges is history and is left alone. On SQLite the values\n are rescaled but the declared type needs the table-rebuild path (#2370).\n Fresh PostgreSQL/DuckDB INTEGER columns are BIGINT and hydration rejects\n values outside JavaScript's safe-integer range; existing PostgreSQL `int4`\n columns require #2424.\n\n## Gotchas\n\n- **Writes go through the facades** — the case-side generated routes are\n read-only on purpose; `create`/`update` on them is not a bug to \"fix\".\n- **`projectId` is an app-defined string** — the consuming app owns the\n Project concept; don't turn it into an FK or a crossPackageRef to\n `smrt-projects:Project` (that class is a provider board, not a client\n initiative).\n- **`SupportCase.threadKey` + `SupportInteraction.sourceKey` carry intake\n correctness** — `sourceKey` is globally unique (`conflictColumns`), so\n replayed transport rows are no-ops; new manual interactions must use a\n fresh `manual:<uuid>` key.\n- **High-volume models avoid the inherited `name` field** (`subject`,\n `displayName`, …) so the default `(slug, context, _meta_type)` unique index\n falls back to id-derived slugs; named config models carry\n `conflictColumns` instead (which replaces that index).\n- **Approved time entries never change** — corrections are new rows linked\n by `correctionOfId`; the original flips to `corrected` with its snapshot\n intact.\n- **Plan edits never rewrite history** — cases keep `planSnapshot`, charges\n and compensation keep `rateSnapshot`.\n- **Create-or-join and included-time consumption serialize in-process** —\n `SupportIntakeService` (per conversation key) and\n `TimeEntryApprovalService` (per case) use a `KeyedMutex`, which covers the\n single-app-process deployment these paths run in. Multi-replica\n deployments must serialize at the app layer (route a conversation's\n intake / a case's approvals through one worker, or add an app-level\n claim) — the framework exposes no cross-adapter transaction primitive at\n this seam. Escalation is additionally idempotent per `(target, level)`,\n so at-least-once job redelivery never stacks duplicate escalations.\n"
|
|
5089
5089
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/smrt-support",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.42.1",
|
|
4
4
|
"description": "AI-first Support Cases: channel-neutral intake, lifecycle, routing, service targets, and service time for the SMRT framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -27,14 +27,14 @@
|
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@happyvertical/logger": "^0.88.0",
|
|
29
29
|
"@happyvertical/sql": "^0.88.0",
|
|
30
|
-
"@happyvertical/smrt-chat": "0.
|
|
31
|
-
"@happyvertical/smrt-core": "0.
|
|
32
|
-
"@happyvertical/smrt-jobs": "0.
|
|
33
|
-
"@happyvertical/smrt-messages": "0.
|
|
34
|
-
"@happyvertical/smrt-projects": "0.
|
|
35
|
-
"@happyvertical/smrt-tenancy": "0.
|
|
36
|
-
"@happyvertical/smrt-ui": "0.
|
|
37
|
-
"@happyvertical/smrt-users": "0.
|
|
30
|
+
"@happyvertical/smrt-chat": "0.42.1",
|
|
31
|
+
"@happyvertical/smrt-core": "0.42.1",
|
|
32
|
+
"@happyvertical/smrt-jobs": "0.42.1",
|
|
33
|
+
"@happyvertical/smrt-messages": "0.42.1",
|
|
34
|
+
"@happyvertical/smrt-projects": "0.42.1",
|
|
35
|
+
"@happyvertical/smrt-tenancy": "0.42.1",
|
|
36
|
+
"@happyvertical/smrt-ui": "0.42.1",
|
|
37
|
+
"@happyvertical/smrt-users": "0.42.1"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
40
|
"svelte": "^5.56.4"
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"typescript": "5.9.3",
|
|
54
54
|
"vite": "8.1.4",
|
|
55
55
|
"vitest": "4.1.10",
|
|
56
|
-
"@happyvertical/smrt-vitest": "0.
|
|
56
|
+
"@happyvertical/smrt-vitest": "0.42.1"
|
|
57
57
|
},
|
|
58
58
|
"keywords": [
|
|
59
59
|
"smrt",
|