logicstamp-context 0.1.0 → 0.2.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 (176) hide show
  1. package/LICENSE +21 -21
  2. package/LLM_CONTEXT.md +4 -3
  3. package/README.md +140 -21
  4. package/dist/cli/commands/compare.d.ts.map +1 -1
  5. package/dist/cli/commands/compare.js +17 -8
  6. package/dist/cli/commands/compare.js.map +1 -1
  7. package/dist/cli/commands/context/bundleFormatter.d.ts +20 -0
  8. package/dist/cli/commands/context/bundleFormatter.d.ts.map +1 -0
  9. package/dist/cli/commands/context/bundleFormatter.js +55 -0
  10. package/dist/cli/commands/context/bundleFormatter.js.map +1 -0
  11. package/dist/cli/commands/context/configManager.d.ts +23 -0
  12. package/dist/cli/commands/context/configManager.d.ts.map +1 -0
  13. package/dist/cli/commands/context/configManager.js +69 -0
  14. package/dist/cli/commands/context/configManager.js.map +1 -0
  15. package/dist/cli/commands/context/contractBuilder.d.ts +18 -0
  16. package/dist/cli/commands/context/contractBuilder.d.ts.map +1 -0
  17. package/dist/cli/commands/context/contractBuilder.js +72 -0
  18. package/dist/cli/commands/context/contractBuilder.js.map +1 -0
  19. package/dist/cli/commands/context/fileWriter.d.ts +38 -0
  20. package/dist/cli/commands/context/fileWriter.d.ts.map +1 -0
  21. package/dist/cli/commands/context/fileWriter.js +165 -0
  22. package/dist/cli/commands/context/fileWriter.js.map +1 -0
  23. package/dist/cli/commands/context/statsCalculator.d.ts +44 -0
  24. package/dist/cli/commands/context/statsCalculator.d.ts.map +1 -0
  25. package/dist/cli/commands/context/statsCalculator.js +150 -0
  26. package/dist/cli/commands/context/statsCalculator.js.map +1 -0
  27. package/dist/cli/commands/context/tokenEstimator.d.ts +76 -0
  28. package/dist/cli/commands/context/tokenEstimator.d.ts.map +1 -0
  29. package/dist/cli/commands/context/tokenEstimator.js +258 -0
  30. package/dist/cli/commands/context/tokenEstimator.js.map +1 -0
  31. package/dist/cli/commands/context.d.ts +2 -0
  32. package/dist/cli/commands/context.d.ts.map +1 -1
  33. package/dist/cli/commands/context.js +75 -405
  34. package/dist/cli/commands/context.js.map +1 -1
  35. package/dist/cli/commands/init.d.ts.map +1 -1
  36. package/dist/cli/commands/init.js +113 -24
  37. package/dist/cli/commands/init.js.map +1 -1
  38. package/dist/cli/commands/style.d.ts +11 -0
  39. package/dist/cli/commands/style.d.ts.map +1 -0
  40. package/dist/cli/commands/style.js +15 -0
  41. package/dist/cli/commands/style.js.map +1 -0
  42. package/dist/cli/handlers/cleanHandler.d.ts +5 -0
  43. package/dist/cli/handlers/cleanHandler.d.ts.map +1 -0
  44. package/dist/cli/handlers/cleanHandler.js +28 -0
  45. package/dist/cli/handlers/cleanHandler.js.map +1 -0
  46. package/dist/cli/handlers/compareHandler.d.ts +5 -0
  47. package/dist/cli/handlers/compareHandler.d.ts.map +1 -0
  48. package/dist/cli/handlers/compareHandler.js +332 -0
  49. package/dist/cli/handlers/compareHandler.js.map +1 -0
  50. package/dist/cli/handlers/contextHandler.d.ts +5 -0
  51. package/dist/cli/handlers/contextHandler.d.ts.map +1 -0
  52. package/dist/cli/handlers/contextHandler.js +24 -0
  53. package/dist/cli/handlers/contextHandler.js.map +1 -0
  54. package/dist/cli/handlers/initHandler.d.ts +6 -0
  55. package/dist/cli/handlers/initHandler.d.ts.map +1 -0
  56. package/dist/cli/handlers/initHandler.js +30 -0
  57. package/dist/cli/handlers/initHandler.js.map +1 -0
  58. package/dist/cli/handlers/styleHandler.d.ts +5 -0
  59. package/dist/cli/handlers/styleHandler.d.ts.map +1 -0
  60. package/dist/cli/handlers/styleHandler.js +30 -0
  61. package/dist/cli/handlers/styleHandler.js.map +1 -0
  62. package/dist/cli/handlers/validateHandler.d.ts +5 -0
  63. package/dist/cli/handlers/validateHandler.d.ts.map +1 -0
  64. package/dist/cli/handlers/validateHandler.js +23 -0
  65. package/dist/cli/handlers/validateHandler.js.map +1 -0
  66. package/dist/cli/index.js +5 -0
  67. package/dist/cli/index.js.map +1 -1
  68. package/dist/cli/parser/argumentParser.d.ts +44 -0
  69. package/dist/cli/parser/argumentParser.d.ts.map +1 -0
  70. package/dist/cli/parser/argumentParser.js +194 -0
  71. package/dist/cli/parser/argumentParser.js.map +1 -0
  72. package/dist/cli/parser/helpText.d.ts +11 -0
  73. package/dist/cli/parser/helpText.d.ts.map +1 -0
  74. package/dist/cli/parser/helpText.js +373 -0
  75. package/dist/cli/parser/helpText.js.map +1 -0
  76. package/dist/cli/stamp.js +14 -897
  77. package/dist/cli/stamp.js.map +1 -1
  78. package/dist/core/astParser/detectors.d.ts +24 -0
  79. package/dist/core/astParser/detectors.d.ts.map +1 -0
  80. package/dist/core/astParser/detectors.js +102 -0
  81. package/dist/core/astParser/detectors.js.map +1 -0
  82. package/dist/core/astParser/extractors/componentExtractor.d.ts +13 -0
  83. package/dist/core/astParser/extractors/componentExtractor.d.ts.map +1 -0
  84. package/dist/core/astParser/extractors/componentExtractor.js +41 -0
  85. package/dist/core/astParser/extractors/componentExtractor.js.map +1 -0
  86. package/dist/core/astParser/extractors/eventExtractor.d.ts +14 -0
  87. package/dist/core/astParser/extractors/eventExtractor.d.ts.map +1 -0
  88. package/dist/core/astParser/extractors/eventExtractor.js +49 -0
  89. package/dist/core/astParser/extractors/eventExtractor.js.map +1 -0
  90. package/dist/core/astParser/extractors/propExtractor.d.ts +14 -0
  91. package/dist/core/astParser/extractors/propExtractor.d.ts.map +1 -0
  92. package/dist/core/astParser/extractors/propExtractor.js +73 -0
  93. package/dist/core/astParser/extractors/propExtractor.js.map +1 -0
  94. package/dist/core/astParser/extractors/stateExtractor.d.ts +13 -0
  95. package/dist/core/astParser/extractors/stateExtractor.d.ts.map +1 -0
  96. package/dist/core/astParser/extractors/stateExtractor.js +66 -0
  97. package/dist/core/astParser/extractors/stateExtractor.js.map +1 -0
  98. package/dist/core/astParser.d.ts.map +1 -1
  99. package/dist/core/astParser.js +5 -307
  100. package/dist/core/astParser.js.map +1 -1
  101. package/dist/core/contractBuilder.d.ts +1 -0
  102. package/dist/core/contractBuilder.d.ts.map +1 -1
  103. package/dist/core/contractBuilder.js +1 -0
  104. package/dist/core/contractBuilder.js.map +1 -1
  105. package/dist/core/pack/builder.d.ts +35 -0
  106. package/dist/core/pack/builder.d.ts.map +1 -0
  107. package/dist/core/pack/builder.js +76 -0
  108. package/dist/core/pack/builder.js.map +1 -0
  109. package/dist/core/pack/collector.d.ts +20 -0
  110. package/dist/core/pack/collector.d.ts.map +1 -0
  111. package/dist/core/pack/collector.js +71 -0
  112. package/dist/core/pack/collector.js.map +1 -0
  113. package/dist/core/pack/loader.d.ts +23 -0
  114. package/dist/core/pack/loader.d.ts.map +1 -0
  115. package/dist/core/pack/loader.js +66 -0
  116. package/dist/core/pack/loader.js.map +1 -0
  117. package/dist/core/pack/resolver.d.ts +21 -0
  118. package/dist/core/pack/resolver.d.ts.map +1 -0
  119. package/dist/core/pack/resolver.js +79 -0
  120. package/dist/core/pack/resolver.js.map +1 -0
  121. package/dist/core/pack.d.ts +17 -27
  122. package/dist/core/pack.d.ts.map +1 -1
  123. package/dist/core/pack.js +18 -225
  124. package/dist/core/pack.js.map +1 -1
  125. package/dist/core/styleExtractor/index.d.ts +11 -0
  126. package/dist/core/styleExtractor/index.d.ts.map +1 -0
  127. package/dist/core/styleExtractor/index.js +11 -0
  128. package/dist/core/styleExtractor/index.js.map +1 -0
  129. package/dist/core/styleExtractor/layout.d.ts +14 -0
  130. package/dist/core/styleExtractor/layout.d.ts.map +1 -0
  131. package/dist/core/styleExtractor/layout.js +86 -0
  132. package/dist/core/styleExtractor/layout.js.map +1 -0
  133. package/dist/core/styleExtractor/motion.d.ts +20 -0
  134. package/dist/core/styleExtractor/motion.d.ts.map +1 -0
  135. package/dist/core/styleExtractor/motion.js +74 -0
  136. package/dist/core/styleExtractor/motion.js.map +1 -0
  137. package/dist/core/styleExtractor/scss.d.ts +30 -0
  138. package/dist/core/styleExtractor/scss.d.ts.map +1 -0
  139. package/dist/core/styleExtractor/scss.js +80 -0
  140. package/dist/core/styleExtractor/scss.js.map +1 -0
  141. package/dist/core/styleExtractor/styleExtractor.d.ts +11 -0
  142. package/dist/core/styleExtractor/styleExtractor.d.ts.map +1 -0
  143. package/dist/core/styleExtractor/styleExtractor.js +115 -0
  144. package/dist/core/styleExtractor/styleExtractor.js.map +1 -0
  145. package/dist/core/styleExtractor/styled.d.ts +13 -0
  146. package/dist/core/styleExtractor/styled.d.ts.map +1 -0
  147. package/dist/core/styleExtractor/styled.js +31 -0
  148. package/dist/core/styleExtractor/styled.js.map +1 -0
  149. package/dist/core/styleExtractor/tailwind.d.ts +16 -0
  150. package/dist/core/styleExtractor/tailwind.d.ts.map +1 -0
  151. package/dist/core/styleExtractor/tailwind.js +85 -0
  152. package/dist/core/styleExtractor/tailwind.js.map +1 -0
  153. package/dist/core/styleExtractor.d.ts +8 -0
  154. package/dist/core/styleExtractor.d.ts.map +1 -0
  155. package/dist/core/styleExtractor.js +8 -0
  156. package/dist/core/styleExtractor.js.map +1 -0
  157. package/dist/index.d.ts +4 -2
  158. package/dist/index.d.ts.map +1 -1
  159. package/dist/index.js.map +1 -1
  160. package/dist/types/UIFContract.d.ts +71 -0
  161. package/dist/types/UIFContract.d.ts.map +1 -1
  162. package/dist/types/UIFContract.js.map +1 -1
  163. package/dist/utils/gitignore.d.ts +6 -5
  164. package/dist/utils/gitignore.d.ts.map +1 -1
  165. package/dist/utils/gitignore.js +11 -50
  166. package/dist/utils/gitignore.js.map +1 -1
  167. package/dist/utils/llmContext.d.ts +4 -6
  168. package/dist/utils/llmContext.d.ts.map +1 -1
  169. package/dist/utils/llmContext.js +8 -59
  170. package/dist/utils/llmContext.js.map +1 -1
  171. package/dist/utils/tokens.d.ts +18 -10
  172. package/dist/utils/tokens.d.ts.map +1 -1
  173. package/dist/utils/tokens.js +112 -10
  174. package/dist/utils/tokens.js.map +1 -1
  175. package/package.json +3 -1
  176. package/schema/logicstamp.context.schema.json +288 -0
