@lleverage-ai/agent-sdk 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2321 -0
  3. package/dist/agent.d.ts +52 -0
  4. package/dist/agent.d.ts.map +1 -0
  5. package/dist/agent.js +2122 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/backend.d.ts +378 -0
  8. package/dist/backend.d.ts.map +1 -0
  9. package/dist/backend.js +71 -0
  10. package/dist/backend.js.map +1 -0
  11. package/dist/backends/composite.d.ts +258 -0
  12. package/dist/backends/composite.d.ts.map +1 -0
  13. package/dist/backends/composite.js +437 -0
  14. package/dist/backends/composite.js.map +1 -0
  15. package/dist/backends/filesystem.d.ts +268 -0
  16. package/dist/backends/filesystem.d.ts.map +1 -0
  17. package/dist/backends/filesystem.js +623 -0
  18. package/dist/backends/filesystem.js.map +1 -0
  19. package/dist/backends/index.d.ts +14 -0
  20. package/dist/backends/index.d.ts.map +1 -0
  21. package/dist/backends/index.js +14 -0
  22. package/dist/backends/index.js.map +1 -0
  23. package/dist/backends/persistent.d.ts +312 -0
  24. package/dist/backends/persistent.d.ts.map +1 -0
  25. package/dist/backends/persistent.js +519 -0
  26. package/dist/backends/persistent.js.map +1 -0
  27. package/dist/backends/sandbox.d.ts +315 -0
  28. package/dist/backends/sandbox.d.ts.map +1 -0
  29. package/dist/backends/sandbox.js +490 -0
  30. package/dist/backends/sandbox.js.map +1 -0
  31. package/dist/backends/state.d.ts +225 -0
  32. package/dist/backends/state.d.ts.map +1 -0
  33. package/dist/backends/state.js +396 -0
  34. package/dist/backends/state.js.map +1 -0
  35. package/dist/checkpointer/file-saver.d.ts +182 -0
  36. package/dist/checkpointer/file-saver.d.ts.map +1 -0
  37. package/dist/checkpointer/file-saver.js +298 -0
  38. package/dist/checkpointer/file-saver.js.map +1 -0
  39. package/dist/checkpointer/index.d.ts +40 -0
  40. package/dist/checkpointer/index.d.ts.map +1 -0
  41. package/dist/checkpointer/index.js +40 -0
  42. package/dist/checkpointer/index.js.map +1 -0
  43. package/dist/checkpointer/kv-saver.d.ts +142 -0
  44. package/dist/checkpointer/kv-saver.d.ts.map +1 -0
  45. package/dist/checkpointer/kv-saver.js +176 -0
  46. package/dist/checkpointer/kv-saver.js.map +1 -0
  47. package/dist/checkpointer/memory-saver.d.ts +158 -0
  48. package/dist/checkpointer/memory-saver.d.ts.map +1 -0
  49. package/dist/checkpointer/memory-saver.js +222 -0
  50. package/dist/checkpointer/memory-saver.js.map +1 -0
  51. package/dist/checkpointer/types.d.ts +353 -0
  52. package/dist/checkpointer/types.d.ts.map +1 -0
  53. package/dist/checkpointer/types.js +159 -0
  54. package/dist/checkpointer/types.js.map +1 -0
  55. package/dist/context-manager.d.ts +627 -0
  56. package/dist/context-manager.d.ts.map +1 -0
  57. package/dist/context-manager.js +1039 -0
  58. package/dist/context-manager.js.map +1 -0
  59. package/dist/context.d.ts +57 -0
  60. package/dist/context.d.ts.map +1 -0
  61. package/dist/context.js +76 -0
  62. package/dist/context.js.map +1 -0
  63. package/dist/errors/index.d.ts +611 -0
  64. package/dist/errors/index.d.ts.map +1 -0
  65. package/dist/errors/index.js +1023 -0
  66. package/dist/errors/index.js.map +1 -0
  67. package/dist/generation-helpers.d.ts +126 -0
  68. package/dist/generation-helpers.d.ts.map +1 -0
  69. package/dist/generation-helpers.js +181 -0
  70. package/dist/generation-helpers.js.map +1 -0
  71. package/dist/hooks/audit.d.ts +210 -0
  72. package/dist/hooks/audit.d.ts.map +1 -0
  73. package/dist/hooks/audit.js +305 -0
  74. package/dist/hooks/audit.js.map +1 -0
  75. package/dist/hooks/cache.d.ts +180 -0
  76. package/dist/hooks/cache.d.ts.map +1 -0
  77. package/dist/hooks/cache.js +273 -0
  78. package/dist/hooks/cache.js.map +1 -0
  79. package/dist/hooks/guardrails.d.ts +145 -0
  80. package/dist/hooks/guardrails.d.ts.map +1 -0
  81. package/dist/hooks/guardrails.js +326 -0
  82. package/dist/hooks/guardrails.js.map +1 -0
  83. package/dist/hooks/index.d.ts +18 -0
  84. package/dist/hooks/index.d.ts.map +1 -0
  85. package/dist/hooks/index.js +32 -0
  86. package/dist/hooks/index.js.map +1 -0
  87. package/dist/hooks/logging.d.ts +193 -0
  88. package/dist/hooks/logging.d.ts.map +1 -0
  89. package/dist/hooks/logging.js +345 -0
  90. package/dist/hooks/logging.js.map +1 -0
  91. package/dist/hooks/parallel-guardrails.d.ts +268 -0
  92. package/dist/hooks/parallel-guardrails.d.ts.map +1 -0
  93. package/dist/hooks/parallel-guardrails.js +416 -0
  94. package/dist/hooks/parallel-guardrails.js.map +1 -0
  95. package/dist/hooks/rate-limit.d.ts +305 -0
  96. package/dist/hooks/rate-limit.d.ts.map +1 -0
  97. package/dist/hooks/rate-limit.js +372 -0
  98. package/dist/hooks/rate-limit.js.map +1 -0
  99. package/dist/hooks/retry.d.ts +144 -0
  100. package/dist/hooks/retry.d.ts.map +1 -0
  101. package/dist/hooks/retry.js +210 -0
  102. package/dist/hooks/retry.js.map +1 -0
  103. package/dist/hooks/secrets.d.ts +174 -0
  104. package/dist/hooks/secrets.d.ts.map +1 -0
  105. package/dist/hooks/secrets.js +306 -0
  106. package/dist/hooks/secrets.js.map +1 -0
  107. package/dist/hooks.d.ts +229 -0
  108. package/dist/hooks.d.ts.map +1 -0
  109. package/dist/hooks.js +352 -0
  110. package/dist/hooks.js.map +1 -0
  111. package/dist/index.d.ts +97 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +182 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/mcp/env.d.ts +25 -0
  116. package/dist/mcp/env.d.ts.map +1 -0
  117. package/dist/mcp/env.js +18 -0
  118. package/dist/mcp/env.js.map +1 -0
  119. package/dist/mcp/index.d.ts +16 -0
  120. package/dist/mcp/index.d.ts.map +1 -0
  121. package/dist/mcp/index.js +17 -0
  122. package/dist/mcp/index.js.map +1 -0
  123. package/dist/mcp/manager.d.ts +184 -0
  124. package/dist/mcp/manager.d.ts.map +1 -0
  125. package/dist/mcp/manager.js +446 -0
  126. package/dist/mcp/manager.js.map +1 -0
  127. package/dist/mcp/types.d.ts +58 -0
  128. package/dist/mcp/types.d.ts.map +1 -0
  129. package/dist/mcp/types.js +7 -0
  130. package/dist/mcp/types.js.map +1 -0
  131. package/dist/mcp/validation.d.ts +119 -0
  132. package/dist/mcp/validation.d.ts.map +1 -0
  133. package/dist/mcp/validation.js +407 -0
  134. package/dist/mcp/validation.js.map +1 -0
  135. package/dist/mcp/virtual-server.d.ts +78 -0
  136. package/dist/mcp/virtual-server.d.ts.map +1 -0
  137. package/dist/mcp/virtual-server.js +137 -0
  138. package/dist/mcp/virtual-server.js.map +1 -0
  139. package/dist/memory/filesystem-store.d.ts +217 -0
  140. package/dist/memory/filesystem-store.d.ts.map +1 -0
  141. package/dist/memory/filesystem-store.js +343 -0
  142. package/dist/memory/filesystem-store.js.map +1 -0
  143. package/dist/memory/index.d.ts +46 -0
  144. package/dist/memory/index.d.ts.map +1 -0
  145. package/dist/memory/index.js +46 -0
  146. package/dist/memory/index.js.map +1 -0
  147. package/dist/memory/loader.d.ts +396 -0
  148. package/dist/memory/loader.d.ts.map +1 -0
  149. package/dist/memory/loader.js +419 -0
  150. package/dist/memory/loader.js.map +1 -0
  151. package/dist/memory/permissions.d.ts +282 -0
  152. package/dist/memory/permissions.d.ts.map +1 -0
  153. package/dist/memory/permissions.js +297 -0
  154. package/dist/memory/permissions.js.map +1 -0
  155. package/dist/memory/rules.d.ts +249 -0
  156. package/dist/memory/rules.d.ts.map +1 -0
  157. package/dist/memory/rules.js +362 -0
  158. package/dist/memory/rules.js.map +1 -0
  159. package/dist/memory/store.d.ts +286 -0
  160. package/dist/memory/store.d.ts.map +1 -0
  161. package/dist/memory/store.js +263 -0
  162. package/dist/memory/store.js.map +1 -0
  163. package/dist/middleware/apply.d.ts +73 -0
  164. package/dist/middleware/apply.d.ts.map +1 -0
  165. package/dist/middleware/apply.js +219 -0
  166. package/dist/middleware/apply.js.map +1 -0
  167. package/dist/middleware/context.d.ts +33 -0
  168. package/dist/middleware/context.d.ts.map +1 -0
  169. package/dist/middleware/context.js +176 -0
  170. package/dist/middleware/context.js.map +1 -0
  171. package/dist/middleware/index.d.ts +31 -0
  172. package/dist/middleware/index.d.ts.map +1 -0
  173. package/dist/middleware/index.js +32 -0
  174. package/dist/middleware/index.js.map +1 -0
  175. package/dist/middleware/logging.d.ts +137 -0
  176. package/dist/middleware/logging.d.ts.map +1 -0
  177. package/dist/middleware/logging.js +374 -0
  178. package/dist/middleware/logging.js.map +1 -0
  179. package/dist/middleware/types.d.ts +183 -0
  180. package/dist/middleware/types.d.ts.map +1 -0
  181. package/dist/middleware/types.js +11 -0
  182. package/dist/middleware/types.js.map +1 -0
  183. package/dist/observability/events.d.ts +183 -0
  184. package/dist/observability/events.d.ts.map +1 -0
  185. package/dist/observability/events.js +305 -0
  186. package/dist/observability/events.js.map +1 -0
  187. package/dist/observability/index.d.ts +55 -0
  188. package/dist/observability/index.d.ts.map +1 -0
  189. package/dist/observability/index.js +87 -0
  190. package/dist/observability/index.js.map +1 -0
  191. package/dist/observability/logger.d.ts +318 -0
  192. package/dist/observability/logger.d.ts.map +1 -0
  193. package/dist/observability/logger.js +436 -0
  194. package/dist/observability/logger.js.map +1 -0
  195. package/dist/observability/metrics.d.ts +341 -0
  196. package/dist/observability/metrics.d.ts.map +1 -0
  197. package/dist/observability/metrics.js +490 -0
  198. package/dist/observability/metrics.js.map +1 -0
  199. package/dist/observability/preset.d.ts +161 -0
  200. package/dist/observability/preset.d.ts.map +1 -0
  201. package/dist/observability/preset.js +133 -0
  202. package/dist/observability/preset.js.map +1 -0
  203. package/dist/observability/streaming.d.ts +113 -0
  204. package/dist/observability/streaming.d.ts.map +1 -0
  205. package/dist/observability/streaming.js +114 -0
  206. package/dist/observability/streaming.js.map +1 -0
  207. package/dist/observability/tracing.d.ts +378 -0
  208. package/dist/observability/tracing.d.ts.map +1 -0
  209. package/dist/observability/tracing.js +539 -0
  210. package/dist/observability/tracing.js.map +1 -0
  211. package/dist/plugins.d.ts +55 -0
  212. package/dist/plugins.d.ts.map +1 -0
  213. package/dist/plugins.js +63 -0
  214. package/dist/plugins.js.map +1 -0
  215. package/dist/presets/index.d.ts +7 -0
  216. package/dist/presets/index.d.ts.map +1 -0
  217. package/dist/presets/index.js +7 -0
  218. package/dist/presets/index.js.map +1 -0
  219. package/dist/presets/production.d.ts +262 -0
  220. package/dist/presets/production.d.ts.map +1 -0
  221. package/dist/presets/production.js +295 -0
  222. package/dist/presets/production.js.map +1 -0
  223. package/dist/security/index.d.ts +179 -0
  224. package/dist/security/index.d.ts.map +1 -0
  225. package/dist/security/index.js +323 -0
  226. package/dist/security/index.js.map +1 -0
  227. package/dist/subagents/advanced.d.ts +413 -0
  228. package/dist/subagents/advanced.d.ts.map +1 -0
  229. package/dist/subagents/advanced.js +396 -0
  230. package/dist/subagents/advanced.js.map +1 -0
  231. package/dist/subagents/index.d.ts +14 -0
  232. package/dist/subagents/index.d.ts.map +1 -0
  233. package/dist/subagents/index.js +15 -0
  234. package/dist/subagents/index.js.map +1 -0
  235. package/dist/subagents.d.ts +73 -0
  236. package/dist/subagents.d.ts.map +1 -0
  237. package/dist/subagents.js +213 -0
  238. package/dist/subagents.js.map +1 -0
  239. package/dist/task-store/file-store.d.ts +76 -0
  240. package/dist/task-store/file-store.d.ts.map +1 -0
  241. package/dist/task-store/file-store.js +190 -0
  242. package/dist/task-store/file-store.js.map +1 -0
  243. package/dist/task-store/index.d.ts +11 -0
  244. package/dist/task-store/index.d.ts.map +1 -0
  245. package/dist/task-store/index.js +10 -0
  246. package/dist/task-store/index.js.map +1 -0
  247. package/dist/task-store/kv-store.d.ts +140 -0
  248. package/dist/task-store/kv-store.d.ts.map +1 -0
  249. package/dist/task-store/kv-store.js +169 -0
  250. package/dist/task-store/kv-store.js.map +1 -0
  251. package/dist/task-store/memory-store.d.ts +66 -0
  252. package/dist/task-store/memory-store.d.ts.map +1 -0
  253. package/dist/task-store/memory-store.js +125 -0
  254. package/dist/task-store/memory-store.js.map +1 -0
  255. package/dist/task-store/types.d.ts +235 -0
  256. package/dist/task-store/types.d.ts.map +1 -0
  257. package/dist/task-store/types.js +110 -0
  258. package/dist/task-store/types.js.map +1 -0
  259. package/dist/testing/assertions.d.ts +401 -0
  260. package/dist/testing/assertions.d.ts.map +1 -0
  261. package/dist/testing/assertions.js +630 -0
  262. package/dist/testing/assertions.js.map +1 -0
  263. package/dist/testing/index.d.ts +343 -0
  264. package/dist/testing/index.d.ts.map +1 -0
  265. package/dist/testing/index.js +360 -0
  266. package/dist/testing/index.js.map +1 -0
  267. package/dist/testing/mock-agent.d.ts +214 -0
  268. package/dist/testing/mock-agent.d.ts.map +1 -0
  269. package/dist/testing/mock-agent.js +448 -0
  270. package/dist/testing/mock-agent.js.map +1 -0
  271. package/dist/testing/recorder.d.ts +288 -0
  272. package/dist/testing/recorder.d.ts.map +1 -0
  273. package/dist/testing/recorder.js +499 -0
  274. package/dist/testing/recorder.js.map +1 -0
  275. package/dist/tools/execute.d.ts +104 -0
  276. package/dist/tools/execute.d.ts.map +1 -0
  277. package/dist/tools/execute.js +191 -0
  278. package/dist/tools/execute.js.map +1 -0
  279. package/dist/tools/factory.d.ts +260 -0
  280. package/dist/tools/factory.d.ts.map +1 -0
  281. package/dist/tools/factory.js +241 -0
  282. package/dist/tools/factory.js.map +1 -0
  283. package/dist/tools/filesystem.d.ts +215 -0
  284. package/dist/tools/filesystem.d.ts.map +1 -0
  285. package/dist/tools/filesystem.js +311 -0
  286. package/dist/tools/filesystem.js.map +1 -0
  287. package/dist/tools/index.d.ts +33 -0
  288. package/dist/tools/index.d.ts.map +1 -0
  289. package/dist/tools/index.js +33 -0
  290. package/dist/tools/index.js.map +1 -0
  291. package/dist/tools/search.d.ts +59 -0
  292. package/dist/tools/search.d.ts.map +1 -0
  293. package/dist/tools/search.js +94 -0
  294. package/dist/tools/search.js.map +1 -0
  295. package/dist/tools/skills.d.ts +354 -0
  296. package/dist/tools/skills.d.ts.map +1 -0
  297. package/dist/tools/skills.js +413 -0
  298. package/dist/tools/skills.js.map +1 -0
  299. package/dist/tools/task.d.ts +272 -0
  300. package/dist/tools/task.d.ts.map +1 -0
  301. package/dist/tools/task.js +521 -0
  302. package/dist/tools/task.js.map +1 -0
  303. package/dist/tools/todos.d.ts +131 -0
  304. package/dist/tools/todos.d.ts.map +1 -0
  305. package/dist/tools/todos.js +120 -0
  306. package/dist/tools/todos.js.map +1 -0
  307. package/dist/tools/tool-registry.d.ts +424 -0
  308. package/dist/tools/tool-registry.d.ts.map +1 -0
  309. package/dist/tools/tool-registry.js +607 -0
  310. package/dist/tools/tool-registry.js.map +1 -0
  311. package/dist/tools/user-interaction.d.ts +116 -0
  312. package/dist/tools/user-interaction.d.ts.map +1 -0
  313. package/dist/tools/user-interaction.js +147 -0
  314. package/dist/tools/user-interaction.js.map +1 -0
  315. package/dist/tools/utils.d.ts +124 -0
  316. package/dist/tools/utils.d.ts.map +1 -0
  317. package/dist/tools/utils.js +189 -0
  318. package/dist/tools/utils.js.map +1 -0
  319. package/dist/tools.d.ts +74 -0
  320. package/dist/tools.d.ts.map +1 -0
  321. package/dist/tools.js +73 -0
  322. package/dist/tools.js.map +1 -0
  323. package/dist/types.d.ts +2421 -0
  324. package/dist/types.d.ts.map +1 -0
  325. package/dist/types.js +55 -0
  326. package/dist/types.js.map +1 -0
  327. package/package.json +81 -0
