@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.
Files changed (355) hide show
  1. package/NOTICE +6 -0
  2. package/README.md +102 -0
  3. package/dist/attachments/errors.d.ts +7 -0
  4. package/dist/attachments/errors.d.ts.map +1 -0
  5. package/dist/attachments/errors.js +11 -0
  6. package/dist/attachments/errors.js.map +1 -0
  7. package/dist/attachments/index.d.ts +8 -0
  8. package/dist/attachments/index.d.ts.map +1 -0
  9. package/dist/attachments/index.js +7 -0
  10. package/dist/attachments/index.js.map +1 -0
  11. package/dist/attachments/service.d.ts +45 -0
  12. package/dist/attachments/service.d.ts.map +1 -0
  13. package/dist/attachments/service.js +100 -0
  14. package/dist/attachments/service.js.map +1 -0
  15. package/dist/attachments/types.d.ts +6 -0
  16. package/dist/attachments/types.d.ts.map +1 -0
  17. package/dist/attachments/types.js +2 -0
  18. package/dist/attachments/types.js.map +1 -0
  19. package/dist/conversations/errors.d.ts +2 -8
  20. package/dist/conversations/errors.d.ts.map +1 -1
  21. package/dist/conversations/errors.js +2 -8
  22. package/dist/conversations/errors.js.map +1 -1
  23. package/dist/conversations/index.d.ts +4 -12
  24. package/dist/conversations/index.d.ts.map +1 -1
  25. package/dist/conversations/index.js +2 -11
  26. package/dist/conversations/index.js.map +1 -1
  27. package/dist/conversations/service.d.ts +49 -61
  28. package/dist/conversations/service.d.ts.map +1 -1
  29. package/dist/conversations/service.js +110 -83
  30. package/dist/conversations/service.js.map +1 -1
  31. package/dist/conversations/types.d.ts +1 -4
  32. package/dist/conversations/types.d.ts.map +1 -1
  33. package/dist/conversations/types.js +0 -3
  34. package/dist/conversations/types.js.map +1 -1
  35. package/dist/db/client.d.ts +21 -10
  36. package/dist/db/client.d.ts.map +1 -1
  37. package/dist/db/client.js +43 -18
  38. package/dist/db/client.js.map +1 -1
  39. package/dist/db/index.d.ts +3 -3
  40. package/dist/db/index.d.ts.map +1 -1
  41. package/dist/db/index.js +3 -7
  42. package/dist/db/index.js.map +1 -1
  43. package/dist/db/schema/agents.d.ts +14 -51
  44. package/dist/db/schema/agents.d.ts.map +1 -1
  45. package/dist/db/schema/agents.js +9 -21
  46. package/dist/db/schema/agents.js.map +1 -1
  47. package/dist/db/schema/ai.d.ts +86 -1556
  48. package/dist/db/schema/ai.d.ts.map +1 -1
  49. package/dist/db/schema/ai.js +32 -236
  50. package/dist/db/schema/ai.js.map +1 -1
  51. package/dist/db/schema/auth.d.ts +5 -34
  52. package/dist/db/schema/auth.d.ts.map +1 -1
  53. package/dist/db/schema/auth.js +25 -56
  54. package/dist/db/schema/auth.js.map +1 -1
  55. package/dist/db/schema/billing.d.ts +136 -107
  56. package/dist/db/schema/billing.d.ts.map +1 -1
  57. package/dist/db/schema/billing.js +72 -60
  58. package/dist/db/schema/billing.js.map +1 -1
  59. package/dist/db/schema/feature-flags.d.ts +3 -12
  60. package/dist/db/schema/feature-flags.d.ts.map +1 -1
  61. package/dist/db/schema/feature-flags.js +3 -12
  62. package/dist/db/schema/feature-flags.js.map +1 -1
  63. package/dist/db/schema/identity.d.ts +12 -274
  64. package/dist/db/schema/identity.d.ts.map +1 -1
  65. package/dist/db/schema/identity.js +19 -104
  66. package/dist/db/schema/identity.js.map +1 -1
  67. package/dist/db/schema/index.d.ts +8 -15
  68. package/dist/db/schema/index.d.ts.map +1 -1
  69. package/dist/db/schema/index.js +12 -42
  70. package/dist/db/schema/index.js.map +1 -1
  71. package/dist/db/schema/notifications.d.ts +3 -17
  72. package/dist/db/schema/notifications.d.ts.map +1 -1
  73. package/dist/db/schema/notifications.js +3 -17
  74. package/dist/db/schema/notifications.js.map +1 -1
  75. package/dist/db/schema/usage.d.ts +94 -77
  76. package/dist/db/schema/usage.d.ts.map +1 -1
  77. package/dist/db/schema/usage.js +59 -89
  78. package/dist/db/schema/usage.js.map +1 -1
  79. package/dist/db/validate.d.ts +2 -11
  80. package/dist/db/validate.d.ts.map +1 -1
  81. package/dist/db/validate.js +6 -17
  82. package/dist/db/validate.js.map +1 -1
  83. package/dist/db/workspace-queries.d.ts +5 -29
  84. package/dist/db/workspace-queries.d.ts.map +1 -1
  85. package/dist/db/workspace-queries.js +5 -29
  86. package/dist/db/workspace-queries.js.map +1 -1
  87. package/dist/documents/classifier.d.ts +5 -12
  88. package/dist/documents/classifier.d.ts.map +1 -1
  89. package/dist/documents/classifier.js +16 -16
  90. package/dist/documents/classifier.js.map +1 -1
  91. package/dist/documents/errors.d.ts +2 -10
  92. package/dist/documents/errors.d.ts.map +1 -1
  93. package/dist/documents/errors.js +2 -10
  94. package/dist/documents/errors.js.map +1 -1
  95. package/dist/documents/index.d.ts +4 -13
  96. package/dist/documents/index.d.ts.map +1 -1
  97. package/dist/documents/index.js +3 -12
  98. package/dist/documents/index.js.map +1 -1
  99. package/dist/documents/service.d.ts +19 -26
  100. package/dist/documents/service.d.ts.map +1 -1
  101. package/dist/documents/service.js +44 -38
  102. package/dist/documents/service.js.map +1 -1
  103. package/dist/documents/types.d.ts +6 -10
  104. package/dist/documents/types.d.ts.map +1 -1
  105. package/dist/documents/types.js +0 -3
  106. package/dist/documents/types.js.map +1 -1
  107. package/dist/email/brand.d.ts +17 -0
  108. package/dist/email/brand.d.ts.map +1 -0
  109. package/dist/email/brand.js +9 -0
  110. package/dist/email/brand.js.map +1 -0
  111. package/dist/email/index.d.ts +4 -4
  112. package/dist/email/index.js +4 -4
  113. package/dist/email/provider.d.ts +1 -7
  114. package/dist/email/provider.d.ts.map +1 -1
  115. package/dist/email/provider.js +10 -19
  116. package/dist/email/provider.js.map +1 -1
  117. package/dist/email/send.d.ts +12 -12
  118. package/dist/email/send.d.ts.map +1 -1
  119. package/dist/email/send.js +5 -19
  120. package/dist/email/send.js.map +1 -1
  121. package/dist/email/senders.d.ts +17 -30
  122. package/dist/email/senders.d.ts.map +1 -1
  123. package/dist/email/senders.js +33 -47
  124. package/dist/email/senders.js.map +1 -1
  125. package/dist/email/templates/base-layout.d.ts +1 -1
  126. package/dist/email/templates/base-layout.d.ts.map +1 -1
  127. package/dist/email/templates/base-layout.js +4 -6
  128. package/dist/email/templates/base-layout.js.map +1 -1
  129. package/dist/email/templates/index.d.ts +10 -10
  130. package/dist/email/templates/index.d.ts.map +1 -1
  131. package/dist/email/templates/index.js +10 -16
  132. package/dist/email/templates/index.js.map +1 -1
  133. package/dist/email/templates/password-reset.d.ts +2 -2
  134. package/dist/email/templates/password-reset.d.ts.map +1 -1
  135. package/dist/email/templates/password-reset.js +10 -22
  136. package/dist/email/templates/password-reset.js.map +1 -1
  137. package/dist/email/templates/payment-failed.d.ts +2 -2
  138. package/dist/email/templates/payment-failed.d.ts.map +1 -1
  139. package/dist/email/templates/payment-failed.js +11 -24
  140. package/dist/email/templates/payment-failed.js.map +1 -1
  141. package/dist/email/templates/quota-warning.d.ts +4 -4
  142. package/dist/email/templates/quota-warning.d.ts.map +1 -1
  143. package/dist/email/templates/quota-warning.js +19 -39
  144. package/dist/email/templates/quota-warning.js.map +1 -1
  145. package/dist/email/templates/subscription-confirmed.d.ts +2 -2
  146. package/dist/email/templates/subscription-confirmed.d.ts.map +1 -1
  147. package/dist/email/templates/subscription-confirmed.js +13 -28
  148. package/dist/email/templates/subscription-confirmed.js.map +1 -1
  149. package/dist/email/templates/trial-expiry.d.ts +2 -2
  150. package/dist/email/templates/trial-expiry.d.ts.map +1 -1
  151. package/dist/email/templates/trial-expiry.js +12 -36
  152. package/dist/email/templates/trial-expiry.js.map +1 -1
  153. package/dist/email/templates/trial-warning.d.ts +2 -2
  154. package/dist/email/templates/trial-warning.d.ts.map +1 -1
  155. package/dist/email/templates/trial-warning.js +15 -32
  156. package/dist/email/templates/trial-warning.js.map +1 -1
  157. package/dist/email/templates/verify-email.d.ts +2 -2
  158. package/dist/email/templates/verify-email.d.ts.map +1 -1
  159. package/dist/email/templates/verify-email.js +10 -22
  160. package/dist/email/templates/verify-email.js.map +1 -1
  161. package/dist/email/templates/welcome.d.ts +2 -2
  162. package/dist/email/templates/welcome.d.ts.map +1 -1
  163. package/dist/email/templates/welcome.js +13 -20
  164. package/dist/email/templates/welcome.js.map +1 -1
  165. package/dist/email/templates/workspace-invitation.d.ts +2 -2
  166. package/dist/email/templates/workspace-invitation.d.ts.map +1 -1
  167. package/dist/email/templates/workspace-invitation.js +12 -26
  168. package/dist/email/templates/workspace-invitation.js.map +1 -1
  169. package/dist/env.d.ts +5 -10
  170. package/dist/env.d.ts.map +1 -1
  171. package/dist/env.js +41 -31
  172. package/dist/env.js.map +1 -1
  173. package/dist/identity/audit.d.ts +11 -24
  174. package/dist/identity/audit.d.ts.map +1 -1
  175. package/dist/identity/audit.js +13 -27
  176. package/dist/identity/audit.js.map +1 -1
  177. package/dist/identity/errors.d.ts +4 -12
  178. package/dist/identity/errors.d.ts.map +1 -1
  179. package/dist/identity/errors.js +2 -8
  180. package/dist/identity/errors.js.map +1 -1
  181. package/dist/identity/index.d.ts +5 -13
  182. package/dist/identity/index.d.ts.map +1 -1
  183. package/dist/identity/index.js +4 -12
  184. package/dist/identity/index.js.map +1 -1
  185. package/dist/identity/service.d.ts +13 -47
  186. package/dist/identity/service.d.ts.map +1 -1
  187. package/dist/identity/service.js +31 -78
  188. package/dist/identity/service.js.map +1 -1
  189. package/dist/identity/types.d.ts +1 -4
  190. package/dist/identity/types.d.ts.map +1 -1
  191. package/dist/identity/types.js +0 -3
  192. package/dist/identity/types.js.map +1 -1
  193. package/dist/index.d.ts +1 -2
  194. package/dist/index.d.ts.map +1 -1
  195. package/dist/index.js +3 -10
  196. package/dist/index.js.map +1 -1
  197. package/dist/logger.d.ts +7 -18
  198. package/dist/logger.d.ts.map +1 -1
  199. package/dist/logger.js +45 -49
  200. package/dist/logger.js.map +1 -1
  201. package/dist/money.d.ts +95 -0
  202. package/dist/money.d.ts.map +1 -0
  203. package/dist/money.js +208 -0
  204. package/dist/money.js.map +1 -0
  205. package/dist/notifications/index.d.ts +9 -43
  206. package/dist/notifications/index.d.ts.map +1 -1
  207. package/dist/notifications/index.js +9 -49
  208. package/dist/notifications/index.js.map +1 -1
  209. package/dist/notifications/triggers.d.ts +9 -32
  210. package/dist/notifications/triggers.d.ts.map +1 -1
  211. package/dist/notifications/triggers.js +21 -58
  212. package/dist/notifications/triggers.js.map +1 -1
  213. package/dist/notifications/types.d.ts +1 -10
  214. package/dist/notifications/types.d.ts.map +1 -1
  215. package/dist/notifications/types.js +0 -9
  216. package/dist/notifications/types.js.map +1 -1
  217. package/dist/prompt.d.ts +38 -0
  218. package/dist/prompt.d.ts.map +1 -0
  219. package/dist/prompt.js +118 -0
  220. package/dist/prompt.js.map +1 -0
  221. package/dist/registry.d.ts +32 -0
  222. package/dist/registry.d.ts.map +1 -0
  223. package/dist/registry.js +60 -0
  224. package/dist/registry.js.map +1 -0
  225. package/dist/request-context.d.ts +49 -0
  226. package/dist/request-context.d.ts.map +1 -0
  227. package/dist/request-context.js +100 -0
  228. package/dist/request-context.js.map +1 -0
  229. package/dist/storage/index.d.ts +65 -0
  230. package/dist/storage/index.d.ts.map +1 -0
  231. package/dist/storage/index.js +109 -0
  232. package/dist/storage/index.js.map +1 -0
  233. package/package.json +74 -24
  234. package/src/attachments/errors.ts +18 -0
  235. package/src/attachments/index.ts +22 -0
  236. package/src/attachments/service.ts +178 -0
  237. package/src/attachments/types.ts +6 -0
  238. package/src/conversations/errors.ts +45 -0
  239. package/src/conversations/index.ts +39 -0
  240. package/src/conversations/service.ts +594 -0
  241. package/src/conversations/types.ts +15 -0
  242. package/src/db/client.ts +91 -0
  243. package/src/db/index.ts +3 -0
  244. package/src/db/migrations/0000_baseline.sql +652 -0
  245. package/src/db/migrations/0001_reconcile_chain_built_databases.sql +53 -0
  246. package/src/db/migrations/0002_webhook_claim_lease.sql +1 -0
  247. package/src/db/migrations/README.md +74 -36
  248. package/src/db/migrations/legacy-chain.json +197 -0
  249. package/src/db/migrations/meta/0000_snapshot.json +4182 -157
  250. package/src/db/migrations/meta/0002_snapshot.json +2478 -368
  251. package/src/db/migrations/meta/_journal.json +6 -279
  252. package/src/db/schema/agents.ts +57 -0
  253. package/src/db/schema/ai.ts +174 -0
  254. package/src/db/schema/auth.ts +183 -0
  255. package/src/db/schema/billing.ts +209 -0
  256. package/src/db/schema/feature-flags.ts +20 -0
  257. package/src/db/schema/identity.ts +250 -0
  258. package/src/db/schema/index.ts +12 -0
  259. package/src/db/schema/notifications.ts +31 -0
  260. package/src/db/schema/usage.ts +269 -0
  261. package/src/db/validate.ts +63 -0
  262. package/src/db/workspace-queries.ts +64 -0
  263. package/src/documents/classifier.ts +61 -0
  264. package/src/documents/errors.ts +44 -0
  265. package/src/documents/index.ts +24 -0
  266. package/src/documents/service.ts +256 -0
  267. package/src/documents/types.ts +24 -0
  268. package/src/email/brand.ts +24 -0
  269. package/src/email/index.ts +19 -0
  270. package/src/email/provider.ts +278 -0
  271. package/src/email/send.ts +169 -0
  272. package/src/email/senders.ts +292 -0
  273. package/src/email/templates/base-layout.tsx +145 -0
  274. package/src/email/templates/index.ts +28 -0
  275. package/src/email/templates/password-reset.tsx +72 -0
  276. package/src/email/templates/payment-failed.tsx +77 -0
  277. package/src/email/templates/quota-warning.tsx +118 -0
  278. package/src/email/templates/subscription-confirmed.tsx +91 -0
  279. package/src/email/templates/trial-expiry.tsx +124 -0
  280. package/src/email/templates/trial-warning.tsx +104 -0
  281. package/src/email/templates/verify-email.tsx +72 -0
  282. package/src/email/templates/welcome.tsx +64 -0
  283. package/src/email/templates/workspace-invitation.tsx +105 -0
  284. package/src/env.ts +180 -0
  285. package/src/identity/audit.ts +65 -0
  286. package/src/identity/errors.ts +44 -0
  287. package/src/identity/index.ts +26 -0
  288. package/src/identity/service.ts +202 -0
  289. package/src/identity/types.ts +28 -0
  290. package/src/index.ts +4 -0
  291. package/src/logger.ts +198 -0
  292. package/src/money.ts +270 -0
  293. package/src/notifications/index.ts +108 -0
  294. package/src/notifications/triggers.ts +158 -0
  295. package/src/notifications/types.ts +18 -0
  296. package/src/prompt.ts +142 -0
  297. package/src/registry.ts +75 -0
  298. package/src/request-context.ts +137 -0
  299. package/src/storage/index.ts +153 -0
  300. package/dist/db/schema/rag.d.ts +0 -171
  301. package/dist/db/schema/rag.d.ts.map +0 -1
  302. package/dist/db/schema/rag.js +0 -42
  303. package/dist/db/schema/rag.js.map +0 -1
  304. package/src/db/migrations/0000_sharp_night_nurse.sql +0 -52
  305. package/src/db/migrations/0001_hesitant_vapor.sql +0 -40
  306. package/src/db/migrations/0002_numerous_lady_vermin.sql +0 -235
  307. package/src/db/migrations/0003_mighty_jean_grey.sql +0 -37
  308. package/src/db/migrations/0004_cynical_grandmaster.sql +0 -2
  309. package/src/db/migrations/0005_careful_switch.sql +0 -8
  310. package/src/db/migrations/0006_tense_blue_marvel.sql +0 -16
  311. package/src/db/migrations/0007_next_squadron_sinister.sql +0 -1
  312. package/src/db/migrations/0008_powerful_scream.sql +0 -39
  313. package/src/db/migrations/0009_sad_ink.sql +0 -1
  314. package/src/db/migrations/0010_shocking_omega_flight.sql +0 -2
  315. package/src/db/migrations/0011_ambiguous_otto_octavius.sql +0 -151
  316. package/src/db/migrations/0011_hnsw_vector_index.sql +0 -17
  317. package/src/db/migrations/0012_user_profiles.sql +0 -30
  318. package/src/db/migrations/0013_trending_seasonal_columns.sql +0 -9
  319. package/src/db/migrations/0014_add_product_type_to_agents.sql +0 -6
  320. package/src/db/migrations/0015_new_v1_tables.sql +0 -149
  321. package/src/db/migrations/0016_document_types.sql +0 -30
  322. package/src/db/migrations/0017_document_metadata.sql +0 -2
  323. package/src/db/migrations/0018_identity_graph.sql +0 -200
  324. package/src/db/migrations/0019_db_driven_prompts.sql +0 -20
  325. package/src/db/migrations/0020_pending_extractions.sql +0 -35
  326. package/src/db/migrations/0021_rag_documents.sql +0 -39
  327. package/src/db/migrations/0022_user_quotas_usage_jsonb.sql +0 -70
  328. package/src/db/migrations/0023_user_facts_user_scoped_unique.sql +0 -17
  329. package/src/db/migrations/0024_user_memories_hnsw.sql +0 -23
  330. package/src/db/migrations/0025_audit_trigger_errcode.sql +0 -21
  331. package/src/db/migrations/0026_user_profile_snapshots_composite_pk.sql +0 -17
  332. package/src/db/migrations/0027_billing_settings_mnt_columns.sql +0 -54
  333. package/src/db/migrations/0028_trial_credits_normalized_email.sql +0 -37
  334. package/src/db/migrations/0029_usage_records_conversation_idx.sql +0 -13
  335. package/src/db/migrations/0030_pending_extractions_composite_idx.sql +0 -11
  336. package/src/db/migrations/0031_rag_documents_hnsw.sql +0 -16
  337. package/src/db/migrations/0032_rate_limit_unique_idx.sql +0 -16
  338. package/src/db/migrations/0033_pending_extractions_partial_idx.sql +0 -18
  339. package/src/db/migrations/0034_rate_limit_count.sql +0 -9
  340. package/src/db/migrations/0035_credit_reservations.sql +0 -24
  341. package/src/db/migrations/0036_executions_audit_jobs.sql +0 -96
  342. package/src/db/migrations/0037_rate_limit_minute_bucket.sql +0 -46
  343. package/src/db/migrations/0038_user_quotas_generic_usage.sql +0 -25
  344. package/src/db/migrations/0039_platform_admin_impersonation.sql +0 -27
  345. package/src/db/migrations/0040_ee_audit_chain.sql +0 -23
  346. package/src/db/migrations/meta/0001_snapshot.json +0 -631
  347. package/src/db/migrations/meta/0003_snapshot.json +0 -2488
  348. package/src/db/migrations/meta/0004_snapshot.json +0 -2500
  349. package/src/db/migrations/meta/0005_snapshot.json +0 -2548
  350. package/src/db/migrations/meta/0006_snapshot.json +0 -2650
  351. package/src/db/migrations/meta/0007_snapshot.json +0 -2657
  352. package/src/db/migrations/meta/0008_snapshot.json +0 -2719
  353. package/src/db/migrations/meta/0009_snapshot.json +0 -2726
  354. package/src/db/migrations/meta/0010_snapshot.json +0 -2739
  355. package/src/db/migrations/meta/0011_snapshot.json +0 -3886
