gitmem-mcp 0.2.0

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 (316) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/CLAUDE.md.template +65 -0
  3. package/LICENSE +21 -0
  4. package/README.md +221 -0
  5. package/bin/gitmem.js +383 -0
  6. package/dist/commands/check.d.ts +33 -0
  7. package/dist/commands/check.d.ts.map +1 -0
  8. package/dist/commands/check.js +492 -0
  9. package/dist/commands/check.js.map +1 -0
  10. package/dist/constants/closing-questions.d.ts +40 -0
  11. package/dist/constants/closing-questions.d.ts.map +1 -0
  12. package/dist/constants/closing-questions.js +107 -0
  13. package/dist/constants/closing-questions.js.map +1 -0
  14. package/dist/diagnostics/anonymizer.d.ts +55 -0
  15. package/dist/diagnostics/anonymizer.d.ts.map +1 -0
  16. package/dist/diagnostics/anonymizer.js +191 -0
  17. package/dist/diagnostics/anonymizer.js.map +1 -0
  18. package/dist/diagnostics/channels.d.ts +132 -0
  19. package/dist/diagnostics/channels.d.ts.map +1 -0
  20. package/dist/diagnostics/channels.js +150 -0
  21. package/dist/diagnostics/channels.js.map +1 -0
  22. package/dist/diagnostics/collector.d.ts +183 -0
  23. package/dist/diagnostics/collector.d.ts.map +1 -0
  24. package/dist/diagnostics/collector.js +227 -0
  25. package/dist/diagnostics/collector.js.map +1 -0
  26. package/dist/diagnostics/index.d.ts +28 -0
  27. package/dist/diagnostics/index.d.ts.map +1 -0
  28. package/dist/diagnostics/index.js +31 -0
  29. package/dist/diagnostics/index.js.map +1 -0
  30. package/dist/index.d.ts +13 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +18 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/schemas/absorb-observations.d.ts +63 -0
  35. package/dist/schemas/absorb-observations.d.ts.map +1 -0
  36. package/dist/schemas/absorb-observations.js +25 -0
  37. package/dist/schemas/absorb-observations.js.map +1 -0
  38. package/dist/schemas/active-sessions.d.ts +71 -0
  39. package/dist/schemas/active-sessions.d.ts.map +1 -0
  40. package/dist/schemas/active-sessions.js +19 -0
  41. package/dist/schemas/active-sessions.js.map +1 -0
  42. package/dist/schemas/analyze.d.ts +38 -0
  43. package/dist/schemas/analyze.d.ts.map +1 -0
  44. package/dist/schemas/analyze.js +30 -0
  45. package/dist/schemas/analyze.js.map +1 -0
  46. package/dist/schemas/common.d.ts +55 -0
  47. package/dist/schemas/common.d.ts.map +1 -0
  48. package/dist/schemas/common.js +65 -0
  49. package/dist/schemas/common.js.map +1 -0
  50. package/dist/schemas/create-decision.d.ts +48 -0
  51. package/dist/schemas/create-decision.d.ts.map +1 -0
  52. package/dist/schemas/create-decision.js +31 -0
  53. package/dist/schemas/create-decision.js.map +1 -0
  54. package/dist/schemas/create-learning.d.ts +107 -0
  55. package/dist/schemas/create-learning.d.ts.map +1 -0
  56. package/dist/schemas/create-learning.js +64 -0
  57. package/dist/schemas/create-learning.js.map +1 -0
  58. package/dist/schemas/get-transcript.d.ts +24 -0
  59. package/dist/schemas/get-transcript.d.ts.map +1 -0
  60. package/dist/schemas/get-transcript.js +22 -0
  61. package/dist/schemas/get-transcript.js.map +1 -0
  62. package/dist/schemas/index.d.ts +23 -0
  63. package/dist/schemas/index.d.ts.map +1 -0
  64. package/dist/schemas/index.js +23 -0
  65. package/dist/schemas/index.js.map +1 -0
  66. package/dist/schemas/log.d.ts +36 -0
  67. package/dist/schemas/log.d.ts.map +1 -0
  68. package/dist/schemas/log.js +27 -0
  69. package/dist/schemas/log.js.map +1 -0
  70. package/dist/schemas/prepare-context.d.ts +41 -0
  71. package/dist/schemas/prepare-context.d.ts.map +1 -0
  72. package/dist/schemas/prepare-context.js +31 -0
  73. package/dist/schemas/prepare-context.js.map +1 -0
  74. package/dist/schemas/recall.d.ts +41 -0
  75. package/dist/schemas/recall.d.ts.map +1 -0
  76. package/dist/schemas/recall.js +47 -0
  77. package/dist/schemas/recall.js.map +1 -0
  78. package/dist/schemas/record-scar-usage-batch.d.ts +82 -0
  79. package/dist/schemas/record-scar-usage-batch.d.ts.map +1 -0
  80. package/dist/schemas/record-scar-usage-batch.js +25 -0
  81. package/dist/schemas/record-scar-usage-batch.js.map +1 -0
  82. package/dist/schemas/record-scar-usage.d.ts +51 -0
  83. package/dist/schemas/record-scar-usage.d.ts.map +1 -0
  84. package/dist/schemas/record-scar-usage.js +32 -0
  85. package/dist/schemas/record-scar-usage.js.map +1 -0
  86. package/dist/schemas/save-transcript.d.ts +38 -0
  87. package/dist/schemas/save-transcript.d.ts.map +1 -0
  88. package/dist/schemas/save-transcript.js +30 -0
  89. package/dist/schemas/save-transcript.js.map +1 -0
  90. package/dist/schemas/search.d.ts +36 -0
  91. package/dist/schemas/search.d.ts.map +1 -0
  92. package/dist/schemas/search.js +27 -0
  93. package/dist/schemas/search.js.map +1 -0
  94. package/dist/schemas/session-close.d.ts +371 -0
  95. package/dist/schemas/session-close.d.ts.map +1 -0
  96. package/dist/schemas/session-close.js +95 -0
  97. package/dist/schemas/session-close.js.map +1 -0
  98. package/dist/schemas/session-start.d.ts +46 -0
  99. package/dist/schemas/session-start.d.ts.map +1 -0
  100. package/dist/schemas/session-start.js +33 -0
  101. package/dist/schemas/session-start.js.map +1 -0
  102. package/dist/schemas/thread.d.ts +72 -0
  103. package/dist/schemas/thread.d.ts.map +1 -0
  104. package/dist/schemas/thread.js +39 -0
  105. package/dist/schemas/thread.js.map +1 -0
  106. package/dist/server.d.ts +22 -0
  107. package/dist/server.d.ts.map +1 -0
  108. package/dist/server.js +313 -0
  109. package/dist/server.js.map +1 -0
  110. package/dist/services/active-sessions.d.ts +66 -0
  111. package/dist/services/active-sessions.d.ts.map +1 -0
  112. package/dist/services/active-sessions.js +311 -0
  113. package/dist/services/active-sessions.js.map +1 -0
  114. package/dist/services/agent-detection.d.ts +25 -0
  115. package/dist/services/agent-detection.d.ts.map +1 -0
  116. package/dist/services/agent-detection.js +93 -0
  117. package/dist/services/agent-detection.js.map +1 -0
  118. package/dist/services/analytics.d.ts +201 -0
  119. package/dist/services/analytics.d.ts.map +1 -0
  120. package/dist/services/analytics.js +483 -0
  121. package/dist/services/analytics.js.map +1 -0
  122. package/dist/services/cache.d.ts +148 -0
  123. package/dist/services/cache.d.ts.map +1 -0
  124. package/dist/services/cache.js +384 -0
  125. package/dist/services/cache.js.map +1 -0
  126. package/dist/services/cache.test.d.ts +8 -0
  127. package/dist/services/cache.test.d.ts.map +1 -0
  128. package/dist/services/cache.test.js +267 -0
  129. package/dist/services/cache.test.js.map +1 -0
  130. package/dist/services/compliance-validator.d.ts +30 -0
  131. package/dist/services/compliance-validator.d.ts.map +1 -0
  132. package/dist/services/compliance-validator.js +257 -0
  133. package/dist/services/compliance-validator.js.map +1 -0
  134. package/dist/services/config.d.ts +48 -0
  135. package/dist/services/config.d.ts.map +1 -0
  136. package/dist/services/config.js +128 -0
  137. package/dist/services/config.js.map +1 -0
  138. package/dist/services/embedding.d.ts +58 -0
  139. package/dist/services/embedding.d.ts.map +1 -0
  140. package/dist/services/embedding.js +243 -0
  141. package/dist/services/embedding.js.map +1 -0
  142. package/dist/services/gitmem-dir.d.ts +38 -0
  143. package/dist/services/gitmem-dir.d.ts.map +1 -0
  144. package/dist/services/gitmem-dir.js +84 -0
  145. package/dist/services/gitmem-dir.js.map +1 -0
  146. package/dist/services/local-file-storage.d.ts +56 -0
  147. package/dist/services/local-file-storage.d.ts.map +1 -0
  148. package/dist/services/local-file-storage.js +213 -0
  149. package/dist/services/local-file-storage.js.map +1 -0
  150. package/dist/services/local-vector-search.d.ts +137 -0
  151. package/dist/services/local-vector-search.d.ts.map +1 -0
  152. package/dist/services/local-vector-search.js +311 -0
  153. package/dist/services/local-vector-search.js.map +1 -0
  154. package/dist/services/metrics.d.ts +104 -0
  155. package/dist/services/metrics.d.ts.map +1 -0
  156. package/dist/services/metrics.js +264 -0
  157. package/dist/services/metrics.js.map +1 -0
  158. package/dist/services/session-state.d.ts +113 -0
  159. package/dist/services/session-state.d.ts.map +1 -0
  160. package/dist/services/session-state.js +203 -0
  161. package/dist/services/session-state.js.map +1 -0
  162. package/dist/services/startup.d.ts +112 -0
  163. package/dist/services/startup.d.ts.map +1 -0
  164. package/dist/services/startup.js +436 -0
  165. package/dist/services/startup.js.map +1 -0
  166. package/dist/services/storage.d.ts +43 -0
  167. package/dist/services/storage.d.ts.map +1 -0
  168. package/dist/services/storage.js +92 -0
  169. package/dist/services/storage.js.map +1 -0
  170. package/dist/services/supabase-client.d.ts +163 -0
  171. package/dist/services/supabase-client.d.ts.map +1 -0
  172. package/dist/services/supabase-client.js +510 -0
  173. package/dist/services/supabase-client.js.map +1 -0
  174. package/dist/services/thread-dedup.d.ts +44 -0
  175. package/dist/services/thread-dedup.d.ts.map +1 -0
  176. package/dist/services/thread-dedup.js +113 -0
  177. package/dist/services/thread-dedup.js.map +1 -0
  178. package/dist/services/thread-manager.d.ts +77 -0
  179. package/dist/services/thread-manager.d.ts.map +1 -0
  180. package/dist/services/thread-manager.js +250 -0
  181. package/dist/services/thread-manager.js.map +1 -0
  182. package/dist/services/thread-suggestions.d.ts +66 -0
  183. package/dist/services/thread-suggestions.d.ts.map +1 -0
  184. package/dist/services/thread-suggestions.js +243 -0
  185. package/dist/services/thread-suggestions.js.map +1 -0
  186. package/dist/services/thread-supabase.d.ts +111 -0
  187. package/dist/services/thread-supabase.d.ts.map +1 -0
  188. package/dist/services/thread-supabase.js +459 -0
  189. package/dist/services/thread-supabase.js.map +1 -0
  190. package/dist/services/thread-vitality.d.ts +65 -0
  191. package/dist/services/thread-vitality.d.ts.map +1 -0
  192. package/dist/services/thread-vitality.js +143 -0
  193. package/dist/services/thread-vitality.js.map +1 -0
  194. package/dist/services/tier.d.ts +52 -0
  195. package/dist/services/tier.d.ts.map +1 -0
  196. package/dist/services/tier.js +109 -0
  197. package/dist/services/tier.js.map +1 -0
  198. package/dist/services/timezone.d.ts +37 -0
  199. package/dist/services/timezone.d.ts.map +1 -0
  200. package/dist/services/timezone.js +147 -0
  201. package/dist/services/timezone.js.map +1 -0
  202. package/dist/services/transcript-chunker.d.ts +18 -0
  203. package/dist/services/transcript-chunker.d.ts.map +1 -0
  204. package/dist/services/transcript-chunker.js +237 -0
  205. package/dist/services/transcript-chunker.js.map +1 -0
  206. package/dist/services/triple-writer.d.ts +128 -0
  207. package/dist/services/triple-writer.d.ts.map +1 -0
  208. package/dist/services/triple-writer.js +338 -0
  209. package/dist/services/triple-writer.js.map +1 -0
  210. package/dist/services/variant-assignment.d.ts +92 -0
  211. package/dist/services/variant-assignment.d.ts.map +1 -0
  212. package/dist/services/variant-assignment.js +196 -0
  213. package/dist/services/variant-assignment.js.map +1 -0
  214. package/dist/tools/absorb-observations.d.ts +16 -0
  215. package/dist/tools/absorb-observations.d.ts.map +1 -0
  216. package/dist/tools/absorb-observations.js +82 -0
  217. package/dist/tools/absorb-observations.js.map +1 -0
  218. package/dist/tools/analyze.d.ts +55 -0
  219. package/dist/tools/analyze.d.ts.map +1 -0
  220. package/dist/tools/analyze.js +139 -0
  221. package/dist/tools/analyze.js.map +1 -0
  222. package/dist/tools/cleanup-threads.d.ts +47 -0
  223. package/dist/tools/cleanup-threads.d.ts.map +1 -0
  224. package/dist/tools/cleanup-threads.js +127 -0
  225. package/dist/tools/cleanup-threads.js.map +1 -0
  226. package/dist/tools/confirm-scars.d.ts +23 -0
  227. package/dist/tools/confirm-scars.d.ts.map +1 -0
  228. package/dist/tools/confirm-scars.js +209 -0
  229. package/dist/tools/confirm-scars.js.map +1 -0
  230. package/dist/tools/create-decision.d.ts +15 -0
  231. package/dist/tools/create-decision.d.ts.map +1 -0
  232. package/dist/tools/create-decision.js +138 -0
  233. package/dist/tools/create-decision.js.map +1 -0
  234. package/dist/tools/create-learning.d.ts +15 -0
  235. package/dist/tools/create-learning.d.ts.map +1 -0
  236. package/dist/tools/create-learning.js +226 -0
  237. package/dist/tools/create-learning.js.map +1 -0
  238. package/dist/tools/create-thread.d.ts +42 -0
  239. package/dist/tools/create-thread.d.ts.map +1 -0
  240. package/dist/tools/create-thread.js +180 -0
  241. package/dist/tools/create-thread.js.map +1 -0
  242. package/dist/tools/definitions.d.ts +5013 -0
  243. package/dist/tools/definitions.d.ts.map +1 -0
  244. package/dist/tools/definitions.js +2017 -0
  245. package/dist/tools/definitions.js.map +1 -0
  246. package/dist/tools/dismiss-suggestion.d.ts +20 -0
  247. package/dist/tools/dismiss-suggestion.d.ts.map +1 -0
  248. package/dist/tools/dismiss-suggestion.js +40 -0
  249. package/dist/tools/dismiss-suggestion.js.map +1 -0
  250. package/dist/tools/get-transcript.d.ts +24 -0
  251. package/dist/tools/get-transcript.d.ts.map +1 -0
  252. package/dist/tools/get-transcript.js +52 -0
  253. package/dist/tools/get-transcript.js.map +1 -0
  254. package/dist/tools/graph-traverse.d.ts +83 -0
  255. package/dist/tools/graph-traverse.d.ts.map +1 -0
  256. package/dist/tools/graph-traverse.js +394 -0
  257. package/dist/tools/graph-traverse.js.map +1 -0
  258. package/dist/tools/list-threads.d.ts +15 -0
  259. package/dist/tools/list-threads.d.ts.map +1 -0
  260. package/dist/tools/list-threads.js +114 -0
  261. package/dist/tools/list-threads.js.map +1 -0
  262. package/dist/tools/log.d.ts +43 -0
  263. package/dist/tools/log.d.ts.map +1 -0
  264. package/dist/tools/log.js +157 -0
  265. package/dist/tools/log.js.map +1 -0
  266. package/dist/tools/prepare-context.d.ts +36 -0
  267. package/dist/tools/prepare-context.d.ts.map +1 -0
  268. package/dist/tools/prepare-context.js +353 -0
  269. package/dist/tools/prepare-context.js.map +1 -0
  270. package/dist/tools/promote-suggestion.d.ts +25 -0
  271. package/dist/tools/promote-suggestion.d.ts.map +1 -0
  272. package/dist/tools/promote-suggestion.js +60 -0
  273. package/dist/tools/promote-suggestion.js.map +1 -0
  274. package/dist/tools/recall.d.ts +77 -0
  275. package/dist/tools/recall.d.ts.map +1 -0
  276. package/dist/tools/recall.js +423 -0
  277. package/dist/tools/recall.js.map +1 -0
  278. package/dist/tools/recall.test.d.ts +5 -0
  279. package/dist/tools/recall.test.d.ts.map +1 -0
  280. package/dist/tools/recall.test.js +155 -0
  281. package/dist/tools/recall.test.js.map +1 -0
  282. package/dist/tools/record-scar-usage-batch.d.ts +10 -0
  283. package/dist/tools/record-scar-usage-batch.d.ts.map +1 -0
  284. package/dist/tools/record-scar-usage-batch.js +153 -0
  285. package/dist/tools/record-scar-usage-batch.js.map +1 -0
  286. package/dist/tools/record-scar-usage.d.ts +14 -0
  287. package/dist/tools/record-scar-usage.d.ts.map +1 -0
  288. package/dist/tools/record-scar-usage.js +94 -0
  289. package/dist/tools/record-scar-usage.js.map +1 -0
  290. package/dist/tools/resolve-thread.d.ts +16 -0
  291. package/dist/tools/resolve-thread.d.ts.map +1 -0
  292. package/dist/tools/resolve-thread.js +102 -0
  293. package/dist/tools/resolve-thread.js.map +1 -0
  294. package/dist/tools/save-transcript.d.ts +29 -0
  295. package/dist/tools/save-transcript.d.ts.map +1 -0
  296. package/dist/tools/save-transcript.js +97 -0
  297. package/dist/tools/save-transcript.js.map +1 -0
  298. package/dist/tools/search.d.ts +46 -0
  299. package/dist/tools/search.d.ts.map +1 -0
  300. package/dist/tools/search.js +186 -0
  301. package/dist/tools/search.js.map +1 -0
  302. package/dist/tools/session-close.d.ts +14 -0
  303. package/dist/tools/session-close.d.ts.map +1 -0
  304. package/dist/tools/session-close.js +881 -0
  305. package/dist/tools/session-close.js.map +1 -0
  306. package/dist/tools/session-start.d.ts +38 -0
  307. package/dist/tools/session-start.d.ts.map +1 -0
  308. package/dist/tools/session-start.js +1104 -0
  309. package/dist/tools/session-start.js.map +1 -0
  310. package/dist/types/index.d.ts +456 -0
  311. package/dist/types/index.d.ts.map +1 -0
  312. package/dist/types/index.js +5 -0
  313. package/dist/types/index.js.map +1 -0
  314. package/package.json +76 -0
  315. package/schema/setup.sql +193 -0
  316. package/schema/starter-scars.json +206 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.test.js","sourceRoot":"","sources":["../../src/services/cache.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Compliance Validator Service
