@intelligo-dev/core 1.0.0-beta.1 → 1.0.0-beta.13
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/NOTICE +6 -0
- package/README.md +102 -0
- package/dist/attachments/errors.d.ts +7 -0
- package/dist/attachments/errors.d.ts.map +1 -0
- package/dist/attachments/errors.js +11 -0
- package/dist/attachments/errors.js.map +1 -0
- package/dist/attachments/index.d.ts +8 -0
- package/dist/attachments/index.d.ts.map +1 -0
- package/dist/attachments/index.js +7 -0
- package/dist/attachments/index.js.map +1 -0
- package/dist/attachments/service.d.ts +45 -0
- package/dist/attachments/service.d.ts.map +1 -0
- package/dist/attachments/service.js +100 -0
- package/dist/attachments/service.js.map +1 -0
- package/dist/attachments/types.d.ts +6 -0
- package/dist/attachments/types.d.ts.map +1 -0
- package/dist/attachments/types.js +2 -0
- package/dist/attachments/types.js.map +1 -0
- package/dist/conversations/errors.d.ts +2 -8
- package/dist/conversations/errors.d.ts.map +1 -1
- package/dist/conversations/errors.js +2 -8
- package/dist/conversations/errors.js.map +1 -1
- package/dist/conversations/index.d.ts +4 -12
- package/dist/conversations/index.d.ts.map +1 -1
- package/dist/conversations/index.js +2 -11
- package/dist/conversations/index.js.map +1 -1
- package/dist/conversations/service.d.ts +49 -61
- package/dist/conversations/service.d.ts.map +1 -1
- package/dist/conversations/service.js +110 -83
- package/dist/conversations/service.js.map +1 -1
- package/dist/conversations/types.d.ts +1 -4
- package/dist/conversations/types.d.ts.map +1 -1
- package/dist/conversations/types.js +0 -3
- package/dist/conversations/types.js.map +1 -1
- package/dist/db/client.d.ts +21 -10
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +43 -18
- package/dist/db/client.js.map +1 -1
- package/dist/db/index.d.ts +3 -3
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +3 -7
- package/dist/db/index.js.map +1 -1
- package/dist/db/schema/agents.d.ts +14 -51
- package/dist/db/schema/agents.d.ts.map +1 -1
- package/dist/db/schema/agents.js +9 -21
- package/dist/db/schema/agents.js.map +1 -1
- package/dist/db/schema/ai.d.ts +86 -1556
- package/dist/db/schema/ai.d.ts.map +1 -1
- package/dist/db/schema/ai.js +32 -236
- package/dist/db/schema/ai.js.map +1 -1
- package/dist/db/schema/auth.d.ts +5 -34
- package/dist/db/schema/auth.d.ts.map +1 -1
- package/dist/db/schema/auth.js +25 -56
- package/dist/db/schema/auth.js.map +1 -1
- package/dist/db/schema/billing.d.ts +136 -107
- package/dist/db/schema/billing.d.ts.map +1 -1
- package/dist/db/schema/billing.js +72 -60
- package/dist/db/schema/billing.js.map +1 -1
- package/dist/db/schema/feature-flags.d.ts +3 -12
- package/dist/db/schema/feature-flags.d.ts.map +1 -1
- package/dist/db/schema/feature-flags.js +3 -12
- package/dist/db/schema/feature-flags.js.map +1 -1
- package/dist/db/schema/identity.d.ts +12 -274
- package/dist/db/schema/identity.d.ts.map +1 -1
- package/dist/db/schema/identity.js +19 -104
- package/dist/db/schema/identity.js.map +1 -1
- package/dist/db/schema/index.d.ts +8 -15
- package/dist/db/schema/index.d.ts.map +1 -1
- package/dist/db/schema/index.js +12 -42
- package/dist/db/schema/index.js.map +1 -1
- package/dist/db/schema/notifications.d.ts +3 -17
- package/dist/db/schema/notifications.d.ts.map +1 -1
- package/dist/db/schema/notifications.js +3 -17
- package/dist/db/schema/notifications.js.map +1 -1
- package/dist/db/schema/usage.d.ts +94 -77
- package/dist/db/schema/usage.d.ts.map +1 -1
- package/dist/db/schema/usage.js +59 -89
- package/dist/db/schema/usage.js.map +1 -1
- package/dist/db/validate.d.ts +2 -11
- package/dist/db/validate.d.ts.map +1 -1
- package/dist/db/validate.js +6 -17
- package/dist/db/validate.js.map +1 -1
- package/dist/db/workspace-queries.d.ts +5 -29
- package/dist/db/workspace-queries.d.ts.map +1 -1
- package/dist/db/workspace-queries.js +5 -29
- package/dist/db/workspace-queries.js.map +1 -1
- package/dist/documents/classifier.d.ts +5 -12
- package/dist/documents/classifier.d.ts.map +1 -1
- package/dist/documents/classifier.js +16 -16
- package/dist/documents/classifier.js.map +1 -1
- package/dist/documents/errors.d.ts +2 -10
- package/dist/documents/errors.d.ts.map +1 -1
- package/dist/documents/errors.js +2 -10
- package/dist/documents/errors.js.map +1 -1
- package/dist/documents/index.d.ts +4 -13
- package/dist/documents/index.d.ts.map +1 -1
- package/dist/documents/index.js +3 -12
- package/dist/documents/index.js.map +1 -1
- package/dist/documents/service.d.ts +19 -26
- package/dist/documents/service.d.ts.map +1 -1
- package/dist/documents/service.js +44 -38
- package/dist/documents/service.js.map +1 -1
- package/dist/documents/types.d.ts +6 -10
- package/dist/documents/types.d.ts.map +1 -1
- package/dist/documents/types.js +0 -3
- package/dist/documents/types.js.map +1 -1
- package/dist/email/brand.d.ts +17 -0
- package/dist/email/brand.d.ts.map +1 -0
- package/dist/email/brand.js +9 -0
- package/dist/email/brand.js.map +1 -0
- package/dist/email/index.d.ts +4 -4
- package/dist/email/index.js +4 -4
- package/dist/email/provider.d.ts +1 -7
- package/dist/email/provider.d.ts.map +1 -1
- package/dist/email/provider.js +10 -19
- package/dist/email/provider.js.map +1 -1
- package/dist/email/send.d.ts +12 -12
- package/dist/email/send.d.ts.map +1 -1
- package/dist/email/send.js +5 -19
- package/dist/email/send.js.map +1 -1
- package/dist/email/senders.d.ts +17 -30
- package/dist/email/senders.d.ts.map +1 -1
- package/dist/email/senders.js +33 -47
- package/dist/email/senders.js.map +1 -1
- package/dist/email/templates/base-layout.d.ts +1 -1
- package/dist/email/templates/base-layout.d.ts.map +1 -1
- package/dist/email/templates/base-layout.js +4 -6
- package/dist/email/templates/base-layout.js.map +1 -1
- package/dist/email/templates/index.d.ts +10 -10
- package/dist/email/templates/index.d.ts.map +1 -1
- package/dist/email/templates/index.js +10 -16
- package/dist/email/templates/index.js.map +1 -1
- package/dist/email/templates/password-reset.d.ts +2 -2
- package/dist/email/templates/password-reset.d.ts.map +1 -1
- package/dist/email/templates/password-reset.js +10 -22
- package/dist/email/templates/password-reset.js.map +1 -1
- package/dist/email/templates/payment-failed.d.ts +2 -2
- package/dist/email/templates/payment-failed.d.ts.map +1 -1
- package/dist/email/templates/payment-failed.js +11 -24
- package/dist/email/templates/payment-failed.js.map +1 -1
- package/dist/email/templates/quota-warning.d.ts +4 -4
- package/dist/email/templates/quota-warning.d.ts.map +1 -1
- package/dist/email/templates/quota-warning.js +19 -39
- package/dist/email/templates/quota-warning.js.map +1 -1
- package/dist/email/templates/subscription-confirmed.d.ts +2 -2
- package/dist/email/templates/subscription-confirmed.d.ts.map +1 -1
- package/dist/email/templates/subscription-confirmed.js +13 -28
- package/dist/email/templates/subscription-confirmed.js.map +1 -1
- package/dist/email/templates/trial-expiry.d.ts +2 -2
- package/dist/email/templates/trial-expiry.d.ts.map +1 -1
- package/dist/email/templates/trial-expiry.js +12 -36
- package/dist/email/templates/trial-expiry.js.map +1 -1
- package/dist/email/templates/trial-warning.d.ts +2 -2
- package/dist/email/templates/trial-warning.d.ts.map +1 -1
- package/dist/email/templates/trial-warning.js +15 -32
- package/dist/email/templates/trial-warning.js.map +1 -1
- package/dist/email/templates/verify-email.d.ts +2 -2
- package/dist/email/templates/verify-email.d.ts.map +1 -1
- package/dist/email/templates/verify-email.js +10 -22
- package/dist/email/templates/verify-email.js.map +1 -1
- package/dist/email/templates/welcome.d.ts +2 -2
- package/dist/email/templates/welcome.d.ts.map +1 -1
- package/dist/email/templates/welcome.js +13 -20
- package/dist/email/templates/welcome.js.map +1 -1
- package/dist/email/templates/workspace-invitation.d.ts +2 -2
- package/dist/email/templates/workspace-invitation.d.ts.map +1 -1
- package/dist/email/templates/workspace-invitation.js +12 -26
- package/dist/email/templates/workspace-invitation.js.map +1 -1
- package/dist/env.d.ts +5 -10
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +41 -31
- package/dist/env.js.map +1 -1
- package/dist/identity/audit.d.ts +11 -24
- package/dist/identity/audit.d.ts.map +1 -1
- package/dist/identity/audit.js +13 -27
- package/dist/identity/audit.js.map +1 -1
- package/dist/identity/errors.d.ts +4 -12
- package/dist/identity/errors.d.ts.map +1 -1
- package/dist/identity/errors.js +2 -8
- package/dist/identity/errors.js.map +1 -1
- package/dist/identity/index.d.ts +5 -13
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +4 -12
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/service.d.ts +13 -47
- package/dist/identity/service.d.ts.map +1 -1
- package/dist/identity/service.js +31 -78
- package/dist/identity/service.js.map +1 -1
- package/dist/identity/types.d.ts +1 -4
- package/dist/identity/types.d.ts.map +1 -1
- package/dist/identity/types.js +0 -3
- package/dist/identity/types.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -10
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +7 -18
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +45 -49
- package/dist/logger.js.map +1 -1
- package/dist/money.d.ts +95 -0
- package/dist/money.d.ts.map +1 -0
- package/dist/money.js +208 -0
- package/dist/money.js.map +1 -0
- package/dist/notifications/index.d.ts +9 -43
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +9 -49
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/triggers.d.ts +9 -32
- package/dist/notifications/triggers.d.ts.map +1 -1
- package/dist/notifications/triggers.js +21 -58
- package/dist/notifications/triggers.js.map +1 -1
- package/dist/notifications/types.d.ts +1 -10
- package/dist/notifications/types.d.ts.map +1 -1
- package/dist/notifications/types.js +0 -9
- package/dist/notifications/types.js.map +1 -1
- package/dist/prompt.d.ts +38 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +118 -0
- package/dist/prompt.js.map +1 -0
- package/dist/registry.d.ts +32 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +60 -0
- package/dist/registry.js.map +1 -0
- package/dist/request-context.d.ts +49 -0
- package/dist/request-context.d.ts.map +1 -0
- package/dist/request-context.js +100 -0
- package/dist/request-context.js.map +1 -0
- package/dist/storage/index.d.ts +65 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +109 -0
- package/dist/storage/index.js.map +1 -0
- package/package.json +74 -24
- package/src/attachments/errors.ts +18 -0
- package/src/attachments/index.ts +22 -0
- package/src/attachments/service.ts +178 -0
- package/src/attachments/types.ts +6 -0
- package/src/conversations/errors.ts +45 -0
- package/src/conversations/index.ts +39 -0
- package/src/conversations/service.ts +594 -0
- package/src/conversations/types.ts +15 -0
- package/src/db/client.ts +91 -0
- package/src/db/index.ts +3 -0
- package/src/db/migrations/0000_baseline.sql +652 -0
- package/src/db/migrations/0001_reconcile_chain_built_databases.sql +53 -0
- package/src/db/migrations/0002_webhook_claim_lease.sql +1 -0
- package/src/db/migrations/README.md +74 -36
- package/src/db/migrations/legacy-chain.json +197 -0
- package/src/db/migrations/meta/0000_snapshot.json +4182 -157
- package/src/db/migrations/meta/0002_snapshot.json +2478 -368
- package/src/db/migrations/meta/_journal.json +6 -279
- package/src/db/schema/agents.ts +57 -0
- package/src/db/schema/ai.ts +174 -0
- package/src/db/schema/auth.ts +183 -0
- package/src/db/schema/billing.ts +209 -0
- package/src/db/schema/feature-flags.ts +20 -0
- package/src/db/schema/identity.ts +250 -0
- package/src/db/schema/index.ts +12 -0
- package/src/db/schema/notifications.ts +31 -0
- package/src/db/schema/usage.ts +269 -0
- package/src/db/validate.ts +63 -0
- package/src/db/workspace-queries.ts +64 -0
- package/src/documents/classifier.ts +61 -0
- package/src/documents/errors.ts +44 -0
- package/src/documents/index.ts +24 -0
- package/src/documents/service.ts +256 -0
- package/src/documents/types.ts +24 -0
- package/src/email/brand.ts +24 -0
- package/src/email/index.ts +19 -0
- package/src/email/provider.ts +278 -0
- package/src/email/send.ts +169 -0
- package/src/email/senders.ts +292 -0
- package/src/email/templates/base-layout.tsx +145 -0
- package/src/email/templates/index.ts +28 -0
- package/src/email/templates/password-reset.tsx +72 -0
- package/src/email/templates/payment-failed.tsx +77 -0
- package/src/email/templates/quota-warning.tsx +118 -0
- package/src/email/templates/subscription-confirmed.tsx +91 -0
- package/src/email/templates/trial-expiry.tsx +124 -0
- package/src/email/templates/trial-warning.tsx +104 -0
- package/src/email/templates/verify-email.tsx +72 -0
- package/src/email/templates/welcome.tsx +64 -0
- package/src/email/templates/workspace-invitation.tsx +105 -0
- package/src/env.ts +180 -0
- package/src/identity/audit.ts +65 -0
- package/src/identity/errors.ts +44 -0
- package/src/identity/index.ts +26 -0
- package/src/identity/service.ts +202 -0
- package/src/identity/types.ts +28 -0
- package/src/index.ts +4 -0
- package/src/logger.ts +198 -0
- package/src/money.ts +270 -0
- package/src/notifications/index.ts +108 -0
- package/src/notifications/triggers.ts +158 -0
- package/src/notifications/types.ts +18 -0
- package/src/prompt.ts +142 -0
- package/src/registry.ts +75 -0
- package/src/request-context.ts +137 -0
- package/src/storage/index.ts +153 -0
- package/dist/db/schema/rag.d.ts +0 -171
- package/dist/db/schema/rag.d.ts.map +0 -1
- package/dist/db/schema/rag.js +0 -42
- package/dist/db/schema/rag.js.map +0 -1
- package/src/db/migrations/0000_sharp_night_nurse.sql +0 -52
- package/src/db/migrations/0001_hesitant_vapor.sql +0 -40
- package/src/db/migrations/0002_numerous_lady_vermin.sql +0 -235
- package/src/db/migrations/0003_mighty_jean_grey.sql +0 -37
- package/src/db/migrations/0004_cynical_grandmaster.sql +0 -2
- package/src/db/migrations/0005_careful_switch.sql +0 -8
- package/src/db/migrations/0006_tense_blue_marvel.sql +0 -16
- package/src/db/migrations/0007_next_squadron_sinister.sql +0 -1
- package/src/db/migrations/0008_powerful_scream.sql +0 -39
- package/src/db/migrations/0009_sad_ink.sql +0 -1
- package/src/db/migrations/0010_shocking_omega_flight.sql +0 -2
- package/src/db/migrations/0011_ambiguous_otto_octavius.sql +0 -151
- package/src/db/migrations/0011_hnsw_vector_index.sql +0 -17
- package/src/db/migrations/0012_user_profiles.sql +0 -30
- package/src/db/migrations/0013_trending_seasonal_columns.sql +0 -9
- package/src/db/migrations/0014_add_product_type_to_agents.sql +0 -6
- package/src/db/migrations/0015_new_v1_tables.sql +0 -149
- package/src/db/migrations/0016_document_types.sql +0 -30
- package/src/db/migrations/0017_document_metadata.sql +0 -2
- package/src/db/migrations/0018_identity_graph.sql +0 -200
- package/src/db/migrations/0019_db_driven_prompts.sql +0 -20
- package/src/db/migrations/0020_pending_extractions.sql +0 -35
- package/src/db/migrations/0021_rag_documents.sql +0 -39
- package/src/db/migrations/0022_user_quotas_usage_jsonb.sql +0 -70
- package/src/db/migrations/0023_user_facts_user_scoped_unique.sql +0 -17
- package/src/db/migrations/0024_user_memories_hnsw.sql +0 -23
- package/src/db/migrations/0025_audit_trigger_errcode.sql +0 -21
- package/src/db/migrations/0026_user_profile_snapshots_composite_pk.sql +0 -17
- package/src/db/migrations/0027_billing_settings_mnt_columns.sql +0 -54
- package/src/db/migrations/0028_trial_credits_normalized_email.sql +0 -37
- package/src/db/migrations/0029_usage_records_conversation_idx.sql +0 -13
- package/src/db/migrations/0030_pending_extractions_composite_idx.sql +0 -11
- package/src/db/migrations/0031_rag_documents_hnsw.sql +0 -16
- package/src/db/migrations/0032_rate_limit_unique_idx.sql +0 -16
- package/src/db/migrations/0033_pending_extractions_partial_idx.sql +0 -18
- package/src/db/migrations/0034_rate_limit_count.sql +0 -9
- package/src/db/migrations/0035_credit_reservations.sql +0 -24
- package/src/db/migrations/0036_executions_audit_jobs.sql +0 -96
- package/src/db/migrations/0037_rate_limit_minute_bucket.sql +0 -46
- package/src/db/migrations/0038_user_quotas_generic_usage.sql +0 -25
- package/src/db/migrations/0039_platform_admin_impersonation.sql +0 -27
- package/src/db/migrations/0040_ee_audit_chain.sql +0 -23
- package/src/db/migrations/meta/0001_snapshot.json +0 -631
- package/src/db/migrations/meta/0003_snapshot.json +0 -2488
- package/src/db/migrations/meta/0004_snapshot.json +0 -2500
- package/src/db/migrations/meta/0005_snapshot.json +0 -2548
- package/src/db/migrations/meta/0006_snapshot.json +0 -2650
- package/src/db/migrations/meta/0007_snapshot.json +0 -2657
- package/src/db/migrations/meta/0008_snapshot.json +0 -2719
- package/src/db/migrations/meta/0009_snapshot.json +0 -2726
- package/src/db/migrations/meta/0010_snapshot.json +0 -2739
- package/src/db/migrations/meta/0011_snapshot.json +0 -3886
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
-- Step 1: Add workspace_id columns as NULLABLE first to allow backfill
|
|
2
|
-
ALTER TABLE "documents" ADD COLUMN "workspace_id" text;--> statement-breakpoint
|
|
3
|
-
ALTER TABLE "suggestions" ADD COLUMN "workspace_id" text;--> statement-breakpoint
|
|
4
|
-
|
|
5
|
-
-- Step 2: Backfill workspace_id for documents using the member table
|
|
6
|
-
-- Each document's user_id maps to an organization via the member table
|
|
7
|
-
-- We pick the user's first organization (LIMIT 1) in case of multiple memberships
|
|
8
|
-
UPDATE "documents" d
|
|
9
|
-
SET workspace_id = (
|
|
10
|
-
SELECT m.organization_id
|
|
11
|
-
FROM "member" m
|
|
12
|
-
WHERE m.user_id = d.user_id
|
|
13
|
-
ORDER BY m.created_at ASC
|
|
14
|
-
LIMIT 1
|
|
15
|
-
)
|
|
16
|
-
WHERE d.workspace_id IS NULL;--> statement-breakpoint
|
|
17
|
-
|
|
18
|
-
-- Step 3: Backfill workspace_id for suggestions using the member table
|
|
19
|
-
UPDATE "suggestions" s
|
|
20
|
-
SET workspace_id = (
|
|
21
|
-
SELECT m.organization_id
|
|
22
|
-
FROM "member" m
|
|
23
|
-
WHERE m.user_id = s.user_id
|
|
24
|
-
ORDER BY m.created_at ASC
|
|
25
|
-
LIMIT 1
|
|
26
|
-
)
|
|
27
|
-
WHERE s.workspace_id IS NULL;--> statement-breakpoint
|
|
28
|
-
|
|
29
|
-
-- Step 4: Set NOT NULL constraint (after backfill ensures no nulls remain)
|
|
30
|
-
ALTER TABLE "documents" ALTER COLUMN "workspace_id" SET NOT NULL;--> statement-breakpoint
|
|
31
|
-
ALTER TABLE "suggestions" ALTER COLUMN "workspace_id" SET NOT NULL;--> statement-breakpoint
|
|
32
|
-
|
|
33
|
-
-- Step 5: Add FK constraints
|
|
34
|
-
ALTER TABLE "documents" ADD CONSTRAINT "documents_workspace_id_organization_id_fk" FOREIGN KEY ("workspace_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
35
|
-
ALTER TABLE "suggestions" ADD CONSTRAINT "suggestions_workspace_id_organization_id_fk" FOREIGN KEY ("workspace_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
36
|
-
|
|
37
|
-
-- Step 6: Create indexes for performance
|
|
38
|
-
CREATE INDEX "documents_workspace_id_idx" ON "documents" USING btree ("workspace_id");--> statement-breakpoint
|
|
39
|
-
CREATE INDEX "suggestions_workspace_id_idx" ON "suggestions" USING btree ("workspace_id");
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ALTER TABLE "usage_records" ADD COLUMN "cost" real DEFAULT 0 NOT NULL;
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
CREATE TABLE "competition_entries" (
|
|
2
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
3
|
-
"competition_id" text NOT NULL,
|
|
4
|
-
"workspace_id" text NOT NULL,
|
|
5
|
-
"school_name" text NOT NULL,
|
|
6
|
-
"class_name" text NOT NULL,
|
|
7
|
-
"assessment_count" integer DEFAULT 0 NOT NULL,
|
|
8
|
-
"total_score" integer DEFAULT 0 NOT NULL,
|
|
9
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
10
|
-
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
11
|
-
);
|
|
12
|
-
--> statement-breakpoint
|
|
13
|
-
CREATE TABLE "competitions" (
|
|
14
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
15
|
-
"name" jsonb NOT NULL,
|
|
16
|
-
"description" jsonb NOT NULL,
|
|
17
|
-
"start_date" timestamp NOT NULL,
|
|
18
|
-
"end_date" timestamp NOT NULL,
|
|
19
|
-
"is_active" boolean DEFAULT false NOT NULL,
|
|
20
|
-
"prize_description" jsonb,
|
|
21
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
22
|
-
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
23
|
-
);
|
|
24
|
-
--> statement-breakpoint
|
|
25
|
-
CREATE TABLE "image_generations" (
|
|
26
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
27
|
-
"user_id" text NOT NULL,
|
|
28
|
-
"workspace_id" text NOT NULL,
|
|
29
|
-
"tool_id" text NOT NULL,
|
|
30
|
-
"prompt" text NOT NULL,
|
|
31
|
-
"result_url" text,
|
|
32
|
-
"model" text DEFAULT 'gpt-image-1' NOT NULL,
|
|
33
|
-
"status" text DEFAULT 'pending' NOT NULL,
|
|
34
|
-
"error_message" text,
|
|
35
|
-
"created_at" timestamp DEFAULT now() NOT NULL
|
|
36
|
-
);
|
|
37
|
-
--> statement-breakpoint
|
|
38
|
-
CREATE TABLE "image_tools" (
|
|
39
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
40
|
-
"name" jsonb NOT NULL,
|
|
41
|
-
"description" jsonb NOT NULL,
|
|
42
|
-
"category" text NOT NULL,
|
|
43
|
-
"prompt_template" text NOT NULL,
|
|
44
|
-
"model" text DEFAULT 'gpt-image-1' NOT NULL,
|
|
45
|
-
"preview_image_url" text,
|
|
46
|
-
"is_active" boolean DEFAULT true NOT NULL,
|
|
47
|
-
"sort_order" integer DEFAULT 0 NOT NULL,
|
|
48
|
-
"is_trending" boolean DEFAULT false NOT NULL,
|
|
49
|
-
"is_seasonal" boolean DEFAULT false NOT NULL,
|
|
50
|
-
"active_months" integer[],
|
|
51
|
-
"season" text,
|
|
52
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
53
|
-
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
54
|
-
);
|
|
55
|
-
--> statement-breakpoint
|
|
56
|
-
CREATE TABLE "knowledge_articles" (
|
|
57
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
58
|
-
"slug" text NOT NULL,
|
|
59
|
-
"category" text NOT NULL,
|
|
60
|
-
"title" jsonb NOT NULL,
|
|
61
|
-
"description" jsonb NOT NULL,
|
|
62
|
-
"content" jsonb NOT NULL,
|
|
63
|
-
"tags" text[],
|
|
64
|
-
"reading_time_minutes" integer DEFAULT 5 NOT NULL,
|
|
65
|
-
"sort_order" integer DEFAULT 0 NOT NULL,
|
|
66
|
-
"is_published" boolean DEFAULT false NOT NULL,
|
|
67
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
68
|
-
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
69
|
-
);
|
|
70
|
-
--> statement-breakpoint
|
|
71
|
-
CREATE TABLE "referral_codes" (
|
|
72
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
73
|
-
"user_id" text NOT NULL,
|
|
74
|
-
"code" text NOT NULL,
|
|
75
|
-
"created_at" timestamp DEFAULT now() NOT NULL
|
|
76
|
-
);
|
|
77
|
-
--> statement-breakpoint
|
|
78
|
-
CREATE TABLE "referrals" (
|
|
79
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
80
|
-
"referrer_id" text NOT NULL,
|
|
81
|
-
"referred_user_id" text NOT NULL,
|
|
82
|
-
"referral_code_id" text NOT NULL,
|
|
83
|
-
"status" text DEFAULT 'pending' NOT NULL,
|
|
84
|
-
"completed_at" timestamp,
|
|
85
|
-
"created_at" timestamp DEFAULT now() NOT NULL
|
|
86
|
-
);
|
|
87
|
-
--> statement-breakpoint
|
|
88
|
-
CREATE TABLE "shared_reports" (
|
|
89
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
90
|
-
"user_id" text NOT NULL,
|
|
91
|
-
"workspace_id" text NOT NULL,
|
|
92
|
-
"report_type" text DEFAULT 'career' NOT NULL,
|
|
93
|
-
"report_data" jsonb NOT NULL,
|
|
94
|
-
"parent_report_id" text,
|
|
95
|
-
"conversation_id" text,
|
|
96
|
-
"is_public" boolean DEFAULT true NOT NULL,
|
|
97
|
-
"view_count" integer DEFAULT 0 NOT NULL,
|
|
98
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
99
|
-
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
100
|
-
);
|
|
101
|
-
--> statement-breakpoint
|
|
102
|
-
CREATE TABLE "user_profiles" (
|
|
103
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
104
|
-
"user_id" text NOT NULL,
|
|
105
|
-
"workspace_id" text NOT NULL,
|
|
106
|
-
"product" text DEFAULT 'career' NOT NULL,
|
|
107
|
-
"interests" text,
|
|
108
|
-
"skills" text,
|
|
109
|
-
"education" text,
|
|
110
|
-
"goals" text,
|
|
111
|
-
"constraints" text,
|
|
112
|
-
"completed_phases" text,
|
|
113
|
-
"last_assessment_at" timestamp,
|
|
114
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
115
|
-
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
116
|
-
);
|
|
117
|
-
--> statement-breakpoint
|
|
118
|
-
ALTER TABLE "agents" ADD COLUMN "product_type" text DEFAULT 'chat' NOT NULL;--> statement-breakpoint
|
|
119
|
-
ALTER TABLE "competition_entries" ADD CONSTRAINT "competition_entries_competition_id_competitions_id_fk" FOREIGN KEY ("competition_id") REFERENCES "public"."competitions"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
120
|
-
ALTER TABLE "competition_entries" ADD CONSTRAINT "competition_entries_workspace_id_organization_id_fk" FOREIGN KEY ("workspace_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
121
|
-
ALTER TABLE "image_generations" ADD CONSTRAINT "image_generations_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
122
|
-
ALTER TABLE "image_generations" ADD CONSTRAINT "image_generations_workspace_id_organization_id_fk" FOREIGN KEY ("workspace_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
123
|
-
ALTER TABLE "image_generations" ADD CONSTRAINT "image_generations_tool_id_image_tools_id_fk" FOREIGN KEY ("tool_id") REFERENCES "public"."image_tools"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
124
|
-
ALTER TABLE "referral_codes" ADD CONSTRAINT "referral_codes_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
125
|
-
ALTER TABLE "referrals" ADD CONSTRAINT "referrals_referrer_id_users_id_fk" FOREIGN KEY ("referrer_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
126
|
-
ALTER TABLE "referrals" ADD CONSTRAINT "referrals_referred_user_id_users_id_fk" FOREIGN KEY ("referred_user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
127
|
-
ALTER TABLE "referrals" ADD CONSTRAINT "referrals_referral_code_id_referral_codes_id_fk" FOREIGN KEY ("referral_code_id") REFERENCES "public"."referral_codes"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
128
|
-
ALTER TABLE "shared_reports" ADD CONSTRAINT "shared_reports_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
129
|
-
ALTER TABLE "shared_reports" ADD CONSTRAINT "shared_reports_workspace_id_organization_id_fk" FOREIGN KEY ("workspace_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
130
|
-
ALTER TABLE "user_profiles" ADD CONSTRAINT "user_profiles_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
131
|
-
ALTER TABLE "user_profiles" ADD CONSTRAINT "user_profiles_workspace_id_organization_id_fk" FOREIGN KEY ("workspace_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
132
|
-
CREATE INDEX "competition_entries_competition_id_idx" ON "competition_entries" USING btree ("competition_id");--> statement-breakpoint
|
|
133
|
-
CREATE INDEX "competition_entries_workspace_id_idx" ON "competition_entries" USING btree ("workspace_id");--> statement-breakpoint
|
|
134
|
-
CREATE UNIQUE INDEX "competition_entries_competition_workspace_idx" ON "competition_entries" USING btree ("competition_id","workspace_id");--> statement-breakpoint
|
|
135
|
-
CREATE INDEX "competitions_is_active_idx" ON "competitions" USING btree ("is_active");--> statement-breakpoint
|
|
136
|
-
CREATE INDEX "image_generations_user_id_idx" ON "image_generations" USING btree ("user_id");--> statement-breakpoint
|
|
137
|
-
CREATE INDEX "image_generations_workspace_id_idx" ON "image_generations" USING btree ("workspace_id");--> statement-breakpoint
|
|
138
|
-
CREATE INDEX "image_generations_tool_id_idx" ON "image_generations" USING btree ("tool_id");--> statement-breakpoint
|
|
139
|
-
CREATE INDEX "image_generations_created_at_idx" ON "image_generations" USING btree ("created_at");--> statement-breakpoint
|
|
140
|
-
CREATE UNIQUE INDEX "knowledge_articles_slug_idx" ON "knowledge_articles" USING btree ("slug");--> statement-breakpoint
|
|
141
|
-
CREATE INDEX "knowledge_articles_category_idx" ON "knowledge_articles" USING btree ("category");--> statement-breakpoint
|
|
142
|
-
CREATE UNIQUE INDEX "referral_codes_code_idx" ON "referral_codes" USING btree ("code");--> statement-breakpoint
|
|
143
|
-
CREATE UNIQUE INDEX "referral_codes_user_id_idx" ON "referral_codes" USING btree ("user_id");--> statement-breakpoint
|
|
144
|
-
CREATE INDEX "referrals_referrer_id_idx" ON "referrals" USING btree ("referrer_id");--> statement-breakpoint
|
|
145
|
-
CREATE INDEX "referrals_referred_user_id_idx" ON "referrals" USING btree ("referred_user_id");--> statement-breakpoint
|
|
146
|
-
CREATE UNIQUE INDEX "referrals_referred_user_id_unique_idx" ON "referrals" USING btree ("referred_user_id");--> statement-breakpoint
|
|
147
|
-
CREATE INDEX "shared_reports_user_id_idx" ON "shared_reports" USING btree ("user_id");--> statement-breakpoint
|
|
148
|
-
CREATE INDEX "shared_reports_workspace_id_idx" ON "shared_reports" USING btree ("workspace_id");--> statement-breakpoint
|
|
149
|
-
CREATE INDEX "user_profiles_user_id_idx" ON "user_profiles" USING btree ("user_id");--> statement-breakpoint
|
|
150
|
-
CREATE UNIQUE INDEX "user_profiles_workspace_user_product_idx" ON "user_profiles" USING btree ("workspace_id","user_id","product");--> statement-breakpoint
|
|
151
|
-
CREATE INDEX "votes_message_id_idx" ON "votes" USING btree ("message_id");
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
-- HNSW index for fast cosine similarity search on knowledge chunks
|
|
2
|
-
-- Required for knowledgeSearch tool to perform semantic vector search efficiently
|
|
3
|
-
-- Uses cosine distance operator (<=>) which is the default for text-embedding-3-small
|
|
4
|
-
--
|
|
5
|
-
-- Run with: psql $DATABASE_URL -f packages/core/src/db/migrations/0011_hnsw_vector_index.sql
|
|
6
|
-
-- Or via: cd packages/core && pnpm drizzle-kit push (if using Drizzle migration runner)
|
|
7
|
-
|
|
8
|
-
CREATE INDEX IF NOT EXISTS knowledge_chunks_embedding_hnsw_idx
|
|
9
|
-
ON knowledge_chunks
|
|
10
|
-
USING hnsw (embedding vector_cosine_ops)
|
|
11
|
-
WITH (m = 16, ef_construction = 64);
|
|
12
|
-
|
|
13
|
-
-- Composite index for product-scoped document lookups
|
|
14
|
-
-- Used by knowledgeSearch to filter chunks by product via knowledgeDocuments join
|
|
15
|
-
CREATE INDEX IF NOT EXISTS knowledge_documents_product_status_idx
|
|
16
|
-
ON knowledge_documents (product, status)
|
|
17
|
-
WHERE status = 'ready';
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
-- User profiles table for persistent career assessment data
|
|
2
|
-
-- Stores profile data that persists across conversations for returning user detection
|
|
3
|
-
-- and personalized experiences, scoped per user per workspace per product.
|
|
4
|
-
--
|
|
5
|
-
-- Run with: psql $DATABASE_URL -f packages/core/src/db/migrations/0012_user_profiles.sql
|
|
6
|
-
-- Or via the migration runner in the app bootstrap
|
|
7
|
-
|
|
8
|
-
CREATE TABLE IF NOT EXISTS "user_profiles" (
|
|
9
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
10
|
-
"user_id" text NOT NULL REFERENCES "users"("id") ON DELETE CASCADE,
|
|
11
|
-
"workspace_id" text NOT NULL REFERENCES "organization"("id") ON DELETE CASCADE,
|
|
12
|
-
"product" text NOT NULL DEFAULT 'career',
|
|
13
|
-
"interests" text,
|
|
14
|
-
"skills" text,
|
|
15
|
-
"education" text,
|
|
16
|
-
"goals" text,
|
|
17
|
-
"constraints" text,
|
|
18
|
-
"completed_phases" text,
|
|
19
|
-
"last_assessment_at" timestamp,
|
|
20
|
-
"created_at" timestamp NOT NULL DEFAULT now(),
|
|
21
|
-
"updated_at" timestamp NOT NULL DEFAULT now()
|
|
22
|
-
);
|
|
23
|
-
|
|
24
|
-
-- Unique composite index: one profile per user per workspace per product
|
|
25
|
-
CREATE UNIQUE INDEX IF NOT EXISTS "user_profiles_workspace_user_product_idx"
|
|
26
|
-
ON "user_profiles" ("workspace_id", "user_id", "product");
|
|
27
|
-
|
|
28
|
-
-- Index for user-based lookups (all profiles for a user)
|
|
29
|
-
CREATE INDEX IF NOT EXISTS "user_profiles_user_id_idx"
|
|
30
|
-
ON "user_profiles" ("user_id");
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
-- Add trending and seasonal columns to image_tools table
|
|
2
|
-
-- Phase 61: Schema foundation for trending engine (Phase 62) and seasonal templates (Phase 63)
|
|
3
|
-
--
|
|
4
|
-
-- Run with: psql $DATABASE_URL -f packages/core/src/db/migrations/0013_trending_seasonal_columns.sql
|
|
5
|
-
|
|
6
|
-
ALTER TABLE "image_tools" ADD COLUMN IF NOT EXISTS "is_trending" boolean NOT NULL DEFAULT false;
|
|
7
|
-
ALTER TABLE "image_tools" ADD COLUMN IF NOT EXISTS "is_seasonal" boolean NOT NULL DEFAULT false;
|
|
8
|
-
ALTER TABLE "image_tools" ADD COLUMN IF NOT EXISTS "active_months" integer[];
|
|
9
|
-
ALTER TABLE "image_tools" ADD COLUMN IF NOT EXISTS "season" text;
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
-- Add product_type column to agents table
|
|
2
|
-
-- Required by Drizzle schema: agents.productType (text, not null, default 'chat')
|
|
3
|
-
--
|
|
4
|
-
-- Run with: psql $DATABASE_URL -f packages/core/src/db/migrations/0014_add_product_type_to_agents.sql
|
|
5
|
-
|
|
6
|
-
ALTER TABLE "agents" ADD COLUMN IF NOT EXISTS "product_type" text NOT NULL DEFAULT 'chat';
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
-- NOTE (2026-08-26): every table below is also created by
|
|
2
|
-
-- 0011_ambiguous_otto_octavius.sql, which runs first and whose
|
|
3
|
-
-- shared_reports definition is the fuller one (it has conversation_id
|
|
4
|
-
-- and parent_report_id; this file's does not). Replaying the chain
|
|
5
|
-
-- against an empty database therefore failed here with
|
|
6
|
-
-- `relation "knowledge_articles" already exists`.
|
|
7
|
-
--
|
|
8
|
-
-- Guarded rather than deleted: the file is in the journal, and on any
|
|
9
|
-
-- database where it did run first its statements are the ones that
|
|
10
|
-
-- created these tables. IF NOT EXISTS makes both orders converge on
|
|
11
|
-
-- 0011's schema.
|
|
12
|
-
|
|
13
|
-
-- Migration: 0015_new_v1_tables
|
|
14
|
-
-- Description: Add 6 new tables for v1.0 features (knowledge, competition, referral, shared reports)
|
|
15
|
-
-- Phase: 72-02
|
|
16
|
-
|
|
17
|
-
CREATE TABLE IF NOT EXISTS "knowledge_articles" (
|
|
18
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
19
|
-
"slug" text NOT NULL,
|
|
20
|
-
"category" text NOT NULL,
|
|
21
|
-
"title" jsonb NOT NULL,
|
|
22
|
-
"description" jsonb NOT NULL,
|
|
23
|
-
"content" jsonb NOT NULL,
|
|
24
|
-
"tags" text[],
|
|
25
|
-
"reading_time_minutes" integer DEFAULT 5 NOT NULL,
|
|
26
|
-
"sort_order" integer DEFAULT 0 NOT NULL,
|
|
27
|
-
"is_published" boolean DEFAULT false NOT NULL,
|
|
28
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
29
|
-
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
30
|
-
);
|
|
31
|
-
--> statement-breakpoint
|
|
32
|
-
CREATE TABLE IF NOT EXISTS "competitions" (
|
|
33
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
34
|
-
"name" jsonb NOT NULL,
|
|
35
|
-
"description" jsonb NOT NULL,
|
|
36
|
-
"start_date" timestamp NOT NULL,
|
|
37
|
-
"end_date" timestamp NOT NULL,
|
|
38
|
-
"is_active" boolean DEFAULT false NOT NULL,
|
|
39
|
-
"prize_description" jsonb,
|
|
40
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
41
|
-
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
42
|
-
);
|
|
43
|
-
--> statement-breakpoint
|
|
44
|
-
CREATE TABLE IF NOT EXISTS "competition_entries" (
|
|
45
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
46
|
-
"competition_id" text NOT NULL,
|
|
47
|
-
"workspace_id" text NOT NULL,
|
|
48
|
-
"school_name" text NOT NULL,
|
|
49
|
-
"class_name" text NOT NULL,
|
|
50
|
-
"assessment_count" integer DEFAULT 0 NOT NULL,
|
|
51
|
-
"total_score" integer DEFAULT 0 NOT NULL,
|
|
52
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
53
|
-
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
54
|
-
);
|
|
55
|
-
--> statement-breakpoint
|
|
56
|
-
CREATE TABLE IF NOT EXISTS "referral_codes" (
|
|
57
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
58
|
-
"user_id" text NOT NULL,
|
|
59
|
-
"code" text NOT NULL,
|
|
60
|
-
"created_at" timestamp DEFAULT now() NOT NULL
|
|
61
|
-
);
|
|
62
|
-
--> statement-breakpoint
|
|
63
|
-
CREATE TABLE IF NOT EXISTS "referrals" (
|
|
64
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
65
|
-
"referrer_id" text NOT NULL,
|
|
66
|
-
"referred_user_id" text NOT NULL,
|
|
67
|
-
"referral_code_id" text NOT NULL,
|
|
68
|
-
"status" text DEFAULT 'pending' NOT NULL,
|
|
69
|
-
"completed_at" timestamp,
|
|
70
|
-
"created_at" timestamp DEFAULT now() NOT NULL
|
|
71
|
-
);
|
|
72
|
-
--> statement-breakpoint
|
|
73
|
-
CREATE TABLE IF NOT EXISTS "shared_reports" (
|
|
74
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
75
|
-
"user_id" text NOT NULL,
|
|
76
|
-
"workspace_id" text NOT NULL,
|
|
77
|
-
"report_type" text DEFAULT 'career' NOT NULL,
|
|
78
|
-
"report_data" jsonb NOT NULL,
|
|
79
|
-
"is_public" boolean DEFAULT true NOT NULL,
|
|
80
|
-
"view_count" integer DEFAULT 0 NOT NULL,
|
|
81
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
82
|
-
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
83
|
-
);
|
|
84
|
-
--> statement-breakpoint
|
|
85
|
-
DO $$ BEGIN
|
|
86
|
-
ALTER TABLE "competition_entries" ADD CONSTRAINT "competition_entries_competition_id_competitions_id_fk" FOREIGN KEY ("competition_id") REFERENCES "public"."competitions"("id") ON DELETE cascade ON UPDATE no action;
|
|
87
|
-
EXCEPTION WHEN duplicate_object THEN NULL;
|
|
88
|
-
END $$;
|
|
89
|
-
--> statement-breakpoint
|
|
90
|
-
DO $$ BEGIN
|
|
91
|
-
ALTER TABLE "competition_entries" ADD CONSTRAINT "competition_entries_workspace_id_organization_id_fk" FOREIGN KEY ("workspace_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;
|
|
92
|
-
EXCEPTION WHEN duplicate_object THEN NULL;
|
|
93
|
-
END $$;
|
|
94
|
-
--> statement-breakpoint
|
|
95
|
-
DO $$ BEGIN
|
|
96
|
-
ALTER TABLE "referral_codes" ADD CONSTRAINT "referral_codes_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
|
|
97
|
-
EXCEPTION WHEN duplicate_object THEN NULL;
|
|
98
|
-
END $$;
|
|
99
|
-
--> statement-breakpoint
|
|
100
|
-
DO $$ BEGIN
|
|
101
|
-
ALTER TABLE "referrals" ADD CONSTRAINT "referrals_referrer_id_users_id_fk" FOREIGN KEY ("referrer_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
|
|
102
|
-
EXCEPTION WHEN duplicate_object THEN NULL;
|
|
103
|
-
END $$;
|
|
104
|
-
--> statement-breakpoint
|
|
105
|
-
DO $$ BEGIN
|
|
106
|
-
ALTER TABLE "referrals" ADD CONSTRAINT "referrals_referred_user_id_users_id_fk" FOREIGN KEY ("referred_user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
|
|
107
|
-
EXCEPTION WHEN duplicate_object THEN NULL;
|
|
108
|
-
END $$;
|
|
109
|
-
--> statement-breakpoint
|
|
110
|
-
DO $$ BEGIN
|
|
111
|
-
ALTER TABLE "referrals" ADD CONSTRAINT "referrals_referral_code_id_referral_codes_id_fk" FOREIGN KEY ("referral_code_id") REFERENCES "public"."referral_codes"("id") ON DELETE cascade ON UPDATE no action;
|
|
112
|
-
EXCEPTION WHEN duplicate_object THEN NULL;
|
|
113
|
-
END $$;
|
|
114
|
-
--> statement-breakpoint
|
|
115
|
-
DO $$ BEGIN
|
|
116
|
-
ALTER TABLE "shared_reports" ADD CONSTRAINT "shared_reports_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
|
|
117
|
-
EXCEPTION WHEN duplicate_object THEN NULL;
|
|
118
|
-
END $$;
|
|
119
|
-
--> statement-breakpoint
|
|
120
|
-
DO $$ BEGIN
|
|
121
|
-
ALTER TABLE "shared_reports" ADD CONSTRAINT "shared_reports_workspace_id_organization_id_fk" FOREIGN KEY ("workspace_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;
|
|
122
|
-
EXCEPTION WHEN duplicate_object THEN NULL;
|
|
123
|
-
END $$;
|
|
124
|
-
--> statement-breakpoint
|
|
125
|
-
CREATE UNIQUE INDEX IF NOT EXISTS "knowledge_articles_slug_idx" ON "knowledge_articles" USING btree ("slug");
|
|
126
|
-
--> statement-breakpoint
|
|
127
|
-
CREATE INDEX IF NOT EXISTS "knowledge_articles_category_idx" ON "knowledge_articles" USING btree ("category");
|
|
128
|
-
--> statement-breakpoint
|
|
129
|
-
CREATE INDEX IF NOT EXISTS "competitions_is_active_idx" ON "competitions" USING btree ("is_active");
|
|
130
|
-
--> statement-breakpoint
|
|
131
|
-
CREATE INDEX IF NOT EXISTS "competition_entries_competition_id_idx" ON "competition_entries" USING btree ("competition_id");
|
|
132
|
-
--> statement-breakpoint
|
|
133
|
-
CREATE INDEX IF NOT EXISTS "competition_entries_workspace_id_idx" ON "competition_entries" USING btree ("workspace_id");
|
|
134
|
-
--> statement-breakpoint
|
|
135
|
-
CREATE UNIQUE INDEX IF NOT EXISTS "competition_entries_competition_workspace_idx" ON "competition_entries" USING btree ("competition_id","workspace_id");
|
|
136
|
-
--> statement-breakpoint
|
|
137
|
-
CREATE UNIQUE INDEX IF NOT EXISTS "referral_codes_code_idx" ON "referral_codes" USING btree ("code");
|
|
138
|
-
--> statement-breakpoint
|
|
139
|
-
CREATE UNIQUE INDEX IF NOT EXISTS "referral_codes_user_id_idx" ON "referral_codes" USING btree ("user_id");
|
|
140
|
-
--> statement-breakpoint
|
|
141
|
-
CREATE INDEX IF NOT EXISTS "referrals_referrer_id_idx" ON "referrals" USING btree ("referrer_id");
|
|
142
|
-
--> statement-breakpoint
|
|
143
|
-
CREATE INDEX IF NOT EXISTS "referrals_referred_user_id_idx" ON "referrals" USING btree ("referred_user_id");
|
|
144
|
-
--> statement-breakpoint
|
|
145
|
-
CREATE UNIQUE INDEX IF NOT EXISTS "referrals_referred_user_id_unique_idx" ON "referrals" USING btree ("referred_user_id");
|
|
146
|
-
--> statement-breakpoint
|
|
147
|
-
CREATE INDEX IF NOT EXISTS "shared_reports_user_id_idx" ON "shared_reports" USING btree ("user_id");
|
|
148
|
-
--> statement-breakpoint
|
|
149
|
-
CREATE INDEX IF NOT EXISTS "shared_reports_workspace_id_idx" ON "shared_reports" USING btree ("workspace_id");
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
-- Document Types reference table
|
|
2
|
-
CREATE TABLE IF NOT EXISTS "document_types" (
|
|
3
|
-
"id" text PRIMARY KEY,
|
|
4
|
-
"name" text NOT NULL,
|
|
5
|
-
"name_mn" text NOT NULL,
|
|
6
|
-
"description" text,
|
|
7
|
-
"icon" text,
|
|
8
|
-
"sort_order" integer NOT NULL DEFAULT 0,
|
|
9
|
-
"is_active" boolean NOT NULL DEFAULT true,
|
|
10
|
-
"created_at" timestamp DEFAULT now() NOT NULL
|
|
11
|
-
);
|
|
12
|
-
|
|
13
|
-
-- Add type_id column to documents
|
|
14
|
-
ALTER TABLE "documents" ADD COLUMN IF NOT EXISTS "type_id" text REFERENCES "document_types"("id") ON DELETE SET NULL;
|
|
15
|
-
|
|
16
|
-
-- Index for type lookups
|
|
17
|
-
CREATE INDEX IF NOT EXISTS "documents_type_id_idx" ON "documents" ("type_id");
|
|
18
|
-
|
|
19
|
-
-- Seed 5 career document types
|
|
20
|
-
INSERT INTO "document_types" ("id", "name", "name_mn", "description", "icon", "sort_order") VALUES
|
|
21
|
-
('career-report', 'Career Report', 'Карьерын тайлан', 'Full career assessment report with recommendations', 'file-text', 0),
|
|
22
|
-
('deep-dive-report', 'Deep Dive Report', 'Гүнзгий шинжилгээ', 'Detailed analysis of a specific career path', 'search', 1),
|
|
23
|
-
('scholarship-report', 'Scholarship Report', 'Тэтгэлгийн тайлан', 'Scholarship matching and financial aid report', 'gift', 2),
|
|
24
|
-
('comparison-report', 'Comparison Report', 'Харьцуулалт', 'Side-by-side career or university comparison', 'columns', 3),
|
|
25
|
-
('skills-report', 'Skills Report', 'Ур чадварын тайлан', 'Skills gap analysis and development plan', 'target', 4)
|
|
26
|
-
ON CONFLICT ("id") DO NOTHING;
|
|
27
|
-
|
|
28
|
-
-- Backfill existing career report documents
|
|
29
|
-
UPDATE "documents" SET "type_id" = 'career-report'
|
|
30
|
-
WHERE "kind" = 'text' AND ("title" LIKE '%Карьерын Тайлан%' OR "title" LIKE '%Career Report%');
|
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
-- AI-ARCHITECTURE Phase B: User Identity Graph
|
|
2
|
-
--
|
|
3
|
-
-- Adds the four tables that back the cross-product memory system.
|
|
4
|
-
-- See packages/core/src/db/schema/identity.ts for the Drizzle schema
|
|
5
|
-
-- and docs/AI-ARCHITECTURE.md §2 for the design rationale.
|
|
6
|
-
--
|
|
7
|
-
-- Numbering note: this file is named 0018 to slot after the existing
|
|
8
|
-
-- 0017_document_metadata. The project mixes two migration patterns —
|
|
9
|
-
-- 0000–0011 are tracked by drizzle's _journal.json (auto-generated by
|
|
10
|
-
-- `drizzle-kit generate`), while 0012–0018 are hand-rolled SQL applied
|
|
11
|
-
-- via `pnpm --filter @intelligo-dev/core db:push` and have no journal
|
|
12
|
-
-- entry. Future hand-rolled migrations should continue the 0019,
|
|
13
|
-
-- 0020, ... sequence and stay out of _journal.json.
|
|
14
|
-
--
|
|
15
|
-
-- This migration is hand-crafted (not produced by `drizzle-kit generate`)
|
|
16
|
-
-- because the auto-generator also picks up unrelated drift between the
|
|
17
|
-
-- current schema files and the last applied migration. Keeping the
|
|
18
|
-
-- diff narrow lets this PR ship the identity layer without dragging in
|
|
19
|
-
-- those unrelated alterations.
|
|
20
|
-
|
|
21
|
-
-- ---------------------------------------------------------------------------
|
|
22
|
-
-- 1. user_facts — structured, evidence-backed facts
|
|
23
|
-
-- ---------------------------------------------------------------------------
|
|
24
|
-
CREATE TABLE "user_facts" (
|
|
25
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
26
|
-
"user_id" text NOT NULL,
|
|
27
|
-
"workspace_id" text NOT NULL,
|
|
28
|
-
"category" text NOT NULL,
|
|
29
|
-
"key" text NOT NULL,
|
|
30
|
-
"value" jsonb NOT NULL,
|
|
31
|
-
"confidence" double precision NOT NULL,
|
|
32
|
-
"importance" integer DEFAULT 5 NOT NULL,
|
|
33
|
-
"source_product" text,
|
|
34
|
-
"source_session_id" text,
|
|
35
|
-
"source_message_id" text,
|
|
36
|
-
"extraction_method" text,
|
|
37
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
38
|
-
"last_confirmed_at" timestamp,
|
|
39
|
-
"expires_at" timestamp
|
|
40
|
-
);
|
|
41
|
-
--> statement-breakpoint
|
|
42
|
-
ALTER TABLE "user_facts" ADD CONSTRAINT "user_facts_user_id_users_id_fk"
|
|
43
|
-
FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade;
|
|
44
|
-
--> statement-breakpoint
|
|
45
|
-
ALTER TABLE "user_facts" ADD CONSTRAINT "user_facts_workspace_id_organization_id_fk"
|
|
46
|
-
FOREIGN KEY ("workspace_id") REFERENCES "public"."organization"("id") ON DELETE cascade;
|
|
47
|
-
--> statement-breakpoint
|
|
48
|
-
CREATE INDEX "user_facts_user_idx" ON "user_facts" USING btree ("user_id");
|
|
49
|
-
--> statement-breakpoint
|
|
50
|
-
CREATE INDEX "user_facts_workspace_idx" ON "user_facts" USING btree ("workspace_id");
|
|
51
|
-
--> statement-breakpoint
|
|
52
|
-
CREATE INDEX "user_facts_category_idx" ON "user_facts" USING btree ("workspace_id", "category");
|
|
53
|
-
--> statement-breakpoint
|
|
54
|
-
CREATE UNIQUE INDEX "user_facts_workspace_category_key_uniq"
|
|
55
|
-
ON "user_facts" USING btree ("workspace_id", "category", "key");
|
|
56
|
-
--> statement-breakpoint
|
|
57
|
-
|
|
58
|
-
-- ---------------------------------------------------------------------------
|
|
59
|
-
-- 2. user_memories — episodic memories with pgvector embedding
|
|
60
|
-
-- ---------------------------------------------------------------------------
|
|
61
|
-
CREATE TABLE "user_memories" (
|
|
62
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
63
|
-
"user_id" text NOT NULL,
|
|
64
|
-
"workspace_id" text NOT NULL,
|
|
65
|
-
"kind" text NOT NULL,
|
|
66
|
-
"content" text NOT NULL,
|
|
67
|
-
-- 1536 dimensions matches OpenAI text-embedding-3-small (the default
|
|
68
|
-
-- embedding model used across @intelligo-dev/ai). If the embedding model
|
|
69
|
-
-- ever changes the dimension constraint will need a new migration —
|
|
70
|
-
-- pgvector cannot resize a vector column in place. Search for
|
|
71
|
-
-- "vector(1536)" in apps/* before editing.
|
|
72
|
-
"embedding" vector(1536),
|
|
73
|
-
"source_product" text,
|
|
74
|
-
"source_session_id" text,
|
|
75
|
-
"source_message_ids" text[],
|
|
76
|
-
"importance" integer DEFAULT 5 NOT NULL,
|
|
77
|
-
"decay_factor" double precision DEFAULT 1 NOT NULL,
|
|
78
|
-
"metadata" jsonb,
|
|
79
|
-
"created_at" timestamp DEFAULT now() NOT NULL
|
|
80
|
-
);
|
|
81
|
-
--> statement-breakpoint
|
|
82
|
-
ALTER TABLE "user_memories" ADD CONSTRAINT "user_memories_user_id_users_id_fk"
|
|
83
|
-
FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade;
|
|
84
|
-
--> statement-breakpoint
|
|
85
|
-
ALTER TABLE "user_memories" ADD CONSTRAINT "user_memories_workspace_id_organization_id_fk"
|
|
86
|
-
FOREIGN KEY ("workspace_id") REFERENCES "public"."organization"("id") ON DELETE cascade;
|
|
87
|
-
--> statement-breakpoint
|
|
88
|
-
CREATE INDEX "user_memories_user_idx" ON "user_memories" USING btree ("user_id");
|
|
89
|
-
--> statement-breakpoint
|
|
90
|
-
CREATE INDEX "user_memories_workspace_idx" ON "user_memories" USING btree ("workspace_id");
|
|
91
|
-
--> statement-breakpoint
|
|
92
|
-
CREATE INDEX "user_memories_kind_idx" ON "user_memories" USING btree ("workspace_id", "kind");
|
|
93
|
-
--> statement-breakpoint
|
|
94
|
-
-- IVFFlat vector index for cosine-similarity recall. Drizzle-orm
|
|
95
|
-
-- doesn't expose this syntax natively, so it lives in the migration.
|
|
96
|
-
--
|
|
97
|
-
-- `lists = 100` is a starter value tuned for ~100k–1M rows
|
|
98
|
-
-- (rule of thumb: rows / 1000). IVFFlat performance degrades when the
|
|
99
|
-
-- table grows past `lists * sqrt(rows)`, so once Phase F starts
|
|
100
|
-
-- ingesting real memories at scale this should be either:
|
|
101
|
-
-- (a) raised to ~sqrt(actual_rows), then REINDEX, or
|
|
102
|
-
-- (b) replaced with HNSW (`USING hnsw (...) WITH (m=16, ef_construction=64)`),
|
|
103
|
-
-- which doesn't have IVFFlat's tuning sensitivity but uses more memory.
|
|
104
|
-
-- See docs/AI-ARCHITECTURE.md §2.2 for the recall path that uses this.
|
|
105
|
-
CREATE INDEX "user_memories_embedding_ivfflat"
|
|
106
|
-
ON "user_memories" USING ivfflat ("embedding" vector_cosine_ops) WITH (lists = 100);
|
|
107
|
-
--> statement-breakpoint
|
|
108
|
-
|
|
109
|
-
-- ---------------------------------------------------------------------------
|
|
110
|
-
-- 3. user_profile_snapshots — synthesized, fast-read profile cache
|
|
111
|
-
-- ---------------------------------------------------------------------------
|
|
112
|
-
CREATE TABLE "user_profile_snapshots" (
|
|
113
|
-
"user_id" text PRIMARY KEY NOT NULL,
|
|
114
|
-
"workspace_id" text NOT NULL,
|
|
115
|
-
"version" integer NOT NULL,
|
|
116
|
-
"summary" text NOT NULL,
|
|
117
|
-
"summary_en" text,
|
|
118
|
-
"summary_mn" text,
|
|
119
|
-
"facts_digest" jsonb NOT NULL,
|
|
120
|
-
"active_goals" jsonb,
|
|
121
|
-
"personality_signals" jsonb,
|
|
122
|
-
"relationship_notes" jsonb,
|
|
123
|
-
"synthesized_by_model" text,
|
|
124
|
-
"synthesized_at" timestamp DEFAULT now() NOT NULL,
|
|
125
|
-
"next_synthesis_at" timestamp,
|
|
126
|
-
"trigger_reason" text
|
|
127
|
-
);
|
|
128
|
-
--> statement-breakpoint
|
|
129
|
-
ALTER TABLE "user_profile_snapshots" ADD CONSTRAINT "user_profile_snapshots_user_id_users_id_fk"
|
|
130
|
-
FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade;
|
|
131
|
-
--> statement-breakpoint
|
|
132
|
-
ALTER TABLE "user_profile_snapshots" ADD CONSTRAINT "user_profile_snapshots_workspace_id_organization_id_fk"
|
|
133
|
-
FOREIGN KEY ("workspace_id") REFERENCES "public"."organization"("id") ON DELETE cascade;
|
|
134
|
-
--> statement-breakpoint
|
|
135
|
-
CREATE INDEX "user_profile_snapshots_workspace_idx"
|
|
136
|
-
ON "user_profile_snapshots" USING btree ("workspace_id");
|
|
137
|
-
--> statement-breakpoint
|
|
138
|
-
|
|
139
|
-
-- ---------------------------------------------------------------------------
|
|
140
|
-
-- 4. user_memory_audit — append-only audit log
|
|
141
|
-
-- ---------------------------------------------------------------------------
|
|
142
|
-
CREATE TABLE "user_memory_audit" (
|
|
143
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
144
|
-
"user_id" text NOT NULL,
|
|
145
|
-
"workspace_id" text NOT NULL,
|
|
146
|
-
"target_kind" text NOT NULL,
|
|
147
|
-
"target_id" text NOT NULL,
|
|
148
|
-
"action" text NOT NULL,
|
|
149
|
-
"actor_kind" text NOT NULL,
|
|
150
|
-
"actor_id" text,
|
|
151
|
-
"before_value" jsonb,
|
|
152
|
-
"after_value" jsonb,
|
|
153
|
-
"reason" text,
|
|
154
|
-
"created_at" timestamp DEFAULT now() NOT NULL
|
|
155
|
-
);
|
|
156
|
-
--> statement-breakpoint
|
|
157
|
-
ALTER TABLE "user_memory_audit" ADD CONSTRAINT "user_memory_audit_user_id_users_id_fk"
|
|
158
|
-
FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade;
|
|
159
|
-
--> statement-breakpoint
|
|
160
|
-
ALTER TABLE "user_memory_audit" ADD CONSTRAINT "user_memory_audit_workspace_id_organization_id_fk"
|
|
161
|
-
FOREIGN KEY ("workspace_id") REFERENCES "public"."organization"("id") ON DELETE cascade;
|
|
162
|
-
--> statement-breakpoint
|
|
163
|
-
CREATE INDEX "user_memory_audit_user_idx" ON "user_memory_audit" USING btree ("user_id");
|
|
164
|
-
--> statement-breakpoint
|
|
165
|
-
CREATE INDEX "user_memory_audit_workspace_idx" ON "user_memory_audit" USING btree ("workspace_id");
|
|
166
|
-
--> statement-breakpoint
|
|
167
|
-
CREATE INDEX "user_memory_audit_target_idx"
|
|
168
|
-
ON "user_memory_audit" USING btree ("target_kind", "target_id");
|
|
169
|
-
--> statement-breakpoint
|
|
170
|
-
|
|
171
|
-
-- Append-only enforcement: facts/memories/snapshots can be updated and
|
|
172
|
-
-- deleted via the application layer, but their audit trail must not.
|
|
173
|
-
-- A future PR can replace this with a row-level revoke if RLS is wired
|
|
174
|
-
-- up; the trigger guard is the smaller change for now.
|
|
175
|
-
--
|
|
176
|
-
-- The function is fully qualified as `public.user_memory_audit_block_mutation`
|
|
177
|
-
-- so a future schema split (e.g., moving identity tables into an
|
|
178
|
-
-- "identity" schema) won't shadow it.
|
|
179
|
-
--
|
|
180
|
-
-- The exception message deliberately omits NEW.* / OLD.* — Postgres
|
|
181
|
-
-- writes RAISE EXCEPTION strings to the server log by default, and the
|
|
182
|
-
-- audit row's before/after values can contain user PII (interest,
|
|
183
|
-
-- skill, etc. extracted by an LLM). ERRCODE 25006 = read_only_sql_transaction;
|
|
184
|
-
-- close enough for upstream callers to recognize the class without
|
|
185
|
-
-- needing a custom code.
|
|
186
|
-
CREATE OR REPLACE FUNCTION public.user_memory_audit_block_mutation()
|
|
187
|
-
RETURNS trigger AS $$
|
|
188
|
-
BEGIN
|
|
189
|
-
RAISE EXCEPTION 'user_memory_audit is append-only'
|
|
190
|
-
USING ERRCODE = '25006', HINT = 'INSERT new audit rows; do not UPDATE or DELETE existing ones.';
|
|
191
|
-
END;
|
|
192
|
-
$$ LANGUAGE plpgsql;
|
|
193
|
-
--> statement-breakpoint
|
|
194
|
-
CREATE TRIGGER user_memory_audit_no_update
|
|
195
|
-
BEFORE UPDATE ON "user_memory_audit"
|
|
196
|
-
FOR EACH ROW EXECUTE FUNCTION public.user_memory_audit_block_mutation();
|
|
197
|
-
--> statement-breakpoint
|
|
198
|
-
CREATE TRIGGER user_memory_audit_no_delete
|
|
199
|
-
BEFORE DELETE ON "user_memory_audit"
|
|
200
|
-
FOR EACH ROW EXECUTE FUNCTION public.user_memory_audit_block_mutation();
|