@talkpilot/core-db 1.3.46 → 1.3.48

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 (242) hide show
  1. package/.cursor/rules/development.mdc +65 -65
  2. package/AGENTS.md +49 -49
  3. package/DEVELOPMENT.md +141 -141
  4. package/README.md +777 -747
  5. package/dist/talkpilot/clientsConfig/clientsConfig.types.d.ts +1 -0
  6. package/dist/talkpilot/clientsConfig/clientsConfig.types.d.ts.map +1 -1
  7. package/dist/websitalk/scanResources/scanResources.getters.d.ts.map +1 -1
  8. package/dist/websitalk/scanResources/scanResources.getters.js +3 -2
  9. package/dist/websitalk/scanResources/scanResources.getters.js.map +1 -1
  10. package/dist/websitalk/scanResources/scanResources.utils.d.ts +1 -0
  11. package/dist/websitalk/scanResources/scanResources.utils.d.ts.map +1 -1
  12. package/dist/websitalk/scanResources/scanResources.utils.js +3 -1
  13. package/dist/websitalk/scanResources/scanResources.utils.js.map +1 -1
  14. package/jest.config.js +20 -20
  15. package/package.json +46 -46
  16. package/src/__tests__/setup.ts +20 -20
  17. package/src/bulkWrite/__tests__/bulkWrite.spec.ts +65 -65
  18. package/src/bulkWrite/bulkWrite.ops.ts +45 -45
  19. package/src/bulkWrite/bulkWrite.types.ts +4 -4
  20. package/src/bulkWrite/index.ts +2 -2
  21. package/src/config.ts +9 -9
  22. package/src/configuration/index.ts +17 -17
  23. package/src/configuration/internalModels/index.ts +3 -3
  24. package/src/configuration/internalModels/internalModels.constants.ts +1 -1
  25. package/src/configuration/internalModels/internalModels.getters.ts +33 -33
  26. package/src/configuration/internalModels/internalModels.types.ts +12 -12
  27. package/src/configuration/models/index.ts +25 -25
  28. package/src/configuration/models/models.constants.ts +13 -13
  29. package/src/configuration/models/models.getters.ts +53 -53
  30. package/src/configuration/models/models.types.ts +79 -79
  31. package/src/configuration/mongodb-client.ts +62 -62
  32. package/src/configuration/prompts/index.ts +2 -2
  33. package/src/configuration/prompts/prompts.getters.ts +49 -49
  34. package/src/configuration/prompts/prompts.types.ts +11 -11
  35. package/src/connection.ts +81 -81
  36. package/src/index.ts +46 -46
  37. package/src/municipal/__tests__/validation.spec.ts +62 -62
  38. package/src/municipal/cities/cities.getters.ts +50 -50
  39. package/src/municipal/cities/cities.types.ts +11 -11
  40. package/src/municipal/cities/index.ts +2 -2
  41. package/src/municipal/departmentsSubjects/__tests__/departmentsSubjects.spec.ts +272 -272
  42. package/src/municipal/departmentsSubjects/departmentsSubjects.getters.ts +317 -317
  43. package/src/municipal/departmentsSubjects/departmentsSubjects.types.ts +73 -73
  44. package/src/municipal/departmentsSubjects/index.ts +9 -9
  45. package/src/municipal/index.ts +22 -22
  46. package/src/municipal/mongodb-client.ts +61 -61
  47. package/src/municipal/muniIssues/__tests__/muniIssues.setters.spec.ts +94 -94
  48. package/src/municipal/muniIssues/__tests__/muniIssues.setup.spec.ts +92 -92
  49. package/src/municipal/muniIssues/index.ts +17 -17
  50. package/src/municipal/muniIssues/muniIssues.constants.ts +18 -18
  51. package/src/municipal/muniIssues/muniIssues.getters.ts +24 -24
  52. package/src/municipal/muniIssues/muniIssues.schema.ts +66 -66
  53. package/src/municipal/muniIssues/muniIssues.setters.ts +24 -24
  54. package/src/municipal/muniIssues/muniIssues.setup.ts +65 -65
  55. package/src/municipal/muniIssues/muniIssues.types.ts +37 -37
  56. package/src/municipal/streets/__tests__/streets.spec.ts +253 -253
  57. package/src/municipal/streets/index.ts +2 -2
  58. package/src/municipal/streets/streets.getters.ts +140 -140
  59. package/src/municipal/streets/streets.types.ts +19 -19
  60. package/src/municipal/systemInstructions/__tests__/getters.spec.ts +113 -113
  61. package/src/municipal/systemInstructions/__tests__/setters.spec.ts +274 -274
  62. package/src/municipal/systemInstructions/index.ts +7 -7
  63. package/src/municipal/systemInstructions/instructions.getters.ts +57 -57
  64. package/src/municipal/systemInstructions/instructions.setters.ts +119 -119
  65. package/src/municipal/systemInstructions/instructions.types.ts +30 -30
  66. package/src/municipal/tickets/__tests__/tickets.getters.spec.ts +30 -30
  67. package/src/municipal/tickets/__tests__/tickets.statistics.spec.ts +99 -99
  68. package/src/municipal/tickets/index.ts +9 -9
  69. package/src/municipal/tickets/tickets.constants.ts +8 -8
  70. package/src/municipal/tickets/tickets.getters.ts +121 -121
  71. package/src/municipal/tickets/tickets.statistics.aggregation.ts +110 -110
  72. package/src/municipal/tickets/tickets.statistics.getters.ts +145 -145
  73. package/src/municipal/tickets/tickets.types.ts +54 -54
  74. package/src/municipal/utils/types.ts +11 -11
  75. package/src/talkpilot/__tests__/db.spec.ts +38 -38
  76. package/src/talkpilot/__tests__/mongodb-client.spec.ts +18 -18
  77. package/src/talkpilot/__tests__/validation.spec.ts +68 -68
  78. package/src/talkpilot/agents/__tests__/agents.getters.spec.ts +29 -29
  79. package/src/talkpilot/agents/agents.getters.ts +34 -34
  80. package/src/talkpilot/agents/agents.types.ts +14 -14
  81. package/src/talkpilot/agents/index.ts +2 -2
  82. package/src/talkpilot/backgroundToolResults/__tests__/backgroundToolResults.getters.spec.ts +147 -147
  83. package/src/talkpilot/backgroundToolResults/backgroundToolResults.getters.ts +65 -65
  84. package/src/talkpilot/backgroundToolResults/backgroundToolResults.types.ts +23 -23
  85. package/src/talkpilot/backgroundToolResults/index.ts +2 -2
  86. package/src/talkpilot/calls/__tests__/callStats.utils.spec.ts +128 -128
  87. package/src/talkpilot/calls/__tests__/calls.dashboard.spec.ts +229 -229
  88. package/src/talkpilot/calls/__tests__/calls.spec.ts +471 -471
  89. package/src/talkpilot/calls/__tests__/calls.statistics.spec.ts +483 -483
  90. package/src/talkpilot/calls/calls.constants.ts +49 -49
  91. package/src/talkpilot/calls/calls.getters.ts +277 -277
  92. package/src/talkpilot/calls/calls.statistics.getters.ts +668 -668
  93. package/src/talkpilot/calls/calls.statistics.types.ts +48 -48
  94. package/src/talkpilot/calls/calls.types.ts +149 -149
  95. package/src/talkpilot/calls/dashboard/calls.dashboard.ts +295 -295
  96. package/src/talkpilot/calls/dashboard/calls.dashboard.types.ts +57 -57
  97. package/src/talkpilot/calls/index.ts +6 -6
  98. package/src/talkpilot/clientAudioBuffers/__tests__/clientAudioBuffer.getters.spec.ts +160 -160
  99. package/src/talkpilot/clientAudioBuffers/clientAudioBuffer.getters.ts +117 -117
  100. package/src/talkpilot/clientAudioBuffers/clientsAudioBuffers.types.ts +25 -25
  101. package/src/talkpilot/clientAudioBuffers/index.ts +2 -2
  102. package/src/talkpilot/clients/__tests__/clients.quota.spec.ts +123 -123
  103. package/src/talkpilot/clients/clients.getters.ts +16 -16
  104. package/src/talkpilot/clients/clients.quota.getters.ts +119 -119
  105. package/src/talkpilot/clients/clients.quota.types.ts +27 -27
  106. package/src/talkpilot/clients/clients.types.ts +18 -18
  107. package/src/talkpilot/clients/index.ts +4 -4
  108. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.getters.spec.ts +423 -423
  109. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +212 -212
  110. package/src/talkpilot/clientsConfig/clientsConfig.constants.ts +2 -2
  111. package/src/talkpilot/clientsConfig/clientsConfig.getters.ts +247 -247
  112. package/src/talkpilot/clientsConfig/clientsConfig.types.ts +136 -135
  113. package/src/talkpilot/clientsConfig/index.ts +3 -3
  114. package/src/talkpilot/contextNotes/__tests__/contextNotes.getters.spec.ts +217 -217
  115. package/src/talkpilot/contextNotes/contextNotes.getters.ts +85 -85
  116. package/src/talkpilot/contextNotes/contextNotes.types.ts +20 -20
  117. package/src/talkpilot/contextNotes/index.ts +2 -2
  118. package/src/talkpilot/flows/__tests__/flows.schema.spec.ts +99 -99
  119. package/src/talkpilot/flows/flows.getter.ts +14 -14
  120. package/src/talkpilot/flows/flows.schema.ts +155 -155
  121. package/src/talkpilot/flows/flows.types.ts +189 -189
  122. package/src/talkpilot/flows/index.ts +2 -2
  123. package/src/talkpilot/groups/__tests__/groups.spec.ts +90 -90
  124. package/src/talkpilot/groups/__tests__/phone.utils.spec.ts +32 -32
  125. package/src/talkpilot/groups/groups.getters.ts +30 -30
  126. package/src/talkpilot/groups/groups.types.ts +29 -29
  127. package/src/talkpilot/groups/index.ts +3 -3
  128. package/src/talkpilot/groups/phone.utils.ts +46 -46
  129. package/src/talkpilot/index.ts +31 -31
  130. package/src/talkpilot/leads/index.ts +2 -2
  131. package/src/talkpilot/leads/leads.getter.ts +6 -6
  132. package/src/talkpilot/leads/leads.schema.ts +33 -33
  133. package/src/talkpilot/leads/leads.types.ts +20 -20
  134. package/src/talkpilot/mongodb-client.ts +78 -78
  135. package/src/talkpilot/phone_numbers/__tests__/phone_numbers.spec.ts +282 -282
  136. package/src/talkpilot/phone_numbers/index.ts +2 -2
  137. package/src/talkpilot/phone_numbers/phone_numbers.getter.ts +176 -176
  138. package/src/talkpilot/phone_numbers/phone_numbers.schema.ts +17 -17
  139. package/src/talkpilot/phone_numbers/phone_numbers.types.ts +30 -30
  140. package/src/talkpilot/plans/__tests__/plans.spec.ts +70 -70
  141. package/src/talkpilot/plans/index.ts +2 -2
  142. package/src/talkpilot/plans/plans.getters.ts +132 -132
  143. package/src/talkpilot/plans/plans.types.ts +89 -89
  144. package/src/talkpilot/products/__tests__/products.getters.spec.ts +44 -44
  145. package/src/talkpilot/products/index.ts +2 -2
  146. package/src/talkpilot/products/products.getters.ts +12 -12
  147. package/src/talkpilot/products/products.types.ts +9 -9
  148. package/src/talkpilot/results/index.ts +7 -7
  149. package/src/talkpilot/results/results.getter.ts +39 -39
  150. package/src/talkpilot/results/results.schema.ts +25 -25
  151. package/src/talkpilot/results/results.types.ts +34 -34
  152. package/src/talkpilot/retry_analyze/__tests__/retryAnalyze.getters.spec.ts +156 -156
  153. package/src/talkpilot/retry_analyze/index.ts +2 -2
  154. package/src/talkpilot/retry_analyze/retryAnalyze.getters.ts +84 -84
  155. package/src/talkpilot/retry_analyze/retryAnalyze.types.ts +13 -13
  156. package/src/talkpilot/sessions/__tests__/sessions.spec.ts +147 -147
  157. package/src/talkpilot/sessions/index.ts +2 -2
  158. package/src/talkpilot/sessions/sessions.getter.ts +92 -92
  159. package/src/talkpilot/sessions/sessions.schema.ts +34 -34
  160. package/src/talkpilot/sessions/sessions.types.ts +30 -30
  161. package/src/talkpilot/subscriptions/__tests__/subscriptions.getters.utils.spec.ts +45 -45
  162. package/src/talkpilot/subscriptions/index.ts +3 -3
  163. package/src/talkpilot/subscriptions/subscriptions.getters.ts +146 -146
  164. package/src/talkpilot/subscriptions/subscriptions.getters.utils.ts +33 -33
  165. package/src/talkpilot/subscriptions/subscriptions.types.ts +66 -66
  166. package/src/talkpilot/utils/__tests__/query.utils.spec.ts +49 -49
  167. package/src/talkpilot/utils/query.utils.ts +21 -21
  168. package/src/test-utils/db-utils.ts +33 -33
  169. package/src/test-utils/factories/index.ts +18 -18
  170. package/src/test-utils/factories/municipal/cities.ts +16 -16
  171. package/src/test-utils/factories/municipal/departmentsSubjects.ts +37 -37
  172. package/src/test-utils/factories/municipal/muniIssues.ts +32 -32
  173. package/src/test-utils/factories/municipal/streets.ts +22 -22
  174. package/src/test-utils/factories/municipal/tickets.ts +39 -39
  175. package/src/test-utils/factories/talkpilot/agents.ts +19 -19
  176. package/src/test-utils/factories/talkpilot/calls.ts +37 -37
  177. package/src/test-utils/factories/talkpilot/clientAudioBuffers.ts +20 -20
  178. package/src/test-utils/factories/talkpilot/clientsConfig.ts +18 -18
  179. package/src/test-utils/factories/talkpilot/contextNotes.ts +40 -40
  180. package/src/test-utils/factories/talkpilot/flows.ts +33 -33
  181. package/src/test-utils/factories/talkpilot/groups.ts +33 -33
  182. package/src/test-utils/factories/talkpilot/phone_numbers.ts +22 -22
  183. package/src/test-utils/factories/talkpilot/sessions.ts +35 -35
  184. package/src/test-utils/factories/websitalk/knowledgeDocuments.ts +29 -29
  185. package/src/test-utils/factories/websitalk/scanResources.ts +26 -26
  186. package/src/test-utils/factories/websitalk/scans.ts +29 -29
  187. package/src/test-utils/factories/websitalk/websiteUrls.ts +17 -17
  188. package/src/utils/date.utils.ts +126 -126
  189. package/src/utils/shared.types.ts +4 -4
  190. package/src/utils/validation.ts +23 -23
  191. package/src/websitalk/index.ts +18 -18
  192. package/src/websitalk/knowledgeDocuments/__tests__/knowledgeDocuments.spec.ts +186 -186
  193. package/src/websitalk/knowledgeDocuments/index.ts +3 -3
  194. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.constants.ts +17 -17
  195. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.getters.ts +78 -78
  196. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.types.ts +62 -62
  197. package/src/websitalk/mongodb-client.ts +61 -61
  198. package/src/websitalk/scanResources/__tests__/scanResources.spec.ts +193 -136
  199. package/src/websitalk/scanResources/index.ts +4 -4
  200. package/src/websitalk/scanResources/scanResources.constants.ts +47 -47
  201. package/src/websitalk/scanResources/scanResources.getters.ts +102 -94
  202. package/src/websitalk/scanResources/scanResources.types.ts +90 -90
  203. package/src/websitalk/scanResources/scanResources.utils.ts +31 -28
  204. package/src/websitalk/scans/__tests__/scans.spec.ts +313 -313
  205. package/src/websitalk/scans/index.ts +4 -4
  206. package/src/websitalk/scans/scans.constants.ts +15 -15
  207. package/src/websitalk/scans/scans.getters.ts +166 -166
  208. package/src/websitalk/scans/scans.types.ts +54 -54
  209. package/src/websitalk/scans/scans.utils.ts +5 -5
  210. package/src/websitalk/websiteUrls/__tests__/websiteUrls.spec.ts +77 -77
  211. package/src/websitalk/websiteUrls/index.ts +2 -2
  212. package/src/websitalk/websiteUrls/websiteUrls.getters.ts +65 -65
  213. package/src/websitalk/websiteUrls/websiteUrls.types.ts +13 -13
  214. package/tsconfig.json +23 -23
  215. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.d.ts +0 -10
  216. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.d.ts.map +0 -1
  217. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.js +0 -15
  218. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.js.map +0 -1
  219. package/dist/municipal/streets/streets.setters.d.ts +0 -10
  220. package/dist/municipal/streets/streets.setters.d.ts.map +0 -1
  221. package/dist/municipal/streets/streets.setters.js +0 -15
  222. package/dist/municipal/streets/streets.setters.js.map +0 -1
  223. package/dist/reconcile/index.d.ts +0 -5
  224. package/dist/reconcile/index.d.ts.map +0 -1
  225. package/dist/reconcile/index.js +0 -21
  226. package/dist/reconcile/index.js.map +0 -1
  227. package/dist/reconcile/reconcile.diff.d.ts +0 -4
  228. package/dist/reconcile/reconcile.diff.d.ts.map +0 -1
  229. package/dist/reconcile/reconcile.diff.js +0 -36
  230. package/dist/reconcile/reconcile.diff.js.map +0 -1
  231. package/dist/reconcile/reconcile.execute.d.ts +0 -7
  232. package/dist/reconcile/reconcile.execute.d.ts.map +0 -1
  233. package/dist/reconcile/reconcile.execute.js +0 -20
  234. package/dist/reconcile/reconcile.execute.js.map +0 -1
  235. package/dist/reconcile/reconcile.ops.d.ts +0 -12
  236. package/dist/reconcile/reconcile.ops.d.ts.map +0 -1
  237. package/dist/reconcile/reconcile.ops.js +0 -24
  238. package/dist/reconcile/reconcile.ops.js.map +0 -1
  239. package/dist/reconcile/reconcile.types.d.ts +0 -32
  240. package/dist/reconcile/reconcile.types.d.ts.map +0 -1
  241. package/dist/reconcile/reconcile.types.js +0 -3
  242. package/dist/reconcile/reconcile.types.js.map +0 -1