3
+ *
4
+ * Validates session close compliance based on close type.
5
+ *
6
+ * Standard close requires (OD-491):
7
+ * - task_completion object with timestamps proving each step was done
8
+ * - All 6 closing questions answered
9
+ * - human_corrections field present (even if empty string)
10
+ * - Timestamps in logical order
11
+ * - Minimum 3-second gap between human_asked_at and human_response_at
12
+ *
13
+ * Quick close has minimal requirements.
14
+ * Autonomous close has agent-specific requirements.
15
+ */
16
+ import type { SessionCloseParams, CloseCompliance, AgentIdentity } from "../types/index.js";
17
+ export interface ValidationResult {
18
+ valid: boolean;
19
+ errors: string[];
20
+ warnings: string[];
21
+ }
22
+ /**
23
+ * Validate session close parameters based on close type
24
+ */
25
+ export declare function validateSessionClose(params: SessionCloseParams): ValidationResult;
26
+ /**
27
+ * Build close_compliance object from validated params
28
+ */
29
+ export declare function buildCloseCompliance(params: SessionCloseParams, agentIdentity: AgentIdentity, learningsCount: number): CloseCompliance;
30
+ //# sourceMappingURL=compliance-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance-validator.d.ts","sourceRoot":"","sources":["../../src/services/compliance-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAa,eAAe,EAAE,aAAa,EAAkB,MAAM,mBAAmB,CAAC;AAGvH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAyOD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,gBAAgB,CAmBjF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,kBAAkB,EAC1B,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,MAAM,GACrB,eAAe,CAoBjB"}
@@ -0,0 +1,257 @@
1
+ /**
2
+ * Compliance Validator Service
3
+ *
4
+ * Validates session close compliance based on close type.
5
+ *
6
+ * Standard close requires (OD-491):
7
+ * - task_completion object with timestamps proving each step was done
8
+ * - All 6 closing questions answered
9
+ * - human_corrections field present (even if empty string)
10
+ * - Timestamps in logical order
11
+ * - Minimum 3-second gap between human_asked_at and human_response_at
12
+ *
13
+ * Quick close has minimal requirements.
14
+ * Autonomous close has agent-specific requirements.
15
+ */
16
+ import { CLOSING_QUESTIONS } from "../constants/closing-questions.js";
17
+ /** Minimum time (ms) between asking human and receiving response */
18
+ const MIN_HUMAN_RESPONSE_GAP_MS = 3000;
19
+ /**
20
+ * Validate task_completion timestamps (OD-491)
21
+ *
22
+ * Ensures:
23
+ * 1. All timestamps are valid ISO strings
24
+ * 2. Timestamps are in logical order
25
+ * 3. Minimum gap between human_asked_at and human_response_at
26
+ */
27
+ function validateTaskCompletion(tc) {
28
+ const errors = [];
29
+ const warnings = [];
30
+ // Parse timestamps
31
+ const timestamps = {};
32
+ const fields = [
33
+ "questions_displayed_at",
34
+ "reflection_completed_at",
35
+ "human_asked_at",
36
+ "human_response_at",
37
+ ];
38
+ for (const field of fields) {
39
+ const value = tc[field];
40
+ if (!value || value.trim() === "") {
41
+ errors.push(`task_completion.${field} is required`);
42
+ timestamps[field] = null;
43
+ }
44
+ else {
45
+ const date = new Date(value);
46
+ if (isNaN(date.getTime())) {
47
+ errors.push(`task_completion.${field} is not a valid ISO timestamp: ${value}`);
48
+ timestamps[field] = null;
49
+ }
50
+ else {
51
+ timestamps[field] = date;
52
+ }
53
+ }
54
+ }
55
+ // Validate human_response content
56
+ if (!tc.human_response || tc.human_response.trim() === "") {
57
+ errors.push("task_completion.human_response is required (e.g., 'none', 'no corrections', or actual corrections)");
58
+ }
59
+ // If we have valid timestamps, check logical order
60
+ const q = timestamps.questions_displayed_at;
61
+ const r = timestamps.reflection_completed_at;
62
+ const a = timestamps.human_asked_at;
63
+ const h = timestamps.human_response_at;
64
+ if (q && r && q > r) {
65
+ errors.push("task_completion: questions_displayed_at must be before reflection_completed_at");
66
+ }
67
+ if (r && a && r > a) {
68
+ errors.push("task_completion: reflection_completed_at must be before human_asked_at");
69
+ }
70
+ if (a && h && a > h) {
71
+ errors.push("task_completion: human_asked_at must be before human_response_at");
72
+ }
73
+ // Check minimum gap between asking and response
74
+ if (a && h) {
75
+ const gapMs = h.getTime() - a.getTime();
76
+ if (gapMs < MIN_HUMAN_RESPONSE_GAP_MS) {
77
+ errors.push(`task_completion: human_response_at must be at least ${MIN_HUMAN_RESPONSE_GAP_MS}ms after human_asked_at ` +
78
+ `(actual gap: ${gapMs}ms). Human cannot respond instantly.`);
79
+ }
80
+ }
81
+ return { errors, warnings };
82
+ }
83
+ /**
84
+ * Validate standard close parameters
85
+ *
86
+ * OD-491: Now requires task_completion with timestamps proving each step was done.
87
+ */
88
+ function validateStandardClose(params) {
89
+ const errors = [];
90
+ const warnings = [];
91
+ // OD-491: task_completion is REQUIRED for standard close
92
+ if (!params.task_completion) {
93
+ errors.push("Standard close requires task_completion object (OD-491). " +
94
+ "You must complete each step: display questions → answer → ask human → wait for response");
95
+ }
96
+ else {
97
+ // Validate task_completion timestamps and content
98
+ const tcValidation = validateTaskCompletion(params.task_completion);
99
+ errors.push(...tcValidation.errors);
100
+ warnings.push(...tcValidation.warnings);
101
+ }
102
+ // Closing reflection is required for standard close
103
+ if (!params.closing_reflection) {
104
+ errors.push(`Standard close requires closing_reflection with ${CLOSING_QUESTIONS.length} answers`);
105
+ }
106
+ else {
107
+ const reflection = params.closing_reflection;
108
+ // Validate each question from the single source of truth
109
+ for (const q of CLOSING_QUESTIONS) {
110
+ const value = reflection[q.key];
111
+ if (q.required) {
112
+ if (q.fieldType === "string") {
113
+ if (!value || (typeof value === "string" && value.trim() === "")) {
114
+ errors.push(`Missing: ${q.key} (Q${q.number}: ${q.question})`);
115
+ }
116
+ }
117
+ }
118
+ else {
119
+ // Optional fields: warn if not provided (e.g., scars_applied)
120
+ if (value === undefined && q.fieldType === "string[]") {
121
+ warnings.push(`${q.key} not provided (Q${q.number}: ${q.question})`);
122
+ }
123
+ }
124
+ }
125
+ // Warn if Q3 (do_differently) or Q5 (wrong_assumption) have substantive answers
126
+ // but no learnings were created — suggests scars should be captured
127
+ const doDifferently = reflection.do_differently;
128
+ const wrongAssumption = reflection.wrong_assumption;
129
+ const hasSubstantiveDoDifferently = typeof doDifferently === "string" &&
130
+ doDifferently.trim().length > 20 &&
131
+ !/^(nothing|none|n\/a|na)$/i.test(doDifferently.trim());
132
+ const hasSubstantiveWrongAssumption = typeof wrongAssumption === "string" &&
133
+ wrongAssumption.trim().length > 20 &&
134
+ !/^(nothing|none|n\/a|na)$/i.test(wrongAssumption.trim());
135
+ if ((hasSubstantiveDoDifferently || hasSubstantiveWrongAssumption) &&
136
+ (!params.learnings_created || params.learnings_created.length === 0)) {
137
+ warnings.push("Q3 (do_differently) or Q5 (wrong_assumption) contain substantive answers but no learnings were created. " +
138
+ "Consider capturing scars from these reflections before closing.");
139
+ }
140
+ }
141
+ // Human corrections must be explicitly acknowledged
142
+ if (params.human_corrections === undefined) {
143
+ errors.push("Standard close requires human_corrections field (even if empty string)");
144
+ }
145
+ return {
146
+ valid: errors.length === 0,
147
+ errors,
148
+ warnings,
149
+ };
150
+ }
151
+ /**
152
+ * Validate quick close parameters
153
+ */
154
+ function validateQuickClose(params) {
155
+ const errors = [];
156
+ const warnings = [];
157
+ // Quick close has minimal requirements
158
+ if (!params.session_id) {
159
+ errors.push("session_id is required");
160
+ }
161
+ // Warn if closing reflection provided for quick close
162
+ if (params.closing_reflection) {
163
+ warnings.push("closing_reflection provided for quick close - consider using standard close");
164
+ }
165
+ return {
166
+ valid: errors.length === 0,
167
+ errors,
168
+ warnings,
169
+ };
170
+ }
171
+ /**
172
+ * Validate autonomous close parameters (CODA-1)
173
+ */
174
+ function validateAutonomousClose(params) {
175
+ const errors = [];
176
+ const warnings = [];
177
+ // Autonomous close generates its own reflection
178
+ if (!params.session_id) {
179
+ errors.push("session_id is required");
180
+ }
181
+ // closing_reflection is optional for autonomous - agent generates it
182
+ // human_corrections should not be present for autonomous
183
+ if (params.human_corrections) {
184
+ warnings.push("human_corrections provided for autonomous close - this will be ignored");
185
+ }
186
+ return {
187
+ valid: errors.length === 0,
188
+ errors,
189
+ warnings,
190
+ };
191
+ }
192
+ /**
193
+ * Validate retroactive close parameters
194
+ */
195
+ function validateRetroactiveClose(params) {
196
+ const errors = [];
197
+ const warnings = [];
198
+ // Retroactive close SHOULD have closing_reflection or decisions
199
+ // but we allow minimal retroactive closes (better than nothing)
200
+ if (!params.closing_reflection && (!params.decisions || params.decisions.length === 0)) {
201
+ warnings.push("Retroactive close has no closing_reflection or decisions - session will have minimal content");
202
+ }
203
+ // session_id is optional for retroactive - will be generated if not provided
204
+ // but if provided, it will be used
205
+ if (params.session_id) {
206
+ warnings.push("session_id provided for retroactive close - this will be ignored, a new ID will be generated");
207
+ }
208
+ return {
209
+ valid: true, // Retroactive closes are always valid (recovery path)
210
+ errors,
211
+ warnings,
212
+ };
213
+ }
214
+ /**
215
+ * Validate session close parameters based on close type
216
+ */
217
+ export function validateSessionClose(params) {
218
+ const closeType = params.close_type || "standard";
219
+ switch (closeType) {
220
+ case "standard":
221
+ return validateStandardClose(params);
222
+ case "quick":
223
+ return validateQuickClose(params);
224
+ case "autonomous":
225
+ return validateAutonomousClose(params);
226
+ case "retroactive":
227
+ return validateRetroactiveClose(params);
228
+ default:
229
+ return {
230
+ valid: false,
231
+ errors: [`Unknown close_type: ${closeType}`],
232
+ warnings: [],
233
+ };
234
+ }
235
+ }
236
+ /**
237
+ * Build close_compliance object from validated params
238
+ */
239
+ export function buildCloseCompliance(params, agentIdentity, learningsCount) {
240
+ const closeType = params.close_type || "standard";
241
+ const scarsApplied = params.closing_reflection?.scars_applied?.length || 0;
242
+ const compliance = {
243
+ close_type: closeType,
244
+ agent: agentIdentity,
245
+ checklist_displayed: true,
246
+ questions_answered_by_agent: closeType !== "quick",
247
+ human_asked_for_corrections: closeType === "standard" && params.human_corrections !== undefined,
248
+ learnings_stored: learningsCount,
249
+ scars_applied: scarsApplied,
250
+ };
251
+ // Mark retroactive closes for tracking
252
+ if (closeType === "retroactive") {
253
+ compliance.retroactive = true;
254
+ }
255
+ return compliance;
256
+ }
257
+ //# sourceMappingURL=compliance-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance-validator.js","sourceRoot":"","sources":["../../src/services/compliance-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * GitMem Configuration Service
3
+ *
4
+ * Manages configuration for search mode (local vs remote),
5
+ * cache settings, and Supabase detection.
6
+ *
7
+ * Environment Variables:
8
+ * - GITMEM_SEARCH_MODE: "local" | "remote" | "auto" (default: "auto")
9
+ * - GITMEM_CACHE_TTL_MINUTES: Minutes before cache refresh (default: 15)
10
+ * - GITMEM_STALE_CHECK: "true" | "false" - Check for stale data (default: "true")
11
+ * - SUPABASE_URL: Supabase project URL
12
+ *
13
+ * Issue: OD-473
14
+ */
15
+ import type { GitMemTier } from "./tier.js";
16
+ export type SearchMode = "local" | "remote" | "auto";
17
+ export interface GitMemConfig {
18
+ tier: GitMemTier;
19
+ tablePrefix: string;
20
+ searchMode: SearchMode;
21
+ resolvedSearchMode: "local" | "remote";
22
+ cacheTtlMinutes: number;
23
+ staleCheckEnabled: boolean;
24
+ supabaseUrl: string;
25
+ isCloudSupabase: boolean;
26
+ isOnPremSupabase: boolean;
27
+ }
28
+ /**
29
+ * Load configuration from environment
30
+ */
31
+ export declare function loadConfig(): GitMemConfig;
32
+ /**
33
+ * Get the configuration (loads once, caches)
34
+ */
35
+ export declare function getConfig(): GitMemConfig;
36
+ /**
37
+ * Reload configuration (for testing or dynamic updates)
38
+ */
39
+ export declare function reloadConfig(): GitMemConfig;
40
+ /**
41
+ * Check if local search should be used
42
+ */
43
+ export declare function shouldUseLocalSearch(): boolean;
44
+ /**
45
+ * Check if remote search should be used
46
+ */
47
+ export declare function shouldUseRemoteSearch(): boolean;
48
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/services/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,YAAY;IAE3B,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IAGpB,UAAU,EAAE,UAAU,CAAC;IACvB,kBAAkB,EAAE,OAAO,GAAG,QAAQ,CAAC;IAGvC,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAG3B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAqDD;;GAEG;AACH,wBAAgB,UAAU,IAAI,YAAY,CAsCzC;AAKD;;GAEG;AACH,wBAAgB,SAAS,IAAI,YAAY,CAKxC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,YAAY,CAG3C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * GitMem Configuration Service
3
+ *
4
+ * Manages configuration for search mode (local vs remote),
5
+ * cache settings, and Supabase detection.
6
+ *
7
+ * Environment Variables:
8
+ * - GITMEM_SEARCH_MODE: "local" | "remote" | "auto" (default: "auto")
9
+ * - GITMEM_CACHE_TTL_MINUTES: Minutes before cache refresh (default: 15)
10
+ * - GITMEM_STALE_CHECK: "true" | "false" - Check for stale data (default: "true")
11
+ * - SUPABASE_URL: Supabase project URL
12
+ *
13
+ * Issue: OD-473
14
+ */
15
+ import { getTier, hasSupabase, getTablePrefix } from "./tier.js";
16
+ // Private IP patterns for on-prem detection
17
+ const PRIVATE_IP_PATTERNS = [
18
+ /^https?:\/\/localhost/,
19
+ /^https?:\/\/127\./,
20
+ /^https?:\/\/10\./,
21
+ /^https?:\/\/172\.(1[6-9]|2[0-9]|3[0-1])\./,
22
+ /^https?:\/\/192\.168\./,
23
+ /^https?:\/\/\[::1\]/,
24
+ /^https?:\/\/\[fe80:/,
25
+ ];
26
+ // Cloud Supabase pattern
27
+ const CLOUD_SUPABASE_PATTERN = /\.supabase\.co/;
28
+ /**
29
+ * Detect if URL points to cloud Supabase
30
+ */
31
+ function isCloudSupabaseUrl(url) {
32
+ return CLOUD_SUPABASE_PATTERN.test(url);
33
+ }
34
+ /**
35
+ * Detect if URL points to on-prem/local Supabase
36
+ */
37
+ function isOnPremSupabaseUrl(url) {
38
+ return PRIVATE_IP_PATTERNS.some((pattern) => pattern.test(url));
39
+ }
40
+ /**
41
+ * Resolve "auto" search mode based on Supabase URL
42
+ */
43
+ function resolveSearchMode(mode, supabaseUrl) {
44
+ if (mode === "local")
45
+ return "local";
46
+ if (mode === "remote")
47
+ return "remote";
48
+ // Auto-detect based on URL
49
+ if (isCloudSupabaseUrl(supabaseUrl)) {
50
+ // Cloud Supabase = use local search to reduce API calls and latency
51
+ return "local";
52
+ }
53
+ if (isOnPremSupabaseUrl(supabaseUrl)) {
54
+ // On-prem Supabase = query directly, it's fast and always fresh
55
+ return "remote";
56
+ }
57
+ // Unknown URL pattern, default to local for safety
58
+ console.warn(`[config] Unknown Supabase URL pattern: ${supabaseUrl}, defaulting to local search`);
59
+ return "local";
60
+ }
61
+ /**
62
+ * Load configuration from environment
63
+ */
64
+ export function loadConfig() {
65
+ const tier = getTier();
66
+ const tablePrefix = getTablePrefix();
67
+ const supabaseUrl = process.env.SUPABASE_URL || "";
68
+ const searchModeEnv = (process.env.GITMEM_SEARCH_MODE || "auto").toLowerCase();
69
+ const cacheTtlMinutes = parseInt(process.env.GITMEM_CACHE_TTL_MINUTES || "15", 10);
70
+ const staleCheckEnabled = process.env.GITMEM_STALE_CHECK !== "false";
71
+ // Validate search mode
72
+ const searchMode = ["local", "remote", "auto"].includes(searchModeEnv)
73
+ ? searchModeEnv
74
+ : "auto";
75
+ // Free tier: always local, no Supabase detection needed
76
+ const isCloud = hasSupabase() ? isCloudSupabaseUrl(supabaseUrl) : false;
77
+ const isOnPrem = hasSupabase() ? isOnPremSupabaseUrl(supabaseUrl) : false;
78
+ const resolvedMode = hasSupabase() ? resolveSearchMode(searchMode, supabaseUrl) : "local";
79
+ const config = {
80
+ tier,
81
+ tablePrefix,
82
+ searchMode,
83
+ resolvedSearchMode: resolvedMode,
84
+ cacheTtlMinutes: Math.max(1, cacheTtlMinutes),
85
+ staleCheckEnabled,
86
+ supabaseUrl,
87
+ isCloudSupabase: isCloud,
88
+ isOnPremSupabase: isOnPrem,
89
+ };
90
+ console.error(`[config] Tier: ${tier} | Table prefix: ${tablePrefix}`);
91
+ console.error(`[config] Search mode: ${searchMode} → ${resolvedMode}`);
92
+ if (hasSupabase()) {
93
+ console.error(`[config] Supabase: ${isCloud ? "cloud" : isOnPrem ? "on-prem" : "unknown"}`);
94
+ }
95
+ console.error(`[config] Cache TTL: ${cacheTtlMinutes} minutes, Stale check: ${staleCheckEnabled}`);
96
+ return config;
97
+ }
98
+ // Singleton config instance
99
+ let configInstance = null;
100
+ /**
101
+ * Get the configuration (loads once, caches)
102
+ */
103
+ export function getConfig() {
104
+ if (!configInstance) {
105
+ configInstance = loadConfig();
106
+ }
107
+ return configInstance;
108
+ }
109
+ /**
110
+ * Reload configuration (for testing or dynamic updates)
111
+ */
112
+ export function reloadConfig() {
113
+ configInstance = loadConfig();
114
+ return configInstance;
115
+ }
116
+ /**
117
+ * Check if local search should be used
118
+ */
119
+ export function shouldUseLocalSearch() {
120
+ return getConfig().resolvedSearchMode === "local";
121
+ }
122
+ /**
123
+ * Check if remote search should be used
124
+ */
125
+ export function shouldUseRemoteSearch() {
126
+ return getConfig().resolvedSearchMode === "remote";
127
+ }
128
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/services/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Embedding Service — Multi-provider embedding abstraction
3
+ *
4
+ * Generates text embeddings for semantic search using multiple providers.
5
+ * Auto-detects provider from available API keys.
6
+ *
7
+ * Provider detection (in priority order):
8
+ * GITMEM_EMBEDDING_PROVIDER=openai|openrouter|ollama — force provider
9
+ * OPENAI_API_KEY → OpenAI direct (text-embedding-3-small)
10
+ * OPENROUTER_API_KEY → OpenRouter (text-embedding-3-small via openrouter.ai)
11
+ * OLLAMA_URL → Ollama local (nomic-embed-text, 768-dim — requires pgvector dimension match)
12
+ *
13
+ * If no provider is configured, embed() returns null (graceful degradation).
14
+ * Records stored without embeddings can still be retrieved by ID/filters,
15
+ * but won't appear in semantic search results.
16
+ */
17
+ export type EmbeddingProvider = "openai" | "openrouter" | "ollama" | "none";
18
+ interface EmbeddingConfig {
19
+ provider: EmbeddingProvider;
20
+ apiUrl: string;
21
+ apiKey: string;
22
+ model: string;
23
+ expectedDim: number;
24
+ }
25
+ /**
26
+ * Detect the best available embedding provider from environment
27
+ */
28
+ export declare function detectProvider(): EmbeddingConfig;
29
+ /**
30
+ * Get the current embedding configuration (cached)
31
+ */
32
+ export declare function getEmbeddingConfig(): EmbeddingConfig;
33
+ /**
34
+ * Reset cached config (for testing)
35
+ */
36
+ export declare function resetEmbeddingConfig(): void;
37
+ /**
38
+ * Generate an embedding for the given text.
39
+ *
40
+ * Returns normalized embedding vector, or null if no provider is configured.
41
+ * Throws on API errors (network, auth, rate limit).
42
+ */
43
+ export declare function embed(text: string): Promise<number[] | null>;
44
+ /**
45
+ * Get the expected embedding dimension for the current provider.
46
+ * Returns 0 if no provider configured.
47
+ */
48
+ export declare function getEmbeddingDim(): number;
49
+ /**
50
+ * Check if embedding generation is available.
51
+ */
52
+ export declare function isEmbeddingAvailable(): boolean;
53
+ /**
54
+ * Get the current provider name.
55
+ */
56
+ export declare function getProviderName(): EmbeddingProvider;
57
+ export {};
58
+ //# sourceMappingURL=embedding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../src/services/embedding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAeH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE5E,UAAU,eAAe;IACvB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAiBD;;GAEG;AACH,wBAAgB,cAAc,IAAI,eAAe,CAmFhD;AAKD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,CAUpD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAiED;;;;;GAKG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CA8BlE;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,iBAAiB,CAEnD"}