@hiai-gg/hiai-docs 0.0.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 (216) hide show
  1. package/.all-contributorsrc +18 -0
  2. package/.claude/settings.local.json +61 -0
  3. package/.dockerignore +113 -0
  4. package/.env.example +68 -0
  5. package/.github/FUNDING.yml +5 -0
  6. package/.github/ISSUE_TEMPLATE/bug_report.md +74 -0
  7. package/.github/ISSUE_TEMPLATE/feature_request.md +78 -0
  8. package/.github/dependabot.yml +136 -0
  9. package/.github/pull_request_template.md +96 -0
  10. package/.github/workflows/ci.yml +283 -0
  11. package/AGENTS.md +237 -0
  12. package/CODE_OF_CONDUCT.md +134 -0
  13. package/CONTRIBUTING.md +77 -0
  14. package/Caddyfile +50 -0
  15. package/Dockerfile.backend +60 -0
  16. package/LICENSE +21 -0
  17. package/README.md +284 -0
  18. package/RELEASE_CHECKLIST.md +34 -0
  19. package/SECURITY.md +60 -0
  20. package/backend/package.json +43 -0
  21. package/backend/src/__tests__/auth-helpers.test.ts +51 -0
  22. package/backend/src/__tests__/chunker.test.ts +65 -0
  23. package/backend/src/__tests__/config.test.ts +91 -0
  24. package/backend/src/__tests__/csrf.test.ts +91 -0
  25. package/backend/src/__tests__/embedding.test.ts +48 -0
  26. package/backend/src/__tests__/rate-limit.test.ts +46 -0
  27. package/backend/src/__tests__/routes.test.ts +38 -0
  28. package/backend/src/__tests__/schema.test.ts +31 -0
  29. package/backend/src/__tests__/validation.test.ts +556 -0
  30. package/backend/src/api/middleware/auth.ts +56 -0
  31. package/backend/src/api/middleware/csrf.ts +91 -0
  32. package/backend/src/api/middleware/rate-limit.ts +77 -0
  33. package/backend/src/api/middleware/webhook-verify.ts +22 -0
  34. package/backend/src/api/routes/attachments.ts +280 -0
  35. package/backend/src/api/routes/auth.ts +52 -0
  36. package/backend/src/api/routes/collaboration.ts +121 -0
  37. package/backend/src/api/routes/documents.ts +664 -0
  38. package/backend/src/api/routes/folders.ts +226 -0
  39. package/backend/src/api/routes/search.ts +354 -0
  40. package/backend/src/api/routes/share.ts +512 -0
  41. package/backend/src/api/routes/tags.ts +247 -0
  42. package/backend/src/api/routes/versions.ts +99 -0
  43. package/backend/src/api/routes/webhooks.ts +43 -0
  44. package/backend/src/embedding/chunker.ts +74 -0
  45. package/backend/src/embedding/index.ts +117 -0
  46. package/backend/src/embedding/providers/ollama.ts +63 -0
  47. package/backend/src/embedding/providers/openrouter.ts +71 -0
  48. package/backend/src/embedding/utils.ts +13 -0
  49. package/backend/src/embedding/worker.ts +89 -0
  50. package/backend/src/index.ts +147 -0
  51. package/backend/src/lib/auth-helpers.ts +27 -0
  52. package/backend/src/lib/auth.ts +35 -0
  53. package/backend/src/lib/config.ts +73 -0
  54. package/backend/src/lib/db.ts +7 -0
  55. package/backend/src/lib/embedding-queue.ts +12 -0
  56. package/backend/src/lib/logger.ts +18 -0
  57. package/backend/src/lib/markdown-to-doc.ts +45 -0
  58. package/backend/src/lib/minio.ts +46 -0
  59. package/backend/src/lib/redis.ts +19 -0
  60. package/backend/src/lib/yjs-provider.ts +182 -0
  61. package/backend/tests/integration/_harness.ts +754 -0
  62. package/backend/tests/integration/auth.test.ts +296 -0
  63. package/backend/tests/integration/routes.documents.test.ts +459 -0
  64. package/backend/tests/integration/routes.folders.test.ts +337 -0
  65. package/backend/tests/integration/routes.search.test.ts +322 -0
  66. package/backend/tests/integration/routes.share.test.ts +773 -0
  67. package/backend/tests/integration/routes.tags.test.ts +425 -0
  68. package/backend/tests/integration/routes.versions.test.ts +233 -0
  69. package/backend/tsconfig.json +18 -0
  70. package/docker-compose.yml +218 -0
  71. package/docs/API.md +328 -0
  72. package/docs/ARCHITECTURE.md +75 -0
  73. package/docs/DEPLOYMENT.md +113 -0
  74. package/docs/PRODUCTION_STATUS.md +61 -0
  75. package/docs/openapi.json +385 -0
  76. package/frontend/.svelte-kit.old/ambient.d.ts +230 -0
  77. package/frontend/.svelte-kit.old/env.d.ts +1 -0
  78. package/frontend/.svelte-kit.old/generated/client/app.js +46 -0
  79. package/frontend/.svelte-kit.old/generated/client/matchers.js +1 -0
  80. package/frontend/.svelte-kit.old/generated/client/nodes/0.js +3 -0
  81. package/frontend/.svelte-kit.old/generated/client/nodes/1.js +1 -0
  82. package/frontend/.svelte-kit.old/generated/client/nodes/10.js +3 -0
  83. package/frontend/.svelte-kit.old/generated/client/nodes/2.js +1 -0
  84. package/frontend/.svelte-kit.old/generated/client/nodes/3.js +1 -0
  85. package/frontend/.svelte-kit.old/generated/client/nodes/4.js +1 -0
  86. package/frontend/.svelte-kit.old/generated/client/nodes/5.js +3 -0
  87. package/frontend/.svelte-kit.old/generated/client/nodes/6.js +1 -0
  88. package/frontend/.svelte-kit.old/generated/client/nodes/7.js +3 -0
  89. package/frontend/.svelte-kit.old/generated/client/nodes/8.js +1 -0
  90. package/frontend/.svelte-kit.old/generated/client/nodes/9.js +3 -0
  91. package/frontend/.svelte-kit.old/generated/root.js +3 -0
  92. package/frontend/.svelte-kit.old/generated/root.svelte +80 -0
  93. package/frontend/.svelte-kit.old/generated/server/internal.js +55 -0
  94. package/frontend/.svelte-kit.old/non-ambient.d.ts +59 -0
  95. package/frontend/.svelte-kit.old/tsconfig.json +59 -0
  96. package/frontend/.svelte-kit.old/types/route_meta_data.json +40 -0
  97. package/frontend/.svelte-kit.old/types/src/routes/$types.d.ts +21 -0
  98. package/frontend/.svelte-kit.old/types/src/routes/(app)/$types.d.ts +30 -0
  99. package/frontend/.svelte-kit.old/types/src/routes/(app)/docs/[id]/$types.d.ts +27 -0
  100. package/frontend/.svelte-kit.old/types/src/routes/(app)/docs/[id]/proxy+page.ts +25 -0
  101. package/frontend/.svelte-kit.old/types/src/routes/api/[...path]/$types.d.ts +10 -0
  102. package/frontend/.svelte-kit.old/types/src/routes/folders/[id]/$types.d.ts +27 -0
  103. package/frontend/.svelte-kit.old/types/src/routes/folders/[id]/proxy+page.ts +15 -0
  104. package/frontend/.svelte-kit.old/types/src/routes/login/$types.d.ts +17 -0
  105. package/frontend/.svelte-kit.old/types/src/routes/register/$types.d.ts +17 -0
  106. package/frontend/.svelte-kit.old/types/src/routes/s/[token]/$types.d.ts +20 -0
  107. package/frontend/.svelte-kit.old/types/src/routes/s/[token]/proxy+page.ts +6 -0
  108. package/frontend/.svelte-kit.old/types/src/routes/search/$types.d.ts +19 -0
  109. package/frontend/.svelte-kit.old/types/src/routes/search/proxy+page.ts +26 -0
  110. package/frontend/.svelte-kit.old/types/src/routes/settings/$types.d.ts +17 -0
  111. package/frontend/Dockerfile +44 -0
  112. package/frontend/biome.json +40 -0
  113. package/frontend/components.json +18 -0
  114. package/frontend/messages/en.json +434 -0
  115. package/frontend/package.json +70 -0
  116. package/frontend/project.inlang/settings.json +12 -0
  117. package/frontend/src/app.css +6 -0
  118. package/frontend/src/app.d.ts +13 -0
  119. package/frontend/src/app.html +30 -0
  120. package/frontend/src/hooks.server.ts +10 -0
  121. package/frontend/src/hooks.ts +10 -0
  122. package/frontend/src/lib/api/attachments.ts +45 -0
  123. package/frontend/src/lib/api/client.test.ts +15 -0
  124. package/frontend/src/lib/api/client.ts +57 -0
  125. package/frontend/src/lib/api/documents.ts +83 -0
  126. package/frontend/src/lib/api/folders.ts +180 -0
  127. package/frontend/src/lib/api/search.test.ts +52 -0
  128. package/frontend/src/lib/api/search.ts +128 -0
  129. package/frontend/src/lib/api/settings.ts +95 -0
  130. package/frontend/src/lib/api/share.ts +71 -0
  131. package/frontend/src/lib/api/tags.test.ts +91 -0
  132. package/frontend/src/lib/api/tags.ts +87 -0
  133. package/frontend/src/lib/auth-client.ts +10 -0
  134. package/frontend/src/lib/collaboration.ts +63 -0
  135. package/frontend/src/lib/components/AttachmentUpload.svelte +110 -0
  136. package/frontend/src/lib/components/DatePicker.svelte +322 -0
  137. package/frontend/src/lib/components/DocumentCard.svelte +166 -0
  138. package/frontend/src/lib/components/EmptyState.svelte +49 -0
  139. package/frontend/src/lib/components/FolderCard.svelte +93 -0
  140. package/frontend/src/lib/components/ScrollToTop.svelte +72 -0
  141. package/frontend/src/lib/components/SearchBar.svelte +47 -0
  142. package/frontend/src/lib/components/SearchResult.svelte +115 -0
  143. package/frontend/src/lib/components/SettingsDialog.svelte +271 -0
  144. package/frontend/src/lib/components/ShareDialog.svelte +158 -0
  145. package/frontend/src/lib/components/ShareLink.svelte +98 -0
  146. package/frontend/src/lib/components/TagCreateDialog.svelte +284 -0
  147. package/frontend/src/lib/components/VersionDiff.svelte +55 -0
  148. package/frontend/src/lib/components/VersionHistory.svelte +96 -0
  149. package/frontend/src/lib/components/editor/DocumentTitle.svelte +87 -0
  150. package/frontend/src/lib/components/editor/EditorToolbar.svelte +1367 -0
  151. package/frontend/src/lib/components/editor/HiAiEditor.svelte +531 -0
  152. package/frontend/src/lib/components/editor/LinkDialog.svelte +134 -0
  153. package/frontend/src/lib/components/editor/MarkdownToggle.svelte +88 -0
  154. package/frontend/src/lib/components/editor/editorExtensions.ts +53 -0
  155. package/frontend/src/lib/components/editor/markdown.ts +38 -0
  156. package/frontend/src/lib/components/sidebar/FolderTree.svelte +731 -0
  157. package/frontend/src/lib/components/sidebar/RecentDocs.svelte +311 -0
  158. package/frontend/src/lib/components/sidebar/Sidebar.svelte +156 -0
  159. package/frontend/src/lib/components/sidebar/TagList.svelte +200 -0
  160. package/frontend/src/lib/components/ui/confirm-dialog/ConfirmDialog.svelte +76 -0
  161. package/frontend/src/lib/components/ui/confirm-dialog/index.ts +1 -0
  162. package/frontend/src/lib/stores/tag-store.svelte.ts +56 -0
  163. package/frontend/src/lib/stores/theme.svelte.ts +97 -0
  164. package/frontend/src/lib/svelte.d.ts +6 -0
  165. package/frontend/src/lib/types.ts +44 -0
  166. package/frontend/src/lib/utils/clipboard.ts +17 -0
  167. package/frontend/src/lib/utils/strip-markdown.ts +59 -0
  168. package/frontend/src/lib/utils.ts +33 -0
  169. package/frontend/src/routes/(app)/+layout.svelte +17 -0
  170. package/frontend/src/routes/(app)/+page.server.ts +10 -0
  171. package/frontend/src/routes/(app)/+page.svelte +303 -0
  172. package/frontend/src/routes/(app)/docs/[id]/+page.server.ts +10 -0
  173. package/frontend/src/routes/(app)/docs/[id]/+page.svelte +1108 -0
  174. package/frontend/src/routes/(app)/docs/[id]/+page.ts +24 -0
  175. package/frontend/src/routes/(app)/search/+page.svelte +593 -0
  176. package/frontend/src/routes/(app)/search/+page.ts +25 -0
  177. package/frontend/src/routes/+error.svelte +12 -0
  178. package/frontend/src/routes/+layout.svelte +18 -0
  179. package/frontend/src/routes/+layout.ts +2 -0
  180. package/frontend/src/routes/api/[...path]/+server.ts +111 -0
  181. package/frontend/src/routes/folders/[id]/+page.server.ts +10 -0
  182. package/frontend/src/routes/folders/[id]/+page.svelte +319 -0
  183. package/frontend/src/routes/folders/[id]/+page.ts +14 -0
  184. package/frontend/src/routes/login/+page.svelte +90 -0
  185. package/frontend/src/routes/register/+page.svelte +97 -0
  186. package/frontend/src/routes/s/[token]/+page.svelte +496 -0
  187. package/frontend/src/routes/s/[token]/+page.ts +5 -0
  188. package/frontend/src/routes/settings/+page.svelte +175 -0
  189. package/frontend/static/favicon.png +0 -0
  190. package/frontend/static/logo.png +0 -0
  191. package/frontend/svelte.config.js +15 -0
  192. package/frontend/tsconfig.json +15 -0
  193. package/frontend/vite.config.ts +25 -0
  194. package/init.sql +9 -0
  195. package/logo.png +0 -0
  196. package/package.json +39 -0
  197. package/package.public.json +39 -0
  198. package/packages/db/drizzle.config.ts +10 -0
  199. package/packages/db/package.json +30 -0
  200. package/packages/db/src/client.ts +9 -0
  201. package/packages/db/src/index.ts +2 -0
  202. package/packages/db/src/migrations/0000_nice_bedlam.sql +165 -0
  203. package/packages/db/src/migrations/0001_w2_3_test.sql +5 -0
  204. package/packages/db/src/migrations/0002_rename_content_json.sql +2 -0
  205. package/packages/db/src/migrations/meta/0000_snapshot.json +1331 -0
  206. package/packages/db/src/migrations/meta/0001_snapshot.json +1399 -0
  207. package/packages/db/src/migrations/meta/0002_snapshot.json +1399 -0
  208. package/packages/db/src/migrations/meta/_journal.json +27 -0
  209. package/packages/db/src/schema.ts +378 -0
  210. package/packages/db/tsconfig.json +17 -0
  211. package/scripts/export-openapi.ts +37 -0
  212. package/scripts/health-check.sh +75 -0
  213. package/scripts/migrate.sh +135 -0
  214. package/scripts/prework_backup.sh +25 -0
  215. package/scripts/release.sh +83 -0
  216. package/tsconfig.json +25 -0