@@ -1,20 +1,12 @@
1
1
  /**
2
- * Usage Tracking Database Schema
3
- *
4
- * Tables for tracking per-request token consumption and aggregated monthly usage.
5
- * Used by the quota enforcement engine to check limits before AI requests
6
- * and record consumption atomically after completion.
7
- *
8
- * Pattern: snake_case columns in PostgreSQL, camelCase TypeScript API (via Drizzle mapping)
2
+ * Token consumption per request and aggregated per period, which the quota
3
+ * engine checks before AI requests and records into after them.
9
4
  */
10
- import { pgTable, text, timestamp, integer, real, index, unique, jsonb, } from "drizzle-orm/pg-core";
11
- import { organization, users } from "./auth";
5
+ import { pgTable, text, timestamp, integer, bigint, real, index, unique, jsonb, } from "drizzle-orm/pg-core";
6
+ import { organization, users } from "./auth.js";
12
7
  /**
13
- * Usage Records table - Per-request token tracking (QUOTA-05)
14
- *
15
- * Every AI request creates one record with input/output/total tokens,
16
- * the model used, and the agent that handled it. This provides the
17
- * detailed breakdown for per-model and per-agent reporting (QUOTA-07).
8
+ * One row per AI request: tokens, model and agent, for per-model and
9
+ * per-agent reporting.
18
10
  */