@@ -2,61 +2,150 @@
2
2
  * Init command - Sets up LogicStamp in a project
3
3
  */
4
4
  import { resolve } from 'node:path';
5
- import { ensureGitignorePatterns } from '../../utils/gitignore.js';
5
+ import { ensureGitignorePatterns, readGitignore, hasLogicStampPatterns } from '../../utils/gitignore.js';
6
6
  import { updateConfig } from '../../utils/config.js';
7
7
  import { readPackageLLMContext, writeLLMContext, llmContextExists } from '../../utils/llmContext.js';
8
+ /**
9
+ * Check if running in interactive TTY
10
+ */
11
+ function isTTY() {
12
+ return process.stdout.isTTY === true && process.stdin.isTTY === true;
13
+ }
14
+ /**
15
+ * Prompt user for Y/N input (only in TTY mode)
16
+ */
17
+ async function promptYesNo(question) {
18
+ const { createInterface } = await import('node:readline');
19
+ const readline = createInterface({
20
+ input: process.stdin,
21
+ output: process.stdout,
22
+ });
23
+ return new Promise((resolve) => {
24
+ readline.question(question, (answer) => {
25
+ readline.close();
26
+ resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes' || answer === '');
27
+ });
28
+ });
29
+ }
8
30
  /**
9
31
  * Initialize LogicStamp in a project directory
10
32
  */
