attio-mcp 1.1.1 → 1.1.2

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 (70) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +3 -2
  3. package/dist/api/operations/search.d.ts +5 -2
  4. package/dist/api/operations/search.d.ts.map +1 -1
  5. package/dist/api/operations/search.js +469 -9
  6. package/dist/api/operations/search.js.map +1 -1
  7. package/dist/handlers/tool-configs/openai/index.d.ts +2 -2
  8. package/dist/handlers/tool-configs/openai/index.d.ts.map +1 -1
  9. package/dist/handlers/tool-configs/openai/index.js +13 -2
  10. package/dist/handlers/tool-configs/openai/index.js.map +1 -1
  11. package/dist/handlers/tool-configs/universal/core/crud-operations.d.ts.map +1 -1
  12. package/dist/handlers/tool-configs/universal/core/crud-operations.js +22 -3
  13. package/dist/handlers/tool-configs/universal/core/crud-operations.js.map +1 -1
  14. package/dist/handlers/tool-configs/universal/index.d.ts +2 -2
  15. package/dist/handlers/tool-configs/universal/index.d.ts.map +1 -1
  16. package/dist/handlers/tool-configs/universal/index.js +7 -1
  17. package/dist/handlers/tool-configs/universal/index.js.map +1 -1
  18. package/dist/handlers/tools/registry.d.ts +2 -2
  19. package/dist/objects/deals/index.d.ts +1 -0
  20. package/dist/objects/deals/index.d.ts.map +1 -1
  21. package/dist/objects/deals/index.js +2 -0
  22. package/dist/objects/deals/index.js.map +1 -1
  23. package/dist/objects/deals/search.d.ts +16 -0
  24. package/dist/objects/deals/search.d.ts.map +1 -0
  25. package/dist/objects/deals/search.js +59 -0
  26. package/dist/objects/deals/search.js.map +1 -0
  27. package/dist/services/CachingService.d.ts +57 -0
  28. package/dist/services/CachingService.d.ts.map +1 -1
  29. package/dist/services/CachingService.js +112 -0
  30. package/dist/services/CachingService.js.map +1 -1
  31. package/dist/services/UniversalSearchService.d.ts +0 -12
  32. package/dist/services/UniversalSearchService.d.ts.map +1 -1
  33. package/dist/services/UniversalSearchService.js +19 -133
  34. package/dist/services/UniversalSearchService.js.map +1 -1
  35. package/dist/services/search-strategies/CompanySearchStrategy.d.ts.map +1 -1
  36. package/dist/services/search-strategies/CompanySearchStrategy.js +13 -11
  37. package/dist/services/search-strategies/CompanySearchStrategy.js.map +1 -1
  38. package/dist/services/search-strategies/DealSearchStrategy.d.ts +38 -0
  39. package/dist/services/search-strategies/DealSearchStrategy.d.ts.map +1 -0
  40. package/dist/services/search-strategies/DealSearchStrategy.js +119 -0
  41. package/dist/services/search-strategies/DealSearchStrategy.js.map +1 -0
  42. package/dist/services/search-strategies/NoteSearchStrategy.d.ts +62 -0
  43. package/dist/services/search-strategies/NoteSearchStrategy.d.ts.map +1 -0
  44. package/dist/services/search-strategies/NoteSearchStrategy.js +224 -0
  45. package/dist/services/search-strategies/NoteSearchStrategy.js.map +1 -0
  46. package/dist/services/search-strategies/PeopleSearchStrategy.d.ts.map +1 -1
  47. package/dist/services/search-strategies/PeopleSearchStrategy.js +13 -15
  48. package/dist/services/search-strategies/PeopleSearchStrategy.js.map +1 -1
  49. package/dist/services/search-strategies/index.d.ts +2 -0
  50. package/dist/services/search-strategies/index.d.ts.map +1 -1
  51. package/dist/services/search-strategies/index.js +2 -0
  52. package/dist/services/search-strategies/index.js.map +1 -1
  53. package/dist/services/search-strategies/interfaces.d.ts +6 -0
  54. package/dist/services/search-strategies/interfaces.d.ts.map +1 -1
  55. package/dist/services/search-utilities/SearchScorer.d.ts +4 -0
  56. package/dist/services/search-utilities/SearchScorer.d.ts.map +1 -0
  57. package/dist/services/search-utilities/SearchScorer.js +243 -0
  58. package/dist/services/search-utilities/SearchScorer.js.map +1 -0
  59. package/dist/services/search-utilities/SearchUtilities.d.ts +5 -0
  60. package/dist/services/search-utilities/SearchUtilities.d.ts.map +1 -1
  61. package/dist/services/search-utilities/SearchUtilities.js +20 -0
  62. package/dist/services/search-utilities/SearchUtilities.js.map +1 -1
  63. package/dist/smithery.d.ts +1 -1
  64. package/dist/smithery.d.ts.map +1 -1
  65. package/dist/smithery.js +10 -8
  66. package/dist/smithery.js.map +1 -1
  67. package/dist/utils/mcp-discovery.d.ts.map +1 -1
  68. package/dist/utils/mcp-discovery.js +19 -1
  69. package/dist/utils/mcp-discovery.js.map +1 -1
  70. package/package.json +4 -1
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Deal search strategy implementation
3
+ * Issue #885: Add deals support to fast path optimization
4
+ */
5
+ import { AttioRecord } from '../../types/attio.js';
6
+ import { BaseSearchStrategy } from './BaseSearchStrategy.js';
7
+ import { SearchStrategyParams, StrategyDependencies } from './interfaces.js';
8
+ /**
9
+ * Search strategy for deals with fast path optimization
10
+ */
11
+ export declare class DealSearchStrategy extends BaseSearchStrategy {
12
+ constructor(dependencies: StrategyDependencies);
13
+ getResourceType(): string;
14
+ supportsAdvancedFiltering(): boolean;
15
+ supportsQuerySearch(): boolean;
16
+ search(params: SearchStrategyParams): Promise<AttioRecord[]>;
17
+ /**
18
+ * Search deals using advanced filters
19
+ */
20
+ private searchWithFilters;
21
+ /**
22
+ * Search deals with a text query
23
+ */
24
+ private searchWithQuery;
25
+ /**
26
+ * Search deals without any query or filters
27
+ */
28
+ private searchWithoutQuery;
29
+ /**
30
+ * Search deals by content across multiple fields
31
+ */
32
+ private searchByContent;
33
+ /**
34
+ * Search deals by name only
35
+ */
36
+ private searchByName;
37
+ }
38
+ //# sourceMappingURL=DealSearchStrategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DealSearchStrategy.d.ts","sourceRoot":"","sources":["../../../src/services/search-strategies/DealSearchStrategy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAOnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG7E;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,kBAAkB;gBAC5C,YAAY,EAAE,oBAAoB;IAI9C,eAAe,IAAI,MAAM;IAIzB,yBAAyB,IAAI,OAAO;IAIpC,mBAAmB,IAAI,OAAO;IAIxB,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAyClE;;OAEG;YACW,iBAAiB;IAyB/B;;OAEG;YACW,eAAe;IA2C7B;;OAEG;YACW,kBAAkB;IAehC;;OAEG;YACW,eAAe;IAgC7B;;OAEG;YACW,YAAY;CAkB3B"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Deal search strategy implementation
3
+ * Issue #885: Add deals support to fast path optimization
4
+ */
5
+ import { SearchType, MatchType, SortType, UniversalResourceType, } from '../../handlers/tool-configs/universal/types.js';
6
+ import { BaseSearchStrategy } from './BaseSearchStrategy.js';
7
+ import { FilterValidationError } from '../../errors/api-errors.js';
8
+ /**
9
+ * Search strategy for deals with fast path optimization
10
+ */
11
+ export class DealSearchStrategy extends BaseSearchStrategy {
12
+ constructor(dependencies) {
13
+ super(dependencies);
14
+ }
15
+ getResourceType() {
16
+ return UniversalResourceType.DEALS;
17
+ }
18
+ supportsAdvancedFiltering() {
19
+ return true;
20
+ }
21
+ supportsQuerySearch() {
22
+ return true;
23
+ }
24
+ async search(params) {
25
+ const { query, filters, limit, offset, search_type = SearchType.BASIC, fields, match_type = MatchType.PARTIAL, sort = SortType.NAME, timeframeParams, } = params;
26
+ // Apply timeframe filtering
27
+ const enhancedFilters = this.applyTimeframeFiltering(filters, timeframeParams);
28
+ // If we have filters, use advanced search
29
+ if (enhancedFilters) {
30
+ return this.searchWithFilters(enhancedFilters, limit, offset);
31
+ }
32
+ // If we have a query, handle different search types
33
+ if (query && query.trim().length > 0) {
34
+ return this.searchWithQuery(query.trim(), search_type, fields, match_type, sort, limit, offset);
35
+ }
36
+ // No query and no filters - return paginated results
37
+ return this.searchWithoutQuery(limit, offset);
38
+ }
39
+ /**
40
+ * Search deals using advanced filters
41
+ */
42
+ async searchWithFilters(filters, limit, offset) {
43
+ if (!this.dependencies.advancedSearchFunction) {
44
+ throw new Error('Deals advanced search function not available');
45
+ }
46
+ try {
47
+ // FilterValidationError will bubble up naturally from searchFn
48
+ return await this.dependencies.advancedSearchFunction(filters, limit, offset);
49
+ }
50
+ catch (error) {
51
+ // Let FilterValidationError bubble up for proper error handling
52
+ if (error instanceof FilterValidationError) {
53
+ throw error;
54
+ }
55
+ throw error;
56
+ }
57
+ }
58
+ /**
59
+ * Search deals with a text query
60
+ */
61
+ async searchWithQuery(query, searchType, fields, matchType = MatchType.PARTIAL, sort = SortType.NAME, limit, offset) {
62
+ if (!this.dependencies.advancedSearchFunction) {
63
+ throw new Error('Deals search function not available');
64
+ }
65
+ // Handle different search types
66
+ if (searchType === SearchType.CONTENT) {
67
+ return this.searchByContent(query, fields, matchType, sort, limit, offset);
68
+ }
69
+ else {
70
+ // For simple text queries without special fields/filters,
71
+ // use searchObject which includes fast path optimization
72
+ const { searchObject } = await import('../../api/operations/search.js');
73
+ const { ResourceType } = await import('../../types/attio.js');
74
+ // Calculate total records needed: offset + limit
75
+ const start = offset || 0;
76
+ const effectiveLimit = limit ? start + limit : undefined;
77
+ const results = await searchObject(ResourceType.DEALS, query, {
78
+ limit: effectiveLimit,
79
+ });
80
+ // Apply offset to slice the results
81
+ const end = limit ? start + limit : undefined;
82
+ return results.slice(start, end);
83
+ }
84
+ }
85
+ /**
86
+ * Search deals without any query or filters
87
+ */
88
+ async searchWithoutQuery(limit, offset) {
89
+ if (!this.dependencies.advancedSearchFunction) {
90
+ throw new Error('Deals search function not available');
91
+ }
92
+ return this.handleEmptyFilters(this.dependencies.advancedSearchFunction, limit, offset);
93
+ }
94
+ /**
95
+ * Search deals by content across multiple fields
96
+ */
97
+ async searchByContent(query, fields, matchType = MatchType.PARTIAL, sort = SortType.NAME, limit, offset) {
98
+ // Default content fields for deals
99
+ const searchFields = fields && fields.length > 0 ? fields : ['name', 'notes'];
100
+ const contentFilters = this.createContentFilters(query, searchFields, matchType);
101
+ if (!this.dependencies.advancedSearchFunction) {
102
+ throw new Error('Deals search function not available');
103
+ }
104
+ const results = await this.dependencies.advancedSearchFunction(contentFilters, limit, offset);
105
+ // Apply relevance ranking if requested
106
+ return this.applyRelevanceRanking(results, query, searchFields, sort);
107
+ }
108
+ /**
109
+ * Search deals by name only
110
+ */
111
+ async searchByName(query, matchType = MatchType.PARTIAL, limit, offset) {
112
+ const nameFilters = this.createNameFilters(query, matchType);
113
+ if (!this.dependencies.advancedSearchFunction) {
114
+ throw new Error('Deals search function not available');
115
+ }
116
+ return await this.dependencies.advancedSearchFunction(nameFilters, limit, offset);
117
+ }
118
+ }
119
+ //# sourceMappingURL=DealSearchStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DealSearchStrategy.js","sourceRoot":"","sources":["../../../src/services/search-strategies/DealSearchStrategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Note search strategy implementation
3
+ * Issue #888: Fix notes search - notes cannot be found by title/content
4
+ *
5
+ * **IMPORTANT API LIMITATION**:
6
+ * The Attio Notes API /v2/notes endpoint returns an empty array when called without filters.
7
+ * Testing with curl confirmed: GET /v2/notes returns {"data": []}
8
+ * The API requires parent_object and/or parent_record_id filters to return any notes.
9
+ *
10
+ * **What Works**:
11
+ * - list-notes tool with parent record filtering (e.g., list all notes on a company)
12
+ * - Content search within notes for a specific parent record
13
+ *
14
+ * **What Doesn't Work**:
15
+ * - Workspace-wide note search without parent filters
16
+ * - Global search like "find all notes containing 'demo'" across all records
17
+ *
18
+ * Recommendation: Request Attio to add workspace-wide notes endpoint or search capability.
19
+ */
20
+ import { AttioRecord } from '../../types/attio.js';
21
+ import { BaseSearchStrategy } from './BaseSearchStrategy.js';
22
+ import { SearchStrategyParams, StrategyDependencies } from './interfaces.js';
23
+ /**
24
+ * Search strategy for notes with performance optimization, caching, and content search support
25
+ *
26
+ * IMPLEMENTATION NOTE:
27
+ * The Attio Notes API (/notes endpoint) does not support native text search.
28
+ * It only supports filtering by parent_object and parent_record_id.
29
+ * Therefore, we fetch all notes and apply client-side filtering for search queries.
30
+ */
31
+ export declare class NoteSearchStrategy extends BaseSearchStrategy {
32
+ constructor(dependencies: StrategyDependencies);
33
+ getResourceType(): string;
34
+ supportsAdvancedFiltering(): boolean;
35
+ supportsQuerySearch(): boolean;
36
+ search(params: SearchStrategyParams): Promise<AttioRecord[]>;
37
+ /**
38
+ * Search notes with performance optimization, caching, and content search support
39
+ *
40
+ * PERFORMANCE-OPTIMIZED NOTES PAGINATION
41
+ *
42
+ * The Attio Notes API does not support native text search or advanced filtering.
43
+ * This implementation uses smart caching and performance monitoring to
44
+ * minimize the performance impact of loading all notes.
45
+ *
46
+ * Optimizations:
47
+ * - Smart caching with 30-second TTL to avoid repeated full loads
48
+ * - Performance warnings for large datasets (>500 notes)
49
+ * - Early termination for large offsets
50
+ * - Memory usage monitoring and cleanup
51
+ */
52
+ private searchNotes;
53
+ /**
54
+ * Apply content search filtering to notes
55
+ */
56
+ private applyContentSearch;
57
+ /**
58
+ * Convert AttioNote to AttioRecord format
59
+ */
60
+ private convertNoteToRecord;
61
+ }
62
+ //# sourceMappingURL=NoteSearchStrategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NoteSearchStrategy.d.ts","sourceRoot":"","sources":["../../../src/services/search-strategies/NoteSearchStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,WAAW,EAAa,MAAM,sBAAsB,CAAC;AAO9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAa7E;;;;;;;GAOG;AACH,qBAAa,kBAAmB,SAAQ,kBAAkB;gBAC5C,YAAY,EAAE,oBAAoB;IAI9C,eAAe,IAAI,MAAM;IAIzB,yBAAyB,IAAI,OAAO;IAIpC,mBAAmB,IAAI,OAAO;IAIxB,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA8BlE;;;;;;;;;;;;;;OAcG;YACW,WAAW;IA6IzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqC1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAiC5B"}
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Note search strategy implementation
3
+ * Issue #888: Fix notes search - notes cannot be found by title/content
4
+ *
5
+ * **IMPORTANT API LIMITATION**:
6
+ * The Attio Notes API /v2/notes endpoint returns an empty array when called without filters.
7
+ * Testing with curl confirmed: GET /v2/notes returns {"data": []}
8
+ * The API requires parent_object and/or parent_record_id filters to return any notes.
9
+ *
10
+ * **What Works**:
11
+ * - list-notes tool with parent record filtering (e.g., list all notes on a company)
12
+ * - Content search within notes for a specific parent record
13
+ *
14
+ * **What Doesn't Work**:
15
+ * - Workspace-wide note search without parent filters
16
+ * - Global search like "find all notes containing 'demo'" across all records
17
+ *
18
+ * Recommendation: Request Attio to add workspace-wide notes endpoint or search capability.
19
+ */
20
+ import { SearchType, MatchType, SortType, UniversalResourceType, } from '../../handlers/tool-configs/universal/types.js';
21
+ import { BaseSearchStrategy } from './BaseSearchStrategy.js';
22
+ import { performance } from 'perf_hooks';
23
+ import { SearchUtilities } from '../search-utilities/SearchUtilities.js';
24
+ import { createScopedLogger, OperationType } from '../../utils/logger.js';
25
+ // Import performance tracking and caching services
26
+ import { enhancedPerformanceTracker } from '../../middleware/performance-enhanced.js';
27
+ import { CachingService } from '../CachingService.js';
28
+ // Performance warning threshold for large note datasets
29
+ const NOTES_PERFORMANCE_WARNING_THRESHOLD = 2000;
30
+ /**
31
+ * Search strategy for notes with performance optimization, caching, and content search support
32
+ *
33
+ * IMPLEMENTATION NOTE:
34
+ * The Attio Notes API (/notes endpoint) does not support native text search.
35
+ * It only supports filtering by parent_object and parent_record_id.
36
+ * Therefore, we fetch all notes and apply client-side filtering for search queries.
37
+ */
38
+ export class NoteSearchStrategy extends BaseSearchStrategy {
39
+ constructor(dependencies) {
40
+ super(dependencies);
41
+ }
42
+ getResourceType() {
43
+ return UniversalResourceType.NOTES;
44
+ }
45
+ supportsAdvancedFiltering() {
46
+ return false; // Notes only support basic search
47
+ }
48
+ supportsQuerySearch() {
49
+ return true; // Notes support content search via applyContentSearch method
50
+ }
51
+ async search(params) {
52
+ const { query, limit, offset, search_type = SearchType.BASIC, fields, match_type = MatchType.PARTIAL, sort = SortType.NAME, filters, } = params;
53
+ // Extract performance tracking IDs from parameters (passed via dependencies)
54
+ const perfId = 'notes_search'; // Default fallback
55
+ const apiStart = performance.now();
56
+ return this.searchNotes(perfId, apiStart, query, limit, offset, search_type, fields, match_type, sort, filters);
57
+ }
58
+ /**
59
+ * Search notes with performance optimization, caching, and content search support
60
+ *
61
+ * PERFORMANCE-OPTIMIZED NOTES PAGINATION
62
+ *
63
+ * The Attio Notes API does not support native text search or advanced filtering.
64
+ * This implementation uses smart caching and performance monitoring to
65
+ * minimize the performance impact of loading all notes.
66
+ *
67
+ * Optimizations:
68
+ * - Smart caching with 30-second TTL to avoid repeated full loads
69
+ * - Performance warnings for large datasets (>500 notes)
70
+ * - Early termination for large offsets
71
+ * - Memory usage monitoring and cleanup
72
+ */
73
+ async searchNotes(perfId, apiStart, query, limit, offset, search_type = SearchType.BASIC, fields, match_type = MatchType.PARTIAL, sort = SortType.NAME, filters) {
74
+ const log = createScopedLogger('NoteSearchStrategy', 'notes_search', OperationType.DATA_PROCESSING);
75
+ // Use CachingService for notes data management
76
+ const loadNotesData = async () => {
77
+ try {
78
+ if (!this.dependencies.noteFunction) {
79
+ throw new Error('Notes list function not available');
80
+ }
81
+ // Build query params for filtering if provided
82
+ const queryParams = {};
83
+ if (filters) {
84
+ if (filters.parent_object || filters.linked_record_type) {
85
+ queryParams.parent_object =
86
+ filters.parent_object || filters.linked_record_type;
87
+ }
88
+ if (filters.parent_record_id || filters.linked_record_id) {
89
+ queryParams.parent_record_id =
90
+ filters.parent_record_id || filters.linked_record_id;
91
+ }
92
+ }
93
+ const notesResponse = await this.dependencies.noteFunction(queryParams);
94
+ const notesList = notesResponse.data || [];
95
+ // Convert notes to records and ensure it's always an array
96
+ if (!Array.isArray(notesList)) {
97
+ log.warn('NOTES API WARNING: listNotes() returned non-array value', {
98
+ returnedType: typeof notesList,
99
+ });
100
+ return [];
101
+ }
102
+ else {
103
+ // Convert AttioNote[] to AttioRecord[]
104
+ // Cast to AttioNote[] since we know the API returns notes
105
+ return notesList.map((note) => this.convertNoteToRecord(note));
106
+ }
107
+ }
108
+ catch (error) {
109
+ log.error('Failed to load notes from API', error);
110
+ return []; // Fallback to empty array
111
+ }
112
+ };
113
+ // Generate cache key based on parent filters to prevent collisions
114
+ const cacheKey = CachingService.getNotesListCacheKey(filters);
115
+ const { data: notes, fromCache } = await CachingService.getOrLoadNotes(loadNotesData, cacheKey);
116
+ // Performance warning for large datasets
117
+ if (!fromCache && notes.length > NOTES_PERFORMANCE_WARNING_THRESHOLD) {
118
+ log.warn('PERFORMANCE WARNING: Large notes load', {
119
+ noteCount: notes.length,
120
+ threshold: NOTES_PERFORMANCE_WARNING_THRESHOLD,
121
+ recommendation: 'Consider requesting Attio API pagination support for notes endpoint.',
122
+ });
123
+ }
124
+ // Log performance metrics
125
+ if (!fromCache) {
126
+ enhancedPerformanceTracker.markTiming(perfId, 'attioApi', performance.now() - apiStart);
127
+ }
128
+ else {
129
+ enhancedPerformanceTracker.markTiming(perfId, 'other', 1);
130
+ }
131
+ // Handle empty dataset cleanly
132
+ if (notes.length === 0) {
133
+ return []; // No warning for empty datasets
134
+ }
135
+ // Apply content search filtering if requested
136
+ let filteredNotes = notes;
137
+ if (search_type === SearchType.CONTENT && query && query.trim()) {
138
+ filteredNotes = this.applyContentSearch(notes, query.trim(), fields, match_type, sort);
139
+ }
140
+ else if (query && query.trim()) {
141
+ // For BASIC search type, also apply content filtering
142
+ filteredNotes = this.applyContentSearch(notes, query.trim(), fields, match_type, sort);
143
+ }
144
+ // Smart pagination with early termination for unreasonable offsets
145
+ const start = offset || 0;
146
+ const requestedLimit = limit || 10;
147
+ // Performance optimization: Don't process if offset exceeds dataset
148
+ if (start >= filteredNotes.length) {
149
+ log.info('Notes pagination offset exceeds dataset size', {
150
+ offset: start,
151
+ filteredSize: filteredNotes.length,
152
+ action: 'returning empty results',
153
+ });
154
+ return [];
155
+ }
156
+ else {
157
+ const end = Math.min(start + requestedLimit, filteredNotes.length);
158
+ const paginatedNotes = filteredNotes.slice(start, end);
159
+ // Log pagination performance metrics
160
+ enhancedPerformanceTracker.markTiming(perfId, 'serialization', fromCache ? 1 : performance.now() - apiStart);
161
+ return paginatedNotes;
162
+ }
163
+ }
164
+ /**
165
+ * Apply content search filtering to notes
166
+ */
167
+ applyContentSearch(notes, query, fields, matchType = MatchType.PARTIAL, sort = SortType.NAME) {
168
+ const searchFields = fields || [
169
+ 'title',
170
+ 'content_markdown',
171
+ 'content_plaintext',
172
+ ];
173
+ const queryLower = query.toLowerCase();
174
+ let filteredNotes = notes.filter((note) => {
175
+ return searchFields.some((field) => {
176
+ const fieldValue = SearchUtilities.getNoteFieldValue(note, field);
177
+ if (matchType === MatchType.EXACT) {
178
+ return fieldValue.toLowerCase() === queryLower;
179
+ }
180
+ else {
181
+ return fieldValue.toLowerCase().includes(queryLower);
182
+ }
183
+ });
184
+ });
185
+ // Apply relevance ranking if requested
186
+ if (sort === SortType.RELEVANCE) {
187
+ filteredNotes = SearchUtilities.rankByRelevance(filteredNotes, query, searchFields);
188
+ }
189
+ return filteredNotes;
190
+ }
191
+ /**
192
+ * Convert AttioNote to AttioRecord format
193
+ */
194
+ convertNoteToRecord(note) {
195
+ // Handle id field which can be string or AttioNoteIdentifier
196
+ const noteId = typeof note.id === 'string' ? note.id : note.id?.note_id || '';
197
+ // Extract content fields - API returns content_markdown, content_plaintext, or content
198
+ // Match the normalization logic from src/objects/notes.ts:normalizeNoteResponse
199
+ const contentMarkdown = (note.content_markdown ??
200
+ note.content ??
201
+ '');
202
+ const contentPlaintext = (note.content_plaintext ??
203
+ note.content ??
204
+ '');
205
+ // Return properly typed record satisfying AttioRecord interface
206
+ const record = {
207
+ id: {
208
+ record_id: noteId,
209
+ note_id: noteId,
210
+ },
211
+ values: {
212
+ title: note.title || '',
213
+ content_markdown: contentMarkdown,
214
+ content_plaintext: contentPlaintext,
215
+ parent_object: note.parent_object || '',
216
+ parent_record_id: note.parent_record_id || '',
217
+ created_at: note.created_at || '',
218
+ created_by_actor: note.created_by_actor,
219
+ },
220
+ };
221
+ return record;
222
+ }
223
+ }
224
+ //# sourceMappingURL=NoteSearchStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NoteSearchStrategy.js","sourceRoot":"","sources":["../../../src/services/search-strategies/NoteSearchStrategy.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PeopleSearchStrategy.d.ts","sourceRoot":"","sources":["../../../src/services/search-strategies/PeopleSearchStrategy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAOnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAK7E;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,kBAAkB;gBAC9C,YAAY,EAAE,oBAAoB;IAI9C,eAAe,IAAI,MAAM;IAIzB,yBAAyB,IAAI,OAAO;IAIpC,mBAAmB,IAAI,OAAO;IAIxB,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAyClE;;OAEG;YACW,iBAAiB;IA4B/B;;OAEG;YACW,eAAe;IAiD7B;;OAEG;YACW,kBAAkB;IAsBhC;;OAEG;YACW,aAAa;IA6B3B;;OAEG;YACW,eAAe;IA0C7B;;OAEG;YACW,oBAAoB;CAmCnC"}
1
+ {"version":3,"file":"PeopleSearchStrategy.d.ts","sourceRoot":"","sources":["../../../src/services/search-strategies/PeopleSearchStrategy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAOnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAK7E;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,kBAAkB;gBAC9C,YAAY,EAAE,oBAAoB;IAI9C,eAAe,IAAI,MAAM;IAIzB,yBAAyB,IAAI,OAAO;IAIpC,mBAAmB,IAAI,OAAO;IAIxB,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAyClE;;OAEG;YACW,iBAAiB;IA4B/B;;OAEG;YACW,eAAe;IA2C7B;;OAEG;YACW,kBAAkB;IAsBhC;;OAEG;YACW,aAAa;IA6B3B;;OAEG;YACW,eAAe;IA0C7B;;OAEG;YACW,oBAAoB;CAmCnC"}
@@ -5,7 +5,6 @@
5
5
  import { SearchType, MatchType, SortType, UniversalResourceType, } from '../../handlers/tool-configs/universal/types.js';
6
6
  import { BaseSearchStrategy } from './BaseSearchStrategy.js';
7
7
  import { FilterValidationError } from '../../errors/api-errors.js';
8
- import { buildPeopleQueryFilters } from './query-filter-builder.js';
9
8
  /**
10
9
  * Search strategy for people with advanced filtering, name/email search, and content search
11
10
  */
@@ -72,20 +71,19 @@ export class PeopleSearchStrategy extends BaseSearchStrategy {
72
71
  return this.searchByContent(query, fields, matchType, sort, limit, offset);
73
72
  }
74
73
  else {
75
- const parsedFilters = buildPeopleQueryFilters(query, matchType);
76
- if (parsedFilters?.filters?.length &&
77
- this.dependencies.paginatedSearchFunction) {
78
- const paginatedResult = await this.dependencies.paginatedSearchFunction(parsedFilters, {
79
- limit,
80
- offset,
81
- });
82
- return paginatedResult.results;
83
- }
84
- // Auto-detect email-like queries and search email field specifically
85
- if (this.looksLikeEmail(query)) {
86
- return this.searchByEmail(query, limit, offset);
87
- }
88
- return this.searchByNameAndEmail(query, matchType, limit, offset);
74
+ // For simple text queries without special fields/filters,
75
+ // use searchObject which includes fast path optimization
76
+ const { searchObject } = await import('../../api/operations/search.js');
77
+ const { ResourceType } = await import('../../types/attio.js');
78
+ // Calculate total records needed: offset + limit
79
+ const start = offset || 0;
80
+ const effectiveLimit = limit ? start + limit : undefined;
81
+ const results = await searchObject(ResourceType.PEOPLE, query, {
82
+ limit: effectiveLimit,
83
+ });
84
+ // Apply offset to slice the results
85
+ const end = limit ? start + limit : undefined;
86
+ return results.slice(start, end);
89
87
  }
90
88
  }
