@penclipai/db 2026.522.0 → 2026.530.0-canary.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/embedded-postgres-native.d.ts +3 -0
  2. package/dist/embedded-postgres-native.d.ts.map +1 -0
  3. package/dist/embedded-postgres-native.js +83 -0
  4. package/dist/embedded-postgres-native.js.map +1 -0
  5. package/dist/embedded-postgres-native.test.d.ts +2 -0
  6. package/dist/embedded-postgres-native.test.d.ts.map +1 -0
  7. package/dist/embedded-postgres-native.test.js +36 -0
  8. package/dist/embedded-postgres-native.test.js.map +1 -0
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +2 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/migrations/0087_backfill_environment_manage_human_defaults.sql +29 -0
  14. package/dist/migrations/0088_backfill_principal_access_compatibility.sql +75 -0
  15. package/dist/migrations/0089_cloud_upstreams.sql +71 -0
  16. package/dist/migrations/0090_resource_memberships.sql +55 -0
  17. package/dist/migrations/0091_old_swarm.sql +189 -0
  18. package/dist/migrations/0092_mighty_puma.sql +28 -0
  19. package/dist/migrations/0093_giant_green_goblin.sql +6 -0
  20. package/dist/migrations/meta/0090_snapshot.json +17974 -0
  21. package/dist/migrations/meta/0091_snapshot.json +18843 -0
  22. package/dist/migrations/meta/0092_snapshot.json +19543 -0
  23. package/dist/migrations/meta/0093_snapshot.json +19543 -0
  24. package/dist/migrations/meta/_journal.json +50 -1
  25. package/dist/schema/agent_memberships.d.ts +127 -0
  26. package/dist/schema/agent_memberships.d.ts.map +1 -0
  27. package/dist/schema/agent_memberships.js +17 -0
  28. package/dist/schema/agent_memberships.js.map +1 -0
  29. package/dist/schema/cloud_upstreams.d.ts +884 -0
  30. package/dist/schema/cloud_upstreams.d.ts.map +1 -0
  31. package/dist/schema/cloud_upstreams.js +63 -0
  32. package/dist/schema/cloud_upstreams.js.map +1 -0
  33. package/dist/schema/document_annotation_anchor_snapshots.d.ts +255 -0
  34. package/dist/schema/document_annotation_anchor_snapshots.d.ts.map +1 -0
  35. package/dist/schema/document_annotation_anchor_snapshots.js +25 -0
  36. package/dist/schema/document_annotation_anchor_snapshots.js.map +1 -0
  37. package/dist/schema/document_annotation_comments.d.ts +214 -0
  38. package/dist/schema/document_annotation_comments.d.ts.map +1 -0
  39. package/dist/schema/document_annotation_comments.js +27 -0
  40. package/dist/schema/document_annotation_comments.js.map +1 -0
  41. package/dist/schema/document_annotation_threads.d.ts +476 -0
  42. package/dist/schema/document_annotation_threads.d.ts.map +1 -0
  43. package/dist/schema/document_annotation_threads.js +44 -0
  44. package/dist/schema/document_annotation_threads.js.map +1 -0
  45. package/dist/schema/execution_workspaces.js +1 -1
  46. package/dist/schema/execution_workspaces.js.map +1 -1
  47. package/dist/schema/index.d.ts +7 -0
  48. package/dist/schema/index.d.ts.map +1 -1
  49. package/dist/schema/index.js +7 -0
  50. package/dist/schema/index.js.map +1 -1
  51. package/dist/schema/issue_plan_decompositions.d.ts +284 -0
  52. package/dist/schema/issue_plan_decompositions.d.ts.map +1 -0
  53. package/dist/schema/issue_plan_decompositions.js +36 -0
  54. package/dist/schema/issue_plan_decompositions.js.map +1 -0
  55. package/dist/schema/plugin_jobs.d.ts +2 -2
  56. package/dist/schema/project_memberships.d.ts +127 -0
  57. package/dist/schema/project_memberships.d.ts.map +1 -0
  58. package/dist/schema/project_memberships.js +17 -0
  59. package/dist/schema/project_memberships.js.map +1 -0
  60. package/dist/schema/workspace_operations.js +1 -1
  61. package/dist/schema/workspace_operations.js.map +1 -1
  62. package/package.json +2 -2
