@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.
Files changed (83) hide show
  1. package/AGENTS.md +36 -1
  2. package/SERVICE_TIME_MIGRATION.md +23 -0
  3. package/dist/collections/DevelopmentRequestHistories.d.ts +7 -0
  4. package/dist/collections/DevelopmentRequestHistories.d.ts.map +1 -0
  5. package/dist/collections/DevelopmentRequests.d.ts +20 -0
  6. package/dist/collections/DevelopmentRequests.d.ts.map +1 -0
  7. package/dist/collections/ProjectIntegrationAudits.d.ts +7 -0
  8. package/dist/collections/ProjectIntegrationAudits.d.ts.map +1 -0
  9. package/dist/collections/ProjectIntegrations.d.ts +28 -0
  10. package/dist/collections/ProjectIntegrations.d.ts.map +1 -0
  11. package/dist/index.d.ts +13 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +1673 -33
  14. package/dist/index.js.map +1 -1
  15. package/dist/managed-client.d.ts +13 -0
  16. package/dist/managed-client.d.ts.map +1 -0
  17. package/dist/manifest.json +4790 -1109
  18. package/dist/models/DevelopmentRequest.d.ts +35 -0
  19. package/dist/models/DevelopmentRequest.d.ts.map +1 -0
  20. package/dist/models/DevelopmentRequestHistory.d.ts +22 -0
  21. package/dist/models/DevelopmentRequestHistory.d.ts.map +1 -0
  22. package/dist/models/ProjectIntegration.d.ts +24 -0
  23. package/dist/models/ProjectIntegration.d.ts.map +1 -0
  24. package/dist/models/ProjectIntegrationAudit.d.ts +16 -0
  25. package/dist/models/ProjectIntegrationAudit.d.ts.map +1 -0
  26. package/dist/models/delivery-control-plane.d.ts +83 -0
  27. package/dist/models/delivery-control-plane.d.ts.map +1 -0
  28. package/dist/models/service-evidence.d.ts +79 -0
  29. package/dist/models/service-evidence.d.ts.map +1 -0
  30. package/dist/services/assistance-request-service.d.ts +45 -0
  31. package/dist/services/assistance-request-service.d.ts.map +1 -0
  32. package/dist/services/delivery-service.d.ts +55 -0
  33. package/dist/services/delivery-service.d.ts.map +1 -0
  34. package/dist/services/development-request-service.d.ts +61 -0
  35. package/dist/services/development-request-service.d.ts.map +1 -0
  36. package/dist/services/index.d.ts +6 -0
  37. package/dist/services/index.d.ts.map +1 -0
  38. package/dist/services/service-evidence-service.d.ts +48 -0
  39. package/dist/services/service-evidence-service.d.ts.map +1 -0
  40. package/dist/services/subscription-commercial-resolver.d.ts +17 -0
  41. package/dist/services/subscription-commercial-resolver.d.ts.map +1 -0
  42. package/dist/smrt-knowledge.json +1823 -148
  43. package/dist/svelte/AssistanceLauncher.svelte +96 -0
  44. package/dist/svelte/AssistanceLauncher.svelte.d.ts +12 -0
  45. package/dist/svelte/AssistanceLauncher.svelte.d.ts.map +1 -0
  46. package/dist/svelte/DeliveryStatus.svelte +71 -0
  47. package/dist/svelte/DeliveryStatus.svelte.d.ts +8 -0
  48. package/dist/svelte/DeliveryStatus.svelte.d.ts.map +1 -0
  49. package/dist/svelte/DevelopmentBoard.svelte +103 -0
  50. package/dist/svelte/DevelopmentBoard.svelte.d.ts +10 -0
  51. package/dist/svelte/DevelopmentBoard.svelte.d.ts.map +1 -0
  52. package/dist/svelte/DevelopmentRequestDetail.svelte +92 -0
  53. package/dist/svelte/DevelopmentRequestDetail.svelte.d.ts +9 -0
  54. package/dist/svelte/DevelopmentRequestDetail.svelte.d.ts.map +1 -0
  55. package/dist/svelte/PreviewApprovalPanel.svelte +63 -0
  56. package/dist/svelte/PreviewApprovalPanel.svelte.d.ts +10 -0
  57. package/dist/svelte/PreviewApprovalPanel.svelte.d.ts.map +1 -0
  58. package/dist/svelte/ServiceEvidenceList.svelte +103 -0
  59. package/dist/svelte/ServiceEvidenceList.svelte.d.ts +8 -0
  60. package/dist/svelte/ServiceEvidenceList.svelte.d.ts.map +1 -0
  61. package/dist/svelte/components/DevelopmentRequestForm.svelte +70 -0
  62. package/dist/svelte/components/DevelopmentRequestForm.svelte.d.ts +19 -0
  63. package/dist/svelte/components/DevelopmentRequestForm.svelte.d.ts.map +1 -0
  64. package/dist/svelte/components/DevelopmentRequestList.svelte +218 -0
  65. package/dist/svelte/components/DevelopmentRequestList.svelte.d.ts +22 -0
  66. package/dist/svelte/components/DevelopmentRequestList.svelte.d.ts.map +1 -0
  67. package/dist/svelte/components/__tests__/DeliverySurfaces.test.js +98 -0
  68. package/dist/svelte/components/__tests__/DevelopmentRequest.test.js +52 -0
  69. package/dist/svelte/delivery-types.d.ts +36 -0
  70. package/dist/svelte/delivery-types.d.ts.map +1 -0
  71. package/dist/svelte/delivery-types.js +1 -0
  72. package/dist/svelte/i18n.d.ts +30 -0
  73. package/dist/svelte/i18n.d.ts.map +1 -1
  74. package/dist/svelte/i18n.js +30 -0
  75. package/dist/svelte/index.d.ts +18 -1
  76. package/dist/svelte/index.d.ts.map +1 -1
  77. package/dist/svelte/index.js +18 -1
  78. package/dist/types.d.ts +79 -0
  79. package/dist/types.d.ts.map +1 -1
  80. package/dist/ui.d.ts.map +1 -1
  81. package/dist/ui.js +106 -10
  82. package/dist/ui.js.map +1 -1
  83. 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$3 = Object.defineProperty;
