@happyvertical/smrt-projects 0.57.19 → 0.57.21

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 (57) hide show
  1. package/AGENTS.md +3 -0
  2. package/README.md +68 -0
  3. package/dist/collections/DevelopmentRequests.d.ts.map +1 -1
  4. package/dist/collections/ProjectDecisions.d.ts +9 -0
  5. package/dist/collections/ProjectDecisions.d.ts.map +1 -0
  6. package/dist/collections/ProjectGovernanceEvents.d.ts +11 -0
  7. package/dist/collections/ProjectGovernanceEvents.d.ts.map +1 -0
  8. package/dist/collections/ProjectQuestions.d.ts +9 -0
  9. package/dist/collections/ProjectQuestions.d.ts.map +1 -0
  10. package/dist/collections/ProjectSpecifications.d.ts +8 -0
  11. package/dist/collections/ProjectSpecifications.d.ts.map +1 -0
  12. package/dist/collections/index.d.ts +4 -0
  13. package/dist/collections/index.d.ts.map +1 -1
  14. package/dist/index.d.ts +11 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +1120 -51
  17. package/dist/index.js.map +1 -1
  18. package/dist/manifest.json +4604 -2323
  19. package/dist/models/DevelopmentRequest.d.ts +2 -2
  20. package/dist/models/DevelopmentRequest.d.ts.map +1 -1
  21. package/dist/models/ProjectDecision.d.ts +39 -0
  22. package/dist/models/ProjectDecision.d.ts.map +1 -0
  23. package/dist/models/ProjectGovernanceEvent.d.ts +40 -0
  24. package/dist/models/ProjectGovernanceEvent.d.ts.map +1 -0
  25. package/dist/models/ProjectQuestion.d.ts +32 -0
  26. package/dist/models/ProjectQuestion.d.ts.map +1 -0
  27. package/dist/models/ProjectSpecification.d.ts +26 -0
  28. package/dist/models/ProjectSpecification.d.ts.map +1 -0
  29. package/dist/models/index.d.ts +4 -0
  30. package/dist/models/index.d.ts.map +1 -1
  31. package/dist/models/project-governance-validation.d.ts +6 -0
  32. package/dist/models/project-governance-validation.d.ts.map +1 -0
  33. package/dist/project-governance-types.d.ts +49 -0
  34. package/dist/project-governance-types.d.ts.map +1 -0
  35. package/dist/services/development-request-service.d.ts.map +1 -1
  36. package/dist/services/index.d.ts +3 -0
  37. package/dist/services/index.d.ts.map +1 -1
  38. package/dist/services/participant-development-request-service.d.ts +34 -0
  39. package/dist/services/participant-development-request-service.d.ts.map +1 -0
  40. package/dist/services/project-governance-service.d.ts +106 -0
  41. package/dist/services/project-governance-service.d.ts.map +1 -0
  42. package/dist/services/project-specification-service.d.ts +30 -0
  43. package/dist/services/project-specification-service.d.ts.map +1 -0
  44. package/dist/smrt-knowledge.json +915 -49
  45. package/dist/svelte/ProjectQuestionsAndDecisions.svelte +183 -0
  46. package/dist/svelte/ProjectQuestionsAndDecisions.svelte.d.ts +17 -0
  47. package/dist/svelte/ProjectQuestionsAndDecisions.svelte.d.ts.map +1 -0
  48. package/dist/svelte/i18n.d.ts +16 -0
  49. package/dist/svelte/i18n.d.ts.map +1 -1
  50. package/dist/svelte/i18n.js +16 -0
  51. package/dist/svelte/index.d.ts +4 -1
  52. package/dist/svelte/index.d.ts.map +1 -1
  53. package/dist/svelte/index.js +3 -1
  54. package/dist/svelte/project-governance-types.d.ts +35 -0
  55. package/dist/svelte/project-governance-types.d.ts.map +1 -0
  56. package/dist/svelte/project-governance-types.js +1 -0
  57. package/package.json +14 -13
package/dist/index.js CHANGED
@@ -5,10 +5,11 @@ import { r as issueIncorporateFeedbackPrompt, t as Issue } from "./chunks/Issue-
5
5
  import { r as withRepositoryClient, t as getScopedRepositoryClient } from "./chunks/repository-client-scope-CAnWW7-r.js";
6
6
  import { t as PullRequest } from "./chunks/PullRequest-Baj0yZv-.js";
7
7
  import { PROJECTS_MODULE_META, PROJECTS_UI_SLOTS } from "./ui.js";
8
- import { ObjectRegistry, SmrtCollection, SmrtObject, SmrtRecipe, field, foreignKey, smrt, toSnakeCase } from "@happyvertical/smrt-core";
8
+ import { ObjectRegistry, SmrtCollection, SmrtObject, SmrtPolymorphicAssociation, SmrtRecipe, field, foreignKey, isUniqueViolationError, smrt, toSnakeCase } from "@happyvertical/smrt-core";
9
9
  import { createLogger } from "@happyvertical/logger";
10
- import { TenantScoped, queryGlobal, queryWithGlobals, tenantId, withTenant } from "@happyvertical/smrt-tenancy";
10
+ import { TenantScoped, assertTenantReadAllowed, queryGlobal, queryWithGlobals, tenantId, withTenant } from "@happyvertical/smrt-tenancy";
11
11
  import { createHash, randomBytes } from "node:crypto";
12
+ import { validateCookbook } from "@happyvertical/smrt-core/cookbook";
12
13
  import { getProject } from "@happyvertical/projects";
13
14
  import { getModuleConfig } from "@happyvertical/smrt-config";
14
15
  import { getRepository } from "@happyvertical/repos";
@@ -16,7 +17,7 @@ import { preflightMinorUnitsRescale, rescaleMoneyColumnsToMinorUnits } from "@ha
16
17
  import { ServiceChargeSnapshot, ServiceChargeSnapshotCollection, ServiceCompensationSnapshot, ServiceCompensationSnapshotCollection, ServiceEvidenceService, ServiceTimeEntry, ServiceTimeEntryCollection } from "@happyvertical/smrt-timesheets";
17
18
  import { CommercialUsageService } from "@happyvertical/smrt-subscriptions";
18
19
  //#region src/__smrt-register__.ts
