@agenticc/core 1.0.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 (196) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +370 -0
  3. package/README.zh-CN.md +372 -0
  4. package/dist/audit/index.d.ts +9 -0
  5. package/dist/audit/index.d.ts.map +1 -0
  6. package/dist/audit/index.js +9 -0
  7. package/dist/audit/index.js.map +1 -0
  8. package/dist/audit/logger.d.ts +211 -0
  9. package/dist/audit/logger.d.ts.map +1 -0
  10. package/dist/audit/logger.js +268 -0
  11. package/dist/audit/logger.js.map +1 -0
  12. package/dist/audit/query.d.ts +164 -0
  13. package/dist/audit/query.d.ts.map +1 -0
  14. package/dist/audit/query.js +250 -0
  15. package/dist/audit/query.js.map +1 -0
  16. package/dist/conversation/context-builder.d.ts +119 -0
  17. package/dist/conversation/context-builder.d.ts.map +1 -0
  18. package/dist/conversation/context-builder.js +252 -0
  19. package/dist/conversation/context-builder.js.map +1 -0
  20. package/dist/conversation/index.d.ts +10 -0
  21. package/dist/conversation/index.d.ts.map +1 -0
  22. package/dist/conversation/index.js +10 -0
  23. package/dist/conversation/index.js.map +1 -0
  24. package/dist/conversation/message-store.d.ts +231 -0
  25. package/dist/conversation/message-store.d.ts.map +1 -0
  26. package/dist/conversation/message-store.js +404 -0
  27. package/dist/conversation/message-store.js.map +1 -0
  28. package/dist/conversation/session.d.ts +201 -0
  29. package/dist/conversation/session.d.ts.map +1 -0
  30. package/dist/conversation/session.js +285 -0
  31. package/dist/conversation/session.js.map +1 -0
  32. package/dist/core/agent.d.ts +277 -0
  33. package/dist/core/agent.d.ts.map +1 -0
  34. package/dist/core/agent.js +674 -0
  35. package/dist/core/agent.js.map +1 -0
  36. package/dist/core/agentic-loop.d.ts +98 -0
  37. package/dist/core/agentic-loop.d.ts.map +1 -0
  38. package/dist/core/agentic-loop.js +496 -0
  39. package/dist/core/agentic-loop.js.map +1 -0
  40. package/dist/core/index.d.ts +14 -0
  41. package/dist/core/index.d.ts.map +1 -0
  42. package/dist/core/index.js +14 -0
  43. package/dist/core/index.js.map +1 -0
  44. package/dist/core/intent-parser.d.ts +101 -0
  45. package/dist/core/intent-parser.d.ts.map +1 -0
  46. package/dist/core/intent-parser.js +221 -0
  47. package/dist/core/intent-parser.js.map +1 -0
  48. package/dist/core/plan-generator.d.ts +133 -0
  49. package/dist/core/plan-generator.d.ts.map +1 -0
  50. package/dist/core/plan-generator.js +294 -0
  51. package/dist/core/plan-generator.js.map +1 -0
  52. package/dist/core/plugin-manager.d.ts +120 -0
  53. package/dist/core/plugin-manager.d.ts.map +1 -0
  54. package/dist/core/plugin-manager.js +369 -0
  55. package/dist/core/plugin-manager.js.map +1 -0
  56. package/dist/core/response-handler.d.ts +141 -0
  57. package/dist/core/response-handler.d.ts.map +1 -0
  58. package/dist/core/response-handler.js +384 -0
  59. package/dist/core/response-handler.js.map +1 -0
  60. package/dist/core/tool-executor.d.ts +143 -0
  61. package/dist/core/tool-executor.d.ts.map +1 -0
  62. package/dist/core/tool-executor.js +354 -0
  63. package/dist/core/tool-executor.js.map +1 -0
  64. package/dist/core/tool-registry.d.ts +133 -0
  65. package/dist/core/tool-registry.d.ts.map +1 -0
  66. package/dist/core/tool-registry.js +252 -0
  67. package/dist/core/tool-registry.js.map +1 -0
  68. package/dist/index.d.ts +44 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +47 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/knowledge/chunker.d.ts +78 -0
  73. package/dist/knowledge/chunker.d.ts.map +1 -0
  74. package/dist/knowledge/chunker.js +233 -0
  75. package/dist/knowledge/chunker.js.map +1 -0
  76. package/dist/knowledge/embedder.d.ts +93 -0
  77. package/dist/knowledge/embedder.d.ts.map +1 -0
  78. package/dist/knowledge/embedder.js +205 -0
  79. package/dist/knowledge/embedder.js.map +1 -0
  80. package/dist/knowledge/index.d.ts +10 -0
  81. package/dist/knowledge/index.d.ts.map +1 -0
  82. package/dist/knowledge/index.js +11 -0
  83. package/dist/knowledge/index.js.map +1 -0
  84. package/dist/knowledge/loaders/index.d.ts +10 -0
  85. package/dist/knowledge/loaders/index.d.ts.map +1 -0
  86. package/dist/knowledge/loaders/index.js +10 -0
  87. package/dist/knowledge/loaders/index.js.map +1 -0
  88. package/dist/knowledge/loaders/markdown.d.ts +88 -0
  89. package/dist/knowledge/loaders/markdown.d.ts.map +1 -0
  90. package/dist/knowledge/loaders/markdown.js +205 -0
  91. package/dist/knowledge/loaders/markdown.js.map +1 -0
  92. package/dist/knowledge/loaders/yaml.d.ts +112 -0
  93. package/dist/knowledge/loaders/yaml.d.ts.map +1 -0
  94. package/dist/knowledge/loaders/yaml.js +368 -0
  95. package/dist/knowledge/loaders/yaml.js.map +1 -0
  96. package/dist/knowledge/retriever.d.ts +144 -0
  97. package/dist/knowledge/retriever.d.ts.map +1 -0
  98. package/dist/knowledge/retriever.js +399 -0
  99. package/dist/knowledge/retriever.js.map +1 -0
  100. package/dist/knowledge/store.d.ts +146 -0
  101. package/dist/knowledge/store.d.ts.map +1 -0
  102. package/dist/knowledge/store.js +420 -0
  103. package/dist/knowledge/store.js.map +1 -0
  104. package/dist/llm/adapter.d.ts +194 -0
  105. package/dist/llm/adapter.d.ts.map +1 -0
  106. package/dist/llm/adapter.js +42 -0
  107. package/dist/llm/adapter.js.map +1 -0
  108. package/dist/llm/adapters/anyrouter.d.ts +84 -0
  109. package/dist/llm/adapters/anyrouter.d.ts.map +1 -0
  110. package/dist/llm/adapters/anyrouter.js +372 -0
  111. package/dist/llm/adapters/anyrouter.js.map +1 -0
  112. package/dist/llm/adapters/claude.d.ts +66 -0
  113. package/dist/llm/adapters/claude.d.ts.map +1 -0
  114. package/dist/llm/adapters/claude.js +323 -0
  115. package/dist/llm/adapters/claude.js.map +1 -0
  116. package/dist/llm/adapters/index.d.ts +12 -0
  117. package/dist/llm/adapters/index.d.ts.map +1 -0
  118. package/dist/llm/adapters/index.js +12 -0
  119. package/dist/llm/adapters/index.js.map +1 -0
  120. package/dist/llm/adapters/mimo.d.ts +85 -0
  121. package/dist/llm/adapters/mimo.d.ts.map +1 -0
  122. package/dist/llm/adapters/mimo.js +316 -0
  123. package/dist/llm/adapters/mimo.js.map +1 -0
  124. package/dist/llm/adapters/openai.d.ts +53 -0
  125. package/dist/llm/adapters/openai.d.ts.map +1 -0
  126. package/dist/llm/adapters/openai.js +293 -0
  127. package/dist/llm/adapters/openai.js.map +1 -0
  128. package/dist/llm/adapters/qwen.d.ts +53 -0
  129. package/dist/llm/adapters/qwen.d.ts.map +1 -0
  130. package/dist/llm/adapters/qwen.js +299 -0
  131. package/dist/llm/adapters/qwen.js.map +1 -0
  132. package/dist/llm/adapters/siliconflow.d.ts +69 -0
  133. package/dist/llm/adapters/siliconflow.d.ts.map +1 -0
  134. package/dist/llm/adapters/siliconflow.js +331 -0
  135. package/dist/llm/adapters/siliconflow.js.map +1 -0
  136. package/dist/llm/index.d.ts +9 -0
  137. package/dist/llm/index.d.ts.map +1 -0
  138. package/dist/llm/index.js +12 -0
  139. package/dist/llm/index.js.map +1 -0
  140. package/dist/llm/manager.d.ts +97 -0
  141. package/dist/llm/manager.d.ts.map +1 -0
  142. package/dist/llm/manager.js +337 -0
  143. package/dist/llm/manager.js.map +1 -0
  144. package/dist/test-utils/arbitraries.d.ts +230 -0
  145. package/dist/test-utils/arbitraries.d.ts.map +1 -0
  146. package/dist/test-utils/arbitraries.js +280 -0
  147. package/dist/test-utils/arbitraries.js.map +1 -0
  148. package/dist/test-utils/cleanup.d.ts +184 -0
  149. package/dist/test-utils/cleanup.d.ts.map +1 -0
  150. package/dist/test-utils/cleanup.js +282 -0
  151. package/dist/test-utils/cleanup.js.map +1 -0
  152. package/dist/test-utils/config.d.ts +80 -0
  153. package/dist/test-utils/config.d.ts.map +1 -0
  154. package/dist/test-utils/config.js +94 -0
  155. package/dist/test-utils/config.js.map +1 -0
  156. package/dist/test-utils/index.d.ts +10 -0
  157. package/dist/test-utils/index.d.ts.map +1 -0
  158. package/dist/test-utils/index.js +36 -0
  159. package/dist/test-utils/index.js.map +1 -0
  160. package/dist/test-utils/mocks.d.ts +170 -0
  161. package/dist/test-utils/mocks.d.ts.map +1 -0
  162. package/dist/test-utils/mocks.js +281 -0
  163. package/dist/test-utils/mocks.js.map +1 -0
  164. package/dist/types/config.d.ts +170 -0
  165. package/dist/types/config.d.ts.map +1 -0
  166. package/dist/types/config.js +120 -0
  167. package/dist/types/config.js.map +1 -0
  168. package/dist/types/knowledge.d.ts +95 -0
  169. package/dist/types/knowledge.d.ts.map +1 -0
  170. package/dist/types/knowledge.js +7 -0
  171. package/dist/types/knowledge.js.map +1 -0
  172. package/dist/types/loop.d.ts +148 -0
  173. package/dist/types/loop.d.ts.map +1 -0
  174. package/dist/types/loop.js +16 -0
  175. package/dist/types/loop.js.map +1 -0
  176. package/dist/types/plugin.d.ts +137 -0
  177. package/dist/types/plugin.d.ts.map +1 -0
  178. package/dist/types/plugin.js +15 -0
  179. package/dist/types/plugin.js.map +1 -0
  180. package/dist/types/response.d.ts +186 -0
  181. package/dist/types/response.d.ts.map +1 -0
  182. package/dist/types/response.js +99 -0
  183. package/dist/types/response.js.map +1 -0
  184. package/dist/types/streaming.d.ts +478 -0
  185. package/dist/types/streaming.d.ts.map +1 -0
  186. package/dist/types/streaming.js +483 -0
  187. package/dist/types/streaming.js.map +1 -0
  188. package/dist/types/tool.d.ts +118 -0
  189. package/dist/types/tool.d.ts.map +1 -0
  190. package/dist/types/tool.js +42 -0
  191. package/dist/types/tool.js.map +1 -0
  192. package/dist/utils/error.d.ts +22 -0
  193. package/dist/utils/error.d.ts.map +1 -0
  194. package/dist/utils/error.js +36 -0
  195. package/dist/utils/error.js.map +1 -0
  196. package/package.json +102 -0