@@ -0,0 +1,15 @@
1
+ {
2
+ "extends": "./.svelte-kit/tsconfig.json",
3
+ "compilerOptions": {
4
+ "allowJs": true,
5
+ "checkJs": true,
6
+ "esModuleInterop": true,
7
+ "forceConsistentCasingInFileNames": true,
8
+ "resolveJsonModule": true,
9
+ "skipLibCheck": true,
10
+ "sourceMap": true,
11
+ "strict": true,
12
+ "moduleResolution": "bundler",
13
+ "types": ["bun"]
14
+ }
15
+ }
@@ -0,0 +1,25 @@
1
+ import { paraglideVitePlugin } from "@inlang/paraglide-js";
2
+ import { sveltekit } from "@sveltejs/kit/vite";
3
+ import tailwindcss from "@tailwindcss/vite";
4
+ import { defineConfig } from "vite";
5
+
6
+ export default defineConfig({
7
+ plugins: [
8
+ tailwindcss(),
9
+ paraglideVitePlugin({
10
+ project: "./project.inlang",
11
+ outdir: "./src/lib/paraglide",
12
+ strategy: ["url", "cookie", "baseLocale"],
13
+ }),
14
+ sveltekit(),
15
+ ],
16
+ server: {
17
+ port: 50701,
18
+ host: true,
19
+ // strictPort: vite's default silently picks the next free port,
20
+ // which would leave http://localhost:50701 serving the stale
21
+ // build (held by a previous container) while the new server
22
+ // runs on 5173. Fail loudly instead.
23
+ strictPort: true,
24
+ },
25
+ });
package/init.sql ADDED
@@ -0,0 +1,9 @@
1
+ -- hiai-docs init.sql
2
+ -- Runs on first PostgreSQL startup via docker-entrypoint-initdb.d.
3
+ -- Schema, indexes, and FKs live in packages/db/src/schema.ts (Drizzle).
4
+
5
+ CREATE EXTENSION IF NOT EXISTS vector;
6
+ CREATE EXTENSION IF NOT EXISTS pg_trgm;
7
+
8
+ GRANT ALL PRIVILEGES ON DATABASE hiai_docs TO aiuser;
9
+ GRANT ALL PRIVILEGES ON SCHEMA public TO aiuser;
package/logo.png ADDED
Binary file
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@hiai-gg/hiai-docs",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "license": "MIT",
6
+ "description": "The lightweight, AI-native self-hosted knowledge base — built-in RAG, hybrid semantic search, and a clean REST API for AI agents.",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/hiai-gg/hiai-docs.git"
10
+ },
11
+ "homepage": "https://github.com/hiai-gg/hiai-docs#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/hiai-gg/hiai-docs/issues"
14
+ },
15
+ "keywords": [
16
+ "knowledge-base",
17
+ "ai-native",
18
+ "wiki",
19
+ "markdown",
20
+ "ai-embeddings",
21
+ "rag",
22
+ "semantic-search",
23
+ "self-hosted",
24
+ "pgvector",
25
+ "ollama",
26
+ "local-llm",
27
+ "outline-alternative",
28
+ "docmost-alternative"
29
+ ],
30
+ "engines": {
31
+ "bun": ">= 1.3.14"
32
+ },
33
+ "scripts": {
34
+ "dev": "docker compose up -d",
35
+ "build": "docker compose build",
36
+ "start": "docker compose up -d",
37
+ "stop": "docker compose down"
38
+ }
39
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@hiai-gg/hiai-docs",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "license": "MIT",
6
+ "description": "The lightweight, AI-native self-hosted knowledge base — built-in RAG, hybrid semantic search, and a clean REST API for AI agents.",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/hiai-gg/hiai-docs.git"
10
+ },
11
+ "homepage": "https://github.com/hiai-gg/hiai-docs#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/hiai-gg/hiai-docs/issues"
14
+ },
15
+ "keywords": [
16
+ "knowledge-base",
17
+ "ai-native",
18
+ "wiki",
19
+ "markdown",
20
+ "ai-embeddings",
21
+ "rag",
22
+ "semantic-search",
23
+ "self-hosted",
24
+ "pgvector",
25
+ "ollama",
26
+ "local-llm",
27
+ "outline-alternative",
28
+ "docmost-alternative"
29
+ ],
30
+ "engines": {
31
+ "bun": ">= 1.3.14"
32
+ },
33
+ "scripts": {
34
+ "dev": "docker compose up -d",
35
+ "build": "docker compose build",
36
+ "start": "docker compose up -d",
37
+ "stop": "docker compose down"
38
+ }
39
+ }
@@ -0,0 +1,10 @@
1
+ import type { Config } from "drizzle-kit";
2
+
3
+ export default {
4
+ out: "./src/migrations",
5
+ schema: "./src/schema.ts",
6
+ dialect: "postgresql",
7
+ dbCredentials: {
8
+ url: process.env.DATABASE_URL || "postgresql://aiuser:aipassword@localhost:5433/hiai_docs",
9
+ },
10
+ } satisfies Config;
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@hiai-docs/db",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "main": "./src/index.ts",
8
+ "types": "./src/index.ts",
9
+ "exports": {
10
+ ".": "./src/index.ts",
11
+ "./schema": "./src/schema.ts"
12
+ },
13
+ "scripts": {
14
+ "db:generate": "drizzle-kit generate",
15
+ "db:migrate": "drizzle-kit migrate",
16
+ "db:push": "drizzle-kit push",
17
+ "db:studio": "drizzle-kit studio",
18
+ "typecheck": "tsc --noEmit"
19
+ },
20
+ "dependencies": {
21
+ "drizzle-orm": "^0.45.2",
22
+ "postgres": "^3.4.9",
23
+ "zod": "^4.4.3"
24
+ },
25
+ "devDependencies": {
26
+ "@types/node": "^25.9.1",
27
+ "drizzle-kit": "^0.31.10",
28
+ "typescript": "^5.8.0"
29
+ }
30
+ }
@@ -0,0 +1,9 @@
1
+ import { drizzle } from "drizzle-orm/postgres-js";
2
+ import postgres from "postgres";
3
+ import * as schema from "./schema";
4
+
5
+ const databaseUrl =
6
+ process.env.DATABASE_URL || "postgresql://aiuser:aipassword@localhost:5433/hiai_docs";
7
+
8
+ const client = postgres(databaseUrl, { max: 20, idle_timeout: 30, connect_timeout: 10 });
9
+ export const db = drizzle(client, { schema });
@@ -0,0 +1,2 @@
1
+ export * from "./schema";
2
+ export { db } from "./client";
@@ -0,0 +1,165 @@
1
+ CREATE TABLE "accounts" (
2
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
3
+ "user_id" uuid NOT NULL,
4
+ "account_id" text NOT NULL,
5
+ "provider_id" text NOT NULL,
6
+ "access_token" text,
7
+ "refresh_token" text,
8
+ "access_token_expires_at" timestamp,
9
+ "refresh_token_expires_at" timestamp,
10
+ "scope" text,
11
+ "password" text,
12
+ "created_at" timestamp DEFAULT now() NOT NULL,
13
+ "updated_at" timestamp DEFAULT now() NOT NULL
14
+ );
15
+ --> statement-breakpoint
16
+ CREATE TABLE "attachments" (
17
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
18
+ "document_id" uuid NOT NULL,
19
+ "filename" text NOT NULL,
20
+ "mime_type" text NOT NULL,
21
+ "size" bigint NOT NULL,
22
+ "minio_key" text NOT NULL,
23
+ "created_at" timestamp DEFAULT now() NOT NULL
24
+ );
25
+ --> statement-breakpoint
26
+ CREATE TABLE "document_embeddings" (
27
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
28
+ "document_id" uuid NOT NULL,
29
+ "chunk_index" bigint NOT NULL,
30
+ "chunk_text" text NOT NULL,
31
+ "embedding" vector(1024),
32
+ "created_at" timestamp DEFAULT now() NOT NULL
33
+ );
34
+ --> statement-breakpoint
35
+ CREATE TABLE "document_tags" (
36
+ "document_id" uuid NOT NULL,
37
+ "tag_id" uuid NOT NULL
38
+ );
39
+ --> statement-breakpoint
40
+ CREATE TABLE "documents" (
41
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
42
+ "owner_id" uuid NOT NULL,
43
+ "folder_id" uuid,
44
+ "title" text DEFAULT 'Untitled' NOT NULL,
45
+ "content" text DEFAULT '',
46
+ "content_tipex" jsonb,
47
+ "metadata" jsonb,
48
+ "created_at" timestamp DEFAULT now() NOT NULL,
49
+ "updated_at" timestamp DEFAULT now() NOT NULL
50
+ );
51
+ --> statement-breakpoint
52
+ CREATE TABLE "folders" (
53
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
54
+ "owner_id" uuid NOT NULL,
55
+ "parent_id" uuid,
56
+ "name" text NOT NULL,
57
+ "created_at" timestamp DEFAULT now() NOT NULL,
58
+ "updated_at" timestamp DEFAULT now() NOT NULL
59
+ );
60
+ --> statement-breakpoint
61
+ CREATE TABLE "guest_access" (
62
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
63
+ "share_link_id" uuid NOT NULL,
64
+ "guest_email" text NOT NULL,
65
+ "granted_at" timestamp DEFAULT now() NOT NULL
66
+ );
67
+ --> statement-breakpoint
68
+ CREATE TABLE "sessions" (
69
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
70
+ "user_id" uuid NOT NULL,
71
+ "token" text NOT NULL,
72
+ "expires_at" timestamp NOT NULL,
73
+ "ip_address" text,
74
+ "user_agent" text,
75
+ "created_at" timestamp DEFAULT now() NOT NULL,
76
+ "updated_at" timestamp DEFAULT now() NOT NULL,
77
+ CONSTRAINT "sessions_token_unique" UNIQUE("token")
78
+ );
79
+ --> statement-breakpoint
80
+ CREATE TABLE "share_links" (
81
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
82
+ "document_id" uuid,
83
+ "folder_id" uuid,
84
+ "token" text NOT NULL,
85
+ "password_hash" text,
86
+ "expires_at" timestamp,
87
+ "created_by" uuid NOT NULL,
88
+ "created_at" timestamp DEFAULT now() NOT NULL,
89
+ CONSTRAINT "share_links_token_unique" UNIQUE("token")
90
+ );
91
+ --> statement-breakpoint
92
+ CREATE TABLE "tags" (
93
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
94
+ "owner_id" uuid NOT NULL,
95
+ "name" text NOT NULL,
96
+ "color" text,
97
+ "created_at" timestamp DEFAULT now() NOT NULL
98
+ );
99
+ --> statement-breakpoint
100
+ CREATE TABLE "users" (
101
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
102
+ "email" text NOT NULL,
103
+ "name" text,
104
+ "email_verified" boolean DEFAULT false,
105
+ "image" text,
106
+ "created_at" timestamp DEFAULT now() NOT NULL,
107
+ "updated_at" timestamp DEFAULT now() NOT NULL,
108
+ CONSTRAINT "users_email_unique" UNIQUE("email")
109
+ );
110
+ --> statement-breakpoint
111
+ CREATE TABLE "verifications" (
112
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
113
+ "identifier" text NOT NULL,
114
+ "value" text NOT NULL,
115
+ "expires_at" timestamp NOT NULL,
116
+ "created_at" timestamp DEFAULT now() NOT NULL,
117
+ "updated_at" timestamp DEFAULT now() NOT NULL
118
+ );
119
+ --> statement-breakpoint
120
+ CREATE TABLE "versions" (
121
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
122
+ "document_id" uuid NOT NULL,
123
+ "content" text NOT NULL,
124
+ "content_tipex" jsonb,
125
+ "created_by" uuid NOT NULL,
126
+ "created_at" timestamp DEFAULT now() NOT NULL
127
+ );
128
+ --> statement-breakpoint
129
+ ALTER TABLE "accounts" ADD CONSTRAINT "accounts_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
130
+ ALTER TABLE "attachments" ADD CONSTRAINT "attachments_document_id_documents_id_fk" FOREIGN KEY ("document_id") REFERENCES "public"."documents"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
131
+ ALTER TABLE "document_embeddings" ADD CONSTRAINT "document_embeddings_document_id_documents_id_fk" FOREIGN KEY ("document_id") REFERENCES "public"."documents"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
132
+ ALTER TABLE "document_tags" ADD CONSTRAINT "document_tags_document_id_documents_id_fk" FOREIGN KEY ("document_id") REFERENCES "public"."documents"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
133
+ ALTER TABLE "document_tags" ADD CONSTRAINT "document_tags_tag_id_tags_id_fk" FOREIGN KEY ("tag_id") REFERENCES "public"."tags"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
134
+ ALTER TABLE "documents" ADD CONSTRAINT "documents_owner_id_users_id_fk" FOREIGN KEY ("owner_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
135
+ ALTER TABLE "documents" ADD CONSTRAINT "documents_folder_id_folders_id_fk" FOREIGN KEY ("folder_id") REFERENCES "public"."folders"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
136
+ ALTER TABLE "folders" ADD CONSTRAINT "folders_owner_id_users_id_fk" FOREIGN KEY ("owner_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
137
+ ALTER TABLE "guest_access" ADD CONSTRAINT "guest_access_share_link_id_share_links_id_fk" FOREIGN KEY ("share_link_id") REFERENCES "public"."share_links"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
138
+ ALTER TABLE "sessions" ADD CONSTRAINT "sessions_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
139
+ ALTER TABLE "share_links" ADD CONSTRAINT "share_links_document_id_documents_id_fk" FOREIGN KEY ("document_id") REFERENCES "public"."documents"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
140
+ ALTER TABLE "share_links" ADD CONSTRAINT "share_links_folder_id_folders_id_fk" FOREIGN KEY ("folder_id") REFERENCES "public"."folders"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
141
+ ALTER TABLE "share_links" ADD CONSTRAINT "share_links_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
142
+ ALTER TABLE "tags" ADD CONSTRAINT "tags_owner_id_users_id_fk" FOREIGN KEY ("owner_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
143
+ ALTER TABLE "versions" ADD CONSTRAINT "versions_document_id_documents_id_fk" FOREIGN KEY ("document_id") REFERENCES "public"."documents"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
144
+ ALTER TABLE "versions" ADD CONSTRAINT "versions_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
145
+ CREATE INDEX "accounts_user_id_idx" ON "accounts" USING btree ("user_id");--> statement-breakpoint
146
+ CREATE UNIQUE INDEX "accounts_provider_account_idx" ON "accounts" USING btree ("provider_id","account_id");--> statement-breakpoint
147
+ CREATE INDEX "attachments_document_id_idx" ON "attachments" USING btree ("document_id");--> statement-breakpoint
148
+ CREATE INDEX "document_embeddings_doc_id_idx" ON "document_embeddings" USING btree ("document_id");--> statement-breakpoint
149
+ CREATE UNIQUE INDEX "document_embeddings_doc_chunk_idx" ON "document_embeddings" USING btree ("document_id","chunk_index");--> statement-breakpoint
150
+ CREATE UNIQUE INDEX "document_tags_unique_idx" ON "document_tags" USING btree ("document_id","tag_id");--> statement-breakpoint
151
+ CREATE INDEX "documents_owner_id_idx" ON "documents" USING btree ("owner_id");--> statement-breakpoint
152
+ CREATE INDEX "documents_folder_id_idx" ON "documents" USING btree ("folder_id");--> statement-breakpoint
153
+ CREATE INDEX "documents_created_at_idx" ON "documents" USING btree ("created_at");--> statement-breakpoint
154
+ CREATE INDEX "folders_owner_id_idx" ON "folders" USING btree ("owner_id");--> statement-breakpoint
155
+ CREATE INDEX "folders_parent_id_idx" ON "folders" USING btree ("parent_id");--> statement-breakpoint
156
+ CREATE INDEX "guest_access_share_link_idx" ON "guest_access" USING btree ("share_link_id");--> statement-breakpoint
157
+ CREATE INDEX "sessions_user_id_idx" ON "sessions" USING btree ("user_id");--> statement-breakpoint
158
+ CREATE INDEX "share_links_token_idx" ON "share_links" USING btree ("token");--> statement-breakpoint
159
+ CREATE INDEX "share_links_document_id_idx" ON "share_links" USING btree ("document_id");--> statement-breakpoint
160
+ CREATE INDEX "share_links_folder_id_idx" ON "share_links" USING btree ("folder_id");--> statement-breakpoint
161
+ CREATE INDEX "tags_owner_id_idx" ON "tags" USING btree ("owner_id");--> statement-breakpoint
162
+ CREATE UNIQUE INDEX "tags_owner_name_idx" ON "tags" USING btree ("owner_id","name");--> statement-breakpoint
163
+ CREATE INDEX "verifications_identifier_idx" ON "verifications" USING btree ("identifier");--> statement-breakpoint
164
+ CREATE INDEX "versions_document_id_idx" ON "versions" USING btree ("document_id");--> statement-breakpoint
165
+ CREATE INDEX "versions_created_at_idx" ON "versions" USING btree ("created_at");
@@ -0,0 +1,5 @@
1
+ ALTER TABLE "documents" ADD COLUMN "search_vector" "tsvector" GENERATED ALWAYS AS (to_tsvector('english', COALESCE(title, '') || ' ' || COALESCE(content, ''))) STORED;--> statement-breakpoint
2
+ ALTER TABLE "folders" ADD CONSTRAINT "folders_parent_id_folders_id_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."folders"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
3
+ CREATE INDEX "idx_document_embeddings_hnsw" ON "document_embeddings" USING hnsw ("embedding" vector_cosine_ops);--> statement-breakpoint
4
+ CREATE INDEX "idx_documents_search_vector" ON "documents" USING gin ("search_vector");--> statement-breakpoint
5
+ CREATE INDEX "idx_documents_title_trgm" ON "documents" USING gin ("title" gin_trgm_ops);
@@ -0,0 +1,2 @@
1
+ ALTER TABLE "documents" RENAME COLUMN "content_tipex" TO "content_json";--> statement-breakpoint
2
+ ALTER TABLE "versions" RENAME COLUMN "content_tipex" TO "content_json";