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.
- package/LICENSE +21 -21
- package/LLM_CONTEXT.md +4 -3
- package/README.md +140 -21
- package/dist/cli/commands/compare.d.ts.map +1 -1
- package/dist/cli/commands/compare.js +17 -8
- package/dist/cli/commands/compare.js.map +1 -1
- package/dist/cli/commands/context/bundleFormatter.d.ts +20 -0
- package/dist/cli/commands/context/bundleFormatter.d.ts.map +1 -0
- package/dist/cli/commands/context/bundleFormatter.js +55 -0
- package/dist/cli/commands/context/bundleFormatter.js.map +1 -0
- package/dist/cli/commands/context/configManager.d.ts +23 -0
- package/dist/cli/commands/context/configManager.d.ts.map +1 -0
- package/dist/cli/commands/context/configManager.js +69 -0
- package/dist/cli/commands/context/configManager.js.map +1 -0
- package/dist/cli/commands/context/contractBuilder.d.ts +18 -0
- package/dist/cli/commands/context/contractBuilder.d.ts.map +1 -0
- package/dist/cli/commands/context/contractBuilder.js +72 -0
- package/dist/cli/commands/context/contractBuilder.js.map +1 -0
- package/dist/cli/commands/context/fileWriter.d.ts +38 -0
- package/dist/cli/commands/context/fileWriter.d.ts.map +1 -0
- package/dist/cli/commands/context/fileWriter.js +165 -0
- package/dist/cli/commands/context/fileWriter.js.map +1 -0
- package/dist/cli/commands/context/statsCalculator.d.ts +44 -0
- package/dist/cli/commands/context/statsCalculator.d.ts.map +1 -0
- package/dist/cli/commands/context/statsCalculator.js +150 -0
- package/dist/cli/commands/context/statsCalculator.js.map +1 -0
- package/dist/cli/commands/context/tokenEstimator.d.ts +76 -0
- package/dist/cli/commands/context/tokenEstimator.d.ts.map +1 -0
- package/dist/cli/commands/context/tokenEstimator.js +258 -0
- package/dist/cli/commands/context/tokenEstimator.js.map +1 -0
- package/dist/cli/commands/context.d.ts +2 -0
- package/dist/cli/commands/context.d.ts.map +1 -1
- package/dist/cli/commands/context.js +75 -405
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +113 -24
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/style.d.ts +11 -0
- package/dist/cli/commands/style.d.ts.map +1 -0
- package/dist/cli/commands/style.js +15 -0
- package/dist/cli/commands/style.js.map +1 -0
- package/dist/cli/handlers/cleanHandler.d.ts +5 -0
- package/dist/cli/handlers/cleanHandler.d.ts.map +1 -0
- package/dist/cli/handlers/cleanHandler.js +28 -0
- package/dist/cli/handlers/cleanHandler.js.map +1 -0
- package/dist/cli/handlers/compareHandler.d.ts +5 -0
- package/dist/cli/handlers/compareHandler.d.ts.map +1 -0
- package/dist/cli/handlers/compareHandler.js +332 -0
- package/dist/cli/handlers/compareHandler.js.map +1 -0
- package/dist/cli/handlers/contextHandler.d.ts +5 -0
- package/dist/cli/handlers/contextHandler.d.ts.map +1 -0
- package/dist/cli/handlers/contextHandler.js +24 -0
- package/dist/cli/handlers/contextHandler.js.map +1 -0
- package/dist/cli/handlers/initHandler.d.ts +6 -0
- package/dist/cli/handlers/initHandler.d.ts.map +1 -0
- package/dist/cli/handlers/initHandler.js +30 -0
- package/dist/cli/handlers/initHandler.js.map +1 -0
- package/dist/cli/handlers/styleHandler.d.ts +5 -0
- package/dist/cli/handlers/styleHandler.d.ts.map +1 -0
- package/dist/cli/handlers/styleHandler.js +30 -0
- package/dist/cli/handlers/styleHandler.js.map +1 -0
- package/dist/cli/handlers/validateHandler.d.ts +5 -0
- package/dist/cli/handlers/validateHandler.d.ts.map +1 -0
- package/dist/cli/handlers/validateHandler.js +23 -0
- package/dist/cli/handlers/validateHandler.js.map +1 -0
- package/dist/cli/index.js +5 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/parser/argumentParser.d.ts +44 -0
- package/dist/cli/parser/argumentParser.d.ts.map +1 -0
- package/dist/cli/parser/argumentParser.js +194 -0
- package/dist/cli/parser/argumentParser.js.map +1 -0
- package/dist/cli/parser/helpText.d.ts +11 -0
- package/dist/cli/parser/helpText.d.ts.map +1 -0
- package/dist/cli/parser/helpText.js +373 -0
- package/dist/cli/parser/helpText.js.map +1 -0
- package/dist/cli/stamp.js +14 -897
- package/dist/cli/stamp.js.map +1 -1
- package/dist/core/astParser/detectors.d.ts +24 -0
- package/dist/core/astParser/detectors.d.ts.map +1 -0
- package/dist/core/astParser/detectors.js +102 -0
- package/dist/core/astParser/detectors.js.map +1 -0
- package/dist/core/astParser/extractors/componentExtractor.d.ts +13 -0
- package/dist/core/astParser/extractors/componentExtractor.d.ts.map +1 -0
- package/dist/core/astParser/extractors/componentExtractor.js +41 -0
- package/dist/core/astParser/extractors/componentExtractor.js.map +1 -0
- package/dist/core/astParser/extractors/eventExtractor.d.ts +14 -0
- package/dist/core/astParser/extractors/eventExtractor.d.ts.map +1 -0
- package/dist/core/astParser/extractors/eventExtractor.js +49 -0
- package/dist/core/astParser/extractors/eventExtractor.js.map +1 -0
- package/dist/core/astParser/extractors/propExtractor.d.ts +14 -0
- package/dist/core/astParser/extractors/propExtractor.d.ts.map +1 -0
- package/dist/core/astParser/extractors/propExtractor.js +73 -0
- package/dist/core/astParser/extractors/propExtractor.js.map +1 -0
- package/dist/core/astParser/extractors/stateExtractor.d.ts +13 -0
- package/dist/core/astParser/extractors/stateExtractor.d.ts.map +1 -0
- package/dist/core/astParser/extractors/stateExtractor.js +66 -0
- package/dist/core/astParser/extractors/stateExtractor.js.map +1 -0
- package/dist/core/astParser.d.ts.map +1 -1
- package/dist/core/astParser.js +5 -307
- package/dist/core/astParser.js.map +1 -1
- package/dist/core/contractBuilder.d.ts +1 -0
- package/dist/core/contractBuilder.d.ts.map +1 -1
- package/dist/core/contractBuilder.js +1 -0
- package/dist/core/contractBuilder.js.map +1 -1
- package/dist/core/pack/builder.d.ts +35 -0
- package/dist/core/pack/builder.d.ts.map +1 -0
- package/dist/core/pack/builder.js +76 -0
- package/dist/core/pack/builder.js.map +1 -0
- package/dist/core/pack/collector.d.ts +20 -0
- package/dist/core/pack/collector.d.ts.map +1 -0
- package/dist/core/pack/collector.js +71 -0
- package/dist/core/pack/collector.js.map +1 -0
- package/dist/core/pack/loader.d.ts +23 -0
- package/dist/core/pack/loader.d.ts.map +1 -0
- package/dist/core/pack/loader.js +66 -0
- package/dist/core/pack/loader.js.map +1 -0
- package/dist/core/pack/resolver.d.ts +21 -0
- package/dist/core/pack/resolver.d.ts.map +1 -0
- package/dist/core/pack/resolver.js +79 -0
- package/dist/core/pack/resolver.js.map +1 -0
- package/dist/core/pack.d.ts +17 -27
- package/dist/core/pack.d.ts.map +1 -1
- package/dist/core/pack.js +18 -225
- package/dist/core/pack.js.map +1 -1
- package/dist/core/styleExtractor/index.d.ts +11 -0
- package/dist/core/styleExtractor/index.d.ts.map +1 -0
- package/dist/core/styleExtractor/index.js +11 -0
- package/dist/core/styleExtractor/index.js.map +1 -0
- package/dist/core/styleExtractor/layout.d.ts +14 -0
- package/dist/core/styleExtractor/layout.d.ts.map +1 -0
- package/dist/core/styleExtractor/layout.js +86 -0
- package/dist/core/styleExtractor/layout.js.map +1 -0
- package/dist/core/styleExtractor/motion.d.ts +20 -0
- package/dist/core/styleExtractor/motion.d.ts.map +1 -0
- package/dist/core/styleExtractor/motion.js +74 -0
- package/dist/core/styleExtractor/motion.js.map +1 -0
- package/dist/core/styleExtractor/scss.d.ts +30 -0
- package/dist/core/styleExtractor/scss.d.ts.map +1 -0
- package/dist/core/styleExtractor/scss.js +80 -0
- package/dist/core/styleExtractor/scss.js.map +1 -0
- package/dist/core/styleExtractor/styleExtractor.d.ts +11 -0
- package/dist/core/styleExtractor/styleExtractor.d.ts.map +1 -0
- package/dist/core/styleExtractor/styleExtractor.js +115 -0
- package/dist/core/styleExtractor/styleExtractor.js.map +1 -0
- package/dist/core/styleExtractor/styled.d.ts +13 -0
- package/dist/core/styleExtractor/styled.d.ts.map +1 -0
- package/dist/core/styleExtractor/styled.js +31 -0
- package/dist/core/styleExtractor/styled.js.map +1 -0
- package/dist/core/styleExtractor/tailwind.d.ts +16 -0
- package/dist/core/styleExtractor/tailwind.d.ts.map +1 -0
- package/dist/core/styleExtractor/tailwind.js +85 -0
- package/dist/core/styleExtractor/tailwind.js.map +1 -0
- package/dist/core/styleExtractor.d.ts +8 -0
- package/dist/core/styleExtractor.d.ts.map +1 -0
- package/dist/core/styleExtractor.js +8 -0
- package/dist/core/styleExtractor.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types/UIFContract.d.ts +71 -0
- package/dist/types/UIFContract.d.ts.map +1 -1
- package/dist/types/UIFContract.js.map +1 -1
- package/dist/utils/gitignore.d.ts +6 -5
- package/dist/utils/gitignore.d.ts.map +1 -1
- package/dist/utils/gitignore.js +11 -50
- package/dist/utils/gitignore.js.map +1 -1
- package/dist/utils/llmContext.d.ts +4 -6
- package/dist/utils/llmContext.d.ts.map +1 -1
- package/dist/utils/llmContext.js +8 -59
- package/dist/utils/llmContext.js.map +1 -1
- package/dist/utils/tokens.d.ts +18 -10
- package/dist/utils/tokens.d.ts.map +1 -1
- package/dist/utils/tokens.js +112 -10
- package/dist/utils/tokens.js.map +1 -1
- package/package.json +3 -1
- 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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
console.log('
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
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":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|