19
- ObjectRegistry.registerPackageManifest(JSON.parse(`{"version":"1.0.0","timestamp":0,"packageName":"@happyvertical/smrt-projects","packageVersion":"0.57.19","objects":{"@happyvertical/smrt-projects:CommentCollection":{"name":"commentcollection","className":"CommentCollection","qualifiedName":"@happyvertical/smrt-projects:CommentCollection","collection":"comments","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/collections/Comments.ts","packageName":"@happyvertical/smrt-projects","fields":{},"methods":{},"decoratorConfig":{"api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"Comment","exportName":"CommentCollection","collectionExportName":"CommentCollectionCollection","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,"foreignKey":{"table":"issues","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"comments_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"comments_issue_id_idx","columns":["issue_id"]}],"version":"ffcc1937"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:DevelopmentRequestHistoryCollection":{"name":"developmentrequesthistorycollection","className":"DevelopmentRequestHistoryCollection","qualifiedName":"@happyvertical/smrt-projects:DevelopmentRequestHistoryCollection","collection":"developmentrequesthistories","filePath":"/home/runner/work/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","api":false,"mcp":false,"cli":false},"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 \\"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,"foreignKey":{"table":"development_requests","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"development_request_histories_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"development_request_histories_request_id_idx","columns":["request_id"]}],"version":"67389678"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:DevelopmentRequestCollection":{"name":"developmentrequestcollection","className":"DevelopmentRequestCollection","qualifiedName":"@happyvertical/smrt-projects:DevelopmentRequestCollection","collection":"developmentrequests","filePath":"/home/runner/work/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,"typeUnresolved":true}],"returnType":"Promise<DevelopmentRequest>","isStatic":false,"isPublic":true},"listByIntegrationRequester":{"name":"listByIntegrationRequester","async":true,"parameters":[{"name":"input","type":"object","optional":false,"memberTypes":["string"]}],"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","api":false,"mcp":false,"cli":false},"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 \\"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,"foreignKey":{"table":"project_integrations","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"development_requests_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"development_requests_integration_id_idx","columns":["integration_id"]}],"version":"4bdaa6ff"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:IssueCollection":{"name":"issuecollection","className":"IssueCollection","qualifiedName":"@happyvertical/smrt-projects:IssueCollection","collection":"issues","filePath":"/home/runner/work/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,"memberTypes":["Repository","SearchFilters"]}],"returnType":"Promise<Issue[]>","isStatic":false,"isPublic":true},"findByProject":{"name":"findByProject","async":true,"parameters":[{"name":"projectId","type":"string","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,"memberTypes":["boolean"]}],"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":{"api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"],"skipApiCheck":true}},"extends":"SmrtCollection","extendsTypeArg":"Issue","exportName":"IssueCollection","collectionExportName":"IssueCollectionCollection","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 \\"project_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,"foreignKey":{"table":"repositories","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"project_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"projects","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"issues_meta_type_idx","columns":["_meta_type"]},{"name":"issues_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"issues_repository_id_idx","columns":["repository_id"]},{"name":"issues_project_id_idx","columns":["project_id"]}],"version":"83fb5e05"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectIntegrationAuditCollection":{"name":"projectintegrationauditcollection","className":"ProjectIntegrationAuditCollection","qualifiedName":"@happyvertical/smrt-projects:ProjectIntegrationAuditCollection","collection":"projectintegrationaudits","filePath":"/home/runner/work/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","api":false,"mcp":false,"cli":false},"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 \\"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,"foreignKey":{"table":"project_integrations","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"action":{"type":"TEXT","notNull":false,"unique":false,"default":"created"},"note":{"type":"TEXT","notNull":false,"unique":false}},"indexes":[{"name":"project_integration_audits_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"project_integration_audits_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"project_integration_audits_integration_id_idx","columns":["integration_id"]}],"version":"03cc10a2"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectIntegrationCollection":{"name":"projectintegrationcollection","className":"ProjectIntegrationCollection","qualifiedName":"@happyvertical/smrt-projects:ProjectIntegrationCollection","collection":"projectintegrations","filePath":"/home/runner/work/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,"memberTypes":["string","ProjectIntegrationCapability[]"]}],"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","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"]}},"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 \\"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_tenant_id_project_id_idx","columns":["tenant_id","project_id","name"],"unique":true,"nullsNotDistinct":true},{"name":"project_integrations_slug_context_idx","columns":["slug","context"]},{"name":"project_integrations_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"bfbaa783"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectCollection":{"name":"projectcollection","className":"ProjectCollection","qualifiedName":"@happyvertical/smrt-projects:ProjectCollection","collection":"projects","filePath":"/home/runner/work/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,"memberTypes":["string","ProjectProviderType","Record<string, string>"]}],"returnType":"Promise<Project>","isStatic":false,"isPublic":true},"syncAll":{"name":"syncAll","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["boolean"]}],"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":{"api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"],"skipApiCheck":true}},"extends":"SmrtCollection","extendsTypeArg":"Project","exportName":"ProjectCollection","collectionExportName":"ProjectCollectionCollection","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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"projects_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"2e8c344a"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:PullRequestCollection":{"name":"pullrequestcollection","className":"PullRequestCollection","qualifiedName":"@happyvertical/smrt-projects:PullRequestCollection","collection":"issues","filePath":"/home/runner/work/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,"memberTypes":["Repository","SearchFilters"]}],"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,"unionBranches":[{"type":"'xs'"},{"type":"'s'"},{"type":"'m'"},{"type":"'l'"},{"type":"'xl'"}]},{"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,"memberTypes":["boolean"]}],"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","api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"],"skipApiCheck":true}},"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 \\"_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 \\"project_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,"foreignKey":{"table":"repositories","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"project_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"projects","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"issues_meta_type_idx","columns":["_meta_type"]},{"name":"issues_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"issues_repository_id_idx","columns":["repository_id"]},{"name":"issues_project_id_idx","columns":["project_id"]}],"version":"0ebf6fbd"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:RepositoryCollection":{"name":"repositorycollection","className":"RepositoryCollection","qualifiedName":"@happyvertical/smrt-projects:RepositoryCollection","collection":"repositories","filePath":"/home/runner/work/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,"memberTypes":["RepositoryProviderType","string"]}],"returnType":"Promise<Repository>","isStatic":false,"isPublic":true},"syncAll":{"name":"syncAll","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["boolean"]}],"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":{"api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get","create"],"skipApiCheck":true}},"extends":"SmrtCollection","extendsTypeArg":"Repository","exportName":"RepositoryCollection","collectionExportName":"RepositoryCollectionCollection","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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"repositories_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"c302a5e5"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:Comment":{"name":"comment","className":"Comment","qualifiedName":"@happyvertical/smrt-projects:Comment","collection":"comments","filePath":"/home/runner/work/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","description":"The issue this comment is on.","_meta":{"description":"The issue this comment is on."}},"commentId":{"type":"text","required":false,"default":""},"body":{"type":"text","required":false,"default":"","description":"The comment text.","_meta":{"description":"The comment text."}},"author":{"type":"text","required":false,"default":"","description":"Who wrote it.","_meta":{"description":"Who wrote it."}},"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<CommentSentiment>","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"]},"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context"]},"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,"foreignKey":{"table":"issues","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"comments_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"comments_issue_id_idx","columns":["issue_id"]}],"version":"ffcc1937"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:DevelopmentRequest":{"name":"developmentrequest","className":"DevelopmentRequest","qualifiedName":"@happyvertical/smrt-projects:DevelopmentRequest","collection":"developmentrequests","filePath":"/home/runner/work/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","enum":["requester","workspace","public","project_team","internal"]},"origin":{"type":"text","required":false,"default":"managed-app"},"discussion":{"type":"text","required":false,"default":""},"status":{"type":"text","required":false,"default":"submitted","enum":["submitted","triaged","planned","in_progress","completed","declined"]}},"methods":{"initialize":{"name":"initialize","async":true,"parameters":[],"returnType":"Promise<this>","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,"unionBranches":[{"type":"DevelopmentRequestEvidence[]"},{"type":"string"}]}],"returnType":"void","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"development_requests","api":false,"mcp":false,"cli":false,"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"DevelopmentRequest","collectionExportName":"DevelopmentRequestCollection","validationRules":[{"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,"foreignKey":{"table":"project_integrations","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"development_requests_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"development_requests_integration_id_idx","columns":["integration_id"]}],"version":"4bdaa6ff"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:DevelopmentRequestHistory":{"name":"developmentrequesthistory","className":"DevelopmentRequestHistory","qualifiedName":"@happyvertical/smrt-projects:DevelopmentRequestHistory","collection":"developmentrequesthistories","filePath":"/home/runner/work/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","enum":["submitted","triaged","planned","in_progress","completed","declined"]},"actorType":{"type":"text","required":false,"default":"system","enum":["integration","participant","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"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"DevelopmentRequestHistory","collectionExportName":"DevelopmentRequestHistoryCollection","validationRules":[{"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,"foreignKey":{"table":"development_requests","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"development_request_histories_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"development_request_histories_request_id_idx","columns":["request_id"]}],"version":"67389678"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:Issue":{"name":"issue","className":"Issue","qualifiedName":"@happyvertical/smrt-projects:Issue","collection":"issues","filePath":"/home/runner/work/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":false,"related":"Repository"},"projectId":{"type":"foreignKey","required":false,"related":"Project","description":"The project this issue belongs to.","_meta":{"description":"The project this issue belongs to."}},"number":{"type":"integer","required":false,"default":0},"nodeId":{"type":"text","required":false,"default":""},"title":{"type":"text","required":false,"default":"","description":"A short summary of the issue.","_meta":{"description":"A short summary of the issue."}},"body":{"type":"text","required":false,"default":"","description":"The full description.","_meta":{"description":"The full description."}},"state":{"type":"text","required":false,"default":"open","description":"open or closed.","_meta":{"description":"open or closed."},"enum":["open","closed"]},"author":{"type":"text","required":false,"default":"","description":"Who raised the issue.","_meta":{"description":"Who raised the issue."}},"labels":{"type":"json","required":false,"default":[],"description":"The labels attached to the issue.","_meta":{"description":"The labels attached to the issue."}},"assignees":{"type":"json","required":false,"default":[],"description":"The people working on it.","_meta":{"description":"The people working on it."}},"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":{"hasRepository":{"name":"hasRepository","async":false,"parameters":[],"returnType":"boolean","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<this>","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":[{"name":"vocabulary","type":"IssueLabelVocabulary","optional":true}],"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"},"conflictColumns":["tenant_id","slug","context","_meta_type"]},"extends":"SmrtObject","exportName":"Issue","collectionExportName":"IssueCollection","displayLabelField":"title","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 \\"project_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,"foreignKey":{"table":"repositories","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"project_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"projects","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"issues_meta_type_idx","columns":["_meta_type"]},{"name":"issues_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"issues_repository_id_idx","columns":["repository_id"]},{"name":"issues_project_id_idx","columns":["project_id"]}],"version":"83fb5e05"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:Label":{"name":"label","className":"Label","qualifiedName":"@happyvertical/smrt-projects:Label","collection":"labels","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/models/Label.ts","packageName":"@happyvertical/smrt-projects","fields":{"repositoryId":{"type":"foreignKey","required":false,"related":"Repository"},"projectId":{"type":"foreignKey","required":false,"related":"Project","description":"The project this label belongs to.","_meta":{"description":"The project this label belongs to."}},"name":{"type":"text","required":false,"default":"","description":"The label's name, for example bug.","_meta":{"description":"The label's name, for example bug."}},"color":{"type":"text","required":false,"default":"","description":"The label's colour.","_meta":{"description":"The label's colour."}},"description":{"type":"text","required":false,"default":"","description":"What the label means.","_meta":{"description":"What the label means."}}},"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","displayLabelField":"name","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 \\"project_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,"foreignKey":{"table":"repositories","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"project_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"projects","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["slug","context"],"unique":true},{"name":"labels_created_at_idx","columns":["created_at"]},{"name":"labels_repository_id_idx","columns":["repository_id"]},{"name":"labels_project_id_idx","columns":["project_id"]}],"version":"664f110a"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:Project":{"name":"project","className":"Project","qualifiedName":"@happyvertical/smrt-projects:Project","collection":"projects","filePath":"/home/runner/work/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":"The project's name.","_meta":{"description":"The project's name."}},"description":{"type":"text","required":false,"default":"","description":"What the project is about.","_meta":{"description":"What the project is about."}},"owner":{"type":"text","required":false,"default":"","description":"Who owns or runs the project.","_meta":{"description":"Who owns or runs the project."}},"url":{"type":"text","required":false,"default":"","description":"A link to the project elsewhere.","_meta":{"description":"A link to the project elsewhere."}},"providerType":{"type":"text","required":false,"default":"github","enum":["github","jira","linear","zenhub"]},"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<this>","isStatic":false,"isPublic":true},"addItem":{"name":"addItem","async":true,"parameters":[{"name":"item","type":"Issue | PullRequest","optional":false,"unionBranches":[{"type":"Issue"},{"type":"PullRequest"}]}],"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":"unknown","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,"unionBranches":[{"type":"Issue"},{"type":"PullRequest"}]},{"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"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"Project","collectionExportName":"ProjectCollection","displayLabelField":"title","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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"projects_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"2e8c344a"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectIntegration":{"name":"projectintegration","className":"ProjectIntegration","qualifiedName":"@happyvertical/smrt-projects:ProjectIntegration","collection":"projectintegrations","filePath":"/home/runner/work/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","enum":["active","revoked"]},"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","displayLabelField":"name","validationRules":[],"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_tenant_id_project_id_idx","columns":["tenant_id","project_id","name"],"unique":true,"nullsNotDistinct":true},{"name":"project_integrations_slug_context_idx","columns":["slug","context"]},{"name":"project_integrations_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"bfbaa783"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectIntegrationAudit":{"name":"projectintegrationaudit","className":"ProjectIntegrationAudit","qualifiedName":"@happyvertical/smrt-projects:ProjectIntegrationAudit","collection":"projectintegrationaudits","filePath":"/home/runner/work/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","enum":["created","rotated","revoked"]},"note":{"type":"text","required":false}},"methods":{},"decoratorConfig":{"tableName":"project_integration_audits","api":false,"mcp":false,"cli":false,"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"ProjectIntegrationAudit","collectionExportName":"ProjectIntegrationAuditCollection","validationRules":[{"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,"foreignKey":{"table":"project_integrations","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"action":{"type":"TEXT","notNull":false,"unique":false,"default":"created"},"note":{"type":"TEXT","notNull":false,"unique":false}},"indexes":[{"name":"project_integration_audits_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"project_integration_audits_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"project_integration_audits_integration_id_idx","columns":["integration_id"]}],"version":"03cc10a2"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:PullRequest":{"name":"pullrequest","className":"PullRequest","qualifiedName":"@happyvertical/smrt-projects:PullRequest","collection":"issues","filePath":"/home/runner/work/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":false,"related":"Repository"},"projectId":{"type":"foreignKey","required":false,"related":"Project","description":"The project this issue belongs to.","_meta":{"description":"The project this issue belongs to."}},"number":{"type":"integer","required":false,"default":0},"nodeId":{"type":"text","required":false,"default":""},"title":{"type":"text","required":false,"default":"","description":"A short summary of the issue.","_meta":{"description":"A short summary of the issue."}},"body":{"type":"text","required":false,"default":"","description":"The full description.","_meta":{"description":"The full description."}},"state":{"type":"text","required":false,"default":"open","description":"open or closed.","_meta":{"description":"open or closed."},"enum":["open","closed"]},"author":{"type":"text","required":false,"default":"","description":"Who raised the issue.","_meta":{"description":"Who raised the issue."}},"labels":{"type":"json","required":false,"default":[],"description":"The labels attached to the issue.","_meta":{"description":"The labels attached to the issue."}},"assignees":{"type":"json","required":false,"default":[],"description":"The people working on it.","_meta":{"description":"The people working on it."}},"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":{"hasRepository":{"name":"hasRepository","async":false,"parameters":[],"returnType":"boolean","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<this>","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":[{"name":"vocabulary","type":"IssueLabelVocabulary","optional":true}],"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","displayLabelField":"title","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 \\"project_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,"foreignKey":{"table":"repositories","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"project_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"projects","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"issues_meta_type_idx","columns":["_meta_type"]},{"name":"issues_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"issues_repository_id_idx","columns":["repository_id"]},{"name":"issues_project_id_idx","columns":["project_id"]}],"version":"0ebf6fbd"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:Repository":{"name":"repository","className":"Repository","qualifiedName":"@happyvertical/smrt-projects:Repository","collection":"repositories","filePath":"/home/runner/work/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","enum":["github","gitlab","bitbucket","azure"]},"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<this>","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"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"Repository","collectionExportName":"RepositoryCollection","displayLabelField":"name","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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"repositories_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"c302a5e5"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:DevelopmentRequestWorkLink":{"name":"developmentrequestworklink","className":"DevelopmentRequestWorkLink","qualifiedName":"@happyvertical/smrt-projects:DevelopmentRequestWorkLink","collection":"developmentrequestworklinks","description":"Provider-neutral connection from a Development Request to canonical work.","filePath":"/home/runner/work/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"],"api":false,"cli":false,"mcp":false,"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"DevelopmentRequestWorkLink","collectionExportName":"DevelopmentRequestWorkLinkCollection","validationRules":[{"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,"foreignKey":{"table":"development_requests","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"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_request_id_work_item_type_idx","columns":["request_id","work_item_type","work_item_id"],"unique":true,"nullsNotDistinct":true},{"name":"development_request_work_links_slug_context_idx","columns":["slug","context"]},{"name":"development_request_work_links_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"adcbaa21"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectDeliveryEvent":{"name":"projectdeliveryevent","className":"ProjectDeliveryEvent","qualifiedName":"@happyvertical/smrt-projects:ProjectDeliveryEvent","collection":"projectdeliveryevents","description":"Ordered, idempotent delivery update emitted by the control plane.","filePath":"/home/runner/work/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":{},"enum":["work_linked","branch","pull_request","ci","preview","approval","deployment","completed","rejected"]},"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"],"api":false,"cli":false,"mcp":false,"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"ProjectDeliveryEvent","collectionExportName":"ProjectDeliveryEventCollection","validationRules":[{"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,"foreignKey":{"table":"project_integrations","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"request_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"development_requests","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_integration_id_idempotency_key_idx","columns":["integration_id","idempotency_key"],"unique":true,"nullsNotDistinct":true},{"name":"project_delivery_events_slug_context_idx","columns":["slug","context"]},{"name":"project_delivery_events_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"project_delivery_events_request_id_idx","columns":["request_id"]}],"version":"99b9e301"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:PreviewApproval":{"name":"previewapproval","className":"PreviewApproval","qualifiedName":"@happyvertical/smrt-projects:PreviewApproval","collection":"previewapprovals","description":"Client decision state for one preview produced during delivery.","filePath":"/home/runner/work/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":{},"enum":["pending","approved","rejected","stale"]},"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"],"api":false,"cli":false,"mcp":false,"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"PreviewApproval","collectionExportName":"PreviewApprovalCollection","validationRules":[{"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,"foreignKey":{"table":"development_requests","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"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_request_id_preview_id_idx","columns":["request_id","preview_id"],"unique":true,"nullsNotDistinct":true},{"name":"preview_approvals_slug_context_idx","columns":["slug","context"]},{"name":"preview_approvals_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"ec7b2b14"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:AssistanceRequest":{"name":"assistancerequest","className":"AssistanceRequest","qualifiedName":"@happyvertical/smrt-projects:AssistanceRequest","collection":"assistancerequests","description":"Lossless conversational intake before support/development classification.","filePath":"/home/runner/work/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":{},"enum":["unclassified","support","development","both"]},"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","api":false,"cli":false,"mcp":false,"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"AssistanceRequest","collectionExportName":"AssistanceRequestCollection","validationRules":[{"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,"foreignKey":{"table":"project_integrations","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"assistance_requests_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"assistance_requests_integration_id_idx","columns":["integration_id"]}],"version":"d1653259"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:AssistanceRequestEvent":{"name":"assistancerequestevent","className":"AssistanceRequestEvent","qualifiedName":"@happyvertical/smrt-projects:AssistanceRequestEvent","collection":"assistancerequestevents","description":"Append-only explanation of Assistance Request routing decisions.","filePath":"/home/runner/work/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":{},"enum":["unclassified","support","development","both"]},"resultingClassification":{"type":"text","required":false,"_meta":{},"enum":["unclassified","support","development","both"]},"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","api":false,"cli":false,"mcp":false,"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"AssistanceRequestEvent","collectionExportName":"AssistanceRequestEventCollection","validationRules":[{"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,"foreignKey":{"table":"assistance_requests","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"assistance_request_events_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"assistance_request_events_assistance_request_id_idx","columns":["assistance_request_id"]}],"version":"bcc95ebe"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:DevelopmentRequestWorkLinkCollection":{"name":"developmentrequestworklinkcollection","className":"DevelopmentRequestWorkLinkCollection","qualifiedName":"@happyvertical/smrt-projects:DevelopmentRequestWorkLinkCollection","collection":"developmentrequestworklinks","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts","packageName":"@happyvertical/smrt-projects","fields":{},"methods":{},"decoratorConfig":{"tableName":"development_request_work_links","api":false,"mcp":false,"cli":false},"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 \\"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,"foreignKey":{"table":"development_requests","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"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_request_id_work_item_type_idx","columns":["request_id","work_item_type","work_item_id"],"unique":true,"nullsNotDistinct":true},{"name":"development_request_work_links_slug_context_idx","columns":["slug","context"]},{"name":"development_request_work_links_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"adcbaa21"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectDeliveryEventCollection":{"name":"projectdeliveryeventcollection","className":"ProjectDeliveryEventCollection","qualifiedName":"@happyvertical/smrt-projects:ProjectDeliveryEventCollection","collection":"projectdeliveryevents","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts","packageName":"@happyvertical/smrt-projects","fields":{},"methods":{},"decoratorConfig":{"tableName":"project_delivery_events","api":false,"mcp":false,"cli":false},"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 \\"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,"foreignKey":{"table":"project_integrations","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"request_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"development_requests","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_integration_id_idempotency_key_idx","columns":["integration_id","idempotency_key"],"unique":true,"nullsNotDistinct":true},{"name":"project_delivery_events_slug_context_idx","columns":["slug","context"]},{"name":"project_delivery_events_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"project_delivery_events_request_id_idx","columns":["request_id"]}],"version":"99b9e301"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:PreviewApprovalCollection":{"name":"previewapprovalcollection","className":"PreviewApprovalCollection","qualifiedName":"@happyvertical/smrt-projects:PreviewApprovalCollection","collection":"previewapprovals","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts","packageName":"@happyvertical/smrt-projects","fields":{},"methods":{},"decoratorConfig":{"tableName":"preview_approvals","api":false,"mcp":false,"cli":false},"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 \\"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,"foreignKey":{"table":"development_requests","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"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_request_id_preview_id_idx","columns":["request_id","preview_id"],"unique":true,"nullsNotDistinct":true},{"name":"preview_approvals_slug_context_idx","columns":["slug","context"]},{"name":"preview_approvals_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"ec7b2b14"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:AssistanceRequestCollection":{"name":"assistancerequestcollection","className":"AssistanceRequestCollection","qualifiedName":"@happyvertical/smrt-projects:AssistanceRequestCollection","collection":"assistancerequests","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts","packageName":"@happyvertical/smrt-projects","fields":{},"methods":{},"decoratorConfig":{"tableName":"assistance_requests","api":false,"mcp":false,"cli":false},"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 \\"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,"foreignKey":{"table":"project_integrations","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"assistance_requests_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"assistance_requests_integration_id_idx","columns":["integration_id"]}],"version":"d1653259"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:AssistanceRequestEventCollection":{"name":"assistancerequesteventcollection","className":"AssistanceRequestEventCollection","qualifiedName":"@happyvertical/smrt-projects:AssistanceRequestEventCollection","collection":"assistancerequestevents","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts","packageName":"@happyvertical/smrt-projects","fields":{},"methods":{},"decoratorConfig":{"tableName":"assistance_request_events","api":false,"mcp":false,"cli":false},"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 \\"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,"foreignKey":{"table":"assistance_requests","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"assistance_request_events_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"assistance_request_events_assistance_request_id_idx","columns":["assistance_request_id"]}],"version":"bcc95ebe"},"importPath":"@happyvertical/smrt-projects"}},"moduleType":"smrt","recipes":[{"id":"projects.tracker","className":"ProjectTrackerRecipe","label":"Projects","summary":"Track projects and the issues, labels and comments inside them.","synonyms":["issues","tasks","tickets","bugs","kanban"],"models":["@happyvertical/smrt-projects:Project","@happyvertical/smrt-projects:Issue","@happyvertical/smrt-projects:Label","@happyvertical/smrt-projects:Comment"],"nav":[{"label":"All projects","model":"@happyvertical/smrt-projects:Project","icon":"folder","description":"Bigger jobs broken into steps you can follow."},{"label":"Issues","model":"@happyvertical/smrt-projects:Issue","icon":"wrench","description":"Problems and to-dos to track until they are done."},{"label":"Labels","model":"@happyvertical/smrt-projects:Label","icon":"tag","description":"Tags to sort your projects and issues your way."}],"requires":[],"section":{"id":"projects","label":"Projects","icon":"briefcase","description":"Projects, their issues, labels and comments."},"options":{"@happyvertical/smrt-projects:Project":{"fields":{"projectId":{"visibility":"hidden"},"projectNumber":{"visibility":"hidden"},"providerType":{"visibility":"hidden"},"tokenConfigKey":{"visibility":"hidden"},"statuses":{"visibility":"hidden"},"fields":{"visibility":"hidden"},"statusFieldId":{"visibility":"hidden"},"statusOptions":{"visibility":"hidden"},"lastSyncedAt":{"visibility":"hidden"}}},"@happyvertical/smrt-projects:Issue":{"fields":{"nodeId":{"visibility":"hidden"},"originalBody":{"visibility":"hidden"},"synthesisCount":{"visibility":"hidden"},"lastSyncedAt":{"visibility":"hidden"},"commentsCount":{"visibility":"hidden"},"repositoryId":{"visibility":"hidden"},"number":{"visibility":"hidden"}}},"@happyvertical/smrt-projects:Comment":{"fields":{"commentId":{"visibility":"hidden"},"url":{"visibility":"hidden"}}},"@happyvertical/smrt-projects:Label":{"fields":{"repositoryId":{"visibility":"hidden"}}}},"help":{"markdown":"## Overview\\n\\nProjects tracks the work you are planning: projects, the issues in them, and\\nthe labels and comments that organise them.\\n\\n## Tasks\\n\\n### Start a project\\n\\n1. Create a new project.\\n2. Give it a **{field:title}** and a **{field:description}**.\\n\\n### Log an issue\\n\\n1. Create a new issue and pick the **{field:projectId}**.\\n2. Write a **{field:title}** and a **{field:body}**.\\n3. Close it by setting **{field:state}** to closed. Comments are attached to the\\n issue.\\n","fieldRefs":["body","description","projectId","state","title"]},"demo":{"mode":"server","reasons":["Needs a server because its package does not build for a browser: node:crypto/async_hooks; core migrations; repos and ai SDKs; and its package depends on @happyvertical/smrt-profiles, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-timesheets, @happyvertical/smrt-users, which do not build for a browser (#3617, #3624, #3626, #3627)."]}}],"smrtDependencies":["@happyvertical/smrt-core","@happyvertical/smrt-prompts","@happyvertical/smrt-subscriptions","@happyvertical/smrt-tenancy","@happyvertical/smrt-timesheets"],"browser":{"status":"server-only","issues":["#3617","#3624","#3626","#3627"],"reason":"node:crypto/async_hooks; core migrations; repos and ai SDKs","via":["@happyvertical/smrt-profiles","@happyvertical/smrt-subscriptions","@happyvertical/smrt-tenancy","@happyvertical/smrt-timesheets","@happyvertical/smrt-users"]},"stampsConstructors":true}`));
20
+ ObjectRegistry.registerPackageManifest(JSON.parse(`{"version":"1.0.0","timestamp":0,"packageName":"@happyvertical/smrt-projects","packageVersion":"0.57.21","objects":{"@happyvertical/smrt-projects:CommentCollection":{"name":"commentcollection","className":"CommentCollection","qualifiedName":"@happyvertical/smrt-projects:CommentCollection","collection":"comments","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/collections/Comments.ts","packageName":"@happyvertical/smrt-projects","fields":{},"methods":{},"decoratorConfig":{"api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"Comment","exportName":"CommentCollection","collectionExportName":"CommentCollectionCollection","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,"foreignKey":{"table":"issues","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"comments_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"comments_issue_id_idx","columns":["issue_id"]}],"version":"ffcc1937"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:DevelopmentRequestHistoryCollection":{"name":"developmentrequesthistorycollection","className":"DevelopmentRequestHistoryCollection","qualifiedName":"@happyvertical/smrt-projects:DevelopmentRequestHistoryCollection","collection":"developmentrequesthistories","filePath":"/home/runner/work/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","api":false,"mcp":false,"cli":false},"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 \\"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,"foreignKey":{"table":"development_requests","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"development_request_histories_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"development_request_histories_request_id_idx","columns":["request_id"]}],"version":"67389678"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:DevelopmentRequestCollection":{"name":"developmentrequestcollection","className":"DevelopmentRequestCollection","qualifiedName":"@happyvertical/smrt-projects:DevelopmentRequestCollection","collection":"developmentrequests","filePath":"/home/runner/work/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,"typeUnresolved":true}],"returnType":"Promise<DevelopmentRequest>","isStatic":false,"isPublic":true},"listByIntegrationRequester":{"name":"listByIntegrationRequester","async":true,"parameters":[{"name":"input","type":"object","optional":false,"memberTypes":["string"]}],"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","api":false,"mcp":false,"cli":false},"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 \\"tenant_id\\" UUID NOT NULL,\\n \\"project_id\\" TEXT DEFAULT '',\\n \\"integration_id\\" UUID,\\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":false,"unique":false,"foreignKey":{"table":"project_integrations","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"development_requests_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"development_requests_integration_id_idx","columns":["integration_id"]}],"version":"2f7f7c8a"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:IssueCollection":{"name":"issuecollection","className":"IssueCollection","qualifiedName":"@happyvertical/smrt-projects:IssueCollection","collection":"issues","filePath":"/home/runner/work/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,"memberTypes":["Repository","SearchFilters"]}],"returnType":"Promise<Issue[]>","isStatic":false,"isPublic":true},"findByProject":{"name":"findByProject","async":true,"parameters":[{"name":"projectId","type":"string","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,"memberTypes":["boolean"]}],"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":{"api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"],"skipApiCheck":true}},"extends":"SmrtCollection","extendsTypeArg":"Issue","exportName":"IssueCollection","collectionExportName":"IssueCollectionCollection","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 \\"project_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,"foreignKey":{"table":"repositories","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"project_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"projects","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"issues_meta_type_idx","columns":["_meta_type"]},{"name":"issues_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"issues_repository_id_idx","columns":["repository_id"]},{"name":"issues_project_id_idx","columns":["project_id"]}],"version":"83fb5e05"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectDecisionCollection":{"name":"projectdecisioncollection","className":"ProjectDecisionCollection","qualifiedName":"@happyvertical/smrt-projects:ProjectDecisionCollection","collection":"projectdecisions","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/collections/ProjectDecisions.ts","packageName":"@happyvertical/smrt-projects","fields":{},"methods":{"listForProject":{"name":"listForProject","async":true,"parameters":[{"name":"scope","type":"ProjectGovernanceScope","optional":false},{"name":"status","type":"ProjectDecisionStatus","optional":true},{"name":"visibility","type":"ProjectGovernanceVisibility","optional":true}],"returnType":"Promise<ProjectDecision[]>","isStatic":false,"isPublic":true},"getForProject":{"name":"getForProject","async":true,"parameters":[{"name":"scope","type":"ProjectGovernanceScope","optional":false},{"name":"id","type":"string","optional":false}],"returnType":"Promise<ProjectDecision | null>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"project_decisions","api":false,"mcp":false,"cli":false},"extends":"SmrtCollection","extendsTypeArg":"ProjectDecision","exportName":"ProjectDecisionCollection","collectionExportName":"ProjectDecisionCollectionCollection","schema":{"tableName":"project_decisions","ddl":"CREATE TABLE IF NOT EXISTS \\"project_decisions\\" (\\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 \\"meta_type\\" TEXT NOT NULL,\\n \\"meta_id\\" TEXT NOT NULL,\\n \\"role\\" TEXT NOT NULL,\\n \\"sort_order\\" INTEGER DEFAULT 0,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"question\\" TEXT NOT NULL,\\n \\"decision_options\\" TEXT,\\n \\"outcome\\" TEXT,\\n \\"rationale\\" TEXT,\\n \\"status\\" TEXT NOT NULL DEFAULT 'open',\\n \\"owner_type\\" TEXT DEFAULT '',\\n \\"owner_id\\" TEXT,\\n \\"visibility\\" TEXT DEFAULT 'internal',\\n \\"context_references\\" TEXT,\\n \\"revision\\" INTEGER NOT NULL DEFAULT 1,\\n \\"decided_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"},"meta_type":{"type":"TEXT","notNull":true,"unique":false},"meta_id":{"type":"TEXT","notNull":true,"unique":false},"role":{"type":"TEXT","notNull":true,"unique":false},"sort_order":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"question":{"type":"TEXT","notNull":true,"unique":false},"decision_options":{"type":"TEXT","notNull":false,"unique":false},"outcome":{"type":"TEXT","notNull":false,"unique":false},"rationale":{"type":"TEXT","notNull":false,"unique":false},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"open"},"owner_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"owner_id":{"type":"TEXT","notNull":false,"unique":false},"visibility":{"type":"TEXT","notNull":false,"unique":false,"default":"internal"},"context_references":{"type":"TEXT","notNull":false,"unique":false},"revision":{"type":"INTEGER","notNull":true,"unique":false,"default":1},"decided_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"project_decisions_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"project_decisions_project_status_idx","columns":["tenant_id","meta_type","meta_id","status","created_at"]},{"name":"project_decisions_owner_status_idx","columns":["tenant_id","owner_type","owner_id","status"]},{"name":"project_decisions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"project_decisions_meta_type_meta_id_idx","columns":["meta_type","meta_id"]}],"version":"34ed60f9"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectGovernanceEventCollection":{"name":"projectgovernanceeventcollection","className":"ProjectGovernanceEventCollection","qualifiedName":"@happyvertical/smrt-projects:ProjectGovernanceEventCollection","collection":"projectgovernanceevents","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/collections/ProjectGovernanceEvents.ts","packageName":"@happyvertical/smrt-projects","fields":{},"methods":{"listForRecord":{"name":"listForRecord","async":true,"parameters":[{"name":"input","type":"object","optional":false,"memberTypes":["string"]}],"returnType":"Promise<ProjectGovernanceEvent[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"project_governance_events","api":false,"mcp":false,"cli":false},"extends":"SmrtCollection","extendsTypeArg":"ProjectGovernanceEvent","exportName":"ProjectGovernanceEventCollection","collectionExportName":"ProjectGovernanceEventCollectionCollection","schema":{"tableName":"project_governance_events","ddl":"CREATE TABLE IF NOT EXISTS \\"project_governance_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 \\"meta_type\\" TEXT NOT NULL,\\n \\"meta_id\\" TEXT NOT NULL,\\n \\"role\\" TEXT NOT NULL,\\n \\"sort_order\\" INTEGER DEFAULT 0,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"record_kind\\" TEXT NOT NULL DEFAULT 'question',\\n \\"action\\" TEXT NOT NULL DEFAULT 'created',\\n \\"actor_type\\" TEXT NOT NULL DEFAULT 'system',\\n \\"actor_id\\" TEXT NOT NULL,\\n \\"from_status\\" TEXT,\\n \\"to_status\\" TEXT NOT NULL,\\n \\"note\\" TEXT,\\n \\"value\\" TEXT,\\n \\"rationale\\" TEXT,\\n \\"revision\\" INTEGER NOT NULL DEFAULT 1,\\n \\"from_owner_type\\" TEXT DEFAULT '',\\n \\"from_owner_id\\" TEXT,\\n \\"to_owner_type\\" TEXT DEFAULT '',\\n \\"to_owner_id\\" 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"},"meta_type":{"type":"TEXT","notNull":true,"unique":false},"meta_id":{"type":"TEXT","notNull":true,"unique":false},"role":{"type":"TEXT","notNull":true,"unique":false},"sort_order":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"record_kind":{"type":"TEXT","notNull":true,"unique":false,"default":"question"},"action":{"type":"TEXT","notNull":true,"unique":false,"default":"created"},"actor_type":{"type":"TEXT","notNull":true,"unique":false,"default":"system"},"actor_id":{"type":"TEXT","notNull":true,"unique":false},"from_status":{"type":"TEXT","notNull":false,"unique":false},"to_status":{"type":"TEXT","notNull":true,"unique":false},"note":{"type":"TEXT","notNull":false,"unique":false},"value":{"type":"TEXT","notNull":false,"unique":false},"rationale":{"type":"TEXT","notNull":false,"unique":false},"revision":{"type":"INTEGER","notNull":true,"unique":false,"default":1},"from_owner_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"from_owner_id":{"type":"TEXT","notNull":false,"unique":false},"to_owner_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"to_owner_id":{"type":"TEXT","notNull":false,"unique":false}},"indexes":[{"name":"project_governance_events_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"project_governance_events_record_idx","columns":["tenant_id","meta_type","meta_id","created_at"]},{"name":"project_governance_events_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"project_governance_events_meta_type_meta_id_idx","columns":["meta_type","meta_id"]}],"version":"2db79e9a"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectIntegrationAuditCollection":{"name":"projectintegrationauditcollection","className":"ProjectIntegrationAuditCollection","qualifiedName":"@happyvertical/smrt-projects:ProjectIntegrationAuditCollection","collection":"projectintegrationaudits","filePath":"/home/runner/work/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","api":false,"mcp":false,"cli":false},"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 \\"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,"foreignKey":{"table":"project_integrations","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"action":{"type":"TEXT","notNull":false,"unique":false,"default":"created"},"note":{"type":"TEXT","notNull":false,"unique":false}},"indexes":[{"name":"project_integration_audits_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"project_integration_audits_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"project_integration_audits_integration_id_idx","columns":["integration_id"]}],"version":"03cc10a2"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectIntegrationCollection":{"name":"projectintegrationcollection","className":"ProjectIntegrationCollection","qualifiedName":"@happyvertical/smrt-projects:ProjectIntegrationCollection","collection":"projectintegrations","filePath":"/home/runner/work/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,"memberTypes":["string","ProjectIntegrationCapability[]"]}],"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","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"]}},"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 \\"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_tenant_id_project_id_idx","columns":["tenant_id","project_id","name"],"unique":true,"nullsNotDistinct":true},{"name":"project_integrations_slug_context_idx","columns":["slug","context"]},{"name":"project_integrations_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"bfbaa783"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectQuestionCollection":{"name":"projectquestioncollection","className":"ProjectQuestionCollection","qualifiedName":"@happyvertical/smrt-projects:ProjectQuestionCollection","collection":"projectquestions","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/collections/ProjectQuestions.ts","packageName":"@happyvertical/smrt-projects","fields":{},"methods":{"listForProject":{"name":"listForProject","async":true,"parameters":[{"name":"scope","type":"ProjectGovernanceScope","optional":false},{"name":"status","type":"ProjectQuestionStatus","optional":true},{"name":"visibility","type":"ProjectGovernanceVisibility","optional":true}],"returnType":"Promise<ProjectQuestion[]>","isStatic":false,"isPublic":true},"getForProject":{"name":"getForProject","async":true,"parameters":[{"name":"scope","type":"ProjectGovernanceScope","optional":false},{"name":"id","type":"string","optional":false}],"returnType":"Promise<ProjectQuestion | null>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"project_questions","api":false,"mcp":false,"cli":false},"extends":"SmrtCollection","extendsTypeArg":"ProjectQuestion","exportName":"ProjectQuestionCollection","collectionExportName":"ProjectQuestionCollectionCollection","schema":{"tableName":"project_questions","ddl":"CREATE TABLE IF NOT EXISTS \\"project_questions\\" (\\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 \\"meta_type\\" TEXT NOT NULL,\\n \\"meta_id\\" TEXT NOT NULL,\\n \\"role\\" TEXT NOT NULL,\\n \\"sort_order\\" INTEGER DEFAULT 0,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"prompt\\" TEXT NOT NULL,\\n \\"answer\\" TEXT,\\n \\"status\\" TEXT NOT NULL DEFAULT 'open',\\n \\"owner_type\\" TEXT DEFAULT '',\\n \\"owner_id\\" TEXT,\\n \\"visibility\\" TEXT DEFAULT 'internal',\\n \\"context_references\\" TEXT,\\n \\"revision\\" INTEGER NOT NULL DEFAULT 1,\\n \\"answered_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"},"meta_type":{"type":"TEXT","notNull":true,"unique":false},"meta_id":{"type":"TEXT","notNull":true,"unique":false},"role":{"type":"TEXT","notNull":true,"unique":false},"sort_order":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"prompt":{"type":"TEXT","notNull":true,"unique":false},"answer":{"type":"TEXT","notNull":false,"unique":false},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"open"},"owner_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"owner_id":{"type":"TEXT","notNull":false,"unique":false},"visibility":{"type":"TEXT","notNull":false,"unique":false,"default":"internal"},"context_references":{"type":"TEXT","notNull":false,"unique":false},"revision":{"type":"INTEGER","notNull":true,"unique":false,"default":1},"answered_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"project_questions_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"project_questions_project_status_idx","columns":["tenant_id","meta_type","meta_id","status","created_at"]},{"name":"project_questions_owner_status_idx","columns":["tenant_id","owner_type","owner_id","status"]},{"name":"project_questions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"project_questions_meta_type_meta_id_idx","columns":["meta_type","meta_id"]}],"version":"2906f527"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectSpecificationCollection":{"name":"projectspecificationcollection","className":"ProjectSpecificationCollection","qualifiedName":"@happyvertical/smrt-projects:ProjectSpecificationCollection","collection":"projectspecifications","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/collections/ProjectSpecifications.ts","packageName":"@happyvertical/smrt-projects","fields":{},"methods":{"getForProject":{"name":"getForProject","async":true,"parameters":[{"name":"scope","type":"ProjectGovernanceScope","optional":false}],"returnType":"Promise<ProjectSpecification | null>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"project_specifications","api":false,"mcp":false,"cli":false},"extends":"SmrtCollection","extendsTypeArg":"ProjectSpecification","exportName":"ProjectSpecificationCollection","collectionExportName":"ProjectSpecificationCollectionCollection","schema":{"tableName":"project_specifications","ddl":"CREATE TABLE IF NOT EXISTS \\"project_specifications\\" (\\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 \\"meta_type\\" TEXT NOT NULL,\\n \\"meta_id\\" TEXT NOT NULL,\\n \\"role\\" TEXT NOT NULL,\\n \\"sort_order\\" INTEGER DEFAULT 0,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"title\\" TEXT NOT NULL,\\n \\"summary\\" TEXT,\\n \\"cookbook\\" TEXT,\\n \\"revision\\" INTEGER NOT NULL DEFAULT 1,\\n \\"actor_type\\" TEXT,\\n \\"actor_id\\" 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"},"meta_type":{"type":"TEXT","notNull":true,"unique":false},"meta_id":{"type":"TEXT","notNull":true,"unique":false},"role":{"type":"TEXT","notNull":true,"unique":false},"sort_order":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"title":{"type":"TEXT","notNull":true,"unique":false},"summary":{"type":"TEXT","notNull":false,"unique":false},"cookbook":{"type":"TEXT","notNull":false,"unique":false},"revision":{"type":"INTEGER","notNull":true,"unique":false,"default":1},"actor_type":{"type":"TEXT","notNull":false,"unique":false},"actor_id":{"type":"TEXT","notNull":false,"unique":false}},"indexes":[{"name":"project_specifications_tenant_id_meta_type_idx","columns":["tenant_id","meta_type","meta_id"],"unique":true},{"name":"project_specifications_slug_context_idx","columns":["slug","context"]},{"name":"project_specifications_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"project_specifications_meta_type_meta_id_idx","columns":["meta_type","meta_id"]}],"version":"d3d39d7f"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectCollection":{"name":"projectcollection","className":"ProjectCollection","qualifiedName":"@happyvertical/smrt-projects:ProjectCollection","collection":"projects","filePath":"/home/runner/work/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,"memberTypes":["string","ProjectProviderType","Record<string, string>"]}],"returnType":"Promise<Project>","isStatic":false,"isPublic":true},"syncAll":{"name":"syncAll","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["boolean"]}],"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":{"api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"],"skipApiCheck":true}},"extends":"SmrtCollection","extendsTypeArg":"Project","exportName":"ProjectCollection","collectionExportName":"ProjectCollectionCollection","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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"projects_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"2e8c344a"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:PullRequestCollection":{"name":"pullrequestcollection","className":"PullRequestCollection","qualifiedName":"@happyvertical/smrt-projects:PullRequestCollection","collection":"issues","filePath":"/home/runner/work/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,"memberTypes":["Repository","SearchFilters"]}],"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,"unionBranches":[{"type":"'xs'"},{"type":"'s'"},{"type":"'m'"},{"type":"'l'"},{"type":"'xl'"}]},{"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,"memberTypes":["boolean"]}],"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","api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"],"skipApiCheck":true}},"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 \\"_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 \\"project_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,"foreignKey":{"table":"repositories","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"project_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"projects","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"issues_meta_type_idx","columns":["_meta_type"]},{"name":"issues_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"issues_repository_id_idx","columns":["repository_id"]},{"name":"issues_project_id_idx","columns":["project_id"]}],"version":"0ebf6fbd"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:RepositoryCollection":{"name":"repositorycollection","className":"RepositoryCollection","qualifiedName":"@happyvertical/smrt-projects:RepositoryCollection","collection":"repositories","filePath":"/home/runner/work/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,"memberTypes":["RepositoryProviderType","string"]}],"returnType":"Promise<Repository>","isStatic":false,"isPublic":true},"syncAll":{"name":"syncAll","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["boolean"]}],"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":{"api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get","create"],"skipApiCheck":true}},"extends":"SmrtCollection","extendsTypeArg":"Repository","exportName":"RepositoryCollection","collectionExportName":"RepositoryCollectionCollection","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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"repositories_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"c302a5e5"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:Comment":{"name":"comment","className":"Comment","qualifiedName":"@happyvertical/smrt-projects:Comment","collection":"comments","filePath":"/home/runner/work/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","description":"The issue this comment is on.","_meta":{"description":"The issue this comment is on."}},"commentId":{"type":"text","required":false,"default":""},"body":{"type":"text","required":false,"default":"","description":"The comment text.","_meta":{"description":"The comment text."}},"author":{"type":"text","required":false,"default":"","description":"Who wrote it.","_meta":{"description":"Who wrote it."}},"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<CommentSentiment>","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"]},"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context"]},"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,"foreignKey":{"table":"issues","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"comments_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"comments_issue_id_idx","columns":["issue_id"]}],"version":"ffcc1937"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:DevelopmentRequest":{"name":"developmentrequest","className":"DevelopmentRequest","qualifiedName":"@happyvertical/smrt-projects:DevelopmentRequest","collection":"developmentrequests","filePath":"/home/runner/work/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":false,"related":"ProjectIntegration"},"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","enum":["requester","workspace","public","project_team","internal"]},"origin":{"type":"text","required":false,"default":"managed-app"},"discussion":{"type":"text","required":false,"default":""},"status":{"type":"text","required":false,"default":"submitted","enum":["submitted","triaged","planned","in_progress","completed","declined"]}},"methods":{"initialize":{"name":"initialize","async":true,"parameters":[],"returnType":"Promise<this>","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,"unionBranches":[{"type":"DevelopmentRequestEvidence[]"},{"type":"string"}]}],"returnType":"void","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"development_requests","api":false,"mcp":false,"cli":false,"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"DevelopmentRequest","collectionExportName":"DevelopmentRequestCollection","validationRules":[],"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,\\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":false,"unique":false,"foreignKey":{"table":"project_integrations","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"development_requests_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"development_requests_integration_id_idx","columns":["integration_id"]}],"version":"2f7f7c8a"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:DevelopmentRequestHistory":{"name":"developmentrequesthistory","className":"DevelopmentRequestHistory","qualifiedName":"@happyvertical/smrt-projects:DevelopmentRequestHistory","collection":"developmentrequesthistories","filePath":"/home/runner/work/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","enum":["submitted","triaged","planned","in_progress","completed","declined"]},"actorType":{"type":"text","required":false,"default":"system","enum":["integration","participant","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"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"DevelopmentRequestHistory","collectionExportName":"DevelopmentRequestHistoryCollection","validationRules":[{"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,"foreignKey":{"table":"development_requests","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"development_request_histories_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"development_request_histories_request_id_idx","columns":["request_id"]}],"version":"67389678"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:Issue":{"name":"issue","className":"Issue","qualifiedName":"@happyvertical/smrt-projects:Issue","collection":"issues","filePath":"/home/runner/work/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":false,"related":"Repository"},"projectId":{"type":"foreignKey","required":false,"related":"Project","description":"The project this issue belongs to.","_meta":{"description":"The project this issue belongs to."}},"number":{"type":"integer","required":false,"default":0},"nodeId":{"type":"text","required":false,"default":""},"title":{"type":"text","required":false,"default":"","description":"A short summary of the issue.","_meta":{"description":"A short summary of the issue."}},"body":{"type":"text","required":false,"default":"","description":"The full description.","_meta":{"description":"The full description."}},"state":{"type":"text","required":false,"default":"open","description":"open or closed.","_meta":{"description":"open or closed."},"enum":["open","closed"]},"author":{"type":"text","required":false,"default":"","description":"Who raised the issue.","_meta":{"description":"Who raised the issue."}},"labels":{"type":"json","required":false,"default":[],"description":"The labels attached to the issue.","_meta":{"description":"The labels attached to the issue."}},"assignees":{"type":"json","required":false,"default":[],"description":"The people working on it.","_meta":{"description":"The people working on it."}},"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":{"hasRepository":{"name":"hasRepository","async":false,"parameters":[],"returnType":"boolean","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<this>","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":[{"name":"vocabulary","type":"IssueLabelVocabulary","optional":true}],"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"},"conflictColumns":["tenant_id","slug","context","_meta_type"]},"extends":"SmrtObject","exportName":"Issue","collectionExportName":"IssueCollection","displayLabelField":"title","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 \\"project_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,"foreignKey":{"table":"repositories","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"project_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"projects","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"issues_meta_type_idx","columns":["_meta_type"]},{"name":"issues_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"issues_repository_id_idx","columns":["repository_id"]},{"name":"issues_project_id_idx","columns":["project_id"]}],"version":"83fb5e05"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:Label":{"name":"label","className":"Label","qualifiedName":"@happyvertical/smrt-projects:Label","collection":"labels","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/models/Label.ts","packageName":"@happyvertical/smrt-projects","fields":{"repositoryId":{"type":"foreignKey","required":false,"related":"Repository"},"projectId":{"type":"foreignKey","required":false,"related":"Project","description":"The project this label belongs to.","_meta":{"description":"The project this label belongs to."}},"name":{"type":"text","required":false,"default":"","description":"The label's name, for example bug.","_meta":{"description":"The label's name, for example bug."}},"color":{"type":"text","required":false,"default":"","description":"The label's colour.","_meta":{"description":"The label's colour."}},"description":{"type":"text","required":false,"default":"","description":"What the label means.","_meta":{"description":"What the label means."}}},"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","displayLabelField":"name","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 \\"project_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,"foreignKey":{"table":"repositories","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"project_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"projects","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["slug","context"],"unique":true},{"name":"labels_created_at_idx","columns":["created_at"]},{"name":"labels_repository_id_idx","columns":["repository_id"]},{"name":"labels_project_id_idx","columns":["project_id"]}],"version":"664f110a"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:Project":{"name":"project","className":"Project","qualifiedName":"@happyvertical/smrt-projects:Project","collection":"projects","filePath":"/home/runner/work/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":"The project's name.","_meta":{"description":"The project's name."}},"description":{"type":"text","required":false,"default":"","description":"What the project is about.","_meta":{"description":"What the project is about."}},"owner":{"type":"text","required":false,"default":"","description":"Who owns or runs the project.","_meta":{"description":"Who owns or runs the project."}},"url":{"type":"text","required":false,"default":"","description":"A link to the project elsewhere.","_meta":{"description":"A link to the project elsewhere."}},"providerType":{"type":"text","required":false,"default":"github","enum":["github","jira","linear","zenhub"]},"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<this>","isStatic":false,"isPublic":true},"addItem":{"name":"addItem","async":true,"parameters":[{"name":"item","type":"Issue | PullRequest","optional":false,"unionBranches":[{"type":"Issue"},{"type":"PullRequest"}]}],"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":"unknown","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,"unionBranches":[{"type":"Issue"},{"type":"PullRequest"}]},{"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"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"Project","collectionExportName":"ProjectCollection","displayLabelField":"title","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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"projects_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"2e8c344a"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectDecision":{"name":"projectdecision","className":"ProjectDecision","qualifiedName":"@happyvertical/smrt-projects:ProjectDecision","collection":"projectdecisions","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/models/ProjectDecision.ts","packageName":"@happyvertical/smrt-projects","fields":{"metaType":{"type":"text","required":true,"_meta":{"required":true}},"metaId":{"type":"text","required":true,"_meta":{"required":true}},"role":{"type":"text","required":true,"_meta":{"required":true}},"sortOrder":{"type":"integer","required":false,"default":0},"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}}},"question":{"type":"text","required":true,"_meta":{"required":true}},"decisionOptions":{"type":"text","required":false},"outcome":{"type":"text","required":false},"rationale":{"type":"text","required":false},"status":{"type":"text","required":true,"default":"open","_meta":{"required":true},"enum":["open","decided","deferred","superseded"]},"ownerType":{"type":"text","required":false,"default":"","enum":["user","agent","system",""]},"ownerId":{"type":"text","required":false},"visibility":{"type":"text","required":false,"default":"internal","enum":["internal","client"]},"contextReferences":{"type":"text","required":false},"revision":{"type":"integer","required":true,"default":1},"decidedAt":{"type":"datetime","required":false,"_meta":{"nullable":true}}},"methods":{"hydrate":{"name":"hydrate","async":true,"parameters":[],"returnType":"Promise<T | null>","isStatic":false,"isPublic":true},"getOptions":{"name":"getOptions","async":false,"parameters":[],"returnType":"ProjectDecisionOption[]","isStatic":false,"isPublic":true},"setOptions":{"name":"setOptions","async":false,"parameters":[{"name":"value","type":"ProjectDecisionOption[]","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"getContextReferences":{"name":"getContextReferences","async":false,"parameters":[],"returnType":"ProjectContextReference[]","isStatic":false,"isPublic":true},"setContextReferences":{"name":"setContextReferences","async":false,"parameters":[{"name":"value","type":"ProjectContextReference[]","optional":false}],"returnType":"void","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"project_decisions","api":false,"mcp":false,"cli":false,"indexes":[{"name":"project_decisions_project_status_idx","columns":["tenantId","metaType","metaId","status","createdAt"]},{"name":"project_decisions_owner_status_idx","columns":["tenantId","ownerType","ownerId","status"]}],"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtPolymorphicAssociation","exportName":"ProjectDecision","collectionExportName":"ProjectDecisionCollection","validationRules":[{"field":"metaType","rule":"required","fieldType":"text"},{"field":"metaId","rule":"required","fieldType":"text"},{"field":"role","rule":"required","fieldType":"text"},{"field":"question","rule":"required","fieldType":"text"},{"field":"status","rule":"required","fieldType":"text"},{"field":"revision","rule":"required","fieldType":"integer"}],"schema":{"tableName":"project_decisions","ddl":"CREATE TABLE IF NOT EXISTS \\"project_decisions\\" (\\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 \\"meta_type\\" TEXT NOT NULL,\\n \\"meta_id\\" TEXT NOT NULL,\\n \\"role\\" TEXT NOT NULL,\\n \\"sort_order\\" INTEGER DEFAULT 0,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"question\\" TEXT NOT NULL,\\n \\"decision_options\\" TEXT,\\n \\"outcome\\" TEXT,\\n \\"rationale\\" TEXT,\\n \\"status\\" TEXT NOT NULL DEFAULT 'open',\\n \\"owner_type\\" TEXT DEFAULT '',\\n \\"owner_id\\" TEXT,\\n \\"visibility\\" TEXT DEFAULT 'internal',\\n \\"context_references\\" TEXT,\\n \\"revision\\" INTEGER NOT NULL DEFAULT 1,\\n \\"decided_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"},"meta_type":{"type":"TEXT","notNull":true,"unique":false},"meta_id":{"type":"TEXT","notNull":true,"unique":false},"role":{"type":"TEXT","notNull":true,"unique":false},"sort_order":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"question":{"type":"TEXT","notNull":true,"unique":false},"decision_options":{"type":"TEXT","notNull":false,"unique":false},"outcome":{"type":"TEXT","notNull":false,"unique":false},"rationale":{"type":"TEXT","notNull":false,"unique":false},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"open"},"owner_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"owner_id":{"type":"TEXT","notNull":false,"unique":false},"visibility":{"type":"TEXT","notNull":false,"unique":false,"default":"internal"},"context_references":{"type":"TEXT","notNull":false,"unique":false},"revision":{"type":"INTEGER","notNull":true,"unique":false,"default":1},"decided_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"project_decisions_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"project_decisions_project_status_idx","columns":["tenant_id","meta_type","meta_id","status","created_at"]},{"name":"project_decisions_owner_status_idx","columns":["tenant_id","owner_type","owner_id","status"]},{"name":"project_decisions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"project_decisions_meta_type_meta_id_idx","columns":["meta_type","meta_id"]}],"version":"34ed60f9"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectGovernanceEvent":{"name":"projectgovernanceevent","className":"ProjectGovernanceEvent","qualifiedName":"@happyvertical/smrt-projects:ProjectGovernanceEvent","collection":"projectgovernanceevents","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/models/ProjectGovernanceEvent.ts","packageName":"@happyvertical/smrt-projects","fields":{"metaType":{"type":"text","required":true,"_meta":{"required":true}},"metaId":{"type":"text","required":true,"_meta":{"required":true}},"role":{"type":"text","required":true,"_meta":{"required":true}},"sortOrder":{"type":"integer","required":false,"default":0},"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}}},"recordKind":{"type":"text","required":true,"default":"question","_meta":{"required":true},"enum":["question","decision"]},"action":{"type":"text","required":true,"default":"created","_meta":{"required":true},"enum":["created","assigned","answered","decided","deferred","reopened","superseded"]},"actorType":{"type":"text","required":true,"default":"system","_meta":{"required":true},"enum":["user","agent","system"]},"actorId":{"type":"text","required":true,"_meta":{"required":true}},"fromStatus":{"type":"text","required":false},"toStatus":{"type":"text","required":true,"_meta":{"required":true}},"note":{"type":"text","required":false},"value":{"type":"text","required":false},"rationale":{"type":"text","required":false},"revision":{"type":"integer","required":true,"default":1},"fromOwnerType":{"type":"text","required":false,"default":"","enum":["user","agent","system",""]},"fromOwnerId":{"type":"text","required":false},"toOwnerType":{"type":"text","required":false,"default":"","enum":["user","agent","system",""]},"toOwnerId":{"type":"text","required":false}},"methods":{"hydrate":{"name":"hydrate","async":true,"parameters":[],"returnType":"Promise<T | null>","isStatic":false,"isPublic":true},"beforeDelete":{"name":"beforeDelete","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"project_governance_events","hooks":{"beforeDelete":"beforeDelete"},"api":false,"mcp":false,"cli":false,"indexes":[{"name":"project_governance_events_record_idx","columns":["tenantId","metaType","metaId","createdAt"]}],"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtPolymorphicAssociation","exportName":"ProjectGovernanceEvent","collectionExportName":"ProjectGovernanceEventCollection","validationRules":[{"field":"metaType","rule":"required","fieldType":"text"},{"field":"metaId","rule":"required","fieldType":"text"},{"field":"role","rule":"required","fieldType":"text"},{"field":"recordKind","rule":"required","fieldType":"text"},{"field":"action","rule":"required","fieldType":"text"},{"field":"actorType","rule":"required","fieldType":"text"},{"field":"actorId","rule":"required","fieldType":"text"},{"field":"toStatus","rule":"required","fieldType":"text"},{"field":"revision","rule":"required","fieldType":"integer"}],"schema":{"tableName":"project_governance_events","ddl":"CREATE TABLE IF NOT EXISTS \\"project_governance_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 \\"meta_type\\" TEXT NOT NULL,\\n \\"meta_id\\" TEXT NOT NULL,\\n \\"role\\" TEXT NOT NULL,\\n \\"sort_order\\" INTEGER DEFAULT 0,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"record_kind\\" TEXT NOT NULL DEFAULT 'question',\\n \\"action\\" TEXT NOT NULL DEFAULT 'created',\\n \\"actor_type\\" TEXT NOT NULL DEFAULT 'system',\\n \\"actor_id\\" TEXT NOT NULL,\\n \\"from_status\\" TEXT,\\n \\"to_status\\" TEXT NOT NULL,\\n \\"note\\" TEXT,\\n \\"value\\" TEXT,\\n \\"rationale\\" TEXT,\\n \\"revision\\" INTEGER NOT NULL DEFAULT 1,\\n \\"from_owner_type\\" TEXT DEFAULT '',\\n \\"from_owner_id\\" TEXT,\\n \\"to_owner_type\\" TEXT DEFAULT '',\\n \\"to_owner_id\\" 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"},"meta_type":{"type":"TEXT","notNull":true,"unique":false},"meta_id":{"type":"TEXT","notNull":true,"unique":false},"role":{"type":"TEXT","notNull":true,"unique":false},"sort_order":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"record_kind":{"type":"TEXT","notNull":true,"unique":false,"default":"question"},"action":{"type":"TEXT","notNull":true,"unique":false,"default":"created"},"actor_type":{"type":"TEXT","notNull":true,"unique":false,"default":"system"},"actor_id":{"type":"TEXT","notNull":true,"unique":false},"from_status":{"type":"TEXT","notNull":false,"unique":false},"to_status":{"type":"TEXT","notNull":true,"unique":false},"note":{"type":"TEXT","notNull":false,"unique":false},"value":{"type":"TEXT","notNull":false,"unique":false},"rationale":{"type":"TEXT","notNull":false,"unique":false},"revision":{"type":"INTEGER","notNull":true,"unique":false,"default":1},"from_owner_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"from_owner_id":{"type":"TEXT","notNull":false,"unique":false},"to_owner_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"to_owner_id":{"type":"TEXT","notNull":false,"unique":false}},"indexes":[{"name":"project_governance_events_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"project_governance_events_record_idx","columns":["tenant_id","meta_type","meta_id","created_at"]},{"name":"project_governance_events_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"project_governance_events_meta_type_meta_id_idx","columns":["meta_type","meta_id"]}],"version":"2db79e9a"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectIntegration":{"name":"projectintegration","className":"ProjectIntegration","qualifiedName":"@happyvertical/smrt-projects:ProjectIntegration","collection":"projectintegrations","filePath":"/home/runner/work/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","enum":["active","revoked"]},"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","displayLabelField":"name","validationRules":[],"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_tenant_id_project_id_idx","columns":["tenant_id","project_id","name"],"unique":true,"nullsNotDistinct":true},{"name":"project_integrations_slug_context_idx","columns":["slug","context"]},{"name":"project_integrations_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"bfbaa783"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectIntegrationAudit":{"name":"projectintegrationaudit","className":"ProjectIntegrationAudit","qualifiedName":"@happyvertical/smrt-projects:ProjectIntegrationAudit","collection":"projectintegrationaudits","filePath":"/home/runner/work/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","enum":["created","rotated","revoked"]},"note":{"type":"text","required":false}},"methods":{},"decoratorConfig":{"tableName":"project_integration_audits","api":false,"mcp":false,"cli":false,"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"ProjectIntegrationAudit","collectionExportName":"ProjectIntegrationAuditCollection","validationRules":[{"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,"foreignKey":{"table":"project_integrations","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"action":{"type":"TEXT","notNull":false,"unique":false,"default":"created"},"note":{"type":"TEXT","notNull":false,"unique":false}},"indexes":[{"name":"project_integration_audits_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"project_integration_audits_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"project_integration_audits_integration_id_idx","columns":["integration_id"]}],"version":"03cc10a2"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectQuestion":{"name":"projectquestion","className":"ProjectQuestion","qualifiedName":"@happyvertical/smrt-projects:ProjectQuestion","collection":"projectquestions","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/models/ProjectQuestion.ts","packageName":"@happyvertical/smrt-projects","fields":{"metaType":{"type":"text","required":true,"_meta":{"required":true}},"metaId":{"type":"text","required":true,"_meta":{"required":true}},"role":{"type":"text","required":true,"_meta":{"required":true}},"sortOrder":{"type":"integer","required":false,"default":0},"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}}},"prompt":{"type":"text","required":true,"_meta":{"required":true}},"answer":{"type":"text","required":false},"status":{"type":"text","required":true,"default":"open","_meta":{"required":true},"enum":["open","answered","deferred","superseded"]},"ownerType":{"type":"text","required":false,"default":"","enum":["user","agent","system",""]},"ownerId":{"type":"text","required":false},"visibility":{"type":"text","required":false,"default":"internal","enum":["internal","client"]},"contextReferences":{"type":"text","required":false},"revision":{"type":"integer","required":true,"default":1},"answeredAt":{"type":"datetime","required":false,"_meta":{"nullable":true}}},"methods":{"hydrate":{"name":"hydrate","async":true,"parameters":[],"returnType":"Promise<T | null>","isStatic":false,"isPublic":true},"getContextReferences":{"name":"getContextReferences","async":false,"parameters":[],"returnType":"ProjectContextReference[]","isStatic":false,"isPublic":true},"setContextReferences":{"name":"setContextReferences","async":false,"parameters":[{"name":"value","type":"ProjectContextReference[]","optional":false}],"returnType":"void","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"project_questions","api":false,"mcp":false,"cli":false,"indexes":[{"name":"project_questions_project_status_idx","columns":["tenantId","metaType","metaId","status","createdAt"]},{"name":"project_questions_owner_status_idx","columns":["tenantId","ownerType","ownerId","status"]}],"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtPolymorphicAssociation","exportName":"ProjectQuestion","collectionExportName":"ProjectQuestionCollection","validationRules":[{"field":"metaType","rule":"required","fieldType":"text"},{"field":"metaId","rule":"required","fieldType":"text"},{"field":"role","rule":"required","fieldType":"text"},{"field":"prompt","rule":"required","fieldType":"text"},{"field":"status","rule":"required","fieldType":"text"},{"field":"revision","rule":"required","fieldType":"integer"}],"schema":{"tableName":"project_questions","ddl":"CREATE TABLE IF NOT EXISTS \\"project_questions\\" (\\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 \\"meta_type\\" TEXT NOT NULL,\\n \\"meta_id\\" TEXT NOT NULL,\\n \\"role\\" TEXT NOT NULL,\\n \\"sort_order\\" INTEGER DEFAULT 0,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"prompt\\" TEXT NOT NULL,\\n \\"answer\\" TEXT,\\n \\"status\\" TEXT NOT NULL DEFAULT 'open',\\n \\"owner_type\\" TEXT DEFAULT '',\\n \\"owner_id\\" TEXT,\\n \\"visibility\\" TEXT DEFAULT 'internal',\\n \\"context_references\\" TEXT,\\n \\"revision\\" INTEGER NOT NULL DEFAULT 1,\\n \\"answered_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"},"meta_type":{"type":"TEXT","notNull":true,"unique":false},"meta_id":{"type":"TEXT","notNull":true,"unique":false},"role":{"type":"TEXT","notNull":true,"unique":false},"sort_order":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"prompt":{"type":"TEXT","notNull":true,"unique":false},"answer":{"type":"TEXT","notNull":false,"unique":false},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"open"},"owner_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"owner_id":{"type":"TEXT","notNull":false,"unique":false},"visibility":{"type":"TEXT","notNull":false,"unique":false,"default":"internal"},"context_references":{"type":"TEXT","notNull":false,"unique":false},"revision":{"type":"INTEGER","notNull":true,"unique":false,"default":1},"answered_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"project_questions_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"project_questions_project_status_idx","columns":["tenant_id","meta_type","meta_id","status","created_at"]},{"name":"project_questions_owner_status_idx","columns":["tenant_id","owner_type","owner_id","status"]},{"name":"project_questions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"project_questions_meta_type_meta_id_idx","columns":["meta_type","meta_id"]}],"version":"2906f527"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectSpecification":{"name":"projectspecification","className":"ProjectSpecification","qualifiedName":"@happyvertical/smrt-projects:ProjectSpecification","collection":"projectspecifications","description":"Canonical project requirements and their portable application cookbook.","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/models/ProjectSpecification.ts","packageName":"@happyvertical/smrt-projects","fields":{"metaType":{"type":"text","required":true,"_meta":{"required":true}},"metaId":{"type":"text","required":true,"_meta":{"required":true}},"role":{"type":"text","required":true,"_meta":{"required":true}},"sortOrder":{"type":"integer","required":false,"default":0},"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}}},"title":{"type":"text","required":true,"_meta":{"required":true}},"summary":{"type":"text","required":false},"cookbook":{"type":"text","required":false},"revision":{"type":"integer","required":true,"default":1},"actorType":{"type":"text","required":false},"actorId":{"type":"text","required":false}},"methods":{"hydrate":{"name":"hydrate","async":true,"parameters":[],"returnType":"Promise<T | null>","isStatic":false,"isPublic":true},"getCookbook":{"name":"getCookbook","async":false,"parameters":[],"returnType":"Cookbook","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"project_specifications","api":false,"mcp":false,"cli":false,"conflictColumns":["tenant_id","meta_type","meta_id"],"tenantScoped":{"mode":"required"}},"extends":"SmrtPolymorphicAssociation","exportName":"ProjectSpecification","collectionExportName":"ProjectSpecificationCollection","displayLabelField":"title","validationRules":[{"field":"metaType","rule":"required","fieldType":"text"},{"field":"metaId","rule":"required","fieldType":"text"},{"field":"role","rule":"required","fieldType":"text"},{"field":"title","rule":"required","fieldType":"text"},{"field":"revision","rule":"required","fieldType":"integer"}],"schema":{"tableName":"project_specifications","ddl":"CREATE TABLE IF NOT EXISTS \\"project_specifications\\" (\\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 \\"meta_type\\" TEXT NOT NULL,\\n \\"meta_id\\" TEXT NOT NULL,\\n \\"role\\" TEXT NOT NULL,\\n \\"sort_order\\" INTEGER DEFAULT 0,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"title\\" TEXT NOT NULL,\\n \\"summary\\" TEXT,\\n \\"cookbook\\" TEXT,\\n \\"revision\\" INTEGER NOT NULL DEFAULT 1,\\n \\"actor_type\\" TEXT,\\n \\"actor_id\\" 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"},"meta_type":{"type":"TEXT","notNull":true,"unique":false},"meta_id":{"type":"TEXT","notNull":true,"unique":false},"role":{"type":"TEXT","notNull":true,"unique":false},"sort_order":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"title":{"type":"TEXT","notNull":true,"unique":false},"summary":{"type":"TEXT","notNull":false,"unique":false},"cookbook":{"type":"TEXT","notNull":false,"unique":false},"revision":{"type":"INTEGER","notNull":true,"unique":false,"default":1},"actor_type":{"type":"TEXT","notNull":false,"unique":false},"actor_id":{"type":"TEXT","notNull":false,"unique":false}},"indexes":[{"name":"project_specifications_tenant_id_meta_type_idx","columns":["tenant_id","meta_type","meta_id"],"unique":true},{"name":"project_specifications_slug_context_idx","columns":["slug","context"]},{"name":"project_specifications_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"project_specifications_meta_type_meta_id_idx","columns":["meta_type","meta_id"]}],"version":"d3d39d7f"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:PullRequest":{"name":"pullrequest","className":"PullRequest","qualifiedName":"@happyvertical/smrt-projects:PullRequest","collection":"issues","filePath":"/home/runner/work/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":false,"related":"Repository"},"projectId":{"type":"foreignKey","required":false,"related":"Project","description":"The project this issue belongs to.","_meta":{"description":"The project this issue belongs to."}},"number":{"type":"integer","required":false,"default":0},"nodeId":{"type":"text","required":false,"default":""},"title":{"type":"text","required":false,"default":"","description":"A short summary of the issue.","_meta":{"description":"A short summary of the issue."}},"body":{"type":"text","required":false,"default":"","description":"The full description.","_meta":{"description":"The full description."}},"state":{"type":"text","required":false,"default":"open","description":"open or closed.","_meta":{"description":"open or closed."},"enum":["open","closed"]},"author":{"type":"text","required":false,"default":"","description":"Who raised the issue.","_meta":{"description":"Who raised the issue."}},"labels":{"type":"json","required":false,"default":[],"description":"The labels attached to the issue.","_meta":{"description":"The labels attached to the issue."}},"assignees":{"type":"json","required":false,"default":[],"description":"The people working on it.","_meta":{"description":"The people working on it."}},"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":{"hasRepository":{"name":"hasRepository","async":false,"parameters":[],"returnType":"boolean","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<this>","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":[{"name":"vocabulary","type":"IssueLabelVocabulary","optional":true}],"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","displayLabelField":"title","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 \\"project_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,"foreignKey":{"table":"repositories","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"project_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"projects","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"issues_meta_type_idx","columns":["_meta_type"]},{"name":"issues_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"issues_repository_id_idx","columns":["repository_id"]},{"name":"issues_project_id_idx","columns":["project_id"]}],"version":"0ebf6fbd"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:Repository":{"name":"repository","className":"Repository","qualifiedName":"@happyvertical/smrt-projects:Repository","collection":"repositories","filePath":"/home/runner/work/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","enum":["github","gitlab","bitbucket","azure"]},"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<this>","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"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"Repository","collectionExportName":"RepositoryCollection","displayLabelField":"name","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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"repositories_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"c302a5e5"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:DevelopmentRequestWorkLink":{"name":"developmentrequestworklink","className":"DevelopmentRequestWorkLink","qualifiedName":"@happyvertical/smrt-projects:DevelopmentRequestWorkLink","collection":"developmentrequestworklinks","description":"Provider-neutral connection from a Development Request to canonical work.","filePath":"/home/runner/work/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"],"api":false,"cli":false,"mcp":false,"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"DevelopmentRequestWorkLink","collectionExportName":"DevelopmentRequestWorkLinkCollection","validationRules":[{"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,"foreignKey":{"table":"development_requests","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"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_request_id_work_item_type_idx","columns":["request_id","work_item_type","work_item_id"],"unique":true,"nullsNotDistinct":true},{"name":"development_request_work_links_slug_context_idx","columns":["slug","context"]},{"name":"development_request_work_links_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"adcbaa21"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectDeliveryEvent":{"name":"projectdeliveryevent","className":"ProjectDeliveryEvent","qualifiedName":"@happyvertical/smrt-projects:ProjectDeliveryEvent","collection":"projectdeliveryevents","description":"Ordered, idempotent delivery update emitted by the control plane.","filePath":"/home/runner/work/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":{},"enum":["work_linked","branch","pull_request","ci","preview","approval","deployment","completed","rejected"]},"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"],"api":false,"cli":false,"mcp":false,"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"ProjectDeliveryEvent","collectionExportName":"ProjectDeliveryEventCollection","validationRules":[{"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,"foreignKey":{"table":"project_integrations","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"request_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"development_requests","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_integration_id_idempotency_key_idx","columns":["integration_id","idempotency_key"],"unique":true,"nullsNotDistinct":true},{"name":"project_delivery_events_slug_context_idx","columns":["slug","context"]},{"name":"project_delivery_events_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"project_delivery_events_request_id_idx","columns":["request_id"]}],"version":"99b9e301"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:PreviewApproval":{"name":"previewapproval","className":"PreviewApproval","qualifiedName":"@happyvertical/smrt-projects:PreviewApproval","collection":"previewapprovals","description":"Client decision state for one preview produced during delivery.","filePath":"/home/runner/work/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":{},"enum":["pending","approved","rejected","stale"]},"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"],"api":false,"cli":false,"mcp":false,"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"PreviewApproval","collectionExportName":"PreviewApprovalCollection","validationRules":[{"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,"foreignKey":{"table":"development_requests","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"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_request_id_preview_id_idx","columns":["request_id","preview_id"],"unique":true,"nullsNotDistinct":true},{"name":"preview_approvals_slug_context_idx","columns":["slug","context"]},{"name":"preview_approvals_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"ec7b2b14"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:AssistanceRequest":{"name":"assistancerequest","className":"AssistanceRequest","qualifiedName":"@happyvertical/smrt-projects:AssistanceRequest","collection":"assistancerequests","description":"Lossless conversational intake before support/development classification.","filePath":"/home/runner/work/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":{},"enum":["unclassified","support","development","both"]},"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","api":false,"cli":false,"mcp":false,"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"AssistanceRequest","collectionExportName":"AssistanceRequestCollection","validationRules":[{"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,"foreignKey":{"table":"project_integrations","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"assistance_requests_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"assistance_requests_integration_id_idx","columns":["integration_id"]}],"version":"d1653259"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:AssistanceRequestEvent":{"name":"assistancerequestevent","className":"AssistanceRequestEvent","qualifiedName":"@happyvertical/smrt-projects:AssistanceRequestEvent","collection":"assistancerequestevents","description":"Append-only explanation of Assistance Request routing decisions.","filePath":"/home/runner/work/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":{},"enum":["unclassified","support","development","both"]},"resultingClassification":{"type":"text","required":false,"_meta":{},"enum":["unclassified","support","development","both"]},"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","api":false,"cli":false,"mcp":false,"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"AssistanceRequestEvent","collectionExportName":"AssistanceRequestEventCollection","validationRules":[{"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,"foreignKey":{"table":"assistance_requests","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"assistance_request_events_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"assistance_request_events_assistance_request_id_idx","columns":["assistance_request_id"]}],"version":"bcc95ebe"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:DevelopmentRequestWorkLinkCollection":{"name":"developmentrequestworklinkcollection","className":"DevelopmentRequestWorkLinkCollection","qualifiedName":"@happyvertical/smrt-projects:DevelopmentRequestWorkLinkCollection","collection":"developmentrequestworklinks","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts","packageName":"@happyvertical/smrt-projects","fields":{},"methods":{},"decoratorConfig":{"tableName":"development_request_work_links","api":false,"mcp":false,"cli":false},"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 \\"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,"foreignKey":{"table":"development_requests","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"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_request_id_work_item_type_idx","columns":["request_id","work_item_type","work_item_id"],"unique":true,"nullsNotDistinct":true},{"name":"development_request_work_links_slug_context_idx","columns":["slug","context"]},{"name":"development_request_work_links_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"adcbaa21"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:ProjectDeliveryEventCollection":{"name":"projectdeliveryeventcollection","className":"ProjectDeliveryEventCollection","qualifiedName":"@happyvertical/smrt-projects:ProjectDeliveryEventCollection","collection":"projectdeliveryevents","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts","packageName":"@happyvertical/smrt-projects","fields":{},"methods":{},"decoratorConfig":{"tableName":"project_delivery_events","api":false,"mcp":false,"cli":false},"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 \\"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,"foreignKey":{"table":"project_integrations","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"request_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"development_requests","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_integration_id_idempotency_key_idx","columns":["integration_id","idempotency_key"],"unique":true,"nullsNotDistinct":true},{"name":"project_delivery_events_slug_context_idx","columns":["slug","context"]},{"name":"project_delivery_events_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"project_delivery_events_request_id_idx","columns":["request_id"]}],"version":"99b9e301"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:PreviewApprovalCollection":{"name":"previewapprovalcollection","className":"PreviewApprovalCollection","qualifiedName":"@happyvertical/smrt-projects:PreviewApprovalCollection","collection":"previewapprovals","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts","packageName":"@happyvertical/smrt-projects","fields":{},"methods":{},"decoratorConfig":{"tableName":"preview_approvals","api":false,"mcp":false,"cli":false},"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 \\"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,"foreignKey":{"table":"development_requests","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"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_request_id_preview_id_idx","columns":["request_id","preview_id"],"unique":true,"nullsNotDistinct":true},{"name":"preview_approvals_slug_context_idx","columns":["slug","context"]},{"name":"preview_approvals_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"ec7b2b14"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:AssistanceRequestCollection":{"name":"assistancerequestcollection","className":"AssistanceRequestCollection","qualifiedName":"@happyvertical/smrt-projects:AssistanceRequestCollection","collection":"assistancerequests","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts","packageName":"@happyvertical/smrt-projects","fields":{},"methods":{},"decoratorConfig":{"tableName":"assistance_requests","api":false,"mcp":false,"cli":false},"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 \\"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,"foreignKey":{"table":"project_integrations","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"assistance_requests_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"assistance_requests_integration_id_idx","columns":["integration_id"]}],"version":"d1653259"},"importPath":"@happyvertical/smrt-projects"},"@happyvertical/smrt-projects:AssistanceRequestEventCollection":{"name":"assistancerequesteventcollection","className":"AssistanceRequestEventCollection","qualifiedName":"@happyvertical/smrt-projects:AssistanceRequestEventCollection","collection":"assistancerequestevents","filePath":"/home/runner/work/smrt/smrt/packages/projects/src/models/delivery-control-plane.ts","packageName":"@happyvertical/smrt-projects","fields":{},"methods":{},"decoratorConfig":{"tableName":"assistance_request_events","api":false,"mcp":false,"cli":false},"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 \\"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,"foreignKey":{"table":"assistance_requests","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"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_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"assistance_request_events_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"assistance_request_events_assistance_request_id_idx","columns":["assistance_request_id"]}],"version":"bcc95ebe"},"importPath":"@happyvertical/smrt-projects"}},"moduleType":"smrt","recipes":[{"id":"projects.tracker","className":"ProjectTrackerRecipe","label":"Projects","summary":"Track projects and the issues, labels and comments inside them.","synonyms":["issues","tasks","tickets","bugs","kanban"],"models":["@happyvertical/smrt-projects:Project","@happyvertical/smrt-projects:Issue","@happyvertical/smrt-projects:Label","@happyvertical/smrt-projects:Comment"],"nav":[{"label":"All projects","model":"@happyvertical/smrt-projects:Project","icon":"folder","description":"Bigger jobs broken into steps you can follow."},{"label":"Issues","model":"@happyvertical/smrt-projects:Issue","icon":"wrench","description":"Problems and to-dos to track until they are done."},{"label":"Labels","model":"@happyvertical/smrt-projects:Label","icon":"tag","description":"Tags to sort your projects and issues your way."}],"requires":[],"section":{"id":"projects","label":"Projects","icon":"briefcase","description":"Projects, their issues, labels and comments."},"options":{"@happyvertical/smrt-projects:Project":{"fields":{"projectId":{"visibility":"hidden"},"projectNumber":{"visibility":"hidden"},"providerType":{"visibility":"hidden"},"tokenConfigKey":{"visibility":"hidden"},"statuses":{"visibility":"hidden"},"fields":{"visibility":"hidden"},"statusFieldId":{"visibility":"hidden"},"statusOptions":{"visibility":"hidden"},"lastSyncedAt":{"visibility":"hidden"}}},"@happyvertical/smrt-projects:Issue":{"fields":{"nodeId":{"visibility":"hidden"},"originalBody":{"visibility":"hidden"},"synthesisCount":{"visibility":"hidden"},"lastSyncedAt":{"visibility":"hidden"},"commentsCount":{"visibility":"hidden"},"repositoryId":{"visibility":"hidden"},"number":{"visibility":"hidden"}}},"@happyvertical/smrt-projects:Comment":{"fields":{"commentId":{"visibility":"hidden"},"url":{"visibility":"hidden"}}},"@happyvertical/smrt-projects:Label":{"fields":{"repositoryId":{"visibility":"hidden"}}}},"help":{"markdown":"## Overview\\n\\nProjects tracks the work you are planning: projects, the issues in them, and\\nthe labels and comments that organise them.\\n\\n## Tasks\\n\\n### Start a project\\n\\n1. Create a new project.\\n2. Give it a **{field:title}** and a **{field:description}**.\\n\\n### Log an issue\\n\\n1. Create a new issue and pick the **{field:projectId}**.\\n2. Write a **{field:title}** and a **{field:body}**.\\n3. Close it by setting **{field:state}** to closed. Comments are attached to the\\n issue.\\n","fieldRefs":["body","description","projectId","state","title"]},"demo":{"mode":"server","reasons":["Needs a server because its package does not build for a browser: node:crypto/async_hooks; core migrations; repos and ai SDKs; and its package depends on @happyvertical/smrt-profiles, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-timesheets, @happyvertical/smrt-users, which do not build for a browser (#3617, #3624, #3626, #3627)."]}}],"smrtDependencies":["@happyvertical/smrt-core","@happyvertical/smrt-prompts","@happyvertical/smrt-subscriptions","@happyvertical/smrt-tenancy","@happyvertical/smrt-timesheets"],"browser":{"status":"server-only","issues":["#3617","#3624","#3626","#3627"],"reason":"node:crypto/async_hooks; core migrations; repos and ai SDKs","via":["@happyvertical/smrt-profiles","@happyvertical/smrt-subscriptions","@happyvertical/smrt-tenancy","@happyvertical/smrt-timesheets","@happyvertical/smrt-users"]},"stampsConstructors":true}`));
20
21
  //#endregion