@@ -0,0 +1,3 @@
1
+ export declare function ensureLinuxSharedLibraryAliases(libDir: string): Promise<string[]>;
2
+ export declare function prepareEmbeddedPostgresNativeRuntime(): Promise<void>;
3
+ //# sourceMappingURL=embedded-postgres-native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded-postgres-native.d.ts","sourceRoot":"","sources":["../src/embedded-postgres-native.ts"],"names":[],"mappings":"AAkDA,wBAAsB,+BAA+B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqBvF;AAED,wBAAsB,oCAAoC,IAAI,OAAO,CAAC,IAAI,CAAC,CAW1E"}
@@ -0,0 +1,83 @@
1
+ import { promises as fs } from "node:fs";
2
+ import { createRequire } from "node:module";
3
+ import path from "node:path";
4
+ const require = createRequire(import.meta.url);
5
+ function resolveNativePackageName() {
6
+ if (process.platform !== "linux")
7
+ return null;
8
+ switch (process.arch) {
9
+ case "arm64":
10
+ return "linux-arm64";
11
+ case "arm":
12
+ return "linux-arm";
13
+ case "ia32":
14
+ return "linux-ia32";
15
+ case "ppc64":
16
+ return "linux-ppc64";
17
+ case "x64":
18
+ return "linux-x64";
19
+ default:
20
+ return null;
21
+ }
22
+ }
23
+ async function pathExists(value) {
24
+ try {
25
+ await fs.stat(value);
26
+ return true;
27
+ }
28
+ catch {
29
+ return false;
30
+ }
31
+ }
32
+ function resolveEmbeddedPostgresPackageRoot() {
33
+ try {
34
+ const entry = require.resolve("embedded-postgres");
35
+ return path.dirname(path.dirname(entry));
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ function prependPathEnv(name, value) {
42
+ const current = process.env[name] ?? "";
43
+ const parts = current.split(path.delimiter).filter(Boolean);
44
+ if (parts.includes(value))
45
+ return;
46
+ process.env[name] = [value, ...parts].join(path.delimiter);
47
+ }
48
+ export async function ensureLinuxSharedLibraryAliases(libDir) {
49
+ const entries = await fs.readdir(libDir, { withFileTypes: true });
50
+ const created = [];
51
+ for (const entry of entries) {
52
+ if (!entry.isFile())
53
+ continue;
54
+ const match = entry.name.match(/^(lib.+\.so\.\d+)\.\d+(?:\.\d+)?$/);
55
+ if (!match)
56
+ continue;
57
+ const aliasName = match[1];
58
+ const aliasPath = path.join(libDir, aliasName);
59
+ try {
60
+ await fs.symlink(entry.name, aliasPath);
61
+ created.push(aliasPath);
62
+ }
63
+ catch (error) {
64
+ if (error.code === "EEXIST")
65
+ continue;
66
+ throw error;
67
+ }
68
+ }
69
+ return created;
70
+ }
71
+ export async function prepareEmbeddedPostgresNativeRuntime() {
72
+ const nativePackageName = resolveNativePackageName();
73
+ const packageRoot = resolveEmbeddedPostgresPackageRoot();
74
+ if (!nativePackageName || !packageRoot)
75
+ return;
76
+ const nativeRoot = path.resolve(packageRoot, "..", "@embedded-postgres", nativePackageName);
77
+ const libDir = path.join(nativeRoot, "native", "lib");
78
+ if (!(await pathExists(libDir)))
79
+ return;
80
+ prependPathEnv("LD_LIBRARY_PATH", libDir);
81
+ await ensureLinuxSharedLibraryAliases(libDir);
82
+ }
83
+ //# sourceMappingURL=embedded-postgres-native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded-postgres-native.js","sourceRoot":"","sources":["../src/embedded-postgres-native.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=embedded-postgres-native.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded-postgres-native.test.d.ts","sourceRoot":"","sources":["../src/embedded-postgres-native.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { afterEach, describe, expect, it } from "vitest";
5
+ import { ensureLinuxSharedLibraryAliases } from "./embedded-postgres-native.js";
6
+ describe("embedded Postgres native runtime", () => {
7
+ const tempDirs = [];
8
+ afterEach(() => {
9
+ for (const tempDir of tempDirs.splice(0)) {
10
+ fs.rmSync(tempDir, { recursive: true, force: true });
11
+ }
12
+ });
13
+ it.runIf(process.platform !== "win32")("creates soname aliases for bundled patch-level shared libraries", async () => {
14
+ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "paperclip-embedded-pg-libs-"));
15
+ tempDirs.push(tempDir);
16
+ fs.writeFileSync(path.join(tempDir, "libicuuc.so.60.2"), "");
17
+ fs.writeFileSync(path.join(tempDir, "libicui18n.so.60.2"), "");
18
+ fs.writeFileSync(path.join(tempDir, "README.md"), "");
19
+ const created = await ensureLinuxSharedLibraryAliases(tempDir);
20
+ expect(created.map((file) => path.basename(file)).sort()).toEqual([
21
+ "libicui18n.so.60",
22
+ "libicuuc.so.60",
23
+ ]);
24
+ expect(fs.readlinkSync(path.join(tempDir, "libicuuc.so.60"))).toBe("libicuuc.so.60.2");
25
+ });
26
+ it.runIf(process.platform !== "win32")("is idempotent when aliases already exist", async () => {
27
+ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "paperclip-embedded-pg-libs-"));
28
+ tempDirs.push(tempDir);
29
+ fs.writeFileSync(path.join(tempDir, "libicuuc.so.60.2"), "");
30
+ await ensureLinuxSharedLibraryAliases(tempDir);
31
+ const second = await ensureLinuxSharedLibraryAliases(tempDir);
32
+ expect(second).toEqual([]);
33
+ expect(fs.readlinkSync(path.join(tempDir, "libicuuc.so.60"))).toBe("libicuuc.so.60.2");
34
+ });
35
+ });
36
+ //# sourceMappingURL=embedded-postgres-native.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded-postgres-native.test.js","sourceRoot":"","sources":["../src/embedded-postgres-native.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAEhF,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QACnH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,6BAA6B,CAAC,CAAC,CAAC;QACtF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;QAEtD,MAAM,OAAO,GAAG,MAAM,+BAA+B,CAAC,OAAO,CAAC,CAAC;QAE/D,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC;YAChE,kBAAkB;YAClB,gBAAgB;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,6BAA6B,CAAC,CAAC,CAAC;QACtF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC;QAE7D,MAAM,+BAA+B,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,+BAA+B,CAAC,OAAO,CAAC,CAAC;QAE9D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -2,7 +2,9 @@ export { createDb, getPostgresDataDirectory, ensurePostgresDatabase, inspectMigr
2
2
  export { getEmbeddedPostgresTestSupport, startEmbeddedPostgresTestDatabase, type EmbeddedPostgresTestDatabase, type EmbeddedPostgresTestSupport, } from "./test-embedded-postgres.js";
