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
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service for writing formatted output to disk
|
|
3
|
+
*
|
|
4
|
+
* Handles file I/O operations including:
|
|
5
|
+
* - Creating directory structures
|
|
6
|
+
* - Writing files to disk
|
|
7
|
+
* - Creating ZIP archives
|
|
8
|
+
* - Path validation (security)
|
|
9
|
+
*
|
|
10
|
+
* @see Issue #983
|
|
11
|
+
*/
|
|
12
|
+
import * as fs from 'fs/promises';
|
|
13
|
+
import * as path from 'path';
|
|
14
|
+
import { zipSync, strToU8 } from 'fflate';
|
|
15
|
+
/**
|
|
16
|
+
* Service for writing skill output to disk
|
|
17
|
+
*/
|
|
18
|
+
export class OutputWriterService {
|
|
19
|
+
/**
|
|
20
|
+
* Writes formatted output to disk
|
|
21
|
+
*
|
|
22
|
+
* @param formatted - Formatted output from SchemaFormatterService
|
|
23
|
+
* @param config - Generation configuration
|
|
24
|
+
* @returns Information about written files
|
|
25
|
+
*/
|
|
26
|
+
async write(formatted, config) {
|
|
27
|
+
const outputPath = this.resolveOutputPath(config);
|
|
28
|
+
// Create output directory
|
|
29
|
+
await fs.mkdir(outputPath, { recursive: true });
|
|
30
|
+
// Write all files
|
|
31
|
+
const writtenFiles = [];
|
|
32
|
+
for (const [relativePath, content] of Object.entries(formatted.files)) {
|
|
33
|
+
const fullPath = path.join(outputPath, relativePath);
|
|
34
|
+
const dir = path.dirname(fullPath);
|
|
35
|
+
// Ensure directory exists
|
|
36
|
+
await fs.mkdir(dir, { recursive: true });
|
|
37
|
+
// Write file
|
|
38
|
+
await fs.writeFile(fullPath, content, 'utf8');
|
|
39
|
+
writtenFiles.push(relativePath);
|
|
40
|
+
}
|
|
41
|
+
// Create ZIP if requested
|
|
42
|
+
if (config.zip) {
|
|
43
|
+
await this.createZip(outputPath, formatted.files);
|
|
44
|
+
writtenFiles.push(`${path.basename(outputPath)}.zip`);
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
format: formatted.format,
|
|
48
|
+
path: outputPath,
|
|
49
|
+
files: writtenFiles,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Creates ZIP archive of output files
|
|
54
|
+
*
|
|
55
|
+
* @param basePath - Base directory path
|
|
56
|
+
* @param files - Map of relative paths to file contents
|
|
57
|
+
*/
|
|
58
|
+
async createZip(basePath, files) {
|
|
59
|
+
// Convert files to fflate format (Uint8Array)
|
|
60
|
+
const fileMap = {};
|
|
61
|
+
for (const [relativePath, content] of Object.entries(files)) {
|
|
62
|
+
fileMap[relativePath] = strToU8(content);
|
|
63
|
+
}
|
|
64
|
+
// Create ZIP
|
|
65
|
+
const zipped = zipSync(fileMap, {
|
|
66
|
+
level: 6, // Compression level (0-9, 6 is default)
|
|
67
|
+
});
|
|
68
|
+
// Write ZIP file
|
|
69
|
+
const zipPath = `${basePath}.zip`;
|
|
70
|
+
await fs.writeFile(zipPath, zipped);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Resolves and validates output path
|
|
74
|
+
*
|
|
75
|
+
* @param config - Generation configuration
|
|
76
|
+
* @returns Absolute output path
|
|
77
|
+
* @throws Error if path validation fails (directory traversal attempt)
|
|
78
|
+
*/
|
|
79
|
+
resolveOutputPath(config) {
|
|
80
|
+
// Determine base name based on format
|
|
81
|
+
const baseName = config.format === 'skill'
|
|
82
|
+
? 'attio-workspace-skill'
|
|
83
|
+
: `attio-workspace-schema-${config.format}`;
|
|
84
|
+
// Resolve absolute paths
|
|
85
|
+
const outputDirResolved = path.resolve(config.outputDir);
|
|
86
|
+
const currentWorkingDir = process.cwd();
|
|
87
|
+
// Security: Prevent directory traversal attacks
|
|
88
|
+
// Check if outputDir attempts to escape the current working directory
|
|
89
|
+
const normalized = path.normalize(outputDirResolved);
|
|
90
|
+
// Only allow output within current working directory or subdirectories
|
|
91
|
+
if (!normalized.startsWith(currentWorkingDir)) {
|
|
92
|
+
throw new Error('Invalid output path: directory traversal detected. ' +
|
|
93
|
+
`Output directory must be within current working directory: ${currentWorkingDir}`);
|
|
94
|
+
}
|
|
95
|
+
// Construct final output path
|
|
96
|
+
const outputPath = path.join(outputDirResolved, baseName);
|
|
97
|
+
return outputPath;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=OutputWriterService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OutputWriterService.js","sourceRoot":"","sources":["../../../src/services/skill-generator/OutputWriterService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service for formatting workspace schemas into various output formats
|
|
3
|
+
*
|
|
4
|
+
* Uses Handlebars templates to transform WorkspaceSchema objects into:
|
|
5
|
+
* - Claude Skills (SKILL.md + resources/)
|
|
6
|
+
* - Plain Markdown (single file)
|
|
7
|
+
* - JSON (machine-readable)
|
|
8
|
+
*
|
|
9
|
+
* @see Issue #983
|
|
10
|
+
*/
|
|
11
|
+
import type { WorkspaceSchema, FormattedOutput } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Service for formatting workspace schemas into various output formats
|
|
14
|
+
*/
|
|
15
|
+
export declare class SchemaFormatterService {
|
|
16
|
+
private templates;
|
|
17
|
+
private helpersRegistered;
|
|
18
|
+
constructor();
|
|
19
|
+
/**
|
|
20
|
+
* Formats schema to specified output format
|
|
21
|
+
*
|
|
22
|
+
* @param schema - Complete workspace schema
|
|
23
|
+
* @param format - Output format (skill, markdown, json)
|
|
24
|
+
* @returns Formatted output ready for writing
|
|
25
|
+
*/
|
|
26
|
+
format(schema: WorkspaceSchema, format: 'skill' | 'markdown' | 'json'): Promise<FormattedOutput>;
|
|
27
|
+
/**
|
|
28
|
+
* Formats as Claude Skill with SKILL.md + resources/
|
|
29
|
+
*
|
|
30
|
+
* @param schema - Workspace schema
|
|
31
|
+
* @returns Skill files ready for writing
|
|
32
|
+
*/
|
|
33
|
+
private formatAsSkill;
|
|
34
|
+
/**
|
|
35
|
+
* Formats as single markdown file (all-in-one)
|
|
36
|
+
*
|
|
37
|
+
* @param schema - Workspace schema
|
|
38
|
+
* @returns Single markdown file
|
|
39
|
+
*/
|
|
40
|
+
private formatAsMarkdown;
|
|
41
|
+
/**
|
|
42
|
+
* Formats as JSON (machine-readable)
|
|
43
|
+
*
|
|
44
|
+
* @param schema - Workspace schema
|
|
45
|
+
* @returns JSON representation
|
|
46
|
+
*/
|
|
47
|
+
private formatAsJSON;
|
|
48
|
+
/**
|
|
49
|
+
* Renders a template with the given data
|
|
50
|
+
*
|
|
51
|
+
* @param templateName - Template filename
|
|
52
|
+
* @param data - Data to pass to template
|
|
53
|
+
* @returns Rendered template string
|
|
54
|
+
*/
|
|
55
|
+
private renderTemplate;
|
|
56
|
+
/**
|
|
57
|
+
* Registers custom Handlebars helpers
|
|
58
|
+
*/
|
|
59
|
+
private registerHelpers;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=SchemaFormatterService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaFormatterService.d.ts","sourceRoot":"","sources":["../../../src/services/skill-generator/SchemaFormatterService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAMnE;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,SAAS,CAAsD;IACvE,OAAO,CAAC,iBAAiB,CAAS;;IAMlC;;;;;;OAMG;IACG,MAAM,CACV,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,GACpC,OAAO,CAAC,eAAe,CAAC;IAa3B;;;;;OAKG;YACW,aAAa;IAsD3B;;;;;OAKG;YACW,gBAAgB;IAyB9B;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IASpB;;;;;;OAMG;YACW,cAAc;IA+B5B;;OAEG;IACH,OAAO,CAAC,eAAe;CAsBxB"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service for formatting workspace schemas into various output formats
|
|
3
|
+
*
|
|
4
|
+
* Uses Handlebars templates to transform WorkspaceSchema objects into:
|
|
5
|
+
* - Claude Skills (SKILL.md + resources/)
|
|
6
|
+
* - Plain Markdown (single file)
|
|
7
|
+
* - JSON (machine-readable)
|
|
8
|
+
*
|
|
9
|
+
* @see Issue #983
|
|
10
|
+
*/
|
|
11
|
+
import Handlebars from 'handlebars';
|
|
12
|
+
import * as fs from 'fs/promises';
|
|
13
|
+
import * as path from 'path';
|
|
14
|
+
import { fileURLToPath } from 'url';
|
|
15
|
+
// Get __dirname equivalent in ES modules
|
|
16
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
+
const __dirname = path.dirname(__filename);
|
|
18
|
+
/**
|
|
19
|
+
* Service for formatting workspace schemas into various output formats
|
|
20
|
+
*/
|
|
21
|
+
export class SchemaFormatterService {
|
|
22
|
+
templates = new Map();
|
|
23
|
+
helpersRegistered = false;
|
|
24
|
+
constructor() {
|
|
25
|
+
this.registerHelpers();
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Formats schema to specified output format
|
|
29
|
+
*
|
|
30
|
+
* @param schema - Complete workspace schema
|
|
31
|
+
* @param format - Output format (skill, markdown, json)
|
|
32
|
+
* @returns Formatted output ready for writing
|
|
33
|
+
*/
|
|
34
|
+
async format(schema, format) {
|
|
35
|
+
switch (format) {
|
|
36
|
+
case 'skill':
|
|
37
|
+
return this.formatAsSkill(schema);
|
|
38
|
+
case 'markdown':
|
|
39
|
+
return this.formatAsMarkdown(schema);
|
|
40
|
+
case 'json':
|
|
41
|
+
return this.formatAsJSON(schema);
|
|
42
|
+
default:
|
|
43
|
+
throw new Error(`Unsupported format: ${format}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Formats as Claude Skill with SKILL.md + resources/
|
|
48
|
+
*
|
|
49
|
+
* @param schema - Workspace schema
|
|
50
|
+
* @returns Skill files ready for writing
|
|
51
|
+
*/
|
|
52
|
+
async formatAsSkill(schema) {
|
|
53
|
+
const skillMd = await this.renderTemplate('SKILL.template.md', schema);
|
|
54
|
+
// Validate Claude Skill description length requirement (≤200 chars)
|
|
55
|
+
const descMatch = skillMd.match(/^description:\s*(.+)$/m);
|
|
56
|
+
if (descMatch && descMatch[1].length > 200) {
|
|
57
|
+
throw new Error(`Skill description exceeds 200 characters (${descMatch[1].length} chars). ` +
|
|
58
|
+
`Claude Skills require descriptions ≤200 chars. ` +
|
|
59
|
+
`Try reducing the number of objects or simplifying the description.`);
|
|
60
|
+
}
|
|
61
|
+
// Validate Claude Skill name length requirement (≤64 chars)
|
|
62
|
+
const nameMatch = skillMd.match(/^name:\s*(.+)$/m);
|
|
63
|
+
if (nameMatch && nameMatch[1].trim().length > 64) {
|
|
64
|
+
throw new Error(`Skill name exceeds 64 characters (${nameMatch[1].trim().length} chars). ` +
|
|
65
|
+
`Claude Skills require names ≤64 chars.`);
|
|
66
|
+
}
|
|
67
|
+
// Generate per-object attribute files for progressive disclosure
|
|
68
|
+
// This enables Claude to load only the object it's working with (~2k tokens)
|
|
69
|
+
// instead of the entire monolithic file (~10k tokens)
|
|
70
|
+
// @see Issue #1014
|
|
71
|
+
const attributeFiles = {};
|
|
72
|
+
for (const obj of schema.objects) {
|
|
73
|
+
const objectSchema = { ...schema, objects: [obj] };
|
|
74
|
+
const attrMd = await this.renderTemplate('attribute-reference.template.md', objectSchema);
|
|
75
|
+
attributeFiles[`resources/${obj.objectSlug}-attributes.md`] = attrMd;
|
|
76
|
+
}
|
|
77
|
+
const complexTypes = await this.renderTemplate('complex-types.template.md', schema);
|
|
78
|
+
return {
|
|
79
|
+
format: 'skill',
|
|
80
|
+
files: {
|
|
81
|
+
'SKILL.md': skillMd,
|
|
82
|
+
...attributeFiles,
|
|
83
|
+
'resources/complex-types.md': complexTypes,
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Formats as single markdown file (all-in-one)
|
|
89
|
+
*
|
|
90
|
+
* @param schema - Workspace schema
|
|
91
|
+
* @returns Single markdown file
|
|
92
|
+
*/
|
|
93
|
+
async formatAsMarkdown(schema) {
|
|
94
|
+
// Render all templates and combine them
|
|
95
|
+
const skillMd = await this.renderTemplate('SKILL.template.md', schema);
|
|
96
|
+
const attrRef = await this.renderTemplate('attribute-reference.template.md', schema);
|
|
97
|
+
const complexTypes = await this.renderTemplate('complex-types.template.md', schema);
|
|
98
|
+
// Combine into single document
|
|
99
|
+
const combined = `${skillMd}\n\n---\n\n${attrRef}\n\n---\n\n${complexTypes}`;
|
|
100
|
+
return {
|
|
101
|
+
format: 'markdown',
|
|
102
|
+
files: {
|
|
103
|
+
'attio-workspace-schema.md': combined,
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Formats as JSON (machine-readable)
|
|
109
|
+
*
|
|
110
|
+
* @param schema - Workspace schema
|
|
111
|
+
* @returns JSON representation
|
|
112
|
+
*/
|
|
113
|
+
formatAsJSON(schema) {
|
|
114
|
+
return {
|
|
115
|
+
format: 'json',
|
|
116
|
+
files: {
|
|
117
|
+
'attio-workspace-schema.json': JSON.stringify(schema, null, 2),
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Renders a template with the given data
|
|
123
|
+
*
|
|
124
|
+
* @param templateName - Template filename
|
|
125
|
+
* @param data - Data to pass to template
|
|
126
|
+
* @returns Rendered template string
|
|
127
|
+
*/
|
|
128
|
+
async renderTemplate(templateName, data) {
|
|
129
|
+
// Check cache first
|
|
130
|
+
if (!this.templates.has(templateName)) {
|
|
131
|
+
// Load and compile template
|
|
132
|
+
const templatePath = path.join(__dirname, '../../templates/skill', templateName);
|
|
133
|
+
try {
|
|
134
|
+
const templateSource = await fs.readFile(templatePath, 'utf8');
|
|
135
|
+
const compiledTemplate = Handlebars.compile(templateSource);
|
|
136
|
+
this.templates.set(templateName, compiledTemplate);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
throw new Error(`Failed to load template ${templateName}: ${error instanceof Error ? error.message : String(error)}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Render template
|
|
143
|
+
const template = this.templates.get(templateName);
|
|
144
|
+
return template(data);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Registers custom Handlebars helpers
|
|
148
|
+
*/
|
|
149
|
+
registerHelpers() {
|
|
150
|
+
if (this.helpersRegistered) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
// Helper: Display checkmark or X for boolean values
|
|
154
|
+
Handlebars.registerHelper('checkmark', (value) => {
|
|
155
|
+
return value ? '✓' : '✗';
|
|
156
|
+
});
|
|
157
|
+
// Helper: Subtract two numbers
|
|
158
|
+
Handlebars.registerHelper('subtract', (a, b) => {
|
|
159
|
+
return a - b;
|
|
160
|
+
});
|
|
161
|
+
// Helper: JSON stringify with formatting
|
|
162
|
+
Handlebars.registerHelper('json', (obj) => {
|
|
163
|
+
return JSON.stringify(obj, null, 2);
|
|
164
|
+
});
|
|
165
|
+
this.helpersRegistered = true;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=SchemaFormatterService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaFormatterService.js","sourceRoot":"","sources":["../../../src/services/skill-generator/SchemaFormatterService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service for fetching and aggregating Attio workspace schema data
|
|
3
|
+
*
|
|
4
|
+
* This service orchestrates calls to existing services to build a complete
|
|
5
|
+
* workspace schema including objects, attributes, select options, and metadata.
|
|
6
|
+
*
|
|
7
|
+
* @see Issue #983
|
|
8
|
+
*/
|
|
9
|
+
import type { WorkspaceSchema, FetchSchemaOptions } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Service for fetching complete workspace schema data
|
|
12
|
+
*
|
|
13
|
+
* Note: API key flows through getLazyAttioClient() from environment/context,
|
|
14
|
+
* not through constructor dependency injection.
|
|
15
|
+
*/
|
|
16
|
+
export declare class WorkspaceSchemaService {
|
|
17
|
+
/**
|
|
18
|
+
* Creates a new WorkspaceSchemaService
|
|
19
|
+
*/
|
|
20
|
+
constructor();
|
|
21
|
+
/**
|
|
22
|
+
* Fetches the display title for an object from the Attio API
|
|
23
|
+
*
|
|
24
|
+
* @param objectSlug - Object API slug (e.g., 'companies', 'custom_prospecting_list')
|
|
25
|
+
* @returns The object title from Attio, or null if fetch fails
|
|
26
|
+
* @see Issue #1017
|
|
27
|
+
*/
|
|
28
|
+
private fetchObjectTitle;
|
|
29
|
+
private getOptionFetchDelayMs;
|
|
30
|
+
/**
|
|
31
|
+
* Fetches complete workspace schema for specified objects
|
|
32
|
+
*
|
|
33
|
+
* This method implements graceful degradation:
|
|
34
|
+
* - If an object fails to fetch, it logs the error and continues with other objects
|
|
35
|
+
* - If an attribute's options fail to fetch, it includes the attribute without options
|
|
36
|
+
*
|
|
37
|
+
* @param objectSlugs - Array of object slugs to fetch (e.g., ['companies', 'people'])
|
|
38
|
+
* @param options - Fetching options (max options, include archived)
|
|
39
|
+
* @returns Complete workspace schema
|
|
40
|
+
*/
|
|
41
|
+
fetchSchema(objectSlugs: string[], options: FetchSchemaOptions): Promise<WorkspaceSchema>;
|
|
42
|
+
/**
|
|
43
|
+
* Fetches schema for a single object
|
|
44
|
+
*
|
|
45
|
+
* @param objectSlug - Object slug (e.g., 'companies', 'people', 'deals')
|
|
46
|
+
* @param options - Fetching options
|
|
47
|
+
* @returns Object schema with all attributes and metadata
|
|
48
|
+
*/
|
|
49
|
+
private fetchObjectSchema;
|
|
50
|
+
/**
|
|
51
|
+
* Checks if an attribute type supports options (select, status, multi-select)
|
|
52
|
+
*
|
|
53
|
+
* @param type - Attribute type from Attio API
|
|
54
|
+
* @returns True if attribute supports options
|
|
55
|
+
*/
|
|
56
|
+
private isOptionBasedAttribute;
|
|
57
|
+
/**
|
|
58
|
+
* Checks if an attribute type is a complex type requiring structure documentation
|
|
59
|
+
*
|
|
60
|
+
* @param type - Attribute type from Attio API
|
|
61
|
+
* @returns True if attribute is a complex type
|
|
62
|
+
*/
|
|
63
|
+
private isComplexType;
|
|
64
|
+
/**
|
|
65
|
+
* Gets the structure definition for complex attribute types
|
|
66
|
+
*
|
|
67
|
+
* @param type - Complex attribute type
|
|
68
|
+
* @returns Structure definition with field types
|
|
69
|
+
*/
|
|
70
|
+
private getComplexTypeStructure;
|
|
71
|
+
/**
|
|
72
|
+
* Gets human-readable display name for an object slug
|
|
73
|
+
*
|
|
74
|
+
* Uses the fetched title from Attio API if available, otherwise falls back
|
|
75
|
+
* to hardcoded display names for Phase 1 objects or slug capitalization.
|
|
76
|
+
*
|
|
77
|
+
* @param objectSlug - Object API slug
|
|
78
|
+
* @param fetchedTitle - Title fetched from Attio API (optional)
|
|
79
|
+
* @returns Human-readable display name
|
|
80
|
+
* @see Issue #1017
|
|
81
|
+
*/
|
|
82
|
+
private getDisplayName;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=WorkspaceSchemaService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkspaceSchemaService.d.ts","sourceRoot":"","sources":["../../../src/services/skill-generator/WorkspaceSchemaService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,OAAO,KAAK,EACV,eAAe,EAGf,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAsCpB;;;;;GAKG;AACH,qBAAa,sBAAsB;IACjC;;OAEG;;IAKH;;;;;;OAMG;YACW,gBAAgB;IAgB9B,OAAO,CAAC,qBAAqB;IAa7B;;;;;;;;;;OAUG;IACG,WAAW,CACf,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,eAAe,CAAC;IA4B3B;;;;;;OAMG;YACW,iBAAiB;IA2G/B;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAI9B;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IASrB;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IA0C/B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,cAAc;CAyBvB"}
|