@@ -0,0 +1,249 @@
1
+ /**
2
+ * Path-based rule matching for memory documents.
3
+ *
4
+ * Memory documents can specify path patterns in their frontmatter to
5
+ * control when they should be applied. This module provides matching
6
+ * functionality for determining which memories are relevant.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { filterMemoriesByPath, matchesPathPattern } from "@lleverage-ai/agent-sdk";
11
+ *
12
+ * // Check if a file matches a pattern
13
+ * const matches = matchesPathPattern("src/api/users.ts", "src/api/**\/*.ts");
14
+ * // matches = true
15
+ *
16
+ * // Filter memories by current file
17
+ * const relevant = filterMemoriesByPath(memories, "src/api/users.ts");
18
+ * ```
19
+ *
20
+ * @packageDocumentation
21
+ */
22
+ import type { AdditionalMemoryFile } from "./loader.js";
23
+ import type { MemoryDocument } from "./store.js";
24
+ /**
25
+ * Check if a file path matches a glob pattern.
26
+ *
27
+ * Supports standard glob patterns:
28
+ * - `*` - matches any characters except /
29
+ * - `**` - matches any characters including /
30
+ * - `?` - matches exactly one character except /
31
+ * - `[abc]` - matches any character in the brackets
32
+ * - `[!abc]` - matches any character not in the brackets
33
+ *
34
+ * @param filePath - The file path to test
35
+ * @param pattern - The glob pattern to match against
36
+ * @returns True if the path matches the pattern
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * matchesPathPattern("src/api/users.ts", "src/**\/*.ts"); // true
41
+ * matchesPathPattern("src/api/users.ts", "src/api/*.ts"); // true
42
+ * matchesPathPattern("src/api/users.ts", "tests/**\/*.ts"); // false
43
+ * matchesPathPattern("src/api/users.ts", "**\/*.ts"); // true
44
+ * matchesPathPattern("README.md", "*.md"); // true
45
+ * ```
46
+ *
47
+ * @category Memory
48
+ */
49
+ export declare function matchesPathPattern(filePath: string, pattern: string): boolean;
50
+ /**
51
+ * Check if a file path matches any of the given patterns.
52
+ *
53
+ * @param filePath - The file path to test
54
+ * @param patterns - Array of glob patterns
55
+ * @returns True if the path matches any pattern
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * const patterns = ["src/**\/*.ts", "tests/**\/*.ts"];
60
+ * matchesAnyPathPattern("src/index.ts", patterns); // true
61
+ * matchesAnyPathPattern("README.md", patterns); // false
62
+ * ```
63
+ *
64
+ * @category Memory
65
+ */
66
+ export declare function matchesAnyPathPattern(filePath: string, patterns: string[]): boolean;
67
+ /**
68
+ * Filter memory documents by path relevance.
69
+ *
70
+ * A memory document is considered relevant if:
71
+ * 1. It has no `paths` metadata (applies to all files)
72
+ * 2. The file path matches any of the patterns in `paths` metadata
73
+ *
74
+ * @param documents - Array of memory documents to filter
75
+ * @param currentPath - The current file path to match against
76
+ * @returns Array of relevant memory documents, sorted by priority
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * const memories: MemoryDocument[] = [
81
+ * {
82
+ * path: "/memory/api.md",
83
+ * metadata: { paths: ["src/api/**\/*.ts"], priority: 10 },
84
+ * content: "API rules...",
85
+ * modifiedAt: Date.now(),
86
+ * },
87
+ * {
88
+ * path: "/memory/general.md",
89
+ * metadata: {}, // No paths = applies to all
90
+ * content: "General rules...",
91
+ * modifiedAt: Date.now(),
92
+ * },
93
+ * ];
94
+ *
95
+ * const relevant = filterMemoriesByPath(memories, "src/api/users.ts");
96
+ * // Returns both, sorted by priority (api.md first)
97
+ * ```
98
+ *
99
+ * @category Memory
100
+ */
101
+ export declare function filterMemoriesByPath(documents: MemoryDocument[], currentPath: string): MemoryDocument[];
102
+ /**
103
+ * Filter additional memory files by path relevance.
104
+ *
105
+ * @param files - Array of additional memory files
106
+ * @param currentPath - The current file path to match against
107
+ * @returns Array of relevant files, sorted by priority
108
+ *
109
+ * @category Memory
110
+ */
111
+ export declare function filterAdditionalFilesByPath(files: AdditionalMemoryFile[], currentPath: string): AdditionalMemoryFile[];
112
+ /**
113
+ * Options for building path-specific memory context.
114
+ *
115
+ * @category Memory
116
+ */
117
+ export interface BuildPathMemoryContextOptions {
118
+ /**
119
+ * User memory document.
120
+ */
121
+ userMemory?: MemoryDocument;
122
+ /**
123
+ * Project memory document.
124
+ */
125
+ projectMemory?: MemoryDocument;
126
+ /**
127
+ * Additional memory files.
128
+ */
129
+ additionalFiles?: AdditionalMemoryFile[];
130
+ /**
131
+ * Current file path for filtering.
132
+ */
133
+ currentPath?: string;
134
+ /**
135
+ * Include memories without path restrictions.
136
+ * @defaultValue true
137
+ */
138
+ includeGeneral?: boolean;
139
+ /**
140
+ * Include file names as subheaders for additional files.
141
+ * @defaultValue true
142
+ */
143
+ includeFilenames?: boolean;
144
+ }
145
+ /**
146
+ * Result from building path-specific memory context.
147
+ *
148
+ * @category Memory
149
+ */
150
+ export interface PathMemoryContext {
151
+ /**
152
+ * Whether user memory applies to current path.
153
+ */
154
+ userMemoryApplies: boolean;
155
+ /**
156
+ * Whether project memory applies to current path.
157
+ */
158
+ projectMemoryApplies: boolean;
159
+ /**
160
+ * Filtered additional files that apply to current path.
161
+ */
162
+ relevantAdditionalFiles: AdditionalMemoryFile[];
163
+ /**
164
+ * Combined memory content formatted for prompt injection.
165
+ */
166
+ combinedContent: string;
167
+ /**
168
+ * Paths from all applicable memories (for debugging).
169
+ */
170
+ appliedPatterns: string[];
171
+ }
172
+ /**
173
+ * Build memory context filtered by current file path.
174
+ *
175
+ * This function filters all memory sources based on their path patterns
176
+ * and the current file being worked on. Useful for providing context-aware
177
+ * memory injection.
178
+ *
179
+ * @param options - Context building options
180
+ * @returns Path-filtered memory context
181
+ *
182
+ * @example
183
+ * ```typescript
184
+ * const context = buildPathMemoryContext({
185
+ * userMemory,
186
+ * projectMemory,
187
+ * additionalFiles,
188
+ * currentPath: "src/api/users.ts",
189
+ * });
190
+ *
191
+ * if (context.combinedContent) {
192
+ * systemPrompt += `\n\n## Relevant Context\n\n${context.combinedContent}`;
193
+ * }
194
+ * ```
195
+ *
196
+ * @category Memory
197
+ */
198
+ export declare function buildPathMemoryContext(options: BuildPathMemoryContextOptions): PathMemoryContext;
199
+ /**
200
+ * Filter memory documents by tags.
201
+ *
202
+ * @param documents - Array of memory documents
203
+ * @param tags - Tags to filter by (document must have at least one)
204
+ * @returns Filtered array of documents
205
+ *
206
+ * @example
207
+ * ```typescript
208
+ * const docs = filterMemoriesByTags(memories, ["api", "security"]);
209
+ * // Returns documents that have either "api" or "security" tag
210
+ * ```
211
+ *
212
+ * @category Memory
213
+ */
214
+ export declare function filterMemoriesByTags(documents: MemoryDocument[], tags: string[]): MemoryDocument[];
215
+ /**
216
+ * Filter memory documents by all required tags.
217
+ *
218
+ * @param documents - Array of memory documents
219
+ * @param tags - Tags to filter by (document must have all)
220
+ * @returns Filtered array of documents
221
+ *
222
+ * @example
223
+ * ```typescript
224
+ * const docs = filterMemoriesByAllTags(memories, ["api", "security"]);
225
+ * // Returns documents that have both "api" AND "security" tags
226
+ * ```
227
+ *
228
+ * @category Memory
229
+ */
230
+ export declare function filterMemoriesByAllTags(documents: MemoryDocument[], tags: string[]): MemoryDocument[];
231
+ /**
232
+ * Filter memory documents by auto-load setting.
233
+ *
234
+ * @param documents - Array of memory documents
235
+ * @returns Documents that should be auto-loaded
236
+ *
237
+ * @category Memory
238
+ */
239
+ export declare function filterAutoLoadMemories(documents: MemoryDocument[]): MemoryDocument[];
240
+ /**
241
+ * Filter additional files by auto-load setting.
242
+ *
243
+ * @param files - Array of additional memory files
244
+ * @returns Files that should be auto-loaded
245
+ *
246
+ * @category Memory
247
+ */
248
+ export declare function filterAutoLoadAdditionalFiles(files: AdditionalMemoryFile[]): AdditionalMemoryFile[];
249
+ //# sourceMappingURL=rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/memory/rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CA2B7E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAEnF;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,cAAc,EAAE,EAC3B,WAAW,EAAE,MAAM,GAClB,cAAc,EAAE,CAwBlB;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,oBAAoB,EAAE,EAC7B,WAAW,EAAE,MAAM,GAClB,oBAAoB,EAAE,CAuBxB;AAMD;;;;GAIG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;OAEG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;IAE5B;;OAEG;IACH,aAAa,CAAC,EAAE,cAAc,CAAC;IAE/B;;OAEG;IACH,eAAe,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAEzC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,oBAAoB,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,uBAAuB,EAAE,oBAAoB,EAAE,CAAC;IAEhD;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,6BAA6B,GAAG,iBAAiB,CAiFhG;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,cAAc,EAAE,EAC3B,IAAI,EAAE,MAAM,EAAE,GACb,cAAc,EAAE,CAalB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,cAAc,EAAE,EAC3B,IAAI,EAAE,MAAM,EAAE,GACb,cAAc,EAAE,CAalB;AAMD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAKpF;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,oBAAoB,EAAE,GAC5B,oBAAoB,EAAE,CAIxB"}
@@ -0,0 +1,362 @@
1
+ /**
2
+ * Path-based rule matching for memory documents.
3
+ *
4
+ * Memory documents can specify path patterns in their frontmatter to
5
+ * control when they should be applied. This module provides matching
6
+ * functionality for determining which memories are relevant.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { filterMemoriesByPath, matchesPathPattern } from "@lleverage-ai/agent-sdk";
11
+ *
12
+ * // Check if a file matches a pattern
13
+ * const matches = matchesPathPattern("src/api/users.ts", "src/api/**\/*.ts");
14
+ * // matches = true
15
+ *
16
+ * // Filter memories by current file
17
+ * const relevant = filterMemoriesByPath(memories, "src/api/users.ts");
18
+ * ```
19
+ *
20
+ * @packageDocumentation
21
+ */
22
+ // =============================================================================
23
+ // Path Pattern Matching
24
+ // =============================================================================
25
+ /**
26
+ * Check if a file path matches a glob pattern.
27
+ *
28
+ * Supports standard glob patterns:
29
+ * - `*` - matches any characters except /
30
+ * - `**` - matches any characters including /
31
+ * - `?` - matches exactly one character except /
32
+ * - `[abc]` - matches any character in the brackets
33
+ * - `[!abc]` - matches any character not in the brackets
34
+ *
35
+ * @param filePath - The file path to test
36
+ * @param pattern - The glob pattern to match against
37
+ * @returns True if the path matches the pattern
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * matchesPathPattern("src/api/users.ts", "src/**\/*.ts"); // true
42
+ * matchesPathPattern("src/api/users.ts", "src/api/*.ts"); // true
43
+ * matchesPathPattern("src/api/users.ts", "tests/**\/*.ts"); // false
44
+ * matchesPathPattern("src/api/users.ts", "**\/*.ts"); // true
45
+ * matchesPathPattern("README.md", "*.md"); // true
46
+ * ```
47
+ *
48
+ * @category Memory
49
+ */
50
+ export function matchesPathPattern(filePath, pattern) {
51
+ // Normalize paths to use forward slashes
52
+ const normalizedPath = filePath.replace(/\\/g, "/");
53
+ const normalizedPattern = pattern.replace(/\\/g, "/");
54
+ // Convert glob pattern to regex using placeholder approach
55
+ // to avoid conflicts between different glob patterns
56
+ const regexPattern = normalizedPattern
57
+ // Escape special regex characters (except glob chars * and ?)
58
+ .replace(/[.+^${}()|[\]\\]/g, "\\$&")
59
+ // Replace ** followed by / with a placeholder
60
+ .replace(/\*\*\//g, "<<<GLOBSTAR_SLASH>>>")
61
+ // Replace standalone ** with a placeholder
62
+ .replace(/\*\*/g, "<<<GLOBSTAR>>>")
63
+ // Handle * (matches anything except /)
64
+ .replace(/\*/g, "[^/]*")
65
+ // Handle ? (matches exactly one char except /)
66
+ .replace(/\?/g, "[^/]")
67
+ // Now replace placeholders with actual regex
68
+ // **/ matches zero or more directories (including none)
69
+ .replace(/<<<GLOBSTAR_SLASH>>>/g, "(?:[^/]+/)*")
70
+ // ** at end matches any remaining path
71
+ .replace(/<<<GLOBSTAR>>>/g, ".*");
72
+ // Anchor the pattern
73
+ const regex = new RegExp(`^${regexPattern}$`);
74
+ return regex.test(normalizedPath);
75
+ }
76
+ /**
77
+ * Check if a file path matches any of the given patterns.
78
+ *
79
+ * @param filePath - The file path to test
80
+ * @param patterns - Array of glob patterns
81
+ * @returns True if the path matches any pattern
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * const patterns = ["src/**\/*.ts", "tests/**\/*.ts"];
86
+ * matchesAnyPathPattern("src/index.ts", patterns); // true
87
+ * matchesAnyPathPattern("README.md", patterns); // false
88
+ * ```
89
+ *
90
+ * @category Memory
91
+ */
92
+ export function matchesAnyPathPattern(filePath, patterns) {
93
+ return patterns.some((pattern) => matchesPathPattern(filePath, pattern));
94
+ }
95
+ // =============================================================================
96
+ // Memory Filtering
97
+ // =============================================================================
98
+ /**
99
+ * Filter memory documents by path relevance.
100
+ *
101
+ * A memory document is considered relevant if:
102
+ * 1. It has no `paths` metadata (applies to all files)
103
+ * 2. The file path matches any of the patterns in `paths` metadata
104
+ *
105
+ * @param documents - Array of memory documents to filter
106
+ * @param currentPath - The current file path to match against
107
+ * @returns Array of relevant memory documents, sorted by priority
108
+ *
109
+ * @example
110
+ * ```typescript
111
+ * const memories: MemoryDocument[] = [
112
+ * {
113
+ * path: "/memory/api.md",
114
+ * metadata: { paths: ["src/api/**\/*.ts"], priority: 10 },
115
+ * content: "API rules...",
116
+ * modifiedAt: Date.now(),
117
+ * },
118
+ * {
119
+ * path: "/memory/general.md",
120
+ * metadata: {}, // No paths = applies to all
121
+ * content: "General rules...",
122
+ * modifiedAt: Date.now(),
123
+ * },
124
+ * ];
125
+ *
126
+ * const relevant = filterMemoriesByPath(memories, "src/api/users.ts");
127
+ * // Returns both, sorted by priority (api.md first)
128
+ * ```
129
+ *
130
+ * @category Memory
131
+ */
132
+ export function filterMemoriesByPath(documents, currentPath) {
133
+ const relevant = documents.filter((doc) => {
134
+ const paths = doc.metadata.paths;
135
+ // No paths metadata = applies to all files
136
+ if (!paths || paths.length === 0) {
137
+ return true;
138
+ }
139
+ // Check if current path matches any pattern
140
+ return matchesAnyPathPattern(currentPath, paths);
141
+ });
142
+ // Sort by priority (higher first), then by path
143
+ return relevant.sort((a, b) => {
144
+ const priorityA = a.metadata.priority ?? 0;
145
+ const priorityB = b.metadata.priority ?? 0;
146
+ if (priorityB !== priorityA) {
147
+ return priorityB - priorityA;
148
+ }
149
+ return a.path.localeCompare(b.path);
150
+ });
151
+ }
152
+ /**
153
+ * Filter additional memory files by path relevance.
154
+ *
155
+ * @param files - Array of additional memory files
156
+ * @param currentPath - The current file path to match against
157
+ * @returns Array of relevant files, sorted by priority
158
+ *
159
+ * @category Memory
160
+ */
161
+ export function filterAdditionalFilesByPath(files, currentPath) {
162
+ const relevant = files.filter((file) => {
163
+ const paths = file.metadata.paths;
164
+ // No paths metadata = applies to all files
165
+ if (!paths || paths.length === 0) {
166
+ return true;
167
+ }
168
+ return matchesAnyPathPattern(currentPath, paths);
169
+ });
170
+ // Sort by priority (higher first), then by filename
171
+ return relevant.sort((a, b) => {
172
+ const priorityA = a.metadata.priority ?? 0;
173
+ const priorityB = b.metadata.priority ?? 0;
174
+ if (priorityB !== priorityA) {
175
+ return priorityB - priorityA;
176
+ }
177
+ return a.filename.localeCompare(b.filename);
178
+ });
179
+ }
180
+ /**
181
+ * Build memory context filtered by current file path.
182
+ *
183
+ * This function filters all memory sources based on their path patterns
184
+ * and the current file being worked on. Useful for providing context-aware
185
+ * memory injection.
186
+ *
187
+ * @param options - Context building options
188
+ * @returns Path-filtered memory context
189
+ *
190
+ * @example
191
+ * ```typescript
192
+ * const context = buildPathMemoryContext({
193
+ * userMemory,
194
+ * projectMemory,
195
+ * additionalFiles,
196
+ * currentPath: "src/api/users.ts",
197
+ * });
198
+ *
199
+ * if (context.combinedContent) {
200
+ * systemPrompt += `\n\n## Relevant Context\n\n${context.combinedContent}`;
201
+ * }
202
+ * ```
203
+ *
204
+ * @category Memory
205
+ */
206
+ export function buildPathMemoryContext(options) {
207
+ const { userMemory, projectMemory, additionalFiles = [], currentPath, includeGeneral = true, includeFilenames = true, } = options;
208
+ const appliedPatterns = [];
209
+ const contentParts = [];
210
+ // Check user memory
211
+ let userMemoryApplies = false;
212
+ if (userMemory) {
213
+ const paths = userMemory.metadata.paths;
214
+ if (!paths || paths.length === 0) {
215
+ userMemoryApplies = includeGeneral;
216
+ }
217
+ else if (currentPath) {
218
+ userMemoryApplies = matchesAnyPathPattern(currentPath, paths);
219
+ if (userMemoryApplies) {
220
+ appliedPatterns.push(...paths);
221
+ }
222
+ }
223
+ if (userMemoryApplies && userMemory.content) {
224
+ contentParts.push(userMemory.content);
225
+ }
226
+ }
227
+ // Check project memory
228
+ let projectMemoryApplies = false;
229
+ if (projectMemory) {
230
+ const paths = projectMemory.metadata.paths;
231
+ if (!paths || paths.length === 0) {
232
+ projectMemoryApplies = includeGeneral;
233
+ }
234
+ else if (currentPath) {
235
+ projectMemoryApplies = matchesAnyPathPattern(currentPath, paths);
236
+ if (projectMemoryApplies) {
237
+ appliedPatterns.push(...paths);
238
+ }
239
+ }
240
+ if (projectMemoryApplies && projectMemory.content) {
241
+ contentParts.push(projectMemory.content);
242
+ }
243
+ }
244
+ // Filter additional files
245
+ let relevantAdditionalFiles = [];
246
+ if (currentPath) {
247
+ relevantAdditionalFiles = filterAdditionalFilesByPath(additionalFiles, currentPath);
248
+ }
249
+ else if (includeGeneral) {
250
+ // Include files without path restrictions
251
+ relevantAdditionalFiles = additionalFiles.filter((f) => !f.metadata.paths || f.metadata.paths.length === 0);
252
+ }
253
+ // Add additional file content
254
+ for (const file of relevantAdditionalFiles) {
255
+ if (file.content) {
256
+ if (includeFilenames) {
257
+ contentParts.push(`## ${file.filename}\n\n${file.content}`);
258
+ }
259
+ else {
260
+ contentParts.push(file.content);
261
+ }
262
+ }
263
+ if (file.metadata.paths) {
264
+ appliedPatterns.push(...file.metadata.paths);
265
+ }
266
+ }
267
+ return {
268
+ userMemoryApplies,
269
+ projectMemoryApplies,
270
+ relevantAdditionalFiles,
271
+ combinedContent: contentParts.join("\n\n---\n\n"),
272
+ appliedPatterns: [...new Set(appliedPatterns)], // Deduplicate
273
+ };
274
+ }
275
+ // =============================================================================
276
+ // Tag-Based Filtering
277
+ // =============================================================================
278
+ /**
279
+ * Filter memory documents by tags.
280
+ *
281
+ * @param documents - Array of memory documents
282
+ * @param tags - Tags to filter by (document must have at least one)
283
+ * @returns Filtered array of documents
284
+ *
285
+ * @example
286
+ * ```typescript
287
+ * const docs = filterMemoriesByTags(memories, ["api", "security"]);
288
+ * // Returns documents that have either "api" or "security" tag
289
+ * ```
290
+ *
291
+ * @category Memory
292
+ */
293
+ export function filterMemoriesByTags(documents, tags) {
294
+ if (tags.length === 0) {
295
+ return documents;
296
+ }
297
+ return documents.filter((doc) => {
298
+ const docTags = doc.metadata.tags;
299
+ if (!docTags || docTags.length === 0) {
300
+ return false;
301
+ }
302
+ return tags.some((tag) => docTags.includes(tag));
303
+ });
304
+ }
305
+ /**
306
+ * Filter memory documents by all required tags.
307
+ *
308
+ * @param documents - Array of memory documents
309
+ * @param tags - Tags to filter by (document must have all)
310
+ * @returns Filtered array of documents
311
+ *
312
+ * @example
313
+ * ```typescript
314
+ * const docs = filterMemoriesByAllTags(memories, ["api", "security"]);
315
+ * // Returns documents that have both "api" AND "security" tags
316
+ * ```
317
+ *
318
+ * @category Memory
319
+ */
320
+ export function filterMemoriesByAllTags(documents, tags) {
321
+ if (tags.length === 0) {
322
+ return documents;
323
+ }
324
+ return documents.filter((doc) => {
325
+ const docTags = doc.metadata.tags;
326
+ if (!docTags || docTags.length === 0) {
327
+ return false;
328
+ }
329
+ return tags.every((tag) => docTags.includes(tag));
330
+ });
331
+ }
332
+ // =============================================================================
333
+ // Auto-Load Filtering
334
+ // =============================================================================
335
+ /**
336
+ * Filter memory documents by auto-load setting.
337
+ *
338
+ * @param documents - Array of memory documents
339
+ * @returns Documents that should be auto-loaded
340
+ *
341
+ * @category Memory
342
+ */
343
+ export function filterAutoLoadMemories(documents) {
344
+ return documents.filter((doc) => {
345
+ // Default to true if not specified
346
+ return doc.metadata.autoLoad !== false;
347
+ });
348
+ }
349
+ /**
350
+ * Filter additional files by auto-load setting.
351
+ *
352
+ * @param files - Array of additional memory files
353
+ * @returns Files that should be auto-loaded
354
+ *
355
+ * @category Memory
356
+ */
357
+ export function filterAutoLoadAdditionalFiles(files) {
358
+ return files.filter((file) => {
359
+ return file.metadata.autoLoad !== false;
360
+ });
361
+ }
362
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/memory/rules.ts"],"names":[],"mappings":"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"}