19
11
  export const usageRecords = pgTable("usage_records", {
20
12
  id: text("id").primaryKey(),
@@ -26,22 +18,27 @@ export const usageRecords = pgTable("usage_records", {
26
18
  .references(() => users.id, { onDelete: "cascade" }),
27
19
  type: text("type").notNull(), // "ai_tokens", "api_call"
28
20
  model: text("model"), // "gpt-4o", "gpt-4o-mini"
29
- agent: text("agent"), // "career-advisor", "sesh"
21
+ agent: text("agent"), // the product's agent slug
30
22
  inputTokens: integer("input_tokens").notNull().default(0),
31
23
  outputTokens: integer("output_tokens").notNull().default(0),
32
24
  totalTokens: integer("total_tokens").notNull().default(0),
33
25
  /**
34
- * Raw provider USD cost snapshot (kept under legacy column name for back-compat).
35
- * Do NOT use for arithmetic — floating-point accumulation causes sub-cent
36
- * discrepancies over many records. Use chargedMnt (integer MNT) for all math.
26
+ * What the provider charged, in USD micros. Integer on purpose: float
27
+ * arithmetic accumulates sub-cent error over many records.
37
28
  */
38
- cost: real("cost").notNull().default(0),
39
- /** Snapshot of billing margin multiplier applied to this request */
40
- marginMultiplier: real("margin_multiplier").notNull().default(0),
41
- /** Snapshot of USD→MNT FX rate used for conversion */
42
- fxRate: real("fx_rate").notNull().default(0),
43
- /** Authoritative MNT amount deducted from balance */
44
- chargedMnt: integer("charged_mnt").notNull().default(0),
29
+ providerCostMicros: bigint("provider_cost_micros", { mode: "number" })
30
+ .notNull()
31
+ .default(0),
32
+ /** Snapshots of the rate and margin this charge was computed with. */
33
+ marginBp: integer("margin_bp").notNull().default(0),
34
+ usdRateMicros: bigint("usd_rate_micros", { mode: "number" })
35
+ .notNull()
36
+ .default(0),
37
+ /** Authoritative charge, in micros of `currency`. */
38
+ chargedMicros: bigint("charged_micros", { mode: "number" })
39
+ .notNull()
40
+ .default(0),
41
+ currency: text("currency").notNull().default("USD"),
45
42
  /** Request correlation id for log tracing */
46
43
  requestId: text("request_id"),
47
44
  /**
@@ -63,11 +60,8 @@ export const usageRecords = pgTable("usage_records", {
63
60
  index("usage_records_execution_id_idx").on(table.executionId),
64
61
  ]);
65
62
  /**
66
- * Monthly Usage table - Aggregated monthly totals for fast quota checks
67
- *
68
- * Instead of SUM(totalTokens) on every request, we increment a counter atomically.
69
- * One row per workspace per billing period. The usage_records table provides
70
- * the detailed breakdown for reporting; this table provides O(1) quota checks.
63
+ * One row per workspace per billing period, incremented atomically, so a
64
+ * quota check is O(1) instead of a SUM over usage_records.
71
65
  */
72
66
  export const monthlyUsage = pgTable("monthly_usage", {
73
67
  id: text("id").primaryKey(),
@@ -77,8 +71,11 @@ export const monthlyUsage = pgTable("monthly_usage", {
77
71
  periodStart: timestamp("period_start").notNull(),
78
72
  periodEnd: timestamp("period_end").notNull(),
79
73
  tokensUsed: integer("tokens_used").notNull().default(0),
80
- /** MNT-denominated total charged this period — authoritative for plan quota */
81
- chargedMnt: integer("charged_mnt").notNull().default(0),
74
+ /** The plan allowance spent this period, in micros of `currency`. */
75
+ allowanceUsedMicros: bigint("allowance_used_micros", { mode: "number" })
76
+ .notNull()
77
+ .default(0),
78
+ currency: text("currency").notNull().default("USD"),
82
79
  requestCount: integer("request_count").notNull().default(0),
83
80
  updatedAt: timestamp("updated_at").notNull().defaultNow(),
84
81
  }, (table) => [
@@ -86,16 +83,10 @@ export const monthlyUsage = pgTable("monthly_usage", {
86
83
  index("monthly_usage_workspace_id_idx").on(table.workspaceId),
87
84
  ]);
88
85
  /**
89
- * Trial Credits table - One-time trial credit allocation per workspace (TRIAL-01)
90
- *
91
- * Each new workspace receives 100K trial tokens on creation.
92
- * The unique constraint on workspace_id enforces one trial per workspace (TRIAL-07).
93
- * Trial credits are separate from purchased credits (credit_balances).
94
- * They act as a fallback when plan quota is exceeded or credit balance is zero.
95
- *
96
- * Status flow: active → depleted (credits hit 0) or active → converted (paid plan)
86
+ * One-time trial grant, one per workspace (unique constraint). Separate from
87
+ * purchased credits; used when the plan quota is exceeded or the credit
88
+ * balance is zero. Status: active → depleted, converted or expired.
97
89
  */
98
- // Run drizzle-kit push to apply index
99
90
  export const trialCredits = pgTable("trial_credits", {
100
91
  id: text("id").primaryKey(),
101
92
  workspaceId: text("workspace_id")
@@ -105,12 +96,15 @@ export const trialCredits = pgTable("trial_credits", {
105
96
  initialCredits: integer("initial_credits").notNull().default(100000),
106
97
  creditsUsed: integer("credits_used").notNull().default(0),
107
98
  creditsRemaining: integer("credits_remaining").notNull().default(100000),
108
- /** MNT-denominated trial grant (replaces token-denominated columns above) */
109
- initialCreditsMnt: integer("initial_credits_mnt").notNull().default(5000),
110
- creditsUsedMnt: integer("credits_used_mnt").notNull().default(0),
111
- creditsRemainingMnt: integer("credits_remaining_mnt")
99
+ /** The grant, in micros of `currency`. */
100
+ initialMicros: bigint("initial_micros", { mode: "number" })
101
+ .notNull()
102
+ .default(0),
103
+ usedMicros: bigint("used_micros", { mode: "number" }).notNull().default(0),
104
+ remainingMicros: bigint("remaining_micros", { mode: "number" })
112
105
  .notNull()
113
- .default(5000),
106
+ .default(0),
107
+ currency: text("currency").notNull().default("USD"),
114
108
  status: text("status").notNull().default("active"), // active|depleted|converted|expired
115
109
  provisionedAt: timestamp("provisioned_at").notNull().defaultNow(),
116
110
  trialEndDate: timestamp("trial_end_date"), // 14 days from provisioning
@@ -119,10 +113,8 @@ export const trialCredits = pgTable("trial_credits", {
119
113
  createdByIp: text("created_by_ip"),
120
114
  createdByEmail: text("created_by_email"),
121
115
  /**
122
- * Canonical form of createdByEmail used by the per-email abuse
123
- * check. Stored alongside the raw value so `SELECT count(*)`
124
- * can use an index instead of a full-table scan + JS filter.
125
- * See packages/billing/src/trial.ts:normalizeEmailForAbuseCheck.
116
+ * Canonical form of createdByEmail for the per-email abuse check,
117
+ * stored so the count can use an index instead of a full-table scan.
126
118
  */
127
119
  normalizedEmail: text("normalized_email"),
128
120
  }, (table) => [
@@ -130,20 +122,10 @@ export const trialCredits = pgTable("trial_credits", {
130
122
  index("trial_credits_normalized_email_idx").on(table.normalizedEmail),
131
123
  ]);
132
124
  /**
133
- * Rate Limit Entries table - Sliding window rate limiting (QUOTA-10)
134
- *
135
- * One row per (workspace, endpoint, minute bucket), with a counter.
136
- * Each request upserts the row and atomically increments `count`, so N
137
- * concurrent requests observe 1..N and exactly `limit` are admitted.
138
- *
139
- * An earlier version used ON CONFLICT DO NOTHING, which admitted
140
- * exactly ONE request per minute on every plan — the per-plan limit was
141
- * never consulted. See packages/billing/src/rate-limit.ts.
142
- *
143
- * Old buckets are deleted by the billing-maintenance cron.
144
- *
145
- * Database-backed rate limiting is the correct choice for <10K users
146
- * (no Redis dependency, per architecture decisions).
125
+ * One row per (workspace, endpoint, minute bucket). Each request upserts the
126
+ * row and atomically increments `count`, so N concurrent requests observe
127
+ * 1..N and exactly `limit` are admitted. Old buckets are deleted by the
128
+ * billing-maintenance job.
147
129
  */
148
130
  export const rateLimitEntries = pgTable("rate_limit_entries", {
149
131
  id: text("id").primaryKey(),
@@ -161,15 +143,9 @@ export const rateLimitEntries = pgTable("rate_limit_entries", {
161
143
  unique("rate_limit_entries_unique_bucket_idx").on(table.workspaceId, table.endpoint, table.minuteBucket),
162
144
  ]);
163
145
  /**
164
- * Notification History table - Tracks sent notifications for deduplication
165
- *
166
- * Records each notification sent (quota warnings, trial alerts) with a
167
- * period-based deduplication key. The unique constraint on
168
- * (workspaceId, type, periodKey) prevents sending the same notification
169
- * twice in the same billing period.
170
- *
171
- * Phase 14 will update the channel from "console" to "email" and use
172
- * Resend for actual delivery. For now, notifications are logged to console.
146
+ * Sent quota and trial notifications. The unique constraint on
147
+ * (workspaceId, type, periodKey) keeps one notification from being sent
148
+ * twice in a billing period.
173
149
  */
174
150
  export const notificationHistory = pgTable("notification_history", {
175
151
  id: text("id").primaryKey(),
@@ -179,39 +155,30 @@ export const notificationHistory = pgTable("notification_history", {
179
155
  type: text("type").notNull(), // "quota_warning_80", "quota_warning_100", "trial_warning_20", "trial_depleted"
180
156
  periodKey: text("period_key").notNull(), // "2026-02" for monthly, "trial" for one-time
181
157
  sentAt: timestamp("sent_at").notNull().defaultNow(),
182
- channel: text("channel").notNull().default("console"), // "console" now, "email" in Phase 14
158
+ channel: text("channel").notNull().default("console"), // "console" | "email"
183
159
  metadata: text("metadata"), // JSON string for additional context
184
160
  }, (table) => [
185
161
  unique("notification_history_dedup_unique").on(table.workspaceId, table.type, table.periodKey),
186
162
  index("notification_history_workspace_id_idx").on(table.workspaceId),
187
163
  ]);
188
164
  /**
189
- * User Quotas table — per-user, per-action usage counters.
190
- *
191
- * One row per user (not per period — one-time payment model). Counters
192
- * live in the `usage` JSONB map and increment atomically in SQL, so a
193
- * quota check is O(1) with no SUM over usage_records.
165
+ * Per-user, per-action usage counters, one row per user and workspace (not
166
+ * per period). Counters live in the `usage` JSONB map and increment
167
+ * atomically in SQL, so a quota check is O(1).
194
168
  */
195
169
  export const userQuotas = pgTable("user_quotas", {
196
170
  id: text("id").primaryKey(),
197
171
  userId: text("user_id")
198
172
  .notNull()
199
- .unique()
200
173
  .references(() => users.id, { onDelete: "cascade" }),
201
174
  workspaceId: text("workspace_id")
202
175
  .notNull()
203
176
  .references(() => organization.id, { onDelete: "cascade" }),
204
177
  plan: text("plan").notNull().default("free"), // free | standard | pro
205
178
  /**
206
- * Per-action counter map, keyed by the product's own action slugs
207
- * (`usage["chat"] = 42`). This is the only counter storage.
208
- *
209
- * Three career-specific integer columns — chat_messages_used,
210
- * assessments_used, reports_used — used to sit beside it, written
211
- * by every product and read in preference to this map. Migration
212
- * 0038 backfilled them into the map and dropped them: a public
213
- * schema naming one vertical's actions meant no other vertical
214
- * could add a counter without a migration to Intelligo (ADR-0004).
179
+ * Per-action counters keyed by the product's own action slugs
180
+ * (`usage["chat"] = 42`), so a product adds a counter without a
181
+ * migration.
215
182
  */
216
183
  usage: jsonb("usage").notNull().default({}),
217
184
  totalCostUsd: real("total_cost_usd").notNull().default(0),
@@ -220,5 +187,8 @@ export const userQuotas = pgTable("user_quotas", {
220
187
  }, (table) => [
221
188
  index("user_quotas_user_id_idx").on(table.userId),
222
189
  index("user_quotas_workspace_id_idx").on(table.workspaceId),
190
+ // Unique per (user, workspace), not per user: a user in a paid and a
191
+ // free workspace must not share one plan and one set of counters.
192
+ unique("user_quotas_user_workspace_unique").on(table.userId, table.workspaceId),
223
193
  ]);
224
194
  //# sourceMappingURL=usage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/db/schema/usage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/db/schema/usage.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,10 @@
1
- /**
2
- * Database Connection Validation
3
- *
4
- * Validates that the database is connected and tables exist before allowing the app to start.
5
- */
6
1
  export interface DatabaseValidationResult {
7
2
  isConnected: boolean;
8
3
  tablesExist: boolean;
9
4
  error?: string;
10
5
  }
11
- /**
12
- * Check if database connection is valid and tables exist
13
- */
6
+ /** Checks that the database answers and the four auth tables exist. */
14
7
  export declare function validateDatabaseConnection(): Promise<DatabaseValidationResult>;
15
- /**
16
- * Validate database or throw error (for startup validation)
17
- */
8
+ /** Startup check: throws with setup instructions when validation fails. */
18
9
  export declare function requireDatabaseConnection(): Promise<void>;
19
10
  //# sourceMappingURL=validate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/db/validate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,wBAAwB,CAAC,CA8BpF;AAED;;GAEG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAqB/D"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/db/validate.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,uEAAuE;AACvE,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,wBAAwB,CAAC,CA4BpF;AAED,2EAA2E;AAC3E,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAqB/D"}
@@ -1,18 +1,9 @@
1
- /**
2
- * Database Connection Validation
3
- *
4
- * Validates that the database is connected and tables exist before allowing the app to start.
5
- */
6
- import { db } from "./client";
1
+ import { db } from "./client.js";
7
2
  import { sql } from "drizzle-orm";
8
- /**
9
- * Check if database connection is valid and tables exist
10
- */
3
+ /** Checks that the database answers and the four auth tables exist. */
11
4
  export async function validateDatabaseConnection() {
12
5
  try {
13
- // Test database connection
14
6
  await db.execute(sql `SELECT 1`);
15
- // Check if auth tables exist
16
7
  const result = await db.execute(sql `
17
8
  SELECT COUNT(*) as table_count
18
9
  FROM information_schema.tables
@@ -26,7 +17,7 @@ export async function validateDatabaseConnection() {
26
17
  tablesExist,
27
18
  error: tablesExist
28
19
  ? undefined
29
- : "Auth tables do not exist. Run 'pnpm --filter @intelligo-dev/core db:push' to create them.",
20
+ : "Auth tables do not exist. Run 'intelligo migrate' to apply the framework's migration chain.",
30
21
  };
31
22
  }
32
23
  catch (error) {
@@ -37,9 +28,7 @@ export async function validateDatabaseConnection() {
37
28
  };
38
29
  }
39
30
  }
40
- /**
41
- * Validate database or throw error (for startup validation)
42
- */
31
+ /** Startup check: throws with setup instructions when validation fails. */
43
32
  export async function requireDatabaseConnection() {
44
33
  const result = await validateDatabaseConnection();
45
34
  if (!result.isConnected) {
@@ -50,8 +39,8 @@ export async function requireDatabaseConnection() {
50
39
  if (!result.tablesExist) {
51
40
  throw new Error(`❌ Database tables do not exist.\n\n` +
52
41
  `Run the following commands to set up the database:\n` +
53
- ` 1. pnpm --filter @intelligo-dev/core db:push\n` +
54
- ` 2. pnpm --filter @intelligo-dev/core db:seed (optional - creates admin user)`);
42
+ ` 1. intelligo migrate (applies the framework's migration chain)\n` +
43
+ ` 2. drizzle-kit migrate (your own tables, if any)`);
55
44
  }
56
45
  console.log("✓ Database connection validated");
57
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/db/validate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAQlC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,IAAI,CAAC;QACH,2BAA2B;QAC3B,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA,UAAU,CAAC,CAAC;QAEhC,6BAA6B;QAC7B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA;;;;;KAKlC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,UAAU,KAAK,CAAC,CAAC;QAErC,OAAO;YACL,WAAW,EAAE,IAAI;YACjB,WAAW;YACX,KAAK,EAAE,WAAW;gBAChB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,2FAA2F;SAChG,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,WAAW,EAAE,KAAK;YAClB,WAAW,EAAE,KAAK;YAClB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;SACzE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,MAAM,GAAG,MAAM,0BAA0B,EAAE,CAAC;IAElD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,iCAAiC,MAAM,CAAC,KAAK,MAAM;YACjD,sDAAsD;YACtD,oDAAoD,CACvD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,qCAAqC;YACnC,sDAAsD;YACtD,kDAAkD;YAClD,gFAAgF,CACnF,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/db/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAQlC,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA,UAAU,CAAC,CAAC;QAEhC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA;;;;;KAKlC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,UAAU,KAAK,CAAC,CAAC;QAErC,OAAO;YACL,WAAW,EAAE,IAAI;YACjB,WAAW;YACX,KAAK,EAAE,WAAW;gBAChB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,6FAA6F;SAClG,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,WAAW,EAAE,KAAK;YAClB,WAAW,EAAE,KAAK;YAClB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;SACzE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,MAAM,GAAG,MAAM,0BAA0B,EAAE,CAAC;IAElD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,iCAAiC,MAAM,CAAC,KAAK,MAAM;YACjD,sDAAsD;YACtD,oDAAoD,CACvD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,qCAAqC;YACnC,sDAAsD;YACtD,sEAAsE;YACtE,oDAAoD,CACvD,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;AACjD,CAAC"}
@@ -1,37 +1,14 @@
1
1
  /**
2
- * Workspace-Scoped Query Helpers (WORK-06: Data Isolation)
3
- *
4
- * DATA ISOLATION MODEL:
5
- * - Phase 10 workspace/team operations use Better-Auth organization plugin API exclusively.
6
- * These APIs provide inherent data isolation — all operations are scoped to the
7
- * authenticated user's session and active organization. No raw DB queries needed.
8
- *
9
- * Better-Auth API isolation guarantees:
10
- * - auth.api.listOrganizations() — returns ONLY organizations the authenticated user belongs to
11
- * - auth.api.getFullOrganization() — returns ONLY the active organization (set via session)
12
- * - auth.api.createInvitation() — requires organizationId from requireWorkspace() (authenticated context)
13
- * - auth.api.removeMember() — scoped to the organizationId from requireWorkspace()
14
- * - All other org API methods operate on the authenticated user's session context
15
- *
16
- * - Future phases (11+) will add product-specific tables (conversations, knowledge_bases,
17
- * usage_logs, etc.) that contain a workspaceId column. ALL queries on these tables
18
- * MUST use the helpers below to enforce workspace-scoped data isolation.
19
- *
20
- * USAGE PATTERN (for future phases):
21
- * import { withWorkspaceFilter } from "@intelligo-dev/core/db/workspace-queries";
22
- * import { requireWorkspace } from "@intelligo-dev/auth";
23
- *
24
- * const { workspace } = await requireWorkspace();
25
- * const conversations = await db
26
- * .select()
27
- * .from(conversationsTable)
28
- * .where(withWorkspaceFilter(conversationsTable.workspaceId, workspace.id));
2
+ * Workspace scoping for tables with a `workspaceId` column. Every query on
3
+ * such a table filters by the workspace resolved from `requireWorkspace()`.
4
+ * Organization, member and invitation rows go through the Better-Auth API,
5
+ * which scopes them to the caller's session.
29
6
  */
30
7
  import { type SQL } from "drizzle-orm";
31
8
  import type { PgColumn } from "drizzle-orm/pg-core";
32
9
  /**
33
10
  * Creates a workspace-scoped WHERE condition for any table with a workspaceId column.
34
- * Use this in all custom Drizzle queries to enforce data isolation (WORK-06).
11
+ * Use it in every custom Drizzle query to enforce workspace isolation.
35
12
  *
36
13
  * @param workspaceIdColumn - The workspaceId column from the table schema
37
14
  * @param workspaceId - The active workspace ID from requireWorkspace()
@@ -49,7 +26,6 @@ import type { PgColumn } from "drizzle-orm/pg-core";
49
26
  export declare function workspaceEq(workspaceIdColumn: PgColumn, workspaceId: string): SQL;
50
27
  /**
51
28
  * Combines a workspace scope condition with additional WHERE conditions.
52
- * Convenience helper to ensure workspaceId is always the first filter.
53
29
  *
54
30
  * @param workspaceIdColumn - The workspaceId column from the table schema
55
31
  * @param workspaceId - The active workspace ID from requireWorkspace()
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-queries.d.ts","sourceRoot":"","sources":["../../src/db/workspace-queries.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAW,KAAK,GAAG,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CACzB,iBAAiB,EAAE,QAAQ,EAC3B,WAAW,EAAE,MAAM,GAClB,GAAG,CAEL;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,mBAAmB,CACjC,iBAAiB,EAAE,QAAQ,EAC3B,WAAW,EAAE,MAAM,EACnB,GAAG,oBAAoB,EAAE,GAAG,EAAE,GAC7B,GAAG,CAEL"}
1
+ {"version":3,"file":"workspace-queries.d.ts","sourceRoot":"","sources":["../../src/db/workspace-queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAW,KAAK,GAAG,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CACzB,iBAAiB,EAAE,QAAQ,EAC3B,WAAW,EAAE,MAAM,GAClB,GAAG,CAEL;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,mBAAmB,CACjC,iBAAiB,EAAE,QAAQ,EAC3B,WAAW,EAAE,MAAM,EACnB,GAAG,oBAAoB,EAAE,GAAG,EAAE,GAC7B,GAAG,CAEL"}
@@ -1,36 +1,13 @@
1
1
  /**
2
- * Workspace-Scoped Query Helpers (WORK-06: Data Isolation)
3
- *
4
- * DATA ISOLATION MODEL:
5
- * - Phase 10 workspace/team operations use Better-Auth organization plugin API exclusively.
6
- * These APIs provide inherent data isolation — all operations are scoped to the
7
- * authenticated user's session and active organization. No raw DB queries needed.
8
- *
9
- * Better-Auth API isolation guarantees:
10
- * - auth.api.listOrganizations() — returns ONLY organizations the authenticated user belongs to
11
- * - auth.api.getFullOrganization() — returns ONLY the active organization (set via session)
12
- * - auth.api.createInvitation() — requires organizationId from requireWorkspace() (authenticated context)
13
- * - auth.api.removeMember() — scoped to the organizationId from requireWorkspace()
14
- * - All other org API methods operate on the authenticated user's session context
15
- *
16
- * - Future phases (11+) will add product-specific tables (conversations, knowledge_bases,
17
- * usage_logs, etc.) that contain a workspaceId column. ALL queries on these tables
18
- * MUST use the helpers below to enforce workspace-scoped data isolation.
19
- *
20
- * USAGE PATTERN (for future phases):
21
- * import { withWorkspaceFilter } from "@intelligo-dev/core/db/workspace-queries";
22
- * import { requireWorkspace } from "@intelligo-dev/auth";
23
- *
24
- * const { workspace } = await requireWorkspace();
25
- * const conversations = await db
26
- * .select()
27
- * .from(conversationsTable)
28
- * .where(withWorkspaceFilter(conversationsTable.workspaceId, workspace.id));
2
+ * Workspace scoping for tables with a `workspaceId` column. Every query on
3
+ * such a table filters by the workspace resolved from `requireWorkspace()`.
4
+ * Organization, member and invitation rows go through the Better-Auth API,
5
+ * which scopes them to the caller's session.
29
6
  */
30
7
  import { eq, and } from "drizzle-orm";
31
8
  /**
32
9
  * Creates a workspace-scoped WHERE condition for any table with a workspaceId column.
33
- * Use this in all custom Drizzle queries to enforce data isolation (WORK-06).
10
+ * Use it in every custom Drizzle query to enforce workspace isolation.
34
11
  *
35
12
  * @param workspaceIdColumn - The workspaceId column from the table schema
36
13
  * @param workspaceId - The active workspace ID from requireWorkspace()
@@ -50,7 +27,6 @@ export function workspaceEq(workspaceIdColumn, workspaceId) {
50
27
  }
51
28
  /**
52
29
  * Combines a workspace scope condition with additional WHERE conditions.
53
- * Convenience helper to ensure workspaceId is always the first filter.
54
30
  *
55
31
  * @param workspaceIdColumn - The workspaceId column from the table schema
56
32
  * @param workspaceId - The active workspace ID from requireWorkspace()
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-queries.js","sourceRoot":"","sources":["../../src/db/workspace-queries.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,EAAE,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;AAGhD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,WAAW,CACzB,iBAA2B,EAC3B,WAAmB;IAEnB,OAAO,EAAE,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,mBAAmB,CACjC,iBAA2B,EAC3B,WAAmB,EACnB,GAAG,oBAA2B;IAE9B,OAAO,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,WAAW,CAAC,EAAE,GAAG,oBAAoB,CAAE,CAAC;AAC3E,CAAC"}
1
+ {"version":3,"file":"workspace-queries.js","sourceRoot":"","sources":["../../src/db/workspace-queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,EAAE,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;AAGhD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,WAAW,CACzB,iBAA2B,EAC3B,WAAmB;IAEnB,OAAO,EAAE,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,mBAAmB,CACjC,iBAA2B,EAC3B,WAAmB,EACnB,GAAG,oBAA2B;IAE9B,OAAO,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,WAAW,CAAC,EAAE,GAAG,oBAAoB,CAAE,CAAC;AAC3E,CAAC"}
@@ -1,22 +1,15 @@
1
1
  /**
2
- * Document title classifier registry.
3
- *
4
- * Vertical product packages register their title patterns here; the
5
- * document persistence API (./service.ts) uses the same registry to
6
- * derive agent labels and the "report" filter. Kept in its own module
7
- * with zero imports so client-safe code and tests can load it without
8
- * dragging in the server-only persistence chain (db).
9
- *
10
- * Ported from @intelligo-dev/agents/documents/classifier (ADR-0009) —
11
- * unchanged.
2
+ * Document title classifier. Products register their title patterns here;
3
+ * the documents service uses them to derive agent labels and the "report"
4
+ * filter. Kept free of the db import so client code and tests can load it.
12
5
  */
13
6
  export type DocumentPatternEntry = {
14
7
  /** Stable product slug — same one used across product configs. */
15
8
  productSlug: string;
16
9
  /** Human-readable agent label rendered in the documents UI. */
17
10
  agentLabel: string;
18
- /** Case-insensitive substring patterns; document matches if its
19
- * lowercased title contains ANY of these. */
11
+ /** Case-insensitive substring patterns; a document matches when its
12
+ * title contains ANY of these, whatever the case of either. */
20
13
  patterns: string[];
21
14
  };
22
15
  export declare function registerDocumentPatterns(entry: DocumentPatternEntry): void;
@@ -1 +1 @@
1
- {"version":3,"file":"classifier.d.ts","sourceRoot":"","sources":["../../src/documents/classifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,oBAAoB,GAAG;IACjC,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB;kDAC8C;IAC9C,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAIF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAE1E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG;IACpD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB,CAQA;AAED,sFAAsF;AACtF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAKT;AAED,wBAAgB,8BAA8B,IAAI,SAAS,oBAAoB,EAAE,CAEhF;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD"}
1
+ {"version":3,"file":"classifier.d.ts","sourceRoot":"","sources":["../../src/documents/classifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,MAAM,oBAAoB,GAAG;IACjC,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB;oEACgE;IAChE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAUF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAE1E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG;IACpD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB,CAQA;AAED,sFAAsF;AACtF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAKT;AAED,wBAAgB,8BAA8B,IAAI,SAAS,oBAAoB,EAAE,CAEhF;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD"}
@@ -1,23 +1,23 @@
1
1
  /**
2
- * Document title classifier registry.
3
- *
4
- * Vertical product packages register their title patterns here; the
5
- * document persistence API (./service.ts) uses the same registry to
6
- * derive agent labels and the "report" filter. Kept in its own module
7
- * with zero imports so client-safe code and tests can load it without
8
- * dragging in the server-only persistence chain (db).
9
- *
10
- * Ported from @intelligo-dev/agents/documents/classifier (ADR-0009) —
11
- * unchanged.
2
+ * Document title classifier. Products register their title patterns here;
3
+ * the documents service uses them to derive agent labels and the "report"
4
+ * filter. Kept free of the db import so client code and tests can load it.
12
5
  */
13
- const registry = [];
6
+ import { createRegistry } from "../registry.js";
7
+ /**
8
+ * Keyed by product slug rather than appended, so a composition root that
9
+ * runs twice (or two copies of it) replaces the entry instead of matching
10
+ * the same patterns twice. Insertion order decides first-match
11
+ * classification.
12
+ */
13
+ const registry = createRegistry("core/document-patterns");
14
14
  export function registerDocumentPatterns(entry) {
15
- registry.push(entry);
15
+ registry.set(entry.productSlug, entry);
16
16
  }
17
17
  export function classifyDocumentTitle(title) {
18
18
  const lower = title.toLowerCase();
19
- for (const entry of registry) {
20
- if (entry.patterns.some((p) => lower.includes(p))) {
19
+ for (const entry of registry.values()) {
20
+ if (entry.patterns.some((p) => lower.includes(p.toLowerCase()))) {
21
21
  return { productSlug: entry.productSlug, agentLabel: entry.agentLabel };
22
22
  }
23
23
  }
@@ -33,9 +33,9 @@ export function isProductDocument(title, productSlug) {
33
33
  return true;
34
34
  }
35
35
  export function listRegisteredDocumentPatterns() {
36
- return registry;
36
+ return [...registry.values()];
37
37
  }
38
38
  export function clearDocumentPatternRegistry() {
39
- registry.length = 0;
39
+ registry.clear();
40
40
  }
41
41
  //# sourceMappingURL=classifier.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../src/documents/classifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAYH,MAAM,QAAQ,GAA2B,EAAE,CAAC;AAE5C,MAAM,UAAU,wBAAwB,CAAC,KAA2B;IAClE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAa;IAIjD,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;QAC1E,CAAC;IACH,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AAC3D,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,WAAoB;IAEpB,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC9D,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,WAAW;QAAE,OAAO,OAAO,KAAK,WAAW,CAAC;IAChD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,8BAA8B;IAC5C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../src/documents/classifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAY7C;;;;;GAKG;AACH,MAAM,QAAQ,GAAG,cAAc,CAAuB,wBAAwB,CAAC,CAAC;AAEhF,MAAM,UAAU,wBAAwB,CAAC,KAA2B;IAClE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAa;IAIjD,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC;YAChE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;QAC1E,CAAC;IACH,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AAC3D,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,WAAoB;IAEpB,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC9D,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,WAAW;QAAE,OAAO,OAAO,KAAK,WAAW,CAAC;IAChD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,8BAA8B;IAC5C,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,QAAQ,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC"}
@@ -1,14 +1,6 @@
1
1
  /**
2
- * Document service error type.
3
- *
4
- * Mirrors `@intelligo-dev/auth`'s `WorkspaceServiceError` exactly (see that
5
- * file's doc comment for the full rationale): the documents service
6
- * (./service.ts) throws this for every failure it recognizes rather
7
- * than returning an ad-hoc `{ success, error }` envelope — that
8
- * shaping is a transport concern (a Server Action, a route handler)
9
- * and belongs one layer up, alongside revalidatePath/Sentry/i18n, none
10
- * of which this package may depend on (core's dependency allowlist is
11
- * empty — see tests/architecture/dependency-direction.test.ts).
2
+ * Thrown by the documents service for every failure it recognizes. Shaping
3
+ * it into a transport envelope is the caller's job.
12
4
  */
13
5
  /**
14
6
  * - `not_found` — no document (or no version of it) exists at the
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/documents/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;GASG;AACH,MAAM,MAAM,wBAAwB,GAChC,WAAW,GACX,WAAW,GACX,eAAe,GACf,gBAAgB,CAAC;AAErB,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IAIxC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;gBAGvB,IAAI,EAAE,wBAAwB,EAC9B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAUhC;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,oBAAoB,CAE/B"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/documents/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;GASG;AACH,MAAM,MAAM,wBAAwB,GAClC,WAAW,GAAG,WAAW,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAEjE,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IAGxC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;gBAGvB,IAAI,EAAE,wBAAwB,EAC9B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAUhC;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,oBAAoB,CAE/B"}