11
33
  export async function init(options = {}) {
12
34
  const targetDir = resolve(options.targetDir || process.cwd());
13
35
  console.log('🚀 Initializing LogicStamp...\n');
14
- // Setup .gitignore
36
+ // Setup .gitignore (always prompt unless skipGitignore flag)
15
37
  if (!options.skipGitignore) {
16
38
  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' });
39
+ // Check if patterns already exist
40
+ const gitignoreContent = await readGitignore(targetDir);
41
+ const alreadyHasPatterns = hasLogicStampPatterns(gitignoreContent);
42
+ if (!alreadyHasPatterns) {
43
+ console.log('💡 LogicStamp generates large context files that are usually not committed.');
44
+ console.log('\n The following patterns will be added to .gitignore:');
45
+ console.log(' - context.json');
46
+ console.log(' - context_*.json');
47
+ console.log(' - *.uif.json');
48
+ console.log(' - logicstamp.manifest.json');
49
+ console.log(' - .logicstamp/');
50
+ let shouldAdd = true; // Default to "yes" in non-interactive mode
51
+ if (isTTY()) {
52
+ // Interactive prompt (local dev convenience)
53
+ shouldAdd = await promptYesNo('\nAdd recommended patterns to .gitignore? [Y/n] ');
54
+ }
55
+ if (shouldAdd) {
56
+ const { added, created } = await ensureGitignorePatterns(targetDir);
57
+ if (created) {
58
+ console.log('✅ Created .gitignore with LogicStamp patterns');
59
+ await updateConfig(targetDir, { gitignorePreference: 'added' });
60
+ }
61
+ else if (added) {
62
+ console.log('✅ Added LogicStamp patterns to existing .gitignore');
63
+ await updateConfig(targetDir, { gitignorePreference: 'added' });
64
+ }
65
+ }
66
+ else {
67
+ console.log('📝 Skipping .gitignore setup');
68
+ await updateConfig(targetDir, { gitignorePreference: 'skipped' });
69
+ }
27
70
  }
28
71
  else {
29
72
  console.log('ℹ️ .gitignore already contains LogicStamp patterns');
30
73
  // Still save preference in case config doesn't exist
31
74
  await updateConfig(targetDir, { gitignorePreference: 'added' });
32
75
  }
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
76
  }
40
77
  catch (error) {
41
78
  console.error('⚠️ Failed to update .gitignore:', error instanceof Error ? error.message : String(error));
42
79
  console.log(' You can manually add the patterns to your .gitignore');
43
80
  }
44
81
  }
