attio-mcp 1.3.5 → 1.4.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.
- package/CHANGELOG.md +263 -9
- package/README.md +315 -235
- package/dist/api/attio-client.d.ts +13 -3
- package/dist/api/attio-client.d.ts.map +1 -1
- package/dist/api/attio-client.js +37 -7
- package/dist/api/attio-client.js.map +1 -1
- package/dist/api/attribute-types.d.ts.map +1 -1
- package/dist/api/attribute-types.js +59 -29
- package/dist/api/attribute-types.js.map +1 -1
- package/dist/api/client-context.d.ts.map +1 -1
- package/dist/api/client-context.js +28 -42
- package/dist/api/client-context.js.map +1 -1
- package/dist/api/operations/batch.d.ts.map +1 -1
- package/dist/api/operations/batch.js +3 -1
- package/dist/api/operations/batch.js.map +1 -1
- package/dist/cli/commands/generate-skill.d.ts +28 -0
- package/dist/cli/commands/generate-skill.d.ts.map +1 -0
- package/dist/cli/commands/generate-skill.js +101 -0
- package/dist/cli/commands/generate-skill.js.map +1 -0
- package/dist/cli/discover.js +65 -0
- package/dist/cli/discover.js.map +1 -1
- package/dist/config/deal-defaults.d.ts +2 -2
- package/dist/config/deal-defaults.d.ts.map +1 -1
- package/dist/config/deal-defaults.js +15 -6
- package/dist/config/deal-defaults.js.map +1 -1
- package/dist/config/tool-aliases.d.ts +12 -0
- package/dist/config/tool-aliases.d.ts.map +1 -1
- package/dist/config/tool-aliases.js +213 -69
- package/dist/config/tool-aliases.js.map +1 -1
- package/dist/constants/tool-names.d.ts +84 -0
- package/dist/constants/tool-names.d.ts.map +1 -0
- package/dist/constants/tool-names.js +81 -0
- package/dist/constants/tool-names.js.map +1 -0
- package/dist/constants/universal.constants.d.ts +24 -0
- package/dist/constants/universal.constants.d.ts.map +1 -1
- package/dist/constants/universal.constants.js +81 -9
- package/dist/constants/universal.constants.js.map +1 -1
- package/dist/handlers/tool-configs/tasks.d.ts.map +1 -1
- package/dist/handlers/tool-configs/tasks.js +28 -0
- package/dist/handlers/tool-configs/tasks.js.map +1 -1
- package/dist/handlers/tool-configs/universal/batch-search.js +4 -4
- package/dist/handlers/tool-configs/universal/core/crud-error-handlers.d.ts +26 -4
- package/dist/handlers/tool-configs/universal/core/crud-error-handlers.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/core/crud-error-handlers.js +181 -21
- package/dist/handlers/tool-configs/universal/core/crud-error-handlers.js.map +1 -1
- package/dist/handlers/tool-configs/universal/core/crud-operations.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/core/crud-operations.js +52 -13
- package/dist/handlers/tool-configs/universal/core/crud-operations.js.map +1 -1
- package/dist/handlers/tool-configs/universal/core/detailed-info-operations.js +3 -3
- package/dist/handlers/tool-configs/universal/core/detailed-info-operations.js.map +1 -1
- package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.d.ts +17 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.d.ts.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.js +118 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.js.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.d.ts +14 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.d.ts.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.js +77 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.js.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/index.d.ts +24 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/index.d.ts.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/index.js +35 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/index.js.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.d.ts +15 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.d.ts.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.js +108 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.js.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.d.ts +14 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.d.ts.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.js +91 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.js.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.d.ts +14 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.d.ts.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.js +118 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.js.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/types.d.ts +77 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/types.d.ts.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/types.js +42 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/types.js.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.d.ts +15 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.d.ts.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.js +109 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.js.map +1 -0
- package/dist/handlers/tool-configs/universal/core/index.d.ts +63 -22
- package/dist/handlers/tool-configs/universal/core/index.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/core/index.js +24 -22
- package/dist/handlers/tool-configs/universal/core/index.js.map +1 -1
- package/dist/handlers/tool-configs/universal/core/metadata-operations.d.ts +43 -1
- package/dist/handlers/tool-configs/universal/core/metadata-operations.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/core/metadata-operations.js +117 -11
- package/dist/handlers/tool-configs/universal/core/metadata-operations.js.map +1 -1
- package/dist/handlers/tool-configs/universal/core/notes-operations.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/core/notes-operations.js +27 -12
- package/dist/handlers/tool-configs/universal/core/notes-operations.js.map +1 -1
- package/dist/handlers/tool-configs/universal/core/record-details-operations.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/core/record-details-operations.js +20 -3
- package/dist/handlers/tool-configs/universal/core/record-details-operations.js.map +1 -1
- package/dist/handlers/tool-configs/universal/core/search-operations.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/core/search-operations.js +11 -4
- package/dist/handlers/tool-configs/universal/core/search-operations.js.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.js +32 -9
- package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.js.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.js +45 -6
- package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.js.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/constants/people.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/constants/people.js +36 -5
- package/dist/handlers/tool-configs/universal/field-mapper/constants/people.js.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.d.ts +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.js +17 -1
- package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.js.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.js +3 -1
- package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.js.map +1 -1
- package/dist/handlers/tool-configs/universal/index.d.ts +75 -34
- package/dist/handlers/tool-configs/universal/index.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/index.js +58 -58
- package/dist/handlers/tool-configs/universal/index.js.map +1 -1
- package/dist/handlers/tool-configs/universal/operations/advanced-search.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/operations/advanced-search.js +5 -4
- package/dist/handlers/tool-configs/universal/operations/advanced-search.js.map +1 -1
- package/dist/handlers/tool-configs/universal/operations/batch-operations.js +3 -3
- package/dist/handlers/tool-configs/universal/operations/content-search.js +3 -3
- package/dist/handlers/tool-configs/universal/operations/index.d.ts +10 -10
- package/dist/handlers/tool-configs/universal/operations/index.js +15 -15
- package/dist/handlers/tool-configs/universal/operations/relationship-search.js +3 -3
- package/dist/handlers/tool-configs/universal/operations/timeframe-search.js +3 -3
- package/dist/handlers/tool-configs/universal/schemas/utility-schemas.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/schemas/utility-schemas.js +5 -2
- package/dist/handlers/tool-configs/universal/schemas/utility-schemas.js.map +1 -1
- package/dist/handlers/tool-configs/universal/schemas/validation-schemas.d.ts +29 -0
- package/dist/handlers/tool-configs/universal/schemas/validation-schemas.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/schemas/validation-schemas.js +28 -0
- package/dist/handlers/tool-configs/universal/schemas/validation-schemas.js.map +1 -1
- package/dist/handlers/tool-configs/universal/schemas.d.ts +1 -1
- package/dist/handlers/tool-configs/universal/schemas.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/schemas.js +1 -1
- package/dist/handlers/tool-configs/universal/schemas.js.map +1 -1
- package/dist/handlers/tool-configs/universal/shared-handlers.d.ts +20 -1
- package/dist/handlers/tool-configs/universal/shared-handlers.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/shared-handlers.js +216 -0
- package/dist/handlers/tool-configs/universal/shared-handlers.js.map +1 -1
- package/dist/handlers/tool-configs/universal/smithery-diagnostics.js +2 -2
- package/dist/handlers/tool-configs/universal/types.d.ts +9 -0
- package/dist/handlers/tool-configs/universal/types.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/validators/schema-validator.d.ts +11 -0
- package/dist/handlers/tool-configs/universal/validators/schema-validator.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/validators/schema-validator.js +63 -9
- package/dist/handlers/tool-configs/universal/validators/schema-validator.js.map +1 -1
- package/dist/handlers/tool-types.d.ts +9 -0
- package/dist/handlers/tool-types.d.ts.map +1 -1
- package/dist/handlers/tools/dispatcher/core.d.ts.map +1 -1
- package/dist/handlers/tools/dispatcher/core.js +24 -5
- package/dist/handlers/tools/dispatcher/core.js.map +1 -1
- package/dist/handlers/tools/formatters.d.ts +8 -1
- package/dist/handlers/tools/formatters.d.ts.map +1 -1
- package/dist/handlers/tools/formatters.js +30 -14
- package/dist/handlers/tools/formatters.js.map +1 -1
- package/dist/handlers/tools/registry.d.ts +125 -84
- package/dist/handlers/tools/registry.d.ts.map +1 -1
- package/dist/handlers/tools/registry.js +14 -9
- package/dist/handlers/tools/registry.js.map +1 -1
- package/dist/handlers/tools/standards/index.d.ts.map +1 -1
- package/dist/handlers/tools/standards/index.js +19 -11
- package/dist/handlers/tools/standards/index.js.map +1 -1
- package/dist/objects/companies/attributes.d.ts +5 -0
- package/dist/objects/companies/attributes.d.ts.map +1 -1
- package/dist/objects/companies/attributes.js +45 -31
- package/dist/objects/companies/attributes.js.map +1 -1
- package/dist/server/createServer.d.ts.map +1 -1
- package/dist/server/createServer.js +4 -3
- package/dist/server/createServer.js.map +1 -1
- package/dist/services/ErrorService.js +3 -3
- package/dist/services/ErrorService.js.map +1 -1
- package/dist/services/UniversalCreateService.d.ts.map +1 -1
- package/dist/services/UniversalCreateService.js +136 -12
- package/dist/services/UniversalCreateService.js.map +1 -1
- package/dist/services/UniversalSearchService.d.ts +4 -25
- package/dist/services/UniversalSearchService.d.ts.map +1 -1
- package/dist/services/UniversalSearchService.js +14 -324
- package/dist/services/UniversalSearchService.js.map +1 -1
- package/dist/services/UniversalUpdateService.d.ts +15 -4
- package/dist/services/UniversalUpdateService.d.ts.map +1 -1
- package/dist/services/UniversalUpdateService.js +79 -151
- package/dist/services/UniversalUpdateService.js.map +1 -1
- package/dist/services/create/factory.d.ts.map +1 -1
- package/dist/services/create/factory.js +2 -1
- package/dist/services/create/factory.js.map +1 -1
- package/dist/services/metadata/AttributeOptionsService.d.ts +38 -0
- package/dist/services/metadata/AttributeOptionsService.d.ts.map +1 -0
- package/dist/services/metadata/AttributeOptionsService.js +92 -0
- package/dist/services/metadata/AttributeOptionsService.js.map +1 -0
- package/dist/services/metadata/index.d.ts +1 -0
- package/dist/services/metadata/index.d.ts.map +1 -1
- package/dist/services/metadata/index.js +1 -0
- package/dist/services/metadata/index.js.map +1 -1
- package/dist/services/search/QueryApiService.d.ts +27 -0
- package/dist/services/search/QueryApiService.d.ts.map +1 -0
- package/dist/services/search/QueryApiService.js +144 -0
- package/dist/services/search/QueryApiService.js.map +1 -0
- package/dist/services/search/RecordsSearchService.d.ts +27 -0
- package/dist/services/search/RecordsSearchService.d.ts.map +1 -0
- package/dist/services/search/RecordsSearchService.js +122 -0
- package/dist/services/search/RecordsSearchService.js.map +1 -0
- package/dist/services/search/SearchCoordinator.d.ts +41 -0
- package/dist/services/search/SearchCoordinator.d.ts.map +1 -0
- package/dist/services/search/SearchCoordinator.js +83 -0
- package/dist/services/search/SearchCoordinator.js.map +1 -0
- package/dist/services/search/StrategyFactory.d.ts +31 -0
- package/dist/services/search/StrategyFactory.d.ts.map +1 -0
- package/dist/services/search/StrategyFactory.js +100 -0
- package/dist/services/search/StrategyFactory.js.map +1 -0
- package/dist/services/skill-generator/OutputWriterService.d.ts +41 -0
- package/dist/services/skill-generator/OutputWriterService.d.ts.map +1 -0
- package/dist/services/skill-generator/OutputWriterService.js +100 -0
- package/dist/services/skill-generator/OutputWriterService.js.map +1 -0
- package/dist/services/skill-generator/SchemaFormatterService.d.ts +61 -0
- package/dist/services/skill-generator/SchemaFormatterService.d.ts.map +1 -0
- package/dist/services/skill-generator/SchemaFormatterService.js +168 -0
- package/dist/services/skill-generator/SchemaFormatterService.js.map +1 -0
- package/dist/services/skill-generator/WorkspaceSchemaService.d.ts +84 -0
- package/dist/services/skill-generator/WorkspaceSchemaService.d.ts.map +1 -0
- package/dist/services/skill-generator/WorkspaceSchemaService.js +292 -0
- package/dist/services/skill-generator/WorkspaceSchemaService.js.map +1 -0
- package/dist/services/skill-generator/index.d.ts +12 -0
- package/dist/services/skill-generator/index.d.ts.map +1 -0
- package/dist/services/skill-generator/index.js +11 -0
- package/dist/services/skill-generator/index.js.map +1 -0
- package/dist/services/skill-generator/types.d.ts +137 -0
- package/dist/services/skill-generator/types.d.ts.map +1 -0
- package/dist/services/skill-generator/types.js +10 -0
- package/dist/services/skill-generator/types.js.map +1 -0
- package/dist/services/update/FieldPersistenceHandler.d.ts +101 -0
- package/dist/services/update/FieldPersistenceHandler.d.ts.map +1 -0
- package/dist/services/update/FieldPersistenceHandler.js +198 -0
- package/dist/services/update/FieldPersistenceHandler.js.map +1 -0
- package/dist/services/update/FieldValidationHandler.d.ts +77 -0
- package/dist/services/update/FieldValidationHandler.d.ts.map +1 -0
- package/dist/services/update/FieldValidationHandler.js +157 -0
- package/dist/services/update/FieldValidationHandler.js.map +1 -0
- package/dist/services/update/MetadataResolver.d.ts +50 -0
- package/dist/services/update/MetadataResolver.d.ts.map +1 -0
- package/dist/services/update/MetadataResolver.js +110 -0
- package/dist/services/update/MetadataResolver.js.map +1 -0
- package/dist/services/update/UpdateOrchestrator.d.ts +37 -0
- package/dist/services/update/UpdateOrchestrator.d.ts.map +1 -0
- package/dist/services/update/UpdateOrchestrator.js +58 -0
- package/dist/services/update/UpdateOrchestrator.js.map +1 -0
- package/dist/services/update/UpdateValidation.d.ts +5 -1
- package/dist/services/update/UpdateValidation.d.ts.map +1 -1
- package/dist/services/update/UpdateValidation.js +46 -14
- package/dist/services/update/UpdateValidation.js.map +1 -1
- package/dist/services/value-transformer/index.d.ts +57 -0
- package/dist/services/value-transformer/index.d.ts.map +1 -0
- package/dist/services/value-transformer/index.js +326 -0
- package/dist/services/value-transformer/index.js.map +1 -0
- package/dist/services/value-transformer/multi-select-transformer.d.ts +63 -0
- package/dist/services/value-transformer/multi-select-transformer.d.ts.map +1 -0
- package/dist/services/value-transformer/multi-select-transformer.js +144 -0
- package/dist/services/value-transformer/multi-select-transformer.js.map +1 -0
- package/dist/services/value-transformer/record-reference-transformer.d.ts +43 -0
- package/dist/services/value-transformer/record-reference-transformer.d.ts.map +1 -0
- package/dist/services/value-transformer/record-reference-transformer.js +245 -0
- package/dist/services/value-transformer/record-reference-transformer.js.map +1 -0
- package/dist/services/value-transformer/select-transformer.d.ts +48 -0
- package/dist/services/value-transformer/select-transformer.d.ts.map +1 -0
- package/dist/services/value-transformer/select-transformer.js +232 -0
- package/dist/services/value-transformer/select-transformer.js.map +1 -0
- package/dist/services/value-transformer/status-transformer.d.ts +32 -0
- package/dist/services/value-transformer/status-transformer.d.ts.map +1 -0
- package/dist/services/value-transformer/status-transformer.js +294 -0
- package/dist/services/value-transformer/status-transformer.js.map +1 -0
- package/dist/services/value-transformer/types.d.ts +100 -0
- package/dist/services/value-transformer/types.d.ts.map +1 -0
- package/dist/services/value-transformer/types.js +6 -0
- package/dist/services/value-transformer/types.js.map +1 -0
- package/dist/templates/skill/SKILL.template.md +78 -0
- package/dist/templates/skill/attribute-reference.template.md +126 -0
- package/dist/templates/skill/complex-types.template.md +255 -0
- package/dist/utils/client-resolver.d.ts.map +1 -1
- package/dist/utils/client-resolver.js +8 -16
- package/dist/utils/client-resolver.js.map +1 -1
- package/dist/utils/complex-type-validation.d.ts +16 -0
- package/dist/utils/complex-type-validation.d.ts.map +1 -0
- package/dist/utils/complex-type-validation.js +196 -0
- package/dist/utils/complex-type-validation.js.map +1 -0
- package/dist/utils/error-utilities.d.ts.map +1 -1
- package/dist/utils/error-utilities.js +16 -9
- package/dist/utils/error-utilities.js.map +1 -1
- package/dist/utils/location-normalizer.d.ts +26 -0
- package/dist/utils/location-normalizer.d.ts.map +1 -0
- package/dist/utils/location-normalizer.js +39 -0
- package/dist/utils/location-normalizer.js.map +1 -0
- package/dist/utils/metadata-utils.d.ts +27 -0
- package/dist/utils/metadata-utils.d.ts.map +1 -0
- package/dist/utils/metadata-utils.js +59 -0
- package/dist/utils/metadata-utils.js.map +1 -0
- package/dist/utils/personal-name-parser.d.ts.map +1 -1
- package/dist/utils/personal-name-parser.js +26 -17
- package/dist/utils/personal-name-parser.js.map +1 -1
- package/dist/validators/company/field_detector.d.ts.map +1 -1
- package/dist/validators/company/field_detector.js +5 -0
- package/dist/validators/company/field_detector.js.map +1 -1
- package/package.json +28 -25
|
@@ -8,14 +8,14 @@ import { searchByContentConfig } from './content-search.js';
|
|
|
8
8
|
import { searchByTimeframeConfig } from './timeframe-search.js';
|
|
9
9
|
import { batchOperationsConfig } from './batch-operations.js';
|
|
10
10
|
export declare const advancedOperationsToolConfigs: {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
search_records_advanced: import("../types.js").UniversalToolConfig<import("../types.js").AdvancedSearchParams, import("../../../../types/attio.js").AttioRecord[]>;
|
|
12
|
+
search_records_by_relationship: import("../types.js").UniversalToolConfig<import("../types.js").RelationshipSearchParams, import("../../../../types/attio.js").AttioRecord[]>;
|
|
13
|
+
search_records_by_content: import("../types.js").UniversalToolConfig<import("../types.js").ContentSearchParams, import("../../../../types/attio.js").AttioRecord[]>;
|
|
14
|
+
search_records_by_timeframe: import("../types.js").UniversalToolConfig<import("../types.js").TimeframeSearchParams, import("../../../../types/attio.js").AttioRecord[]>;
|
|
15
|
+
batch_records: import("../types.js").UniversalToolConfig<Record<string, unknown>, Record<string, unknown> | Record<string, unknown>[]>;
|
|
16
16
|
};
|
|
17
17
|
export declare const advancedOperationsToolDefinitions: {
|
|
18
|
-
|
|
18
|
+
search_records_advanced: {
|
|
19
19
|
name: string;
|
|
20
20
|
description: string;
|
|
21
21
|
inputSchema: {
|
|
@@ -79,7 +79,7 @@ export declare const advancedOperationsToolDefinitions: {
|
|
|
79
79
|
idempotentHint: boolean;
|
|
80
80
|
};
|
|
81
81
|
};
|
|
82
|
-
|
|
82
|
+
search_records_by_relationship: {
|
|
83
83
|
name: string;
|
|
84
84
|
description: string;
|
|
85
85
|
inputSchema: {
|
|
@@ -131,7 +131,7 @@ export declare const advancedOperationsToolDefinitions: {
|
|
|
131
131
|
idempotentHint: boolean;
|
|
132
132
|
};
|
|
133
133
|
};
|
|
134
|
-
|
|
134
|
+
search_records_by_content: {
|
|
135
135
|
name: string;
|
|
136
136
|
description: string;
|
|
137
137
|
inputSchema: {
|
|
@@ -178,7 +178,7 @@ export declare const advancedOperationsToolDefinitions: {
|
|
|
178
178
|
idempotentHint: boolean;
|
|
179
179
|
};
|
|
180
180
|
};
|
|
181
|
-
|
|
181
|
+
search_records_by_timeframe: {
|
|
182
182
|
name: string;
|
|
183
183
|
description: string;
|
|
184
184
|
inputSchema: {
|
|
@@ -231,7 +231,7 @@ export declare const advancedOperationsToolDefinitions: {
|
|
|
231
231
|
idempotentHint: boolean;
|
|
232
232
|
};
|
|
233
233
|
};
|
|
234
|
-
|
|
234
|
+
batch_records: {
|
|
235
235
|
name: string;
|
|
236
236
|
description: string;
|
|
237
237
|
inputSchema: {
|
|
@@ -10,15 +10,15 @@ import { batchOperationsConfig } from './batch-operations.js';
|
|
|
10
10
|
import { formatToolDescription } from '../../../../handlers/tools/standards/index.js';
|
|
11
11
|
import { advancedSearchSchema, searchByRelationshipSchema, searchByContentSchema, searchByTimeframeSchema, batchOperationsSchema, } from '../schemas.js';
|
|
12
12
|
export const advancedOperationsToolConfigs = {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
search_records_advanced: advancedSearchConfig,
|
|
14
|
+
search_records_by_relationship: searchByRelationshipConfig,
|
|
15
|
+
search_records_by_content: searchByContentConfig,
|
|
16
|
+
search_records_by_timeframe: searchByTimeframeConfig,
|
|
17
|
+
batch_records: batchOperationsConfig,
|
|
18
18
|
};
|
|
19
19
|
export const advancedOperationsToolDefinitions = {
|
|
20
|
-
|
|
21
|
-
name: '
|
|
20
|
+
search_records_advanced: {
|
|
21
|
+
name: 'search_records_advanced',
|
|
22
22
|
description: formatToolDescription({
|
|
23
23
|
capability: 'Search companies, people, deals, or tasks with complex nested filters (e.g., find deals by owner+stage, companies by industry+location).',
|
|
24
24
|
boundaries: 'mutate records; use records.update or records.delete.',
|
|
@@ -31,8 +31,8 @@ export const advancedOperationsToolDefinitions = {
|
|
|
31
31
|
idempotentHint: true,
|
|
32
32
|
},
|
|
33
33
|
},
|
|
34
|
-
|
|
35
|
-
name: '
|
|
34
|
+
search_records_by_relationship: {
|
|
35
|
+
name: 'search_records_by_relationship',
|
|
36
36
|
description: formatToolDescription({
|
|
37
37
|
capability: 'Search records using relationship anchors (list, company, people).',
|
|
38
38
|
boundaries: 'modify memberships; use list tools for writes.',
|
|
@@ -45,8 +45,8 @@ export const advancedOperationsToolDefinitions = {
|
|
|
45
45
|
idempotentHint: true,
|
|
46
46
|
},
|
|
47
47
|
},
|
|
48
|
-
|
|
49
|
-
name: '
|
|
48
|
+
search_records_by_content: {
|
|
49
|
+
name: 'search_records_by_content',
|
|
50
50
|
description: formatToolDescription({
|
|
51
51
|
capability: 'Search record content (notes, activity, communications).',
|
|
52
52
|
boundaries: 'modify note content or attachments.',
|
|
@@ -59,8 +59,8 @@ export const advancedOperationsToolDefinitions = {
|
|
|
59
59
|
idempotentHint: true,
|
|
60
60
|
},
|
|
61
61
|
},
|
|
62
|
-
|
|
63
|
-
name: '
|
|
62
|
+
search_records_by_timeframe: {
|
|
63
|
+
name: 'search_records_by_timeframe',
|
|
64
64
|
description: formatToolDescription({
|
|
65
65
|
capability: 'Filter records by creation, update, or interaction timeframes.',
|
|
66
66
|
boundaries: 'modify lifecycle state or scheduling follow-ups.',
|
|
@@ -73,8 +73,8 @@ export const advancedOperationsToolDefinitions = {
|
|
|
73
73
|
idempotentHint: true,
|
|
74
74
|
},
|
|
75
75
|
},
|
|
76
|
-
|
|
77
|
-
name: '
|
|
76
|
+
batch_records: {
|
|
77
|
+
name: 'batch_records',
|
|
78
78
|
description: formatToolDescription({
|
|
79
79
|
capability: 'Execute batched record operations (create/update/delete/get/search).',
|
|
80
80
|
boundaries: 'ignore approval guardrails; hosts may require confirmation.',
|
|
@@ -10,10 +10,10 @@ import { searchCompaniesByPeople } from '../../../../objects/companies/index.js'
|
|
|
10
10
|
import { searchPeopleByCompany } from '../../../../objects/people/index.js';
|
|
11
11
|
import { searchDealsByCompany, searchDealsByPerson, } from '../../../../objects/deals/index.js';
|
|
12
12
|
export const searchByRelationshipConfig = {
|
|
13
|
-
name: '
|
|
13
|
+
name: 'search_records_by_relationship',
|
|
14
14
|
handler: async (params) => {
|
|
15
15
|
try {
|
|
16
|
-
const sanitizedParams = validateUniversalToolParams('
|
|
16
|
+
const sanitizedParams = validateUniversalToolParams('search_records_by_relationship', params);
|
|
17
17
|
// Check for listId parameter first - if present and invalid, return error immediately
|
|
18
18
|
if (params.listId && !isValidUUID(params.listId)) {
|
|
19
19
|
throw new Error(`Invalid list_id: must be a UUID. Got: ${params.listId}`);
|
|
@@ -53,7 +53,7 @@ export const searchByRelationshipConfig = {
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
catch (error) {
|
|
56
|
-
throw ErrorService.createUniversalError('
|
|
56
|
+
throw ErrorService.createUniversalError('search_records_by_relationship', params.relationship_type, error);
|
|
57
57
|
}
|
|
58
58
|
},
|
|
59
59
|
formatResult: (results, ...args) => {
|
|
@@ -10,10 +10,10 @@ import { getPluralResourceType } from '../../../tool-configs/universal/core/util
|
|
|
10
10
|
import { normalizeOperator } from '../../../../utils/AttioFilterOperators.js';
|
|
11
11
|
import { mapFieldName } from '../../../../utils/AttioFieldMapper.js';
|
|
12
12
|
export const searchByTimeframeConfig = {
|
|
13
|
-
name: '
|
|
13
|
+
name: 'search_records_by_timeframe',
|
|
14
14
|
handler: async (params) => {
|
|
15
15
|
try {
|
|
16
|
-
const sanitizedParams = validateUniversalToolParams('
|
|
16
|
+
const sanitizedParams = validateUniversalToolParams('search_records_by_timeframe', params);
|
|
17
17
|
const { resource_type, timeframe_type, start_date, end_date, relative_range, invert_range, date_field, limit, offset, } = sanitizedParams;
|
|
18
18
|
// Process relative_range parameter if provided (Issue #475)
|
|
19
19
|
let processedStartDate = start_date;
|
|
@@ -149,7 +149,7 @@ export const searchByTimeframeConfig = {
|
|
|
149
149
|
});
|
|
150
150
|
}
|
|
151
151
|
catch (error) {
|
|
152
|
-
throw ErrorService.createUniversalError('
|
|
152
|
+
throw ErrorService.createUniversalError('search_records_by_timeframe', `${params.resource_type}:${params.timeframe_type || 'undefined'}`, error);
|
|
153
153
|
}
|
|
154
154
|
},
|
|
155
155
|
formatResult: (results, ...args) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utility-schemas.d.ts","sourceRoot":"","sources":["../../../../../src/handlers/tool-configs/universal/schemas/utility-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAMnF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"utility-schemas.d.ts","sourceRoot":"","sources":["../../../../../src/handlers/tool-configs/universal/schemas/utility-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAMnF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkC5B,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;CAkB1B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;CAQ5B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;CAgB7B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;CAO5B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgB3B,CAAC"}
|
|
@@ -13,11 +13,14 @@ export const createNoteSchema = {
|
|
|
13
13
|
description: 'ID of the record to attach the note to',
|
|
14
14
|
},
|
|
15
15
|
title: { type: 'string', description: 'Title of the note' },
|
|
16
|
-
content: {
|
|
16
|
+
content: {
|
|
17
|
+
type: 'string',
|
|
18
|
+
description: 'Note content. Use \\n for line breaks. With format="markdown": supports # headings, - bullets, 1. numbered lists, **bold**, `code`, nested lists (2-space indent).',
|
|
19
|
+
},
|
|
17
20
|
format: {
|
|
18
21
|
type: 'string',
|
|
19
22
|
enum: ['plaintext', 'markdown'],
|
|
20
|
-
description: 'Content format
|
|
23
|
+
description: 'Content format. Use "markdown" for rich text: headings, lists, bold, code blocks. Default: plaintext.',
|
|
21
24
|
// Note: Default value 'plaintext' is enforced in src/api/operations/notes.ts:57
|
|
22
25
|
default: 'plaintext',
|
|
23
26
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utility-schemas.js","sourceRoot":"","sources":["../../../../../src/handlers/tool-configs/universal/schemas/utility-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,gEAAgE,CAAC;AAExE,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,aAAa,EAAE;YACb,IAAI,EAAE,QAAiB;YACvB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;YAC1C,WAAW,EAAE,sBAAsB;SACpC;QACD,SAAS,EAAE;YACT,IAAI,EAAE,QAAiB;YACvB,WAAW,EAAE,wCAAwC;SACtD;QACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,mBAAmB,EAAE;QACpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"utility-schemas.js","sourceRoot":"","sources":["../../../../../src/handlers/tool-configs/universal/schemas/utility-schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,4 +53,33 @@ export declare const discoverAttributesSchema: {
|
|
|
53
53
|
categories: string[];
|
|
54
54
|
}[];
|
|
55
55
|
};
|
|
56
|
+
export declare const getAttributeOptionsSchema: {
|
|
57
|
+
type: "object";
|
|
58
|
+
properties: {
|
|
59
|
+
resource_type: {
|
|
60
|
+
type: "string";
|
|
61
|
+
description: string;
|
|
62
|
+
};
|
|
63
|
+
attribute: {
|
|
64
|
+
type: "string";
|
|
65
|
+
description: string;
|
|
66
|
+
};
|
|
67
|
+
show_archived: {
|
|
68
|
+
type: "boolean";
|
|
69
|
+
default: boolean;
|
|
70
|
+
description: string;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
required: ("attribute" | "resource_type")[];
|
|
74
|
+
additionalProperties: boolean;
|
|
75
|
+
examples: ({
|
|
76
|
+
resource_type: string;
|
|
77
|
+
attribute: string;
|
|
78
|
+
show_archived?: undefined;
|
|
79
|
+
} | {
|
|
80
|
+
resource_type: string;
|
|
81
|
+
attribute: string;
|
|
82
|
+
show_archived: boolean;
|
|
83
|
+
})[];
|
|
84
|
+
};
|
|
56
85
|
//# sourceMappingURL=validation-schemas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation-schemas.d.ts","sourceRoot":"","sources":["../../../../../src/handlers/tool-configs/universal/schemas/validation-schemas.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B/B,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;CAkBpC,CAAC"}
|
|
1
|
+
{"version":3,"file":"validation-schemas.d.ts","sourceRoot":"","sources":["../../../../../src/handlers/tool-configs/universal/schemas/validation-schemas.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B/B,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;CAkBpC,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BrC,CAAC"}
|
|
@@ -46,4 +46,32 @@ export const discoverAttributesSchema = {
|
|
|
46
46
|
},
|
|
47
47
|
],
|
|
48
48
|
};
|
|
49
|
+
export const getAttributeOptionsSchema = {
|
|
50
|
+
type: 'object',
|
|
51
|
+
properties: {
|
|
52
|
+
resource_type: resourceTypeProperty,
|
|
53
|
+
attribute: {
|
|
54
|
+
type: 'string',
|
|
55
|
+
description: 'The attribute slug or ID (e.g., "channel", "stage", "categories")',
|
|
56
|
+
},
|
|
57
|
+
show_archived: {
|
|
58
|
+
type: 'boolean',
|
|
59
|
+
default: false,
|
|
60
|
+
description: 'Include archived options in the response',
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
required: ['resource_type', 'attribute'],
|
|
64
|
+
additionalProperties: false,
|
|
65
|
+
examples: [
|
|
66
|
+
{
|
|
67
|
+
resource_type: 'companies',
|
|
68
|
+
attribute: 'channel',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
resource_type: 'deals',
|
|
72
|
+
attribute: 'stage',
|
|
73
|
+
show_archived: true,
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
};
|
|
49
77
|
//# sourceMappingURL=validation-schemas.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation-schemas.js","sourceRoot":"","sources":["../../../../../src/handlers/tool-configs/universal/schemas/validation-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,aAAa,EAAE,oBAAoB;QACnC,SAAS,EAAE;YACT,IAAI,EAAE,QAAiB;YACvB,WAAW,EAAE,4CAA4C;SAC1D;QACD,UAAU,EAAE;YACV,IAAI,EAAE,OAAgB;YACtB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;YAClC,WAAW,EAAE,sBAAsB;SACpC;QACD,MAAM,EAAE;YACN,IAAI,EAAE,OAAgB;YACtB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;YAClC,WAAW,EAAE,gCAAgC;SAC9C;KACF;IACD,QAAQ,EAAE,CAAC,eAAwB,CAAC;IACpC,oBAAoB,EAAE,KAAK;IAC3B,QAAQ,EAAE;QACR;YACE,aAAa,EAAE,WAAW;YAC1B,UAAU,EAAE,CAAC,UAAU,CAAC;SACzB;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,aAAa,EAAE,oBAAoB;QACnC,UAAU,EAAE;YACV,IAAI,EAAE,OAAgB;YACtB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;YAClC,WAAW,EAAE,sBAAsB;SACpC;KACF;IACD,QAAQ,EAAE,CAAC,eAAwB,CAAC;IACpC,oBAAoB,EAAE,KAAK;IAC3B,QAAQ,EAAE;QACR;YACE,aAAa,EAAE,QAAQ;YACvB,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB;KACF;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"validation-schemas.js","sourceRoot":"","sources":["../../../../../src/handlers/tool-configs/universal/schemas/validation-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,aAAa,EAAE,oBAAoB;QACnC,SAAS,EAAE;YACT,IAAI,EAAE,QAAiB;YACvB,WAAW,EAAE,4CAA4C;SAC1D;QACD,UAAU,EAAE;YACV,IAAI,EAAE,OAAgB;YACtB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;YAClC,WAAW,EAAE,sBAAsB;SACpC;QACD,MAAM,EAAE;YACN,IAAI,EAAE,OAAgB;YACtB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;YAClC,WAAW,EAAE,gCAAgC;SAC9C;KACF;IACD,QAAQ,EAAE,CAAC,eAAwB,CAAC;IACpC,oBAAoB,EAAE,KAAK;IAC3B,QAAQ,EAAE;QACR;YACE,aAAa,EAAE,WAAW;YAC1B,UAAU,EAAE,CAAC,UAAU,CAAC;SACzB;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,aAAa,EAAE,oBAAoB;QACnC,UAAU,EAAE;YACV,IAAI,EAAE,OAAgB;YACtB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;YAClC,WAAW,EAAE,sBAAsB;SACpC;KACF;IACD,QAAQ,EAAE,CAAC,eAAwB,CAAC;IACpC,oBAAoB,EAAE,KAAK;IAC3B,QAAQ,EAAE;QACR;YACE,aAAa,EAAE,QAAQ;YACvB,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,aAAa,EAAE,oBAAoB;QACnC,SAAS,EAAE;YACT,IAAI,EAAE,QAAiB;YACvB,WAAW,EACT,mEAAmE;SACtE;QACD,aAAa,EAAE;YACb,IAAI,EAAE,SAAkB;YACxB,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,0CAA0C;SACxD;KACF;IACD,QAAQ,EAAE,CAAC,eAAwB,EAAE,WAAoB,CAAC;IAC1D,oBAAoB,EAAE,KAAK;IAC3B,QAAQ,EAAE;QACR;YACE,aAAa,EAAE,WAAW;YAC1B,SAAS,EAAE,SAAS;SACrB;QACD;YACE,aAAa,EAAE,OAAO;YACtB,SAAS,EAAE,OAAO;YAClB,aAAa,EAAE,IAAI;SACpB;KACF;CACF,CAAC"}
|
|
@@ -3,7 +3,7 @@ export type { SanitizedValue, SanitizedObject, } from './schemas/common/types.js
|
|
|
3
3
|
export { InputSanitizer, validateUniversalToolParams, } from './validators/schema-validator.js';
|
|
4
4
|
export { CrossResourceValidator } from './validators/cross-resource-validator.js';
|
|
5
5
|
export { searchRecordsSchema, getRecordDetailsSchema, createRecordSchema, updateRecordSchema, deleteRecordSchema, } from './schemas/core-schemas.js';
|
|
6
|
-
export { getAttributesSchema, discoverAttributesSchema, } from './schemas/validation-schemas.js';
|
|
6
|
+
export { getAttributesSchema, discoverAttributesSchema, getAttributeOptionsSchema, } from './schemas/validation-schemas.js';
|
|
7
7
|
export { getDetailedInfoSchema, advancedSearchSchema, searchByRelationshipSchema, searchByContentSchema, searchByTimeframeSchema, batchOperationsSchema, } from './schemas/advanced-schemas.js';
|
|
8
8
|
export { createNoteSchema, getNotesSchema, updateNoteSchema, searchNotesSchema, deleteNoteSchema, listNotesSchema, } from './schemas/utility-schemas.js';
|
|
9
9
|
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../../src/handlers/tool-configs/universal/schemas.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EACT,cAAc,EACd,wBAAwB,GACzB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,cAAc,EACd,eAAe,GAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,cAAc,EACd,2BAA2B,GAC5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAGlF,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,mBAAmB,EACnB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../../src/handlers/tool-configs/universal/schemas.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EACT,cAAc,EACd,wBAAwB,GACzB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,cAAc,EACd,eAAe,GAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,cAAc,EACd,2BAA2B,GAC5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAGlF,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,8BAA8B,CAAC"}
|
|
@@ -6,7 +6,7 @@ export { CrossResourceValidator } from './validators/cross-resource-validator.js
|
|
|
6
6
|
// Core CRUD schemas
|
|
7
7
|
export { searchRecordsSchema, getRecordDetailsSchema, createRecordSchema, updateRecordSchema, deleteRecordSchema, } from './schemas/core-schemas.js';
|
|
8
8
|
// Validation-related schemas (attributes)
|
|
9
|
-
export { getAttributesSchema, discoverAttributesSchema, } from './schemas/validation-schemas.js';
|
|
9
|
+
export { getAttributesSchema, discoverAttributesSchema, getAttributeOptionsSchema, } from './schemas/validation-schemas.js';
|
|
10
10
|
// Advanced and batch schemas
|
|
11
11
|
export { getDetailedInfoSchema, advancedSearchSchema, searchByRelationshipSchema, searchByContentSchema, searchByTimeframeSchema, batchOperationsSchema, } from './schemas/advanced-schemas.js';
|
|
12
12
|
// Notes and utility schemas
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../../src/handlers/tool-configs/universal/schemas.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,sDAAsD;AAEtD,OAAO,EACL,SAAS,EACT,cAAc,EACd,wBAAwB,GACzB,MAAM,+BAA+B,CAAC;AAKvC,OAAO,EACL,cAAc,EACd,2BAA2B,GAC5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAElF,oBAAoB;AACpB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAEnC,0CAA0C;AAC1C,OAAO,EACL,mBAAmB,EACnB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../../src/handlers/tool-configs/universal/schemas.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,sDAAsD;AAEtD,OAAO,EACL,SAAS,EACT,cAAc,EACd,wBAAwB,GACzB,MAAM,+BAA+B,CAAC;AAKvC,OAAO,EACL,cAAc,EACd,2BAA2B,GAC5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAElF,oBAAoB;AACpB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAEnC,0CAA0C;AAC1C,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AAEzC,6BAA6B;AAC7B,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AAEvC,4BAA4B;AAC5B,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,8BAA8B,CAAC"}
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* These utilities provide parameter-based routing to delegate universal
|
|
5
5
|
* tool operations to existing resource-specific handlers.
|
|
6
6
|
*/
|
|
7
|
-
import { UniversalResourceType, UniversalSearchParams, UniversalRecordDetailsParams, UniversalCreateParams, UniversalUpdateParams, UniversalDeleteParams, UniversalAttributesParams, UniversalDetailedInfoParams, UniversalCreateNoteParams, UniversalGetNotesParams, UniversalUpdateNoteParams, UniversalSearchNotesParams, UniversalDeleteNoteParams } from './types.js';
|
|
7
|
+
import { UniversalResourceType, UniversalSearchParams, UniversalRecordDetailsParams, UniversalCreateParams, UniversalUpdateParams, UniversalDeleteParams, UniversalAttributesParams, UniversalDetailedInfoParams, UniversalCreateNoteParams, UniversalGetNotesParams, UniversalUpdateNoteParams, UniversalSearchNotesParams, UniversalDeleteNoteParams, UniversalGetAttributeOptionsParams } from './types.js';
|
|
8
8
|
import { JsonObject } from '../../../types/attio.js';
|
|
9
|
+
import { type AttributeOptionsResult } from '../../../services/metadata/index.js';
|
|
9
10
|
import { AttioRecord } from '../../../types/attio.js';
|
|
10
11
|
/**
|
|
11
12
|
* Universal search handler - delegates to UniversalSearchService
|
|
@@ -70,6 +71,24 @@ export declare function handleUniversalGetAttributes(params: UniversalAttributes
|
|
|
70
71
|
export declare function handleUniversalDiscoverAttributes(resource_type: UniversalResourceType, options?: {
|
|
71
72
|
categories?: string[];
|
|
72
73
|
}): Promise<JsonObject>;
|
|
74
|
+
export declare const normalizeAttributeValue: (value: string) => string;
|
|
75
|
+
/**
|
|
76
|
+
* Resolve display name to API slug for an attribute
|
|
77
|
+
* Fetches attribute metadata and finds the slug by title match
|
|
78
|
+
*
|
|
79
|
+
* @param objectSlug - The object slug (e.g., "deals", "companies")
|
|
80
|
+
* @param displayName - The display name to resolve (e.g., "Deal stage")
|
|
81
|
+
* @returns The API slug if found, or null
|
|
82
|
+
*/
|
|
83
|
+
export declare function resolveAttributeDisplayName(objectSlug: string, displayName: string): Promise<string | null>;
|
|
84
|
+
export declare const getSimilarAttributeSlugs: (objectSlug: string, attribute: string, maxResults?: number) => Promise<string[]>;
|
|
85
|
+
/**
|
|
86
|
+
* Universal get attribute options handler
|
|
87
|
+
* Retrieves valid options for select, multi-select, and status attributes
|
|
88
|
+
*
|
|
89
|
+
* Supports both API slugs (e.g., "stage") and display names (e.g., "Deal stage")
|
|
90
|
+
*/
|
|
91
|
+
export declare function handleUniversalGetAttributeOptions(params: UniversalGetAttributeOptionsParams): Promise<AttributeOptionsResult>;
|
|
73
92
|
/**
|
|
74
93
|
* Universal get detailed info handler
|
|
75
94
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-handlers.d.ts","sourceRoot":"","sources":["../../../../src/handlers/tool-configs/universal/shared-handlers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,4BAA4B,EAC5B,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,
|
|
1
|
+
{"version":3,"file":"shared-handlers.d.ts","sourceRoot":"","sources":["../../../../src/handlers/tool-configs/universal/shared-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ import { UniversalUpdateService } from '../../../services/UniversalUpdateService
|
|
|
13
13
|
import { UniversalRetrievalService } from '../../../services/UniversalRetrievalService.js';
|
|
14
14
|
import { UniversalSearchService } from '../../../services/UniversalSearchService.js';
|
|
15
15
|
import { UniversalCreateService } from '../../../services/UniversalCreateService.js';
|
|
16
|
+
import { AttributeOptionsService, } from '../../../services/metadata/index.js';
|
|
16
17
|
import { getLazyAttioClient } from '../../../api/lazy-client.js';
|
|
17
18
|
// Import existing handlers by resource type
|
|
18
19
|
import { getListDetails } from '../../../objects/lists.js';
|
|
@@ -213,6 +214,221 @@ export async function handleUniversalGetAttributes(params) {
|
|
|
213
214
|
export async function handleUniversalDiscoverAttributes(resource_type, options) {
|
|
214
215
|
return UniversalMetadataService.discoverAttributes(resource_type, options);
|
|
215
216
|
}
|
|
217
|
+
/**
|
|
218
|
+
* Object slug mapping for resource types
|
|
219
|
+
*/
|
|
220
|
+
const OBJECT_SLUG_MAP = {
|
|
221
|
+
companies: 'companies',
|
|
222
|
+
people: 'people',
|
|
223
|
+
deals: 'deals',
|
|
224
|
+
tasks: 'tasks',
|
|
225
|
+
records: 'records',
|
|
226
|
+
lists: 'lists',
|
|
227
|
+
notes: 'notes',
|
|
228
|
+
};
|
|
229
|
+
export const normalizeAttributeValue = (value) => value.trim().toLowerCase();
|
|
230
|
+
const levenshteinDistance = (a, b) => {
|
|
231
|
+
const matrix = [];
|
|
232
|
+
for (let i = 0; i <= a.length; i++) {
|
|
233
|
+
matrix[i] = [i];
|
|
234
|
+
}
|
|
235
|
+
for (let j = 0; j <= b.length; j++) {
|
|
236
|
+
matrix[0][j] = j;
|
|
237
|
+
}
|
|
238
|
+
for (let i = 1; i <= a.length; i++) {
|
|
239
|
+
for (let j = 1; j <= b.length; j++) {
|
|
240
|
+
if (a[i - 1] === b[j - 1]) {
|
|
241
|
+
matrix[i][j] = matrix[i - 1][j - 1];
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return matrix[a.length][b.length];
|
|
249
|
+
};
|
|
250
|
+
const getAttributeSchema = async (objectSlug) => {
|
|
251
|
+
const schema = await handleUniversalDiscoverAttributes(objectSlug);
|
|
252
|
+
return (schema.all || []);
|
|
253
|
+
};
|
|
254
|
+
/**
|
|
255
|
+
* Resolve display name to API slug for an attribute
|
|
256
|
+
* Fetches attribute metadata and finds the slug by title match
|
|
257
|
+
*
|
|
258
|
+
* @param objectSlug - The object slug (e.g., "deals", "companies")
|
|
259
|
+
* @param displayName - The display name to resolve (e.g., "Deal stage")
|
|
260
|
+
* @returns The API slug if found, or null
|
|
261
|
+
*/
|
|
262
|
+
export async function resolveAttributeDisplayName(objectSlug, displayName) {
|
|
263
|
+
try {
|
|
264
|
+
const allAttrs = await getAttributeSchema(objectSlug);
|
|
265
|
+
const normalizedInput = normalizeAttributeValue(displayName);
|
|
266
|
+
const exactMatch = allAttrs.find((attr) => {
|
|
267
|
+
const candidates = [attr.title, attr.name, attr.api_slug].filter(Boolean);
|
|
268
|
+
return candidates.some((candidate) => normalizeAttributeValue(candidate) === normalizedInput);
|
|
269
|
+
});
|
|
270
|
+
if (exactMatch?.api_slug) {
|
|
271
|
+
debug('shared-handlers', `Resolved display name "${displayName}" to API slug "${exactMatch.api_slug}"`, { attribute: displayName, resolvedSlug: exactMatch.api_slug }, 'resolveDisplayName', OperationType.DATA_PROCESSING);
|
|
272
|
+
return exactMatch.api_slug;
|
|
273
|
+
}
|
|
274
|
+
const partialMatch = allAttrs.find((attr) => {
|
|
275
|
+
const title = attr.title ? normalizeAttributeValue(attr.title) : null;
|
|
276
|
+
const slug = attr.api_slug
|
|
277
|
+
? normalizeAttributeValue(attr.api_slug)
|
|
278
|
+
: null;
|
|
279
|
+
return ((title && title.includes(normalizedInput)) ||
|
|
280
|
+
(slug && slug.includes(normalizedInput)) ||
|
|
281
|
+
(title && normalizedInput.includes(title)) ||
|
|
282
|
+
(slug && normalizedInput.includes(slug)));
|
|
283
|
+
});
|
|
284
|
+
if (partialMatch?.api_slug) {
|
|
285
|
+
debug('shared-handlers', `Resolved display name "${displayName}" to API slug "${partialMatch.api_slug}" via partial match`, { attribute: displayName, resolvedSlug: partialMatch.api_slug }, 'resolveDisplayName', OperationType.DATA_PROCESSING);
|
|
286
|
+
return partialMatch.api_slug;
|
|
287
|
+
}
|
|
288
|
+
const typoCandidates = allAttrs
|
|
289
|
+
.filter((attr) => attr.api_slug)
|
|
290
|
+
.map((attr) => {
|
|
291
|
+
const slug = attr.api_slug;
|
|
292
|
+
const title = attr.title || attr.name || slug;
|
|
293
|
+
return {
|
|
294
|
+
slug,
|
|
295
|
+
distance: Math.min(levenshteinDistance(normalizedInput, normalizeAttributeValue(slug)), levenshteinDistance(normalizedInput, normalizeAttributeValue(title))),
|
|
296
|
+
};
|
|
297
|
+
})
|
|
298
|
+
.filter((candidate) => candidate.distance <= 2)
|
|
299
|
+
.sort((a, b) => a.distance - b.distance);
|
|
300
|
+
if (typoCandidates.length > 0) {
|
|
301
|
+
debug('shared-handlers', `Resolved display name "${displayName}" to API slug "${typoCandidates[0].slug}" via typo tolerance`, { attribute: displayName, resolvedSlug: typoCandidates[0].slug }, 'resolveDisplayName', OperationType.DATA_PROCESSING);
|
|
302
|
+
return typoCandidates[0].slug;
|
|
303
|
+
}
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
// If discovery fails, return null - the original error will be shown
|
|
308
|
+
return null;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
export const getSimilarAttributeSlugs = async (objectSlug, attribute, maxResults = 3) => {
|
|
312
|
+
try {
|
|
313
|
+
const allAttrs = await getAttributeSchema(objectSlug);
|
|
314
|
+
const normalizedInput = normalizeAttributeValue(attribute);
|
|
315
|
+
const candidates = allAttrs
|
|
316
|
+
.filter((attr) => attr.api_slug)
|
|
317
|
+
.map((attr) => {
|
|
318
|
+
const slug = attr.api_slug;
|
|
319
|
+
const title = attr.title || attr.name || slug;
|
|
320
|
+
return {
|
|
321
|
+
slug,
|
|
322
|
+
distance: Math.min(levenshteinDistance(normalizedInput, normalizeAttributeValue(slug)), levenshteinDistance(normalizedInput, normalizeAttributeValue(title))),
|
|
323
|
+
};
|
|
324
|
+
})
|
|
325
|
+
.sort((a, b) => a.distance - b.distance);
|
|
326
|
+
const partials = allAttrs
|
|
327
|
+
.filter((attr) => attr.api_slug)
|
|
328
|
+
.filter((attr) => {
|
|
329
|
+
const title = attr.title ? normalizeAttributeValue(attr.title) : '';
|
|
330
|
+
const slug = attr.api_slug
|
|
331
|
+
? normalizeAttributeValue(attr.api_slug)
|
|
332
|
+
: '';
|
|
333
|
+
return (title.includes(normalizedInput) ||
|
|
334
|
+
slug.includes(normalizedInput) ||
|
|
335
|
+
normalizedInput.includes(title) ||
|
|
336
|
+
normalizedInput.includes(slug));
|
|
337
|
+
})
|
|
338
|
+
.map((attr) => attr.api_slug);
|
|
339
|
+
const combined = [
|
|
340
|
+
...partials,
|
|
341
|
+
...candidates.map((candidate) => candidate.slug),
|
|
342
|
+
];
|
|
343
|
+
const unique = [];
|
|
344
|
+
for (const slug of combined) {
|
|
345
|
+
if (!unique.includes(slug)) {
|
|
346
|
+
unique.push(slug);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
return unique.slice(0, maxResults);
|
|
350
|
+
}
|
|
351
|
+
catch {
|
|
352
|
+
return [];
|
|
353
|
+
}
|
|
354
|
+
};
|
|
355
|
+
/**
|
|
356
|
+
* Universal get attribute options handler
|
|
357
|
+
* Retrieves valid options for select, multi-select, and status attributes
|
|
358
|
+
*
|
|
359
|
+
* Supports both API slugs (e.g., "stage") and display names (e.g., "Deal stage")
|
|
360
|
+
*/
|
|
361
|
+
export async function handleUniversalGetAttributeOptions(params) {
|
|
362
|
+
const { resource_type, attribute, show_archived } = params;
|
|
363
|
+
// Map resource type to object slug
|
|
364
|
+
const objectSlug = OBJECT_SLUG_MAP[resource_type.toLowerCase()] || resource_type.toLowerCase();
|
|
365
|
+
// Lists require both list_id and attribute_slug - not yet supported via this tool
|
|
366
|
+
// TODO: Add list_id parameter to support list attributes (see plan Phase 3B)
|
|
367
|
+
if (resource_type === UniversalResourceType.LISTS) {
|
|
368
|
+
throw new Error('records_get_attribute_options does not yet support list attributes. ' +
|
|
369
|
+
'Use get-list-details to inspect list attribute schemas instead.');
|
|
370
|
+
}
|
|
371
|
+
// First attempt: try with the attribute as provided (may be slug or display name)
|
|
372
|
+
try {
|
|
373
|
+
return await AttributeOptionsService.getOptions(objectSlug, attribute, show_archived);
|
|
374
|
+
}
|
|
375
|
+
catch (firstError) {
|
|
376
|
+
let latestError = firstError;
|
|
377
|
+
// Check if this looks like a display name (contains space or uppercase)
|
|
378
|
+
const mightBeDisplayName = attribute.includes(' ') || /[A-Z]/.test(attribute);
|
|
379
|
+
if (mightBeDisplayName) {
|
|
380
|
+
// Try to resolve display name to API slug
|
|
381
|
+
const resolvedSlug = await resolveAttributeDisplayName(objectSlug, attribute);
|
|
382
|
+
if (resolvedSlug && resolvedSlug !== attribute) {
|
|
383
|
+
try {
|
|
384
|
+
// Retry with resolved slug
|
|
385
|
+
debug('shared-handlers', `Resolved display name "${attribute}" to API slug "${resolvedSlug}"`, { attribute, resolvedSlug }, 'resolveDisplayName', OperationType.DATA_PROCESSING);
|
|
386
|
+
return await AttributeOptionsService.getOptions(objectSlug, resolvedSlug, show_archived);
|
|
387
|
+
}
|
|
388
|
+
catch (retryError) {
|
|
389
|
+
latestError = retryError;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
const errorMsg = latestError instanceof Error ? latestError.message : String(latestError);
|
|
394
|
+
let slugExists = null;
|
|
395
|
+
try {
|
|
396
|
+
const allAttrs = await getAttributeSchema(objectSlug);
|
|
397
|
+
const normalizedAttr = normalizeAttributeValue(attribute);
|
|
398
|
+
const displayNameMatch = allAttrs.find((attr) => {
|
|
399
|
+
const title = attr.title ? normalizeAttributeValue(attr.title) : '';
|
|
400
|
+
const name = attr.name ? normalizeAttributeValue(attr.name) : '';
|
|
401
|
+
return title === normalizedAttr || name === normalizedAttr;
|
|
402
|
+
});
|
|
403
|
+
if (displayNameMatch?.api_slug &&
|
|
404
|
+
displayNameMatch.api_slug !== attribute) {
|
|
405
|
+
try {
|
|
406
|
+
return await AttributeOptionsService.getOptions(objectSlug, displayNameMatch.api_slug, show_archived);
|
|
407
|
+
}
|
|
408
|
+
catch (retryError) {
|
|
409
|
+
latestError = retryError;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
slugExists = allAttrs.some((attr) => attr.api_slug &&
|
|
413
|
+
normalizeAttributeValue(attr.api_slug) === normalizedAttr);
|
|
414
|
+
if (slugExists === false) {
|
|
415
|
+
const suggestions = await getSimilarAttributeSlugs(objectSlug, attribute);
|
|
416
|
+
const suggestionText = suggestions.length > 0
|
|
417
|
+
? ` Did you mean: ${suggestions.map((s) => `"${s}"`).join(', ')}?`
|
|
418
|
+
: '';
|
|
419
|
+
throw new Error(`Attribute "${attribute}" not found on ${objectSlug}.${suggestionText}\n\n` +
|
|
420
|
+
`Use API slugs (e.g., "stage" not "Deal stage"). Run records_discover_attributes(resource_type="${objectSlug}") to see available attribute slugs.`);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
catch (resolutionError) {
|
|
424
|
+
if (resolutionError instanceof Error) {
|
|
425
|
+
throw resolutionError;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
throw new Error(`${errorMsg}\n\nTip: Use the API slug (e.g., "stage") not the display name (e.g., "Deal stage"). ` +
|
|
429
|
+
`Run records_discover_attributes to see available attribute slugs.`);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
216
432
|
/**
|
|
217
433
|
* Universal get detailed info handler
|
|
218
434
|
*/
|