21
22
  //#region src/collections/Comments.ts
22
23
  var Comments_exports = /* @__PURE__ */ __exportAll({ CommentCollection: () => CommentCollection });
@@ -25,21 +26,21 @@ var CommentCollection = class extends SmrtCollection {
25
26
  };
26
27
  //#endregion
27
28
  //#region src/models/DevelopmentRequestHistory.ts
28
- var __defProp$7 = Object.defineProperty;
29
- var __getOwnPropDesc$7 = Object.getOwnPropertyDescriptor;
30
- var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, {
29
+ var __defProp$11 = Object.defineProperty;
30
+ var __getOwnPropDesc$11 = Object.getOwnPropertyDescriptor;
31
+ var __defNormalProp$11 = (obj, key, value) => key in obj ? __defProp$11(obj, key, {
31
32
  enumerable: true,
32
33
  configurable: true,
33
34
  writable: true,
34
35
  value
35
36
  }) : obj[key] = value;
36
- var __decorateClass$7 = (decorators, target, key, kind) => {
37
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$7(target, key) : target;
37
+ var __decorateClass$11 = (decorators, target, key, kind) => {
38
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$11(target, key) : target;
38
39
  for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
39
- if (kind && result) __defProp$7(target, key, result);
40
+ if (kind && result) __defProp$11(target, key, result);
40
41
  return result;
41
42
  };
42
- var __publicField$7 = (obj, key, value) => __defNormalProp$7(obj, typeof key !== "symbol" ? key + "" : key, value);
43
+ var __publicField$11 = (obj, key, value) => __defNormalProp$11(obj, typeof key !== "symbol" ? key + "" : key, value);
43
44
  var DevelopmentRequestHistory = class extends SmrtObject {
44
45
  tenantId = "";
45
46
  requestId = "";
@@ -59,10 +60,10 @@ var DevelopmentRequestHistory = class extends SmrtObject {
59
60
  if (options.note !== void 0) this.note = options.note;
60
61
  }
61
62
  };
62
- __publicField$7(DevelopmentRequestHistory, "__smrtPackage__", "@happyvertical/smrt-projects");
63
- __decorateClass$7([tenantId()], DevelopmentRequestHistory.prototype, "tenantId", 2);
64
- __decorateClass$7([foreignKey("DevelopmentRequest", { required: true })], DevelopmentRequestHistory.prototype, "requestId", 2);
65
- DevelopmentRequestHistory = __decorateClass$7([TenantScoped({ mode: "required" }), smrt({
63
+ __publicField$11(DevelopmentRequestHistory, "__smrtPackage__", "@happyvertical/smrt-projects");
64
+ __decorateClass$11([tenantId()], DevelopmentRequestHistory.prototype, "tenantId", 2);
65
+ __decorateClass$11([foreignKey("DevelopmentRequest", { required: true })], DevelopmentRequestHistory.prototype, "requestId", 2);
66
+ DevelopmentRequestHistory = __decorateClass$11([TenantScoped({ mode: "required" }), smrt({
66
67
  tableName: "development_request_histories",
67
68
  api: false,
68
69
  mcp: false,
@@ -84,21 +85,21 @@ var DevelopmentRequestHistoryCollection = class extends SmrtCollection {
84
85
  };
85
86
  //#endregion
86
87
  //#region src/models/DevelopmentRequest.ts
87
- var __defProp$6 = Object.defineProperty;
88
- var __getOwnPropDesc$6 = Object.getOwnPropertyDescriptor;
89
- var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, {
88
+ var __defProp$10 = Object.defineProperty;
89
+ var __getOwnPropDesc$10 = Object.getOwnPropertyDescriptor;
90
+ var __defNormalProp$10 = (obj, key, value) => key in obj ? __defProp$10(obj, key, {
90
91
  enumerable: true,
91
92
  configurable: true,
92
93
  writable: true,
93
94
  value
94
95
  }) : obj[key] = value;
95
- var __decorateClass$6 = (decorators, target, key, kind) => {
96
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$6(target, key) : target;
96
+ var __decorateClass$10 = (decorators, target, key, kind) => {
97
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$10(target, key) : target;
97
98
  for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
98
- if (kind && result) __defProp$6(target, key, result);
99
+ if (kind && result) __defProp$10(target, key, result);
99
100
  return result;
100
101
  };
101
- var __publicField$6 = (obj, key, value) => __defNormalProp$6(obj, typeof key !== "symbol" ? key + "" : key, value);
102
+ var __publicField$10 = (obj, key, value) => __defNormalProp$10(obj, typeof key !== "symbol" ? key + "" : key, value);
102
103
  function parseEvidence$1(raw) {
103
104
  if (!raw) return [];
104
105
  if (Array.isArray(raw)) return normalizeEvidence(raw);
@@ -125,7 +126,7 @@ function stringifyEvidence(items) {
125
126
  var DevelopmentRequest = class extends SmrtObject {
126
127
  tenantId = "";
127
128
  projectId = "";
128
- integrationId = "";
129
+ integrationId = null;
129
130
  requesterId = "";
130
131
  participantId = "";
131
132
  type = "feature";
@@ -163,10 +164,10 @@ var DevelopmentRequest = class extends SmrtObject {
163
164
  this.evidence = typeof value === "string" ? value : stringifyEvidence(value);
164
165
  }
165
166
  };
166
- __publicField$6(DevelopmentRequest, "__smrtPackage__", "@happyvertical/smrt-projects");
167
- __decorateClass$6([tenantId()], DevelopmentRequest.prototype, "tenantId", 2);
168
- __decorateClass$6([foreignKey("ProjectIntegration", { required: true })], DevelopmentRequest.prototype, "integrationId", 2);
169
- DevelopmentRequest = __decorateClass$6([TenantScoped({ mode: "required" }), smrt({
167
+ __publicField$10(DevelopmentRequest, "__smrtPackage__", "@happyvertical/smrt-projects");
168
+ __decorateClass$10([tenantId()], DevelopmentRequest.prototype, "tenantId", 2);
169
+ __decorateClass$10([foreignKey("ProjectIntegration")], DevelopmentRequest.prototype, "integrationId", 2);
170
+ DevelopmentRequest = __decorateClass$10([TenantScoped({ mode: "required" }), smrt({
170
171
  tableName: "development_requests",
171
172
  api: false,
172
173
  mcp: false,
@@ -177,6 +178,7 @@ DevelopmentRequest = __decorateClass$6([TenantScoped({ mode: "required" }), smrt
177
178
  var DevelopmentRequestCollection = class extends SmrtCollection {
178
179
  static _itemClass = DevelopmentRequest;
179
180
  async createManaged(input) {
181
+ if (!input.integrationId?.trim()) throw new TypeError("Managed requests require an integration.");
180
182
  const request = await withTenant({ tenantId: input.tenantId }, () => this.create({
181
183
  tenantId: input.tenantId,
182
184
  projectId: input.projectId,
@@ -443,22 +445,337 @@ var IssueCollection = class extends SmrtCollection {
443
445
  }
444
446
  };
445
447
  //#endregion
448
+ //#region src/models/project-governance-validation.ts
449
+ var CONTEXT_KINDS = /* @__PURE__ */ new Set([
450
+ "spec",
451
+ "cookbook",
452
+ "conversation",
453
+ "asset",
454
+ "url",
455
+ "other"
456
+ ]);
457
+ function parseContextReferences(value) {
458
+ let parsed;
459
+ try {
460
+ parsed = JSON.parse(value);
461
+ } catch {
462
+ throw new TypeError("Project context references must be valid JSON.");
463
+ }
464
+ if (!Array.isArray(parsed) || parsed.length > 100) throw new TypeError("Project context references must be an array of at most 100 items.");
465
+ return parsed.map((entry) => {
466
+ if (!entry || typeof entry !== "object") throw new TypeError("Invalid project context reference.");
467
+ const item = entry;
468
+ const kind = typeof item.kind === "string" ? item.kind : "";
469
+ const ref = typeof item.ref === "string" ? item.ref.trim() : "";
470
+ const label = typeof item.label === "string" ? item.label.trim() : void 0;
471
+ if (!CONTEXT_KINDS.has(kind) || !ref) throw new TypeError("Invalid project context reference.");
472
+ return {
473
+ kind,
474
+ ref,
475
+ ...label ? { label } : {}
476
+ };
477
+ });
478
+ }
479
+ function serializeContextReferences(value) {
480
+ return JSON.stringify(parseContextReferences(JSON.stringify(value)));
481
+ }
482
+ function parseDecisionOptions(value) {
483
+ let parsed;
484
+ try {
485
+ parsed = JSON.parse(value);
486
+ } catch {
487
+ throw new TypeError("Project decision options must be valid JSON.");
488
+ }
489
+ if (!Array.isArray(parsed) || parsed.length > 50) throw new TypeError("Project decision options must be an array of at most 50 items.");
490
+ const seen = /* @__PURE__ */ new Set();
491
+ return parsed.map((entry) => {
492
+ if (!entry || typeof entry !== "object") throw new TypeError("Invalid project decision option.");
493
+ const item = entry;
494
+ const id = typeof item.id === "string" ? item.id.trim() : "";
495
+ const label = typeof item.label === "string" ? item.label.trim() : "";
496
+ const description = typeof item.description === "string" ? item.description.trim() : void 0;
497
+ if (!id || !label || seen.has(id)) throw new TypeError("Project decision option ids and labels must be unique and non-empty.");
498
+ seen.add(id);
499
+ return {
500
+ id,
501
+ label,
502
+ ...description ? { description } : {}
503
+ };
504
+ });
505
+ }
506
+ function serializeDecisionOptions(value) {
507
+ return JSON.stringify(parseDecisionOptions(JSON.stringify(value)));
508
+ }
509
+ //#endregion
510
+ //#region src/models/ProjectDecision.ts
511
+ var __defProp$9 = Object.defineProperty;
512
+ var __getOwnPropDesc$9 = Object.getOwnPropertyDescriptor;
513
+ var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, {
514
+ enumerable: true,
515
+ configurable: true,
516
+ writable: true,
517
+ value
518
+ }) : obj[key] = value;
519
+ var __decorateClass$9 = (decorators, target, key, kind) => {
520
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$9(target, key) : target;
521
+ for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
522
+ if (kind && result) __defProp$9(target, key, result);
523
+ return result;
524
+ };
525
+ var __publicField$9 = (obj, key, value) => __defNormalProp$9(obj, typeof key !== "symbol" ? key + "" : key, value);
526
+ var ProjectDecision = class extends SmrtPolymorphicAssociation {
527
+ tenantId = "";
528
+ question = "";
529
+ /** JSON array; use getOptions()/setOptions(). */
530
+ decisionOptions = "[]";
531
+ outcome = "";
532
+ rationale = "";
533
+ status = "open";
534
+ ownerType = "";
535
+ ownerId = "";
536
+ visibility = "internal";
537
+ /** JSON array; use getContextReferences()/setContextReferences(). */
538
+ contextReferences = "[]";
539
+ revision = 1;
540
+ decidedAt = null;
541
+ constructor(options = {}) {
542
+ super({
543
+ ...options,
544
+ role: "decision"
545
+ });
546
+ if (options.visibility !== void 0) this.visibility = options.visibility;
547
+ if (options.tenantId !== void 0) this.tenantId = options.tenantId;
548
+ if (options.question !== void 0) this.question = options.question;
549
+ if (options.decisionOptions !== void 0) this.decisionOptions = Array.isArray(options.decisionOptions) ? serializeDecisionOptions(options.decisionOptions) : options.decisionOptions;
550
+ if (options.outcome !== void 0) this.outcome = options.outcome;
551
+ if (options.rationale !== void 0) this.rationale = options.rationale;
552
+ if (options.status !== void 0) this.status = options.status;
553
+ if (options.ownerType !== void 0) this.ownerType = options.ownerType;
554
+ if (options.ownerId !== void 0) this.ownerId = options.ownerId;
555
+ if (options.contextReferences !== void 0) this.contextReferences = Array.isArray(options.contextReferences) ? serializeContextReferences(options.contextReferences) : options.contextReferences;
556
+ if (options.revision !== void 0) this.revision = options.revision;
557
+ if (options.decidedAt !== void 0) this.decidedAt = options.decidedAt;
558
+ }
559
+ getOptions() {
560
+ return parseDecisionOptions(this.decisionOptions);
561
+ }
562
+ setOptions(value) {
563
+ this.decisionOptions = serializeDecisionOptions(value);
564
+ }
565
+ getContextReferences() {
566
+ return parseContextReferences(this.contextReferences);
567
+ }
568
+ setContextReferences(value) {
569
+ this.contextReferences = serializeContextReferences(value);
570
+ }
571
+ async validateBeforeSave() {
572
+ this.question = this.question.trim();
573
+ this.outcome = this.outcome.trim();
574
+ this.rationale = this.rationale.trim();
575
+ this.ownerId = this.ownerId.trim();
576
+ if (!["internal", "client"].includes(this.visibility)) throw new TypeError("Invalid project governance visibility.");
577
+ if (!this.question) throw new TypeError("Project decision question is required.");
578
+ if (![
579
+ "open",
580
+ "decided",
581
+ "deferred",
582
+ "superseded"
583
+ ].includes(this.status)) throw new TypeError("Invalid project decision status.");
584
+ if (this.ownerType && ![
585
+ "user",
586
+ "agent",
587
+ "system"
588
+ ].includes(this.ownerType)) throw new TypeError("Invalid project decision owner type.");
589
+ if (this.ownerType && !this.ownerId || !this.ownerType && this.ownerId) throw new TypeError("Project decision owner type and id must be set together.");
590
+ const options = parseDecisionOptions(this.decisionOptions);
591
+ if (this.status === "decided" && !this.outcome) throw new TypeError("A decided project decision requires an outcome.");
592
+ if (this.status === "decided" && options.length > 0 && !options.some((option) => option.id === this.outcome)) throw new TypeError("Project decision outcome must match an option id.");
593
+ if (!Number.isSafeInteger(this.revision) || this.revision < 1) throw new TypeError("Project decision revision must be a positive integer.");
594
+ this.decisionOptions = serializeDecisionOptions(options);
595
+ this.contextReferences = serializeContextReferences(parseContextReferences(this.contextReferences));
596
+ await super.validateBeforeSave();
597
+ }
598
+ };
599
+ __publicField$9(ProjectDecision, "__smrtPackage__", "@happyvertical/smrt-projects");
600
+ __decorateClass$9([tenantId()], ProjectDecision.prototype, "tenantId", 2);
601
+ __decorateClass$9([field({ required: true })], ProjectDecision.prototype, "question", 2);
602
+ __decorateClass$9([field({ required: true })], ProjectDecision.prototype, "status", 2);
603
+ __decorateClass$9([field({
604
+ type: "datetime",
605
+ nullable: true
606
+ })], ProjectDecision.prototype, "decidedAt", 2);
607
+ ProjectDecision = __decorateClass$9([TenantScoped({ mode: "required" }), smrt({
608
+ tableName: "project_decisions",
609
+ api: false,
610
+ mcp: false,
611
+ cli: false,
612
+ indexes: [{
613
+ name: "project_decisions_project_status_idx",
614
+ columns: [
615
+ "tenantId",
616
+ "metaType",
617
+ "metaId",
618
+ "status",
619
+ "createdAt"
620
+ ]
621
+ }, {
622
+ name: "project_decisions_owner_status_idx",
623
+ columns: [
624
+ "tenantId",
625
+ "ownerType",
626
+ "ownerId",
627
+ "status"
628
+ ]
629
+ }]
630
+ })], ProjectDecision);
631
+ //#endregion
632
+ //#region src/collections/ProjectDecisions.ts
633
+ var ProjectDecisionCollection = class extends SmrtCollection {
634
+ static _itemClass = ProjectDecision;
635
+ async listForProject(scope, status, visibility) {
636
+ assertTenantReadAllowed(scope.tenantId, "ProjectGovernanceCollection");
637
+ return withTenant({ tenantId: scope.tenantId }, () => this.list({
638
+ where: {
639
+ tenantId: scope.tenantId,
640
+ metaType: scope.projectType,
641
+ metaId: scope.projectId,
642
+ ...status ? { status } : {},
643
+ ...visibility ? { visibility } : {}
644
+ },
645
+ orderBy: "createdAt ASC"
646
+ }));
647
+ }
648
+ async getForProject(scope, id) {
649
+ assertTenantReadAllowed(scope.tenantId, "ProjectGovernanceCollection");
650
+ return withTenant({ tenantId: scope.tenantId }, () => this.findOne({ where: {
651
+ id,
652
+ tenantId: scope.tenantId,
653
+ metaType: scope.projectType,
654
+ metaId: scope.projectId
655
+ } }));
656
+ }
657
+ };
658
+ //#endregion
659
+ //#region src/models/ProjectGovernanceEvent.ts
660
+ var __defProp$8 = Object.defineProperty;
661
+ var __getOwnPropDesc$8 = Object.getOwnPropertyDescriptor;
662
+ var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, {
663
+ enumerable: true,
664
+ configurable: true,
665
+ writable: true,
666
+ value
667
+ }) : obj[key] = value;
668
+ var __decorateClass$8 = (decorators, target, key, kind) => {
669
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$8(target, key) : target;
670
+ for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
671
+ if (kind && result) __defProp$8(target, key, result);
672
+ return result;
673
+ };
674
+ var __publicField$8 = (obj, key, value) => __defNormalProp$8(obj, typeof key !== "symbol" ? key + "" : key, value);
675
+ var ProjectGovernanceEvent = class extends SmrtPolymorphicAssociation {
676
+ tenantId = "";
677
+ recordKind = "question";
678
+ action = "created";
679
+ actorType = "system";
680
+ actorId = "";
681
+ fromStatus = "";
682
+ toStatus = "open";
683
+ note = "";
684
+ value = "";
685
+ rationale = "";
686
+ revision = 1;
687
+ fromOwnerType = "";
688
+ fromOwnerId = "";
689
+ toOwnerType = "";
690
+ toOwnerId = "";
691
+ constructor(options = {}) {
692
+ super({
693
+ ...options,
694
+ role: "history"
695
+ });
696
+ if (options.tenantId !== void 0) this.tenantId = options.tenantId;
697
+ if (options.recordKind !== void 0) this.recordKind = options.recordKind;
698
+ if (options.action !== void 0) this.action = options.action;
699
+ if (options.actorType !== void 0) this.actorType = options.actorType;
700
+ if (options.actorId !== void 0) this.actorId = options.actorId;
701
+ if (options.fromStatus !== void 0) this.fromStatus = options.fromStatus;
702
+ if (options.toStatus !== void 0) this.toStatus = options.toStatus;
703
+ if (options.note !== void 0) this.note = options.note;
704
+ if (options.value !== void 0) this.value = options.value;
705
+ if (options.rationale !== void 0) this.rationale = options.rationale;
706
+ if (options.revision !== void 0) this.revision = options.revision;
707
+ if (options.fromOwnerType !== void 0) this.fromOwnerType = options.fromOwnerType;
708
+ if (options.fromOwnerId !== void 0) this.fromOwnerId = options.fromOwnerId;
709
+ if (options.toOwnerType !== void 0) this.toOwnerType = options.toOwnerType;
710
+ if (options.toOwnerId !== void 0) this.toOwnerId = options.toOwnerId;
711
+ }
712
+ async beforeDelete() {
713
+ throw new TypeError("Project governance history is append-only.");
714
+ }
715
+ async validateBeforeSave() {
716
+ if (this.isPersisted) throw new TypeError("Project governance history is append-only.");
717
+ this.actorId = this.actorId.trim();
718
+ if (!this.actorId) throw new TypeError("Project governance event actor id is required.");
719
+ if (!Number.isSafeInteger(this.revision) || this.revision < 1) throw new TypeError("Project governance event revision must be a positive integer.");
720
+ await super.validateBeforeSave();
721
+ }
722
+ };
723
+ __publicField$8(ProjectGovernanceEvent, "__smrtPackage__", "@happyvertical/smrt-projects");
724
+ __decorateClass$8([tenantId()], ProjectGovernanceEvent.prototype, "tenantId", 2);
725
+ __decorateClass$8([field({ required: true })], ProjectGovernanceEvent.prototype, "recordKind", 2);
726
+ __decorateClass$8([field({ required: true })], ProjectGovernanceEvent.prototype, "action", 2);
727
+ __decorateClass$8([field({ required: true })], ProjectGovernanceEvent.prototype, "actorType", 2);
728
+ __decorateClass$8([field({ required: true })], ProjectGovernanceEvent.prototype, "actorId", 2);
729
+ __decorateClass$8([field({ required: true })], ProjectGovernanceEvent.prototype, "toStatus", 2);
730
+ ProjectGovernanceEvent = __decorateClass$8([TenantScoped({ mode: "required" }), smrt({
731
+ tableName: "project_governance_events",
732
+ hooks: { beforeDelete: "beforeDelete" },
733
+ api: false,
734
+ mcp: false,
735
+ cli: false,
736
+ indexes: [{
737
+ name: "project_governance_events_record_idx",
738
+ columns: [
739
+ "tenantId",
740
+ "metaType",
741
+ "metaId",
742
+ "createdAt"
743
+ ]
744
+ }]
745
+ })], ProjectGovernanceEvent);
746
+ //#endregion
747
+ //#region src/collections/ProjectGovernanceEvents.ts
748
+ var ProjectGovernanceEventCollection = class extends SmrtCollection {
749
+ static _itemClass = ProjectGovernanceEvent;
750
+ async listForRecord(input) {
751
+ assertTenantReadAllowed(input.tenantId, "ProjectGovernanceEventCollection");
752
+ return withTenant({ tenantId: input.tenantId }, () => this.list({
753
+ where: {
754
+ tenantId: input.tenantId,
755
+ metaType: input.recordType,
756
+ metaId: input.recordId
757
+ },
758
+ orderBy: "revision ASC"
759
+ }));
760
+ }
761
+ };
762
+ //#endregion
446
763
  //#region src/models/ProjectIntegrationAudit.ts
447
- var __defProp$5 = Object.defineProperty;
448
- var __getOwnPropDesc$5 = Object.getOwnPropertyDescriptor;
449
- var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, {
764
+ var __defProp$7 = Object.defineProperty;
765
+ var __getOwnPropDesc$7 = Object.getOwnPropertyDescriptor;
766
+ var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, {
450
767
  enumerable: true,
451
768
  configurable: true,
452
769
  writable: true,
453
770
  value
454
771
  }) : obj[key] = value;
455
- var __decorateClass$5 = (decorators, target, key, kind) => {
456
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$5(target, key) : target;
772
+ var __decorateClass$7 = (decorators, target, key, kind) => {
773
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$7(target, key) : target;
457
774
  for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
458
- if (kind && result) __defProp$5(target, key, result);
775
+ if (kind && result) __defProp$7(target, key, result);
459
776
  return result;
460
777
  };
461
- var __publicField$5 = (obj, key, value) => __defNormalProp$5(obj, typeof key !== "symbol" ? key + "" : key, value);
778
+ var __publicField$7 = (obj, key, value) => __defNormalProp$7(obj, typeof key !== "symbol" ? key + "" : key, value);
462
779
  var ProjectIntegrationAudit = class extends SmrtObject {
463
780
  tenantId = "";
464
781
  integrationId = "";
@@ -472,10 +789,10 @@ var ProjectIntegrationAudit = class extends SmrtObject {
472
789
  if (options.note !== void 0) this.note = options.note;
473
790
  }
474
791
  };
475
- __publicField$5(ProjectIntegrationAudit, "__smrtPackage__", "@happyvertical/smrt-projects");
476
- __decorateClass$5([tenantId()], ProjectIntegrationAudit.prototype, "tenantId", 2);
477
- __decorateClass$5([foreignKey("ProjectIntegration", { required: true })], ProjectIntegrationAudit.prototype, "integrationId", 2);
478
- ProjectIntegrationAudit = __decorateClass$5([TenantScoped({ mode: "required" }), smrt({
792
+ __publicField$7(ProjectIntegrationAudit, "__smrtPackage__", "@happyvertical/smrt-projects");
793
+ __decorateClass$7([tenantId()], ProjectIntegrationAudit.prototype, "tenantId", 2);
794
+ __decorateClass$7([foreignKey("ProjectIntegration", { required: true })], ProjectIntegrationAudit.prototype, "integrationId", 2);
795
+ ProjectIntegrationAudit = __decorateClass$7([TenantScoped({ mode: "required" }), smrt({
479
796
  tableName: "project_integration_audits",
480
797
  api: false,
481
798
  mcp: false,
@@ -497,21 +814,21 @@ var ProjectIntegrationAuditCollection = class extends SmrtCollection {
497
814
  };
498
815
  //#endregion
499
816
  //#region src/models/ProjectIntegration.ts
500
- var __defProp$4 = Object.defineProperty;
501
- var __getOwnPropDesc$4 = Object.getOwnPropertyDescriptor;
502
- var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, {
817
+ var __defProp$6 = Object.defineProperty;
818
+ var __getOwnPropDesc$6 = Object.getOwnPropertyDescriptor;
819
+ var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, {
503
820
  enumerable: true,
504
821
  configurable: true,
505
822
  writable: true,
506
823
  value
507
824
  }) : obj[key] = value;
508
- var __decorateClass$4 = (decorators, target, key, kind) => {
509
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$4(target, key) : target;
825
+ var __decorateClass$6 = (decorators, target, key, kind) => {
826
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$6(target, key) : target;
510
827
  for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
511
- if (kind && result) __defProp$4(target, key, result);
828
+ if (kind && result) __defProp$6(target, key, result);
512
829
  return result;
513
830
  };
514
- var __publicField$4 = (obj, key, value) => __defNormalProp$4(obj, typeof key !== "symbol" ? key + "" : key, value);
831
+ var __publicField$6 = (obj, key, value) => __defNormalProp$6(obj, typeof key !== "symbol" ? key + "" : key, value);
515
832
  var ProjectIntegration = class extends SmrtObject {
516
833
  tenantId = "";
517
834
  projectId = "";
@@ -537,10 +854,10 @@ var ProjectIntegration = class extends SmrtObject {
537
854
  return this.status === "active" && this.revokedAt === null;
538
855
  }
539
856
  };
540
- __publicField$4(ProjectIntegration, "__smrtPackage__", "@happyvertical/smrt-projects");
541
- __decorateClass$4([tenantId()], ProjectIntegration.prototype, "tenantId", 2);
542
- __decorateClass$4([field({ sensitive: true })], ProjectIntegration.prototype, "credentialHash", 2);
543
- ProjectIntegration = __decorateClass$4([TenantScoped({ mode: "required" }), smrt({
857
+ __publicField$6(ProjectIntegration, "__smrtPackage__", "@happyvertical/smrt-projects");
858
+ __decorateClass$6([tenantId()], ProjectIntegration.prototype, "tenantId", 2);
859
+ __decorateClass$6([field({ sensitive: true })], ProjectIntegration.prototype, "credentialHash", 2);
860
+ ProjectIntegration = __decorateClass$6([TenantScoped({ mode: "required" }), smrt({
544
861
  tableName: "project_integrations",
545
862
  conflictColumns: [
546
863
  "tenant_id",
@@ -659,6 +976,224 @@ function parseCredentialTenant(credential) {
659
976
  }
660
977
  }
661
978
  //#endregion
979
+ //#region src/models/ProjectQuestion.ts
980
+ var __defProp$5 = Object.defineProperty;
981
+ var __getOwnPropDesc$5 = Object.getOwnPropertyDescriptor;
982
+ var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, {
983
+ enumerable: true,
984
+ configurable: true,
985
+ writable: true,
986
+ value
987
+ }) : obj[key] = value;
988
+ var __decorateClass$5 = (decorators, target, key, kind) => {
989
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$5(target, key) : target;
990
+ for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
991
+ if (kind && result) __defProp$5(target, key, result);
992
+ return result;
993
+ };
994
+ var __publicField$5 = (obj, key, value) => __defNormalProp$5(obj, typeof key !== "symbol" ? key + "" : key, value);
995
+ var ProjectQuestion = class extends SmrtPolymorphicAssociation {
996
+ tenantId = "";
997
+ prompt = "";
998
+ answer = "";
999
+ status = "open";
1000
+ ownerType = "";
1001
+ ownerId = "";
1002
+ visibility = "internal";
1003
+ /** JSON array; use getContextReferences()/setContextReferences(). */
1004
+ contextReferences = "[]";
1005
+ revision = 1;
1006
+ answeredAt = null;
1007
+ constructor(options = {}) {
1008
+ super({
1009
+ ...options,
1010
+ role: "question"
1011
+ });
1012
+ if (options.visibility !== void 0) this.visibility = options.visibility;
1013
+ if (options.tenantId !== void 0) this.tenantId = options.tenantId;
1014
+ if (options.prompt !== void 0) this.prompt = options.prompt;
1015
+ if (options.answer !== void 0) this.answer = options.answer;
1016
+ if (options.status !== void 0) this.status = options.status;
1017
+ if (options.ownerType !== void 0) this.ownerType = options.ownerType;
1018
+ if (options.ownerId !== void 0) this.ownerId = options.ownerId;
1019
+ if (options.contextReferences !== void 0) this.contextReferences = Array.isArray(options.contextReferences) ? serializeContextReferences(options.contextReferences) : options.contextReferences;
1020
+ if (options.revision !== void 0) this.revision = options.revision;
1021
+ if (options.answeredAt !== void 0) this.answeredAt = options.answeredAt;
1022
+ }
1023
+ getContextReferences() {
1024
+ return parseContextReferences(this.contextReferences);
1025
+ }
1026
+ setContextReferences(value) {
1027
+ this.contextReferences = serializeContextReferences(value);
1028
+ }
1029
+ async validateBeforeSave() {
1030
+ this.prompt = this.prompt.trim();
1031
+ this.answer = this.answer.trim();
1032
+ this.ownerId = this.ownerId.trim();
1033
+ if (!["internal", "client"].includes(this.visibility)) throw new TypeError("Invalid project governance visibility.");
1034
+ if (!this.prompt) throw new TypeError("Project question prompt is required.");
1035
+ if (![
1036
+ "open",
1037
+ "answered",
1038
+ "deferred",
1039
+ "superseded"
1040
+ ].includes(this.status)) throw new TypeError("Invalid project question status.");
1041
+ if (this.ownerType && ![
1042
+ "user",
1043
+ "agent",
1044
+ "system"
1045
+ ].includes(this.ownerType)) throw new TypeError("Invalid project question owner type.");
1046
+ if (this.ownerType && !this.ownerId || !this.ownerType && this.ownerId) throw new TypeError("Project question owner type and id must be set together.");
1047
+ if (this.status === "answered" && !this.answer) throw new TypeError("An answered project question requires an answer.");
1048
+ if (!Number.isSafeInteger(this.revision) || this.revision < 1) throw new TypeError("Project question revision must be a positive integer.");
1049
+ this.contextReferences = serializeContextReferences(parseContextReferences(this.contextReferences));
1050
+ await super.validateBeforeSave();
1051
+ }
1052
+ };
1053
+ __publicField$5(ProjectQuestion, "__smrtPackage__", "@happyvertical/smrt-projects");
1054
+ __decorateClass$5([tenantId()], ProjectQuestion.prototype, "tenantId", 2);
1055
+ __decorateClass$5([field({ required: true })], ProjectQuestion.prototype, "prompt", 2);
1056
+ __decorateClass$5([field({ required: true })], ProjectQuestion.prototype, "status", 2);
1057
+ __decorateClass$5([field({
1058
+ type: "datetime",
1059
+ nullable: true
1060
+ })], ProjectQuestion.prototype, "answeredAt", 2);
1061
+ ProjectQuestion = __decorateClass$5([TenantScoped({ mode: "required" }), smrt({
1062
+ tableName: "project_questions",
1063
+ api: false,
1064
+ mcp: false,
1065
+ cli: false,
1066
+ indexes: [{
1067
+ name: "project_questions_project_status_idx",
1068
+ columns: [
1069
+ "tenantId",
1070
+ "metaType",
1071
+ "metaId",
1072
+ "status",
1073
+ "createdAt"
1074
+ ]
1075
+ }, {
1076
+ name: "project_questions_owner_status_idx",
1077
+ columns: [
1078
+ "tenantId",
1079
+ "ownerType",
1080
+ "ownerId",
1081
+ "status"
1082
+ ]
1083
+ }]
1084
+ })], ProjectQuestion);
1085
+ //#endregion
1086
+ //#region src/collections/ProjectQuestions.ts
1087
+ var ProjectQuestionCollection = class extends SmrtCollection {
1088
+ static _itemClass = ProjectQuestion;
1089
+ async listForProject(scope, status, visibility) {
1090
+ assertTenantReadAllowed(scope.tenantId, "ProjectGovernanceCollection");
1091
+ return withTenant({ tenantId: scope.tenantId }, () => this.list({
1092
+ where: {
1093
+ tenantId: scope.tenantId,
1094
+ metaType: scope.projectType,
1095
+ metaId: scope.projectId,
1096
+ ...status ? { status } : {},
1097
+ ...visibility ? { visibility } : {}
1098
+ },
1099
+ orderBy: "createdAt ASC"
1100
+ }));
1101
+ }
1102
+ async getForProject(scope, id) {
1103
+ assertTenantReadAllowed(scope.tenantId, "ProjectGovernanceCollection");
1104
+ return withTenant({ tenantId: scope.tenantId }, () => this.findOne({ where: {
1105
+ id,
1106
+ tenantId: scope.tenantId,
1107
+ metaType: scope.projectType,
1108
+ metaId: scope.projectId
1109
+ } }));
1110
+ }
1111
+ };
1112
+ //#endregion
1113
+ //#region src/models/ProjectSpecification.ts
1114
+ var __defProp$4 = Object.defineProperty;
1115
+ var __getOwnPropDesc$4 = Object.getOwnPropertyDescriptor;
1116
+ var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, {
1117
+ enumerable: true,
1118
+ configurable: true,
1119
+ writable: true,
1120
+ value
1121
+ }) : obj[key] = value;
1122
+ var __decorateClass$4 = (decorators, target, key, kind) => {
1123
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$4(target, key) : target;
1124
+ for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
1125
+ if (kind && result) __defProp$4(target, key, result);
1126
+ return result;
1127
+ };
1128
+ var __publicField$4 = (obj, key, value) => __defNormalProp$4(obj, typeof key !== "symbol" ? key + "" : key, value);
1129
+ var ProjectSpecification = class extends SmrtPolymorphicAssociation {
1130
+ tenantId = "";
1131
+ title = "";
1132
+ summary = "";
1133
+ /** Canonical Cookbook v1 JSON; use getCookbook(). */
1134
+ cookbook = "{}";
1135
+ revision = 1;
1136
+ actorType = "";
1137
+ actorId = "";
1138
+ constructor(options = {}) {
1139
+ super({
1140
+ ...options,
1141
+ role: "specification"
1142
+ });
1143
+ if (options.tenantId !== void 0) this.tenantId = options.tenantId;
1144
+ if (options.title !== void 0) this.title = options.title;
1145
+ if (options.summary !== void 0) this.summary = options.summary;
1146
+ if (options.cookbook !== void 0) this.cookbook = options.cookbook;
1147
+ if (options.revision !== void 0) this.revision = options.revision;
1148
+ if (options.actorType !== void 0) this.actorType = options.actorType;
1149
+ if (options.actorId !== void 0) this.actorId = options.actorId;
1150
+ }
1151
+ getCookbook() {
1152
+ const result = validateCookbook(JSON.parse(this.cookbook));
1153
+ if (!result.ok) throw new TypeError(result.errors.join("; "));
1154
+ return result.cookbook;
1155
+ }
1156
+ async validateBeforeSave() {
1157
+ this.title = this.title.trim();
1158
+ if (!this.title) throw new TypeError("Project specification title is required.");
1159
+ if (!Number.isSafeInteger(this.revision) || this.revision < 1) throw new TypeError("Project specification revision must be a positive integer.");
1160
+ if (![
1161
+ "user",
1162
+ "agent",
1163
+ "system"
1164
+ ].includes(this.actorType) || !this.actorId.trim()) throw new TypeError("Project specification actor is required.");
1165
+ this.cookbook = JSON.stringify(this.getCookbook());
1166
+ await super.validateBeforeSave();
1167
+ }
1168
+ };
1169
+ __publicField$4(ProjectSpecification, "__smrtPackage__", "@happyvertical/smrt-projects");
1170
+ __decorateClass$4([tenantId()], ProjectSpecification.prototype, "tenantId", 2);
1171
+ __decorateClass$4([field({ required: true })], ProjectSpecification.prototype, "title", 2);
1172
+ ProjectSpecification = __decorateClass$4([TenantScoped({ mode: "required" }), smrt({
1173
+ tableName: "project_specifications",
1174
+ api: false,
1175
+ mcp: false,
1176
+ cli: false,
1177
+ conflictColumns: [
1178
+ "tenant_id",
1179
+ "meta_type",
1180
+ "meta_id"
1181
+ ]
1182
+ })], ProjectSpecification);
1183
+ //#endregion
1184
+ //#region src/collections/ProjectSpecifications.ts
1185
+ var ProjectSpecificationCollection = class extends SmrtCollection {
1186
+ static _itemClass = ProjectSpecification;
1187
+ async getForProject(scope) {
1188
+ assertTenantReadAllowed(scope.tenantId, "ProjectSpecificationCollection");
1189
+ return withTenant({ tenantId: scope.tenantId }, () => this.findOne({ where: {
1190
+ tenantId: scope.tenantId,
1191
+ metaType: scope.projectType,
1192
+ metaId: scope.projectId
1193
+ } }));
1194
+ }
1195
+ };
1196
+ //#endregion
662
1197
  //#region src/models/Project.ts
663
1198
  var __defProp$3 = Object.defineProperty;
664
1199
  var __getOwnPropDesc$3 = Object.getOwnPropertyDescriptor;
@@ -2645,6 +3180,120 @@ function requiredId$1(value, label) {
2645
3180
  return value;
2646
3181
  }
2647
3182
  //#endregion
3183
+ //#region src/services/participant-development-request-service.ts
3184
+ var ParticipantDevelopmentRequestConflictError = class extends Error {
3185
+ constructor() {
3186
+ super("This request key has already been used for different request details.");
3187
+ this.name = "ParticipantDevelopmentRequestConflictError";
3188
+ }
3189
+ };
3190
+ var ParticipantDevelopmentRequestService = class ParticipantDevelopmentRequestService {
3191
+ constructor(requests) {
3192
+ this.requests = requests;
3193
+ }
3194
+ requests;
3195
+ static async create(options = {}) {
3196
+ return new ParticipantDevelopmentRequestService(await DevelopmentRequestCollection.create(options));
3197
+ }
3198
+ async submit(input) {
3199
+ return this.persist(input, {
3200
+ participantId: input.requesterId,
3201
+ evidence: [],
3202
+ origin: "participant",
3203
+ discussion: "",
3204
+ actorId: input.requesterId,
3205
+ actorType: "participant"
3206
+ });
3207
+ }
3208
+ /** Trusted internal triage path; the host must authorize the supplied actor. */
3209
+ async splitFrom(parent, input) {
3210
+ if (!parent.id || parent.integrationId || !input.actorRef.trim() || !input.reason.trim() || !Number.isSafeInteger(input.occurrence) || input.occurrence < 0) throw new TypeError("A participant parent and trusted triage actor are required.");
3211
+ const description = input.description.trim();
3212
+ const requestKey = stableId(JSON.stringify([
3213
+ "split",
3214
+ parent.id,
3215
+ input.type,
3216
+ description,
3217
+ input.occurrence
3218
+ ]));
3219
+ return this.persist({
3220
+ tenantId: parent.tenantId,
3221
+ projectId: parent.projectId,
3222
+ requesterId: parent.requesterId,
3223
+ requestKey,
3224
+ type: input.type,
3225
+ description,
3226
+ visibility: parent.visibility
3227
+ }, {
3228
+ participantId: parent.participantId,
3229
+ evidence: parent.getEvidence(),
3230
+ origin: `split:${parent.id}`,
3231
+ discussion: input.reason,
3232
+ actorId: input.actorRef,
3233
+ actorType: "system"
3234
+ });
3235
+ }
3236
+ async persist(input, provenance) {
3237
+ for (const value of [
3238
+ input.tenantId,
3239
+ input.projectId,
3240
+ input.requesterId,
3241
+ input.requestKey
3242
+ ]) if (typeof value !== "string" || !value.trim() || value.length > 200) throw new TypeError("A tenant, project, participant and request key are required.");
3243
+ assertTenantReadAllowed(input.tenantId, "ParticipantDevelopmentRequestService");
3244
+ if (![
3245
+ "bug",
3246
+ "feature",
3247
+ "task"
3248
+ ].includes(input.type)) throw new TypeError("Choose a valid request type.");
3249
+ const description = input.description?.trim();
3250
+ if (!description || description.length > 8e3) throw new TypeError("Describe the request in at most 8000 characters.");
3251
+ const visibility = input.visibility ?? "requester";
3252
+ if (![
3253
+ "requester",
3254
+ "project_team",
3255
+ "workspace",
3256
+ "public",
3257
+ "internal"
3258
+ ].includes(visibility)) throw new TypeError("Choose a valid request visibility.");
3259
+ const evidence = JSON.stringify(provenance.evidence);
3260
+ const identity = JSON.stringify([
3261
+ input.tenantId,
3262
+ input.projectId,
3263
+ input.requesterId,
3264
+ provenance.origin,
3265
+ input.requestKey
3266
+ ]);
3267
+ const id = stableId(`participant-request:${identity}`);
3268
+ const historyId = stableId(`participant-request-history:${identity}`);
3269
+ const db = this.requests.db;
3270
+ if (!db.transaction) throw new Error("Participant request intake requires transactions.");
3271
+ const transaction = db.transaction.bind(db);
3272
+ return withTenant({ tenantId: input.tenantId }, () => transaction(async (tx) => {
3273
+ await tx.query(`INSERT INTO development_requests
3274
+ (id, slug, context, tenant_id, project_id, integration_id, requester_id,
3275
+ participant_id, type, description, evidence, visibility, origin, discussion, status)
3276
+ VALUES (?, ?, ?, ?, ?, NULL, ?, ?, ?, ?, ?, ?, ?, ?, 'submitted')
3277
+ ON CONFLICT (id) DO NOTHING`, id, `participant-${id}`, "", input.tenantId, input.projectId, input.requesterId, provenance.participantId, input.type, description, evidence, visibility, provenance.origin, provenance.discussion);
3278
+ const request = await (await DevelopmentRequestCollection.create({ db: tx })).findOne({ where: {
3279
+ id,
3280
+ tenantId: input.tenantId,
3281
+ projectId: input.projectId
3282
+ } });
3283
+ if (!request || request.requesterId !== input.requesterId || request.description !== description || request.type !== input.type || request.visibility !== visibility || request.integrationId || request.origin !== provenance.origin || request.participantId !== provenance.participantId || request.evidence !== evidence || request.discussion !== provenance.discussion) throw new ParticipantDevelopmentRequestConflictError();
3284
+ await tx.query(`INSERT INTO development_request_histories
3285
+ (id, slug, context, tenant_id, request_id, from_status, to_status, actor_type, actor_id, note)
3286
+ VALUES (?, ?, '', ?, ?, '', 'submitted', ?, ?, ?)
3287
+ ON CONFLICT (id) DO NOTHING`, historyId, `participant-${historyId}`, input.tenantId, id, provenance.actorType, provenance.actorId, provenance.discussion);
3288
+ return request;
3289
+ }));
3290
+ }
3291
+ };
3292
+ function stableId(value) {
3293
+ const hash = createHash("sha256").update(value).digest("hex");
3294
+ return `${hash.slice(0, 8)}-${hash.slice(8, 12)}-5${hash.slice(13, 16)}-a${hash.slice(17, 20)}-${hash.slice(20, 32)}`;
3295
+ }
3296
+ //#endregion
2648
3297
  //#region src/services/development-request-service.ts
2649
3298
  var DevelopmentRequestService = class DevelopmentRequestService {
2650
3299
  constructor(requests, links, workAdapter) {
@@ -2714,9 +3363,15 @@ var DevelopmentRequestService = class DevelopmentRequestService {
2714
3363
  const parts = input.split.map((part) => {
2715
3364
  const description = part.description.trim();
2716
3365
  if (!description) throw new Error("Split request description is required.");
3366
+ const type = part.type ?? request.type;
3367
+ if (!request.integrationId && (![
3368
+ "bug",
3369
+ "feature",
3370
+ "task"
3371
+ ].includes(type) || description.length > 8e3)) throw new TypeError("Choose a valid participant split type and description.");
2717
3372
  return {
2718
3373
  description,
2719
- type: part.type ?? request.type
3374
+ type
2720
3375
  };
2721
3376
  });
2722
3377
  const origin = `split:${request.id}`;
@@ -2729,10 +3384,14 @@ var DevelopmentRequestService = class DevelopmentRequestService {
2729
3384
  },
2730
3385
  orderBy: "createdAt ASC"
2731
3386
  }));
3387
+ const occurrences = /* @__PURE__ */ new Map();
2732
3388
  for (const { description, type } of parts) {
3389
+ const contentIdentity = JSON.stringify([type, description]);
3390
+ const occurrence = occurrences.get(contentIdentity) ?? 0;
3391
+ occurrences.set(contentIdentity, occurrence + 1);
2733
3392
  const existingIndex = unmatchedExisting.findIndex((candidate) => candidate.description.trim() === description && candidate.type === type && candidate.requesterId === request.requesterId && candidate.participantId === request.participantId && candidate.visibility === request.visibility);
2734
3393
  if (existingIndex >= 0) splitRequests.push(unmatchedExisting.splice(existingIndex, 1)[0]);
2735
- else splitRequests.push(await this.requests.createManaged({
3394
+ else splitRequests.push(request.integrationId ? await this.requests.createManaged({
2736
3395
  tenantId: request.tenantId,
2737
3396
  projectId: request.projectId,
2738
3397
  integrationId: request.integrationId,
@@ -2744,6 +3403,12 @@ var DevelopmentRequestService = class DevelopmentRequestService {
2744
3403
  visibility: request.visibility,
2745
3404
  origin,
2746
3405
  discussion: input.reason
3406
+ }) : await (await ParticipantDevelopmentRequestService.create({ db: this.requests.db })).splitFrom(request, {
3407
+ type,
3408
+ description,
3409
+ actorRef: input.actorRef,
3410
+ reason: input.reason,
3411
+ occurrence
2747
3412
  }));
2748
3413
  }
2749
3414
  if (request.status !== "triaged") await this.transition(request, "triaged", input.actorRef, input.reason);
@@ -2809,6 +3474,410 @@ function requiredId(value, label) {
2809
3474
  return value;
2810
3475
  }
2811
3476
  //#endregion
3477
+ //#region src/services/project-governance-service.ts
3478
+ var QUESTION_TYPE = "@happyvertical/smrt-projects:ProjectQuestion";
3479
+ var DECISION_TYPE = "@happyvertical/smrt-projects:ProjectDecision";
3480
+ var ProjectGovernanceConflictError = class extends Error {
3481
+ constructor(message = "Project governance record has changed.") {
3482
+ super(message);
3483
+ this.name = "ProjectGovernanceConflictError";
3484
+ }
3485
+ };
3486
+ var ProjectGovernanceAuthorizationError = class extends Error {
3487
+ constructor(message = "Actor cannot change this project governance record.") {
3488
+ super(message);
3489
+ this.name = "ProjectGovernanceAuthorizationError";
3490
+ }
3491
+ };
3492
+ var ProjectGovernanceService = class ProjectGovernanceService {
3493
+ constructor(questions, decisions, events) {
3494
+ this.questions = questions;
3495
+ this.decisions = decisions;
3496
+ this.events = events;
3497
+ }
3498
+ questions;
3499
+ decisions;
3500
+ events;
3501
+ static async create(options = {}) {
3502
+ return new ProjectGovernanceService(await ProjectQuestionCollection.create(options), await ProjectDecisionCollection.create(options), await ProjectGovernanceEventCollection.create(options));
3503
+ }
3504
+ async listForProject(scope, options = {}) {
3505
+ validateScope$1(scope);
3506
+ const [questions, decisions] = await Promise.all([this.questions.listForProject(scope, void 0, options.visibility), this.decisions.listForProject(scope, void 0, options.visibility)]);
3507
+ return {
3508
+ questions,
3509
+ decisions
3510
+ };
3511
+ }
3512
+ async createQuestion(input) {
3513
+ validateScope$1(input);
3514
+ requireManager(input.actor);
3515
+ const prompt = input.prompt.trim();
3516
+ if (!prompt) throw new TypeError("Project question prompt is required.");
3517
+ return this.transaction(this.questions, async (db) => {
3518
+ const questions = await ProjectQuestionCollection.create({ db });
3519
+ const question = await withTenant({ tenantId: input.tenantId }, () => questions.create({
3520
+ visibility: input.visibility ?? "internal",
3521
+ tenantId: input.tenantId,
3522
+ metaType: input.projectType,
3523
+ metaId: input.projectId,
3524
+ prompt,
3525
+ ownerType: input.owner?.type ?? "",
3526
+ ownerId: input.owner?.id ?? "",
3527
+ contextReferences: serializeContextReferences(input.contextReferences ?? [])
3528
+ }));
3529
+ await withTenant({ tenantId: input.tenantId }, () => question.save());
3530
+ await this.recordEvent(db, question, "question", "created", input.actor, "", "open");
3531
+ return question;
3532
+ });
3533
+ }
3534
+ async createDecision(input) {
3535
+ validateScope$1(input);
3536
+ requireManager(input.actor);
3537
+ const question = input.question.trim();
3538
+ if (!question) throw new TypeError("Project decision question is required.");
3539
+ return this.transaction(this.decisions, async (db) => {
3540
+ const decisions = await ProjectDecisionCollection.create({ db });
3541
+ const decision = await withTenant({ tenantId: input.tenantId }, () => decisions.create({
3542
+ visibility: input.visibility ?? "internal",
3543
+ tenantId: input.tenantId,
3544
+ metaType: input.projectType,
3545
+ metaId: input.projectId,
3546
+ question,
3547
+ decisionOptions: serializeDecisionOptions(input.options ?? []),
3548
+ ownerType: input.owner?.type ?? "",
3549
+ ownerId: input.owner?.id ?? "",
3550
+ contextReferences: serializeContextReferences(input.contextReferences ?? [])
3551
+ }));
3552
+ await withTenant({ tenantId: input.tenantId }, () => decision.save());
3553
+ await this.recordEvent(db, decision, "decision", "created", input.actor, "", "open");
3554
+ return decision;
3555
+ });
3556
+ }
3557
+ async answerQuestion(input) {
3558
+ const answer = input.answer.trim();
3559
+ if (!answer) throw new TypeError("Project question answer is required.");
3560
+ return this.mutateQuestion(input, "answered", "answered", (question) => {
3561
+ question.answer = answer;
3562
+ question.answeredAt = /* @__PURE__ */ new Date();
3563
+ return {
3564
+ value: answer,
3565
+ note: input.note ?? ""
3566
+ };
3567
+ });
3568
+ }
3569
+ async decide(input) {
3570
+ const outcome = input.outcome.trim();
3571
+ if (!outcome) throw new TypeError("Project decision outcome is required.");
3572
+ return this.mutateDecision(input, "decided", "decided", (decision) => {
3573
+ const options = decision.getOptions();
3574
+ if (options.length > 0 && !options.some((option) => option.id === outcome)) throw new TypeError("Project decision outcome must match an option id.");
3575
+ decision.outcome = outcome;
3576
+ decision.rationale = input.rationale?.trim() ?? "";
3577
+ decision.decidedAt = /* @__PURE__ */ new Date();
3578
+ return {
3579
+ value: outcome,
3580
+ rationale: decision.rationale,
3581
+ note: input.note ?? ""
3582
+ };
3583
+ });
3584
+ }
3585
+ async assignQuestion(input) {
3586
+ requireManager(input.actor);
3587
+ return this.mutateQuestion(input, void 0, "assigned", (question) => {
3588
+ const fromOwnerType = question.ownerType;
3589
+ const fromOwnerId = question.ownerId;
3590
+ assign(question, input.owner);
3591
+ return {
3592
+ note: input.note ?? (input.owner ? "Owner assigned." : "Owner cleared."),
3593
+ fromOwnerType,
3594
+ fromOwnerId,
3595
+ toOwnerType: question.ownerType,
3596
+ toOwnerId: question.ownerId
3597
+ };
3598
+ }, false);
3599
+ }
3600
+ async assignDecision(input) {
3601
+ requireManager(input.actor);
3602
+ return this.mutateDecision(input, void 0, "assigned", (decision) => {
3603
+ const fromOwnerType = decision.ownerType;
3604
+ const fromOwnerId = decision.ownerId;
3605
+ assign(decision, input.owner);
3606
+ return {
3607
+ note: input.note ?? (input.owner ? "Owner assigned." : "Owner cleared."),
3608
+ fromOwnerType,
3609
+ fromOwnerId,
3610
+ toOwnerType: decision.ownerType,
3611
+ toOwnerId: decision.ownerId
3612
+ };
3613
+ }, false);
3614
+ }
3615
+ async deferQuestion(input) {
3616
+ requireManager(input.actor);
3617
+ return this.mutateQuestion(input, "deferred", "deferred", () => ({ note: requiredNote(input.note) }), false);
3618
+ }
3619
+ async deferDecision(input) {
3620
+ requireManager(input.actor);
3621
+ return this.mutateDecision(input, "deferred", "deferred", () => ({ note: requiredNote(input.note) }), false);
3622
+ }
3623
+ async reopenQuestion(input) {
3624
+ requireManager(input.actor);
3625
+ return this.mutateQuestion(input, "open", "reopened", (question) => {
3626
+ question.answer = "";
3627
+ question.answeredAt = null;
3628
+ return { note: input.note ?? "" };
3629
+ }, false);
3630
+ }
3631
+ async reopenDecision(input) {
3632
+ requireManager(input.actor);
3633
+ return this.mutateDecision(input, "open", "reopened", (decision) => {
3634
+ decision.outcome = "";
3635
+ decision.rationale = "";
3636
+ decision.decidedAt = null;
3637
+ return { note: input.note ?? "" };
3638
+ }, false);
3639
+ }
3640
+ async supersedeQuestion(input) {
3641
+ requireManager(input.actor);
3642
+ return this.mutateQuestion(input, "superseded", "superseded", () => ({ note: requiredNote(input.note) }), false);
3643
+ }
3644
+ async supersedeDecision(input) {
3645
+ requireManager(input.actor);
3646
+ return this.mutateDecision(input, "superseded", "superseded", () => ({ note: requiredNote(input.note) }), false);
3647
+ }
3648
+ async historyForQuestion(input) {
3649
+ validateScope$1(input);
3650
+ if (!await this.questions.getForProject(input, input.questionId)) throw new Error("Project question not found.");
3651
+ return this.events.listForRecord({
3652
+ tenantId: input.tenantId,
3653
+ recordType: QUESTION_TYPE,
3654
+ recordId: input.questionId
3655
+ });
3656
+ }
3657
+ async historyForDecision(input) {
3658
+ validateScope$1(input);
3659
+ if (!await this.decisions.getForProject(input, input.decisionId)) throw new Error("Project decision not found.");
3660
+ return this.events.listForRecord({
3661
+ tenantId: input.tenantId,
3662
+ recordType: DECISION_TYPE,
3663
+ recordId: input.decisionId
3664
+ });
3665
+ }
3666
+ async mutateQuestion(input, status, action, apply, allowOwner = true) {
3667
+ validateScope$1(input);
3668
+ return this.transaction(this.questions, async (db) => {
3669
+ const collection = await ProjectQuestionCollection.create({ db });
3670
+ const current = await this.lockQuestion(db, collection, input);
3671
+ authorize(current, input.actor, allowOwner);
3672
+ const from = current.status;
3673
+ validateQuestionTransition(from, status);
3674
+ const event = apply(current);
3675
+ if (status) current.status = status;
3676
+ current.revision += 1;
3677
+ await withTenant({ tenantId: input.tenantId }, () => current.save());
3678
+ await this.recordEvent(db, current, "question", action, input.actor, from, current.status, event);
3679
+ return current;
3680
+ });
3681
+ }
3682
+ async mutateDecision(input, status, action, apply, allowOwner = true) {
3683
+ validateScope$1(input);
3684
+ return this.transaction(this.decisions, async (db) => {
3685
+ const collection = await ProjectDecisionCollection.create({ db });
3686
+ const current = await this.lockDecision(db, collection, input);
3687
+ authorize(current, input.actor, allowOwner);
3688
+ const from = current.status;
3689
+ validateDecisionTransition(from, status);
3690
+ const event = apply(current);
3691
+ if (status) current.status = status;
3692
+ current.revision += 1;
3693
+ await withTenant({ tenantId: input.tenantId }, () => current.save());
3694
+ await this.recordEvent(db, current, "decision", action, input.actor, from, current.status, event);
3695
+ return current;
3696
+ });
3697
+ }
3698
+ async lockQuestion(db, collection, input) {
3699
+ await lockRow(db, collection.tableName, input.questionId, input);
3700
+ const current = await collection.getForProject(input, input.questionId);
3701
+ if (!current) throw new Error("Project question not found.");
3702
+ if (current.revision !== input.expectedRevision) throw new ProjectGovernanceConflictError();
3703
+ return current;
3704
+ }
3705
+ async lockDecision(db, collection, input) {
3706
+ await lockRow(db, collection.tableName, input.decisionId, input);
3707
+ const current = await collection.getForProject(input, input.decisionId);
3708
+ if (!current) throw new Error("Project decision not found.");
3709
+ if (current.revision !== input.expectedRevision) throw new ProjectGovernanceConflictError();
3710
+ return current;
3711
+ }
3712
+ async recordEvent(db, record, recordKind, action, actor, fromStatus, toStatus, details = {}) {
3713
+ const events = await ProjectGovernanceEventCollection.create({ db });
3714
+ await withTenant({ tenantId: record.tenantId }, () => events.create({
3715
+ tenantId: record.tenantId,
3716
+ metaType: recordKind === "question" ? QUESTION_TYPE : DECISION_TYPE,
3717
+ metaId: record.id,
3718
+ recordKind,
3719
+ action,
3720
+ actorType: actor.type,
3721
+ actorId: actor.id,
3722
+ fromStatus,
3723
+ toStatus,
3724
+ note: details.note ?? "",
3725
+ value: details.value ?? "",
3726
+ rationale: details.rationale ?? "",
3727
+ fromOwnerType: details.fromOwnerType ?? "",
3728
+ fromOwnerId: details.fromOwnerId ?? "",
3729
+ toOwnerType: details.toOwnerType ?? "",
3730
+ toOwnerId: details.toOwnerId ?? "",
3731
+ revision: record.revision
3732
+ }));
3733
+ }
3734
+ async transaction(collection, work) {
3735
+ if (!collection.db.transaction) throw new Error("Project governance mutations require transactions.");
3736
+ return collection.db.transaction(work);
3737
+ }
3738
+ };
3739
+ async function lockRow(db, tableName, id, scope) {
3740
+ const table = `"${tableName.replace(/"/g, "\"\"")}"`;
3741
+ await withTenant({ tenantId: scope.tenantId }, () => db.query(`UPDATE ${table} SET revision = revision WHERE id = ? AND tenant_id = ? AND meta_type = ? AND meta_id = ?`, id, scope.tenantId, scope.projectType, scope.projectId));
3742
+ }
3743
+ function validateScope$1(scope) {
3744
+ if (!scope.tenantId.trim() || !scope.projectType.trim() || !scope.projectId.trim()) throw new TypeError("Tenant, project type, and project id are required.");
3745
+ if (!scope.projectType.includes(":")) throw new TypeError("Project type must be a qualified SMRT class name.");
3746
+ assertTenantReadAllowed(scope.tenantId, "ProjectGovernanceService");
3747
+ }
3748
+ function requireManager(actor) {
3749
+ validateActor(actor);
3750
+ if (!actor.canManage) throw new ProjectGovernanceAuthorizationError();
3751
+ }
3752
+ function authorize(record, actor, allowOwner) {
3753
+ validateActor(actor);
3754
+ if (actor.canManage) return;
3755
+ if (allowOwner && record.ownerType === actor.type && record.ownerId === actor.id) return;
3756
+ throw new ProjectGovernanceAuthorizationError();
3757
+ }
3758
+ function validateActor(actor) {
3759
+ if (![
3760
+ "user",
3761
+ "agent",
3762
+ "system"
3763
+ ].includes(actor.type) || !actor.id.trim()) throw new TypeError("A valid project governance actor is required.");
3764
+ }
3765
+ function assign(record, owner) {
3766
+ if (owner && (!owner.id.trim() || ![
3767
+ "user",
3768
+ "agent",
3769
+ "system"
3770
+ ].includes(owner.type))) throw new TypeError("A valid project governance owner is required.");
3771
+ record.ownerType = owner?.type ?? "";
3772
+ record.ownerId = owner?.id.trim() ?? "";
3773
+ }
3774
+ function requiredNote(note) {
3775
+ const value = note.trim();
3776
+ if (!value) throw new TypeError("A note is required.");
3777
+ return value;
3778
+ }
3779
+ function validateQuestionTransition(from, to) {
3780
+ if (!to) return;
3781
+ if (!{
3782
+ open: [
3783
+ "answered",
3784
+ "deferred",
3785
+ "superseded"
3786
+ ],
3787
+ answered: ["superseded"],
3788
+ deferred: ["open", "superseded"],
3789
+ superseded: []
3790
+ }[from].includes(to)) throw new TypeError(`Invalid project question transition: ${from} -> ${to}.`);
3791
+ }
3792
+ function validateDecisionTransition(from, to) {
3793
+ if (!to) return;
3794
+ if (!{
3795
+ open: [
3796
+ "decided",
3797
+ "deferred",
3798
+ "superseded"
3799
+ ],
3800
+ decided: ["superseded"],
3801
+ deferred: ["open", "superseded"],
3802
+ superseded: []
3803
+ }[from].includes(to)) throw new TypeError(`Invalid project decision transition: ${from} -> ${to}.`);
3804
+ }
3805
+ //#endregion
3806
+ //#region src/services/project-specification-service.ts
3807
+ var ProjectSpecificationValidationError = class extends TypeError {
3808
+ code = "INVALID_PROJECT_SPECIFICATION";
3809
+ status = 400;
3810
+ };
3811
+ var ProjectSpecificationService = class ProjectSpecificationService {
3812
+ constructor(collection, callerTransaction) {
3813
+ this.collection = collection;
3814
+ this.callerTransaction = callerTransaction;
3815
+ }
3816
+ collection;
3817
+ callerTransaction;
3818
+ static async create(options = {}) {
3819
+ return new ProjectSpecificationService(await ProjectSpecificationCollection.create(options), options.transaction === "caller");
3820
+ }
3821
+ async getForProject(scope) {
3822
+ validateScope(scope);
3823
+ return this.collection.getForProject(scope);
3824
+ }
3825
+ async saveForProject(input) {
3826
+ validateScope(input);
3827
+ if (![
3828
+ "user",
3829
+ "agent",
3830
+ "system"
3831
+ ].includes(input.actor.type) || !input.actor.id.trim()) throw new ProjectSpecificationValidationError("A valid project specification actor is required.");
3832
+ if (!input.actor.canManage) throw new ProjectGovernanceAuthorizationError();
3833
+ if (input.expectedRevision !== null && (!Number.isSafeInteger(input.expectedRevision) || input.expectedRevision < 1)) throw new ProjectSpecificationValidationError("Expected revision must be null or a positive integer.");
3834
+ if (typeof input.title !== "string" || !input.title.trim()) throw new ProjectSpecificationValidationError("Project specification title is required.");
3835
+ const validated = validateCookbook(input.cookbook);
3836
+ if (!validated.ok) throw new ProjectSpecificationValidationError(validated.errors.join("; "));
3837
+ const work = async (db) => {
3838
+ const collection = await ProjectSpecificationCollection.create({ db });
3839
+ const table = `"${collection.tableName.replace(/"/g, "\"\"")}"`;
3840
+ await db.query(`UPDATE ${table} SET revision = revision WHERE tenant_id = ? AND meta_type = ? AND meta_id = ?`, input.tenantId, input.projectType, input.projectId);
3841
+ const current = await collection.getForProject(input);
3842
+ if ((current?.revision ?? null) !== input.expectedRevision) throw new ProjectGovernanceConflictError("Project specification has changed.");
3843
+ const values = {
3844
+ title: input.title,
3845
+ summary: input.summary ?? "",
3846
+ cookbook: JSON.stringify(validated.cookbook),
3847
+ actorType: input.actor.type,
3848
+ actorId: input.actor.id
3849
+ };
3850
+ return withTenant({ tenantId: input.tenantId }, async () => {
3851
+ if (current) {
3852
+ Object.assign(current, values);
3853
+ current.revision += 1;
3854
+ await current.save();
3855
+ return current;
3856
+ }
3857
+ try {
3858
+ return await collection.create({
3859
+ ...values,
3860
+ tenantId: input.tenantId,
3861
+ metaType: input.projectType,
3862
+ metaId: input.projectId,
3863
+ _insertOnly: true
3864
+ });
3865
+ } catch (error) {
3866
+ if (isUniqueViolationError(error)) throw new ProjectGovernanceConflictError("Project specification already exists.");
3867
+ throw error;
3868
+ }
3869
+ });
3870
+ };
3871
+ if (this.callerTransaction) return work(this.collection.db);
3872
+ if (!this.collection.db.transaction) throw new Error("Project specification mutations require transactions.");
3873
+ return this.collection.db.transaction(work);
3874
+ }
3875
+ };
3876
+ function validateScope(scope) {
3877
+ if (!scope.tenantId.trim() || !scope.projectId.trim() || !scope.projectType.includes(":")) throw new ProjectSpecificationValidationError("Tenant, qualified project type, and project id are required.");
3878
+ assertTenantReadAllowed(scope.tenantId, "ProjectSpecificationService");
3879
+ }
3880
+ //#endregion
2812
3881
  //#region src/services/subscription-commercial-resolver.ts
2813
3882
  function supportContext(entry) {
2814
3883
  const fields = entry;
@@ -2876,6 +3945,6 @@ var SubscriptionServiceCommercialResolver = class SubscriptionServiceCommercialR
2876
3945
  }
2877
3946
  };
2878
3947
  //#endregion
2879
- export { AssistanceRequest, AssistanceRequestCollection, AssistanceRequestEvent, AssistanceRequestEventCollection, AssistanceRequestService, Comment, CommentCollection, DevelopmentRequest, DevelopmentRequestCollection, DevelopmentRequestHistory, DevelopmentRequestHistoryCollection, DevelopmentRequestService, DevelopmentRequestWorkLink, DevelopmentRequestWorkLinkCollection, Issue, IssueCollection, Label, ManagedProjectClient, PROJECTS_MODULE_META, PROJECTS_MONEY_COLUMNS, PROJECTS_MONEY_MINOR_UNITS_BACKFILL, PROJECTS_UI_SLOTS, PreviewApproval, PreviewApprovalCollection, Project, ProjectBoardService, ProjectCollection, ProjectDeliveryEvent, ProjectDeliveryEventCollection, ProjectDeliveryService, ProjectIntegration, ProjectIntegrationAudit, ProjectIntegrationAuditCollection, ProjectIntegrationCollection, ProjectTrackerRecipe, PullRequest, PullRequestCollection, Repository, RepositoryCollection, ServiceChargeSnapshot, ServiceChargeSnapshotCollection, ServiceCompensationSnapshot, ServiceCompensationSnapshotCollection, ServiceEvidenceService, ServiceTimeEntry, ServiceTimeEntryCollection, SubscriptionServiceCommercialResolver, issueIncorporateFeedbackPrompt, migrateProjectsMoneyToMinorUnits, Issues_exports as n, parseProjectJson, preflightProjectsMoneyMinorUnits, Comments_exports as r, requireActiveIntegrationCapability, requireIntegrationCapability, Repositories_exports as t, withRepositoryClient };
3948
+ export { AssistanceRequest, AssistanceRequestCollection, AssistanceRequestEvent, AssistanceRequestEventCollection, AssistanceRequestService, Comment, CommentCollection, DevelopmentRequest, DevelopmentRequestCollection, DevelopmentRequestHistory, DevelopmentRequestHistoryCollection, DevelopmentRequestService, DevelopmentRequestWorkLink, DevelopmentRequestWorkLinkCollection, Issue, IssueCollection, Label, ManagedProjectClient, PROJECTS_MODULE_META, PROJECTS_MONEY_COLUMNS, PROJECTS_MONEY_MINOR_UNITS_BACKFILL, PROJECTS_UI_SLOTS, ParticipantDevelopmentRequestConflictError, ParticipantDevelopmentRequestService, PreviewApproval, PreviewApprovalCollection, Project, ProjectBoardService, ProjectCollection, ProjectDecision, ProjectDecisionCollection, ProjectDeliveryEvent, ProjectDeliveryEventCollection, ProjectDeliveryService, ProjectGovernanceAuthorizationError, ProjectGovernanceConflictError, ProjectGovernanceEvent, ProjectGovernanceEventCollection, ProjectGovernanceService, ProjectIntegration, ProjectIntegrationAudit, ProjectIntegrationAuditCollection, ProjectIntegrationCollection, ProjectQuestion, ProjectQuestionCollection, ProjectSpecification, ProjectSpecificationCollection, ProjectSpecificationService, ProjectSpecificationValidationError, ProjectTrackerRecipe, PullRequest, PullRequestCollection, Repository, RepositoryCollection, ServiceChargeSnapshot, ServiceChargeSnapshotCollection, ServiceCompensationSnapshot, ServiceCompensationSnapshotCollection, ServiceEvidenceService, ServiceTimeEntry, ServiceTimeEntryCollection, SubscriptionServiceCommercialResolver, issueIncorporateFeedbackPrompt, migrateProjectsMoneyToMinorUnits, Issues_exports as n, parseProjectJson, preflightProjectsMoneyMinorUnits, Comments_exports as r, requireActiveIntegrationCapability, requireIntegrationCapability, Repositories_exports as t, withRepositoryClient };
2880
3949
 
2881
3950
  //# sourceMappingURL=index.js.map