45
- // Setup LLM_CONTEXT.md
82
+ else {
83
+ await updateConfig(targetDir, { gitignorePreference: 'skipped' });
84
+ }
85
+ // Setup LLM_CONTEXT.md (always prompt)
46
86
  try {
47
87
  if (await llmContextExists(targetDir)) {
48
88
  console.log('\nℹ️ LLM_CONTEXT.md already exists');
89
+ await updateConfig(targetDir, { llmContextPreference: 'added' });
49
90
  }
50
91
  else {
51
92
  const content = await readPackageLLMContext();
52
93
  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' });
94
+ console.log('\n💡 LogicStamp can generate LLM_CONTEXT.md to help AI assistants understand your project structure.');
95
+ let shouldAdd = true; // Default to "yes" in non-interactive mode
96
+ if (isTTY()) {
97
+ // Interactive prompt (local dev convenience)
98
+ shouldAdd = await promptYesNo('Generate LLM_CONTEXT.md in project root? [Y/n] ');
99
+ }
100
+ if (shouldAdd) {
101
+ await writeLLMContext(targetDir, content);
102
+ console.log('✅ Created LLM_CONTEXT.md');
103
+ await updateConfig(targetDir, { llmContextPreference: 'added' });
104
+ }
105
+ else {
106
+ console.log('📝 Skipping LLM_CONTEXT.md creation');
107
+ await updateConfig(targetDir, { llmContextPreference: 'skipped' });
108
+ }
57
109
  }
58
110
  else {
59
- console.log('\n⚠️ Could not find LLM_CONTEXT.md template in package');
111
+ // Template not found in package - offer to create a basic default
112
+ console.log('\n💡 LogicStamp can generate LLM_CONTEXT.md to help AI assistants understand your project structure.');
113
+ console.log(' (Using default template - package template not found)');
114
+ const defaultContent = `# LLM Context
115
+
116
+ This file helps AI assistants understand your project structure and conventions.
117
+
118
+ ## Project Overview
119
+ Add a brief description of your project here.
120
+
121
+ ## Key Conventions
122
+ - Add your coding conventions and patterns here
123
+ - Document any important architectural decisions
124
+ - Note any special patterns or practices
125
+
126
+ ## Getting Started
127
+ Add instructions for how to get started with this project.
128
+
129
+ ## Important Files
130
+ - List key files and their purposes
131
+ - Document the project structure
132
+
133
+ This file is generated by LogicStamp Context. Customize it to fit your project's needs.
134
+ `;
135
+ let shouldAdd = true; // Default to "yes" in non-interactive mode
136
+ if (isTTY()) {
137
+ // Interactive prompt (local dev convenience)
138
+ shouldAdd = await promptYesNo('Generate LLM_CONTEXT.md in project root? [Y/n] ');
139
+ }
140
+ if (shouldAdd) {
141
+ await writeLLMContext(targetDir, defaultContent);
142
+ console.log('✅ Created LLM_CONTEXT.md with default template');
143
+ await updateConfig(targetDir, { llmContextPreference: 'added' });
144
+ }
145
+ else {
146
+ console.log('📝 Skipping LLM_CONTEXT.md creation');
147
+ await updateConfig(targetDir, { llmContextPreference: 'skipped' });
148
+ }
60
149
  }
61
150
  }
