logicstamp-context 0.5.4 → 0.6.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/dist/utils/fsx.js CHANGED
@@ -31,6 +31,12 @@ import { resolve, relative, join, normalize, isAbsolute } from 'node:path';
31
31
  import { debugError } from './debug.js';
32
32
  /**
33
33
  * Find files matching glob patterns
34
+ *
35
+ * Resilient behavior:
36
+ * - Processes all patterns even if some fail
37
+ * - Returns partial results from successful patterns
38
+ * - Only throws if ALL patterns fail
39
+ * - Logs warnings for partial failures (via debugError)
34
40
  */
35
41
  export async function globFiles(searchPath, extensions = '.tsx,.ts') {
36
42
  const extArray = extensions.split(',').map((ext) => ext.trim());
@@ -42,50 +48,64 @@ export async function globFiles(searchPath, extensions = '.tsx,.ts') {
42
48
  return `**/*.${ext}`;
43
49
  });
44
50
  const files = [];
45
- try {
46
- for (const pattern of patterns) {
47
- try {
48
- const matches = await glob(pattern, {
49
- cwd: searchPath,
50
- absolute: false,
51
- ignore: [
52
- '**/node_modules/**',
53
- '**/dist/**',
54
- '**/build/**',
55
- '**/.next/**',
56
- '**/coverage/**',
57
- '**/*.test.ts',
58
- '**/*.test.tsx',
59
- '**/*.spec.ts',
60
- '**/*.spec.tsx',
61
- ],
62
- });
63
- // Convert to relative paths (normalize for consistency)
64
- const relativeMatches = matches.map(match => normalizeEntryId(match));
65
- files.push(...relativeMatches);
66
- }
67
- catch (error) {
68
- const err = error;
69
- debugError('fsx', 'globFiles inner pattern', {
70
- pattern,
71
- searchPath,
72
- message: err.message,
73
- });
74
- throw new Error(`Failed to glob pattern "${pattern}" in "${searchPath}": ${err.message}`);
75
- }
51
+ const errors = [];
52
+ for (const pattern of patterns) {
53
+ try {
54
+ const matches = await glob(pattern, {
55
+ cwd: searchPath,
56
+ absolute: false,
57
+ ignore: [
58
+ '**/node_modules/**',
59
+ '**/dist/**',
60
+ '**/build/**',
61
+ '**/.next/**',
62
+ '**/coverage/**',
63
+ '**/*.test.ts',
64
+ '**/*.test.tsx',
65
+ '**/*.spec.ts',
66
+ '**/*.spec.tsx',
67
+ ],
68
+ });
69
+ // Convert to relative paths (normalize for consistency)
70
+ const relativeMatches = matches.map(match => normalizeEntryId(match));
71
+ files.push(...relativeMatches);
72
+ }
73
+ catch (error) {
74
+ const err = error;
75
+ errors.push({ pattern, message: err.message });
76
+ debugError('fsx', 'globFiles pattern failed', {
77
+ pattern,
78
+ searchPath,
79
+ message: err.message,
80
+ });
81
+ // Continue with remaining patterns instead of throwing immediately
76
82
  }
77
- // Remove duplicates and sort
78
- return [...new Set(files)].sort();
79
83
  }
80
- catch (error) {
81
- const err = error;
82
- debugError('fsx', 'globFiles', {
84
+ // If ALL patterns failed, throw an aggregate error
85
+ if (errors.length === patterns.length) {
86
+ const errorMessages = errors.map(e => `Pattern "${e.pattern}": ${e.message}`);
87
+ const aggregateMessage = `All glob patterns failed in "${searchPath}":\n - ${errorMessages.join('\n - ')}`;
88
+ debugError('fsx', 'globFiles all patterns failed', {
83
89
  searchPath,
84
90
  extensions,
85
- message: err.message,
91
+ patternCount: patterns.length,
92
+ errors,
93
+ });
94
+ throw new Error(aggregateMessage);
95
+ }
96
+ // If some patterns failed but others succeeded, log a warning
97
+ if (errors.length > 0) {
98
+ debugError('fsx', 'globFiles partial failure', {
99
+ searchPath,
100
+ extensions,
101
+ successCount: patterns.length - errors.length,
102
+ failCount: errors.length,
103
+ failedPatterns: errors.map(e => e.pattern),
86
104
  });
87
- throw err;
105
+ // Continue with partial results - this is intentional resilient behavior
88
106
  }
107
+ // Remove duplicates and sort
108
+ return [...new Set(files)].sort();
89
109
  }
90
110
  /**
91
111
  * Read file and return path + content
@@ -1 +1 @@
1
- {"version":3,"file":"fsx.js","sourceRoot":"","sources":["../../src/utils/fsx.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAOxC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,UAAkB,EAClB,aAAqB,UAAU;IAE/B,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAEhE,qBAAqB;IACrB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACpC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,OAAO,GAAG,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,QAAQ,GAAG,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,CAAC;QACL,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACP,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;oBAClC,GAAG,EAAE,UAAU;oBACf,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE;wBACN,oBAAoB;wBACpB,YAAY;wBACZ,aAAa;wBACb,aAAa;wBACb,gBAAgB;wBAChB,cAAc;wBACd,eAAe;wBACf,cAAc;wBACd,eAAe;qBAChB;iBACF,CAAC,CAAC;gBAEH,wDAAwD;gBACxD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtE,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,GAAG,GAAG,KAAc,CAAC;gBAC3B,UAAU,CAAC,KAAK,EAAE,yBAAyB,EAAE;oBAC3C,OAAO;oBACP,UAAU;oBACV,OAAO,EAAE,GAAG,CAAC,OAAO;iBACrB,CAAC,CAAC;gBACH,MAAM,IAAI,KAAK,CACb,2BAA2B,OAAO,SAAS,UAAU,MAAM,GAAG,CAAC,OAAO,EAAE,CACzE,CAAC;YACJ,CAAC;QACL,CAAC;QAED,6BAA6B;QAC7B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAc,CAAC;QAC3B,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE;YAC7B,UAAU;YACV,UAAU;YACV,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC,CAAC;QACH,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IACrD,IAAI,CAAC;QACL,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAA8B,CAAC;QAC3C,UAAU,CAAC,KAAK,EAAE,kBAAkB,EAAE;YACpC,QAAQ;YACR,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC,CAAC;QAEH,sDAAsD;QACtD,IAAI,WAAmB,CAAC;QACxB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,QAAQ;gBACX,WAAW,GAAG,oBAAoB,QAAQ,GAAG,CAAC;gBAC9C,MAAM;YACR,KAAK,QAAQ;gBACX,WAAW,GAAG,uBAAuB,QAAQ,GAAG,CAAC;gBACjD,MAAM;YACR,KAAK,QAAQ;gBACX,WAAW,GAAG,qCAAqC,QAAQ,GAAG,CAAC;gBAC/D,MAAM;YACR,KAAK,QAAQ;gBACX,WAAW,GAAG,sCAAsC,QAAQ,GAAG,CAAC;gBAChE,MAAM;YACR,KAAK,QAAQ;gBACX,WAAW,GAAG,uCAAuC,QAAQ,GAAG,CAAC;gBACjE,MAAM;YACR;gBACE,WAAW,GAAG,wBAAwB,QAAQ,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACtE,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAAkB;IACvD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE;YAC5C,GAAG,EAAE,UAAU;YACf,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,CAAC,oBAAoB,EAAE,YAAY,EAAE,aAAa,CAAC;SAC5D,CAAC,CAAC;QACD,wDAAwD;QACxD,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAc,CAAC;QAC3B,UAAU,CAAC,KAAK,EAAE,kBAAkB,EAAE;YACpC,UAAU;YACV,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC,CAAC;QACH,wCAAwC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAmB;IACrD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,+BAA+B;QAC/B,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,EAAU;IACtD,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAG,KAAe;IAC5C,OAAO,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAc,CAAC;QAC3B,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE;YAC9B,QAAQ;YACR,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,OAAe;IAChE,+DAA+D;IAC/D,8CAA8C;IAC9C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,GAAG,UAAU,WAAW,CAAC;IAClC,CAAC;IACD,gDAAgD;IAChD,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,UAAU,WAAW,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1D,kEAAkE;IAClE,kEAAkE;IAClE,IAAI,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACtF,+BAA+B;IAC/B,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,SAAS,KAAK,CAAC,CAAC;QAAE,OAAO,GAAG,CAAC;IACjC,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAe;IAChD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAChC,CAAC;QAED,SAAS,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"fsx.js","sourceRoot":"","sources":["../../src/utils/fsx.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Schema validation utilities using AJV
3
+ * Validates JSON data against LogicStamp schemas at runtime
4
+ */
5
+ import type { UIFContract } from '../types/UIFContract.js';
6
+ /**
7
+ * Validate data against the UIFContract schema
8
+ * Returns validation result with detailed errors if invalid
9
+ */
10
+ export declare function validateUIFContract(data: unknown): {
11
+ valid: boolean;
12
+ errors: string[];
13
+ data: UIFContract | null;
14
+ };
15
+ /**
16
+ * Type guard that validates and narrows type
17
+ * Use when you just need a boolean check
18
+ */
19
+ export declare function isValidUIFContract(data: unknown): data is UIFContract;
20
+ /**
21
+ * Clear the cached validator (useful for testing)
22
+ */
23
+ export declare function clearValidatorCache(): void;
24
+ //# sourceMappingURL=schemaValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaValidator.d.ts","sourceRoot":"","sources":["../../src/utils/schemaValidator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAwD3D;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG;IAClD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;CAC1B,CA+BA;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,WAAW,CAErE;AAqCD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Schema validation utilities using AJV
3
+ * Validates JSON data against LogicStamp schemas at runtime
4
+ */
5
+ import Ajv from 'ajv';
6
+ import { readFileSync } from 'node:fs';
7
+ import { join, dirname } from 'node:path';
8
+ import { fileURLToPath } from 'node:url';
9
+ import { debugError } from './debug.js';
10
+ // Resolve schema path relative to this module
11
+ const __dirname = dirname(fileURLToPath(import.meta.url));
12
+ const schemaPath = join(__dirname, '../../schema/logicstamp.context.schema.json');
13
+ // Lazy-load schema and validator to avoid startup cost if validation isn't used
14
+ let ajv = null;
15
+ let contractValidator = null;
16
+ let schemaLoadError = null;
17
+ /**
18
+ * Initialize AJV and compile the UIFContract schema
19
+ * Called lazily on first validation attempt
20
+ */
21
+ function initializeValidator() {
22
+ if (contractValidator)
23
+ return contractValidator;
24
+ if (schemaLoadError)
25
+ return null;
26
+ try {
27
+ const schemaContent = readFileSync(schemaPath, 'utf8');
28
+ const schema = JSON.parse(schemaContent);
29
+ // Guard against malformed schema file
30
+ if (!schema?.definitions?.UIFContract) {
31
+ throw new Error('UIFContract definition not found in schema');
32
+ }
33
+ ajv = new Ajv({
34
+ allErrors: true, // Collect all errors, not just the first
35
+ strict: false, // Allow schema features that aren't strictly spec-compliant
36
+ verbose: true, // Ensures `data` field is present in errors for typeof reporting
37
+ });
38
+ // Compile the UIFContract definition specifically
39
+ // The schema file has definitions at the root level
40
+ contractValidator = ajv.compile({
41
+ $ref: '#/definitions/UIFContract',
42
+ definitions: schema.definitions,
43
+ });
44
+ return contractValidator;
45
+ }
46
+ catch (error) {
47
+ // Clean up on failure
48
+ ajv = null;
49
+ contractValidator = null;
50
+ schemaLoadError = error;
51
+ debugError('schemaValidator', 'initializeValidator', {
52
+ error: schemaLoadError.message,
53
+ note: 'Schema validation disabled, contracts will not be validated',
54
+ });
55
+ return null;
56
+ }
57
+ }
58
+ /**
59
+ * Validate data against the UIFContract schema
60
+ * Returns validation result with detailed errors if invalid
61
+ */
62
+ export function validateUIFContract(data) {
63
+ const validator = initializeValidator();
64
+ // If schema failed to load, reject validation
65
+ // This ensures corrupted or invalid contracts are never silently accepted
66
+ if (!validator) {
67
+ return {
68
+ valid: false,
69
+ errors: ['Schema validation unavailable: ' + (schemaLoadError?.message || 'failed to load schema')],
70
+ data: null,
71
+ };
72
+ }
73
+ const valid = validator(data);
74
+ if (valid) {
75
+ return {
76
+ valid: true,
77
+ errors: [],
78
+ data: data,
79
+ };
80
+ }
81
+ // Format errors for readability
82
+ const errors = formatValidationErrors(validator.errors);
83
+ return {
84
+ valid: false,
85
+ errors,
86
+ data: null,
87
+ };
88
+ }
89
+ /**
90
+ * Type guard that validates and narrows type
91
+ * Use when you just need a boolean check
92
+ */
93
+ export function isValidUIFContract(data) {
94
+ return validateUIFContract(data).valid;
95
+ }
96
+ /**
97
+ * Format AJV errors into human-readable strings
98
+ */
99
+ function formatValidationErrors(errors) {
100
+ if (!errors || errors.length === 0)
101
+ return [];
102
+ return errors.map((err) => {
103
+ const path = err.instancePath || '(root)';
104
+ const message = err.message || 'unknown error';
105
+ // Add context for common error types
106
+ switch (err.keyword) {
107
+ case 'required':
108
+ return `${path}: missing required property '${err.params.missingProperty}'`;
109
+ case 'type': {
110
+ // typeof null === 'object' and typeof [] === 'object', so handle explicitly
111
+ const got = err.data === null ? 'null' : Array.isArray(err.data) ? 'array' : typeof err.data;
112
+ return `${path}: ${message} (got ${got})`;
113
+ }
114
+ case 'enum':
115
+ return `${path}: ${message}. Allowed: ${err.params.allowedValues?.join(', ')}`;
116
+ case 'const':
117
+ return `${path}: ${message}. Expected: ${err.params.allowedValue}`;
118
+ case 'additionalProperties':
119
+ return `${path}: unexpected property '${err.params.additionalProperty}'`;
120
+ case 'anyOf':
121
+ case 'oneOf':
122
+ // These are notoriously noisy - simplify the message
123
+ return `${path}: ${message} (schema union mismatch)`;
124
+ default:
125
+ return `${path}: ${message}`;
126
+ }
127
+ });
128
+ }
129
+ /**
130
+ * Clear the cached validator (useful for testing)
131
+ */
132
+ export function clearValidatorCache() {
133
+ ajv = null;
134
+ contractValidator = null;
135
+ schemaLoadError = null;
136
+ }
137
+ //# sourceMappingURL=schemaValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaValidator.js","sourceRoot":"","sources":["../../src/utils/schemaValidator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "logicstamp-context",
3
- "version": "0.5.4",
4
- "description": "Deterministic architectural context for TypeScript codebases. Generates explicit component contracts and dependency graphs for AI workflows.",
3
+ "version": "0.6.0",
4
+ "description": "Deterministic architectural context for TypeScript. Extract explicit contracts and dependency graphs to prevent AI-driven architectural drift.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "exports": {
@@ -60,10 +60,11 @@
60
60
  },
61
61
  "dependencies": {
62
62
  "@toon-format/toon": "^1.0.0",
63
+ "ajv": "^8.18.0",
63
64
  "chokidar": "^4.0.3",
64
65
  "css-tree": "^3.1.0",
65
- "glob": "^10.5.0",
66
- "ts-morph": "^21.0.1"
66
+ "glob": "^13.0.6",
67
+ "ts-morph": "^27.0.2"
67
68
  },
68
69
  "optionalDependencies": {
69
70
  "@anthropic-ai/tokenizer": "^0.0.4",
@@ -77,6 +78,6 @@
77
78
  "vitest": "^4.0.16"
78
79
  },
79
80
  "engines": {
80
- "node": ">=18.18.0"
81
+ "node": ">=20"
81
82
  }
82
83
  }