prelude-context 1.0.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/README.md +354 -0
- package/dist/bin/prelude.d.ts +3 -0
- package/dist/bin/prelude.d.ts.map +1 -0
- package/dist/bin/prelude.js +35 -0
- package/dist/bin/prelude.js.map +1 -0
- package/dist/src/commands/decision.d.ts +3 -0
- package/dist/src/commands/decision.d.ts.map +1 -0
- package/dist/src/commands/decision.js +74 -0
- package/dist/src/commands/decision.js.map +1 -0
- package/dist/src/commands/export.d.ts +3 -0
- package/dist/src/commands/export.d.ts.map +1 -0
- package/dist/src/commands/export.js +132 -0
- package/dist/src/commands/export.js.map +1 -0
- package/dist/src/commands/init.d.ts +3 -0
- package/dist/src/commands/init.d.ts.map +1 -0
- package/dist/src/commands/init.js +80 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/share.d.ts +3 -0
- package/dist/src/commands/share.d.ts.map +1 -0
- package/dist/src/commands/share.js +133 -0
- package/dist/src/commands/share.js.map +1 -0
- package/dist/src/commands/watch.d.ts +3 -0
- package/dist/src/commands/watch.d.ts.map +1 -0
- package/dist/src/commands/watch.js +58 -0
- package/dist/src/commands/watch.js.map +1 -0
- package/dist/src/constants.d.ts +16 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +49 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/core/exporter.d.ts +4 -0
- package/dist/src/core/exporter.d.ts.map +1 -0
- package/dist/src/core/exporter.js +196 -0
- package/dist/src/core/exporter.js.map +1 -0
- package/dist/src/core/infer.d.ts +6 -0
- package/dist/src/core/infer.d.ts.map +1 -0
- package/dist/src/core/infer.js +900 -0
- package/dist/src/core/infer.js.map +1 -0
- package/dist/src/core/updater.d.ts +8 -0
- package/dist/src/core/updater.d.ts.map +1 -0
- package/dist/src/core/updater.js +120 -0
- package/dist/src/core/updater.js.map +1 -0
- package/dist/src/core/watcher.d.ts +15 -0
- package/dist/src/core/watcher.d.ts.map +1 -0
- package/dist/src/core/watcher.js +119 -0
- package/dist/src/core/watcher.js.map +1 -0
- package/dist/src/schema/architecture.d.ts +75 -0
- package/dist/src/schema/architecture.d.ts.map +1 -0
- package/dist/src/schema/architecture.js +24 -0
- package/dist/src/schema/architecture.js.map +1 -0
- package/dist/src/schema/constraints.d.ts +146 -0
- package/dist/src/schema/constraints.d.ts.map +1 -0
- package/dist/src/schema/constraints.js +39 -0
- package/dist/src/schema/constraints.js.map +1 -0
- package/dist/src/schema/decisions.d.ts +122 -0
- package/dist/src/schema/decisions.d.ts.map +1 -0
- package/dist/src/schema/decisions.js +23 -0
- package/dist/src/schema/decisions.js.map +1 -0
- package/dist/src/schema/index.d.ts +7 -0
- package/dist/src/schema/index.d.ts.map +1 -0
- package/dist/src/schema/index.js +7 -0
- package/dist/src/schema/index.js.map +1 -0
- package/dist/src/schema/project.d.ts +69 -0
- package/dist/src/schema/project.d.ts.map +1 -0
- package/dist/src/schema/project.js +24 -0
- package/dist/src/schema/project.js.map +1 -0
- package/dist/src/schema/session.d.ts +210 -0
- package/dist/src/schema/session.d.ts.map +1 -0
- package/dist/src/schema/session.js +26 -0
- package/dist/src/schema/session.js.map +1 -0
- package/dist/src/schema/stack.d.ts +58 -0
- package/dist/src/schema/stack.d.ts.map +1 -0
- package/dist/src/schema/stack.js +23 -0
- package/dist/src/schema/stack.js.map +1 -0
- package/dist/src/utils/fs.d.ts +10 -0
- package/dist/src/utils/fs.d.ts.map +1 -0
- package/dist/src/utils/fs.js +63 -0
- package/dist/src/utils/fs.js.map +1 -0
- package/dist/src/utils/log.d.ts +20 -0
- package/dist/src/utils/log.d.ts.map +1 -0
- package/dist/src/utils/log.js +45 -0
- package/dist/src/utils/log.js.map +1 -0
- package/dist/src/utils/time.d.ts +5 -0
- package/dist/src/utils/time.d.ts.map +1 -0
- package/dist/src/utils/time.js +33 -0
- package/dist/src/utils/time.js.map +1 -0
- package/package.json +64 -0
- package/schemas/architecture.schema.json +98 -0
- package/schemas/constraints.schema.json +161 -0
- package/schemas/decisions.schema.json +95 -0
- package/schemas/export.schema.json +46 -0
- package/schemas/project.schema.json +102 -0
- package/schemas/session.schema.json +101 -0
- package/schemas/stack.schema.json +103 -0
- package/spec.md +717 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { join } from 'path';
|
|
2
|
+
import { ensureDir, writeJSON, writeMarkdown, fileExists } from '../utils/fs.js';
|
|
3
|
+
import { logger, spinner } from '../utils/log.js';
|
|
4
|
+
import { CONTEXT_DIR, CONTEXT_FILES } from '../constants.js';
|
|
5
|
+
import { inferProjectMetadata, inferStack, inferArchitecture, inferConstraints } from '../core/infer.js';
|
|
6
|
+
export function registerInitCommand(cli) {
|
|
7
|
+
cli
|
|
8
|
+
.command('init [dir]', 'Initialize .context/ directory with inferred metadata')
|
|
9
|
+
.option('--force', 'Overwrite existing .context/ directory')
|
|
10
|
+
.action(async (dir = process.cwd(), options) => {
|
|
11
|
+
const rootDir = dir;
|
|
12
|
+
const contextDir = join(rootDir, CONTEXT_DIR);
|
|
13
|
+
logger.init('Initializing Prelude context...');
|
|
14
|
+
// Check if .context already exists
|
|
15
|
+
if (await fileExists(contextDir) && !options.force) {
|
|
16
|
+
logger.error('.context/ directory already exists. Use --force to overwrite.');
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
// Create .context directory
|
|
20
|
+
const spin = spinner('Creating .context/ directory...');
|
|
21
|
+
await ensureDir(contextDir);
|
|
22
|
+
spin.stop('✓ Created .context/ directory');
|
|
23
|
+
// Infer and write project metadata
|
|
24
|
+
const projectSpin = spinner('Analyzing project metadata...');
|
|
25
|
+
try {
|
|
26
|
+
const project = await inferProjectMetadata(rootDir);
|
|
27
|
+
await writeJSON(join(contextDir, CONTEXT_FILES.PROJECT), project);
|
|
28
|
+
projectSpin.stop('✓ Generated project.json');
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
projectSpin.stop();
|
|
32
|
+
logger.error(`Failed to generate project.json: ${error}`);
|
|
33
|
+
}
|
|
34
|
+
// Infer and write stack
|
|
35
|
+
const stackSpin = spinner('Detecting technology stack...');
|
|
36
|
+
try {
|
|
37
|
+
const stack = await inferStack(rootDir);
|
|
38
|
+
await writeJSON(join(contextDir, CONTEXT_FILES.STACK), stack);
|
|
39
|
+
stackSpin.stop('✓ Generated stack.json');
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
stackSpin.stop();
|
|
43
|
+
logger.error(`Failed to generate stack.json: ${error}`);
|
|
44
|
+
}
|
|
45
|
+
// Infer and write architecture
|
|
46
|
+
const archSpin = spinner('Mapping architecture...');
|
|
47
|
+
try {
|
|
48
|
+
const architecture = await inferArchitecture(rootDir);
|
|
49
|
+
await writeJSON(join(contextDir, CONTEXT_FILES.ARCHITECTURE), architecture);
|
|
50
|
+
archSpin.stop('✓ Generated architecture.json');
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
archSpin.stop();
|
|
54
|
+
logger.error(`Failed to generate architecture.json: ${error}`);
|
|
55
|
+
}
|
|
56
|
+
// Infer and write constraints
|
|
57
|
+
const constraintsSpin = spinner('Inferring constraints...');
|
|
58
|
+
try {
|
|
59
|
+
const constraints = await inferConstraints(rootDir);
|
|
60
|
+
await writeJSON(join(contextDir, CONTEXT_FILES.CONSTRAINTS), constraints);
|
|
61
|
+
constraintsSpin.stop('✓ Generated constraints.json');
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
constraintsSpin.stop();
|
|
65
|
+
logger.error(`Failed to generate constraints.json: ${error}`);
|
|
66
|
+
}
|
|
67
|
+
// Create empty decisions.json
|
|
68
|
+
await writeJSON(join(contextDir, CONTEXT_FILES.DECISIONS), { decisions: [] });
|
|
69
|
+
logger.success('✓ Created decisions.json');
|
|
70
|
+
// Create empty changelog.md
|
|
71
|
+
await writeMarkdown(join(contextDir, CONTEXT_FILES.CHANGELOG), '# Changelog\n\n');
|
|
72
|
+
logger.success('✓ Created changelog.md');
|
|
73
|
+
logger.success('🎉 Prelude context initialized successfully!');
|
|
74
|
+
logger.info('\nNext steps:');
|
|
75
|
+
logger.info(' • Run `prelude export` to generate LLM-optimized context');
|
|
76
|
+
logger.info(' • Run `prelude watch` to track changes');
|
|
77
|
+
logger.info(' • Run `prelude decision "Title"` to log a decision');
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../../src/commands/share.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAyE/B,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,QAuE5C"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { join } from 'path';
|
|
2
|
+
import { readFile } from 'fs/promises';
|
|
3
|
+
import { spawn, execSync } from 'child_process';
|
|
4
|
+
import { platform } from 'os';
|
|
5
|
+
import { fileExists } from '../utils/fs.js';
|
|
6
|
+
import { logger, spinner } from '../utils/log.js';
|
|
7
|
+
import { CONTEXT_DIR, CONTEXT_FILES } from '../constants.js';
|
|
8
|
+
// Check if a command exists
|
|
9
|
+
function commandExists(command) {
|
|
10
|
+
try {
|
|
11
|
+
execSync(`which ${command}`, { stdio: 'ignore' });
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
// Native clipboard using shell commands (no dependencies!)
|
|
19
|
+
async function copyToClipboard(text) {
|
|
20
|
+
return new Promise((resolve) => {
|
|
21
|
+
try {
|
|
22
|
+
const os = platform();
|
|
23
|
+
let command;
|
|
24
|
+
let args = [];
|
|
25
|
+
if (os === 'darwin') {
|
|
26
|
+
command = 'pbcopy';
|
|
27
|
+
}
|
|
28
|
+
else if (os === 'linux') {
|
|
29
|
+
// Check which clipboard tool is available
|
|
30
|
+
if (commandExists('xclip')) {
|
|
31
|
+
command = 'xclip';
|
|
32
|
+
args = ['-selection', 'clipboard'];
|
|
33
|
+
}
|
|
34
|
+
else if (commandExists('xsel')) {
|
|
35
|
+
command = 'xsel';
|
|
36
|
+
args = ['--clipboard', '--input'];
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
resolve(false);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else if (os === 'win32') {
|
|
44
|
+
command = 'clip.exe';
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
resolve(false);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const proc = spawn(command, args);
|
|
51
|
+
let errorOccurred = false;
|
|
52
|
+
proc.on('error', () => {
|
|
53
|
+
errorOccurred = true;
|
|
54
|
+
resolve(false);
|
|
55
|
+
});
|
|
56
|
+
// For clipboard commands, if stdin closes without error, assume success
|
|
57
|
+
proc.stdin.on('finish', () => {
|
|
58
|
+
if (!errorOccurred) {
|
|
59
|
+
// Give it a tiny moment to process, then assume success
|
|
60
|
+
setTimeout(() => resolve(true), 100);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
proc.stdin.write(text);
|
|
64
|
+
proc.stdin.end();
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
resolve(false);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
export function registerShareCommand(cli) {
|
|
72
|
+
cli
|
|
73
|
+
.command('share [dir]', 'Quick copy context to clipboard (with preview)')
|
|
74
|
+
.option('--format <format>', 'Output format (md or json)', { default: 'md' })
|
|
75
|
+
.action(async (dir = process.cwd(), options) => {
|
|
76
|
+
const rootDir = dir;
|
|
77
|
+
const contextDir = join(rootDir, CONTEXT_DIR);
|
|
78
|
+
// Check if .context exists
|
|
79
|
+
if (!(await fileExists(contextDir))) {
|
|
80
|
+
logger.error('.context/ directory not found. Run `prelude init` first.');
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
// Determine which file to read
|
|
84
|
+
const format = options.format === 'json' ? 'json' : 'md';
|
|
85
|
+
const filename = format === 'json' ? CONTEXT_FILES.EXPORT_JSON : CONTEXT_FILES.EXPORT_MD;
|
|
86
|
+
const exportPath = join(contextDir, filename);
|
|
87
|
+
// Check if export exists, if not generate it
|
|
88
|
+
if (!(await fileExists(exportPath))) {
|
|
89
|
+
logger.info('Generating export...');
|
|
90
|
+
const { saveExport } = await import('../core/exporter.js');
|
|
91
|
+
await saveExport(rootDir, format);
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
const content = await readFile(exportPath, 'utf-8');
|
|
95
|
+
// Copy to clipboard
|
|
96
|
+
const spin = spinner('Copying to clipboard...');
|
|
97
|
+
const copied = await copyToClipboard(content);
|
|
98
|
+
spin.stop();
|
|
99
|
+
if (copied) {
|
|
100
|
+
logger.success('✓ Context copied to clipboard!');
|
|
101
|
+
logger.info('📋 Ready to paste into your AI chat\n');
|
|
102
|
+
// Show preview
|
|
103
|
+
const lines = content.split('\n');
|
|
104
|
+
const preview = lines.slice(0, 5).join('\n');
|
|
105
|
+
console.log('Preview:');
|
|
106
|
+
console.log('─'.repeat(50));
|
|
107
|
+
console.log(preview);
|
|
108
|
+
if (lines.length > 5) {
|
|
109
|
+
console.log('...');
|
|
110
|
+
}
|
|
111
|
+
console.log('─'.repeat(50));
|
|
112
|
+
console.log(`\n${lines.length} lines | ${content.length} characters`);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const os = platform();
|
|
116
|
+
logger.warn('⚠ Clipboard tool not found');
|
|
117
|
+
if (os === 'linux') {
|
|
118
|
+
logger.info('\nInstall xclip or xsel:');
|
|
119
|
+
logger.info(' sudo apt install xclip');
|
|
120
|
+
logger.info(' # or');
|
|
121
|
+
logger.info(' sudo apt install xsel');
|
|
122
|
+
}
|
|
123
|
+
logger.info('\nManual copy:');
|
|
124
|
+
logger.info(` cat ${exportPath}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
logger.error(`Failed to read export: ${error}`);
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=share.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share.js","sourceRoot":"","sources":["../../../src/commands/share.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE7D,4BAA4B;AAC5B,SAAS,aAAa,CAAC,OAAe;IACpC,IAAI,CAAC;QACH,QAAQ,CAAC,SAAS,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,2DAA2D;AAC3D,KAAK,UAAU,eAAe,CAAC,IAAY;IACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;YACtB,IAAI,OAAe,CAAC;YACpB,IAAI,IAAI,GAAa,EAAE,CAAC;YAExB,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;gBACpB,OAAO,GAAG,QAAQ,CAAC;YACrB,CAAC;iBAAM,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;gBAC1B,0CAA0C;gBAC1C,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3B,OAAO,GAAG,OAAO,CAAC;oBAClB,IAAI,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;gBACrC,CAAC;qBAAM,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;oBACjC,OAAO,GAAG,MAAM,CAAC;oBACjB,IAAI,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;gBACpC,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,CAAC;oBACf,OAAO;gBACT,CAAC;YACH,CAAC;iBAAM,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;gBAC1B,OAAO,GAAG,UAAU,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,CAAC;gBACf,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAClC,IAAI,aAAa,GAAG,KAAK,CAAC;YAE1B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpB,aAAa,GAAG,IAAI,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;YAEH,wEAAwE;YACxE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;gBAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,wDAAwD;oBACxD,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAEnB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAQ;IAC3C,GAAG;SACA,OAAO,CAAC,aAAa,EAAE,gDAAgD,CAAC;SACxE,MAAM,CAAC,mBAAmB,EAAE,4BAA4B,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;SAC5E,MAAM,CAAC,KAAK,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE,EAAE,OAE3C,EAAE,EAAE;QACH,MAAM,OAAO,GAAG,GAAG,CAAC;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAE9C,2BAA2B;QAC3B,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,+BAA+B;QAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACzD,MAAM,QAAQ,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC;QACzF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAE9C,6CAA6C;QAC7C,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACpC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC3D,MAAM,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEpD,oBAAoB;YACpB,MAAM,IAAI,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;gBACjD,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;gBAErD,eAAe;gBACf,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAClC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACrB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,YAAY,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC;YACxE,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;gBAE1C,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;oBACnB,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;oBACxC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;oBACxC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACtB,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBACzC,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;YACrC,CAAC;QAEH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/commands/watch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAO/B,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,QA8D5C"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { join } from 'path';
|
|
2
|
+
import { fileExists } from '../utils/fs.js';
|
|
3
|
+
import { logger } from '../utils/log.js';
|
|
4
|
+
import { CONTEXT_DIR } from '../constants.js';
|
|
5
|
+
import { createWatcher, watchOnce } from '../core/watcher.js';
|
|
6
|
+
export function registerWatchCommand(cli) {
|
|
7
|
+
cli
|
|
8
|
+
.command('watch [dir]', 'Watch for changes and update context')
|
|
9
|
+
.option('--once', 'Update once and exit')
|
|
10
|
+
.option('--verbose', 'Show detailed logging')
|
|
11
|
+
.action(async (dir = process.cwd(), options) => {
|
|
12
|
+
const rootDir = dir;
|
|
13
|
+
const contextDir = join(rootDir, CONTEXT_DIR);
|
|
14
|
+
// Check if .context exists
|
|
15
|
+
if (!(await fileExists(contextDir))) {
|
|
16
|
+
logger.error('.context/ directory not found. Run `prelude init` first.');
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
if (options.once) {
|
|
20
|
+
logger.watch('Watching for changes (will exit after first update)...');
|
|
21
|
+
await watchOnce(rootDir);
|
|
22
|
+
logger.success('✓ Context updated');
|
|
23
|
+
process.exit(0);
|
|
24
|
+
}
|
|
25
|
+
logger.watch('Watching for changes... (press Ctrl+C to stop)');
|
|
26
|
+
logger.info('Monitoring: package.json, tsconfig.json, src/, lib/, app/\n');
|
|
27
|
+
const watcher = createWatcher(rootDir, (files, events) => {
|
|
28
|
+
logger.info(`\n📝 Detected ${files.length} change(s):`);
|
|
29
|
+
if (options.verbose) {
|
|
30
|
+
events.forEach(event => {
|
|
31
|
+
logger.debug(` ${event.type} → ${event.path}`);
|
|
32
|
+
if (event.contextUpdated.length > 0) {
|
|
33
|
+
logger.debug(` Updated: ${event.contextUpdated.join(', ')}`);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
// Get unique list of updated context files
|
|
38
|
+
const updatedFiles = new Set();
|
|
39
|
+
events.forEach(event => {
|
|
40
|
+
event.contextUpdated.forEach(file => updatedFiles.add(file));
|
|
41
|
+
});
|
|
42
|
+
if (updatedFiles.size > 0) {
|
|
43
|
+
logger.success(`✓ Updated: ${Array.from(updatedFiles).join(', ')}`);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
logger.info('No context updates needed');
|
|
47
|
+
}
|
|
48
|
+
}, { verbose: options.verbose });
|
|
49
|
+
// Handle graceful shutdown
|
|
50
|
+
process.on('SIGINT', async () => {
|
|
51
|
+
logger.info('\n\nStopping watcher...');
|
|
52
|
+
await watcher.close();
|
|
53
|
+
logger.success('✓ Watcher stopped');
|
|
54
|
+
process.exit(0);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/commands/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const CONTEXT_DIR = ".context";
|
|
2
|
+
export declare const CONTEXT_FILES: {
|
|
3
|
+
readonly PROJECT: "project.json";
|
|
4
|
+
readonly STACK: "stack.json";
|
|
5
|
+
readonly ARCHITECTURE: "architecture.json";
|
|
6
|
+
readonly CONSTRAINTS: "constraints.json";
|
|
7
|
+
readonly DECISIONS: "decisions.json";
|
|
8
|
+
readonly SESSION: "session.json";
|
|
9
|
+
readonly CHANGELOG: "changelog.md";
|
|
10
|
+
readonly EXPORT_MD: "export.md";
|
|
11
|
+
readonly EXPORT_JSON: "export.json";
|
|
12
|
+
readonly WATCHLOG: ".watchlog.json";
|
|
13
|
+
};
|
|
14
|
+
export declare const WATCH_PATTERNS: readonly ["package.json", "package-lock.json", "pnpm-lock.yaml", "yarn.lock", "bun.lockb", "tsconfig.json", "tailwind.config.js", "tailwind.config.ts", ".eslintrc.json", ".eslintrc.js", "eslint.config.js", ".prettierrc", ".prettierrc.json", "prettier.config.js", "src/**/*", "lib/**/*", "app/**/*", "pages/**/*", "components/**/*", "requirements.txt", "pyproject.toml", "Cargo.toml", "go.mod"];
|
|
15
|
+
export declare const IGNORE_PATTERNS: readonly ["**/node_modules/**", "**/.git/**", "**/dist/**", "**/build/**", "**/.next/**", "**/.context/**", "**/*.test.*", "**/*.spec.*"];
|
|
16
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,aAAa,CAAC;AAEtC,eAAO,MAAM,aAAa;;;;;;;;;;;CAWhB,CAAC;AAEX,eAAO,MAAM,cAAc,2YAwBjB,CAAC;AAEX,eAAO,MAAM,eAAe,2IASlB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export const CONTEXT_DIR = '.context';
|
|
2
|
+
export const CONTEXT_FILES = {
|
|
3
|
+
PROJECT: 'project.json',
|
|
4
|
+
STACK: 'stack.json',
|
|
5
|
+
ARCHITECTURE: 'architecture.json',
|
|
6
|
+
CONSTRAINTS: 'constraints.json',
|
|
7
|
+
DECISIONS: 'decisions.json',
|
|
8
|
+
SESSION: 'session.json',
|
|
9
|
+
CHANGELOG: 'changelog.md',
|
|
10
|
+
EXPORT_MD: 'export.md',
|
|
11
|
+
EXPORT_JSON: 'export.json',
|
|
12
|
+
WATCHLOG: '.watchlog.json'
|
|
13
|
+
};
|
|
14
|
+
export const WATCH_PATTERNS = [
|
|
15
|
+
'package.json',
|
|
16
|
+
'package-lock.json',
|
|
17
|
+
'pnpm-lock.yaml',
|
|
18
|
+
'yarn.lock',
|
|
19
|
+
'bun.lockb',
|
|
20
|
+
'tsconfig.json',
|
|
21
|
+
'tailwind.config.js',
|
|
22
|
+
'tailwind.config.ts',
|
|
23
|
+
'.eslintrc.json',
|
|
24
|
+
'.eslintrc.js',
|
|
25
|
+
'eslint.config.js',
|
|
26
|
+
'.prettierrc',
|
|
27
|
+
'.prettierrc.json',
|
|
28
|
+
'prettier.config.js',
|
|
29
|
+
'src/**/*',
|
|
30
|
+
'lib/**/*',
|
|
31
|
+
'app/**/*',
|
|
32
|
+
'pages/**/*',
|
|
33
|
+
'components/**/*',
|
|
34
|
+
'requirements.txt',
|
|
35
|
+
'pyproject.toml',
|
|
36
|
+
'Cargo.toml',
|
|
37
|
+
'go.mod'
|
|
38
|
+
];
|
|
39
|
+
export const IGNORE_PATTERNS = [
|
|
40
|
+
'**/node_modules/**',
|
|
41
|
+
'**/.git/**',
|
|
42
|
+
'**/dist/**',
|
|
43
|
+
'**/build/**',
|
|
44
|
+
'**/.next/**',
|
|
45
|
+
'**/.context/**',
|
|
46
|
+
'**/*.test.*',
|
|
47
|
+
'**/*.spec.*'
|
|
48
|
+
];
|
|
49
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AAEtC,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,cAAc;IACvB,KAAK,EAAE,YAAY;IACnB,YAAY,EAAE,mBAAmB;IACjC,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,gBAAgB;IAC3B,OAAO,EAAE,cAAc;IACvB,SAAS,EAAE,cAAc;IACzB,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,aAAa;IAC1B,QAAQ,EAAE,gBAAgB;CAClB,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,cAAc;IACd,mBAAmB;IACnB,gBAAgB;IAChB,WAAW;IACX,WAAW;IACX,eAAe;IACf,oBAAoB;IACpB,oBAAoB;IACpB,gBAAgB;IAChB,cAAc;IACd,kBAAkB;IAClB,aAAa;IACb,kBAAkB;IAClB,oBAAoB;IACpB,UAAU;IACV,UAAU;IACV,UAAU;IACV,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;IAClB,gBAAgB;IAChB,YAAY;IACZ,QAAQ;CACA,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,oBAAoB;IACpB,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,aAAa;IACb,gBAAgB;IAChB,aAAa;IACb,aAAa;CACL,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function exportToMarkdown(rootDir: string): Promise<string>;
|
|
2
|
+
export declare function exportToJSON(rootDir: string): Promise<object>;
|
|
3
|
+
export declare function saveExport(rootDir: string, format?: 'md' | 'json'): Promise<string>;
|
|
4
|
+
//# sourceMappingURL=exporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../src/core/exporter.ts"],"names":[],"mappings":"AAKA,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwKvE;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBnE;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,IAAI,GAAG,MAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAc/F"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { join } from 'path';
|
|
2
|
+
import { readJSON, writeMarkdown, writeJSON, fileExists } from '../utils/fs.js';
|
|
3
|
+
import { CONTEXT_DIR, CONTEXT_FILES } from '../constants.js';
|
|
4
|
+
export async function exportToMarkdown(rootDir) {
|
|
5
|
+
const contextDir = join(rootDir, CONTEXT_DIR);
|
|
6
|
+
let markdown = '# Project Context\n\n';
|
|
7
|
+
markdown += '> Generated by Prelude\n\n';
|
|
8
|
+
markdown += '---\n\n';
|
|
9
|
+
// Project metadata
|
|
10
|
+
const projectPath = join(contextDir, CONTEXT_FILES.PROJECT);
|
|
11
|
+
if (await fileExists(projectPath)) {
|
|
12
|
+
const project = await readJSON(projectPath);
|
|
13
|
+
markdown += '## 📋 Project Overview\n\n';
|
|
14
|
+
markdown += `**Name:** ${project.name}\n\n`;
|
|
15
|
+
markdown += `**Description:** ${project.description}\n\n`;
|
|
16
|
+
if (project.version)
|
|
17
|
+
markdown += `**Version:** ${project.version}\n\n`;
|
|
18
|
+
if (project.repository)
|
|
19
|
+
markdown += `**Repository:** ${project.repository}\n\n`;
|
|
20
|
+
if (project.license)
|
|
21
|
+
markdown += `**License:** ${project.license}\n\n`;
|
|
22
|
+
if (project.goals && project.goals.length > 0) {
|
|
23
|
+
markdown += '**Goals:**\n';
|
|
24
|
+
project.goals.forEach(goal => {
|
|
25
|
+
markdown += `- ${goal}\n`;
|
|
26
|
+
});
|
|
27
|
+
markdown += '\n';
|
|
28
|
+
}
|
|
29
|
+
markdown += '---\n\n';
|
|
30
|
+
}
|
|
31
|
+
// Stack information
|
|
32
|
+
const stackPath = join(contextDir, CONTEXT_FILES.STACK);
|
|
33
|
+
if (await fileExists(stackPath)) {
|
|
34
|
+
const stack = await readJSON(stackPath);
|
|
35
|
+
markdown += '## 🔧 Technology Stack\n\n';
|
|
36
|
+
markdown += `**Language:** ${stack.language}\n\n`;
|
|
37
|
+
if (stack.runtime)
|
|
38
|
+
markdown += `**Runtime:** ${stack.runtime}\n\n`;
|
|
39
|
+
if (stack.packageManager)
|
|
40
|
+
markdown += `**Package Manager:** ${stack.packageManager}\n\n`;
|
|
41
|
+
if (stack.frameworks && stack.frameworks.length > 0) {
|
|
42
|
+
markdown += '**Frameworks:**\n';
|
|
43
|
+
stack.frameworks.forEach(fw => {
|
|
44
|
+
markdown += `- ${fw}\n`;
|
|
45
|
+
});
|
|
46
|
+
markdown += '\n';
|
|
47
|
+
}
|
|
48
|
+
if (stack.testingFrameworks && stack.testingFrameworks.length > 0) {
|
|
49
|
+
markdown += '**Testing:**\n';
|
|
50
|
+
stack.testingFrameworks.forEach(tf => {
|
|
51
|
+
markdown += `- ${tf}\n`;
|
|
52
|
+
});
|
|
53
|
+
markdown += '\n';
|
|
54
|
+
}
|
|
55
|
+
if (stack.styling && stack.styling.length > 0) {
|
|
56
|
+
markdown += '**Styling:**\n';
|
|
57
|
+
stack.styling.forEach(s => {
|
|
58
|
+
markdown += `- ${s}\n`;
|
|
59
|
+
});
|
|
60
|
+
markdown += '\n';
|
|
61
|
+
}
|
|
62
|
+
if (stack.database)
|
|
63
|
+
markdown += `**Database:** ${stack.database}\n\n`;
|
|
64
|
+
if (stack.orm)
|
|
65
|
+
markdown += `**ORM:** ${stack.orm}\n\n`;
|
|
66
|
+
markdown += '---\n\n';
|
|
67
|
+
}
|
|
68
|
+
// Architecture
|
|
69
|
+
const archPath = join(contextDir, CONTEXT_FILES.ARCHITECTURE);
|
|
70
|
+
if (await fileExists(archPath)) {
|
|
71
|
+
const arch = await readJSON(archPath);
|
|
72
|
+
markdown += '## 🏗️ Architecture\n\n';
|
|
73
|
+
if (arch.type)
|
|
74
|
+
markdown += `**Type:** ${arch.type}\n\n`;
|
|
75
|
+
if (arch.routing)
|
|
76
|
+
markdown += `**Routing:** ${arch.routing}\n\n`;
|
|
77
|
+
if (arch.apiStyle)
|
|
78
|
+
markdown += `**API Style:** ${arch.apiStyle}\n\n`;
|
|
79
|
+
if (arch.patterns && arch.patterns.length > 0) {
|
|
80
|
+
markdown += '**Patterns:**\n';
|
|
81
|
+
arch.patterns.forEach(p => {
|
|
82
|
+
markdown += `- ${p}\n`;
|
|
83
|
+
});
|
|
84
|
+
markdown += '\n';
|
|
85
|
+
}
|
|
86
|
+
if (arch.directories && arch.directories.length > 0) {
|
|
87
|
+
markdown += '**Key Directories:**\n';
|
|
88
|
+
arch.directories.slice(0, 10).forEach(dir => {
|
|
89
|
+
markdown += `- \`${dir.path}\``;
|
|
90
|
+
if (dir.purpose)
|
|
91
|
+
markdown += ` - ${dir.purpose}`;
|
|
92
|
+
markdown += '\n';
|
|
93
|
+
});
|
|
94
|
+
markdown += '\n';
|
|
95
|
+
}
|
|
96
|
+
markdown += '---\n\n';
|
|
97
|
+
}
|
|
98
|
+
// Constraints
|
|
99
|
+
const constraintsPath = join(contextDir, CONTEXT_FILES.CONSTRAINTS);
|
|
100
|
+
if (await fileExists(constraintsPath)) {
|
|
101
|
+
const constraints = await readJSON(constraintsPath);
|
|
102
|
+
markdown += '## ⚠️ Constraints & Preferences\n\n';
|
|
103
|
+
if (constraints.mustUse && constraints.mustUse.length > 0) {
|
|
104
|
+
markdown += '**Must Use:**\n';
|
|
105
|
+
constraints.mustUse.forEach(item => {
|
|
106
|
+
markdown += `- ${item}\n`;
|
|
107
|
+
});
|
|
108
|
+
markdown += '\n';
|
|
109
|
+
}
|
|
110
|
+
if (constraints.mustNotUse && constraints.mustNotUse.length > 0) {
|
|
111
|
+
markdown += '**Must Not Use:**\n';
|
|
112
|
+
constraints.mustNotUse.forEach(item => {
|
|
113
|
+
markdown += `- ${item}\n`;
|
|
114
|
+
});
|
|
115
|
+
markdown += '\n';
|
|
116
|
+
}
|
|
117
|
+
if (constraints.codeStyle) {
|
|
118
|
+
markdown += '**Code Style:**\n';
|
|
119
|
+
if (constraints.codeStyle.formatter)
|
|
120
|
+
markdown += `- Formatter: ${constraints.codeStyle.formatter}\n`;
|
|
121
|
+
if (constraints.codeStyle.linter)
|
|
122
|
+
markdown += `- Linter: ${constraints.codeStyle.linter}\n`;
|
|
123
|
+
markdown += '\n';
|
|
124
|
+
}
|
|
125
|
+
if (constraints.testing) {
|
|
126
|
+
markdown += '**Testing Requirements:**\n';
|
|
127
|
+
markdown += `- Required: ${constraints.testing.required ? 'Yes' : 'No'}\n`;
|
|
128
|
+
if (constraints.testing.strategy)
|
|
129
|
+
markdown += `- Strategy: ${constraints.testing.strategy}\n`;
|
|
130
|
+
markdown += '\n';
|
|
131
|
+
}
|
|
132
|
+
markdown += '---\n\n';
|
|
133
|
+
}
|
|
134
|
+
// Decisions
|
|
135
|
+
const decisionsPath = join(contextDir, CONTEXT_FILES.DECISIONS);
|
|
136
|
+
if (await fileExists(decisionsPath)) {
|
|
137
|
+
const decisions = await readJSON(decisionsPath);
|
|
138
|
+
if (decisions.decisions && decisions.decisions.length > 0) {
|
|
139
|
+
markdown += '## 🧠 Key Decisions\n\n';
|
|
140
|
+
// Show most recent 5 decisions
|
|
141
|
+
const recentDecisions = decisions.decisions.slice(-5).reverse();
|
|
142
|
+
recentDecisions.forEach(decision => {
|
|
143
|
+
markdown += `### ${decision.title}\n\n`;
|
|
144
|
+
markdown += `**Status:** ${decision.status}\n\n`;
|
|
145
|
+
markdown += `**Rationale:** ${decision.rationale}\n\n`;
|
|
146
|
+
if (decision.alternatives && decision.alternatives.length > 0) {
|
|
147
|
+
markdown += '**Alternatives Considered:**\n';
|
|
148
|
+
decision.alternatives.forEach(alt => {
|
|
149
|
+
markdown += `- ${alt}\n`;
|
|
150
|
+
});
|
|
151
|
+
markdown += '\n';
|
|
152
|
+
}
|
|
153
|
+
if (decision.impact)
|
|
154
|
+
markdown += `**Impact:** ${decision.impact}\n\n`;
|
|
155
|
+
markdown += '---\n\n';
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
markdown += '\n*End of context export*\n';
|
|
160
|
+
return markdown;
|
|
161
|
+
}
|
|
162
|
+
export async function exportToJSON(rootDir) {
|
|
163
|
+
const contextDir = join(rootDir, CONTEXT_DIR);
|
|
164
|
+
const exportData = {};
|
|
165
|
+
// Read all context files
|
|
166
|
+
const files = [
|
|
167
|
+
{ key: 'project', file: CONTEXT_FILES.PROJECT },
|
|
168
|
+
{ key: 'stack', file: CONTEXT_FILES.STACK },
|
|
169
|
+
{ key: 'architecture', file: CONTEXT_FILES.ARCHITECTURE },
|
|
170
|
+
{ key: 'constraints', file: CONTEXT_FILES.CONSTRAINTS },
|
|
171
|
+
{ key: 'decisions', file: CONTEXT_FILES.DECISIONS }
|
|
172
|
+
];
|
|
173
|
+
for (const { key, file } of files) {
|
|
174
|
+
const filePath = join(contextDir, file);
|
|
175
|
+
if (await fileExists(filePath)) {
|
|
176
|
+
exportData[key] = await readJSON(filePath);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return exportData;
|
|
180
|
+
}
|
|
181
|
+
export async function saveExport(rootDir, format = 'md') {
|
|
182
|
+
const contextDir = join(rootDir, CONTEXT_DIR);
|
|
183
|
+
if (format === 'md') {
|
|
184
|
+
const markdown = await exportToMarkdown(rootDir);
|
|
185
|
+
const exportPath = join(contextDir, CONTEXT_FILES.EXPORT_MD);
|
|
186
|
+
await writeMarkdown(exportPath, markdown);
|
|
187
|
+
return exportPath;
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
const json = await exportToJSON(rootDir);
|
|
191
|
+
const exportPath = join(contextDir, CONTEXT_FILES.EXPORT_JSON);
|
|
192
|
+
await writeJSON(exportPath, json);
|
|
193
|
+
return exportPath;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=exporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exporter.js","sourceRoot":"","sources":["../../../src/core/exporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Project, Stack, Architecture, Constraints } from '../schema/index.js';
|
|
2
|
+
export declare function inferProjectMetadata(rootDir: string): Promise<Project>;
|
|
3
|
+
export declare function inferStack(rootDir: string): Promise<Stack>;
|
|
4
|
+
export declare function inferArchitecture(rootDir: string): Promise<Architecture>;
|
|
5
|
+
export declare function inferConstraints(rootDir: string): Promise<Constraints>;
|
|
6
|
+
//# sourceMappingURL=infer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infer.d.ts","sourceRoot":"","sources":["../../../src/core/infer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAmHpF,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAyD5E;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAsShE;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAsK9E;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAkL5E"}
|