62
151
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Style command - Thin wrapper for context generation with style metadata
3
+ */
4
+ import { type ContextOptions } from './context.js';
5
+ export type StyleOptions = Omit<ContextOptions, 'includeStyle'>;
6
+ /**
7
+ * Generate context with style metadata
8
+ * This is a thin wrapper around contextCommand with includeStyle: true
9
+ */
10
+ export declare function styleCommand(options: StyleOptions): Promise<void>;
11
+ //# sourceMappingURL=style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/style.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnE,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AAEhE;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAKvE"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Style command - Thin wrapper for context generation with style metadata
3
+ */
4
+ import { contextCommand } from './context.js';
5
+ /**
6
+ * Generate context with style metadata
7
+ * This is a thin wrapper around contextCommand with includeStyle: true
8
+ */
9
+ export async function styleCommand(options) {
10
+ await contextCommand({
11
+ ...options,
12
+ includeStyle: true,
13
+ });
14
+ }
15
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../../src/cli/commands/style.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAuB,MAAM,cAAc,CAAC;AAInE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAqB;IACtD,MAAM,cAAc,CAAC;QACnB,GAAG,OAAO;QACV,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Handler for clean command
3
+ */
4
+ export declare function handleClean(args: string[]): Promise<void>;
5
+ //# sourceMappingURL=cleanHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanHandler.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/cleanHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB/D"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Handler for clean command
3
+ */
4
+ import { cleanCommand } from '../commands/clean.js';
5
+ import { parseCleanArgs } from '../parser/argumentParser.js';
6
+ import { getCleanHelp } from '../parser/helpText.js';
7
+ import { printFoxIcon } from './initHandler.js';
8
+ export async function handleClean(args) {
9
+ if (args.includes('--help') || args.includes('-h')) {
10
+ printFoxIcon();
11
+ console.log(getCleanHelp());
12
+ process.exit(0);
13
+ }
14
+ // Explicitly reject --compare-modes (only available in stamp context, not stamp context clean)
15
+ if (args.includes('--compare-modes')) {
16
+ console.error('❌ --compare-modes is not available for "stamp context clean". Use "stamp context --compare-modes" instead.');
17
+ process.exit(1);
18
+ }
19
+ const options = parseCleanArgs(args);
20
+ try {
21
+ await cleanCommand(options);
22
+ }
23
+ catch (error) {
24
+ console.error('❌ Clean failed:', error.message);
25
+ process.exit(1);
26
+ }
27
+ }
28
+ //# sourceMappingURL=cleanHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanHandler.js","sourceRoot":"","sources":["../../../src/cli/handlers/cleanHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAqB,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,+FAA+F;IAC/F,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,4GAA4G,CAAC,CAAC;QAC5H,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAErC,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Handler for compare command
3
+ */
4
+ export declare function handleCompare(args: string[]): Promise<void>;
5
+ //# sourceMappingURL=compareHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compareHandler.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/compareHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwCH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCjE"}
@@ -0,0 +1,332 @@
1
+ /**
2
+ * Handler for compare command
3
+ */
4
+ import { contextCommand } from '../commands/context.js';
5
+ import { compareCommand, multiFileCompare, displayMultiFileCompareResult, cleanOrphanedFiles, } from '../commands/compare.js';
6
+ import { parseCompareArgs } from '../parser/argumentParser.js';
7
+ import { getCompareHelp } from '../parser/helpText.js';
8
+ import { printFoxIcon } from './initHandler.js';
9
+ /**
10
+ * Prompt user for Y/N input (only in TTY mode)
11
+ */
12
+ async function promptYesNo(question) {
13
+ const { createInterface } = await import('node:readline');
14
+ const readline = createInterface({
15
+ input: process.stdin,
16
+ output: process.stdout,
17
+ });
18
+ return new Promise((resolve) => {
19
+ readline.question(question, (answer) => {
20
+ readline.close();
21
+ resolve(answer.toLowerCase() === 'y');
22
+ });
23
+ });
24
+ }
25
+ /**
26
+ * Check if running in interactive TTY
27
+ */
28
+ function isTTY() {
29
+ return process.stdout.isTTY === true && process.stdin.isTTY === true;
30
+ }
31
+ export async function handleCompare(args) {
32
+ if (args[0] === '--help' || args[0] === '-h') {
33
+ printFoxIcon();
34
+ console.log(getCompareHelp());
35
+ process.exit(0);
36
+ }
37
+ // Explicitly reject --compare-modes (only available in stamp context, not stamp context compare)
38
+ if (args.includes('--compare-modes')) {
39
+ console.error('❌ --compare-modes is not available for "stamp context compare". Use "stamp context --compare-modes" instead.');
40
+ process.exit(1);
41
+ }
42
+ const { stats, approve, cleanOrphaned, quiet, skipGitignore, positionalArgs } = parseCompareArgs(args);
43
+ // Auto-mode: no files specified - use multi-file comparison with context_main.json
44
+ if (positionalArgs.length === 0) {
45
+ await handleAutoCompareMode({ stats, approve, cleanOrphaned, quiet, skipGitignore });
46
+ return;
47
+ }
48
+ // Manual mode: explicit files provided
49
+ if (positionalArgs.length < 2) {
50
+ printFoxIcon();
51
+ console.log(getCompareHelp());
52
+ process.exit(1);
53
+ }
54
+ const oldFile = positionalArgs[0];
55
+ const newFile = positionalArgs[1];
56
+ // Detect if we're comparing context_main.json files (multi-file mode)
57
+ const isMultiFileMode = oldFile.endsWith('context_main.json') || newFile.endsWith('context_main.json');
58
+ if (isMultiFileMode) {
59
+ await handleMultiFileCompareMode({ oldFile, newFile, stats, approve, cleanOrphaned, quiet });
60
+ }
61
+ else {
62
+ await handleSingleFileCompareMode({ oldFile, newFile, stats, approve, quiet });
63
+ }
64
+ }
65
+ async function handleAutoCompareMode(options) {
66
+ const { stats, approve, cleanOrphaned, quiet, skipGitignore } = options;
67
+ const { tmpdir } = await import('node:os');
68
+ const { join, dirname } = await import('node:path');
69
+ const { copyFile, rm, mkdir } = await import('node:fs/promises');
70
+ const { existsSync } = await import('node:fs');
71
+ // Check if context_main.json exists
72
+ if (!existsSync('context_main.json')) {
73
+ console.error('❌ context_main.json not found. Run "stamp context" first to generate context files.');
74
+ process.exit(1);
75
+ }
76
+ if (!quiet) {
77
+ console.log('Auto-compare mode');
78
+ }
79
+ // Create temp directory for new context generation
80
+ const tempDir = join(tmpdir(), `context-compare-${Date.now()}`);
81
+ await mkdir(tempDir, { recursive: true });
82
+ if (!quiet) {
83
+ console.log('🔄 Generating fresh context...');
84
+ }
85
+ // Generate fresh context to temp directory
86
+ const contextOptions = {
87
+ depth: 1,
88
+ includeCode: 'header',
89
+ format: 'json',
90
+ out: tempDir,
91
+ hashLock: false,
92
+ strict: false,
93
+ allowMissing: true,
94
+ maxNodes: 100,
95
+ profile: 'llm-chat',
96
+ predictBehavior: false,
97
+ dryRun: false,
98
+ stats: false,
99
+ strictMissing: false,
100
+ compareModes: false,
101
+ skipGitignore,
102
+ quiet,
103
+ suppressSuccessIndicator: true, // Suppress ✓ when called internally from compare
104
+ };
105
+ try {
106
+ await contextCommand(contextOptions);
107
+ // Multi-file compare using context_main.json indices
108
+ if (!quiet) {
109
+ console.log('🔍 Comparing all context files...\n');
110
+ }
111
+ const multiCompareOptions = {
112
+ oldIndexFile: 'context_main.json',
113
+ newIndexFile: join(tempDir, 'context_main.json'),
114
+ stats,
115
+ approve,
116
+ autoCleanOrphaned: cleanOrphaned,
117
+ quiet,
118
+ };
119
+ const result = await multiFileCompare(multiCompareOptions);
120
+ displayMultiFileCompareResult(result, stats, quiet);
121
+ // Handle drift approval
122
+ if (result.status === 'DRIFT') {
123
+ let shouldUpdate = false;
124
+ if (approve) {
125
+ // --approve flag: non-interactive, deterministic
126
+ shouldUpdate = true;
127
+ console.log('🔄 --approve flag set, updating all context files...');
128
+ }
129
+ else if (isTTY()) {
130
+ // Interactive prompt (local dev convenience)
131
+ shouldUpdate = await promptYesNo('Update all context files? (y/N) ');
132
+ }
133
+ if (shouldUpdate) {
134
+ // Copy all new context files to current directory
135
+ const { readFile } = await import('node:fs/promises');
136
+ const newIndexContent = await readFile(join(tempDir, 'context_main.json'), 'utf8');
137
+ const newIndex = JSON.parse(newIndexContent);
138
+ let copiedFiles = 0;
139
+ for (const folder of newIndex.folders) {
140
+ const srcPath = join(tempDir, folder.contextFile);
141
+ const destPath = folder.contextFile;
142
+ // Create parent directory if needed
143
+ await mkdir(dirname(destPath), { recursive: true });
144
+ await copyFile(srcPath, destPath);
145
+ copiedFiles++;
146
+ if (!quiet) {
147
+ console.log(` ✓ Updated ${destPath}`);
148
+ }
149
+ }
150
+ // Copy context_main.json
151
+ await copyFile(join(tempDir, 'context_main.json'), 'context_main.json');
152
+ if (!quiet) {
153
+ console.log(` ✓ Updated context_main.json`);
154
+ }
155
+ // Clean up orphaned files if requested
156
+ if (cleanOrphaned && result.orphanedFiles && result.orphanedFiles.length > 0) {
157
+ if (!quiet) {
158
+ console.log('\n🗑️ Cleaning up orphaned files...');
159
+ }
160
+ const deletedCount = await cleanOrphanedFiles(result.orphanedFiles, '.', quiet);
161
+ if (!quiet) {
162
+ console.log(` ✓ Deleted ${deletedCount} orphaned file(s)`);
163
+ }
164
+ }
165
+ if (!quiet) {
166
+ console.log(`\n✅ ${copiedFiles + 1} context files updated successfully`);
167
+ }
168
+ // Clean up temp directory
169
+ await rm(tempDir, { recursive: true, force: true });
170
+ process.exit(0); // Success: drift approved and updated
171
+ }
172
+ else {
173
+ // Clean up temp directory
174
+ await rm(tempDir, { recursive: true, force: true });
175
+ if (isTTY() && !approve) {
176
+ console.log('❌ Update declined\n');
177
+ }
178
+ process.exit(1); // Drift detected but not approved
179
+ }
180
+ }
181
+ else {
182
+ // No drift - clean up and exit success
183
+ await rm(tempDir, { recursive: true, force: true });
184
+ process.exit(0);
185
+ }
186
+ }
187
+ catch (error) {
188
+ // Try to clean up temp directory even on error
189
+ try {
190
+ await rm(tempDir, { recursive: true, force: true });
191
+ }
192
+ catch { }
193
+ console.error('❌ Compare failed:', error.message);
194
+ process.exit(1);
195
+ }
196
+ }
197
+ async function handleMultiFileCompareMode(options) {
198
+ const { oldFile, newFile, stats, approve, cleanOrphaned, quiet } = options;
199
+ // Multi-file comparison mode
200
+ const multiCompareOptions = {
201
+ oldIndexFile: oldFile,
202
+ newIndexFile: newFile,
203
+ stats,
204
+ approve,
205
+ autoCleanOrphaned: cleanOrphaned,
206
+ quiet,
207
+ };
208
+ try {
209
+ const result = await multiFileCompare(multiCompareOptions);
210
+ displayMultiFileCompareResult(result, stats, quiet);
211
+ // Handle drift approval in manual mode
212
+ if (result.status === 'DRIFT') {
213
+ let shouldUpdate = false;
214
+ if (approve) {
215
+ // --approve flag: non-interactive, deterministic
216
+ shouldUpdate = true;
217
+ if (!quiet) {
218
+ console.log('🔄 --approve flag set, updating all context files...');
219
+ }
220
+ }
221
+ else if (isTTY()) {
222
+ // Interactive prompt (local dev convenience)
223
+ shouldUpdate = await promptYesNo('Update all context files? (y/N) ');
224
+ }
225
+ if (shouldUpdate) {
226
+ // Copy all new context files
227
+ const { readFile, copyFile, mkdir } = await import('node:fs/promises');
228
+ const { dirname, join } = await import('node:path');
229
+ const newIndexContent = await readFile(newFile, 'utf8');
230
+ const newIndex = JSON.parse(newIndexContent);
231
+ const baseDir = dirname(oldFile);
232
+ let copiedFiles = 0;
233
+ for (const folder of newIndex.folders) {
234
+ const srcPath = join(dirname(newFile), folder.contextFile);
235
+ const destPath = join(baseDir, folder.contextFile);
236
+ // Create parent directory if needed
237
+ await mkdir(dirname(destPath), { recursive: true });
238
+ await copyFile(srcPath, destPath);
239
+ copiedFiles++;
240
+ if (!quiet) {
241
+ console.log(` ✓ Updated ${folder.contextFile}`);
242
+ }
243
+ }
244
+ // Copy context_main.json
245
+ await copyFile(newFile, oldFile);
246
+ if (!quiet) {
247
+ console.log(` ✓ Updated ${oldFile}`);
248
+ }
249
+ // Clean up orphaned files if requested
250
+ if (cleanOrphaned && result.orphanedFiles && result.orphanedFiles.length > 0) {
251
+ if (!quiet) {
252
+ console.log('\n🗑️ Cleaning up orphaned files...');
253
+ }
254
+ const deletedCount = await cleanOrphanedFiles(result.orphanedFiles, baseDir, quiet);
255
+ if (!quiet) {
256
+ console.log(` ✓ Deleted ${deletedCount} orphaned file(s)`);
257
+ }
258
+ }
259
+ if (!quiet) {
260
+ console.log(`\n✅ ${copiedFiles + 1} context files updated successfully`);
261
+ }
262
+ process.exit(0); // Success: drift approved and updated
263
+ }
264
+ else {
265
+ if (isTTY() && !approve) {
266
+ console.log('❌ Update declined\n');
267
+ }
268
+ process.exit(1); // Drift detected but not approved
269
+ }
270
+ }
271
+ else {
272
+ // No drift
273
+ process.exit(0);
274
+ }
275
+ }
276
+ catch (error) {
277
+ console.error('❌ Compare failed:', error.message);
278
+ process.exit(1);
279
+ }
280
+ }
281
+ async function handleSingleFileCompareMode(options) {
282
+ const { oldFile, newFile, stats, approve, quiet } = options;
283
+ // Single-file comparison mode (backward compatible)
284
+ const compareOptions = {
285
+ oldFile,
286
+ newFile,
287
+ stats,
288
+ approve,
289
+ quiet,
290
+ };
291
+ try {
292
+ const result = await compareCommand(compareOptions);
293
+ // Handle drift approval in manual mode
294
+ if (result.status === 'DRIFT') {
295
+ let shouldUpdate = false;
296
+ if (approve) {
297
+ // --approve flag: non-interactive, deterministic
298
+ shouldUpdate = true;
299
+ if (!quiet) {
300
+ console.log(`🔄 --approve flag set, updating ${oldFile}...`);
301
+ }
302
+ }
303
+ else if (isTTY()) {
304
+ // Interactive prompt (local dev convenience)
305
+ shouldUpdate = await promptYesNo(`Update ${oldFile} with ${newFile}? (y/N) `);
306
+ }
307
+ if (shouldUpdate) {
308
+ const { copyFile } = await import('node:fs/promises');
309
+ await copyFile(newFile, oldFile);
310
+ if (!quiet) {
311
+ console.log(`✅ ${oldFile} updated successfully\n`);
312
+ }
313
+ process.exit(0); // Success: drift approved and updated
314
+ }
315
+ else {
316
+ if (isTTY() && !approve) {
317
+ console.log('❌ Update declined\n');
318
+ }
319
+ process.exit(1); // Drift detected but not approved
320
+ }
321
+ }
322
+ else {
323
+ // No drift
324
+ process.exit(0);
325
+ }
326
+ }
327
+ catch (error) {
328
+ console.error('❌ Compare failed:', error.message);
329
+ process.exit(1);
330
+ }
331
+ }
332
+ //# sourceMappingURL=compareHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compareHandler.js","sourceRoot":"","sources":["../../../src/cli/handlers/compareHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Handler for context/generate command
3
+ */
4
+ export declare function handleGenerate(args: string[]): Promise<void>;
5
+ //# sourceMappingURL=contextHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextHandler.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/contextHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBlE"}