@@ -1,65 +1,65 @@
1
- ---
2
- description: Development standards and conventions for the core-db package
3
- globs: src/**/*.ts
4
- alwaysApply: true
5
- ---
6
-
7
- # Development Standards
8
-
9
- This package provides a centralized database layer for multiple domains (TalkPilot and Municipal). Follow these rules to maintain consistency and reliability.
10
-
11
- ## Project Structure
12
-
13
- - **`src/talkpilot/`**: All database logic, types, and getters related to the TalkPilot domain.
14
- - **`src/municipal/`**: All database logic, types, and getters related to the Municipal Data domain.
15
- - **`src/test-utils/`**: Shared testing infrastructure, including factories and database utilities.
16
-
17
- ## Database Connection Pattern
18
-
19
- Each domain is isolated. They have their own `db` instance and must be connected independently.
20
-
21
- ```typescript
22
- import { mongodbClient, municipalDataMongodbClient } from '@talkpilot/core-db';
23
-
24
- // TalkPilot
25
- await mongodbClient.connect(uri);
26
-
27
- // Municipal
28
- await municipalDataMongodbClient.connect(uri);
29
- ```
30
-
31
- ## Creating New Getters
32
-
33
- 1. **Location**: Place getters in the relevant domain folder (e.g., `src/talkpilot/agents/agents.getters.ts`).
34
- 2. **Naming**: Use `find...` for multiple results and `get...ById` for single results.
35
- 3. **Domain isolation**: Always use the `getDb()` function from the current domain's `index.ts`.
36
-
37
- ## Environment Validation
38
-
39
- Always validate configuration "on-demand" within the `connect` methods using the validation utilities.
40
-
41
- ```typescript
42
- import { validateConfig, validateMongoUri } from '../utils/validation';
43
-
44
- async connect(uri?: string) {
45
- const mongodbUri = uri || process.env.MONGO_URI;
46
- validateConfig('MONGO_URI', mongodbUri);
47
- validateMongoUri(mongodbUri!);
48
- // ... connection logic
49
- }
50
- ```
51
-
52
- ## Testing Standards
53
-
54
- 1. **In-Memory DB**: Use `mongodb-memory-server` for all tests. It is automatically initialized in `src/__tests__/setup.ts`.
55
- 2. **Factories**: Use the Fishery factories in `src/test-utils/factories/` to generate test data.
56
- 3. **Organization**: Place tests in a `__tests__` folder within the relevant domain.
57
-
58
- ```typescript
59
- import { createAgent } from '../../../test-utils/factories';
60
-
61
- it('should find agents', async () => {
62
- const agent = createAgent({ name: 'Test' });
63
- // ... test logic
64
- });
65
- ```
1
+ ---
2
+ description: Development standards and conventions for the core-db package
3
+ globs: src/**/*.ts
4
+ alwaysApply: true
5
+ ---
6
+
7
+ # Development Standards
8
+
9
+ This package provides a centralized database layer for multiple domains (TalkPilot and Municipal). Follow these rules to maintain consistency and reliability.
10
+
11
+ ## Project Structure
12
+
13
+ - **`src/talkpilot/`**: All database logic, types, and getters related to the TalkPilot domain.
14
+ - **`src/municipal/`**: All database logic, types, and getters related to the Municipal Data domain.
15
+ - **`src/test-utils/`**: Shared testing infrastructure, including factories and database utilities.
16
+
17
+ ## Database Connection Pattern
18
+
19
+ Each domain is isolated. They have their own `db` instance and must be connected independently.
20
+
21
+ ```typescript
22
+ import { mongodbClient, municipalDataMongodbClient } from '@talkpilot/core-db';
23
+
24
+ // TalkPilot
25
+ await mongodbClient.connect(uri);
26
+
27
+ // Municipal
28
+ await municipalDataMongodbClient.connect(uri);
29
+ ```
30
+
31
+ ## Creating New Getters
32
+
33
+ 1. **Location**: Place getters in the relevant domain folder (e.g., `src/talkpilot/agents/agents.getters.ts`).
34
+ 2. **Naming**: Use `find...` for multiple results and `get...ById` for single results.
35
+ 3. **Domain isolation**: Always use the `getDb()` function from the current domain's `index.ts`.
36
+
37
+ ## Environment Validation
38
+
39
+ Always validate configuration "on-demand" within the `connect` methods using the validation utilities.
40
+
41
+ ```typescript
42
+ import { validateConfig, validateMongoUri } from '../utils/validation';
43
+
44
+ async connect(uri?: string) {
45
+ const mongodbUri = uri || process.env.MONGO_URI;
46
+ validateConfig('MONGO_URI', mongodbUri);
47
+ validateMongoUri(mongodbUri!);
48
+ // ... connection logic
49
+ }
50
+ ```
51
+
52
+ ## Testing Standards
53
+
54
+ 1. **In-Memory DB**: Use `mongodb-memory-server` for all tests. It is automatically initialized in `src/__tests__/setup.ts`.
55
+ 2. **Factories**: Use the Fishery factories in `src/test-utils/factories/` to generate test data.
56
+ 3. **Organization**: Place tests in a `__tests__` folder within the relevant domain.
57
+
58
+ ```typescript
59
+ import { createAgent } from '../../../test-utils/factories';
60
+
61
+ it('should find agents', async () => {
62
+ const agent = createAgent({ name: 'Test' });
63
+ // ... test logic
64
+ });
65
+ ```
package/AGENTS.md CHANGED
@@ -1,49 +1,49 @@
1
- # AI Agent Guide for core-db
2
-
3
- Ground truth for AI coding agents in this repository. This is `@talkpilot/core-db` — the only package that should talk to Mongo. `.cursor/rules/development.mdc` exists but may lag (TalkPilot + Municipal only); do not expand those rules in an unrelated ticket.
4
-
5
- ## What this is
6
- Shared Mongo layer: typed getters, schemas, factories, indexes. Consumed by TalkPilot, municipal, WebsiteTalk, and clinic services. Publishing a version here is how other repos pick up schema/getter changes.
7
-
8
- ## Coding philosophy
9
- - Strict TypeScript. No `any`; use `unknown` and narrow.
10
- - No narrating comments.
11
- - Split types, getters, and schemas into separate files.
12
-
13
- ## Project structure
14
- - `src/talkpilot/` — calls, flows, sessions, clients, phone numbers, subscriptions, …
15
- - `src/municipal/` — cities, streets, tickets, departmentsSubjects, …
16
- - `src/websitalk/` — scans, scanResources, websiteUrls.
17
- - `src/configuration/` — prompts, models.
18
- - `src/test-utils/` — Fishery factories and test DB helpers.
19
- - `src/utils/` — validation, pagination, shared types.
20
- - `dist/` is what consumers import — generated, tests excluded from the build.
21
-
22
- ## Copy this
23
- New getter: `src/<domain>/<entity>/<entity>.types.ts` + `<entity>.getter.ts` (or `*.getters.ts`) + optional `<entity>.schema.ts` + barrel `index.ts` + `__tests__/<entity>.spec.ts`.
24
- Export it from `src/index.ts`.
25
- Examples: `src/talkpilot/calls/calls.getters.ts`, `src/talkpilot/phone_numbers/phone_numbers.getter.ts`.
26
-
27
- Naming: `find*` for many, `get*ById` (or equivalent single-doc) for one. Always use that domain’s `getDb()` / collection helper — never another domain’s client. Exception already on disk: `src/talkpilot/calls/calls.statistics.getters.ts` imports municipal `tickets.statistics.getters` — do not “clean that up.”
28
-
29
- ## Where data lives
30
- This repo **owns** `mongodb`. Four isolated clients — connect each independently:
31
-
32
- - `mongodbClient` — TalkPilot
33
- - `municipalDataMongodbClient` — municipal
34
- - `websitalkMongodbClient` — WebsiteTalk
35
- - `configurationMongodbClient` — configuration
36
-
37
- Do not cross-import getters across domains, except the talkpilot call-stats → municipal tickets exception above.
38
-
39
- ## Do / don't
40
- - Do not put HTTP, Express, or business orchestration here.
41
- - Validate `MONGO_URI` (and siblings) on demand in `connect()`, using `src/utils/validation`.
42
- - After a getter/schema change: bump package version, build, publish; then bump the consumer. Downstream pins skew — do not assume they are on latest.
43
- - `prepare` runs `build` on install.
44
-
45
- ## Siblings
46
- Every Node service should call getters from here. If a service is about to `getDb().collection` or `import from 'mongodb'`, the getter belongs in this PR first.
47
-
48
- ## Tests
49
- Jest + `mongodb-memory-server` (`src/__tests__/setup.ts`). Factories in `src/test-utils/factories/`. Colocate `__tests__/` under the domain.
1
+ # AI Agent Guide for core-db
2
+
3
+ Ground truth for AI coding agents in this repository. This is `@talkpilot/core-db` — the only package that should talk to Mongo. `.cursor/rules/development.mdc` exists but may lag (TalkPilot + Municipal only); do not expand those rules in an unrelated ticket.
4
+
5
+ ## What this is
6
+ Shared Mongo layer: typed getters, schemas, factories, indexes. Consumed by TalkPilot, municipal, WebsiteTalk, and clinic services. Publishing a version here is how other repos pick up schema/getter changes.
7
+
8
+ ## Coding philosophy
9
+ - Strict TypeScript. No `any`; use `unknown` and narrow.
10
+ - No narrating comments.
11
+ - Split types, getters, and schemas into separate files.
12
+
13
+ ## Project structure
14
+ - `src/talkpilot/` — calls, flows, sessions, clients, phone numbers, subscriptions, …
15
+ - `src/municipal/` — cities, streets, tickets, departmentsSubjects, …
16
+ - `src/websitalk/` — scans, scanResources, websiteUrls.
17
+ - `src/configuration/` — prompts, models.
18
+ - `src/test-utils/` — Fishery factories and test DB helpers.
19
+ - `src/utils/` — validation, pagination, shared types.
20
+ - `dist/` is what consumers import — generated, tests excluded from the build.
21
+
22
+ ## Copy this
23
+ New getter: `src/<domain>/<entity>/<entity>.types.ts` + `<entity>.getter.ts` (or `*.getters.ts`) + optional `<entity>.schema.ts` + barrel `index.ts` + `__tests__/<entity>.spec.ts`.
24
+ Export it from `src/index.ts`.
25
+ Examples: `src/talkpilot/calls/calls.getters.ts`, `src/talkpilot/phone_numbers/phone_numbers.getter.ts`.
26
+
27
+ Naming: `find*` for many, `get*ById` (or equivalent single-doc) for one. Always use that domain’s `getDb()` / collection helper — never another domain’s client. Exception already on disk: `src/talkpilot/calls/calls.statistics.getters.ts` imports municipal `tickets.statistics.getters` — do not “clean that up.”
28
+
29
+ ## Where data lives
30
+ This repo **owns** `mongodb`. Four isolated clients — connect each independently:
31
+
32
+ - `mongodbClient` — TalkPilot
33
+ - `municipalDataMongodbClient` — municipal
34
+ - `websitalkMongodbClient` — WebsiteTalk
35
+ - `configurationMongodbClient` — configuration
36
+
37
+ Do not cross-import getters across domains, except the talkpilot call-stats → municipal tickets exception above.
38
+
39
+ ## Do / don't
40
+ - Do not put HTTP, Express, or business orchestration here.
41
+ - Validate `MONGO_URI` (and siblings) on demand in `connect()`, using `src/utils/validation`.
42
+ - After a getter/schema change: bump package version, build, publish; then bump the consumer. Downstream pins skew — do not assume they are on latest.
43
+ - `prepare` runs `build` on install.
44
+
45
+ ## Siblings
46
+ Every Node service should call getters from here. If a service is about to `getDb().collection` or `import from 'mongodb'`, the getter belongs in this PR first.
47
+
48
+ ## Tests
49
+ Jest + `mongodb-memory-server` (`src/__tests__/setup.ts`). Factories in `src/test-utils/factories/`. Colocate `__tests__/` under the domain.
package/DEVELOPMENT.md CHANGED
@@ -1,141 +1,141 @@
1
- # Development Guide
2
-
3
- Welcome to the `core-db` development guide. This document explains how to set up, develop, and test this package.
4
-
5
- ## Getting Started
6
-
7
- ### Prerequisites
8
-
9
- - Node.js (v18 or later)
10
- - TypeScript
11
-
12
- ### Setup
13
-
14
- 1. Install dependencies:
15
- ```bash
16
- npm install
17
- ```
18
-
19
- 2. Build the project:
20
- ```bash
21
- npm run build
22
- ```
23
-
24
- ## Local Development
25
-
26
- Use `npm pack` to test local changes in a consuming project.
27
-
28
- 1. In the `core-db` folder, build and pack:
29
- ```bash
30
- npm run build && npm pack
31
- ```
32
- This produces a file like `talkpilot-core-db-x.y.z.tgz` in the project root.
33
-
34
- 2. In the consuming project, install it:
35
- ```bash
36
- npm install /path/to/core-db/talkpilot-core-db-x.y.z.tgz
37
- ```
38
-
39
- 3. After making further changes to `core-db`, repeat step 1 and reinstall in the consuming project.
40
-
41
- ## Adding a New Getter
42
-
43
- 1. **Define Types**: Add your data types in the relevant domain's `types.ts` file.
44
- 2. **Implement Getter**: Add the function in the `getters.ts` file.
45
- 3. **Export**: Ensure the getter is exported from the domain's `index.ts` and finally from the main `src/index.ts`.
46
- 4. **Test**: Create a test in the domain's `__tests__` folder.
47
-
48
- ## Signature Immutability
49
-
50
- `core-db` is a shared package consumed by multiple services that may not all update at the same time. A signature change that looks harmless locally can silently break a service that hasn't picked up the new version yet.
51
-
52
- **Rules:**
53
-
54
- - **Never change an existing parameter's type or name.**
55
- - **Never add a required parameter** to an existing function.
56
- - **Never remove a function.** Mark it `@deprecated` instead (see below).
57
- - **Safe additions only**: you may add optional parameters or parameters with defaults — existing callers will continue to compile without changes.
58
-
59
- **Deprecating instead of deleting:**
60
-
61
- When a function is no longer the right approach, mark it deprecated and explain why. Consumers can then migrate on their own schedule.
62
-
63
- ```ts
64
- /**
65
- * @deprecated Use `newFunction` instead — reason for the change.
66
- */
67
- export const oldFunction = (...) => { ... };
68
- ```
69
-
70
- The deprecation comment must include either the name of the replacement or a clear explanation of why the function was retired, so a consumer reading the warning knows exactly what to do.
71
-
72
- ## Testing
73
-
74
- We use Jest with `mongodb-memory-server` for fast, isolated database tests.
75
-
76
- ### Running Tests
77
-
78
- ```bash
79
- npm test
80
- ```
81
-
82
- ### Using Factories
83
-
84
- Always use factories to generate test data to keep tests clean and maintainable.
85
-
86
- ```typescript
87
- import { createCallDoc } from '../calls.getters';
88
- import { createOutGoingCallDoc } from '../../../test-utils/factories';
89
-
90
- it('should save a call', async () => {
91
- const call = createOutGoingCallDoc({ callSid: 'CA123' });
92
- await createCallDoc(call);
93
- // ... assertions
94
- });
95
- ```
96
-
97
- ## Build Process
98
-
99
- The project is built using TypeScript (`tsc`). The output is generated in the `dist/` directory.
100
-
101
- - `main`: `dist/index.js`
102
- - `types`: `dist/index.d.ts`
103
-
104
- The `prepare` script in `package.json` ensures that the project is built automatically when installed via a Git URL.
105
-
106
- ## Releasing a New Version
107
-
108
- Publish **only after the PR is approved and merged** — never from an unreviewed branch. Then, from the merged `main`:
109
-
110
- 1. **Pull** the latest `main` so you publish exactly what was reviewed (see also [Branch Hygiene](#branch-hygiene)).
111
- 2. **Bump the version** with `npm version <patch|minor|major>` (or edit `package.json`). Never reuse a number that already exists on the registry — check first with `npm view @talkpilot/core-db versions`.
112
- 3. **Verify**: `npm run build` and `npm test` (the Pre-push checklist in the README).
113
- 4. **Publish**: `npm publish` (requires the shared token — see [Team Access & Authentication](#team-access--authentication)).
114
- 5. Downstream repos pick it up via `npm update @talkpilot/core-db` or their next container build.
115
-
116
- Add a short release note for the version in the README (the version table and per-version section).
117
-
118
- ### If a published version turns out to be broken
119
-
120
- Never republish or unpublish — a reused or missing number leaves a confusing gap in the registry. Instead, publish a **new** version with the fix, and add a one-line warning to the broken version's row in the README version table (e.g. "⚠️ do not use — <reason>; upgrade to <next version>") so consumers know to skip it.
121
-
122
- ## Team Access & Authentication
123
-
124
- To allow the whole team to publish and install without adding individual npm accounts, we use a shared **npm Granular Access Token**.
125
-
126
- ### One-time Local Setup
127
-
128
- Each developer needs to add the shared token to their local npm configuration. Do **NOT** add this to the project's `.npmrc` file, as it will be committed to Git.
129
-
130
- 1. Get the shared **npm Automation Token**.
131
- 2. Open (or create) your global npm configuration file:
132
- ```bash
133
- nano ~/.npmrc
134
- ```
135
- 3. Add the following line (replace `[TOKEN]` with the actual token):
136
- ```text
137
- //registry.npmjs.org/:_authToken=[TOKEN]
138
- ```
139
- 4. Save and exit.
140
-
141
- Now you can run `npm publish` and `npm install` for scoped `@talkpilot` packages without being prompted for credentials.
1
+ # Development Guide
2
+
3
+ Welcome to the `core-db` development guide. This document explains how to set up, develop, and test this package.
4
+
5
+ ## Getting Started
6
+
7
+ ### Prerequisites
8
+
9
+ - Node.js (v18 or later)
10
+ - TypeScript
11
+
12
+ ### Setup
13
+
14
+ 1. Install dependencies:
15
+ ```bash
16
+ npm install
17
+ ```
18
+
19
+ 2. Build the project:
20
+ ```bash
21
+ npm run build
22
+ ```
23
+
24
+ ## Local Development
25
+
26
+ Use `npm pack` to test local changes in a consuming project.
27
+
28
+ 1. In the `core-db` folder, build and pack:
29
+ ```bash
30
+ npm run build && npm pack
31
+ ```
32
+ This produces a file like `talkpilot-core-db-x.y.z.tgz` in the project root.
33
+
34
+ 2. In the consuming project, install it:
35
+ ```bash
36
+ npm install /path/to/core-db/talkpilot-core-db-x.y.z.tgz
37
+ ```
38
+
39
+ 3. After making further changes to `core-db`, repeat step 1 and reinstall in the consuming project.
40
+
41
+ ## Adding a New Getter
42
+
43
+ 1. **Define Types**: Add your data types in the relevant domain's `types.ts` file.
44
+ 2. **Implement Getter**: Add the function in the `getters.ts` file.
45
+ 3. **Export**: Ensure the getter is exported from the domain's `index.ts` and finally from the main `src/index.ts`.
46
+ 4. **Test**: Create a test in the domain's `__tests__` folder.
47
+
48
+ ## Signature Immutability
49
+
50
+ `core-db` is a shared package consumed by multiple services that may not all update at the same time. A signature change that looks harmless locally can silently break a service that hasn't picked up the new version yet.
51
+
52
+ **Rules:**
53
+
54
+ - **Never change an existing parameter's type or name.**
55
+ - **Never add a required parameter** to an existing function.
56
+ - **Never remove a function.** Mark it `@deprecated` instead (see below).
57
+ - **Safe additions only**: you may add optional parameters or parameters with defaults — existing callers will continue to compile without changes.
58
+
59
+ **Deprecating instead of deleting:**
60
+
61
+ When a function is no longer the right approach, mark it deprecated and explain why. Consumers can then migrate on their own schedule.
62
+
63
+ ```ts
64
+ /**
65
+ * @deprecated Use `newFunction` instead — reason for the change.
66
+ */
67
+ export const oldFunction = (...) => { ... };
68
+ ```
69
+
70
+ The deprecation comment must include either the name of the replacement or a clear explanation of why the function was retired, so a consumer reading the warning knows exactly what to do.
71
+
72
+ ## Testing
73
+
74
+ We use Jest with `mongodb-memory-server` for fast, isolated database tests.
75
+
76
+ ### Running Tests
77
+
78
+ ```bash
79
+ npm test
80
+ ```
81
+
82
+ ### Using Factories
83
+
84
+ Always use factories to generate test data to keep tests clean and maintainable.
85
+
86
+ ```typescript
87
+ import { createCallDoc } from '../calls.getters';
88
+ import { createOutGoingCallDoc } from '../../../test-utils/factories';
89
+
90
+ it('should save a call', async () => {
91
+ const call = createOutGoingCallDoc({ callSid: 'CA123' });
92
+ await createCallDoc(call);
93
+ // ... assertions
94
+ });
95
+ ```
96
+
97
+ ## Build Process
98
+
99
+ The project is built using TypeScript (`tsc`). The output is generated in the `dist/` directory.
100
+
101
+ - `main`: `dist/index.js`
102
+ - `types`: `dist/index.d.ts`
103
+
104
+ The `prepare` script in `package.json` ensures that the project is built automatically when installed via a Git URL.
105
+
106
+ ## Releasing a New Version
107
+
108
+ Publish **only after the PR is approved and merged** — never from an unreviewed branch. Then, from the merged `main`:
109
+
110
+ 1. **Pull** the latest `main` so you publish exactly what was reviewed (see also [Branch Hygiene](#branch-hygiene)).
111
+ 2. **Bump the version** with `npm version <patch|minor|major>` (or edit `package.json`). Never reuse a number that already exists on the registry — check first with `npm view @talkpilot/core-db versions`.
112
+ 3. **Verify**: `npm run build` and `npm test` (the Pre-push checklist in the README).
113
+ 4. **Publish**: `npm publish` (requires the shared token — see [Team Access & Authentication](#team-access--authentication)).
114
+ 5. Downstream repos pick it up via `npm update @talkpilot/core-db` or their next container build.
115
+
116
+ Add a short release note for the version in the README (the version table and per-version section).
117
+
118
+ ### If a published version turns out to be broken
119
+
120
+ Never republish or unpublish — a reused or missing number leaves a confusing gap in the registry. Instead, publish a **new** version with the fix, and add a one-line warning to the broken version's row in the README version table (e.g. "⚠️ do not use — <reason>; upgrade to <next version>") so consumers know to skip it.
121
+
122
+ ## Team Access & Authentication
123
+
124
+ To allow the whole team to publish and install without adding individual npm accounts, we use a shared **npm Granular Access Token**.
125
+
126
+ ### One-time Local Setup
127
+
128
+ Each developer needs to add the shared token to their local npm configuration. Do **NOT** add this to the project's `.npmrc` file, as it will be committed to Git.
129
+
130
+ 1. Get the shared **npm Automation Token**.
131
+ 2. Open (or create) your global npm configuration file:
132
+ ```bash
133
+ nano ~/.npmrc
134
+ ```
135
+ 3. Add the following line (replace `[TOKEN]` with the actual token):
136
+ ```text
137
+ //registry.npmjs.org/:_authToken=[TOKEN]
138
+ ```
139
+ 4. Save and exit.
140
+
141
+ Now you can run `npm publish` and `npm install` for scoped `@talkpilot` packages without being prompted for credentials.