@happyvertical/smrt-projects 0.57.18 → 0.57.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +3 -0
- package/README.md +68 -0
- package/dist/collections/DevelopmentRequests.d.ts.map +1 -1
- package/dist/collections/ProjectDecisions.d.ts +9 -0
- package/dist/collections/ProjectDecisions.d.ts.map +1 -0
- package/dist/collections/ProjectGovernanceEvents.d.ts +11 -0
- package/dist/collections/ProjectGovernanceEvents.d.ts.map +1 -0
- package/dist/collections/ProjectQuestions.d.ts +9 -0
- package/dist/collections/ProjectQuestions.d.ts.map +1 -0
- package/dist/collections/ProjectSpecifications.d.ts +8 -0
- package/dist/collections/ProjectSpecifications.d.ts.map +1 -0
- package/dist/collections/index.d.ts +4 -0
- package/dist/collections/index.d.ts.map +1 -1
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1120 -51
- package/dist/index.js.map +1 -1
- package/dist/manifest.json +4604 -2323
- package/dist/models/DevelopmentRequest.d.ts +2 -2
- package/dist/models/DevelopmentRequest.d.ts.map +1 -1
- package/dist/models/ProjectDecision.d.ts +39 -0
- package/dist/models/ProjectDecision.d.ts.map +1 -0
- package/dist/models/ProjectGovernanceEvent.d.ts +40 -0
- package/dist/models/ProjectGovernanceEvent.d.ts.map +1 -0
- package/dist/models/ProjectQuestion.d.ts +32 -0
- package/dist/models/ProjectQuestion.d.ts.map +1 -0
- package/dist/models/ProjectSpecification.d.ts +26 -0
- package/dist/models/ProjectSpecification.d.ts.map +1 -0
- package/dist/models/index.d.ts +4 -0
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/project-governance-validation.d.ts +6 -0
- package/dist/models/project-governance-validation.d.ts.map +1 -0
- package/dist/project-governance-types.d.ts +49 -0
- package/dist/project-governance-types.d.ts.map +1 -0
- package/dist/services/development-request-service.d.ts.map +1 -1
- package/dist/services/index.d.ts +3 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/participant-development-request-service.d.ts +34 -0
- package/dist/services/participant-development-request-service.d.ts.map +1 -0
- package/dist/services/project-governance-service.d.ts +106 -0
- package/dist/services/project-governance-service.d.ts.map +1 -0
- package/dist/services/project-specification-service.d.ts +30 -0
- package/dist/services/project-specification-service.d.ts.map +1 -0
- package/dist/smrt-knowledge.json +915 -49
- package/dist/svelte/ProjectQuestionsAndDecisions.svelte +183 -0
- package/dist/svelte/ProjectQuestionsAndDecisions.svelte.d.ts +17 -0
- package/dist/svelte/ProjectQuestionsAndDecisions.svelte.d.ts.map +1 -0
- package/dist/svelte/i18n.d.ts +16 -0
- package/dist/svelte/i18n.d.ts.map +1 -1
- package/dist/svelte/i18n.js +16 -0
- package/dist/svelte/index.d.ts +4 -1
- package/dist/svelte/index.d.ts.map +1 -1
- package/dist/svelte/index.js +3 -1
- package/dist/svelte/project-governance-types.d.ts +35 -0
- package/dist/svelte/project-governance-types.d.ts.map +1 -0
- package/dist/svelte/project-governance-types.js +1 -0
- package/package.json +20 -19
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.18","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.20","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$
|
|
29
|
-
var __getOwnPropDesc$
|
|
30
|
-
var __defNormalProp$
|
|
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$
|
|
37
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
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$
|
|
40
|
+
if (kind && result) __defProp$11(target, key, result);
|
|
40
41
|
return result;
|
|
41
42
|
};
|
|
42
|
-
var __publicField$
|
|
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$
|
|
63
|
-
__decorateClass$
|
|
64
|
-
__decorateClass$
|
|
65
|
-
DevelopmentRequestHistory = __decorateClass$
|
|
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$
|
|
88
|
-
var __getOwnPropDesc$
|
|
89
|
-
var __defNormalProp$
|
|
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$
|
|
96
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
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$
|
|
99
|
+
if (kind && result) __defProp$10(target, key, result);
|
|
99
100
|
return result;
|
|
100
101
|
};
|
|
101
|
-
var __publicField$
|
|
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$
|
|
167
|
-
__decorateClass$
|
|
168
|
-
__decorateClass$
|
|
169
|
-
DevelopmentRequest = __decorateClass$
|
|
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$
|
|
448
|
-
var __getOwnPropDesc$
|
|
449
|
-
var __defNormalProp$
|
|
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$
|
|
456
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
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$
|
|
775
|
+
if (kind && result) __defProp$7(target, key, result);
|
|
459
776
|
return result;
|
|
460
777
|
};
|
|
461
|
-
var __publicField$
|
|
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$
|
|
476
|
-
__decorateClass$
|
|
477
|
-
__decorateClass$
|
|
478
|
-
ProjectIntegrationAudit = __decorateClass$
|
|
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$
|
|
501
|
-
var __getOwnPropDesc$
|
|
502
|
-
var __defNormalProp$
|
|
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$
|
|
509
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
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$
|
|
828
|
+
if (kind && result) __defProp$6(target, key, result);
|
|
512
829
|
return result;
|
|
513
830
|
};
|
|
514
|
-
var __publicField$
|
|
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$
|
|
541
|
-
__decorateClass$
|
|
542
|
-
__decorateClass$
|
|
543
|
-
ProjectIntegration = __decorateClass$
|
|
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
|
|
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
|