@@ -0,0 +1,268 @@
1
+ /**
2
+ * Audit Logger
3
+ *
4
+ * Records tool executions, configuration changes, and errors
5
+ * for audit and troubleshooting purposes.
6
+ *
7
+ * _Requirements: 10.1, 10.2, 10.3_
8
+ */
9
+ import { v4 as uuidv4 } from 'uuid';
10
+ /**
11
+ * Audit Logger
12
+ *
13
+ * In-memory audit logger that records all operations performed by the Agent.
14
+ * Provides methods for logging tool executions, config changes, and errors.
15
+ */
16
+ export class AuditLogger {
17
+ logs = new Map();
18
+ // Indexes for faster lookups
19
+ logsBySession = new Map();
20
+ logsByType = new Map();
21
+ /**
22
+ * Log a tool execution
23
+ *
24
+ * @param input - Tool execution details
25
+ * @returns The created log entry
26
+ */
27
+ logToolExecution(input) {
28
+ const log = {
29
+ id: uuidv4(),
30
+ sessionId: input.sessionId,
31
+ operationType: 'tool_execution',
32
+ target: input.toolName,
33
+ params: input.args,
34
+ result: {
35
+ success: input.result.success,
36
+ content: input.result.content,
37
+ data: input.result.data,
38
+ },
39
+ status: input.result.success ? 'success' : 'failure',
40
+ errorMessage: input.result.error?.message,
41
+ createdAt: new Date(),
42
+ durationMs: input.durationMs,
43
+ };
44
+ if (input.result.error) {
45
+ log.metadata = { errorCode: input.result.error.code };
46
+ }
47
+ this.addLog(log);
48
+ return log;
49
+ }
50
+ /**
51
+ * Log a configuration change
52
+ *
53
+ * @param input - Config change details
54
+ * @returns The created log entry
55
+ */
56
+ logConfigChange(input) {
57
+ const log = {
58
+ id: uuidv4(),
59
+ sessionId: input.sessionId,
60
+ operationType: 'config_change',
61
+ target: input.configKey,
62
+ params: {
63
+ before: input.beforeValue,
64
+ after: input.afterValue,
65
+ },
66
+ result: {
67
+ before: input.beforeValue,
68
+ after: input.afterValue,
69
+ },
70
+ status: 'success',
71
+ createdAt: new Date(),
72
+ metadata: input.metadata,
73
+ };
74
+ this.addLog(log);
75
+ return log;
76
+ }
77
+ /**
78
+ * Log an error
79
+ *
80
+ * @param input - Error details
81
+ * @returns The created log entry
82
+ */
83
+ logError(input) {
84
+ const log = {
85
+ id: uuidv4(),
86
+ sessionId: input.sessionId,
87
+ operationType: 'error',
88
+ target: input.context,
89
+ status: 'failure',
90
+ errorMessage: input.message,
91
+ errorStack: input.stack,
92
+ createdAt: new Date(),
93
+ metadata: input.details,
94
+ };
95
+ this.addLog(log);
96
+ return log;
97
+ }
98
+ /**
99
+ * Log a knowledge addition
100
+ *
101
+ * @param sessionId - Session ID
102
+ * @param documentId - Document ID
103
+ * @param category - Document category
104
+ * @param title - Document title
105
+ * @returns The created log entry
106
+ */
107
+ logKnowledgeAdd(sessionId, documentId, category, title) {
108
+ const log = {
109
+ id: uuidv4(),
110
+ sessionId,
111
+ operationType: 'knowledge_add',
112
+ target: documentId,
113
+ params: { category, title },
114
+ status: 'success',
115
+ createdAt: new Date(),
116
+ };
117
+ this.addLog(log);
118
+ return log;
119
+ }
120
+ /**
121
+ * Log a knowledge deletion
122
+ *
123
+ * @param sessionId - Session ID
124
+ * @param documentId - Document ID
125
+ * @param success - Whether deletion was successful
126
+ * @returns The created log entry
127
+ */
128
+ logKnowledgeDelete(sessionId, documentId, success) {
129
+ const log = {
130
+ id: uuidv4(),
131
+ sessionId,
132
+ operationType: 'knowledge_delete',
133
+ target: documentId,
134
+ status: success ? 'success' : 'failure',
135
+ createdAt: new Date(),
136
+ };
137
+ this.addLog(log);
138
+ return log;
139
+ }
140
+ /**
141
+ * Log a session creation
142
+ *
143
+ * @param sessionId - Session ID
144
+ * @param metadata - Session metadata
145
+ * @returns The created log entry
146
+ */
147
+ logSessionCreate(sessionId, metadata) {
148
+ const log = {
149
+ id: uuidv4(),
150
+ sessionId,
151
+ operationType: 'session_create',
152
+ target: sessionId,
153
+ status: 'success',
154
+ createdAt: new Date(),
155
+ metadata,
156
+ };
157
+ this.addLog(log);
158
+ return log;
159
+ }
160
+ /**
161
+ * Log a session close
162
+ *
163
+ * @param sessionId - Session ID
164
+ * @returns The created log entry
165
+ */
166
+ logSessionClose(sessionId) {
167
+ const log = {
168
+ id: uuidv4(),
169
+ sessionId,
170
+ operationType: 'session_close',
171
+ target: sessionId,
172
+ status: 'success',
173
+ createdAt: new Date(),
174
+ };
175
+ this.addLog(log);
176
+ return log;
177
+ }
178
+ /**
179
+ * Get a log entry by ID
180
+ *
181
+ * @param logId - Log entry ID
182
+ * @returns The log entry or undefined
183
+ */
184
+ getLog(logId) {
185
+ return this.logs.get(logId);
186
+ }
187
+ /**
188
+ * Get all logs for a session
189
+ *
190
+ * @param sessionId - Session ID
191
+ * @returns Array of log entries
192
+ */
193
+ getLogsBySession(sessionId) {
194
+ const logIds = this.logsBySession.get(sessionId);
195
+ if (!logIds) {
196
+ return [];
197
+ }
198
+ return Array.from(logIds)
199
+ .map((id) => this.logs.get(id))
200
+ .filter(Boolean)
201
+ .sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
202
+ }
203
+ /**
204
+ * Get all logs of a specific type
205
+ *
206
+ * @param operationType - Operation type
207
+ * @returns Array of log entries
208
+ */
209
+ getLogsByType(operationType) {
210
+ const logIds = this.logsByType.get(operationType);
211
+ if (!logIds) {
212
+ return [];
213
+ }
214
+ return Array.from(logIds)
215
+ .map((id) => this.logs.get(id))
216
+ .filter(Boolean)
217
+ .sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
218
+ }
219
+ /**
220
+ * Get all logs
221
+ *
222
+ * @returns Array of all log entries
223
+ */
224
+ getAllLogs() {
225
+ return Array.from(this.logs.values()).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
226
+ }
227
+ /**
228
+ * Get total log count
229
+ *
230
+ * @returns Total number of logs
231
+ */
232
+ getLogCount() {
233
+ return this.logs.size;
234
+ }
235
+ /**
236
+ * Clear all logs
237
+ */
238
+ clear() {
239
+ this.logs.clear();
240
+ this.logsBySession.clear();
241
+ this.logsByType.clear();
242
+ }
243
+ /**
244
+ * Add a log entry to storage
245
+ */
246
+ addLog(log) {
247
+ this.logs.set(log.id, log);
248
+ // Update session index
249
+ if (log.sessionId) {
250
+ if (!this.logsBySession.has(log.sessionId)) {
251
+ this.logsBySession.set(log.sessionId, new Set());
252
+ }
253
+ this.logsBySession.get(log.sessionId).add(log.id);
254
+ }
255
+ // Update type index
256
+ if (!this.logsByType.has(log.operationType)) {
257
+ this.logsByType.set(log.operationType, new Set());
258
+ }
259
+ this.logsByType.get(log.operationType).add(log.id);
260
+ }
261
+ }
262
+ /**
263
+ * Create a new AuditLogger instance
264
+ */
265
+ export function createAuditLogger() {
266
+ return new AuditLogger();
267
+ }
268
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/audit/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Audit Log Query
3
+ *
4
+ * Provides advanced querying capabilities for audit logs
5
+ * with support for filtering by session, operation type, and time range.
6
+ *
7
+ * _Requirements: 10.4_
8
+ */
9
+ import type { OperationLog, OperationType, OperationStatus, AuditLogger } from './logger.js';
10
+ /**
11
+ * Query options for filtering audit logs
12
+ */
13
+ export interface AuditLogQueryOptions {
14
+ /** Filter by session ID */
15
+ sessionId?: string;
16
+ /** Filter by operation type */
17
+ operationType?: OperationType;
18
+ /** Filter by multiple operation types */
19
+ operationTypes?: OperationType[];
20
+ /** Filter by status */
21
+ status?: OperationStatus;
22
+ /** Filter by target (e.g., tool name) */
23
+ target?: string;
24
+ /** Filter by timestamp (after) */
25
+ after?: Date;
26
+ /** Filter by timestamp (before) */
27
+ before?: Date;
28
+ /** Filter by error presence */
29
+ hasError?: boolean;
30
+ /** Maximum number of results */
31
+ limit?: number;
32
+ /** Offset for pagination */
33
+ offset?: number;
34
+ /** Sort order */
35
+ order?: 'asc' | 'desc';
36
+ }
37
+ /**
38
+ * Aggregated statistics for audit logs
39
+ */
40
+ export interface AuditLogStats {
41
+ /** Total number of logs */
42
+ totalLogs: number;
43
+ /** Logs by operation type */
44
+ byOperationType: Record<OperationType, number>;
45
+ /** Logs by status */
46
+ byStatus: Record<OperationStatus, number>;
47
+ /** Number of unique sessions */
48
+ uniqueSessions: number;
49
+ /** Average duration for tool executions (ms) */
50
+ avgToolExecutionDuration?: number;
51
+ /** Error rate (percentage) */
52
+ errorRate: number;
53
+ /** Time range of logs */
54
+ timeRange?: {
55
+ earliest: Date;
56
+ latest: Date;
57
+ };
58
+ }
59
+ /**
60
+ * Query result with pagination info
61
+ */
62
+ export interface AuditLogQueryResult {
63
+ /** Matching log entries */
64
+ logs: OperationLog[];
65
+ /** Total count (before pagination) */
66
+ totalCount: number;
67
+ /** Whether there are more results */
68
+ hasMore: boolean;
69
+ /** Current offset */
70
+ offset: number;
71
+ /** Current limit */
72
+ limit: number;
73
+ }
74
+ /**
75
+ * Audit Log Query Service
76
+ *
77
+ * Provides advanced querying and aggregation capabilities
78
+ * for audit logs.
79
+ */
80
+ export declare class AuditLogQuery {
81
+ private logger;
82
+ constructor(logger: AuditLogger);
83
+ /**
84
+ * Query logs with advanced filtering
85
+ *
86
+ * @param options - Query options
87
+ * @returns Query result with pagination info
88
+ */
89
+ query(options?: AuditLogQueryOptions): AuditLogQueryResult;
90
+ /**
91
+ * Get logs for a specific session
92
+ *
93
+ * @param sessionId - Session ID
94
+ * @param options - Additional query options
95
+ * @returns Query result
96
+ */
97
+ queryBySession(sessionId: string, options?: Omit<AuditLogQueryOptions, 'sessionId'>): AuditLogQueryResult;
98
+ /**
99
+ * Get logs for a specific operation type
100
+ *
101
+ * @param operationType - Operation type
102
+ * @param options - Additional query options
103
+ * @returns Query result
104
+ */
105
+ queryByOperationType(operationType: OperationType, options?: Omit<AuditLogQueryOptions, 'operationType'>): AuditLogQueryResult;
106
+ /**
107
+ * Get logs within a time range
108
+ *
109
+ * @param after - Start of time range
110
+ * @param before - End of time range
111
+ * @param options - Additional query options
112
+ * @returns Query result
113
+ */
114
+ queryByTimeRange(after: Date, before: Date, options?: Omit<AuditLogQueryOptions, 'after' | 'before'>): AuditLogQueryResult;
115
+ /**
116
+ * Get error logs
117
+ *
118
+ * @param options - Additional query options
119
+ * @returns Query result
120
+ */
121
+ queryErrors(options?: Omit<AuditLogQueryOptions, 'hasError'>): AuditLogQueryResult;
122
+ /**
123
+ * Get tool execution logs
124
+ *
125
+ * @param toolName - Optional tool name filter
126
+ * @param options - Additional query options
127
+ * @returns Query result
128
+ */
129
+ queryToolExecutions(toolName?: string, options?: Omit<AuditLogQueryOptions, 'operationType' | 'target'>): AuditLogQueryResult;
130
+ /**
131
+ * Get aggregated statistics
132
+ *
133
+ * @param options - Optional filter options
134
+ * @returns Aggregated statistics
135
+ */
136
+ getStats(options?: AuditLogQueryOptions): AuditLogStats;
137
+ /**
138
+ * Get recent logs
139
+ *
140
+ * @param count - Number of logs to return
141
+ * @returns Array of recent logs
142
+ */
143
+ getRecentLogs(count?: number): OperationLog[];
144
+ /**
145
+ * Search logs by target pattern
146
+ *
147
+ * @param pattern - Search pattern (supports simple wildcards)
148
+ * @param options - Additional query options
149
+ * @returns Query result
150
+ */
151
+ searchByTarget(pattern: string, options?: Omit<AuditLogQueryOptions, 'target'>): AuditLogQueryResult;
152
+ /**
153
+ * Apply filters to logs
154
+ */
155
+ private applyFilters;
156
+ }
157
+ /**
158
+ * Create a new AuditLogQuery instance
159
+ *
160
+ * @param logger - AuditLogger instance to query
161
+ * @returns AuditLogQuery instance
162
+ */
163
+ export declare function createAuditLogQuery(logger: AuditLogger): AuditLogQuery;
164
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/audit/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,250 @@
1
+ /**
2
+ * Audit Log Query
3
+ *
4
+ * Provides advanced querying capabilities for audit logs
5
+ * with support for filtering by session, operation type, and time range.
6
+ *
7
+ * _Requirements: 10.4_
8
+ */
9
+ /**
10
+ * Audit Log Query Service
11
+ *
12
+ * Provides advanced querying and aggregation capabilities
13
+ * for audit logs.
14
+ */
15
+ export class AuditLogQuery {
16
+ logger;
17
+ constructor(logger) {
18
+ this.logger = logger;
19
+ }
20
+ /**
21
+ * Query logs with advanced filtering
22
+ *
23
+ * @param options - Query options
24
+ * @returns Query result with pagination info
25
+ */
26
+ query(options) {
27
+ let logs = this.logger.getAllLogs();
28
+ // Apply filters
29
+ logs = this.applyFilters(logs, options);
30
+ // Get total count before pagination
31
+ const totalCount = logs.length;
32
+ // Apply sorting
33
+ const order = options?.order ?? 'desc';
34
+ logs.sort((a, b) => {
35
+ const diff = a.createdAt.getTime() - b.createdAt.getTime();
36
+ return order === 'asc' ? diff : -diff;
37
+ });
38
+ // Apply pagination
39
+ const offset = options?.offset ?? 0;
40
+ const limit = options?.limit ?? 100;
41
+ logs = logs.slice(offset, offset + limit);
42
+ return {
43
+ logs,
44
+ totalCount,
45
+ hasMore: offset + logs.length < totalCount,
46
+ offset,
47
+ limit,
48
+ };
49
+ }
50
+ /**
51
+ * Get logs for a specific session
52
+ *
53
+ * @param sessionId - Session ID
54
+ * @param options - Additional query options
55
+ * @returns Query result
56
+ */
57
+ queryBySession(sessionId, options) {
58
+ return this.query({ ...options, sessionId });
59
+ }
60
+ /**
61
+ * Get logs for a specific operation type
62
+ *
63
+ * @param operationType - Operation type
64
+ * @param options - Additional query options
65
+ * @returns Query result
66
+ */
67
+ queryByOperationType(operationType, options) {
68
+ return this.query({ ...options, operationType });
69
+ }
70
+ /**
71
+ * Get logs within a time range
72
+ *
73
+ * @param after - Start of time range
74
+ * @param before - End of time range
75
+ * @param options - Additional query options
76
+ * @returns Query result
77
+ */
78
+ queryByTimeRange(after, before, options) {
79
+ return this.query({ ...options, after, before });
80
+ }
81
+ /**
82
+ * Get error logs
83
+ *
84
+ * @param options - Additional query options
85
+ * @returns Query result
86
+ */
87
+ queryErrors(options) {
88
+ return this.query({ ...options, hasError: true });
89
+ }
90
+ /**
91
+ * Get tool execution logs
92
+ *
93
+ * @param toolName - Optional tool name filter
94
+ * @param options - Additional query options
95
+ * @returns Query result
96
+ */
97
+ queryToolExecutions(toolName, options) {
98
+ return this.query({
99
+ ...options,
100
+ operationType: 'tool_execution',
101
+ target: toolName,
102
+ });
103
+ }
104
+ /**
105
+ * Get aggregated statistics
106
+ *
107
+ * @param options - Optional filter options
108
+ * @returns Aggregated statistics
109
+ */
110
+ getStats(options) {
111
+ let logs = this.logger.getAllLogs();
112
+ logs = this.applyFilters(logs, options);
113
+ const byOperationType = {};
114
+ const byStatus = {};
115
+ const sessions = new Set();
116
+ let totalDuration = 0;
117
+ let durationCount = 0;
118
+ let errorCount = 0;
119
+ let earliest;
120
+ let latest;
121
+ for (const log of logs) {
122
+ // Count by operation type
123
+ byOperationType[log.operationType] = (byOperationType[log.operationType] ?? 0) + 1;
124
+ // Count by status
125
+ byStatus[log.status] = (byStatus[log.status] ?? 0) + 1;
126
+ // Track sessions
127
+ if (log.sessionId) {
128
+ sessions.add(log.sessionId);
129
+ }
130
+ // Track duration for tool executions
131
+ if (log.operationType === 'tool_execution' && log.durationMs !== undefined) {
132
+ totalDuration += log.durationMs;
133
+ durationCount++;
134
+ }
135
+ // Count errors
136
+ if (log.status === 'failure' || log.errorMessage) {
137
+ errorCount++;
138
+ }
139
+ // Track time range
140
+ if (!earliest || log.createdAt < earliest) {
141
+ earliest = log.createdAt;
142
+ }
143
+ if (!latest || log.createdAt > latest) {
144
+ latest = log.createdAt;
145
+ }
146
+ }
147
+ return {
148
+ totalLogs: logs.length,
149
+ byOperationType: byOperationType,
150
+ byStatus: byStatus,
151
+ uniqueSessions: sessions.size,
152
+ avgToolExecutionDuration: durationCount > 0 ? totalDuration / durationCount : undefined,
153
+ errorRate: logs.length > 0 ? (errorCount / logs.length) * 100 : 0,
154
+ timeRange: earliest && latest ? { earliest, latest } : undefined,
155
+ };
156
+ }
157
+ /**
158
+ * Get recent logs
159
+ *
160
+ * @param count - Number of logs to return
161
+ * @returns Array of recent logs
162
+ */
163
+ getRecentLogs(count = 10) {
164
+ const result = this.query({ limit: count, order: 'desc' });
165
+ return result.logs;
166
+ }
167
+ /**
168
+ * Search logs by target pattern
169
+ *
170
+ * @param pattern - Search pattern (supports simple wildcards)
171
+ * @param options - Additional query options
172
+ * @returns Query result
173
+ */
174
+ searchByTarget(pattern, options) {
175
+ let logs = this.logger.getAllLogs();
176
+ logs = this.applyFilters(logs, options);
177
+ // Convert pattern to regex (simple wildcard support)
178
+ const regexPattern = pattern
179
+ .replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
180
+ .replace(/\\\*/g, '.*')
181
+ .replace(/\\\?/g, '.');
182
+ const regex = new RegExp(regexPattern, 'i');
183
+ logs = logs.filter((log) => log.target && regex.test(log.target));
184
+ const totalCount = logs.length;
185
+ const offset = options?.offset ?? 0;
186
+ const limit = options?.limit ?? 100;
187
+ const order = options?.order ?? 'desc';
188
+ logs.sort((a, b) => {
189
+ const diff = a.createdAt.getTime() - b.createdAt.getTime();
190
+ return order === 'asc' ? diff : -diff;
191
+ });
192
+ logs = logs.slice(offset, offset + limit);
193
+ return {
194
+ logs,
195
+ totalCount,
196
+ hasMore: offset + logs.length < totalCount,
197
+ offset,
198
+ limit,
199
+ };
200
+ }
201
+ /**
202
+ * Apply filters to logs
203
+ */
204
+ applyFilters(logs, options) {
205
+ if (!options) {
206
+ return logs;
207
+ }
208
+ if (options.sessionId) {
209
+ logs = logs.filter((log) => log.sessionId === options.sessionId);
210
+ }
211
+ if (options.operationType) {
212
+ logs = logs.filter((log) => log.operationType === options.operationType);
213
+ }
214
+ if (options.operationTypes && options.operationTypes.length > 0) {
215
+ const types = new Set(options.operationTypes);
216
+ logs = logs.filter((log) => types.has(log.operationType));
217
+ }
218
+ if (options.status) {
219
+ logs = logs.filter((log) => log.status === options.status);
220
+ }
221
+ if (options.target) {
222
+ logs = logs.filter((log) => log.target === options.target);
223
+ }
224
+ if (options.after) {
225
+ logs = logs.filter((log) => log.createdAt >= options.after);
226
+ }
227
+ if (options.before) {
228
+ logs = logs.filter((log) => log.createdAt <= options.before);
229
+ }
230
+ if (options.hasError !== undefined) {
231
+ if (options.hasError) {
232
+ logs = logs.filter((log) => log.status === 'failure' || log.errorMessage);
233
+ }
234
+ else {
235
+ logs = logs.filter((log) => log.status !== 'failure' && !log.errorMessage);
236
+ }
237
+ }
238
+ return logs;
239
+ }
240
+ }
241
+ /**
242
+ * Create a new AuditLogQuery instance
243
+ *
244
+ * @param logger - AuditLogger instance to query
245
+ * @returns AuditLogQuery instance
246
+ */
247
+ export function createAuditLogQuery(logger) {
248
+ return new AuditLogQuery(logger);
249
+ }
250
+ //# sourceMappingURL=query.js.map