201
- var __getOwnPropDesc$3 = Object.getOwnPropertyDescriptor;
202
- var __decorateClass$3 = (decorators, target, key, kind) => {
203
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$3(target, key) : target;
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$3(target, key, result);
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$3([tenantId({ nullable: true })], Project.prototype, "tenantId", 2);
463
- Project = __decorateClass$3([TenantScoped({ mode: "optional" }), smrt({
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$2 = Object.defineProperty;
853
- var __getOwnPropDesc$2 = Object.getOwnPropertyDescriptor;
854
- var __decorateClass$2 = (decorators, target, key, kind) => {
855
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$2(target, key) : target;
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$2(target, key, result);
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$2([tenantId({ nullable: true })], Repository.prototype, "tenantId", 2);
1097
- Repository = __decorateClass$2([TenantScoped({ mode: "optional" }), smrt({
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$1 = Object.defineProperty;
1253
- var __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor;
1254
- var __decorateClass$1 = (decorators, target, key, kind) => {
1255
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1(target, key) : target;
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$1(target, key, result);
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$1([tenantId({ nullable: true })], Comment.prototype, "tenantId", 2);
1363
- __decorateClass$1([foreignKey("Issue")], Comment.prototype, "issueId", 2);
1364
- Comment = __decorateClass$1([TenantScoped({ mode: "optional" }), smrt({
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
- export { Comment, Issue, IssueCollection, Label, PROJECTS_MODULE_META, PROJECTS_UI_SLOTS, Project, ProjectCollection, PullRequest, PullRequestCollection, Repository, RepositoryCollection, issueIncorporateFeedbackPrompt, Repositories_exports as n, Issues_exports as r, Comment_exports as t };
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