3
3
  export { runDatabaseBackup, runDatabaseRestore, formatDatabaseBackupResult, type BackupRetentionPolicy, type RunDatabaseBackupOptions, type RunDatabaseBackupResult, type RunDatabaseRestoreOptions, } from "./backup-lib.js";
4
4
  export { createEmbeddedPostgresLogBuffer, formatEmbeddedPostgresError, } from "./embedded-postgres-error.js";
5
+ export { ensureLinuxSharedLibraryAliases, prepareEmbeddedPostgresNativeRuntime, } from "./embedded-postgres-native.js";
5
6
  export { cleanupOrphanedEmbeddedPostgresForkchildren, recoverEmbeddedPostgresStart, resetIncompleteEmbeddedPostgresDataDir, shouldRetryEmbeddedPostgresStart, } from "./embedded-postgres-recovery.js";
7
+ export { startManagedEmbeddedPostgres, } from "./embedded-postgres-manager.js";
6
8
  export { issueRelations } from "./schema/issue_relations.js";
7
9
  export { issueReferenceMentions } from "./schema/issue_reference_mentions.js";
8
10
  export * from "./schema/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,gCAAgC,EAChC,KAAK,cAAc,EACnB,KAAK,+BAA+B,EACpC,sBAAsB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,EAAE,GACR,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,8BAA8B,EAC9B,iCAAiC,EACjC,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,GACjC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,GAC/B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,2CAA2C,EAC3C,4BAA4B,EAC5B,sCAAsC,EACtC,gCAAgC,GACjC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,gCAAgC,EAChC,KAAK,cAAc,EACnB,KAAK,+BAA+B,EACpC,sBAAsB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,EAAE,GACR,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,8BAA8B,EAC9B,iCAAiC,EACjC,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,GACjC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,GAC/B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,+BAA+B,EAC/B,oCAAoC,GACrC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,2CAA2C,EAC3C,4BAA4B,EAC5B,sCAAsC,EACtC,gCAAgC,GACjC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,4BAA4B,GAC7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,cAAc,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -2,7 +2,9 @@ export { createDb, getPostgresDataDirectory, ensurePostgresDatabase, inspectMigr
2
2
  export { getEmbeddedPostgresTestSupport, startEmbeddedPostgresTestDatabase, } from "./test-embedded-postgres.js";
3
3
  export { runDatabaseBackup, runDatabaseRestore, formatDatabaseBackupResult, } from "./backup-lib.js";
4
4
  export { createEmbeddedPostgresLogBuffer, formatEmbeddedPostgresError, } from "./embedded-postgres-error.js";
5
+ export { ensureLinuxSharedLibraryAliases, prepareEmbeddedPostgresNativeRuntime, } from "./embedded-postgres-native.js";
5
6
  export { cleanupOrphanedEmbeddedPostgresForkchildren, recoverEmbeddedPostgresStart, resetIncompleteEmbeddedPostgresDataDir, shouldRetryEmbeddedPostgresStart, } from "./embedded-postgres-recovery.js";
7
+ export { startManagedEmbeddedPostgres, } from "./embedded-postgres-manager.js";
6
8
  export { issueRelations } from "./schema/issue_relations.js";
7
9
  export { issueReferenceMentions } from "./schema/issue_reference_mentions.js";
8
10
  export * from "./schema/index.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,gCAAgC,EAGhC,sBAAsB,GAGvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,8BAA8B,EAC9B,iCAAiC,GAGlC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,GAK3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,2CAA2C,EAC3C,4BAA4B,EAC5B,sCAAsC,EACtC,gCAAgC,GACjC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,gCAAgC,EAGhC,sBAAsB,GAGvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,8BAA8B,EAC9B,iCAAiC,GAGlC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,GAK3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,+BAA+B,EAC/B,oCAAoC,GACrC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,2CAA2C,EAC3C,4BAA4B,EAC5B,sCAAsC,EACtC,gCAAgC,GACjC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,4BAA4B,GAC7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,29 @@