91
89
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"PeopleSearchStrategy.js","sourceRoot":"","sources":["../../../src/services/search-strategies/PeopleSearchStrategy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PeopleSearchStrategy.js","sourceRoot":"","sources":["../../../src/services/search-strategies/PeopleSearchStrategy.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ export type { ISearchStrategy, SearchStrategyParams, StrategyDependencies, Timef
6
6
  export { BaseSearchStrategy } from './BaseSearchStrategy.js';
7
7
  export { CompanySearchStrategy } from './CompanySearchStrategy.js';
8
8
  export { PeopleSearchStrategy } from './PeopleSearchStrategy.js';
9
+ export { DealSearchStrategy } from './DealSearchStrategy.js';
9
10
  export { TaskSearchStrategy } from './TaskSearchStrategy.js';
10
11
  export { ListSearchStrategy } from './ListSearchStrategy.js';
12
+ export { NoteSearchStrategy } from './NoteSearchStrategy.js';
11
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/search-strategies/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/search-strategies/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -5,6 +5,8 @@
5
5
  export { BaseSearchStrategy } from './BaseSearchStrategy.js';
6
6
  export { CompanySearchStrategy } from './CompanySearchStrategy.js';
7
7
  export { PeopleSearchStrategy } from './PeopleSearchStrategy.js';
8
+ export { DealSearchStrategy } from './DealSearchStrategy.js';
8
9
  export { TaskSearchStrategy } from './TaskSearchStrategy.js';
9
10
  export { ListSearchStrategy } from './ListSearchStrategy.js';
11
+ export { NoteSearchStrategy } from './NoteSearchStrategy.js';
10
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/search-strategies/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/search-strategies/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -61,6 +61,12 @@ export interface StrategyDependencies {
61
61
  }>) | null;
62
62
  listFunction?: (query?: string, limit?: number, offset?: number) => Promise<AttioList[]>;
63
63
  taskFunction?: (status?: string, assigneeId?: string, page?: number, pageSize?: number) => Promise<AttioTask[]>;
64
+ noteFunction?: (query?: Record<string, unknown>) => Promise<{
65
+ data: unknown[];
66
+ meta?: {
67
+ next_cursor?: string;
68
+ };
69
+ }>;
64
70
  createDateFilter?: (params: TimeframeParams) => Record<string, unknown> | null;
65
71
  mergeFilters?: (existing: Record<string, unknown> | undefined, dateFilter: Record<string, unknown>) => Record<string, unknown>;
66
72
  rankByRelevance?: (results: AttioRecord[], query: string, searchFields: string[]) => AttioRecord[];
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/services/search-strategies/interfaces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/services/search-strategies/interfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { ParsedQuery } from '../../api/operations/query-parser.js';
2
+ import { AttioRecord } from '../../types/attio.js';
3
+ export declare function scoreAndRank<T extends AttioRecord>(query: string, results: T[], parsedInput?: ParsedQuery): T[];
4
+ //# sourceMappingURL=SearchScorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchScorer.d.ts","sourceRoot":"","sources":["../../../src/services/search-utilities/SearchScorer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAoS/C,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,EAChD,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,EAAE,EACZ,WAAW,CAAC,EAAE,WAAW,GACxB,CAAC,EAAE,CA6BL"}