@happyvertical/smrt-projects 0.39.3 → 0.39.6
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 +36 -1
- package/SERVICE_TIME_MIGRATION.md +23 -0
- package/dist/collections/DevelopmentRequestHistories.d.ts +7 -0
- package/dist/collections/DevelopmentRequestHistories.d.ts.map +1 -0
- package/dist/collections/DevelopmentRequests.d.ts +20 -0
- package/dist/collections/DevelopmentRequests.d.ts.map +1 -0
- package/dist/collections/ProjectIntegrationAudits.d.ts +7 -0
- package/dist/collections/ProjectIntegrationAudits.d.ts.map +1 -0
- package/dist/collections/ProjectIntegrations.d.ts +28 -0
- package/dist/collections/ProjectIntegrations.d.ts.map +1 -0
- package/dist/index.d.ts +13 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1673 -33
- package/dist/index.js.map +1 -1
- package/dist/managed-client.d.ts +13 -0
- package/dist/managed-client.d.ts.map +1 -0
- package/dist/manifest.json +4790 -1109
- package/dist/models/DevelopmentRequest.d.ts +35 -0
- package/dist/models/DevelopmentRequest.d.ts.map +1 -0
- package/dist/models/DevelopmentRequestHistory.d.ts +22 -0
- package/dist/models/DevelopmentRequestHistory.d.ts.map +1 -0
- package/dist/models/ProjectIntegration.d.ts +24 -0
- package/dist/models/ProjectIntegration.d.ts.map +1 -0
- package/dist/models/ProjectIntegrationAudit.d.ts +16 -0
- package/dist/models/ProjectIntegrationAudit.d.ts.map +1 -0
- package/dist/models/delivery-control-plane.d.ts +83 -0
- package/dist/models/delivery-control-plane.d.ts.map +1 -0
- package/dist/models/service-evidence.d.ts +79 -0
- package/dist/models/service-evidence.d.ts.map +1 -0
- package/dist/services/assistance-request-service.d.ts +45 -0
- package/dist/services/assistance-request-service.d.ts.map +1 -0
- package/dist/services/delivery-service.d.ts +55 -0
- package/dist/services/delivery-service.d.ts.map +1 -0
- package/dist/services/development-request-service.d.ts +61 -0
- package/dist/services/development-request-service.d.ts.map +1 -0
- package/dist/services/index.d.ts +6 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/service-evidence-service.d.ts +48 -0
- package/dist/services/service-evidence-service.d.ts.map +1 -0
- package/dist/services/subscription-commercial-resolver.d.ts +17 -0
- package/dist/services/subscription-commercial-resolver.d.ts.map +1 -0
- package/dist/smrt-knowledge.json +1823 -148
- package/dist/svelte/AssistanceLauncher.svelte +96 -0
- package/dist/svelte/AssistanceLauncher.svelte.d.ts +12 -0
- package/dist/svelte/AssistanceLauncher.svelte.d.ts.map +1 -0
- package/dist/svelte/DeliveryStatus.svelte +71 -0
- package/dist/svelte/DeliveryStatus.svelte.d.ts +8 -0
- package/dist/svelte/DeliveryStatus.svelte.d.ts.map +1 -0
- package/dist/svelte/DevelopmentBoard.svelte +103 -0
- package/dist/svelte/DevelopmentBoard.svelte.d.ts +10 -0
- package/dist/svelte/DevelopmentBoard.svelte.d.ts.map +1 -0
- package/dist/svelte/DevelopmentRequestDetail.svelte +92 -0
- package/dist/svelte/DevelopmentRequestDetail.svelte.d.ts +9 -0
- package/dist/svelte/DevelopmentRequestDetail.svelte.d.ts.map +1 -0
- package/dist/svelte/PreviewApprovalPanel.svelte +63 -0
- package/dist/svelte/PreviewApprovalPanel.svelte.d.ts +10 -0
- package/dist/svelte/PreviewApprovalPanel.svelte.d.ts.map +1 -0
- package/dist/svelte/ServiceEvidenceList.svelte +103 -0
- package/dist/svelte/ServiceEvidenceList.svelte.d.ts +8 -0
- package/dist/svelte/ServiceEvidenceList.svelte.d.ts.map +1 -0
- package/dist/svelte/components/DevelopmentRequestForm.svelte +70 -0
- package/dist/svelte/components/DevelopmentRequestForm.svelte.d.ts +19 -0
- package/dist/svelte/components/DevelopmentRequestForm.svelte.d.ts.map +1 -0
- package/dist/svelte/components/DevelopmentRequestList.svelte +218 -0
- package/dist/svelte/components/DevelopmentRequestList.svelte.d.ts +22 -0
- package/dist/svelte/components/DevelopmentRequestList.svelte.d.ts.map +1 -0
- package/dist/svelte/components/__tests__/DeliverySurfaces.test.js +98 -0
- package/dist/svelte/components/__tests__/DevelopmentRequest.test.js +52 -0
- package/dist/svelte/delivery-types.d.ts +36 -0
- package/dist/svelte/delivery-types.d.ts.map +1 -0
- package/dist/svelte/delivery-types.js +1 -0
- package/dist/svelte/i18n.d.ts +30 -0
- package/dist/svelte/i18n.d.ts.map +1 -1
- package/dist/svelte/i18n.js +30 -0
- package/dist/svelte/index.d.ts +18 -1
- package/dist/svelte/index.d.ts.map +1 -1
- package/dist/svelte/index.js +18 -1
- package/dist/types.d.ts +79 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +106 -10
- package/dist/ui.js.map +1 -1
- package/package.json +11 -9
package/dist/index.js
CHANGED
|
@@ -2,14 +2,226 @@ import { i as __exportAll, r as issueIncorporateFeedbackPrompt, t as Issue } fro
|
|
|
2
2
|
import "./chunks/constants-BhVfX4Jn.js";
|
|
3
3
|
import { t as PullRequest } from "./chunks/PullRequest-C6mck19s.js";
|
|
4
4
|
import { PROJECTS_MODULE_META, PROJECTS_UI_SLOTS } from "./ui.js";
|
|
5
|
-
import { ObjectRegistry, SmrtCollection, SmrtObject, foreignKey, smrt } from "@happyvertical/smrt-core";
|
|
6
|
-
import { TenantScoped, queryGlobal, queryWithGlobals, tenantId } from "@happyvertical/smrt-tenancy";
|
|
5
|
+
import { ObjectRegistry, SmrtCollection, SmrtObject, crossPackageRef, field, foreignKey, smrt } from "@happyvertical/smrt-core";
|
|
6
|
+
import { TenantScoped, queryGlobal, queryWithGlobals, tenantId, withTenant } from "@happyvertical/smrt-tenancy";
|
|
7
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
7
8
|
import { createLogger } from "@happyvertical/logger";
|
|
8
9
|
import { getProject } from "@happyvertical/projects";
|
|
9
10
|
import { getModuleConfig } from "@happyvertical/smrt-config";
|
|
10
11
|
import { getRepository } from "@happyvertical/repos";
|
|
12
|
+
import { CommercialUsageService } from "@happyvertical/smrt-subscriptions";
|
|
11
13
|
//#region src/__smrt-register__.ts
|
|
12
|
-
ObjectRegistry.registerPackageManifest(JSON.parse("{\"version\":\"1.0.0\",\"timestamp\":1783786966715,\"packageName\":\"@happyvertical/smrt-projects\",\"packageVersion\":\"0.39.3\",\"objects\":{\"@happyvertical/smrt-projects:IssueCollection\":{\"name\":\"issuecollection\",\"className\":\"IssueCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:IssueCollection\",\"collection\":\"issues\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-km4s2/smrt/smrt/packages/projects/src/collections/Issues.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{\"discover\":{\"name\":\"discover\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"findByRepository\":{\"name\":\"findByRepository\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"findOpen\":{\"name\":\"findOpen\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"findByLabel\":{\"name\":\"findByLabel\",\"async\":true,\"parameters\":[{\"name\":\"label\",\"type\":\"string\",\"optional\":false},{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"findByAssignee\":{\"name\":\"findByAssignee\",\"async\":true,\"parameters\":[{\"name\":\"assignee\",\"type\":\"string\",\"optional\":false},{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"findNeedingReview\":{\"name\":\"findNeedingReview\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"findByNumber\":{\"name\":\"findByNumber\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":false},{\"name\":\"number\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"Promise<Issue | null>\",\"isStatic\":false,\"isPublic\":true},\"findWithUnincorporatedFeedback\":{\"name\":\"findWithUnincorporatedFeedback\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"batchSync\":{\"name\":\"batchSync\",\"async\":true,\"parameters\":[{\"name\":\"repository\",\"type\":\"Repository\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"findByTenant\":{\"name\":\"findByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"findGlobal\":{\"name\":\"findGlobal\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"findWithGlobals\":{\"name\":\"findWithGlobals\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Issue\",\"exportName\":\"IssueCollection\",\"collectionExportName\":\"IssueCollectionCollection\",\"schema\":{\"tableName\":\"issue_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"issue_collections\\\" (\\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\":\"issue_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"issue_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"93b3c6f0\"}},\"@happyvertical/smrt-projects:ProjectCollection\":{\"name\":\"projectcollection\",\"className\":\"ProjectCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:ProjectCollection\",\"collection\":\"projects\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-km4s2/smrt/smrt/packages/projects/src/collections/Projects.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{\"findByTitle\":{\"name\":\"findByTitle\",\"async\":true,\"parameters\":[{\"name\":\"title\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Project | null>\",\"isStatic\":false,\"isPublic\":true},\"findByOwner\":{\"name\":\"findByOwner\",\"async\":true,\"parameters\":[{\"name\":\"owner\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Project[]>\",\"isStatic\":false,\"isPublic\":true},\"findByProvider\":{\"name\":\"findByProvider\",\"async\":true,\"parameters\":[{\"name\":\"providerType\",\"type\":\"ProjectProviderType\",\"optional\":false}],\"returnType\":\"Promise<Project[]>\",\"isStatic\":false,\"isPublic\":true},\"getOrCreate\":{\"name\":\"getOrCreate\",\"async\":true,\"parameters\":[{\"name\":\"projectId\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<Project>\",\"isStatic\":false,\"isPublic\":true},\"syncAll\":{\"name\":\"syncAll\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<Project[]>\",\"isStatic\":false,\"isPublic\":true},\"findWithItemsInStatus\":{\"name\":\"findWithItemsInStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Project[]>\",\"isStatic\":false,\"isPublic\":true},\"getStatistics\":{\"name\":\"getStatistics\",\"async\":true,\"parameters\":[{\"name\":\"projectId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true},\"findByTenant\":{\"name\":\"findByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Project[]>\",\"isStatic\":false,\"isPublic\":true},\"findGlobal\":{\"name\":\"findGlobal\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Project[]>\",\"isStatic\":false,\"isPublic\":true},\"findWithGlobals\":{\"name\":\"findWithGlobals\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Project[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Project\",\"exportName\":\"ProjectCollection\",\"collectionExportName\":\"ProjectCollectionCollection\",\"schema\":{\"tableName\":\"project_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"project_collections\\\" (\\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\":\"project_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"project_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"f713c200\"}},\"@happyvertical/smrt-projects:PullRequestCollection\":{\"name\":\"pullrequestcollection\",\"className\":\"PullRequestCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:PullRequestCollection\",\"collection\":\"issues\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-km4s2/smrt/smrt/packages/projects/src/collections/PullRequests.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{\"discover\":{\"name\":\"discover\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findByRepository\":{\"name\":\"findByRepository\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findOpen\":{\"name\":\"findOpen\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findDrafts\":{\"name\":\"findDrafts\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findReadyToMerge\":{\"name\":\"findReadyToMerge\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findByBranch\":{\"name\":\"findByBranch\",\"async\":true,\"parameters\":[{\"name\":\"branch\",\"type\":\"string\",\"optional\":false},{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findByNumber\":{\"name\":\"findByNumber\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":false},{\"name\":\"number\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"Promise<PullRequest | null>\",\"isStatic\":false,\"isPublic\":true},\"findAIReadyToMerge\":{\"name\":\"findAIReadyToMerge\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findBySize\":{\"name\":\"findBySize\",\"async\":true,\"parameters\":[{\"name\":\"size\",\"type\":\"'xs' | 's' | 'm' | 'l' | 'xl'\",\"optional\":false},{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"batchSync\":{\"name\":\"batchSync\",\"async\":true,\"parameters\":[{\"name\":\"repository\",\"type\":\"Repository\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findByTenant\":{\"name\":\"findByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findGlobal\":{\"name\":\"findGlobal\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findWithGlobals\":{\"name\":\"findWithGlobals\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"issues\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"PullRequest\",\"exportName\":\"PullRequestCollection\",\"collectionExportName\":\"PullRequestCollectionCollection\",\"schema\":{\"tableName\":\"issues\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"issues\\\" (\\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\":\"issues_id_idx\",\"columns\":[\"id\"]},{\"name\":\"issues_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"798511d0\"}},\"@happyvertical/smrt-projects:RepositoryCollection\":{\"name\":\"repositorycollection\",\"className\":\"RepositoryCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:RepositoryCollection\",\"collection\":\"repositories\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-km4s2/smrt/smrt/packages/projects/src/collections/Repositories.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{\"findByFullName\":{\"name\":\"findByFullName\",\"async\":true,\"parameters\":[{\"name\":\"owner\",\"type\":\"string\",\"optional\":false},{\"name\":\"name\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Repository | null>\",\"isStatic\":false,\"isPublic\":true},\"findByOwner\":{\"name\":\"findByOwner\",\"async\":true,\"parameters\":[{\"name\":\"owner\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Repository[]>\",\"isStatic\":false,\"isPublic\":true},\"findByProvider\":{\"name\":\"findByProvider\",\"async\":true,\"parameters\":[{\"name\":\"providerType\",\"type\":\"RepositoryProviderType\",\"optional\":false}],\"returnType\":\"Promise<Repository[]>\",\"isStatic\":false,\"isPublic\":true},\"getOrCreate\":{\"name\":\"getOrCreate\",\"async\":true,\"parameters\":[{\"name\":\"owner\",\"type\":\"string\",\"optional\":false},{\"name\":\"name\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<Repository>\",\"isStatic\":false,\"isPublic\":true},\"syncAll\":{\"name\":\"syncAll\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<Repository[]>\",\"isStatic\":false,\"isPublic\":true},\"findWithOpenIssues\":{\"name\":\"findWithOpenIssues\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Repository[]>\",\"isStatic\":false,\"isPublic\":true},\"findByTenant\":{\"name\":\"findByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Repository[]>\",\"isStatic\":false,\"isPublic\":true},\"findGlobal\":{\"name\":\"findGlobal\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Repository[]>\",\"isStatic\":false,\"isPublic\":true},\"findWithGlobals\":{\"name\":\"findWithGlobals\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Repository[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Repository\",\"exportName\":\"RepositoryCollection\",\"collectionExportName\":\"RepositoryCollectionCollection\",\"schema\":{\"tableName\":\"repository_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"repository_collections\\\" (\\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\":\"repository_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"repository_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"a9b3565e\"}},\"@happyvertical/smrt-projects:Comment\":{\"name\":\"comment\",\"className\":\"Comment\",\"qualifiedName\":\"@happyvertical/smrt-projects:Comment\",\"collection\":\"comments\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-km4s2/smrt/smrt/packages/projects/src/models/Comment.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"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}}},\"issueId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Issue\"},\"commentId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"body\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"author\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"createdAt\":{\"type\":\"datetime\",\"required\":false},\"updatedAt\":{\"type\":\"datetime\",\"required\":false},\"url\":{\"type\":\"text\",\"required\":false,\"default\":\"\"}},\"methods\":{\"isQuestion\":{\"name\":\"isQuestion\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"isApproval\":{\"name\":\"isApproval\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"requestsChanges\":{\"name\":\"requestsChanges\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"extractActionItems\":{\"name\":\"extractActionItems\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"summarize\":{\"name\":\"summarize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string>\",\"isStatic\":false,\"isPublic\":true},\"getSentiment\":{\"name\":\"getSentiment\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<'positive' | 'negative' | 'neutral'>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"Comment\",\"collectionExportName\":\"CommentCollection\",\"schema\":{\"tableName\":\"comments\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"comments\\\" (\\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 \\\"issue_id\\\" UUID,\\n \\\"comment_id\\\" TEXT DEFAULT '',\\n \\\"body\\\" TEXT DEFAULT '',\\n \\\"author\\\" TEXT DEFAULT '',\\n \\\"url\\\" TEXT DEFAULT ''\\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},\"issue_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"comment_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"body\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"author\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"url\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"}},\"indexes\":[{\"name\":\"comments_id_idx\",\"columns\":[\"id\"]},{\"name\":\"comments_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"ed899e3f\"}},\"@happyvertical/smrt-projects:Issue\":{\"name\":\"issue\",\"className\":\"Issue\",\"qualifiedName\":\"@happyvertical/smrt-projects:Issue\",\"collection\":\"issues\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-km4s2/smrt/smrt/packages/projects/src/models/Issue.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{\"created_at\":{\"type\":\"datetime\",\"required\":false},\"updated_at\":{\"type\":\"datetime\",\"required\":false},\"tenantId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"sqlType\":\"UUID\",\"nullable\":true,\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":false,\"autoPopulate\":true,\"nullable\":true,\"mode\":\"optional\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"repositoryId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Repository\",\"_meta\":{\"required\":true}},\"number\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"nodeId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"title\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"body\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"state\":{\"type\":\"text\",\"required\":false,\"default\":\"open\"},\"author\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"labels\":{\"type\":\"json\",\"required\":false,\"default\":[]},\"assignees\":{\"type\":\"json\",\"required\":false,\"default\":[]},\"commentsCount\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"lastSyncedAt\":{\"type\":\"datetime\",\"required\":false},\"originalBody\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"synthesisCount\":{\"type\":\"integer\",\"required\":false,\"default\":0}},\"methods\":{\"getAiUsageSnapshot\":{\"name\":\"getAiUsageSnapshot\",\"async\":false,\"parameters\":[],\"returnType\":\"AiUsageSnapshot | undefined\",\"isStatic\":false,\"isPublic\":true},\"resetAiUsage\":{\"name\":\"resetAiUsage\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"listAiUsage\":{\"name\":\"listAiUsage\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"AiUsageListOptions\",\"optional\":true}],\"returnType\":\"Promise<SmrtAiUsageRecord[]>\",\"isStatic\":false,\"isPublic\":true},\"summarizeAiUsage\":{\"name\":\"summarizeAiUsage\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"AiUsageSummaryOptions\",\"optional\":true}],\"returnType\":\"Promise<Record<string, AiUsageStats>>\",\"isStatic\":false,\"isPublic\":true},\"destroy\":{\"name\":\"destroy\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"markAsPersisted\":{\"name\":\"markAsPersisted\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"requireInsertOnSave\":{\"name\":\"requireInsertOnSave\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"loadDataFromDb\":{\"name\":\"loadDataFromDb\",\"async\":true,\"parameters\":[{\"name\":\"data\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"getFields\":{\"name\":\"getFields\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<any>\",\"isStatic\":false,\"isPublic\":true},\"toJSON\":{\"name\":\"toJSON\",\"async\":false,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"toPlainObject\":{\"name\":\"toPlainObject\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"toPublicJSON\":{\"name\":\"toPublicJSON\",\"async\":false,\"parameters\":[{\"name\":\"options\",\"type\":\"PublicJsonOptions\",\"optional\":true}],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"getId\":{\"name\":\"getId\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"getSlug\":{\"name\":\"getSlug\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"getSavedId\":{\"name\":\"getSavedId\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"isSaved\":{\"name\":\"isSaved\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"save\":{\"name\":\"save\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"classifyConstraintError\":{\"name\":\"classifyConstraintError\",\"async\":false,\"parameters\":[{\"name\":\"message\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"'unique' | 'not_null' | null\",\"isStatic\":true,\"isPublic\":true},\"loadFromId\":{\"name\":\"loadFromId\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"loadFromSlug\":{\"name\":\"loadFromSlug\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"is\":{\"name\":\"is\",\"async\":true,\"parameters\":[{\"name\":\"criteria\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"AiOperationOptions\",\"optional\":true}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"do\":{\"name\":\"do\",\"async\":true,\"parameters\":[{\"name\":\"instructions\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"AiOperationOptions\",\"optional\":true}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"describe\":{\"name\":\"describe\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"AiOperationOptions\",\"optional\":true}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"delete\":{\"name\":\"delete\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"isRelatedLoaded\":{\"name\":\"isRelatedLoaded\",\"async\":false,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"_setLoadedRelationship\":{\"name\":\"_setLoadedRelationship\",\"async\":false,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"value\",\"type\":\"any\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"loadRelated\":{\"name\":\"loadRelated\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"opts\",\"type\":\"LoadRelatedOptions\",\"optional\":true}],\"returnType\":\"Promise<any>\",\"isStatic\":false,\"isPublic\":true},\"loadRelatedMany\":{\"name\":\"loadRelatedMany\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"opts\",\"type\":\"LoadRelatedOptions\",\"optional\":true}],\"returnType\":\"Promise<any[]>\",\"isStatic\":false,\"isPublic\":true},\"getRelated\":{\"name\":\"getRelated\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"opts\",\"type\":\"LoadRelatedOptions\",\"optional\":true}],\"returnType\":\"Promise<any>\",\"isStatic\":false,\"isPublic\":true},\"getAvailableTools\":{\"name\":\"getAvailableTools\",\"async\":false,\"parameters\":[],\"returnType\":\"AITool[]\",\"isStatic\":false,\"isPublic\":true},\"executeToolCall\":{\"name\":\"executeToolCall\",\"async\":true,\"parameters\":[{\"name\":\"toolCall\",\"type\":\"ToolCall\",\"optional\":false}],\"returnType\":\"Promise<ToolCallResult>\",\"isStatic\":false,\"isPublic\":true},\"remember\":{\"name\":\"remember\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"recall\":{\"name\":\"recall\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"recallAll\":{\"name\":\"recallAll\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<Map<string>>\",\"isStatic\":false,\"isPublic\":true},\"forget\":{\"name\":\"forget\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"forgetScope\":{\"name\":\"forgetScope\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"generateEmbeddings\":{\"name\":\"generateEmbeddings\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"GenerateEmbeddingsOptions\",\"optional\":true}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getEmbedding\":{\"name\":\"getEmbedding\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"model\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<number[] | null>\",\"isStatic\":false,\"isPublic\":true},\"hasStaleEmbeddings\":{\"name\":\"hasStaleEmbeddings\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"clearEmbeddings\":{\"name\":\"clearEmbeddings\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getRepository\":{\"name\":\"getRepository\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Repository>\",\"isStatic\":false,\"isPublic\":true},\"getClient\":{\"name\":\"getClient\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<IRepository>\",\"isStatic\":false,\"isPublic\":true},\"clearCache\":{\"name\":\"clearCache\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"sync\":{\"name\":\"sync\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"SyncOptions\",\"optional\":true}],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"getComments\":{\"name\":\"getComments\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Comment[]>\",\"isStatic\":false,\"isPublic\":true},\"addComment\":{\"name\":\"addComment\",\"async\":true,\"parameters\":[{\"name\":\"body\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Comment>\",\"isStatic\":false,\"isPublic\":true},\"incorporateFeedback\":{\"name\":\"incorporateFeedback\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"IncorporateFeedbackOptions\",\"optional\":true}],\"returnType\":\"Promise<IncorporateFeedbackResult>\",\"isStatic\":false,\"isPublic\":true},\"rollback\":{\"name\":\"rollback\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true},\"needsReview\":{\"name\":\"needsReview\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"isBugReport\":{\"name\":\"isBugReport\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"isFeatureRequest\":{\"name\":\"isFeatureRequest\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"suggestLabels\":{\"name\":\"suggestLabels\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"close\":{\"name\":\"close\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"addLabels\":{\"name\":\"addLabels\",\"async\":true,\"parameters\":[{\"name\":\"labels\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"removeLabel\":{\"name\":\"removeLabel\",\"async\":true,\"parameters\":[{\"name\":\"label\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"assign\":{\"name\":\"assign\",\"async\":true,\"parameters\":[{\"name\":\"assignees\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getUrl\":{\"name\":\"getUrl\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableStrategy\":\"sti\",\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\"]},\"mcp\":{\"include\":[\"list\",\"get\",\"sync\",\"incorporateFeedback\"]},\"cli\":{\"include\":[\"list\",\"get\",\"sync\",\"incorporateFeedback\",\"rollback\"],\"skipApiCheck\":true},\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"Issue\",\"collectionExportName\":\"IssueCollection\",\"validationRules\":[{\"field\":\"repositoryId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"issues\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"issues\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"_meta_type\\\" TEXT NOT NULL,\\n \\\"_meta_data\\\" JSON,\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID,\\n \\\"repository_id\\\" UUID,\\n \\\"number\\\" INTEGER DEFAULT 0,\\n \\\"node_id\\\" TEXT DEFAULT '',\\n \\\"title\\\" TEXT DEFAULT '',\\n \\\"body\\\" TEXT DEFAULT '',\\n \\\"state\\\" TEXT DEFAULT 'open',\\n \\\"author\\\" TEXT DEFAULT '',\\n \\\"labels\\\" JSON DEFAULT '[]',\\n \\\"assignees\\\" JSON DEFAULT '[]',\\n \\\"comments_count\\\" INTEGER DEFAULT 0,\\n \\\"last_synced_at\\\" TIMESTAMP,\\n \\\"original_body\\\" TEXT DEFAULT '',\\n \\\"synthesis_count\\\" INTEGER DEFAULT 0,\\n \\\"head_ref\\\" TEXT DEFAULT '',\\n \\\"base_ref\\\" TEXT DEFAULT '',\\n \\\"merged\\\" BOOLEAN DEFAULT FALSE,\\n \\\"merged_at\\\" TIMESTAMP,\\n \\\"mergeable\\\" BOOLEAN DEFAULT TRUE,\\n \\\"draft\\\" BOOLEAN DEFAULT FALSE,\\n \\\"additions\\\" INTEGER DEFAULT 0,\\n \\\"deletions\\\" INTEGER DEFAULT 0,\\n \\\"changed_files\\\" INTEGER DEFAULT 0\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"_meta_type\":{\"type\":\"TEXT\",\"notNull\":true},\"_meta_data\":{\"type\":\"JSON\",\"notNull\":false},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false},\"repository_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false},\"number\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"node_id\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"title\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"body\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"state\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"open\"},\"author\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"labels\":{\"type\":\"JSON\",\"notNull\":false,\"default\":[]},\"assignees\":{\"type\":\"JSON\",\"notNull\":false,\"default\":[]},\"comments_count\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"last_synced_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false},\"original_body\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"synthesis_count\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"head_ref\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"base_ref\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"merged\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"default\":false},\"merged_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false},\"mergeable\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"default\":true},\"draft\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"default\":false},\"additions\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"deletions\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"changed_files\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0}},\"indexes\":[{\"name\":\"issues_id_idx\",\"columns\":[\"id\"]},{\"name\":\"issues_slug_context_meta_type_idx\",\"columns\":[\"slug\",\"context\",\"_meta_type\"],\"unique\":true},{\"name\":\"issues_meta_type_idx\",\"columns\":[\"_meta_type\"]}],\"version\":\"e187bb4a\"}},\"@happyvertical/smrt-projects:Label\":{\"name\":\"label\",\"className\":\"Label\",\"qualifiedName\":\"@happyvertical/smrt-projects:Label\",\"collection\":\"labels\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-km4s2/smrt/smrt/packages/projects/src/models/Label.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{\"repositoryId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Repository\"},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"color\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"description\":{\"type\":\"text\",\"required\":false,\"default\":\"\"}},\"methods\":{\"isTypeLabel\":{\"name\":\"isTypeLabel\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isPriorityLabel\":{\"name\":\"isPriorityLabel\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isStatusLabel\":{\"name\":\"isStatusLabel\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"getCategory\":{\"name\":\"getCategory\",\"async\":false,\"parameters\":[],\"returnType\":\"'type' | 'priority' | 'status' | 'area' | 'other'\",\"isStatic\":false,\"isPublic\":true},\"getPriorityLevel\":{\"name\":\"getPriorityLevel\",\"async\":false,\"parameters\":[],\"returnType\":\"number | null\",\"isStatic\":false,\"isPublic\":true},\"getHexColor\":{\"name\":\"getHexColor\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true},\"createInRepository\":{\"name\":\"createInRepository\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"updateInRepository\":{\"name\":\"updateInRepository\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]},\"mcp\":{\"include\":[\"list\",\"get\",\"create\"]},\"cli\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]}},\"extends\":\"SmrtObject\",\"exportName\":\"Label\",\"collectionExportName\":\"LabelCollection\",\"schema\":{\"tableName\":\"labels\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"labels\\\" (\\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 \\\"repository_id\\\" UUID,\\n \\\"name\\\" TEXT DEFAULT '',\\n \\\"color\\\" TEXT DEFAULT '',\\n \\\"description\\\" TEXT DEFAULT ''\\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\"},\"repository_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"color\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"}},\"indexes\":[{\"name\":\"labels_id_idx\",\"columns\":[\"id\"]},{\"name\":\"labels_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"698e39f8\"}},\"@happyvertical/smrt-projects:Project\":{\"name\":\"project\",\"className\":\"Project\",\"qualifiedName\":\"@happyvertical/smrt-projects:Project\",\"collection\":\"projects\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-km4s2/smrt/smrt/packages/projects/src/models/Project.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"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}}},\"projectId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"projectNumber\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"title\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"description\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"owner\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"url\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"providerType\":{\"type\":\"text\",\"required\":false,\"default\":\"github\"},\"tokenConfigKey\":{\"type\":\"text\",\"required\":false,\"default\":\"GITHUB_TOKEN\"},\"statuses\":{\"type\":\"json\",\"required\":false,\"default\":[]},\"fields\":{\"type\":\"json\",\"required\":false,\"default\":[]},\"statusFieldId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"statusOptions\":{\"type\":\"json\",\"required\":false,\"default\":{}},\"lastSyncedAt\":{\"type\":\"datetime\",\"required\":false}},\"methods\":{\"getClient\":{\"name\":\"getClient\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<IProject>\",\"isStatic\":false,\"isPublic\":true},\"clearClient\":{\"name\":\"clearClient\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"sync\":{\"name\":\"sync\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"SyncOptions\",\"optional\":true}],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"addItem\":{\"name\":\"addItem\",\"async\":true,\"parameters\":[{\"name\":\"item\",\"type\":\"Issue | PullRequest\",\"optional\":false}],\"returnType\":\"Promise<ProjectItem>\",\"isStatic\":false,\"isPublic\":true},\"removeItem\":{\"name\":\"removeItem\",\"async\":true,\"parameters\":[{\"name\":\"itemId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getItem\":{\"name\":\"getItem\",\"async\":true,\"parameters\":[{\"name\":\"itemId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<ProjectItem | null>\",\"isStatic\":false,\"isPublic\":true},\"listItems\":{\"name\":\"listItems\",\"async\":true,\"parameters\":[{\"name\":\"filters\",\"type\":\"ItemFilters\",\"optional\":true}],\"returnType\":\"Promise<ProjectItem[]>\",\"isStatic\":false,\"isPublic\":true},\"updateItemStatus\":{\"name\":\"updateItemStatus\",\"async\":true,\"parameters\":[{\"name\":\"itemId\",\"type\":\"string\",\"optional\":false},{\"name\":\"status\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"updateItemField\":{\"name\":\"updateItemField\",\"async\":true,\"parameters\":[{\"name\":\"itemId\",\"type\":\"string\",\"optional\":false},{\"name\":\"fieldId\",\"type\":\"string\",\"optional\":false},{\"name\":\"value\",\"type\":\"any\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getStatuses\":{\"name\":\"getStatuses\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<ProjectStatus[]>\",\"isStatic\":false,\"isPublic\":true},\"getFields\":{\"name\":\"getFields\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<ProjectField[]>\",\"isStatic\":false,\"isPublic\":true},\"getItemsByStatus\":{\"name\":\"getItemsByStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<ProjectItem[]>\",\"isStatic\":false,\"isPublic\":true},\"moveItem\":{\"name\":\"moveItem\",\"async\":true,\"parameters\":[{\"name\":\"item\",\"type\":\"Issue | PullRequest\",\"optional\":false},{\"name\":\"status\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"analyzeHealth\":{\"name\":\"analyzeHealth\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string>\",\"isStatic\":false,\"isPublic\":true},\"getByTitle\":{\"name\":\"getByTitle\",\"async\":true,\"parameters\":[{\"name\":\"title\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"SmrtObjectOptions\",\"optional\":true}],\"returnType\":\"Promise<Project | null>\",\"isStatic\":true,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\"]},\"mcp\":{\"include\":[\"list\",\"get\",\"sync\",\"addItem\",\"updateItemStatus\"]},\"cli\":{\"include\":[\"list\",\"get\",\"sync\",\"addItem\",\"updateItemStatus\",\"listItems\"],\"skipApiCheck\":true},\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"Project\",\"collectionExportName\":\"ProjectCollection\",\"schema\":{\"tableName\":\"projects\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"projects\\\" (\\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 \\\"project_id\\\" TEXT DEFAULT '',\\n \\\"project_number\\\" INTEGER DEFAULT 0,\\n \\\"title\\\" TEXT DEFAULT '',\\n \\\"description\\\" TEXT DEFAULT '',\\n \\\"owner\\\" TEXT DEFAULT '',\\n \\\"url\\\" TEXT DEFAULT '',\\n \\\"provider_type\\\" TEXT DEFAULT 'github',\\n \\\"token_config_key\\\" TEXT DEFAULT 'GITHUB_TOKEN',\\n \\\"statuses\\\" JSON DEFAULT '[]',\\n \\\"fields\\\" JSON DEFAULT '[]',\\n \\\"status_field_id\\\" TEXT DEFAULT '',\\n \\\"status_options\\\" JSON DEFAULT '{}',\\n \\\"last_synced_at\\\" TIMESTAMP\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"project_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"project_number\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"title\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"owner\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"url\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"provider_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"github\"},\"token_config_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"GITHUB_TOKEN\"},\"statuses\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false,\"default\":[]},\"fields\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false,\"default\":[]},\"status_field_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"status_options\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false,\"default\":{}},\"last_synced_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"projects_id_idx\",\"columns\":[\"id\"]},{\"name\":\"projects_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"2e8c344a\"}},\"@happyvertical/smrt-projects:PullRequest\":{\"name\":\"pullrequest\",\"className\":\"PullRequest\",\"qualifiedName\":\"@happyvertical/smrt-projects:PullRequest\",\"collection\":\"issues\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-km4s2/smrt/smrt/packages/projects/src/models/PullRequest.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{\"created_at\":{\"type\":\"datetime\",\"required\":false},\"updated_at\":{\"type\":\"datetime\",\"required\":false},\"tenantId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"sqlType\":\"UUID\",\"nullable\":true,\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":false,\"autoPopulate\":true,\"nullable\":true,\"mode\":\"optional\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"repositoryId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Repository\",\"_meta\":{\"required\":true}},\"number\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"nodeId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"title\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"body\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"state\":{\"type\":\"text\",\"required\":false,\"default\":\"open\"},\"author\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"labels\":{\"type\":\"json\",\"required\":false,\"default\":[]},\"assignees\":{\"type\":\"json\",\"required\":false,\"default\":[]},\"commentsCount\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"lastSyncedAt\":{\"type\":\"datetime\",\"required\":false},\"originalBody\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"synthesisCount\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"headRef\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"baseRef\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"merged\":{\"type\":\"boolean\",\"required\":false,\"default\":false},\"mergedAt\":{\"type\":\"datetime\",\"required\":false},\"mergeable\":{\"type\":\"boolean\",\"required\":false,\"default\":true},\"draft\":{\"type\":\"boolean\",\"required\":false,\"default\":false},\"additions\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"deletions\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"changedFiles\":{\"type\":\"integer\",\"required\":false,\"default\":0}},\"methods\":{\"getAiUsageSnapshot\":{\"name\":\"getAiUsageSnapshot\",\"async\":false,\"parameters\":[],\"returnType\":\"AiUsageSnapshot | undefined\",\"isStatic\":false,\"isPublic\":true},\"resetAiUsage\":{\"name\":\"resetAiUsage\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"listAiUsage\":{\"name\":\"listAiUsage\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"AiUsageListOptions\",\"optional\":true}],\"returnType\":\"Promise<SmrtAiUsageRecord[]>\",\"isStatic\":false,\"isPublic\":true},\"summarizeAiUsage\":{\"name\":\"summarizeAiUsage\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"AiUsageSummaryOptions\",\"optional\":true}],\"returnType\":\"Promise<Record<string, AiUsageStats>>\",\"isStatic\":false,\"isPublic\":true},\"destroy\":{\"name\":\"destroy\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"markAsPersisted\":{\"name\":\"markAsPersisted\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"requireInsertOnSave\":{\"name\":\"requireInsertOnSave\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"loadDataFromDb\":{\"name\":\"loadDataFromDb\",\"async\":true,\"parameters\":[{\"name\":\"data\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"getFields\":{\"name\":\"getFields\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<any>\",\"isStatic\":false,\"isPublic\":true},\"toJSON\":{\"name\":\"toJSON\",\"async\":false,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"toPlainObject\":{\"name\":\"toPlainObject\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"toPublicJSON\":{\"name\":\"toPublicJSON\",\"async\":false,\"parameters\":[{\"name\":\"options\",\"type\":\"PublicJsonOptions\",\"optional\":true}],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"getId\":{\"name\":\"getId\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"getSlug\":{\"name\":\"getSlug\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"getSavedId\":{\"name\":\"getSavedId\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"isSaved\":{\"name\":\"isSaved\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"save\":{\"name\":\"save\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"classifyConstraintError\":{\"name\":\"classifyConstraintError\",\"async\":false,\"parameters\":[{\"name\":\"message\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"'unique' | 'not_null' | null\",\"isStatic\":true,\"isPublic\":true},\"loadFromId\":{\"name\":\"loadFromId\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"loadFromSlug\":{\"name\":\"loadFromSlug\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"is\":{\"name\":\"is\",\"async\":true,\"parameters\":[{\"name\":\"criteria\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"AiOperationOptions\",\"optional\":true}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"do\":{\"name\":\"do\",\"async\":true,\"parameters\":[{\"name\":\"instructions\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"AiOperationOptions\",\"optional\":true}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"describe\":{\"name\":\"describe\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"AiOperationOptions\",\"optional\":true}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"delete\":{\"name\":\"delete\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"isRelatedLoaded\":{\"name\":\"isRelatedLoaded\",\"async\":false,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"_setLoadedRelationship\":{\"name\":\"_setLoadedRelationship\",\"async\":false,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"value\",\"type\":\"any\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"loadRelated\":{\"name\":\"loadRelated\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"opts\",\"type\":\"LoadRelatedOptions\",\"optional\":true}],\"returnType\":\"Promise<any>\",\"isStatic\":false,\"isPublic\":true},\"loadRelatedMany\":{\"name\":\"loadRelatedMany\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"opts\",\"type\":\"LoadRelatedOptions\",\"optional\":true}],\"returnType\":\"Promise<any[]>\",\"isStatic\":false,\"isPublic\":true},\"getRelated\":{\"name\":\"getRelated\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"opts\",\"type\":\"LoadRelatedOptions\",\"optional\":true}],\"returnType\":\"Promise<any>\",\"isStatic\":false,\"isPublic\":true},\"getAvailableTools\":{\"name\":\"getAvailableTools\",\"async\":false,\"parameters\":[],\"returnType\":\"AITool[]\",\"isStatic\":false,\"isPublic\":true},\"executeToolCall\":{\"name\":\"executeToolCall\",\"async\":true,\"parameters\":[{\"name\":\"toolCall\",\"type\":\"ToolCall\",\"optional\":false}],\"returnType\":\"Promise<ToolCallResult>\",\"isStatic\":false,\"isPublic\":true},\"remember\":{\"name\":\"remember\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"recall\":{\"name\":\"recall\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"recallAll\":{\"name\":\"recallAll\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<Map<string>>\",\"isStatic\":false,\"isPublic\":true},\"forget\":{\"name\":\"forget\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"forgetScope\":{\"name\":\"forgetScope\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"generateEmbeddings\":{\"name\":\"generateEmbeddings\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"GenerateEmbeddingsOptions\",\"optional\":true}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getEmbedding\":{\"name\":\"getEmbedding\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"model\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<number[] | null>\",\"isStatic\":false,\"isPublic\":true},\"hasStaleEmbeddings\":{\"name\":\"hasStaleEmbeddings\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"clearEmbeddings\":{\"name\":\"clearEmbeddings\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getRepository\":{\"name\":\"getRepository\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Repository>\",\"isStatic\":false,\"isPublic\":true},\"getClient\":{\"name\":\"getClient\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<IRepository>\",\"isStatic\":false,\"isPublic\":true},\"clearCache\":{\"name\":\"clearCache\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"sync\":{\"name\":\"sync\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"SyncOptions\",\"optional\":true}],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"getComments\":{\"name\":\"getComments\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Comment[]>\",\"isStatic\":false,\"isPublic\":true},\"addComment\":{\"name\":\"addComment\",\"async\":true,\"parameters\":[{\"name\":\"body\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Comment>\",\"isStatic\":false,\"isPublic\":true},\"incorporateFeedback\":{\"name\":\"incorporateFeedback\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"IncorporateFeedbackOptions\",\"optional\":true}],\"returnType\":\"Promise<IncorporateFeedbackResult>\",\"isStatic\":false,\"isPublic\":true},\"rollback\":{\"name\":\"rollback\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true},\"needsReview\":{\"name\":\"needsReview\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"isBugReport\":{\"name\":\"isBugReport\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"isFeatureRequest\":{\"name\":\"isFeatureRequest\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"suggestLabels\":{\"name\":\"suggestLabels\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"close\":{\"name\":\"close\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"addLabels\":{\"name\":\"addLabels\",\"async\":true,\"parameters\":[{\"name\":\"labels\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"removeLabel\":{\"name\":\"removeLabel\",\"async\":true,\"parameters\":[{\"name\":\"label\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"assign\":{\"name\":\"assign\",\"async\":true,\"parameters\":[{\"name\":\"assignees\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getUrl\":{\"name\":\"getUrl\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true},\"summarize\":{\"name\":\"summarize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string>\",\"isStatic\":false,\"isPublic\":true},\"merge\":{\"name\":\"merge\",\"async\":true,\"parameters\":[{\"name\":\"method\",\"type\":\"MergeMethod\",\"optional\":true,\"default\":\"squash\"}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"markReady\":{\"name\":\"markReady\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"convertToDraft\":{\"name\":\"convertToDraft\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"requestReviewers\":{\"name\":\"requestReviewers\",\"async\":true,\"parameters\":[{\"name\":\"reviewers\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"findLinkedIssue\":{\"name\":\"findLinkedIssue\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Issue | null>\",\"isStatic\":false,\"isPublic\":true},\"isReadyToMerge\":{\"name\":\"isReadyToMerge\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"suggestReviewers\":{\"name\":\"suggestReviewers\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"getChangeSize\":{\"name\":\"getChangeSize\",\"async\":false,\"parameters\":[],\"returnType\":\"'xs' | 's' | 'm' | 'l' | 'xl'\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\"]},\"mcp\":{\"include\":[\"list\",\"get\",\"sync\",\"summarize\",\"merge\"]},\"cli\":{\"include\":[\"list\",\"get\",\"sync\",\"summarize\",\"merge\",\"markReady\"],\"skipApiCheck\":true},\"tenantScoped\":{\"mode\":\"optional\"},\"tableName\":\"issues\",\"tableStrategy\":\"sti\"},\"extends\":\"Issue\",\"exportName\":\"PullRequest\",\"collectionExportName\":\"PullRequestCollection\",\"validationRules\":[{\"field\":\"repositoryId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"issues\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"issues\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"_meta_type\\\" TEXT NOT NULL,\\n \\\"_meta_data\\\" JSON,\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID,\\n \\\"repository_id\\\" UUID,\\n \\\"number\\\" INTEGER DEFAULT 0,\\n \\\"node_id\\\" TEXT DEFAULT '',\\n \\\"title\\\" TEXT DEFAULT '',\\n \\\"body\\\" TEXT DEFAULT '',\\n \\\"state\\\" TEXT DEFAULT 'open',\\n \\\"author\\\" TEXT DEFAULT '',\\n \\\"labels\\\" JSON DEFAULT '[]',\\n \\\"assignees\\\" JSON DEFAULT '[]',\\n \\\"comments_count\\\" INTEGER DEFAULT 0,\\n \\\"last_synced_at\\\" TIMESTAMP,\\n \\\"original_body\\\" TEXT DEFAULT '',\\n \\\"synthesis_count\\\" INTEGER DEFAULT 0,\\n \\\"head_ref\\\" TEXT DEFAULT '',\\n \\\"base_ref\\\" TEXT DEFAULT '',\\n \\\"merged\\\" BOOLEAN DEFAULT FALSE,\\n \\\"merged_at\\\" TIMESTAMP,\\n \\\"mergeable\\\" BOOLEAN DEFAULT TRUE,\\n \\\"draft\\\" BOOLEAN DEFAULT FALSE,\\n \\\"additions\\\" INTEGER DEFAULT 0,\\n \\\"deletions\\\" INTEGER DEFAULT 0,\\n \\\"changed_files\\\" INTEGER DEFAULT 0\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"_meta_type\":{\"type\":\"TEXT\",\"notNull\":true},\"_meta_data\":{\"type\":\"JSON\",\"notNull\":false},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false},\"repository_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false},\"number\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"node_id\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"title\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"body\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"state\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"open\"},\"author\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"labels\":{\"type\":\"JSON\",\"notNull\":false,\"default\":[]},\"assignees\":{\"type\":\"JSON\",\"notNull\":false,\"default\":[]},\"comments_count\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"last_synced_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false},\"original_body\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"synthesis_count\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"head_ref\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"base_ref\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"merged\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"default\":false},\"merged_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false},\"mergeable\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"default\":true},\"draft\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"default\":false},\"additions\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"deletions\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"changed_files\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0}},\"indexes\":[{\"name\":\"issues_id_idx\",\"columns\":[\"id\"]},{\"name\":\"issues_slug_context_meta_type_idx\",\"columns\":[\"slug\",\"context\",\"_meta_type\"],\"unique\":true},{\"name\":\"issues_meta_type_idx\",\"columns\":[\"_meta_type\"]}],\"version\":\"f42d9cf0\"}},\"@happyvertical/smrt-projects:Repository\":{\"name\":\"repository\",\"className\":\"Repository\",\"qualifiedName\":\"@happyvertical/smrt-projects:Repository\",\"collection\":\"repositories\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-km4s2/smrt/smrt/packages/projects/src/models/Repository.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"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}}},\"owner\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"fullName\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"description\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"defaultBranch\":{\"type\":\"text\",\"required\":false,\"default\":\"main\"},\"isPrivate\":{\"type\":\"boolean\",\"required\":false,\"default\":false},\"providerType\":{\"type\":\"text\",\"required\":false,\"default\":\"github\"},\"baseUrl\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"tokenConfigKey\":{\"type\":\"text\",\"required\":false,\"default\":\"GITHUB_TOKEN\"},\"lastSyncedAt\":{\"type\":\"datetime\",\"required\":false}},\"methods\":{\"getClient\":{\"name\":\"getClient\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<IRepository>\",\"isStatic\":false,\"isPublic\":true},\"clearClient\":{\"name\":\"clearClient\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"sync\":{\"name\":\"sync\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"SyncOptions\",\"optional\":true}],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"getIssues\":{\"name\":\"getIssues\",\"async\":true,\"parameters\":[{\"name\":\"filters\",\"type\":\"SearchFilters\",\"optional\":true}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"getPullRequests\":{\"name\":\"getPullRequests\",\"async\":true,\"parameters\":[{\"name\":\"filters\",\"type\":\"SearchFilters\",\"optional\":true}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"createIssue\":{\"name\":\"createIssue\",\"async\":true,\"parameters\":[{\"name\":\"data\",\"type\":\"CreateIssueInput\",\"optional\":false}],\"returnType\":\"Promise<Issue>\",\"isStatic\":false,\"isPublic\":true},\"createPullRequest\":{\"name\":\"createPullRequest\",\"async\":true,\"parameters\":[{\"name\":\"data\",\"type\":\"CreatePRInput\",\"optional\":false}],\"returnType\":\"Promise<PullRequest>\",\"isStatic\":false,\"isPublic\":true},\"hasOpenIssuesMatching\":{\"name\":\"hasOpenIssuesMatching\",\"async\":true,\"parameters\":[{\"name\":\"criteria\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"summarizeActivity\":{\"name\":\"summarizeActivity\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string>\",\"isStatic\":false,\"isPublic\":true},\"getByFullName\":{\"name\":\"getByFullName\",\"async\":true,\"parameters\":[{\"name\":\"owner\",\"type\":\"string\",\"optional\":false},{\"name\":\"name\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"SmrtObjectOptions\",\"optional\":true}],\"returnType\":\"Promise<Repository | null>\",\"isStatic\":true,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\"]},\"mcp\":{\"include\":[\"list\",\"get\",\"sync\"]},\"cli\":{\"include\":[\"list\",\"get\",\"sync\",\"create\"],\"skipApiCheck\":true},\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"Repository\",\"collectionExportName\":\"RepositoryCollection\",\"schema\":{\"tableName\":\"repositories\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"repositories\\\" (\\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 \\\"owner\\\" TEXT DEFAULT '',\\n \\\"name\\\" TEXT DEFAULT '',\\n \\\"full_name\\\" TEXT DEFAULT '',\\n \\\"description\\\" TEXT DEFAULT '',\\n \\\"default_branch\\\" TEXT DEFAULT 'main',\\n \\\"is_private\\\" BOOLEAN DEFAULT FALSE,\\n \\\"provider_type\\\" TEXT DEFAULT 'github',\\n \\\"base_url\\\" TEXT DEFAULT '',\\n \\\"token_config_key\\\" TEXT DEFAULT 'GITHUB_TOKEN',\\n \\\"last_synced_at\\\" TIMESTAMP\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"owner\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"full_name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"default_branch\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"main\"},\"is_private\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false,\"default\":false},\"provider_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"github\"},\"base_url\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"token_config_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"GITHUB_TOKEN\"},\"last_synced_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"repositories_id_idx\",\"columns\":[\"id\"]},{\"name\":\"repositories_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"c302a5e5\"}}},\"moduleType\":\"smrt\",\"smrtDependencies\":[\"@happyvertical/smrt-core\",\"@happyvertical/smrt-prompts\",\"@happyvertical/smrt-tenancy\"]}"));
|
|
14
|
+
ObjectRegistry.registerPackageManifest(JSON.parse("{\"version\":\"1.0.0\",\"timestamp\":1783845610253,\"packageName\":\"@happyvertical/smrt-projects\",\"packageVersion\":\"0.39.6\",\"objects\":{\"@happyvertical/smrt-projects:DevelopmentRequestHistoryCollection\":{\"name\":\"developmentrequesthistorycollection\",\"className\":\"DevelopmentRequestHistoryCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:DevelopmentRequestHistoryCollection\",\"collection\":\"developmentrequesthistories\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/collections/DevelopmentRequestHistories.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{\"listForRequest\":{\"name\":\"listForRequest\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"requestId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<DevelopmentRequestHistory[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"development_request_histories\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"DevelopmentRequestHistory\",\"exportName\":\"DevelopmentRequestHistoryCollection\",\"collectionExportName\":\"DevelopmentRequestHistoryCollectionCollection\",\"schema\":{\"tableName\":\"development_request_histories\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"development_request_histories\\\" (\\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\":\"development_request_histories_id_idx\",\"columns\":[\"id\"]},{\"name\":\"development_request_histories_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"97a2530c\"}},\"@happyvertical/smrt-projects:DevelopmentRequestCollection\":{\"name\":\"developmentrequestcollection\",\"className\":\"DevelopmentRequestCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:DevelopmentRequestCollection\",\"collection\":\"developmentrequests\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/collections/DevelopmentRequests.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{\"createManaged\":{\"name\":\"createManaged\",\"async\":true,\"parameters\":[{\"name\":\"input\",\"type\":\"any\",\"optional\":false}],\"returnType\":\"Promise<DevelopmentRequest>\",\"isStatic\":false,\"isPublic\":true},\"listByIntegrationRequester\":{\"name\":\"listByIntegrationRequester\",\"async\":true,\"parameters\":[{\"name\":\"input\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<DevelopmentRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"transitionStatus\":{\"name\":\"transitionStatus\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"requestId\",\"type\":\"string\",\"optional\":false},{\"name\":\"transition\",\"type\":\"DevelopmentRequestTransitionInput\",\"optional\":false}],\"returnType\":\"Promise<DevelopmentRequest>\",\"isStatic\":false,\"isPublic\":true},\"listForProject\":{\"name\":\"listForProject\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"projectId\",\"type\":\"string\",\"optional\":false},{\"name\":\"status\",\"type\":\"DevelopmentRequestStatus\",\"optional\":true}],\"returnType\":\"Promise<DevelopmentRequest[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"development_requests\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"DevelopmentRequest\",\"exportName\":\"DevelopmentRequestCollection\",\"collectionExportName\":\"DevelopmentRequestCollectionCollection\",\"schema\":{\"tableName\":\"development_requests\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"development_requests\\\" (\\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\":\"development_requests_id_idx\",\"columns\":[\"id\"]},{\"name\":\"development_requests_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"9d07b06c\"}},\"@happyvertical/smrt-projects:IssueCollection\":{\"name\":\"issuecollection\",\"className\":\"IssueCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:IssueCollection\",\"collection\":\"issues\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/collections/Issues.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{\"discover\":{\"name\":\"discover\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"findByRepository\":{\"name\":\"findByRepository\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"findOpen\":{\"name\":\"findOpen\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"findByLabel\":{\"name\":\"findByLabel\",\"async\":true,\"parameters\":[{\"name\":\"label\",\"type\":\"string\",\"optional\":false},{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"findByAssignee\":{\"name\":\"findByAssignee\",\"async\":true,\"parameters\":[{\"name\":\"assignee\",\"type\":\"string\",\"optional\":false},{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"findNeedingReview\":{\"name\":\"findNeedingReview\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"findByNumber\":{\"name\":\"findByNumber\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":false},{\"name\":\"number\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"Promise<Issue | null>\",\"isStatic\":false,\"isPublic\":true},\"findWithUnincorporatedFeedback\":{\"name\":\"findWithUnincorporatedFeedback\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"batchSync\":{\"name\":\"batchSync\",\"async\":true,\"parameters\":[{\"name\":\"repository\",\"type\":\"Repository\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"findByTenant\":{\"name\":\"findByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"findGlobal\":{\"name\":\"findGlobal\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"findWithGlobals\":{\"name\":\"findWithGlobals\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Issue\",\"exportName\":\"IssueCollection\",\"collectionExportName\":\"IssueCollectionCollection\",\"schema\":{\"tableName\":\"issue_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"issue_collections\\\" (\\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\":\"issue_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"issue_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"93b3c6f0\"}},\"@happyvertical/smrt-projects:ProjectIntegrationAuditCollection\":{\"name\":\"projectintegrationauditcollection\",\"className\":\"ProjectIntegrationAuditCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:ProjectIntegrationAuditCollection\",\"collection\":\"projectintegrationaudits\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/collections/ProjectIntegrationAudits.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{\"listForIntegration\":{\"name\":\"listForIntegration\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"integrationId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<ProjectIntegrationAudit[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"project_integration_audits\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"ProjectIntegrationAudit\",\"exportName\":\"ProjectIntegrationAuditCollection\",\"collectionExportName\":\"ProjectIntegrationAuditCollectionCollection\",\"schema\":{\"tableName\":\"project_integration_audits\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"project_integration_audits\\\" (\\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\":\"project_integration_audits_id_idx\",\"columns\":[\"id\"]},{\"name\":\"project_integration_audits_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"3066e366\"}},\"@happyvertical/smrt-projects:ProjectIntegrationCollection\":{\"name\":\"projectintegrationcollection\",\"className\":\"ProjectIntegrationCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:ProjectIntegrationCollection\",\"collection\":\"projectintegrations\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/collections/ProjectIntegrations.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{\"provision\":{\"name\":\"provision\",\"async\":true,\"parameters\":[{\"name\":\"input\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true},\"rotate\":{\"name\":\"rotate\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"integrationId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true},\"revoke\":{\"name\":\"revoke\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"integrationId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<ProjectIntegration>\",\"isStatic\":false,\"isPublic\":true},\"authenticate\":{\"name\":\"authenticate\",\"async\":true,\"parameters\":[{\"name\":\"credential\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<ProjectIntegration | null>\",\"isStatic\":false,\"isPublic\":true},\"listForProject\":{\"name\":\"listForProject\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"projectId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<ProjectIntegration[]>\",\"isStatic\":false,\"isPublic\":true},\"findActive\":{\"name\":\"findActive\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"integrationId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<ProjectIntegration | null>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"project_integrations\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"ProjectIntegration\",\"exportName\":\"ProjectIntegrationCollection\",\"collectionExportName\":\"ProjectIntegrationCollectionCollection\",\"schema\":{\"tableName\":\"project_integrations\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"project_integrations\\\" (\\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\":\"project_integrations_id_idx\",\"columns\":[\"id\"]},{\"name\":\"project_integrations_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"61d58a70\"}},\"@happyvertical/smrt-projects:ProjectCollection\":{\"name\":\"projectcollection\",\"className\":\"ProjectCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:ProjectCollection\",\"collection\":\"projects\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/collections/Projects.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{\"findByTitle\":{\"name\":\"findByTitle\",\"async\":true,\"parameters\":[{\"name\":\"title\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Project | null>\",\"isStatic\":false,\"isPublic\":true},\"findByOwner\":{\"name\":\"findByOwner\",\"async\":true,\"parameters\":[{\"name\":\"owner\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Project[]>\",\"isStatic\":false,\"isPublic\":true},\"findByProvider\":{\"name\":\"findByProvider\",\"async\":true,\"parameters\":[{\"name\":\"providerType\",\"type\":\"ProjectProviderType\",\"optional\":false}],\"returnType\":\"Promise<Project[]>\",\"isStatic\":false,\"isPublic\":true},\"getOrCreate\":{\"name\":\"getOrCreate\",\"async\":true,\"parameters\":[{\"name\":\"projectId\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<Project>\",\"isStatic\":false,\"isPublic\":true},\"syncAll\":{\"name\":\"syncAll\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<Project[]>\",\"isStatic\":false,\"isPublic\":true},\"findWithItemsInStatus\":{\"name\":\"findWithItemsInStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Project[]>\",\"isStatic\":false,\"isPublic\":true},\"getStatistics\":{\"name\":\"getStatistics\",\"async\":true,\"parameters\":[{\"name\":\"projectId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true},\"findByTenant\":{\"name\":\"findByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Project[]>\",\"isStatic\":false,\"isPublic\":true},\"findGlobal\":{\"name\":\"findGlobal\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Project[]>\",\"isStatic\":false,\"isPublic\":true},\"findWithGlobals\":{\"name\":\"findWithGlobals\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Project[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Project\",\"exportName\":\"ProjectCollection\",\"collectionExportName\":\"ProjectCollectionCollection\",\"schema\":{\"tableName\":\"project_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"project_collections\\\" (\\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\":\"project_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"project_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"f713c200\"}},\"@happyvertical/smrt-projects:PullRequestCollection\":{\"name\":\"pullrequestcollection\",\"className\":\"PullRequestCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:PullRequestCollection\",\"collection\":\"issues\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/collections/PullRequests.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{\"discover\":{\"name\":\"discover\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findByRepository\":{\"name\":\"findByRepository\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findOpen\":{\"name\":\"findOpen\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findDrafts\":{\"name\":\"findDrafts\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findReadyToMerge\":{\"name\":\"findReadyToMerge\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findByBranch\":{\"name\":\"findByBranch\",\"async\":true,\"parameters\":[{\"name\":\"branch\",\"type\":\"string\",\"optional\":false},{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findByNumber\":{\"name\":\"findByNumber\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":false},{\"name\":\"number\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"Promise<PullRequest | null>\",\"isStatic\":false,\"isPublic\":true},\"findAIReadyToMerge\":{\"name\":\"findAIReadyToMerge\",\"async\":true,\"parameters\":[{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findBySize\":{\"name\":\"findBySize\",\"async\":true,\"parameters\":[{\"name\":\"size\",\"type\":\"'xs' | 's' | 'm' | 'l' | 'xl'\",\"optional\":false},{\"name\":\"repositoryId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"batchSync\":{\"name\":\"batchSync\",\"async\":true,\"parameters\":[{\"name\":\"repository\",\"type\":\"Repository\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findByTenant\":{\"name\":\"findByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findGlobal\":{\"name\":\"findGlobal\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findWithGlobals\":{\"name\":\"findWithGlobals\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"issues\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"PullRequest\",\"exportName\":\"PullRequestCollection\",\"collectionExportName\":\"PullRequestCollectionCollection\",\"schema\":{\"tableName\":\"issues\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"issues\\\" (\\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\":\"issues_id_idx\",\"columns\":[\"id\"]},{\"name\":\"issues_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"798511d0\"}},\"@happyvertical/smrt-projects:RepositoryCollection\":{\"name\":\"repositorycollection\",\"className\":\"RepositoryCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:RepositoryCollection\",\"collection\":\"repositories\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/collections/Repositories.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{\"findByFullName\":{\"name\":\"findByFullName\",\"async\":true,\"parameters\":[{\"name\":\"owner\",\"type\":\"string\",\"optional\":false},{\"name\":\"name\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Repository | null>\",\"isStatic\":false,\"isPublic\":true},\"findByOwner\":{\"name\":\"findByOwner\",\"async\":true,\"parameters\":[{\"name\":\"owner\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Repository[]>\",\"isStatic\":false,\"isPublic\":true},\"findByProvider\":{\"name\":\"findByProvider\",\"async\":true,\"parameters\":[{\"name\":\"providerType\",\"type\":\"RepositoryProviderType\",\"optional\":false}],\"returnType\":\"Promise<Repository[]>\",\"isStatic\":false,\"isPublic\":true},\"getOrCreate\":{\"name\":\"getOrCreate\",\"async\":true,\"parameters\":[{\"name\":\"owner\",\"type\":\"string\",\"optional\":false},{\"name\":\"name\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<Repository>\",\"isStatic\":false,\"isPublic\":true},\"syncAll\":{\"name\":\"syncAll\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<Repository[]>\",\"isStatic\":false,\"isPublic\":true},\"findWithOpenIssues\":{\"name\":\"findWithOpenIssues\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Repository[]>\",\"isStatic\":false,\"isPublic\":true},\"findByTenant\":{\"name\":\"findByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Repository[]>\",\"isStatic\":false,\"isPublic\":true},\"findGlobal\":{\"name\":\"findGlobal\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Repository[]>\",\"isStatic\":false,\"isPublic\":true},\"findWithGlobals\":{\"name\":\"findWithGlobals\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Repository[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Repository\",\"exportName\":\"RepositoryCollection\",\"collectionExportName\":\"RepositoryCollectionCollection\",\"schema\":{\"tableName\":\"repository_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"repository_collections\\\" (\\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\":\"repository_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"repository_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"a9b3565e\"}},\"@happyvertical/smrt-projects:Comment\":{\"name\":\"comment\",\"className\":\"Comment\",\"qualifiedName\":\"@happyvertical/smrt-projects:Comment\",\"collection\":\"comments\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/Comment.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"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}}},\"issueId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Issue\"},\"commentId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"body\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"author\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"createdAt\":{\"type\":\"datetime\",\"required\":false},\"updatedAt\":{\"type\":\"datetime\",\"required\":false},\"url\":{\"type\":\"text\",\"required\":false,\"default\":\"\"}},\"methods\":{\"isQuestion\":{\"name\":\"isQuestion\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"isApproval\":{\"name\":\"isApproval\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"requestsChanges\":{\"name\":\"requestsChanges\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"extractActionItems\":{\"name\":\"extractActionItems\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"summarize\":{\"name\":\"summarize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string>\",\"isStatic\":false,\"isPublic\":true},\"getSentiment\":{\"name\":\"getSentiment\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<'positive' | 'negative' | 'neutral'>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"Comment\",\"collectionExportName\":\"CommentCollection\",\"schema\":{\"tableName\":\"comments\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"comments\\\" (\\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 \\\"issue_id\\\" UUID,\\n \\\"comment_id\\\" TEXT DEFAULT '',\\n \\\"body\\\" TEXT DEFAULT '',\\n \\\"author\\\" TEXT DEFAULT '',\\n \\\"url\\\" TEXT DEFAULT ''\\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},\"issue_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"comment_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"body\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"author\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"url\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"}},\"indexes\":[{\"name\":\"comments_id_idx\",\"columns\":[\"id\"]},{\"name\":\"comments_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"ed899e3f\"}},\"@happyvertical/smrt-projects:DevelopmentRequest\":{\"name\":\"developmentrequest\",\"className\":\"DevelopmentRequest\",\"qualifiedName\":\"@happyvertical/smrt-projects:DevelopmentRequest\",\"collection\":\"developmentrequests\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/DevelopmentRequest.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{\"tenantId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"sqlType\":\"UUID\",\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":true,\"autoPopulate\":true,\"nullable\":false,\"mode\":\"required\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"projectId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"integrationId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"ProjectIntegration\",\"_meta\":{\"required\":true}},\"requesterId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"participantId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"type\":{\"type\":\"text\",\"required\":false,\"default\":\"feature\"},\"description\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"evidence\":{\"type\":\"text\",\"required\":false,\"default\":\"[]\"},\"visibility\":{\"type\":\"text\",\"required\":false,\"default\":\"requester\"},\"origin\":{\"type\":\"text\",\"required\":false,\"default\":\"managed-app\"},\"discussion\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"status\":{\"type\":\"text\",\"required\":false,\"default\":\"submitted\"}},\"methods\":{\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"getEvidence\":{\"name\":\"getEvidence\",\"async\":false,\"parameters\":[],\"returnType\":\"DevelopmentRequestEvidence[]\",\"isStatic\":false,\"isPublic\":true},\"setEvidence\":{\"name\":\"setEvidence\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"DevelopmentRequestEvidence[] | string\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"development_requests\",\"api\":false,\"mcp\":false,\"cli\":false,\"tenantScoped\":{\"mode\":\"required\"}},\"extends\":\"SmrtObject\",\"exportName\":\"DevelopmentRequest\",\"collectionExportName\":\"DevelopmentRequestCollection\",\"validationRules\":[{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"integrationId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"development_requests\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"development_requests\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID NOT NULL,\\n \\\"project_id\\\" TEXT DEFAULT '',\\n \\\"integration_id\\\" UUID NOT NULL,\\n \\\"requester_id\\\" TEXT DEFAULT '',\\n \\\"participant_id\\\" TEXT DEFAULT '',\\n \\\"type\\\" TEXT DEFAULT 'feature',\\n \\\"description\\\" TEXT DEFAULT '',\\n \\\"evidence\\\" TEXT DEFAULT '[]',\\n \\\"visibility\\\" TEXT DEFAULT 'requester',\\n \\\"origin\\\" TEXT DEFAULT 'managed-app',\\n \\\"discussion\\\" TEXT DEFAULT '',\\n \\\"status\\\" TEXT DEFAULT 'submitted'\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":true,\"unique\":false},\"project_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"integration_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"requester_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"participant_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"feature\"},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"evidence\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"[]\"},\"visibility\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"requester\"},\"origin\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"managed-app\"},\"discussion\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"submitted\"}},\"indexes\":[{\"name\":\"development_requests_id_idx\",\"columns\":[\"id\"]},{\"name\":\"development_requests_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"0f9594f9\"}},\"@happyvertical/smrt-projects:DevelopmentRequestHistory\":{\"name\":\"developmentrequesthistory\",\"className\":\"DevelopmentRequestHistory\",\"qualifiedName\":\"@happyvertical/smrt-projects:DevelopmentRequestHistory\",\"collection\":\"developmentrequesthistories\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/DevelopmentRequestHistory.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{\"tenantId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"sqlType\":\"UUID\",\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":true,\"autoPopulate\":true,\"nullable\":false,\"mode\":\"required\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"requestId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"DevelopmentRequest\",\"_meta\":{\"required\":true}},\"fromStatus\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"toStatus\":{\"type\":\"text\",\"required\":false,\"default\":\"submitted\"},\"actorType\":{\"type\":\"text\",\"required\":false,\"default\":\"system\"},\"actorId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"note\":{\"type\":\"text\",\"required\":false}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"development_request_histories\",\"api\":false,\"mcp\":false,\"cli\":false,\"tenantScoped\":{\"mode\":\"required\"}},\"extends\":\"SmrtObject\",\"exportName\":\"DevelopmentRequestHistory\",\"collectionExportName\":\"DevelopmentRequestHistoryCollection\",\"validationRules\":[{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"requestId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"development_request_histories\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"development_request_histories\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID NOT NULL,\\n \\\"request_id\\\" UUID NOT NULL,\\n \\\"from_status\\\" TEXT DEFAULT '',\\n \\\"to_status\\\" TEXT DEFAULT 'submitted',\\n \\\"actor_type\\\" TEXT DEFAULT 'system',\\n \\\"actor_id\\\" TEXT DEFAULT '',\\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\":true,\"unique\":false},\"request_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"from_status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"to_status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"submitted\"},\"actor_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"system\"},\"actor_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"note\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"development_request_histories_id_idx\",\"columns\":[\"id\"]},{\"name\":\"development_request_histories_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"483a3831\"}},\"@happyvertical/smrt-projects:Issue\":{\"name\":\"issue\",\"className\":\"Issue\",\"qualifiedName\":\"@happyvertical/smrt-projects:Issue\",\"collection\":\"issues\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/Issue.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{\"created_at\":{\"type\":\"datetime\",\"required\":false},\"updated_at\":{\"type\":\"datetime\",\"required\":false},\"tenantId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"sqlType\":\"UUID\",\"nullable\":true,\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":false,\"autoPopulate\":true,\"nullable\":true,\"mode\":\"optional\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"repositoryId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Repository\",\"_meta\":{\"required\":true}},\"number\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"nodeId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"title\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"body\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"state\":{\"type\":\"text\",\"required\":false,\"default\":\"open\"},\"author\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"labels\":{\"type\":\"json\",\"required\":false,\"default\":[]},\"assignees\":{\"type\":\"json\",\"required\":false,\"default\":[]},\"commentsCount\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"lastSyncedAt\":{\"type\":\"datetime\",\"required\":false},\"originalBody\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"synthesisCount\":{\"type\":\"integer\",\"required\":false,\"default\":0}},\"methods\":{\"getAiUsageSnapshot\":{\"name\":\"getAiUsageSnapshot\",\"async\":false,\"parameters\":[],\"returnType\":\"AiUsageSnapshot | undefined\",\"isStatic\":false,\"isPublic\":true},\"resetAiUsage\":{\"name\":\"resetAiUsage\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"listAiUsage\":{\"name\":\"listAiUsage\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"AiUsageListOptions\",\"optional\":true}],\"returnType\":\"Promise<SmrtAiUsageRecord[]>\",\"isStatic\":false,\"isPublic\":true},\"summarizeAiUsage\":{\"name\":\"summarizeAiUsage\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"AiUsageSummaryOptions\",\"optional\":true}],\"returnType\":\"Promise<Record<string, AiUsageStats>>\",\"isStatic\":false,\"isPublic\":true},\"destroy\":{\"name\":\"destroy\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"markAsPersisted\":{\"name\":\"markAsPersisted\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"requireInsertOnSave\":{\"name\":\"requireInsertOnSave\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"loadDataFromDb\":{\"name\":\"loadDataFromDb\",\"async\":true,\"parameters\":[{\"name\":\"data\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"getFields\":{\"name\":\"getFields\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<any>\",\"isStatic\":false,\"isPublic\":true},\"toJSON\":{\"name\":\"toJSON\",\"async\":false,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"toPlainObject\":{\"name\":\"toPlainObject\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"toPublicJSON\":{\"name\":\"toPublicJSON\",\"async\":false,\"parameters\":[{\"name\":\"options\",\"type\":\"PublicJsonOptions\",\"optional\":true}],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"getId\":{\"name\":\"getId\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"getSlug\":{\"name\":\"getSlug\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"getSavedId\":{\"name\":\"getSavedId\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"isSaved\":{\"name\":\"isSaved\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"save\":{\"name\":\"save\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"classifyConstraintError\":{\"name\":\"classifyConstraintError\",\"async\":false,\"parameters\":[{\"name\":\"message\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"'unique' | 'not_null' | null\",\"isStatic\":true,\"isPublic\":true},\"loadFromId\":{\"name\":\"loadFromId\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"loadFromSlug\":{\"name\":\"loadFromSlug\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"is\":{\"name\":\"is\",\"async\":true,\"parameters\":[{\"name\":\"criteria\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"AiOperationOptions\",\"optional\":true}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"do\":{\"name\":\"do\",\"async\":true,\"parameters\":[{\"name\":\"instructions\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"AiOperationOptions\",\"optional\":true}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"describe\":{\"name\":\"describe\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"AiOperationOptions\",\"optional\":true}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"delete\":{\"name\":\"delete\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"isRelatedLoaded\":{\"name\":\"isRelatedLoaded\",\"async\":false,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"_setLoadedRelationship\":{\"name\":\"_setLoadedRelationship\",\"async\":false,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"value\",\"type\":\"any\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"loadRelated\":{\"name\":\"loadRelated\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"opts\",\"type\":\"LoadRelatedOptions\",\"optional\":true}],\"returnType\":\"Promise<any>\",\"isStatic\":false,\"isPublic\":true},\"loadRelatedMany\":{\"name\":\"loadRelatedMany\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"opts\",\"type\":\"LoadRelatedOptions\",\"optional\":true}],\"returnType\":\"Promise<any[]>\",\"isStatic\":false,\"isPublic\":true},\"getRelated\":{\"name\":\"getRelated\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"opts\",\"type\":\"LoadRelatedOptions\",\"optional\":true}],\"returnType\":\"Promise<any>\",\"isStatic\":false,\"isPublic\":true},\"getAvailableTools\":{\"name\":\"getAvailableTools\",\"async\":false,\"parameters\":[],\"returnType\":\"AITool[]\",\"isStatic\":false,\"isPublic\":true},\"executeToolCall\":{\"name\":\"executeToolCall\",\"async\":true,\"parameters\":[{\"name\":\"toolCall\",\"type\":\"ToolCall\",\"optional\":false}],\"returnType\":\"Promise<ToolCallResult>\",\"isStatic\":false,\"isPublic\":true},\"remember\":{\"name\":\"remember\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"recall\":{\"name\":\"recall\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"recallAll\":{\"name\":\"recallAll\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<Map<string>>\",\"isStatic\":false,\"isPublic\":true},\"forget\":{\"name\":\"forget\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"forgetScope\":{\"name\":\"forgetScope\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"generateEmbeddings\":{\"name\":\"generateEmbeddings\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"GenerateEmbeddingsOptions\",\"optional\":true}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getEmbedding\":{\"name\":\"getEmbedding\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"model\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<number[] | null>\",\"isStatic\":false,\"isPublic\":true},\"hasStaleEmbeddings\":{\"name\":\"hasStaleEmbeddings\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"clearEmbeddings\":{\"name\":\"clearEmbeddings\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getRepository\":{\"name\":\"getRepository\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Repository>\",\"isStatic\":false,\"isPublic\":true},\"getClient\":{\"name\":\"getClient\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<IRepository>\",\"isStatic\":false,\"isPublic\":true},\"clearCache\":{\"name\":\"clearCache\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"sync\":{\"name\":\"sync\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"SyncOptions\",\"optional\":true}],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"getComments\":{\"name\":\"getComments\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Comment[]>\",\"isStatic\":false,\"isPublic\":true},\"addComment\":{\"name\":\"addComment\",\"async\":true,\"parameters\":[{\"name\":\"body\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Comment>\",\"isStatic\":false,\"isPublic\":true},\"incorporateFeedback\":{\"name\":\"incorporateFeedback\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"IncorporateFeedbackOptions\",\"optional\":true}],\"returnType\":\"Promise<IncorporateFeedbackResult>\",\"isStatic\":false,\"isPublic\":true},\"rollback\":{\"name\":\"rollback\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true},\"needsReview\":{\"name\":\"needsReview\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"isBugReport\":{\"name\":\"isBugReport\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"isFeatureRequest\":{\"name\":\"isFeatureRequest\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"suggestLabels\":{\"name\":\"suggestLabels\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"close\":{\"name\":\"close\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"addLabels\":{\"name\":\"addLabels\",\"async\":true,\"parameters\":[{\"name\":\"labels\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"removeLabel\":{\"name\":\"removeLabel\",\"async\":true,\"parameters\":[{\"name\":\"label\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"assign\":{\"name\":\"assign\",\"async\":true,\"parameters\":[{\"name\":\"assignees\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getUrl\":{\"name\":\"getUrl\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableStrategy\":\"sti\",\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\"]},\"mcp\":{\"include\":[\"list\",\"get\",\"sync\",\"incorporateFeedback\"]},\"cli\":{\"include\":[\"list\",\"get\",\"sync\",\"incorporateFeedback\",\"rollback\"],\"skipApiCheck\":true},\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"Issue\",\"collectionExportName\":\"IssueCollection\",\"validationRules\":[{\"field\":\"repositoryId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"issues\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"issues\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"_meta_type\\\" TEXT NOT NULL,\\n \\\"_meta_data\\\" JSON,\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID,\\n \\\"repository_id\\\" UUID,\\n \\\"number\\\" INTEGER DEFAULT 0,\\n \\\"node_id\\\" TEXT DEFAULT '',\\n \\\"title\\\" TEXT DEFAULT '',\\n \\\"body\\\" TEXT DEFAULT '',\\n \\\"state\\\" TEXT DEFAULT 'open',\\n \\\"author\\\" TEXT DEFAULT '',\\n \\\"labels\\\" JSON DEFAULT '[]',\\n \\\"assignees\\\" JSON DEFAULT '[]',\\n \\\"comments_count\\\" INTEGER DEFAULT 0,\\n \\\"last_synced_at\\\" TIMESTAMP,\\n \\\"original_body\\\" TEXT DEFAULT '',\\n \\\"synthesis_count\\\" INTEGER DEFAULT 0,\\n \\\"head_ref\\\" TEXT DEFAULT '',\\n \\\"base_ref\\\" TEXT DEFAULT '',\\n \\\"merged\\\" BOOLEAN DEFAULT FALSE,\\n \\\"merged_at\\\" TIMESTAMP,\\n \\\"mergeable\\\" BOOLEAN DEFAULT TRUE,\\n \\\"draft\\\" BOOLEAN DEFAULT FALSE,\\n \\\"additions\\\" INTEGER DEFAULT 0,\\n \\\"deletions\\\" INTEGER DEFAULT 0,\\n \\\"changed_files\\\" INTEGER DEFAULT 0\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"_meta_type\":{\"type\":\"TEXT\",\"notNull\":true},\"_meta_data\":{\"type\":\"JSON\",\"notNull\":false},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false},\"repository_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false},\"number\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"node_id\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"title\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"body\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"state\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"open\"},\"author\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"labels\":{\"type\":\"JSON\",\"notNull\":false,\"default\":[]},\"assignees\":{\"type\":\"JSON\",\"notNull\":false,\"default\":[]},\"comments_count\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"last_synced_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false},\"original_body\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"synthesis_count\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"head_ref\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"base_ref\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"merged\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"default\":false},\"merged_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false},\"mergeable\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"default\":true},\"draft\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"default\":false},\"additions\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"deletions\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"changed_files\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0}},\"indexes\":[{\"name\":\"issues_id_idx\",\"columns\":[\"id\"]},{\"name\":\"issues_slug_context_meta_type_idx\",\"columns\":[\"slug\",\"context\",\"_meta_type\"],\"unique\":true},{\"name\":\"issues_meta_type_idx\",\"columns\":[\"_meta_type\"]}],\"version\":\"e187bb4a\"}},\"@happyvertical/smrt-projects:Label\":{\"name\":\"label\",\"className\":\"Label\",\"qualifiedName\":\"@happyvertical/smrt-projects:Label\",\"collection\":\"labels\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/Label.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{\"repositoryId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Repository\"},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"color\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"description\":{\"type\":\"text\",\"required\":false,\"default\":\"\"}},\"methods\":{\"isTypeLabel\":{\"name\":\"isTypeLabel\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isPriorityLabel\":{\"name\":\"isPriorityLabel\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isStatusLabel\":{\"name\":\"isStatusLabel\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"getCategory\":{\"name\":\"getCategory\",\"async\":false,\"parameters\":[],\"returnType\":\"'type' | 'priority' | 'status' | 'area' | 'other'\",\"isStatic\":false,\"isPublic\":true},\"getPriorityLevel\":{\"name\":\"getPriorityLevel\",\"async\":false,\"parameters\":[],\"returnType\":\"number | null\",\"isStatic\":false,\"isPublic\":true},\"getHexColor\":{\"name\":\"getHexColor\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true},\"createInRepository\":{\"name\":\"createInRepository\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"updateInRepository\":{\"name\":\"updateInRepository\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]},\"mcp\":{\"include\":[\"list\",\"get\",\"create\"]},\"cli\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]}},\"extends\":\"SmrtObject\",\"exportName\":\"Label\",\"collectionExportName\":\"LabelCollection\",\"schema\":{\"tableName\":\"labels\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"labels\\\" (\\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 \\\"repository_id\\\" UUID,\\n \\\"name\\\" TEXT DEFAULT '',\\n \\\"color\\\" TEXT DEFAULT '',\\n \\\"description\\\" TEXT DEFAULT ''\\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\"},\"repository_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"color\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"}},\"indexes\":[{\"name\":\"labels_id_idx\",\"columns\":[\"id\"]},{\"name\":\"labels_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"698e39f8\"}},\"@happyvertical/smrt-projects:Project\":{\"name\":\"project\",\"className\":\"Project\",\"qualifiedName\":\"@happyvertical/smrt-projects:Project\",\"collection\":\"projects\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/Project.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"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}}},\"projectId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"projectNumber\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"title\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"description\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"owner\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"url\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"providerType\":{\"type\":\"text\",\"required\":false,\"default\":\"github\"},\"tokenConfigKey\":{\"type\":\"text\",\"required\":false,\"default\":\"GITHUB_TOKEN\"},\"statuses\":{\"type\":\"json\",\"required\":false,\"default\":[]},\"fields\":{\"type\":\"json\",\"required\":false,\"default\":[]},\"statusFieldId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"statusOptions\":{\"type\":\"json\",\"required\":false,\"default\":{}},\"lastSyncedAt\":{\"type\":\"datetime\",\"required\":false}},\"methods\":{\"getClient\":{\"name\":\"getClient\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<IProject>\",\"isStatic\":false,\"isPublic\":true},\"clearClient\":{\"name\":\"clearClient\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"sync\":{\"name\":\"sync\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"SyncOptions\",\"optional\":true}],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"addItem\":{\"name\":\"addItem\",\"async\":true,\"parameters\":[{\"name\":\"item\",\"type\":\"Issue | PullRequest\",\"optional\":false}],\"returnType\":\"Promise<ProjectItem>\",\"isStatic\":false,\"isPublic\":true},\"removeItem\":{\"name\":\"removeItem\",\"async\":true,\"parameters\":[{\"name\":\"itemId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getItem\":{\"name\":\"getItem\",\"async\":true,\"parameters\":[{\"name\":\"itemId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<ProjectItem | null>\",\"isStatic\":false,\"isPublic\":true},\"listItems\":{\"name\":\"listItems\",\"async\":true,\"parameters\":[{\"name\":\"filters\",\"type\":\"ItemFilters\",\"optional\":true}],\"returnType\":\"Promise<ProjectItem[]>\",\"isStatic\":false,\"isPublic\":true},\"updateItemStatus\":{\"name\":\"updateItemStatus\",\"async\":true,\"parameters\":[{\"name\":\"itemId\",\"type\":\"string\",\"optional\":false},{\"name\":\"status\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"updateItemField\":{\"name\":\"updateItemField\",\"async\":true,\"parameters\":[{\"name\":\"itemId\",\"type\":\"string\",\"optional\":false},{\"name\":\"fieldId\",\"type\":\"string\",\"optional\":false},{\"name\":\"value\",\"type\":\"any\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getStatuses\":{\"name\":\"getStatuses\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<ProjectStatus[]>\",\"isStatic\":false,\"isPublic\":true},\"getFields\":{\"name\":\"getFields\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<ProjectField[]>\",\"isStatic\":false,\"isPublic\":true},\"getItemsByStatus\":{\"name\":\"getItemsByStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<ProjectItem[]>\",\"isStatic\":false,\"isPublic\":true},\"moveItem\":{\"name\":\"moveItem\",\"async\":true,\"parameters\":[{\"name\":\"item\",\"type\":\"Issue | PullRequest\",\"optional\":false},{\"name\":\"status\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"analyzeHealth\":{\"name\":\"analyzeHealth\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string>\",\"isStatic\":false,\"isPublic\":true},\"getByTitle\":{\"name\":\"getByTitle\",\"async\":true,\"parameters\":[{\"name\":\"title\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"SmrtObjectOptions\",\"optional\":true}],\"returnType\":\"Promise<Project | null>\",\"isStatic\":true,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\"]},\"mcp\":{\"include\":[\"list\",\"get\",\"sync\",\"addItem\",\"updateItemStatus\"]},\"cli\":{\"include\":[\"list\",\"get\",\"sync\",\"addItem\",\"updateItemStatus\",\"listItems\"],\"skipApiCheck\":true},\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"Project\",\"collectionExportName\":\"ProjectCollection\",\"schema\":{\"tableName\":\"projects\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"projects\\\" (\\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 \\\"project_id\\\" TEXT DEFAULT '',\\n \\\"project_number\\\" INTEGER DEFAULT 0,\\n \\\"title\\\" TEXT DEFAULT '',\\n \\\"description\\\" TEXT DEFAULT '',\\n \\\"owner\\\" TEXT DEFAULT '',\\n \\\"url\\\" TEXT DEFAULT '',\\n \\\"provider_type\\\" TEXT DEFAULT 'github',\\n \\\"token_config_key\\\" TEXT DEFAULT 'GITHUB_TOKEN',\\n \\\"statuses\\\" JSON DEFAULT '[]',\\n \\\"fields\\\" JSON DEFAULT '[]',\\n \\\"status_field_id\\\" TEXT DEFAULT '',\\n \\\"status_options\\\" JSON DEFAULT '{}',\\n \\\"last_synced_at\\\" TIMESTAMP\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"project_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"project_number\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"title\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"owner\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"url\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"provider_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"github\"},\"token_config_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"GITHUB_TOKEN\"},\"statuses\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false,\"default\":[]},\"fields\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false,\"default\":[]},\"status_field_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"status_options\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false,\"default\":{}},\"last_synced_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"projects_id_idx\",\"columns\":[\"id\"]},{\"name\":\"projects_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"2e8c344a\"}},\"@happyvertical/smrt-projects:ProjectIntegration\":{\"name\":\"projectintegration\",\"className\":\"ProjectIntegration\",\"qualifiedName\":\"@happyvertical/smrt-projects:ProjectIntegration\",\"collection\":\"projectintegrations\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/ProjectIntegration.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{\"tenantId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"sqlType\":\"UUID\",\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":true,\"autoPopulate\":true,\"nullable\":false,\"mode\":\"required\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"projectId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"credentialHash\":{\"type\":\"text\",\"required\":false,\"default\":\"\",\"_meta\":{\"sensitive\":true},\"sensitive\":true},\"capabilities\":{\"type\":\"json\",\"required\":false,\"default\":[]},\"status\":{\"type\":\"text\",\"required\":false,\"default\":\"active\"},\"revokedAt\":{\"type\":\"datetime\",\"required\":false}},\"methods\":{\"hasCapability\":{\"name\":\"hasCapability\",\"async\":false,\"parameters\":[{\"name\":\"capability\",\"type\":\"ProjectIntegrationCapability\",\"optional\":false}],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isActive\":{\"name\":\"isActive\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"project_integrations\",\"conflictColumns\":[\"tenant_id\",\"project_id\",\"name\"],\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"tenantScoped\":{\"mode\":\"required\"}},\"extends\":\"SmrtObject\",\"exportName\":\"ProjectIntegration\",\"collectionExportName\":\"ProjectIntegrationCollection\",\"validationRules\":[{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"text\"}],\"schema\":{\"tableName\":\"project_integrations\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"project_integrations\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID NOT NULL,\\n \\\"project_id\\\" TEXT DEFAULT '',\\n \\\"name\\\" TEXT DEFAULT '',\\n \\\"credential_hash\\\" TEXT DEFAULT '',\\n \\\"capabilities\\\" JSON DEFAULT '[]',\\n \\\"status\\\" TEXT DEFAULT 'active',\\n \\\"revoked_at\\\" TIMESTAMP\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":true,\"unique\":false},\"project_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"credential_hash\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"capabilities\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false,\"default\":[]},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"active\"},\"revoked_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"project_integrations_id_idx\",\"columns\":[\"id\"]},{\"name\":\"project_integrations_tenant_id_project_id_idx\",\"columns\":[\"tenant_id\",\"project_id\",\"name\"],\"unique\":true}],\"version\":\"bfbaa783\"}},\"@happyvertical/smrt-projects:ProjectIntegrationAudit\":{\"name\":\"projectintegrationaudit\",\"className\":\"ProjectIntegrationAudit\",\"qualifiedName\":\"@happyvertical/smrt-projects:ProjectIntegrationAudit\",\"collection\":\"projectintegrationaudits\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/ProjectIntegrationAudit.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{\"tenantId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"sqlType\":\"UUID\",\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":true,\"autoPopulate\":true,\"nullable\":false,\"mode\":\"required\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"integrationId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"ProjectIntegration\",\"_meta\":{\"required\":true}},\"action\":{\"type\":\"text\",\"required\":false,\"default\":\"created\"},\"note\":{\"type\":\"text\",\"required\":false}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"project_integration_audits\",\"api\":false,\"mcp\":false,\"cli\":false,\"tenantScoped\":{\"mode\":\"required\"}},\"extends\":\"SmrtObject\",\"exportName\":\"ProjectIntegrationAudit\",\"collectionExportName\":\"ProjectIntegrationAuditCollection\",\"validationRules\":[{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"integrationId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"project_integration_audits\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"project_integration_audits\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID NOT NULL,\\n \\\"integration_id\\\" UUID NOT NULL,\\n \\\"action\\\" TEXT DEFAULT 'created',\\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\":true,\"unique\":false},\"integration_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"action\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"created\"},\"note\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"project_integration_audits_id_idx\",\"columns\":[\"id\"]},{\"name\":\"project_integration_audits_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"acf40ff8\"}},\"@happyvertical/smrt-projects:PullRequest\":{\"name\":\"pullrequest\",\"className\":\"PullRequest\",\"qualifiedName\":\"@happyvertical/smrt-projects:PullRequest\",\"collection\":\"issues\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/PullRequest.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{\"created_at\":{\"type\":\"datetime\",\"required\":false},\"updated_at\":{\"type\":\"datetime\",\"required\":false},\"tenantId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"sqlType\":\"UUID\",\"nullable\":true,\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":false,\"autoPopulate\":true,\"nullable\":true,\"mode\":\"optional\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"repositoryId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Repository\",\"_meta\":{\"required\":true}},\"number\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"nodeId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"title\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"body\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"state\":{\"type\":\"text\",\"required\":false,\"default\":\"open\"},\"author\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"labels\":{\"type\":\"json\",\"required\":false,\"default\":[]},\"assignees\":{\"type\":\"json\",\"required\":false,\"default\":[]},\"commentsCount\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"lastSyncedAt\":{\"type\":\"datetime\",\"required\":false},\"originalBody\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"synthesisCount\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"headRef\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"baseRef\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"merged\":{\"type\":\"boolean\",\"required\":false,\"default\":false},\"mergedAt\":{\"type\":\"datetime\",\"required\":false},\"mergeable\":{\"type\":\"boolean\",\"required\":false,\"default\":true},\"draft\":{\"type\":\"boolean\",\"required\":false,\"default\":false},\"additions\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"deletions\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"changedFiles\":{\"type\":\"integer\",\"required\":false,\"default\":0}},\"methods\":{\"getAiUsageSnapshot\":{\"name\":\"getAiUsageSnapshot\",\"async\":false,\"parameters\":[],\"returnType\":\"AiUsageSnapshot | undefined\",\"isStatic\":false,\"isPublic\":true},\"resetAiUsage\":{\"name\":\"resetAiUsage\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"listAiUsage\":{\"name\":\"listAiUsage\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"AiUsageListOptions\",\"optional\":true}],\"returnType\":\"Promise<SmrtAiUsageRecord[]>\",\"isStatic\":false,\"isPublic\":true},\"summarizeAiUsage\":{\"name\":\"summarizeAiUsage\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"AiUsageSummaryOptions\",\"optional\":true}],\"returnType\":\"Promise<Record<string, AiUsageStats>>\",\"isStatic\":false,\"isPublic\":true},\"destroy\":{\"name\":\"destroy\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"markAsPersisted\":{\"name\":\"markAsPersisted\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"requireInsertOnSave\":{\"name\":\"requireInsertOnSave\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"loadDataFromDb\":{\"name\":\"loadDataFromDb\",\"async\":true,\"parameters\":[{\"name\":\"data\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"getFields\":{\"name\":\"getFields\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<any>\",\"isStatic\":false,\"isPublic\":true},\"toJSON\":{\"name\":\"toJSON\",\"async\":false,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"toPlainObject\":{\"name\":\"toPlainObject\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"toPublicJSON\":{\"name\":\"toPublicJSON\",\"async\":false,\"parameters\":[{\"name\":\"options\",\"type\":\"PublicJsonOptions\",\"optional\":true}],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"getId\":{\"name\":\"getId\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"getSlug\":{\"name\":\"getSlug\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"getSavedId\":{\"name\":\"getSavedId\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"isSaved\":{\"name\":\"isSaved\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"save\":{\"name\":\"save\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"classifyConstraintError\":{\"name\":\"classifyConstraintError\",\"async\":false,\"parameters\":[{\"name\":\"message\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"'unique' | 'not_null' | null\",\"isStatic\":true,\"isPublic\":true},\"loadFromId\":{\"name\":\"loadFromId\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"loadFromSlug\":{\"name\":\"loadFromSlug\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"is\":{\"name\":\"is\",\"async\":true,\"parameters\":[{\"name\":\"criteria\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"AiOperationOptions\",\"optional\":true}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"do\":{\"name\":\"do\",\"async\":true,\"parameters\":[{\"name\":\"instructions\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"AiOperationOptions\",\"optional\":true}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"describe\":{\"name\":\"describe\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"AiOperationOptions\",\"optional\":true}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"delete\":{\"name\":\"delete\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"isRelatedLoaded\":{\"name\":\"isRelatedLoaded\",\"async\":false,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"_setLoadedRelationship\":{\"name\":\"_setLoadedRelationship\",\"async\":false,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"value\",\"type\":\"any\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"loadRelated\":{\"name\":\"loadRelated\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"opts\",\"type\":\"LoadRelatedOptions\",\"optional\":true}],\"returnType\":\"Promise<any>\",\"isStatic\":false,\"isPublic\":true},\"loadRelatedMany\":{\"name\":\"loadRelatedMany\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"opts\",\"type\":\"LoadRelatedOptions\",\"optional\":true}],\"returnType\":\"Promise<any[]>\",\"isStatic\":false,\"isPublic\":true},\"getRelated\":{\"name\":\"getRelated\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"opts\",\"type\":\"LoadRelatedOptions\",\"optional\":true}],\"returnType\":\"Promise<any>\",\"isStatic\":false,\"isPublic\":true},\"getAvailableTools\":{\"name\":\"getAvailableTools\",\"async\":false,\"parameters\":[],\"returnType\":\"AITool[]\",\"isStatic\":false,\"isPublic\":true},\"executeToolCall\":{\"name\":\"executeToolCall\",\"async\":true,\"parameters\":[{\"name\":\"toolCall\",\"type\":\"ToolCall\",\"optional\":false}],\"returnType\":\"Promise<ToolCallResult>\",\"isStatic\":false,\"isPublic\":true},\"remember\":{\"name\":\"remember\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"recall\":{\"name\":\"recall\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"recallAll\":{\"name\":\"recallAll\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<Map<string>>\",\"isStatic\":false,\"isPublic\":true},\"forget\":{\"name\":\"forget\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"forgetScope\":{\"name\":\"forgetScope\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"generateEmbeddings\":{\"name\":\"generateEmbeddings\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"GenerateEmbeddingsOptions\",\"optional\":true}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getEmbedding\":{\"name\":\"getEmbedding\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"model\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<number[] | null>\",\"isStatic\":false,\"isPublic\":true},\"hasStaleEmbeddings\":{\"name\":\"hasStaleEmbeddings\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"clearEmbeddings\":{\"name\":\"clearEmbeddings\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getRepository\":{\"name\":\"getRepository\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Repository>\",\"isStatic\":false,\"isPublic\":true},\"getClient\":{\"name\":\"getClient\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<IRepository>\",\"isStatic\":false,\"isPublic\":true},\"clearCache\":{\"name\":\"clearCache\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"sync\":{\"name\":\"sync\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"SyncOptions\",\"optional\":true}],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"getComments\":{\"name\":\"getComments\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Comment[]>\",\"isStatic\":false,\"isPublic\":true},\"addComment\":{\"name\":\"addComment\",\"async\":true,\"parameters\":[{\"name\":\"body\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Comment>\",\"isStatic\":false,\"isPublic\":true},\"incorporateFeedback\":{\"name\":\"incorporateFeedback\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"IncorporateFeedbackOptions\",\"optional\":true}],\"returnType\":\"Promise<IncorporateFeedbackResult>\",\"isStatic\":false,\"isPublic\":true},\"rollback\":{\"name\":\"rollback\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true},\"needsReview\":{\"name\":\"needsReview\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"isBugReport\":{\"name\":\"isBugReport\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"isFeatureRequest\":{\"name\":\"isFeatureRequest\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"suggestLabels\":{\"name\":\"suggestLabels\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"close\":{\"name\":\"close\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"addLabels\":{\"name\":\"addLabels\",\"async\":true,\"parameters\":[{\"name\":\"labels\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"removeLabel\":{\"name\":\"removeLabel\",\"async\":true,\"parameters\":[{\"name\":\"label\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"assign\":{\"name\":\"assign\",\"async\":true,\"parameters\":[{\"name\":\"assignees\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getUrl\":{\"name\":\"getUrl\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true},\"summarize\":{\"name\":\"summarize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string>\",\"isStatic\":false,\"isPublic\":true},\"merge\":{\"name\":\"merge\",\"async\":true,\"parameters\":[{\"name\":\"method\",\"type\":\"MergeMethod\",\"optional\":true,\"default\":\"squash\"}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"markReady\":{\"name\":\"markReady\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"convertToDraft\":{\"name\":\"convertToDraft\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"requestReviewers\":{\"name\":\"requestReviewers\",\"async\":true,\"parameters\":[{\"name\":\"reviewers\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"findLinkedIssue\":{\"name\":\"findLinkedIssue\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Issue | null>\",\"isStatic\":false,\"isPublic\":true},\"isReadyToMerge\":{\"name\":\"isReadyToMerge\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"suggestReviewers\":{\"name\":\"suggestReviewers\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"getChangeSize\":{\"name\":\"getChangeSize\",\"async\":false,\"parameters\":[],\"returnType\":\"'xs' | 's' | 'm' | 'l' | 'xl'\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\"]},\"mcp\":{\"include\":[\"list\",\"get\",\"sync\",\"summarize\",\"merge\"]},\"cli\":{\"include\":[\"list\",\"get\",\"sync\",\"summarize\",\"merge\",\"markReady\"],\"skipApiCheck\":true},\"tenantScoped\":{\"mode\":\"optional\"},\"tableName\":\"issues\",\"tableStrategy\":\"sti\"},\"extends\":\"Issue\",\"exportName\":\"PullRequest\",\"collectionExportName\":\"PullRequestCollection\",\"validationRules\":[{\"field\":\"repositoryId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"issues\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"issues\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"_meta_type\\\" TEXT NOT NULL,\\n \\\"_meta_data\\\" JSON,\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID,\\n \\\"repository_id\\\" UUID,\\n \\\"number\\\" INTEGER DEFAULT 0,\\n \\\"node_id\\\" TEXT DEFAULT '',\\n \\\"title\\\" TEXT DEFAULT '',\\n \\\"body\\\" TEXT DEFAULT '',\\n \\\"state\\\" TEXT DEFAULT 'open',\\n \\\"author\\\" TEXT DEFAULT '',\\n \\\"labels\\\" JSON DEFAULT '[]',\\n \\\"assignees\\\" JSON DEFAULT '[]',\\n \\\"comments_count\\\" INTEGER DEFAULT 0,\\n \\\"last_synced_at\\\" TIMESTAMP,\\n \\\"original_body\\\" TEXT DEFAULT '',\\n \\\"synthesis_count\\\" INTEGER DEFAULT 0,\\n \\\"head_ref\\\" TEXT DEFAULT '',\\n \\\"base_ref\\\" TEXT DEFAULT '',\\n \\\"merged\\\" BOOLEAN DEFAULT FALSE,\\n \\\"merged_at\\\" TIMESTAMP,\\n \\\"mergeable\\\" BOOLEAN DEFAULT TRUE,\\n \\\"draft\\\" BOOLEAN DEFAULT FALSE,\\n \\\"additions\\\" INTEGER DEFAULT 0,\\n \\\"deletions\\\" INTEGER DEFAULT 0,\\n \\\"changed_files\\\" INTEGER DEFAULT 0\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"_meta_type\":{\"type\":\"TEXT\",\"notNull\":true},\"_meta_data\":{\"type\":\"JSON\",\"notNull\":false},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false},\"repository_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false},\"number\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"node_id\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"title\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"body\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"state\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"open\"},\"author\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"labels\":{\"type\":\"JSON\",\"notNull\":false,\"default\":[]},\"assignees\":{\"type\":\"JSON\",\"notNull\":false,\"default\":[]},\"comments_count\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"last_synced_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false},\"original_body\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"synthesis_count\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"head_ref\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"base_ref\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"merged\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"default\":false},\"merged_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false},\"mergeable\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"default\":true},\"draft\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"default\":false},\"additions\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"deletions\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"changed_files\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0}},\"indexes\":[{\"name\":\"issues_id_idx\",\"columns\":[\"id\"]},{\"name\":\"issues_slug_context_meta_type_idx\",\"columns\":[\"slug\",\"context\",\"_meta_type\"],\"unique\":true},{\"name\":\"issues_meta_type_idx\",\"columns\":[\"_meta_type\"]}],\"version\":\"f42d9cf0\"}},\"@happyvertical/smrt-projects:Repository\":{\"name\":\"repository\",\"className\":\"Repository\",\"qualifiedName\":\"@happyvertical/smrt-projects:Repository\",\"collection\":\"repositories\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/Repository.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"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}}},\"owner\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"fullName\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"description\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"defaultBranch\":{\"type\":\"text\",\"required\":false,\"default\":\"main\"},\"isPrivate\":{\"type\":\"boolean\",\"required\":false,\"default\":false},\"providerType\":{\"type\":\"text\",\"required\":false,\"default\":\"github\"},\"baseUrl\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"tokenConfigKey\":{\"type\":\"text\",\"required\":false,\"default\":\"GITHUB_TOKEN\"},\"lastSyncedAt\":{\"type\":\"datetime\",\"required\":false}},\"methods\":{\"getClient\":{\"name\":\"getClient\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<IRepository>\",\"isStatic\":false,\"isPublic\":true},\"clearClient\":{\"name\":\"clearClient\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"sync\":{\"name\":\"sync\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"SyncOptions\",\"optional\":true}],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"getIssues\":{\"name\":\"getIssues\",\"async\":true,\"parameters\":[{\"name\":\"filters\",\"type\":\"SearchFilters\",\"optional\":true}],\"returnType\":\"Promise<Issue[]>\",\"isStatic\":false,\"isPublic\":true},\"getPullRequests\":{\"name\":\"getPullRequests\",\"async\":true,\"parameters\":[{\"name\":\"filters\",\"type\":\"SearchFilters\",\"optional\":true}],\"returnType\":\"Promise<PullRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"createIssue\":{\"name\":\"createIssue\",\"async\":true,\"parameters\":[{\"name\":\"data\",\"type\":\"CreateIssueInput\",\"optional\":false}],\"returnType\":\"Promise<Issue>\",\"isStatic\":false,\"isPublic\":true},\"createPullRequest\":{\"name\":\"createPullRequest\",\"async\":true,\"parameters\":[{\"name\":\"data\",\"type\":\"CreatePRInput\",\"optional\":false}],\"returnType\":\"Promise<PullRequest>\",\"isStatic\":false,\"isPublic\":true},\"hasOpenIssuesMatching\":{\"name\":\"hasOpenIssuesMatching\",\"async\":true,\"parameters\":[{\"name\":\"criteria\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"summarizeActivity\":{\"name\":\"summarizeActivity\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string>\",\"isStatic\":false,\"isPublic\":true},\"getByFullName\":{\"name\":\"getByFullName\",\"async\":true,\"parameters\":[{\"name\":\"owner\",\"type\":\"string\",\"optional\":false},{\"name\":\"name\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"SmrtObjectOptions\",\"optional\":true}],\"returnType\":\"Promise<Repository | null>\",\"isStatic\":true,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\"]},\"mcp\":{\"include\":[\"list\",\"get\",\"sync\"]},\"cli\":{\"include\":[\"list\",\"get\",\"sync\",\"create\"],\"skipApiCheck\":true},\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"Repository\",\"collectionExportName\":\"RepositoryCollection\",\"schema\":{\"tableName\":\"repositories\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"repositories\\\" (\\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 \\\"owner\\\" TEXT DEFAULT '',\\n \\\"name\\\" TEXT DEFAULT '',\\n \\\"full_name\\\" TEXT DEFAULT '',\\n \\\"description\\\" TEXT DEFAULT '',\\n \\\"default_branch\\\" TEXT DEFAULT 'main',\\n \\\"is_private\\\" BOOLEAN DEFAULT FALSE,\\n \\\"provider_type\\\" TEXT DEFAULT 'github',\\n \\\"base_url\\\" TEXT DEFAULT '',\\n \\\"token_config_key\\\" TEXT DEFAULT 'GITHUB_TOKEN',\\n \\\"last_synced_at\\\" TIMESTAMP\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"owner\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"full_name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"default_branch\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"main\"},\"is_private\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false,\"default\":false},\"provider_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"github\"},\"base_url\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"token_config_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"GITHUB_TOKEN\"},\"last_synced_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"repositories_id_idx\",\"columns\":[\"id\"]},{\"name\":\"repositories_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"c302a5e5\"}},\"@happyvertical/smrt-projects:DevelopmentRequestWorkLink\":{\"name\":\"developmentrequestworklink\",\"className\":\"DevelopmentRequestWorkLink\",\"qualifiedName\":\"@happyvertical/smrt-projects:DevelopmentRequestWorkLink\",\"collection\":\"developmentrequestworklinks\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{\"tenantId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"sqlType\":\"UUID\",\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":true,\"autoPopulate\":true,\"nullable\":false,\"mode\":\"required\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"requestId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"DevelopmentRequest\",\"_meta\":{\"required\":true}},\"workItemType\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"workItemId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"canonicalStatus\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"providerRef\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"lastProjectedAt\":{\"type\":\"datetime\",\"required\":false}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"development_request_work_links\",\"conflictColumns\":[\"request_id\",\"work_item_type\",\"work_item_id\"],\"tenantScoped\":{\"mode\":\"required\"}},\"extends\":\"SmrtObject\",\"exportName\":\"DevelopmentRequestWorkLink\",\"collectionExportName\":\"DevelopmentRequestWorkLinkCollection\",\"validationRules\":[{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"requestId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"development_request_work_links\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"development_request_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 NOT NULL,\\n \\\"request_id\\\" UUID NOT NULL,\\n \\\"work_item_type\\\" TEXT,\\n \\\"work_item_id\\\" TEXT,\\n \\\"canonical_status\\\" TEXT,\\n \\\"provider_ref\\\" TEXT,\\n \\\"metadata\\\" TEXT,\\n \\\"last_projected_at\\\" TIMESTAMP\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":true,\"unique\":false},\"request_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"work_item_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"work_item_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"canonical_status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"provider_ref\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"last_projected_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"development_request_work_links_id_idx\",\"columns\":[\"id\"]},{\"name\":\"development_request_work_links_request_id_work_item_type_idx\",\"columns\":[\"request_id\",\"work_item_type\",\"work_item_id\"],\"unique\":true}],\"version\":\"d832a71f\"}},\"@happyvertical/smrt-projects:ProjectDeliveryEvent\":{\"name\":\"projectdeliveryevent\",\"className\":\"ProjectDeliveryEvent\",\"qualifiedName\":\"@happyvertical/smrt-projects:ProjectDeliveryEvent\",\"collection\":\"projectdeliveryevents\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{\"tenantId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"sqlType\":\"UUID\",\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":true,\"autoPopulate\":true,\"nullable\":false,\"mode\":\"required\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"integrationId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"ProjectIntegration\",\"_meta\":{\"required\":true}},\"requestId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"DevelopmentRequest\",\"_meta\":{\"required\":true}},\"idempotencyKey\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"sequence\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"type\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"payload\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"occurredAt\":{\"type\":\"datetime\",\"required\":false},\"deliveredAt\":{\"type\":\"datetime\",\"required\":false},\"deliveryAttempts\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"lastDeliveryError\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"project_delivery_events\",\"conflictColumns\":[\"integration_id\",\"idempotency_key\"],\"tenantScoped\":{\"mode\":\"required\"}},\"extends\":\"SmrtObject\",\"exportName\":\"ProjectDeliveryEvent\",\"collectionExportName\":\"ProjectDeliveryEventCollection\",\"validationRules\":[{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"integrationId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"requestId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"project_delivery_events\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"project_delivery_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 NOT NULL,\\n \\\"integration_id\\\" UUID NOT NULL,\\n \\\"request_id\\\" UUID NOT NULL,\\n \\\"idempotency_key\\\" TEXT,\\n \\\"sequence\\\" INTEGER DEFAULT 0,\\n \\\"type\\\" TEXT,\\n \\\"payload\\\" TEXT,\\n \\\"occurred_at\\\" TIMESTAMP,\\n \\\"delivered_at\\\" TIMESTAMP,\\n \\\"delivery_attempts\\\" INTEGER DEFAULT 0,\\n \\\"last_delivery_error\\\" 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\":true,\"unique\":false},\"integration_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"request_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"idempotency_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"sequence\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"payload\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"occurred_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"delivered_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"delivery_attempts\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"last_delivery_error\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"project_delivery_events_id_idx\",\"columns\":[\"id\"]},{\"name\":\"project_delivery_events_integration_id_idempotency_key_idx\",\"columns\":[\"integration_id\",\"idempotency_key\"],\"unique\":true}],\"version\":\"d231f634\"}},\"@happyvertical/smrt-projects:PreviewApproval\":{\"name\":\"previewapproval\",\"className\":\"PreviewApproval\",\"qualifiedName\":\"@happyvertical/smrt-projects:PreviewApproval\",\"collection\":\"previewapprovals\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{\"tenantId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"sqlType\":\"UUID\",\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":true,\"autoPopulate\":true,\"nullable\":false,\"mode\":\"required\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"requestId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"DevelopmentRequest\",\"_meta\":{\"required\":true}},\"previewId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"previewUrl\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"decidedByRef\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"reason\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"createdAt\":{\"type\":\"datetime\",\"required\":false},\"decidedAt\":{\"type\":\"datetime\",\"required\":false},\"staleAt\":{\"type\":\"datetime\",\"required\":false}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"preview_approvals\",\"conflictColumns\":[\"request_id\",\"preview_id\"],\"tenantScoped\":{\"mode\":\"required\"}},\"extends\":\"SmrtObject\",\"exportName\":\"PreviewApproval\",\"collectionExportName\":\"PreviewApprovalCollection\",\"validationRules\":[{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"requestId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"preview_approvals\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"preview_approvals\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID NOT NULL,\\n \\\"request_id\\\" UUID NOT NULL,\\n \\\"preview_id\\\" TEXT,\\n \\\"preview_url\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"decided_by_ref\\\" TEXT,\\n \\\"reason\\\" TEXT,\\n \\\"decided_at\\\" TIMESTAMP,\\n \\\"stale_at\\\" TIMESTAMP\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":true,\"unique\":false},\"request_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"preview_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"preview_url\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"decided_by_ref\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"reason\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"decided_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"stale_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"preview_approvals_id_idx\",\"columns\":[\"id\"]},{\"name\":\"preview_approvals_request_id_preview_id_idx\",\"columns\":[\"request_id\",\"preview_id\"],\"unique\":true}],\"version\":\"a6f8ab0a\"}},\"@happyvertical/smrt-projects:AssistanceRequest\":{\"name\":\"assistancerequest\",\"className\":\"AssistanceRequest\",\"qualifiedName\":\"@happyvertical/smrt-projects:AssistanceRequest\",\"collection\":\"assistancerequests\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{\"tenantId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"sqlType\":\"UUID\",\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":true,\"autoPopulate\":true,\"nullable\":false,\"mode\":\"required\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"integrationId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"ProjectIntegration\",\"_meta\":{\"required\":true}},\"requesterId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"subject\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"applicationContext\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"conversation\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"evidence\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"classification\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"supportCaseId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"developmentRequestId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"deliveryHandoffLinkedAt\":{\"type\":\"datetime\",\"required\":false},\"createdAt\":{\"type\":\"datetime\",\"required\":false}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"assistance_requests\",\"tenantScoped\":{\"mode\":\"required\"}},\"extends\":\"SmrtObject\",\"exportName\":\"AssistanceRequest\",\"collectionExportName\":\"AssistanceRequestCollection\",\"validationRules\":[{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"integrationId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"assistance_requests\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"assistance_requests\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID NOT NULL,\\n \\\"integration_id\\\" UUID NOT NULL,\\n \\\"requester_id\\\" TEXT,\\n \\\"subject\\\" TEXT,\\n \\\"application_context\\\" TEXT,\\n \\\"conversation\\\" TEXT,\\n \\\"evidence\\\" TEXT,\\n \\\"classification\\\" TEXT,\\n \\\"support_case_id\\\" TEXT,\\n \\\"development_request_id\\\" TEXT,\\n \\\"delivery_handoff_linked_at\\\" TIMESTAMP\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":true,\"unique\":false},\"integration_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"requester_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"subject\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"application_context\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"conversation\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"evidence\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"classification\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"support_case_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"development_request_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"delivery_handoff_linked_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"assistance_requests_id_idx\",\"columns\":[\"id\"]},{\"name\":\"assistance_requests_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"3ca6f508\"}},\"@happyvertical/smrt-projects:AssistanceRequestEvent\":{\"name\":\"assistancerequestevent\",\"className\":\"AssistanceRequestEvent\",\"qualifiedName\":\"@happyvertical/smrt-projects:AssistanceRequestEvent\",\"collection\":\"assistancerequestevents\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{\"tenantId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"sqlType\":\"UUID\",\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":true,\"autoPopulate\":true,\"nullable\":false,\"mode\":\"required\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"assistanceRequestId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"AssistanceRequest\",\"_meta\":{\"required\":true}},\"priorClassification\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"resultingClassification\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"actorRef\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"reason\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"resultingLinks\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"occurredAt\":{\"type\":\"datetime\",\"required\":false}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"assistance_request_events\",\"tenantScoped\":{\"mode\":\"required\"}},\"extends\":\"SmrtObject\",\"exportName\":\"AssistanceRequestEvent\",\"collectionExportName\":\"AssistanceRequestEventCollection\",\"validationRules\":[{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"assistanceRequestId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"assistance_request_events\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"assistance_request_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 NOT NULL,\\n \\\"assistance_request_id\\\" UUID NOT NULL,\\n \\\"prior_classification\\\" TEXT,\\n \\\"resulting_classification\\\" TEXT,\\n \\\"actor_ref\\\" TEXT,\\n \\\"reason\\\" TEXT,\\n \\\"resulting_links\\\" TEXT,\\n \\\"occurred_at\\\" TIMESTAMP\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":true,\"unique\":false},\"assistance_request_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"prior_classification\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"resulting_classification\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"actor_ref\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"reason\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"resulting_links\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"occurred_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"assistance_request_events_id_idx\",\"columns\":[\"id\"]},{\"name\":\"assistance_request_events_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"896f3684\"}},\"@happyvertical/smrt-projects:DevelopmentRequestWorkLinkCollection\":{\"name\":\"developmentrequestworklinkcollection\",\"className\":\"DevelopmentRequestWorkLinkCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:DevelopmentRequestWorkLinkCollection\",\"collection\":\"developmentrequestworklinks\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"development_request_work_links\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"DevelopmentRequestWorkLink\",\"exportName\":\"DevelopmentRequestWorkLinkCollection\",\"collectionExportName\":\"DevelopmentRequestWorkLinkCollectionCollection\",\"schema\":{\"tableName\":\"development_request_work_links\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"development_request_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\":\"development_request_work_links_id_idx\",\"columns\":[\"id\"]},{\"name\":\"development_request_work_links_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"ff9733d7\"}},\"@happyvertical/smrt-projects:ProjectDeliveryEventCollection\":{\"name\":\"projectdeliveryeventcollection\",\"className\":\"ProjectDeliveryEventCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:ProjectDeliveryEventCollection\",\"collection\":\"projectdeliveryevents\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"project_delivery_events\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"ProjectDeliveryEvent\",\"exportName\":\"ProjectDeliveryEventCollection\",\"collectionExportName\":\"ProjectDeliveryEventCollectionCollection\",\"schema\":{\"tableName\":\"project_delivery_events\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"project_delivery_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\":\"project_delivery_events_id_idx\",\"columns\":[\"id\"]},{\"name\":\"project_delivery_events_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"90db5058\"}},\"@happyvertical/smrt-projects:PreviewApprovalCollection\":{\"name\":\"previewapprovalcollection\",\"className\":\"PreviewApprovalCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:PreviewApprovalCollection\",\"collection\":\"previewapprovals\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"preview_approvals\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"PreviewApproval\",\"exportName\":\"PreviewApprovalCollection\",\"collectionExportName\":\"PreviewApprovalCollectionCollection\",\"schema\":{\"tableName\":\"preview_approvals\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"preview_approvals\\\" (\\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\":\"preview_approvals_id_idx\",\"columns\":[\"id\"]},{\"name\":\"preview_approvals_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"79411098\"}},\"@happyvertical/smrt-projects:AssistanceRequestCollection\":{\"name\":\"assistancerequestcollection\",\"className\":\"AssistanceRequestCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:AssistanceRequestCollection\",\"collection\":\"assistancerequests\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"assistance_requests\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"AssistanceRequest\",\"exportName\":\"AssistanceRequestCollection\",\"collectionExportName\":\"AssistanceRequestCollectionCollection\",\"schema\":{\"tableName\":\"assistance_requests\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"assistance_requests\\\" (\\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\":\"assistance_requests_id_idx\",\"columns\":[\"id\"]},{\"name\":\"assistance_requests_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"1ac4a6f2\"}},\"@happyvertical/smrt-projects:AssistanceRequestEventCollection\":{\"name\":\"assistancerequesteventcollection\",\"className\":\"AssistanceRequestEventCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:AssistanceRequestEventCollection\",\"collection\":\"assistancerequestevents\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"assistance_request_events\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"AssistanceRequestEvent\",\"exportName\":\"AssistanceRequestEventCollection\",\"collectionExportName\":\"AssistanceRequestEventCollectionCollection\",\"schema\":{\"tableName\":\"assistance_request_events\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"assistance_request_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\":\"assistance_request_events_id_idx\",\"columns\":[\"id\"]},{\"name\":\"assistance_request_events_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"13f0ffe9\"}},\"@happyvertical/smrt-projects:ServiceTimeEntry\":{\"name\":\"servicetimeentry\",\"className\":\"ServiceTimeEntry\",\"qualifiedName\":\"@happyvertical/smrt-projects:ServiceTimeEntry\",\"collection\":\"servicetimeentries\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/service-evidence.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"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\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-support:SupportCase\",\"_meta\":{\"nullable\":true}},\"workRefType\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"workRefId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"specialistId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-support:SupportSpecialist\",\"_meta\":{\"nullable\":true}},\"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\":{\"getEvidence\":{\"name\":\"getEvidence\",\"async\":false,\"parameters\":[],\"returnType\":\"ServiceEvidence[]\",\"isStatic\":false,\"isPublic\":true},\"setEvidence\":{\"name\":\"setEvidence\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"ServiceEvidence[]\",\"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},\"durationHours\":{\"name\":\"durationHours\",\"async\":false,\"parameters\":[],\"returnType\":\"number\",\"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\":\"service_time_entries\",\"api\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"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\":\"crossPackageRef\",\"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\":\"crossPackageRef\",\"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_id_idx\",\"columns\":[\"id\"]},{\"name\":\"service_time_entries_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"78af3c7b\"}},\"@happyvertical/smrt-projects:ServiceChargeSnapshot\":{\"name\":\"servicechargesnapshot\",\"className\":\"ServiceChargeSnapshot\",\"qualifiedName\":\"@happyvertical/smrt-projects:ServiceChargeSnapshot\",\"collection\":\"servicechargesnapshots\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/service-evidence.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"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}},\"amount\":{\"type\":\"decimal\",\"required\":false,\"default\":0},\"currency\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"pricingVersion\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"strategy\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"rateSnapshot\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"sourceChargeRef\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"createdAt\":{\"type\":\"datetime\",\"required\":false}},\"methods\":{\"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\":\"service_charge_snapshots\",\"conflictColumns\":[\"time_entry_id\"],\"api\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"ServiceChargeSnapshot\",\"collectionExportName\":\"ServiceChargeSnapshotCollection\",\"validationRules\":[{\"field\":\"timeEntryId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"service_charge_snapshots\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"service_charge_snapshots\\\" (\\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 \\\"amount\\\" REAL DEFAULT 0,\\n \\\"currency\\\" TEXT,\\n \\\"pricing_version\\\" TEXT,\\n \\\"strategy\\\" TEXT,\\n \\\"rate_snapshot\\\" TEXT,\\n \\\"source_charge_ref\\\" 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},\"amount\":{\"type\":\"REAL\",\"notNull\":false,\"unique\":false,\"default\":0},\"currency\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"pricing_version\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"strategy\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"rate_snapshot\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"source_charge_ref\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"service_charge_snapshots_id_idx\",\"columns\":[\"id\"]},{\"name\":\"service_charge_snapshots_time_entry_id_idx\",\"columns\":[\"time_entry_id\"],\"unique\":true}],\"version\":\"f6d68265\"}},\"@happyvertical/smrt-projects:ServiceCompensationSnapshot\":{\"name\":\"servicecompensationsnapshot\",\"className\":\"ServiceCompensationSnapshot\",\"qualifiedName\":\"@happyvertical/smrt-projects:ServiceCompensationSnapshot\",\"collection\":\"servicecompensationsnapshots\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/service-evidence.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"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}},\"amount\":{\"type\":\"decimal\",\"required\":false,\"default\":0},\"currency\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"termsVersion\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"rateSnapshot\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"createdAt\":{\"type\":\"datetime\",\"required\":false}},\"methods\":{\"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\":\"service_compensation_snapshots\",\"conflictColumns\":[\"time_entry_id\"],\"api\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"ServiceCompensationSnapshot\",\"collectionExportName\":\"ServiceCompensationSnapshotCollection\",\"validationRules\":[{\"field\":\"timeEntryId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"service_compensation_snapshots\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"service_compensation_snapshots\\\" (\\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 \\\"amount\\\" REAL DEFAULT 0,\\n \\\"currency\\\" TEXT,\\n \\\"terms_version\\\" TEXT,\\n \\\"rate_snapshot\\\" 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},\"amount\":{\"type\":\"REAL\",\"notNull\":false,\"unique\":false,\"default\":0},\"currency\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"terms_version\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"rate_snapshot\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"service_compensation_snapshots_id_idx\",\"columns\":[\"id\"]},{\"name\":\"service_compensation_snapshots_time_entry_id_idx\",\"columns\":[\"time_entry_id\"],\"unique\":true}],\"version\":\"2ab5d52f\"}},\"@happyvertical/smrt-projects:ServiceTimeEntryCollection\":{\"name\":\"servicetimeentrycollection\",\"className\":\"ServiceTimeEntryCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:ServiceTimeEntryCollection\",\"collection\":\"servicetimeentries\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/service-evidence.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{\"forWork\":{\"name\":\"forWork\",\"async\":true,\"parameters\":[{\"name\":\"workRefType\",\"type\":\"string\",\"optional\":false},{\"name\":\"workRefId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<ServiceTimeEntry[]>\",\"isStatic\":false,\"isPublic\":true},\"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_id_idx\",\"columns\":[\"id\"]},{\"name\":\"service_time_entries_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"2c3a20bf\"}},\"@happyvertical/smrt-projects:ServiceChargeSnapshotCollection\":{\"name\":\"servicechargesnapshotcollection\",\"className\":\"ServiceChargeSnapshotCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:ServiceChargeSnapshotCollection\",\"collection\":\"servicechargesnapshots\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/service-evidence.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"service_charge_snapshots\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"ServiceChargeSnapshot\",\"exportName\":\"ServiceChargeSnapshotCollection\",\"collectionExportName\":\"ServiceChargeSnapshotCollectionCollection\",\"schema\":{\"tableName\":\"service_charge_snapshots\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"service_charge_snapshots\\\" (\\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_charge_snapshots_id_idx\",\"columns\":[\"id\"]},{\"name\":\"service_charge_snapshots_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"29633321\"}},\"@happyvertical/smrt-projects:ServiceCompensationSnapshotCollection\":{\"name\":\"servicecompensationsnapshotcollection\",\"className\":\"ServiceCompensationSnapshotCollection\",\"qualifiedName\":\"@happyvertical/smrt-projects:ServiceCompensationSnapshotCollection\",\"collection\":\"servicecompensationsnapshots\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-phdrb-runner-xv52x/smrt/smrt/packages/projects/src/models/service-evidence.ts\",\"packageName\":\"@happyvertical/smrt-projects\",\"fields\":{},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"service_compensation_snapshots\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"ServiceCompensationSnapshot\",\"exportName\":\"ServiceCompensationSnapshotCollection\",\"collectionExportName\":\"ServiceCompensationSnapshotCollectionCollection\",\"schema\":{\"tableName\":\"service_compensation_snapshots\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"service_compensation_snapshots\\\" (\\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_compensation_snapshots_id_idx\",\"columns\":[\"id\"]},{\"name\":\"service_compensation_snapshots_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"1fbc57ea\"}}},\"moduleType\":\"smrt\",\"smrtDependencies\":[\"@happyvertical/smrt-core\",\"@happyvertical/smrt-prompts\",\"@happyvertical/smrt-subscriptions\",\"@happyvertical/smrt-tenancy\"]}"));
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/models/DevelopmentRequestHistory.ts
|
|
17
|
+
var __defProp$9 = Object.defineProperty;
|
|
18
|
+
var __getOwnPropDesc$9 = Object.getOwnPropertyDescriptor;
|
|
19
|
+
var __decorateClass$9 = (decorators, target, key, kind) => {
|
|
20
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$9(target, key) : target;
|
|
21
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
22
|
+
if (kind && result) __defProp$9(target, key, result);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var DevelopmentRequestHistory = class extends SmrtObject {
|
|
26
|
+
tenantId = "";
|
|
27
|
+
requestId = "";
|
|
28
|
+
fromStatus = "";
|
|
29
|
+
toStatus = "submitted";
|
|
30
|
+
actorType = "system";
|
|
31
|
+
actorId = "";
|
|
32
|
+
note = null;
|
|
33
|
+
constructor(options = {}) {
|
|
34
|
+
super(options);
|
|
35
|
+
if (options.tenantId !== void 0) this.tenantId = options.tenantId;
|
|
36
|
+
if (options.requestId !== void 0) this.requestId = options.requestId;
|
|
37
|
+
if (options.fromStatus !== void 0) this.fromStatus = options.fromStatus;
|
|
38
|
+
if (options.toStatus !== void 0) this.toStatus = options.toStatus;
|
|
39
|
+
if (options.actorType !== void 0) this.actorType = options.actorType;
|
|
40
|
+
if (options.actorId !== void 0) this.actorId = options.actorId;
|
|
41
|
+
if (options.note !== void 0) this.note = options.note;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
__decorateClass$9([tenantId()], DevelopmentRequestHistory.prototype, "tenantId", 2);
|
|
45
|
+
__decorateClass$9([foreignKey("DevelopmentRequest", { required: true })], DevelopmentRequestHistory.prototype, "requestId", 2);
|
|
46
|
+
DevelopmentRequestHistory = __decorateClass$9([TenantScoped({ mode: "required" }), smrt({
|
|
47
|
+
tableName: "development_request_histories",
|
|
48
|
+
api: false,
|
|
49
|
+
mcp: false,
|
|
50
|
+
cli: false
|
|
51
|
+
})], DevelopmentRequestHistory);
|
|
52
|
+
//#endregion
|
|
53
|
+
//#region src/collections/DevelopmentRequestHistories.ts
|
|
54
|
+
var DevelopmentRequestHistoryCollection = class extends SmrtCollection {
|
|
55
|
+
static _itemClass = DevelopmentRequestHistory;
|
|
56
|
+
async listForRequest(tenantId, requestId) {
|
|
57
|
+
return withTenant({ tenantId }, () => this.list({
|
|
58
|
+
where: {
|
|
59
|
+
tenantId,
|
|
60
|
+
requestId
|
|
61
|
+
},
|
|
62
|
+
orderBy: "createdAt ASC"
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
//#endregion
|
|
67
|
+
//#region src/models/DevelopmentRequest.ts
|
|
68
|
+
var __defProp$8 = Object.defineProperty;
|
|
69
|
+
var __getOwnPropDesc$8 = Object.getOwnPropertyDescriptor;
|
|
70
|
+
var __decorateClass$8 = (decorators, target, key, kind) => {
|
|
71
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$8(target, key) : target;
|
|
72
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
73
|
+
if (kind && result) __defProp$8(target, key, result);
|
|
74
|
+
return result;
|
|
75
|
+
};
|
|
76
|
+
function parseEvidence$1(raw) {
|
|
77
|
+
if (!raw) return [];
|
|
78
|
+
if (Array.isArray(raw)) return normalizeEvidence(raw);
|
|
79
|
+
if (typeof raw !== "string") return [];
|
|
80
|
+
try {
|
|
81
|
+
const parsed = JSON.parse(raw);
|
|
82
|
+
return Array.isArray(parsed) ? normalizeEvidence(parsed) : [];
|
|
83
|
+
} catch {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function normalizeEvidence(raw) {
|
|
88
|
+
return raw.filter((entry) => !!entry && typeof entry === "object" && !Array.isArray(entry)).map((entry) => ({
|
|
89
|
+
url: typeof entry.url === "string" ? entry.url.trim() : "",
|
|
90
|
+
...typeof entry.label === "string" && entry.label.trim().length > 0 ? { label: entry.label.trim() } : {}
|
|
91
|
+
})).filter((entry) => entry.url.length > 0);
|
|
92
|
+
}
|
|
93
|
+
function stringifyEvidence(items) {
|
|
94
|
+
return JSON.stringify(items.map((item) => ({
|
|
95
|
+
url: item.url.trim(),
|
|
96
|
+
...item.label?.trim() ? { label: item.label.trim() } : {}
|
|
97
|
+
})));
|
|
98
|
+
}
|
|
99
|
+
var DevelopmentRequest = class extends SmrtObject {
|
|
100
|
+
tenantId = "";
|
|
101
|
+
projectId = "";
|
|
102
|
+
integrationId = "";
|
|
103
|
+
requesterId = "";
|
|
104
|
+
participantId = "";
|
|
105
|
+
type = "feature";
|
|
106
|
+
description = "";
|
|
107
|
+
evidence = "[]";
|
|
108
|
+
visibility = "requester";
|
|
109
|
+
origin = "managed-app";
|
|
110
|
+
discussion = "";
|
|
111
|
+
status = "submitted";
|
|
112
|
+
constructor(options = {}) {
|
|
113
|
+
super(options);
|
|
114
|
+
if (options.tenantId !== void 0) this.tenantId = options.tenantId;
|
|
115
|
+
if (options.projectId !== void 0) this.projectId = options.projectId;
|
|
116
|
+
if (options.integrationId !== void 0) this.integrationId = options.integrationId;
|
|
117
|
+
if (options.requesterId !== void 0) this.requesterId = options.requesterId;
|
|
118
|
+
if (options.participantId !== void 0) this.participantId = options.participantId;
|
|
119
|
+
if (options.type !== void 0) this.type = options.type;
|
|
120
|
+
if (options.description !== void 0) this.description = options.description;
|
|
121
|
+
if (options.evidence !== void 0) this.setEvidence(options.evidence);
|
|
122
|
+
if (options.visibility !== void 0) this.visibility = options.visibility;
|
|
123
|
+
if (options.origin !== void 0) this.origin = options.origin;
|
|
124
|
+
if (options.discussion !== void 0) this.discussion = options.discussion;
|
|
125
|
+
if (options.status !== void 0) this.status = options.status;
|
|
126
|
+
}
|
|
127
|
+
async initialize() {
|
|
128
|
+
await super.initialize();
|
|
129
|
+
if (this.evidence == null) this.evidence = "[]";
|
|
130
|
+
else if (typeof this.evidence !== "string") this.setEvidence(this.evidence);
|
|
131
|
+
return this;
|
|
132
|
+
}
|
|
133
|
+
getEvidence() {
|
|
134
|
+
return parseEvidence$1(this.evidence);
|
|
135
|
+
}
|
|
136
|
+
setEvidence(value) {
|
|
137
|
+
this.evidence = typeof value === "string" ? value : stringifyEvidence(value);
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
__decorateClass$8([tenantId()], DevelopmentRequest.prototype, "tenantId", 2);
|
|
141
|
+
__decorateClass$8([foreignKey("ProjectIntegration", { required: true })], DevelopmentRequest.prototype, "integrationId", 2);
|
|
142
|
+
DevelopmentRequest = __decorateClass$8([TenantScoped({ mode: "required" }), smrt({
|
|
143
|
+
tableName: "development_requests",
|
|
144
|
+
api: false,
|
|
145
|
+
mcp: false,
|
|
146
|
+
cli: false
|
|
147
|
+
})], DevelopmentRequest);
|
|
148
|
+
//#endregion
|
|
149
|
+
//#region src/collections/DevelopmentRequests.ts
|
|
150
|
+
var DevelopmentRequestCollection = class extends SmrtCollection {
|
|
151
|
+
static _itemClass = DevelopmentRequest;
|
|
152
|
+
async createManaged(input) {
|
|
153
|
+
const request = await withTenant({ tenantId: input.tenantId }, () => this.create({
|
|
154
|
+
tenantId: input.tenantId,
|
|
155
|
+
projectId: input.projectId,
|
|
156
|
+
integrationId: input.integrationId,
|
|
157
|
+
requesterId: input.requesterId,
|
|
158
|
+
participantId: input.participantId ?? "",
|
|
159
|
+
type: input.type,
|
|
160
|
+
description: input.description,
|
|
161
|
+
evidence: JSON.stringify(input.evidence ?? []),
|
|
162
|
+
visibility: input.visibility ?? "requester",
|
|
163
|
+
origin: input.origin ?? "managed-app",
|
|
164
|
+
discussion: input.discussion ?? "",
|
|
165
|
+
status: "submitted"
|
|
166
|
+
}));
|
|
167
|
+
await withTenant({ tenantId: input.tenantId }, () => request.save());
|
|
168
|
+
await this.recordHistory(request, {
|
|
169
|
+
status: "submitted",
|
|
170
|
+
actorType: "integration",
|
|
171
|
+
actorId: input.integrationId,
|
|
172
|
+
note: input.discussion ?? ""
|
|
173
|
+
});
|
|
174
|
+
return request;
|
|
175
|
+
}
|
|
176
|
+
async listByIntegrationRequester(input) {
|
|
177
|
+
return withTenant({ tenantId: input.tenantId }, () => this.list({
|
|
178
|
+
where: {
|
|
179
|
+
tenantId: input.tenantId,
|
|
180
|
+
integrationId: input.integrationId,
|
|
181
|
+
requesterId: input.requesterId
|
|
182
|
+
},
|
|
183
|
+
orderBy: "createdAt ASC"
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
186
|
+
async transitionStatus(tenantId, requestId, transition) {
|
|
187
|
+
const request = await withTenant({ tenantId }, () => this.findOne({ where: {
|
|
188
|
+
id: requestId,
|
|
189
|
+
tenantId
|
|
190
|
+
} }));
|
|
191
|
+
if (!request) throw new Error(`DevelopmentRequest ${requestId} not found`);
|
|
192
|
+
const fromStatus = request.status;
|
|
193
|
+
request.status = transition.status;
|
|
194
|
+
await withTenant({ tenantId: request.tenantId }, () => request.save());
|
|
195
|
+
await this.recordHistory(request, transition, fromStatus);
|
|
196
|
+
return request;
|
|
197
|
+
}
|
|
198
|
+
async listForProject(tenantId, projectId, status) {
|
|
199
|
+
return withTenant({ tenantId }, () => this.list({
|
|
200
|
+
where: status ? {
|
|
201
|
+
tenantId,
|
|
202
|
+
projectId,
|
|
203
|
+
status
|
|
204
|
+
} : {
|
|
205
|
+
tenantId,
|
|
206
|
+
projectId
|
|
207
|
+
},
|
|
208
|
+
orderBy: "createdAt ASC"
|
|
209
|
+
}));
|
|
210
|
+
}
|
|
211
|
+
async recordHistory(request, transition, fromStatus = "") {
|
|
212
|
+
const histories = await DevelopmentRequestHistoryCollection.create(this.options);
|
|
213
|
+
const entry = await withTenant({ tenantId: request.tenantId }, () => histories.create({
|
|
214
|
+
tenantId: request.tenantId,
|
|
215
|
+
requestId: request.id,
|
|
216
|
+
fromStatus,
|
|
217
|
+
toStatus: transition.status,
|
|
218
|
+
actorType: transition.actorType,
|
|
219
|
+
actorId: transition.actorId ?? "",
|
|
220
|
+
note: transition.note ?? ""
|
|
221
|
+
}));
|
|
222
|
+
await withTenant({ tenantId: request.tenantId }, () => entry.save());
|
|
223
|
+
}
|
|
224
|
+
};
|
|
13
225
|
//#endregion
|
|
14
226
|
//#region src/collections/Issues.ts
|
|
15
227
|
var Issues_exports = /* @__PURE__ */ __exportAll({ IssueCollection: () => IssueCollection });
|
|
@@ -196,13 +408,213 @@ var IssueCollection = class extends SmrtCollection {
|
|
|
196
408
|
}
|
|
197
409
|
};
|
|
198
410
|
//#endregion
|
|
411
|
+
//#region src/models/ProjectIntegrationAudit.ts
|
|
412
|
+
var __defProp$7 = Object.defineProperty;
|
|
413
|
+
var __getOwnPropDesc$7 = Object.getOwnPropertyDescriptor;
|
|
414
|
+
var __decorateClass$7 = (decorators, target, key, kind) => {
|
|
415
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$7(target, key) : target;
|
|
416
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
417
|
+
if (kind && result) __defProp$7(target, key, result);
|
|
418
|
+
return result;
|
|
419
|
+
};
|
|
420
|
+
var ProjectIntegrationAudit = class extends SmrtObject {
|
|
421
|
+
tenantId = "";
|
|
422
|
+
integrationId = "";
|
|
423
|
+
action = "created";
|
|
424
|
+
note = null;
|
|
425
|
+
constructor(options = {}) {
|
|
426
|
+
super(options);
|
|
427
|
+
if (options.tenantId !== void 0) this.tenantId = options.tenantId;
|
|
428
|
+
if (options.integrationId !== void 0) this.integrationId = options.integrationId;
|
|
429
|
+
if (options.action !== void 0) this.action = options.action;
|
|
430
|
+
if (options.note !== void 0) this.note = options.note;
|
|
431
|
+
}
|
|
432
|
+
};
|
|
433
|
+
__decorateClass$7([tenantId()], ProjectIntegrationAudit.prototype, "tenantId", 2);
|
|
434
|
+
__decorateClass$7([foreignKey("ProjectIntegration", { required: true })], ProjectIntegrationAudit.prototype, "integrationId", 2);
|
|
435
|
+
ProjectIntegrationAudit = __decorateClass$7([TenantScoped({ mode: "required" }), smrt({
|
|
436
|
+
tableName: "project_integration_audits",
|
|
437
|
+
api: false,
|
|
438
|
+
mcp: false,
|
|
439
|
+
cli: false
|
|
440
|
+
})], ProjectIntegrationAudit);
|
|
441
|
+
//#endregion
|
|
442
|
+
//#region src/collections/ProjectIntegrationAudits.ts
|
|
443
|
+
var ProjectIntegrationAuditCollection = class extends SmrtCollection {
|
|
444
|
+
static _itemClass = ProjectIntegrationAudit;
|
|
445
|
+
async listForIntegration(tenantId, integrationId) {
|
|
446
|
+
return withTenant({ tenantId }, () => this.list({
|
|
447
|
+
where: {
|
|
448
|
+
tenantId,
|
|
449
|
+
integrationId
|
|
450
|
+
},
|
|
451
|
+
orderBy: "createdAt ASC"
|
|
452
|
+
}));
|
|
453
|
+
}
|
|
454
|
+
};
|
|
455
|
+
//#endregion
|
|
456
|
+
//#region src/models/ProjectIntegration.ts
|
|
457
|
+
var __defProp$6 = Object.defineProperty;
|
|
458
|
+
var __getOwnPropDesc$6 = Object.getOwnPropertyDescriptor;
|
|
459
|
+
var __decorateClass$6 = (decorators, target, key, kind) => {
|
|
460
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$6(target, key) : target;
|
|
461
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
462
|
+
if (kind && result) __defProp$6(target, key, result);
|
|
463
|
+
return result;
|
|
464
|
+
};
|
|
465
|
+
var ProjectIntegration = class extends SmrtObject {
|
|
466
|
+
tenantId = "";
|
|
467
|
+
projectId = "";
|
|
468
|
+
name = "";
|
|
469
|
+
credentialHash = "";
|
|
470
|
+
capabilities = [];
|
|
471
|
+
status = "active";
|
|
472
|
+
revokedAt = null;
|
|
473
|
+
constructor(options = {}) {
|
|
474
|
+
super(options);
|
|
475
|
+
if (options.tenantId !== void 0) this.tenantId = options.tenantId;
|
|
476
|
+
if (options.projectId !== void 0) this.projectId = options.projectId;
|
|
477
|
+
if (options.name !== void 0) this.name = options.name;
|
|
478
|
+
if (options.credentialHash !== void 0) this.credentialHash = options.credentialHash;
|
|
479
|
+
if (options.capabilities !== void 0) this.capabilities = [...options.capabilities];
|
|
480
|
+
if (options.status !== void 0) this.status = options.status;
|
|
481
|
+
if (options.revokedAt !== void 0) this.revokedAt = options.revokedAt;
|
|
482
|
+
}
|
|
483
|
+
hasCapability(capability) {
|
|
484
|
+
return this.capabilities.includes(capability);
|
|
485
|
+
}
|
|
486
|
+
isActive() {
|
|
487
|
+
return this.status === "active" && this.revokedAt === null;
|
|
488
|
+
}
|
|
489
|
+
};
|
|
490
|
+
__decorateClass$6([tenantId()], ProjectIntegration.prototype, "tenantId", 2);
|
|
491
|
+
__decorateClass$6([field({ sensitive: true })], ProjectIntegration.prototype, "credentialHash", 2);
|
|
492
|
+
ProjectIntegration = __decorateClass$6([TenantScoped({ mode: "required" }), smrt({
|
|
493
|
+
tableName: "project_integrations",
|
|
494
|
+
conflictColumns: [
|
|
495
|
+
"tenant_id",
|
|
496
|
+
"project_id",
|
|
497
|
+
"name"
|
|
498
|
+
],
|
|
499
|
+
api: { include: ["list", "get"] },
|
|
500
|
+
mcp: { include: ["list", "get"] },
|
|
501
|
+
cli: { include: ["list", "get"] }
|
|
502
|
+
})], ProjectIntegration);
|
|
503
|
+
//#endregion
|
|
504
|
+
//#region src/collections/ProjectIntegrations.ts
|
|
505
|
+
var ProjectIntegrationCollection = class extends SmrtCollection {
|
|
506
|
+
static _itemClass = ProjectIntegration;
|
|
507
|
+
async provision(input) {
|
|
508
|
+
const credential = issueProjectIntegrationCredential(input.tenantId);
|
|
509
|
+
const integration = await withTenant({ tenantId: input.tenantId }, () => this.create({
|
|
510
|
+
tenantId: input.tenantId,
|
|
511
|
+
projectId: input.projectId,
|
|
512
|
+
name: input.name,
|
|
513
|
+
capabilities: [...input.capabilities],
|
|
514
|
+
credentialHash: hashProjectIntegrationCredential(credential),
|
|
515
|
+
status: "active",
|
|
516
|
+
revokedAt: null
|
|
517
|
+
}));
|
|
518
|
+
await withTenant({ tenantId: input.tenantId }, () => integration.save());
|
|
519
|
+
await this.recordAudit(integration, "created");
|
|
520
|
+
return {
|
|
521
|
+
integration,
|
|
522
|
+
credential
|
|
523
|
+
};
|
|
524
|
+
}
|
|
525
|
+
async rotate(tenantId, integrationId) {
|
|
526
|
+
const integration = await this.requireActive(tenantId, integrationId);
|
|
527
|
+
const credential = issueProjectIntegrationCredential(integration.tenantId);
|
|
528
|
+
integration.credentialHash = hashProjectIntegrationCredential(credential);
|
|
529
|
+
await withTenant({ tenantId: integration.tenantId }, () => integration.save());
|
|
530
|
+
await this.recordAudit(integration, "rotated");
|
|
531
|
+
return {
|
|
532
|
+
integration,
|
|
533
|
+
credential
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
async revoke(tenantId, integrationId) {
|
|
537
|
+
const integration = await this.requireExisting(tenantId, integrationId);
|
|
538
|
+
integration.status = "revoked";
|
|
539
|
+
integration.revokedAt = /* @__PURE__ */ new Date();
|
|
540
|
+
integration.credentialHash = "";
|
|
541
|
+
await withTenant({ tenantId: integration.tenantId }, () => integration.save());
|
|
542
|
+
await this.recordAudit(integration, "revoked");
|
|
543
|
+
return integration;
|
|
544
|
+
}
|
|
545
|
+
async authenticate(credential) {
|
|
546
|
+
const tenantId = parseCredentialTenant(credential);
|
|
547
|
+
if (!tenantId) return null;
|
|
548
|
+
const credentialHash = hashProjectIntegrationCredential(credential);
|
|
549
|
+
const integration = (await withTenant({ tenantId }, () => this.list({ where: {
|
|
550
|
+
tenantId,
|
|
551
|
+
status: "active"
|
|
552
|
+
} }))).find((candidate) => candidate.credentialHash === credentialHash);
|
|
553
|
+
return integration?.isActive() ? integration : null;
|
|
554
|
+
}
|
|
555
|
+
async listForProject(tenantId, projectId) {
|
|
556
|
+
return withTenant({ tenantId }, () => this.list({
|
|
557
|
+
where: {
|
|
558
|
+
tenantId,
|
|
559
|
+
projectId
|
|
560
|
+
},
|
|
561
|
+
orderBy: "name ASC"
|
|
562
|
+
}));
|
|
563
|
+
}
|
|
564
|
+
async findActive(tenantId, integrationId) {
|
|
565
|
+
const integration = await withTenant({ tenantId }, () => this.findOne({ where: {
|
|
566
|
+
id: integrationId,
|
|
567
|
+
tenantId
|
|
568
|
+
} }));
|
|
569
|
+
return integration?.isActive() ? integration : null;
|
|
570
|
+
}
|
|
571
|
+
async requireExisting(tenantId, integrationId) {
|
|
572
|
+
const integration = await withTenant({ tenantId }, () => this.findOne({ where: {
|
|
573
|
+
id: integrationId,
|
|
574
|
+
tenantId
|
|
575
|
+
} }));
|
|
576
|
+
if (!integration) throw new Error(`ProjectIntegration ${integrationId} not found`);
|
|
577
|
+
return integration;
|
|
578
|
+
}
|
|
579
|
+
async requireActive(tenantId, integrationId) {
|
|
580
|
+
const integration = await this.requireExisting(tenantId, integrationId);
|
|
581
|
+
if (!integration.isActive()) throw new Error(`ProjectIntegration ${integrationId} is not active`);
|
|
582
|
+
return integration;
|
|
583
|
+
}
|
|
584
|
+
async recordAudit(integration, action) {
|
|
585
|
+
const audits = await ProjectIntegrationAuditCollection.create(this.options);
|
|
586
|
+
const entry = await withTenant({ tenantId: integration.tenantId }, () => audits.create({
|
|
587
|
+
tenantId: integration.tenantId,
|
|
588
|
+
integrationId: integration.id,
|
|
589
|
+
action
|
|
590
|
+
}));
|
|
591
|
+
await withTenant({ tenantId: integration.tenantId }, () => entry.save());
|
|
592
|
+
}
|
|
593
|
+
};
|
|
594
|
+
function hashProjectIntegrationCredential(credential) {
|
|
595
|
+
return createHash("sha256").update(credential).digest("hex");
|
|
596
|
+
}
|
|
597
|
+
function issueProjectIntegrationCredential(tenantId) {
|
|
598
|
+
return `smrt_pi_${Buffer.from(tenantId, "utf8").toString("base64url")}_${randomBytes(24).toString("hex")}`;
|
|
599
|
+
}
|
|
600
|
+
function parseCredentialTenant(credential) {
|
|
601
|
+
const match = /^smrt_pi_([A-Za-z0-9_-]+)_[a-f0-9]{48}$/.exec(credential);
|
|
602
|
+
if (!match) return null;
|
|
603
|
+
try {
|
|
604
|
+
const tenantId = Buffer.from(match[1], "base64url").toString("utf8");
|
|
605
|
+
return tenantId.length > 0 ? tenantId : null;
|
|
606
|
+
} catch {
|
|
607
|
+
return null;
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
//#endregion
|
|
199
611
|
//#region src/models/Project.ts
|
|
200
|
-
var __defProp$
|
|
201
|
-
var __getOwnPropDesc$
|
|
202
|
-
var __decorateClass$
|
|
203
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
612
|
+
var __defProp$5 = Object.defineProperty;
|
|
613
|
+
var __getOwnPropDesc$5 = Object.getOwnPropertyDescriptor;
|
|
614
|
+
var __decorateClass$5 = (decorators, target, key, kind) => {
|
|
615
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$5(target, key) : target;
|
|
204
616
|
for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
205
|
-
if (kind && result) __defProp$
|
|
617
|
+
if (kind && result) __defProp$5(target, key, result);
|
|
206
618
|
return result;
|
|
207
619
|
};
|
|
208
620
|
var Project = class extends SmrtObject {
|
|
@@ -459,8 +871,8 @@ var Project = class extends SmrtObject {
|
|
|
459
871
|
return await (await ProjectCollection.create(options)).findByTitle(title);
|
|
460
872
|
}
|
|
461
873
|
};
|
|
462
|
-
__decorateClass$
|
|
463
|
-
Project = __decorateClass$
|
|
874
|
+
__decorateClass$5([tenantId({ nullable: true })], Project.prototype, "tenantId", 2);
|
|
875
|
+
Project = __decorateClass$5([TenantScoped({ mode: "optional" }), smrt({
|
|
464
876
|
api: { include: [
|
|
465
877
|
"list",
|
|
466
878
|
"get",
|
|
@@ -849,12 +1261,12 @@ var PullRequestCollection = class extends SmrtCollection {
|
|
|
849
1261
|
};
|
|
850
1262
|
//#endregion
|
|
851
1263
|
//#region src/models/Repository.ts
|
|
852
|
-
var __defProp$
|
|
853
|
-
var __getOwnPropDesc$
|
|
854
|
-
var __decorateClass$
|
|
855
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
1264
|
+
var __defProp$4 = Object.defineProperty;
|
|
1265
|
+
var __getOwnPropDesc$4 = Object.getOwnPropertyDescriptor;
|
|
1266
|
+
var __decorateClass$4 = (decorators, target, key, kind) => {
|
|
1267
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$4(target, key) : target;
|
|
856
1268
|
for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
857
|
-
if (kind && result) __defProp$
|
|
1269
|
+
if (kind && result) __defProp$4(target, key, result);
|
|
858
1270
|
return result;
|
|
859
1271
|
};
|
|
860
1272
|
var Repository = class extends SmrtObject {
|
|
@@ -1093,8 +1505,8 @@ var Repository = class extends SmrtObject {
|
|
|
1093
1505
|
return await (await RepositoryCollection.create(options)).findByFullName(owner, name);
|
|
1094
1506
|
}
|
|
1095
1507
|
};
|
|
1096
|
-
__decorateClass$
|
|
1097
|
-
Repository = __decorateClass$
|
|
1508
|
+
__decorateClass$4([tenantId({ nullable: true })], Repository.prototype, "tenantId", 2);
|
|
1509
|
+
Repository = __decorateClass$4([TenantScoped({ mode: "optional" }), smrt({
|
|
1098
1510
|
api: { include: [
|
|
1099
1511
|
"list",
|
|
1100
1512
|
"get",
|
|
@@ -1247,14 +1659,60 @@ var RepositoryCollection = class extends SmrtCollection {
|
|
|
1247
1659
|
}
|
|
1248
1660
|
};
|
|
1249
1661
|
//#endregion
|
|
1662
|
+
//#region src/managed-client.ts
|
|
1663
|
+
var ManagedProjectClient = class ManagedProjectClient {
|
|
1664
|
+
#db;
|
|
1665
|
+
#integration;
|
|
1666
|
+
#requesterId;
|
|
1667
|
+
constructor(integration, options) {
|
|
1668
|
+
this.#integration = integration;
|
|
1669
|
+
this.#db = options.db;
|
|
1670
|
+
this.#requesterId = options.requesterId;
|
|
1671
|
+
}
|
|
1672
|
+
static async authenticate(credential, options) {
|
|
1673
|
+
if (!options.requesterId.trim()) throw new Error("Managed project client requires a stable requesterId");
|
|
1674
|
+
const integration = await (await ProjectIntegrationCollection.create({ db: options.db })).authenticate(credential);
|
|
1675
|
+
if (!integration) throw new Error("Invalid or revoked project integration credential");
|
|
1676
|
+
return new ManagedProjectClient(integration, options);
|
|
1677
|
+
}
|
|
1678
|
+
async createRequest(input) {
|
|
1679
|
+
const integration = await this.#requireCapability("requests:create");
|
|
1680
|
+
if (!input.description.trim()) throw new Error("Managed request creation requires a description");
|
|
1681
|
+
return (await DevelopmentRequestCollection.create({ db: this.#db })).createManaged({
|
|
1682
|
+
...input,
|
|
1683
|
+
tenantId: integration.tenantId,
|
|
1684
|
+
projectId: integration.projectId,
|
|
1685
|
+
integrationId: integration.id,
|
|
1686
|
+
requesterId: this.#requesterId
|
|
1687
|
+
});
|
|
1688
|
+
}
|
|
1689
|
+
async listRequests() {
|
|
1690
|
+
const integration = await this.#requireCapability("requests:read-own");
|
|
1691
|
+
return (await DevelopmentRequestCollection.create({ db: this.#db })).listByIntegrationRequester({
|
|
1692
|
+
tenantId: integration.tenantId,
|
|
1693
|
+
integrationId: integration.id,
|
|
1694
|
+
requesterId: this.#requesterId
|
|
1695
|
+
});
|
|
1696
|
+
}
|
|
1697
|
+
async #requireCapability(capability) {
|
|
1698
|
+
const tenantId = this.#integration.tenantId;
|
|
1699
|
+
const integrationId = this.#integration.id;
|
|
1700
|
+
if (!tenantId || !integrationId) throw new Error("Invalid or revoked project integration credential");
|
|
1701
|
+
const integration = await (await ProjectIntegrationCollection.create({ db: this.#db })).findActive(tenantId, integrationId);
|
|
1702
|
+
if (!integration) throw new Error("Invalid or revoked project integration credential");
|
|
1703
|
+
if (!integration.hasCapability(capability)) throw new Error(`Managed project integration lacks required capability '${capability}'`);
|
|
1704
|
+
return integration;
|
|
1705
|
+
}
|
|
1706
|
+
};
|
|
1707
|
+
//#endregion
|
|
1250
1708
|
//#region src/models/Comment.ts
|
|
1251
1709
|
var Comment_exports = /* @__PURE__ */ __exportAll({ Comment: () => Comment });
|
|
1252
|
-
var __defProp$
|
|
1253
|
-
var __getOwnPropDesc$
|
|
1254
|
-
var __decorateClass$
|
|
1255
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
1710
|
+
var __defProp$3 = Object.defineProperty;
|
|
1711
|
+
var __getOwnPropDesc$3 = Object.getOwnPropertyDescriptor;
|
|
1712
|
+
var __decorateClass$3 = (decorators, target, key, kind) => {
|
|
1713
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$3(target, key) : target;
|
|
1256
1714
|
for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
1257
|
-
if (kind && result) __defProp$
|
|
1715
|
+
if (kind && result) __defProp$3(target, key, result);
|
|
1258
1716
|
return result;
|
|
1259
1717
|
};
|
|
1260
1718
|
var logger = createLogger({ level: "info" });
|
|
@@ -1359,21 +1817,182 @@ var Comment = class extends SmrtObject {
|
|
|
1359
1817
|
return "neutral";
|
|
1360
1818
|
}
|
|
1361
1819
|
};
|
|
1362
|
-
__decorateClass$
|
|
1363
|
-
__decorateClass$
|
|
1364
|
-
Comment = __decorateClass$
|
|
1820
|
+
__decorateClass$3([tenantId({ nullable: true })], Comment.prototype, "tenantId", 2);
|
|
1821
|
+
__decorateClass$3([foreignKey("Issue")], Comment.prototype, "issueId", 2);
|
|
1822
|
+
Comment = __decorateClass$3([TenantScoped({ mode: "optional" }), smrt({
|
|
1365
1823
|
api: { include: ["list", "get"] },
|
|
1366
1824
|
mcp: { include: ["list", "get"] },
|
|
1367
1825
|
cli: { include: ["list", "get"] }
|
|
1368
1826
|
})], Comment);
|
|
1369
1827
|
//#endregion
|
|
1828
|
+
//#region src/models/delivery-control-plane.ts
|
|
1829
|
+
var __defProp$2 = Object.defineProperty;
|
|
1830
|
+
var __getOwnPropDesc$2 = Object.getOwnPropertyDescriptor;
|
|
1831
|
+
var __decorateClass$2 = (decorators, target, key, kind) => {
|
|
1832
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$2(target, key) : target;
|
|
1833
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
1834
|
+
if (kind && result) __defProp$2(target, key, result);
|
|
1835
|
+
return result;
|
|
1836
|
+
};
|
|
1837
|
+
function parseProjectJson(value, fallback) {
|
|
1838
|
+
try {
|
|
1839
|
+
return JSON.parse(value);
|
|
1840
|
+
} catch {
|
|
1841
|
+
return fallback;
|
|
1842
|
+
}
|
|
1843
|
+
}
|
|
1844
|
+
var INTERNAL_SURFACES = {
|
|
1845
|
+
api: false,
|
|
1846
|
+
cli: false,
|
|
1847
|
+
mcp: false
|
|
1848
|
+
};
|
|
1849
|
+
var DevelopmentRequestWorkLink = class extends SmrtObject {
|
|
1850
|
+
tenantId = "";
|
|
1851
|
+
requestId = "";
|
|
1852
|
+
workItemType = "";
|
|
1853
|
+
workItemId = "";
|
|
1854
|
+
canonicalStatus = "";
|
|
1855
|
+
providerRef = "";
|
|
1856
|
+
metadata = "{}";
|
|
1857
|
+
lastProjectedAt = null;
|
|
1858
|
+
};
|
|
1859
|
+
__decorateClass$2([tenantId()], DevelopmentRequestWorkLink.prototype, "tenantId", 2);
|
|
1860
|
+
__decorateClass$2([foreignKey("DevelopmentRequest", { required: true })], DevelopmentRequestWorkLink.prototype, "requestId", 2);
|
|
1861
|
+
__decorateClass$2([field({ type: "text" })], DevelopmentRequestWorkLink.prototype, "workItemType", 2);
|
|
1862
|
+
__decorateClass$2([field({ type: "text" })], DevelopmentRequestWorkLink.prototype, "workItemId", 2);
|
|
1863
|
+
__decorateClass$2([field({ type: "text" })], DevelopmentRequestWorkLink.prototype, "canonicalStatus", 2);
|
|
1864
|
+
__decorateClass$2([field({ type: "text" })], DevelopmentRequestWorkLink.prototype, "providerRef", 2);
|
|
1865
|
+
__decorateClass$2([field({ type: "text" })], DevelopmentRequestWorkLink.prototype, "metadata", 2);
|
|
1866
|
+
DevelopmentRequestWorkLink = __decorateClass$2([TenantScoped({ mode: "required" }), smrt({
|
|
1867
|
+
tableName: "development_request_work_links",
|
|
1868
|
+
conflictColumns: [
|
|
1869
|
+
"request_id",
|
|
1870
|
+
"work_item_type",
|
|
1871
|
+
"work_item_id"
|
|
1872
|
+
],
|
|
1873
|
+
...INTERNAL_SURFACES
|
|
1874
|
+
})], DevelopmentRequestWorkLink);
|
|
1875
|
+
var ProjectDeliveryEvent = class extends SmrtObject {
|
|
1876
|
+
tenantId = "";
|
|
1877
|
+
integrationId = "";
|
|
1878
|
+
requestId = "";
|
|
1879
|
+
idempotencyKey = "";
|
|
1880
|
+
sequence = 0;
|
|
1881
|
+
type = "work_linked";
|
|
1882
|
+
payload = "{}";
|
|
1883
|
+
occurredAt = /* @__PURE__ */ new Date();
|
|
1884
|
+
deliveredAt = null;
|
|
1885
|
+
deliveryAttempts = 0;
|
|
1886
|
+
lastDeliveryError = "";
|
|
1887
|
+
};
|
|
1888
|
+
__decorateClass$2([tenantId()], ProjectDeliveryEvent.prototype, "tenantId", 2);
|
|
1889
|
+
__decorateClass$2([foreignKey("ProjectIntegration", { required: true })], ProjectDeliveryEvent.prototype, "integrationId", 2);
|
|
1890
|
+
__decorateClass$2([foreignKey("DevelopmentRequest", { required: true })], ProjectDeliveryEvent.prototype, "requestId", 2);
|
|
1891
|
+
__decorateClass$2([field({ type: "text" })], ProjectDeliveryEvent.prototype, "idempotencyKey", 2);
|
|
1892
|
+
__decorateClass$2([field({ type: "text" })], ProjectDeliveryEvent.prototype, "type", 2);
|
|
1893
|
+
__decorateClass$2([field({ type: "text" })], ProjectDeliveryEvent.prototype, "payload", 2);
|
|
1894
|
+
__decorateClass$2([field({ type: "text" })], ProjectDeliveryEvent.prototype, "lastDeliveryError", 2);
|
|
1895
|
+
ProjectDeliveryEvent = __decorateClass$2([TenantScoped({ mode: "required" }), smrt({
|
|
1896
|
+
tableName: "project_delivery_events",
|
|
1897
|
+
conflictColumns: ["integration_id", "idempotency_key"],
|
|
1898
|
+
...INTERNAL_SURFACES
|
|
1899
|
+
})], ProjectDeliveryEvent);
|
|
1900
|
+
var PreviewApproval = class extends SmrtObject {
|
|
1901
|
+
tenantId = "";
|
|
1902
|
+
requestId = "";
|
|
1903
|
+
previewId = "";
|
|
1904
|
+
previewUrl = "";
|
|
1905
|
+
status = "pending";
|
|
1906
|
+
decidedByRef = "";
|
|
1907
|
+
reason = "";
|
|
1908
|
+
createdAt = /* @__PURE__ */ new Date();
|
|
1909
|
+
decidedAt = null;
|
|
1910
|
+
staleAt = null;
|
|
1911
|
+
};
|
|
1912
|
+
__decorateClass$2([tenantId()], PreviewApproval.prototype, "tenantId", 2);
|
|
1913
|
+
__decorateClass$2([foreignKey("DevelopmentRequest", { required: true })], PreviewApproval.prototype, "requestId", 2);
|
|
1914
|
+
__decorateClass$2([field({ type: "text" })], PreviewApproval.prototype, "previewId", 2);
|
|
1915
|
+
__decorateClass$2([field({ type: "text" })], PreviewApproval.prototype, "previewUrl", 2);
|
|
1916
|
+
__decorateClass$2([field({ type: "text" })], PreviewApproval.prototype, "status", 2);
|
|
1917
|
+
__decorateClass$2([field({ type: "text" })], PreviewApproval.prototype, "decidedByRef", 2);
|
|
1918
|
+
__decorateClass$2([field({ type: "text" })], PreviewApproval.prototype, "reason", 2);
|
|
1919
|
+
PreviewApproval = __decorateClass$2([TenantScoped({ mode: "required" }), smrt({
|
|
1920
|
+
tableName: "preview_approvals",
|
|
1921
|
+
conflictColumns: ["request_id", "preview_id"],
|
|
1922
|
+
...INTERNAL_SURFACES
|
|
1923
|
+
})], PreviewApproval);
|
|
1924
|
+
var AssistanceRequest = class extends SmrtObject {
|
|
1925
|
+
tenantId = "";
|
|
1926
|
+
integrationId = "";
|
|
1927
|
+
requesterId = "";
|
|
1928
|
+
subject = "";
|
|
1929
|
+
applicationContext = "{}";
|
|
1930
|
+
conversation = "[]";
|
|
1931
|
+
evidence = "[]";
|
|
1932
|
+
classification = "unclassified";
|
|
1933
|
+
supportCaseId = "";
|
|
1934
|
+
developmentRequestId = "";
|
|
1935
|
+
deliveryHandoffLinkedAt = null;
|
|
1936
|
+
createdAt = /* @__PURE__ */ new Date();
|
|
1937
|
+
};
|
|
1938
|
+
__decorateClass$2([tenantId()], AssistanceRequest.prototype, "tenantId", 2);
|
|
1939
|
+
__decorateClass$2([foreignKey("ProjectIntegration", { required: true })], AssistanceRequest.prototype, "integrationId", 2);
|
|
1940
|
+
__decorateClass$2([field({ type: "text" })], AssistanceRequest.prototype, "requesterId", 2);
|
|
1941
|
+
__decorateClass$2([field({ type: "text" })], AssistanceRequest.prototype, "subject", 2);
|
|
1942
|
+
__decorateClass$2([field({ type: "text" })], AssistanceRequest.prototype, "applicationContext", 2);
|
|
1943
|
+
__decorateClass$2([field({ type: "text" })], AssistanceRequest.prototype, "conversation", 2);
|
|
1944
|
+
__decorateClass$2([field({ type: "text" })], AssistanceRequest.prototype, "evidence", 2);
|
|
1945
|
+
__decorateClass$2([field({ type: "text" })], AssistanceRequest.prototype, "classification", 2);
|
|
1946
|
+
__decorateClass$2([field({ type: "text" })], AssistanceRequest.prototype, "supportCaseId", 2);
|
|
1947
|
+
__decorateClass$2([field({ type: "text" })], AssistanceRequest.prototype, "developmentRequestId", 2);
|
|
1948
|
+
AssistanceRequest = __decorateClass$2([TenantScoped({ mode: "required" }), smrt({
|
|
1949
|
+
tableName: "assistance_requests",
|
|
1950
|
+
...INTERNAL_SURFACES
|
|
1951
|
+
})], AssistanceRequest);
|
|
1952
|
+
var AssistanceRequestEvent = class extends SmrtObject {
|
|
1953
|
+
tenantId = "";
|
|
1954
|
+
assistanceRequestId = "";
|
|
1955
|
+
priorClassification = "unclassified";
|
|
1956
|
+
resultingClassification = "unclassified";
|
|
1957
|
+
actorRef = "";
|
|
1958
|
+
reason = "";
|
|
1959
|
+
resultingLinks = "{}";
|
|
1960
|
+
occurredAt = /* @__PURE__ */ new Date();
|
|
1961
|
+
};
|
|
1962
|
+
__decorateClass$2([tenantId()], AssistanceRequestEvent.prototype, "tenantId", 2);
|
|
1963
|
+
__decorateClass$2([foreignKey("AssistanceRequest", { required: true })], AssistanceRequestEvent.prototype, "assistanceRequestId", 2);
|
|
1964
|
+
__decorateClass$2([field({ type: "text" })], AssistanceRequestEvent.prototype, "priorClassification", 2);
|
|
1965
|
+
__decorateClass$2([field({ type: "text" })], AssistanceRequestEvent.prototype, "resultingClassification", 2);
|
|
1966
|
+
__decorateClass$2([field({ type: "text" })], AssistanceRequestEvent.prototype, "actorRef", 2);
|
|
1967
|
+
__decorateClass$2([field({ type: "text" })], AssistanceRequestEvent.prototype, "reason", 2);
|
|
1968
|
+
__decorateClass$2([field({ type: "text" })], AssistanceRequestEvent.prototype, "resultingLinks", 2);
|
|
1969
|
+
AssistanceRequestEvent = __decorateClass$2([TenantScoped({ mode: "required" }), smrt({
|
|
1970
|
+
tableName: "assistance_request_events",
|
|
1971
|
+
...INTERNAL_SURFACES
|
|
1972
|
+
})], AssistanceRequestEvent);
|
|
1973
|
+
var DevelopmentRequestWorkLinkCollection = class extends SmrtCollection {
|
|
1974
|
+
static _itemClass = DevelopmentRequestWorkLink;
|
|
1975
|
+
};
|
|
1976
|
+
var ProjectDeliveryEventCollection = class extends SmrtCollection {
|
|
1977
|
+
static _itemClass = ProjectDeliveryEvent;
|
|
1978
|
+
};
|
|
1979
|
+
var PreviewApprovalCollection = class extends SmrtCollection {
|
|
1980
|
+
static _itemClass = PreviewApproval;
|
|
1981
|
+
};
|
|
1982
|
+
var AssistanceRequestCollection = class extends SmrtCollection {
|
|
1983
|
+
static _itemClass = AssistanceRequest;
|
|
1984
|
+
};
|
|
1985
|
+
var AssistanceRequestEventCollection = class extends SmrtCollection {
|
|
1986
|
+
static _itemClass = AssistanceRequestEvent;
|
|
1987
|
+
};
|
|
1988
|
+
//#endregion
|
|
1370
1989
|
//#region src/models/Label.ts
|
|
1371
|
-
var __defProp = Object.defineProperty;
|
|
1372
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
1373
|
-
var __decorateClass = (decorators, target, key, kind) => {
|
|
1374
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
1990
|
+
var __defProp$1 = Object.defineProperty;
|
|
1991
|
+
var __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor;
|
|
1992
|
+
var __decorateClass$1 = (decorators, target, key, kind) => {
|
|
1993
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1(target, key) : target;
|
|
1375
1994
|
for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
1376
|
-
if (kind && result) __defProp(target, key, result);
|
|
1995
|
+
if (kind && result) __defProp$1(target, key, result);
|
|
1377
1996
|
return result;
|
|
1378
1997
|
};
|
|
1379
1998
|
var Label = class extends SmrtObject {
|
|
@@ -1500,8 +2119,8 @@ var Label = class extends SmrtObject {
|
|
|
1500
2119
|
await this.save();
|
|
1501
2120
|
}
|
|
1502
2121
|
};
|
|
1503
|
-
__decorateClass([foreignKey("Repository")], Label.prototype, "repositoryId", 2);
|
|
1504
|
-
Label = __decorateClass([smrt({
|
|
2122
|
+
__decorateClass$1([foreignKey("Repository")], Label.prototype, "repositoryId", 2);
|
|
2123
|
+
Label = __decorateClass$1([smrt({
|
|
1505
2124
|
api: { include: [
|
|
1506
2125
|
"list",
|
|
1507
2126
|
"get",
|
|
@@ -1523,6 +2142,1027 @@ Label = __decorateClass([smrt({
|
|
|
1523
2142
|
] }
|
|
1524
2143
|
})], Label);
|
|
1525
2144
|
//#endregion
|
|
1526
|
-
|
|
2145
|
+
//#region src/models/service-evidence.ts
|
|
2146
|
+
var __defProp = Object.defineProperty;
|
|
2147
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
2148
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
2149
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
2150
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
2151
|
+
if (kind && result) __defProp(target, key, result);
|
|
2152
|
+
return result;
|
|
2153
|
+
};
|
|
2154
|
+
var FROZEN_FIELDS = [
|
|
2155
|
+
"tenantId",
|
|
2156
|
+
"caseId",
|
|
2157
|
+
"workRefType",
|
|
2158
|
+
"workRefId",
|
|
2159
|
+
"specialistId",
|
|
2160
|
+
"participantKind",
|
|
2161
|
+
"participantProfileId",
|
|
2162
|
+
"agentRef",
|
|
2163
|
+
"source",
|
|
2164
|
+
"description",
|
|
2165
|
+
"startedAt",
|
|
2166
|
+
"endedAt",
|
|
2167
|
+
"durationSeconds",
|
|
2168
|
+
"evidence",
|
|
2169
|
+
"correctionOfId"
|
|
2170
|
+
];
|
|
2171
|
+
var STATUS_TRANSITIONS = {
|
|
2172
|
+
draft: ["submitted", "rejected"],
|
|
2173
|
+
submitted: [
|
|
2174
|
+
"approved",
|
|
2175
|
+
"rejected",
|
|
2176
|
+
"draft"
|
|
2177
|
+
],
|
|
2178
|
+
approved: ["corrected"],
|
|
2179
|
+
rejected: ["draft", "submitted"],
|
|
2180
|
+
corrected: []
|
|
2181
|
+
};
|
|
2182
|
+
function frozenView(source) {
|
|
2183
|
+
const result = {};
|
|
2184
|
+
for (const key of FROZEN_FIELDS) {
|
|
2185
|
+
let value = source[key] ?? null;
|
|
2186
|
+
if ((key === "startedAt" || key === "endedAt") && value) {
|
|
2187
|
+
const date = value instanceof Date ? value : new Date(String(value));
|
|
2188
|
+
value = Number.isNaN(date.getTime()) ? String(value) : date.toISOString();
|
|
2189
|
+
}
|
|
2190
|
+
if (key === "durationSeconds") value = Number(value ?? 0);
|
|
2191
|
+
result[key] = value === "" ? null : value;
|
|
2192
|
+
}
|
|
2193
|
+
return JSON.stringify(result);
|
|
2194
|
+
}
|
|
2195
|
+
var loadedStatus = /* @__PURE__ */ new WeakMap();
|
|
2196
|
+
var chargeSnapshot = /* @__PURE__ */ new WeakMap();
|
|
2197
|
+
var compensationSnapshot = /* @__PURE__ */ new WeakMap();
|
|
2198
|
+
async function immutableCommercialSnapshot(object, fields) {
|
|
2199
|
+
if (!object.id) return null;
|
|
2200
|
+
try {
|
|
2201
|
+
const row = await object.db.get(object.tableName, { id: object.id });
|
|
2202
|
+
if (!row) return null;
|
|
2203
|
+
return JSON.stringify(Object.fromEntries(fields.map((key) => [key, row[key.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`)] ?? null])));
|
|
2204
|
+
} catch {
|
|
2205
|
+
return null;
|
|
2206
|
+
}
|
|
2207
|
+
}
|
|
2208
|
+
function commercialSnapshot(object, fields) {
|
|
2209
|
+
return JSON.stringify(Object.fromEntries(fields.map((key) => [key, object[key] ?? null])));
|
|
2210
|
+
}
|
|
2211
|
+
var CHARGE_FIELDS = [
|
|
2212
|
+
"timeEntryId",
|
|
2213
|
+
"amount",
|
|
2214
|
+
"currency",
|
|
2215
|
+
"pricingVersion",
|
|
2216
|
+
"strategy",
|
|
2217
|
+
"rateSnapshot",
|
|
2218
|
+
"sourceChargeRef"
|
|
2219
|
+
];
|
|
2220
|
+
var COMPENSATION_FIELDS = [
|
|
2221
|
+
"timeEntryId",
|
|
2222
|
+
"amount",
|
|
2223
|
+
"currency",
|
|
2224
|
+
"termsVersion",
|
|
2225
|
+
"rateSnapshot"
|
|
2226
|
+
];
|
|
2227
|
+
var ServiceTimeEntry = class extends SmrtObject {
|
|
2228
|
+
tenantId = null;
|
|
2229
|
+
caseId = null;
|
|
2230
|
+
workRefType = null;
|
|
2231
|
+
workRefId = null;
|
|
2232
|
+
specialistId = null;
|
|
2233
|
+
participantKind = "human";
|
|
2234
|
+
participantProfileId = null;
|
|
2235
|
+
agentRef = "";
|
|
2236
|
+
source = "manual";
|
|
2237
|
+
description = "";
|
|
2238
|
+
startedAt = null;
|
|
2239
|
+
endedAt = null;
|
|
2240
|
+
durationSeconds = 0;
|
|
2241
|
+
evidence = "[]";
|
|
2242
|
+
status = "draft";
|
|
2243
|
+
submittedAt = null;
|
|
2244
|
+
submittedByProfileId = null;
|
|
2245
|
+
approvedAt = null;
|
|
2246
|
+
approvedByProfileId = null;
|
|
2247
|
+
approvalPath = "";
|
|
2248
|
+
rejectedAt = null;
|
|
2249
|
+
rejectedByProfileId = null;
|
|
2250
|
+
rejectionReason = "";
|
|
2251
|
+
correctionOfId = null;
|
|
2252
|
+
metadata = "{}";
|
|
2253
|
+
getEvidence() {
|
|
2254
|
+
return parseProjectJson(this.evidence, []);
|
|
2255
|
+
}
|
|
2256
|
+
setEvidence(value) {
|
|
2257
|
+
this.evidence = JSON.stringify(value ?? []);
|
|
2258
|
+
}
|
|
2259
|
+
getMetadata() {
|
|
2260
|
+
return parseProjectJson(this.metadata, {});
|
|
2261
|
+
}
|
|
2262
|
+
setMetadata(value) {
|
|
2263
|
+
this.metadata = JSON.stringify(value ?? {});
|
|
2264
|
+
}
|
|
2265
|
+
durationHours() {
|
|
2266
|
+
return this.durationSeconds / 3600;
|
|
2267
|
+
}
|
|
2268
|
+
async initialize() {
|
|
2269
|
+
await super.initialize();
|
|
2270
|
+
if (await this.isSaved()) loadedStatus.set(this, this.status);
|
|
2271
|
+
return this;
|
|
2272
|
+
}
|
|
2273
|
+
async save() {
|
|
2274
|
+
const prior = await this.readPrior();
|
|
2275
|
+
if (prior && prior.status !== this.status && !STATUS_TRANSITIONS[prior.status].includes(this.status)) throw new Error(`ServiceTimeEntry ${this.id}: illegal status transition '${prior.status}' \u2192 '${this.status}'.`);
|
|
2276
|
+
if (prior && (prior.status === "approved" || prior.status === "corrected")) {
|
|
2277
|
+
if (frozenView(this) !== prior.frozen) throw new Error("Approved ServiceTimeEntry evidence is immutable; create a correction instead.");
|
|
2278
|
+
}
|
|
2279
|
+
const result = await super.save();
|
|
2280
|
+
loadedStatus.set(this, this.status);
|
|
2281
|
+
return result;
|
|
2282
|
+
}
|
|
2283
|
+
async readPrior() {
|
|
2284
|
+
if (!this.id) return null;
|
|
2285
|
+
try {
|
|
2286
|
+
const row = await this.db.get(this.tableName, { id: this.id });
|
|
2287
|
+
if (!row?.status) return null;
|
|
2288
|
+
const values = {};
|
|
2289
|
+
for (const key of FROZEN_FIELDS) values[key] = row[key.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`)];
|
|
2290
|
+
return {
|
|
2291
|
+
status: row.status,
|
|
2292
|
+
frozen: frozenView(values)
|
|
2293
|
+
};
|
|
2294
|
+
} catch {
|
|
2295
|
+
const status = loadedStatus.get(this);
|
|
2296
|
+
return status ? {
|
|
2297
|
+
status,
|
|
2298
|
+
frozen: frozenView(this)
|
|
2299
|
+
} : null;
|
|
2300
|
+
}
|
|
2301
|
+
}
|
|
2302
|
+
};
|
|
2303
|
+
__decorateClass([tenantId({ nullable: true })], ServiceTimeEntry.prototype, "tenantId", 2);
|
|
2304
|
+
__decorateClass([crossPackageRef("@happyvertical/smrt-support:SupportCase", { nullable: true })], ServiceTimeEntry.prototype, "caseId", 2);
|
|
2305
|
+
__decorateClass([field({
|
|
2306
|
+
type: "text",
|
|
2307
|
+
nullable: true
|
|
2308
|
+
})], ServiceTimeEntry.prototype, "workRefType", 2);
|
|
2309
|
+
__decorateClass([field({
|
|
2310
|
+
type: "text",
|
|
2311
|
+
nullable: true
|
|
2312
|
+
})], ServiceTimeEntry.prototype, "workRefId", 2);
|
|
2313
|
+
__decorateClass([crossPackageRef("@happyvertical/smrt-support:SupportSpecialist", { nullable: true })], ServiceTimeEntry.prototype, "specialistId", 2);
|
|
2314
|
+
__decorateClass([field({ type: "text" })], ServiceTimeEntry.prototype, "participantKind", 2);
|
|
2315
|
+
__decorateClass([crossPackageRef("@happyvertical/smrt-profiles:Profile", { nullable: true })], ServiceTimeEntry.prototype, "participantProfileId", 2);
|
|
2316
|
+
__decorateClass([field({ type: "text" })], ServiceTimeEntry.prototype, "agentRef", 2);
|
|
2317
|
+
__decorateClass([field({ type: "text" })], ServiceTimeEntry.prototype, "source", 2);
|
|
2318
|
+
__decorateClass([field({ type: "text" })], ServiceTimeEntry.prototype, "description", 2);
|
|
2319
|
+
__decorateClass([field({ type: "text" })], ServiceTimeEntry.prototype, "evidence", 2);
|
|
2320
|
+
__decorateClass([field({ type: "text" })], ServiceTimeEntry.prototype, "status", 2);
|
|
2321
|
+
__decorateClass([crossPackageRef("@happyvertical/smrt-profiles:Profile", { nullable: true })], ServiceTimeEntry.prototype, "submittedByProfileId", 2);
|
|
2322
|
+
__decorateClass([crossPackageRef("@happyvertical/smrt-profiles:Profile", { nullable: true })], ServiceTimeEntry.prototype, "approvedByProfileId", 2);
|
|
2323
|
+
__decorateClass([field({ type: "text" })], ServiceTimeEntry.prototype, "approvalPath", 2);
|
|
2324
|
+
__decorateClass([crossPackageRef("@happyvertical/smrt-profiles:Profile", { nullable: true })], ServiceTimeEntry.prototype, "rejectedByProfileId", 2);
|
|
2325
|
+
__decorateClass([field({ type: "text" })], ServiceTimeEntry.prototype, "rejectionReason", 2);
|
|
2326
|
+
__decorateClass([foreignKey("ServiceTimeEntry")], ServiceTimeEntry.prototype, "correctionOfId", 2);
|
|
2327
|
+
__decorateClass([field({ type: "text" })], ServiceTimeEntry.prototype, "metadata", 2);
|
|
2328
|
+
ServiceTimeEntry = __decorateClass([TenantScoped({ mode: "optional" }), smrt({
|
|
2329
|
+
tableName: "service_time_entries",
|
|
2330
|
+
api: { include: ["list", "get"] },
|
|
2331
|
+
cli: { include: ["list", "get"] },
|
|
2332
|
+
mcp: { include: ["list", "get"] }
|
|
2333
|
+
})], ServiceTimeEntry);
|
|
2334
|
+
var ServiceChargeSnapshot = class extends SmrtObject {
|
|
2335
|
+
tenantId = null;
|
|
2336
|
+
timeEntryId = "";
|
|
2337
|
+
amount = 0;
|
|
2338
|
+
currency = "USD";
|
|
2339
|
+
pricingVersion = "";
|
|
2340
|
+
strategy = "";
|
|
2341
|
+
rateSnapshot = "{}";
|
|
2342
|
+
sourceChargeRef = "";
|
|
2343
|
+
createdAt = /* @__PURE__ */ new Date();
|
|
2344
|
+
async initialize() {
|
|
2345
|
+
await super.initialize();
|
|
2346
|
+
if (await this.isSaved()) chargeSnapshot.set(this, commercialSnapshot(this, CHARGE_FIELDS));
|
|
2347
|
+
return this;
|
|
2348
|
+
}
|
|
2349
|
+
async save() {
|
|
2350
|
+
const current = commercialSnapshot(this, CHARGE_FIELDS);
|
|
2351
|
+
const prior = await immutableCommercialSnapshot(this, CHARGE_FIELDS) ?? chargeSnapshot.get(this) ?? null;
|
|
2352
|
+
if (prior && prior !== current) throw new Error("ServiceChargeSnapshot is immutable; append an upstream adjustment instead.");
|
|
2353
|
+
const result = await super.save();
|
|
2354
|
+
chargeSnapshot.set(this, current);
|
|
2355
|
+
return result;
|
|
2356
|
+
}
|
|
2357
|
+
};
|
|
2358
|
+
__decorateClass([tenantId({ nullable: true })], ServiceChargeSnapshot.prototype, "tenantId", 2);
|
|
2359
|
+
__decorateClass([foreignKey("ServiceTimeEntry", { required: true })], ServiceChargeSnapshot.prototype, "timeEntryId", 2);
|
|
2360
|
+
__decorateClass([field({ type: "text" })], ServiceChargeSnapshot.prototype, "currency", 2);
|
|
2361
|
+
__decorateClass([field({ type: "text" })], ServiceChargeSnapshot.prototype, "pricingVersion", 2);
|
|
2362
|
+
__decorateClass([field({ type: "text" })], ServiceChargeSnapshot.prototype, "strategy", 2);
|
|
2363
|
+
__decorateClass([field({ type: "text" })], ServiceChargeSnapshot.prototype, "rateSnapshot", 2);
|
|
2364
|
+
__decorateClass([field({ type: "text" })], ServiceChargeSnapshot.prototype, "sourceChargeRef", 2);
|
|
2365
|
+
ServiceChargeSnapshot = __decorateClass([TenantScoped({ mode: "optional" }), smrt({
|
|
2366
|
+
tableName: "service_charge_snapshots",
|
|
2367
|
+
conflictColumns: ["time_entry_id"],
|
|
2368
|
+
api: { include: ["list", "get"] },
|
|
2369
|
+
cli: { include: ["list", "get"] },
|
|
2370
|
+
mcp: { include: ["list", "get"] }
|
|
2371
|
+
})], ServiceChargeSnapshot);
|
|
2372
|
+
var ServiceCompensationSnapshot = class extends SmrtObject {
|
|
2373
|
+
tenantId = null;
|
|
2374
|
+
timeEntryId = "";
|
|
2375
|
+
amount = 0;
|
|
2376
|
+
currency = "USD";
|
|
2377
|
+
termsVersion = "";
|
|
2378
|
+
rateSnapshot = "{}";
|
|
2379
|
+
createdAt = /* @__PURE__ */ new Date();
|
|
2380
|
+
async initialize() {
|
|
2381
|
+
await super.initialize();
|
|
2382
|
+
if (await this.isSaved()) compensationSnapshot.set(this, commercialSnapshot(this, COMPENSATION_FIELDS));
|
|
2383
|
+
return this;
|
|
2384
|
+
}
|
|
2385
|
+
async save() {
|
|
2386
|
+
const current = commercialSnapshot(this, COMPENSATION_FIELDS);
|
|
2387
|
+
const prior = await immutableCommercialSnapshot(this, COMPENSATION_FIELDS) ?? compensationSnapshot.get(this) ?? null;
|
|
2388
|
+
if (prior && prior !== current) throw new Error("ServiceCompensationSnapshot is immutable; create explicit settlement evidence instead.");
|
|
2389
|
+
const result = await super.save();
|
|
2390
|
+
compensationSnapshot.set(this, current);
|
|
2391
|
+
return result;
|
|
2392
|
+
}
|
|
2393
|
+
};
|
|
2394
|
+
__decorateClass([tenantId({ nullable: true })], ServiceCompensationSnapshot.prototype, "tenantId", 2);
|
|
2395
|
+
__decorateClass([foreignKey("ServiceTimeEntry", { required: true })], ServiceCompensationSnapshot.prototype, "timeEntryId", 2);
|
|
2396
|
+
__decorateClass([field({ type: "text" })], ServiceCompensationSnapshot.prototype, "currency", 2);
|
|
2397
|
+
__decorateClass([field({ type: "text" })], ServiceCompensationSnapshot.prototype, "termsVersion", 2);
|
|
2398
|
+
__decorateClass([field({ type: "text" })], ServiceCompensationSnapshot.prototype, "rateSnapshot", 2);
|
|
2399
|
+
ServiceCompensationSnapshot = __decorateClass([TenantScoped({ mode: "optional" }), smrt({
|
|
2400
|
+
tableName: "service_compensation_snapshots",
|
|
2401
|
+
conflictColumns: ["time_entry_id"],
|
|
2402
|
+
api: { include: ["list", "get"] },
|
|
2403
|
+
cli: { include: ["list", "get"] },
|
|
2404
|
+
mcp: { include: ["list", "get"] }
|
|
2405
|
+
})], ServiceCompensationSnapshot);
|
|
2406
|
+
var ServiceTimeEntryCollection = class extends SmrtCollection {
|
|
2407
|
+
static _itemClass = ServiceTimeEntry;
|
|
2408
|
+
async forWork(workRefType, workRefId) {
|
|
2409
|
+
return this.list({
|
|
2410
|
+
where: {
|
|
2411
|
+
workRefType,
|
|
2412
|
+
workRefId
|
|
2413
|
+
},
|
|
2414
|
+
orderBy: "created_at ASC"
|
|
2415
|
+
});
|
|
2416
|
+
}
|
|
2417
|
+
async forCase(caseId) {
|
|
2418
|
+
return this.list({
|
|
2419
|
+
where: { caseId },
|
|
2420
|
+
orderBy: "created_at ASC"
|
|
2421
|
+
});
|
|
2422
|
+
}
|
|
2423
|
+
async forSpecialist(specialistId) {
|
|
2424
|
+
return this.list({
|
|
2425
|
+
where: { specialistId },
|
|
2426
|
+
orderBy: "created_at ASC"
|
|
2427
|
+
});
|
|
2428
|
+
}
|
|
2429
|
+
async pendingApproval() {
|
|
2430
|
+
return this.list({
|
|
2431
|
+
where: { status: "submitted" },
|
|
2432
|
+
orderBy: "submitted_at ASC"
|
|
2433
|
+
});
|
|
2434
|
+
}
|
|
2435
|
+
};
|
|
2436
|
+
var ServiceChargeSnapshotCollection = class extends SmrtCollection {
|
|
2437
|
+
static _itemClass = ServiceChargeSnapshot;
|
|
2438
|
+
};
|
|
2439
|
+
var ServiceCompensationSnapshotCollection = class extends SmrtCollection {
|
|
2440
|
+
static _itemClass = ServiceCompensationSnapshot;
|
|
2441
|
+
};
|
|
2442
|
+
//#endregion
|
|
2443
|
+
//#region src/services/delivery-service.ts
|
|
2444
|
+
var ProjectDeliveryService = class ProjectDeliveryService {
|
|
2445
|
+
constructor(integrations, requests, events, approvals, workAdapter, approvalPolicy) {
|
|
2446
|
+
this.integrations = integrations;
|
|
2447
|
+
this.requests = requests;
|
|
2448
|
+
this.events = events;
|
|
2449
|
+
this.approvals = approvals;
|
|
2450
|
+
this.workAdapter = workAdapter;
|
|
2451
|
+
this.approvalPolicy = approvalPolicy;
|
|
2452
|
+
}
|
|
2453
|
+
integrations;
|
|
2454
|
+
requests;
|
|
2455
|
+
events;
|
|
2456
|
+
approvals;
|
|
2457
|
+
workAdapter;
|
|
2458
|
+
approvalPolicy;
|
|
2459
|
+
static async create(options = {}, dependencies = {}) {
|
|
2460
|
+
const integrations = await ProjectIntegrationCollection.create(options);
|
|
2461
|
+
const sharedOptions = {
|
|
2462
|
+
...options,
|
|
2463
|
+
db: integrations.db
|
|
2464
|
+
};
|
|
2465
|
+
const [requests, events, approvals] = await Promise.all([
|
|
2466
|
+
DevelopmentRequestCollection.create(sharedOptions),
|
|
2467
|
+
ProjectDeliveryEventCollection.create(sharedOptions),
|
|
2468
|
+
PreviewApprovalCollection.create(sharedOptions)
|
|
2469
|
+
]);
|
|
2470
|
+
return new ProjectDeliveryService(integrations, requests, events, approvals, dependencies.workAdapter, dependencies.approvalPolicy);
|
|
2471
|
+
}
|
|
2472
|
+
async record(input) {
|
|
2473
|
+
const integration = await requireActiveIntegrationCapability(this.integrations, input.integration, "delivery:write");
|
|
2474
|
+
if (!input.idempotencyKey.trim()) throw new Error("Delivery event idempotencyKey is required.");
|
|
2475
|
+
const existing = (await withTenant({ tenantId: integration.tenantId }, () => this.events.list({
|
|
2476
|
+
where: {
|
|
2477
|
+
integrationId: integration.id,
|
|
2478
|
+
idempotencyKey: input.idempotencyKey
|
|
2479
|
+
},
|
|
2480
|
+
limit: 1
|
|
2481
|
+
})))[0];
|
|
2482
|
+
if (existing) {
|
|
2483
|
+
await this.applySideEffects(integration, existing);
|
|
2484
|
+
return existing;
|
|
2485
|
+
}
|
|
2486
|
+
const request = await this.requestForIntegration(integration, input.requestId);
|
|
2487
|
+
const event = await withTenant({ tenantId: integration.tenantId }, () => this.events.create({
|
|
2488
|
+
tenantId: integration.tenantId,
|
|
2489
|
+
integrationId: requiredId$2(integration.id, "Project Integration"),
|
|
2490
|
+
requestId: input.requestId,
|
|
2491
|
+
idempotencyKey: input.idempotencyKey,
|
|
2492
|
+
sequence: input.sequence,
|
|
2493
|
+
type: input.type,
|
|
2494
|
+
payload: JSON.stringify(input.payload),
|
|
2495
|
+
occurredAt: input.occurredAt ?? /* @__PURE__ */ new Date()
|
|
2496
|
+
}));
|
|
2497
|
+
await withTenant({ tenantId: integration.tenantId }, () => event.save());
|
|
2498
|
+
await this.applySideEffects(integration, event, request);
|
|
2499
|
+
return event;
|
|
2500
|
+
}
|
|
2501
|
+
async applySideEffects(integration, event, loadedRequest) {
|
|
2502
|
+
const request = loadedRequest ?? await this.requestForIntegration(integration, event.requestId);
|
|
2503
|
+
const payload = parseProjectJson(event.payload, {});
|
|
2504
|
+
if (event.type === "preview") await this.upsertPreview(request, payload);
|
|
2505
|
+
if ((event.type === "completed" || event.type === "deployment" || event.type === "rejected") && !await this.isLatestTerminalEvent(event)) return;
|
|
2506
|
+
if ((event.type === "completed" || event.type === "deployment") && request.status !== "completed") await this.requests.transitionStatus(request.tenantId, event.requestId, {
|
|
2507
|
+
status: "completed",
|
|
2508
|
+
actorType: "integration",
|
|
2509
|
+
actorId: integration.id ?? "",
|
|
2510
|
+
note: event.type
|
|
2511
|
+
});
|
|
2512
|
+
if (event.type === "rejected" && request.status !== "declined") await this.requests.transitionStatus(request.tenantId, event.requestId, {
|
|
2513
|
+
status: "declined",
|
|
2514
|
+
actorType: "integration",
|
|
2515
|
+
actorId: integration.id ?? "",
|
|
2516
|
+
note: String(payload.reason ?? "Delivery rejected")
|
|
2517
|
+
});
|
|
2518
|
+
}
|
|
2519
|
+
async listForIntegration(integration, requestId) {
|
|
2520
|
+
const active = await requireActiveIntegrationCapability(this.integrations, integration, "delivery:read");
|
|
2521
|
+
await this.requestForIntegration(active, requestId);
|
|
2522
|
+
return withTenant({ tenantId: active.tenantId }, () => this.events.list({
|
|
2523
|
+
where: {
|
|
2524
|
+
integrationId: active.id,
|
|
2525
|
+
requestId
|
|
2526
|
+
},
|
|
2527
|
+
orderBy: "sequence ASC"
|
|
2528
|
+
}));
|
|
2529
|
+
}
|
|
2530
|
+
async deliverPending(sender, tenantId, integrationId) {
|
|
2531
|
+
const pending = await withTenant({ tenantId }, () => this.events.list({
|
|
2532
|
+
where: integrationId ? {
|
|
2533
|
+
integrationId,
|
|
2534
|
+
deliveredAt: null
|
|
2535
|
+
} : { deliveredAt: null },
|
|
2536
|
+
orderBy: "sequence ASC"
|
|
2537
|
+
}));
|
|
2538
|
+
for (const event of pending) {
|
|
2539
|
+
if (!await this.integrations.findActive(tenantId, event.integrationId)) continue;
|
|
2540
|
+
event.deliveryAttempts += 1;
|
|
2541
|
+
try {
|
|
2542
|
+
await sender.send(event);
|
|
2543
|
+
event.deliveredAt = /* @__PURE__ */ new Date();
|
|
2544
|
+
event.lastDeliveryError = "";
|
|
2545
|
+
} catch (error) {
|
|
2546
|
+
event.lastDeliveryError = error instanceof Error ? error.message : String(error);
|
|
2547
|
+
}
|
|
2548
|
+
await withTenant({ tenantId }, () => event.save());
|
|
2549
|
+
}
|
|
2550
|
+
}
|
|
2551
|
+
async replay(sender, integration, afterSequence = -1) {
|
|
2552
|
+
const active = await requireActiveIntegrationCapability(this.integrations, integration, "delivery:read");
|
|
2553
|
+
const events = (await withTenant({ tenantId: active.tenantId }, () => this.events.list({
|
|
2554
|
+
where: { integrationId: active.id },
|
|
2555
|
+
orderBy: "sequence ASC"
|
|
2556
|
+
}))).filter((event) => event.sequence > afterSequence);
|
|
2557
|
+
for (const event of events) await sender.send(event);
|
|
2558
|
+
}
|
|
2559
|
+
async decidePreview(integration, preview, input) {
|
|
2560
|
+
const active = await requireActiveIntegrationCapability(this.integrations, integration, "previews:approve");
|
|
2561
|
+
if (preview.tenantId !== active.tenantId) throw new Error("Preview is outside this Project Integration tenant.");
|
|
2562
|
+
if (preview.status === "stale") throw new Error("Stale previews cannot be approved.");
|
|
2563
|
+
if (preview.status !== "pending") return preview;
|
|
2564
|
+
const request = await this.requestForIntegration(active, preview.requestId);
|
|
2565
|
+
if (this.approvalPolicy && !await this.approvalPolicy.canApprove({
|
|
2566
|
+
integration: active,
|
|
2567
|
+
requestId: preview.requestId,
|
|
2568
|
+
previewId: preview.previewId
|
|
2569
|
+
})) throw new Error("Preview approval denied by policy.");
|
|
2570
|
+
if (!this.workAdapter?.requestApproval) throw new Error("Control-plane approval adapter is not configured.");
|
|
2571
|
+
await this.workAdapter.requestApproval({
|
|
2572
|
+
request,
|
|
2573
|
+
previewId: preview.previewId,
|
|
2574
|
+
idempotencyKey: `preview-approval:${requiredId$2(preview.id, "Preview Approval")}`,
|
|
2575
|
+
approved: input.approved,
|
|
2576
|
+
reason: input.reason
|
|
2577
|
+
});
|
|
2578
|
+
preview.status = input.approved ? "approved" : "rejected";
|
|
2579
|
+
preview.decidedByRef = input.actorRef;
|
|
2580
|
+
preview.reason = input.reason;
|
|
2581
|
+
preview.decidedAt = /* @__PURE__ */ new Date();
|
|
2582
|
+
await withTenant({ tenantId: active.tenantId }, () => preview.save());
|
|
2583
|
+
return preview;
|
|
2584
|
+
}
|
|
2585
|
+
async markPreviewStale(preview) {
|
|
2586
|
+
if (preview.status === "pending") {
|
|
2587
|
+
preview.status = "stale";
|
|
2588
|
+
preview.staleAt = /* @__PURE__ */ new Date();
|
|
2589
|
+
await withTenant({ tenantId: preview.tenantId }, () => preview.save());
|
|
2590
|
+
}
|
|
2591
|
+
return preview;
|
|
2592
|
+
}
|
|
2593
|
+
async requestForIntegration(integration, requestId) {
|
|
2594
|
+
const request = await withTenant({ tenantId: integration.tenantId }, () => this.requests.get({ id: requestId }));
|
|
2595
|
+
if (!request || request.integrationId !== integration.id || request.projectId !== integration.projectId) throw new Error("Development Request is outside this Project Integration.");
|
|
2596
|
+
return request;
|
|
2597
|
+
}
|
|
2598
|
+
async isLatestTerminalEvent(event) {
|
|
2599
|
+
const latest = (await withTenant({ tenantId: event.tenantId }, () => this.events.list({
|
|
2600
|
+
where: {
|
|
2601
|
+
integrationId: event.integrationId,
|
|
2602
|
+
requestId: event.requestId,
|
|
2603
|
+
type: [
|
|
2604
|
+
"completed",
|
|
2605
|
+
"deployment",
|
|
2606
|
+
"rejected"
|
|
2607
|
+
]
|
|
2608
|
+
},
|
|
2609
|
+
orderBy: "sequence DESC",
|
|
2610
|
+
limit: 1
|
|
2611
|
+
})))[0];
|
|
2612
|
+
return !latest || latest.sequence <= event.sequence;
|
|
2613
|
+
}
|
|
2614
|
+
async upsertPreview(request, payload) {
|
|
2615
|
+
const previewId = String(payload.previewId ?? "");
|
|
2616
|
+
if (!previewId) return;
|
|
2617
|
+
if ((await withTenant({ tenantId: request.tenantId }, () => this.approvals.list({
|
|
2618
|
+
where: {
|
|
2619
|
+
requestId: request.id,
|
|
2620
|
+
previewId
|
|
2621
|
+
},
|
|
2622
|
+
limit: 1
|
|
2623
|
+
})))[0]) return;
|
|
2624
|
+
const approval = await withTenant({ tenantId: request.tenantId }, () => this.approvals.create({
|
|
2625
|
+
tenantId: request.tenantId,
|
|
2626
|
+
requestId: requiredId$2(request.id, "Development Request"),
|
|
2627
|
+
previewId,
|
|
2628
|
+
previewUrl: String(payload.previewUrl ?? ""),
|
|
2629
|
+
status: "pending",
|
|
2630
|
+
createdAt: /* @__PURE__ */ new Date()
|
|
2631
|
+
}));
|
|
2632
|
+
await withTenant({ tenantId: request.tenantId }, () => approval.save());
|
|
2633
|
+
}
|
|
2634
|
+
};
|
|
2635
|
+
function requireIntegrationCapability(integration, capability) {
|
|
2636
|
+
if (!integration.isActive()) throw new Error("Project Integration is revoked.");
|
|
2637
|
+
if (!integration.hasCapability(capability)) throw new Error(`Project Integration lacks capability '${capability}'.`);
|
|
2638
|
+
}
|
|
2639
|
+
async function requireActiveIntegrationCapability(integrations, integration, capability) {
|
|
2640
|
+
const integrationId = requiredId$2(integration.id, "Project Integration");
|
|
2641
|
+
const active = await integrations.findActive(integration.tenantId, integrationId);
|
|
2642
|
+
if (!active) throw new Error("Project Integration is revoked.");
|
|
2643
|
+
requireIntegrationCapability(active, capability);
|
|
2644
|
+
return active;
|
|
2645
|
+
}
|
|
2646
|
+
function requiredId$2(value, label) {
|
|
2647
|
+
if (!value) throw new Error(`${label} must be saved.`);
|
|
2648
|
+
return value;
|
|
2649
|
+
}
|
|
2650
|
+
//#endregion
|
|
2651
|
+
//#region src/services/assistance-request-service.ts
|
|
2652
|
+
var AssistanceRequestService = class AssistanceRequestService {
|
|
2653
|
+
constructor(integrations, development, requests, events, support) {
|
|
2654
|
+
this.integrations = integrations;
|
|
2655
|
+
this.development = development;
|
|
2656
|
+
this.requests = requests;
|
|
2657
|
+
this.events = events;
|
|
2658
|
+
this.support = support;
|
|
2659
|
+
}
|
|
2660
|
+
integrations;
|
|
2661
|
+
development;
|
|
2662
|
+
requests;
|
|
2663
|
+
events;
|
|
2664
|
+
support;
|
|
2665
|
+
static async create(options = {}, dependencies = {}) {
|
|
2666
|
+
const integrations = await ProjectIntegrationCollection.create(options);
|
|
2667
|
+
const sharedOptions = {
|
|
2668
|
+
...options,
|
|
2669
|
+
db: integrations.db
|
|
2670
|
+
};
|
|
2671
|
+
const [development, requests, events] = await Promise.all([
|
|
2672
|
+
DevelopmentRequestCollection.create(sharedOptions),
|
|
2673
|
+
AssistanceRequestCollection.create(sharedOptions),
|
|
2674
|
+
AssistanceRequestEventCollection.create(sharedOptions)
|
|
2675
|
+
]);
|
|
2676
|
+
return new AssistanceRequestService(integrations, development, requests, events, dependencies.support);
|
|
2677
|
+
}
|
|
2678
|
+
async createRequest(integration, input) {
|
|
2679
|
+
const active = await requireActiveIntegrationCapability(this.integrations, integration, "assistance:create");
|
|
2680
|
+
if (!input.requesterId.trim()) throw new Error("Assistance Request requires a stable requesterId.");
|
|
2681
|
+
if (!input.subject.trim()) throw new Error("Assistance Request subject is required.");
|
|
2682
|
+
const request = await withTenant({ tenantId: active.tenantId }, () => this.requests.create({
|
|
2683
|
+
tenantId: active.tenantId,
|
|
2684
|
+
integrationId: requiredId$1(active.id, "Project Integration"),
|
|
2685
|
+
requesterId: input.requesterId,
|
|
2686
|
+
subject: input.subject.trim(),
|
|
2687
|
+
applicationContext: JSON.stringify(input.applicationContext ?? {}),
|
|
2688
|
+
conversation: JSON.stringify(input.conversation ?? []),
|
|
2689
|
+
evidence: JSON.stringify(input.evidence ?? []),
|
|
2690
|
+
classification: "unclassified",
|
|
2691
|
+
createdAt: /* @__PURE__ */ new Date()
|
|
2692
|
+
}));
|
|
2693
|
+
await withTenant({ tenantId: active.tenantId }, () => request.save());
|
|
2694
|
+
return request;
|
|
2695
|
+
}
|
|
2696
|
+
async classify(integration, request, input) {
|
|
2697
|
+
const active = await requireActiveIntegrationCapability(this.integrations, integration, "assistance:create");
|
|
2698
|
+
if (request.integrationId !== active.id || request.tenantId !== active.tenantId) throw new Error("Assistance Request is outside this Project Integration.");
|
|
2699
|
+
if (!input.reason.trim()) throw new Error("Classification reason is required.");
|
|
2700
|
+
const prior = request.classification;
|
|
2701
|
+
if ((input.classification === "support" || input.classification === "both") && !request.supportCaseId) {
|
|
2702
|
+
if (!this.support) throw new Error("Support routing port is not configured.");
|
|
2703
|
+
request.supportCaseId = (await this.support.openOrJoin({
|
|
2704
|
+
assistanceRequestId: requiredId$1(request.id, "Assistance Request"),
|
|
2705
|
+
tenantId: request.tenantId,
|
|
2706
|
+
projectId: active.projectId,
|
|
2707
|
+
requesterId: request.requesterId,
|
|
2708
|
+
subject: request.subject,
|
|
2709
|
+
conversation: parseArray(request.conversation),
|
|
2710
|
+
evidence: parseEvidence(request.evidence),
|
|
2711
|
+
applicationContext: parseObject(request.applicationContext)
|
|
2712
|
+
})).caseId;
|
|
2713
|
+
}
|
|
2714
|
+
if ((input.classification === "development" || input.classification === "both") && !request.developmentRequestId) {
|
|
2715
|
+
const integrationId = requiredId$1(active.id, "Project Integration");
|
|
2716
|
+
const origin = `assistance:${requiredId$1(request.id, "Assistance Request")}`;
|
|
2717
|
+
request.developmentRequestId = ((await withTenant({ tenantId: active.tenantId }, () => this.development.list({
|
|
2718
|
+
where: {
|
|
2719
|
+
tenantId: active.tenantId,
|
|
2720
|
+
projectId: active.projectId,
|
|
2721
|
+
integrationId,
|
|
2722
|
+
origin
|
|
2723
|
+
},
|
|
2724
|
+
orderBy: "createdAt ASC",
|
|
2725
|
+
limit: 1
|
|
2726
|
+
})))[0] ?? await this.development.createManaged({
|
|
2727
|
+
tenantId: active.tenantId,
|
|
2728
|
+
projectId: active.projectId,
|
|
2729
|
+
integrationId,
|
|
2730
|
+
requesterId: request.requesterId,
|
|
2731
|
+
type: input.developmentType ?? "task",
|
|
2732
|
+
description: conversationText(request.conversation) || request.subject,
|
|
2733
|
+
evidence: parseEvidence(request.evidence),
|
|
2734
|
+
origin,
|
|
2735
|
+
discussion: input.reason,
|
|
2736
|
+
visibility: "requester"
|
|
2737
|
+
})).id ?? "";
|
|
2738
|
+
}
|
|
2739
|
+
if (input.classification === "both" && request.supportCaseId && request.developmentRequestId && !request.deliveryHandoffLinkedAt && this.support?.linkDelivery) {
|
|
2740
|
+
await this.support.linkDelivery({
|
|
2741
|
+
tenantId: request.tenantId,
|
|
2742
|
+
caseId: request.supportCaseId,
|
|
2743
|
+
developmentRequestId: request.developmentRequestId
|
|
2744
|
+
});
|
|
2745
|
+
request.deliveryHandoffLinkedAt = /* @__PURE__ */ new Date();
|
|
2746
|
+
}
|
|
2747
|
+
request.classification = input.classification;
|
|
2748
|
+
await withTenant({ tenantId: request.tenantId }, () => request.save());
|
|
2749
|
+
const event = await withTenant({ tenantId: request.tenantId }, () => this.events.create({
|
|
2750
|
+
tenantId: request.tenantId,
|
|
2751
|
+
assistanceRequestId: requiredId$1(request.id, "Assistance Request"),
|
|
2752
|
+
priorClassification: prior,
|
|
2753
|
+
resultingClassification: input.classification,
|
|
2754
|
+
actorRef: input.actorRef,
|
|
2755
|
+
reason: input.reason,
|
|
2756
|
+
resultingLinks: JSON.stringify({
|
|
2757
|
+
supportCaseId: request.supportCaseId || null,
|
|
2758
|
+
developmentRequestId: request.developmentRequestId || null
|
|
2759
|
+
}),
|
|
2760
|
+
occurredAt: /* @__PURE__ */ new Date()
|
|
2761
|
+
}));
|
|
2762
|
+
await withTenant({ tenantId: request.tenantId }, () => event.save());
|
|
2763
|
+
return request;
|
|
2764
|
+
}
|
|
2765
|
+
};
|
|
2766
|
+
function parseArray(value) {
|
|
2767
|
+
try {
|
|
2768
|
+
const parsed = JSON.parse(value);
|
|
2769
|
+
return Array.isArray(parsed) ? parsed.filter((item) => Boolean(item) && typeof item === "object" && !Array.isArray(item)) : [];
|
|
2770
|
+
} catch {
|
|
2771
|
+
return [];
|
|
2772
|
+
}
|
|
2773
|
+
}
|
|
2774
|
+
function parseObject(value) {
|
|
2775
|
+
try {
|
|
2776
|
+
const parsed = JSON.parse(value);
|
|
2777
|
+
return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
|
|
2778
|
+
} catch {
|
|
2779
|
+
return {};
|
|
2780
|
+
}
|
|
2781
|
+
}
|
|
2782
|
+
function parseEvidence(value) {
|
|
2783
|
+
return parseArray(value).map((item) => ({
|
|
2784
|
+
url: typeof item.url === "string" ? item.url : "",
|
|
2785
|
+
...typeof item.label === "string" ? { label: item.label } : {}
|
|
2786
|
+
})).filter((item) => item.url.length > 0);
|
|
2787
|
+
}
|
|
2788
|
+
function conversationText(value) {
|
|
2789
|
+
return parseArray(value).map((message) => String(message.body ?? message.text ?? "")).filter(Boolean).join("\n\n");
|
|
2790
|
+
}
|
|
2791
|
+
function requiredId$1(value, label) {
|
|
2792
|
+
if (!value) throw new Error(`${label} must be saved.`);
|
|
2793
|
+
return value;
|
|
2794
|
+
}
|
|
2795
|
+
//#endregion
|
|
2796
|
+
//#region src/services/development-request-service.ts
|
|
2797
|
+
var DevelopmentRequestService = class DevelopmentRequestService {
|
|
2798
|
+
constructor(requests, links, workAdapter) {
|
|
2799
|
+
this.requests = requests;
|
|
2800
|
+
this.links = links;
|
|
2801
|
+
this.workAdapter = workAdapter;
|
|
2802
|
+
}
|
|
2803
|
+
requests;
|
|
2804
|
+
links;
|
|
2805
|
+
workAdapter;
|
|
2806
|
+
static async create(options = {}, workAdapter) {
|
|
2807
|
+
return new DevelopmentRequestService(await DevelopmentRequestCollection.create(options), await DevelopmentRequestWorkLinkCollection.create(options), workAdapter);
|
|
2808
|
+
}
|
|
2809
|
+
/** Visibility is evaluated after tenant and project scoping. */
|
|
2810
|
+
async visibleFor(viewer) {
|
|
2811
|
+
const all = await this.requests.listForProject(viewer.tenantId, viewer.projectId);
|
|
2812
|
+
const roles = new Set(viewer.roles ?? []);
|
|
2813
|
+
return all.filter((request) => {
|
|
2814
|
+
if (roles.has("internal")) return true;
|
|
2815
|
+
if (request.requesterId === viewer.requesterId) return true;
|
|
2816
|
+
if (request.visibility === "internal" || request.visibility === "requester") return false;
|
|
2817
|
+
if (request.visibility === "public") return true;
|
|
2818
|
+
if (roles.has("project_team")) return request.visibility === "workspace" || request.visibility === "project_team";
|
|
2819
|
+
return roles.has("workspace") && request.visibility === "workspace";
|
|
2820
|
+
});
|
|
2821
|
+
}
|
|
2822
|
+
async linksFor(request) {
|
|
2823
|
+
return withTenant({ tenantId: request.tenantId }, () => this.links.list({
|
|
2824
|
+
where: { requestId: request.id },
|
|
2825
|
+
orderBy: "createdAt ASC"
|
|
2826
|
+
}));
|
|
2827
|
+
}
|
|
2828
|
+
async triage(request, input) {
|
|
2829
|
+
if (!input.reason.trim()) throw new Error("Triage reason is required.");
|
|
2830
|
+
requiredId(request.id, "Development Request");
|
|
2831
|
+
const createdLinks = [];
|
|
2832
|
+
const splitRequests = [];
|
|
2833
|
+
if (input.decision === "accept") {
|
|
2834
|
+
const existing = await this.linksFor(request);
|
|
2835
|
+
if (existing.length > 0) createdLinks.push(...existing);
|
|
2836
|
+
else {
|
|
2837
|
+
if (!this.workAdapter) throw new Error("DevelopmentWorkAdapter is required to accept requests.");
|
|
2838
|
+
const work = await this.workAdapter.createWorkItem({
|
|
2839
|
+
request,
|
|
2840
|
+
idempotencyKey: `development-request:${request.id}`
|
|
2841
|
+
});
|
|
2842
|
+
createdLinks.push(await this.linkWork(request, work));
|
|
2843
|
+
}
|
|
2844
|
+
if (request.status !== "planned") await this.transition(request, "planned", input.actorRef, input.reason);
|
|
2845
|
+
}
|
|
2846
|
+
if (input.decision === "decline" && request.status !== "declined") await this.transition(request, "declined", input.actorRef, input.reason);
|
|
2847
|
+
if (input.decision === "merge") {
|
|
2848
|
+
if (!input.mergeIntoRequestId) throw new Error("mergeIntoRequestId is required.");
|
|
2849
|
+
if (input.mergeIntoRequestId === request.id) throw new Error("A Development Request cannot be merged into itself.");
|
|
2850
|
+
const target = await withTenant({ tenantId: request.tenantId }, () => this.requests.get({ id: input.mergeIntoRequestId }));
|
|
2851
|
+
if (!target || target.projectId !== request.projectId) throw new Error("Merge target must be a Development Request in the same project and tenant.");
|
|
2852
|
+
createdLinks.push(await this.linkWork(request, {
|
|
2853
|
+
type: "@happyvertical/smrt-projects:DevelopmentRequest",
|
|
2854
|
+
id: input.mergeIntoRequestId,
|
|
2855
|
+
canonicalStatus: "merged",
|
|
2856
|
+
metadata: { reason: input.reason }
|
|
2857
|
+
}));
|
|
2858
|
+
if (request.status !== "triaged") await this.transition(request, "triaged", input.actorRef, input.reason);
|
|
2859
|
+
}
|
|
2860
|
+
if (input.decision === "split") {
|
|
2861
|
+
if (!input.split?.length) throw new Error("At least one split request is required.");
|
|
2862
|
+
const parts = input.split.map((part) => {
|
|
2863
|
+
const description = part.description.trim();
|
|
2864
|
+
if (!description) throw new Error("Split request description is required.");
|
|
2865
|
+
return {
|
|
2866
|
+
description,
|
|
2867
|
+
type: part.type ?? request.type
|
|
2868
|
+
};
|
|
2869
|
+
});
|
|
2870
|
+
const origin = `split:${request.id}`;
|
|
2871
|
+
const unmatchedExisting = await withTenant({ tenantId: request.tenantId }, () => this.requests.list({
|
|
2872
|
+
where: {
|
|
2873
|
+
tenantId: request.tenantId,
|
|
2874
|
+
projectId: request.projectId,
|
|
2875
|
+
integrationId: request.integrationId,
|
|
2876
|
+
origin
|
|
2877
|
+
},
|
|
2878
|
+
orderBy: "createdAt ASC"
|
|
2879
|
+
}));
|
|
2880
|
+
for (const { description, type } of parts) {
|
|
2881
|
+
const existingIndex = unmatchedExisting.findIndex((candidate) => candidate.description.trim() === description && candidate.type === type && candidate.requesterId === request.requesterId && candidate.participantId === request.participantId && candidate.visibility === request.visibility);
|
|
2882
|
+
if (existingIndex >= 0) splitRequests.push(unmatchedExisting.splice(existingIndex, 1)[0]);
|
|
2883
|
+
else splitRequests.push(await this.requests.createManaged({
|
|
2884
|
+
tenantId: request.tenantId,
|
|
2885
|
+
projectId: request.projectId,
|
|
2886
|
+
integrationId: request.integrationId,
|
|
2887
|
+
requesterId: request.requesterId,
|
|
2888
|
+
participantId: request.participantId || void 0,
|
|
2889
|
+
type,
|
|
2890
|
+
description,
|
|
2891
|
+
evidence: request.getEvidence(),
|
|
2892
|
+
visibility: request.visibility,
|
|
2893
|
+
origin,
|
|
2894
|
+
discussion: input.reason
|
|
2895
|
+
}));
|
|
2896
|
+
}
|
|
2897
|
+
if (request.status !== "triaged") await this.transition(request, "triaged", input.actorRef, input.reason);
|
|
2898
|
+
}
|
|
2899
|
+
return {
|
|
2900
|
+
request,
|
|
2901
|
+
links: createdLinks,
|
|
2902
|
+
splitRequests
|
|
2903
|
+
};
|
|
2904
|
+
}
|
|
2905
|
+
async syncWorkStatus(link) {
|
|
2906
|
+
if (!this.workAdapter) throw new Error("DevelopmentWorkAdapter is required to project board status.");
|
|
2907
|
+
const work = await this.workAdapter.getWorkItem(link);
|
|
2908
|
+
link.canonicalStatus = work.canonicalStatus;
|
|
2909
|
+
link.metadata = JSON.stringify(work.metadata ?? {});
|
|
2910
|
+
link.lastProjectedAt = /* @__PURE__ */ new Date();
|
|
2911
|
+
await withTenant({ tenantId: link.tenantId }, () => link.save());
|
|
2912
|
+
const request = await withTenant({ tenantId: link.tenantId }, () => this.requests.get({ id: link.requestId }));
|
|
2913
|
+
if (!request) throw new Error(`Development Request ${link.requestId} not found.`);
|
|
2914
|
+
const nextStatus = (await this.linksFor(request)).every((item) => [
|
|
2915
|
+
"done",
|
|
2916
|
+
"closed",
|
|
2917
|
+
"completed",
|
|
2918
|
+
"deployed"
|
|
2919
|
+
].includes(item.canonicalStatus.toLowerCase())) ? "completed" : "in_progress";
|
|
2920
|
+
if (request.status !== nextStatus) await this.transition(request, nextStatus, "system", `Canonical work status: ${work.canonicalStatus}`);
|
|
2921
|
+
return request;
|
|
2922
|
+
}
|
|
2923
|
+
async transition(request, status, actorRef, reason) {
|
|
2924
|
+
request.status = (await this.requests.transitionStatus(request.tenantId, requiredId(request.id, "Development Request"), {
|
|
2925
|
+
status,
|
|
2926
|
+
actorType: "system",
|
|
2927
|
+
actorId: actorRef,
|
|
2928
|
+
note: reason
|
|
2929
|
+
})).status;
|
|
2930
|
+
}
|
|
2931
|
+
async linkWork(request, work) {
|
|
2932
|
+
const existing = (await withTenant({ tenantId: request.tenantId }, () => this.links.list({
|
|
2933
|
+
where: {
|
|
2934
|
+
requestId: request.id,
|
|
2935
|
+
workItemType: work.type,
|
|
2936
|
+
workItemId: work.id
|
|
2937
|
+
},
|
|
2938
|
+
limit: 1
|
|
2939
|
+
})))[0];
|
|
2940
|
+
if (existing) return existing;
|
|
2941
|
+
const link = await withTenant({ tenantId: request.tenantId }, () => this.links.create({
|
|
2942
|
+
tenantId: request.tenantId,
|
|
2943
|
+
requestId: requiredId(request.id, "Development Request"),
|
|
2944
|
+
workItemType: work.type,
|
|
2945
|
+
workItemId: work.id,
|
|
2946
|
+
canonicalStatus: work.canonicalStatus,
|
|
2947
|
+
providerRef: work.providerRef ?? "",
|
|
2948
|
+
metadata: JSON.stringify(work.metadata ?? {}),
|
|
2949
|
+
lastProjectedAt: /* @__PURE__ */ new Date()
|
|
2950
|
+
}));
|
|
2951
|
+
await withTenant({ tenantId: request.tenantId }, () => link.save());
|
|
2952
|
+
return link;
|
|
2953
|
+
}
|
|
2954
|
+
};
|
|
2955
|
+
function requiredId(value, label) {
|
|
2956
|
+
if (!value) throw new Error(`${label} must be saved.`);
|
|
2957
|
+
return value;
|
|
2958
|
+
}
|
|
2959
|
+
//#endregion
|
|
2960
|
+
//#region src/services/service-evidence-service.ts
|
|
2961
|
+
var ServiceEvidenceService = class ServiceEvidenceService {
|
|
2962
|
+
constructor(entries, charges, compensation, commercial) {
|
|
2963
|
+
this.entries = entries;
|
|
2964
|
+
this.charges = charges;
|
|
2965
|
+
this.compensation = compensation;
|
|
2966
|
+
this.commercial = commercial;
|
|
2967
|
+
}
|
|
2968
|
+
entries;
|
|
2969
|
+
charges;
|
|
2970
|
+
compensation;
|
|
2971
|
+
commercial;
|
|
2972
|
+
static async create(options = {}, commercial) {
|
|
2973
|
+
const [entries, charges, compensation] = await Promise.all([
|
|
2974
|
+
ServiceTimeEntryCollection.create(options),
|
|
2975
|
+
ServiceChargeSnapshotCollection.create(options),
|
|
2976
|
+
ServiceCompensationSnapshotCollection.create(options)
|
|
2977
|
+
]);
|
|
2978
|
+
return new ServiceEvidenceService(entries, charges, compensation, commercial);
|
|
2979
|
+
}
|
|
2980
|
+
async record(input) {
|
|
2981
|
+
if (!input.caseId && !(input.workRefType && input.workRefId)) throw new Error("Service time requires a case or work reference.");
|
|
2982
|
+
if (Boolean(input.workRefType) !== Boolean(input.workRefId)) throw new Error("workRefType and workRefId must be provided together.");
|
|
2983
|
+
if (input.participantKind === "human" && !input.participantProfileId) throw new Error("Human service time requires participantProfileId.");
|
|
2984
|
+
if (input.participantKind === "agent" && !input.agentRef) throw new Error("Agent service time requires agentRef.");
|
|
2985
|
+
if (input.source === "timer" && (!input.startedAt || !input.endedAt)) throw new Error("Timer service time requires startedAt and endedAt.");
|
|
2986
|
+
if (input.startedAt && input.endedAt && input.startedAt >= input.endedAt) throw new Error("Service time startedAt must be before endedAt.");
|
|
2987
|
+
const duration = input.durationSeconds ?? (input.startedAt && input.endedAt ? Math.round((input.endedAt.getTime() - input.startedAt.getTime()) / 1e3) : 0);
|
|
2988
|
+
if (!Number.isInteger(duration) || duration <= 0) throw new Error("Service time durationSeconds must be a positive integer.");
|
|
2989
|
+
const entry = await this.entries.create({
|
|
2990
|
+
...input,
|
|
2991
|
+
durationSeconds: duration,
|
|
2992
|
+
evidence: JSON.stringify(input.evidence ?? []),
|
|
2993
|
+
metadata: JSON.stringify(input.metadata ?? {}),
|
|
2994
|
+
status: "draft",
|
|
2995
|
+
submittedAt: null,
|
|
2996
|
+
submittedByProfileId: null,
|
|
2997
|
+
approvedAt: null,
|
|
2998
|
+
approvedByProfileId: null,
|
|
2999
|
+
approvalPath: "",
|
|
3000
|
+
rejectedAt: null,
|
|
3001
|
+
rejectedByProfileId: null,
|
|
3002
|
+
rejectionReason: "",
|
|
3003
|
+
correctionOfId: null
|
|
3004
|
+
});
|
|
3005
|
+
await entry.save();
|
|
3006
|
+
return entry;
|
|
3007
|
+
}
|
|
3008
|
+
async submit(entry, profileId) {
|
|
3009
|
+
if (entry.status !== "draft" && entry.status !== "rejected") throw new Error("Only draft or rejected service time may be submitted.");
|
|
3010
|
+
entry.status = "submitted";
|
|
3011
|
+
entry.submittedAt = /* @__PURE__ */ new Date();
|
|
3012
|
+
entry.submittedByProfileId = profileId ?? null;
|
|
3013
|
+
return entry.save();
|
|
3014
|
+
}
|
|
3015
|
+
async approve(entry, options) {
|
|
3016
|
+
if (entry.status !== "submitted" && entry.status !== "approved") throw new Error("Only submitted service time or an incomplete approval may be approved.");
|
|
3017
|
+
if (!this.commercial) throw new Error("A ServiceCommercialResolver is required to approve service time.");
|
|
3018
|
+
const timeEntryId = entry.id;
|
|
3019
|
+
if (!timeEntryId) throw new Error("ServiceTimeEntry must be saved before approval.");
|
|
3020
|
+
const existingCharge = (await this.charges.list({
|
|
3021
|
+
where: { timeEntryId },
|
|
3022
|
+
limit: 1
|
|
3023
|
+
}))[0];
|
|
3024
|
+
const existingCompensation = (await this.compensation.list({
|
|
3025
|
+
where: { timeEntryId },
|
|
3026
|
+
limit: 1
|
|
3027
|
+
}))[0];
|
|
3028
|
+
if (entry.status === "approved" && existingCharge && existingCompensation) return entry;
|
|
3029
|
+
if (entry.status === "submitted") {
|
|
3030
|
+
entry.status = "approved";
|
|
3031
|
+
entry.approvedAt = /* @__PURE__ */ new Date();
|
|
3032
|
+
entry.approvedByProfileId = options.actorProfileId ?? null;
|
|
3033
|
+
entry.approvalPath = options.approvalPath;
|
|
3034
|
+
await entry.save();
|
|
3035
|
+
}
|
|
3036
|
+
const provider = existingCompensation ? null : await this.commercial.compensateProvider(entry);
|
|
3037
|
+
if (provider) {
|
|
3038
|
+
const snapshotId = await deterministicSnapshotId("service-compensation-snapshot", timeEntryId);
|
|
3039
|
+
try {
|
|
3040
|
+
await this.compensation.create({
|
|
3041
|
+
id: snapshotId,
|
|
3042
|
+
tenantId: entry.tenantId,
|
|
3043
|
+
timeEntryId,
|
|
3044
|
+
amount: provider.amount,
|
|
3045
|
+
currency: provider.currency ?? "USD",
|
|
3046
|
+
termsVersion: provider.version,
|
|
3047
|
+
rateSnapshot: JSON.stringify(provider.terms),
|
|
3048
|
+
_insertOnly: true
|
|
3049
|
+
});
|
|
3050
|
+
} catch (error) {
|
|
3051
|
+
if (!(await this.compensation.get(snapshotId) ?? (await this.compensation.list({
|
|
3052
|
+
where: { timeEntryId },
|
|
3053
|
+
limit: 1
|
|
3054
|
+
}))[0])) throw error;
|
|
3055
|
+
}
|
|
3056
|
+
}
|
|
3057
|
+
const client = existingCharge ? null : await this.commercial.priceClient(entry);
|
|
3058
|
+
if (client) {
|
|
3059
|
+
const snapshotId = await deterministicSnapshotId("service-charge-snapshot", timeEntryId);
|
|
3060
|
+
try {
|
|
3061
|
+
await this.charges.create({
|
|
3062
|
+
id: snapshotId,
|
|
3063
|
+
tenantId: entry.tenantId,
|
|
3064
|
+
timeEntryId,
|
|
3065
|
+
amount: client.amount,
|
|
3066
|
+
currency: client.currency ?? "USD",
|
|
3067
|
+
pricingVersion: client.version,
|
|
3068
|
+
strategy: client.strategy ?? "",
|
|
3069
|
+
rateSnapshot: JSON.stringify(client.terms),
|
|
3070
|
+
sourceChargeRef: client.sourceRef ?? "",
|
|
3071
|
+
_insertOnly: true
|
|
3072
|
+
});
|
|
3073
|
+
} catch (error) {
|
|
3074
|
+
if (!(await this.charges.get(snapshotId) ?? (await this.charges.list({
|
|
3075
|
+
where: { timeEntryId },
|
|
3076
|
+
limit: 1
|
|
3077
|
+
}))[0])) throw error;
|
|
3078
|
+
}
|
|
3079
|
+
}
|
|
3080
|
+
return entry;
|
|
3081
|
+
}
|
|
3082
|
+
async correct(entry, input) {
|
|
3083
|
+
if (entry.status !== "approved") throw new Error("Only approved service time may be corrected.");
|
|
3084
|
+
if (input.tenantId !== void 0 && input.tenantId !== entry.tenantId) throw new Error("Service time corrections must remain in the original tenant.");
|
|
3085
|
+
const correction = await this.record({
|
|
3086
|
+
...input,
|
|
3087
|
+
tenantId: entry.tenantId
|
|
3088
|
+
});
|
|
3089
|
+
correction.correctionOfId = entry.id ?? null;
|
|
3090
|
+
await correction.save();
|
|
3091
|
+
entry.status = "corrected";
|
|
3092
|
+
await entry.save();
|
|
3093
|
+
return correction;
|
|
3094
|
+
}
|
|
3095
|
+
};
|
|
3096
|
+
async function deterministicSnapshotId(kind, timeEntryId) {
|
|
3097
|
+
const bytes = new TextEncoder().encode(JSON.stringify([kind, timeEntryId]));
|
|
3098
|
+
const uuid = new Uint8Array(await crypto.subtle.digest("SHA-256", bytes)).slice(0, 16);
|
|
3099
|
+
uuid[6] = uuid[6] & 15 | 80;
|
|
3100
|
+
uuid[8] = uuid[8] & 63 | 128;
|
|
3101
|
+
const hex = Array.from(uuid, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
3102
|
+
return [
|
|
3103
|
+
hex.slice(0, 8),
|
|
3104
|
+
hex.slice(8, 12),
|
|
3105
|
+
hex.slice(12, 16),
|
|
3106
|
+
hex.slice(16, 20),
|
|
3107
|
+
hex.slice(20)
|
|
3108
|
+
].join("-");
|
|
3109
|
+
}
|
|
3110
|
+
//#endregion
|
|
3111
|
+
//#region src/services/subscription-commercial-resolver.ts
|
|
3112
|
+
var SubscriptionServiceCommercialResolver = class SubscriptionServiceCommercialResolver {
|
|
3113
|
+
constructor(usage, provider) {
|
|
3114
|
+
this.usage = usage;
|
|
3115
|
+
this.provider = provider;
|
|
3116
|
+
}
|
|
3117
|
+
usage;
|
|
3118
|
+
provider;
|
|
3119
|
+
static async create(options, provider) {
|
|
3120
|
+
return new SubscriptionServiceCommercialResolver(await CommercialUsageService.create(options), provider);
|
|
3121
|
+
}
|
|
3122
|
+
async priceClient(entry) {
|
|
3123
|
+
if (!entry.id || !entry.tenantId) throw new Error("Saved tenant-scoped ServiceTimeEntry is required for client pricing.");
|
|
3124
|
+
const at = entry.endedAt ?? entry.startedAt ?? /* @__PURE__ */ new Date();
|
|
3125
|
+
const metadata = entry.getMetadata();
|
|
3126
|
+
const usageEvent = await this.usage.record({
|
|
3127
|
+
tenantId: entry.tenantId,
|
|
3128
|
+
metricKey: "duration.seconds",
|
|
3129
|
+
quantity: entry.durationSeconds,
|
|
3130
|
+
windowStart: at,
|
|
3131
|
+
windowEnd: at,
|
|
3132
|
+
source: "service-time-entry",
|
|
3133
|
+
sourceId: entry.id,
|
|
3134
|
+
projectId: typeof metadata.projectId === "string" ? metadata.projectId : void 0,
|
|
3135
|
+
workRefType: entry.workRefType ?? (entry.caseId ? "@happyvertical/smrt-support:SupportCase" : void 0),
|
|
3136
|
+
workRefId: entry.workRefId ?? entry.caseId ?? void 0,
|
|
3137
|
+
provider: entry.participantKind,
|
|
3138
|
+
dimensions: {
|
|
3139
|
+
serviceKey: "professional-services",
|
|
3140
|
+
source: entry.source,
|
|
3141
|
+
specialistId: entry.specialistId,
|
|
3142
|
+
agentRef: entry.agentRef || void 0
|
|
3143
|
+
}
|
|
3144
|
+
});
|
|
3145
|
+
if (!usageEvent.id) throw new Error("Professional Service usage event was not persisted.");
|
|
3146
|
+
const charge = await this.usage.price({
|
|
3147
|
+
usageEventId: usageEvent.id,
|
|
3148
|
+
approved: true,
|
|
3149
|
+
at
|
|
3150
|
+
});
|
|
3151
|
+
const snapshot = charge.getPricingSnapshot();
|
|
3152
|
+
return {
|
|
3153
|
+
amount: charge.amount,
|
|
3154
|
+
currency: charge.currency,
|
|
3155
|
+
version: String(snapshot.ruleKey ?? charge.pricingRuleId),
|
|
3156
|
+
strategy: String(snapshot.strategy ?? ""),
|
|
3157
|
+
terms: snapshot,
|
|
3158
|
+
sourceRef: `@happyvertical/smrt-subscriptions:ClientCharge:${charge.id}`
|
|
3159
|
+
};
|
|
3160
|
+
}
|
|
3161
|
+
compensateProvider(entry) {
|
|
3162
|
+
return this.provider.compensate(entry);
|
|
3163
|
+
}
|
|
3164
|
+
};
|
|
3165
|
+
//#endregion
|
|
3166
|
+
export { AssistanceRequest, AssistanceRequestCollection, AssistanceRequestEvent, AssistanceRequestEventCollection, AssistanceRequestService, Comment, DevelopmentRequest, DevelopmentRequestCollection, DevelopmentRequestHistory, DevelopmentRequestHistoryCollection, DevelopmentRequestService, DevelopmentRequestWorkLink, DevelopmentRequestWorkLinkCollection, Issue, IssueCollection, Label, ManagedProjectClient, PROJECTS_MODULE_META, PROJECTS_UI_SLOTS, PreviewApproval, PreviewApprovalCollection, Project, ProjectCollection, ProjectDeliveryEvent, ProjectDeliveryEventCollection, ProjectDeliveryService, ProjectIntegration, ProjectIntegrationAudit, ProjectIntegrationAuditCollection, ProjectIntegrationCollection, PullRequest, PullRequestCollection, Repository, RepositoryCollection, ServiceChargeSnapshot, ServiceChargeSnapshotCollection, ServiceCompensationSnapshot, ServiceCompensationSnapshotCollection, ServiceEvidenceService, ServiceTimeEntry, ServiceTimeEntryCollection, SubscriptionServiceCommercialResolver, issueIncorporateFeedbackPrompt, Repositories_exports as n, parseProjectJson, Issues_exports as r, requireActiveIntegrationCapability, requireIntegrationCapability, Comment_exports as t };
|
|
1527
3167
|
|
|
1528
3168
|
//# sourceMappingURL=index.js.map
|