1
+ INSERT INTO "principal_permission_grants" (
2
+ "company_id",
3
+ "principal_type",
4
+ "principal_id",
5
+ "permission_key",
6
+ "scope",
7
+ "granted_by_user_id",
8
+ "created_at",
9
+ "updated_at"
10
+ )
11
+ SELECT
12
+ "company_id",
13
+ 'user',
14
+ "principal_id",
15
+ 'environments:manage',
16
+ NULL,
17
+ NULL,
18
+ now(),
19
+ now()
20
+ FROM "company_memberships"
21
+ WHERE "principal_type" = 'user'
22
+ AND "status" = 'active'
23
+ AND "membership_role" IN ('owner', 'admin')
24
+ ON CONFLICT (
25
+ "company_id",
26
+ "principal_type",
27
+ "principal_id",
28
+ "permission_key"
29
+ ) DO NOTHING;
@@ -0,0 +1,75 @@
1
+ INSERT INTO "company_memberships" (
2
+ "company_id",
3
+ "principal_type",
4
+ "principal_id",
5
+ "status",
6
+ "membership_role",
7
+ "created_at",
8
+ "updated_at"
9
+ )
10
+ SELECT
11
+ "company_id",
12
+ 'agent',
13
+ "id",
14
+ 'active',
15
+ 'member',
16
+ now(),
17
+ now()
18
+ FROM "agents"
19
+ WHERE "status" NOT IN ('pending_approval', 'terminated')
20
+ ON CONFLICT (
21
+ "company_id",
22
+ "principal_type",
23
+ "principal_id"
24
+ ) DO NOTHING;
25
+
26
+ INSERT INTO "principal_permission_grants" (
27
+ "company_id",
28
+ "principal_type",
29
+ "principal_id",
30
+ "permission_key",
31
+ "scope",
32
+ "granted_by_user_id",
33
+ "created_at",
34
+ "updated_at"
35
+ )
36
+ SELECT
37
+ memberships."company_id",
38
+ 'user',
39
+ memberships."principal_id",
40
+ role_defaults."permission_key",
41
+ NULL,
42
+ NULL,
43
+ now(),
44
+ now()
45
+ FROM "company_memberships" memberships
46
+ JOIN (
47
+ VALUES
48
+ ('owner', 'agents:create'),
49
+ ('owner', 'environments:manage'),
50
+ ('owner', 'users:invite'),
51
+ ('owner', 'users:manage_permissions'),
52
+ ('owner', 'tasks:assign'),
53
+ ('owner', 'joins:approve'),
54
+ ('admin', 'agents:create'),
55
+ ('admin', 'environments:manage'),
56
+ ('admin', 'users:invite'),
57
+ ('admin', 'tasks:assign'),
58
+ ('admin', 'joins:approve'),
59
+ ('operator', 'tasks:assign')
60
+ ) AS role_defaults("membership_role", "permission_key")
61
+ ON role_defaults."membership_role" = CASE
62
+ WHEN memberships."membership_role" = 'owner' THEN 'owner'
63
+ WHEN memberships."membership_role" = 'admin' THEN 'admin'
64
+ WHEN memberships."membership_role" = 'viewer' THEN 'viewer'
65
+ WHEN memberships."membership_role" = 'member' THEN 'operator'
66
+ ELSE 'operator'
67
+ END
68
+ WHERE memberships."principal_type" = 'user'
69
+ AND memberships."status" = 'active'
70
+ ON CONFLICT (
71
+ "company_id",
72
+ "principal_type",
73
+ "principal_id",
74
+ "permission_key"
75
+ ) DO NOTHING;
@@ -0,0 +1,71 @@
1
+ CREATE TABLE IF NOT EXISTS "cloud_upstream_connections" (
2
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
3
+ "company_id" uuid NOT NULL,
4
+ "remote_url" text NOT NULL,
5
+ "source_instance_id" text NOT NULL,
6
+ "source_instance_fingerprint" text NOT NULL,
7
+ "source_public_key" text NOT NULL,
8
+ "private_key_pem" text NOT NULL,
9
+ "token_status" text NOT NULL,
10
+ "scopes" text[] DEFAULT '{}' NOT NULL,
11
+ "authorized_global_user_id" text,
12
+ "access_token" text,
13
+ "token_id" text,
14
+ "token_expires_at" timestamp with time zone,
15
+ "target_stack_id" text NOT NULL,
16
+ "target_stack_slug" text,
17
+ "target_stack_display_name" text,
18
+ "target_company_id" text NOT NULL,
19
+ "target_origin" text NOT NULL,
20
+ "target_primary_host" text NOT NULL,
21
+ "target_product" text NOT NULL,
22
+ "target_schema_major" integer NOT NULL,
23
+ "target_max_chunk_bytes" integer NOT NULL,
24
+ "pending_state" text,
25
+ "pending_code_verifier" text,
26
+ "pending_redirect_uri" text,
27
+ "pending_token_url" text,
28
+ "last_run_id" uuid,
29
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
30
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
31
+ );--> statement-breakpoint
32
+ CREATE TABLE IF NOT EXISTS "cloud_upstream_runs" (
33
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
34
+ "connection_id" uuid NOT NULL,
35
+ "company_id" uuid NOT NULL,
36
+ "remote_run_id" text,
37
+ "status" text NOT NULL,
38
+ "active_step" text NOT NULL,
39
+ "progress_percent" integer DEFAULT 0 NOT NULL,
40
+ "dry_run" boolean DEFAULT false NOT NULL,
41
+ "retry_of_run_id" uuid,
42
+ "summary" jsonb DEFAULT '[]'::jsonb NOT NULL,
43
+ "warnings" jsonb DEFAULT '[]'::jsonb NOT NULL,
44
+ "conflicts" jsonb DEFAULT '[]'::jsonb NOT NULL,
45
+ "events" jsonb DEFAULT '[]'::jsonb NOT NULL,
46
+ "report" jsonb DEFAULT '{}'::jsonb NOT NULL,
47
+ "idempotency_key" text NOT NULL,
48
+ "manifest_hash" text NOT NULL,
49
+ "target_url" text,
50
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
51
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
52
+ "completed_at" timestamp with time zone
53
+ );--> statement-breakpoint
54
+ DO $$ BEGIN
55
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cloud_upstream_connections_company_id_companies_id_fk') THEN
56
+ ALTER TABLE "cloud_upstream_connections" ADD CONSTRAINT "cloud_upstream_connections_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE cascade ON UPDATE no action;
57
+ END IF;
58
+ END $$;--> statement-breakpoint
59
+ DO $$ BEGIN
60
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cloud_upstream_runs_connection_id_cloud_upstream_connections_id_fk') THEN
61
+ ALTER TABLE "cloud_upstream_runs" ADD CONSTRAINT "cloud_upstream_runs_connection_id_cloud_upstream_connections_id_fk" FOREIGN KEY ("connection_id") REFERENCES "public"."cloud_upstream_connections"("id") ON DELETE cascade ON UPDATE no action;
62
+ END IF;
63
+ END $$;--> statement-breakpoint
64
+ DO $$ BEGIN
65
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cloud_upstream_runs_company_id_companies_id_fk') THEN
66
+ ALTER TABLE "cloud_upstream_runs" ADD CONSTRAINT "cloud_upstream_runs_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE cascade ON UPDATE no action;
67
+ END IF;
68
+ END $$;--> statement-breakpoint
69
+ CREATE INDEX IF NOT EXISTS "cloud_upstream_connections_company_idx" ON "cloud_upstream_connections" USING btree ("company_id");--> statement-breakpoint
70
+ CREATE INDEX IF NOT EXISTS "cloud_upstream_runs_company_created_idx" ON "cloud_upstream_runs" USING btree ("company_id","created_at");--> statement-breakpoint
71
+ CREATE INDEX IF NOT EXISTS "cloud_upstream_runs_connection_idx" ON "cloud_upstream_runs" USING btree ("connection_id");
@@ -0,0 +1,55 @@
1
+ CREATE TABLE IF NOT EXISTS "agent_memberships" (
2
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
3
+ "company_id" uuid NOT NULL,
4
+ "agent_id" uuid NOT NULL,
5
+ "user_id" text NOT NULL,
6
+ "state" text DEFAULT 'joined' NOT NULL,
7
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
8
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
9
+ );
10
+ --> statement-breakpoint
11
+ CREATE TABLE IF NOT EXISTS "project_memberships" (
12
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
13
+ "company_id" uuid NOT NULL,
14
+ "project_id" uuid NOT NULL,
15
+ "user_id" text NOT NULL,
16
+ "state" text DEFAULT 'joined' NOT NULL,
17
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
18
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
19
+ );
20
+ --> statement-breakpoint
21
+ DO $$ BEGIN
22
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'agent_memberships_company_id_companies_id_fk') THEN
23
+ ALTER TABLE "agent_memberships" ADD CONSTRAINT "agent_memberships_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE cascade ON UPDATE no action;
24
+ END IF;
25
+ END $$;
26
+ --> statement-breakpoint
27
+ DO $$ BEGIN
28
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'agent_memberships_agent_id_agents_id_fk') THEN
29
+ ALTER TABLE "agent_memberships" ADD CONSTRAINT "agent_memberships_agent_id_agents_id_fk" FOREIGN KEY ("agent_id") REFERENCES "public"."agents"("id") ON DELETE cascade ON UPDATE no action;
30
+ END IF;
31
+ END $$;
32
+ --> statement-breakpoint
33
+ DO $$ BEGIN
34
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'project_memberships_company_id_companies_id_fk') THEN
35
+ ALTER TABLE "project_memberships" ADD CONSTRAINT "project_memberships_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE cascade ON UPDATE no action;
36
+ END IF;
37
+ END $$;
38
+ --> statement-breakpoint
39
+ DO $$ BEGIN
40
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'project_memberships_project_id_projects_id_fk') THEN
41
+ ALTER TABLE "project_memberships" ADD CONSTRAINT "project_memberships_project_id_projects_id_fk" FOREIGN KEY ("project_id") REFERENCES "public"."projects"("id") ON DELETE cascade ON UPDATE no action;
42
+ END IF;
43
+ END $$;
44
+ --> statement-breakpoint
45
+ CREATE INDEX IF NOT EXISTS "agent_memberships_company_user_idx" ON "agent_memberships" USING btree ("company_id","user_id");
46
+ --> statement-breakpoint
47
+ CREATE INDEX IF NOT EXISTS "agent_memberships_agent_idx" ON "agent_memberships" USING btree ("agent_id");
48
+ --> statement-breakpoint
49
+ CREATE UNIQUE INDEX IF NOT EXISTS "agent_memberships_company_user_agent_uq" ON "agent_memberships" USING btree ("company_id","user_id","agent_id");
50
+ --> statement-breakpoint
51
+ CREATE INDEX IF NOT EXISTS "project_memberships_company_user_idx" ON "project_memberships" USING btree ("company_id","user_id");
52
+ --> statement-breakpoint
53
+ CREATE INDEX IF NOT EXISTS "project_memberships_project_idx" ON "project_memberships" USING btree ("project_id");
54
+ --> statement-breakpoint
55
+ CREATE UNIQUE INDEX IF NOT EXISTS "project_memberships_company_user_project_uq" ON "project_memberships" USING btree ("company_id","user_id","project_id");
@@ -0,0 +1,189 @@
1
+ CREATE TABLE IF NOT EXISTS "document_annotation_threads" (
2
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
3
+ "company_id" uuid NOT NULL,
4
+ "issue_id" uuid NOT NULL,
5
+ "document_id" uuid NOT NULL,
6
+ "document_key" text NOT NULL,
7
+ "status" text DEFAULT 'open' NOT NULL,
8
+ "anchor_state" text DEFAULT 'active' NOT NULL,
9
+ "original_revision_id" uuid,
10
+ "original_revision_number" integer NOT NULL,
11
+ "current_revision_id" uuid,
12
+ "current_revision_number" integer NOT NULL,
13
+ "selected_text" text NOT NULL,
14
+ "prefix_text" text DEFAULT '' NOT NULL,
15
+ "suffix_text" text DEFAULT '' NOT NULL,
16
+ "normalized_start" integer NOT NULL,
17
+ "normalized_end" integer NOT NULL,
18
+ "markdown_start" integer NOT NULL,
19
+ "markdown_end" integer NOT NULL,
20
+ "anchor_confidence" text DEFAULT 'exact' NOT NULL,
21
+ "anchor_selector" jsonb NOT NULL,
22
+ "created_by_agent_id" uuid,
23
+ "created_by_user_id" text,
24
+ "resolved_by_agent_id" uuid,
25
+ "resolved_by_user_id" text,
26
+ "resolved_at" timestamp with time zone,
27
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
28
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
29
+ );
30
+ --> statement-breakpoint
31
+ CREATE TABLE IF NOT EXISTS "document_annotation_comments" (
32
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
33
+ "company_id" uuid NOT NULL,
34
+ "thread_id" uuid NOT NULL,
35
+ "issue_id" uuid NOT NULL,
36
+ "document_id" uuid NOT NULL,
37
+ "body" text NOT NULL,
38
+ "author_type" text NOT NULL,
39
+ "author_agent_id" uuid,
40
+ "author_user_id" text,
41
+ "created_by_run_id" uuid,
42
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
43
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
44
+ );
45
+ --> statement-breakpoint
46
+ CREATE TABLE IF NOT EXISTS "document_annotation_anchor_snapshots" (
47
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
48
+ "company_id" uuid NOT NULL,
49
+ "thread_id" uuid NOT NULL,
50
+ "document_id" uuid NOT NULL,
51
+ "from_revision_id" uuid,
52
+ "from_revision_number" integer,
53
+ "to_revision_id" uuid,
54
+ "to_revision_number" integer NOT NULL,
55
+ "previous_anchor" jsonb NOT NULL,
56
+ "next_anchor" jsonb,
57
+ "anchor_state" text NOT NULL,
58
+ "anchor_confidence" text NOT NULL,
59
+ "failure_reason" text,
60
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
61
+ );
62
+ --> statement-breakpoint
63
+ DO $$ BEGIN
64
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'document_annotation_threads_company_id_companies_id_fk') THEN
65
+ ALTER TABLE "document_annotation_threads" ADD CONSTRAINT "document_annotation_threads_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE no action ON UPDATE no action;
66
+ END IF;
67
+ END $$;
68
+ --> statement-breakpoint
69
+ DO $$ BEGIN
70
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'document_annotation_threads_issue_id_issues_id_fk') THEN
71
+ ALTER TABLE "document_annotation_threads" ADD CONSTRAINT "document_annotation_threads_issue_id_issues_id_fk" FOREIGN KEY ("issue_id") REFERENCES "public"."issues"("id") ON DELETE cascade ON UPDATE no action;
72
+ END IF;
73
+ END $$;
74
+ --> statement-breakpoint
75
+ DO $$ BEGIN
76
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'document_annotation_threads_document_id_documents_id_fk') THEN
77
+ ALTER TABLE "document_annotation_threads" ADD CONSTRAINT "document_annotation_threads_document_id_documents_id_fk" FOREIGN KEY ("document_id") REFERENCES "public"."documents"("id") ON DELETE cascade ON UPDATE no action;
78
+ END IF;
79
+ END $$;
80
+ --> statement-breakpoint
81
+ DO $$ BEGIN
82
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'document_annotation_threads_original_revision_id_document_revisions_id_fk') THEN
83
+ ALTER TABLE "document_annotation_threads" ADD CONSTRAINT "document_annotation_threads_original_revision_id_document_revisions_id_fk" FOREIGN KEY ("original_revision_id") REFERENCES "public"."document_revisions"("id") ON DELETE set null ON UPDATE no action;
84
+ END IF;
85
+ END $$;
86
+ --> statement-breakpoint
87
+ DO $$ BEGIN
88
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'document_annotation_threads_current_revision_id_document_revisions_id_fk') THEN
89
+ ALTER TABLE "document_annotation_threads" ADD CONSTRAINT "document_annotation_threads_current_revision_id_document_revisions_id_fk" FOREIGN KEY ("current_revision_id") REFERENCES "public"."document_revisions"("id") ON DELETE set null ON UPDATE no action;
90
+ END IF;
91
+ END $$;
92
+ --> statement-breakpoint
93
+ DO $$ BEGIN
94
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'document_annotation_threads_created_by_agent_id_agents_id_fk') THEN
95
+ ALTER TABLE "document_annotation_threads" ADD CONSTRAINT "document_annotation_threads_created_by_agent_id_agents_id_fk" FOREIGN KEY ("created_by_agent_id") REFERENCES "public"."agents"("id") ON DELETE set null ON UPDATE no action;
96
+ END IF;
97
+ END $$;
98
+ --> statement-breakpoint
99
+ DO $$ BEGIN
100
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'document_annotation_threads_resolved_by_agent_id_agents_id_fk') THEN
101
+ ALTER TABLE "document_annotation_threads" ADD CONSTRAINT "document_annotation_threads_resolved_by_agent_id_agents_id_fk" FOREIGN KEY ("resolved_by_agent_id") REFERENCES "public"."agents"("id") ON DELETE set null ON UPDATE no action;
102
+ END IF;
103
+ END $$;
104
+ --> statement-breakpoint
105
+ DO $$ BEGIN
106
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'document_annotation_comments_company_id_companies_id_fk') THEN
107
+ ALTER TABLE "document_annotation_comments" ADD CONSTRAINT "document_annotation_comments_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE no action ON UPDATE no action;
108
+ END IF;
109
+ END $$;
110
+ --> statement-breakpoint
111
+ DO $$ BEGIN
112
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'document_annotation_comments_thread_id_document_annotation_threads_id_fk') THEN
113
+ ALTER TABLE "document_annotation_comments" ADD CONSTRAINT "document_annotation_comments_thread_id_document_annotation_threads_id_fk" FOREIGN KEY ("thread_id") REFERENCES "public"."document_annotation_threads"("id") ON DELETE cascade ON UPDATE no action;
114
+ END IF;
115
+ END $$;
116
+ --> statement-breakpoint
117
+ DO $$ BEGIN
118
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'document_annotation_comments_issue_id_issues_id_fk') THEN
119
+ ALTER TABLE "document_annotation_comments" ADD CONSTRAINT "document_annotation_comments_issue_id_issues_id_fk" FOREIGN KEY ("issue_id") REFERENCES "public"."issues"("id") ON DELETE cascade ON UPDATE no action;
120
+ END IF;
121
+ END $$;
122
+ --> statement-breakpoint
123
+ DO $$ BEGIN
124
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'document_annotation_comments_document_id_documents_id_fk') THEN
125
+ ALTER TABLE "document_annotation_comments" ADD CONSTRAINT "document_annotation_comments_document_id_documents_id_fk" FOREIGN KEY ("document_id") REFERENCES "public"."documents"("id") ON DELETE cascade ON UPDATE no action;
126
+ END IF;
127
+ END $$;
128
+ --> statement-breakpoint
129
+ DO $$ BEGIN
130
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'document_annotation_comments_author_agent_id_agents_id_fk') THEN
131
+ ALTER TABLE "document_annotation_comments" ADD CONSTRAINT "document_annotation_comments_author_agent_id_agents_id_fk" FOREIGN KEY ("author_agent_id") REFERENCES "public"."agents"("id") ON DELETE set null ON UPDATE no action;
132
+ END IF;
133
+ END $$;
134
+ --> statement-breakpoint
135
+ DO $$ BEGIN
136
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'document_annotation_comments_created_by_run_id_heartbeat_runs_id_fk') THEN
137
+ ALTER TABLE "document_annotation_comments" ADD CONSTRAINT "document_annotation_comments_created_by_run_id_heartbeat_runs_id_fk" FOREIGN KEY ("created_by_run_id") REFERENCES "public"."heartbeat_runs"("id") ON DELETE set null ON UPDATE no action;
138
+ END IF;
139
+ END $$;
140
+ --> statement-breakpoint
141
+ DO $$ BEGIN
142
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'document_annotation_anchor_snapshots_company_id_companies_id_fk') THEN
143
+ ALTER TABLE "document_annotation_anchor_snapshots" ADD CONSTRAINT "document_annotation_anchor_snapshots_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE no action ON UPDATE no action;
144
+ END IF;
145
+ END $$;
146
+ --> statement-breakpoint
147
+ DO $$ BEGIN
148
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'document_annotation_anchor_snapshots_thread_id_document_annotation_threads_id_fk') THEN
149
+ ALTER TABLE "document_annotation_anchor_snapshots" ADD CONSTRAINT "document_annotation_anchor_snapshots_thread_id_document_annotation_threads_id_fk" FOREIGN KEY ("thread_id") REFERENCES "public"."document_annotation_threads"("id") ON DELETE cascade ON UPDATE no action;
150
+ END IF;
151
+ END $$;
152
+ --> statement-breakpoint
153
+ DO $$ BEGIN
154
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'document_annotation_anchor_snapshots_document_id_documents_id_fk') THEN
155
+ ALTER TABLE "document_annotation_anchor_snapshots" ADD CONSTRAINT "document_annotation_anchor_snapshots_document_id_documents_id_fk" FOREIGN KEY ("document_id") REFERENCES "public"."documents"("id") ON DELETE cascade ON UPDATE no action;
156
+ END IF;
157
+ END $$;
158
+ --> statement-breakpoint
159
+ DO $$ BEGIN
160
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'document_annotation_anchor_snapshots_from_revision_id_document_revisions_id_fk') THEN
161
+ ALTER TABLE "document_annotation_anchor_snapshots" ADD CONSTRAINT "document_annotation_anchor_snapshots_from_revision_id_document_revisions_id_fk" FOREIGN KEY ("from_revision_id") REFERENCES "public"."document_revisions"("id") ON DELETE set null ON UPDATE no action;
162
+ END IF;
163
+ END $$;
164
+ --> statement-breakpoint
165
+ DO $$ BEGIN
166
+ IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'document_annotation_anchor_snapshots_to_revision_id_document_revisions_id_fk') THEN
167
+ ALTER TABLE "document_annotation_anchor_snapshots" ADD CONSTRAINT "document_annotation_anchor_snapshots_to_revision_id_document_revisions_id_fk" FOREIGN KEY ("to_revision_id") REFERENCES "public"."document_revisions"("id") ON DELETE set null ON UPDATE no action;
168
+ END IF;
169
+ END $$;
170
+ --> statement-breakpoint
171
+ CREATE INDEX IF NOT EXISTS "document_annotation_threads_company_document_status_idx" ON "document_annotation_threads" USING btree ("company_id","document_id","status");
172
+ --> statement-breakpoint
173
+ CREATE INDEX IF NOT EXISTS "document_annotation_threads_company_issue_status_idx" ON "document_annotation_threads" USING btree ("company_id","issue_id","status");
174
+ --> statement-breakpoint
175
+ CREATE INDEX IF NOT EXISTS "document_annotation_threads_company_current_revision_open_idx" ON "document_annotation_threads" USING btree ("company_id","document_id","current_revision_id","status");
176
+ --> statement-breakpoint
177
+ CREATE INDEX IF NOT EXISTS "document_annotation_threads_company_anchor_state_idx" ON "document_annotation_threads" USING btree ("company_id","anchor_state");
178
+ --> statement-breakpoint
179
+ CREATE INDEX IF NOT EXISTS "document_annotation_comments_company_thread_created_at_idx" ON "document_annotation_comments" USING btree ("company_id","thread_id","created_at");
180
+ --> statement-breakpoint
181
+ CREATE INDEX IF NOT EXISTS "document_annotation_comments_company_issue_created_at_idx" ON "document_annotation_comments" USING btree ("company_id","issue_id","created_at");
182
+ --> statement-breakpoint
183
+ CREATE INDEX IF NOT EXISTS "document_annotation_comments_company_document_created_at_idx" ON "document_annotation_comments" USING btree ("company_id","document_id","created_at");
184
+ --> statement-breakpoint
185
+ CREATE INDEX IF NOT EXISTS "document_annotation_comments_body_search_idx" ON "document_annotation_comments" USING gin ("body" gin_trgm_ops);
186
+ --> statement-breakpoint
187
+ CREATE INDEX IF NOT EXISTS "document_annotation_anchor_snapshots_company_thread_created_at_idx" ON "document_annotation_anchor_snapshots" USING btree ("company_id","thread_id","created_at");
188
+ --> statement-breakpoint
189
+ CREATE INDEX IF NOT EXISTS "document_annotation_anchor_snapshots_company_document_revision_idx" ON "document_annotation_anchor_snapshots" USING btree ("company_id","document_id","to_revision_number");