logicstamp-context 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/LICENSE +21 -0
  2. package/LLM_CONTEXT.md +260 -0
  3. package/README.md +949 -0
  4. package/dist/cli/commands/clean.d.ts +15 -0
  5. package/dist/cli/commands/clean.d.ts.map +1 -0
  6. package/dist/cli/commands/clean.js +142 -0
  7. package/dist/cli/commands/clean.js.map +1 -0
  8. package/dist/cli/commands/compare.d.ts +88 -0
  9. package/dist/cli/commands/compare.d.ts.map +1 -0
  10. package/dist/cli/commands/compare.js +519 -0
  11. package/dist/cli/commands/compare.js.map +1 -0
  12. package/dist/cli/commands/context.d.ts +24 -0
  13. package/dist/cli/commands/context.d.ts.map +1 -0
  14. package/dist/cli/commands/context.js +576 -0
  15. package/dist/cli/commands/context.js.map +1 -0
  16. package/dist/cli/commands/init.d.ts +14 -0
  17. package/dist/cli/commands/init.d.ts.map +1 -0
  18. package/dist/cli/commands/init.js +71 -0
  19. package/dist/cli/commands/init.js.map +1 -0
  20. package/dist/cli/commands/validate.d.ts +52 -0
  21. package/dist/cli/commands/validate.d.ts.map +1 -0
  22. package/dist/cli/commands/validate.js +368 -0
  23. package/dist/cli/commands/validate.js.map +1 -0
  24. package/dist/cli/index.d.ts +7 -0
  25. package/dist/cli/index.d.ts.map +1 -0
  26. package/dist/cli/index.js +223 -0
  27. package/dist/cli/index.js.map +1 -0
  28. package/dist/cli/stamp.d.ts +7 -0
  29. package/dist/cli/stamp.d.ts.map +1 -0
  30. package/dist/cli/stamp.js +961 -0
  31. package/dist/cli/stamp.js.map +1 -0
  32. package/dist/cli/validate-index.d.ts +7 -0
  33. package/dist/cli/validate-index.d.ts.map +1 -0
  34. package/dist/cli/validate-index.js +55 -0
  35. package/dist/cli/validate-index.js.map +1 -0
  36. package/dist/core/astParser.d.ts +47 -0
  37. package/dist/core/astParser.d.ts.map +1 -0
  38. package/dist/core/astParser.js +417 -0
  39. package/dist/core/astParser.js.map +1 -0
  40. package/dist/core/contractBuilder.d.ts +48 -0
  41. package/dist/core/contractBuilder.d.ts.map +1 -0
  42. package/dist/core/contractBuilder.js +120 -0
  43. package/dist/core/contractBuilder.js.map +1 -0
  44. package/dist/core/manifest.d.ts +75 -0
  45. package/dist/core/manifest.d.ts.map +1 -0
  46. package/dist/core/manifest.js +173 -0
  47. package/dist/core/manifest.js.map +1 -0
  48. package/dist/core/pack.d.ts +190 -0
  49. package/dist/core/pack.d.ts.map +1 -0
  50. package/dist/core/pack.js +438 -0
  51. package/dist/core/pack.js.map +1 -0
  52. package/dist/core/signature.d.ts +47 -0
  53. package/dist/core/signature.d.ts.map +1 -0
  54. package/dist/core/signature.js +208 -0
  55. package/dist/core/signature.js.map +1 -0
  56. package/dist/index.d.ts +27 -0
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +23 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/types/UIFContract.d.ts +112 -0
  61. package/dist/types/UIFContract.d.ts.map +1 -0
  62. package/dist/types/UIFContract.js +36 -0
  63. package/dist/types/UIFContract.js.map +1 -0
  64. package/dist/utils/config.d.ts +34 -0
  65. package/dist/utils/config.d.ts.map +1 -0
  66. package/dist/utils/config.js +62 -0
  67. package/dist/utils/config.js.map +1 -0
  68. package/dist/utils/fsx.d.ts +85 -0
  69. package/dist/utils/fsx.d.ts.map +1 -0
  70. package/dist/utils/fsx.js +181 -0
  71. package/dist/utils/fsx.js.map +1 -0
  72. package/dist/utils/gitignore.d.ts +62 -0
  73. package/dist/utils/gitignore.d.ts.map +1 -0
  74. package/dist/utils/gitignore.js +183 -0
  75. package/dist/utils/gitignore.js.map +1 -0
  76. package/dist/utils/hash.d.ts +73 -0
  77. package/dist/utils/hash.d.ts.map +1 -0
  78. package/dist/utils/hash.js +159 -0
  79. package/dist/utils/hash.js.map +1 -0
  80. package/dist/utils/llmContext.d.ts +34 -0
  81. package/dist/utils/llmContext.d.ts.map +1 -0
  82. package/dist/utils/llmContext.js +136 -0
  83. package/dist/utils/llmContext.js.map +1 -0
  84. package/dist/utils/tokens.d.ts +23 -0
  85. package/dist/utils/tokens.d.ts.map +1 -0
  86. package/dist/utils/tokens.js +29 -0
  87. package/dist/utils/tokens.js.map +1 -0
  88. package/package.json +69 -0
  89. package/schema/logicstamp.context.schema.json +430 -0
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Init command - Sets up LogicStamp in a project
3
+ */
4
+ import { resolve } from 'node:path';
5
+ import { ensureGitignorePatterns } from '../../utils/gitignore.js';
6
+ import { updateConfig } from '../../utils/config.js';
7
+ import { readPackageLLMContext, writeLLMContext, llmContextExists } from '../../utils/llmContext.js';
8
+ /**
9
+ * Initialize LogicStamp in a project directory
10
+ */
11
+ export async function init(options = {}) {
12
+ const targetDir = resolve(options.targetDir || process.cwd());
13
+ console.log('šŸš€ Initializing LogicStamp...\n');
14
+ // Setup .gitignore
15
+ if (!options.skipGitignore) {
16
+ try {
17
+ const { added, created } = await ensureGitignorePatterns(targetDir);
18
+ if (created) {
19
+ console.log('āœ… Created .gitignore with LogicStamp patterns');
20
+ // Save preference so stamp context won't prompt
21
+ await updateConfig(targetDir, { gitignorePreference: 'added' });
22
+ }
23
+ else if (added) {
24
+ console.log('āœ… Added LogicStamp patterns to existing .gitignore');
25
+ // Save preference so stamp context won't prompt
26
+ await updateConfig(targetDir, { gitignorePreference: 'added' });
27
+ }
28
+ else {
29
+ console.log('ā„¹ļø .gitignore already contains LogicStamp patterns');
30
+ // Still save preference in case config doesn't exist
31
+ await updateConfig(targetDir, { gitignorePreference: 'added' });
32
+ }
33
+ console.log('\n The following patterns were added/verified:');
34
+ console.log(' - context.json');
35
+ console.log(' - context_*.json');
36
+ console.log(' - *.uif.json');
37
+ console.log(' - logicstamp.manifest.json');
38
+ console.log(' - .logicstamp/');
39
+ }
40
+ catch (error) {
41
+ console.error('āš ļø Failed to update .gitignore:', error instanceof Error ? error.message : String(error));
42
+ console.log(' You can manually add the patterns to your .gitignore');
43
+ }
44
+ }
45
+ // Setup LLM_CONTEXT.md
46
+ try {
47
+ if (await llmContextExists(targetDir)) {
48
+ console.log('\nā„¹ļø LLM_CONTEXT.md already exists');
49
+ }
50
+ else {
51
+ const content = await readPackageLLMContext();
52
+ if (content) {
53
+ await writeLLMContext(targetDir, content);
54
+ console.log('\nāœ… Created LLM_CONTEXT.md');
55
+ // Save preference so stamp context won't prompt
56
+ await updateConfig(targetDir, { llmContextPreference: 'added' });
57
+ }
58
+ else {
59
+ console.log('\nāš ļø Could not find LLM_CONTEXT.md template in package');
60
+ }
61
+ }
62
+ }
63
+ catch (error) {
64
+ console.error('\nāš ļø Failed to create LLM_CONTEXT.md:', error instanceof Error ? error.message : String(error));
65
+ }
66
+ console.log('\n✨ LogicStamp initialization complete!');
67
+ console.log('\nNext steps:');
68
+ console.log(' • Run `stamp context` to generate context files');
69
+ console.log(' • Run `stamp context --help` for more options');
70
+ }
71
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AASrG;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,UAAuB,EAAE;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAE9D,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAE/C,mBAAmB;IACnB,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC;YAEpE,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;gBAC7D,gDAAgD;gBAChD,MAAM,YAAY,CAAC,SAAS,EAAE,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,CAAC;YAClE,CAAC;iBAAM,IAAI,KAAK,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;gBAClE,gDAAgD;gBAChD,MAAM,YAAY,CAAC,SAAS,EAAE,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,CAAC;YAClE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;gBACnE,qDAAqD;gBACrD,MAAM,YAAY,CAAC,SAAS,EAAE,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,CAAC;YAClE,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1G,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC;QACH,IAAI,MAAM,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,MAAM,qBAAqB,EAAE,CAAC;YAC9C,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;gBAC1C,gDAAgD;gBAChD,MAAM,YAAY,CAAC,SAAS,EAAE,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAC,CAAC;YACnE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAClH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Validate command - Validates context.json files (single or multi-file mode)
3
+ */
4
+ import type { LogicStampBundle } from '../../core/pack.js';
5
+ export interface ValidationResult {
6
+ valid: boolean;
7
+ errors: number;
8
+ warnings: number;
9
+ bundles: number;
10
+ nodes: number;
11
+ edges: number;
12
+ messages: string[];
13
+ }
14
+ /**
15
+ * Validate bundles in memory (for auto-validation during generation)
16
+ */
17
+ export declare function validateBundles(bundles: LogicStampBundle[]): ValidationResult;
18
+ /**
19
+ * Multi-file validation result for a single folder's context file
20
+ */
21
+ export interface FolderValidationResult {
22
+ folderPath: string;
23
+ contextFile: string;
24
+ valid: boolean;
25
+ result: ValidationResult;
26
+ }
27
+ /**
28
+ * Multi-file validation result (validates all context files)
29
+ */
30
+ export interface MultiFileValidationResult {
31
+ valid: boolean;
32
+ totalFolders: number;
33
+ validFolders: number;
34
+ invalidFolders: number;
35
+ folders: FolderValidationResult[];
36
+ totalErrors: number;
37
+ totalWarnings: number;
38
+ totalNodes: number;
39
+ totalEdges: number;
40
+ }
41
+ /**
42
+ * Multi-file validation - validates all context files using context_main.json index
43
+ */
44
+ export declare function multiFileValidate(indexPath: string): Promise<MultiFileValidationResult>;
45
+ /**
46
+ * Validate a context.json file for basic structural validity
47
+ *
48
+ * With no arguments: Validates all context files using context_main.json (multi-file mode)
49
+ * With a file argument: Validates that specific file (single-file mode)
50
+ */
51
+ export declare function validateCommand(filePath?: string, quiet?: boolean): Promise<void>;
52
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAmB,MAAM,oBAAoB,CAAC;AAS5E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,CAiF7E;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AA6BD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAiE7F;AAuDD;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAoJvF"}
@@ -0,0 +1,368 @@
1
+ /**
2
+ * Validate command - Validates context.json files (single or multi-file mode)
3
+ */
4
+ import { readFile } from 'node:fs/promises';
5
+ import { resolve, join, dirname } from 'node:path';
6
+ /**
7
+ * Normalize path for display (convert backslashes to forward slashes)
8
+ */
9
+ function displayPath(path) {
10
+ return path.replace(/\\/g, '/');
11
+ }
12
+ /**
13
+ * Validate bundles in memory (for auto-validation during generation)
14
+ */
15
+ export function validateBundles(bundles) {
16
+ const result = {
17
+ valid: true,
18
+ errors: 0,
19
+ warnings: 0,
20
+ bundles: bundles.length,
21
+ nodes: 0,
22
+ edges: 0,
23
+ messages: [],
24
+ };
25
+ if (!Array.isArray(bundles)) {
26
+ result.valid = false;
27
+ result.errors++;
28
+ result.messages.push('Invalid format: expected array of bundles');
29
+ return result;
30
+ }
31
+ for (let i = 0; i < bundles.length; i++) {
32
+ const bundle = bundles[i];
33
+ const bundleLabel = `Bundle ${i + 1}`;
34
+ // Count nodes and edges
35
+ result.nodes += bundle.graph?.nodes?.length || 0;
36
+ result.edges += bundle.graph?.edges?.length || 0;
37
+ // Check required fields
38
+ if (bundle.type !== 'LogicStampBundle') {
39
+ result.valid = false;
40
+ result.errors++;
41
+ result.messages.push(`${bundleLabel}: Invalid type (expected 'LogicStampBundle', got '${bundle.type}')`);
42
+ }
43
+ if (bundle.schemaVersion !== '0.1') {
44
+ result.valid = false;
45
+ result.errors++;
46
+ result.messages.push(`${bundleLabel}: Invalid schemaVersion (expected '0.1', got '${bundle.schemaVersion}')`);
47
+ }
48
+ if (!bundle.entryId) {
49
+ result.valid = false;
50
+ result.errors++;
51
+ result.messages.push(`${bundleLabel}: Missing entryId`);
52
+ }
53
+ if (!bundle.graph || !Array.isArray(bundle.graph.nodes) || !Array.isArray(bundle.graph.edges)) {
54
+ result.valid = false;
55
+ result.errors++;
56
+ result.messages.push(`${bundleLabel}: Invalid graph structure`);
57
+ }
58
+ if (!bundle.meta || !Array.isArray(bundle.meta.missing)) {
59
+ result.valid = false;
60
+ result.errors++;
61
+ result.messages.push(`${bundleLabel}: Invalid meta structure`);
62
+ }
63
+ // Validate contracts
64
+ if (bundle.graph && bundle.graph.nodes) {
65
+ for (const node of bundle.graph.nodes) {
66
+ const contract = node.contract;
67
+ if (contract?.type !== 'UIFContract') {
68
+ result.valid = false;
69
+ result.errors++;
70
+ result.messages.push(`${bundleLabel}: Node ${node.entryId} has invalid contract type`);
71
+ }
72
+ if (contract?.schemaVersion !== '0.3') {
73
+ result.warnings++;
74
+ result.messages.push(`${bundleLabel}: Node ${node.entryId} has unexpected contract version ${contract?.schemaVersion}`);
75
+ }
76
+ }
77
+ }
78
+ // Check hash format (bundle hashes use uifb: prefix)
79
+ if (bundle.bundleHash && !bundle.bundleHash.match(/^uifb:[a-f0-9]{24}$/)) {
80
+ result.warnings++;
81
+ result.messages.push(`${bundleLabel}: bundleHash has unexpected format`);
82
+ }
83
+ }
84
+ return result;
85
+ }
86
+ /**
87
+ * Load LogicStampIndex from file
88
+ */
89
+ async function loadIndex(indexPath) {
90
+ try {
91
+ const content = await readFile(indexPath, 'utf8');
92
+ const index = JSON.parse(content);
93
+ if (index.type !== 'LogicStampIndex') {
94
+ throw new Error(`Invalid index file: expected type 'LogicStampIndex', got '${index.type}'`);
95
+ }
96
+ return index;
97
+ }
98
+ catch (error) {
99
+ throw new Error(`Failed to load index from ${indexPath}: ${error.message}`);
100
+ }
101
+ }
102
+ /**
103
+ * Validate a single context file and return results
104
+ */
105
+ async function validateContextFile(contextPath) {
106
+ const content = await readFile(contextPath, 'utf8');
107
+ const bundles = JSON.parse(content);
108
+ return validateBundles(bundles);
109
+ }
110
+ /**
111
+ * Multi-file validation - validates all context files using context_main.json index
112
+ */
113
+ export async function multiFileValidate(indexPath) {
114
+ const baseDir = dirname(indexPath);
115
+ // Load index file
116
+ const index = await loadIndex(indexPath);
117
+ const folderResults = [];
118
+ let totalErrors = 0;
119
+ let totalWarnings = 0;
120
+ let totalNodes = 0;
121
+ let totalEdges = 0;
122
+ // Validate each folder's context file
123
+ for (const folder of index.folders) {
124
+ const contextPath = join(baseDir, folder.contextFile);
125
+ try {
126
+ const result = await validateContextFile(contextPath);
127
+ folderResults.push({
128
+ folderPath: folder.path,
129
+ contextFile: folder.contextFile,
130
+ valid: result.valid,
131
+ result,
132
+ });
133
+ totalErrors += result.errors;
134
+ totalWarnings += result.warnings;
135
+ totalNodes += result.nodes;
136
+ totalEdges += result.edges;
137
+ }
138
+ catch (error) {
139
+ // If validation fails, mark as invalid
140
+ folderResults.push({
141
+ folderPath: folder.path,
142
+ contextFile: folder.contextFile,
143
+ valid: false,
144
+ result: {
145
+ valid: false,
146
+ errors: 1,
147
+ warnings: 0,
148
+ bundles: 0,
149
+ nodes: 0,
150
+ edges: 0,
151
+ messages: [`Failed to validate: ${error.message}`],
152
+ },
153
+ });
154
+ totalErrors++;
155
+ }
156
+ }
157
+ const validFolders = folderResults.filter(f => f.valid).length;
158
+ const invalidFolders = folderResults.filter(f => !f.valid).length;
159
+ const valid = invalidFolders === 0 && totalErrors === 0;
160
+ return {
161
+ valid,
162
+ totalFolders: folderResults.length,
163
+ validFolders,
164
+ invalidFolders,
165
+ folders: folderResults,
166
+ totalErrors,
167
+ totalWarnings,
168
+ totalNodes,
169
+ totalEdges,
170
+ };
171
+ }
172
+ /**
173
+ * Display multi-file validation results
174
+ */
175
+ function displayMultiFileValidationResult(result, quiet) {
176
+ // In quiet mode, only show status if invalid
177
+ if (quiet && result.valid) {
178
+ return;
179
+ }
180
+ if (!quiet) {
181
+ console.log(`\n${result.valid ? 'āœ…' : 'āŒ'} ${result.valid ? 'All context files are valid' : 'Validation failed'}\n`);
182
+ // Display summary
183
+ console.log('šŸ“ Validation Summary:');
184
+ console.log(` Total folders: ${result.totalFolders}`);
185
+ console.log(` āœ… Valid: ${result.validFolders}`);
186
+ if (result.invalidFolders > 0) {
187
+ console.log(` āŒ Invalid: ${result.invalidFolders}`);
188
+ }
189
+ console.log(` Total errors: ${result.totalErrors}`);
190
+ console.log(` Total warnings: ${result.totalWarnings}`);
191
+ console.log(` Total nodes: ${result.totalNodes}`);
192
+ console.log(` Total edges: ${result.totalEdges}`);
193
+ console.log();
194
+ // Display detailed results for each folder
195
+ console.log('šŸ“‚ Folder Details:\n');
196
+ }
197
+ for (const folder of result.folders) {
198
+ if (folder.valid) {
199
+ // In quiet mode, skip valid folders
200
+ if (!quiet) {
201
+ console.log(` āœ… VALID: ${folder.contextFile}`);
202
+ console.log(` Path: ${folder.folderPath}`);
203
+ console.log(` Bundles: ${folder.result.bundles}, Nodes: ${folder.result.nodes}, Edges: ${folder.result.edges}`);
204
+ if (folder.result.warnings > 0) {
205
+ console.log(` Warnings: ${folder.result.warnings}`);
206
+ folder.result.messages.forEach(msg => console.log(` āš ļø ${msg}`));
207
+ }
208
+ console.log();
209
+ }
210
+ }
211
+ else {
212
+ // Always show invalid folders (errors)
213
+ console.log(` āŒ INVALID: ${folder.contextFile}`);
214
+ console.log(` Path: ${folder.folderPath}`);
215
+ console.log(` Errors: ${folder.result.errors}`);
216
+ folder.result.messages.forEach(msg => console.log(` āŒ ${msg}`));
217
+ console.log();
218
+ }
219
+ }
220
+ }
221
+ /**
222
+ * Validate a context.json file for basic structural validity
223
+ *
224
+ * With no arguments: Validates all context files using context_main.json (multi-file mode)
225
+ * With a file argument: Validates that specific file (single-file mode)
226
+ */
227
+ export async function validateCommand(filePath, quiet) {
228
+ // If no file specified, check for multi-file mode (context_main.json)
229
+ if (!filePath) {
230
+ const mainIndexPath = resolve('context_main.json');
231
+ try {
232
+ // Try to read context_main.json
233
+ await readFile(mainIndexPath, 'utf8');
234
+ // Multi-file mode - validate all context files
235
+ if (!quiet) {
236
+ console.log(`šŸ” Validating all context files using "${displayPath(mainIndexPath)}"...\n`);
237
+ }
238
+ try {
239
+ const result = await multiFileValidate(mainIndexPath);
240
+ displayMultiFileValidationResult(result, quiet);
241
+ if (result.valid) {
242
+ if (quiet) {
243
+ // Minimal output in quiet mode
244
+ process.stdout.write('āœ“\n');
245
+ }
246
+ process.exit(0);
247
+ }
248
+ else {
249
+ process.exit(1);
250
+ }
251
+ }
252
+ catch (error) {
253
+ console.error(`āŒ Multi-file validation failed: ${error.message}`);
254
+ process.exit(1);
255
+ }
256
+ }
257
+ catch {
258
+ // context_main.json doesn't exist, fall back to single-file mode with context.json
259
+ if (!quiet) {
260
+ console.log('ā„¹ļø context_main.json not found, falling back to single-file mode\n');
261
+ }
262
+ }
263
+ }
264
+ // Single-file mode
265
+ const targetFile = filePath || 'context.json';
266
+ try {
267
+ const path = resolve(targetFile);
268
+ if (!quiet) {
269
+ console.log(`šŸ” Validating "${displayPath(path)}"...`);
270
+ }
271
+ const content = await readFile(path, 'utf8');
272
+ const bundles = JSON.parse(content);
273
+ // Basic validation
274
+ if (!Array.isArray(bundles)) {
275
+ console.error('āŒ Invalid format: expected array of bundles');
276
+ process.exit(1);
277
+ }
278
+ let errors = 0;
279
+ let warnings = 0;
280
+ for (let i = 0; i < bundles.length; i++) {
281
+ const bundle = bundles[i];
282
+ const bundleLabel = `Bundle ${i + 1}`;
283
+ // Check required fields
284
+ if (bundle.type !== 'LogicStampBundle') {
285
+ console.error(`āŒ ${bundleLabel}: Invalid type (expected 'LogicStampBundle', got '${bundle.type}')`);
286
+ errors++;
287
+ }
288
+ if (bundle.schemaVersion !== '0.1') {
289
+ console.error(`āŒ ${bundleLabel}: Invalid schemaVersion (expected '0.1', got '${bundle.schemaVersion}')`);
290
+ errors++;
291
+ }
292
+ if (!bundle.entryId) {
293
+ console.error(`āŒ ${bundleLabel}: Missing entryId`);
294
+ errors++;
295
+ }
296
+ if (!bundle.graph || !Array.isArray(bundle.graph.nodes) || !Array.isArray(bundle.graph.edges)) {
297
+ console.error(`āŒ ${bundleLabel}: Invalid graph structure`);
298
+ errors++;
299
+ }
300
+ if (!bundle.meta || !Array.isArray(bundle.meta.missing)) {
301
+ console.error(`āŒ ${bundleLabel}: Invalid meta structure`);
302
+ errors++;
303
+ }
304
+ // Validate contracts
305
+ if (bundle.graph && bundle.graph.nodes) {
306
+ for (const node of bundle.graph.nodes) {
307
+ const contract = node.contract;
308
+ if (contract?.type !== 'UIFContract') {
309
+ console.error(`āŒ ${bundleLabel}: Node ${node.entryId} has invalid contract type`);
310
+ errors++;
311
+ }
312
+ if (contract?.schemaVersion !== '0.3') {
313
+ console.warn(`āš ļø ${bundleLabel}: Node ${node.entryId} has unexpected contract version ${contract?.schemaVersion}`);
314
+ warnings++;
315
+ }
316
+ }
317
+ }
318
+ // Check hash format (bundle hashes use uifb: prefix)
319
+ if (bundle.bundleHash && !bundle.bundleHash.match(/^uifb:[a-f0-9]{24}$/)) {
320
+ console.warn(`āš ļø ${bundleLabel}: bundleHash has unexpected format`);
321
+ warnings++;
322
+ }
323
+ }
324
+ if (errors === 0 && warnings === 0) {
325
+ if (quiet) {
326
+ // Minimal output in quiet mode
327
+ process.stdout.write('āœ“\n');
328
+ }
329
+ else {
330
+ console.log(`āœ… Valid context file with ${bundles.length} bundle(s)`);
331
+ console.log(` Total nodes: ${bundles.reduce((sum, b) => sum + (b.graph?.nodes?.length || 0), 0)}`);
332
+ console.log(` Total edges: ${bundles.reduce((sum, b) => sum + (b.graph?.edges?.length || 0), 0)}`);
333
+ }
334
+ process.exit(0);
335
+ }
336
+ else if (errors === 0) {
337
+ if (quiet) {
338
+ // Minimal output in quiet mode
339
+ process.stdout.write('āœ“\n');
340
+ }
341
+ else {
342
+ console.log(`āœ… Valid with ${warnings} warning(s)`);
343
+ }
344
+ process.exit(0);
345
+ }
346
+ else {
347
+ // Always show errors, even in quiet mode
348
+ console.error(`\nāŒ Validation failed: ${errors} error(s), ${warnings} warning(s)`);
349
+ process.exit(1);
350
+ }
351
+ }
352
+ catch (error) {
353
+ if (error.code === 'ENOENT') {
354
+ console.error(`āŒ File not found: ${targetFile}`);
355
+ if (!filePath) {
356
+ console.error(' Tip: Specify a file path or ensure context.json exists in the current directory');
357
+ }
358
+ }
359
+ else if (error instanceof SyntaxError) {
360
+ console.error(`āŒ Invalid JSON: ${error.message}`);
361
+ }
362
+ else {
363
+ console.error(`āŒ Validation failed: ${error.message}`);
364
+ }
365
+ process.exit(1);
366
+ }
367
+ }
368
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGnD;;GAEG;AACH,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC;AAYD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAA2B;IACzD,MAAM,MAAM,GAAqB;QAC/B,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,CAAC;QACT,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,OAAO,CAAC,MAAM;QACvB,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,MAAM,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAEtC,wBAAwB;QACxB,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC;QAEjD,wBAAwB;QACxB,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACvC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,qDAAqD,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;QAC3G,CAAC;QAED,IAAI,MAAM,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YACnC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,iDAAiD,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;QAChH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,mBAAmB,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9F,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,2BAA2B,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,0BAA0B,CAAC,CAAC;QACjE,CAAC;QAED,qBAAqB;QACrB,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC/B,IAAI,QAAQ,EAAE,IAAI,KAAK,aAAa,EAAE,CAAC;oBACrC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;oBACrB,MAAM,CAAC,MAAM,EAAE,CAAC;oBAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,UAAU,IAAI,CAAC,OAAO,4BAA4B,CAAC,CAAC;gBACzF,CAAC;gBACD,IAAI,QAAQ,EAAE,aAAa,KAAK,KAAK,EAAE,CAAC;oBACtC,MAAM,CAAC,QAAQ,EAAE,CAAC;oBAClB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,UAAU,IAAI,CAAC,OAAO,oCAAoC,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;gBAC1H,CAAC;YACH,CAAC;QACH,CAAC;QAED,qDAAqD;QACrD,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACzE,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,oCAAoC,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AA2BD;;GAEG;AACH,KAAK,UAAU,SAAS,CAAC,SAAiB;IACxC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAoB,CAAC;QAErD,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,6DAA6D,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QAC9F,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,SAAS,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAAC,WAAmB;IACpD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAuB,CAAC;IAC1D,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAiB;IACvD,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnC,kBAAkB;IAClB,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;IAEzC,MAAM,aAAa,GAA6B,EAAE,CAAC;IACnD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,sCAAsC;IACtC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAEtD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;YAEtD,aAAa,CAAC,IAAI,CAAC;gBACjB,UAAU,EAAE,MAAM,CAAC,IAAI;gBACvB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM;aACP,CAAC,CAAC;YAEH,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC;YAC7B,aAAa,IAAI,MAAM,CAAC,QAAQ,CAAC;YACjC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC;YAC3B,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,uCAAuC;YACvC,aAAa,CAAC,IAAI,CAAC;gBACjB,UAAU,EAAE,MAAM,CAAC,IAAI;gBACvB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE;oBACN,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,CAAC;oBACT,QAAQ,EAAE,CAAC;oBACX,OAAO,EAAE,CAAC;oBACV,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,QAAQ,EAAE,CAAC,uBAAwB,KAAe,CAAC,OAAO,EAAE,CAAC;iBAC9D;aACF,CAAC,CAAC;YACH,WAAW,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAC/D,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAClE,MAAM,KAAK,GAAG,cAAc,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,CAAC;IAExD,OAAO;QACL,KAAK;QACL,YAAY,EAAE,aAAa,CAAC,MAAM;QAClC,YAAY;QACZ,cAAc;QACd,OAAO,EAAE,aAAa;QACtB,WAAW;QACX,aAAa;QACb,UAAU;QACV,UAAU;KACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,gCAAgC,CAAC,MAAiC,EAAE,KAAe;IAC1F,6CAA6C;IAC7C,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,mBAAmB,IAAI,CAAC,CAAC;QAErH,kBAAkB;QAClB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAClD,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,2CAA2C;QAC3C,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,oCAAoC;YACpC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,MAAM,CAAC,OAAO,YAAY,MAAM,CAAC,MAAM,CAAC,KAAK,YAAY,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBACrH,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;oBAC/B,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACzD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC3E,CAAC;gBACD,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,uCAAuC;YACvC,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAiB,EAAE,KAAe;IACtE,sEAAsE;IACtE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAEnD,IAAI,CAAC;YACH,gCAAgC;YAChC,MAAM,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAEtC,+CAA+C;YAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,0CAA0C,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC5F,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,CAAC;gBACtD,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAEhD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjB,IAAI,KAAK,EAAE,CAAC;wBACV,+BAA+B;wBAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC9B,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,mCAAoC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,mFAAmF;YACnF,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,UAAU,GAAG,QAAQ,IAAI,cAAc,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,kBAAkB,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAuB,CAAC;QAE1D,mBAAmB;QACnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAEtC,wBAAwB;YACxB,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACvC,OAAO,CAAC,KAAK,CAAC,KAAK,WAAW,qDAAqD,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;gBACpG,MAAM,EAAE,CAAC;YACX,CAAC;YAED,IAAI,MAAM,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,CAAC,KAAK,WAAW,iDAAiD,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;gBACzG,MAAM,EAAE,CAAC;YACX,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,KAAK,WAAW,mBAAmB,CAAC,CAAC;gBACnD,MAAM,EAAE,CAAC;YACX,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9F,OAAO,CAAC,KAAK,CAAC,KAAK,WAAW,2BAA2B,CAAC,CAAC;gBAC3D,MAAM,EAAE,CAAC;YACX,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxD,OAAO,CAAC,KAAK,CAAC,KAAK,WAAW,0BAA0B,CAAC,CAAC;gBAC1D,MAAM,EAAE,CAAC;YACX,CAAC;YAED,qBAAqB;YACrB,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACvC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC/B,IAAI,QAAQ,EAAE,IAAI,KAAK,aAAa,EAAE,CAAC;wBACrC,OAAO,CAAC,KAAK,CAAC,KAAK,WAAW,UAAU,IAAI,CAAC,OAAO,4BAA4B,CAAC,CAAC;wBAClF,MAAM,EAAE,CAAC;oBACX,CAAC;oBACD,IAAI,QAAQ,EAAE,aAAa,KAAK,KAAK,EAAE,CAAC;wBACtC,OAAO,CAAC,IAAI,CAAC,OAAO,WAAW,UAAU,IAAI,CAAC,OAAO,oCAAoC,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;wBACpH,QAAQ,EAAE,CAAC;oBACb,CAAC;gBACH,CAAC;YACH,CAAC;YAED,qDAAqD;YACrD,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC;gBACzE,OAAO,CAAC,IAAI,CAAC,OAAO,WAAW,oCAAoC,CAAC,CAAC;gBACrE,QAAQ,EAAE,CAAC;YACb,CAAC;QACH,CAAC;QAED,IAAI,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnC,IAAI,KAAK,EAAE,CAAC;gBACV,+BAA+B;gBAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,6BAA6B,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC;gBACrE,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBACrG,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACvG,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,KAAK,EAAE,CAAC;gBACV,+BAA+B;gBAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,aAAa,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,yCAAyC;YACzC,OAAO,CAAC,KAAK,CAAC,0BAA0B,MAAM,cAAc,QAAQ,aAAa,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,oFAAoF,CAAC,CAAC;YACtG,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,wBAAyB,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * LogicStamp Context CLI - Standalone context generator
4
+ * Scans React/TypeScript files and generates AI-friendly context bundles
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;GAGG"}